online.py (4086B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\common\script\dogma\online.py 2 from dogma.effects import Effect 3 from dogma.items.locationDogmaItem import LocationDogmaItem 4 5 class OnlineEffect(Effect): 6 __guid__ = 'dogmaXP.Online' 7 __effectIDs__ = ['effectOnline'] 8 __modifier_only__ = 0 9 10 def Start(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID): 11 dogma = sm.GetService('dogma') 12 dogma.SkillCheck(env, 'OnlineHasSkillPrerequisites', None) 13 capacitorLevel = None 14 if dogmaLM.locationGroup == const.groupSolarSystem: 15 applyCapacitorCharge = True 16 if self._ShouldAppleCapacitorCharge(shipID, env, dogmaLM): 17 applyCapacitorCharge = False 18 else: 19 try: 20 if dogmaLM.CanFitItemInSpace(charID, shipID, itemID): 21 applyCapacitorCharge = False 22 except UserError: 23 pass 24 25 if applyCapacitorCharge: 26 capacity = dogmaLM.GetAttributeValue(shipID, const.attributeCapacitorCapacity) 27 ratio = dogmaLM.GetAttributeValue(shipID, const.attributeCharge) / capacity * 100 28 if ratio < const.onlineCapacitorChargeRatio: 29 raise UserError('NotEnoughCapacitorForOnline', {'module': env.itemTypeID, 30 'have': ratio, 31 'need': const.onlineCapacitorChargeRatio}) 32 capacitorLevel = capacity * (const.onlineCapacitorRemainderRatio / 100.0) 33 if not dogmaLM.IsItemLoading(shipID): 34 GAV = dogmaLM.GetAttributeValue 35 cpuRequired = GAV(itemID, const.attributeCpu) 36 cpuOutput = GAV(shipID, const.attributeCpuOutput) 37 cpuLoad = GAV(shipID, const.attributeCpuLoad) 38 if cpuRequired != 0 and cpuLoad + cpuRequired > cpuOutput + 1e-06: 39 dogma.UserError(env, 'NotEnoughCpu', None) 40 powerRequired = GAV(itemID, const.attributePower) 41 powerOutput = GAV(shipID, const.attributePowerOutput) 42 powerLoad = GAV(shipID, const.attributePowerLoad) 43 if powerRequired != 0 and powerLoad + powerRequired > powerOutput + 1e-06: 44 dogma.UserError(env, 'NotEnoughPower', None) 45 containerDogmaItem = dogmaLM.GetDogmaItem(shipID) 46 if isinstance(containerDogmaItem, LocationDogmaItem): 47 containerDogmaItem.CheckCanOnlineItem(itemID) 48 dogmaLM.CheckSlotOnliningAndExistence(shipID, itemID) 49 dogmaLM.SetAttributeValue(itemID, const.attributeIsOnline, 1) 50 dogmaLM.AddModifier(const.dgmAssModAdd, shipID, const.attributeCpuLoad, itemID, const.attributeCpu) 51 dogmaLM.AddModifier(const.dgmAssModAdd, shipID, const.attributePowerLoad, itemID, const.attributePower) 52 if capacitorLevel is not None: 53 dogmaLM.SetAttributeValue(shipID, const.attributeCharge, capacitorLevel) 54 55 def Stop(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID): 56 dogmaLM.RemoveModifier(const.dgmAssModAdd, shipID, const.attributeCpuLoad, itemID, const.attributeCpu) 57 dogmaLM.RemoveModifier(const.dgmAssModAdd, shipID, const.attributePowerLoad, itemID, const.attributePower) 58 dogmaLM.SetAttributeValue(itemID, const.attributeIsOnline, 0) 59 60 def RestrictedStop(self, env, dogmaLM, itemID, shipID, charID, otherID, targetID): 61 dogmaLM.RemoveModifier(const.dgmAssModAdd, shipID, const.attributeCpuLoad, itemID, const.attributeCpu) 62 dogmaLM.RemoveModifier(const.dgmAssModAdd, shipID, const.attributePowerLoad, itemID, const.attributePower) 63 dogmaLM.SetAttributeValue(itemID, const.attributeIsOnline, 0) 64 65 def _ShouldAppleCapacitorCharge(self, shipID, env, dogmaLM): 66 if shipID in dogmaLM.embarkingShips or shipID in dogmaLM.loadingItems: 67 return True 68 if not charsession: 69 return True 70 if charsession.GetSessionVariable('SlashCommand', False): 71 return True 72 return hasattr(env, 'bypassChargeCost')