import array as arr from evennia.utils import evtable _GENERAL_SKILL_LEVEL_DESCRIPTIONS = { 1: "Inept", 2: "Mediocre", 3: "Mediocre", 4: "Average", 5: "Average", 6: "Rather skilled", 7: "Rather skilled", 8: "Well trained", 9: "Well trained", 10: "Expert" } _WEAPON_SKILL_LEVEL_DESCRIPTIONS = { 1: "Astoundingly bad", 2: "Astoundingly bad", 3: "Clumsy", 4: "Unskilled", 5: "Novice", 6: "Veteran", 7: "Expert", 8: "Master", 9: "Master", 10: "Wizard" } _SKILL_COST = { 1: { "Easy": 1, "Average": 2, "Hard": 4, "Very Hard": 8 }, 2: { "Easy": 2, "Average": 4, "Hard": 8, "Very Hard": 12 }, 3: { "Easy": 4, "Average": 8, "Hard": 12, "Very Hard": 16 }, 4: { "Easy": 8, "Average": 12, "Hard": 16, "Very Hard": 20 }, 5: { "Easy": 12, "Average": 16, "Hard": 20, "Very Hard": 24 }, 7: { "Easy": 16, "Average": 20, "Hard": 24, "Very Hard": 28 }, 8: { "Easy": 20, "Average": 24, "Hard": 28, "Very Hard": 32 }, 9: { "Easy": 24, "Average": 28, "Hard": 32, "Very Hard": 36 }, 10: { "Easy": 28, "Average": 32, "Hard": 36, "Very Hard": 40 } } _SKILL_DATA = { # Animal Skills 1: { "Name": "Animal Handling", "Category": "Animal Skills", "Difficulty": "Hard", "Attribute": "Mental", "Defaults": { "IQ": 6 }, "Prerequisite": 0, "Subskills": [3, 5], "Description": "This is the ability to train and work with all types of animals" }, 2: { "Name": "Falconry", "Category": "Animal Skills", "Difficulty": "Average", "Attribute": "Mental", "Defaults": { "IQ": 5 }, "Prerequisite": 0, "Subskills": [0], "Description": "Hunting small game with a trained hawk" }, 3: { "Name": "Packing", "Category": "Animal Skills", "Difficulty": "Hard", "Attribute": "Mental", "Prerequisite": 1, "Subskills": [0], "Defaults": { "IQ": 6, 1: 6 }, "Description": "Ability to efficiently and speedily get loads on and off pack animals" }, 4: { "Name": "Riding", "Category": "Animal Skills", "Difficulty": "Average", "Attribute": "Physical", "Prerequisite": 0, "Subskills": [0], "Defaults": { "DX": 5, 1: 3 }, "Description": "Riding tamed animals suited for travel" }, 5: { "Name": "Teamster", "Category": "Animal Skills", "Difficulty": "Average", "Attribute": "Physical", "Prerequisite": 1, "Subskills": [0], "Defaults": { 1: 4, 4: 2 }, "Description": "Skill of driving and harnessing teams/herds of animals, such as a wagon or gun teams" }, 6: { "Name": "Veterinary", "Category": "Animal Skills", "Difficulty": "Hard", "Attribute": "Mental", "Prerequisite": 0, "Subskills": [0], "Defaults": { 0: { "Typename": "Animal", "Roll": 5, "Create": "Specify the name of the animal species you are able to care for/doctor" } }, "Description": "Skill at caring for sick or wounded animals" }, # Artistic skills 7: { "Name": "Artist", "Category": "Artistic Skills", "Difficulty": "Hard", "Attribute": "Mental", "Prerequisite": 0, "Subskills": [0], "Defaults": { "IQ": 6 }, "Prerequisite": 0, "Description": "Ability to paint and draw with both accuracy and beauty" }, 8: { "Name": "Bard", "Category": "Artistic Skills", "Difficulty": "Average", "Attribute": "Mental", "Defaults": { "IQ": 5 }, "Prerequisite": 0, "Subskills": [0], "Description": "Ability to tell stories and to speak extemporaneously" }, 9: { "Name": "Musical Instrument", "Category": "Artistic Skills", "Difficulty": "Hard", "Attribute": "Mental", "Defaults": { 0: { "Typename": "Instrument", "Roll": 3, "Create": "Specify the name of the instrument you are able to play" } }, "Prerequisite": 0, "Subskills": [0], "Description": "Skill at playing a specific instrument" }, # Athletic skills 10: { "Name": "Acrobatics", "Category": "Athletic Skills", "Difficulty": "Hard", "Attribute": "Physical", "Defaults": { "DX": 6 }, "Prerequisite": 0, "Subskills": [0], "Description": "The art of pulling off acrobatic and gymnastic stunts, roll, take falls, balance and so on" }, 11: { "Name": "Jumping", "Category": "Athletic Skills", "Difficulty": "Easy", "Attribute": "Physical", "Defaults": 0, "Prerequisite": 0, "Subskills": [0], "Description": "This is the trained ability to use your strength to its best advantage when you jump" }, 12: { "Name": "Running", "Category": "Athletic Skills", "Difficulty": "Hard", "Attribute": "Physical", "Defaults": { "Special": { 0: "Self", 1: "Divide", 2: 8, 3: "Add", 4: "Move" } }, "Prerequisite": 0, "Subskills": [0], "Description": "This represents training in sprints and long distance running" }, 13: { "Name": "Swimming", "Category": "Arhletic Skills", "Difficulty": "Easy", "Attribute": "Physical", "Defaults": { "ST": 5, "DX": 4 }, "Prerequisite": 0, "Subskills": [0], "Description": "Ability to stay afloat and swim in water" } } def skillTable(caller, category, excludeCharacterSkills = True): table = evtable.EvTable("#", "Skill name", "Attribute", "Difficulty", "Description") for key in _SKILL_DATA: if not excludeCharacterSkills: if _SKILL_DATA[key]["Category"] == category: table.add_row( key, _SKILL_DATA[key]["Name"], _SKILL_DATA[key]["Attribute"], _SKILL_DATA[key]["Difficulty"], _SKILL_DATA[key]["Description"] ) else: if _SKILL_DATA[key]["Category"] == category and key not in caller.db.skills: table.add_row( key, _SKILL_DATA[key]["Name"], _SKILL_DATA[key]["Attribute"], _SKILL_DATA[key]["Difficulty"], _SKILL_DATA[key]["Description"] ) return table def idInCategory(caller, category, number): legitimateValues = [] for key in _SKILL_DATA: if _SKILL_DATA[key]["Category"] == category: legitimateValues.append(key) if number in legitimateValues: return True else: return False def getSkillName(skillId): return _SKILL_DATA[skillId]["Name"] def addSkill(caller, skillId): cost = getSkillCost(skillId) caller.db.skills.append(skillId) caller.db.attribpoints = caller.db.attribpoints - cost caller.db.skillevel[skillId] = 1 def addSkillTypeName(caller, skillId, typeName): caller.db.skillproperties[skillId] = typeName def characterSkills(caller): table = evtable.EvTable("#", "Skill name", "Level", "Attribute", "Difficulty", "Description") for key in caller.db.skills: table.add_row( key, _SKILL_DATA[key]["Name"], "%i |w%s|n" % (caller.db.skillevel[key], getSkillDescription(caller.db.skillevel[key])), _SKILL_DATA[key]["Attribute"], _SKILL_DATA[key]["Difficulty"], _SKILL_DATA[key]["Description"] ) return table def skillInCharacter(caller, skillId): for key in caller.db.skills: if key == skillId: return True return False def removeFromCharacter(caller, skillId): for key in caller.db.skills: if skillId == _SKILL_DATA[key]["Prerequisite"]: return False level = caller.db.skillevel[skillId] gain = getSkillCost(skillId, level) caller.db.skills.remove(skillId) caller.db.attribpoints = caller.db.attribpoints + gain caller.db.skillevel[skillId] = 0 caller.db.skillproperties[skillId] = 0 return True def checkPrerequisite(caller, skillId): if _SKILL_DATA[skillId]["Prerequisite"] == 0: return True elif _SKILL_DATA[skillId]["Prerequisite"] > 0 and _SKILL_DATA[skillId]["Prerequisite"] in caller.db.skills: return True return False def prerequisiteName(caller, skillId): if _SKILL_DATA[skillId]["Prerequisite"] > 0: prerequisiteId = _SKILL_DATA[skillId]["Prerequisite"] return _SKILL_DATA[prerequisiteId]["Name"] return None def requiredByName(caller, skillId): skillNames = [] for key in _SKILL_DATA[skillId]["Subskills"]: for keyid in caller.db.skills: if keyid == key: skillNames.append(getSkillName(key)) return skillNames def hasTypes(caller, skillId): if 0 in _SKILL_DATA[skillId]["Defaults"]: return True return False def getTypeDescription(skillId): return _SKILL_DATA[skillId]["Defaults"][0]["Create"] def getTypenameOfSkill(skillId): return _SKILL_DATA[skillId]["Defaults"][0]["Typename"] def getSkillCost(skillId, level = 1): return _SKILL_COST[level][_SKILL_DATA[skillId]["Difficulty"]] def getSkillDescription(level, sType = "Generic"): if sType == "Generic": return _GENERAL_SKILL_LEVEL_DESCRIPTIONS[level] else: return _WEAPON_SKILL_LEVEL_DESCRIPTIONS[level]