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

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