Advertisement
Merxlc

eventDriver.py

Mar 18th, 2021
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.29 KB | None | 0 0
  1. import xml.etree.ElementTree as ET
  2. from player import Player
  3.  
  4. class EventElement:
  5. def __init__(self, type, attributes, subelements, text):
  6. self.type = type
  7. self.attributes = attributes
  8. self.subelements = subelements
  9. self.text = text
  10.  
  11. class Event:
  12. def __init__(self, name, idname, driver):
  13. self.name = name
  14. self.idname = idname
  15. self.driver = driver
  16.  
  17. def out(text):
  18. print(text)
  19.  
  20. def parse_element(eventEl):
  21. try:
  22. return EventElement(eventEl.tag, eventEl.attrib, [x for x in eventEl], eventEl.text)
  23. except:
  24. return EventElement(eventEl.tag, eventEl.attrib, [x for x in eventEl], False)
  25.  
  26. def get_events():
  27. events = {}
  28. for event in ET.parse('data/events.xml').getroot():
  29. eventElements = []
  30. for subtag in event:
  31. if subtag.tag == 'name':
  32. eventName = subtag.text
  33. elif subtag.tag == 'eventDriver':
  34. eventDriver = subtag
  35. eventEls = []
  36. for eventEl in eventDriver:
  37. eventEls.append(parse_element(eventEl))
  38. events[event.attrib['name']] = Event(eventName, event.attrib['name'], eventEls)
  39.  
  40. return events
  41.  
  42. ops = {}
  43. opcounter = 0
  44. choice = ''
  45. results = {}
  46.  
  47. def parse_eventElement(eventElement, player):
  48. global ops
  49. global opcounter
  50. global choice
  51. global results
  52.  
  53. if eventElement.type == 'dialogueBox':
  54. out('===========')
  55. for subel in eventElement.subelements:
  56. parse_eventElement(parse_element(subel), player)
  57. out('===========')
  58.  
  59. elif eventElement.type == 'choice':
  60. ops = {}
  61. opcounter = 0
  62. for i, subel in enumerate(eventElement.subelements):
  63. parse_eventElement(parse_element(subel), player)
  64. opcounter += 1
  65. for option in ops:
  66. out(f'[{option}] {ops[option]}')
  67. choice = ops[input()]
  68. chosenresult = results[choice]
  69. for result in chosenresult:
  70. parse_eventElement(parse_element(result), player)
  71.  
  72. elif eventElement.type == 'rewardBox':
  73. out('===============')
  74. for rew in eventElement.subelements:
  75. parse_eventElement(parse_element(rew), player)
  76. out('===============')
  77.  
  78. elif eventElement.type == 'option':
  79. ops[str(opcounter)] = eventElement.text
  80. elif eventElement.type == 'result':
  81. results[eventElement.attributes['id']] = eventElement.subelements
  82. elif eventElement.type == 'item':
  83. player.inventory.append(eventElement.text)
  84. out(f'You gained the item [{eventElement.text}]!')
  85. elif eventElement.type == 'gold':
  86. player.money += int(eventElement.text)
  87. out(f'You ganed [{eventElement.text}] gold!')
  88. elif eventElement.type == 'exp':
  89. player.exp += int(eventElement.text)
  90. out(f'You ganed [{eventElement.text}] EXP!')
  91. elif eventElement.type == 'text':
  92. out(eventElement.text)
  93.  
  94. def run_eventdriver(eventDriver, player):
  95. for el in eventDriver:
  96. parse_eventElement(el, player)
  97.  
  98. def run_event(evname, player):
  99. evs = get_events()
  100. out(evs[evname])
  101. run_eventdriver(evs[evname].driver, player)
  102.  
  103. test = Player('Test Player', 0, 0, [])
  104. run_event('TEST_EVENT_1', test)
  105. test.info()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement