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