Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Player:
- def __init__(self):
- self.skills = []
- def execute_actions(self, **event_args):
- for skill in self.skills:
- skill.execute_actions(player=self, **event_args)
- class Skill:
- def __init__(self, type_object, level):
- self.type_object = type_object
- self.level = level
- @property
- def name(self):
- return self.type_object.name
- def execute_actions(self, **event_args):
- if self.level > 0:
- self.type_object.execute_actions(skill=self, **event_args)
- # more type_object properties
- class SkillType:
- def __init__(self, name, max_level):
- self.name = name
- self.max_level = max_level
- self.actions = []
- def execute_actions(self, **event_args):
- for action in self.actions:
- if action.event == event_args['event_name']:
- action(**event_args)
- class Action:
- def __init__(self, event, callback, group=None, cooldown=None):
- self.event = event
- self.callback = callback
- self.group = group
- self._cooldown = cooldown
- @property
- def cooldown(self):
- if self._cooldown is not None:
- return self._cooldown
- if self.group is not None:
- return self.group.get('cooldown', None)
- return None
- # Usage
- player = Player()
- fireball = SkillType('Fireball', 5)
- def fireball_deal_damage(skill, player, target, **event_args):
- player.damage(target, skill.level)
- fireball.actions.append(
- Action('player_attack', fireball_deal_damage, cooldown=5)
- )
- player.skills.append(Skill(fireball, 1))
- // skills.json
- [
- {
- "name": "Fireball",
- "max_level": 5,
- "actions": [
- {
- "event": "player_attack",
- "action": "deal_damage",
- "data": {"amount_base": 3, "amount_per_level": 1},
- "cooldown": 5
- }
- ]
- }
- ]
- // skills.json
- [
- {
- "name": "Fireball",
- "max_level": 5,
- "actions": [
- {
- "event": "player_attack",
- "action": "deal_damage",
- "data": {"amount_base": 3, "amount_per_level": 1},
- "group": 0
- },
- {
- "event": "player_attack",
- "action": "ignite",
- "data": {"duration_base": 0, "duration_per_level": 1},
- "group": 0
- }
- ],
- "groups": [
- { // Group 0
- "cooldown": 5
- }
- }
- ]
Add Comment
Please, Sign In to add comment