diff options
author | Jason Le Long <jasonnlelong@gmail.com> | 2018-03-24 22:26:36 +0000 |
---|---|---|
committer | Jason Le Long <jasonnlelong@gmail.com> | 2018-03-24 22:26:36 +0000 |
commit | aa2c21887a6169868711bd35511d183245eec4f6 (patch) | |
tree | 8db7f596912a1741ed249392304d97f38ef12c1d | |
parent | f60534b37431068775b0913687a5be11159cd180 (diff) |
First working build for V2
-rw-r--r-- | sassbot/modules/artifact2-0/Combat.py | 160 | ||||
-rw-r--r-- | sassbot/modules/artifact2-0/Enemy.py | 78 | ||||
-rw-r--r-- | sassbot/modules/artifact2-0/Items.py | 211 | ||||
-rw-r--r-- | sassbot/modules/artifact2-0/LevelUp.py | 38 | ||||
-rw-r--r-- | sassbot/modules/artifact2-0/PlayerAdventuring.py | 1 | ||||
-rw-r--r-- | sassbot/modules/artifact2-0/PlayerCreate.py | 68 | ||||
-rw-r--r-- | sassbot/modules/artifact2-0/PlayerDeath.py | 34 | ||||
-rw-r--r-- | sassbot/modules/artifact2-0/PlayerStats.py | 47 | ||||
-rw-r--r-- | sassbot/modules/artifact2-0/Resting.py | 201 | ||||
-rw-r--r-- | sassbot/modules/artifact2-0/__init__.py | 0 |
10 files changed, 838 insertions, 0 deletions
diff --git a/sassbot/modules/artifact2-0/Combat.py b/sassbot/modules/artifact2-0/Combat.py new file mode 100644 index 0000000..155f4c8 --- /dev/null +++ b/sassbot/modules/artifact2-0/Combat.py @@ -0,0 +1,160 @@ +#Python modules
+import MySQLdb
+import math
+import re
+import sys
+import random
+
+#Artifact Modules
+sys.path.insert(0, '/home/bouncer/sassbot/modules/artifact2-0/')
+import PlayerStats
+import Items
+import Enemy
+import PlayerDeath
+
+def PlayerInCombat(phenny, parameters, playerStats, strCmd1, strCmd2):
+ enemyStats={}
+ db = MySQLdb.connect(host="localhost", user=phenny.config.mysql_username, passwd=phenny.config.mysql_password,db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+
+ playerStats = PlayerStats.RefreshStats(phenny, parameters)
+ enemyStats = Enemy.GetStats(phenny, parameters, enemyStats)
+ strAttackLog = '\x0399'
+
+ # Attack
+ if strCmd1 == 'a' or strCmd1 == 'attack':
+ # Players attack
+ strAttackLog = strAttackLog + PerformAttack(phenny, playerStats, enemyStats, parameters)
+
+ if enemyStats['HP'] < 1:
+ strAttackLog = strAttackLog + "The \03" + str(enemyStats['EnemyColor']) + enemyStats['EnemyName'] + "\0399 falls to the floor. "
+ c.execute("UPDATE `Players` SET `State`='Rest', `RestedHeal`=0, `ChallengeRating`=`ChallengeRating`+0.1 WHERE `Nick`=%s;",(parameters["Nick"]));db.commit();
+
+ if random.randint(1, 3) == 1 and enemyStats['Class'] == 'Minor':
+ # Equipment Drop
+ itemGen = Items.GenerateEquipment(phenny, parameters, "0:0:0:0:0")
+ Items.AddToInventory(phenny, parameters, itemGen)
+ strAttackLog = strAttackLog + "You obtained a " + itemGen['RarityColor'] + " " + itemGen['EquipmentName'] + "\x0399. "
+
+ # Rare drops
+ elif enemyStats['Class'] == 'Rare':
+ #
+ # REQUIRES REWRITE
+ #
+ if enemyStats['Unlock'] == 'Chaos':
+ c.execute("SELECT `EquipmentName`, `EquipmentSlot`, `EquipmentType`, `HandsReq`, `Locked`, `Scaling`, `Strength`, `Dexterity`, `Constitution`, `Intelligence`, `Dodge`, `Crit`, `Armor`, `Requirement` FROM `Items_Master` WHERE `Requirement`='Chaos'")
+ sqlItem = c.fetchone()
+ c.execute("INSERT INTO `Items_PlayerInventory` (`Nick`,`Equipped`,`EquipmentColor`,`EquipmentName`,`EquipmentSlot`,`EquipmentType`,`Permanent`,`Scaling`,`HandsReq`,`Strength`,`Dexterity`,`Constitution`,`Intelligence`,`Dodge`,`Crit`,`Armor`) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);", (parameters['Nick'], 0, 06, sqlItem['EquipmentName'], sqlItem['EquipmentSlot'],
+ sqlItem['EquipmentType'], 0, sqlItem['Scaling'],
+ sqlItem['HandsReq'], sqlItem['Strength'], sqlItem['Dexterity'],
+ sqlItem['Constitution'], sqlItem['Intelligence'], sqlItem['Dodge'],
+ sqlItem['Crit'], sqlItem['Armor']));
+ db.commit();
+ #TEMP FIX - add a better solution to clearing the enemies
+ c.execute("DELETE FROM `CombatEnemy` WHERE `Nick`=%s", (parameters["Nick"]));db.commit();
+ return "\x0399You acquire a \x0306Shard of Chaos\x0399 from the remains of the enemy."
+
+ # LootDrop
+ if random.randint(1, 1) == 1:
+ strItemName, intItemPotency = Items.CreateItem(phenny, enemyStats, playerStats, parameters)
+ strAttackLog = strAttackLog + "You got " + str(intItemPotency) + " " + strItemName + ". "
+ c.execute("UPDATE `Players` SET `Currency`=`Currency`+%s WHERE `Nick`=%s;",(intItemPotency, parameters["Nick"]));db.commit();
+
+ c.execute("DELETE FROM `CombatEnemy` WHERE `Nick`=%s", (parameters["Nick"]));
+ db.commit();
+ # Attempt to restock shop
+ if random.randint(1, 2) == 1:
+ strAttackLog = strAttackLog + "The shop has been restocked. "
+ c.execute("DELETE FROM `PlayerShop` WHERE `Nick`=%s", (parameters["Nick"]));db.commit();
+
+ intItemsAdded = 0
+ intItemsToAdd = random.randint(2,4)
+
+ while intItemsAdded < intItemsToAdd:
+ Items.AddToShop(phenny, parameters, Items.GenerateEquipment(phenny, parameters, '0:0:0:0:1'))
+ intItemsAdded += 1
+
+ #Unlock boss items
+ if enemyStats['Unlock'] is not 'Default' and enemyStats['Class'] is 'Boss':
+ c.execute("SELECT COUNT(`Requirement`) AS `Requirement` FROM `Items_PlayerPool` INNER JOIN `Items_Master` ON `Items_PlayerPool`.`EquipmentName` = `Items_Master`.`EquipmentName` WHERE `Nick`=%s and `Requirement`=%s",(parameters['Nick'], enemyStats['Unlock']))
+ sqlUnlockCheck = c.fetchone()
+ if str(sqlUnlockCheck['Requirement']) == '0':
+ UnlockItems(phenny, parameters, str(enemyStats['Unlock']))
+ return "Additional items will now begin appearing"
+
+ playerStats = PlayerStats.RefreshStats(phenny, parameters)
+ if playerStats['ChallengeRating'] == int(math.ceil(playerStats['ChallengeRating'] / 1) * 1):
+ c.execute("UPDATE `Players` SET `AttributePoints`=2 WHERE `Nick`=%s;", (parameters["Nick"]));db.commit();
+ strAttackLog = strAttackLog + "You have gained 2 attribute points"
+ else:
+ # Enemys attack
+ strAttackLog = strAttackLog + PerformAttack(phenny, enemyStats, playerStats, parameters)
+
+ if playerStats['HP'] <= 0:
+ strAttackLog = strAttackLog + "You died. "
+ PlayerDeath.CharacterDeath(phenny, playerStats, parameters)
+
+ return "\0399" + strAttackLog
+
+ # flee
+ elif strCmd1.lower() == 'f' or strCmd1.lower() == 'flee':
+ if random.randint(1, 3) == 1:
+ return FleeCombat(phenny, parameters)
+ else:
+ return "You failed to escape. " + PerformAttack(phenny, enemyStats, playerStats, parameters)
+ if playerStats['HP'] <= 0:
+ PlayerDeath.CharacterDeath(phenny, playerStats, parameters)
+ return "You were struck down as you attempted to flee. You died."
+
+ # Admin commands
+ elif strCmd1.lower() == 'admin' and input.admin:
+ return PerformAttack(phenny, playerStats, enemyStats, parameters["Nick"])
+ else:
+ return "\0399Available commands: (a)ttack, (f)lee"
+
+
+def PerformAttack(phenny, attackerStats, defenderStats, parameters):
+ db = MySQLdb.connect(host="localhost", user=phenny.config.mysql_username, passwd=phenny.config.mysql_password,db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+
+ # determine if attacker hits
+ if random.randint(0, 100) < int(defenderStats['DodgePercentage']):
+ db.close()
+ if attackerStats['UnitType'] == 'Player':
+ return "You miss. "
+ elif attackerStats['UnitType'] == 'Enemy':
+ return "You dodge the \03" + str(attackerStats['EnemyColor']) + attackerStats['EnemyName'] + "\0399's attack. "
+
+ if random.randint(0,100) < int(defenderStats['BlockPercentage']):
+ db.close()
+ if attackerStats['UnitType'] == 'Player':
+ return "The enemy blocks your attack. "
+ elif attackerStats['UnitType'] == 'Enemy':
+ return "You block the \03" + str(attackerStats['EnemyColor']) + attackerStats['EnemyName'] + "\0399's attack. "
+
+ #Calculate total damage caused
+ intAttackerDamage = int(float(attackerStats['Strength']) + random.uniform(float(attackerStats['Strength']) * -0.2,float(attackerStats['Strength']) * 0.2))
+
+ #Apply Armor reduction
+ intAttackerDamage = int(math.ceil(intAttackerDamage - (intAttackerDamage * defenderStats['ArmorPercentage'] / 100.0)))
+
+ # Determine if the attacker is going to crit
+ strCrit = 'did'
+ if random.randint(0, 100) < attackerStats['CritPercentage']:
+ intAttackerDamage = intAttackerDamage * 2
+ strCrit = 'CRIT'
+
+ # Update defender health
+ defenderStats['HP'] = defenderStats['HP'] - intAttackerDamage
+ if defenderStats['UnitType'] == 'Enemy':
+ c.execute("UPDATE `CombatEnemy` SET `HP`=%s WHERE `Nick`=%s;", (defenderStats['HP'], parameters['Nick']));db.commit();
+ elif defenderStats['UnitType'] == 'Player':
+ c.execute("UPDATE `Players` SET `HP`=%s WHERE `Nick`=%s;", (defenderStats['HP'], parameters['Nick']));db.commit();
+
+ db.close()
+
+ if attackerStats['UnitType'] == 'Player':
+ return "You " + strCrit + " " + str(intAttackerDamage) + " damage. "
+ elif attackerStats['UnitType'] == 'Enemy':
+ return "The \03" + str(attackerStats['EnemyColor']) + attackerStats[
+ 'EnemyName'] + "\0399 " + strCrit + " " + str(intAttackerDamage) + " damage. "
\ No newline at end of file diff --git a/sassbot/modules/artifact2-0/Enemy.py b/sassbot/modules/artifact2-0/Enemy.py new file mode 100644 index 0000000..1d55941 --- /dev/null +++ b/sassbot/modules/artifact2-0/Enemy.py @@ -0,0 +1,78 @@ +import MySQLdb
+import math
+import random
+
+def Create(phenny, enemyStats, playerStats, parameters):
+ db = MySQLdb.connect(host="localhost", user=phenny.config.mysql_username, passwd=phenny.config.mysql_password,db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+
+ # Update player state for combat
+ c.execute("UPDATE `Players` SET `State`='Combat' WHERE `Nick`=%s;", (parameters['Nick']));db.commit();
+
+ if playerStats['ChallengeRating'] == int(math.ceil(playerStats['ChallengeRating'] / 4) * 4):
+ # Get total unluck enemy weighting
+ c.execute("SELECT SUM(`EnemyWeight`) AS `EnemyWeight` FROM `GenEnemy` WHERE `Locked`=0 AND `Class`='Boss'")
+ intTotalWeight = random.randint(1, int(c.fetchone()['EnemyWeight']))
+
+ #Get Boss
+ c.execute("SELECT `EnemyColor`, `EnemyName`, `Season`, `Class`, `Unlock`, `HP`, `Locked`, `EnemyWeight`, `ChallengeRating`, `GoldCarried`, `Strength`, `Dexterity`, `Constitution`, `Intelligence`, `Dodge`, `Crit` "+
+ "FROM `GenEnemy` WHERE `Locked`=0 AND `Class`='Boss'")
+ else:
+ # Get total unluck enemy weighting
+ c.execute("SELECT SUM(`EnemyWeight`) AS `EnemyWeight` FROM `GenEnemy` WHERE `Locked`=0 AND `Class`='Rare' OR `Locked`=0 AND `Class`='Minor'")
+ intTotalWeight = random.randint(1, int(c.fetchone()['EnemyWeight']))
+
+ #Get enemy
+ c.execute("SELECT `EnemyColor`, `EnemyName`, `Season`, `Class`, `Unlock`, `HP`, `Locked`, `EnemyWeight`, `ChallengeRating`, `GoldCarried`, `Strength`, `Dexterity`, `Constitution`, `Intelligence`, `Dodge`, `Crit` "+
+ "FROM `GenEnemy` WHERE `Locked`=0 AND `Class`='Rare' OR "+
+ "`Locked`=0 AND `Class`='Minor'")
+ enemyStats = c.fetchone()
+
+ while True:
+ intTotalWeight = intTotalWeight - enemyStats['EnemyWeight']
+ if intTotalWeight <= 0:
+ break
+ else:
+ enemyStats = c.fetchone()
+
+ #Apply challenge rating modifier to enemy
+ intChallengeModifier = 2
+ enemyStats['HP'] = int(math.ceil(enemyStats['HP'] * playerStats['ChallengeRating']/intChallengeModifier))
+ enemyStats['GoldCarried'] = int(math.ceil(enemyStats['GoldCarried'] * playerStats['ChallengeRating']/intChallengeModifier))
+ enemyStats['Strength'] = int(math.ceil(enemyStats['Strength'] * playerStats['ChallengeRating']/intChallengeModifier))
+ enemyStats['Dexterity'] = int(math.ceil(enemyStats['Dexterity'] * playerStats['ChallengeRating']/intChallengeModifier))
+ enemyStats['Constitution'] = int(math.ceil(enemyStats['Constitution'] * playerStats['ChallengeRating']/intChallengeModifier))
+ enemyStats['Intelligence'] = int(math.ceil(enemyStats['Intelligence'] * playerStats['ChallengeRating']/intChallengeModifier))
+
+ #Create entity in database
+ c.execute("INSERT INTO CombatEnemy(`EnemyColor`,`EnemyName`,`Season`,`Class`,`Nick`,`HP`,`Strength`,`Dexterity`,`Constitution`,`Intelligence`,`GoldCarried`,`Unlock`) VALUES ('"+
+ str(enemyStats['EnemyColor'])+"','"+str(enemyStats['EnemyName'])+"','"+str(enemyStats['Season'])+"','"+str(enemyStats['Class'])+"','"+parameters['Nick']+"','"+str(enemyStats['HP'])+"','"+str(enemyStats['Strength'])+"','"+str(enemyStats['Dexterity'])+"','"+str(enemyStats['Constitution'])+"','"+str(enemyStats['Intelligence'])+"','"+str(enemyStats['GoldCarried'])+"','"+str(enemyStats['Unlock'])+"')");db.commit();
+
+ #Cleanup
+ db.close()
+ return enemyStats
+
+def GetStats(phenny, parameters, enemyStats):
+ db = MySQLdb.connect(host="localhost", user=phenny.config.mysql_username, passwd=phenny.config.mysql_password,db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+ c.execute("SELECT `EnemyColor`,`EnemyName`, `Class`, `Season`, `Unlock`,`HP`,`GoldCarried`,`Strength`,`Dexterity`,`Constitution`,`Intelligence`,`GoldCarried`, `Dodge`, `Crit` FROM `CombatEnemy` WHERE `Nick`=%s",parameters['Nick'])
+ sqlEnemy = c.fetchone()
+ enemyStats['EnemyColor'] = sqlEnemy['EnemyColor']
+ enemyStats['EnemyName'] = sqlEnemy['EnemyName']
+ enemyStats['Class'] = sqlEnemy['Class']
+ enemyStats['Season'] = sqlEnemy['Season']
+ enemyStats['Unlock'] = sqlEnemy['Unlock']
+ enemyStats['HP'] = sqlEnemy['HP']
+ enemyStats['GoldCarried'] = sqlEnemy['GoldCarried']
+ enemyStats['Strength'] = sqlEnemy['Strength']
+ enemyStats['Dexterity'] = sqlEnemy['Dexterity']
+ enemyStats['Constitution'] = sqlEnemy['Constitution']
+ enemyStats['Intelligence'] = sqlEnemy['Intelligence']
+ enemyStats['DodgePercentage'] = sqlEnemy['Dodge']
+ enemyStats['CritPercentage'] = sqlEnemy['Crit']
+ enemyStats['ArmorPercentage'] = 0
+ enemyStats['UnitType'] = 'Enemy'
+ enemyStats['BlockPercentage'] = 0
+ db.close()
+
+ return enemyStats
\ No newline at end of file diff --git a/sassbot/modules/artifact2-0/Items.py b/sassbot/modules/artifact2-0/Items.py new file mode 100644 index 0000000..7841d7d --- /dev/null +++ b/sassbot/modules/artifact2-0/Items.py @@ -0,0 +1,211 @@ +import MySQLdb
+import random
+
+def GenerateEquipment(phenny, parameters, itemCode):
+ db = MySQLdb.connect(host="localhost", user=phenny.config.mysql_username, passwd=phenny.config.mysql_password,db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+ intIteration=0
+ itemName=strRaritySpacing='';
+
+
+ itemCode = itemCode.split(':')
+
+ #Generate Rarity
+ itemGenRarity = CreateEquipmentRarity(phenny, parameters, itemCode[0])
+
+ #Generate Item
+ itemGenEquipment = CreateEquipmentName(phenny, parameters, itemCode[1])
+ itemGenEquipment['FabledPrefix'] = ''
+
+ #Generate Enchantment
+ itemGenEnchantment = CreateEquipmentEnchantment(phenny, parameters, itemCode[2], int(itemGenRarity["ID"]))
+
+ #Generate Element
+ itemGenElement = CreateEquipmentElement(phenny, parameters, itemCode[3], int(itemGenRarity["ID"]))
+
+ #Attempt creating an Artifact
+ itemGenEquipment = CreateEquipmentArtifact(phenny, parameters, itemGenEquipment, itemCode[4])
+
+ strRaritySpacing = "" if len(itemGenRarity['RarityName']) == 0 else " "
+
+
+
+ itemGen={}
+ itemGen['RarityColor'] = "\x03"+itemGenRarity['RarityColor']
+ itemGen['EquipmentName'] = (itemGenEquipment['FabledPrefix'] +
+ itemGenRarity['RarityName'] +
+ strRaritySpacing +
+ ("" if itemGenElement == {} else itemGenElement['EffectName'] + " ") +
+ itemGenEquipment['EquipmentName'] + " " +
+ ("" if itemGenEnchantment == {} else itemGenEnchantment['Name'] + " "))
+
+ itemGen['EquipmentSlot'] = itemGenEquipment['EquipmentSlot']
+ itemGen['EquipmentType'] = itemGenEquipment['EquipmentType']
+ itemGen['HandsReq'] = itemGenEquipment['HandsReq']
+ itemGen['Strength'] = itemGenEquipment['Strength']
+ itemGen['Dexterity'] = itemGenEquipment['Dexterity']
+ itemGen['Constitution'] = itemGenEquipment['Constitution']
+ itemGen['Intelligence'] = itemGenEquipment['Intelligence']
+ itemGen['Dodge'] = itemGenEquipment['Dodge']
+ itemGen['Crit'] = itemGenEquipment['Crit']
+ itemGen['Armor'] = itemGenEquipment['Armor']
+ itemGen['Precision'] = itemGenEquipment['Precision']
+ itemGen['Resistance'] = itemGenEquipment['Resistance']
+ itemGen['Luck'] = itemGenEquipment['Luck']
+ itemGen['Block'] = itemGenEquipment['Block']
+ itemGen['Permanent'] = itemGenEquipment['Permanent']
+
+ itemGen['Cost'] = (itemGenEquipment['Cost'] +
+ (0 if itemGenElement == {} else itemGenElement['Cost']) +
+ (0 if itemGenEnchantment == {} else itemGenEnchantment['Cost']) +
+ (0 if itemGenRarity == {} else itemGenRarity['RarityCost']))
+
+ return itemGen
+
+def CreateEquipmentName(phenny, parameters, itemCode):
+ db = MySQLdb.connect(host="localhost", user=phenny.config.mysql_username, passwd=phenny.config.mysql_password,db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+ itemGenEquipment = {}
+
+
+ #Item by ID
+ if int(itemCode) is not 0:
+ c.execute("SELECT `EquipmentName`,`EquipmentSlot`,`EquipmentType`,`HandsReq`,`Strength`,`Dexterity`,`Constitution`,`Intelligence`,`Dodge`,`Crit`,`Armor`,`Precision`,`Resistance`,`Luck`,`Block` FROM `Items_Master` WHERE `ID` = " + str(itemCode))
+ itemGenEquipment = c.fetchone()
+
+ #Item by Random
+ elif int(itemCode) is 0:
+ #UPDATE: Should be able to generate an available weapon with just one query
+ # Pick random item that is available to the player
+ c.execute("SELECT `Items_PlayerPool`.`Nick`, `Items_PlayerPool`.`EquipmentName`, `Items_Master`.`Locked` FROM `Items_PlayerPool` INNER JOIN `Items_Master` ON `Items_PlayerPool`.`EquipmentName` = `Items_Master`.`EquipmentName` WHERE `Nick`=%s AND `Locked`=0 ORDER BY RAND() LIMIT 1",parameters['Nick'])
+ sqlItemPlayer = c.fetchone()
+
+ # Get information from randomly picked weapon
+ c.execute("SELECT `EquipmentName`, `EquipmentSlot`, `EquipmentType`, `HandsReq`, `Strength`, `Dexterity`, `Constitution`, `Intelligence`, `Dodge`, `Crit`, `Armor`, `Precision`, `Resistance`, `Luck`, `Block` FROM `Items_Master` WHERE `EquipmentName`=%s",sqlItemPlayer['EquipmentName'])
+ itemGenEquipment = c.fetchone()
+
+ itemGenEquipment['Permanent'] = 0
+ itemGenEquipment['Cost'] = 100
+ return itemGenEquipment
+
+def CreateEquipmentElement(phenny, parameters, itemCode, RarityID):
+ db = MySQLdb.connect(host="localhost", user=phenny.config.mysql_username, passwd=phenny.config.mysql_password,db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+
+ if random.randint(1, 3) is 1 or RarityID <= 3:
+ itemGenElement = {}
+ else:
+ if int(itemCode) is not 0:
+ c.execute("SELECT `EffectName`, `Strength`, `Dexterity`, `Constitution`, `Intelligence`, `Dodge`, `Crit`, `Armor` FROM `GenElement` WHERE `ID` = %s",itemCode)
+ itemGenElement = c.fetchone()
+ elif int(itemCode) is 0:
+ c.execute("SELECT `EffectName`, `Strength`, `Dexterity`, `Constitution`, `Intelligence`, `Dodge`, `Crit`, `Armor` FROM `GenElement` ORDER BY RAND() LIMIT 1")
+ itemGenElement = c.fetchone()
+
+ itemGenElement['Cost'] = 200
+ return itemGenElement
+
+def CreateEquipmentRarity(phenny, parameters, itemCode):
+ db = MySQLdb.connect(host="localhost", user=phenny.config.mysql_username, passwd=phenny.config.mysql_password,db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+ itemGenRarity = {}
+ if int(itemCode) is not 0:
+ c.execute("SELECT `ID`,`RarityName`,`RarityColor`,`RarityModifier`,`RarityChance`,`RarityCost` FROM `GenRarity` WHERE `ID` = " + str(itemCode))
+ itemGenRarity = c.fetchone()
+ elif int(itemCode) is 0:
+ # Obtain sum of all rarities
+ c.execute("SELECT SUM(`RarityChance`) AS RarityTotal FROM `GenRarity`")
+ intRarityTotal = c.fetchone()['RarityTotal']
+
+ # Variable declaration
+ intIteration = 0
+ intRandom = random.randint(1, intRarityTotal)
+
+ while True:
+ intIteration = intIteration + 1
+
+ # Obtain Rarity in order of lowest to highest with each iteration
+ c.execute("SELECT `ID`,`RarityName`,`RarityColor`,`RarityModifier`,`RarityChance`,`RarityCost` FROM `GenRarity` WHERE `ID` = " + str(intIteration))
+ itemGenRarity = c.fetchone()
+
+ # Subtract the current iterations rarity from the random roll
+ # If intRandom becomes negative, our item rarity has been found. End the loop.
+ intRandom = intRandom - itemGenRarity['RarityChance']
+ if intRandom <= 0:
+ break
+ return itemGenRarity
+ db.close()
+
+def CreateEquipmentEnchantment(phenny, parameters, itemCode, RarityID):
+ db = MySQLdb.connect(host="localhost", user=phenny.config.mysql_username, passwd=phenny.config.mysql_password,db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+
+ if random.randint(1, 3) is 1 or RarityID <= 2:
+ itemGenEnchantment = {}
+ else:
+ if int(itemCode) is not 0:
+ c.execute("SELECT `Name`,`Strength`,`Dexterity`,`Constitution`,`Intelligence`,`Dodge`, `Crit`, `Armor` FROM `GenEnchantment` WHERE `ID` = %s", str(itemCode))
+ itemGenEnchantment = c.fetchone()
+ elif int(itemCode) is 0:
+ c.execute("SELECT `Name`,`Strength`,`Dexterity`,`Constitution`,`Intelligence`,`Dodge`, `Crit`, `Armor` FROM `GenEnchantment` ORDER BY RAND() LIMIT 1")
+ itemGenEnchantment = c.fetchone()
+
+ itemGenEnchantment['Cost'] = 200
+ return itemGenEnchantment
+
+def CreateEquipmentArtifact(phenny, parameters, itemGenEquipment, itemCode):
+ db = MySQLdb.connect(host="localhost", user=phenny.config.mysql_username, passwd=phenny.config.mysql_password,db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+
+ # Gen for Artifact item:
+ # 0 - Will attempt to add an artifact randomly and not exceed the standard limit
+ if random.randint(1, 100) == 1 and int(itemCode) == 0:
+ if itemGenEquipment['EquipmentType'] == 'Armor' or itemGenEquipment['EquipmentType'] == 'Weapon':
+ c.execute("SELECT COUNT(`Permanent`) AS `Artifacts` FROM `Items_PlayerInventory` WHERE `Nick`=%s AND `Permanent`=1;",parameters['Nick'])
+ sqlCountArtifacts = c.fetchone()
+ if sqlCountArtifacts['Artifacts'] < 2:
+ itemGenEquipment['FabledPrefix'] = 'Fabled '
+ itemGenEquipment['Permanent'] = 1
+ # 1 - Will not generate item as an artifact
+ elif int(itemCode) == 1:
+ itemGenEquipment['FabledPrefix'] = ''
+
+ # 2 - Will force the item to become an artifact and exceed the limit of 2 artifacts
+ elif int(itemCode) == 2:
+ if itemGenEquipment['EquipmentType'] == 'Armor' or itemGenEquipment['EquipmentType'] == 'Weapon':
+ c.execute("SELECT COUNT(`Permanent`) AS `Artifacts` FROM `Items_PlayerInventory` WHERE `Nick`=%s AND `Permanent`=1;",parameters['Nick'])
+ sqlCountArtifacts = c.fetchone()
+ itemGenEquipment['FabledPrefix'] = 'Fabled '
+ itemGenEquipment['Permanent'] = 1
+ return itemGenEquipment
+
+def CreateItem(phenny, enemyStats, playerStats, parameters):
+ import random
+ db = MySQLdb.connect(host="localhost", user=phenny.config.mysql_username, passwd=phenny.config.mysql_password,db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+
+ # Get random element
+ c.execute("SELECT `LootName`,`ItemType`,`Potency` FROM `GenLoot` WHERE `Locked`=0 ORDER BY RAND() LIMIT 1")
+ sqlRarity = c.fetchone()
+ strLootName = sqlRarity['LootName']
+ strItemType = sqlRarity['ItemType']
+ intPotency = sqlRarity['Potency']
+
+ if strItemType == 'Quantity':
+ intPotency = enemyStats['GoldCarried'] + int(
+ random.uniform(float(enemyStats['GoldCarried']) * -0.3, float(enemyStats['GoldCarried']) * 0.3))
+
+ db.close()
+ return strLootName, intPotency
+
+def AddToShop(phenny, parameters, item):
+ db = MySQLdb.connect(host="localhost", user=phenny.config.mysql_username, passwd=phenny.config.mysql_password,db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+ c.execute("""INSERT INTO `PlayerShop` (`Nick`,`Cost`,`Equipped`,`EquipmentColor`,`EquipmentName`,`EquipmentSlot`,`EquipmentType`,`Permanent`,`HandsReq`,`Strength`,`Dexterity`,`Constitution`,`Intelligence`,`Dodge`,`Crit`,`Armor`) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);""", (parameters['Nick'], item['Cost'], 0, item['RarityColor'], item['EquipmentName'], item['EquipmentSlot'], item['EquipmentType'],item['Permanent'], item['HandsReq'], item['Strength'], item['Dexterity'], item['Constitution'], item['Intelligence'], item['Dodge'], item['Crit'], item['Armor']));db.commit();
+ return
+
+def AddToInventory(phenny, parameters, item):
+ db = MySQLdb.connect(host="localhost", user=phenny.config.mysql_username, passwd=phenny.config.mysql_password,db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+ c.execute("""INSERT INTO `Items_PlayerInventory` (`EquipmentColor`,`EquipmentName`,`EquipmentSlot`,`EquipmentType`,`Permanent`,`HandsReq`,`Equipped`,`Strength`,`Dexterity`,`Constitution`,`Intelligence`,`Dodge`,`Crit`,`Armor`,`Nick`) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);""", (item['RarityColor'], item['EquipmentName'], item['EquipmentSlot'], item['EquipmentType'],item['Permanent'], item['HandsReq'], 0, item['Strength'], item['Dexterity'], item['Constitution'], item['Intelligence'], item['Dodge'], item['Crit'], item['Armor'],parameters['Nick']));db.commit();
+ return
\ No newline at end of file diff --git a/sassbot/modules/artifact2-0/LevelUp.py b/sassbot/modules/artifact2-0/LevelUp.py new file mode 100644 index 0000000..74e0acf --- /dev/null +++ b/sassbot/modules/artifact2-0/LevelUp.py @@ -0,0 +1,38 @@ +import MySQLdb
+import sys
+sys.path.insert(0, '/home/bouncer/sassbot/modules/artifact2-0/')
+import PlayerStats
+
+def LevelUpAttributes(phenny, parameters, strCmd1, strCmd2):
+ db = MySQLdb.connect(host='localhost', user=phenny.config.mysql_username, passwd=phenny.config.mysql_password, db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+
+ #In the event no valid value is given, assume the points to assign will be 1
+ try:
+ strCmd2 = int(strCmd2)
+ except ValueError:
+ strCmd2 = 1
+
+ #Get players attribute points
+ c.execute("SELECT `AttributePoints` FROM `Players` WHERE `Nick`=%s;", (parameters["Nick"]))
+ sqlAttibutes = c.fetchone()
+
+ #Prevent over-allocation
+ if int(strCmd2) > sqlAttibutes['AttributePoints']:
+ return "You cannot apply more points than you have."
+
+ #Attribute allocation
+ else:
+ if strCmd1.lower() == 's':
+ c.execute("UPDATE `Players` SET `Strength`=`Strength`+%s, `AttributePoints`=`AttributePoints`-%s WHERE `Nick`=%s;",(strCmd2, strCmd2, parameters["Nick"]));db.commit();
+ elif strCmd1.lower() == 'd':
+ c.execute("UPDATE `Players` SET `Dexterity`=`Dexterity`+%s, `AttributePoints`=`AttributePoints`-%s WHERE `Nick`=%s;",(strCmd2, strCmd2, parameters["Nick"]));db.commit();
+ elif strCmd1.lower() == 'c':
+ c.execute("UPDATE `Players` SET `Constitution`=`Constitution`+%s, `AttributePoints`=`AttributePoints`-%s WHERE `Nick`=%s;",(strCmd2, strCmd2, parameters["Nick"]));db.commit();
+ elif strCmd1.lower() == 'i':
+ c.execute("UPDATE `Players` SET `Intelligence`=`Intelligence`+%s, `AttributePoints`=`AttributePoints`-%s WHERE `Nick`=%s;",(strCmd2, strCmd2, parameters["Nick"]));db.commit();
+
+ playerStats = PlayerStats.RefreshStats(phenny, parameters)
+
+ c.execute("UPDATE `Players` SET `HP`=%s WHERE `Nick`=%s;", (playerStats['MaxHP'], parameters["Nick"]));db.commit();
+ return "\0399Attribute Points: " + str(playerStats['AttributePoints']) + " (S)tr:" + str(playerStats['Strength']) + " (D)ex:" + str(playerStats['Dexterity']) + " (C)on:" + str(playerStats['Constitution']) + " (I)nt:" + str(playerStats['Intelligence'])
\ No newline at end of file diff --git a/sassbot/modules/artifact2-0/PlayerAdventuring.py b/sassbot/modules/artifact2-0/PlayerAdventuring.py new file mode 100644 index 0000000..f0f05c9 --- /dev/null +++ b/sassbot/modules/artifact2-0/PlayerAdventuring.py @@ -0,0 +1 @@ +# Embedded file name: /home/bouncer/sassbot/modules/artifact2-0/PlayerAdventuring.py
\ No newline at end of file diff --git a/sassbot/modules/artifact2-0/PlayerCreate.py b/sassbot/modules/artifact2-0/PlayerCreate.py new file mode 100644 index 0000000..6a30d6c --- /dev/null +++ b/sassbot/modules/artifact2-0/PlayerCreate.py @@ -0,0 +1,68 @@ +# Embedded file name: /home/bouncer/sassbot/modules/artifact2-0/PlayerCreate.py
+import PlayerStats
+import MySQLdb
+
+def PickCharacterClan(phenny, parameters, strCmd1):
+ db = MySQLdb.connect(host='localhost', user=phenny.config.mysql_username, passwd=phenny.config.mysql_password, db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+ if strCmd1 is '':
+ return '\x0399Name your Clan.'
+ elif len(strCmd1) < 3:
+ return 'Your Clan name must be at least three characters.'
+ else:
+ c.execute('INSERT INTO `Players` (`Nick`,`ClanName`,`State`) VALUES (%s,%s,%s);', (parameters['Nick'], strCmd1, 'CreationName'))
+ db.commit()
+ return '\x0399The adventure for the ' + strCmd1 + ' clan begins.'
+
+
+def PickCharacterName(phenny, parameters, playerStats, strCmd1):
+ db = MySQLdb.connect(host='localhost', user=phenny.config.mysql_username, passwd=phenny.config.mysql_password, db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+ if strCmd1 is '':
+ return 'Give yourself a name.'
+ elif len(strCmd1) < 3:
+ return 'Your name must be at least three characters.'
+ else:
+ c.execute('UPDATE `Players` SET `CharacterName`=%s, `Alive`=1, `State`=%s WHERE `Nick`=%s;', (strCmd1, 'CreationRace', parameters['Nick']))
+ db.commit()
+ c.execute('SELECT COUNT(`Requirement`) AS `Requirement` FROM `Items_PlayerPool` INNER JOIN `Items_Master` ON `Items_PlayerPool`.`EquipmentName` = `Items_Master`.`EquipmentName` WHERE `Nick`=%s and `Requirement`=%s', (parameters['Nick'], 'Default'))
+ sqlUnlockCheck = c.fetchone()
+ if str(sqlUnlockCheck['Requirement']) == '0':
+ UnlockItems(phenny, parameters, 'Default')
+ return 'You are ' + strCmd1 + ' ' + playerStats['ClanName'] + '. Pick a race: (H)uman, (O)rc, (E)lf, (D)warf, (L)izardman'
+
+
+def PickCharacterRace(phenny, parameters, playerStats, strCmd1):
+ db = MySQLdb.connect(host='localhost', user=phenny.config.mysql_username, passwd=phenny.config.mysql_password, db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+ strRaceSelected = None
+ if strCmd1.lower() == 'h':
+ strRaceSelected = 'Human'
+ elif strCmd1.lower() == 'o':
+ strRaceSelected = 'Orc'
+ elif strCmd1.lower() == 'e':
+ strRaceSelected = 'Elf'
+ elif strCmd1.lower() == 'd':
+ strRaceSelected = 'Dwarf'
+ elif strCmd1.lower() == 'l':
+ strRaceSelected = 'Lizardman'
+ else:
+ return 'Pick a race: (H)uman, (O)rc, (E)lf, (D)warf, (L)izardman'
+ if strRaceSelected is not None:
+ c.execute('SELECT `Strength`, `Dexterity`, `Constitution`, `Intelligence`, `Dodge`, `Crit`, `Armor` FROM `LK_Races` WHERE `Race` = %s;', strRaceSelected)
+ sqlRaceStats = c.fetchone()
+ c.execute("UPDATE `Players` SET `Strength`=%s, `Dexterity`=%s, `Constitution`=%s, `Intelligence`=%s, `Dodge`=%s, `Crit`=%s, `Armor`=%s, `State`='Rest' WHERE `Nick`=%s;", (sqlRaceStats['Strength'],
+ sqlRaceStats['Dexterity'],
+ sqlRaceStats['Constitution'],
+ sqlRaceStats['Intelligence'],
+ sqlRaceStats['Dodge'],
+ sqlRaceStats['Crit'],
+ sqlRaceStats['Armor'],
+ parameters['Nick']))
+ db.commit()
+ playerStats = PlayerStats.RefreshStats(phenny, parameters)
+ c.execute('UPDATE `Players` SET `HP`=%s WHERE `Nick`=%s;', (playerStats['MaxHP'], parameters['Nick']))
+ db.commit()
+ return playerStats['CharacterName'] + ' ' + playerStats['ClanName'] + ' the ' + strRaceSelected + ' begins their adventure'
+ else:
+ return
\ No newline at end of file diff --git a/sassbot/modules/artifact2-0/PlayerDeath.py b/sassbot/modules/artifact2-0/PlayerDeath.py new file mode 100644 index 0000000..9c3df41 --- /dev/null +++ b/sassbot/modules/artifact2-0/PlayerDeath.py @@ -0,0 +1,34 @@ +import time
+import MySQLdb
+
+
+def CharacterDeath(phenny, playerStats, parameters):
+ db = MySQLdb.connect(host="localhost", user=phenny.config.mysql_username, passwd=phenny.config.mysql_password,db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+ dbIRC = MySQLdb.connect(host="localhost", user=phenny.config.mysql_username, passwd=phenny.config.mysql_password,db='IRC')
+ cIRC = dbIRC.cursor(MySQLdb.cursors.DictCursor)
+
+ # Collect total items lost on death
+ c.execute("SELECT COUNT(`EquipmentName`) AS EquipmentName FROM `Items_PlayerInventory` WHERE `Nick`=%s AND `Permanent`=0;",parameters['Nick'])
+ sqlEquipmentCount = c.fetchone()['EquipmentName']
+
+ # Create death entry
+ cIRC.execute("INSERT INTO `ArtifactsGraveyard` (`Nick`,`CharacterName`,`ClanName`,`ItemsLost`,`ChallengeRating`,`VersionDied`) VALUES (%s,%s,%s,%s,%s,%s);",(parameters['Nick'], playerStats['CharacterName'], playerStats['ClanName'], sqlEquipmentCount,playerStats['ChallengeRating'], '1.3.1'));dbIRC.commit();
+
+ # Delete players Inventory
+ c.execute("DELETE FROM `Items_PlayerInventory` WHERE `Nick`=%s AND `Permanent`=0;", (str(parameters['Nick'])));db.commit();
+
+ # Delete players opponent
+ c.execute("DELETE FROM `CombatEnemy` WHERE `Nick`=%s;", (str(parameters['Nick'])));db.commit();
+
+ # Delete players shop
+ c.execute("DELETE FROM `PlayerShop` WHERE `Nick`=%s;", (str(parameters['Nick'])));db.commit();
+
+ # Update player record for new character
+ c.execute("UPDATE `Players` SET `State`='CreationName', `Alive`=0, `RestedHeal`=0, `HP`=1, `AttributePoints`=0, `Strength`=8, `Dexterity`=8, `Constitution`=8, `Intelligence`=8, `ChallengeRating`=1, `XP`=0, `XPToLevel`=200 WHERE `Nick`=%s;",(parameters['Nick']));db.commit();
+
+ # Lose gold on death
+ c.execute("UPDATE `Players` SET `Currency`=`Currency`/2 WHERE `Nick`=%s;", (parameters['Nick']));db.commit();
+
+ dbIRC.close()
+ db.close()
\ No newline at end of file diff --git a/sassbot/modules/artifact2-0/PlayerStats.py b/sassbot/modules/artifact2-0/PlayerStats.py new file mode 100644 index 0000000..39c919e --- /dev/null +++ b/sassbot/modules/artifact2-0/PlayerStats.py @@ -0,0 +1,47 @@ +# Embedded file name: /home/bouncer/sassbot/modules/artifact2-0/PlayerStats.py
+import sys
+import math
+import MySQLdb
+sys.path.insert(0, '/home/bouncer/sassbot/modules/artifact2-0/')
+import Calculate
+
+def PrintStats(phenny, input, parameters):
+ playerStats = {}
+ playerStats = RefreshStats(phenny, parameters)
+ return '\x0399' + playerStats['CharacterName'] + ' ' + playerStats['ClanName'] + ' has ' + str(playerStats['HP']) + '/' + str(playerStats['MaxHP']) + ' HP, ' + str(playerStats['Strength']) + ' STR, ' + str(playerStats['Dexterity']) + ' DEX, ' + str(playerStats['Constitution']) + ' CON, ' + str(playerStats['Intelligence']) + ' INT and you have ' + str(playerStats['Currency']) + ' gold. Challenge rating: ' + str(playerStats['ChallengeRating']) + '. ' + str(playerStats['DodgePercentage']) + '% Dodge, ' + str(playerStats['CritPercentage']) + '% Crit, ' + str(playerStats['ArmorPercentage']) + '% Armor, ' + str(playerStats['PrecisionPercentage']) + '% Precision, ' + str(playerStats['ResistancePercentage']) + '% Resistance, ' + str(playerStats['Luck']) + ' Luck, ' + str(playerStats['BlockPercentage']) + '% Block'
+
+
+def RefreshStats(phenny, parameters):
+ db = MySQLdb.connect(host='localhost', user=phenny.config.mysql_username, passwd=phenny.config.mysql_password, db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+ c.execute('SELECT `Nick`,`ClanName`,`Currency`,`State`,`CharacterName`,`Alive`,`ChallengeRating`,`RestedHeal`,`HP`,`AttributePoints`,`Strength`,`Dexterity`,`Constitution`,`Intelligence` FROM `Players` WHERE `Nick` = %s;', parameters['Nick'])
+ sqlPlayerBase = c.fetchone()
+ c.execute('SELECT `Nick`, SUM(`HandsReq`) AS HandsReq, SUM(`Strength`) AS Strength, SUM(`Dexterity`) AS Dexterity, SUM(`Constitution`) AS Constitution, SUM(`Intelligence`) AS Intelligence, SUM(`Crit`) AS Crit, SUM(`Dodge`) AS Dodge, SUM(`Armor`) AS Armor,SUM(`Precision`) AS `Precision`,SUM(`Resistance`) AS Resistance,SUM(`Luck`) AS Luck,SUM(`Block`) AS Block from \n (\n select `Nick`,0 AS `HandsReq`,`Strength`,`Dexterity`,`Constitution`,`Intelligence`,`Crit`,`Dodge`,`Armor`, `Precision`, `Resistance`, `Luck`, `Block` from `Players` \n union all \n select `Nick`,`HandsReq`,`Strength`,`Dexterity`,`Constitution`,`Intelligence`,`Crit`,`Dodge`,`Armor`, `Precision`, `Resistance`, `Luck`, `Block` from `Items_PlayerInventory` where `Equipped`=1 ) x \n WHERE `Nick`=%s group by `Nick`', parameters['Nick'])
+ sqlPlayerStats = c.fetchone()
+ playerStats = {}
+ if c.rowcount:
+ playerStats['Nick'] = sqlPlayerBase['Nick']
+ playerStats['Currency'] = sqlPlayerBase['Currency']
+ playerStats['ClanName'] = sqlPlayerBase['ClanName']
+ playerStats['CharacterName'] = sqlPlayerBase['CharacterName']
+ playerStats['State'] = sqlPlayerBase['State']
+ playerStats['Alive'] = sqlPlayerBase['Alive']
+ playerStats['ChallengeRating'] = sqlPlayerBase['ChallengeRating']
+ playerStats['RestedHeal'] = sqlPlayerBase['RestedHeal']
+ playerStats['HP'] = sqlPlayerBase['HP']
+ playerStats['MaxHP'] = int(math.ceil((float(sqlPlayerStats['Constitution']) + float(sqlPlayerStats['Constitution']) / 1.75) * 2))
+ playerStats['AttributePoints'] = sqlPlayerBase['AttributePoints']
+ playerStats['HandsReq'] = sqlPlayerStats['HandsReq']
+ playerStats['UnitType'] = 'Player'
+ playerStats['Strength'] = sqlPlayerStats['Strength']
+ playerStats['Dexterity'] = sqlPlayerStats['Dexterity']
+ playerStats['Constitution'] = sqlPlayerStats['Constitution']
+ playerStats['Intelligence'] = sqlPlayerStats['Intelligence']
+ playerStats['DodgePercentage'] = Calculate.DiminishingReturns(sqlPlayerStats['Dodge'] + int(math.ceil(sqlPlayerStats['Dexterity'] / 2)), 25, 15)
+ playerStats['CritPercentage'] = Calculate.DiminishingReturns(sqlPlayerStats['Crit'] + int(math.ceil(sqlPlayerStats['Dexterity'] / 2)), 25, 15)
+ playerStats['ArmorPercentage'] = Calculate.DiminishingReturns(sqlPlayerStats['Armor'], 25, 0)
+ playerStats['PrecisionPercentage'] = Calculate.DiminishingReturns(sqlPlayerStats['Precision'], 25, 0)
+ playerStats['ResistancePercentage'] = Calculate.DiminishingReturns(sqlPlayerStats['Resistance'], 25, 0)
+ playerStats['Luck'] = sqlPlayerStats['Luck']
+ playerStats['BlockPercentage'] = sqlPlayerStats['Block']
+ return playerStats
\ No newline at end of file diff --git a/sassbot/modules/artifact2-0/Resting.py b/sassbot/modules/artifact2-0/Resting.py new file mode 100644 index 0000000..b495587 --- /dev/null +++ b/sassbot/modules/artifact2-0/Resting.py @@ -0,0 +1,201 @@ +#Python modules
+import MySQLdb
+import math
+import re
+import sys
+
+#Artifact Modules
+sys.path.insert(0, '/home/bouncer/sassbot/modules/artifact2-0/')
+import PlayerStats
+import Enemy
+
+def PlayerResting(phenny, parameters, playerStats, strCmd1, strCmd2):
+ db = MySQLdb.connect(host='localhost', user=phenny.config.mysql_username, passwd=phenny.config.mysql_password, db=parameters['LiveDB'])
+ c = db.cursor(MySQLdb.cursors.DictCursor)
+
+ # Inventory
+ if strCmd1.lower() == 'i' or strCmd1.lower() == 'inventory':
+ try:
+ strCmd2 = int(strCmd2)
+ except ValueError:
+ strCmd2 = 1
+
+ c.execute("SELECT COUNT(ID) AS `ID` FROM `Items_PlayerInventory` WHERE `Nick`=%s", (parameters["Nick"]))
+ sqlSumResult = c.fetchone()
+ intTotalPages = int(math.ceil(float(sqlSumResult["ID"]) / float(5)))
+
+ c.execute("SELECT `ID`,`Equipped`,`EquipmentColor`,`EquipmentName`,`HandsReq` FROM `Items_PlayerInventory` WHERE `Nick` = %s LIMIT 5 OFFSET %s;",(parameters["Nick"], (int(strCmd2) * 5) - 5))
+ sqlItem = c.fetchall()
+
+ if int(strCmd2) > 0 and int(strCmd2) <= intTotalPages:
+ phenny.write(('NOTICE', parameters["Nick"]), "Page " + str(strCmd2) + " of " + str(intTotalPages) + ". ( http://lexicade.uk/artifact.php?nick=" + parameters["Nick"] + " )")
+ for row in sqlItem:
+ strEquipped = 'Equipped ' if str(row["Equipped"]) == '1' else 'Unequipped'
+ strHands = "--" if str(row["HandsReq"]) == '0' else str(row["HandsReq"]) + "H"
+
+ phenny.write(('NOTICE', parameters["Nick"]),str(row["ID"]) + " " + strEquipped + " " + strHands + "\x03" + str(row["EquipmentColor"]) + " " + str(row["EquipmentName"]) + "\0399")
+
+ # Equip
+ elif strCmd1.lower() == 'e' or strCmd1.lower() == 'equip':
+ if playerStats['State'] == 'Rest':
+ # Check to unequip
+ if strCmd2 == 'u' or strCmd2 == 'unequip':
+ c.execute("UPDATE `Items_PlayerInventory` SET `Equipped`=0 WHERE `Nick`=%s;", (parameters["Nick"]));db.commit();
+ return "All items have been unequipped."
+
+ # Check to see if an ID was supplied
+ elif re.match("^[0-9]+$", strCmd2):
+ c.execute("SELECT `ID`,`Nick`,`EquipmentColor`,`EquipmentSlot`,`EquipmentType`,`EquipmentName`,`Equipped`,`HandsReq` FROM `Items_PlayerInventory` WHERE `Nick`=%s AND `ID`=%s",(parameters["Nick"], strCmd2))
+ sqlItem = c.fetchone()
+ if sqlItem is not None:
+ EquipmentID = sqlItem['ID']
+ EquipmentNick = sqlItem['Nick']
+ EquipmentSlot = sqlItem['EquipmentSlot']
+ EquipmentType = sqlItem['EquipmentType']
+ EquipmentName = sqlItem['EquipmentName']
+ EquipmentColor = sqlItem['EquipmentColor']
+ EquipmentEquipped = sqlItem['Equipped']
+ EquipmentHandsReq = sqlItem['HandsReq']
+
+ # If selected item is weapon
+ if EquipmentType == 'Weapon':
+
+ c.execute("SELECT sum(`HandsReq`) AS `HandsReq` FROM `Items_PlayerInventory` WHERE `Nick`=%s AND `EquipmentType`='Weapon' AND `Equipped`=1",(parameters["Nick"]))
+ sqlHandsUsed = c.fetchone()
+ if sqlHandsUsed["HandsReq"] is None:
+ intHandsUsed = 0
+ else:
+ intHandsUsed = sqlHandsUsed["HandsReq"]
+
+ if int(intHandsUsed) + EquipmentHandsReq <= 2 and EquipmentEquipped == 0:
+ c.execute("UPDATE `Items_PlayerInventory` SET `Equipped`=1 WHERE `ID`=%s and `Nick`=%s;",(strCmd2, parameters["Nick"]));db.commit();
+ return "\0399Equipping your \03" + str(EquipmentColor) + EquipmentName + "\0399."
+ elif EquipmentEquipped == 1:
+ c.execute("UPDATE `Items_PlayerInventory` SET `Equipped`=0 WHERE `ID`=%s and `Nick`=%s;",(strCmd2, parameters["Nick"]));db.commit();
+ return "\0399Unequipping your \03" + str(EquipmentColor) + EquipmentName + "\0399."
+ else:
+ return "You can only wield one two-handed weapon, or two one-handed weapons."
+
+ # If selected item is Armor
+ elif EquipmentType == 'Armor':
+ c.execute("SELECT `ID`,`EquipmentType`,`EquipmentSlot` FROM `Items_PlayerInventory` WHERE `Nick`=%s AND `EquipmentType`='Armor' AND `EquipmentSlot`=%s AND `Equipped`=1 GROUP BY `EquipmentType`",(parameters["Nick"], EquipmentSlot))
+ sqlArmor = c.fetchone()
+ if sqlArmor is None:
+ c.execute("UPDATE `Items_PlayerInventory` SET `Equipped`=1 WHERE `ID`=%s and `Nick`=%s;",(strCmd2, parameters["Nick"]));db.commit();
+ return "\0399Equipping your \03" + str(EquipmentColor) + EquipmentName + "\0399."
+
+ elif sqlArmor['ID'] == EquipmentID:
+ strArmorID = sqlArmor['ID']
+ strArmorType = sqlArmor['EquipmentType']
+ strArmorHands = sqlArmor['EquipmentSlot']
+ c.execute("UPDATE `Items_PlayerInventory` SET `Equipped`=0 WHERE `ID`=%s and `Nick`=%s;",(strCmd2, parameters["Nick"]));db.commit();
+ return "\0399Unequipping your \03" + str(EquipmentColor) + EquipmentName + "\0399."
+
+ else:
+ return "\0399You already have an item in this slot."
+
+ # All other checks failed, print help message
+ else:
+ return "Available commands: e (u)nequip all, e <ID to equip/unequip>"
+ else:
+ return "You must rest before changing your equipment."
+
+ # Destroy
+ elif strCmd1.lower() == 'd' or strCmd1.lower() == 'destroy':
+ if re.match("^[0-9]+$", strCmd2):
+ c.execute("SELECT `ID`,`Nick`,`EquipmentColor`,`EquipmentSlot`,`EquipmentType`,`EquipmentName`,`Equipped`,`HandsReq` FROM `Items_PlayerInventory` WHERE `Nick`=%s AND `ID`=%s",(parameters["Nick"], strCmd2))
+ sqlItem = c.fetchone()
+ itemName = sqlItem['EquipmentName']
+ itemColor = sqlItem['EquipmentColor']
+ if sqlItem is not None:
+ c.execute("DELETE FROM `Items_PlayerInventory` WHERE `Nick`=%s AND `ID`=%s",(parameters["Nick"], strCmd2));db.commit();
+ return "Your \x03" + str(itemColor) + itemName + "\x0399 has been destroyed."
+
+ # Battle
+ elif strCmd1.lower() == 'b' or strCmd1.lower() == 'battle':
+ enemyStats = {}
+ if playerStats['ChallengeRating'] == int(math.ceil(playerStats['ChallengeRating'] / 4) * 4):
+ enemyStats = Enemy.Create(phenny, enemyStats, playerStats, parameters)
+ return "\0399Your fighting has caught the attention of the \03" + str(enemyStats['EnemyColor'])+enemyStats['EnemyName'] + "\0399."
+ else:
+ enemyStats = Enemy.Create(phenny, enemyStats, playerStats, parameters)
+ return "\0399You've been attacked by \03" + str(enemyStats['EnemyColor']) + enemyStats['EnemyName'] + "\0399."
+
+ # Character
+ elif strCmd1.lower() == 'c' or strCmd1.lower() == 'character':
+ PlayerStats.RefreshStats(phenny, parameters)
+ return PlayerStats.PrintStats(phenny, input, parameters)
+
+ # Shop
+ elif strCmd1.lower() == 's' or strCmd1.lower() == 'shop':
+ if strCmd2 is '':
+ c.execute("SELECT `ID`,`Cost`,`EquipmentColor`,`EquipmentName` FROM `PlayerShop` WHERE `Nick`=%s",parameters["Nick"])
+ sqlShopItem = c.fetchone()
+ while sqlShopItem is not None:
+ phenny.write(('NOTICE', parameters["Nick"]), str(sqlShopItem['ID']) + " \03" + sqlShopItem['EquipmentColor'] + sqlShopItem['EquipmentName'] + "\0399 " + str(sqlShopItem['Cost']) + " gold")
+ # phenny.reply("\03"+sqlShopItem['EquipmentColor']+sqlShopItem['EquipmentName']+"\0399 "+str(sqlShopItem['Cost'])+" gold")
+ sqlShopItem = c.fetchone()
+ else:
+ c.execute("SELECT `ID`,`Cost` FROM `PlayerShop` WHERE `ID`=%s and `Nick`=%s",(strCmd2, parameters["Nick"]))
+ sqlItemBought = c.fetchone()
+ if sqlItemBought is None:
+ return "\0399The shopkeep doesn't know what item you ask for."
+
+ elif playerStats['Currency'] < sqlItemBought['Cost']:
+ return "You cannot afford this item."
+
+ else:
+
+
+
+ c.execute("SELECT `Nick`,`Cost`,`EquipmentColor`,`EquipmentName`,`EquipmentSlot`,`EquipmentType`,`HandsReq`,`Strength`,`Dexterity`,`Constitution`,`Intelligence`,`Dodge`,`Crit`,`Armor`, `Precision`, `Resistance`, `Luck`, `Block` FROM `PlayerShop` WHERE `ID`=%s",strCmd2)
+ sqlItemBought = c.fetchone()
+ c.execute("INSERT INTO `Items_PlayerInventory` (`Nick`,`Equipped`,`EquipmentColor`,`EquipmentName`,`EquipmentSlot`,`EquipmentType`,`HandsReq`,`Strength`,`Dexterity`,`Constitution`,`Intelligence`,`Dodge`,`Crit`,`Armor`, `Precision`, `Resistance`, `Luck`, `Block`) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);", (
+ parameters["Nick"], 0, sqlItemBought['EquipmentColor'], sqlItemBought['EquipmentName'],sqlItemBought['EquipmentSlot'], sqlItemBought['EquipmentType'],
+ sqlItemBought['HandsReq'], sqlItemBought['Strength'], sqlItemBought['Dexterity'],sqlItemBought['Constitution'], sqlItemBought['Intelligence'],
+ sqlItemBought['Dodge'], sqlItemBought['Crit'],sqlItemBought['Armor'],sqlItemBought['Precision'],sqlItemBought['Resistance'],sqlItemBought['Luck'],sqlItemBought['Block']));db.commit();
+ c.execute("DELETE FROM `PlayerShop` WHERE `Nick`=%s and `ID`=%s",(str(parameters["Nick"]), strCmd2));db.commit();
+ c.execute("UPDATE `Players` SET `Currency`=`Currency`-%s WHERE `Nick`=%s;",(sqlItemBought['Cost'], parameters["Nick"]));db.commit();
+ return "\0399The \03" + sqlItemBought['EquipmentColor'] + sqlItemBought['EquipmentName'] + "\0399 has been added to your inventory."
+
+ # Heal
+ elif strCmd1.lower() == 'r' or strCmd1.lower() == 'rest':
+ playerStats = PlayerStats.RefreshStats(phenny, parameters)
+ intHPGained = int(math.ceil(playerStats['MaxHP'] / 2))
+
+ if playerStats['RestedHeal'] == 0:
+ if playerStats['HP'] >= playerStats['MaxHP']:
+ return "\0399You rest. You are already at max HP."
+
+ elif intHPGained + playerStats['HP'] > playerStats['MaxHP']:
+ intHPGained = playerStats['MaxHP']
+ c.execute("UPDATE `Players` SET `HP`=%s, `RestedHeal`=1 WHERE `Nick`=%s;",(intHPGained, parameters["Nick"]));db.commit();
+ return "\0399You rest and your wounds heal completely."
+
+ elif playerStats['HP'] < playerStats['MaxHP']:
+ c.execute("UPDATE `Players` SET `HP`=`HP`+%s, `RestedHeal`=1 WHERE `Nick`=%s;",(intHPGained, parameters["Nick"]));db.commit();
+ return "\0399You rest and you recover " + str(intHPGained) + " HP."
+ else:
+ return "\0399You rest."
+
+ # DEBUG - CREATE WEAPON
+ elif strCmd1.lower() == 'z':
+ itemCode = input.group(2)[2:].split(':')
+ #phenny.say(str(itemCode[0])+str(itemCode[1])+str(itemCode[2])+str(itemCode[3]))
+ return GenerateItem.CreateItem(phenny, parameters, itemCode)
+
+ # Version
+ elif strCmd1.lower() == 'v' or strCmd1.lower() == 'version':
+ return "Version 1.3 - Notes can be found at: http://www.lexicade.uk/dev.php?view=patchnotes"
+
+ # Admin commands
+ elif strCmd1.lower() == 'genitem' and input.admin:
+ GenEquipment(phenny, itemGenEquipment, parameters, 'Items_PlayerPool')
+
+ # Death
+ elif strCmd1.lower() == 'suicide':
+ CharacterDeath(phenny, playerStats, parameters)
+ return "You committed suicide."
+
+ else:
+ return "\0399Available commands: (i)nventory, (e)quip, (b)attle, (c)haracter, (s)hop, (r)est, (v)ersion, (d)estroy."
\ No newline at end of file diff --git a/sassbot/modules/artifact2-0/__init__.py b/sassbot/modules/artifact2-0/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/sassbot/modules/artifact2-0/__init__.py |