Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. import random
  2.  
  3. FOL_MANA_COST = 140
  4.  
  5.  
  6. class Paladin:
  7. BASE_MANA = 1512
  8. BASE_INT = 70
  9. BASE_CRIT = 5
  10.  
  11. def __init__(self, intellect=0, mp5=0, crit_chance=0, illu_lvl=0):
  12. self.intellect = self.BASE_INT + intellect
  13. self.mana = self.BASE_MANA + self.intellect * 15
  14. self.crit_chance = self.BASE_CRIT + (self.intellect / 28.5) + crit_chance
  15. self.mp5 = mp5
  16. self.spell_cost = FOL_MANA_COST
  17. self.illu_lvl = illu_lvl
  18. self.mp5_regen = 0
  19. self.crit_regen = 0
  20. self.spells_cast = 0
  21.  
  22. def cast_spell(self):
  23. if self.mana - self.spell_cost < 0:
  24. raise ValueError('OOM')
  25. self.spells_cast += 1
  26. self.mana -= self.spell_cost
  27. is_crit = random.random() < (self.crit_chance / 100)
  28. if is_crit:
  29. is_mana_returned = random.random() < (self.illu_lvl * 20 / 100)
  30. if is_mana_returned:
  31. self.mana += self.spell_cost
  32. self.crit_regen += self.spell_cost
  33.  
  34. def tick_mana(self):
  35. self.mana += self.mp5
  36. self.mp5_regen += self.mp5
  37.  
  38.  
  39. class Run:
  40. def __init__(self, paladin):
  41. self.paladin = paladin
  42. self.time = 0
  43.  
  44. def run(self):
  45. while True:
  46. self.time += 1
  47.  
  48. if self.time % 15 == 0:
  49. try:
  50. self.paladin.cast_spell()
  51. except ValueError:
  52. break
  53.  
  54. if self.time % 50 == 0:
  55. self.paladin.tick_mana()
  56.  
  57. return self
  58.  
  59.  
  60. runs = 1_000
  61. all_time = 0
  62. all_mp5_regen = 0
  63. all_crit_regen = 0
  64. all_spells_cast = 0
  65. for _ in range(runs):
  66. r = Run(mana=5500, mp5=33, spell_cost=FOL_MANA_COST, crit_chance=5, illu_lvl=5).run()
  67. all_time += r.time
  68. all_mp5_regen += r.mp5_regen
  69. all_crit_regen += r.crit_regen
  70. all_spells_cast += r.spells_cast
  71.  
  72. avg_time = all_time / runs
  73. avg_mp5_regen = all_mp5_regen / runs
  74. avg_crit_regen = all_crit_regen / runs
  75. avg_spells_cast = all_spells_cast / runs
  76. print(avg_time / 10, 's')
  77. print(f'mana regened by mp5: {avg_mp5_regen}')
  78. print(f'mana returned by crits: {avg_crit_regen}')
  79. print(f'spells cast: {avg_spells_cast}')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement