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

util.py (3638B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\dogma\effects\util.py
      2 from __future__ import absolute_import
      3 from dogma import const as dogmaconst
      4 from dogma.effects.modifiereffect import ModifierEffect
      5 from . import modifiers
      6 from . import sideeffect
      7 import telemetry
      8 from eveexceptions import UserError
      9 
     10 @telemetry.ZONE_METHOD
     11 def CreateEffect(effectInfo):
     12     mods = []
     13     side_effects = []
     14     for effectDict in effectInfo.modifierInfo:
     15         funcType = effectDict.func
     16         modifierClass = modifiers.GetModifierClassByTypeString(funcType)
     17         sideeffectClass = sideeffect.GetSideEffectClassByTypeString(funcType)
     18         if modifierClass is not None:
     19             mods.append(modifierClass(effectDict))
     20         elif sideeffectClass is not None:
     21             side_effects.append(sideeffectClass(effectDict))
     22         else:
     23             raise RuntimeError("Can't create effect from modifierInfo. Unknown funcType type '%s'." % funcType)
     24 
     25     return ModifierEffect(effectInfo, mods, side_effects)
     26 
     27 
     28 def GetEffectDuration(dogmaLM, itemID, env):
     29     effect = dogmaLM.broker.effects[env.effectID]
     30     duration_attribute_id = effect.durationAttributeID
     31     duration = dogmaLM.GetAttributeValue(itemID, duration_attribute_id)
     32     return duration
     33 
     34 
     35 def PreCheckRange(dogmaLM, env, errorName, itemID, shipID, targetID):
     36     from dogma.effects.restricted.util import get_effect_max_effective_range_with_falloff
     37     maxEffectRange = get_effect_max_effective_range_with_falloff(dogmaLM, env.effectID, itemID)
     38     distance = dogmaLM.ballpark.DistanceBetween(shipID, targetID)
     39     if distance > maxEffectRange:
     40         raise UserError(errorName, {'target': targetID,
     41          'item': env.itemTypeID,
     42          'distance': int(maxEffectRange)})
     43 
     44 
     45 def PreCheckType(dogmaLM, env, errorName, validTargetCategoryIDs, targetID):
     46     if dogmaLM.inventory2.GetItem(targetID).categoryID not in validTargetCategoryIDs:
     47         raise UserError(errorName, {'target': targetID,
     48          'item': env.itemTypeID})
     49 
     50 
     51 def PreCheckIfImmune(dogmaLM, targetID):
     52     if dogmaLM.GetAttributeValue(targetID, dogmaconst.attributeDisallowOffensiveModifiers):
     53         raise UserError('DeniedActivateTargetModuleDisallowed')
     54 
     55 
     56 def PreCheckResist(dogmaLM, env, errorName, itemID, resistAttribute, targetID):
     57     targetResistAttribute = dogmaLM.GetAttributeValue(itemID, resistAttribute)
     58     if targetResistAttribute:
     59         if dogmaLM.GetAttributeValue(targetID, int(targetResistAttribute)) < 0.01:
     60             raise UserError(errorName, {'target': targetID,
     61              'item': env.itemTypeID})
     62 
     63 
     64 def SetInterimAttribute(dogmaLM, itemID, sourceAttribute, targetAttribute, modifier, floorAttribute = None):
     65     newValue = dogmaLM.GetAttributeValue(itemID, sourceAttribute) * modifier
     66     if floorAttribute:
     67         floorValue = dogmaLM.GetAttributeValue(itemID, floorAttribute)
     68         if newValue < floorValue:
     69             dogmaLM.SetAttributeValue(itemID, targetAttribute, floorValue)
     70             return
     71     dogmaLM.SetAttributeValue(itemID, targetAttribute, newValue)
     72 
     73 
     74 def CalcResistanceModifier(dogmaLM, sourceItemID, sourceResistanceID, targetItemID):
     75     targetResistanceID = dogmaLM.GetAttributeValue(sourceItemID, sourceResistanceID)
     76     if targetResistanceID:
     77         return dogmaLM.GetAttributeValue(targetItemID, targetResistanceID)
     78     else:
     79         return 1
     80 
     81 
     82 def CalcCloudFactorModifier(dogmaLM, itemID, cloudSizeAttributeID, targetID):
     83     cloudSize = dogmaLM.GetAttributeValue(itemID, cloudSizeAttributeID)
     84     if cloudSize > 1:
     85         return dogmaLM.GetCloudFactor(targetID, cloudSize)
     86     else:
     87         return 1