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