Guest User

Untitled

a guest
Jan 19th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.32 KB | None | 0 0
  1. class Player:
  2.  
  3. def __init__(self):
  4. self.skills = []
  5.  
  6. def execute_actions(self, **event_args):
  7. for skill in self.skills:
  8. skill.execute_actions(player=self, **event_args)
  9.  
  10.  
  11. class Skill:
  12.  
  13. def __init__(self, type_object, level):
  14. self.type_object = type_object
  15. self.level = level
  16.  
  17. @property
  18. def name(self):
  19. return self.type_object.name
  20.  
  21. def execute_actions(self, **event_args):
  22. if self.level > 0:
  23. self.type_object.execute_actions(skill=self, **event_args)
  24.  
  25. # more type_object properties
  26.  
  27.  
  28. class SkillType:
  29.  
  30. def __init__(self, name, max_level):
  31. self.name = name
  32. self.max_level = max_level
  33. self.actions = []
  34.  
  35. def execute_actions(self, **event_args):
  36. for action in self.actions:
  37. if action.event == event_args['event_name']:
  38. action(**event_args)
  39.  
  40.  
  41. class Action:
  42.  
  43. def __init__(self, event, callback, group=None, cooldown=None):
  44. self.event = event
  45. self.callback = callback
  46. self.group = group
  47. self._cooldown = cooldown
  48.  
  49. @property
  50. def cooldown(self):
  51. if self._cooldown is not None:
  52. return self._cooldown
  53. if self.group is not None:
  54. return self.group.get('cooldown', None)
  55. return None
  56.  
  57. # Usage
  58.  
  59. player = Player()
  60.  
  61. fireball = SkillType('Fireball', 5)
  62.  
  63. def fireball_deal_damage(skill, player, target, **event_args):
  64. player.damage(target, skill.level)
  65.  
  66. fireball.actions.append(
  67. Action('player_attack', fireball_deal_damage, cooldown=5)
  68. )
  69.  
  70. player.skills.append(Skill(fireball, 1))
  71.  
  72. // skills.json
  73. [
  74. {
  75. "name": "Fireball",
  76. "max_level": 5,
  77. "actions": [
  78. {
  79. "event": "player_attack",
  80. "action": "deal_damage",
  81. "data": {"amount_base": 3, "amount_per_level": 1},
  82. "cooldown": 5
  83. }
  84. ]
  85. }
  86. ]
  87.  
  88. // skills.json
  89. [
  90. {
  91. "name": "Fireball",
  92. "max_level": 5,
  93. "actions": [
  94. {
  95. "event": "player_attack",
  96. "action": "deal_damage",
  97. "data": {"amount_base": 3, "amount_per_level": 1},
  98. "group": 0
  99. },
  100. {
  101. "event": "player_attack",
  102. "action": "ignite",
  103. "data": {"duration_base": 0, "duration_per_level": 1},
  104. "group": 0
  105. }
  106. ],
  107. "groups": [
  108. { // Group 0
  109. "cooldown": 5
  110. }
  111. }
  112. ]
Add Comment
Please, Sign In to add comment