logistics.py (2773B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\utility\logistics.py 2 from behaviors.const.behaviorroles import ROLE_LOGISTIC 3 from behaviors.utility.dogmatic import self_has_effect, get_remote_repair_impedance 4 from behaviors.utility.roles import get_role_for_member, get_group_commander 5 from ccpProfile import TimedFunction 6 from dogma.attributes import health 7 from dogma.const import effectNpcBehaviorRemoteArmorRepairer, effectNpcBehaviorRemoteShieldBooster 8 LOGISTICS_PRIORITY_COMMANDER = 0.5 9 LOGISTICS_PRIORITY_LOGISTIC = 0.4 10 LOGISTICS_PRIORITY_MEMBER_WITH_ROLE = 0.2 11 LOGISTICS_PRIORITY_MEMBER_WITHOUT_ROLE = 0.1 12 LOGISTICS_PRIORITY_NON_MEMBER = 0.0 13 14 @TimedFunction('behaviors::utility::logistics::get_base_logistics_priority') 15 def get_base_logistics_priority(task, item_id): 16 if task.IsMember(item_id): 17 commander_id = get_group_commander(task) 18 if item_id == commander_id: 19 return LOGISTICS_PRIORITY_COMMANDER 20 role = get_role_for_member(task, item_id) 21 if role == ROLE_LOGISTIC: 22 return LOGISTICS_PRIORITY_LOGISTIC 23 elif role is not None: 24 return LOGISTICS_PRIORITY_MEMBER_WITH_ROLE 25 else: 26 return LOGISTICS_PRIORITY_MEMBER_WITHOUT_ROLE 27 return LOGISTICS_PRIORITY_NON_MEMBER 28 29 30 def get_damage_state_function(task): 31 if self_has_effect(task, effectNpcBehaviorRemoteArmorRepairer): 32 return health.GetCurrentArmorRatio 33 if self_has_effect(task, effectNpcBehaviorRemoteShieldBooster): 34 return health.GetCurrentShieldRatio 35 36 37 def get_remote_repair_effect_id(task): 38 if self_has_effect(task, effectNpcBehaviorRemoteArmorRepairer): 39 return effectNpcBehaviorRemoteArmorRepairer 40 if self_has_effect(task, effectNpcBehaviorRemoteShieldBooster): 41 return effectNpcBehaviorRemoteShieldBooster 42 43 44 def get_damage_state_function_by_effect_id(effect_id): 45 if effect_id == effectNpcBehaviorRemoteArmorRepairer: 46 return health.GetCurrentArmorRatio 47 if effect_id == effectNpcBehaviorRemoteShieldBooster: 48 return health.GetCurrentShieldRatio 49 50 51 @TimedFunction('behaviors::utility::logistics::get_damage_state_modifier') 52 def get_damage_state_modifier(task, item_id, get_damage_state): 53 return 1.0 - get_damage_state(task.context.dogmaLM, item_id) 54 55 56 @TimedFunction('behaviors::utility::logistics::get_logistics_priority') 57 def get_logistics_priority(task, item_id, get_damage_state): 58 base_priority = get_base_logistics_priority(task, item_id) 59 damage_modifier = get_damage_state_modifier(task, item_id, get_damage_state) 60 remote_repair_impedance = get_remote_repair_impedance(task, item_id) 61 priority = (base_priority + damage_modifier) * remote_repair_impedance 62 return priority