diff --git a/SQF/dayz_code/system/zombie_agent.fsm b/SQF/dayz_code/system/zombie_agent.fsm index 88707f8b0..c6c59c300 100644 --- a/SQF/dayz_code/system/zombie_agent.fsm +++ b/SQF/dayz_code/system/zombie_agent.fsm @@ -3,171 +3,204 @@ /* item0[] = {"init",0,250,50.000000,-400.000000,150.000000,-350.000000,0.000000,"init"}; item1[] = {"End",1,250,175.000000,-250.000000,275.000000,-200.000000,0.000000,"End"}; -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"}; +item2[] = {"wait",4,218,-75.000000,-50.000000,25.000000,0.000000,0.000000,"wait"}; +item3[] = {"Looking_for_Targ",2,250,-75.000000,25.000000,25.000000,75.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,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"}; +item6[] = {"loiter",4,218,-1225.000000,0.000000,-1125.000000,50.000000,0.000000,"loiter"}; +item7[] = {"Loiter",2,250,-1225.000000,75.000000,-1125.000000,125.000000,0.000000,"Loiter"}; item8[] = {"",7,210,-29.000042,396.000000,-20.999958,404.000000,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,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.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"}; -item22[] = {"No_Target",4,218,-400.000000,450.000000,-300.000000,500.000000,3.000000,"No" \n "Target"}; -item23[] = {"",7,210,-479.000000,471.000000,-471.000000,479.000000,0.000000,""}; -item24[] = {"",7,210,-479.000000,208.500000,-471.000000,216.500000,0.000000,""}; -item25[] = {"",7,210,221.000000,396.000000,229.000000,404.000000,0.000000,""}; -item26[] = {"",7,210,221.000000,471.000000,229.000000,479.000000,0.000000,""}; -item27[] = {"Cleanup_",2,250,175.000000,200.000000,275.000000,250.000000,0.000000,"Cleanup?"}; -item28[] = {"nobody_around",4,218,175.000000,-25.000000,275.000000,25.000000,0.000000,"nobody" \n "around"}; -item29[] = {"",7,210,-104.000023,471.000000,-95.999985,479.000000,0.000000,""}; -item30[] = {"cant_see",4,218,-275.000000,575.000000,-175.000000,625.000000,2.000000,"cant" \n "see"}; -item31[] = {"Finish_Move",2,250,-275.000000,650.000000,-175.000000,700.000000,0.000000,"Finish" \n "Move"}; -item32[] = {"finished",4,218,-425.000000,650.000000,-325.000000,700.000000,1.000000,"finished"}; -item33[] = {"",7,210,-479.000000,671.000000,-471.000000,679.000000,0.000000,""}; -item34[] = {"",7,210,-29.000002,671.000000,-20.999998,679.000000,0.000000,""}; -item35[] = {"",7,210,-404.000000,208.500000,-396.000000,216.500000,0.000000,""}; -item36[] = {"someone_here",4,218,300.000000,200.000000,400.000000,250.000000,0.000000,"someone" \n "here"}; -item37[] = {"wait",2,250,300.000000,125.000000,400.000000,175.000000,0.000000,"wait"}; -item38[] = {"time_up",4,218,300.000000,-25.000000,400.000000,25.000000,0.000000,"time" \n "up"}; -item39[] = {"",7,210,346.000000,95.999992,354.000000,104.000000,0.000000,""}; -item40[] = {"",7,210,221.000000,96.000008,229.000000,103.999977,0.000000,""}; -item41[] = {"Time_Check",4,218,425.000000,125.000000,525.000000,175.000000,0.000000,"Time" \n "Check"}; -item42[] = {"",7,210,346.000000,-79.000000,354.000000,-71.000000,0.000000,""}; -item43[] = {"",7,210,221.000000,-79.000000,229.000000,-71.000000,0.000000,""}; -item44[] = {"too_long",4,218,-425.000000,725.000000,-325.000000,775.000000,0.000000,"too long"}; -item45[] = {"",7,210,-229.000000,746.000000,-221.000000,754.000000,0.000000,""}; -item46[] = {"",7,210,-479.000000,746.000000,-471.000000,754.000000,0.000000,""}; -item47[] = {"Reset_Targeting",2,250,-525.000000,325.000000,-425.000000,375.000000,0.000000,"Reset" \n "Targeting"}; -item48[] = {"true",8,218,-525.000000,250.000000,-425.000000,300.000000,0.000000,"true"}; -item49[] = {"deleted",4,218,425.000000,-25.000000,525.000000,25.000000,0.000000,"deleted"}; -item50[] = {"",7,210,471.000000,-79.000000,479.000000,-71.000000,0.000000,""}; -item51[] = {"",7,210,471.000000,95.999977,479.000000,104.000023,0.000000,""}; -item52[] = {"",7,210,-104.000000,596.000000,-95.999992,604.000000,0.000000,""}; -item53[] = {"player_check",4,218,-525.000000,75.000000,-425.000000,125.000000,2.000000,"player" \n "check"}; -item54[] = {"player_check",4,218,50.000000,0.000000,150.000000,50.000000,2.000000,"player" \n "check"}; -item55[] = {"is_Dedicated",4,218,50.000000,-250.000000,150.000000,-200.000000,5.000000,"is" \n "Dedicated"}; -item56[] = {"MoveCompleted_",4,218,-525.000000,-75.000000,-425.000000,-25.000000,3.000000,"MoveCompleted "}; -item57[] = {"Failed_Move",4,218,-675.000000,-100.000000,-575.000000,-50.000000,3.000000,"Failed Move"}; -item58[] = {"Target_Dead",4,218,-275.000000,500.000000,-175.000000,550.000000,3.000000,"Target Dead"}; -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,-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[] = {"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____"}; +item12[] = {"",7,210,-1179.000122,-29.000004,-1170.999878,-20.999996,0.000000,""}; +item13[] = {"",7,210,-354.000031,208.500000,-346.000000,216.500000,0.000000,""}; +item14[] = {"Has_Target",4,4314,-150.000000,275.000000,-50.000000,325.000000,5.000000,"Has" \n "Target"}; +item15[] = {"Chase",2,250,-150.000000,375.000000,-50.000000,425.000000,0.000000,"Chase"}; +item16[] = {"Time_Check",4,218,50.000000,25.000000,150.000000,75.000000,1.000000,"Time" \n "Check"}; +item17[] = {"",7,210,-29.000006,208.500000,-20.999994,216.500000,0.000000,""}; +item18[] = {"",7,210,-29.000006,296.000000,-20.999996,304.000031,0.000000,""}; +item19[] = {"Time_Check",4,218,-1100.000000,75.000000,-1000.000000,125.000000,0.000000,"Time" \n "Check"}; +item20[] = {"No_Target",4,218,-400.000000,450.000000,-300.000000,500.000000,3.000000,"No" \n "Target"}; +item21[] = {"",7,210,-479.000000,471.000000,-471.000000,479.000000,0.000000,""}; +item22[] = {"",7,210,-729.000000,346.000000,-721.000000,354.000000,0.000000,""}; +item23[] = {"",7,210,221.000000,396.000000,229.000000,404.000000,0.000000,""}; +item24[] = {"",7,210,221.000000,471.000000,229.000000,479.000000,0.000000,""}; +item25[] = {"Cleanup_",2,250,175.000000,200.000000,275.000000,250.000000,0.000000,"Cleanup?"}; +item26[] = {"nobody_around",4,218,175.000000,-25.000000,275.000000,25.000000,0.000000,"nobody" \n "around"}; +item27[] = {"",7,210,-104.000023,471.000000,-95.999985,479.000000,0.000000,""}; +item28[] = {"cant_see",4,218,-275.000000,575.000000,-175.000000,625.000000,2.000000,"cant" \n "see"}; +item29[] = {"Finish_Move",2,250,-275.000000,650.000000,-175.000000,700.000000,0.000000,"Finish" \n "Move"}; +item30[] = {"finished",4,218,-425.000000,650.000000,-325.000000,700.000000,1.000000,"finished"}; +item31[] = {"",7,210,-479.000000,671.000000,-471.000000,679.000000,0.000000,""}; +item32[] = {"",7,210,-29.000002,671.000000,-20.999998,679.000000,0.000000,""}; +item33[] = {"Move",2,250,-650.000000,50.000000,-550.000000,100.000000,0.000000,"Move"}; +item34[] = {"someone_here",4,218,300.000000,200.000000,400.000000,250.000000,0.000000,"someone" \n "here"}; +item35[] = {"wait",2,250,300.000000,125.000000,400.000000,175.000000,0.000000,"wait"}; +item36[] = {"time_up",4,218,300.000000,-25.000000,400.000000,25.000000,0.000000,"time" \n "up"}; +item37[] = {"",7,210,346.000000,95.999992,354.000000,104.000000,0.000000,""}; +item38[] = {"",7,210,221.000000,96.000008,229.000000,103.999977,0.000000,""}; +item39[] = {"Time_Check",4,218,425.000000,125.000000,525.000000,175.000000,0.000000,"Time" \n "Check"}; +item40[] = {"",7,210,346.000000,-79.000000,354.000000,-71.000000,0.000000,""}; +item41[] = {"",7,210,221.000000,-79.000000,229.000000,-71.000000,0.000000,""}; +item42[] = {"too_long",4,218,-425.000000,725.000000,-325.000000,775.000000,0.000000,"too long"}; +item43[] = {"",7,210,-229.000000,746.000000,-221.000000,754.000000,0.000000,""}; +item44[] = {"",7,210,-479.000000,746.000000,-471.000000,754.000000,0.000000,""}; +item45[] = {"Reset_Targeting",2,250,-525.000000,325.000000,-425.000000,375.000000,0.000000,"Reset" \n "Targeting"}; +item46[] = {"true",8,218,-1050.000000,275.000000,-950.000000,325.000000,0.000000,"true"}; +item47[] = {"deleted",4,218,425.000000,-25.000000,525.000000,25.000000,0.000000,"deleted"}; +item48[] = {"",7,210,471.000000,-79.000000,479.000000,-71.000000,0.000000,""}; +item49[] = {"",7,210,471.000000,95.999977,479.000000,104.000023,0.000000,""}; +item50[] = {"",7,210,-104.000000,596.000000,-95.999992,604.000000,0.000000,""}; +item51[] = {"player_check",4,218,-1350.000000,75.000000,-1250.000000,125.000000,2.000000,"player" \n "check"}; +item52[] = {"player_check",4,218,50.000000,-50.000000,150.000000,0.000000,2.000000,"player" \n "check"}; +item53[] = {"is_Dedicated",4,218,50.000000,-250.000000,150.000000,-200.000000,5.000000,"is" \n "Dedicated"}; +item54[] = {"MoveCompleted_",4,218,-1250.000000,-325.000000,-1150.000000,-275.000000,3.000000,"MoveCompleted "}; +item55[] = {"Failed_Move",4,218,-1425.000000,-375.000000,-1325.000000,-325.000000,3.000000,"Failed Move"}; +item56[] = {"Target_Dead",4,218,-275.000000,500.000000,-175.000000,550.000000,3.000000,"Target Dead"}; +item57[] = {"",7,210,-479.000000,521.000000,-471.000000,529.000000,0.000000,""}; +item58[] = {"Start_Attack",4,218,-1475.000000,-100.000000,-1375.000000,-50.000000,0.000000,"Start Attack"}; +item59[] = {"End_Attack",4,218,-1475.000000,-175.000000,-1375.000000,-125.000000,0.000000,"End Attack"}; +item60[] = {"TargetMoved",4,218,-1350.000000,-275.000000,-1250.000000,-225.000000,3.000000,"TargetMoved"}; +item61[] = {"Not_moving",4,218,-1450.000000,-275.000000,-1350.000000,-225.000000,1.000000,"Not moving"}; +item62[] = {"TimeCheck",4,218,-250.000000,275.000000,-150.000000,325.000000,2.000000,"TimeCheck"}; +item63[] = {"No_Agent_1",4,218,25.000000,450.000000,125.000000,500.000000,5.000000,"No Agent"}; +item64[] = {"",7,210,221.000015,546.000061,229.000000,553.999939,0.000000,""}; +item65[] = {"",7,210,-29.000042,545.999939,-20.999958,554.000061,0.000000,""}; +item66[] = {"No_Agent",4,218,25.000000,225.000000,125.000000,275.000000,5.000000,"No Agent"}; +item67[] = {"loiter",4,218,-400.000000,-50.000000,-300.000000,0.000000,0.000000,"loiter"}; +item68[] = {"Loiter_1",2,250,-400.000000,25.000000,-300.000000,75.000000,0.000000,"Loiter"}; +item69[] = {"Time_Check",4,218,-275.000000,50.000000,-175.000000,100.000000,0.000000,"Time" \n "Check"}; +item70[] = {"MoveCompleted_",4,218,-525.000000,50.000000,-425.000000,100.000000,3.000000,"MoveCompleted "}; +item71[] = {"Failed_Move",4,218,-525.000000,100.000000,-425.000000,150.000000,3.000000,"Failed Move"}; +item72[] = {"Not_moving",4,218,-525.000000,0.000000,-425.000000,50.000000,1.000000,"Not moving"}; +item73[] = {"",7,210,-604.000000,-29.000000,-596.000000,-21.000000,0.000000,""}; +item74[] = {"player_check",4,218,-275.000000,0.000000,-175.000000,50.000000,2.000000,"player" \n "check"}; +item75[] = {"True",8,218,-525.000000,-50.000000,-425.000000,0.000000,0.000000,"True"}; +item76[] = {"",7,210,-729.000000,-129.000000,-721.000000,-121.000000,0.000000,""}; +item77[] = {"",7,210,-354.000000,-129.000000,-346.000000,-121.000000,0.000000,""}; +item78[] = {"InRange",4,218,-275.000000,400.000000,-175.000000,450.000000,1.000000,"InRange"}; +item79[] = {"Attacking_Wait",2,250,-400.000000,375.000000,-300.000000,425.000000,0.000000,"Attacking Wait"}; +item80[] = {"NotInRange",4,218,-275.000000,350.000000,-175.000000,400.000000,1.000000,"NotInRange"}; +item81[] = {"TimeCheck",4,218,-400.000000,275.000000,-300.000000,325.000000,0.000000,"TimeCheck"}; +item82[] = {"____FAKE____",9,3280,0.000000,0.000000,0.000000,0.000000,0.000000,"____FAKE____"}; link0[] = {0,10}; -link1[] = {0,55}; +link1[] = {0,53}; link2[] = {2,3}; -link3[] = {3,17}; -link4[] = {3,18}; -link5[] = {3,54}; -link6[] = {4,25}; -link7[] = {5,66}; +link3[] = {3,16}; +link4[] = {3,17}; +link5[] = {3,52}; +link6[] = {4,23}; +link7[] = {5,64}; link8[] = {6,7}; -link9[] = {7,14}; -link10[] = {7,20}; -link11[] = {7,53}; -link12[] = {8,4}; -link13[] = {8,9}; +link9[] = {7,19}; +link10[] = {7,51}; +link11[] = {8,4}; +link12[] = {8,9}; +link13[] = {9,63}; 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}; +link15[] = {10,11}; +link16[] = {11,2}; +link17[] = {11,77}; +link18[] = {12,6}; +link19[] = {13,17}; +link20[] = {14,15}; +link21[] = {15,8}; +link22[] = {15,27}; +link23[] = {15,62}; +link24[] = {15,78}; +link25[] = {16,3}; +link26[] = {17,18}; +link27[] = {17,66}; +link28[] = {18,8}; +link29[] = {18,14}; +link30[] = {19,7}; +link31[] = {20,21}; +link32[] = {21,45}; +link33[] = {22,76}; +link34[] = {23,25}; +link35[] = {24,23}; +link36[] = {25,34}; +link37[] = {25,38}; +link38[] = {26,41}; +link39[] = {27,20}; +link40[] = {27,50}; +link41[] = {27,56}; +link42[] = {28,29}; +link43[] = {29,30}; +link44[] = {29,32}; +link45[] = {29,43}; +link46[] = {30,31}; +link47[] = {31,57}; +link48[] = {32,65}; +link49[] = {33,73}; +link50[] = {34,35}; +link51[] = {35,37}; +link52[] = {35,39}; +link53[] = {36,40}; +link54[] = {37,36}; +link55[] = {37,38}; +link56[] = {37,49}; +link57[] = {38,26}; +link58[] = {39,35}; +link59[] = {40,41}; +link60[] = {41,1}; +link61[] = {42,44}; +link62[] = {43,42}; +link63[] = {44,31}; +link64[] = {45,22}; 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}; +link66[] = {48,40}; +link67[] = {49,47}; +link68[] = {50,28}; +link69[] = {51,7}; +link70[] = {52,3}; +link71[] = {53,1}; +link72[] = {56,57}; +link73[] = {57,21}; +link74[] = {62,15}; +link75[] = {63,24}; +link76[] = {64,24}; +link77[] = {65,5}; +link78[] = {66,25}; +link79[] = {67,68}; +link80[] = {68,13}; +link81[] = {68,69}; +link82[] = {68,70}; +link83[] = {68,71}; +link84[] = {68,72}; +link85[] = {68,74}; +link86[] = {69,68}; +link87[] = {70,33}; +link88[] = {71,33}; +link89[] = {72,33}; +link90[] = {73,75}; +link91[] = {74,68}; +link92[] = {75,68}; +link93[] = {76,77}; +link94[] = {77,67}; +link95[] = {78,79}; +link96[] = {79,80}; +link97[] = {79,81}; +link98[] = {80,15}; +link99[] = {81,79}; +link100[] = {82,6}; +link101[] = {46,82}; +link102[] = {82,46}; +link103[] = {54,82}; +link104[] = {82,54}; +link105[] = {55,82}; +link106[] = {82,55}; +link107[] = {58,82}; +link108[] = {82,58}; +link109[] = {59,82}; +link110[] = {82,59}; +link111[] = {60,82}; +link112[] = {82,60}; +link113[] = {61,82}; +link114[] = {82,61}; +globals[] = {25.000000,1,0,0,0,640,480,1,186,6316128,1,-751.957153,322.518677,630.750244,-166.441528,806,598,1}; +window[] = {2,-1,-1,-1,-1,805,104,1312,104,3,824}; *//*%FSM*/ class FSM { @@ -287,6 +320,12 @@ class FSM " _agent setVariable[""doLoiter"",true,true];" \n "};" \n "" \n + "_myDest = [ _agent modelToWorld [0,0,0]];" \n + "_agent setVariable [""myDest"",(_agent modelToWorld [0,0,0])];" \n + "" \n + "_adjustSpeed = if (DZE_slowZombies) then {2} else {_agent getVariable [""speedLimit"", 3]};" \n + "_agent forceSpeed _adjustSpeed;" \n + "" \n "//Lets see if we can get the AI to stop running away before heading to the player" \n "_agent moveTo (getposATL _agent);" \n "" \n @@ -390,75 +429,6 @@ class FSM precondition = /*%FSM*/""/*%FSM*/; class Links { - /*%FSM*/ - class Nobody_Near - { - priority = 6.000000; - to="Cleanup_"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!_isSomeone"/*%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 - { - priority = 5.000000; - to="Chase"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!(isNull _target)"/*%FSM*/; - action=/*%FSM*/"//Leader cries out" \n - "if (_isSomeone) then {" \n - " [_agent,""spotted"",0,false] call dayz_zombieSpeak;" \n - "};" \n - "" \n - "if (!_hasMoved) then {" \n - " _agent setVariable[""doLoiter"",true,true];" \n - "};" \n - "" \n - "//Lets see if we can get the AI to stop running away before heading to the player" \n - "_agent moveTo (getposATL _agent);" \n - "" \n - "_countr = 0;" \n - "_losCheck = 0;" \n - "_agroCheck = 0;" \n - "_cantSee = false;" \n - "_cantSeeAnything = false;" \n - "" \n - "" \n - "//diag_log (""Has Target"");"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class Not_Alive - { - priority = 5.000000; - to="Cleanup_"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!_isAlive"/*%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 { @@ -539,10 +509,10 @@ class FSM class loiter { priority = 0.000000; - to="Loiter"; + to="Loiter_1"; precondition = /*%FSM*/""/*%FSM*/; condition=/*%FSM*/"_hasMoved"/*%FSM*/; - action=/*%FSM*/"_myDest = [_agent,_position] call zombie_loiter;" \n + action=/*%FSM*/"" \n "_agent forceSpeed 2;"/*%FSM*/; }; /*%FSM*/ @@ -564,21 +534,15 @@ class FSM { name = "Chase"; init = /*%FSM*/"_timeN = diag_tickTime;" \n - "" \n - "_adjustSpeed = if (DZE_slowZombies) then {2} else {_agent getVariable [""speedLimit"", 3]};" \n - "_agent forceSpeed _adjustSpeed;" \n "" \n "_target = _agent call zombie_findTargetAgent;" \n - "_targetPos = getPosATL _target;" \n + "_targetPos = _target modelToWorld [0,-1,0];" \n "_isAlive = alive _agent;" \n "_isTargetAlive = alive _target;" \n "" \n "//Move to location" \n "if (_movingTo distance _targetPos > .5) then {" \n - " //diag_log format[""Chase - %1 - [%2,%3] - Range %4"",(typeof _agent),_myDest,_movingTo,(_myDest distance _movingTo)];" \n - "" \n " _agent moveTo _targetPos;" \n - " _movingTo = _targetPos;" \n "};" \n "" \n "" \n @@ -586,11 +550,7 @@ class FSM "if ((_agroCheck % 8) == 0) then {" \n " _agroCheck = 0;" \n " _cantSee = [_target,_agent] call dayz_losCheck;" \n - "};" \n - "" \n - "" \n - "" \n - "//diag_log format[""%1"",(typeof _agent)];"/*%FSM*/; + "};"/*%FSM*/; precondition = /*%FSM*/""/*%FSM*/; class Links { @@ -604,6 +564,16 @@ class FSM action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ + /*%FSM*/ + class Not_Alive + { + priority = 5.000000; + to="Cleanup_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_isAlive"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ /*%FSM*/ class No_Agent { @@ -614,13 +584,13 @@ class FSM action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ - /*%FSM*/ - class Not_Alive + /*%FSM*/ + class No_Target { - priority = 5.000000; - to="Cleanup_"; + priority = 3.000000; + to="Reset_Targeting"; precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!_isAlive"/*%FSM*/; + condition=/*%FSM*/"(isNull _target)"/*%FSM*/; action=/*%FSM*/""/*%FSM*/; }; /*%FSM*/ @@ -634,16 +604,6 @@ 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 { @@ -654,8 +614,8 @@ class FSM action=/*%FSM*/"//diag_log (""Cant See"");"/*%FSM*/; }; /*%FSM*/ - /*%FSM*/ - class TimeOut + /*%FSM*/ + class TimeCheck { priority = 2.000000; to="Chase"; @@ -665,6 +625,20 @@ class FSM action=/*%FSM*/"_agroCheck= _agroCheck + 1;"/*%FSM*/; }; /*%FSM*/ + /*%FSM*/ + class InRange + { + priority = 1.000000; + to="Attacking_Wait"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_agent distance _targetPos < 3.1"/*%FSM*/; + action=/*%FSM*/"_agent stop true;" \n + "" \n + "_myDest = [ _agent modelToWorld [0,0,0]];" \n + "" \n + "_agent setVariable [""myDest"",(_agent modelToWorld [0,0,0])];"/*%FSM*/; + }; + /*%FSM*/ }; }; /*%FSM*/ @@ -746,6 +720,27 @@ class FSM }; }; /*%FSM*/ + /*%FSM*/ + class Move + { + name = "Move"; + init = /*%FSM*/"_myDest = [_agent,_position] call zombie_loiter;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class True + { + priority = 0.000000; + to="Loiter_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ /*%FSM*/ class wait { @@ -835,16 +830,205 @@ class FSM precondition = /*%FSM*/""/*%FSM*/; class Links { - /*%FSM*/ - class true + /*%FSM*/ + class loiter { priority = 0.000000; - to="Loiter"; + to="Loiter_1"; precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"true"/*%FSM*/; - action=/*%FSM*/"//diag_log (""Reset"");" \n + condition=/*%FSM*/"_hasMoved"/*%FSM*/; + action=/*%FSM*/"" \n + "_agent forceSpeed 2;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Loiter_1 + { + name = "Loiter_1"; + init = /*%FSM*/"_isAlive = alive _agent;" \n + "_timeN = diag_tickTime;" \n + "" \n + "//Look for target" \n + "_target = _agent call zombie_findTargetAgent;" \n + "" \n + "if (_myDest distance (getposATL _agent) > 3) then {" \n + " _agent moveTo _myDest;" \n + "};" \n + "" \n + "//diag_log (""loitering..."" + str(_agent distance (_agent getVariable [""myDest"",_myDest])));"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Nobody_Near + { + priority = 6.000000; + to="Cleanup_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_isSomeone"/*%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 No_Agent_1 + { + priority = 5.000000; + to="Cleanup_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(isNull _agent)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Not_Alive + { + priority = 5.000000; + to="Cleanup_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_isAlive"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Has_Target + { + priority = 5.000000; + to="Chase"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(isNull _target)"/*%FSM*/; + action=/*%FSM*/"//Leader cries out" \n + "if (_isSomeone) then {" \n + " [_agent,""spotted"",0,false] call dayz_zombieSpeak;" \n + "};" \n "" \n - ""/*%FSM*/; + "if (!_hasMoved) then {" \n + " _agent setVariable[""doLoiter"",true,true];" \n + "};" \n + "" \n + "_myDest = [ _agent modelToWorld [0,0,0]];" \n + "_agent setVariable [""myDest"",(_agent modelToWorld [0,0,0])];" \n + "" \n + "_adjustSpeed = if (DZE_slowZombies) then {2} else {_agent getVariable [""speedLimit"", 3]};" \n + "_agent forceSpeed _adjustSpeed;" \n + "" \n + "//Lets see if we can get the AI to stop running away before heading to the player" \n + "_agent moveTo (getposATL _agent);" \n + "" \n + "_countr = 0;" \n + "_losCheck = 0;" \n + "_agroCheck = 0;" \n + "_cantSee = false;" \n + "_cantSeeAnything = false;" \n + "" \n + "" \n + "//diag_log (""Has Target"");"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class MoveCompleted_ + { + priority = 3.000000; + to="Move"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"moveToCompleted _agent;" \n + "//_agent distance (_agent getVariable [""myDest"",getposATL _agent]) < 3"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Failed_Move + { + priority = 3.000000; + to="Move"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"moveToFailed _agent;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class player_check + { + priority = 2.000000; + to="Loiter_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _entityTime) > 30"/*%FSM*/; + action=/*%FSM*/"_entityTime = diag_tickTime;" \n + "" \n + "_list = (getposATL _agent) nearEntities [[""CAManBase"",""AllVehicles""],300];" \n + "_isSomeone = ({isPlayer _x} count _list) > 0;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Not_moving + { + priority = 1.000000; + to="Move"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(Speed _agent == 0)" \n + ""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Time_Check + { + priority = 0.000000; + to="Loiter_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(diag_tickTime - _timeN) > 1"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Attacking_Wait + { + name = "Attacking_Wait"; + init = /*%FSM*/"_targetPos = _target modelToWorld [0,-1,0];" \n + "" \n + "_timeN = diag_tickTime;" \n + "" \n + "//Check if LOS" \n + "if ((_agroCheck % 8) == 0) then {" \n + " _agroCheck = 0;" \n + " _cantSee = [_target,_agent] call dayz_losCheck;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class NotInRange + { + priority = 1.000000; + to="Chase"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_agent distance _targetPos > 3.1"/*%FSM*/; + action=/*%FSM*/"_agent stop false;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class TimeCheck + { + priority = 0.000000; + to="Attacking_Wait"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((diag_tickTime - _timeN) > 2)"/*%FSM*/; + action=/*%FSM*/"_agroCheck= _agroCheck + 1;"/*%FSM*/; }; /*%FSM*/ }; @@ -858,6 +1042,17 @@ class FSM precondition = /*%FSM*/""/*%FSM*/; class Links { + /*%FSM*/ + class TargetMoved + { + priority = 3.000000; + to="____FAKE____"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(((_agent distance _target) >= 3) and ((diag_tickTime - _timeN) > 1))" \n + ""/*%FSM*/; + action=/*%FSM*/"diag_log (""TargetMoved"");"/*%FSM*/; + }; + /*%FSM*/ /*%FSM*/ class MoveCompleted_ { @@ -882,17 +1077,6 @@ class FSM ""/*%FSM*/; }; /*%FSM*/ - /*%FSM*/ - class TargetMoved - { - priority = 3.000000; - to="____FAKE____"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"(((_agent distance _target) >= 3) and ((diag_tickTime - _timeN) > 1))" \n - ""/*%FSM*/; - action=/*%FSM*/"diag_log (""TargetMoved"");"/*%FSM*/; - }; - /*%FSM*/ /*%FSM*/ class Not_moving { @@ -904,30 +1088,6 @@ class FSM action=/*%FSM*/"_myDest = [_agent,_position] call zombie_loiter;"/*%FSM*/; }; /*%FSM*/ - /*%FSM*/ - class Check - { - priority = 1.000000; - to="____FAKE____"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"((_agent distance _target) >= 2)" \n - ""/*%FSM*/; - action=/*%FSM*/"// reset stance to favorite one" \n - "//if (_agent distance _targetPos > 5) then {" \n - "// _agent setUnitPos (_agent getVariable [""stance"", ""UP""]);" \n - "//};" \n - "" \n - "//diag_log (""Reset Chase"");" \n - "" \n - "/*" \n - "if (_agent distance _targetPos < 5) then {" \n - " //Stand up" \n - " _agent setUnitPos ""UP"";" \n - "};" \n - "*/" \n - ""/*%FSM*/; - }; - /*%FSM*/ /*%FSM*/ class End_Attack { @@ -952,6 +1112,29 @@ class FSM "_timeAttack = diag_ticktime;"/*%FSM*/; }; /*%FSM*/ + /*%FSM*/ + class true + { + priority = 0.000000; + to="____FAKE____"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"true"/*%FSM*/; + action=/*%FSM*/"//diag_log (""Reset"");" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class loiter + { + priority = 0.000000; + to="Loiter"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_hasMoved"/*%FSM*/; + action=/*%FSM*/"_myDest = [_agent,_position] call zombie_loiter;" \n + "_agent forceSpeed 2;"/*%FSM*/; + }; + /*%FSM*/ }; }; /*%FSM*/