From 0f1ad4882d7a8657787aa7b07289ec2f4ea5aa57 Mon Sep 17 00:00:00 2001 From: Andrew Gregory Date: Tue, 7 Jun 2016 19:57:34 +0100 Subject: [PATCH] mISSING fILE --- Sources/epoch_code/System/task_control.fsm | 1280 ++++++++++++++++++++ 1 file changed, 1280 insertions(+) create mode 100644 Sources/epoch_code/System/task_control.fsm diff --git a/Sources/epoch_code/System/task_control.fsm b/Sources/epoch_code/System/task_control.fsm new file mode 100644 index 00000000..8157af0b --- /dev/null +++ b/Sources/epoch_code/System/task_control.fsm @@ -0,0 +1,1280 @@ +class FSM +{ + fsmName = "task control client"; + class States + { + class task_control + { + name = "task_control"; + itemno = 0; + init = "_plyr = player;" \n + "_taskName = _this select 0;" \n + "_unit = objNull;" \n + "_taskItem = objNull;" \n + "_taskID = 0;" \n + "_editorTest = false;" \n + "if(count _this > 1)then{" \n + "_editorTest = _this select 1;" \n + "};" \n + "if(count _this > 2)then{" \n + "_taskID = _this select 2;" \n + "};" \n + "if(count _this > 3)then{" \n + "_unit = _this select 3;" \n + "};" \n + "if(count _this >4)then{" \n + "_plyr = _this select 4;" \n + "};" \n + "_trgt = _plyr;" \n + "if(count _this > 5)then{" \n + "_trgt = _this select 5;" \n + "};" \n + "" \n + "//Common Vars" \n + "_plyrArr = [""Epoch_Man_Base_F"",""Epoch_Female_base_F""];" \n + "_config = 'inGameTasks' call EPOCH_returnConfig;" \n + "_scriptPath = getText ( _config >> ""file"");" \n + "_fsmPath = getText ( _config >> ""fsmpath"");" \n + "_filterBuilds = getArray ( _config >> ""filterBuilds"");" \n + "" \n + "//DECLARE" \n + "_taskCall = """";" \n + "" \n + "" \n + "" \n + ""; + precondition = ""; + class Links + { + class _ + { + itemno = 3; + priority = 0.000000; + to="setup"; + precondition = ""; + condition="true"; + action=""; + }; + }; + }; + class setup + { + name = "setup"; + itemno = 2; + init = "" \n + "//_config = missionConfigFile;" \n + "" \n + "//Mission Control - WIP. TODO: Move to serverside mission control UINamespace not secure." \n + "//uiNameSpace setVariable [""axeTask"",_taskName];" \n + "_plyrVar = player getVariable [""SERVER_VARS"",[]];" \n + "_taskIndex = ((_plyrVar apply {_x find ""axeTask"" > -1;}) find true);" \n + "if(_taskIndex > -1)then{" \n + "_plyrVar deleteAt _taskIndex;" \n + "};" \n + "_plyrVar pushBack [""axeTask"",_taskName];" \n + "player setVariable [""SERVER_VARS"",_plyrVar,true];" \n + "" \n + "missionNameSpace setVariable [""axeTask"",_taskName];" \n + "" \n + "//Built in Vars" \n + "_startTime = diag_tickTime;" \n + "EPOCH_task_startTime = _startTime;" \n + "EPOCH_taskLastLoop = EPOCH_task_startTime;" \n + "EPOCH_taskItem = objNull;" \n + "if(isNil ""EPOCH_taskMarkerName"")then{EPOCH_taskMarkerName = """";};" \n + "" \n + "//Task Vars from Config with relevant local vars" \n + "//TODO - Move relevant ones into FSM so only called if required." \n + "_taskTitle = getText ( _config >> _taskName >> ""title"");" \n + "EPOCH_taskTitle = _taskTitle;" \n + "_taskDesc = getText ( _config >> _taskName >> ""desc"");" \n + "_taskImg = getText ( _config >> _taskName >> ""img"");" \n + "_taskSimple = getNumber ( _config >> _taskName >> ""simpleTask"");" \n + "_taskDelay = getNumber ( _config >> _taskName >> ""triggerDelay"");" \n + "_taskTrigger = getText ( _config >> _taskName >> ""triggerCondition"");" \n + "_taskFSM = getText ( _config >> _taskName >> ""initfsm"");" \n + "_taskSQF = getText ( _config >> _taskName >> ""initsqf"");" \n + "_taskCall = getText ( _config >> _taskName >> ""initcall"");" \n + "_binTask = getNumber ( _config >> _taskName >> ""callEventBinTask"");" \n + "_taskEventCond1 = compile getText ( _config >> _taskName >> ""callEventCondition1"");" \n + "_taskEventCond2 = compile getText ( _config >> _taskName >> ""callEventCondition2"");" \n + "_taskEventCond3 = compile getText ( _config >> _taskName >> ""callEventCondition3"");" \n + "_taskEventSQF1 = getText ( _config >> _taskName >> ""callEventSQF1"");" \n + "_taskEventSQF2 = getText ( _config >> _taskName >> ""callEventSQF2"");" \n + "_taskEventSQF3 = getText ( _config >> _taskName >> ""callEventSQF3"");" \n + "_taskEventFSM1 = getText ( _config >> _taskName >> ""callEventFSM1"");" \n + "_taskEventFSM2 = getText ( _config >> _taskName >> ""callEventFSM2"");" \n + "_taskEventFSM3 = getText ( _config >> _taskName >> ""callEventFSM3"");" \n + "_taskEventCALL1 = compile getText ( _config >> _taskName >> ""callEventCALL1"");" \n + "_taskEventCALL2 = compile getText ( _config >> _taskName >> ""callEventCALL2"");" \n + "_taskEventCALL3 = compile getText ( _config >> _taskName >> ""callEventCALL3"");" \n + "_taskEventTask1 = getText ( _config >> _taskName >> ""callEventTask1"");" \n + "_taskEventTask2 = getText ( _config >> _taskName >> ""callEventTask2"");" \n + "_taskEventTask3 = getText ( _config >> _taskName >> ""callEventTask3"");" \n + "_event1Done = false;" \n + "_event2Done = false;" \n + "_event3Done = false;" \n + "_taskItems = getArray ( _config >> _taskName >> ""items"");" \n + "_taskItemSpawn = getNumber ( _config >> _taskName >> ""itemSpawn"");" \n + "_taskMarkerType = getNumber ( _config >> _taskName >> ""markerType"");" \n + "_taskMarkerRad = getNumber ( _config >> _taskName >> ""markerRadius"");" \n + "_taskMarkerText = getText ( _config >> _taskName >> ""markerText"");" \n + "_taskDiagSquelch = getNumber ( _config >> _taskName >> ""diagSquelch"");" \n + "_lastChat = diag_tickTime;" \n + "_taskDiagCond1 = compile getText ( _config >> _taskName >> ""diag1Condition"");" \n + "_taskDiagCond2 = compile getText ( _config >> _taskName >> ""diag2Condition"");" \n + "_taskDiagCond3 = compile getText ( _config >> _taskName >> ""diag3Condition"");" \n + "_taskDiag1 = getArray ( _config >> _taskName >> ""dialogue1"");" \n + "_taskDiag2 = getArray ( _config >> _taskName >> ""dialogue2"");" \n + "_taskDiag3 = getArray ( _config >> _taskName >> ""dialogue3"");" \n + "_chat1Done = false;" \n + "_chat2Done = false;" \n + "_chat3Done = false;" \n + "" \n + "//Failed" \n + "_taskFailedCond = compile getText ( _config >> _taskName >> ""failedCondition"");" \n + "_taskFailDist = getNumber ( _config >> _taskName >> ""abandonDist"");" \n + "if(_taskFailDist < 1)then{_taskFailDist=999999;};" \n + "_taskFailTime = getNumber ( _config >> _taskName >> ""abandonTime"");" \n + "if(_taskFailTime < 1)then{_taskFailTime=999999;};" \n + "_taskFailed = false;" \n + "//Failed Calls and Diag done in task failed." \n + "_taskFailedCall = compile """";" \n + "" \n + "//Completed" \n + "_taskCompleteCond = compile getText ( _config >> _taskName >> ""completeCondition"");" \n + "_taskReward = getArray ( _config >> _taskName >> ""reward"");" \n + "_taskCompleteDiag1 = getArray ( _config >> _taskName >> ""completed1"");" \n + "_taskCompleteDiag2 = getArray ( _config >> _taskName >> ""completed2"");" \n + "_taskCompleteCall = compile getText ( _config >> _taskName >> ""completedCALL"");" \n + "_diag1Done = false;" \n + "_diag2Done = false;" \n + "_taskReminder = getArray ( _config >> _taskName >> ""reminder"");" \n + "_taskCheckTime = getNumber ( _config >> _taskName >> ""taskCheckTime"");" \n + "" \n + "" \n + "_taskNextTrigger = getArray ( _config >> _taskName >> ""nextTask"");" \n + "_taskCleanup = getNumber ( _config >> _taskName >> ""cleanUp"");" \n + "_missionCleanUp = getArray ( _config >> _taskName >> ""cleanUpCalls"");" \n + "" \n + "_completed = false;" \n + "" \n + "//Custom Vars" \n + "_customVars = [];" \n + "_varNames = getArray ( _config >> ""varName"");" \n + "_varDatas = getArray ( _config >> ""varData"");" \n + "_serverCmd = [];" \n + "_doSkip = false;" \n + "_taskFailed = false;" \n + "_doBin = false;" \n + "" \n + "if(count _varNames > 0)then{" \n + "" \n + "{" \n + "call compile format [""missionNamespace setVariable%3""""%1"""", %2%4;"",parseText _x,_varDatas select _forEachIndex,parseText ""["",parseText ""]""];" \n + "//systemChat format [""%1 = %2"",parseText (_x),(_varDatas select _forEachIndex)];" \n + "//_customVars pushBack (_varDatas select _forEachIndex);" \n + "}forEach _varNames;" \n + "" \n + "};" \n + "" \n + "//Functions" \n + "_execFSM = {" \n + "//systemChat format[""execing FSM %1"",_this];" \n + "call compile format [""[_taskName,_plyr,_unit,_taskItem] execFSM """"%1"""""",_this];" \n + "};" \n + "" \n + "_execSQF = {" \n + "//systemChat format[""execing SQF %1"",_this];" \n + "call compile format [""[_taskName,_plyr,_unit,_taskItem] execVM """"%1"""""",_this];" \n + "};" \n + "" \n + "_spawnWH = {" \n + "_retTaskWH = objNull;" \n + "_retTaskWH = createVehicle[""GroundWeaponHolder"",_this select 0,[],0,""CAN_COLLIDE""];" \n + "_retTaskWH" \n + "};" \n + "" \n + "//SystemChat format [""INIT: %1"",_taskTitle];" \n + "_debugDo = ""INIT"";" \n + "_showDebug = {" \n + "//hint format [""%4\n%1\nStage: %2\nMsg: %3\nTask: %4"", _debugDo,_missionStage,_msg1,_missionName,_taskTitle];" \n + "};"; + precondition = ""; + class Links + { + class run_test + { + itemno = 74; + priority = 20.000000; + to="override_for_task"; + precondition = ""; + condition="_editorTest"; + action=""; + }; + class simple_task + { + itemno = 72; + priority = 10.000000; + to="actions"; + precondition = ""; + condition="_taskSimple > 0;"; + action="_doSkip = true;"; + }; + class _ + { + itemno = 33; + priority = 0.000000; + to="comms"; + precondition = ""; + condition="true"; + action=""; + }; + }; + }; + class items_and_vars + { + name = "items_and_vars"; + itemno = 4; + init = "//SystemChat format [""START: Do Spawn: %1"",_taskItemSpawn];" \n + "_taskStartPos = getPosATL _plyr;" \n + "_startTime = diag_tickTime;"; + precondition = ""; + class Links + { + class item_spawn + { + itemno = 22; + priority = 5.000000; + to="spawn_item"; + precondition = ""; + condition="_taskItemSpawn > 0 && count _taskItems > 0"; + action="_taskItem = objNull;"; + }; + class no_item_spawn + { + itemno = 7; + priority = 0.000000; + to="actions"; + precondition = ""; + condition="_taskItemSpawn < 1"; + action=""; + }; + }; + }; + class end + { + name = "end"; + itemno = 6; + init = "//uiNameSpace setVariable [""axeTask"",nil];" \n + "if!(_doBin)then{" \n + "_plyrVar = player getVariable [""SERVER_VARS"",[]];" \n + "_taskIndex = ((_plyrVar apply {_x find ""axeTask"" > -1;}) find true);" \n + "if(_taskIndex > -1)then{" \n + "_plyrVar deleteAt _taskIndex;" \n + "};" \n + "player setVariable [""SERVER_VARS"",_plyrVar,true];" \n + "};" \n + "if(count _missionCleanUp > 0)then{" \n + "{" \n + "call compile _x;" \n + "} forEach _missionCleanUp;" \n + "};" \n + "_debugDo = ""DISPOSE"";" \n + "diag_log format [""Task Failed: %1"",_taskName];"; + precondition = ""; + class Links + { + }; + }; + class do_monitor + { + name = "do_monitor"; + itemno = 8; + init = "_lastLoop = diag_tickTime;" \n + "EPOCH_taskLastLoop = _lastLoop;" \n + "_plyPos = getPosATL _plyr;"; + precondition = ""; + class Links + { + class _ + { + itemno = 11; + priority = 0.000000; + to="chat_conditions"; + precondition = ""; + condition="true"; + action=""; + }; + }; + }; + class next + { + name = "next"; + itemno = 9; + init = "//Clean Up / Other Options here"; + precondition = ""; + class Links + { + class task_completed + { + itemno = 5; + priority = 15.000000; + to="completed"; + precondition = ""; + condition="_completed && diag_tickTime - _lastLoop > _taskCheckTime"; + action="_lastLoop = diag_tickTime;"; + }; + class task_failed + { + itemno = 49; + priority = 10.000000; + to="failed"; + precondition = ""; + condition="_taskFailed"; + action="_taskFailedDiag = [];" \n + "_taskFailedFSM = """";" \n + "_taskFailedSQF = """";" \n + "_taskFailedCall = compile """";" \n + "" \n + "if!(_editorTest)then{" \n + "_taskFailedDiag = getArray ( _config >> _taskName >> ""failed"");" \n + "_taskFailedFSM = getText ( _config >> _taskName >> ""failedFSM"");" \n + "_taskFailedSQF = getText ( _config >> _taskName >> ""failedSQF"");" \n + "_taskFailedCall = compile getText ( _config >> _taskName >> ""failedCall"");" \n + "_nextTask = getArray ( _config >> _taskName >> ""failedTask"");" \n + "}else{" \n + "_taskFailedDiag = parseText axeValCacheList select 41;" \n + "_taskFailedFSM = axeValCacheList select 42;" \n + "_taskFailedSQF = axeValCacheList select 43;" \n + "_taskFailedCall = axeValCacheList select 44;" \n + "_nextTask = parseText axeValCacheList select 45;" \n + "};" \n + "" \n + "_taskReminder = [];"; + }; + class loop + { + itemno = 10; + priority = 5.000000; + to="do_monitor"; + precondition = ""; + condition="((!_completed) || (!_taskFailed)) && diag_tickTime - _lastLoop > _taskCheckTime"; + action=""; + }; + }; + }; + class chat_conditions + { + name = "chat_conditions"; + itemno = 13; + init = ""; + precondition = ""; + class Links + { + class chat_3 + { + itemno = 21; + priority = 15.000000; + to="chat_conditions"; + precondition = ""; + condition="diag_tickTime - _lastChat > _taskDiagSquelch && call _taskDiagCond3 && count _taskDiag3 > 0"; + action="_diag = selectRandom _taskDiag3;" \n + "" \n + "[format [""%1"",_diag], 5] call Epoch_dynamicText;" \n + "" \n + "" \n + "_chat3Done = true;" \n + "_lastChat = diag_tickTime;"; + }; + class chat_2 + { + itemno = 20; + priority = 10.000000; + to="chat_conditions"; + precondition = ""; + condition="diag_tickTime - _lastChat > _taskDiagSquelch && call _taskDiagCond2 && count _taskDiag2 > 0"; + action="_diag = selectRandom _taskDiag2;" \n + "[format [""%1"",_diag], 5] call Epoch_dynamicText;" \n + "_chat2Done = true;" \n + "_lastChat = diag_tickTime;"; + }; + class server + { + itemno = 71; + priority = 10.000000; + to="comms_2"; + precondition = ""; + condition="count _serverCmd > 0"; + action=""; + }; + class chat_1 + { + itemno = 19; + priority = 5.000000; + to="chat_conditions"; + precondition = ""; + condition="(!_chat1Done) && call _taskDiagCond1 && count _taskDiag1 > 0"; + action="_diag = selectRandom _taskDiag1;" \n + "[format [""%1"",_diag], 5] call Epoch_dynamicText;" \n + "_chat1Done = true;" \n + "_lastChat = diag_tickTime;"; + }; + class _ + { + itemno = 12; + priority = 0.000000; + to="event_conditions"; + precondition = ""; + condition="true"; + action=""; + }; + }; + }; + class event_conditions + { + name = "event_conditions"; + itemno = 14; + init = ""; + precondition = ""; + class Links + { + class event_3 + { + itemno = 32; + priority = 20.000000; + to="event_conditions"; + precondition = ""; + condition="(!_event3Done) && call _taskEventCond3"; + action="if!(_taskEventFSM3 == """")then{" \n + "_taskEventFSM3 call _execFSM;" \n + "};" \n + "" \n + "if!(_taskEventSQF3 == """")then{" \n + "_taskEventSQF3 call _execSQF;" \n + "};" \n + "" \n + "if!(str(_taskEventCALL3) == ""{}"")then{" \n + "call _taskEventCALL3;" \n + "};" \n + "" \n + "if!(_taskEventTask3 == """")then{" \n + "call compile format[""epochTaskHandle = [""""%2""""] execFSM """"%1\task_control.fsm"""";"",_fsmPath,_taskEventTask3];" \n + "" \n + "if(_binTask > 0)then{" \n + "_doBin = true;" \n + "};" \n + "" \n + "};" \n + "" \n + "_event3Done = true;"; + }; + class event_2 + { + itemno = 31; + priority = 15.000000; + to="event_conditions"; + precondition = ""; + condition="(!_event2Done) && call _taskEventCond2"; + action="if!(_taskEventFSM2 == """")then{" \n + "_taskEventFSM2 call _execFSM;" \n + "};" \n + "" \n + "if!(_taskEventSQF2 == """")then{" \n + "_taskEventSQF2 call _execSQF;" \n + "};" \n + "" \n + "if!(str(_taskEventCALL2) == ""{}"")then{" \n + "call _taskEventCALL2;" \n + "};" \n + "" \n + "if!(_taskEventTask2 == """")then{" \n + "call compile format[""epochTaskHandle = [""""%2""""] execFSM """"%1\task_control.fsm"""";"",_fsmPath,_taskEventTask2];" \n + "" \n + "if(_binTask > 0)then{" \n + "_doBin = true;" \n + "};" \n + "" \n + "};" \n + "" \n + "_event2Done = true;"; + }; + class event_1 + { + itemno = 30; + priority = 10.000000; + to="event_conditions"; + precondition = ""; + condition="(!_event1Done) && call _taskEventCond1"; + action="if!(_taskEventFSM1 == """")then{" \n + "_taskEventFSM1 call _execFSM;" \n + "};" \n + "" \n + "if!(_taskEventSQF1 == """")then{" \n + "_taskEventSQF1 call _execSQF;" \n + "};" \n + "" \n + "if!(str(_taskEventCALL1) == ""{}"")then{" \n + "call _taskEventCALL1;" \n + "};" \n + "" \n + "if!(_taskEventTask1 == """")then{" \n + "//TODO: Allow new separate mission from here." \n + "call compile format[""epochTaskHandle = [""""%2""""] execFSM """"%1\task_control.fsm"""";"",_fsmPath,_taskEventTask1];" \n + "" \n + "if(_binTask > 0)then{" \n + "_doBin = true;" \n + "};" \n + "" \n + "};" \n + "" \n + "_event1Done = true;"; + }; + class bin_it + { + itemno = 76; + priority = 5.000000; + to="clean_up"; + precondition = ""; + condition="_doBin"; + action=""; + }; + class _ + { + itemno = 15; + priority = 0.000000; + to="task_conditions"; + precondition = ""; + condition="true"; + action=""; + }; + }; + }; + class comms + { + name = "comms"; + itemno = 16; + init = "//[_plyr,0,_taskID] remoteExec [""EPOCH_Server_missionComms"",3];"; + precondition = ""; + class Links + { + class delay + { + itemno = 1; + priority = 0.000000; + to="items_and_vars"; + precondition = ""; + condition="diag_tickTime > _startTime + _taskDelay"; + action=""; + }; + }; + }; + class task_conditions + { + name = "task_conditions"; + itemno = 18; + init = "if((_plyPos distance _taskStartPos > _taskFailDist) || (diag_tickTIme - _startTime > _taskFailTime) || (call _taskFailedCond))then{" \n + "_taskFailed = true;" \n + "};" \n + "" \n + "if(call _taskCompleteCond)then{" \n + "_completed = true;" \n + "};"; + precondition = ""; + class Links + { + class _ + { + itemno = 17; + priority = 0.000000; + to="next"; + precondition = ""; + condition="true"; + action=""; + }; + }; + }; + class actions + { + name = "actions"; + itemno = 23; + init = ""; + precondition = ""; + class Links + { + class call + { + itemno = 60; + priority = 20.000000; + to="actions"; + precondition = ""; + condition="!(_taskCall == """")" \n + "//USE isNill NOT == """""; + action="call compile _taskCall;" \n + "_taskCall = """";"; + }; + class fsm + { + itemno = 58; + priority = 15.000000; + to="actions"; + precondition = ""; + condition="!(_taskFSM == """")"; + action="_taskFSM call _execFSM;" \n + "_taskFSM = """";"; + }; + class sqf + { + itemno = 59; + priority = 10.000000; + to="actions"; + precondition = ""; + condition="!(_taskSQF == """")"; + action="systemChat ""SQF NOT NIL"";" \n + "_taskSQF call _execSQF;" \n + "_taskSQF = """";"; + }; + class skip + { + itemno = 73; + priority = 5.000000; + to="next_task"; + precondition = ""; + condition="_doSkip"; + action=""; + }; + class _ + { + itemno = 42; + priority = 0.000000; + to="markers"; + precondition = ""; + condition="true"; + action=""; + }; + }; + }; + class spawn_item + { + name = "spawn_item"; + itemno = 25; + init = ""; + precondition = ""; + class Links + { + class near_player + { + itemno = 29; + priority = 15.000000; + to="spawn_item"; + precondition = ""; + condition="_taskItemSpawn == 3"; + action="_pos = getPosATL player;" \n + "_taskItem = [_pos] call _spawnWH;" \n + "_taskItemSpawn = -1;" \n + ""; + }; + class in_house + { + itemno = 27; + priority = 10.000000; + to="spawn_item"; + precondition = ""; + condition="_taskItemSpawn == 1"; + action="_nrBuilds = nearestObjects [_plyr,[""house""],50];" \n + "_arrGarr = [];" \n + "_bldMap = [];" \n + "_pos = getPosATL _plyr;" \n + "" \n + "{" \n + "" \n + "if(!((typeOf _x) in _filterBuilds))then{" \n + "" \n + " _garrCount = 0;" \n + "" \n + " while {format [""%1"", _x buildingPos (_garrCount)] != ""[0,0,0]"" } do {" \n + " _garrCount = _garrCount + 1;" \n + " };" \n + "" \n + " if(_garrCount > 0)then{" \n + " _arrGarr pushBack [_x,_garrCount];" \n + " };" \n + "" \n + "};" \n + "" \n + "}forEach _nrBuilds;" \n + "" \n + "if(count _arrGarr > 0)then{" \n + "" \n + " {" \n + " _garrPos = (_x select 0) buildingPos (floor random (_x select 1));" \n + " _bldMap pushBack _garrPos;" \n + "" \n + " }forEach _arrGarr;" \n + "" \n + "};" \n + "" \n + "if(count _bldMap > 0)then{" \n + "_pos = _bldMap select (floor random (count _bldMap));" \n + "};" \n + "" \n + "" \n + "//_taskItem = createVehicle[""WeaponHolderSimulated"",_pos,[],0,""CAN_COLLIDE""];" \n + "_taskItem = [_pos] call _spawnWH;" \n + "" \n + "" \n + "_taskItemSpawn = -1;"; + }; + class hidden_nearby + { + itemno = 28; + priority = 5.000000; + to="find_spot"; + precondition = ""; + condition="_taskItemSpawn == 2"; + action="_taskItemSpawn = -1;" \n + "_posSafe = false;" \n + "_done = false;"; + }; + class ready + { + itemno = 26; + priority = 0.000000; + to="actions"; + precondition = ""; + condition="!isNull _taskItem"; + action="[player,Epoch_personalToken,_taskItems,[],_taskItem,false] remoteExec [""EPOCH_Server_createObject"",2];" \n + "EPOCH_taskItem = _taskItem;"; + }; + }; + }; + class completed + { + name = "completed"; + itemno = 34; + init = "//Put more checks in for empty dialogue array so as not just waiting a set time"; + precondition = ""; + class Links + { + class diag_1 + { + itemno = 35; + priority = 15.000000; + to="completed"; + precondition = ""; + condition="!_diag1Done && count _taskCompleteDiag1 > 0"; + action="_diag = selectRandom _taskCompleteDiag1;" \n + "[format [""%1"",_diag], 5] call Epoch_dynamicText;" \n + "_diag1Done = true;"; + }; + class diag_2 + { + itemno = 36; + priority = 10.000000; + to="completed"; + precondition = ""; + condition="_diag1Done && (!_diag2Done) && diag_tickTime - _lastLoop > 20 && count _taskCompleteDiag2 > 0"; + action="_diag = selectRandom _taskCompleteDiag2;" \n + "[format [""%1"",_diag], 5] call Epoch_dynamicText;" \n + "_diag2Done = true;"; + }; + class call + { + itemno = 82; + priority = 5.000000; + to="completed"; + precondition = ""; + condition="!(str(_taskCompleteCall) == ""{}"")"; + action="call _taskCompleteCall;" \n + "_taskCompleteCall = compile """";"; + }; + class _ + { + itemno = 41; + priority = 0.000000; + to="reward"; + precondition = ""; + condition="true"; + action=""; + }; + }; + }; + class reward + { + name = "reward"; + itemno = 38; + init = "if(count _taskReward > 0)then{" \n + "" \n + "diag_log format [""spawn reward: %1"",_taskReward];" \n + "" \n + "_rewardHolder = [getPosATL player] call _spawnWH;" \n + "" \n + "[player,Epoch_personalToken,_taskReward,[],_rewardHolder,false] remoteExec [""EPOCH_Server_createObject"",2];" \n + "" \n + "};" \n + "" \n + "_debugDo = ""REWARD"";"; + precondition = ""; + class Links + { + class pause + { + itemno = 37; + priority = 0.000000; + to="clean_up"; + precondition = ""; + condition="diag_tickTime - _lastLoop > _taskCheckTime"; + action=""; + }; + }; + }; + class comms_1 + { + name = "comms_1"; + itemno = 39; + init = "//[_plyr,1,_taskID] remoteExec [""EPOCH_Server_missionComms"",3];"; + precondition = ""; + class Links + { + class _ + { + itemno = 67; + priority = 0.000000; + to="next_task"; + precondition = ""; + condition="true"; + action=""; + }; + }; + }; + class markers + { + name = "markers"; + itemno = 43; + init = ""; + precondition = ""; + class Links + { + class continue + { + itemno = 44; + priority = 100.000000; + to="do_monitor"; + precondition = ""; + condition="//no marker" \n + "_taskMarkerType < 1"; + action=""; + }; + class marker_pos + { + itemno = 46; + priority = 0.000000; + to="do_markers"; + precondition = ""; + condition="_taskMarkerType > 0"; + action="_markerPos = [];" \n + "if(isNil ""EPOCH_taskMarkerPos"")then{" \n + "if!(isNull _trgt)then{" \n + "_markerPos = getPos _trgt;" \n + "};" \n + "" \n + "if!(isNull _unit)then{" \n + "_markerPos = getPos _unit;" \n + "};" \n + "" \n + "if!(isNull _taskItem)then{" \n + "_markerPos = getPos _taskItem;" \n + "};" \n + "" \n + "}else{" \n + "_markerPos = EPOCH_taskMarkerPos;" \n + "};" \n + "" \n + "_mkrName = format[""EPOCHTaskMark%1%2"", _taskName,diag_tickTime];" \n + "EPOCH_taskMarkerName = _mkrName;" \n + "_markerText = getText ( _config >> _taskName >> ""markerText"");" \n + "_markerRad = getNumber ( _config >> _taskName >> ""markerRadius"");" \n + "" \n + "if(_taskMarkerType == 2)then{" \n + "_markerPos set [0, (_markerPos select 0) + (floor (random _markerRad) - (_markerRad / 2))];" \n + "_markerPos set [1, (_markerPos select 1) + (floor (random _markerRad) - (_markerRad / 2))];" \n + "};" \n + "" \n + "" \n + ""; + }; + }; + }; + class do_markers + { + name = "do_markers"; + itemno = 47; + init = ""; + precondition = ""; + class Links + { + class continue + { + itemno = 44; + priority = 100.000000; + to="do_monitor"; + precondition = ""; + condition="//no marker" \n + "_taskMarkerType < 1"; + action=""; + }; + class radius + { + itemno = 45; + priority = 0.000000; + to="do_markers"; + precondition = ""; + condition="_taskMarkerType == 2"; + action="" \n + "[player, _markerPos, ""ELLIPSE"", ""mil_dot"", ""ColorYellow"", [_taskMarkerRad,_taskMarkerRad], ""SolidBorder"", 42, _markerText, 0.6,_mkrName] call EPOCH_fnc_createMarker;" \n + "" \n + "_taskMarkerType = -1;"; + }; + class point + { + itemno = 24; + priority = 0.000000; + to="do_markers"; + precondition = ""; + condition="_taskMarkerType == 1"; + action="" \n + "[player, _markerPos, ""ICON"", ""mil_dot"", ""ColorYellow"", [0.8,0.8], """", 42, _markerText, 0.6, _mkrName] call EPOCH_fnc_createMarker;" \n + "" \n + "_taskMarkerType = -1;"; + }; + }; + }; + class find_spot + { + name = "find_spot"; + itemno = 48; + init = "//TODO: try catch used incorrectly here" \n + "try{" \n + "_pos = [(getPosATL _plyr), (floor (random 80) + 42), floor random 360] call BIS_fnc_relPos;" \n + "" \n + "if (!lineIntersects [eyePos _plyr, _pos, _plyr, _unit]) then {_posSafe = true;};" \n + "" \n + "if(_posSafe)then{" \n + "//_taskItem = createVehicle[""GroundWeaponHolder"",_pos,[],0,""CAN_COLLIDE""];" \n + "_taskItem = [_pos] call _spawnWH;" \n + "_taskItemSpawn = -1;" \n + "_done = true;" \n + "};" \n + "" \n + "}catch{" \n + "systemchat format[""CATCH:%1"",_exception];" \n + "done = true;" \n + "_taskItemSpawn = 1;" \n + "};"; + precondition = ""; + class Links + { + class not_hidden + { + itemno = 61; + priority = 10.000000; + to="find_spot"; + precondition = ""; + condition="!_posSafe;"; + action=""; + }; + class is_hidden + { + itemno = 62; + priority = 5.000000; + to="spawn_item"; + precondition = ""; + condition="_done;"; + action=""; + }; + }; + }; + class failed + { + name = "failed"; + itemno = 50; + init = ""; + precondition = ""; + class Links + { + class call + { + itemno = 54; + priority = 20.000000; + to="failed"; + precondition = ""; + condition="!(str(_taskFailedCall) == ""{}"")"; + action="call _taskFailedCall;" \n + "_taskFailedCall = compile """";"; + }; + class sqf + { + itemno = 53; + priority = 15.000000; + to="failed"; + precondition = ""; + condition="!(_taskFailedSQF == """")"; + action="_taskFailedSQF call _execSQF;" \n + "_taskFailedSQF = """";"; + }; + class fsm + { + itemno = 52; + priority = 10.000000; + to="failed"; + precondition = ""; + condition="!(_taskFailedFSM == """")"; + action="_taskFailedFSM call _execFSM;" \n + "_taskFailedFSM = """";"; + }; + class diag + { + itemno = 51; + priority = 5.000000; + to="failed"; + precondition = ""; + condition="count _taskFailedDiag > 0"; + action="_diag = selectRandom _taskFailedDiag;" \n + "[format [""%1"",_diag], 5] call Epoch_dynamicText;" \n + "_taskFailedDiag = [];"; + }; + class pause + { + itemno = 37; + priority = 0.000000; + to="clean_up"; + precondition = ""; + condition="diag_tickTime - _lastLoop > _taskCheckTime"; + action=""; + }; + }; + }; + class clean_up + { + name = "clean_up"; + itemno = 55; + init = ""; + precondition = ""; + class Links + { + class clean_up + { + itemno = 69; + priority = 15.000000; + to="clean_up"; + precondition = ""; + condition="_taskCleanup > 0"; + action="//deleteVehicle _taskItem;" \n + "//[_plyr,0,_taskID,_taskItem] remoteExec [""EPOCH_Server_missionComms"",3];" \n + "_taskCleanup = -1;"; + }; + class remind_dialogue + { + itemno = 66; + priority = 10.000000; + to="clean_up"; + precondition = ""; + condition="count _taskReminder > 0 && !_taskFailed"; + action="_diag = selectRandom _taskReminder;" \n + "[format [""%1"",_diag], 5] call Epoch_dynamicText;" \n + "_taskReminder = [];"; + }; + class markers + { + itemno = 57; + priority = 5.000000; + to="clean_up"; + precondition = ""; + condition="!(isNil ""EPOCH_taskMarkerName"") && (_taskCleanup > 0 || _taskFailed)"; + action="deleteMarkerLocal EPOCH_taskMarkerName;" \n + "_mkrName = nil;" \n + "EPOCH_taskMarkerName = nil;"; + }; + class _ + { + itemno = 56; + priority = 0.000000; + to="comms_1"; + precondition = ""; + condition="true"; + action=""; + }; + }; + }; + class gui + { + name = "gui"; + itemno = 63; + init = "//GUI dialogue Options for Raymix :)"; + precondition = ""; + class Links + { + class no_dialogoue + { + itemno = 64; + priority = 10.000000; + to="items_and_vars"; + precondition = ""; + condition="_taskTitle == """""; + action=""; + }; + class dialogue + { + itemno = 65; + priority = 5.000000; + to="gui"; + precondition = ""; + condition="!(_taskTitle == """")"; + action="" \n + "axeTaskTitle = _taskTitle;" \n + "axeTaskDesc = _taskDesc;" \n + "axeTaskImg = _taskImg;" \n + "createDialog ""taskAccept"";" \n + "" \n + "_taskTitle = """";"; + }; + }; + }; + class next_task + { + name = "next_task"; + itemno = 68; + init = ""; + precondition = ""; + class Links + { + class mission_complete + { + itemno = 40; + priority = 10.000000; + to="end"; + precondition = ""; + condition="count _taskNextTrigger < 1 || !alive _plyr || _taskFailed || _doBin"; + action=""; + }; + class next_task + { + itemno = 79; + priority = 5.000000; + to="setup"; + precondition = ""; + condition="count _taskNextTrigger > 0 && !_taskFailed"; + action="_taskName = selectRandom _taskNextTrigger;" \n + "diag_log format [""Trigger Next Task: %1"",_taskName];" \n + "_taskNextTrigger = [];"; + }; + }; + }; + class comms_2 + { + name = "comms_2"; + itemno = 70; + init = "" \n + "systemChat format [""SERVER CMD: %1"",_serverCmd];" \n + "" \n + "_serverCmd = [];"; + precondition = ""; + class Links + { + class _ + { + itemno = 12; + priority = 0.000000; + to="event_conditions"; + precondition = ""; + condition="true"; + action=""; + }; + }; + }; + class override_for_task + { + name = "override_for_task"; + itemno = 75; + init = "_taskAuthor = axeValCacheList select 0;" \n + "_taskTitle = axeValCacheList select 1;" \n + "_taskSimple = parseNumber (axeValCacheList select 2);" \n + "_taskDesc = ""Test Task"";" \n + "_taskImg = ""NOIMG"";" \n + "_taskTrigger = axeValCacheList select 3;" \n + "_taskLimit = parseNumber (axeValCacheList select 4);" \n + "_taskCheckTime = parseNumber (axeValCacheList select 5);" \n + "_taskDelay = parseNumber (axeValCacheList select 6);" \n + "_taskItems = parseText axeValCacheList select 7;" \n + "_taskItemSpawn = parseNumber (axeValCacheList select 8);" \n + "_taskMarkerType = parseNumber (axeValCacheList select 9);" \n + "_taskMarkerRad = parseNumber (axeValCacheList select 10);" \n + "_taskMarkerText = axeValCacheList select 11;" \n + "_taskFSM = axeValCacheList select 12;" \n + "_taskSQF = axeValCacheList select 13;" \n + "_taskCall = axeValCacheList select 14;" \n + "_binTask = parseNumber (axeValCacheList select 15);" \n + "_taskEventCond1 = axeValCacheList select 16;" \n + "_taskEventCond2 = axeValCacheList select 17;" \n + "_taskEventCond3 = axeValCacheList select 18;" \n + "_taskEventCALL1 = axeValCacheList select 19;" \n + "_taskEventFSM1 = axeValCacheList select 20;" \n + "_taskEventSQF1 = axeValCacheList select 21;" \n + "_taskEventTask1 = axeValCacheList select 22;" \n + "_taskEventCALL2 = axeValCacheList select 23;" \n + "_taskEventFSM2 = axeValCacheList select 24;" \n + "_taskEventSQF2 = axeValCacheList select 25;" \n + "_taskEventTask2 = axeValCacheList select 26;" \n + "_taskEventCALL3 = axeValCacheList select 27;" \n + "_taskEventFSM3 = axeValCacheList select 28;" \n + "_taskEventSQF3 = axeValCacheList select 29;" \n + "_taskEventTask3 = axeValCacheList select 30;" \n + "_taskDiagCond1 = axeValCacheList select 31;" \n + "_taskDiag1 = parseText axeValCacheList select 32;" \n + "_taskDiagSquelch = parseNumber (axeValCacheList select 33);" \n + "_taskDiagCond2 = axeValCacheList select 34;" \n + "_taskDiag2 = parseText axeValCacheList select 35;" \n + "_taskDiagCond3 = axeValCacheList select 36;" \n + "_taskDiag3 = parseText axeValCacheList select 37;" \n + "_taskFailedCond = axeValCacheList select 38;" \n + "_taskFailDist = parseNumber (axeValCacheList select 39);" \n + "_taskFailTime = parseNumber (axeValCacheList select 40);" \n + "//See task failed for this bit" \n + "_taskCleanup = parseNumber (axeValCacheList select 46);" \n + "_taskCompleteCond = axeValCacheList select 47;" \n + "_taskReward = parseText axeValCacheList select 48;" \n + "_taskCompleteDiag1 = parseText axeValCacheList select 49;" \n + "_taskCompleteDiag2 = parseText axeValCacheList select 50;" \n + "_taskReminder = axeValCacheList select 51;" \n + "_taskNextTrigger = parseText axeValCacheList select 52;" \n + ""; + precondition = ""; + class Links + { + class simple_task + { + itemno = 72; + priority = 10.000000; + to="actions"; + precondition = ""; + condition="_taskSimple > 0;"; + action="_doSkip = true;"; + }; + class _ + { + itemno = 33; + priority = 0.000000; + to="comms"; + precondition = ""; + condition="true"; + action=""; + }; + }; + }; + }; + initState="task_control"; + finalStates[] = + { + "end", + }; +};