def res_to_red(res): ''' calculates reduction % of damage from base resistance incoming damage is assumed to be 100.0 to get percentages. ''' if res >= 0: fd = 100 / (1.0+res/100.0) else: fd = 100 / (1.0-res/100.0) return 100.0 - fd def dam_res(dam, res): ''' calculates damage modified by resistance. ''' if res >= 0: fd = dam / (1.0+res/100.0) else: fd = dam / (1.0-res/100.0) return fd class ShipInstance(object): # just testin something. def __init__(self, shields=None, hulls=None, shield_resis=None, hull_resis=None ): self.shield_max = shields or 5000 self.hull_max = hulls or 5000 shield_resis = shield_resis or (100,100,100) hull_resis = hull_resis or (100,100,100) self.set_shield_res(*shield_resis) self.set_hull_res(*hull_resis) def set_shield_res(self, kn, em, th): self.shield_res_kn = kn self.shield_res_em = em self.shield_res_th = th def set_hull_res(self, kn, em, th): self.hull_res_kn = kn self.hull_res_em = em self.hull_res_th = th def survivability(self): # i have no clue how they calc this. # multiple attempts shows, they are using base pts as measure, but how exactly the calc is? krs = (self.shield_max/100.0 * self.shield_res_kn) ers = (self.shield_max/100.0 * self.shield_res_em) trs = (self.shield_max/100.0 * self.shield_res_th) print "Shield.", krs, ers, trs krh = (self.hull_max/100.0 * self.hull_res_kn) erh = (self.hull_max/100.0 * self.hull_res_em) trh = (self.hull_max/100.0 * self.hull_res_th) print "Hull.", krh, erh, trh #print "?1", ((krs+ers+trs+krh+erh+trh)/6.0)+self.shield_max + self.hull_max print "?2", ((krs+ers+trs+3*self.shield_max)/3.0)+((krh+erh+trh+3*self.hull_max)/3.0) # another try: """ lets assume survivability is really measured through applying 1000 dps for 10 secs. """ print "Assuming dps..." shield = self.shield_max hull = self.hull_max r1s = shield / (1.0*dam_res(1000, self.shield_res_kn)) r2s = shield / (1.0*dam_res(1000, self.shield_res_em)) r3s = shield / (1.0*dam_res(1000, self.shield_res_th)) print r1s, r2s, r3s rXs = (r1s+r2s+r3s) / 3.0 print "Shield survival time at 1kdps", rXs r1h = hull / (1.0*dam_res(1000, self.hull_res_kn)) r2h = hull / (1.0*dam_res(1000, self.hull_res_em)) r3h = hull / (1.0*dam_res(1000, self.hull_res_th)) print r1h, r2h, r3h rXh = (r1h+r2h+r3h) / 3.0 print "Hull survival time at 1kdps", rXh print "Total survival time ", rXs + rXh, " sec" print "Surv should be ", int(round((rXs+rXh) * 1000)) return ((krs+ers+trs)/3.0)+self.shield_max + self.hull_max + ((krh+erh+trh)/3.0) ship = ShipInstance() print ship.survivability() print "#" * 80 mykatanas=ShipInstance(7664, 4296, (70,61,100), (20,80,50)) print "We know its 19736... but own calcs say..." print mykatanas.survivability()