@@ -222,7 +222,7 @@ class FSM
" _sound = _sounds select (floor (random (count _sounds)));" \n
" _animalAgent say3D _sound;" \n
" EPOCH_say3D_PVS = [player, _animalAgent, (EPOCH_sounds find _sound),Epoch_personalToken];" \n
" publicVariableServer ""EPOCH_say3D_PVS"";" \n
" EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
" };" \n
"};" \n
"" \n
@@ -358,7 +358,7 @@ class FSM
" if (_isDog) then {" \n
" _animalAgent say3D ""dog_cry"";" \n
" EPOCH_say3D_PVS = [player, _animalAgent, 3,Epoch_personalToken];" \n
" publicVariableServer ""EPOCH_say3D_PVS"";" \n
" EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
" };" \n
" };" \n
" _courageTest = false;" \n
@@ -369,7 +369,7 @@ class FSM
" if (_isDog) then {" \n
" _animalAgent say3D ""dog_bark"";" \n
" EPOCH_say3D_PVS = [player, _animalAgent, 2,Epoch_personalToken];" \n
" publicVariableServer ""EPOCH_say3D_PVS"";" \n
" EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
" _animalAgent playMoveNow ""Dog_Bark""; " \n
" };" \n
" _animalAgent setDir _dirTo; " \n
@@ -379,7 +379,7 @@ class FSM
" if (random 1 < 0.5) then { " \n
" _animalAgent say3D ""dog_bark"";" \n
" EPOCH_say3D_PVS = [player, _animalAgent, 2,Epoch_personalToken];" \n
" publicVariableServer ""EPOCH_say3D_PVS"";" \n
" EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
" };" \n
" };" \n
"};"/*%FSM</STATEINIT""">*/;
@@ -451,7 +451,7 @@ class FSM
"" \n
"_copter say3D ""drone_alert0"";" \n
"EPOCH_say3D_PVS = [player, _copter, 10,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"" \n
"_troopsOnGround = true;" \n
"(driver _copter) action [""lightOn"", _copter];" \n
@@ -688,7 +688,7 @@ class FSM
"if((random 100) < (_countNrPlyrs * 10))then{" \n
"[_dog, _plyr] say3D ""dog_cry"";" \n
"EPOCH_say3D_PVS = [player, _dog, 17,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
""/*%FSM</STATEINIT""">*/;
@@ -730,7 +730,7 @@ class FSM
"if (floor(random 100)< 8) then {" \n
"[_dog, _plyr] say3D ""dog_cry"";" \n
"EPOCH_say3D_PVS = [player, _dog, 17,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"_hunger = _hunger + 2;" \n
"};" \n
"" \n
@@ -790,7 +790,7 @@ class FSM
"if (floor(random 100)<_dogNoise) then {" \n
"[_dog, _plyr] say3D ""dog_cry"";" \n
"EPOCH_say3D_PVS = [player, _dog, 17,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"" \n
@@ -850,7 +850,7 @@ class FSM
"if (floor(random 100) < 6) then {" \n
"[_dog, _plyr] say3D ""dog_bark"";" \n
"EPOCH_say3D_PVS = [player, _dog, 2,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"if (floor(random 100)<_forgive) then {" \n
@@ -976,7 +976,7 @@ class FSM
"if (floor(random 100)<_dogNoise) then {" \n
"[_dog, _plyr] say3D ""dog_cry"";" \n
"EPOCH_say3D_PVS = [player, _dog, 17,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"_criteria = ""(moveToCompleted _dog) || (_dog distance _moveTo < 1.5)"";" \n
@@ -1052,7 +1052,7 @@ class FSM
"if (floor(random 75)<_dogNoise) then {" \n
"[_dog, _plyr] say3D ""dog_cry_quiet"";" \n
"EPOCH_say3D_PVS = [player, _dog, 17,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"_dirTo = [_dog, getPos (_nrPlyrs select 1)] call BIS_fnc_dirTo;" \n
@@ -1092,7 +1092,7 @@ class FSM
"if (_rnd < 42) then {" \n
"[_dog, _plyr] say3D ""dog_bark"";" \n
"EPOCH_say3D_PVS = [player, _dog, 18,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"if (_rnd < 6) then {" \n
@@ -1226,20 +1226,20 @@ class FSM
"if (_rnd< 12) then {" \n
"[_dog, _plyr] say3D ""dog_bark"";" \n
"EPOCH_say3D_PVS = [player, _dog, 2,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"if (_rnd < 6) then {" \n
"_hunger = _hunger + 1;" \n
"[_dog, _plyr] say3D ""dog_cry"";" \n
"EPOCH_say3D_PVS = [player, _dog, 3,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"if ((_hunger > 56) && (_rnd < 48)) then {" \n
"[_dog, _plyr] say3D ""dog_cry"";" \n
"EPOCH_say3D_PVS = [player, _dog, 2,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"" \n
@@ -1319,8 +1319,8 @@ class FSM
init = /*%FSM<STATEINIT""">*/"{" \n
" if !(alive _x) then {" \n
" if ((_x isKindOf ""Animal_Base_F"" && !(_x isKindOf ""Dog_Base_F"")) || (typeOf _x) in[""Epoch_Sapper_F"", ""Epoch_SapperB_F"", ""Epoch_Cloak_F"", ""I_UAV_01_F""]) then {" \n
" EPOCH_lootAnimal = [_x, player, Epoch_personalToken];" \n
" publicVariableServer ""EPOCH_lootAnimal"";" \n
" [_x, player, Epoch_personalToken] remoteExec [""EPOCH_server_lootAnimal"",2];" \n
"" \n
" };" \n
" };" \n
"" \n
@@ -387,8 +387,8 @@ class FSM
{
name = "do_drop";
init = /*%FSM<STATEINIT""">*/"" \n
"EPOCH_airDropCrate_PVS = [_axeCopter,_plyr,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_airDropCrate_PVS"";" \n
"" \n
"[_axeCopter,_plyr,Epoch_personalToken] remoteExec [""EPOCH_server_airDropCrate"",2];" \n
"" \n
"_dropDone = true;" \n
"" \n
@@ -467,8 +467,8 @@ class FSM
"" \n
"_dropPos = _plyrPos;" \n
"" \n
"EPOCH_createAirDrop_PVS = [player,Epoch_personalToken,_startPos];" \n
"publicVariableServer ""EPOCH_createAirDrop_PVS"";" \n
"" \n
"[player,Epoch_personalToken,_startPos] remoteExec [""EPOCH_Server_createAirDrop"",2];" \n
"" \n
"" \n
"_axeCopter = objNull;" \n
@@ -717,4 +717,4 @@ class FSM
"end"
};
};
/*%FSM</COMPILE>*/
/*%FSM</COMPILE>*/
@@ -320,7 +320,7 @@ class FSM
"" \n
"_sapper say3D _sound;" \n
"EPOCH_say3D_PVS = [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"_doInterrupt = {" \n
@@ -739,7 +739,7 @@ class FSM
"_sound = ""sapper_explode"";" \n
"_sapper say3D _sound;" \n
"EPOCH_say3D_PVS = [player,_sapper,(EPOCH_sounds find _sound),Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"_sapper playMoveNow ""Unconscious"";" \n
"" \n
""/*%FSM</STATEINIT""">*/;
@@ -1206,8 +1206,8 @@ class FSM
"_bomb = createVehicle [""Sapper_Charge_Ammo"", (getposATL _nestMate), [], 0, ""CAN_COLLIDE""] ; " \n
"_bomb attachTo [_nestMate, [0,0,0],""Pelvis""];" \n
"_nestMate setVariable [""bomb"",_bomb];" \n
"EPOCH_TEMPOBJ_PVS = _nestMate;" \n
"publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n
"" \n
"[_nestMate] remoteExec [""EPOCH_localCleanup"",2];" \n
"_nestMate disableAI ""TARGET"";" \n
"_nestMate disableAI ""AUTOTARGET"";" \n
"_nestMate disableAI ""FSM"";" \n
@@ -1246,24 +1246,24 @@ class FSM
"" \n
"[_nrBuild, _sapper] spawn {" \n
"sleep 6;" \n
"EPOCH_SapperObjs_PVS = [_this select 0, player, Epoch_personalToken,_this select 1];" \n
"publicVariableServer ""EPOCH_SapperObjs_PVS"";" \n
"" \n
"[_this select 0, player, Epoch_personalToken,_this select 1] remoteExec [""EPOCH_server_handle_sapperObjs"",2];" \n
"};" \n
"" \n
"{" \n
"" \n
"_sound = ""sapper_explode"";" \n
"_x say3D _sound;" \n
"EPOCH_say3D_PVS = [player,_x,(EPOCH_sounds find _sound),Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"_x playMoveNow ""Unconscious"";" \n
"" \n
"_x spawn {" \n
"sleep floor (random 3);" \n
"_sBomb = _this getVariable [""bomb"",objNull];" \n
"" \n
"EPOCH_SapperObjs_PVS = [_sBomb, player, Epoch_personalToken,_this,_this];" \n
"publicVariableServer ""EPOCH_SapperObjs_PVS"";" \n
"" \n
"[_sBomb, player, Epoch_personalToken,_this,_this] remoteExec [""EPOCH_server_handle_sapperObjs"",2];" \n
"" \n
"_finalPos = getPosATL _this;" \n
"_finalDir = getDir _this;" \n
@@ -1369,8 +1369,8 @@ class FSM
class do_boom
{
name = "do_boom";
init = /*%FSM<STATEINIT""">*/"EPOCH_SapperObjs_PVS = [_sBomb, player, Epoch_personalToken,_sapper,_sapper];" \n
"publicVariableServer ""EPOCH_SapperObjs_PVS"";" \n
init = /*%FSM<STATEINIT""">*/"" \n
"[_sBomb, player, Epoch_personalToken,_sapper,_sapper] remoteExec [""EPOCH_server_handle_sapperObjs"",2];" \n
"" \n
"_sBomb = objNull;" \n
"_finalPos = getPosATL _sapper;" \n
@@ -1636,7 +1636,7 @@ class FSM
" _sound = ""sapper_groan2"";" \n
" _sapper say3D _sound;" \n
" EPOCH_say3D_PVS = [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken];" \n
" publicVariableServer ""EPOCH_say3D_PVS"";" \n
" EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
""/*%FSM</ACTION""">*/;
};
@@ -1,4 +1,4 @@
/*%FSM<COMPILE "C:\Program Files (x86)\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, sapperAlt">*/
/*%FSM<COMPILE "F:\Program Files (x86)\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, sapperAlt">*/
/*%FSM<HEAD>*/
/*
item0[] = {"sapper",0,250,-225.000000,-325.000000,-125.000000,-275.000000,0.000000,"sapper"};
@@ -35,12 +35,12 @@ item30[] = {"stalking",4,218,-50.000000,50.000000,50.000000,100.000000,5.000000,
item31[] = {"Wait_random",4,218,-225.000000,-200.000000,-125.000000,-150.000000,10.000000,"Wait random"};
item32[] = {"groan",4,218,200.000000,375.000000,300.000000,425.000000,5.000000,"groan"};
item33[] = {"detonate",4,218,125.000000,-350.000000,225.000000,-300.000000,70.000000,"detonate"};
item34[] = {"end",1,250,975.000000,0.000000,1075.000000,50.000000,0.000000,"end"};
item35[] = {"Wait_to_delete",4,218,975.000000,150.000000,1075.000000,200.000000,10.000000,"Wait to delete"};
item34[] = {"end",1,250,1050.000000,-25.000000,1150.000000,25.000000,0.000000,"end"};
item35[] = {"Wait_to_delete",4,218,1050.000000,125.000000,1150.000000,175.000000,10.000000,"Wait to delete"};
item36[] = {"handle_dispose",2,250,525.000000,125.000000,625.000000,175.000000,0.000000,"handle dispose"};
item37[] = {"Wait_1_5_sec",4,218,650.000000,300.000000,750.000000,350.000000,0.000000,"Wait" \n "1.5 sec"};
item38[] = {"do_boom",2,4346,650.000000,225.000000,750.000000,275.000000,0.000000,"do boom"};
item39[] = {"_",8,218,800.000000,300.000000,850.000000,325.000000,0.000000,""};
item37[] = {"Wait_1_5_sec",4,218,525.000000,350.000000,625.000000,400.000000,0.000000,"Wait" \n "1.5 sec"};
item38[] = {"do_boom",2,250,650.000000,225.000000,750.000000,275.000000,0.000000,"do boom"};
item39[] = {"_",8,218,800.000000,225.000000,875.000000,275.000000,0.000000,""};
item40[] = {"do_groan",2,250,225.000000,500.000000,325.000000,550.000000,0.000000,"do groan"};
item41[] = {"do_stalk",2,250,-200.000000,50.000000,-100.000000,100.000000,0.000000,"do stalk"};
item42[] = {"do_loiter_big",2,250,350.000000,500.000000,450.000000,550.000000,0.000000,"do loiter big"};
@@ -63,7 +63,9 @@ item58[] = {"feeling",4,218,775.000000,-50.000000,875.000000,0.000000,50.000000,
item59[] = {"charging",4,218,-50.000000,225.000000,50.000000,275.000000,5.000000,"charging"};
item60[] = {"stalk",4,218,375.000000,-275.000000,475.000000,-225.000000,20.000000,"stalk"};
item61[] = {"not_shot",4,218,900.000000,125.000000,1000.000000,175.000000,10.000000,"not shot"};
item62[] = {"finished_boom",2,250,900.000000,225.000000,1000.000000,275.000000,0.000000,"finished boom"};
item62[] = {"finished_boom",2,250,900.000000,300.000000,1000.000000,350.000000,0.000000,"finished boom"};
item63[] = {"Wait_for_Explosi",4,218,650.000000,350.000000,750.000000,400.000000,0.000000,"Wait for Explosion"};
item64[] = {"Remove_corpse",2,4346,775.000000,300.000000,875.000000,350.000000,0.000000,"Remove corpse"};
link0[] = {0,31};
link1[] = {1,2};
link2[] = {2,3};
@@ -126,7 +128,7 @@ link58[] = {35,34};
link59[] = {36,57};
link60[] = {36,61};
link61[] = {37,38};
link62[] = {38,39};
link62[] = {38,63};
link63[] = {39,62};
link64[] = {40,6};
link65[] = {41,30};
@@ -154,8 +156,10 @@ link86[] = {59,4};
link87[] = {60,2};
link88[] = {61,62};
link89[] = {62,35};
globals[] = {25.000000,1,0,0,16777215,640,480,1,248,6316128,1,-343.543304,1069.998291,679.913574,-353.385406,1000,731,1};
window[] = {2,-1,-1,-1,-1,542,56,1081,17,3,1018};
link90[] = {63,64};
link91[] = {64,39};
globals[] = {25.000000,1,0,0,16777215,640,480,1,253,6316128,1,-209.204178,1204.337524,679.913574,-353.385406,1000,880,1};
window[] = {2,-1,-1,-1,-1,655,130,1155,130,3,1018};
*//*%FSM</HEAD>*/
class FSM
{
@@ -267,7 +271,7 @@ class FSM
"" \n
"_sapper say3D _sound;" \n
"EPOCH_say3D_PVS = [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"_doInterrupt = {" \n
@@ -633,7 +637,7 @@ class FSM
"_sound = ""sapper_explode"";" \n
"_sapper say3D _sound;" \n
"EPOCH_say3D_PVS = [player,_sapper,(EPOCH_sounds find _sound),Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"_sapper playMoveNow ""Unconscious"";" \n
"" \n
""/*%FSM</STATEINIT""">*/;
@@ -1040,25 +1044,19 @@ class FSM
class do_boom
{
name = "do_boom";
init = /*%FSM<STATEINIT""">*/"EPOCH_SapperObjs_PVS = [_sBomb, player, Epoch_personalToken,_sapper,_sapper];" \n
"publicVariableServer ""EPOCH_SapperObjs_PVS"";" \n
"" \n
"_sBomb = objNull;" \n
"" \n
"deleteVehicle _sapper;" \n
"" \n
init = /*%FSM<STATEINIT""">*/"[_sBomb, player, Epoch_personalToken,_sapper,_sapper] remoteExec [""EPOCH_server_handle_sapperObjs"",2];" \n
"_doneBoom = true;" \n
""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "_">*/
class _
/*%FSM<LINK "Wait_for_Explosi">*/
class Wait_for_Explosi
{
priority = 0.000000;
to="finished_boom";
to="Remove_corpse";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"isNull(_sBomb)"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
@@ -1269,7 +1267,7 @@ class FSM
" _sound = ""sapper_groan2"";" \n
" _sapper say3D _sound;" \n
" EPOCH_say3D_PVS = [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken];" \n
" publicVariableServer ""EPOCH_say3D_PVS"";" \n
" EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
""/*%FSM</ACTION""">*/;
};
@@ -1409,11 +1407,32 @@ class FSM
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "Remove_corpse">*/
class Remove_corpse
{
name = "Remove_corpse";
init = /*%FSM<STATEINIT""">*/"deleteVehicle _sapper;"/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "_">*/
class _
{
priority = 0.000000;
to="finished_boom";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
};
initState="sapper";
finalStates[] =
{
"end"
"end",
};
};
/*%FSM</COMPILE>*/
/*%FSM</COMPILE>*/
@@ -974,8 +974,8 @@ class FSM
"" \n
"_plyr spawn {" \n
"uiSleep 12;" \n
"EPOCH_FillContainer_PVS = [_this,Epoch_personalToken,objNull,false,15];" \n
"publicVariableServer ""EPOCH_FillContainer_PVS"";" \n
"" \n
"[_this,Epoch_personalToken,objNull,false,15] remoteExec [""EPOCH_server_fillContainer"",2];" \n
"//hint ""Paying Out"";" \n
"};" \n
"" \n
@@ -1021,8 +1021,8 @@ class FSM
init = /*%FSM<STATEINIT""">*/"titleText [_wDiag,""PLAIN"", 6];" \n
"" \n
"" \n
"EPOCH_FillContainer_PVS = [_plyr,Epoch_personalToken,objNull,false,25];" \n
"publicVariableServer ""EPOCH_FillContainer_PVS"";" \n
"" \n
"[_plyr,Epoch_personalToken,objNull,false,25] remoteExec [""EPOCH_server_fillContainer"",2];" \n
"" \n
"if (_act != """") then {" \n
"call compile _act;" \n
@@ -1319,8 +1319,8 @@ class FSM
"" \n
"_copterPos = (getPosATL _plyr) findEmptyPosition [1,500,""I_Heli_light_03_unarmed_EPOCH""];" \n
"" \n
"EPOCH_createObject_PVS = [player,Epoch_personalToken,_uavclass,true,_copterPos,""CAN_COLLIDE"","""","""","""","""",true];" \n
"publicVariableServer ""EPOCH_createObject_PVS"";" \n
"" \n
"[player,Epoch_personalToken,_uavclass,true,_copterPos,""CAN_COLLIDE"","""","""","""","""",true] remoteExec [""EPOCH_Server_createObject"",2];" \n
"" \n
"" \n
"" \n
@@ -502,8 +502,8 @@ class FSM
"_boats = [];" \n
"_findTimer = diag_TickTime;" \n
"" \n
"EPOCH_createObject_PVS = [player,Epoch_personalToken,""I_Boat_Armed_01_minigun_F"",true,axeGeneralBoatPos,""CAN_COLLIDE"","""","""","""","""",true];" \n
"publicVariableServer ""EPOCH_createObject_PVS"";" \n
"" \n
"[player,Epoch_personalToken,""I_Boat_Armed_01_minigun_F"",true,axeGeneralBoatPos,""CAN_COLLIDE"","""","""","""","""",true] remoteExec [""EPOCH_Server_createObject"",2];" \n
"" \n
"" \n
""/*%FSM</ACTION""">*/;
@@ -877,8 +877,8 @@ class FSM
"_wDiag = """";" \n
"_wDiag2 = """";" \n
"" \n
"EPOCH_FillContainer_PVS = [_plyr,Epoch_personalToken,axeGeneralsBoat,false,25];" \n
"publicVariableServer ""EPOCH_FillContainer_PVS"";" \n
"" \n
"[_plyr,Epoch_personalToken,axeGeneralsBoat,false,25] remoteExec [""EPOCH_server_fillContainer"",2];" \n
"" \n
"_sWait = 1.5;" \n
"_actionDone = true;" \n
@@ -914,8 +914,8 @@ class FSM
"axeVIP = _grp createUnit [""Epoch_Female_CamoRed_F"",_pos,[],0,""FORM""];" \n
"" \n
"if !(isNull axeVIP) then {" \n
" EPOCH_TEMPOBJ_PVS = axeVIP;" \n
" publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n
"" \n
" [axeVIP] remoteExec [""EPOCH_localCleanup"",2];" \n
"};" \n
"" \n
"_grp setCombatMode ""BLUE"";" \n
@@ -1038,8 +1038,8 @@ class FSM
" removeAllWeapons axeGeneral;" \n
"" \n
"if !(isNull axeGeneral) then {" \n
" EPOCH_TEMPOBJ_PVS = axeGeneral;" \n
" publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n
"" \n
" [axeGeneral] remoteExec [""EPOCH_localCleanup"",2];" \n
"};" \n
"" \n
" for ""_i"" from 1 to 3 step 1 do" \n
@@ -1051,8 +1051,8 @@ class FSM
" _unit addEventHandler [""FiredNear"", ""group (_this select 0) setVariable[""""shotsFired"""",[(_this select 1),(_this select 2)]]""];" \n
" _unit addEventHandler [""Killed"", ""group (_this select 0) setVariable[""""killer"""",_this select 1]""];" \n
" if !(isNull _unit) then {" \n
" EPOCH_TEMPOBJ_PVS = _unit;" \n
" publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n
"" \n
" [_unit] remoteExec [""EPOCH_localCleanup"",2];" \n
" };" \n
" [_unit,axeGeneral] execFSM ""\x\addons\a3_epoch_code\System\Mission_VIP_Militia.fsm"";" \n
"" \n
@@ -668,15 +668,15 @@ class FSM
"if(diag_tickTime - _lastAlert > 480 && random 100 < _cAggression)then{" \n
"_unit say3D ""cultist_laugh"";" \n
"EPOCH_say3D_PVS = [player, _unit, 8,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"_lastAlert = diag_tickTime;" \n
"" \n
"" \n
"}else{" \n
"" \n
"_unit say3D ""cultist_talk"";" \n
"EPOCH_say3D_PVS = [player, _unit, 7,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"" \n
"};" \n
"" \n
@@ -40,7 +40,7 @@ class FSM
"" \n
"_unit say3D ""cultist_laugh"";" \n
"EPOCH_say3D_PVS = [player, _unit, 8,Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"" \n
"" \n
"" \n
@@ -1,4 +1,4 @@
/*%FSM<COMPILE "X:\ArmA\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, Gender Selection">*/
/*%FSM<COMPILE "F:\Program Files (x86)\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, Gender Selection">*/
/*%FSM<HEAD>*/
/*
item0[] = {"INIT",0,250,-250.000000,-150.000000,-150.000000,-100.000000,0.000000,"INIT"};
@@ -12,12 +12,12 @@ item7[] = {"Process",2,250,-400.000000,75.000000,-300.000000,125.000000,0.000000
item8[] = {"same_gender",4,218,-250.000000,75.000000,-150.000000,125.000000,10.000000,"same" \n "gender"};
item9[] = {"other_gender",4,218,-400.000000,150.000000,-300.000000,200.000000,0.000000,"other" \n "gender"};
item10[] = {"Send_To_Server",3,250,-125.000000,75.000000,-25.000000,125.000000,0.000000,"Send To Server"};
item11[] = {"TODO__ADD_TIMEOUT",4,4314,-275.000000,250.000000,-175.000000,300.000000,0.000000,"TODO:" \n "ADD TIMEOUT" \n "AND LOBBY KICK"};
item11[] = {"TODO__ADD_TIMEOUT",4,218,-275.000000,250.000000,-175.000000,300.000000,0.000000,"TODO:" \n "ADD TIMEOUT" \n "AND LOBBY KICK"};
item12[] = {"END",1,250,0.000000,450.000000,100.000000,500.000000,0.000000,"END"};
item13[] = {"Send_new_selection",2,250,-400.000000,250.000000,-300.000000,300.000000,0.000000,"Send new" \n "selection to" \n "server"};
item14[] = {"Select_Model",2,250,-400.000000,350.000000,-300.000000,400.000000,0.000000,"Select Model"};
item15[] = {"new_model____pla",4,218,-525.000000,400.000000,-425.000000,450.000000,0.000000,"new model" \n "==" \n "player"};
item16[] = {"Setup_EH",2,250,-400.000000,450.000000,-300.000000,500.000000,0.000000,"Setup EH"};
item16[] = {"Setup_EH",2,4346,-400.000000,450.000000,-300.000000,500.000000,0.000000,"Setup EH"};
item17[] = {"true",8,218,-125.000000,450.000000,-25.000000,500.000000,0.000000,"true"};
item18[] = {"____FAKE____",9,720,0.000000,0.000000,0.000000,0.000000,0.000000,"____FAKE____"};
link0[] = {0,2};
@@ -41,8 +41,8 @@ link17[] = {15,16};
link18[] = {16,17};
link19[] = {17,12};
link20[] = {11,18};
globals[] = {25.000000,1,0,0,0,640,480,1,250,6316128,1,-786.968628,194.189285,571.765747,-266.728790,1066,911,1};
window[] = {2,-1,-1,-1,-1,753,25,1063,25,3,1084};
globals[] = {25.000000,1,0,0,0,640,480,1,250,6316128,1,-825.287720,232.508224,685.682007,60.530540,687,630,1};
window[] = {2,-1,-1,-1,-1,884,156,1194,156,3,705};
*//*%FSM</HEAD>*/
class FSM
{
@@ -156,8 +156,8 @@ class FSM
class Send_To_Server
{
name = "Send_To_Server";
init = /*%FSM<STATEINIT""">*/"EPOCH_respawnPlayer_PVS = [player, Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_respawnPlayer_PVS"";"/*%FSM</STATEINIT""">*/;
init = /*%FSM<STATEINIT""">*/"[player, Epoch_personalToken] remoteExec [""EPOCH_server_respawnPlayer"",2];" \n
""";"/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
@@ -190,8 +190,8 @@ class FSM
class Send_new_selection
{
name = "Send_new_selection";
init = /*%FSM<STATEINIT""">*/"EPOCH_respawnPlayer_PVS = [player, Epoch_personalToken,EPOCH_PlayerIsMale];" \n
"publicVariableServer ""EPOCH_respawnPlayer_PVS"";"/*%FSM</STATEINIT""">*/;
init = /*%FSM<STATEINIT""">*/"[player, Epoch_personalToken,EPOCH_PlayerIsMale] remoteExec [""EPOCH_server_respawnPlayer"",2];" \n
""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
@@ -246,13 +246,9 @@ class FSM
class Setup_EH
{
name = "Setup_EH";
init = /*%FSM<STATEINIT""">*/"player addEventHandler [""Respawn"", {(_this select 0) call EPOCH_clientRespawn}];" \n
"player addEventHandler [""Put"", {(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler}];" \n
"player addEventHandler [""Take"", {(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck}];" \n
"player addEventHandler [""InventoryClosed"", {if !(EPOCH_arr_interactedObjs isEqualTo[]) then {EPOCH_arr_interactedObjs remoteExec[""EPOCH_server_save_vehicles"", 2]; EPOCH_arr_interactedObjs = [];};}];" \n
"player addEventHandler [""InventoryOpened"", {_this spawn EPOCH_initUI; (locked (_this select 1) in [2, 3] || (_this select 1) getVariable[""EPOCH_Locked"", false])}];" \n
"player addEventHandler [""Fired"", {_this call EPOCH_fnc_playerFired}];" \n
"player addEventHandler [""Killed"", {_this call EPOCH_fnc_playerDeath}];"/*%FSM</STATEINIT""">*/;
init = /*%FSM<STATEINIT""">*/"{" \n
" player addEventHandler [_x,([""CfgEpochClient"", _x, """"] call EPOCH_fnc_returnConfigEntryV2)];" \n
"} forEach ([""CfgEpochClient"", ""addEventHandler"", []] call EPOCH_fnc_returnConfigEntryV2);"/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
@@ -284,7 +280,7 @@ class FSM
initState="INIT";
finalStates[] =
{
"END"
"END",
};
};
/*%FSM</COMPILE>*/
/*%FSM</COMPILE>*/

Large diffs are not rendered by default.

@@ -49,8 +49,8 @@ class FSM
"" \n
"" \n
"if !(isNull _unit) then {" \n
" EPOCH_TEMPOBJ_PVS = _unit;" \n
" publicVariableServer ""EPOCH_TEMPOBJ_PVS"";" \n
"" \n
" [_unit] remoteExec [""EPOCH_localCleanup"",2];" \n
"};" \n
"" \n
"_randomGroan = {" \n
@@ -59,7 +59,7 @@ class FSM
"" \n
"_unit say3D _sound;" \n
"EPOCH_say3D_PVS = [player, _unit,(EPOCH_sounds find _sound), Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"};" \n
"" \n
"_sMarker = objNull;" \n
@@ -610,4 +610,4 @@ class FSM
{
"end"
};
};
};
@@ -95,7 +95,7 @@ class FSM
"_sound = ""sapper_explode"";" \n
"_unit say3D _sound;" \n
"EPOCH_say3D_PVS = [player,_unit,(EPOCH_sounds find _sound),Epoch_personalToken];" \n
"publicVariableServer ""EPOCH_say3D_PVS"";" \n
"EPOCH_say3D_PVS remoteExec [""EPOCH_server_handle_say3D"",2];" \n
"_unit playMoveNow ""Unconscious"";" \n
"" \n
"";
@@ -174,8 +174,8 @@ class FSM
{
name = "do_boom";
itemno = ;
init = "EPOCH_SapperObjs_PVS = [_bomb, player, Epoch_personalToken,_unit,_unit];" \n
"publicVariableServer ""EPOCH_SapperObjs_PVS"";" \n
init = "" \n
"[_bomb, player, Epoch_personalToken,_unit,_unit] remoteExec [""EPOCH_server_handle_sapperObjs"",2];" \n
"" \n
"_bomb = objNull;" \n
"_finalPos = getPosATL _unit;" \n
@@ -285,4 +285,4 @@ class FSM
{
"end"
};
};
};
@@ -13,6 +13,5 @@
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_EnterBuilding.sqf
*/
if !(isNull _this) then{
EPOCH_oneWayTP = [player,_this,Epoch_personalToken];
publicVariableServer "EPOCH_oneWayTP";
[player,_this,Epoch_personalToken] remoteExec ["EPOCH_server_teleportPlayer",2];
};
@@ -13,8 +13,7 @@
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_LootIT.sqf
*/
if (!isNull _this) then {
EPOCH_lootContainer = [_this,player,Epoch_personalToken];
publicVariableServer "EPOCH_lootContainer";
[_this,player,Epoch_personalToken] remoteExec ["EPOCH_server_lootContainer",2];

if (typeof _this == "wardrobe_EPOCH") then {
if !(_this getVariable["MIRROR_SETUP", false]) then {
@@ -17,67 +17,6 @@ _woman = getNumber(configFile >> "CfgVehicles" >> (typeOf player) >> "woman");
_class = _this select 2;
_config = configfile >> "cfgweapons" >> _class;

/*
_sleepAndCheck = {
_good = true;
_failcount = 0;
switch _this do {
case 0: {
while {true} do {
if !(local(backpackContainer player)) then {
_good = false;
_failcount = _failcount + 1;
} else {
_good = true;
};
if (_good) exitWith {};
if (_failcount > 5) exitWith { removeBackpack player; };
sleep 0.5;
};
};
case 1: {
while {true} do {
if !(local(vestContainer player)) then {
_good = false;
_failcount = _failcount + 1;
} else {
_good = true;
};
if (_good) exitWith{};
if (_failcount > 5) exitWith{ removeVest player; };
sleep 0.5;
};
};
case 2: {
while {true} do {
if !(local(uniformContainer player)) then {
_good = false;
_failcount = _failcount + 1;
} else {
_good = true;
};
if (_good) exitWith{};
if (_failcount > 5) exitWith{ removeUniform player; };
sleep 0.5;
};
};
};
};
if (isclass _config) then {
_infoType = getnumber(_config >> "itemInfo" >> "type");
switch _infoType do {
case 701: { 1 spawn _sleepAndCheck; };
case 801: { 2 spawn _sleepAndCheck; };
};
} else {
if (getNumber(configFile >> "CfgVehicles" >> _class >> "isbackpack") == 1) then {
0 spawn _sleepAndCheck;
};
};
*/

_mags = (magazines player) + (handgunMagazine player);

// TODO optimize
@@ -115,28 +54,14 @@ if (_woman == 1) then {
_vest = vest player;
if (_class == _vest) then {
if (_femaleVariant != _vest) then {

/* // everyContainer not working in 1.20
_holder = _this select 1;
_containers = (everyContainer _holder) select 0;
_mags = magazinesAmmoFull _container;
_weps = weaponCargo vestContainer _container;
_item = itemCargo vestContainer _container;
*/
// get items in existing vest
_vestItems = vestItems player;
// remove vest
removeVest player;
// replace with female variant
player addVest _femaleVariant;
/*
{
if ((_x select 4) == "Vest") then {
player addMagazine [(_x select 0),(_x select 1)]
}
} forEach _mags;
{
player addItemToVest _x;
} forEach (_weps+_item);
*/

// readd items to players vest
{player addItemToVest _x} forEach _vestItems;
};
};
};
@@ -25,19 +25,26 @@ _object = objNull;
_type = 0;

_config = 'CfgEpochClient' call EPOCH_returnConfig;
_treesLootList = getArray(_config >> worldname >> "Trees");
_bushesLootList = getArray(_config >> worldname >> "Bushes");

{
_strObj = str _x;
_str = str _x;
_sel_object = _x;
_findStart = _strObj find ": ";
_findStart = _str find ": ";
if (_findStart != -1) then{
_p3dName = _strObj select[_findStart + 2, 999];
if (_p3dName in _treesLootList) then{

_start = _findStart + 2;
_end = (_str find ".") - _start;
_p3dName = _str select[_start, _end];
// diag_log format ["DEBUG: _p3dName %1",_p3dName];
if (_p3dName find " " != -1) then {
(_p3dName splitString " ") joinString "_"; // replace spaces with underscores
};
_finalConfig = (_config >> "WorldInteractions" >> (_p3dName + "_p3d"));

if (getNumber(_finalConfig >> "tree") == 1) then{
_object = _sel_object;
};
if (_p3dName in _bushesLootList) then{
if (getNumber(_finalConfig >> "bush") == 1) then{
_type = 1;
_object = _sel_object;
};
@@ -47,7 +54,6 @@ _bushesLootList = getArray(_config >> worldname >> "Bushes");

if (!isNull _object) then {
if (alive _object) then {
EPOCH_knockDownTree = [_object,_type,player,EPOCH_personalToken];
publicVariableServer "EPOCH_knockDownTree";
[_object,_type,player,EPOCH_personalToken] remoteExec ["EPOCH_server_knockDownTree",2];
};
};
@@ -61,8 +61,6 @@ _giveAttributes = {
_return = format["Immunity: %1%2 (%3/%4)<br />", _addPlus, _data, EPOCH_playerImmunity, 100];
};
case 6: {
// EPOCH_playerToxicity = ((EPOCH_playerToxicity + _data) min 100) max 0;
// new random tox
_randomData = round(random _data);
EPOCH_playerToxicity = ((EPOCH_playerToxicity + _randomData) min 100) max 0;
_return = format["Toxicity: %1%2 (%3/%4)<br />", _addPlus, _randomData, EPOCH_playerToxicity, 100];
@@ -72,23 +70,36 @@ _giveAttributes = {
_return = format["Stamina: %1%2 (%3/%4)<br />", _addPlus, _data, EPOCH_playerStamina, EPOCH_playerStaminaMax];
};
case 8: {
// this is handled server side
//EPOCH_playerCrypto = ((EPOCH_playerCrypto + _data) min 25000) max 0;
//_return = format["Krypto: %1%2 (%3)<br />", _addPlus, _data, EPOCH_playerCrypto];
};
case 9: {
EPOCH_playerBloodP = ((EPOCH_playerBloodP + _data) min 190) max 0;
_return = format["Blood Pressure: %1%2 (%3/%4)<br />", _addPlus, _data, EPOCH_playerBloodP, 100];
};
case 10: {
EPOCH_playerKarma = ((EPOCH_playerKarma + _data) min 50000) max -50000;
_return = format["Karma: %1%2 (%3/%4)<br />", _addPlus, _data, EPOCH_playerKarma, 50000];
};
case 11: {
EPOCH_playerAlcohol = ((EPOCH_playerAlcohol + _data) min 100) max 0;
_return = format["Alcohol: %1%2 (%3/%4)<br />", _addPlus, _data, EPOCH_playerAlcohol, 100];
};
case 12: {
EPOCH_playerRadiation = ((EPOCH_playerRadiation + _data) min 100) max 0;
_return = format["Radiation: %1%2 (%3/%4)<br />", _addPlus, _data, EPOCH_playerRadiation, 100];
};


};
};
_return
};

_unifiedInteract = {
if (_item call _removeItem) then {
if (_interactReturnOnUse != "") then {
player addMagazine _interactReturnOnUse;
};
_interactReturnOnUse call EPOCH_fnc_addItemOverflow;
_output = "";
{
_output = _output + ([_forEachIndex, _x] call _giveAttributes);
@@ -100,6 +111,38 @@ _unifiedInteract = {
};

switch _interactOption do {
case 0: {
_magazineSizeMax = getNumber (_config >> "count");
// allow repack for all magazines with greater than 1 bullet
if (_magazineSizeMax > 1) then {

_magazineSize = 0;
_magazinesAmmoFull = magazinesAmmoFull player;
{
if (_item isEqualTo (_x select 0)) then {
if (!(_x select 2)) then {
_magazineSize = _magazineSize + (_x select 1);
};
};
} forEach _magazinesAmmoFull;

// remove all
player removeMagazines _item;

// Add full magazines back to player
for "_i" from 1 to floor (_magazineSize / _magazineSizeMax) do
{
player addMagazine [_item, _magazineSizeMax];
//diag_log format ["DEBUG: added full mag %1", _magazineSizeMax];
};
// Add last non full magazine
if ((_magazineSize % _magazineSizeMax) > 0) then {
player addMagazine [_item, floor (_magazineSize % _magazineSizeMax)];
//diag_log format ["DEBUG: added remainder %1", floor (_magazineSize % _magazineSizeMax)];
};
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Ammo Repacked</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
};
case 1: _unifiedInteract; // Eat 1
case 2: _unifiedInteract; //Drink 2
case 3: { // Build 3
@@ -158,34 +201,49 @@ switch _interactOption do {
if (cursorTarget in _vehicles) then {
_vehicle = cursorTarget;
_currentFuel = fuel _vehicle;
_canCapacity = 10;
_canCapacity = _interactAttributes param [0,10];
_fuelCapacity = getNumber (configfile >> "CfgVehicles" >> (typeOf _vehicle) >> "fuelCapacity");
_currentFuel = _currentFuel * _fuelCapacity;
_newFuel = _currentFuel + _canCapacity;
_newFuel = _newFuel / _fuelCapacity;

if (_item call _removeItem) then {
player addMagazine "jerrycanE_epoch";
EPOCH_fillVehicle_PVS = [_vehicle,_newFuel,player,Epoch_personalToken];
publicVariableServer "EPOCH_fillVehicle_PVS";
_interactReturnOnUse call EPOCH_fnc_addItemOverflow;
// send
[_vehicle,_newFuel,player,Epoch_personalToken] remoteExec ["EPOCH_server_fillVehicle",2];

_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Fuel Added</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
};
};
case 5: {
_vehicles = player nearEntities [["LandVehicle","Ship","Air","Tank"], 6];
_canCapacity = _interactAttributes param [0,10];

if (cursorTarget in _vehicles) then {
_vehicle = cursorTarget;
_canCapacity = 10;
_fuelCapacity = getNumber (configfile >> "CfgVehicles" >> (typeOf _vehicle) >> "fuelCapacity");
_newFuel = (((fuel _vehicle) * _fuelCapacity) - _canCapacity) / _fuelCapacity;

//diag_log format["FIND fill _newFuel %1 capacity: %2 current: %3",_newFuel,_fuelCapacity,_currentFuel];
if (_newFuel > 0) then {
if (_item call _removeItem) then {
player addMagazine "jerrycan_epoch";
EPOCH_fillVehicle_PVS = [_vehicle,_newFuel,player,Epoch_personalToken];
publicVariableServer "EPOCH_fillVehicle_PVS";
_interactReturnOnUse call EPOCH_fnc_addItemOverflow;
[_vehicle,_newFuel,player,Epoch_personalToken] remoteExec ["EPOCH_server_fillVehicle",2];
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Fuel Siphoned</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
} else {
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Not Enough Fuel</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
} else {

// find any other nearby fuel sources
_transportFuel = 0;
{
_transportFuel = _transportFuel + getNumber (configFile >> "CfgVehicles" >> (typeOf _x) >> "transportFuel");
} forEach (player nearObjects["ALL", 6]);

if (_transportFuel > _canCapacity) then {
if (_item call _removeItem) then {
_interactReturnOnUse call EPOCH_fnc_addItemOverflow;
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Fuel Siphoned</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
} else {
@@ -222,15 +280,13 @@ switch _interactOption do {
if (local _vehicle) then {
[_vehicle, [_currentHIT, _newDMG]] call EPOCH_client_repairVehicle;
} else {
EPOCH_repairVehicle_PVS = [_vehicle,[_currentHIT,_newDMG],player,Epoch_personalToken];
publicVariableServer "EPOCH_repairVehicle_PVS";
[_vehicle,[_currentHIT,_newDMG],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
};

//diag_log format["DEBUG HITPOINT REPAIRED: %1 %2 %3", _currentHIT, _newDMG, _item];
} else {
if ((damage _vehicle) > 0) then {
EPOCH_repairVehicle_PVS = [_vehicle,["ALL",0],player,Epoch_personalToken];
publicVariableServer "EPOCH_repairVehicle_PVS";
[_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
};
};
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Vehicle Partially Repaired</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
@@ -242,8 +298,7 @@ switch _interactOption do {
_vehicle = cursorTarget;
if (_vehicle in _vehicles) then {
if (_item call _removeItem) then {
EPOCH_repairVehicle_PVS = [_vehicle,["ALL",0],player,Epoch_personalToken];
publicVariableServer "EPOCH_repairVehicle_PVS";
[_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Vehicle Fully Repaired</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
};
@@ -265,8 +320,7 @@ switch _interactOption do {
_paintCanIndex = getNumber(configfile >> "CfgMagazines" >> _item >> "textureIndex");
_paintCanColor = getText(configfile >> "CfgMagazines" >> _item >> "colorName");

EPOCH_PAINTBUILD = [_vehicle,_paintCanIndex,player,Epoch_personalToken];
publicVariableServer "EPOCH_PAINTBUILD";
[_vehicle,_paintCanIndex,player,Epoch_personalToken] remoteExec ["EPOCH_server_paintBUILD",2];

_msg = format["Wall Painted %1", _paintCanColor];
_dt = [format["<t size='0.8' shadow='0' color='#99ffffff'>%1</t>", _msg], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
@@ -285,22 +339,27 @@ switch _interactOption do {
if (_vehicle in _vehicles) then {
if (damage _vehicle != 0) then {
if (_item call _removeItem) then {
EPOCH_repairVehicle_PVS = [_vehicle,["ALL",0],player,Epoch_personalToken];
publicVariableServer "EPOCH_repairVehicle_PVS";
[_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
_dt = ["<t size = '0.8' shadow = '0' color = '#99ffffff'>Healed other player</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
};
} else {
if (damage player != 0) then {
if (_item call _removeItem) then {
EPOCH_repairVehicle_PVS = [player,["ALL",0],player,Epoch_personalToken];
publicVariableServer "EPOCH_repairVehicle_PVS";
[player,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
_dt = ["<t size = '0.8' shadow = '0' color = '#99ffffff'>Healed yourself</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
};
};
};

case 14: { // Unpack Backpack
if (_item call _removeItem) then {
[_interactReturnOnUse,player,Epoch_personalToken] remoteExec ["EPOCH_server_unpackBackpack",2];
_dt = ["<t size = '0.8' shadow = '0' color = '#99ffffff'>Unpacked backpack</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
};

default {
// bottom
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Found nothing</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
@@ -15,57 +15,48 @@
private["_hours"];
_hours = floor(servertime/60/60);

_customVars = "";
{
if !(_x in ["AliveTime","SpawnArray","HitPoints"]) then {
_customVars = _customVars + format["<t size='1.15' font='puristaLight' align='left'>%1: </t><t size='1.15' font='puristaLight' align='right'>%2</t><br/>", _x,missionNamespace getVariable [format ["EPOCH_player%1",_x],EPOCH_defaultVars select _forEachIndex]];
}
}forEach EPOCH_customVars;

hintSilent parseText format ["
<t size='1.25' font='puristaLight' align='center'>Welcome to Epoch Alpha</t><br/>
<t size='1.18' font='puristaLight' align='center'>Current Version: %22</t><br/>
<t size='1.15' font='puristaLight' align='left'>Temp: </t><t size='1.15' font='puristaLight' align='right'>%1</t><br/>
<t size='1.15' font='puristaLight' align='left'>Blood Pressure: </t><t size='1.15' font='puristaLight' align='right'>%2</t><br/>
<t size='1.15' font='puristaLight' align='left'>Hunger: </t><t size='1.15' font='puristaLight' align='right'>%3</t><br/>
<t size='1.15' font='puristaLight' align='left'>Thirst: </t><t size='1.15' font='puristaLight' align='right'>%4</t><br/>
<t size='1.15' font='puristaLight' align='left'>Energy: </t><t size='1.15' font='puristaLight' align='right'>%5</t><br/>
<t size='1.15' font='puristaLight' align='left'>Wet: </t><t size='1.15' font='puristaLight' align='right'>%6</t><br/>
<t size='1.15' font='puristaLight' align='left'>Soiled: </t><t size='1.15' font='puristaLight' align='right'>%7</t><br/>
<t size='1.15' font='puristaLight' align='left'>Immunity: </t><t size='1.15' font='puristaLight' align='right'>%8</t><br/>
<t size='1.15' font='puristaLight' align='left'>Toxicity: </t><t size='1.15' font='puristaLight' align='right'>%9</t><br/>
<t size='1.15' font='puristaLight' align='left'>Stamina: </t><t size='1.15' font='puristaLight' align='right'>%10</t><br/>
<t size='1.15' font='puristaLight' align='left'>Fatigue: </t><t size='1.15' font='puristaLight' align='right'>%11</t><br/>
<t size='1.15' font='puristaLight' align='left'>Damage: </t><t size='1.15' font='puristaLight' align='right'>%12</t><br/>
<t size='1.15' font='puristaLight' align='left'>Bleeding: </t><t size='1.15' font='puristaLight' align='right'>%13</t><br/>
<t size='1.15' font='puristaLight' align='left'>Bleed Time: </t><t size='1.15' font='puristaLight' align='right'>%14</t><br/>
<t size='1.15' font='puristaLight' align='left'>Oxygen: </t><t size='1.15' font='puristaLight' align='right'>%15</t><br/>
<t size='1.18' font='puristaLight' align='center'>Current Version: %1</t><br/>
" + _customVars + "
<br/>
<t size='1.15' font='puristaLight' align='left'>Fatigue: </t><t size='1.15' font='puristaLight' align='right'>%2</t><br/>
<t size='1.15' font='puristaLight' align='left'>Damage: </t><t size='1.15' font='puristaLight' align='right'>%3</t><br/>
<t size='1.15' font='puristaLight' align='left'>Bleeding: </t><t size='1.15' font='puristaLight' align='right'>%4</t><br/>
<t size='1.15' font='puristaLight' align='left'>Bleed Time: </t><t size='1.15' font='puristaLight' align='right'>%5</t><br/>
<t size='1.15' font='puristaLight' align='left'>Oxygen: </t><t size='1.15' font='puristaLight' align='right'>%6</t><br/>
<br/>
<t size='1.15' font='puristaLight' align='left'>Air Temp: </t><t size='1.15' font='puristaLight' align='right'>%16</t><br/>
<t size='1.15' font='puristaLight' align='left'>Water Temp: </t><t size='1.15' font='puristaLight' align='right'>%17</t><br/>
<t size='1.15' font='puristaLight' align='left'>Rain: </t><t size='1.15' font='puristaLight' align='right'>%18</t><br/>
<t size='1.15' font='puristaLight' align='left'>Overcast: </t><t size='1.15' font='puristaLight' align='right'>%19</t><br/>
<t size='1.15' font='puristaLight' align='left'>Air Temp: </t><t size='1.15' font='puristaLight' align='right'>%7</t><br/>
<t size='1.15' font='puristaLight' align='left'>Water Temp: </t><t size='1.15' font='puristaLight' align='right'>%8</t><br/>
<t size='1.15' font='puristaLight' align='left'>Rain: </t><t size='1.15' font='puristaLight' align='right'>%9</t><br/>
<t size='1.15' font='puristaLight' align='left'>Overcast: </t><t size='1.15' font='puristaLight' align='right'>%10</t><br/>
<br/>
<t size='1.15' font='puristaLight' align='left'>Crypto: </t><t size='1.15' font='puristaLight' align='right'>%20</t><br/>
<t size='1.15' font='puristaLight' align='left'>Hours Alive: </t><t size='1.15' font='puristaLight' align='right'>%21</t><br/>
<t size='1.15' font='puristaLight' align='left'>FPS: </t><t size='1.15' font='puristaLight' align='right'>%23</t><br/>
<t size='1.15' font='puristaLight' align='left'>Server uptime: </t><t size='1.15' font='puristaLight' align='right'>%24h %25m</t><br/>
<t size='1.15' font='puristaLight' align='left'>Server FPS: </t><t size='1.15' font='puristaLight' align='right'>%26</t><br/>",
EPOCH_playerTemp,
EPOCH_playerBloodP,
EPOCH_playerHunger,
EPOCH_playerThirst,
EPOCH_playerEnergy,
EPOCH_playerWet,
EPOCH_playerSoiled,
EPOCH_playerImmunity,
EPOCH_playerToxicity,
EPOCH_playerStamina,
<t size='1.15' font='puristaLight' align='left'>Hours Alive: </t><t size='1.15' font='puristaLight' align='right'>%11</t><br/>
<t size='1.15' font='puristaLight' align='left'>FPS: </t><t size='1.15' font='puristaLight' align='right'>%12</t><br/>
<t size='1.15' font='puristaLight' align='left'>Server uptime: </t><t size='1.15' font='puristaLight' align='right'>%13h %14m</t><br/>
<t size='1.15' font='puristaLight' align='left'>Server FPS: </t><t size='1.15' font='puristaLight' align='right'>%15</t><br/>",
getText(configFile >> "CfgMods" >> "Epoch" >> "version"),
(getFatigue player),
(damage player),
(isBleeding player),
(getBleedingRemaining player),
(getOxygenRemaining player),

EPOCH_CURRENT_WEATHER,
(EPOCH_CURRENT_WEATHER/2),
rain,
overcast,
EPOCH_playerCrypto,

round(EPOCH_playerAliveTime/360)/10,
getText(configFile >> "CfgMods" >> "Epoch" >> "version"),
round diag_fps,
_hours,
round((serverTime/60)-(_hours*60)),
@@ -34,8 +34,8 @@ if (surfaceIsWater _currentPos) then {
// Cast
_bobber = createVehicle ["Bobber_EPOCH",_currentPos, [], 0, "CAN_COLLIDE"];

EPOCH_TEMPOBJ_PVS = [_bobber];
publicVariableServer "EPOCH_TEMPOBJ_PVS";
// send to server
[_bobber] remoteExec ["EPOCH_localCleanup",2];

_bobber setPosASL _currentPos;
_bobber setVariable ["EPOCH_bobberTime", diag_tickTime];
@@ -15,25 +15,14 @@
private["_found", "_return", "_foundLocalAnimal", "_str", "_blood", "_foundTerminal", "_index"];

_return = false;

if (isNil "EPOCH_trashLootList") then{
_config = 'CfgEpochClient' call EPOCH_returnConfig;
EPOCH_trashLootList = [];
{
EPOCH_trashLootList pushBack getArray(_config >> worldname >> _x);
} forEach(getArray(_config >> worldname >> "TrashClasses"));
};
if (isNil "EPOCH_atmList") then{
_config = 'CfgEpochClient' call EPOCH_returnConfig;
EPOCH_atmList = getArray(_config >> worldname >> "ATM");
};
_config = 'CfgEpochClient' call EPOCH_returnConfig;

if (diag_tickTime - EPOCH_lastTrash > 2) then {
EPOCH_lastTrash = diag_tickTime;

_destroyTrashObj = objNull;
_lootAnimalObj = objNull;
EPOCH_bankTerminal = objNull;
_bankTerminal = objNull;
_trashType = 0;

_objects = nearestObjects[player, [], 2];
@@ -47,19 +36,28 @@ if (diag_tickTime - EPOCH_lastTrash > 2) then {
_str = str(_x);
_findStart = _str find ": ";
if (_findStart != -1) then {
_p3dName = _str select[_findStart + 2, 999];

_start = _findStart + 2;
_end = (_str find ".") - _start;
_p3dName = _str select[_start, _end];
if (_p3dName find " " != -1) then {
(_p3dName splitString " ") joinString "_"; // replace spaces with underscores
};
_finalConfig = (_config >> "WorldInteractions" >> (_p3dName + "_p3d"));

{
_found = _p3dName in _x;
_found = (getNumber(_finalConfig >> _x) == 1);
if (_found) exitWith{ _trashType = _forEachIndex };
} forEach EPOCH_trashLootList;
_foundTerminal = _p3dName in EPOCH_atmList;
} forEach getArray(_config >> worldname >> "TrashClasses");
// TrashClasses[] = { "Trash", "TrashSmall", "TrashVehicle", "PumpkinPatch", "TrashFood" };

//_foundTerminal = _p3dName in EPOCH_atmList;
_foundTerminal = (getNumber(_finalConfig >> "bankTerminal") == 1);
};
};
} else {
if (alive _x) then {
if ((typeOf _x) in["Land_PhoneBooth_02_F", "Land_PhoneBooth_01_F", "Land_Atm_01_F", "Land_Atm_02_F", "Land_Laptop_device_F"]) then {
_foundTerminal = true
};
_foundTerminal = (getNumber(_config >> "WorldInteractions" >> (typeOf _x) >> "bankTerminal") == 1);
if (_x isKindOf "Snake_random_EPOCH") then {
_foundLocalAnimal = true;
if (random 1 < 0.1) then {
@@ -74,25 +72,22 @@ if (diag_tickTime - EPOCH_lastTrash > 2) then {
};
if (_found) exitWith{ _destroyTrashObj = _x };
if (_foundLocalAnimal) exitWith{ _lootAnimalObj = _x };
if (_foundTerminal) exitWith{ EPOCH_bankTerminal = _x };
if (_foundTerminal) exitWith{ _bankTerminal = _x };

}forEach _objects;

if (!isNull _lootAnimalObj) then {
EPOCH_lootAnimal = [_lootAnimalObj, player, Epoch_personalToken];
_bloodPos = getPosATL _lootAnimalObj;
_blood = "BloodSplat" createVehicleLocal _bloodPos;
_blood setPosATL _bloodPos;
EPOCH_playerSoiled = (EPOCH_playerSoiled + 1) min 100;
publicVariableServer "EPOCH_lootAnimal";
// send
[_lootAnimalObj, player, Epoch_personalToken] remoteExec ["EPOCH_server_lootAnimal",2];
_return = true;
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Object Looted</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
if (!isNull _destroyTrashObj) then {

EPOCH_destroyTrash = [_destroyTrashObj, _trashType, player, Epoch_personalToken];
// hint str EPOCH_destroyTrash;
publicVariableServer "EPOCH_destroyTrash";
[_destroyTrashObj, _trashType, player, Epoch_personalToken] remoteExec ["EPOCH_server_destroyTrash",2];
EPOCH_playerSoiled = (EPOCH_playerSoiled + 1) min 100;
_return = true;
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Object Looted</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
@@ -110,15 +105,14 @@ if (diag_tickTime - EPOCH_lastTrash > 2) then {
_id = [_animal, true] execFSM "\x\addons\a3_epoch_code\System\Animal_brain.fsm";
_animals pushBack _animal;
};
EPOCH_TEMPOBJ_PVS = _animals;
publicVariableServer "EPOCH_TEMPOBJ_PVS";
_animals remoteExec ["EPOCH_localCleanup",2];
};
};
if (!isNull EPOCH_bankTerminal) then {
if (!isNull _bankTerminal) then {
// make balance request
if (isNil "EPOCH_bankTransferActive") then {
EPOCH_storeCrypto_PVS = [player, [], Epoch_personalToken];
publicVariableServer "EPOCH_storeCrypto_PVS";
[player, [], Epoch_personalToken] remoteExec ["EPOCH_server_storeCrypto",2];

closeDialog 0;
createDialog "InteractBank";

@@ -27,34 +27,40 @@ if ((diag_tickTime - EPOCH_lastMineRocks) >= 2) then {
_object = objNull;

_config = 'CfgEpochClient' call EPOCH_returnConfig;
_lootables = getArray(_config >> worldname >> "Wrecks");
_cinderList = getArray(_config >> worldname >> "Cinder");
_rocksList = getArray(_config >> worldname >> "Rocks");

_found = false;
_foundIndex = -1;
{
_str = str(_x);
_findStart = _str find ": ";
if (_findStart != -1) then{
_p3dName = _str select[_findStart + 2, 999];
_found = _p3dName in _rocksList;
if (_p3dName in _lootables) then{
_found = true;
_foundIndex = 1;
};
if (_p3dName in _cinderList) then{
_found = true;
_foundIndex = 0;
if !(_x isKindOf "All") then {
_str = str(_x);
_findStart = _str find ": ";
if (_findStart != -1) then{

_start = _findStart + 2;
_end = (_str find ".") - _start;
_p3dName = _str select[_start, _end];
if (_p3dName find " " != -1) then {
(_p3dName splitString " ") joinString "_"; // replace spaces with underscores
};
_finalConfig = (_config >> "WorldInteractions" >> (_p3dName + "_p3d"));

_found = (getNumber(_finalConfig >> "rock") == 1);
if (getNumber(_finalConfig >> "wreck") == 1) then{
_found = true;
_foundIndex = 1;
};
if (getNumber(_finalConfig >> "cinder") == 1) then{
_found = true;
_foundIndex = 0;
};
};
};
if (_found)exitWith{_object = _x};
}foreach _objects;

if (!isNull _object) then {
if (alive _object) then {
EPOCH_mineRocks_PVS = [_object, _foundIndex, player, Epoch_personalToken];
publicVariableServer "EPOCH_mineRocks_PVS";
[_object, _foundIndex, player, Epoch_personalToken] remoteExec ["EPOCH_server_mineRocks",2];
};
};
};
@@ -53,7 +53,7 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then {
case 0: {
_stability = 100 - round(damage _currentTarget * 100);
_icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa";
_text = "Press (Inventory)";
_text = "";

if (_stability < 50) then {
_color = [1, 0.5, 0, 0.7];
@@ -4,49 +4,13 @@
Contributors:
Description:
test code to replace string in word (old)
code to replace string in word
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_replaceWord.sqf
*/
private["_nextChar2", "_nextChar1", "_nextChar", "_replaceArray", "_STRING", "_needle", "_replace"];
_replaceArray = [];

_STRING = toArray(_this select 0);
_needle = toArray(_this select 1);
_replace = toArray(_this select 2);

{
if (_x == (_needle select 0)) then {
_nextChar = _forEachIndex + 1;
if ((_STRING select _nextChar) == (_needle select 1)) then {
_nextChar1 = _nextChar + 1;
if ((_STRING select _nextChar1) == (_needle select 2)) then {
_nextChar2 = _nextChar1 + 1;

if ((_STRING select _nextChar2) == (_needle select 3)) then {
_nextChar3 = _nextChar2 + 1;

if ((_STRING select _nextChar3) == (_needle select 4)) then {
_nextChar4 = _nextChar3 + 1;

if ((_STRING select _nextChar4) == (_needle select 5)) then {
_replaceArray pushBack[_forEachIndex, _nextChar, _nextChar1, _nextChar2, _nextChar3, _nextChar4];
};
};
};
};
};
};

}forEach _STRING;
{
for "_i" from 0 to(count _x - 1) do {
_STRING set[_x select _i, _replace select _i];
}
}forEach _replaceArray;

toString(_STRING);
params ["_STRING","_needle","_replace"];
_STRING splitString _needle joinString _replace
@@ -58,5 +58,5 @@ for "_i" from 0 to ((count _arrUnits)-1) do {
};

// cleanup units or (transfer ownership) if player logs out
EPOCH_TEMPOBJ_PVS = _units;
publicVariableServer "EPOCH_TEMPOBJ_PVS";
// send to server
_units remoteExec ["EPOCH_localCleanup",2];
@@ -114,6 +114,6 @@ switch _unitClass do {
};

if !(isNull _unit) then {
EPOCH_TEMPOBJ_PVS = _unit;
publicVariableServer "EPOCH_TEMPOBJ_PVS";
// send to server
[_unit] remoteExec ["EPOCH_localCleanup",2];
};
@@ -134,15 +134,15 @@ if !(isNull _object) then {
};

{
_craftItem = _x;
_craftQty = 1;
if (typeName _x == "ARRAY") then {
_craftItem = _x select 0;
_craftQty = _x select 1;
};
for "_i" from 1 to _craftQty do {
player addMagazine _craftItem;
};
_craftItem = _x;
_craftQty = 1;
if (typeName _x == "ARRAY") then {
_craftItem = _x select 0;
_craftQty = _x select 1;
};
for "_i" from 1 to _craftQty do {
_craftItem call EPOCH_fnc_addItemOverflow;
};
}forEach _recipe;

_dt = [format["<t size='0.8' shadow='0' color='#99ffffff'>%1 part on %2</t>","Removed",_objClass call EPOCH_itemDisplayName], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
@@ -76,9 +76,7 @@ if (!isNull _this) then {
// proceed to send save to server
} else {
if (_saveCheck) then {
EPOCH_SAVEBUILD = [_this, player, Epoch_personalToken];
publicVariableServer "EPOCH_SAVEBUILD";
//diag_log format["DEBUG SAVE: %1", _this];
[_this, player, Epoch_personalToken] remoteExec["EPOCH_server_saveBuilding", 2];
};
};
};
@@ -40,8 +40,7 @@ if (EPOCH_playerCrypto > 0) then {

EPOCH_maintainLockout = true;

EPOCH_MAINTBUILD = [_this, player, _maintainCount, Epoch_personalToken];
publicVariableServer "EPOCH_MAINTBUILD";
[_this, player, _maintainCount, Epoch_personalToken] remoteExec ["EPOCH_server_maintBUILD",2];

[_rnd,_maintainCount] spawn {
params ["_rnd","_maintainCount"];
@@ -82,8 +82,7 @@ if !(_buildingAllowed)exitWith{false};

_removeParts = getArray(('CfgBaseBuilding' call EPOCH_returnConfig) >> _objType >> "removeParts");
if !(_removeParts isEqualTo[]) then{
EPOCH_REMBUILD = [_this, player, Epoch_personalToken];
publicVariableServer "EPOCH_REMBUILD";
[_this, player, Epoch_personalToken] remoteExec ["EPOCH_server_removeBUILD",2];
_return = true;
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Removed</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
@@ -72,8 +72,7 @@ if (isText(_config)) then {
_newObj setposATL (_worldspace select 0);

if (_textureSlot != 0) then {
EPOCH_PAINTBUILD = [_newObj, _textureSlot, player, Epoch_personalToken];
publicVariableServer "EPOCH_PAINTBUILD";
[_newObj, _textureSlot, player, Epoch_personalToken] remoteExec ["EPOCH_server_paintBUILD",2];
};
};
EP_velocityTransformation = [];
@@ -73,8 +73,8 @@ if (_class != "") then {
_pos2 = player modelToWorldVisual[EPOCH_X_OFFSET, EPOCH_Y_OFFSET, EPOCH_Z_OFFSET];

EPOCH_target = createVehicle[_class, _pos2, [], 0, "CAN_COLLIDE"];
EPOCH_TEMPOBJ_PVS = EPOCH_target;
publicVariableServer "EPOCH_TEMPOBJ_PVS";
// send to server
[EPOCH_target] remoteExec ["EPOCH_localCleanup",2];

if (_pos2 select 2 > _maxHeight) then {
_pos2 set[2, _maxHeight];
@@ -124,8 +124,7 @@ if (_object isKindOf "Constructions_static_F") then {

if (_canUpgradePartCount == _removedPartCount) then {
// send to server for upgrade
EPOCH_UPBUILD = [_object,player,Epoch_upgradeIndex,Epoch_personalToken];
publicVariableServer "EPOCH_UPBUILD";
[_object,player,Epoch_upgradeIndex,Epoch_personalToken] remoteExec ["EPOCH_server_upgradeBUILD",2];
Epoch_upgradeIndex = nil;
_return = true;
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Upgraded</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
@@ -46,7 +46,7 @@ if !(isNull _this && alive _this) then {
_bleedAmount = 30;
_bloodpAmount = 3;
_soundEffect = "snake_bite0";
_canSee = true;
_canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]);
_ppEffect = 0;
};
case "Snake2_random_EPOCH": {
@@ -57,7 +57,7 @@ if !(isNull _this && alive _this) then {
_bleedAmount = 30;
_bloodpAmount = 3;
_soundEffect = "snake_bite0";
_canSee = true;
_canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]);
_ppEffect = 0;
};
case "GreatWhite_F": {
@@ -101,7 +101,7 @@ if !(isNull _this && alive _this) then {
_this say3D _soundEffect;
if (_soundEffectGlobal) then {
EPOCH_say3D_PVS = [player, _this, _soundEffectIndex, Epoch_personalToken];
publicVariableServer "EPOCH_say3D_PVS";
EPOCH_say3D_PVS remoteExec ["EPOCH_server_handle_say3D",2];
};
};
if (random 1 < _toxicChance) then {
@@ -50,8 +50,8 @@ if!(isNil "_animalPos") then {

// diag_log format["DEBUG: spawned %1", _randomAIClass];

EPOCH_TEMPOBJ_PVS = _animal;
publicVariableServer "EPOCH_TEMPOBJ_PVS";
// send to server
[_animal] remoteExec ["EPOCH_localCleanup",2];

{
_animal disableAI _x;
@@ -19,23 +19,25 @@
_this: STRING - Item Class
Returns:
NOTHING
BOOL
*/
private ["_wHPos","_wH","_nearByHolder","_item"];
if (_this isEqualTo "") exitWith{false};
_item = _this;
if (player canAdd _item) then {
player addItem _item;
player addItem _item;
} else {
_wH = objNull;
_nearByHolder = nearestObjects [position player,["groundWeaponHolder"],3];
if (_nearByHolder isEqualTo []) then {
_wHPos = player modelToWorld [0,1,0];
if (surfaceIsWater _wHPos) then {
_wHPos = ASLToATL _wHPos;
_wH = objNull;
_nearByHolder = nearestObjects [position player,["groundWeaponHolder"],3];
if (_nearByHolder isEqualTo []) then {
_wHPos = player modelToWorld [0,1,0];
if (surfaceIsWater _wHPos) then {
_wHPos = ASLToATL _wHPos;
};
_wH = createVehicle ["groundWeaponHolder",_wHPos, [], 0, "CAN_COLLIDE"];
} else {
_wH = _nearByHolder select 0;
};
_wH = createVehicle ["groundWeaponHolder",_wHPos, [], 0, "CAN_COLLIDE"];
} else {
_wH = _nearByHolder select 0;
};
_wh addItemCargoGlobal [_item,1];
_wh addItemCargoGlobal [_item,1];
};
true
@@ -32,8 +32,7 @@ if (vehicle _unit != _unit) then {
_unit action["Eject", vehicle _unit];
};

EPOCH_deadPlayer_PVS = [player,_killer,toArray profileName,Epoch_personalToken];
publicVariableServer "EPOCH_deadPlayer_PVS";
[player,_killer,toArray profileName,Epoch_personalToken] remoteExec ["EPOCH_server_deadPlayer",2];

// disable build mode
EPOCH_buildMode = 0;
@@ -55,8 +55,7 @@ switch true do {

if ("Defib_EPOCH" in _attachments) then {
if (!alive _cursorTarget) then {
EPOCH_revivePlayer_PVS = [_cursorTarget,player,Epoch_personalToken];
publicVariableServer "EPOCH_revivePlayer_PVS";
[_cursorTarget,player,Epoch_personalToken] remoteExec ["EPOCH_server_revivePlayer",2];
};
};
} else {
@@ -83,15 +82,13 @@ switch true do {
if (local _cursorTarget) then {
[_cursorTarget,[_currentHIT,_newDMG]] call EPOCH_client_repairVehicle;
} else {
EPOCH_repairVehicle_PVS = [_cursorTarget,[_currentHIT,_newDMG],player,Epoch_personalToken];
publicVariableServer "EPOCH_repairVehicle_PVS";
[_cursorTarget,[_currentHIT,_newDMG],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
};

//diag_log format["DEBUG HITPOINT REPAIRED: %1 %2 %3", _currentHIT, _newDMG, _attachments];
} else {
if ((damage _cursorTarget) > 0) then {
EPOCH_repairVehicle_PVS = [_cursorTarget,["ALL",0],player,Epoch_personalToken];
publicVariableServer "EPOCH_repairVehicle_PVS";
[_cursorTarget,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2];
};
};
};
@@ -38,9 +38,7 @@ if ((diag_tickTime - _EPOCH_lastSave) >= _time) then {
_customVars pushBack (missionNamespace getVariable format["EPOCH_player%1",_x select 0]);
} forEach _customVarsInit;

// TODO: use remoteExec here
missionNamespace setVariable ["EPOCH_pushPlayer_PVS",[player,_customVars,missionNamespace getVariable "Epoch_personalToken"]];
publicVariableServer "EPOCH_pushPlayer_PVS";
[player,_customVars,missionNamespace getVariable "Epoch_personalToken"] remoteExec ["EPOCH_fnc_savePlayer",2];

missionNamespace setVariable["EPOCH_lastSave", diag_tickTime];
};
@@ -248,14 +248,12 @@ if (vehicle player == player) then {
if (isTouchingGround player && speed player > 10) then {
if ((primaryWeapon player != "") && (currentWeapon player == primaryWeapon player)) then {
player switchMove "AovrPercMrunSrasWrflDf";
EPOCH_switchMove_PVS = [player, 1, Epoch_personalToken];
publicVariableServer "EPOCH_switchMove_PVS";
[player, 1, Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2];
_handled = true;
} else {
if (currentWeapon player == "") then {
player switchMove "epoch_unarmed_jump";
EPOCH_switchMove_PVS = [player, 2, Epoch_personalToken];
publicVariableServer "EPOCH_switchMove_PVS";
[player, 2, Epoch_personalToken] remoteExec ["EPOCH_server_handle_switchMove",2];
_handled = true;
};
};
@@ -268,7 +266,8 @@ if (vehicle player == player) then {
};
};

if (_dikCode in(actionKeys "Gear")) then {
if (_dikCode in(actionKeys "Gear") && !EPOCH_gearKeyPressed) then {
EPOCH_gearKeyPressed = true;
if !(isNull EPOCH_Target) then {
if !(EPOCH_Target isKindOf "ThingX") then {
deleteVehicle EPOCH_Target;
@@ -280,14 +279,6 @@ if (vehicle player == player) then {
if (isTouchingGround player) then {
_handled = call EPOCH_lootTrash;
};
if !(_handled) then {
if (!isNull(findDisplay 602)) then { //Inventory Open?
(findDisplay 602) closeDisplay 3000;
}
else {
_handled = _ctrl call EPOCH_startInteract;
};
};
};

}; // end player only code
@@ -36,5 +36,9 @@ if (_dikCode == EPOCH_keysAction) then {
true call Epoch_dynamicMenuCleanup;
};

if (_dikCode in(actionKeys "Gear")) then {
EPOCH_gearKeyPressed = false;
};


_handled
@@ -43,6 +43,7 @@ EPOCH_InteractedItem = [_text,_data,_pic];

_interactOption = 0;
_buttonTXT = "";
_magCount = 1;
if (isClass (configfile >> "cfgweapons" >> _data)) then {
_type = getNumber (configfile >> "CfgWeapons" >> _data >> "type");
_interactOption = getNumber (configfile >> "CfgWeapons" >> _data >> "interactAction");
@@ -51,6 +52,7 @@ if (isClass (configfile >> "cfgweapons" >> _data)) then {
_type = getNumber (configfile >> "CfgMagazines" >> _data >> "type");
_interactOption = getNumber (configfile >> "CfgMagazines" >> _data >> "interactAction");
_buttonTXT = getText(configfile >> "CfgMagazines" >> _data >> "interactText");
_magCount = getNumber (configfile >> "CfgMagazines" >> _data >> "count");
};

_display = (findDisplay 602);
@@ -60,8 +62,13 @@ if (_buttonTXT != "") then {
_useBtn ctrlSetText _buttonTXT;
_useBtn ctrlEnable true;
} else {
_useBtn ctrlSetText "EXAMINE";
_useBtn ctrlEnable false;
if (_magCount > 1) then {
_useBtn ctrlEnable true;
_useBtn ctrlSetText "REPACK";
} else {
_useBtn ctrlSetText "EXAMINE";
_useBtn ctrlEnable false;
};
};

_useBtn = _display displayCtrl -14;
@@ -9,8 +9,8 @@ _cage2 = createVehicle ["Land_Cages_F", _cagePos, [], 2, "CAN_COLLIDE"] ;
_cage2 setVectorDirAndUp [[0,0,1],[0,1,0]];
_cage attachTo [_cage2,[0,1.3,0]];

EPOCH_TEMPOBJ_PVS = [_cage,_cage2];
publicVariableServer "EPOCH_TEMPOBJ_PVS";
// send to server
[_cage,_cage2] remoteExec ["EPOCH_localCleanup",2];


_startCage = diag_tickTime;
@@ -27,12 +27,11 @@ _sapper setVectorDirAndUp [[0,0,1],[0,1,0]];
_sapper forcespeed 0;

if !(isNull _sapper) then {
EPOCH_TEMPOBJ_PVS = _sapper;
publicVariableServer "EPOCH_TEMPOBJ_PVS";
// send to server
[_sapper] remoteExec ["EPOCH_localCleanup",2];
};

EPOCH_FillContainer_PVS = [player,Epoch_personalToken,objNull,false,25];
publicVariableServer "EPOCH_FillContainer_PVS";
[player,Epoch_personalToken,objNull,false,25] remoteExec ["EPOCH_server_fillContainer",2];


while {player distance _sapper < 100 && alive player} do {
@@ -41,7 +40,7 @@ while {player distance _sapper < 100 && alive player} do {
_sound = _sounds select (floor (random (count _sounds)));
_sapper say3D _sound;
EPOCH_say3D_PVS = [player, _sapper,(EPOCH_sounds find _sound), Epoch_personalToken];
publicVariableServer "EPOCH_say3D_PVS";
EPOCH_say3D_PVS remoteExec ["EPOCH_server_handle_say3D",2];
};
uiSleep 0.5;
};
@@ -58,8 +58,7 @@ if (!isNull EPOCH_p2ptradeTarget) then {
}forEach _array;

if (_removeCount == count _array) then {
EPOCH_MAKETRADE = [player, EPOCH_p2ptradeTarget, _array, _tradeOffer, Epoch_personalToken];
publicVariableServer "EPOCH_MAKETRADE";
[player, EPOCH_p2ptradeTarget, _array, _tradeOffer, Epoch_personalToken] remoteExec ["EPOCH_server_makeTrade",2];
};

(findDisplay -1900) closeDisplay 1;
@@ -9,8 +9,8 @@ if (!isNull _otherPlyr) then {
// restict to only players not in vehicles
if (vehicle player == player && vehicle _otherPlyr == _otherPlyr) then {

EPOCH_MAKETRADEREQ = _this;
publicVariableServer "EPOCH_MAKETRADEREQ";
// send
_this remoteExec ["EPOCH_server_tradeRequest",2];

// target other player
EPOCH_p2ptradeTarget = _otherPlyr;
@@ -31,7 +31,6 @@ if !(alive player && alive _playerObject && !isPlayer _playerObject) then {
// deleteGroup _group;

Epoch_canBeRevived = false;

Epoch_personalToken = _this select 1;

// call EPOCH_clientInit;
@@ -41,13 +40,12 @@ if !(alive player && alive _playerObject && !isPlayer _playerObject) then {
closeDialog 0;
("BIS_fnc_respawnCounter" call BIS_fnc_rscLayer) cutText ["","PLAIN"];

player addEventHandler ["Respawn", {(_this select 0) call EPOCH_clientRespawn}];
player addEventHandler ["Put", {(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler}];
player addEventHandler ["Take", {(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck}];
player addEventHandler ["InventoryClosed", { if !(EPOCH_arr_interactedObjs isEqualTo[]) then{EPOCH_arr_interactedObjs remoteExec["EPOCH_server_save_vehicles", 2]; EPOCH_arr_interactedObjs = []; }; }];
player addEventHandler ["InventoryOpened", {_this spawn EPOCH_initUI; (locked (_this select 1) in [2, 3] || (_this select 1) getVariable["EPOCH_Locked", false]) }];
player addEventHandler ["Fired", {_this call EPOCH_fnc_playerFired}];
player addEventHandler ["Killed", {_this call EPOCH_fnc_playerDeath}];
{
player addEventHandler [_x,(["CfgEpochClient", _x, ""] call EPOCH_fnc_returnConfigEntryV2)];
} forEach (["CfgEpochClient", "addEventHandler", []] call EPOCH_fnc_returnConfigEntryV2);

// reset blood Pressure to warning level
EPOCH_playerBloodP = 120;
} else {
deleteVehicle _playerObject;
};
@@ -44,7 +44,7 @@ call compile ("
case "+str(_this select 16)+": { Epoch_my_GroupUID = _data };
case "+str(_this select 17)+": { _data call EPOCH_Group_invitePlayer };
case "+str(_this select 18)+": { _data call EPOCH_handleServerMessage };
case "+str(_this select 19)+": { {missionNamespace setVariable[format['EPOCH_player%1', _x], EPOCH_defaultVars select(EPOCH_customVars find _x)]} forEach['Temp','Hunger','Thirst','Toxicity','Stamina','HitPoints','BloodP']};
case "+str(_this select 19)+": { {missionNamespace setVariable[format['EPOCH_player%1', _x], EPOCH_defaultVars select(EPOCH_customVars find _x)]} forEach['Temp','Hunger','Thirst','Toxicity','Stamina','HitPoints','BloodP','Alcohol','Radiation']};
case "+str(_this select 20)+": { _data call EPOCH_mission_returnObj };
};
};
@@ -1,142 +1,138 @@

// current target

_currentTarget = objNull;
_cursorTarget = ([10] call EPOCH_fnc_cursorTarget);
if (!isNull _cursorTarget && {!(EPOCH_target isEqualTo _cursorTarget)}) then {
if (_cursorTarget isKindOf "ThingX" || _cursorTarget isKindOf "Constructions_static_F" || _cursorTarget isKindOf "Constructions_foundation_F" || _cursorTarget isKindOf "WeaponHolder" || _cursorTarget isKindOf "AllVehicles" || _cursorTarget isKindOf "PlotPole_EPOCH") then{
if (_cursorTarget isKindOf "Animal_Base_F") then {
if !(alive _cursorTarget) then {
_currentTarget = _cursorTarget;
};
} else {
_currentTarget = _cursorTarget;
};
};
};
EPOCH_currentTarget = _currentTarget;

_increaseStamina = false;
_vehicle = vehicle player;
if (_vehicle == player) then {
_val = log(abs(speed player));
_staminaThreshold = 0.7;
if (EPOCH_playerIsSwimming) then {_staminaThreshold = 0.3};
if (_val>_staminaThreshold) then {
EPOCH_playerStamina = (EPOCH_playerStamina - (_val/4)) max 0;
} else {
_increaseStamina = true;
_currentTarget = objNull;
_cursorTarget = ([10] call EPOCH_fnc_cursorTarget);
if (!isNull _cursorTarget && {!(EPOCH_target isEqualTo _cursorTarget)}) then {
if (_cursorTarget isKindOf "ThingX" || _cursorTarget isKindOf "Constructions_static_F" || _cursorTarget isKindOf "Constructions_foundation_F" || _cursorTarget isKindOf "WeaponHolder" || _cursorTarget isKindOf "AllVehicles" || _cursorTarget isKindOf "PlotPole_EPOCH") then{
if (_cursorTarget isKindOf "Animal_Base_F") then {
if !(alive _cursorTarget) then {
_currentTarget = _cursorTarget;
};
} else {
if (EPOCH_buildMode > 0) then {
EPOCH_buildMode = 0;
EPOCH_snapDirection = 0;
hintsilent "BUILD MODE: DISABLED";
EPOCH_Target = objNull;
// EPOCH_SURVEY = [];
};
_increaseStamina = true;

switch (typeOf _vehicle) do {
case "jetski_epoch": {
_clock_hour10 = floor ((date select 3)/10);
_clock_minute10 = floor ((date select 4)/10);
{
_vehicle setObjectTexture [_forEachIndex,_x];
}forEach[
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",_clock_hour10],
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",(date select 3)-(_clock_hour10*10)],
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",_clock_minute10],
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",(date select 4)-(_clock_minute10*10)],
format["\x\addons\a3_epoch_vehicles\data\fuel%1_ca.paa",floor(fuel _vehicle*10)]
];
};
case "ebike_epoch": {
{
_vehicle setObjectTexture [_forEachIndex,_x];
}forEach[
format["\x\addons\a3_epoch_vehicles\data\speed%1_ca.paa",floor(speed _vehicle/9) max 0],
format["\x\addons\a3_epoch_vehicles\data\energ%1_ca.paa",floor(fuel _vehicle*14)]
];
};
};
_currentTarget = _cursorTarget;
};

_envCold = EPOCH_playerTemp <= 95.0;
_envHot = EPOCH_playerTemp >= 106.7;
_hungry = EPOCH_playerHunger <= 0;
_thirsty = EPOCH_playerThirst <= 0;
_warnbloodPressure = EPOCH_playerBloodP > 120;

_thirst ctrlShow (EPOCH_playerThirst <= 625);
if (ctrlShown _thirst) then {
[_thirst,_thirsty] call _fadeUI;
_thirstScale = linearConversion [0,EPOCH_playerThirst,2500,0.01,1,true];
_thirst ctrlSetTextColor [_thirstScale, _thirstScale, 0.9, 1];
};

_hunger ctrlShow (EPOCH_playerHunger <= 1250);
if (ctrlShown _hunger) then {
[_hunger,_hungry] call _fadeUI;
_hungerScale = linearConversion [0,EPOCH_playerHunger,5000,0.01,1,true];
_hunger ctrlSetTextColor [1, _hungerScale, _hungerScale, 1];
};
};
EPOCH_currentTarget = _currentTarget;

_increaseStamina = false;
_vehicle = vehicle player;
if (_vehicle == player) then {
_val = log(abs(speed player));
_staminaThreshold = 0.7;
if (EPOCH_playerIsSwimming) then {_staminaThreshold = 0.3};
if (_val>_staminaThreshold) then {
EPOCH_playerStamina = (EPOCH_playerStamina - (_val/4)) max 0;
} else {
_increaseStamina = true;
};
} else {
if (EPOCH_buildMode > 0) then {
EPOCH_buildMode = 0;
EPOCH_snapDirection = 0;
hintsilent "BUILD MODE: DISABLED";
EPOCH_Target = objNull;
// EPOCH_SURVEY = [];
};
_increaseStamina = true;

switch (typeOf _vehicle) do {
case "jetski_epoch": {
_clock_hour10 = floor ((date select 3)/10);
_clock_minute10 = floor ((date select 4)/10);
{
_vehicle setObjectTexture [_forEachIndex,_x];
}forEach[
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",_clock_hour10],
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",(date select 3)-(_clock_hour10*10)],
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",_clock_minute10],
format["\x\addons\a3_epoch_vehicles\data\num%1_ca.paa",(date select 4)-(_clock_minute10*10)],
format["\x\addons\a3_epoch_vehicles\data\fuel%1_ca.paa",floor(fuel _vehicle*10)]
];
};

_playerOxygen = getOxygenRemaining player;
_oxygen ctrlShow (_playerOxygen < 1);
if (ctrlShown _oxygen) then {
[_oxygen,(_playerOxygen <= 0.55)] call _fadeUI;
_oxygen ctrlSetTextColor [1, _playerOxygen, _playerOxygen, 1];
};

_hazzard ctrlShow (EPOCH_playerToxicity > 1);
if (ctrlShown _hazzard) then {
[_hazzard,(EPOCH_playerToxicity >= 55)] call _fadeUI;
_toxicScale = 1-linearConversion [0,EPOCH_playerToxicity,100,0.01,1,true];
_hazzard ctrlSetTextColor [_toxicScale, 1, _toxicScale, 1];
case "ebike_epoch": {
{
_vehicle setObjectTexture [_forEachIndex,_x];
}forEach[
format["\x\addons\a3_epoch_vehicles\data\speed%1_ca.paa",floor(speed _vehicle/9) max 0],
format["\x\addons\a3_epoch_vehicles\data\energ%1_ca.paa",floor(fuel _vehicle*14)]
];
};

_broken ctrlShow ((player getHitPointDamage "HitLegs") >= 0.5);
if (ctrlShown _broken) then {
[_broken,true] call _fadeUI;
};

if (_envCold || _envHot || _hungry || _thirsty) then {
if (_envHot || _envCold) then {
player setFatigue 1;
};
};

_envCold = EPOCH_playerTemp <= 95.0;
_envHot = EPOCH_playerTemp >= 106.7;
_hungry = EPOCH_playerHunger <= 0;
_thirsty = EPOCH_playerThirst <= 0;
_warnbloodPressure = EPOCH_playerBloodP > 120;

_thirst ctrlShow (EPOCH_playerThirst <= 625);
if (ctrlShown _thirst) then {
[_thirst,_thirsty] call _fadeUI;
_thirstScale = linearConversion [0,EPOCH_playerThirst,2500,0.01,1,true];
_thirst ctrlSetTextColor [_thirstScale, _thirstScale, 0.9, 1];
};

_hunger ctrlShow (EPOCH_playerHunger <= 1250);
if (ctrlShown _hunger) then {
[_hunger,_hungry] call _fadeUI;
_hungerScale = linearConversion [0,EPOCH_playerHunger,5000,0.01,1,true];
_hunger ctrlSetTextColor [1, _hungerScale, _hungerScale, 1];
};

_playerOxygen = getOxygenRemaining player;
_oxygen ctrlShow (_playerOxygen < 1);
if (ctrlShown _oxygen) then {
[_oxygen,(_playerOxygen <= 0.55)] call _fadeUI;
_oxygen ctrlSetTextColor [1, _playerOxygen, _playerOxygen, 1];
};

_hazzard ctrlShow (EPOCH_playerToxicity > 1);
if (ctrlShown _hazzard) then {
[_hazzard,(EPOCH_playerToxicity >= 55)] call _fadeUI;
_toxicScale = 1-linearConversion [0,EPOCH_playerToxicity,100,0.01,1,true];
_hazzard ctrlSetTextColor [_toxicScale, 1, _toxicScale, 1];
};

_broken ctrlShow ((player getHitPointDamage "HitLegs") >= 0.5);
if (ctrlShown _broken) then {
[_broken,true] call _fadeUI;
};

if (_envCold || _envHot || _hungry || _thirsty) then {
if (_envHot || _envCold) then {
player setFatigue 1;
};
EPOCH_playerBloodP = (EPOCH_playerBloodP + 0.05) min 190;
_increaseStamina = false;
} else {
if (EPOCH_playerStamina > 0) then {
if !(_panic) then {
if (!_warnbloodPressure) then {
player setFatigue 0;
};
EPOCH_playerBloodP = (EPOCH_playerBloodP + 0.05) min 190;
_increaseStamina = false;
} else {
if (EPOCH_playerStamina > 0) then {
if !(_panic) then {
if (!_warnbloodPressure) then {
player setFatigue 0;
};
EPOCH_playerBloodP = EPOCH_playerBloodP - 1 max 100;
};
};
};

_critical = (damage player >= 0.7 || _warnbloodPressure);
_emergency ctrlShow _critical;
if (ctrlShown _emergency) then {
[_emergency,(EPOCH_playerBloodP > 140)] call _fadeUI;
_emergencyScale = 1-linearConversion [0,EPOCH_playerBloodP,180,0.01,1,true];
_emergency ctrlSetTextColor [1, _emergencyScale, _emergencyScale, 1];
EPOCH_playerBloodP = EPOCH_playerBloodP - 1 max 100;
};

if (EPOCH_playerBloodP >= 180) then {
true call EPOCH_pushCustomVar;
};
if (_increaseStamina && (getFatigue player) == 0) then {
EPOCH_playerStamina = (EPOCH_playerStamina + 0.5) min EPOCH_playerStaminaMax;
};
if (EPOCH_debugMode) then {
call EPOCH_debugMonitor;
};

call EPOCH_TradeLoop;


onEachFrame EPOCH_onEachFrame;
};
};

_critical = (damage player >= 0.7 || _warnbloodPressure);
_emergency ctrlShow _critical;
if (ctrlShown _emergency) then {
[_emergency,(EPOCH_playerBloodP > 140)] call _fadeUI;
_emergencyScale = 1-linearConversion [0,EPOCH_playerBloodP,180,0.01,1,true];
_emergency ctrlSetTextColor [1, _emergencyScale, _emergencyScale, 1];
};

if (EPOCH_playerBloodP >= 180) then {
true call EPOCH_pushCustomVar;
};
if (_increaseStamina && (getFatigue player) == 0) then {
EPOCH_playerStamina = (EPOCH_playerStamina + 0.5) min EPOCH_playerStaminaMax;
};
if (EPOCH_debugMode) then {
call EPOCH_debugMonitor;
};

call EPOCH_TradeLoop;

onEachFrame EPOCH_onEachFrame;
@@ -1,97 +1,103 @@

if !(EPOCH_arr_interactedObjs isEqualTo[]) then {
EPOCH_arr_interactedObjs remoteExec["EPOCH_server_save_vehicles", 2];
EPOCH_arr_interactedObjs = [];
};

if (damage player != _damagePlayer) then {
if (alive player) then {
true call EPOCH_pushCustomVar;
_damagePlayer = damage player;
};
};

if ((rating player) < 0) then {
player addRating abs(rating player);
};

// calculate total available power
// 1. number of power production devices within range 75m

// find share of power based on factors
// 1. number of players
// 2. Other sources of drain (Lights)

_energyValue = EPOCH_chargeRate min _energyRegenMax;
_vehicle = vehicle player;
if (_vehicle != player && isEngineOn _vehicle) then {
_energyValue = _energyValue + 5;
};

if (currentVisionMode player == 1) then { //NV enabled
_energyValue = _energyValue - _energyCostNV;
if (EPOCH_playerEnergy == 0) then {
player action["nvGogglesOff", player];
};
};

EPOCH_playerEnergy = ((EPOCH_playerEnergy + _energyValue) min EPOCH_playerEnergyMax) max 0;

if !(EPOCH_playerEnergy isEqualTo _prevEnergy) then {
9993 cutRsc["EpochGameUI3", "PLAIN", 0, false];
_display3 = uiNamespace getVariable "EPOCH_EpochGameUI3";
_energyDiff = round(EPOCH_playerEnergy - _prevEnergy);
_diffText = if (_energyDiff > 0) then {format["+%1",_energyDiff]} else {format["%1",_energyDiff]};
// hint str [_energyValue,_prevEnergy,EPOCH_playerEnergy];
(_display3 displayCtrl 21210) ctrlSetText format["%1/%2 %3", round(EPOCH_playerEnergy), EPOCH_playerEnergyMax, _diffText];
_prevEnergy = EPOCH_playerEnergy;
};

if (EPOCH_playerEnergy == 0) then {
if (EPOCH_buildMode > 0) then {
EPOCH_buildMode = 0;
EPOCH_snapDirection = 0;
_dt = ["<t size = '0.8' shadow = '0' color = '#99ffffff'>Build Mode Disabled: Need Energy< / t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
EPOCH_Target = objNull;
EPOCH_Z_OFFSET = 0;
EPOCH_X_OFFSET = 0;
EPOCH_Y_OFFSET = 5;
};
};

_attackers = player nearEntities[["Snake_random_EPOCH", "GreatWhite_F", "Epoch_Cloak_F"], 30];
if !(_attackers isEqualTo[]) then {
(_attackers select 0) call EPOCH_client_bitePlayer;
_panic = true;
} else {
// custom poision
_toxicObjs = player nearobjects["SmokeShellCustom", 6];
if!(_toxicObjs IsEqualTo[]) then {
(_toxicObjs select 0) call EPOCH_client_bitePlayer;
_panic = true;
} else {
_panic = false;
};
};

call EPOCH_fnc_Weather;

// Hunger / Thirst
_HTlossRate = _baseHTLoss;
if (EPOCH_playerStamina < 100) then {
if ((getFatigue player) > 0) then {
_HTlossRate = _HTlossRate + (_HTlossRate*(getFatigue player));
};
} else {
_HTlossRate = (_HTlossRate / 2);
};

EPOCH_playerHunger = (EPOCH_playerHunger - _HTlossRate) max 0;
EPOCH_playerThirst = (EPOCH_playerThirst - _HTlossRate) max 0;

call _lootBubble;

EPOCH_playerStaminaMax = (100 * (round(EPOCH_playerAliveTime/360)/10)) min 2500;

//player setAnimSpeedCoef 0.75;
//player setCustomAimCoef 1;
if !(EPOCH_arr_interactedObjs isEqualTo[]) then {
EPOCH_arr_interactedObjs remoteExec["EPOCH_server_save_vehicles", 2];
EPOCH_arr_interactedObjs = [];
};

if (damage player != _damagePlayer) then {
if (alive player) then {
true call EPOCH_pushCustomVar;
_damagePlayer = damage player;
};
};

// this fixes issues with players being unable to ride in the same vehicle
if ((rating player) < 0) then {
player addRating abs(rating player);
};

// calculate total available power
// 1. number of power production devices within range 75m

// find share of power based on factors
// 1. number of players
// 2. Other sources of drain (Lights)

_energyValue = EPOCH_chargeRate min _energyRegenMax;
_vehicle = vehicle player;
if (_vehicle != player && isEngineOn _vehicle) then {
_energyValue = _energyValue + 5;
};

if (currentVisionMode player == 1) then { //NV enabled
_energyValue = _energyValue - _energyCostNV;
if (EPOCH_playerEnergy == 0) then {
player action["nvGogglesOff", player];
};
};

// Sets visual effect
if (EPOCH_playerAlcohol > 20) then {
_drunkVal = linearConversion [0,100,EPOCH_playerAlcohol,0.1,1,true];
[(round(_drunkVal * 10)/10), 2] call epoch_setDrunk;
diag_log format["DEBUG: _drunkVal: %1",_drunkVal];
} else {
[0, 2] call epoch_setDrunk;
};

EPOCH_playerEnergy = ((EPOCH_playerEnergy + _energyValue) min EPOCH_playerEnergyMax) max 0;

if !(EPOCH_playerEnergy isEqualTo _prevEnergy) then {
9993 cutRsc["EpochGameUI3", "PLAIN", 0, false];
_display3 = uiNamespace getVariable "EPOCH_EpochGameUI3";
_energyDiff = round(EPOCH_playerEnergy - _prevEnergy);
_diffText = if (_energyDiff > 0) then {format["+%1",_energyDiff]} else {format["%1",_energyDiff]};
// hint str [_energyValue,_prevEnergy,EPOCH_playerEnergy];
(_display3 displayCtrl 21210) ctrlSetText format["%1/%2 %3", round(EPOCH_playerEnergy), EPOCH_playerEnergyMax, _diffText];
_prevEnergy = EPOCH_playerEnergy;
};

if (EPOCH_playerEnergy == 0) then {
if (EPOCH_buildMode > 0) then {
EPOCH_buildMode = 0;
EPOCH_snapDirection = 0;
_dt = ["<t size = '0.8' shadow = '0' color = '#99ffffff'>Build Mode Disabled: Need Energy< / t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
EPOCH_Target = objNull;
EPOCH_Z_OFFSET = 0;
EPOCH_X_OFFSET = 0;
EPOCH_Y_OFFSET = 5;
};
};

_attackers = player nearEntities[["Snake_random_EPOCH", "GreatWhite_F", "Epoch_Cloak_F"], 30];
if !(_attackers isEqualTo[]) then {
(_attackers select 0) call EPOCH_client_bitePlayer;
_panic = true;
} else {
// custom poision
_toxicObjs = player nearobjects["SmokeShellCustom", 6];
if!(_toxicObjs IsEqualTo[]) then {
(_toxicObjs select 0) call EPOCH_client_bitePlayer;
_panic = true;
} else {
_panic = false;
};
};

call EPOCH_fnc_Weather;

// Hunger / Thirst
_HTlossRate = _baseHTLoss;
if (EPOCH_playerStamina < 100) then {
if ((getFatigue player) > 0) then {
_HTlossRate = _HTlossRate + (_HTlossRate*(getFatigue player));
};
} else {
_HTlossRate = (_HTlossRate / 2);
};

EPOCH_playerHunger = (EPOCH_playerHunger - _HTlossRate) max 0;
EPOCH_playerThirst = (EPOCH_playerThirst - _HTlossRate) max 0;

call _lootBubble;

EPOCH_playerStaminaMax = (100 * (round(EPOCH_playerAliveTime/360)/10)) min 2500;
@@ -1,6 +1,5 @@

if !(_prevEquippedItem isEqualTo EPOCH_equippedItem_PVS) then {
_EPOCH_15 = _tickTime;
_prevEquippedItem = EPOCH_equippedItem_PVS;
publicVariableServer "EPOCH_equippedItem_PVS";
};
if !(_prevEquippedItem isEqualTo EPOCH_equippedItem_PVS) then {
_EPOCH_15 = _tickTime;
_prevEquippedItem = EPOCH_equippedItem_PVS;
EPOCH_equippedItem_PVS remoteExec ["EPOCH_server_equippedItem",2];
};
@@ -1,17 +1,15 @@
_nearByBobbersLocal = [];
_nearByBobbers = player nearEntities[["Bobber_EPOCH"], 12];
{
if (local _x) then {
_nearByBobbersLocal pushBack _x
}
} forEach _nearByBobbers;

_nearByBobbersLocal = [];
_nearByBobbers = player nearEntities[["Bobber_EPOCH"], 12];
{
if (local _x) then {
_nearByBobbersLocal pushBack _x
}
} forEach _nearByBobbers;

if !(_nearByBobbersLocal isEqualTo []) then {
if ((random 100) < 50) then {
_bobber = _nearByBobbersLocal select floor(random(count _nearByBobbers));
_bobber setVelocity [0,-1,-1];
_bobber setVariable ["EPOCH_fishOnLine" , diag_tickTime];
};

};
if !(_nearByBobbersLocal isEqualTo []) then {
if ((random 100) < 50) then {
_bobber = _nearByBobbersLocal select floor(random(count _nearByBobbers));
_bobber setVelocity [0,-1,-1];
_bobber setVariable ["EPOCH_fishOnLine" , diag_tickTime];
};
};
@@ -1,6 +1,7 @@
_position = getPosATL player;

EPOCH_nearestLocations = nearestLocations[player, ["NameCityCapital", "NameCity", "Airport"], 300];

EPOCH_playerIsSwimming = false;

if !(surfaceIsWater _position) then {
@@ -14,9 +15,7 @@ if !(surfaceIsWater _position) then {
// spawn shark if player is deep water and not in vehicle
if (vehicle player == player) then{
_offsetZ = ((_position vectorDiff getPosASL player) select 2);
if (_offsetZ > 1.7) then {
EPOCH_playerIsSwimming = true;
};
EPOCH_playerIsSwimming = (_offsetZ > 1.7);
if (_offsetZ > 50) then {
"GreatWhite_F" call EPOCH_unitSpawn;
};
@@ -55,6 +54,8 @@ if !(_powerSources isEqualTo[]) then {
EPOCH_nearPower = true;
};
};
// downtick Alcohol
EPOCH_playerAlcohol = ((EPOCH_playerAlcohol - 1) min 100) max 0;

EPOCH_playerAliveTime = round(EPOCH_playerAliveTime + (_tickTime - EPOCH_clientAliveTimer));
EPOCH_clientAliveTimer = _tickTime;
@@ -13,6 +13,7 @@ _energyRegenMax = ["CfgEpochClient", "energyRegenMax", 5] call EPOCH_fnc_returnC
_energyRange = ["CfgEpochClient", "energyRange", 75] call EPOCH_fnc_returnConfigEntryV2;

EPOCH_chargeRate = 0;
EPOCH_playerIsSwimming = false;

// default data if mismatch
if (count EPOCH_playerSpawnArray != count EPOCH_spawnIndex) then{
@@ -6,17 +6,17 @@ if (isNil "EPOCH_bankTransferActive") then {

ctrlEnable[1600, false];

[] spawn {
[] spawn {
ctrlSetText[1004,"Transfer started."];

_deposit = parseNumber(ctrlText 1401) min EPOCH_playerCrypto;
_withdraw = parseNumber(ctrlText 1402) min EPOCH_bankBalance;
_transfer = parseNumber(ctrlText 1400) min EPOCH_bankBalance;

_totalTransfer = (_deposit + _withdraw) + _transfer;
_progress = 0;

uiSleep 1;
uiSleep 1;

_transferTarget = "";
if (_transfer > 0) then {
@@ -37,8 +37,7 @@ if (isNil "EPOCH_bankTransferActive") then {
if (_progress >= 100) then {

// if player waited the full time then send upload
EPOCH_storeCrypto_PVS = [player, [_deposit, _withdraw, [_transfer, _transferTarget]], Epoch_personalToken];
publicVariableServer "EPOCH_storeCrypto_PVS";
[player, [_deposit, _withdraw, [_transfer, _transferTarget]], Epoch_personalToken] remoteExec ["EPOCH_server_storeCrypto",2];

ctrlSetText[1004, "Transfer complete."];

@@ -53,4 +52,4 @@ if (isNil "EPOCH_bankTransferActive") then {
EPOCH_bankTransferActive = nil;
ctrlEnable[1600, true];
};
};
};
@@ -21,32 +21,6 @@ if (isNull _target) then {
};

if (!isNull _target) then {

if (alive _target) then {
/*
if ((_target isKindOf "LandVehicle") || (_target isKindOf "Air") || (_target isKindOf "Ship") || (_target isKindOf "Tank")) then {
_dialog = "InteractVehicle";
};

if (_ctrl) then {
if (_target isKindOf "Constructions_static_F" || _target isKindOf "Constructions_foundation_F") then {
_dialog = "InteractBaseBuilding";
};
};
*/
/*
if (_target isKindOf "Man") then {
if (_target != player) then {
if (!isPlayer _target) then {
if ((_target getVariable["AI_SLOT", -1]) != -1) then {
_dialog = "InteractNPC";
};
};
};
};
*/
};

if (_forceGear) then {
player action ["Gear", _target];
_handled = true;
@@ -57,4 +31,4 @@ if (!isNull _target) then {
};
};
};
_handled
_handled
@@ -1,3 +1,5 @@
private["_ok"];
if (isNull _this) exitWith {};
if !(alive _this) exitWith {};
_ok = createdialog "MissionSelect";
if (!_ok) exitWith {};
if (!_ok) exitWith {};
@@ -1,14 +1,16 @@
private ["_index","_type","_config","_name","_picture","_qty","_items","_qtys","_ok","_vehicles","_aiItems","_target","_slot"];
_target = cursorTarget;
_slot = _target getVariable ["AI_SLOT",-1];
if (_slot != -1) then {
EPOCH_lastNPCtradeTarget = _target;
closeDialog 0;
_ok = createdialog "TradeNPCMenu";
if (!_ok) exitWith {};
9992 cutRsc["EpochGameUI2", "PLAIN", 2, false];
((uiNamespace getVariable "EPOCH_EpochGameUI2") displayCtrl 21208) ctrlSetText format["%1", EPOCH_playerCrypto];
{lbAdd[42100,_x];lbAdd[42101,_x]} forEach ["All","Magazines","Items","Vehicles"];
lbSetCurSel[42100, 0];
lbSetCurSel[42101, 0];
};
if (alive _target) then {
_slot = _target getVariable ["AI_SLOT",-1];
if (_slot != -1) then {
EPOCH_lastNPCtradeTarget = _target;
closeDialog 0;
_ok = createdialog "TradeNPCMenu";
if (!_ok) exitWith {};
9992 cutRsc["EpochGameUI2", "PLAIN", 2, false];
((uiNamespace getVariable "EPOCH_EpochGameUI2") displayCtrl 21208) ctrlSetText format["%1", EPOCH_playerCrypto];
{lbAdd[42100,_x];lbAdd[42101,_x]} forEach ["All","Magazines","Items","Vehicles"];
lbSetCurSel[42100, 0];
lbSetCurSel[42101, 0];
};
};
@@ -25,9 +25,9 @@ private["_item", "_currQty", "_tradeType", "_itemWorth", "_aiItems", "_itemClass

if (!isNil "EPOCH_TRADE_COMPLETE") exitWith {};
if (!isNil "EPOCH_TRADE_STARTED") exitWith{};
if (isNull _this) exitWith{};

if (!isNull _this) then {

if (alive _this) then {

_config = 'CfgPricing' call EPOCH_returnConfig;

@@ -113,8 +113,7 @@ if (!isNull _this) then {
EPOCH_TRADE_STARTED = true;

// make trade
EPOCH_MAKENPCTRADE = [_this, _arrayIn, _arrayOut, player, Epoch_personalToken];
publicVariableServer "EPOCH_MAKENPCTRADE";
[_this, _arrayIn, _arrayOut, player, Epoch_personalToken] remoteExec ["EPOCH_server_makeNPCTrade",2];

// close menu
closeDialog 0;
@@ -3,23 +3,12 @@ if !(isNil "EPOCH_takeCryptoLock") exitWith {};
EPOCH_takeCryptoLock = true;
if (!isNull _this) then {
if ((typeof _this) == "Land_MPS_EPOCH") then {

_getCrypto = _this getVariable["Crypto", 0];
// deleteVehicle _this;



// EPOCH_playerCrypto = (EPOCH_playerCrypto + _getCrypto) min 25000;

EPOCH_takeCrypto_PVS = [player, Epoch_personalToken, _this];
publicVariableServer "EPOCH_takeCrypto_PVS";



[player, Epoch_personalToken, _this] remoteExec ["EPOCH_server_takeCrypto",2];
_dt = [format["<t size='0.8' shadow='0' color='#99ffffff'>You found %1 Krypto.</t>", _getCrypto], 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
};
[] spawn{
uiSleep 2;
EPOCH_takeCryptoLock = nil;
};
};
@@ -30,7 +30,7 @@ class CfgMods
hidePicture = 0;
hideName = 0;
action = "http://www.epochmod.com";
version = "0.3.6.0";
version = "0.3.7.0";
majorVersion = 0.3; //MUST BE A NUMBER!; Change this if we release a new major version, don't change if we push just push a hotfix
ArmAVersion = 150;
overview = "Open world survival mod set in the year 2035, Just two years after the mass extinction of billions of people. Those that remain are left with remnants of a once technological society. Try to survive, build, or explore your way through the harsh dynamic environment.";
@@ -41,20 +41,20 @@ class Epoch
class Version
{
//Version System, Check if PBO Version is compatible with Code
A3_epoch_assets = "0.3.6.0";
A3_epoch_assets_1 = "0.3.6.0";
epoch_objects = "0.3.6.0";
A3_epoch_assets_3 = "0.3.6.0";
A3_epoch_config = "0.3.6.0";
A3_epoch_language = "0.3.6.0";
Underground_Epoch = "0.3.6.0";
A3_epoch_vehicles = "0.3.6.0";
a3_epoch_weapons = "0.3.6.0";
a2_epoch_weapons = "0.3.6.0";
a3_epoch_structures = "0.3.6.0";
A3_epoch_functions = "0.3.6.0";
A3_epoch_vehicles_1 = "0.3.6.0";
Enhanced_Epoch_AiASupport = "0.3.6.0";
A3_epoch_assets = "0.3.7.0";
A3_epoch_assets_1 = "0.3.7.0";
epoch_objects = "0.3.7.0";
A3_epoch_assets_3 = "0.3.7.0";
A3_epoch_config = "0.3.7.0";
A3_epoch_language = "0.3.7.0";
Underground_Epoch = "0.3.7.0";
A3_epoch_vehicles = "0.3.7.0";
a3_epoch_weapons = "0.3.7.0";
a2_epoch_weapons = "0.3.7.0";
a3_epoch_structures = "0.3.7.0";
A3_epoch_functions = "0.3.7.0";
A3_epoch_vehicles_1 = "0.3.7.0";
Enhanced_Epoch_AiASupport = "0.3.7.0";

};
};