fsm EasyBot : integer; //------------------------------------------------------------------ // RookieDodgeBot: Level 1 // A rookie version of the DodgeBot. //------------------------------------------------------------------ //------------------------------------------------------------------ // Constants //------------------------------------------------------------------ const #include_ //------------------------------------------------------------------ // Types //------------------------------------------------------------------ type #include_ //------------------------------------------------------------------ // Variables //------------------------------------------------------------------ var static integer attackRange; // At what range do I start shooting? static integer withdrawRange; // At what range do I withdraw? static integer bot_activated_timer; //------------------------------------------------------------------ // Init: my initialization function //------------------------------------------------------------------ function Init; code // script-specific variables attackRange = 9999; withdrawRange = 9999; // driver settings SetFiringDelay (ME,2.0,6.0); SetIgnoreFriendlyFire (ME,true); SetIsShotRadius (ME,160); SetEntropyMood (ME,NEUTRAL_START); SetCurMood (ME,NEUTRAL_START); SetSkillLevel (ME,80,10,30); SetAttackThrottle (ME,90); bot_activated_timer = gti_Timer_1; endfunction; //------------------------------------------------------------------ // StartState: my initial state //------------------------------------------------------------------ state StartState; code StartTimer(bot_activated_timer); trans CheckTimer; endstate; state CheckTimer; code //--------------------------------------------- // Time before Bot Wakes up and starts Shooting //--------------------------------------------- if (TimeGreater(bot_activated_timer,5.0)) then trans WaitToAmbushState; endif; //--------------------------------------------- // Firing upon/near before timer up lets the bot go play //--------------------------------------------- if (IsShot(ME) == TRUE) then SetTarget(ME,WhoShot(ME)); trans WaitToAmbushState; endif; trans CheckTimer; endstate; //------------------------------------------------------------------ // WaitInAmbushState: wait for someone to come close enough to attack //------------------------------------------------------------------ state WaitToAmbushState; code if (Bot_FindEnemy(attackrange)) then trans AttackState; endif; OrderMoveLookOut; endstate; //------------------------------------------------------------------ // AttackState: the ambush is over -- let's kick some ass! //------------------------------------------------------------------ state AttackState; code if (LeaveAttackState(withdrawRange)) then trans WaitToAmbushState; endif; OrderAttackTactic(TACTIC_CIRCLE,TRUE); endstate; //------------------------------------------------------------------ // DeadState: OK, I kicked the bucket. //------------------------------------------------------------------ state DeadState; code orderDie; endstate; endfsm.