Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- def run_test(swings, trials, miss_chance):
- base_miss_chance = 20
- damage = 1.0
- trial_max_damage = damage * swings
- #initialize values calculated in trials
- slowed_damage = 0.0 #average calculated on fly during trials
- average_damage = 0.0
- #tallys for keeping track of # of trials that damage reduction surpassed that of the slow and of 10% of base
- damage_reduction_matched_slow = 0
- damage_reduction_over_10 = 0
- #TRIALS FOR SLOW + 20% MISS
- slow_swings = int(float(swings)/1.1) #calculate number of swings made while slowed. int function rounds it off.
- for trial in range(trials): #iterate trials
- trial_damage = 0
- for swing in range(slow_swings):
- if hit(base_miss_chance):
- trial_damage += 1.0 #add to trial damage if hit returns True
- slowed_damage += trial_damage/float(trials) #trial's damage to the average for all trials
- #TRIAL FOR 10% MISS AND 20% MISS
- for trial in range(trials):
- trial_damage = 0
- for swing in range(swings):
- if hit(miss_chance + base_miss_chance):
- trial_damage += 1.0
- #Check if the damage from the hit debuff trial matches the average from the slow debuff trials. If so, increment tally.
- matched_slow = trial_damage <= slowed_damage
- if matched_slow:
- damage_reduction_matched_slow += 1
- #Check if the additional (over base case) damage reduction from the hit debuff is >= 10% of base damage. If so, increment tally.
- trial_diff = trial_max_damage * 0.8 - trial_damage
- mached_10_percent = (trial_diff)/trial_max_damage >= 0.1
- if mached_10_percent:
- damage_reduction_over_10 += 1
- #Add trial's damage to the average for all trials
- average_damage += trial_damage / float(trials)
- #PRINT RESULTS
- print("Expected damage without debuffs: ", trial_max_damage * .8)
- print("Damage reduction exceeded 10% of expected damage (80% hit, 0% slow) on", damage_reduction_over_10, " trials out of ", trials)
- print("Damage reduction exceeded slow (80% hit, 10% slow) on", damage_reduction_matched_slow, " trials out of ", trials)
- print("Net Percent Damage reduction from hit debuff (70% hit, 0% slow): ", ((1-average_damage/trial_max_damage)*100))
- print("Net Percent Damage reduction from slow debuff (80% hit, 10% slow): ", ((1-slowed_damage/trial_max_damage)*100))
- return
- def hit(miss_chance):
- '''Helper function. returns true if RNG results in a hit, false if not'''
- return random.randrange(1, 101) > miss_chance
- run_test(100,10000,10)
Advertisement
Add Comment
Please, Sign In to add comment