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

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')