dungeons.py (3144B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\behaviors\monitors\dungeons.py 2 from ballpark.messenger.const import MESSAGE_ON_DUNGEON_TIMER_EXPIRED, MESSAGE_ON_DUNGEON_TRIGGER 3 from ballpark.messenger.const import MESSAGE_ON_DUNGEON_TRIGGER_EVENT 4 from ballpark.messenger.customkeys import dungeon_spawn_key 5 from behaviors.tasks import MonitorTask 6 from ccpProfile import TimedFunction 7 8 class BaseDungeonMonitorClass(MonitorTask): 9 10 def _get_item_id(self): 11 if not hasattr(self.context, 'myDungeonSpawnId') or self.context.myDungeonSpawnId is None: 12 return 13 return dungeon_spawn_key(self.context.myDungeonSpawnId) 14 15 16 class MonitorDungeonTimerSetBooleanAndReset(BaseDungeonMonitorClass): 17 18 def _get_message(self): 19 return MESSAGE_ON_DUNGEON_TIMER_EXPIRED 20 21 def _can_process_message(self, timer_id): 22 return self.attributes.timerId == timer_id 23 24 @TimedFunction('behaviors::monitors::entities::InventoryChangeMonitor::_self_process_message') 25 def _self_process_message(self, timer_id): 26 if self._can_process_message(timer_id): 27 self.SendBlackboardValue(self.attributes.messageAddress, True) 28 self.behaviorTree.RequestReset(requestedBy=self) 29 30 31 class BaseDungeonTriggerMonitorClass(BaseDungeonMonitorClass): 32 33 def _get_message(self): 34 return MESSAGE_ON_DUNGEON_TRIGGER 35 36 def _can_process_message(self, *args): 37 trigger, spawn_id, scenario_id, _ = args 38 if not self._is_same_trigger_or_trigger_event(trigger): 39 return False 40 if self.context.myDungeonSpawnId != spawn_id: 41 return False 42 return self._is_same_room_scenario(scenario_id) 43 44 def _is_same_trigger_or_trigger_event(self, trigger): 45 return self.attributes.triggerTypeId == trigger.triggerTypeID 46 47 def _is_same_room_scenario(self, scenario_id): 48 if self.HasAttribute('checkRoomScenario') and self.attributes.checkRoomScenario: 49 return self.context.myDungeonSpawnScenarioId == scenario_id 50 return True 51 52 53 class BaseDungeonTriggerEventMonitorClass(BaseDungeonTriggerMonitorClass): 54 55 def _get_message(self): 56 return MESSAGE_ON_DUNGEON_TRIGGER_EVENT 57 58 def _is_same_trigger_or_trigger_event(self, triggerEvent): 59 return self.attributes.triggerEventTypeId == triggerEvent.eventTypeID 60 61 62 class DungeonCancelInvulnerableOnTrigger(BaseDungeonTriggerMonitorClass): 63 64 @TimedFunction('behaviors::monitors::dungeon::DungeonCancelInvulnerableOnTrigger::_self_process_message') 65 def _self_process_message(self, *args): 66 if self._can_process_message(*args): 67 self.context.ballpark.CancelCurrentInvulnerability(self.context.myBall.id, self.attributes.reason) 68 69 70 class DungeonSetBlackboardBooleanOnTriggerEvent(BaseDungeonTriggerEventMonitorClass): 71 72 @TimedFunction('behaviors::monitors::dungeon::DungeonSetBlackboardBooleanOnTrigger::_self_process_message') 73 def _self_process_message(self, *args): 74 if self._can_process_message(*args): 75 self.SendBlackboardValue(self.attributes.blackboardAddress, self.attributes.trueOrFalse)