Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- A basic skills system
- A lambda or function can be used to calculate the bonus based on stats."""
- import mud, auxiliary, mudsys, char, storage, polc
- #skill types
- type_combat = 1
- type_crafting = 2
- type_body = 3
- skills = {}
- class SkillNode:
- def __init__(self, name, bonus, type):
- self.name = name
- self.bonus = bonus
- self.type = type
- def calculateBonus(self, ch, value):
- return (self.bonus(ch, value))
- class SkillEntry:
- def __init__(self, value, bonus):
- self.value = value;
- self.bonus = bonus
- class auxSkills:
- def __init__(self, sset = None):
- self.skills = {}
- if (sset is not None):
- for (skillset in sset.readList("skills").sets()):
- self.skills[skillset.readString("name")] = SkillEntry(skillset.readInt("value"), 0)
- def store(self):
- sset = storage.StorageSet()
- slist = storage.StorageList()
- for (k, v in self.skills):
- entry = storage.StorageSet()
- entry.storeString(k)
- entry.storeInt(v.value)
- slist.add(entry)
- sset.storeList(slist, "skills")
- def copy(self):
- return self.copyTo(auxSkills())
- def copyTo(self, src):
- for (k, v in self.skills):
- src.skills[k] = SkillEntry(v.value, v.bonus)
- return src
- def LearnSkill(self, ch, name):
- if (skills.has_key(name)):
- self.skills[name] = SkillEntry(5, skills[name].CalculateBonus(ch, 5))
- return True
- else:
- return False
- def RemoveSkill(self, name):
- if (self.skills.has_key(name)):
- del self.skills[name]
- return True
- else:
- return False
- def GetLevel(self, name):
- if (self.skills.has_key(name)):
- return (self.skills[name].value
- else:
- return 0
- def GetBonus(self, ch, name):
- if (self.skills.has_key(name)):
- self.skills[name].bonus = skills[name].CalculateBonus(ch, self.skills[name].value)
- return self.skills[name].value
- auxiliary.install("aux_stats", auxSkills, "char")
- mudsys.add_char_method("skills", property(lambda me: me.aux("aux_skills")))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement