From eede62bd3864eb6e1c70aa0abb8066bec7500735 Mon Sep 17 00:00:00 2001 From: He-Man Date: Fri, 21 Apr 2017 19:03:58 +0200 Subject: [PATCH] Fixed / updated and added Trader Missions Ported to run it on Events instead fsm --- .../sc/battleye/createvehicle.txt | 2 +- .../compile/missions/EPOCH_mission_accept.sqf | 132 +++--- .../compile/setup/masterLoop/Event1.sqf | 105 +++++ .../compile/setup/masterLoop/init.sqf | 96 +++++ .../missions/EPOCH_mission_refresh.sqf | 22 +- Sources/epoch_config/Configs/CfgMissions.hpp | 24 +- .../Configs/CfgMissions/CfgExample.hpp | 236 +++------- .../Configs/CfgMissions/CfgTraderDiags.hpp | 14 +- .../CfgMissions/CfgmissionDelivery.hpp | 382 +++++++---------- .../Configs/CfgMissions/CfgmissionFish.hpp | 139 ++++++ .../Configs/CfgMissions/CfgmissionMonster.hpp | 134 ++++++ .../Configs/CfgMissions/CfgmissionUav.hpp | 405 +++++++++++------- .../epoch_config/Configs/CfgMissionsTasks.hpp | 2 + .../configs/CfgMainTable.h | 56 +++ 14 files changed, 1076 insertions(+), 673 deletions(-) create mode 100644 Sources/epoch_config/Configs/CfgMissions/CfgmissionFish.hpp create mode 100644 Sources/epoch_config/Configs/CfgMissions/CfgmissionMonster.hpp diff --git a/Server_Install_Pack/sc/battleye/createvehicle.txt b/Server_Install_Pack/sc/battleye/createvehicle.txt index 36ad5e18..3ca74033 100644 --- a/Server_Install_Pack/sc/battleye/createvehicle.txt +++ b/Server_Install_Pack/sc/battleye/createvehicle.txt @@ -1,3 +1,3 @@ -5 "" !="I_UAV_01_F" !="(I|B|O)_UAV_AI" !"_EPOCH" !="B_65x39_Minigun_Caseless_Red_splash" !="B_762x51_Minigun_Tracer_Yellow_splash" !="B_(Swing|Stick)" !"^SmokeShell" !"^G_40mm_" !"^F_40mm_" !"Sub_F_" !"^F_Signal_" !="mini_Grenade" !="GrenadeHand" !="LaserTarget(C|W|E)" !"^Chemlight_" !="(ClaymoreDirectionalMine|DemoCharge|SatchelCharge)_Remote_Ammo" !="SLAMDirectionalMine_Wire_Ammo" !="(CMflare_Chaff|Sapper_Charge|SapperB_Charge|ATMine_Range)_Ammo" !="APERS(TripMine_Wire|BoundingMine_Range|Mine_Range)_Ammo" !="Epoch_(Sapper|Sapper(B|G)|Cloak)_F" !="EPOCH_RyanZombie_[1-5](|_(C|Sp|B|W|M|P))" !="GreatWhite_F" !="groundWeaponHolder" !="WeaponHolderSimulated" !="Epoch_(Male|Female)_F" !"Supply[0-9]" !"Steerable_Parachute_F" !="Epoch_Female_CamoRed_F" !="Land_Cages_F" !="(O|I|B)_UAV_01_backpack_F" !="I_(helipilot|helicrew)_F" !="#smokesource" !="SmokeLauncherAmmo" +5 "" !="Construct_f" !="I_UAV_01_F" !="(I|B|O)_UAV_AI" !"_EPOCH" !="B_65x39_Minigun_Caseless_Red_splash" !="B_762x51_Minigun_Tracer_Yellow_splash" !="B_(Swing|Stick)" !"^SmokeShell" !"^G_40mm_" !"^F_40mm_" !"Sub_F_" !"^F_Signal_" !="mini_Grenade" !="GrenadeHand" !="LaserTarget(C|W|E)" !"^Chemlight_" !="(ClaymoreDirectionalMine|DemoCharge|SatchelCharge)_Remote_Ammo" !="SLAMDirectionalMine_Wire_Ammo" !="(CMflare_Chaff|Sapper_Charge|SapperB_Charge|ATMine_Range)_Ammo" !="APERS(TripMine_Wire|BoundingMine_Range|Mine_Range)_Ammo" !="Epoch_(Sapper|Sapper(B|G)|Cloak)_F" !="EPOCH_RyanZombie_[1-5](|_(C|Sp|B|W|M|P))" !="GreatWhite_F" !="groundWeaponHolder" !="WeaponHolderSimulated" !="Epoch_(Male|Female)_F" !"Supply[0-9]" !"Steerable_Parachute_F" !="Epoch_Female_CamoRed_F" !="Land_Cages_F" !="(O|I|B)_UAV_01_backpack_F" !="I_(helipilot|helicrew)_F" !="#smokesource" !="SmokeLauncherAmmo" 5 "_EPOCH" !="(SapperHead|Jack|SolarGen)_SIM_EPOCH" !="Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower)_EPOCH" !="(Tipi|Workbench|StorageShelf|CinderWallHalf|Foundation|Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower))_Ghost_EPOCH" !="(Tipi|StorageShelf|Safe|LockBox|FirePlace|FirePlaceOn|PlotPole|SolarGen|Jack|Freezer|Tarp|CinderWallHalf|Bobber)_EPOCH" !="I_(Soldier[1-3]|Soldier)_EPOCH" !="(Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Shoebox|Bunk|Rabbit|Cabinet)_EPOCH" !="(Sheep|Goat|Snake|Snake2|Hen|Cock|Fin|Alsatian)_random_EPOCH" !="(Safe|Workbench|LockBox|CinderWall|CinderWallGarage|CinderWallHalf|PlotPole|Tipi|StorageShelf|Fireplace|TankTrap)_SIM_EPOCH" !="Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorL|LargeWallDoorway|Stairs|Stairs2|Ramp|Ladder|Tower)_SIM_EPOCH" !="(Hesco3|Metal)(_Ghost|_SIM|)_EPOCH" !="(Spike|Metal)_TRAP_SIM_EPOCH" !="(WoodFoundation|Foundation)_EPOCH" !="WoodWall[1-4](_SIM|_Ghost|)_EPOCH" 5 SeaGull diff --git a/Sources/epoch_code/compile/missions/EPOCH_mission_accept.sqf b/Sources/epoch_code/compile/missions/EPOCH_mission_accept.sqf index a0d0c302..bc628be1 100644 --- a/Sources/epoch_code/compile/missions/EPOCH_mission_accept.sqf +++ b/Sources/epoch_code/compile/missions/EPOCH_mission_accept.sqf @@ -17,7 +17,6 @@ private ["_allowTask","_doTask","_fnc_path","_itemCompile","_menuCondition","_mi //[[[end]]] _missionIndex = lbCurSel 1500; _missionAllowed = true; -//systemChat format ["Mission Acepted: %1",_missionIndex]; _missionClasses = getArray(getMissionConfig "EpochMissionList" >> "traderMissionClasses"); _nrEnts = player nearEntities ["Man", 20]; @@ -29,90 +28,55 @@ _trader = objNull; }forEach _nrEnts; if !(isNull _trader) then { - -_menuCondition = getText(getMissionConfig "epochMissions" >> (_missionClasses select _missionIndex) >> "missionDeny"); - if!(_menuCondition=="")then{ - if(call compile _menuCondition)then{_missionAllowed = false;}; - }; - - - if(_missionAllowed)then{ _selectedMission = _missionClasses select _missionIndex; - _missionTasks = getArray(getMissionConfig "epochMissions" >> _selectedMission >> "tasksList"); - - _simpleTask = getNumber (getMissionConfig "inGameTasks" >> (_missionTasks select 0) >> "simpleTask"); - - //systemChat format ["Simple Task: %1 | Mission: %2 from %3",_simpleTask,_selectedMission,_missionTasks]; - - if(_simpleTask > 0)then{//Simple Task - - _simpleTaskFSM = getText (getMissionConfig "inGameTasks" >> (_missionTasks select 0) >> "initfsm"); - _simpleTaskSQF = getText (getMissionConfig "inGameTasks" >> (_missionTasks select 0) >> "initsqf"); - _simpleTaskFNC = getText (getMissionConfig "inGameTasks" >> (_missionTasks select 0) >> "initcall"); - - if!(_simpleTaskSQF == "")then{//Compile and store SQF Function - _tag = getText (getMissionConfig "CfgClientFunctions" >> "A3E" >> "tag"); - _path = getText (getMissionConfig "inGameTasks" >> "file"); - _taskNS = _tag + "_" + ((_simpleTaskSQF splitString ".") select 0); - _fnc_path = _path + "\" +_simpleTaskSQF; - - if!((typeName _taskNS)=="CODE")then{ - _itemCompile = compileFinal preprocessFileLineNumbers _fnc_path; - missionNamespace setvariable [_taskNS,_itemCompile]; - }else{ - _itemCompile = missionNamespace getVariable ["_taskNS",""]; - }; - - //Emulating CfgClientFunctions - Is this required ? - [] call _itemCompile; - - }; - - if!(_simpleTaskFSM == "")then{ - _simpleTaskFSM = _path + "\" + _simpleTaskFSM; - epochSimpleTaskHandle = [] execFSM _simpleTaskFSM; - }; - - if!(_simpleTaskFNC == "")then{ - call compile _simpleTaskFNC; - }; - - }else{//Run Task / Mission Monitor - - _doTask = (_missionTasks select 0); - _allowTask = true; - - _plyrVar = missionNamespace getVariable ["EPOCH_playerMissionArray",[]] select {_x find "axeTask" > -1;}; - _uiNSTask = ""; - if(count _plyrVar > 0)then{ - _uiNSTask = _plyrVar select 0 select 1; - }; - _miNSTask = missionNameSpace getVariable ["axeTask",""]; - - //Allow continuation of mission from Cached Task - if!(_uiNSTask == "")then{ - if(_miNSTask == "")then{ - _doTask = _uiNSTask; - }else{ - _allowTask = false; - [format ["Already on a mission - %1",selectRandom ['Chop Chop !','Get on With It !','What are you waiting for ?','No bonuses for tardiness !']], 5] call Epoch_message; - }; - }; - - if(_allowTask)then{ - epochTaskHandle = [_doTask] execFSM "epoch_code\System\task_control.fsm" - }; - + _epochmissionsconfig = getMissionConfig "epochMissions"; + _menuCondition = getText (_epochmissionsconfig >> _selectedMission >> "missionDeny"); + if!(_menuCondition == "")then{ + if(call compile _menuCondition) then { + _missionAllowed = false; }; - - }else{ - - [format["Mission Not Allowed !",_menuCondition], 5] call Epoch_message; //Not formatting, is this intended? - }; - - -} else { -//systemChat format ["Trader Not Found",""]; -["Trader Lost. Goodbye.", 5] call Epoch_message; + if(_missionAllowed)then{ + _missionTasks = getArray (_epochmissionsconfig >> _selectedMission >> "tasksList"); + _missionname = getText (_epochmissionsconfig >> _selectedMission >> "missionName"); + _inGameTasksconfig = getMissionConfig "inGameTasks"; + _taskname = _missionTasks select 0; + _simpleTask = getNumber (_inGameTasksconfig >> _taskname >> "simpleTask"); + + if (_selectedMission isequalto "debugResetMission") exitwith { + EPOCH_ResetTraderMission = true; + }; + if !(EPOCH_ActiveTraderMission isequalto []) exitwith { + EPOCH_ActiveTraderMission params ['','',['_missionname','ERROR']]; + _msg = format ['You are already running %1. Finish or cancel it first',_missionname]; + [_msg, 5] call Epoch_message; + }; + + if (_simpleTask > 0) then { //Simple Task + _taskSQF = getText ( _inGameTasksconfig >> _taskName >> "initsqf"); + if !(_taskSQF isequalto '') then { + call compile format ["[_taskName,player,_unit,_taskItem] execVM ""%1""",_taskSQF]; + }; + _taskCall = getText ( _inGameTasksconfig >> _taskName >> "initcall"); + if !(_taskCall isequalto '') then { + call compile _taskCall + }; + _nexttask = getArray ( _inGameTasksconfig >> _taskName >> "nextTask"); + if !(_nexttask isequalto []) then { + _newtask = selectrandom _nexttask; + EPOCH_mission_startTime = diag_ticktime; + EPOCH_ActiveTraderMission = [_inGameTasksconfig,_newtask,_missionname]; + }; + } + else { + EPOCH_mission_startTime = diag_ticktime; + EPOCH_ActiveTraderMission = [_inGameTasksconfig,_taskname,_missionname]; + }; + } + else { + [format["Mission Not Allowed !",_menuCondition], 5] call Epoch_message; //Not formatting, is this intended? + }; +} +else { + ["Trader Lost. Goodbye.", 5] call Epoch_message; }; diff --git a/Sources/epoch_code/compile/setup/masterLoop/Event1.sqf b/Sources/epoch_code/compile/setup/masterLoop/Event1.sqf index 937a8a6f..515d9b5d 100644 --- a/Sources/epoch_code/compile/setup/masterLoop/Event1.sqf +++ b/Sources/epoch_code/compile/setup/masterLoop/Event1.sqf @@ -169,3 +169,108 @@ for "_i" from _hudIndex to 9 do { _c ctrlSetText ""; }; missionNamespace setVariable [format["EPOCH_dynHUD_%1","topRight"], nil]; + +// EPOCH TraderMissions +if (!isnil "EPOCH_ResetTraderMission") then { + if (!isNil "EPOCH_taskMarker") then{ + EPOCH_taskMarker params ["_mkrName","_taskMarkerVis"]; + [player,_taskMarkerVis,_mkrName] remoteExec ["EPOCH_server_removeMarker",2]; + EPOCH_taskMarker = nil; + }; + if !(_EPOCH_TraderMissionArray isequalto []) then { + _EPOCH_TraderMissionArray params ["_mainblock"]; + _mainblock params ["","","","","",["_missionCleanUpCall",""]]; + call _missionCleanUpCall; + }; + EPOCH_ActiveTraderMission = []; + _EPOCH_TraderMissionArray = []; + _LastMissionTrigger = 0; + ["Mission sucessfully resettet", 5] call Epoch_message; + EPOCH_ResetTraderMission = nil; +}; + +if !(EPOCH_ActiveTraderMission isequalto []) then { + if (_EPOCH_TraderMissionArray isequalto []) then { + _EPOCH_TraderMissionArray = EPOCH_ActiveTraderMission call _EPOCH_BuildTraderMisson; + }; + _EPOCH_TraderMissionArray params ["_mainblock","_taskDelay","_triggerintervall","_taskDialogues","_taskEvents","_taskFailed","_taskComplete"]; + if (diag_ticktime < _taskDelay) exitwith {}; + if (diag_ticktime < _LastMissionTrigger + _triggerintervall) exitwith {}; + _LastMissionTrigger = diag_ticktime; + _mainblock params ["_inGameTasksconfig","_taskName","_unit","_taskItem","_taskTitle","_missionCleanUpCall","_taskCleanup"]; + _taskComplete params ["_taskCompleteCond","_taskReward","_taskCompleteDiags","_taskCompleteCall","_taskNextTrigger"]; + _taskFailed params ['_taskFailedCond','_taskFailTime','_taskFailedDiags','_taskFailedSQF','_taskFailedCall']; + if (diag_ticktime > _taskFailTime || call _taskFailedCond) exitwith { + if (count _taskFailedDiags > 0) then { + _diag = selectRandom _taskFailedDiags; + [format ["%1",_diag], 5] call Epoch_message; + }; + if !(_taskFailedSQF isequalto '') then { + call compile format ["[_taskName,_plyr,_unit,_taskItem] execVM ""%1""",_taskFailedSQF]; + }; + if !(str(_taskFailedCall) == "{}") then { + call _taskFailedCall; + }; + if (!isNil "EPOCH_taskMarker") then{ + EPOCH_taskMarker params ['_mkrName','_taskMarkerVis']; + [player,_taskMarkerVis,_mkrName] remoteExec ["EPOCH_server_removeMarker",2]; + EPOCH_taskMarker = nil; + }; + call _missionCleanUpCall; + EPOCH_ActiveTraderMission = []; + _EPOCH_TraderMissionArray = []; + _LastMissionTrigger = 0; + }; + if (call _taskCompleteCond) exitwith { + if (count _taskCompleteDiags > 0) then { + _diag = selectrandom _taskCompleteDiags; + [format ["%1",_diag], 5] call Epoch_message; + }; + if(count _taskReward > 0) then { + _retTaskWH = objNull; + _retTaskWH = createVehicle ["GroundWeaponHolder",getPosATL player,[],0,"CAN_COLLIDE"]; + [player,Epoch_personalToken,_taskReward,[],_retTaskWH,false] remoteExec ["EPOCH_Server_createObject",2]; + }; + if !(str(_taskCompleteCall) == "{}") then { + call _taskCompleteCall; + }; + if (_taskCleanup isequalto 1) then { + if (!isNil "EPOCH_taskMarker") then{ + EPOCH_taskMarker params ['_mkrName','_taskMarkerVis']; + [player,_taskMarkerVis,_mkrName] remoteExec ["EPOCH_server_removeMarker",2]; + EPOCH_taskMarker = nil; + }; + call _missionCleanUpCall; + }; + if (count _taskNextTrigger > 0) then { + _nexttask = selectrandom _taskNextTrigger; + _EPOCH_TraderMissionArray = [_inGameTasksconfig,_nexttask] call _EPOCH_BuildTraderMisson; + } + else { + EPOCH_ActiveTraderMission = []; + _EPOCH_TraderMissionArray = []; + }; + _LastMissionTrigger = 0; + }; + { + _x params ["_taskEventCond","_taskEventCALL","_taskEventTasks"]; + if (call _taskEventCond) exitwith { + call _taskEventCALL; + if (count _taskEventTasks > 0) exitwith { + _task = selectrandom _taskEventTasks; + _EPOCH_TraderMissionArray = [_inGameTasksconfig,_task] call _EPOCH_BuildTraderMisson; + }; + _taskEvents deleteat _foreachindex; + }; + } foreach _taskEvents; + { + _x params ['_taskDiagCond','_taskDiag']; + if (call _taskDiagCond) exitwith { + _diag = selectRandom _taskDiag; + if !(_diag isequalto "") then { + [format ["%1",_diag], 5] call Epoch_message; + }; + _taskDialogues deleteat _foreachindex; + }; + } foreach _taskDialogues; +}; diff --git a/Sources/epoch_code/compile/setup/masterLoop/init.sqf b/Sources/epoch_code/compile/setup/masterLoop/init.sqf index 4e2db7c9..c2439278 100644 --- a/Sources/epoch_code/compile/setup/masterLoop/init.sqf +++ b/Sources/epoch_code/compile/setup/masterLoop/init.sqf @@ -133,3 +133,99 @@ _cursorTarget = objNull; // init cfgBaseBuilding config var _cfgBaseBuilding = 'CfgBaseBuilding' call EPOCH_returnConfig; _cfgObjectInteractions = 'CfgObjectInteractions' call EPOCH_returnConfig; + + +_EPOCH_BuildTraderMisson = { + params ['_inGameTasksconfig','_taskName',['_unit',objnull],['_taskItem',objnull]]; + _taskTitle = getText ( _inGameTasksconfig >> _taskName >> "title"); + _taskSQF = getText ( _inGameTasksconfig >> _taskName >> "initsqf"); + if !(_taskSQF isequalto '') then { + call compile format ["[_taskName,player,_unit,_taskItem] execVM ""%1""",_taskSQF]; + }; + _taskCall = getText ( _inGameTasksconfig >> _taskName >> "initcall"); + if !(_taskCall isequalto '') then { + call compile _taskCall; + }; + + _taskDelay = diag_ticktime + (getNumber ( _inGameTasksconfig >> _taskName >> "triggerDelay")); + _triggerintervall = getNumber ( _inGameTasksconfig >> _taskName >> "triggerintervall"); + _taskItems = getArray ( _inGameTasksconfig >> _taskName >> "items"); + if !(_taskItems isequalto []) then { + _wh = objNull; + _wh = createVehicle ["GroundWeaponHolder",getPosATL player,[],0,"CAN_COLLIDE"]; + [player,Epoch_personalToken,_taskItems,[],_wh,false] remoteExec ["EPOCH_Server_createObject",2]; + }; + + _taskMarkerType = getnumber (_inGameTasksconfig >> _taskName >> 'markerType'); + if (_taskMarkerType > 0) then { + _taskMarkerVis = getNumber ( _inGameTasksconfig >> _taskName >> "markerVisible"); + _markerPos = [0,0,0]; + if (isNil "EPOCH_taskMarkerPos") then { + if !(isNull _trgt) then { + _markerPos = getPos _trgt; + }; + if !(isNull _unit) then{ + _markerPos = getPos _unit; + }; + if !(isNull _taskItem) then { + _markerPos = getPos _taskItem; + }; + } + else { + _markerPos = EPOCH_taskMarkerPos; + }; + _mkrName = format ["EPOCHTaskMark%1%2",_taskName,diag_tickTime]; + EPOCH_taskMarker = [_mkrName,_taskMarkerVis]; + _taskMarkerText = getText ( _inGameTasksconfig >> _taskName >> "markerText"); + _taskMarkerRad = getNumber ( _inGameTasksconfig >> _taskName >> "markerRadius"); + if(_taskMarkerType == 2)then{ + _markerPos set [0, (_markerPos select 0) + (floor (random _taskMarkerRad) - (_taskMarkerRad / 2))]; + _markerPos set [1, (_markerPos select 1) + (floor (random _taskMarkerRad) - (_taskMarkerRad / 2))]; + }; + [[_taskMarkerVis,player],_markerPos,"ELLIPSE","mil_dot",_taskMarkerText,"ColorYellow",[_taskMarkerRad,_taskMarkerRad], "SolidBorder", 42, 0.6,_mkrName] remoteExec ["EPOCH_server_makeMarker",2]; + }; + _taskDialogues = []; + { + _x params [["_condition",""],["_dialogue",""]]; + if !(_condition isequalto "" || _dialogue isequalto "") then { + _taskDialogues pushback [compile _condition,_dialogue]; + }; + } foreach (getarray (_inGameTasksconfig >> _taskName >> 'dialogues')); + _taskEvents = []; + { + _x params [["_condition",""],["_taskEventCALL",""],["_taskEventTasks",[]]]; + if !(_condition isequalto "") then { + _taskEvents pushback [compile _condition,compile _taskEventCALL,_taskEventTasks]; + }; + } foreach (getarray (_inGameTasksconfig >> _taskName >> 'callevents')); + _taskFailedCond = compile getText ( _inGameTasksconfig >> _taskName >> "failedCondition"); + _taskFailTime = (getNumber ( _inGameTasksconfig >> _taskName >> "abandonTime")); + if (_taskFailTime < 1) then {_taskFailTime=999999} else {_taskFailTime = _taskFailTime + diag_ticktime}; + _taskFailedDiags = getArray ( _inGameTasksconfig >> _taskName >> "faileddialogues"); + _taskFailedSQF = getText ( _inGameTasksconfig >> _taskName >> "failedSQF"); + _taskFailedCall = compile getText ( _inGameTasksconfig >> _taskName >> "failedCall"); + _nextTask = getArray ( _inGameTasksconfig >> _taskName >> "failedTask"); + + _taskCompleteCond = compile getText ( _inGameTasksconfig >> _taskName >> "completeCondition"); + _taskReward = getArray ( _inGameTasksconfig >> _taskName >> "reward"); + _taskCompleteDiags = getArray ( _inGameTasksconfig >> _taskName >> "completedialogues"); + _taskCompleteCall = compile getText ( _inGameTasksconfig >> _taskName >> "completedCALL"); + _taskNextTrigger = getArray ( _inGameTasksconfig >> _taskName >> "nextTask"); + + _missionCleanUpCall = compile getText ( _inGameTasksconfig >> _taskName >> "cleanUpCall"); + _taskCleanup = getNumber ( _inGameTasksconfig >> _taskName >> "cleanUp"); + _return = [ + [_inGameTasksconfig,_taskName,_unit,_taskItem,_taskTitle,_missionCleanUpCall,_taskCleanup], + _taskDelay, + _triggerintervall, + _taskDialogues, + _taskEvents, + [_taskFailedCond,_taskFailTime,_taskFailedDiags,_taskFailedSQF,_taskFailedCall,_nextTask], + [_taskCompleteCond,_taskReward,_taskCompleteDiags,_taskCompleteCall,_taskNextTrigger] + ]; + EPOCH_task_startTime = diag_ticktime; + _return +}; +_epoch_tradermissionarray = []; +EPOCH_ActiveTraderMission = []; +_LastMissionTrigger = 0; diff --git a/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf b/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf index 34abe7f5..d671fe54 100644 --- a/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf +++ b/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf @@ -12,24 +12,19 @@ Github: https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/gui/scripts/missions/EPOCH_mission_refresh.sqf */ -private ["_lbl","_missionClasses","_missionName","_menuCondition","_toolTip","_plyrVar","_uiNSTask"]; +private ["_lbl","_missionClasses","_missionName","_menuCondition","_toolTip","_uiNSTask"]; params [["_currentTask",""]]; _missionClasses = getArray(getMissionConfig "EpochMissionList" >> "traderMissionClasses"); -_plyrVar = missionNamespace getVariable ["EPOCH_playerMissionArray",[]] select {_x find "axeTask" > -1;}; _uiNSTask = ""; -if(count _plyrVar > 0)then{ -_uiNSTask = _plyrVar select 0 select 1; +if (count EPOCH_ActiveTraderMission > 0) then { + _uiNSTask = EPOCH_ActiveTraderMission select 1; }; - { - _missionName = getText(getMissionConfig "epochMissions" >> _x >> "missionName"); if!(_missionName == "")then{ - _lbl = lbAdd[1500, _missionName]; lbSetValue[1500, _lbl, _forEachIndex]; _toolTip = getText(getMissionConfig "epochMissions" >> _x >> "missionToolTip"); - _menuCondition = getText(getMissionConfig "epochMissions" >> _x >> "missionDeny"); if!(_menuCondition=="")then{ if(call compile _menuCondition)then{ @@ -37,17 +32,10 @@ _uiNSTask = _plyrVar select 0 select 1; _toolTip = getText(getMissionConfig "epochMissions" >> _x >> "missionDenyToolTip"); }; }; - - - if(_uiNSTask in getArray(getMissionConfig "epochMissions" >> _x >> "tasksList"))then{ - lbSetColor [1500, _lbl, [0.98,0.98,0.33,1]] ; - _toolTip = "CONTINUE - " + _toolTip; + lbSetColor [1500, _lbl, [0.98,0.98,0.33,1]] ; + _toolTip = "CONTINUE - " + _toolTip; }; - lbSetTooltip [1500, _lbl, _toolTip]; - }; - - }forEach _missionClasses; diff --git a/Sources/epoch_config/Configs/CfgMissions.hpp b/Sources/epoch_config/Configs/CfgMissions.hpp index cbf5dd77..90e3c3e9 100644 --- a/Sources/epoch_config/Configs/CfgMissions.hpp +++ b/Sources/epoch_config/Configs/CfgMissions.hpp @@ -14,14 +14,34 @@ */ class EpochMissionList{ - traderMissionClasses[] = {"missionDelivery","missionEscort","missionUav","missionSapper","missionSkull","missionMilitary","gameCaptureTheJammer","gameCarRace","infoTime","infoName","infoNews","infoVehicles","infoPeople","helpAirDrop","debugResetMission"}; //Exclude from here to remove from menu and trigger +// traderMissionClasses[] = {"missionMonster","missionDelivery","missionEscort","missionUav","missionSapper","missionSkull","missionMilitary","gameCaptureTheJammer","gameCarRace","infoTime","infoName","infoNews","infoVehicles","infoPeople","helpAirDrop","debugResetMission"}; //Exclude from here to remove from menu and trigger + traderMissionClasses[] = {"missionfishing","missionMonster","missionDelivery","missionUav","infoTime","infoName","infoNews","infoVehicles","infoPeople","debugResetMission"}; //Exclude from here to remove from menu and trigger traderMissionActiveNames[] = {}; //Not currently used (WIP) traderMissionLongDesc[] = {}; //Not currently used (WIP) traderMissionActiveLongDesc[] = {}; //Not currently used (WIP) }; class epochMissions { - + class missionfishing{ + missionName = "Bring me a fresh Fish"; //Name of mission as it appears in trader list + missionToolTip= "Bring the Trader a fresh Fish from the Water."; //Tooltip for trader menu + missionDesc = "You must went to the Water and catch a Fish for the Trader and bring it to him."; //Misison description as it appears in trader menu. + missionDeny = "!(""MeleeRod"" in weapons player)"; //Specify a call compile condition. If it returns true the mission will be dis-allowed. Title will be rust coloured and prefixed with NOT ALLOWED. + missionDenyToolTip = "You need a Fishing-Rod for this Mission"; //Provides a tooltip explaining why the mission is denied. prefixed with NOT ALLOWED. + tasksList[] = {"StartFishMission"}; //Must contain a list of tasks used for this mission, in order. Used to control trader menu when mission is active. WIP - To control mission from this array alone. + missionTrigger = ""; //A dynamic trigger that sets off the mission anywhere in-game. e.g. player != vehicle player Not currently used (WIP) + missionTriggerDialog[] = {""}; //Randomly selected dialogue that is shown when mission is dynamically triggered. Not currently used (WIP) + }; + class missionMonster{ + missionName = "Escort my Monster (Experimental)"; //Name of mission as it appears in trader list + missionToolTip= "Escort a Monster."; //Tooltip for trader menu + missionDesc = "You must escort the Traders Monster to another Trader somewhere else on the map."; //Misison description as it appears in trader menu. + missionDeny = ""; //Specify a call compile condition. If it returns true the mission will be dis-allowed. Title will be rust coloured and prefixed with NOT ALLOWED. + missionDenyToolTip = ""; //Provides a tooltip explaining why the mission is denied. prefixed with NOT ALLOWED. + tasksList[] = {"prepForMonsterEscort"}; //Must contain a list of tasks used for this mission, in order. Used to control trader menu when mission is active. WIP - To control mission from this array alone. + missionTrigger = ""; //A dynamic trigger that sets off the mission anywhere in-game. e.g. player != vehicle player Not currently used (WIP) + missionTriggerDialog[] = {""}; //Randomly selected dialogue that is shown when mission is dynamically triggered. Not currently used (WIP) + }; class missionDelivery{ missionName = "Pikes Peak Express"; //Name of mission as it appears in trader list missionToolTip= "Courier."; //Tooltip for trader menu diff --git a/Sources/epoch_config/Configs/CfgMissions/CfgExample.hpp b/Sources/epoch_config/Configs/CfgMissions/CfgExample.hpp index 5c2f8071..de2448ef 100644 --- a/Sources/epoch_config/Configs/CfgMissions/CfgExample.hpp +++ b/Sources/epoch_config/Configs/CfgMissions/CfgExample.hpp @@ -15,185 +15,61 @@ //Built in useful vars that can be used in code based conditions / responses etc. //N.B. Local vars can not be used as they are not in scope when call compiled. // -//EPOCH_task_startTime - task start diag_tickTime | Usage: diag_tickTime - EPOCH_task_startTime > _someDelayTime; -//EPOCH_taskMarkerPos - Will override the built in marker position. Must be set at init stage, i.e. before marker is created. -//EPOCH_taskTitle - As set by title in each task class. -//EPOCH_taskLastLoop - is the diag_tickTime at the last loop start (based on taskCheckTime). Set to start time until loop starts. -//EPOCH_taskItem - Weaponholder object used to hold task item. Is null object until items are spawned in. -//EPOCH_taskMarkerName - Name for the marker generated automatically by the task system. -// -//Stand alone missions can be called by triggering the first task class with: epochTaskHandle = ["myTaskClass"] execFSM "epoch_code\System\task_control.fsm"; -// +// EPOCH_task_startTime - task start diag_tickTime | Usage: diag_tickTime - EPOCH_task_startTime > _someDelayTime; +// EPOCH_mission_starttime - mission start diag_ticktime +// EPOCH_taskMarker - Array for Marker, if set [markername,markerType]. "markerType" see in task description +// EPOCH_taskMarkerPos - Markerposition, if set. - -class taskWithComments{ - //Task Author - author = "axeman"; - //Task Title as appears in (Accept / Decline) dialogue box. Leave as "" to trigger code only. - //title, desc and img are WIP and will be used for future dialogue GUIs. - title = "Find the Backpack."; - //Description on task. For dialogue box. - desc = "Our new friend has lost his backpack. Find it in a nearby house. It will be within 50m and looks like a white package. He needs the contents to continue on his way."; - //Task Image. For dialogue box. - img = "\A3\Characters_F_EPA\Data\ui\Icon_V_plate_carrier_snake_ca.paa"; - //Simple tasks are used for one off calls, e.g. Ask the trader the time. initfsm, initsqf and/or initcall will be triggered and the task will exit with no monitoring. - simpleTask = 0; - //Trigger this task. Use this condition to trigger the task (WIP - Mission and Individual Task Triggers from the Main Loop) - triggerCondition = "count nearestObjects [player,[""house""],250] > 8"; - //Limit the number of times this task can run for player per life or server restart. (WIP - Part of client / server mission & task monitoring) - Leave as default ! - taskLimit = 3; - //Pause time in the task loop. This figure is also applied before triggering completion of mission and again before cleanup / reminder / next task. - taskCheckTime = 16; - //A pause at the start of the task after collecting variables, before anything is created. TODO: maybe remove.. - triggerDelay = 16; - //Spawn helper objects at start of task / mission (e.g. a hatchet for a tree chopping task). Array will accept any object classes which will be positioned appropriately (WIP - Mainly to support vehicle spawning). - items[] = {"ItemSodaOrangeSherbet","itemGPS"}; - //Item Spawn (0 - Do not spawn, 1 - Nearby in House, 2 - Nearby Hidden, 3 - Near Player) - itemSpawn = 1; - - //Call these functions at init of task, after item spawn but before marker creation. Allows setting EPOCH_taskMarkerPos - initfsm = ""; - initsqf = ""; - initcall = "systemChat 'STARTING FROM CONFIG'"; - - //Place a marker on task target (0 = No Marker, 1 = Marker, with text, exactly on target, 2 = radial marker with target somewhere random inside marker) - markerType = 2; - //Set marker radius for radial marker (markerType = 2) - markerRadius = 50; - //Marker Text - Add text to marker, leave "" for no text. No text available for Marker type 2 yet. - markerText = "Last seen here somewhere."; - //task fsm / sqf. Call an sqf or FSM, designed to manage the mission locally. Will trigger at task start (After specified delay) - //All FSM & SQF Calls pass default variables. e.g. [player ,EPOCH_taskItem] execVM "yourSQF.sqf"; - //Both options (SQF or FSM) will be presented when a script call is available. Both will be called if value is not "" - //All sqf, fsm files are stored, by default, in \epoch_code\compile\missions\tasks\ (WIP - Can be edited with the task setting in CfgMissionTasks.hpp) - //TODO - Reduce to just call so these can all be pre-CompileFinaled - - //Call additional functions based on condition, e.g. air drop, antagonist spawn, or custom code. - //Conditions must return a boolean. e.g. player distance player < 12; - callEventBinTask = 0;//If calling another task (callEventTask1 etc.) then bin this task before starting the new one ? - WIP - callEventCondition1 = "true"; - callEventCondition2 = "EPOCH_taskItem distance player < 50"; - callEventCondition3 = ""; - - //All sqf, fsm files are stored, by default, in \epoch_code\compile\missions\tasks\ (WIP - Can be edited with the task setting above) - callEventCALL1 = ""; - callEventFSM1 = ""; - callEventSQF1 = "triggerAirDrop.sqf"; - //Call another task class from the same mission. - callEventTask1 = ""; - - callEventCALL2 = "hint 'You are getting warm'"; - callEventFSM2 = ""; - callEventSQF2 = ""; - callEventTask2 = ""; - - callEventCALL3 = ""; - callEventFSM3 = ""; - callEventSQF3 = ""; - callEventTask3 = ""; - - //dialogues. One of the array will be selected randomly upon each trigger - //Dialogue 1 will trigger only one time upon it's condition, designed to be a welcome message. - diag1Condition = "true"; - dialogue1[] = {"Ok, first thing I need to do is find my rucksack","Help me find my rucksack first.","I need to find my rucksack."}; - - //Delay between triggering dialogue, to stop flooding. - diagSquelch = 60; - //Dialogue 2 and 3 will repeat everytime the condition is met and the squelch time has elapsed. Designed as warnings / hint dialogues. Again, a random message will be chosen from the array. - diag2Condition = "diag_tickTime - EPOCH_task_startTime > 20"; - dialogue2[] = {"I dropped it in one of these buildings. Some.. thing was chasing me.","It is in a house nearby, I have a map that I need in it.","Search the nearby houses until you find it."}; - diag3Condition = "EPOCH_taskItem distance player < 12"; - dialogue3[] = {"Wow, you are really close now.","Keep looking, it is right near you.","Smoking hot, you are practically standing on it."}; - - //FAILED / ABANDONED - //Apply a condition to detect mission failure. e.g. '!alive _unit' if escorting a NPC. Task will bin upon player death anyway. - failedCondition = "!alive player"; - //Abandon Distance - Player moves this far from 'task trigger position' causes abandonment of mission (0 = unlimited) - abandonDist = 100; - //Time Limit - Once time limit is reached, and completed condition is not met, the mission has failed and will be disposed. 0 = No Limit. - abandonTime = 240; - //Failed Message (triggered by timeLimit or abandon distance) - Display random message from array upon task failure. - failed[] = {"You blew it.","Don't give up your day job pal..","That's you finished mate, bring on the pain."}; - //Run a command to punish failure of task (triggered by timeLimit or failure condition). - failedFSM = ""; - failedSQF = ""; - failedCall = "[] call EPOCH_callSapperMigration;"; - //Add failure task. Can be multiple tasks that are picked at random. - failedTask[] = {""}; - //Dispose of task item at failure 0 = No, 1 = Yes. Cleans up any spawned weaponholders. - cleanUp = 1; - //Upon FSM disposal call compile each piece of code. Designed to cleanup namespace(s). - cleanUpCalls[] = {""}; - //COMPLETED - //Condition met to trigger completion of task. - completeCondition = "EPOCH_taskItem distance player < 2"; - //Drop reward for player - Currently always nearby, on the floor. - reward[] = {"ItemSodaOrangeSherbet","ItemSodaPurple","ItemSodaMocha"}; - //Completed dialogues, selected randomly from each array. With pause in-between completed1 and completed2. - completed1[] = {"Well done, that was quick. Let me have it, and here's something for you.","You've found it, good job. I have something in here you can have.","Well found, you're a natural. Here, this is yours, thank you."}; - completed2[] = {"Now let's head out of town, you lead the way !","It's time to leave this area, let's go !","Do you think we should get out of this area now ?"}; - //Remind / hint to the player to get them onto the NEXT task. Displays after longer pause - reminder[] = {"It's about time we headed out of town.","We need to get away from these houses.","Let's move away from these built up areas."}; - //Trigger next task at disposal of this one. Allows tasks to be strung together. If more than one a task is selected at random. Leave blank to end mission and reset menu item at trader. - nextTask[] = {"findHouseItem"}; -}; - -class blankTaskWithDefaults{ - author = "axeman"; - title = ""; - desc = ""; - img = ""; - simpleTask = 0; - triggerCondition = ""; - taskLimit = 3; - taskCheckTime = 16; - triggerDelay = 16; - items[] = {""}; - itemSpawn = 1; - markerType = 2; - markerRadius = 50; - markerText = ""; - initfsm = ""; - initsqf = ""; - initcall = ""; - callEventBinTask = 0; - callEventCondition1 = ""; - callEventCondition2 = ""; - callEventCondition3 = ""; - callEventCALL1 = ""; - callEventFSM1 = ""; - callEventSQF1 = ""; - callEventTask1 = ""; - callEventCALL2 = ""; - callEventFSM2 = ""; - callEventSQF2 = ""; - callEventTask2 = ""; - callEventCALL3 = ""; - callEventFSM3 = ""; - callEventSQF3 = ""; - callEventTask3 = ""; - diag1Condition = ""; - dialogue1[] = {""}; - diagSquelch = 60; - diag2Condition = ""; - dialogue2[] = {""}; - diag3Condition = ""; - dialogue3[] = {""}; - failedCondition = ""; - abandonDist = 100; - abandonTime = 240; - failed[] = {""}; - failedFSM = ""; - failedSQF = ""; - failedCall = ""; - failedTask[] = {""}; - cleanUp = 1; - cleanUpCalls[] = {}; - completeCondition = ""; - reward[] = {""}; - completed1[] = {""}; - completed2[] = {""}; - completedCALL = ""; - reminder[] = {""}; - nextTask[] = {""}; + +class sampletask { + author = "My Name"; + title = "Mission Title"; + simpleTask = 0; + items[] = {"B_UavTerminal"}; // Items will be dropped on the Ground next to Player + triggerDelay = 2; // Before this time (in sec) the task will not Start + taskCheckTime = 3; // Intervall (in sec) for the triggers + markerType = 0; // Place a marker on task target (0 = No Marker, 1 = Marker, with text, exactly on target, 2 = radial marker with target somewhere random inside marker) + markerVisible = 0; // Marker visible for: 0 = Only Player (default), 1 = Group of Player, 2 = Global + markerRadius = 0; // Set marker radius for radial marker (markerType = 2) + markerText = ""; // Marker Text - Add text to marker, leave "" for no text. No text available for Marker type 2 yet. + initcall = ""; // Code to call on task-start + cleanUpCall = ""; // Code to call on task failed or when cleanUp = 1 on finished + dialogues[] = { // Array to make dialogues while task is running + { + "alive player", // Condition 1 + {"Text 1","Text 2","Text 3"} // Array of random dialogues when condition 1 = true + }, + { + "alive player", // Condition 2 + {"Text 1","Text 2","Text 3"} // Array of random dialogues when condition 2 = true + } + }; + callevents[] = { // Array to call codes and / or start a nex task + { + "(diag_tickTime - StartTime > 30)", // Condition 1 + "", // String with code to call when condition 1 = true + {"uavMission1"} // Array of random selected tasks to switch to when condition 1 = true + }, + { + "!alive player", // Condition 2 + "player setdamage 1", // String with code to call when condition 2 = true + {"uavMission2"} // Array of random selected tasks to switch to when condition 2 = true + }, + }; + abandonTime = 240; // Timeout for task + failedCondition = "false"; // Failed Condition for Task + faileddialogues[] = {"Text1","Text2"}; // Array of random dialogues when task failed + completeCondition = "'B_UavTerminal' in assignedItems player"; // Condition to complete the task succesfully + completedialogues[] = {"Text1","Text2"}; // Array of random dialogues when task completed successfully + completedCALL = ""; // Code to call when task completed successfully + reward[] = {}; // Array of items, that spawn next to the Player when completed successfully + cleanUp = 0; // Set to 1 to call cleanupcall on success + nextTask[] = {"doUAVSpawn"}; // Array of next selected random tasks + +// Not used atm + taskLimit = 3; + itemSpawn = 3; + callEventBinTask = 0; + diagSquelch = 30; + abandonDist = 100; }; \ No newline at end of file diff --git a/Sources/epoch_config/Configs/CfgMissions/CfgTraderDiags.hpp b/Sources/epoch_config/Configs/CfgMissions/CfgTraderDiags.hpp index 6ef3141d..05603b52 100644 --- a/Sources/epoch_config/Configs/CfgMissions/CfgTraderDiags.hpp +++ b/Sources/epoch_config/Configs/CfgMissions/CfgTraderDiags.hpp @@ -3,7 +3,7 @@ author = "axeman"; title = "Trader Time"; //Simple task will skip all monitoring and run the provided code (call, fsm, sqf) only. simpleTask = 1; -initsqf = "traderDiag_timePlease.sqf"; +initsqf = "epoch_code\compile\missions\tasks\traderDiag_timePlease.sqf"; initfsm = ""; initcall = ""; //Next task is allowed to trigger a task if required. @@ -14,7 +14,7 @@ class traderDiagNearby{ author = "axeman"; title = "Trader Near By Players"; simpleTask = 1; -initsqf = "traderDiag_nearPlayers.sqf"; +initsqf = "epoch_code\compile\missions\tasks\traderDiag_nearPlayers.sqf"; initfsm = ""; initcall = ""; nextTask[] = {}; @@ -24,7 +24,7 @@ class traderDiagNews{ author = "axeman"; title = "Trader News"; simpleTask = 1; -initsqf = "traderDiag_news.sqf"; +initsqf = "epoch_code\compile\missions\tasks\traderDiag_news.sqf"; initfsm = ""; initcall = ""; nextTask[] = {}; @@ -34,7 +34,7 @@ class traderDiagName{ author = "axeman"; title = "Traders Name"; simpleTask = 1; -initsqf = "traderDiag_name.sqf"; +initsqf = "epoch_code\compile\missions\tasks\traderDiag_name.sqf"; initfsm = ""; initcall = ""; nextTask[] = {}; @@ -44,7 +44,7 @@ class traderNearVehicles{ author = "axeman"; title = "Trader Nearby Vehicles"; simpleTask = 1; -initsqf = "traderDiag_nearVehicles.sqf"; +initsqf = "epoch_code\compile\missions\tasks\traderDiag_nearVehicles.sqf"; initfsm = ""; initcall = ""; nextTask[] = {}; @@ -54,7 +54,7 @@ class traderTriggerAirDrop{ author = "axeman"; title = "Trigger AirDrop"; simpleTask = 1; -initsqf = "traderDiag_triggerAirDrop.sqf"; +initsqf = "epoch_code\compile\missions\tasks\traderDiag_triggerAirDrop.sqf"; initfsm = ""; initcall = ""; nextTask[] = {}; @@ -64,7 +64,7 @@ class traderMissionReset{ author = "axeman"; title = "Reset Missions"; simpleTask = 1; -initsqf = "traderDebug_resetMissions.sqf"; +initsqf = "epoch_code\compile\missions\tasks\traderDebug_resetMissions.sqf"; initfsm = ""; initcall = ""; nextTask[] = {}; diff --git a/Sources/epoch_config/Configs/CfgMissions/CfgmissionDelivery.hpp b/Sources/epoch_config/Configs/CfgMissions/CfgmissionDelivery.hpp index a07b383e..fb14713a 100644 --- a/Sources/epoch_config/Configs/CfgMissions/CfgmissionDelivery.hpp +++ b/Sources/epoch_config/Configs/CfgMissions/CfgmissionDelivery.hpp @@ -1,232 +1,158 @@ -class prepForDelivery{ - author = "axeman"; - title = "Prep for Delivery"; - desc = ""; - img = ""; - simpleTask = 0; - triggerCondition = ""; - taskLimit = 3; - taskCheckTime = 16; - triggerDelay = 0; - items[] = {"ItemDocumentMission"}; - itemSpawn = 3; - markerType = 0; - markerRadius = 0; - markerText = ""; - initfsm = ""; - initsqf = ""; - initcall = "axeDocDeliveryStart = diag_tickTime"; - callEventBinTask = 0; - callEventCondition1 = "(""ItemDocumentMission"" in magazines player)"; - callEventCondition2 = ""; - callEventCondition3 = ""; - callEventCALL1 = "uiNameSpace setVariable ['axeStartTraders',(player nearentities [[""C_Man_1""],500]) apply {_x getVariable [""AI_SLOT"",-1]}]"; - callEventFSM1 = ""; - callEventSQF1 = ""; - callEventTask1 = ""; - callEventCALL2 = ""; - callEventFSM2 = ""; - callEventSQF2 = ""; - callEventTask2 = ""; - callEventCALL3 = ""; - callEventFSM3 = ""; - callEventSQF3 = ""; - callEventTask3 = ""; - diag1Condition = "true"; - dialogue1[] = {"Pick up the Document to Start."}; - diagSquelch = 60; - diag2Condition = "!(""ItemDocumentMission"" in magazines player)"; - dialogue2[] = {"Come on Buddy, Pick it up !","It's right next to you on the floor, pick it up to start."}; - diag3Condition = ""; - dialogue3[] = {""}; - failedCondition = ""; - abandonDist = 100; - abandonTime = 240; - failed[] = {"I guess you have better things to do.","Try again later.","You didn't pick up the document. Misison Failed !"}; - failedFSM = ""; - failedSQF = ""; - failedCall = ""; - failedTask[] = {""}; - cleanUp = 1; - cleanUpCalls[] = {"uiNameSpace setVariable ['axeStartTraders', nil]"}; - completeCondition = "('ItemDocumentMission' in magazines player)"; - reward[] = {}; - completed1[] = {"That's great, let's get out of here.","Good, you have the document, let's move on.","Ok, well done. We can start now."}; - completed2[] = {""}; - reminder[] = {""}; - nextTask[] = {"doDelivery"}; +class prepForDelivery { + author = "axeman"; + title = "Prep for Delivery"; + simpleTask = 0; + items[] = {"ItemDocumentMission"}; + triggerDelay = 2; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil]"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "true", + {"Pick up the Document to Start."} + }, + { + "!(""ItemDocumentMission"" in magazines player)", + {"Come on Buddy, Pick it up !","It's right next to you on the floor, pick it up to start."} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime = 240; + failedCondition = "false"; + faileddialogues[] = {"I guess you have better things to do.","Try again later.","You didn't pick up the document. Misison Failed !"}; + completeCondition = "('ItemDocumentMission' in magazines player)"; + completedialogues[] = {"That's great, let's get out of here.","Good, you have the document, let's move on.","Ok, well done. We can start now."}; + completedCALL = "uiNameSpace setVariable ['axeStartTraders',(player nearentities [[""C_Man_1""],500]) apply {_x getVariable [""AI_SLOT"",-1]}]"; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"doDelivery"}; + +// Not used atm + taskLimit = 3; + itemSpawn = 3; + callEventBinTask = 0; + diagSquelch = 30; + abandonDist = 100; }; -class doDelivery{ - author = "axeman"; - title = "Do Delivery"; - desc = ""; - img = ""; - simpleTask = 0; - triggerCondition = "(""ItemDocumentMission"" in magazines player)"; - taskLimit = 3; - taskCheckTime = 16; - triggerDelay = 3; - items[] = {""}; - itemSpawn = 0; - markerType = 0; - markerRadius = 0; - markerText = ""; - initfsm = ""; - initsqf = ""; - initcall = ""; - callEventBinTask = 0; - callEventCondition1 = "(axeDocDeliveryStart + 480 < diag_tickTime) && ((player nearentities [[""C_Man_1""],500]) apply {_x getVariable [""AI_SLOT"",-1]} isEqualTo (uiNameSpace getVariable [""axeStartTraders"",[]]))"; - callEventCondition2 = ""; - callEventCondition3 = ""; - callEventCALL1 = "[""Hey, what are you doing here ? Get on with your task !"", 5] call Epoch_message"; - callEventFSM1 = ""; - callEventSQF1 = ""; - callEventTask1 = ""; - callEventCALL2 = ""; - callEventFSM2 = ""; - callEventSQF2 = ""; - callEventTask2 = ""; - callEventCALL3 = ""; - callEventFSM3 = ""; - callEventSQF3 = ""; - callEventTask3 = ""; - diag1Condition = "(""ItemDocumentMission"" in magazines player)"; - dialogue1[] = {"Ok, head off to another trader, you can't deliver to any nearby.","All set. Now take that document to another trader further away.","Take that message to another trader or trader city."}; - diagSquelch = 40; - diag2Condition = "!('ItemDocumentMission' in magazines player)"; - dialogue2[] = {"Don't leave that document anywhere.","If you lose that document you will fail the mission."}; - diag3Condition = "(count (player nearentities [[""C_Man_1""],42]) > 0) && (count (((player nearentities [[""C_Man_1""],42]) apply {_x getVariable [""AI_SLOT"",-1]}) select {_x in (uiNameSpace getVariable [""axeStartTraders"",[]])}) < 1)"; - dialogue3[] = {"Well done, you have a trader nearby, go see him","Looks like you found another trader, well done, deliver the message.","UAV has spotted another trader nearby, go deliver the message."}; - failedCondition = ""; - abandonDist = 0; - abandonTime = 1800; - failed[] = {"Looks like you took too long buddy, Mission Over.","You need to be quicker next time, Mission Over !","Misison Failed - You took too long, better luck next time."}; - failedFSM = ""; - failedSQF = ""; - failedCall = ""; - failedTask[] = {""}; - cleanUp = 0; - cleanUpCalls[] = {"uiNameSpace setVariable ['axeStartTraders', nil]"}; - completeCondition = "(count (player nearentities [[""C_Man_1""],6]) > 0) && (count (((player nearentities [[""C_Man_1""],6]) apply {_x getVariable [""AI_SLOT"",-1]}) select {_x in (uiNameSpace getVariable [""axeStartTraders"",[]])}) < 1)"; - reward[] = {}; - completed1[] = {"Hey there pal, it looks like you have something for me ?","Great Job there. Step into my office traveller.","You made it, time to take a look at that message."}; - completed2[] = {""}; - reminder[] = {""}; - nextTask[] = {"finishDelivery"}; +class doDelivery { + author = "axeman"; + title = "Do Delivery"; + simpleTask = 0; + items[] = {}; + triggerDelay = 8; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil]"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "(""ItemDocumentMission"" in magazines player)", + {"Ok, head off to another trader, you can't deliver to any nearby.","All set. Now take that document to another trader further away.","Take that message to another trader or trader city."} + }, + { + "!('ItemDocumentMission' in magazines player)", + {"Don't leave that document anywhere.","If you lose that document you will fail the mission."} + }, + { + "(count (player nearentities [[""C_Man_1""],42]) > 0) && (count (((player nearentities [[""C_Man_1""],42]) apply {_x getVariable [""AI_SLOT"",-1]}) select {_x in (uiNameSpace getVariable [""axeStartTraders"",[]])}) < 1)", + {"Well done, you have a trader nearby, go see him","Looks like you found another trader, well done, deliver the message.","UAV has spotted another trader nearby, go deliver the message."} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...},{"NextTask1","NextTask2", ...}} + "(EPOCH_task_startTime + 480 < diag_tickTime) && ((player nearentities [[""C_Man_1""],500]) apply {_x getVariable [""AI_SLOT"",-1]} isEqualTo (uiNameSpace getVariable [""axeStartTraders"",[]]))", + "[""Hey, what are you doing here ? Get on with your task !"", 5] call Epoch_message", + {} + } + }; + abandonTime = 1800; + failedCondition = "false"; + faileddialogues[] = {"Looks like you took too long buddy, Mission Over.","You need to be quicker next time, Mission Over !","Misison Failed - You took too long, better luck next time."}; + completeCondition = "(count (player nearentities [[""C_Man_1""],6]) > 0) && (count (((player nearentities [[""C_Man_1""],6]) apply {_x getVariable [""AI_SLOT"",-1]}) select {_x in (uiNameSpace getVariable [""axeStartTraders"",[]])}) < 1)"; + completedialogues[] = {"Hey there pal, it looks like you have something for me ?","Great Job there. Step into my office traveller.","You made it, time to take a look at that message."}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"finishDelivery"}; }; -class finishDelivery{ - author = "axeman"; - title = "Finish Delivery"; - desc = ""; - img = ""; - simpleTask = 0; - triggerCondition = "(""ItemDocumentMission"" in magazines player)"; - taskLimit = 3; - taskCheckTime = 16; - triggerDelay = 3; - items[] = {""}; - itemSpawn = 0; - markerType = 0; - markerRadius = 0; - markerText = ""; - initfsm = ""; - initsqf = ""; - initcall = "axeRndBadNews = floor random 100"; - callEventBinTask = 1; - callEventCondition1 = "(""ItemDocumentMission"" in magazines player)"; - callEventCondition2 = "axeRndBadNews < 6"; - callEventCondition3 = ""; - callEventCALL1 = "player removeMagazine ""ItemDocumentMission"""; - callEventFSM1 = ""; - callEventSQF1 = ""; - callEventTask1 = ""; - callEventCALL2 = ""; - callEventFSM2 = ""; - callEventSQF2 = ""; - callEventTask2 = "deliveryMissionBadNews"; - callEventCALL3 = ""; - callEventFSM3 = ""; - callEventSQF3 = ""; - callEventTask3 = ""; - diag1Condition = "axeRndBadNews > 5"; - dialogue1[] = {"That's interesting news. Thanks for bringing this.","Great news, you did well to bring this to me."}; - diagSquelch = 60; - diag2Condition = ""; - dialogue2[] = {""}; - diag3Condition = ""; - dialogue3[] = {""}; - failedCondition = ""; - abandonDist = 0; - abandonTime = 240; - failed[] = {""}; - failedFSM = ""; - failedSQF = ""; - failedCall = ""; - failedTask[] = {}; - cleanUp = 0; - cleanUpCalls[] = {"uiNameSpace setVariable ['axeStartTraders', nil]"}; - completeCondition = "axeRndBadNews > 5"; - reward[] = {}; - completed1[] = {"Take your reward, you have earnt it","Here is your reward, you are a great courier.","Any time you need work, come and see me, great job."}; - completedCALL = "axeRewardWH = createVehicle[""groundWeaponHolder"",getPosATL player,[],0,""CAN_COLLIDE""];[axeRewardWH,""Pelican_EPOCH""] remoteExec [""EPOCH_serverLootObject"",2];"; - reminder[] = {""}; - nextTask[] = {}; +class finishDelivery { + author = "axeman"; + title = "Finish Delivery"; + simpleTask = 0; + items[] = {}; + triggerDelay = 8; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = "axeRndBadNews = floor random 100"; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil];axeRndBadNews = nil"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "axeRndBadNews > 5", + {"That's interesting news. Thanks for bringing this.","Great news, you did well to bring this to me."} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...},{"NextTask1","NextTask2", ...}} + "(""ItemDocumentMission"" in magazines player)", + "player removeMagazine ""ItemDocumentMission""", + {} + }, + { // {"condition",{"Message1","Message2", ...},{"NextTask1","NextTask2", ...}} + "axeRndBadNews < 6", + "", + {"deliveryMissionBadNews"} + } + }; + abandonTime = 240; + failedCondition = "false"; + faileddialogues[] = {}; + completeCondition = "diag_ticktime - EPOCH_task_startTime > 16 && axeRndBadNews > 5"; + completedialogues[] = {"Take your reward, you have earnt it","Here is your reward, you are a great courier.","Any time you need work, come and see me, great job."}; + completedCALL = "_wh = createVehicle[""groundWeaponHolder"",getPosATL player,[],0,""CAN_COLLIDE""];[_wh,""Pelican_EPOCH""] remoteExec [""EPOCH_serverLootObject"",2];"; + reward[] = {}; + cleanUp = 1; + nextTask[] = {}; }; -class deliveryMissionBadNews{ - author = "axeman"; - title = "Delivery Gone Bad"; - desc = ""; - img = ""; - simpleTask = 0; - triggerCondition = ""; - taskLimit = 3; - taskCheckTime = 4; - triggerDelay = 3; - items[] = {""}; - itemSpawn = 0; - markerType = 0; - markerRadius = 50; - markerText = ""; - initfsm = ""; - initsqf = ""; - initcall = "[player,6] call EPOCH_callSapperMigration"; - callEventBinTask = 0; - callEventCondition1 = ""; - callEventCondition2 = ""; - callEventCondition3 = ""; - callEventCALL1 = ""; - callEventFSM1 = ""; - callEventSQF1 = ""; - callEventTask1 = ""; - callEventCALL2 = ""; - callEventFSM2 = ""; - callEventSQF2 = ""; - callEventTask2 = ""; - callEventCALL3 = ""; - callEventFSM3 = ""; - callEventSQF3 = ""; - callEventTask3 = ""; - diag1Condition = "true"; - dialogue1[] = {"Oh my, that's terrible, why did you bring me this news ?","No no no, why would you do this to me, this is awful news."}; - diagSquelch = 60; - diag2Condition = ""; - dialogue2[] = {""}; - diag3Condition = ""; - dialogue3[] = {""}; - failedCondition = ""; - abandonDist = 100; - abandonTime = 240; - failed[] = {""}; - failedFSM = ""; - failedSQF = ""; - failedCall = ""; - failedTask[] = {""}; - cleanUp = 1; - cleanUpCalls[] = {"uiNameSpace setVariable ['axeStartTraders', nil]"}; - completeCondition = "true"; - reward[] = {""}; - completed1[] = {"You are going to pay for that, get out of my sight","Nobody does that to me, go away.","I would run buddy, I am not pleased."}; - completed2[] = {""}; - reminder[] = {""}; - nextTask[] = {}; +class deliveryMissionBadNews { + author = "axeman"; + title = "Delivery Gone Bad"; + simpleTask = 0; + items[] = {}; + triggerDelay = 0; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = "[player,6] call EPOCH_callSapperMigration"; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil]"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "true", + {"Oh my, that's terrible, why did you bring me this news ?","No no no, why would you do this to me, this is awful news."} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime =240; + failedCondition = "false"; + faileddialogues[] = {}; + completeCondition = "diag_ticktime - EPOCH_task_startTime > 8"; + completedialogues[] = {"You are going to pay for that, get out of my sight","Nobody does that to me, go away.","I would run buddy, I am not pleased."}; + completedCALL = ""; + reward[] = {}; + cleanUp = 1; + nextTask[] = {}; }; \ No newline at end of file diff --git a/Sources/epoch_config/Configs/CfgMissions/CfgmissionFish.hpp b/Sources/epoch_config/Configs/CfgMissions/CfgmissionFish.hpp new file mode 100644 index 00000000..64fec35d --- /dev/null +++ b/Sources/epoch_config/Configs/CfgMissions/CfgmissionFish.hpp @@ -0,0 +1,139 @@ +class StartFishMission { + author = "He-Man"; + title = "Start Fish Mission"; + simpleTask = 0; + items[] = {}; + triggerDelay = 2; + triggerintervall = 5; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = "uiNameSpace setVariable ['axeStartTraders',(player nearentities [[""C_Man_1""],20]) apply {_x getVariable [""AI_SLOT"",-1]}]; EPOCH_Mission_StartPos = getpos player"; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil];EPOCH_Mission_StartPos = nil"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "true", + {"I really need a fresh Fish. Can you fish me one?","Go to the Water and catch me a fresh Fish. I will reward you"} + }, + { // {"condition",{"Message1","Message2", ...}} + "true", + {"But don't bring me a Fish from this region. Go a bit away","The Fishes from this region are boring. Please go a bit farther"} + }, + { + "!(""MeleeRod"" in weapons player)", + {"Hey, you need your Fishin Rod for fishing! Don't throw it away"} + }, + { + "(surfaceiswater (getpos player) || (surfaceiswater (player modelToWorld[0, 5 + (random 5), 0]))) && player distance EPOCH_Mission_StartPos < 1000", + {"The Fishes in this region taste awful. Go to another Spot.","Don't bring me a fish frome here! They taste terrible..."} + }, + { + "(surfaceiswater (getpos player) || (surfaceiswater (player modelToWorld[0, 5 + (random 5), 0]))) && player distance EPOCH_Mission_StartPos > 1000", + {"Oh nice, here is an excellent spot for fishing...","Use your Fishing-Rod to catch me a fresh Fish"} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime = 1200; + failedCondition = "!alive player"; + faileddialogues[] = {"I guess you have better things to do. - Mission Failed","Mission Failed - Try again later."}; + completeCondition = "player distance (missionNamespace getVariable [""EPOCH_myBobber"", objNull]) < 40 && player distance EPOCH_Mission_StartPos > 900"; + completedialogues[] = {"Okay, now catch a Fish","Let's wait now..."}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"CatchFish"}; + +// Not used atm + taskLimit = 3; + itemSpawn = 3; + callEventBinTask = 0; + diagSquelch = 30; + abandonDist = 100; +}; +class CatchFish { + author = "He-Man"; + title = "Catch the Fish"; + simpleTask = 0; + items[] = {}; + triggerDelay = 8; + triggerintervall = 5; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil];EPOCH_Mission_StartPos = nil"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime = 600; + failedCondition = "!alive player"; + faileddialogues[] = {"I guess you have better things to do. - Mission Failed","Mission Failed - You took to long."}; + completeCondition = "{_x in magazines player} count ([""CfgEpochClient"", ""fishLoots"", [""ItemTuna"",""ItemSeaBass"",""ItemSeaBass"",""ItemSeaBass"",""ItemTrout"",""ItemTrout"",""ItemTrout"",""ItemTrout"",""ItemTrout"",""ItemTrout""]] call EPOCH_fnc_returnConfigEntryV2) > 0"; + completedialogues[] = {"YEAH! You got one. Bring it to me","Wow, bring the Fish to me!"}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"BringTheFish"}; +}; +class BringTheFish { + author = "He-Man"; + title = "Bring the Fish"; + simpleTask = 0; + items[] = {}; + triggerDelay = 8; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil];EPOCH_Mission_StartPos = nil"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "diag_ticktime - EPOCH_task_startTime > 180", + {"Hurry up, I am really hungry.","Hey, where is my Fish? Bring it to me!","Why does it take so long to bring me a Fish?"} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime = 1200; + failedCondition = "!alive player"; + faileddialogues[] = {"I guess you have better things to do. - Mission Failed","Mission Failed - You took to long."}; + completeCondition = "((player nearentities [[""C_Man_1""],20]) apply {_x getVariable [""AI_SLOT"",-1]} isEqualTo (uiNameSpace getVariable [""axeStartTraders"",[]])) && {_x in magazines player} count ([""CfgEpochClient"", ""fishLoots"", [""ItemTuna"",""ItemSeaBass"",""ItemSeaBass"",""ItemSeaBass"",""ItemTrout"",""ItemTrout"",""ItemTrout"",""ItemTrout"",""ItemTrout"",""ItemTrout""]] call EPOCH_fnc_returnConfigEntryV2) > 0"; + completedialogues[] = {"Hey, you bring me my Fish? - THANKS!!!","Great Job there. Step into my office traveller.","You made it, thanks for bringing me the Fish."}; + completedCALL = "{if (_x in magazines player) exitwith {player removeMagazine _x}} foreach ([""CfgEpochClient"", ""fishLoots"", [""ItemTuna"",""ItemSeaBass"",""ItemSeaBass"",""ItemSeaBass"",""ItemTrout"",""ItemTrout"",""ItemTrout"",""ItemTrout"",""ItemTrout"",""ItemTrout""]] call EPOCH_fnc_returnConfigEntryV2)"; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"FinishFishMission"}; +}; +class FinishFishMission { + author = "He-Man"; + title = "Finish Fish Mission"; + simpleTask = 0; + items[] = {}; + triggerDelay = 8; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil];EPOCH_Mission_StartPos = nil"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime = 240; + failedCondition = "false"; + faileddialogues[] = {}; + completeCondition = "true"; + completedialogues[] = {"Take your reward, you have earnt it","Here is your reward, you are a great fisher man.","Any time you need work, come and see me, great job."}; + completedCALL = "_WH = createVehicle[""groundWeaponHolder"",getPosATL player,[],0,""CAN_COLLIDE""];[_WH,""Mission_Fishing_Payout""] remoteExec [""EPOCH_serverLootObject"",2];"; + reward[] = {}; + cleanUp = 1; + nextTask[] = {}; +}; diff --git a/Sources/epoch_config/Configs/CfgMissions/CfgmissionMonster.hpp b/Sources/epoch_config/Configs/CfgMissions/CfgmissionMonster.hpp new file mode 100644 index 00000000..ab04f816 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgMissions/CfgmissionMonster.hpp @@ -0,0 +1,134 @@ +class prepForMonsterEscort { + author = "He-Man"; + title = "Prep for Monster Escort"; + simpleTask = 0; + items[] = {}; + triggerDelay = 2; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = "EPOCH_Monster = objnull"; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil]"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "true", + {"Hey, thanks for helping me to take my Monster to a friend"} + }, + { + "true", + {"I will call my monster. Bring him to another Trader"} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...},{"NextTask1","NextTask2", ...}} + "true", + "uiNameSpace setVariable ['axeStartTraders',(player nearentities [[""C_Man_1""],500]) apply {_x getVariable [""AI_SLOT"",-1]}]", + {} + }, + { // {"condition",{"Message1","Message2", ...},{"NextTask1","NextTask2", ...}} + "true", + "_animalPos = [getposatl player, 150, 250, 5, 0, 2000, 0] call BIS_fnc_findSafePos;_randomAIClass = ""Construct_F"";_animal = createAgent[_randomAIClass, _animalPos, [], 5, ""NONE""];EPOCH_Monster = _animal;[EPOCH_Monster] remoteExec [""EPOCH_localCleanup"",2]", + {} + } + }; + abandonTime = 240; + failedCondition = "false"; + faileddialogues[] = {"I guess you have better things to do.","Try again later.","You didn't pick up the document. Misison Failed !"}; + completeCondition = "!isnull EPOCH_Monster"; + completedialogues[] = {}; + completedCALL = "[] spawn {_pos = getpos player;_stay = false;while {!isnull EPOCH_Monster && alive EPOCH_Monster && alive player} do {if (EPOCH_Monster distance2d player > 35) then {_stay = false;_pos = getposatl player;}else {if (!_stay) then {_pos = getposatl EPOCH_Monster;_stay = true;};};EPOCH_Monster moveto _pos;_time = diag_ticktime;uisleep 3;waituntil {diag_ticktime - _time > 15 || EPOCH_Monster distance _pos < 25 || isnull EPOCH_Monster};};};"; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"EscortMonster"}; + +// Not used atm + taskLimit = 3; + itemSpawn = 3; + callEventBinTask = 0; + diagSquelch = 30; + abandonDist = 100; +}; +class EscortMonster { + author = "He-Man"; + title = "Escort Monster"; + simpleTask = 0; + items[] = {}; + triggerDelay = 5; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil]; deletevehicle EPOCH_Monster"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + { // {"condition",{"Message1","Message2", ...}} + "true", + {"That's great, look for the Monster outside.","Good, now search my Monster outside","Ok, well done. We can start now."} + }, + { + "true", + {"Ok, head off to another trader, you can't deliver to any nearby.","All set. Now take the Monster to another trader further away.","Take that Monster to another trader or trader city."} + }, + { + "EPOCH_task_startTime + 60 < diag_ticktime", + {"Sorrz, he is an old Man and not very fast...","My Monster is very old a bit lazy"} + }, + { + "EPOCH_task_startTime + 120 < diag_ticktime && EPOCH_Monster distance player > 350", + {"Don't go to far away or you loose the Monster","Hey, wait for my Monster!"} + }, + { + "EPOCH_Monster distance player < 20", + {"Go forward, my Monster will follow you!","Hurry up a bit. My Monster is hungry..."} + }, + { + "(count (player nearentities [[""C_Man_1""],42]) > 0) && (count (((player nearentities [[""C_Man_1""],42]) apply {_x getVariable [""AI_SLOT"",-1]}) select {_x in (uiNameSpace getVariable [""axeStartTraders"",[]])}) < 1)", + {"Well done, you have a trader nearby, go see him","Looks like you found another trader, well done, deliver the Monster.","UAV has spotted another trader nearby, go deliver the Monster."} + }, + { + "(EPOCH_task_startTime + 480 < diag_tickTime) && ((player nearentities [[""C_Man_1""],500]) apply {_x getVariable [""AI_SLOT"",-1]} isEqualTo (uiNameSpace getVariable [""axeStartTraders"",[]]))", + {"Hey, what are you doing here ? Get on with your task!"} + } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime = 2000; + failedCondition = "!alive EPOCH_Monster || !alive player || EPOCH_Monster distance player > 500"; + faileddialogues[] = {"Oh no, you lost my Monster - Mission Failed","My Monster ist gone, Mission Over!"}; + completeCondition = "player distance EPOCH_Monster < 50 && (count (player nearentities [[""C_Man_1""],20]) > 0) && (count (((player nearentities [[""C_Man_1""],20]) apply {_x getVariable [""AI_SLOT"",-1]}) select {_x in (uiNameSpace getVariable [""axeStartTraders"",[]])}) < 1)"; + completedialogues[] = {"Hey, you bring me my friends Monster?","Great Job there. Step into my office traveller.","You made it, thanks for bringing me the Monster."}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"finishMonsterEscort"}; +}; +class finishMonsterEscort { + author = "He-Man"; + title = "Finish Monster Escort"; + simpleTask = 0; + items[] = {}; + triggerDelay = 8; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "uiNameSpace setVariable ['axeStartTraders', nil]; deletevehicle EPOCH_Monster"; + dialogues[] = { // {{ARRAY1},{ARRAY2},... } + }; + callevents[] = { // {{ARRAY1},{ARRAY2},... } + }; + abandonTime = 240; + failedCondition = "false"; + faileddialogues[] = {}; + completeCondition = "true"; + completedialogues[] = {"Take your reward, you have earnt it","Here is your reward, you are a great courier.","Any time you need work, come and see me, great job."}; + completedCALL = "_WH = createVehicle[""groundWeaponHolder"",getPosATL player,[],0,""CAN_COLLIDE""];[_WH,""Mission_Monster_Payout""] remoteExec [""EPOCH_serverLootObject"",2];"; + reward[] = {}; + cleanUp = 1; + nextTask[] = {}; +}; diff --git a/Sources/epoch_config/Configs/CfgMissions/CfgmissionUav.hpp b/Sources/epoch_config/Configs/CfgMissions/CfgmissionUav.hpp index 635b7212..cad412f6 100644 --- a/Sources/epoch_config/Configs/CfgMissions/CfgmissionUav.hpp +++ b/Sources/epoch_config/Configs/CfgMissions/CfgmissionUav.hpp @@ -1,166 +1,263 @@ class uavMissionAccepted{ - author = "axeman"; - title = "UAV Mission Accepted"; - simpleTask = 0; - taskLimit = 3; - taskCheckTime = 3; - triggerDelay = 2; - items[] = {"B_UavTerminal"}; - itemSpawn = 3; - markerType = 0; - markerRadius = 0; - callEventBinTask = 0; - diag1Condition = "true"; - dialogue1[] = {"The UAV terminal is at your feet, Equip it !","Pick up the terminal and equip yourself with it.","Grab the UAV terminal and put it in your GPS slot."}; - diagSquelch = 30; - diag2Condition = "!('B_UavTerminal' in assignedItems player)"; - dialogue2[] = {"Hurry it up, pick up and equip the terminal.","Come on, Equip yourself with the terminal.","We don't have all day, get that terminal equipped."}; - abandonDist = 100; - abandonTime = 240; - failed[] = {"I guess you have better things to do.","Try again later.","You didn't pick up the terminal. Misison Failed !"}; - cleanUp = 0; - completeCondition = "'B_UavTerminal' in assignedItems player"; - completed1[] = {"That's great, you have 30 seconds to find a safe position.","Find a hidden spot to operate from, take off in 30 seconds.","Find yourself a concealed position to work from, taking off in half a minute."}; - nextTask[] = {"doUAVSpawn"}; + author = "axeman"; + title = "UAV Mission Accepted"; + simpleTask = 0; + items[] = {}; + triggerDelay = 1; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = ""; + dialogues[] = {}; + callevents[] = {}; + abandonTime = 240; + failedCondition = "missionNameSpace getVariable [""InSafeZone"",false]"; + faileddialogues[] = {"Mission not allowed in Safe Zone"}; + completeCondition = "true"; + completedialogues[] = {}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"uavMissionStart"}; + +// Not used atm + taskLimit = 3; + itemSpawn = 3; + callEventBinTask = 0; + diagSquelch = 30; + abandonDist = 100; +}; +class uavMissionStart{ + author = "axeman"; + title = "UAV Mission Start"; + simpleTask = 0; + items[] = {"B_UavTerminal"}; + triggerDelay = 1; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = ""; + dialogues[] = { + { + "true", + {"The UAV terminal is at your feet, Equip it !","Pick up the terminal and equip yourself with it.","Grab the UAV terminal and put it in your GPS slot."} + }, + { + "!('B_UavTerminal' in assignedItems player)", + {"Hurry it up, pick up and equip the terminal.","Come on, Equip yourself with the terminal.","We don't have all day, get that terminal equipped."} + } + }; + callevents[] = { + { + "missionNameSpace getVariable [""InSafeZone"",false]", + "['Mission not allowed in Safe Zone',5] call Epoch_Message", + {} + } + + + }; + abandonTime = 240; + failedCondition = "false"; + faileddialogues[] = {"I guess you have better things to do.","Try again later.","You didn't pick up the terminal. Misison Failed !"}; + completeCondition = "'B_UavTerminal' in assignedItems player"; + completedialogues[] = {"That's great, you have 30 seconds to find a safe position.","Find a hidden spot to operate from, take off in 30 seconds.","Find yourself a concealed position to work from, taking off in half a minute."}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"doUAVSpawn"}; + +// Not used atm + taskLimit = 3; + itemSpawn = 3; + callEventBinTask = 0; + diagSquelch = 30; + abandonDist = 100; }; class doUAVSpawn{ - author = "axeman"; - title = "UAV Spawn"; - simpleTask = 0; - taskLimit = 3; - taskCheckTime = 8; - triggerDelay = 30; - itemSpawn = 0; - markerType = 0; - markerRadius = 0; - initcall = "axeUAV = objNull"; - callEventBinTask = 0; - callEventCondition1 = "(diag_tickTime - EPOCH_task_startTime) > 6"; - callEventCALL1 = "_targetPos = (getPosATL player) findEmptyPosition [25,250,""I_UAV_01_F""];axeUAV = createVehicle[""I_UAV_01_F"", _targetPos, [], 10, ""CAN_COLLIDE""];axeUAV disableTIEquipment true;_driver = (group player) createUnit[""I_UAV_AI"", position axeUAV, [], 0, ""CAN_COLLIDE""];_driver moveInAny axeUAV;"; - diag1Condition = "true"; - dialogue1[] = {"UAV is ready, get prepared !","Here it comes, connecting you now. 10 seconds..","Nice spot, connecting you to the UAV !"}; - diagSquelch = 60; - failedCondition = "!('B_UavTerminal' in assignedItems player)"; - abandonDist = -1; - abandonTime = 1200; - failed[] = {"Lost it already.. Mission Over","Not a willing pilot eh ? Try again later.","Equipment Lost.. Mission Failed !"}; - cleanUp = 0; - completeCondition = "!(isNull axeUAV)"; - nextTask[] = {"doUAVAttach"}; + author = "axeman"; + title = "UAV Spawn"; + simpleTask = 0; + items[] = {}; + triggerDelay = 30; + triggerintervall = 2; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = "axeUAV = objNull"; + cleanUpCall = ""; + dialogues[] = { + { + "true", + {"UAV is ready, get prepared! Connecting in 10 seconds","Here it comes, connecting you in 10 seconds..","Nice spot, connecting you to the UAV in 10 seconds!"} + } + }; + callevents[] = { + { + "(diag_tickTime - EPOCH_task_startTime) > 40", + "_targetPos = (getPosATL player) findEmptyPosition [25,250,""I_UAV_01_F""];axeUAV = createVehicle[""I_UAV_01_F"", _targetPos, [], 10, ""CAN_COLLIDE""];axeUAV disableTIEquipment true;_driver = (group player) createUnit[""I_UAV_AI"", position axeUAV, [], 0, ""CAN_COLLIDE""];_driver moveInAny axeUAV;[axeUAV] remoteExec [""EPOCH_localCleanup"",2]", + {} + } + }; + abandonTime = 240; + failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive player)"; + faileddialogues[] = {"Lost it already.. Mission Over","Not a willing pilot eh ? Try again later.","Equipment Lost.. Mission Failed !"}; + completeCondition = "!(isNull axeUAV)"; + completedialogues[] = {}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"doUAVAttach"}; }; class doUAVAttach{ - author = "axeman"; - title = "UAV Spawn"; - simpleTask = 0; - taskLimit = 3; - taskCheckTime = 16; - triggerDelay = 6; - itemSpawn = 0; - markerType = 0; - markerRadius = 0; - initcall = "player connectTerminalToUAV axeUAV;player action [""SwitchToUAVDriver"", axeUAV];addToRemainsCollector[axeUAV];"; - callEventBinTask = 0; - diag1Condition = "true"; - dialogue1[] = {"Woohoo, here we go.. Get it in the air.","Get it in the air, no time to waste","You are a natural kid. Let's fly."}; - diagSquelch = 60; - failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV)"; - abandonDist = -1; - abandonTime = 1200; - failed[] = {"Lost it already.. Mission Over","Not a natural pilot. Try again later.","Mission Failed !"}; - cleanUp = 0; - completeCondition = "(getPosATL axeUAV select 2) > 10"; - completedCALL = "if(SunOrMoon < 1)then{player action [""lightOn"", axeUAV];};"; - nextTask[] = {"takeOffUAV"}; + author = "axeman"; + title = "UAV Spawn"; + simpleTask = 0; + items[] = {}; + triggerDelay = 2; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = "player action [""SwitchToUAVDriver"", axeUAV];addToRemainsCollector[axeUAV];"; + cleanUpCall = "[(driver axeUAV)] joinSilent grpNull; removeFromRemainsCollector [axeUAV]; deletevehicle axeUAV"; + dialogues[] = { + { + "true", + {"Woohoo, here we go.. Get it in the air.","Get it in the air, no time to waste","You are a natural kid. Let's fly."} + } + }; + callevents[] = {}; + abandonTime = 1200; + failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV) || !(alive player) || cameraon != axeUAV"; + faileddialogues[] = {"Lost it already.. Mission Over","Not a natural pilot. Try again later.","Mission Failed !"}; + completeCondition = "(getPosATL axeUAV select 2) > 10"; + completedialogues[] = {}; + completedCALL = "if(SunOrMoon < 1)then{player action [""lightOn"", axeUAV];};"; + reward[] = {}; + cleanUp = 0; + nextTask[] = {"takeOffUAV"}; }; class takeOffUAV{ - author = "axeman"; - title = "Pilot the UAV"; - simpleTask = 0; - taskLimit = 3; - taskCheckTime = 8; - triggerDelay = 6; - itemSpawn = 0; - markerType = 0; - markerRadius = 0; - initcall = "axeUAVRndMission = floor random 2;"; - callEventBinTask = 1; - callEventCondition1 = "(diag_tickTime - EPOCH_task_startTime > 30) && axeUAVRndMission == 0"; - callEventCondition2 = "(diag_tickTime - EPOCH_task_startTime > 30) && axeUAVRndMission == 1"; - callEventTask1 = "uavMission1"; - callEventTask2 = "uavMission2"; - diag1Condition = "alive axeUAV"; - dialogue1[] = {"Great start.. Lets take this thing for a ride.","We're off, get some practice, I am finding you a target.","Get clear of this area, I am calculating your target."}; - diagSquelch = 60; - diag2Condition = "alive axeUAV"; - dialogue2[] = {"Keep it up, you are doing a great job.","Try and find some targets on your way.","Don't get shot down now !"}; - failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV)"; - abandonDist = -1; - abandonTime = 1280; - failed[] = {"Oh dear, that didn't go well..","Try again later.","Misison Failed !"}; - cleanUp = 0; - completeCondition = "false"; - completedCALL = "player connectTerminalToUAV objNull;"; - nextTask[] = {}; + author = "axeman"; + title = "Pilot the UAV"; + simpleTask = 0; + items[] = {}; + triggerDelay = 8; + triggerintervall = 8; + markerType = 0; + markerVisible = 0; + markerRadius = 0; + markerText = ""; + initcall = ""; + cleanUpCall = "[(driver axeUAV)] joinSilent grpNull; removeFromRemainsCollector [axeUAV]; deletevehicle axeUAV"; + dialogues[] = { + { + "alive axeUAV", + {"Great start.. Lets take this thing for a ride.","We're off, get some practice, I am finding you a target.","Get clear of this area, I am calculating your target."} + }, + { + "alive axeUAV", + {"Keep it up, you are doing a great job.","Try and find some targets on your way.","Don't get shot down now !"} + } + }; + callevents[] = { + { + "diag_tickTime - EPOCH_task_startTime > 30", + "", + {"uavMission1","uavMission2"} + } + }; + abandonTime = 240; + failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV) || !(alive player) || cameraon != axeUAV"; + faileddialogues[] = {"Oh dear, that didn't go well..","Try again later.","Misison Failed !"}; + completeCondition = "false"; + completedialogues[] = {}; + completedCALL = ""; + reward[] = {}; + cleanUp = 0; + nextTask[] = {}; }; class uavMission1{ - author = "axeman"; - title = "Trader House Recon"; - simpleTask = 0; - taskLimit = 3; - taskCheckTime = 16; - triggerDelay = 8; - items[] = {""}; - itemSpawn = 0; - markerType = 2; - markerRadius = 180; - markerText = "Trader House Recon"; - initcall = "[] spawn {uavMission1Obj = selectRandom (nearestObjects [axeUAV,[""HOUSE""],2500]);EPOCH_taskMarkerPos = getPosATL uavMission1Obj;};"; - callEventBinTask = 0; - diag1Condition = "true"; - dialogue1[] = {"I need some recon on a nearby house","We need intelligence on a potential trader location.","Help us gather intel on a trader house !"}; - diagSquelch = 60; - diag2Condition = "EPOCH_taskMarkerPos distance axeUAV > 450"; - dialogue2[] = {"I have marked your map, it will be nearby.","Check you map, there is a marker near a safehouse","Search your map for the landing zone, near a traders safehouse."}; - diag3Condition = "EPOCH_taskMarkerPos distance axeUAV < 450"; - dialogue3[] = {"Land it nearby and switch off the engine.","You need to land by the house, quietly.","Drop the UAV in the marker, then keep quiet."}; - failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV)"; - abandonDist = -1; - abandonTime = 2200; - failed[] = {"Oh dear, Mission Over !","Mission Failed !"}; - cleanUp = 1; - completeCondition = "!(isengineOn axeUAV) && EPOCH_taskMarkerPos distance axeUAV < 275"; - reward[] = {"ItemGoldBar","ItemGoldBar"}; - completed1[] = {"Great work, here's your reward."}; - completedCALL = "player connectTerminalToUAV objNull;[(driver axeUAV)] joinSilent grpNull;"; + author = "axeman"; + title = "Trader House Recon"; + simpleTask = 0; + items[] = {}; + triggerDelay = 0; + triggerintervall = 8; + markerType = 2; + markerVisible = 0; + markerRadius = 180; + markerText = "Trader House Recon"; + initcall = "_obj = selectRandom (nearestObjects [axeUAV,[""HOUSE""],2500]);EPOCH_taskMarkerPos = getPosATL _obj;"; + cleanUpCall = "[(driver axeUAV)] joinSilent grpNull; removeFromRemainsCollector [axeUAV]; deletevehicle axeUAV"; + dialogues[] = { + { + "true", + {"I need some recon on a nearby house","We need intelligence on a potential trader location.","Help us gather intel on a trader house !"} + }, + { + "EPOCH_taskMarkerPos distance axeUAV > 450", + {"I have marked your map, it will be nearby.","Check you map, there is a marker near a safehouse","Search your map for the landing zone, near a traders safehouse."} + }, + { + "EPOCH_taskMarkerPos distance axeUAV < 450", + {"Land it nearby and switch off the engine.","You need to land by the house, quietly.","Drop the UAV in the marker, then keep quiet."} + } + }; + callevents[] = {}; + abandonTime = 900; + failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV) || !(alive player) || cameraon != axeUAV"; + faileddialogues[] = {"Oh dear, Mission Over !","Mission Failed !"}; + completeCondition = "!(isengineOn axeUAV) && EPOCH_taskMarkerPos distance axeUAV < 275"; + completedialogues[] = {"Great work, here's your reward."}; + completedCALL = "[(driver axeUAV)] joinSilent grpNull; removeFromRemainsCollector [axeUAV]; deletevehicle axeUAV"; + reward[] = {"ItemGoldBar","ItemGoldBar"}; + cleanUp = 1; + nextTask[] = {}; }; class uavMission2{ - author = "axeman"; - title = "Deliver UAV To Trader"; - simpleTask = 0; - taskLimit = 3; - taskCheckTime = 16; - triggerDelay = 8; - itemSpawn = 0; - markerType = 2; - markerRadius = 220; - markerText = "UAV Trader"; - initcall = "[] spawn {EPOCH_taskUAVTrader = selectRandom (player nearentities [[""C_Man_1""],10500] select {_x getVariable [""AI_SLOT"",-1] > -1 && player distance _x > 50});EPOCH_taskMarkerPos = getPosATL EPOCH_taskUAVTrader;};"; - callEventBinTask = 0; - diag1Condition = "true"; - dialogue1[] = {"I need this UAV delivering to my buddy","Recon a rogue trader, land this near his location.","Land this UAV near the target trader."}; - diagSquelch = 60; - diag2Condition = "EPOCH_taskMarkerPos distance axeUAV > 450"; - dialogue2[] = {"Check your map for his location, you will need to land nearby.","I have marked your map with his location.","Fly to the location marked on your map, then land."}; - diag3Condition = "EPOCH_taskMarkerPos distance axeUAV < 450"; - dialogue3[] = {"Get this thing down and the engine off.","Land in the zone and switch your engine off quickly.","Find a landing spot in the area and keep quiet."}; - failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV)"; - abandonDist = -1; - abandonTime = 2600; - failed[] = {"Oh dear, Mission Over !","Mission Failed !"}; - cleanUp = 1; - cleanUpCalls[] = {"player connectTerminalToUAV objNull"}; - completeCondition = "!(isengineOn axeUAV) && EPOCH_taskMarkerPos distance axeUAV < 275"; - reward[] = {"ItemGoldBar","ItemGoldBar"}; - completed1[] = {"Great work, here's your reward."}; - completedCALL = "player connectTerminalToUAV objNull;[(driver axeUAV)] joinSilent grpNull;"; + author = "axeman"; + title = "Deliver UAV To Trader"; + simpleTask = 0; + items[] = {}; + triggerDelay = 0; + triggerintervall = 8; + markerType = 2; + markerVisible = 0; + markerRadius = 220; + markerText = "UAV Trader"; + initcall = "_obj = selectRandom (player nearentities [[""C_Man_1""],10500] select {_x getVariable [""AI_SLOT"",-1] > -1 && player distance _x > 50});EPOCH_taskMarkerPos = getPosATL _obj;"; + cleanUpCall = "[(driver axeUAV)] joinSilent grpNull; removeFromRemainsCollector [axeUAV]; deletevehicle axeUAV"; + dialogues[] = { + { + "true", + {"I need this UAV delivering to my buddy","Recon a rogue trader, land this near his location.","Land this UAV near the target trader."} + }, + { + "EPOCH_taskMarkerPos distance axeUAV > 450", + {"Check your map for his location, you will need to land nearby.","I have marked your map with his location.","Fly to the location marked on your map, then land."} + }, + { + "EPOCH_taskMarkerPos distance axeUAV < 450", + {"Get this thing down and the engine off.","Land in the zone and switch your engine off quickly.","Find a landing spot in the area and keep quiet."} + } + }; + callevents[] = {}; + abandonTime = 900; + failedCondition = "!('B_UavTerminal' in assignedItems player) || !(alive axeUAV) || !(alive player) || cameraon != axeUAV"; + faileddialogues[] = {"Oh dear, Mission Over !","Mission Failed !"}; + completeCondition = "!(isengineOn axeUAV) && EPOCH_taskMarkerPos distance axeUAV < 275"; + completedialogues[] = {"Great work, here's your reward."}; + completedCALL = "[(driver axeUAV)] joinSilent grpNull; removeFromRemainsCollector [axeUAV]; deletevehicle axeUAV"; + reward[] = {"ItemGoldBar","ItemGoldBar"}; + cleanUp = 1; + nextTask[] = {}; }; diff --git a/Sources/epoch_config/Configs/CfgMissionsTasks.hpp b/Sources/epoch_config/Configs/CfgMissionsTasks.hpp index f8fa803c..97080357 100644 --- a/Sources/epoch_config/Configs/CfgMissionsTasks.hpp +++ b/Sources/epoch_config/Configs/CfgMissionsTasks.hpp @@ -17,4 +17,6 @@ class inGameTasks { #include "CfgMissions\CfgmissionDelivery.hpp" #include "CfgMissions\CfgmissionUav.hpp" #include "CfgMissions\CfgmissionMilitary.hpp" +#include "CfgMissions\CfgmissionMonster.hpp" +#include "CfgMissions\CfgmissionFish.hpp" }; \ No newline at end of file diff --git a/Sources/epoch_server_settings/configs/CfgMainTable.h b/Sources/epoch_server_settings/configs/CfgMainTable.h index f575acda..3d355811 100644 --- a/Sources/epoch_server_settings/configs/CfgMainTable.h +++ b/Sources/epoch_server_settings/configs/CfgMainTable.h @@ -561,6 +561,62 @@ class CfgMainTable LootMax = 10; tables[] = { "Mission_Payout1" }; }; + class Mission_Monster_Payout + { + lootMin = 12; + LootMax = 20; + tables[] = { + { "Tools", 8 }, + { "BaseBuilding", 6 }, + { "Food", 11 }, + { "Equipment", 5 }, + { "SniperRifle", 5 }, + { "SniperRifleAmmo", 6 }, + { "Rifle", 6 }, + { "RifleAmmo", 8 }, + { "Machinegun", 6 }, + { "MachinegunAmmo", 8 }, + { "Pistols", 5 }, + { "PistolAmmo", 7 }, + { "Scopes", 8 }, + { "Muzzles", 5 }, + { "Hand", 10 }, + { "Explosives", 5 }, + { "Backpack", 7 }, + { "Uniforms", 7 }, + { "Vests", 7 }, + { "HeadgearArmored", 8 }, + { "GenericAuto", 3 } + }; + }; + class Mission_Fishing_Payout + { + lootMin = 8; + LootMax = 16; + tables[] = { + { "Tools", 8 }, + { "BaseBuilding", 6 }, + { "Food", 11 }, + { "Equipment", 5 }, + { "SniperRifle", 5 }, + { "SniperRifleAmmo", 6 }, + { "Rifle", 6 }, + { "RifleAmmo", 8 }, + { "Machinegun", 6 }, + { "MachinegunAmmo", 8 }, + { "Pistols", 5 }, + { "PistolAmmo", 7 }, + { "Scopes", 8 }, + { "Muzzles", 5 }, + { "Hand", 10 }, + { "Explosives", 5 }, + { "Backpack", 7 }, + { "Uniforms", 7 }, + { "Vests", 7 }, + { "HeadgearArmored", 8 }, + { "GenericAuto", 3 } + }; + }; class Sheep_random_EPOCH { lootMin = 2;