NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

pythonEffects.py (15197B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\fittingScreen\pythonEffects.py
      2 import dbuff.common.industrialInvulnConst as invulnConst
      3 import dogma.data as dogma_data
      4 from eve.common.lib import appConst as const
      5 from eve.common.lib.appConst import MSEC
      6 from dbuff.common import baseBurstEffect
      7 from dogma import const as dogmaConst
      8 from dogma.effects import Effect
      9 from dogma.items.locationDogmaItem import LocationDogmaItem
     10 from eve.common.script.dogma.pythonEffects.emergencyHullEnergizer import EmergencyHullEnergizer
     11 from eve.common.script.dogma.pythonEffects.remoteTargetPaintFalloff import BaseRemoteTargetPaintFalloff
     12 from eve.common.script.dogma.pythonEffects.remoteTrackingComputer import BaseRemoteTrackingComputer
     13 from eve.common.script.dogma.pythonEffects.remoteWebifierFalloff import BaseRemoteWebifierFalloff
     14 from eve.common.script.dogma.pythonEffects.sensorFalloff import BaseSensorFalloffEffect
     15 from eve.common.script.dogma.pythonEffects.weaponDisruptionUtil import GetGuidanceDisruptionAttributes, GetTrackingDisruptionAttributes, GetWeaponDisruptionAttributes
     16 import inventorycommon.const as invConst
     17 from eveexceptions import UserError
     18 
     19 class Attack(Effect):
     20     __guid__ = 'testAttack'
     21     __effectIDs__ = ['effectTargetAttack',
     22      'effectTargetAttackForStructures',
     23      'effectProjectileFired',
     24      'effectProjectileFiredForEntities']
     25 
     26     def __init__(self, *args):
     27         pass
     28 
     29 
     30 class OnlineEffect(Effect):
     31     __guid__ = 'OnlineEffect'
     32     __effectIDs__ = ['effectOnline']
     33     __modifier_only__ = 0
     34 
     35     def Start(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID):
     36         containerDogmaItem = dogmaLM.GetDogmaItem(shipID)
     37         if isinstance(containerDogmaItem, LocationDogmaItem):
     38             containerDogmaItem.CheckCanOnlineItem(itemID)
     39         dogma = sm.GetService('dogma')
     40         cpuOutput = dogmaLM.GetAttributeValue(shipID, dogmaConst.attributeCpuOutput)
     41         cpuLoad = dogmaLM.GetAttributeValue(shipID, dogmaConst.attributeCpuLoad)
     42         cpu = dogmaLM.GetAttributeValue(itemID, dogmaConst.attributeCpu)
     43         if self.HasEnoughCpuLeft(cpu, cpuLoad, cpuOutput):
     44             powerOutput = dogmaLM.GetAttributeValue(shipID, dogmaConst.attributePowerOutput)
     45             powerLoad = dogmaLM.GetAttributeValue(shipID, dogmaConst.attributePowerLoad)
     46             power = dogmaLM.GetAttributeValue(itemID, dogmaConst.attributePower)
     47             if self.HasEnoughPowerLeft(power, powerLoad, powerOutput):
     48                 dogmaLM.SetAttributeValue(itemID, dogmaConst.attributeIsOnline, 1)
     49                 dogmaLM.AddModifier(dogmaConst.dgmAssModAdd, shipID, dogmaConst.attributeCpuLoad, itemID, dogmaConst.attributeCpu)
     50                 dogmaLM.AddModifier(dogmaConst.dgmAssModAdd, shipID, dogmaConst.attributePowerLoad, itemID, dogmaConst.attributePower)
     51             else:
     52                 dogma.UserError(env, 'NotEnoughPower', None)
     53         else:
     54             dogma.UserError(env, 'NotEnoughCpu', None)
     55 
     56     def HasEnoughCpuLeft(self, cpu, cpuLoad, cpuOutput):
     57         if self.ShouldIgnoreCpuPowerRestrictions():
     58             return True
     59         hasEnoughPowerLeft = cpuOutput >= cpuLoad + cpu
     60         return hasEnoughPowerLeft
     61 
     62     def HasEnoughPowerLeft(self, power, powerLoad, powerOutput):
     63         if self.ShouldIgnoreCpuPowerRestrictions():
     64             return True
     65         if power == 0:
     66             return True
     67         return powerOutput >= powerLoad + power
     68 
     69     def ShouldIgnoreCpuPowerRestrictions(self):
     70         return True
     71 
     72     def Stop(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID):
     73         dogmaLM.RemoveModifier(dogmaConst.dgmAssModAdd, shipID, const.attributeCpuLoad, itemID, const.attributeCpu)
     74         dogmaLM.RemoveModifier(dogmaConst.dgmAssModAdd, shipID, const.attributePowerLoad, itemID, const.attributePower)
     75         dogmaLM.SetAttributeValue(itemID, const.attributeIsOnline, 0)
     76 
     77     def RestrictedStop(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID):
     78         dogmaLM.RemoveModifier(dogmaConst.dgmAssModAdd, shipID, const.attributeCpuLoad, itemID, const.attributeCpu)
     79         dogmaLM.RemoveModifier(dogmaConst.dgmAssModAdd, shipID, const.attributePowerLoad, itemID, const.attributePower)
     80         dogmaLM.SetAttributeValue(itemID, const.attributeIsOnline, 0)
     81 
     82 
     83 class Powerboost(Effect):
     84     __guid__ = 'dogmaXP.Effect_48'
     85     __effectIDs__ = [48]
     86     isPythonEffect = True
     87 
     88     def Start(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID):
     89         weaponID = env.itemID
     90         shipID = env.shipID
     91         item = dogmaLM.dogmaItems[weaponID]
     92         chargeKey = dogmaLM.GetSubLocation(shipID, item.flagID)
     93         if chargeKey is None:
     94             return 1
     95         chargeQuantity = dogmaLM.GetAttributeValue(chargeKey, const.attributeQuantity)
     96         if chargeQuantity is None or chargeQuantity < 1:
     97             return 1
     98         capacitorBonus = dogmaLM.GetAttributeValue(chargeKey, const.attributeCapacitorBonus)
     99         if capacitorBonus != 0:
    100             new, old = dogmaLM.IncreaseItemAttributeEx(env.shipID, const.attributeCharge, capacitorBonus, alsoReturnOldValue=True)
    101         return 1
    102 
    103     def Stop(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID):
    104         return 1
    105 
    106     def RestrictedStop(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID):
    107         return 1
    108 
    109 
    110 class Mine(Effect):
    111     __guid__ = 'dogmaXP.Mining'
    112     __effectIDs__ = ['effectMining', 'effectMiningLaser', 'effectMiningClouds']
    113 
    114     def Start(self, env, dogmaLM, itemID, shipID, charID, otherID, asteroidID):
    115         durationAttributeID = dogma_data.get_effect(env.effectID).durationAttributeID
    116         duration = dogmaLM.GetAttributeValue(itemID, durationAttributeID)
    117         env.miningDuration = duration
    118         import blue
    119         env.startedEffect = blue.os.GetSimTime()
    120 
    121     def GetClamp(self, env, preferredDuration):
    122         import blue
    123         timePassed = blue.os.GetSimTime() - env.startedEffect
    124         millisecondsPassed = timePassed / 10000
    125         return float(millisecondsPassed) / preferredDuration
    126 
    127 
    128 class FakeCloaking(Effect):
    129     __guid__ = 'dogmaXP.Cloaking'
    130     __effectIDs__ = ['effectCloaking', 'effectCloakingWarpSafe', 'effectCloakingPrototype']
    131     effectIDList = None
    132 
    133     def PreStartChecks(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID, internal = False):
    134         if dogmaLM.IsShipCloaked():
    135             raise UserError('CantCloakTooManyDevices')
    136         if not dogmaLM.GetAttributeValue(shipID, const.attributeCanCloak):
    137             raise UserError('CantCloakTooShipUnsuitable')
    138         for effectID, itemID, activationInfo, typeID in dogmaLM.GetActivatedEffectsOnShip():
    139             if dogmaLM.dogmaStaticMgr.GetTypeAttribute2(typeID, const.attributeDisallowEarlyDeactivation):
    140                 raise UserError('CantCloakModuleActive', {'module': (const.UE_TYPEID, typeID)})
    141 
    142         if dogmaLM.GetAttributeValue(shipID, const.attributeDisallowCloaking):
    143             raise UserError('CantCloak')
    144 
    145     def EnforceActivationConditions(self, dogmaLM, shipID, itemID, effectID):
    146         dogmaLM.DeactivateActivatedEffectsOfShip(excludeEffectKey=(effectID, itemID))
    147 
    148     def Start(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID):
    149         env.cloaked = 0
    150         self.EnforceActivationConditions(dogmaLM, shipID, itemID, env.effectID)
    151         dogmaLM.AddModifier(4, shipID, const.attributeMaxVelocity, itemID, const.attributeMaxVelocityModifier)
    152         self._Start_Effect(dogmaLM, env, shipID, itemID)
    153 
    154     def _Start_Effect(self, dogmaLM, env, shipID, itemID):
    155         try:
    156             self.PreStartChecks(env, dogmaLM, itemID, shipID, env.charID, env.otherID, env.targetID, internal=True)
    157         except UserError as e:
    158             dogmaLM.StopEffect(env.effectID, itemID, 1, forced=1)
    159             return
    160 
    161         self.EnforceActivationConditions(dogmaLM, shipID, itemID, env.effectID)
    162         env.cloaked = 1
    163 
    164     def Stop(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID):
    165         self.RestrictedStop(env, dogmaLM, itemID, shipID, charID, otherID, targetID)
    166 
    167     def RestrictedStop(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID):
    168         env.cloaked = -1
    169         dogmaLM.RemoveModifier(4, shipID, const.attributeMaxVelocity, itemID, const.attributeMaxVelocityModifier)
    170 
    171 
    172 class FakeBaseCommandBurstEffect(Effect):
    173     sourceVFXEffect = None
    174     targetVFXEffect = None
    175 
    176     def PreStartChecks(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID):
    177         pass
    178 
    179     def Start(self, env, dogmaLM, itemID, shipID, charID, otherID = None, targetID = None):
    180         buffValues, effectDurationMillis = baseBurstEffect.GetBuffValuesAndDurationMillis(dogmaLM, itemID)
    181         buffDuration = effectDurationMillis * MSEC
    182         baseBurstEffect.ApplyBuffToSourceShip(dogmaLM, charID, shipID, buffDuration, buffValues)
    183 
    184 
    185 @baseBurstEffect.BurstEffectDecorator(baseBurstEffect.GetArmorEffectClassVariables())
    186 
    187 class CommandBurstArmorEffect(FakeBaseCommandBurstEffect):
    188     pass
    189 
    190 
    191 @baseBurstEffect.BurstEffectDecorator(baseBurstEffect.GetInfoEffectClassVariables())
    192 
    193 class CommandBurstInfoEffect(FakeBaseCommandBurstEffect):
    194     pass
    195 
    196 
    197 @baseBurstEffect.BurstEffectDecorator(baseBurstEffect.GetMiningEffectClassVariables())
    198 
    199 class CommandBurstMiningEffect(FakeBaseCommandBurstEffect):
    200     pass
    201 
    202 
    203 @baseBurstEffect.BurstEffectDecorator(baseBurstEffect.GetShieldEffectClassVariables())
    204 
    205 class CommandBurstShieldEffect(FakeBaseCommandBurstEffect):
    206     pass
    207 
    208 
    209 @baseBurstEffect.BurstEffectDecorator(baseBurstEffect.GetSkirmishEffectClassVariables())
    210 
    211 class CommandBurstSkirmishEffect(FakeBaseCommandBurstEffect):
    212     pass
    213 
    214 
    215 class FakeTitanBurstEffect(Effect):
    216     __guid__ = 'dogmaXP.TitanBurstEffect'
    217     __effectIDs__ = ['effectModuleTitanBurst']
    218 
    219     def Start(self, env, dogmaLM, itemID, shipID, charID, *args):
    220         effectDuration = 10000000
    221         buffValues, effectDurationMillis = baseBurstEffect.GetBuffValuesAndDurationMillis(dogmaLM, itemID)
    222         buffDuration = effectDurationMillis * MSEC
    223         baseBurstEffect.ApplyBuffToSourceShip(dogmaLM, charID, shipID, buffDuration, buffValues)
    224 
    225 
    226 class FakeIndustrialInvulnerability(Effect):
    227     __guid__ = 'dogmaXP.IndustrialInvulnerability'
    228     __effectIDs__ = ['effectModuleBonusIndustrialInvulnerability']
    229     DBUFF_VALUES = invulnConst.DBUFF_VALUES
    230 
    231     def Start(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID):
    232         effectDuration = 10000000
    233         baseBurstEffect.ApplyBuffToSourceShip(dogmaLM, charID, shipID, effectDuration, self.DBUFF_VALUES)
    234         dogmaLM.DeactivateBlockedActivatedEffectsOfShip()
    235 
    236 
    237 class FakeCargoScan(Effect):
    238     __guid__ = 'dogmaXP.Effect_47'
    239     __effectIDs__ = [47]
    240     isPythonEffect = True
    241 
    242 
    243 class FakeShipScan(Effect):
    244     __guid__ = 'dogmaXP.Effect_46'
    245     __effectIDs__ = [46]
    246     isPythonEffect = True
    247 
    248 
    249 class FakePointDefense(Effect):
    250     __guid__ = 'dogmaXP.Effect_6443'
    251     __effectIDs__ = [6443]
    252     isPythonEffect = False
    253 
    254 
    255 class FakeTargetHostile(Effect):
    256     __guid__ = 'dogmaXP.Effect_55'
    257     __effectIDs__ = [55]
    258     isPythonEffect = True
    259 
    260 
    261 class FakeEmpWave(Effect):
    262     __guid__ = 'dogmaXP.Effect_38'
    263     __effectIDs__ = [38]
    264     isPythonEffect = True
    265 
    266 
    267 class FakeSurveyScan(Effect):
    268     __guid__ = 'dogmaXP.Effect_81'
    269     __effectIDs__ = [81]
    270     isPythonEffect = True
    271 
    272 
    273 class FakeTargetABCAttack(Effect):
    274     __guid__ = 'dogmaXP.Effect_6995'
    275     __effectIDs__ = [6995]
    276     isPythonEffect = False
    277 
    278 
    279 class FakeEntosisLinkEffect(Effect):
    280     __guid__ = 'dogmaXP.Effect_6063'
    281     __effectIDs__ = [6063]
    282     isPythonEffect = False
    283     MODIFIER_CHANGES = [(dogmaConst.dgmAssPostPercent, dogmaConst.attributeScanRadarStrength, dogmaConst.attributeScanRadarStrengthPercent),
    284      (dogmaConst.dgmAssPostPercent, dogmaConst.attributeScanMagnetometricStrength, dogmaConst.attributeScanMagnetometricStrengthPercent),
    285      (dogmaConst.dgmAssPostPercent, dogmaConst.attributeScanGravimetricStrength, dogmaConst.attributeScanGravimetricStrengthPercent),
    286      (dogmaConst.dgmAssPostPercent, dogmaConst.attributeScanLadarStrength, dogmaConst.attributeScanLadarStrengthPercent)]
    287 
    288     def Start(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID):
    289         self.AddModifiers(dogmaLM, shipID, itemID)
    290 
    291     def Stop(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID):
    292         self.RemoveModifiers(dogmaLM, shipID, itemID)
    293 
    294     def RestrictedStop(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID):
    295         self.RemoveModifiers(dogmaLM, shipID, itemID)
    296 
    297 
    298 class FakeEmergencyHullEnergizer(EmergencyHullEnergizer):
    299 
    300     def Start(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID):
    301         self.AddModifiers(dogmaLM, shipID, itemID)
    302 
    303 
    304 class FakeSensorFalloffEffect(BaseSensorFalloffEffect):
    305     __guid__ = 'dogmaXP.RemoteSensorBooster'
    306     __effectIDs__ = [dogmaConst.effectRemoteSensorBoostFalloff, dogmaConst.effectRemoteSensorDampFalloff, dogmaConst.effectStructureModuleEffectRemoteSensorDampener]
    307 
    308 
    309 class FakeRemoteTrackingComputer(BaseRemoteTrackingComputer):
    310     __guid__ = 'dogmaXP.RemoteTrackingComputer'
    311     __effectIDs__ = [dogmaConst.effectShipModuleRemoteTrackingComputer]
    312 
    313 
    314 class FakeWeaponDisruption(Effect):
    315     __guid__ = 'dogmaXP.WeaponDisruption'
    316     __effectIDs__ = [dogmaConst.effectStructureModuleEffectWeaponDisruption]
    317     WEAPON_DISRUPTION_ATTRIBUTES_BY_CATEGORY = GetWeaponDisruptionAttributes()
    318     SKILL_MODIFIER_CHANGES_FOR_LOCATION = [ (dogmaConst.dgmAssPostPercent,
    319      skillTypeID,
    320      affectedAttributeID,
    321      affectingAttributeID) for skillTypeID, affectingAttributeID, affectedAttributeID in WEAPON_DISRUPTION_ATTRIBUTES_BY_CATEGORY.get(invConst.categoryShip, []) ]
    322 
    323 
    324 class FakeTrackingDisruption(Effect):
    325     __guid__ = 'dogmaXP.TrackingDisruption'
    326     __effectIDs__ = [dogmaConst.effectShipModuleTrackingDisruptor]
    327     WEAPON_DISRUPTION_ATTRIBUTES_BY_CATEGORY = GetTrackingDisruptionAttributes()
    328     SKILL_MODIFIER_CHANGES_FOR_LOCATION = [ (dogmaConst.dgmAssPostPercent,
    329      skillTypeID,
    330      affectedAttributeID,
    331      affectingAttributeID) for skillTypeID, affectingAttributeID, affectedAttributeID in WEAPON_DISRUPTION_ATTRIBUTES_BY_CATEGORY.get(invConst.categoryShip, []) ]
    332 
    333 
    334 class FakeGuidanceDisruption(Effect):
    335     __guid__ = 'dogmaXP.GuidanceDisruption'
    336     __effectIDs__ = [dogmaConst.effectShipModuleGuidanceDisruptor]
    337     WEAPON_DISRUPTION_ATTRIBUTES_BY_CATEGORY = GetGuidanceDisruptionAttributes()
    338     SKILL_MODIFIER_CHANGES_FOR_LOCATION = [ (dogmaConst.dgmAssPostPercent,
    339      skillTypeID,
    340      affectedAttributeID,
    341      affectingAttributeID) for skillTypeID, affectingAttributeID, affectedAttributeID in WEAPON_DISRUPTION_ATTRIBUTES_BY_CATEGORY.get(invConst.categoryShip, []) ]
    342 
    343 
    344 class FakeRemoteTargetPaintFalloff(BaseRemoteTargetPaintFalloff):
    345     __guid__ = 'dogmaXP.RemoteTargetPaintFalloff'
    346     __effectIDs__ = [dogmaConst.effectRemoteTargetPaintFalloff, dogmaConst.effectStructureModuleEffectTargetPainter]
    347 
    348 
    349 class FakeRemoteWebifierFalloff(BaseRemoteWebifierFalloff):
    350     __guid__ = 'dogmaXP.RemoteWebifierFalloff'
    351     __effectIDs__ = [dogmaConst.effectRemoteWebifierFalloff, dogmaConst.effectStructureModuleEffectStasisWebifier]