- little tests trying to calculate how SC calcs survivability (not resolved yet) - dejaqt born as idea for standalone library.
100 lines
3.4 KiB
Python
100 lines
3.4 KiB
Python
|
|
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() |