From 01f1cdb1755abcf85ef268378bf4ccbd61677d19 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Sat, 6 Jun 2020 00:11:36 +0300 Subject: [PATCH] Implement gun effect and its support in graphs --- eos/effects.py | 7 ++++- .../data/fitDamageStats/calc/application.py | 26 ++++++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/eos/effects.py b/eos/effects.py index cc2d88b46..78f73d13a 100644 --- a/eos/effects.py +++ b/eos/effects.py @@ -36377,6 +36377,11 @@ class Effect8029(BaseEffect): attr, ship.getModifiedItemAttr('shipBonusRole7'), **kwargs) +class Effect8037(BaseEffect): + + type = 'active' + + class Effect8047(BaseEffect): """ shipBonusUF1shieldResistance @@ -36428,7 +36433,7 @@ class Effect8052(BaseEffect): fit.ship.boostItemAttr('shield%sDamageResonance' % type.capitalize(), ship.getModifiedItemAttr('shipBonusUC2'), skill='EDENCOM Cruiser', **kwargs) - + class Effect8053(BaseEffect): """ diff --git a/graphs/data/fitDamageStats/calc/application.py b/graphs/data/fitDamageStats/calc/application.py index 1536fe2b2..70b03bf34 100644 --- a/graphs/data/fitDamageStats/calc/application.py +++ b/graphs/data/fitDamageStats/calc/application.py @@ -37,7 +37,14 @@ def getApplicationPerKey(src, tgt, atkSpeed, atkAngle, distance, tgtSpeed, tgtAn for mod in src.item.activeModulesIter(): if not mod.isDealingDamage(): continue - if mod.hardpoint == FittingHardpoint.TURRET: + if "ChainLightning" in mod.item.effects: + if inLockRange: + applicationMap[mod] = getVortonMult( + mod=mod, + distance=distance, + tgtSpeed=tgtSpeed, + tgtSigRadius=tgtSigRadius) + elif mod.hardpoint == FittingHardpoint.TURRET: if inLockRange: applicationMap[mod] = getTurretMult( mod=mod, @@ -56,7 +63,6 @@ def getApplicationPerKey(src, tgt, atkSpeed, atkAngle, distance, tgtSpeed, tgtAn if inLockRange or (mod.charge is not None and 'fofMissileLaunching' in mod.charge.effects): applicationMap[mod] = getLauncherMult( mod=mod, - src=src, distance=distance, tgtSpeed=tgtSpeed, tgtSigRadius=tgtSigRadius) @@ -151,7 +157,21 @@ def getTurretMult(mod, src, tgt, atkSpeed, atkAngle, distance, tgtSpeed, tgtAngl return mult -def getLauncherMult(mod, src, distance, tgtSpeed, tgtSigRadius): +def getVortonMult(mod, distance, tgtSpeed, tgtSigRadius): + rangeFactor = calculateRangeFactor( + mod.getModifiedItemAttr('maxRange'), + 0, + distance) + applicationFactor = _calcMissileFactor( + atkEr=mod.getModifiedItemAttr('aoeCloudSize'), + atkEv=mod.getModifiedItemAttr('aoeVelocity'), + atkDrf=mod.getModifiedItemAttr('aoeDamageReductionFactor'), + tgtSpeed=tgtSpeed, + tgtSigRadius=tgtSigRadius) + return rangeFactor * applicationFactor + + +def getLauncherMult(mod, distance, tgtSpeed, tgtSigRadius): missileMaxRangeData = mod.missileMaxRangeData if missileMaxRangeData is None: return 0