123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- /**@class BotTrigger
- **/
- class BotTrigger
- {
- bool CheckTrigger () { return false; }
- };
- class MyBotTrigger : BotTrigger
- {
- PlayerBase m_Owner;
- void MyBotTrigger (PlayerBase p) { m_Owner = p; }
- override bool CheckTrigger () { return null != m_Owner.GetInventory().FindAttachment(InventorySlots.GetSlotIdFromString("Headgear")); }
- };
- /**@class Bot
- **/
- class Bot
- {
- PlayerBase m_Owner = null;
- protected ref BotFSM m_FSM = null;
- protected DayZPlayerInstanceType m_InstanceType = DayZPlayerInstanceType.INSTANCETYPE_CLIENT;
- protected ref BotStateBase m_IdleState = null;
- void Bot (PlayerBase ow)
- {
- m_Owner = ow;
- }
-
- void SetInstanceType (DayZPlayerInstanceType t) { m_InstanceType = t; }
- void Start ()
- {
- InitFSM();
- }
- void Stop ()
- {
- m_FSM.Terminate();
- }
- void StartAction(int action)
- {
- switch (action)
- {
- case EActions.PLAYER_BOT_STOP_CURRENT:
- ProcessEvent(new BotEventStop(m_Owner, null));
- return;
- }
- ProcessEvent(new BotEventStartDebug(m_Owner, null, action));
- }
- void OnUpdate (float dt)
- {
- m_FSM.GetCurrentState().OnUpdate(dt);
- }
- // events
- ref BotEventBase ___Bgn__ = new BotEventStart;
- ref BotEventBase __Stop__ = new BotEventStop;
- ref BotEventBase ___OK___ = new BotEventEndOK;
- ref BotEventBase __Fail__ = new BotEventEndFail;
- ref BotEventBase __Tout__ = new BotEventEndTimeout;
- ref BotEventBase __IChg__ = new BotEventOnItemInHandsChanged;
- void AddTransition(BotStateBase state, int id)
- {
- BotEventStartDebug evt = new BotEventStartDebug(null, null, id);
- m_FSM.AddTransition(new BotTransition(m_IdleState, evt, state, null, new BotGuardDebugEventMatches(evt)));
- m_FSM.AddTransition(new BotTransition(state, ___OK___, m_IdleState));
- m_FSM.AddTransition(new BotTransition(state, __Fail__, m_IdleState));
- m_FSM.AddTransition(new BotTransition(state, __Tout__, m_IdleState));
- m_FSM.AddTransition(new BotTransition(state, __Stop__, m_IdleState));
- }
- void InitFSM ()
- {
- m_FSM = new BotFSM();
- // basic states
- m_IdleState = new BotStateIdle(this, NULL);
- ///@{ transition table
- AddTransition(new BotStanceRandomizer(this, NULL), EActions.PLAYER_BOT_RANDOMIZE_STANCE);
- AddTransition(new BotTestSpamUserActions(this, NULL), EActions.PLAYER_BOT_SPAM_USER_ACTIONS);
- AddTransition(new BotTestAttachAndDropCycle(this, NULL), EActions.PLAYER_BOT_TEST_ATTACH_AND_DROP_CYCLE);
- AddTransition(new BotTestItemMoveBackAndForth(this, NULL), EActions.PLAYER_BOT_TEST_ITEM_MOVE_BACK_AND_FORTH);
- AddTransition(new Bot_TestSpawnOpen(this, NULL), EActions.PLAYER_BOT_TEST_SPAWN_OPEN);
- AddTransition(new Bot_TestSpawnOpenDestroy(this, NULL), EActions.PLAYER_BOT_TEST_SPAWN_OPEN_DESTROY);
- AddTransition(new Bot_TestSpawnOpenEat(this, NULL), EActions.PLAYER_BOT_TEST_SPAWN_OPEN_EAT);
- AddTransition(new BotTestSwapG2H(this, NULL), EActions.PLAYER_BOT_TEST_SWAP_G2H);
- //AddTransition(new BotTestSwapC2H(this, NULL), EActions.PLAYER_BOT_TEST_SWAP_C2H);
- AddTransition(new BotTestSwapInternal(this, NULL), EActions.PLAYER_BOT_TEST_SWAP_INTERNAL);
- ///@} transition table
- m_FSM.SetInitialState(m_IdleState);
- m_FSM.Start();
- }
-
- bool ProcessEvent (BotEventBase e)
- {
- if (m_FSM.ProcessEvent(e) == ProcessEventResult.FSM_OK)
- {
- botDebugSpam("[botfsm] Processed event e=" + e.ToString());
- return true;
- }
- else
- {
- botDebugSpam("[botfsm] FSM refused to process event (no transition): src=" + m_FSM.GetCurrentState().ToString() + " event=" + e.ToString());
- return false;
- }
- }
- };
- void botDebugPrint (string s)
- {
- #ifdef BOT_DEBUG
- PrintToRPT("" + s); // comment/uncomment to hide/see debug logs
- #else
- //Print("" + s); // comment/uncomment to hide/see debug logs
- #endif
- }
- void botDebugSpam (string s)
- {
- #ifdef BOT_DEBUG_SPAM
- PrintToRPT("" + s); // comment/uncomment to hide/see debug logs
- #else
- //Print("" + s); // comment/uncomment to hide/see debug logs
- #endif
- }
|