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

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)