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

dungeonbosstree.py (4115B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\trees\dungeonboss\dungeonbosstree.py
      2 from behaviors import composites
      3 from behaviors.actions import WaitAction
      4 from behaviors.actions.ballparks import FindPointToExplore
      5 from behaviors.actions.blackboards import BlackboardSetMessageToBooleanValueAction
      6 from behaviors.actions.combatnavigation import DEFAULT_COMBAT_ATTACK_RANGE, DEFAULT_COMBAT_ORBIT_RANGE
      7 from behaviors.actions.damage import SetArmorRatio
      8 from behaviors.behaviortree import BehaviorTree
      9 from behaviors.blackboards.scopes import ScopeTypes
     10 from behaviors.conditions.blackboards import IsBlackboardValueTrue
     11 from behaviors.const.combat import SIZE_TARGET_EVALUATOR
     12 from behaviors.decorators.timers import CooldownTimer
     13 from behaviors.monitors.damage import ArmorDamageThresholdMonitor
     14 from behaviors.trees.combat import CreateCombatBehavior, CreateTargetSwitchingBehavior
     15 from behaviors.trees.explore import CreateExplorationBehavior
     16 from behaviors.trees.guardobject import CreateGuardObjectBehavior, CreateGuardCurrentLocationBehavior
     17 from behaviors.trees.travel import CreateWarpToNewLocationBehavior, WARP_TO_LOCATION_GROUP
     18 from brennivin.itertoolsext import Bundle
     19 from evedungeons.common.constants import ARCHETYPE_HIDDEN_WORMHOLE_DUNGEON
     20 from inventorycommon.const import groupPlanet
     21 ESCAPE_TIMER = (ScopeTypes.Item, 'ESCAPE_TIMER')
     22 ESCAPE_TRIGGER_ADDRESS = (ScopeTypes.Item, 'ESCAPE_TRIGGER')
     23 COMBAT_ORBIT_VELOCITY = 1500
     24 BOSS_EXPLORATION_SITE_GROUP_IDS = [groupPlanet]
     25 BOSS_EXPLORATION_TIME = 3600
     26 BOSS_GUARD_RANGE = 500000
     27 BOSS_GUARD_REPLACEMENT_RANGE = 100000
     28 BOSS_ESCAPE_INTERVAL_SECONDS = 1200
     29 BOSS_ESCAPE_ARMOR_RATIO = 0.2
     30 BOSS_ESCAPE_EMERGENCY_ARMOR_RATIO_BUFFER = 0.05
     31 
     32 def CreateFindNewEscapeLocation():
     33     return FindPointToExplore(Bundle(name='Find Point To Escape-warp to', locationMessage=WARP_TO_LOCATION_GROUP, groupsOfInterest=BOSS_EXPLORATION_SITE_GROUP_IDS, dungeonArchetypesOfInterest=[ARCHETYPE_HIDDEN_WORMHOLE_DUNGEON], dungeonsOfInterest=[], pickSpecificChance=0.0, shouldConsiderUnspawnedDungeons=False))
     34 
     35 
     36 def CreateEscapeBehavior(escapeIntervalSeconds = BOSS_ESCAPE_INTERVAL_SECONDS, escapeArmorRatio = BOSS_ESCAPE_ARMOR_RATIO):
     37     root = composites.Sequence(Bundle(name='Escape'))
     38     root.AddSubTask(ArmorDamageThresholdMonitor(Bundle(armorRatioThreshold=escapeArmorRatio, thresholdReachedAddress=ESCAPE_TRIGGER_ADDRESS)))
     39     root.AddSubTask(IsBlackboardValueTrue(Bundle(valueAddress=ESCAPE_TRIGGER_ADDRESS)))
     40     root.AddSubTask(CooldownTimer(Bundle(timerAddress=ESCAPE_TIMER, timeoutSeconds=escapeIntervalSeconds)).AddSubTask(composites.Sequence().AddSubTask(CreateFindNewEscapeLocation()).AddSubTask(CreateWarpToNewLocationBehavior()).AddSubTask(SetArmorRatio(Bundle(name='Assign emergency armor value to prevent re-triggering', armorRatio=escapeArmorRatio + BOSS_ESCAPE_EMERGENCY_ARMOR_RATIO_BUFFER))).AddSubTask(BlackboardSetMessageToBooleanValueAction(Bundle(name='Reset trigger', messageAddress=ESCAPE_TRIGGER_ADDRESS, value=False)))))
     41     return root
     42 
     43 
     44 def CreateDungeonBossBehaviorTree():
     45     root = composites.PrioritySelector(Bundle(name='Dungeon Boss Root'))
     46     root.AddSubTask(CreateGuardCurrentLocationBehavior(guardRange=BOSS_GUARD_RANGE, guardReplacementRange=BOSS_GUARD_REPLACEMENT_RANGE))
     47     root.AddSubTask(CreateEscapeBehavior(escapeIntervalSeconds=BOSS_ESCAPE_INTERVAL_SECONDS, escapeArmorRatio=BOSS_ESCAPE_ARMOR_RATIO))
     48     root.AddSubTask(CreateTargetSwitchingBehavior(targetEvaluationFunction=SIZE_TARGET_EVALUATOR))
     49     root.AddSubTask(CreateCombatBehavior(orbitVelocity=COMBAT_ORBIT_VELOCITY, orbitRange=DEFAULT_COMBAT_ORBIT_RANGE, attackRange=DEFAULT_COMBAT_ATTACK_RANGE))
     50     root.AddSubTask(CreateExplorationBehavior(groupsOfInterest=BOSS_EXPLORATION_SITE_GROUP_IDS, dungeonArchetypesOfInterest=[ARCHETYPE_HIDDEN_WORMHOLE_DUNGEON], explorationIntervalSeconds=BOSS_EXPLORATION_TIME))
     51     root.AddSubTask(CreateGuardObjectBehavior())
     52     root.AddSubTask(WaitAction(Bundle(name='Do nothing')))
     53     behaviorTree = BehaviorTree()
     54     behaviorTree.StartRootTask(root)
     55     return behaviorTree