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

shadow_of_the_serpent_trees.py (3273B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\trees\pirate\shadow_of_the_serpent_trees.py
      2 from behaviors import composites
      3 from behaviors.actions import WaitAction
      4 from behaviors.actions.combatnavigation import DEFAULT_COMBAT_ORBIT_RANGE, DEFAULT_COMBAT_ATTACK_RANGE
      5 from behaviors.behaviortree import BehaviorTree
      6 from behaviors.composites import Sequence
      7 from behaviors.decorators.modifiers import ForceSuccess
      8 from behaviors.monitors.blackboards import BlackboardMessageMonitor
      9 from behaviors.monitors.groups import GroupMembershipMonitor
     10 from behaviors.monitors.navigation import GroupMemberWarpModeChangedMonitor
     11 from behaviors.trees.combat import CreateTargetSwitchingBehavior, CreateEntityCombatBehavior, COMBAT_TARGETS_SET
     12 from behaviors.trees.groups.combat import CreateManageTargetCombatSetBehavior
     13 from behaviors.trees.groups.threatManagement import CreateThreatManagementBehavior
     14 from behaviors.trees.patrol import CreatePatrolBehavior, CreateIdleFallback
     15 from behaviors.trees.regroup import CreateReGroupBehavior
     16 from behaviors.trees.explore import CreateExplorationBehavior
     17 from behaviors.trees.reinforcements import CreateRequestReinforcements
     18 from behaviors.trees.tanking import CreateTankingBehavior
     19 from brennivin.itertoolsext import Bundle
     20 from inventorycommon.const import groupStargate, groupAsteroidBelt
     21 PRUNE_TIMEOUT_SECONDS = 120
     22 COMBAT_ORBIT_VELOCITY = 300
     23 
     24 def CreateRoamingShadowOfTheSerpentTree():
     25     root = composites.PrioritySelector(Bundle(name='Shadow of the Serpent behavior'))
     26     root.AddSubTask(CreateTargetSwitchingBehavior())
     27     root.AddSubTask(CreateTankingBehavior())
     28     root.AddSubTask(CreateEntityCombatBehavior(orbitVelocity=COMBAT_ORBIT_VELOCITY, orbitRange=DEFAULT_COMBAT_ORBIT_RANGE, attackRange=DEFAULT_COMBAT_ATTACK_RANGE))
     29     root.AddSubTask(CreateReGroupBehavior())
     30     root.AddSubTask(CreateExplorationBehavior(groupsOfInterest=[groupStargate, groupAsteroidBelt], explorationIntervalSeconds=810))
     31     root.AddSubTask(CreatePatrolBehavior(patrolDistance=100000, orbitRange=10000, patrolInterval=90.0))
     32     root.AddSubTask(CreateIdleFallback())
     33     root.AddSubTask(WaitAction(Bundle(name='Do nothing')))
     34     behaviorTree = BehaviorTree()
     35     behaviorTree.StartRootTask(root)
     36     return behaviorTree
     37 
     38 
     39 def CreateShadowOfTheSerpentGroupBehavior():
     40     root = Sequence(Bundle(name='Shadow of the Serpent group behavior'))
     41     root.AddSubTask(GroupMembershipMonitor(Bundle(name='Monitor changes in membership')))
     42     root.AddSubTask(GroupMemberWarpModeChangedMonitor(Bundle(name='Tracking movement that can result in bubbles changing.')))
     43     root.AddSubTask(BlackboardMessageMonitor(Bundle(messageAddress=COMBAT_TARGETS_SET)))
     44     root.AddSubTask(ForceSuccess().AddSubTask(CreateRequestReinforcements()))
     45     root.AddSubTask(CreateThreatManagementBehavior(friendlyOwnerIds=None, hostileOwnerIds=None, isAutomaticallyAggressive=True))
     46     root.AddSubTask(CreateManageTargetCombatSetBehavior(PRUNE_TIMEOUT_SECONDS))
     47     root.AddSubTask(WaitAction(Bundle(name='Wait for some action')))
     48     return root
     49 
     50 
     51 def CreateShadowOfTheSerpentisGroupTree():
     52     behaviorTree = BehaviorTree()
     53     behaviorTree.StartRootTask(CreateShadowOfTheSerpentGroupBehavior())
     54     return behaviorTree