diff --git a/SQF/dayz_code/system/zombie_agent.fsm b/SQF/dayz_code/system/zombie_agent.fsm
index 01756309f..8ed1cff9e 100644
--- a/SQF/dayz_code/system/zombie_agent.fsm
+++ b/SQF/dayz_code/system/zombie_agent.fsm
@@ -6,20 +6,20 @@ item1[] = {"End",1,250,175.000000,-250.000000,275.000000,-200.000000,0.000000,"E
item2[] = {"wait",4,218,-75.000000,0.000000,25.000000,50.000000,0.000000,"wait"};
item3[] = {"Looking_for_Targ",2,250,-75.000000,75.000000,25.000000,125.000000,0.000000,"Looking for" \n "Target"};
item4[] = {"Not_Alive",4,218,25.000000,375.000000,125.000000,425.000000,5.000000,"Not" \n "Alive"};
-item5[] = {"Nobody_Near",4,218,25.000000,450.000000,125.000000,500.000000,6.000000,"Nobody" \n "Near"};
+item5[] = {"Nobody_Near",4,218,25.000000,525.000000,125.000000,575.000000,6.000000,"Nobody" \n "Near"};
item6[] = {"loiter",4,218,-400.000000,0.000000,-300.000000,50.000000,0.000000,"loiter"};
item7[] = {"Loiter",2,250,-400.000000,75.000000,-300.000000,125.000000,0.000000,"Loiter"};
item8[] = {"",7,210,-29.000042,396.000000,-20.999958,404.000000,0.000000,""};
-item9[] = {"",7,210,-29.000042,470.999939,-20.999958,479.000061,0.000000,""};
+item9[] = {"",7,210,-29.000040,470.999939,-20.999960,479.000061,0.000000,""};
item10[] = {"true",8,218,-75.000000,-400.000000,25.000000,-350.000000,0.000000,"true"};
item11[] = {"Begin",2,250,-75.000000,-150.000000,25.000000,-100.000000,0.000000,"Begin"};
item12[] = {"",7,210,-29.000006,-29.000004,-20.999996,-20.999996,0.000000,""};
item13[] = {"",7,210,-354.000092,-29.000004,-345.999908,-20.999996,0.000000,""};
item14[] = {"",7,210,-329.000031,208.500000,-321.000000,216.500000,0.000000,""};
item15[] = {"Has_Target",4,218,-150.000000,275.000000,-50.000000,325.000000,5.000000,"Has" \n "Target"};
-item16[] = {"Chase",2,4346,-150.000000,375.000000,-50.000000,425.000000,0.000000,"Chase"};
+item16[] = {"Chase",2,250,-150.000000,375.000000,-50.000000,425.000000,0.000000,"Chase"};
item17[] = {"Time_Check",4,218,50.000000,75.000000,150.000000,125.000000,1.000000,"Time" \n "Check"};
-item18[] = {"",7,210,-29.000006,208.500000,-20.999996,216.500000,0.000000,""};
+item18[] = {"",7,210,-29.000006,208.500000,-20.999994,216.500000,0.000000,""};
item19[] = {"",7,210,-29.000006,296.000000,-20.999996,304.000031,0.000000,""};
item20[] = {"Time_Check",4,218,-275.000000,75.000000,-175.000000,125.000000,0.000000,"Time" \n "Check"};
item21[] = {"Check",8,218,-300.000000,300.000000,-200.000000,350.000000,1.000000,"Check"};
@@ -63,10 +63,14 @@ item58[] = {"Target_Dead",4,218,-275.000000,500.000000,-175.000000,550.000000,3.
item59[] = {"",7,210,-479.000000,521.000000,-471.000000,529.000000,0.000000,""};
item60[] = {"Start_Attack",4,218,-725.000000,175.000000,-625.000000,225.000000,0.000000,"Start Attack"};
item61[] = {"End_Attack",4,218,-725.000000,100.000000,-625.000000,150.000000,0.000000,"End Attack"};
-item62[] = {"TargetMoved",4,218,50.000000,300.000000,150.000000,350.000000,3.000000,"TargetMoved"};
-item63[] = {"Not_moving",4,218,-300.000000,150.000000,-200.000000,200.000000,1.000000,"Not moving"};
+item62[] = {"TargetMoved",4,218,-600.000000,0.000000,-500.000000,50.000000,3.000000,"TargetMoved"};
+item63[] = {"Not_moving",4,218,-700.000000,0.000000,-600.000000,50.000000,1.000000,"Not moving"};
item64[] = {"TimeOut",8,218,-300.000000,375.000000,-200.000000,425.000000,2.000000,"TimeOut"};
-item65[] = {"____FAKE____",9,2600,0.000000,0.000000,0.000000,0.000000,0.000000,"____FAKE____"};
+item65[] = {"No_Agent",4,218,25.000000,450.000000,125.000000,500.000000,5.000000,"No Agent"};
+item66[] = {"",7,210,221.000015,546.000061,229.000000,553.999939,0.000000,""};
+item67[] = {"",7,210,-29.000042,545.999939,-20.999958,554.000061,0.000000,""};
+item68[] = {"No_Agent",4,218,25.000000,225.000000,125.000000,275.000000,5.000000,"No Agent"};
+item69[] = {"____FAKE____",9,2760,0.000000,0.000000,0.000000,0.000000,0.000000,"____FAKE____"};
link0[] = {0,10};
link1[] = {0,55};
link2[] = {2,3};
@@ -74,89 +78,95 @@ link3[] = {3,17};
link4[] = {3,18};
link5[] = {3,54};
link6[] = {4,25};
-link7[] = {5,26};
+link7[] = {5,66};
link8[] = {6,7};
link9[] = {7,14};
link10[] = {7,20};
link11[] = {7,53};
link12[] = {8,4};
link13[] = {8,9};
-link14[] = {9,5};
-link15[] = {10,11};
-link16[] = {11,12};
-link17[] = {12,2};
-link18[] = {12,13};
-link19[] = {13,6};
-link20[] = {14,18};
-link21[] = {15,16};
-link22[] = {16,8};
-link23[] = {16,29};
-link24[] = {16,64};
-link25[] = {17,3};
-link26[] = {18,19};
-link27[] = {19,8};
-link28[] = {19,15};
-link29[] = {20,7};
-link30[] = {22,23};
-link31[] = {23,47};
-link32[] = {24,35};
-link33[] = {25,27};
-link34[] = {26,25};
-link35[] = {27,36};
-link36[] = {27,40};
-link37[] = {28,43};
-link38[] = {29,22};
-link39[] = {29,52};
-link40[] = {29,58};
-link41[] = {30,31};
-link42[] = {31,32};
-link43[] = {31,34};
-link44[] = {31,45};
-link45[] = {32,33};
-link46[] = {33,59};
-link47[] = {34,9};
-link48[] = {35,7};
-link49[] = {36,37};
-link50[] = {37,39};
-link51[] = {37,41};
-link52[] = {38,42};
-link53[] = {39,38};
-link54[] = {39,40};
-link55[] = {39,51};
-link56[] = {40,28};
-link57[] = {41,37};
-link58[] = {42,43};
-link59[] = {43,1};
-link60[] = {44,46};
-link61[] = {45,44};
-link62[] = {46,33};
-link63[] = {47,48};
-link64[] = {48,24};
-link65[] = {49,50};
-link66[] = {50,42};
-link67[] = {51,49};
-link68[] = {52,30};
-link69[] = {53,7};
-link70[] = {54,3};
-link71[] = {55,1};
-link72[] = {58,59};
-link73[] = {59,23};
-link74[] = {64,16};
-link75[] = {21,65};
-link76[] = {65,21};
-link77[] = {56,65};
-link78[] = {65,56};
-link79[] = {57,65};
-link80[] = {65,57};
-link81[] = {60,65};
-link82[] = {65,60};
-link83[] = {61,65};
-link84[] = {65,61};
-link85[] = {62,65};
-link86[] = {65,62};
-link87[] = {63,65};
-link88[] = {65,63};
-globals[] = {25.000000,1,0,0,0,640,480,1,157,6316128,1,-640.890259,559.593506,704.095276,-186.586182,806,598,1};
+link14[] = {9,65};
+link15[] = {9,67};
+link16[] = {10,11};
+link17[] = {11,12};
+link18[] = {12,2};
+link19[] = {12,13};
+link20[] = {13,6};
+link21[] = {14,18};
+link22[] = {15,16};
+link23[] = {16,8};
+link24[] = {16,29};
+link25[] = {16,64};
+link26[] = {17,3};
+link27[] = {18,19};
+link28[] = {18,68};
+link29[] = {19,8};
+link30[] = {19,15};
+link31[] = {20,7};
+link32[] = {22,23};
+link33[] = {23,47};
+link34[] = {24,35};
+link35[] = {25,27};
+link36[] = {26,25};
+link37[] = {27,36};
+link38[] = {27,40};
+link39[] = {28,43};
+link40[] = {29,22};
+link41[] = {29,52};
+link42[] = {29,58};
+link43[] = {30,31};
+link44[] = {31,32};
+link45[] = {31,34};
+link46[] = {31,45};
+link47[] = {32,33};
+link48[] = {33,59};
+link49[] = {34,67};
+link50[] = {35,7};
+link51[] = {36,37};
+link52[] = {37,39};
+link53[] = {37,41};
+link54[] = {38,42};
+link55[] = {39,38};
+link56[] = {39,40};
+link57[] = {39,51};
+link58[] = {40,28};
+link59[] = {41,37};
+link60[] = {42,43};
+link61[] = {43,1};
+link62[] = {44,46};
+link63[] = {45,44};
+link64[] = {46,33};
+link65[] = {47,48};
+link66[] = {48,24};
+link67[] = {49,50};
+link68[] = {50,42};
+link69[] = {51,49};
+link70[] = {52,30};
+link71[] = {53,7};
+link72[] = {54,3};
+link73[] = {55,1};
+link74[] = {58,59};
+link75[] = {59,23};
+link76[] = {64,16};
+link77[] = {65,26};
+link78[] = {66,26};
+link79[] = {67,5};
+link80[] = {68,27};
+link81[] = {21,69};
+link82[] = {69,21};
+link83[] = {56,69};
+link84[] = {69,56};
+link85[] = {57,69};
+link86[] = {69,57};
+link87[] = {60,69};
+link88[] = {69,60};
+link89[] = {61,69};
+link90[] = {69,61};
+link91[] = {62,69};
+link92[] = {69,62};
+link93[] = {63,69};
+link94[] = {69,63};
+globals[] = {25.000000,1,0,0,0,640,480,1,164,6316128,1,-544.672852,535.761841,853.890503,52.277908,806,598,1};
window[] = {2,-1,-1,-1,-1,727,26,1234,26,3,824};
*//*%FSM*/
class FSM
@@ -251,6 +261,16 @@ class FSM
action=/*%FSM*/""/*%FSM*/;
};
/*%FSM*/
+ /*%FSM*/
+ class No_Agent
+ {
+ priority = 5.000000;
+ to="Cleanup_";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(isNull _agent)"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
/*%FSM*/
class Has_Target
{
@@ -290,6 +310,16 @@ class FSM
action=/*%FSM*/""/*%FSM*/;
};
/*%FSM*/
+ /*%FSM*/
+ class No_Agent_1
+ {
+ priority = 5.000000;
+ to="Cleanup_";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(isNull _agent)"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
/*%FSM*/
class player_check
{
@@ -370,6 +400,16 @@ class FSM
action=/*%FSM*/""/*%FSM*/;
};
/*%FSM*/
+ /*%FSM*/
+ class No_Agent
+ {
+ priority = 5.000000;
+ to="Cleanup_";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(isNull _agent)"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
/*%FSM*/
class Has_Target
{
@@ -409,6 +449,16 @@ class FSM
action=/*%FSM*/""/*%FSM*/;
};
/*%FSM*/
+ /*%FSM*/
+ class No_Agent_1
+ {
+ priority = 5.000000;
+ to="Cleanup_";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(isNull _agent)"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
/*%FSM*/
class player_check
{
@@ -515,8 +565,7 @@ class FSM
name = "Chase";
init = /*%FSM*/"_timeN = diag_tickTime;" \n
"" \n
- "if (isNull _agent) exitWith {}; //Prevent errors if zombie is suddenly deleted" \n
- "_adjustSpeed = if (DZE_slowZombies) then {2} else {_agent getVariable [""speedLimit"", 3]};" \n
+ "_adjustSpeed = if (DZE_slowZombies) then {2} else {_agent getVariable [""speedLimit"", 3]};" \n
"_agent forceSpeed _adjustSpeed;" \n
"" \n
"_target = _agent call zombie_findTargetAgent;" \n
@@ -533,7 +582,6 @@ class FSM
"};" \n
"" \n
"" \n
- "" \n
"//Check if LOS" \n
"if ((_agroCheck % 8) == 0) then {" \n
" _agroCheck = 0;" \n
@@ -556,6 +604,16 @@ class FSM
action=/*%FSM*/""/*%FSM*/;
};
/*%FSM*/
+ /*%FSM*/
+ class No_Agent
+ {
+ priority = 5.000000;
+ to="Cleanup_";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(isNull _agent)"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
/*%FSM*/
class Not_Alive
{
@@ -566,16 +624,6 @@ class FSM
action=/*%FSM*/""/*%FSM*/;
};
/*%FSM*/
- /*%FSM*/
- class No_Target
- {
- priority = 3.000000;
- to="Reset_Targeting";
- precondition = /*%FSM*/""/*%FSM*/;
- condition=/*%FSM*/"(isNull _target)"/*%FSM*/;
- action=/*%FSM*/""/*%FSM*/;
- };
- /*%FSM*/
/*%FSM*/
class Target_Dead
{
@@ -586,6 +634,16 @@ class FSM
action=/*%FSM*/"_timeN = diag_tickTime;"/*%FSM*/;
};
/*%FSM*/
+ /*%FSM*/
+ class No_Target
+ {
+ priority = 3.000000;
+ to="Reset_Targeting";
+ precondition = /*%FSM*/""/*%FSM*/;
+ condition=/*%FSM*/"(isNull _target)"/*%FSM*/;
+ action=/*%FSM*/""/*%FSM*/;
+ };
+ /*%FSM*/
/*%FSM*/
class cant_see
{
@@ -602,7 +660,7 @@ class FSM
priority = 2.000000;
to="Chase";
precondition = /*%FSM*/""/*%FSM*/;
- condition=/*%FSM*/"(diag_tickTime - _timeN) > 1" \n
+ condition=/*%FSM*/"(diag_tickTime - _timeN) > 2" \n
""/*%FSM*/;
action=/*%FSM*/"_agroCheck= _agroCheck + 1;"/*%FSM*/;
};
@@ -760,7 +818,7 @@ class FSM
"_remotetargets = _agent getVariable [""remotetargets"",[]];" \n
"" \n
"//Clear remote on reset" \n
- "if (isNull _agent) then {_remotetargets = [];};" \n
+ "if (isNull _agent) then {_remotetargets = [];};" \n
"if (count _remotetargets > 0) then {" \n
" _agent setVariable [""remotetargets"",[],true];" \n
"};" \n