From 555e350b5d40dfc1f6946927e7c22196c3c51f64 Mon Sep 17 00:00:00 2001 From: DirtySanchez Date: Fri, 20 Oct 2017 23:45:14 -0500 Subject: [PATCH] dynamic trader brain marker corrections old marker handlers removed and replaced with global marker sets --- Sources/epoch_server/system/Trader_brain.fsm | 985 ++++++++++--------- 1 file changed, 505 insertions(+), 480 deletions(-) diff --git a/Sources/epoch_server/system/Trader_brain.fsm b/Sources/epoch_server/system/Trader_brain.fsm index c435380c..f49a3d33 100644 --- a/Sources/epoch_server/system/Trader_brain.fsm +++ b/Sources/epoch_server/system/Trader_brain.fsm @@ -1,4 +1,4 @@ -/*%FSM*/ +/*%FSM*/ /*%FSM*/ /* item0[] = {"trader",0,250,-200.000000,-275.000000,-100.000000,-225.000000,0.000000,"trader"}; @@ -18,10 +18,10 @@ item13[] = {"criteria",2,250,-200.000000,-25.000000,-100.000000,25.000000,0.0000 item14[] = {"interrupt_action",2,250,50.000000,-25.000000,150.000000,25.000000,0.000000,"interrupt action"}; item15[] = {"player",4,218,50.000000,-125.000000,150.000000,-75.000000,10.000000,"player"}; item16[] = {"_",8,218,50.000000,-200.000000,150.000000,-150.000000,5.000000,""}; -item17[] = {"go_work",4,218,307.360077,-260.220886,397.360077,-210.220947,70.000000,"go work"}; +item17[] = {"go_work",4,4314,307.360077,-260.220886,397.360077,-210.220947,70.000000,"go work"}; item18[] = {"go_home",4,218,350.000000,-200.000000,450.000000,-150.000000,60.000000,"go home"}; item19[] = {"work",4,218,175.000000,250.000000,275.000000,300.000000,60.000000,"work"}; -item20[] = {"move_to_work",2,4346,425.000000,250.000000,525.000000,300.000000,0.000000,"move to work"}; +item20[] = {"move_to_work",2,250,425.000000,250.000000,525.000000,300.000000,0.000000,"move to work"}; item21[] = {"home",4,218,100.000000,300.000000,200.000000,350.000000,50.000000,"home"}; item22[] = {"move_to_home",2,250,425.000000,325.000000,525.000000,375.000000,0.000000,"move to home"}; item23[] = {"look_at",4,218,225.000000,-300.000000,325.000000,-250.000000,80.000000,"look at"}; @@ -72,488 +72,513 @@ link37[] = {26,7}; link38[] = {27,28}; link39[] = {28,1}; link40[] = {29,7}; -globals[] = {25.000000,1,0,0,16777215,640,480,1,92,6316128,1,-256.926910,577.747742,523.678101,-359.150879,832,880,1}; -window[] = {2,-1,-1,-1,-1,603,1758,2783,78,3,850}; +globals[] = {0.000000,0,0,0,0,640,480,1,92,6316128,1,-256.926910,577.747742,523.678101,-359.150879,832,884,1}; +window[] = {2,-1,-1,-32000,-32000,707,182,1207,182,3,850}; *//*%FSM*/ class FSM { - fsmName = "traders"; - class States - { - /*%FSM*/ - class trader - { - name = "trader"; - init = /*%FSM*/"_trader = _this select 0;" \n - "_home = _this select 1;" \n - "_work = _this select 2 select 0;" \n - "_schedule = _this select 2 select 1;" \n - "_trgt = objNull;" \n - "" \n - "_trader disableAI ""FSM"";" \n - "_trader disableAI ""TARGET"";" \n - "_trader disableAI ""AUTOTARGET"";" \n - "_trader setBehaviour ""CARELESS"";" \n - "_trader setCombatMode ""BLUE"";" \n - "" \n - "_traderNames=[""Aaron"",""Kenneth"",""Paul"",""Darren"",""Damian"",""Niklas"",""Andrew"",""Nigel"",""Harry"",""Phil"",""Antony"",""Dave"",""Hammish"",""Richard"",""Peter"",""Conor""];" \n - "_traderName = selectRandom _traderNames;" \n - "" \n - "_trgtArray = [""Epoch_Man_base_F"",""Epoch_Female_base_F""];" \n - "_tRange = 20;//Travel Range - Pause if players within range when travelling home" \n - "_sRange = 10;//Serve Range - Look at players within this distance" \n - "_maxTravelTime = 480;//Max time before process times out and continues, after moving. moveToCompleted will timeout before this." \n - "_atWork = false;" \n - "_atHome = true;" \n - "_lastDir = getDir _trader;" \n - "_l = diag_tickTime;" \n - "" \n - "" \n - "" \n - "" \n - "" \n - ""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class _ + fsmName = "traders"; + class States { - priority = 5.000000; - to="reset_vars"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/""/*%FSM*/; - action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + /*%FSM*/ + class trader + { + name = "trader"; + itemno = 0; + init = /*%FSM*/"_trader = _this select 0;" \n + "_home = _this select 1;" \n + "_work = _this select 2 select 0;" \n + "_schedule = _this select 2 select 1;" \n + "_trgt = objNull;" \n + "" \n + "_trader disableAI ""FSM"";" \n + "_trader disableAI ""TARGET"";" \n + "_trader disableAI ""AUTOTARGET"";" \n + "_trader setBehaviour ""CARELESS"";" \n + "_trader setCombatMode ""BLUE"";" \n + "" \n + "_traderNames=[""Aaron"",""Kenneth"",""Paul"",""Darren"",""Damian"",""Niklas"",""Andrew"",""Nigel"",""Harry"",""Phil"",""Antony"",""Dave"",""Hammish"",""Richard"",""Peter"",""Conor""];" \n + "_traderName = selectRandom _traderNames;" \n + "" \n + "_trgtArray = [""Epoch_Man_base_F"",""Epoch_Female_base_F""];" \n + "_tRange = 20;//Travel Range - Pause if players within range when travelling home" \n + "_sRange = 10;//Serve Range - Look at players within this distance" \n + "_maxTravelTime = 480;//Max time before process times out and continues, after moving. moveToCompleted will timeout before this." \n + "_atWork = false;" \n + "_atHome = true;" \n + "_lastDir = getDir _trader;" \n + "_l = diag_tickTime;" \n + "" \n + "" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 29; + priority = 5.000000; + to="reset_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class decision + { + name = "decision"; + itemno = 2; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class decision_made + { + itemno = 3; + priority = 100.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_decisionMade;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class dispose + { + itemno = 6; + priority = 90.000000; + to="decision"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(alive _trader)"/*%FSM*/; + action=/*%FSM*/"_doDispose = true;" \n + "_decisionMade = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class no_decisiion + { + itemno = 26; + priority = 85.000000; + to="reset_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_decisionMade && diag_tickTime - _t > 3;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class look_at + { + itemno = 23; + priority = 80.000000; + to="decision"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"count _nrPlyrs >0 && diag_tickTime - _l > 3;"/*%FSM*/; + action=/*%FSM*/"_servePlyr = true;" \n + "_decisionMade = true;" \n + "_trgt = _nrPlyrs select 0;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class go_work + { + itemno = 17; + priority = 70.000000; + to="decision"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(!_atWork) && (_daytime > (_schedule select 0) && _daytime < (_schedule select 1));"/*%FSM*/; + action=/*%FSM*/"_goWork = true;" \n + "_decisionMade = true;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class go_home + { + itemno = 18; + priority = 60.000000; + to="decision"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(!_atHome) && (!(_daytime > (_schedule select 0) && _daytime < (_schedule select 1)));"/*%FSM*/; + action=/*%FSM*/"_goHome = true;" \n + "_decisionMade = true;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class action + { + name = "action"; + itemno = 4; + init = /*%FSM*/"_nrPlyrs = _trader nearEntities [_trgtArray, _tRange];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class actioned + { + itemno = 5; + priority = 100.000000; + to="criteria"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_actionDone;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class dispose + { + itemno = 12; + priority = 80.000000; + to="end"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_doDispose;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class interrupt + { + itemno = 27; + priority = 75.000000; + to="trade"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_override;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class serve + { + itemno = 24; + priority = 70.000000; + to="look_at"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_servePlyr;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class work + { + itemno = 19; + priority = 60.000000; + to="move_to_work"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_goWork && !_override;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class home + { + itemno = 21; + priority = 50.000000; + to="move_to_home"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_goHome && !_override;"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class reset_vars + { + name = "reset_vars"; + itemno = 7; + init = /*%FSM*/"//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 + "" \n + "" \n + "_traderPos=[0,0,0];" \n + "_goWork = false;" \n + "_goHome = false;" \n + "_nrPlyrs = [];" \n + "_servePlyr = false;" \n + "_override = false;" \n + "" \n + "_criteriaMetAction = nil;" \n + "" \n + "_traderPos = getPosATL _trader;" \n + "_daytime = daytime;" \n + "_nrPlyrs = _trader nearEntities [_trgtArray, _sRange];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 16; + priority = 5.000000; + to="decision"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class end + { + name = "end"; + itemno = 11; + init = /*%FSM*/"diag_log format[""KILLED TRADER: %1"", (!alive _trader)];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class criteria + { + name = "criteria"; + itemno = 13; + init = /*%FSM*/"//intentionally left blank"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class met + { + itemno = 9; + priority = 10.000000; + to="reset_vars"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(call compile _criteria) || (diag_tickTime > (_t + _sWait));"/*%FSM*/; + action=/*%FSM*/"if (!isNil ""_criteriaMetAction"") then {" \n + "call compile _criteriaMetAction;" \n + "};"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 8; + priority = 5.000000; + to="interrupt_action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class interrupt_action + { + name = "interrupt_action"; + itemno = 14; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class player + { + itemno = 15; + priority = 10.000000; + to="decision"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(count _nrPlyrs > 0) && _allowInterrupt;"/*%FSM*/; + action=/*%FSM*/"_trader moveTo getPos _trader;" \n + "_override = true;" \n + "_actionDone = false;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + itemno = 10; + priority = 5.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class move_to_work + { + name = "move_to_work"; + itemno = 20; + init = /*%FSM*/"_trader moveTo _work;" \n + "_sWait = _maxTravelTime;" \n + "_actionDone = true;" \n + "_t = diag_tickTime;" \n + "_criteria = format[""moveToCompleted %1"",""_trader""];" \n + "_criteriaMetAction = format [""_atWork = %1"",true];" \n + "_atHome = false;" \n + "_allowInterrupt = true;" \n + "" \n + "_markers = _trader getVariable[""MARKER_REF"",[]];" \n + "if (_markers != []) then {" \n + " [_markers] call EPOCH_server_deleteGlobalMarkerSet;" \n + " ['DynamicTrader', _pos] call EPOCH_server_createGlobalMarkerSet;" \n + " _trader setVariable['MARKER_REF', _markers];" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 1; + priority = 5.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class move_to_home + { + name = "move_to_home"; + itemno = 22; + init = /*%FSM*/"_trader moveTo _home;" \n + "_sWait = _maxTravelTime;" \n + "_actionDone = true;" \n + "_t = diag_tickTime;" \n + "_criteria = format[""moveToCompleted %1"",""_trader""];" \n + "_criteriaMetAction = format [""_atHome = %1"",true];" \n + "_atWork = false;" \n + "_allowInterrupt = true;" \n + "" \n + "_markers = _trader getVariable[""MARKER_REF"",[]];" \n + "if (_markers != []) then {" \n + " [_markers] call EPOCH_server_deleteGlobalMarkerSet;" \n + " ['DynamicTrader', _pos] call EPOCH_server_createGlobalMarkerSet;" \n + " _trader setVariable['MARKER_REF', _markers];" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 1; + priority = 5.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class look_at + { + name = "look_at"; + itemno = 25; + init = /*%FSM*/"if !(isNull _trgt) then {" \n + "_dir = _trader getDir _trgt;" \n + "if(_lastDir != _dir)then{" \n + " _trader setDir _dir;" \n + " _lastDir = _dir;" \n + "};" \n + "};" \n + "_sWait = 1;" \n + "_actionDone = true;" \n + "_t = diag_tickTime;" \n + "_criteria = format [""%1"", true ];" \n + "_l = diag_tickTime;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 1; + priority = 5.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class trade + { + name = "trade"; + itemno = 28; + init = /*%FSM*/"if !(isNull _trgt) then {" \n + " _trader setDir (_trader getDir _trgt);" \n + "};" \n + "_sWait = 480;" \n + "_actionDone = true;" \n + "_t = diag_tickTime;" \n + "_allowInterrupt = true;" \n + "_criteria = format [""count %1 < %2"",""_nrPlyrs"",1];" \n + "" \n + "if (_goHome) then {" \n + "_criteriaMetAction = format [""%1 moveTo %2"",""_trader"",""_home""];" \n + "};" \n + "" \n + "if (_goWork) then {" \n + "_criteriaMetAction = format [""%1 moveTo %2"",""_trader"",""_work""];" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 1; + priority = 5.000000; + to="action"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class decision - { - name = "decision"; - init = /*%FSM*/""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class decision_made + initState="trader"; + finalStates[] = { - priority = 100.000000; - to="action"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_decisionMade;"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; + "end", }; - /*%FSM*/ - /*%FSM*/ - class dispose - { - priority = 90.000000; - to="decision"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!(alive _trader)"/*%FSM*/; - action=/*%FSM*/"_doDispose = true;" \n - "_decisionMade = true;"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class no_decisiion - { - priority = 85.000000; - to="reset_vars"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!_decisionMade && diag_tickTime - _t > 3;"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class look_at - { - priority = 80.000000; - to="decision"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"count _nrPlyrs >0 && diag_tickTime - _l > 3;"/*%FSM*/; - action=/*%FSM*/"_servePlyr = true;" \n - "_decisionMade = true;" \n - "_trgt = _nrPlyrs select 0;"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class go_work - { - priority = 70.000000; - to="decision"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"(!_atWork) && (_daytime > (_schedule select 0) && _daytime < (_schedule select 1));"/*%FSM*/; - action=/*%FSM*/"_goWork = true;" \n - "_decisionMade = true;"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class go_home - { - priority = 60.000000; - to="decision"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"(!_atHome) && (!(_daytime > (_schedule select 0) && _daytime < (_schedule select 1)));"/*%FSM*/; - action=/*%FSM*/"_goHome = true;" \n - "_decisionMade = true;"/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class action - { - name = "action"; - init = /*%FSM*/"_nrPlyrs = _trader nearEntities [_trgtArray, _tRange];"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class actioned - { - priority = 100.000000; - to="criteria"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_actionDone;"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class dispose - { - priority = 80.000000; - to="end"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_doDispose;"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class interrupt - { - priority = 75.000000; - to="trade"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_override;"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class serve - { - priority = 70.000000; - to="look_at"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_servePlyr;"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class work - { - priority = 60.000000; - to="move_to_work"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_goWork && !_override;"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class home - { - priority = 50.000000; - to="move_to_home"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"_goHome && !_override;"/*%FSM*/; - action=/*%FSM*/""/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class reset_vars - { - name = "reset_vars"; - init = /*%FSM*/"//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 - "" \n - "" \n - "_traderPos=[0,0,0];" \n - "_goWork = false;" \n - "_goHome = false;" \n - "_nrPlyrs = [];" \n - "_servePlyr = false;" \n - "_override = false;" \n - "" \n - "_criteriaMetAction = nil;" \n - "" \n - "_traderPos = getPosATL _trader;" \n - "_daytime = daytime;" \n - "_nrPlyrs = _trader nearEntities [_trgtArray, _sRange];"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class _ - { - priority = 5.000000; - to="decision"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/""/*%FSM*/; - action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class end - { - name = "end"; - init = /*%FSM*/"diag_log format[""KILLED TRADER: %1"", (!alive _trader)];"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - }; - }; - /*%FSM*/ - /*%FSM*/ - class criteria - { - name = "criteria"; - init = /*%FSM*/"//intentionally left blank"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class met - { - priority = 10.000000; - to="reset_vars"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"(call compile _criteria) || (diag_tickTime > (_t + _sWait));"/*%FSM*/; - action=/*%FSM*/"if (!isNil ""_criteriaMetAction"") then {" \n - "call compile _criteriaMetAction;" \n - "};"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class _ - { - priority = 5.000000; - to="interrupt_action"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/""/*%FSM*/; - action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class interrupt_action - { - name = "interrupt_action"; - init = /*%FSM*/""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class player - { - priority = 10.000000; - to="decision"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"(count _nrPlyrs > 0) && _allowInterrupt;"/*%FSM*/; - action=/*%FSM*/"_trader moveTo getPos _trader;" \n - "_override = true;" \n - "_actionDone = false;"/*%FSM*/; - }; - /*%FSM*/ - /*%FSM*/ - class _ - { - priority = 5.000000; - to="action"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/""/*%FSM*/; - action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class move_to_work - { - name = "move_to_work"; - init = /*%FSM*/"_trader moveTo _work;" \n - "_sWait = _maxTravelTime;" \n - "_actionDone = true;" \n - "_t = diag_tickTime;" \n - "_criteria = format[""moveToCompleted %1"",""_trader""];" \n - "_criteriaMetAction = format [""_atWork = %1"",true];" \n - "_atHome = false;" \n - "_allowInterrupt = true;" \n - "" \n - "_marker = _trader getVariable[""MARKER_REF"",""""];" \n - "if (_marker != """") then {" \n - " deleteMarker _marker;" \n - " _pos = getPosATL _trader;" \n - " _marker = createMarker [str(_pos), (_pos)];" \n - " _marker setMarkerShape ""ICON"";" \n - " _marker setMarkerType ""mil_dot"";" \n - " _marker setMarkerColor ""ColorBrown"";" \n - " _trader setVariable[""MARKER_REF"", _marker];" \n - "};" \n - ""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class _ - { - priority = 5.000000; - to="action"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/""/*%FSM*/; - action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class move_to_home - { - name = "move_to_home"; - init = /*%FSM*/"_trader moveTo _home;" \n - "_sWait = _maxTravelTime;" \n - "_actionDone = true;" \n - "_t = diag_tickTime;" \n - "_criteria = format[""moveToCompleted %1"",""_trader""];" \n - "_criteriaMetAction = format [""_atHome = %1"",true];" \n - "_atWork = false;" \n - "_allowInterrupt = true;" \n - "" \n - "_marker = _trader getVariable[""MARKER_REF"",""""];" \n - "if (_marker != """") then {" \n - " deleteMarker _marker;" \n - " _pos = getPosATL _trader;" \n - " _marker = createMarker [str(_pos), (_pos)];" \n - " _marker setMarkerShape ""ICON"";" \n - " _marker setMarkerType ""mil_dot"";" \n - " _marker setMarkerColor ""ColorBrown"";" \n - " _trader setVariable[""MARKER_REF"", _marker];" \n - "};" \n - ""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class _ - { - priority = 5.000000; - to="action"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/""/*%FSM*/; - action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class look_at - { - name = "look_at"; - init = /*%FSM*/"if !(isNull _trgt) then {" \n - "_dir = _trader getDir _trgt;" \n - "if(_lastDir != _dir)then{" \n - " _trader setDir _dir;" \n - " _lastDir = _dir;" \n - "};" \n - "};" \n - "_sWait = 1;" \n - "_actionDone = true;" \n - "_t = diag_tickTime;" \n - "_criteria = format [""%1"", true ];" \n - "_l = diag_tickTime;"/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class _ - { - priority = 5.000000; - to="action"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/""/*%FSM*/; - action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - /*%FSM*/ - class trade - { - name = "trade"; - init = /*%FSM*/"if !(isNull _trgt) then {" \n - " _trader setDir (_trader getDir _trgt);" \n - "};" \n - "_sWait = 480;" \n - "_actionDone = true;" \n - "_t = diag_tickTime;" \n - "_allowInterrupt = true;" \n - "_criteria = format [""count %1 < %2"",""_nrPlyrs"",1];" \n - "" \n - "if (_goHome) then {" \n - "_criteriaMetAction = format [""%1 moveTo %2"",""_trader"",""_home""];" \n - "};" \n - "" \n - "if (_goWork) then {" \n - "_criteriaMetAction = format [""%1 moveTo %2"",""_trader"",""_work""];" \n - "};" \n - ""/*%FSM*/; - precondition = /*%FSM*/""/*%FSM*/; - class Links - { - /*%FSM*/ - class _ - { - priority = 5.000000; - to="action"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/""/*%FSM*/; - action=/*%FSM*/"_doneCheck = false;"/*%FSM*/; - }; - /*%FSM*/ - }; - }; - /*%FSM*/ - }; - initState="trader"; - finalStates[] = - { - "end" - }; }; -/*%FSM*/ +/*%FSM*/ \ No newline at end of file