mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
726 lines
26 KiB
Plaintext
726 lines
26 KiB
Plaintext
/*%FSM<COMPILE "F:\Program Files (x86)\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, sharky">*/
|
|
/*%FSM<HEAD>*/
|
|
/*
|
|
item0[] = {"shark",0,250,-306.490601,-197.039688,-216.490692,-147.039795,0.000000,"shark"};
|
|
item1[] = {"_",8,218,62.332706,-185.990021,114.284866,-157.584717,0.000000,""};
|
|
item2[] = {"decision",2,250,165.295456,-196.723892,255.295410,-146.723892,0.000000,"decision"};
|
|
item3[] = {"decision_made",4,218,45.967728,-38.050251,135.967682,11.949742,100.000000,"decision made"};
|
|
item4[] = {"action",2,250,45.978439,130.034073,135.978394,180.034134,0.000000,"action"};
|
|
item5[] = {"track",4,218,331.340027,-278.502258,421.340027,-228.502335,70.000000,"track"};
|
|
item6[] = {"dispose",4,218,110.636703,-324.560150,200.636765,-274.560181,90.000000,"dispose"};
|
|
item7[] = {"_",8,218,64.556534,392.347595,116.508629,420.752838,0.000000,""};
|
|
item8[] = {"reset_vars",2,250,-57.248745,-196.860123,32.751255,-146.860138,0.000000,"reset vars"};
|
|
item9[] = {"_",8,218,-150.031967,-184.788101,-98.079796,-156.382797,0.000000,""};
|
|
item10[] = {"complete",4,218,-57.042290,-38.963421,32.957973,11.036604,100.000000,"complete"};
|
|
item11[] = {"wander",4,218,266.070313,121.058060,356.070313,171.058060,50.000000,"wander"};
|
|
item12[] = {"end",1,4346,411.966034,1.474794,501.966095,51.474747,0.000000,"end"};
|
|
item13[] = {"dispose",4,218,231.223953,1.285551,321.223938,51.285561,40.000000,"dispose"};
|
|
item14[] = {"change_depth",4,218,-142.086060,128.815338,-52.086075,178.815338,90.000000,"change depth"};
|
|
item15[] = {"do_wander",2,250,406.553650,119.943130,496.553680,169.943130,0.000000,"do wander"};
|
|
item16[] = {"move_in",4,218,198.982819,220.184677,288.982819,270.184692,70.000000,"move in"};
|
|
item17[] = {"do_depth",2,250,-229.825836,21.577888,-139.825836,71.577896,0.000000,"do depth"};
|
|
item18[] = {"say_hello",2,250,358.588074,300.680511,448.588074,350.680511,0.000000,"say hello"};
|
|
item19[] = {"track",4,218,255.761963,177.402420,345.761963,227.402405,60.000000,"track"};
|
|
item20[] = {"do_track",2,250,397.290466,211.894135,487.290497,261.894165,0.000000,"do track"};
|
|
item21[] = {"no_decision",4,218,38.858673,-279.436768,128.858643,-229.436798,10.000000,"no decision"};
|
|
item22[] = {"attack",4,218,128.071564,257.443115,218.071564,307.443115,80.000000,"attack"};
|
|
item23[] = {"bite",2,250,300.995148,381.324310,390.995178,431.324310,0.000000,"bite"};
|
|
item24[] = {"depth_done",4,218,-198.412857,-87.825989,-108.412857,-37.825996,0.000000,"depth done"};
|
|
item25[] = {"move_in_wander",4,218,365.802948,-214.545197,455.802948,-164.545197,60.000000,"move in wander"};
|
|
item26[] = {"attack",4,218,194.155518,-351.191406,284.155518,-301.191376,85.000000,"attack"};
|
|
item27[] = {"do_depth",4,218,267.835510,-322.582855,357.835510,-272.582855,80.000000,"do depth"};
|
|
item28[] = {"on_beach",4,218,-55.429527,242.552032,34.570473,292.552032,90.000000,"on beach"};
|
|
item29[] = {"random_sea_pos",2,250,-190.830399,350.872742,-100.830383,400.872742,0.000000,"random sea pos"};
|
|
link0[] = {0,9};
|
|
link1[] = {1,2};
|
|
link2[] = {2,3};
|
|
link3[] = {2,5};
|
|
link4[] = {2,6};
|
|
link5[] = {2,21};
|
|
link6[] = {2,25};
|
|
link7[] = {2,26};
|
|
link8[] = {2,27};
|
|
link9[] = {3,4};
|
|
link10[] = {4,10};
|
|
link11[] = {4,11};
|
|
link12[] = {4,13};
|
|
link13[] = {4,14};
|
|
link14[] = {4,16};
|
|
link15[] = {4,19};
|
|
link16[] = {4,22};
|
|
link17[] = {4,28};
|
|
link18[] = {5,2};
|
|
link19[] = {6,2};
|
|
link20[] = {7,4};
|
|
link21[] = {8,1};
|
|
link22[] = {9,8};
|
|
link23[] = {10,8};
|
|
link24[] = {11,15};
|
|
link25[] = {13,12};
|
|
link26[] = {14,17};
|
|
link27[] = {15,7};
|
|
link28[] = {16,18};
|
|
link29[] = {17,24};
|
|
link30[] = {18,7};
|
|
link31[] = {19,20};
|
|
link32[] = {20,7};
|
|
link33[] = {21,2};
|
|
link34[] = {22,23};
|
|
link35[] = {23,7};
|
|
link36[] = {24,8};
|
|
link37[] = {25,2};
|
|
link38[] = {26,2};
|
|
link39[] = {27,2};
|
|
link40[] = {28,29};
|
|
link41[] = {29,7};
|
|
globals[] = {0.000000,0,0,0,16777215,640,480,1,113,6316128,1,-323.378784,541.908020,588.921448,-376.164001,789,880,1};
|
|
window[] = {2,-1,-1,-1,-1,551,1706,2731,26,3,807};
|
|
*//*%FSM</HEAD>*/
|
|
class FSM
|
|
{
|
|
fsmName = "sharky";
|
|
class States
|
|
{
|
|
/*%FSM<STATE "shark">*/
|
|
class shark
|
|
{
|
|
name = "shark";
|
|
init = /*%FSM<STATEINIT""">*/"_shark = _this select 0;" \n
|
|
"_trgt = player;" \n
|
|
"" \n
|
|
"_shark disableAI ""FSM"";" \n
|
|
"_shark setSkill 0;" \n
|
|
"" \n
|
|
"_sharkNames=[""Jaws"",""Angel"",""Bull"",""Blue"",""Cookie"",""Coral"",""Dusky"",""White"",""Hammer"",""Mako"",""Smalltooth""];" \n
|
|
"_sharkName = _sharkNames select (floor(random count _sharkNames));" \n
|
|
"" \n
|
|
"_trgtArray = [""Epoch_Male_F"",""Epoch_Female_F""];" \n
|
|
"_vehArray = [""Car""];" \n
|
|
"_tRange = 20;" \n
|
|
"_sRange = 500;" \n
|
|
"_vRange = 50;" \n
|
|
"_maxTravelTime = 480;" \n
|
|
"_trgtZ = 0;" \n
|
|
"" \n
|
|
"_sharkPos=[0,0,0];" \n
|
|
"_trgtPos=[0,0,0];" \n
|
|
"_nrPlyrs = [];" \n
|
|
"_plyrDist = 0;" \n
|
|
"" \n
|
|
"_doDepth = false;" \n
|
|
"_doTrack = false;" \n
|
|
"_movIn = false;" \n
|
|
"_doAttack = false;" \n
|
|
"_doWander = false;" \n
|
|
"_inWater = true;" \n
|
|
"_doSurface = false;" \n
|
|
"_zPos = (getPos _shark) select 2;" \n
|
|
"_wanderDist = 0;" \n
|
|
"_onBeach = false;" \n
|
|
"" \n
|
|
"//Test" \n
|
|
"_nrSharks = [];" \n
|
|
"_disposeWait = 960;" \n
|
|
"" \n
|
|
"" \n
|
|
"//DEBUG" \n
|
|
"_doDebug = false;" \n
|
|
"//_count = 0;" \n
|
|
"_debugDo = ""INIT"";" \n
|
|
"//_mkrName = """";" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
""/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "_">*/
|
|
class _
|
|
{
|
|
priority = 0.000000;
|
|
to="reset_vars";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "decision">*/
|
|
class decision
|
|
{
|
|
name = "decision";
|
|
init = /*%FSM<STATEINIT""">*/"_sharkPos = getPos _shark;" \n
|
|
"_inWater = surfaceIsWater _sharkPos;" \n
|
|
"_nrPlyrs = _shark nearEntities [_trgtArray, _sRange];" \n
|
|
"_sharkPos = getPos _shark;" \n
|
|
"_dist = _trgt distance _shark;" \n
|
|
"_zPos = (getPos _shark) select 2;" \n
|
|
"_trgtZ = (getPos _trgt) select 2;" \n
|
|
"_t = diag_tickTime;" \n
|
|
"_plyrPos = getPos _trgt;" \n
|
|
"" \n
|
|
"if (_doDebug) then {" \n
|
|
"systemChat format [""D:%1"",diag_tickTime];" \n
|
|
"hint format [""Decision\nCriteria: %1\nTime:%2\nCount:%3\n%4\nWait:%5\nDistance:%6\nDepth Diff:%7\nPlayer Depth: %8"",(call compile _criteria), (diag_tickTime > (_t + _sWait)),_count,_debugDo,_sWait,_shark distance _trgt,abs (_trgtZ - _zPos), getPos player select 2];" \n
|
|
"};" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
""/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "decision_made">*/
|
|
class decision_made
|
|
{
|
|
priority = 100.000000;
|
|
to="action";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_decisionMade;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_t = diag_tickTime;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "dispose">*/
|
|
class dispose
|
|
{
|
|
priority = 90.000000;
|
|
to="decision";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/"_nrSharks = _sharkPos nearEntities [""GreatWhite_F"", 500];"/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"!(alive _shark) || (_trgt distance _shark > (_sRange * 2)) || (!_inWater) || (count _nrSharks) > 2;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_doDispose = true;" \n
|
|
"_decisionMade = true;" \n
|
|
"" \n
|
|
"if (count _nrSharks > 2) then {" \n
|
|
"{" \n
|
|
"deleteVehicle _x;" \n
|
|
"}forEach _nrSharks;" \n
|
|
"};" \n
|
|
"" \n
|
|
"if (_doDebug) then {" \n
|
|
"axeDO = ""Dispose"";" \n
|
|
"};"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "attack">*/
|
|
class attack
|
|
{
|
|
priority = 85.000000;
|
|
to="decision";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"(abs(_trgtZ - _zPos) < 2.5) && (_dist < 8) && (_trgt == vehicle _trgt);"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"" \n
|
|
"_rnd = floor(random 100);" \n
|
|
"if (_rnd < 45) then {" \n
|
|
"_doAttack = true;" \n
|
|
"}else{" \n
|
|
"_movIn = true;" \n
|
|
"};" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"_decisionMade = true;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "do_depth">*/
|
|
class do_depth
|
|
{
|
|
priority = 80.000000;
|
|
to="decision";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"(abs(_trgtZ - _zPos) > 0.6) && (_dist > 26 && _dist < 36);"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_doDepth = true;" \n
|
|
"_decisionMade = true;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "track">*/
|
|
class track
|
|
{
|
|
priority = 70.000000;
|
|
to="decision";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_dist > 24;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_doTrack = true;" \n
|
|
"_decisionMade = true;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "move_in_wander">*/
|
|
class move_in_wander
|
|
{
|
|
priority = 60.000000;
|
|
to="decision";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_dist > 12;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"" \n
|
|
"_rnd = floor(random 100);" \n
|
|
"if (_rnd < 80) then {" \n
|
|
"_doWander = true;" \n
|
|
"}else{" \n
|
|
"_movIn = true;" \n
|
|
"};" \n
|
|
"" \n
|
|
"_decisionMade = true;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "no_decision">*/
|
|
class no_decision
|
|
{
|
|
priority = 10.000000;
|
|
to="decision";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"!_decisionMade && (diag_tickTime - _t) > 6;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "action">*/
|
|
class action
|
|
{
|
|
name = "action";
|
|
init = /*%FSM<STATEINIT""">*/"_t = diag_tickTime;"/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "complete">*/
|
|
class complete
|
|
{
|
|
priority = 100.000000;
|
|
to="reset_vars";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/"_plyrDist = _shark distance _trgt;" \n
|
|
"" \n
|
|
"if (_doDebug) then {" \n
|
|
"" \n
|
|
"_dist = _trgt distance2D _sharkPos;" \n
|
|
"_zPos = (getPos _shark) select 2;" \n
|
|
"_trgtZ = (getPos _trgt) select 2;" \n
|
|
"hint format [""Decision\nCriteria: %1\nTime:%2\nCount:%3\n%4\nWait:%5\nDistance:%6\nDepth Diff:%7\nPlayer Depth: %8\nSHark Depth: %9"",(call compile _criteria), (diag_tickTime > (_t + _sWait)),_count,_debugDo,_sWait,_shark distance _trgt,abs (_trgtZ - _zPos), getPos player select 2, getpos _shark select 2];" \n
|
|
"};"/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_actionDone && (call compile _criteria || (diag_tickTime > (_t + _sWait)));"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"if (!isNil ""_criteriaMetAction"") then {" \n
|
|
"call compile _criteriaMetAction;" \n
|
|
"};"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "on_beach">*/
|
|
class on_beach
|
|
{
|
|
priority = 90.000000;
|
|
to="random_sea_pos";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_onBeach;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_onBeach = false;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "change_depth">*/
|
|
class change_depth
|
|
{
|
|
priority = 90.000000;
|
|
to="do_depth";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_doDepth;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_doDepth = false;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "attack">*/
|
|
class attack
|
|
{
|
|
priority = 80.000000;
|
|
to="bite";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_doAttack;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_doAttack = false;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "move_in">*/
|
|
class move_in
|
|
{
|
|
priority = 70.000000;
|
|
to="say_hello";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_movIn;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_movIn = false;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "track">*/
|
|
class track
|
|
{
|
|
priority = 60.000000;
|
|
to="do_track";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_doTrack;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_doTrack = false;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "wander">*/
|
|
class wander
|
|
{
|
|
priority = 50.000000;
|
|
to="do_wander";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_doWander;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/"_doWander = false;"/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
/*%FSM<LINK "dispose">*/
|
|
class dispose
|
|
{
|
|
priority = 40.000000;
|
|
to="end";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"_doDispose && (diag_tickTime - _t) > _disposeWait;"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "reset_vars">*/
|
|
class reset_vars
|
|
{
|
|
name = "reset_vars";
|
|
init = /*%FSM<STATEINIT""">*/"//Default Vars" \n
|
|
"" \n
|
|
"" \n
|
|
"_rnd = 0;" \n
|
|
"_actionDone = false;" \n
|
|
"_decisionMade = false;" \n
|
|
"_sWait = 0;" \n
|
|
"_doDispose = false;" \n
|
|
"_chooseTarget = false;" \n
|
|
"_criteria = Nil;" \n
|
|
"_criteriaMet = false;" \n
|
|
"_allowInterrupt = false;" \n
|
|
"_t = diag_tickTime;" \n
|
|
"_moveTo = [0,0,0];" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"_override = false;" \n
|
|
"" \n
|
|
"_criteria =""(false)"";" \n
|
|
"_criteriaMetAction = nil;" \n
|
|
"" \n
|
|
"" \n
|
|
""/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "_">*/
|
|
class _
|
|
{
|
|
priority = 0.000000;
|
|
to="decision";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "end">*/
|
|
class end
|
|
{
|
|
name = "end";
|
|
init = /*%FSM<STATEINIT""">*/"_shark spawn {" \n
|
|
" uiSleep 60;" \n
|
|
" (typeOf _this) call EPOCH_unitSpawnDecrease;" \n
|
|
" deleteVehicle _this;" \n
|
|
"};" \n
|
|
"" \n
|
|
"" \n
|
|
"if (_doDebug) then {" \n
|
|
"_debugDo = ""Dispose"";" \n
|
|
"};"/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "do_wander">*/
|
|
class do_wander
|
|
{
|
|
name = "do_wander";
|
|
init = /*%FSM<STATEINIT""">*/"_shark forceSpeed 7;" \n
|
|
"_dirTo = (random 360);" \n
|
|
"_wanderDist = floor (random 12) + 24;" \n
|
|
"_moveTo = [_shark, _wanderDist, _dirTo] call BIS_fnc_relPos;" \n
|
|
"" \n
|
|
"if ( surfaceIsWater _moveTo) then {" \n
|
|
"_shark moveTo _moveTo;" \n
|
|
"_sWait = _shark distance _moveTo;" \n
|
|
"_actionDone = true;" \n
|
|
"_t = diag_tickTime;" \n
|
|
"_criteria = ""(_shark distance2D _moveTo < 2)"";" \n
|
|
"}else{" \n
|
|
"_onBeach = true;" \n
|
|
"};" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"if (_doDebug) then {" \n
|
|
"_debugDo = ""Wander"";" \n
|
|
"};"/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "_">*/
|
|
class _
|
|
{
|
|
priority = 0.000000;
|
|
to="action";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "do_depth">*/
|
|
class do_depth
|
|
{
|
|
name = "do_depth";
|
|
init = /*%FSM<STATEINIT""">*/"_depthRate = -0.01;" \n
|
|
"if (_trgtZ > _zPos) then {_depthRate = abs _depthRate};" \n
|
|
"" \n
|
|
"_shark forceSpeed 7;" \n
|
|
"_dirTo = (random 360);" \n
|
|
"_wanderDist = floor (random 10) + 12;" \n
|
|
"_moveTo = [_shark, _wanderDist, _dirTo] call BIS_fnc_relPos;" \n
|
|
"" \n
|
|
"if (_doDebug) then {" \n
|
|
"_debugDo = ""Do Depth"";" \n
|
|
"};"/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "depth_done">*/
|
|
class depth_done
|
|
{
|
|
priority = 0.000000;
|
|
to="reset_vars";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/"_trgtZ = (getPos _trgt) select 2;" \n
|
|
"_zPos = (getPos _shark) select 2;" \n
|
|
"_zPos =_zPos + _depthRate;" \n
|
|
"depthPos = _sharkPos;" \n
|
|
"_shark forceSpeed 6;" \n
|
|
"_zPos = _zPos min -0.55;" \n
|
|
"depthPos set [2,_zPos];" \n
|
|
"_shark setPos depthPos;" \n
|
|
"" \n
|
|
"" \n
|
|
"if (_doDebug) then {" \n
|
|
"hint format [""Depth\nCriteria: %1\nTime:%2\nCount:%3\n%4\nWait:%5\nDistance:%6\nDepth Diff:%7\nPlayer Depth: %8"",(call compile _criteria), (diag_tickTime > (_t + _sWait)),_count,_debugDo,_sWait,_shark distance _trgt,abs (_trgtZ - _zPos), getPos player select 2];" \n
|
|
"};" \n
|
|
""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/"(abs (_trgtZ - _zPos) < 2.5) || (!surfaceIsWater depthPos) || (_sharkPos select 2 > -0.50);"/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "say_hello">*/
|
|
class say_hello
|
|
{
|
|
name = "say_hello";
|
|
init = /*%FSM<STATEINIT""">*/"_side = floor(random 180)-90;" \n
|
|
"if (_side < 0) then {_side = -90;}else{_side = 90;};" \n
|
|
"" \n
|
|
"_moveTo = [16,8,60,_trgt,_side] call EPOCH_fnc_findRandomPosBehind;" \n
|
|
"" \n
|
|
"_moveTo set [2,(getPos _trgt) select 2];" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"if ( surfaceIsWater _moveTo) then {" \n
|
|
"_shark moveTo _moveTo;" \n
|
|
"_sWait = _shark distance _trgt;" \n
|
|
"_actionDone = true;" \n
|
|
"_movIn = false;" \n
|
|
"_t = diag_tickTime;" \n
|
|
"_criteria = ""(_shark distance2D _moveTo < 2)"";" \n
|
|
"}else{" \n
|
|
"_onBeach = true;" \n
|
|
"};" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"if (_doDebug) then {" \n
|
|
"_debugDo = ""Move In"";" \n
|
|
"};"/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "_">*/
|
|
class _
|
|
{
|
|
priority = 0.000000;
|
|
to="action";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "do_track">*/
|
|
class do_track
|
|
{
|
|
name = "do_track";
|
|
init = /*%FSM<STATEINIT""">*/"_moveTo = [24,4,142,_trgt] call EPOCH_fnc_findRandomPosBehind;" \n
|
|
"_shark forceSpeed 6;" \n
|
|
"_moveTo set [2,_zPos];" \n
|
|
"" \n
|
|
"" \n
|
|
"if ( surfaceIsWater _moveTo) then {" \n
|
|
"_shark moveTo _moveTo;" \n
|
|
"_sWait = _shark distance _moveTo;" \n
|
|
"_actionDone = true;" \n
|
|
"_doTrack = false;" \n
|
|
"_t = diag_tickTime;" \n
|
|
"_criteria = ""(_shark distance2D _moveTo < 2)"";" \n
|
|
"}else{" \n
|
|
"_onBeach = true;" \n
|
|
"};" \n
|
|
"" \n
|
|
"" \n
|
|
"if (_doDebug) then {" \n
|
|
"_debugDo = ""Track"";" \n
|
|
"};"/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "_">*/
|
|
class _
|
|
{
|
|
priority = 0.000000;
|
|
to="action";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "bite">*/
|
|
class bite
|
|
{
|
|
name = "bite";
|
|
init = /*%FSM<STATEINIT""">*/"_dirTo = (random 360);" \n
|
|
"_wanderDist = floor (random 12) + 24;" \n
|
|
"_moveTo = [_shark, 6, _dirTo] call BIS_fnc_relPos;" \n
|
|
"" \n
|
|
"_shark forceSpeed 6;" \n
|
|
"_shark moveTo _moveTo;" \n
|
|
"" \n
|
|
"_dirTo = [_shark, getPos _trgt] call BIS_fnc_dirTo;" \n
|
|
"" \n
|
|
"_shark setDir _dirTo;" \n
|
|
"_shark playMove ""Sharks_Stop"";" \n
|
|
"" \n
|
|
"if (_trgt == player) then {" \n
|
|
" _shark call EPOCH_client_bitePlayer;" \n
|
|
"};" \n
|
|
"" \n
|
|
"_sWait = 12;" \n
|
|
"_criteria = ""(false)"";" \n
|
|
"" \n
|
|
"_actionDone = true;" \n
|
|
"_doAttack = false;" \n
|
|
"_t = diag_tickTime;" \n
|
|
"" \n
|
|
"" \n
|
|
"if (_doDebug) then {" \n
|
|
"_debugDo = ""Bite"";" \n
|
|
"};"/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "_">*/
|
|
class _
|
|
{
|
|
priority = 0.000000;
|
|
to="action";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
/*%FSM<STATE "random_sea_pos">*/
|
|
class random_sea_pos
|
|
{
|
|
name = "random_sea_pos";
|
|
init = /*%FSM<STATEINIT""">*/"_shark forceSpeed 7;" \n
|
|
"_dirTo = (random 360);" \n
|
|
"_wanderDist = floor (random 20) + 24;" \n
|
|
"_moveTo = [_shark, _wanderDist, _dirTo] call BIS_fnc_relPos;" \n
|
|
"" \n
|
|
"if ( surfaceIsWater _moveTo) then {" \n
|
|
"" \n
|
|
"_criteriaMetAction=""" \n
|
|
"_sharkPos = getPos _shark;" \n
|
|
"_zPos = -0.55;" \n
|
|
"_sharkPos set [2,_zPos];" \n
|
|
"_shark setPos _sharkPos;" \n
|
|
""";" \n
|
|
"" \n
|
|
"_shark moveTo _moveTo;" \n
|
|
"_sWait = _shark distance _moveTo;" \n
|
|
"_actionDone = true;" \n
|
|
"_t = diag_tickTime;" \n
|
|
"_criteria = ""(_shark distance2D _moveTo < 2)"";" \n
|
|
"}else{" \n
|
|
"_sWait = 0;" \n
|
|
"_actionDone = true;" \n
|
|
"_criteria = ""(true)"";" \n
|
|
"};" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"" \n
|
|
"if (_doDebug) then {" \n
|
|
"_debugDo = ""On Beach"";" \n
|
|
"};"/*%FSM</STATEINIT""">*/;
|
|
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
|
class Links
|
|
{
|
|
/*%FSM<LINK "_">*/
|
|
class _
|
|
{
|
|
priority = 0.000000;
|
|
to="action";
|
|
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
|
|
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
|
|
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
|
|
};
|
|
/*%FSM</LINK>*/
|
|
};
|
|
};
|
|
/*%FSM</STATE>*/
|
|
};
|
|
initState="shark";
|
|
finalStates[] =
|
|
{
|
|
"end"
|
|
};
|
|
};
|
|
/*%FSM</COMPILE>*/ |