'''
Online Python Compiler.
Code, Compile, Run and Debug python program online.
Write your code in this editor and press "Run" button to execute it.
'''
import random
class Weapon:
def __init__(self,name, dmg_min, dmg_max, crit_chance, crit_power, ap_cost,
resistance_ignore=0, armor_incur=0, bleed_chance=0, organic_bonus=0,
ripper_enabled=False):
self.name = name
self.dmg_min = dmg_min
self.dmg_max = dmg_max
self.crit_chance = crit_chance
self.crit_power = crit_power
self.bleed_chance = bleed_chance
self.organic_bonus = organic_bonus
self.ap_cost = ap_cost
self.resistance_ignore = resistance_ignore
self.armor_incur = armor_incur
self.ripper_enabled = ripper_enabled
weapons = []
#dagger damage_range = (9, 24), crit_chance = 0.1, crit_power=1.15, organic_bonus = 0.25
weapons.append(Weapon(
name = "dagger",
ap_cost=6,
dmg_min = 9,
dmg_max = 24,
crit_chance = 0.1,
crit_power = 1.15,
organic_bonus= 0.25,
armor_incur = 1.25,
ripper_enabled=True
))
#knife_damage_range = (15, 25), crit_chance = 0.08, crit_power=1.15
weapons.append(Weapon(
name = "knife",
ap_cost=6,
dmg_min = 15,
dmg_max = 25,
crit_chance = 0.08,
crit_power = 1.15,
armor_incur = 1.25,
ripper_enabled=True,
))
#sknife_damage_range = (12, 21), crit_chance = 0.08, crit_power=1.30, bleed_chance = 0.25,
weapons.append(Weapon(
name = "sknife",
dmg_min = 12,
dmg_max = 21,
ap_cost=6,
crit_chance = 0.08,
crit_power = 1.3,
bleed_chance = 0.25,
armor_incur = 1.25,
ripper_enabled=True
))
weapons.append(Weapon(
name = "spear",
dmg_min = 35,
dmg_max = 66,
ap_cost=17,
crit_chance = 0.05,
crit_power = 1,
resistance_ignore = 0.25,
))
statistics = {}
# ARMOR
# no armor
target_armor = 0
target_resistance = 0.0
# Death Stalker
# target_armor = 16
# target_resistance = 0.35
# Goliathus
# target_armor = 55
# target_resistance = 0.5
# Burrower
# target_armor = 10
# target_resistance = 0.3
cheap_shot = 0.5
crit_power_feat_increase = 1.5
weapon_skill_additional_dmg = 2.3
ap = 500000
for weapon in weapons:
statistics[weapon.name] = {
"overall_dmg" : 0,
"hits" : 0
}
for hit in range(round(ap/weapon.ap_cost)):
hit_dmg = random.randrange(weapon.dmg_min, weapon.dmg_max)
hit_dmg += hit_dmg*weapon_skill_additional_dmg
#crit
is_crit = True if random.randint(1, 100)/100 <= weapon.crit_chance else False
if is_crit:
crit_power = weapon.crit_power + cheap_shot
# ripper_increase
if weapon.ripper_enabled:
crit_power += crit_power*random.randint(10, 100)/100
# crit_power_feat
crit_power += (crit_power-1)*crit_power_feat_increase
hit_dmg += round(hit_dmg * weapon.crit_power)
#armor
armor_reduction = target_armor+target_armor*weapon.armor_incur
resistance_reduction = hit_dmg*(target_resistance - target_resistance*weapon.resistance_ignore)
used_reduction = armor_reduction if armor_reduction >= resistance_reduction else resistance_reduction
hit_dmg = hit_dmg-used_reduction
if hit_dmg < 0:
hit_dmg = 0
#bleed
is_bleed = True if random.randint(1, 100)/100 <= weapon.bleed_chance else False
if is_bleed:
hit_dmg += hit_dmg
#organic
hit_dmg += hit_dmg * weapon.organic_bonus
statistics[weapon.name]["overall_dmg"] += round(hit_dmg)
statistics[weapon.name]["hits"] += 1
for weapon in statistics:
dmg_per_ap = str(statistics[weapon]["overall_dmg"] / ap)
dmg_per_hit = str(statistics[weapon]["overall_dmg"] / statistics[weapon]["hits"])
print(weapon + " dps: " + dmg_per_ap + " average dmg per hit: " + dmg_per_hit)