guardobject.py (3378B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\trees\guardobject.py 2 from behaviors.actions import WaitAction 3 from behaviors.actions.blackboards import BlackboardSendMyItemIdMessageAction, BlackboardSetMessageToIntegerValueAction 4 from behaviors.actions.guard import PlaceProximitySensor 5 from behaviors.composites import Sequence, PrioritySelector 6 from behaviors.decorators.modifiers import ForceFailure 7 from brennivin.itertoolsext import Bundle 8 from behaviors.actions.ballparks import OrbitAtDistanceAction, WarpToNewLocation 9 from behaviors.monitors.ballparks import MonitorSpecificProximitySensor 10 from behaviors.const.blackboardchannels import GUARD_OBJECT_ITEM_ID, GUARD_OBJECT_POSITION, GUARD_OBJECT_ORBIT_RANGE 11 from behaviors.const.blackboardchannels import WARP_SCRAMBLED_ADDRESS 12 from behaviors.conditions.ballparks import IsBallPresentInMyBubbleCondition 13 from behaviors.trees.combat import COMBAT_TARGETS_SET 14 from inventorycommon.const import categoryShip, categoryDrone, groupCapsule, categoryFighter 15 from npcs.server.tags import DRIFTER_TAG 16 GUARD_OBJECT_DEFAULT_CATEGORIES = [categoryShip, categoryDrone, categoryFighter] 17 18 def CreateGuardObjectBehavior(validOwnerIds = (), includedCategories = GUARD_OBJECT_DEFAULT_CATEGORIES, invalidOwnerIds = None): 19 return PrioritySelector(Bundle(name='Guard Object')).AddSubTask(Sequence(Bundle(name='Orbit Guard Object')).AddSubTask(IsBallPresentInMyBubbleCondition(Bundle(ballIdAddress=GUARD_OBJECT_ITEM_ID))).AddSubTask(OrbitAtDistanceAction(Bundle(orbitTargetAddress=GUARD_OBJECT_ITEM_ID, orbitRange=0, blocking=False, blockUntilRange=None, orbitRangeAddress=GUARD_OBJECT_ORBIT_RANGE))).AddSubTask(MonitorSpecificProximitySensor(Bundle(objectListAddress=COMBAT_TARGETS_SET, includedCategories=includedCategories, excludedGroups=[groupCapsule], proximitySensorAddress=GUARD_OBJECT_ITEM_ID, validOwnerIds=validOwnerIds, invalidOwnerIds=invalidOwnerIds))).AddSubTask(WaitAction(Bundle(name='Wait until disturbed')))).AddSubTask(WarpToNewLocation(Bundle(name='Warp to Guard Object', locationMessage=GUARD_OBJECT_POSITION, warpScrambledAddress=WARP_SCRAMBLED_ADDRESS))) 20 21 22 def CreateGuardObjectEntityBehavior(): 23 return PrioritySelector(Bundle(name='Guard Object')).AddSubTask(Sequence(Bundle(name='Orbit Guard Object')).AddSubTask(IsBallPresentInMyBubbleCondition(Bundle(ballIdAddress=GUARD_OBJECT_ITEM_ID))).AddSubTask(OrbitAtDistanceAction(Bundle(orbitTargetAddress=GUARD_OBJECT_ITEM_ID, orbitRange=0, blocking=False, blockUntilRange=None, orbitRangeAddress=GUARD_OBJECT_ORBIT_RANGE))).AddSubTask(WaitAction(Bundle(name='Wait until disturbed')))).AddSubTask(WarpToNewLocation(Bundle(name='Warp to Guard Object', locationMessage=GUARD_OBJECT_POSITION, warpScrambledAddress=WARP_SCRAMBLED_ADDRESS))) 24 25 26 def CreateGuardCurrentLocationBehavior(guardRange = 1000000, guardReplacementRange = 10000): 27 return ForceFailure(Bundle(name='Guard the current location')).AddSubTask(Sequence().AddSubTask(BlackboardSendMyItemIdMessageAction(Bundle(messageAddress=GUARD_OBJECT_ITEM_ID))).AddSubTask(BlackboardSetMessageToIntegerValueAction(Bundle(messageAddress=GUARD_OBJECT_ORBIT_RANGE, value=guardRange))).AddSubTask(PlaceProximitySensor(Bundle(itemIdAddress=GUARD_OBJECT_ITEM_ID, rangeAddress=GUARD_OBJECT_ORBIT_RANGE, sensorReplacementRange=guardReplacementRange, tags={DRIFTER_TAG}))))