123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- #ifdef BOT
- class BotEventEntitySpawned : BotEventBase { };
- class BotSpawnDead extends BotStateBase
- {
- string m_Type;
- void BotSpawnDead (Bot bot = NULL, BotStateBase parent = NULL, string new_type = "")
- {
- if (new_type == string.Empty)
- m_Type = "ZmbM_HermitSkinny_Beige";
- else
- m_Type = new_type;
- }
- override void OnEntry (BotEventBase e)
- {
- super.OnEntry(e);
- if (m_Owner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
- {
- EntityAI Z = EntityAI.Cast(GetGame().CreateObject(m_Type, m_Owner.GetPosition()));
- Z.SetHealth( "", "", 0 );
- Error("TODO");
- //m_Bot.PostEvent(new BotEventEntitySpawned(m_Owner, Z));
- }
- }
- };
- class Bot_TestSpawnDeadSelectBury extends BotStateBase
- {
- string m_Type;
- ref BotSpawnDead m_SpawnDead;
- ref BotSpawnEntityInHands m_SpawnShovel;
- ref BotSelectZombieTarget m_Selecting;
- ref BotPerformAction m_Burying;
- void Bot_TestSpawnDeadSelectBury (Bot bot = NULL, BotStateBase parent = NULL, string new_type = "ZmbM_HermitSkinny_Beige")
- {
- m_Type = new_type;
- // setup nested state machine
- m_FSM = new BotFSM(this); // @NOTE: set owner of the submachine fsm
- m_SpawnDead = new BotSpawnDead(m_Bot, this, m_Type);
- m_SpawnShovel = new BotSpawnEntityInHands(m_Bot, this, "Shovel");
- m_Selecting = new BotSelectZombieTarget(m_Bot, this);
- m_Burying = new BotPerformAction(m_Bot, this, AT_BURY_BODY);
-
- // events
- BotEventBase __SpwnZ__ = new BotEventEntitySpawned;
- BotEventBase __EntInH__ = new BotEventEntityInHands;
- BotEventBase __Select__ = new BotEventSelectedTarget;
- // transitions
- m_FSM.AddTransition(new BotTransition( m_SpawnDead, NULL, m_SpawnShovel));
- m_FSM.AddTransition(new BotTransition( m_SpawnShovel, __EntInH__, m_Selecting));
- m_FSM.AddTransition(new BotTransition( m_Selecting, __Select__, m_Burying));
- m_FSM.AddTransition(new BotTransition( m_Burying, NULL, NULL));
- m_FSM.SetInitialState(m_SpawnDead);
- }
- override void OnEntry (BotEventBase e) { super.OnEntry(e); }
- override void OnExit (BotEventBase e) { super.OnExit(e); }
- override void OnUpdate (float dt) { super.OnUpdate(dt); }
- };
- class BotEventSelectedTarget : BotEventBase { };
- class BotSelectZombieTarget extends BotStateBase
- {
- ZombieMaleBase m_Target;
- float m_dtAccumulator = 0.0;
- void SelectTarget ()
- {
- //m_Target = NearestTargetSelector<ZombieMaleBase>.Find(GetPlayerOwner(), NULL);
- botDebugPrint("[bot] + " + m_Owner + " hunt SelectTarget target=" + m_Target);
- }
- override void OnEntry (BotEventBase e)
- {
- super.OnEntry(e);
- m_dtAccumulator = 0.0;
- SelectTarget();
- }
- override void OnExit (BotEventBase e)
- {
- m_dtAccumulator = 0.0;
- m_Target = null;
- super.OnExit(e);
- }
- override void OnUpdate (float dt)
- {
- super.OnUpdate(dt);
- m_dtAccumulator += dt;
-
- if (m_Target == null)
- {
- if (m_dtAccumulator > 2.0)
- {
- botDebugPrint("[bot] + " + m_Owner + " searching...");
- SelectTarget();
- if (m_Target)
- {
- Error("TODO");
- //m_Bot.PostEvent(new BotEventSelectedTarget(m_Owner, m_Target));
- }
- m_dtAccumulator = 0.0;
- }
- }
- else
- {
- Error("TODO");
- //m_Bot.PostEvent(new BotEventSelectedTarget(m_Owner, m_Target));
- }
- }
- };
- class BotPerformAction extends BotStateBase
- {
- EntityAI m_Entity;
- int m_ActionID;
- void BotPerformAction (Bot bot = NULL, BotStateBase parent = NULL, int action = AT_EAT)
- {
- m_ActionID = action;
- }
- override void OnEntry (BotEventBase e)
- {
- super.OnEntry(e);
- if (e.m_Entity)
- {
- botDebugPrint("[bot] + " + m_Owner + " performing action on item=" + e.m_Entity);
- if (m_Owner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
- {
- #ifdef BOT
- ActionManagerClient cli_mgr = ActionManagerClient.Cast(m_Owner.GetActionManager());
- if (cli_mgr)
- cli_mgr.PerformAction(m_ActionID, new ActionTarget(e.m_Entity, null, -1, vector.Zero, -1), e.m_Entity);
- #endif
- }
- }
- }
- override void OnAbort (BotEventBase e) { super.OnAbort(e); }
- override void OnExit (BotEventBase e) { super.OnExit(e); }
- override void OnUpdate (float dt) { super.OnUpdate(dt); }
- };
- /*class BotHunt extends BotStateBase
- {
- float m_dtAccumulator = 0.0;
- override void OnEntry (BotEventBase e)
- {
- super.OnEntry(e);
- m_dtAccumulator = 0.0;
- }
- override void OnExit (BotEventBase e)
- {
- m_dtAccumulator = 0.0;
- super.OnExit(e);
- }
- override void OnUpdate (float dt)
- {
- super.OnUpdate(dt);
- m_dtAccumulator += dt;
-
- float rescanTime = 3.0;
- if (m_dtAccumulator >= rescanTime)
- if (m_weapon.CanProcessWeaponEvents())
- m_Bot.ProcessEvent(new WeaponEventReloadTimeout(p));
- }
- };
- */
- #endif
|