Merge pull request #977 from EpochModTeam/experimental

Release 1.2
This commit is contained in:
vbawol 2018-05-24 13:11:42 -05:00 committed by GitHub
commit fc45cb8f69
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
128 changed files with 2282 additions and 754 deletions

View File

@ -27,6 +27,7 @@ forceRestartTime = 14400; // 4 hour restarts
{ 900, "ChangeWeather", 1 , 2, -1, {} ,{"VR"}},
{ 1200, "ContainerSpawner", 0 , 2, -1, {} ,{"VR"}},
{ 1440, "GardenManager", 0 , 2, -1, {} ,{"VR"}},
{ 1440, "SolarChargerManager", 0 , 2, -1, {} ,{"VR"}},
{ 900, "MoneyDrop", 0 , 2 , -1, {} ,{"VR"}},
{ 300, "PlantSpawner", 0 , 2 , -1, {} ,{"VR"}} //No comma on last Entry
};
@ -63,8 +64,10 @@ forceRestartTime = 14400; // 4 hour restarts
};
// vehicles - Max vehicle slots is calculated from per vehicle limits below. Warning! Higher the number lower the performance.
immuneIfStartInBase = "true"; // Protect vehicles from damage in bases until first unlocked after restart
ReservedVehSlots = 50; // Reserved Vehicle Slots (only needed, if you manually spawn in additional Vehicles - AdminTool / Blackmarket...)
disableAutoRefuel = "true"; // Removes auto refuel from all buildings at server startup.
disableAutoRefuel = "false"; // Removes auto refuel from all buildings at server startup.
disableFuelNearPlots = "false"; // Removes auto refuel in PlotPole-Ranges at server startup.
VehLockMessages = "true"; // Give players a hint, that the Vehicle is locked / unlocked
removevehweapons[] = { // remove these Weapons from spawned Vehicles
"missiles_DAR","gatling_30mm","gatling_20mm","missiles_DAGR","cannon_30mm_Plane_CAS_02_F","Missile_AA_03_Plane_CAS_02_F","Missile_AGM_01_Plane_CAS_02_F","Rocket_03_HE_Plane_CAS_02_F",
@ -89,6 +92,8 @@ forceRestartTime = 14400; // 4 hour restarts
"Safe_EPOCH"
};
ExceptedBaseObjects[] = { // Not Indestructible, also if in a Class of IndestructibleBaseObjects
"Spike_TRAP_EPOCH",
"Metal_TRAP_EPOCH",
"CinderWallGarage_EPOCH",
"WoodLargeWallDoorL_EPOCH",
"WoodLargeWallDoor_EPOCH",

View File

@ -15,6 +15,8 @@ http://www.microsoft.com/en-us/download/details.aspx?id=40784
6. Open the SC/Battleye folder and rename example-BEServer.cfg to BEServer.cfg and change the RConPassword.
7. Look at the "start-A3-cmd-line-example.txt" file for an example command line for starting your server.
For more details in Server installation, visit: https://epochmod.com/forum/topic/44751-dec2017-arma-3-epochmod-server-installation-and-setup/
== NOTES ==
* You should use a service restarter (like firedaemon) to keep the redis server and Arma 3 server running.

View File

@ -1 +1 @@
5 "" !="H_MM_(Buzzard_Gasmask|Helmet)_01" !="V_MM_Vest_01" !="(V|H)_(F|)[0-9]{1,3}_EPOCH" !="(clown|pkin|wolf|radiation|hockey|plague|ghostface|skull|witch)_mask_epoch" !="Item(Map|GPS|Compass|Watch|GeigerCounter_EPOCH)|Power_Sword" !="EpochRadio[0-9]" !="B_UavTerminal" !="(U|G|bipod|acc|muzzle|optic)_[0-9A-Z_]{1,100}" !="(NVG|Defib|Heal|Repair|Elcan(_reflex|))_EPOCH" !="(Binocular|Rangefinder|Hatchet|CrudeHatchet|WoodClub|Melee(Sledge|Maul|Rod|Sword)|ChainSaw|MultiGun|Rollins_F|Plunger)" !="(ruger_pistol|speargun|1911_pistol|akm|m14|M14Grn|m16|m16Red|m107|m107Tan|m249|m249Tan|m4a3|sr25|l85a2|l85a2_(pink|ugl))_epoch" !="SMG_(01|02|05)_F" !="hgun_(PDW2000|ACPC2|Rook40|P07|Pistol_heavy_0[1-2]|Pistol_Signal)_F" !="LMG_(Mk200|Zafir)_F" !="srifle_(EBR|GM6|LRR|DMR_01)_(camo_|)F" !="arifle_(Katiba|Katiba_C|Katiba_GL|SDAR|TRG21|TRG20|TRG21_GL|Mk20|Mk20C|Mk20C_plain|Mk20_GL|Mk20_plain|Mk20_GL_plain)_F" !="arifle_(MXC|MX|MX_GL|MXM|MXM_Black|MX_GL_Black|MX_Black|MXC_Black|MX_SW|MX_SW_Black)_F" !="srifle_DMR_0[2-7](_(camo|sniper|khaki|tan|multicam|woodland|spotter|blk|hex|olive)_|_)F" !="MMG_0[1-2]_(hex|tan|camo|black|sand)_F" !"CUP_((h|s)gun|(s|a)rifle|(l|s)mg)_" !"CUP_(optic|muzzle|acc|bipod)_" !"CUP_(Mxx|SVD)_camo"
5 "" !="H_MM_(Buzzard_Gasmask|Helmet)_01" !="V_MM_Vest_01" !="(V|H)_(F|)[0-9]{1,3}_EPOCH" !="(clown|pkin|wolf|radiation|hockey|plague|ghostface|skull|witch|thor|iron)_mask_epoch" !="Item(Map|GPS|Compass|Watch|GeigerCounter_EPOCH)|Power_Sword" !="EpochRadio[0-9]" !="B_UavTerminal" !="(U|G|bipod|acc|muzzle|optic)_[0-9A-Z_]{1,100}" !="(NVG|Defib|Heal|Repair|Elcan(_reflex|))_EPOCH" !="(Binocular|Rangefinder|Hatchet|CrudeHatchet|WoodClub|Melee(Sledge|Maul|Rod|Sword)|ChainSaw|MultiGun|Rollins_F|Plunger)" !="(ruger_pistol|speargun|1911_pistol|akm|m14|M14Grn|m16|m16Red|m107|m107Tan|m249|m249Tan|m4a3|sr25|l85a2|l85a2_(pink|ugl))_epoch" !="SMG_(01|02|05)_F" !="hgun_(PDW2000|ACPC2|Rook40|P07|Pistol_heavy_0[1-2]|Pistol_Signal)_F" !="LMG_(Mk200|Zafir)_F" !="srifle_(EBR|GM6|LRR|DMR_01)_(camo_|)F" !="arifle_(Katiba|Katiba_C|Katiba_GL|SDAR|TRG21|TRG20|TRG21_GL|Mk20|Mk20C|Mk20C_plain|Mk20_GL|Mk20_plain|Mk20_GL_plain)_F" !="arifle_(MXC|MX|MX_GL|MXM|MXM_Black|MX_GL_Black|MX_Black|MXC_Black|MX_SW|MX_SW_Black)_F" !="srifle_DMR_0[2-7](_(camo|sniper|khaki|tan|multicam|woodland|spotter|blk|hex|olive)_|_)F" !="MMG_0[1-2]_(hex|tan|camo|black|sand)_F" !"CUP_((h|s)gun|(s|a)rifle|(l|s)mg)_" !"CUP_(optic|muzzle|acc|bipod)_" !"CUP_(Mxx|SVD)_camo"

View File

@ -1 +1 @@
5 "" !="bis_fnc_execvm \[\[.+\],\"initPlayerServer.sqf\"]" !="bis_fnc_effectkilled(airdestruction|secondaries) \[.+\]" !="epoch_server_(checkplayer|save(_vehicles|building)|(lock|pack)Storage|(upgrade|remove|paint|maint)build) \[.+\]" !="epoch_server_((load|respawn|dead|invite|revive|teleport)Player) \[.+\]" !="epoch_server_((upgrade|updateplayer|inviteplayer|create|delete)(Temp|)Group) \[.+\]" !="epoch_server_(deadplayerdetonate|triggerantagonist|playersetvariable|missioncomms|make(marker|SP)|removemarker) \[.+\]" !="epoch_server_(upgrade_vehicle|knockDownTree|mineRocks|lootAnimal|handle_(say3d|switchmove|sapperObjs)) \[.+\]" !="epoch_server_((repair|fill|lock)Vehicle|(loot|fill)Container|(store|take)Crypto|make(NPC|)Trade) \[.+\]" !="epoch_server_(paycrypto|tradeRequest|equippeditem|packJack|create(object|AirDrop)|airDropCrate|destroytrash|unpackBackpack) \[.+\]" !="epoch_(localcleanup|fnc_saveplayer|client_bitePlayer|serverlootobject|fnc_updateplayerstats) \[.+\]" !="cup_fnc_handletow \[.+\]" !="bis_fnc_reviveinitaddplayer \[.+\]"
5 "" !="bis_fnc_execvm \[\[.+\],\"initPlayerServer.sqf\"]" !="bis_fnc_effectkilled(airdestruction|secondaries) \[.+\]" !="epoch_server_(checkplayer|save(_vehicles|building)|(lock|pack)Storage|(upgrade|remove|paint|maint)build) \[.+\]" !="epoch_server_((load|respawn|dead|invite|revive|teleport)Player) \[.+\]" !="epoch_server_((upgrade|updateplayer|inviteplayer|create|delete)(Temp|)Group) \[.+\]" !="epoch_server_(deadplayerdetonate|triggerantagonist|playersetvariable|missioncomms|make(marker|SP)|removemarker) \[.+\]" !="epoch_server_(upgrade_vehicle|knockDownTree|mineRocks|lootAnimal|handle_(say3d|switchmove|sapperObjs)) \[.+\]" !="epoch_server_((repair|fill|lock)Vehicle|(loot|fill)Container|(store|take)Crypto|make(NPC|)Trade) \[.+\]" !="epoch_server_(paycrypto|tradeRequest|equippeditem|packJack|create(object|AirDrop)|airDropCrate|destroytrash|unpackBackpack) \[.+\]" !="epoch_(localcleanup|fnc_saveplayer|client_bitePlayer|serverlootobject|fnc_updateplayerstats|server_setfinalplayerpos) \[.+\]" !="cup_fnc_handletow \[.+\]" !="bis_fnc_reviveinitaddplayer \[.+\]"

View File

@ -33,7 +33,7 @@
5 createUnit !="_driver = _grp createUnit[\"I_UAV_AI\", position _unit, [], 0, \"CAN_COLLIDE\"];" !="axeGeneral = grpVIPGeneral createUnit [\"I_officer_F\", axeGeneralPos, [], 1, \"CAN_COLLIDE\"];" !="bis_functions_mainscope = _grpLogic createunit [\"Logic\",[9,9,9],[],0,\"none\"];" !="_unit = _grp createUnit[selectRandom _arrUnits, _pos, [], 0, \"FORM\"];" !="_driver = (group player) createUnit[\"I_UAV_AI\", position axeUAV, [], 0, \"CAN_COLLIDE\"];"
5 createAgent !="bis_revive_ratioLethal = createAgent [\"Logic\", [10,10,0], [], 0, \"CAN_COLLIDE\"];" !="_unit = createAgent[_unitClass, _targetPos, [], 256, \"FORM\"];" !="_unit = createAgent [_unitClass, _targetPos, [], 120, \"FORM\"];" !="_animal = createAgent[_randomAIClass, _animalPos, [], 5, \"NONE\"];" !="_unit = createAgent [\"Epoch_Cloak_F\", _pos, [], 0, \"CAN_COLLIDE\"];" !="_unit = createAgent [\"Epoch_Sapper_F\", _targetPos, [], 180, \"FORM\"];" !="_sapper = createAgent [\"Epoch_Sapper_F\", getPos _cage2, [], 0, \"FORM\"];" !="_unit = createAgent[_unitClass, position player, [], _zRange, \"FORM\"];" !="_animal = createAgent[_randomAIClass, _animalPos, [], 0, \"CAN_COLLIDE\"];" !="_axeSapper = createAgent [\"Epoch_Sapper_F\", _pos, [], 12, \"FORM\"];" !="_nestMate = createAgent [\"Epoch_Sapper_F\", _garrPos, [], 0, \"FORM\"];"
5 createTeam
5 createDialog !="createDialog \"rmx_dynamenu\";" !="createDialog \"rmx_craftingUI\";" !="createDialog \"QuickUpgrade\";" !="createDialog \"QuickTake\";" !="createDialog \"InteractBank\";" !="createdialog \"SelectGender\";" !="_handled = createdialog _dialog;" !="if !(createdialog \"InteractItem\") exitWith {};" !="createDialog _tapDiag;" !="if !(createdialog \"Trade\") exitWith {};" !="_ok = createdialog \"Interact\";" !="_ok = createdialog \"TradeNPCMenu\";" !="createDialog \"Epoch_myGroup\";" !="createDialog (if ((Epoch_my_GroupUID == \"\") && (Epoch_my_Group isEqualTo [])) then {\"EPOCH_createGrp\"} else {\"Epoch_myGroup\"});" !="createDialog \"GroupRequests\";" !="_ok = createdialog \"MissionSelect\";" !="createDialog 'Skaronator_AdminMenu';" !="createDialog \"Epoch_myTempGroup\";" !="createDialog (if ((Epoch_my_tempGroupUID == \"\") && (Epoch_my_tempGroup isEqualTo [])) then {\"EPOCH_createTempGrp\"} else {\"Epoch_myTempGroup\"});" !="createDialog \"tempGroupRequests\";"
5 createDialog !="createdialog 'Epoch_CamDialog'" !="createDialog \"rmx_dynamenu\";" !="createDialog \"rmx_craftingUI\";" !="createDialog \"QuickUpgrade\";" !="createDialog \"QuickTake\";" !="createDialog \"InteractBank\";" !="createdialog \"SelectGender\";" !="_handled = createdialog _dialog;" !="if !(createdialog \"InteractItem\") exitWith {};" !="createDialog _tapDiag;" !="if !(createdialog \"Trade\") exitWith {};" !="_ok = createdialog \"Interact\";" !="_ok = createdialog \"TradeNPCMenu\";" !="createDialog \"Epoch_myGroup\";" !="createDialog (if ((Epoch_my_GroupUID == \"\") && (Epoch_my_Group isEqualTo [])) then {\"EPOCH_createGrp\"} else {\"Epoch_myGroup\"});" !="createDialog \"GroupRequests\";" !="_ok = createdialog \"MissionSelect\";" !="createDialog 'Skaronator_AdminMenu';" !="createDialog \"Epoch_myTempGroup\";" !="createDialog (if ((Epoch_my_tempGroupUID == \"\") && (Epoch_my_tempGroup isEqualTo [])) then {\"EPOCH_createTempGrp\"} else {\"Epoch_myTempGroup\"});" !="createDialog \"tempGroupRequests\";"
5 createDisplay !="createDisplay \"rmx_dynamenu\";" !="createDisplay \"rmx_moveDynamicHUD\";" !="_parent createdisplay _displayClass;" !="finddisplay 151 createdisplay 'RscDisplayOptionsLayout'" !="_display createdisplay \"RscDisplayDLCPreview\";"
5 deleteMarker !="deleteMarkerLocal _mName;"
5 setMarker !="CBA_fnc_setMarkerPersistent\"" !="\\fnc_setMarkerPersistent" !="\"setMarkerPersistent" !="_mName setMarkerShapeLocal _mShape;" !="_mName setMarkerTypeLocal _mType;" !="(_x select 0) setMarkerPosLocal (position player);" !="_zoomMarker setMarkerSizeLocal"

View File

@ -1 +1 @@
5 "" !="Epoch_(Male|Female)_F" !="(Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf)_EPOCH" !="(ToolRack|Rabbit|Cabinet|toilet|KitchenSink)_EPOCH" !="(Sheep|Goat|Snake|Hen|Cock|Fin|Alsatian)_random_EPOCH" !="Foundation_EPOCH" !="WoodFoundation_EPOCH" !=".+_(SIM|Ghost)_EPOCH" !="(FirePlace|FirePlaceOn)_EPOCH"
5 "" !="Epoch_(Male|Female)_F" !="(Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf)_EPOCH" !="(ToolRack|Rabbit|Cabinet|toilet|KitchenSink)_EPOCH" !="(Sheep|Goat|Snake|Hen|Cock|Fin|Alsatian)_random_EPOCH" !="Foundation_EPOCH" !="WoodFoundation_EPOCH" !=".+_(SIM|Ghost)_EPOCH" !="(FirePlace|FirePlaceOn)_EPOCH" !"K(01|02|03|04)" !"ebike" !"Quadbike" !"hoverboard_epoch" !"C_Kart_"

View File

@ -1,8 +1,8 @@
/*%FSM<COMPILE "F:\Program Files (x86)\Steam\steamapps\common\Arma 3 Tools\FSMEditor\scriptedFSM.cfg, Epoch Login">*/
/*%FSM<COMPILE "scriptedFSM.cfg, Epoch Login">*/
/*%FSM<HEAD>*/
/*
item0[] = {"INIT",0,250,-25.000000,-375.000000,75.000000,-325.000000,0.000000,"INIT"};
item1[] = {"FINISH",1,250,-149.463196,1518.792480,-49.463196,1568.792480,0.000000,"FINISH"};
item1[] = {"FINISH",1,250,-156.564148,1645.189819,-56.564148,1695.189819,0.000000,"FINISH"};
item2[] = {"true",8,218,-150.000000,-125.000000,-50.000000,-75.000000,0.000000,"true"};
item3[] = {"Version_Check",2,250,-25.000000,-75.000000,75.000000,-25.000000,0.000000,"Version Check"};
item4[] = {"Player_Object_Re",4,218,-150.000000,75.000000,-50.000000,125.000000,0.000000,"Player" \n "Object Ready"};
@ -17,23 +17,23 @@ item12[] = {"Empty_PlayerUID",4,218,125.000000,125.000000,225.000000,175.000000,
item13[] = {"ERROR_PlayerUID",2,250,275.000000,125.000000,375.000000,175.000000,0.000000,"ERROR" \n "PlayerUID Empty"};
item14[] = {"",7,210,471.000061,145.999908,478.999939,154.000092,0.000000,""};
item15[] = {"Timeout_No_Respo",4,218,125.000000,875.000000,225.000000,925.000000,0.000000,"Timeout" \n "No Response"};
item16[] = {"Response",4,4314,-150.000000,825.000000,-50.000000,875.000000,0.000000,"Response"};
item17[] = {"Setup_Player_Var",2,250,-25.000000,1075.000000,75.000000,1125.000000,0.000000,"Setup Player" \n "Variables"};
item16[] = {"Response",4,218,-150.000000,825.000000,-50.000000,875.000000,0.000000,"Response"};
item17[] = {"Setup_Player_Var",2,250,-32.100952,1201.397339,67.899048,1251.397339,0.000000,"Setup Player" \n "Variables"};
item18[] = {"Request_Hive",2,250,-25.000000,575.000000,75.000000,625.000000,0.000000,"Request Hive"};
item19[] = {"Timeout_No_Respo",4,218,125.000000,575.000000,225.000000,625.000000,0.000000,"Timeout" \n "No Response"};
item20[] = {"ERROR_Server_not",2,250,275.000000,875.000000,375.000000,925.000000,0.000000,"ERROR" \n "Server not" \n "Response"};
item21[] = {"",7,210,471.000000,895.999939,479.000000,904.000061,0.000000,""};
item22[] = {"Timeout_No_Respo",4,218,125.000000,775.000000,225.000000,825.000000,0.000000,"Timeout" \n "No Response"};
item23[] = {"Wrong_Server_Ver",4,218,125.000000,475.000000,225.000000,525.000000,10.000000,"Wrong" \n "Server Version"};
item24[] = {"Player_In_Game",8,218,-150.000000,1125.000000,-50.000000,1175.000000,0.000000,"Player" \n "In Game"};
item24[] = {"Player_In_Game",8,218,-157.100952,1251.397339,-57.100952,1301.397339,0.000000,"Player" \n "In Game"};
item25[] = {"ERROR_Wrong_Server",2,250,275.000000,475.000000,375.000000,525.000000,0.000000,"ERROR" \n "Wrong" \n "Server Version"};
item26[] = {"Display_Message",4,218,600.000000,1150.000000,700.000000,1200.000000,0.000000,"" \n "Display Message" \n "Wait..."};
item27[] = {"Setup_Player_Obj",2,250,-25.000000,975.000000,75.000000,1025.000000,0.000000,"Setup Player" \n "Object"};
item27[] = {"Setup_Player_Obj",2,250,-32.100952,1101.397339,67.899048,1151.397339,0.000000,"Setup Player" \n "Object"};
item28[] = {"Check_if_Player",4,218,750.000000,1225.000000,850.000000,1275.000000,0.000000,"Check if" \n "Player got Kicked"};
item29[] = {"Preload_done",8,218,-150.000000,1425.000000,-50.000000,1475.000000,0.000000,"Preload" \n "done"};
item29[] = {"Preload_done",8,218,-157.100952,1551.397339,-57.100952,1601.397339,0.000000,"Preload" \n "done"};
item30[] = {"",7,210,471.000000,796.000000,479.000000,804.000000,0.000000,""};
item31[] = {"",7,210,471.000000,796.000000,479.000000,804.000000,0.000000,""};
item32[] = {"true",8,218,425.000000,1075.000000,525.000000,1125.000000,0.000000,"true"};
item32[] = {"true",8,218,417.899048,1201.397339,517.899048,1251.397339,0.000000,"true"};
item33[] = {"Display_Message",2,250,600.000000,1075.000000,700.000000,1125.000000,0.000000,"Display" \n "Message"};
item34[] = {"Server_Ready",4,218,-25.000000,300.000000,75.000000,350.000000,0.000000,"Server" \n "Ready"};
item35[] = {"Check_Server",2,250,-25.000000,375.000000,75.000000,425.000000,0.000000,"Check Server"};
@ -50,26 +50,26 @@ item45[] = {"Arma_Version_Che",2,250,-25.000000,25.000000,75.000000,75.000000,0.
item46[] = {"Outdated_Version",4,218,125.000000,25.000000,225.000000,75.000000,10.000000,"Outdated" \n "Version"};
item47[] = {"ERROR_Wrong_Version_1",2,250,275.000000,25.000000,375.000000,75.000000,0.000000,"ERROR" \n "Wrong Version" \n "ArmA"};
item48[] = {"",7,210,471.000061,45.999908,478.999939,54.000092,0.000000,""};
item49[] = {"new_player_____p",4,218,-150.000000,1025.000000,-50.000000,1075.000000,0.000000,"new player == " \n "player"};
item50[] = {"Setup_EH_s_and_H",2,250,-25.000000,1175.000000,75.000000,1225.000000,0.000000,"Setup EH's" \n "and" \n "HitPoints"};
item51[] = {"no_weapons",4,218,-25.000000,1275.000000,75.000000,1325.000000,0.000000,"no weapons"};
item52[] = {"Process",2,250,-25.000000,1375.000000,75.000000,1425.000000,0.000000,"Process"};
item53[] = {"Has_Current_Weap",4,218,100.000000,1175.000000,200.000000,1225.000000,10.000000,"Has" \n "Current" \n "Weapon"};
item54[] = {"Find_Active_Weap",2,250,225.000000,1175.000000,325.000000,1225.000000,0.000000,"Find" \n "Active" \n "Weapon"};
item55[] = {"Current_Weapon_Not",4,218,150.000000,1225.000000,250.000000,1275.000000,0.000000,"Current" \n "Weapon" \n "Not Selected"};
item56[] = {"Current_Weapon_S",4,218,300.000000,1225.000000,400.000000,1275.000000,0.000000,"Current" \n "Weapon" \n "Selected"};
item57[] = {"Select_Weapon",2,250,150.000000,1300.000000,250.000000,1350.000000,0.000000,"Select" \n "Weapon"};
item58[] = {"true",8,218,225.000000,1375.000000,325.000000,1425.000000,0.000000,"true"};
item59[] = {"Do_nothing",2,250,300.000000,1300.000000,400.000000,1350.000000,0.000000,"Do nothing"};
item60[] = {"Check_New_Player",2,250,-25.000000,875.000000,75.000000,925.000000,0.000000,"Check" \n "New Player" \n "Setup"};
item61[] = {"check_new__player",4,218,-150.000000,925.000000,-50.000000,975.000000,0.000000,"check new " \n "player not null"};
item49[] = {"new_player_____p",4,218,-157.100952,1151.397339,-57.100952,1201.397339,0.000000,"new player == " \n "player"};
item50[] = {"Setup_EH_s_and_H",2,250,-32.100952,1301.397339,67.899048,1351.397339,0.000000,"Setup EH's" \n "and" \n "HitPoints"};
item51[] = {"no_weapons",4,218,-32.100952,1401.397339,67.899048,1451.397339,0.000000,"no weapons"};
item52[] = {"Process",2,250,-32.100952,1501.397339,67.899048,1551.397339,0.000000,"Process"};
item53[] = {"Has_Current_Weap",4,218,92.899048,1301.397339,192.899048,1351.397339,10.000000,"Has" \n "Current" \n "Weapon"};
item54[] = {"Find_Active_Weap",2,250,217.899048,1301.397339,317.899048,1351.397339,0.000000,"Find" \n "Active" \n "Weapon"};
item55[] = {"Current_Weapon_Not",4,218,142.899048,1351.397339,242.899048,1401.397339,0.000000,"Current" \n "Weapon" \n "Not Selected"};
item56[] = {"Current_Weapon_S",4,218,292.899048,1351.397339,392.899048,1401.397339,0.000000,"Current" \n "Weapon" \n "Selected"};
item57[] = {"Select_Weapon",2,250,142.899048,1426.397339,242.899048,1476.397339,0.000000,"Select" \n "Weapon"};
item58[] = {"true",8,218,217.899048,1501.397339,317.899048,1551.397339,0.000000,"true"};
item59[] = {"Do_nothing",2,250,292.899048,1426.397339,392.899048,1476.397339,0.000000,"Do nothing"};
item60[] = {"Check_New_Player",2,250,-20.739410,880.680786,79.260590,930.680786,0.000000,"Check" \n "New Player"};
item61[] = {"check_1_new__pla",4,218,-147.159637,930.680786,-47.159637,980.680786,0.000000,"check 1 new " \n "player"};
item62[] = {"true",4,218,-150.000000,-325.000000,-60.000000,-275.000000,0.000000,"true"};
item63[] = {"Process_1",2,250,-25.000000,-275.000000,75.000000,-225.000000,0.000000,"Process"};
item64[] = {"Wait_ArmA_Loading",4,218,-150.000000,-225.000000,-50.000000,-175.000000,0.000000,"Wait ArmA" \n "Loading Screen" \n "Done"};
item65[] = {"Start_Loading_Sc",2,250,-25.000000,-175.000000,75.000000,-125.000000,0.000000,"Start Loading" \n "Screen"};
item66[] = {"Timeout_",4,218,125.000000,975.000000,225.000000,1025.000000,0.000000,"" \n "Timeout" \n ""};
item67[] = {"ERROR_Player_Setup",2,250,275.000000,975.000000,375.000000,1025.000000,0.000000,"ERROR" \n "Player Setup" \n "Invalid"};
item68[] = {"",7,210,471.000000,996.000000,479.000000,1004.000000,0.000000,""};
item66[] = {"Timeout_",4,218,117.899048,1101.397339,217.899048,1151.397339,0.000000,"" \n "Timeout" \n ""};
item67[] = {"ERROR_Player_Setup",2,250,267.899048,1101.397339,367.899048,1151.397339,0.000000,"ERROR" \n "Player Setup" \n "Invalid"};
item68[] = {"",7,210,463.899048,1122.397339,471.899048,1130.397339,0.000000,""};
item69[] = {"Server_Version_C",2,250,-25.000000,475.000000,75.000000,525.000000,0.000000,"Server Version" \n "Check"};
item70[] = {"Version_Okay",4,218,-125.000000,525.000000,-25.000000,575.000000,0.000000,"Version" \n "Okay"};
item71[] = {"",7,210,471.000000,496.000000,479.000000,504.000000,0.000000,""};
@ -86,6 +86,11 @@ item81[] = {"Timeout",4,218,-350.000000,750.000000,-250.000000,800.000000,0.0000
item82[] = {"Send_character_s",2,250,-400.000000,825.000000,-300.000000,875.000000,0.000000,"Send" \n "character" \n "selection"};
item83[] = {"Process_3",2,250,-25.000000,775.000000,75.000000,825.000000,0.000000,"Process"};
item84[] = {"ERROR_Server_not_4",2,250,275.000000,775.000000,375.000000,825.000000,0.000000,"ERROR" \n "Server not" \n "Response"};
item85[] = {"Check_New_Player_1",2,250,-29.260529,995.716492,70.739471,1045.716309,0.000000,"Check" \n "New Player" \n "Setup"};
item86[] = {"check_2_new__pla",4,4314,-154.260574,1044.296387,-54.260574,1094.296387,0.000000,"check 2 new " \n "player"};
item87[] = {"Timeout_No_Respo",4,218,127.840363,997.136780,227.840363,1047.136475,0.000000,"Timeout" \n "No Response"};
item88[] = {"ERROR_Server_not_5",2,250,266.478851,995.716614,366.478851,1045.716309,0.000000,"ERROR" \n "Server not" \n "Response"};
item89[] = {"",7,210,466.446442,1000.643677,474.446442,1008.643677,0.000000,""};
link0[] = {0,62};
link1[] = {2,3};
link2[] = {3,7};
@ -109,7 +114,7 @@ link19[] = {18,19};
link20[] = {18,75};
link21[] = {19,72};
link22[] = {20,21};
link23[] = {21,68};
link23[] = {21,89};
link24[] = {22,84};
link25[] = {23,25};
link26[] = {24,50};
@ -154,7 +159,7 @@ link64[] = {58,52};
link65[] = {59,58};
link66[] = {60,15};
link67[] = {60,61};
link68[] = {61,27};
link68[] = {61,85};
link69[] = {62,63};
link70[] = {63,64};
link71[] = {64,65};
@ -183,8 +188,14 @@ link93[] = {82,76};
link94[] = {83,16};
link95[] = {83,22};
link96[] = {84,31};
globals[] = {0.000000,0,0,0,0,640,480,1,247,6316128,1,-279.414825,540.037537,1629.530029,374.077881,577,884,1};
window[] = {2,-1,-1,-1,-1,819,52,1036,52,3,595};
link97[] = {85,86};
link98[] = {85,87};
link99[] = {86,27};
link100[] = {87,88};
link101[] = {88,89};
link102[] = {89,68};
globals[] = {0.000000,0,0,0,0,640,480,1,258,6316128,1,-228.686249,247.871552,1378.466309,648.349915,577,884,1};
window[] = {2,-1,-1,-1,-1,845,78,1062,78,3,595};
*//*%FSM</HEAD>*/
class FSM
{
@ -517,7 +528,7 @@ class FSM
priority = 0.000000;
to="ERROR_Server_not_3";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"(diag_tickTime - _myTime) > 120"/*%FSM</CONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"(diag_tickTime - _myTime) > 30"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
@ -615,7 +626,7 @@ class FSM
priority = 0.000000;
to="ERROR_Player_Setup";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"(diag_tickTime - _myTime) > 60"/*%FSM</CONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"(diag_tickTime - _myTime) > 30"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
@ -1044,48 +1055,37 @@ class FSM
name = "Check_New_Player";
itemno = 60;
init = /*%FSM<STATEINIT""">*/"_myTime = diag_tickTime;" \n
"" \n
"player reveal _playerObject;" \n
"" \n
"_playerPos = getpos _playerObject;" \n
"" \n
"""Loading Player Inventory... Please wait!"" call Epoch_updateLoadingScreen;" \n
"progressLoadingScreen 0.6;" \n
""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "check_new__player">*/
class check_new__player
/*%FSM<LINK "check_1_new__pla">*/
class check_1_new__pla
{
itemno = 61;
priority = 0.000000;
to="Setup_Player_Obj";
to="Check_New_Player_1";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"" \n
"_state = false;" \n
condition=/*%FSM<CONDITION""">*/"_state = false;" \n
"_playerCheck = !(isNull _playerObject);" \n
"_playerCheckSetup = false;" \n
"_playerCheckObjectsReady = false;" \n
"_playerCheckFinal = false;" \n
"_PlayerPosCheck = false;" \n
"_playerCheckMass = false;" \n
"if (_playerCheck) then {" \n
" _playerCheckSetup = _playerObject getVariable [""SETUP"",false];" \n
" if (_playerCheckSetup) then {" \n
" _playerCheckObjectsReady = _playerPos nearObjectsReady 10;" \n
" if (_playerCheckObjectsReady) then {" \n
" _playerCheckFinal = (_mass isEqualTo (loadAbs _playerObject));" \n
" if (_playerCheckFinal) then {" \n
" _state = true;" \n
" };" \n
" _PlayerPosCheck = !((_playerObject getVariable [""FinalDest"",[]]) isequalto []);" \n
" if (_PlayerPosCheck) then {" \n
" _playerCheckMass = (_loadabs == (loadabs _playerObject));" \n
" if (_playerCheckMass) then {" \n
" _state = true;" \n
" };" \n
" };" \n
"};" \n
"if (_debug) then {" \n
" diag_log format[""DEBUG: Checking Player Object: %1"", [""FAILED"",""OK""] select _playerCheck];" \n
" diag_log format[""DEBUG: Checking Player is setup: %1"", [""FAILED"",""OK""] select _playerCheckSetup];" \n
" diag_log format[""DEBUG: Checking world preloaded: %1"", [""FAILED"",""OK""] select _playerCheckObjectsReady];" \n
" diag_log format[""DEBUG: Final Player mass check: %1 (%2 != %3)"", [""FAILED"",""OK""] select _playerCheckFinal, _mass, (loadAbs _playerObject)];" \n
" diag_log format[""DEBUG: Pos check: %1 == %2"", getpos _playerObject, getpos player];" \n
" diag_log format[""DEBUG: Checking Player PosVar: %1"", [""FAILED"",""OK""] select _PlayerPosCheck];" \n
" diag_log format[""DEBUG: Final Player mass check: %1 (%2 != %3)"", [""FAILED"",""OK""] select _playerCheckMass, _loadabs, (loadabs _playerObject)];" \n
"};" \n
"_state"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
@ -1098,7 +1098,7 @@ class FSM
priority = 0.000000;
to="ERROR_Server_not";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"(diag_tickTime - _myTime) > 120"/*%FSM</CONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"(diag_tickTime - _myTime) > 30"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
@ -1373,7 +1373,7 @@ class FSM
priority = 0.000000;
to="ERROR_Server_not_4";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"(diag_tickTime - _myTime) > 120"/*%FSM</CONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"(diag_tickTime - _myTime) > 30"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
@ -1388,7 +1388,7 @@ class FSM
action=/*%FSM<ACTION""">*/"_playerObject = _C_SET deleteAt 0;" \n
"_playerVariables = _C_SET deleteAt 0;" \n
"_currentWeapon = _C_SET deleteAt 0;" \n
"_mass = _C_SET deleteAt 0;" \n
"_loadabs = _C_SET deleteAt 0;" \n
"" \n
"Epoch_my_GroupUID = _C_SET deleteAt 0;" \n
"Epoch_my_tempGroupUID = """";" \n
@ -1436,6 +1436,103 @@ class FSM
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "Check_New_Player_1">*/
class Check_New_Player_1
{
name = "Check_New_Player_1";
itemno = 85;
init = /*%FSM<STATEINIT""">*/"_myTime = diag_tickTime;" \n
"_playerPos = (_playerObject getvariable [""FinalDest"",[[0,0,0],0]]) select 0;" \n
"[player,_playerobject] remoteexec [""EPOCH_server_SetFinalPlayerPos"",2];" \n
"""Setting final Player Position... Please wait!"" call Epoch_updateLoadingScreen;" \n
"progressLoadingScreen 0.7;" \n
""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "Timeout_No_Respo">*/
class Timeout_No_Respo
{
itemno = 87;
priority = 0.000000;
to="ERROR_Server_not_5";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"(diag_tickTime - _myTime) > 30"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
/*%FSM<LINK "check_2_new__pla">*/
class check_2_new__pla
{
itemno = 86;
priority = 0.000000;
to="Setup_Player_Obj";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"_state = false;" \n
"_playerCheck = !(isNull _playerObject);" \n
"_playerCheckSetup = false;" \n
"_playerCheckObjectsReady = false;" \n
"_playerPosCheck = false;" \n
"_HiddenCheck = false;" \n
"if (_playerCheck) then {" \n
" _playerCheckSetup = _playerObject getVariable [""SETUP"",false];" \n
" if (_playerCheckSetup) then {" \n
" _playerCheckObjectsReady = _playerPos nearObjectsReady 10;" \n
" if (_playerCheckObjectsReady) then {" \n
" _playerPosCheck = (getposatl _playerObject distance _playerPos < 100);" \n
" if (_playerPosCheck) then {" \n
" _HiddenCheck = !(isObjectHidden _playerObject);" \n
" if (_HiddenCheck) then {" \n
" _state = true;" \n
" };" \n
" };" \n
" };" \n
" };" \n
"};" \n
"if (_debug) then {" \n
" diag_log format[""DEBUG: Checking Player Object: %1"", [""FAILED"",""OK""] select _playerCheck];" \n
" diag_log format[""DEBUG: Checking Player is setup: %1"", [""FAILED"",""OK""] select _playerCheckSetup];" \n
" diag_log format[""DEBUG: Checking world preloaded: %1"", [""FAILED"",""OK""] select _playerCheckObjectsReady];" \n
" diag_log format[""DEBUG: Pos check: _playerObj: %1 - Player: %2 - dist: %3"", getposatl _playerObject, _playerPos, getposatl _playerObject distance _playerPos];" \n
" diag_log format[""DEBUG: Checking is Object is visible: %1"", [""FAILED"",""OK""] select _HiddenCheck];" \n
"};" \n
"_state"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "ERROR_Server_not_5">*/
class ERROR_Server_not_5
{
name = "ERROR_Server_not_5";
itemno = 88;
init = /*%FSM<STATEINIT""">*/"_msg = ""Authentication Failed, Disconnect and try again"";" \n
"_msg call Epoch_updateLoadingScreen;" \n
"diag_log _msg;" \n
"" \n
"_rejectPlayer = {" \n
" PLAYER_REJECT_NoResponse2 = true;" \n
" publicVariableServer ""PLAYER_REJECT_NoResponse2"";" \n
"};"/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "true">*/
class true
{
itemno = 32;
priority = 0.000000;
to="Display_Message";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"true"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
};
initState="INIT";
finalStates[] =

View File

@ -0,0 +1,130 @@
/*
Author: He-Man
Contributors:
Description: BaseCam Script
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/release/Sources/epoch_code/compile/EPOCH_CamUse.sqf
*/
private ["_mycams","_buildingJammerRange","_curcam"];
_mycams = EPOCH_BaseCams select {(_x getVariable["BUILD_OWNER", "-1"]) in [getPlayerUID player, Epoch_my_GroupUID]};
if (["CfgEpochClient", "BaseCamOnlyHome",true] call EPOCH_fnc_returnConfigEntryV2) then {
_buildingJammerRange = ["CfgEpochClient", "buildingJammerRange",75] call EPOCH_fnc_returnConfigEntryV2;
_mycams = _mycams select {!(((nearestobjects [_x,["Plotpole_EPOCH"],_buildingJammerRange]) select {(_x getVariable["BUILD_OWNER", "-1"]) in [getPlayerUID player, Epoch_my_GroupUID]}) isequalto [])};
};
if !(_mycams isequalto []) then {
_curcam = _mycams find Epoch_ActiveCam;
if (_curcam > -1 && (count _mycams) > (_curcam + 1)) then {
Epoch_ActiveCam = _mycams select (_curcam + 1);
}
else {
Epoch_ActiveCam = _mycams select 0;
};
}
else {
Epoch_ActiveCam = objnull;
};
if !(isnull (finddisplay -1200)) exitwith {};
if (isnull Epoch_ActiveCam) exitwith {
["No Camera found",5] call Epoch_Message;
};
_mycams spawn {
private ["_mycams","_display","_AutoCam","_ActiveCam","_campos","_CamFov","_CamDir","_CamDist","_EpochCam","_targetheight","_targetpos","_dirs","_intensity","_sharpness","_h","_oldalpha","_newalpha"];
_mycams = _this;
createdialog 'Epoch_CamDialog';
waituntil {!isnull finddisplay -1200};
_display = finddisplay -1200;
(_display displayctrl 1000) ctrlsettext format ["Cam %1",(_mycams find Epoch_ActiveCam) + 1];
(_display displayctrl 1001) ctrlsetstructuredtext parseText format [
"<t align='center' color='#FFFF00' size='1'>Controls:</t><br/><br/>Cam Up: %1<br/>Cam Down: %2<br/>Cam Left: %3<br/>Cam Right: %4<br/>Zoom In: %5<br/>Zoom Out: %6<br/><br/>AutoCam: %7<br/>NextCam: %8",
keyName Epoch_KB_BaseCamUp,keyName Epoch_KB_BaseCamDown,keyName Epoch_KB_BaseCamLeft,keyName Epoch_KB_BaseCamRight,keyName Epoch_KB_BaseCamZoomIn,keyName Epoch_KB_BaseCamZoomOut,keyName Epoch_KB_BaseCamAutoCam,keyName Epoch_KB_BaseCamNextCam
];
Epoch_AutoCam = true;
_AutoCam = Epoch_AutoCam;
Epoch_CamAdjust = [0,0,0];
_ActiveCam = Epoch_ActiveCam;
_campos = Epoch_ActiveCam getRelPos [0.2,180];
_campos set [2,(getposatl Epoch_ActiveCam select 2)];
if (isnil "Epoch_CamFilmGrain") then {
Epoch_CamFilmGrain = ppEffectCreate ["FilmGrain", 2000 + 25];
};
Epoch_CamFilmGrain ppEffectEnable true;
_intensity = ((player distance Epoch_ActiveCam) / 10000) min 1;
_sharpness = 1.25 - _intensity;
Epoch_CamFilmGrain ppEffectAdjust [_intensity,_sharpness,2.01,0.75,1.0,true];
Epoch_CamFilmGrain ppEffectCommit 0;
_CamFov = 0.7;
_CamDir = 0;
_CamDist = 250;
_EpochCam = 'camera' camCreate _campos;
showCinemaBorder true;
_EpochCam cameraEffect ['internal', 'front'];
_EpochCam camCommit 0;
_targetheight = ((getposasl Epoch_ActiveCam) select 2)-50;
_targetpos = Epoch_ActiveCam getRelPos [_CamDist, 180+_CamDir];
_targetpos set [2,_targetheight];
if !(surfaceiswater _targetpos) then {
_targetpos = ASLtoATL _targetpos;
};
_EpochCam camSetTarget _targetpos;
_EpochCam camCommit 0;
_dirs = [5,10,15,20,25,30,35,40,45,40,35,30,25,20,15,10,5,0,-5,-10,-15,-20,-25,-30,-35,-40,-45,-40,-35,-30,-25,-20,-15,-10,-5,0];
while {!isnull _display} do {
Epoch_CamAdjust params ["_dir","_height","_zoom"];
_AutoCam = Epoch_AutoCam;
if !(_ActiveCam isequalto Epoch_ActiveCam) then {
_ActiveCam = Epoch_ActiveCam;
camDestroy _EpochCam;
_campos = Epoch_ActiveCam getRelPos [0.2,180];
_campos set [2,(getposatl Epoch_ActiveCam select 2)];
_CamFov = 0.7;
_CamDir = 0;
_EpochCam = 'camera' camCreate _campos;
showCinemaBorder true;
_EpochCam cameraEffect ['internal', 'front'];
_EpochCam camCommit 0;
_targetheight = ((getposasl Epoch_ActiveCam) select 2)-50;
_intensity = ((player distance Epoch_ActiveCam) / 10000) min 1;
_sharpness = 1.25 - _intensity;
Epoch_CamFilmGrain ppEffectAdjust [_intensity,_sharpness,2.01,0.75,1.0,true];
Epoch_CamFilmGrain ppEffectCommit 0;
(_display displayctrl 1000) ctrlsettext format ["Cam %1",(_mycams find Epoch_ActiveCam) + 1];
};
if !(Epoch_AutoCam) then {
_targetheight = ((_targetheight + _height) min 50) max -150;
_CamDir = ((_CamDir + _dir) max -45) min 45;
_CamFov = ((_CamFov + _zoom) min 1.25) max 0.35;
}
else {
_targetheight = ((getposasl Epoch_ActiveCam) select 2)-50;
_CamFov = 0.7;
_CamDir = _dirs deleteat 0;
_dirs pushback _CamDir;
};
_targetpos = Epoch_ActiveCam getRelPos [_CamDist, 180+_CamDir];
_targetpos set [2,_targetheight];
if !(surfaceiswater _targetpos) then {
_targetpos = ASLtoATL _targetpos;
};
_EpochCam camSetTarget _targetpos;
_EpochCam camSetFov _CamFov;
_EpochCam camCommit 0.75;
Epoch_CamAdjust = [0,0,0];
waitUntil {camCommitted _EpochCam || isnull _display || isnull Epoch_ActiveCam || !(_ActiveCam isequalto Epoch_ActiveCam)};
if (isnull Epoch_ActiveCam) exitwith {};
};
player cameraEffect ['Terminate', 'FRONT'];
camDestroy _EpochCam;
_display closedisplay 0;
Epoch_ActiveCam = objnull;
Epoch_CamFilmGrain ppEffectEnable false;
};

View File

@ -0,0 +1,57 @@
/*
Author: He-Man - EpochMod.com
Contributors:
Description:
Epoch use Defibrillator function
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/release/Sources/epoch_code/compile/EPOCH_DefibrillatorUse.sqf
*/
private ["_item","_energyneeded","_totalDefis","_CurDefiArr"];
params ["_unit"];
if (isplayer _unit) then {
_item = 'ItemDefibrillator';
if (_item in magazines player) then {
_energyneeded = 3;
_totalDefis = (magazinesammo player) select {(_x select 0) isequalto _item};
_CurDefiArr = [];
{
if ((_x select 1) >= _energyneeded) exitwith {
_CurDefiArr = _totalDefis deleteat _foreachindex;
};
} foreach _totalDefis;
if (_CurDefiArr isequalto []) exitwith {
["Defibrillator needs more Energy",5] call Epoch_Message;
};
if ((_CurDefiArr select 1) - _energyneeded > 0) then {
_CurDefiArr set [1,(_CurDefiArr select 1) - _energyneeded];
_totalDefis pushback _CurDefiArr;
};
player removemagazines _item;
{
_x call EPOCH_fnc_addMagazineOverflow;
} foreach _totalDefis;
_unit spawn {
player playMove 'AinvPknlMstpSnonWrflDnon_medic0';
player playMove 'AinvPknlMstpSnonWrflDnon_medicEnd';
uisleep 8;
if (alive player && isplayer _this) then {
[_this,player,Epoch_personalToken] remoteExec ['EPOCH_server_revivePlayer',2];
};
};
}
else {
['You need a Defibrillator to Revive',5] call Epoch_Message;
};
}
else {
['This Player can not be revived',5] call Epoch_Message;
};

View File

@ -12,10 +12,14 @@
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/EPOCH_PutHandler.sqf
*/
private _class = param [2];
params ["_unit", "_container", "_class"];
//Radio Check
if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _class)) == "ItemRadio") then {
if !(_class in(assignedItems player)) then {
EPOCH_equippedItem_PVS = [_class,false,player];
};
};
if (_class in ["EnergyPack","EnergyPackLg"] && (typeof _container) in ["SolarCharger_EPOCH","SolarChargerXL_EPOCH"]) then {
["Charging ...",5,[[0,1,0,0.2],[1,1,1,1]]] call Epoch_Message;
};

View File

@ -49,6 +49,10 @@ if (configName(inheritsFrom(configFile >> "CfgWeapons" >> _item)) == "ItemRadio"
};
};
if (_item in ["EnergyPack","EnergyPackLg"] && (typeof _container) in ["SolarCharger_EPOCH","SolarChargerXL_EPOCH"]) then {
["Stop Charging ...",5,[[1,0,0,0.2],[1,1,1,1]]] call Epoch_Message;
};
// Unisex vest check
_woman = getNumber(configFile >> "CfgVehicles" >> (typeOf player) >> "woman");
_config = configfile >> "cfgweapons" >> _item;

View File

@ -42,13 +42,32 @@ if (_inputCount >= 3) then {
_removeItem = {([player,_this] call BIS_fnc_invRemove) == 1};
_unifiedInteract = {
private _removed = _item call _removeItem;
private ["_removed","_multi","_maxMagRnd","_totalMags","_remove"];
_removed = false;
_multi = 1;
_maxMagRnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count");
if (_maxMagRnd > 1) then {
_totalMags = (magazinesammo player) select {(_x select 0) isequalto _item};
if !(_totalMags isequalto []) then {
_remove = _totalMags deleteat 0;
_removed = true;
_remove params ["_class","_rounds"];
_multi = _rounds / _maxMagRnd;
player removemagazines _item;
{
_x call EPOCH_fnc_addMagazineOverflow;
} foreach _totalMags;
};
}
else {
_removed = _item call _removeItem;
};
if (_removed) then {
if (_interactReturnOnUse != "") then {
_interactReturnOnUse call EPOCH_fnc_addItemOverflow;
};
{
_output = _x call EPOCH_giveAttributes;
_output = [_x select 0, round ((_x select 1) * _multi)] call EPOCH_giveAttributes;
if (_output != "") then {
[_output, 5] call Epoch_message_stack;
};
@ -412,6 +431,47 @@ switch _interactOption do {
[format["%1 is not needed at this time",_item call EPOCH_itemDisplayName], 5] call Epoch_message;
};
};
case 17: { // Defibrillator
_maxMagRnd = getnumber (configfile >> "cfgMagazines" >> _item >> "count");
_totalDefis = (magazinesammo player) select {(_x select 0) isequalto _item};
_totalMags = (magazinesammo player) select {(_x select 0) in ["EnergyPackLg","EnergyPack"]};
if (_totalDefis isequalto []) exitwith {};
if !(_totalMags isequalto []) then {
_CurDefiArr = [];
{
if ((_x select 1) < _maxMagRnd) exitwith {
_CurDefiArr = _totalDefis deleteat _foreachindex;
};
} foreach _totalDefis;
if (_CurDefiArr isequalto []) exitwith {
["Defibrillator is already fully charged",5] call Epoch_Message;
};
_remove = _totalMags deleteat 0;
_remove params ["_class","_rounds"];
_charge = _rounds min (_maxMagRnd - (_CurDefiArr select 1));
if (_rounds - _charge > 0) then {
_remove set [1,_rounds - _charge];
_totalMags pushback _remove;
};
if (_charge > 0) then {
_CurDefiArr set [1,(_CurDefiArr select 1) + _charge];
_totalDefis pushback _CurDefiArr;
player removemagazines _item;
player removemagazines "EnergyPackLg";
player removemagazines "EnergyPack";
{
_x call EPOCH_fnc_addMagazineOverflow;
} foreach _totalMags;
{
_x call EPOCH_fnc_addMagazineOverflow;
} foreach _totalDefis;
[format ["Recharged Defibrillator with %1 Energy",_charge],5] call Epoch_Message;
};
}
else {
["You need an Energy Pack",5] call Epoch_Message;
};
};
default {
["Found nothing", 5] call Epoch_message;

View File

@ -23,7 +23,7 @@
BOOL
*/
//[[[cog import generate_private_arrays ]]]
private ["_alljammer","_buildingAllowed","_buildingCountLeader","_buildingCountLimit","_buildingCountPerMember","_buildingJammerRange","_bypassJammer","_c","_cfgBaseBuilding","_config","_ghostClass","_isAllowed","_jammer","_jammerGLOnly","_jammerPerGroup","_limitNearby","_maxBuildingHeight","_membercount","_minJammerDistance","_myPosATL","_nearestJammer","_obj","_objType","_objectscount","_ownedJammerExists","_range","_restricted","_restrictedArray","_restrictedLocations","_restrictedLocationsArray","_restrictedLocationsRange","_simulClass","_staticClass","_storageCountLeader","_storageCountLimit","_storageCountPerMember","_useGroupCountLimits","_useSplitCountLimits"];
private ["_CamCountLimit","_alljammer","_buildingAllowed","_buildingCountLeader","_buildingCountLimit","_buildingCountPerMember","_buildingJammerRange","_bypassJammer","_c","_cfgBaseBuilding","_config","_ghostClass","_isAllowed","_jammer","_jammerGLOnly","_jammerPerGroup","_limitNearby","_maxBuildingHeight","_membercount","_minJammerDistance","_myPosATL","_nearestJammer","_obj","_objType","_objectscount","_ownedJammerExists","_range","_restricted","_restrictedArray","_restrictedLocations","_restrictedLocationsArray","_restrictedLocationsRange","_simulClass","_staticClass","_storageCountLeader","_storageCountLimit","_storageCountPerMember","_useGroupCountLimits","_useSplitCountLimits"];
//[[[end]]]
_buildingAllowed = true;
@ -49,6 +49,7 @@ _storageCountPerMember = getNumber(_config >> "storageCountPerMember");
_minJammerDistance = getNumber(_config >> "minJammerDistance");
_maxBuildingHeight = getNumber(_config >> "maxBuildingHeight");
_jammerPerGroup = getNumber(_config >> "jammerPerGroup");
_CamCountLimit = getNumber(_config >> "maxCams");
if(getNumber(_config >> "useGroupCountLimits") == 0)then{_useGroupCountLimits=false};
if(getNumber(_config >> "splitCountLimits") == 1)then{_useSplitCountLimits=true};
if(getNumber(_config >> "jammerGLOnly") == 0)then{_jammerGLOnly=false};
@ -59,6 +60,7 @@ if(_storageCountLeader == 0)then{_storageCountLeader = 100};
if(_minJammerDistance == 0)then{_minJammerDistance = _buildingJammerRange*3};
if(_maxBuildingHeight == 0)then{_maxBuildingHeight = 100};
if(_jammerPerGroup == 0)then{_jammerPerGroup = 2};
if(_CamCountLimit == 0)then{_CamCountLimit = 2};
// input
params ["_objType"];
@ -133,6 +135,12 @@ if !(_jammer isEqualTo []) then {
_buildingAllowed = false;
["Building Disallowed: Max building height reached",5] call Epoch_message;
};
if (_objType isequalto "BaseCam_EPOCH" && _buildingAllowed) then {
if ((count (nearestObjects[_nearestJammer,["BaseCam_EPOCH","BaseCam_SIM_EPOCH","BaseCam_Ghost_EPOCH"],_buildingJammerRange]-[_obj])) >= _CamCountLimit) then {
_buildingAllowed = false;
[format["Building Disallowed: Max %1 Cams per Base!", _CamCountLimit], 5] call Epoch_message;
};
};
};
};
}

View File

@ -101,7 +101,7 @@ if (_object isKindOf "Constructions_static_F") then {
_canUpgrade = true;
_canUpgradePartCount = 0;
_missingParts = "";
_missingParts = "Missing: ";
{
_part = _x select 0;
_req = _x select 1;
@ -111,27 +111,27 @@ if (_object isKindOf "Constructions_static_F") then {
_missingCount = _req - _partCheck;
_canUpgrade = false;
_missingParts = _missingParts + format["Missing %1 %2, ", _missingCount, (_part call EPOCH_itemDisplayName)];
_missingParts = _missingParts + format["%1 %2, ", _missingCount, (_part call EPOCH_itemDisplayName)];
};
_canUpgradePartCount = _canUpgradePartCount + _req;
} forEach _upgradeParts;
_doors = ["WoodLargeWallDoorL_EPOCH","WoodWall4_EPOCH","CinderWallDoorwHatch_EPOCH"];
_gates = ["CinderWallGarage_EPOCH"];
_doors = ["WoodLargeWallDoorL_EPOCH","WoodWall4_EPOCH","CinderWallDoorwHatch_EPOCH","WoodStairs3_EPOCH"];
_gates = ["CinderWallGarage_EPOCH","WoodWallGarage_EPOCH","MetalWallGarage_EPOCH"];
if (_canUpgrade) then {
_upgradeto = _upgrade select 0;
if (_upgradeto in _doors) then {
_countdoors = count (nearestobjects [_nearestJammer,_doors,_buildingJammerRange]);
if (_countdoors >= _maxdoors) then {
_canUpgrade = false;
_missingParts = _missingParts + format["Can not upgrade to locked Door! Max %1 allowed per Base!", _maxdoors];
_missingParts = format["Can not upgrade to locked Door / Stairs! Max %1 allowed per Base!", _maxdoors];
};
};
if (_upgradeto in _gates) then {
_countgates = count (nearestobjects [_nearestJammer,_gates,_buildingJammerRange]);
if (_countgates >= _maxgates) then {
_canUpgrade = false;
_missingParts = _missingParts + format["Can not upgrade to Gate! Max %1 allowed per Base!", _maxgates];
_missingParts = format["Can not upgrade to Gate! Max %1 allowed per Base!", _maxgates];
};
};
};

View File

@ -13,7 +13,7 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fn_returnConfigEntryV2.sqf
Example:
_sapperRndChance = ["CfgEpochClient", "sapperRngChance", 100] call EPOCH_fnc_returnConfigEntryV2;
_config = ["CfgEpochClient", "sapperRngChance", 100] call EPOCH_fnc_returnConfigEntryV2;
Parameter(s):
_this select 0: STRING - Config Class
@ -24,7 +24,7 @@
MIXED
*/
//[[[cog import generate_private_arrays ]]]
private ["_config","_finalconfig","_missionconfig","_sapperRndChance","_varData"];
private ["_config","_finalconfig","_missionconfig","_varData"];
//[[[end]]]
params ["_configClass","_variableName","_defaultData"];
_varData = _defaultData;

View File

@ -37,7 +37,7 @@ switch true do {
if (!isNull cursorTarget) then {
_cursorTarget = cursorTarget;
_repaired = false;
if ((player distance _cursorTarget) <= 6) then {
if ((player distance _cursorTarget) <= (((SizeOf (TypeOf _cursorTarget))/2) max 6) min 12) then {
_attachments = handgunItems player;
_heal = false;
if (_cursorTarget isKindOf "Man") then {
@ -97,12 +97,14 @@ switch true do {
};
case (_ammo isKindOf "B_Swing" || _ammo isKindOf "B_Stick") : {
player playActionNow "SledgeSwing";
if (_weapon in ["MeleeSword","Power_Sword"]) then {
call EPOCH_mineRocks;
call EPOCH_chopWood;
};
if (_weapon isEqualTo "MeleeRod") then {
call EPOCH_fish;
}
else {
call EPOCH_mineRocks;
if (_weapon in ["MeleeSword","Power_Sword"]) then {
call EPOCH_chopWood;
};
};
};
case (_ammo isKindOf "ChainSaw_Bullet"): {

View File

@ -161,10 +161,10 @@ if (vehicle player == player) then {
};
if (Epoch_target iskindof 'Const_Ghost_EPOCH') then {
switch (_dikCode) do {
case eXpoch_keysVectorTiltL: {_adj = 1;if(_shift)then{_adj = 2.5};if(_alt)then{_adj = 0.5};EPOCH_buildDirectionRoll = (EPOCH_buildDirectionRoll - _adj) max -180; EPOCH_doRotate = true; _handled = true };
case eXpoch_keysVectorTiltR: {_adj = 1;if(_shift)then{_adj = 2.5};if(_alt)then{_adj = 0.5};EPOCH_buildDirectionRoll = (EPOCH_buildDirectionRoll + _adj) min 180; EPOCH_doRotate = true; _handled = true };
case eXpoch_keysVectorTiltAwy: {_adj = 1;if(_shift)then{_adj = 2.5};if(_alt)then{_adj = 0.5};EPOCH_buildDirectionPitch = (EPOCH_buildDirectionPitch - _adj) max -180; EPOCH_doRotate = true; _handled = true };
case eXpoch_keysVectorTiltTwd: {_adj = 1;if(_shift)then{_adj = 2.5};if(_alt)then{_adj = 0.5};EPOCH_buildDirectionPitch = (EPOCH_buildDirectionPitch + _adj) min 180; EPOCH_doRotate = true; _handled = true };
case eXpoch_keysVectorTiltL: {_adj = 1;if(_shift)then{_adj = 2.5};if(_alt)then{_adj = 0.5};EPOCH_buildDirectionRoll = (EPOCH_buildDirectionRoll - _adj) max -EPOCH_MaxBuildingTilt; EPOCH_doRotate = true; _handled = true };
case eXpoch_keysVectorTiltR: {_adj = 1;if(_shift)then{_adj = 2.5};if(_alt)then{_adj = 0.5};EPOCH_buildDirectionRoll = (EPOCH_buildDirectionRoll + _adj) min EPOCH_MaxBuildingTilt; EPOCH_doRotate = true; _handled = true };
case eXpoch_keysVectorTiltAwy: {_adj = 1;if(_shift)then{_adj = 2.5};if(_alt)then{_adj = 0.5};EPOCH_buildDirectionPitch = (EPOCH_buildDirectionPitch - _adj) max -EPOCH_MaxBuildingTilt; EPOCH_doRotate = true; _handled = true };
case eXpoch_keysVectorTiltTwd: {_adj = 1;if(_shift)then{_adj = 2.5};if(_alt)then{_adj = 0.5};EPOCH_buildDirectionPitch = (EPOCH_buildDirectionPitch + _adj) min EPOCH_MaxBuildingTilt; EPOCH_doRotate = true; _handled = true };
};
};
};
@ -270,19 +270,22 @@ if (_dikCode in (actionKeys "NightVision")) then {
};
if(!_ctrl && (_dikCode in (actionKeys "HeliRopeAction")))then{
if (player == vehicle player) exitwith {};
_msg = "";
if(EPOCH_ArmaSlingLoad)then{
if(driver vehicle player isEqualTo player)then{
_slung = ropeAttachedObjects vehicle player;
if(_slung isEqualTo [])then{
if!('ItemRope' in magazines player) then {
_msg = "You need rope to hook";
_handled = true;
if (["CfgEpochClient", "ActionHookRope", true] call EPOCH_fnc_returnConfigEntryV2) then {
if(driver vehicle player isEqualTo player)then{
_slung = ropeAttachedObjects vehicle player;
if(_slung isEqualTo [])then{
if!('ItemRope' in magazines player) then {
_msg = "You need rope to hook";
_handled = true;
}else{
player removeItem 'ItemRope';
};
}else{
player removeItem 'ItemRope';
player addItem 'ItemRope';
};
}else{
player addItem 'ItemRope';
};
};
}else{
@ -294,4 +297,47 @@ if(!_ctrl && (_dikCode in (actionKeys "HeliRopeAction")))then{
};
};
if (!isnull (finddisplay -1200) && !isnull Epoch_ActiveCam) then {
_multi = 1;
if (isnil 'Epoch_CamTrigger') then {
Epoch_CamTrigger = diag_ticktime - 0.2;
};
if (diag_ticktime - Epoch_CamTrigger < 0.1) then {
_multi = 3;
};
Epoch_CamTrigger = diag_ticktime;
switch _dikCode do {
case Epoch_KB_BaseCamNextCam: { /* Num Enter */
call Epoch_CamUse;
};
case Epoch_KB_BaseCamLeft: { /* Num 4 */
Epoch_AutoCam = false;
Epoch_CamAdjust = [-3*_multi,0,0];
};
case Epoch_KB_BaseCamRight: { /* Num 6 */
Epoch_AutoCam = false;
Epoch_CamAdjust = [3*_multi,0,0];
};
case Epoch_KB_BaseCamUp: { /* Num 8 */
Epoch_AutoCam = false;
Epoch_CamAdjust = [0,8*_multi,0];
};
case Epoch_KB_BaseCamDown: { /* Num 2 */
Epoch_AutoCam = false;
Epoch_CamAdjust = [0,-8*_multi,0];
};
case Epoch_KB_BaseCamZoomOut: { /* Num - */
Epoch_AutoCam = false;
Epoch_CamAdjust = [0,0,0.1*_multi];
};
case Epoch_KB_BaseCamZoomIn: { /* Num + */
Epoch_AutoCam = false;
Epoch_CamAdjust = [0,0,-0.1*_multi];
};
case Epoch_KB_BaseCamAutoCam: { /* Num 0 */
Epoch_AutoCam = true;
Epoch_CamAdjust = [0,0,0];
};
};
};
_handled

View File

@ -26,39 +26,46 @@ params [
_blocked = false;
_msg = '';
_type = typeOf _actionObj;
switch(true)do{
case (_actionName isEqualTo 'FireInflame'): {
if!('lighter_epoch' in magazines player) then {
_msg = 'You need a lighter';
_blocked = true;
}else{
[player,'lighter_epoch',-1] call EPOCH_usedItemRepack;
//[_actionObj] remoteExec ['EPOCH_server_addToFireSystem',2];
};
};
case (_actionName isEqualTo 'FirePutDown'): {
if(_type isEqualTo 'BurnBarrel_EPOCH')then{
if!('ItemFireExtinguisher' in magazines player) then {
_msg = 'You need an extinguisher';
_config = 'CfgEpochClient' call EPOCH_returnConfig;
switch(_actionName)do{
case 'FireInflame': {
if (["CfgEpochClient", "ActionFireOnLighter", true] call EPOCH_fnc_returnConfigEntryV2) then {
if!('lighter_epoch' in magazines player) then {
_msg = 'You need a lighter';
_blocked = true;
}else{
[player,'ItemFireExtinguisher',-1] call EPOCH_usedItemRepack;
[player,'lighter_epoch',-5] call EPOCH_usedItemRepack;
//[_actionObj] remoteExec ['EPOCH_server_addToFireSystem',2];
};
};
};
case (_actionName isEqualTo 'HookCargo'): {
if(EPOCH_ArmaSlingLoad)then{
if(driver vehicle player isEqualTo player)then{
_slung = ropeAttachedObjects vehicle player;
if(_slung isEqualTo [])then{
if!('ItemRope' in magazines player) then {
_msg = 'You need rope to hook';
_blocked = true;
}else{
player removeItem 'ItemRope';
};
case 'FirePutDown': {
if (["CfgEpochClient", "ActionBurnBarrelOffExtinguisher", true] call EPOCH_fnc_returnConfigEntryV2) then {
if(_type isEqualTo 'BurnBarrel_EPOCH')then{
if!('ItemFireExtinguisher' in magazines player) then {
_msg = 'You need an extinguisher';
_blocked = true;
}else{
player addItem 'ItemRope';
[player,'ItemFireExtinguisher',-1] call EPOCH_usedItemRepack;
};
};
};
};
case 'HookCargo': {
if(EPOCH_ArmaSlingLoad)then{
if (["CfgEpochClient", "ActionHookRope", true] call EPOCH_fnc_returnConfigEntryV2) then {
if(driver vehicle player isEqualTo player)then{
_slung = ropeAttachedObjects vehicle player;
if(_slung isEqualTo [])then{
if!('ItemRope' in magazines player) then {
_msg = 'You need rope to hook';
_blocked = true;
}else{
player removeItem 'ItemRope';
};
}else{
player addItem 'ItemRope';
};
};
};
}else{
@ -66,9 +73,11 @@ switch(true)do{
_blocked = true;
};
};
case (_actionName isEqualTo 'UnhookCargo'): {
case 'UnhookCargo': {
if(EPOCH_ArmaSlingLoad)then{
player addItem 'ItemRope';
if (["CfgEpochClient", "ActionHookRope", true] call EPOCH_fnc_returnConfigEntryV2) then {
player addItem 'ItemRope';
};
}else{
_msg = 'Unhook Malfunction, overrode by R3F or AdvSlingLoad';
_blocked = true;

View File

@ -44,6 +44,9 @@ EPOCH_arr_snapObjects = [];
EPOCH_prevTarget = objNull;
EPOCH_interactOption = 0;
EPOCH_playerStaminaMax = 100;
Epoch_ActiveCam = objnull;
Epoch_AutoCam = true;
Epoch_CamAdjust = [0,0,0];
{
missionNamespace setVariable [format ["EPOCH_player%1",_x],EPOCH_defaultVars select _forEachIndex];

View File

@ -57,7 +57,16 @@ _keyMap =
["Build: Vector RIGHT", "eXpoch_keysVectorTiltR", 0xCD],
["Build: Vector AWAY", "eXpoch_keysVectorTiltAwy", 0xC8],
["Build: Vector TOWARD", "eXpoch_keysVectorTiltTwd", 0xD0],
["Build: Reset Object", "eXpoch_keysVectorResetObject", 0x4C]
["Build: Reset Object", "eXpoch_keysVectorResetObject", 0x4C],
["BaseCam: NextCam","Epoch_KB_BaseCamNextCam",0x9C],
["BaseCam: Left","Epoch_KB_BaseCamLeft",0x4B],
["BaseCam: Right","Epoch_KB_BaseCamRight",0x4D],
["BaseCam: Up","Epoch_KB_BaseCamUp",0x48],
["BaseCam: Down","Epoch_KB_BaseCamDown",0x50],
["BaseCam: Zoom -","Epoch_KB_BaseCamZoomOut",74],
["BaseCam: Zoom +","Epoch_KB_BaseCamZoomIn",78],
["BaseCam: AutoCam","Epoch_KB_BaseCamAutoCam",0x52]
];
_keyMap call EPOCH_custom_KeyMap;

View File

@ -8,4 +8,18 @@ if (EPOCH_IsAutoRunning) then {
EPOCH_IsAutoRunning = false;
player switchMove "";
};
};
if (animationstate player in ['aadjpknlmstpsraswpstddown','aadjpknlmstpsraswrflddown'] && cameraview == 'GUNNER' && (player weapondirection (currentweapon player)) select 2 < -0.88) then {
_fadedblack = true;
TitleText ['Stop BugUsing!','BLACK FADED'];
}
else {
if(_fadedblack) then {
[] spawn {
uisleep 2;
TitleText ['','PLAIN DOWN'];
};
_fadedblack = false;
};
};

View File

@ -21,7 +21,7 @@ _energyValue = _chargeRate min _energyRegenMax;
_vehicle = vehicle player;
if (_vehicle != player && isEngineOn _vehicle) then {
if !(_vehicle iskindof "Bicycle") then {
_energyValue = _energyValue + 5;
_energyValue = _energyValue + _energyRegenInVeh;
};
};
if (currentVisionMode player == 1) then { //NV enabled
@ -36,8 +36,8 @@ if (currentVisionMode player == 1) then { //NV enabled
// Sets visual effect
_playerAlcohol = missionNamespace getVariable [_playerAlcoholKey, _playerAlcoholDefault];
if (_playerAlcohol > 20) then {
_drunkVal = linearConversion [0,100,_playerAlcohol,0.1,1,true];
[_drunkVal, 2] call epoch_setDrunk;
_drunkVal = linearConversion [0,100,_playerAlcohol,0,10,true];
[(ceil _drunkVal)/10, 2] call epoch_setDrunk;
} else {
[0, 2] call epoch_setDrunk;
};

View File

@ -2,7 +2,7 @@ _position = getPosATL player;
_nearestLocations = nearestLocations[player, _radioactiveLocations, 300];
EPOCH_nearestLocations = _nearestLocations;
_powerSources = nearestObjects[player, ["Land_spp_Tower_F","Land_wpp_Turbine_V2_F","Land_wpp_Turbine_V1_F","SolarGen_EPOCH","Land_Wreck_Satellite_EPOCH"], _energyRange];
_powerSources = nearestObjects[player, _energyPowerSources, _energyRange];
// TODO: add more sources and config based check instead of global var
// _nearestLocations removed as they don't support getVariable
@ -109,25 +109,26 @@ _chargeRate = 0;
if !(_powerSources isEqualTo[]) then {
_totalCapacity = 0;
{
_powerClass = typeOf _x;
_powerCap = getNumber(_cfgBaseBuilding >> _powerClass >> "powerCapacity");
_powerType = getNumber(_cfgBaseBuilding >> _powerClass >> "powerType");
if (_powerCap == 0) then {
_powerCap = 100;
};
if (_powerType == 1) then {
if (sunOrMoon < 1) then {
_powerCap = _powerCap/2;
};
};
_totalCapacity = _totalCapacity + _powerCap;
_powerClass = typeOf _x;
_powerCap = getNumber(_cfgBaseBuilding >> _powerClass >> "powerCapacity");
_powerType = getNumber(_cfgBaseBuilding >> _powerClass >> "powerType");
if (_powerCap == 0) then {
_powerCap = 100;
};
_powerCap = switch _powerType do {
case 1: {if (sunOrMoon == 1) then {_powerCap * (1-overcast)} else {(_powerCap * (1 - overcast))/2}};
case 2: {_powerCap * windstr};
case 3: {_powerCap * (1 - ((player distance _x) / _energyRange))};
default {_powerCap};
};
_totalCapacity = _totalCapacity + _powerCap;
} forEach _powerSources;
if (_totalCapacity > 0) then {
_players = player nearEntities[["Epoch_Male_F", "Epoch_Female_F"], _energyRange];
if (_players isEqualTo []) then {
_chargeRate = ceil _totalCapacity;
_chargeRate = round _totalCapacity;
} else {
_chargeRate = ceil (_totalCapacity / (count _players));
_chargeRate = round (_totalCapacity / (count _players));
};
};
};

View File

@ -13,6 +13,9 @@ EPOCH_forceUpdateNow = false;
// start alive timer
_clientAliveTimer = diag_tickTime;
// Fade Black Screen
_fadedblack = false;
// init player stat vars
_gmVarsInit = ["CfgEpochClient", "gmVars", [["Temp",98.6],["Hunger",500],["Thirst",500],["Toxicity",0],["Stamina",10],["BloodP",100],["Alcohol",0],["Radiation",0]]] call EPOCH_fnc_returnConfigEntryV2;
_gModeVarNames = _gmVarsInit apply {_x param [0,""]};
@ -122,6 +125,8 @@ _baseThirstLoss = ["CfgEpochClient", "baseThirstLoss", 2] call EPOCH_fnc_returnC
_baseAlcoholLoss = ["CfgEpochClient", "baseAlcoholLoss", 0.17] call EPOCH_fnc_returnConfigEntryV2;
_lossMultiplier = if (["CfgEpochClient", "accelerateHTALoss", true] call EPOCH_fnc_returnConfigEntryV2) then {timeMultiplier} else {1};
_energyCostNV = ["CfgEpochClient", "energyCostNV", 3] call EPOCH_fnc_returnConfigEntryV2;
_energyPowerSources = ["CfgEpochClient", "energyPowerSources", ["Land_spp_Tower_F","Land_wpp_Turbine_V2_F","Land_wpp_Turbine_V1_F","SolarGen_EPOCH","Land_Wreck_Satellite_EPOCH"]] call EPOCH_fnc_returnConfigEntryV2;
_energyRegenInVeh = ["CfgEpochClient", "energyChargeInVeh", 5] call EPOCH_fnc_returnConfigEntryV2;
_energyRegenMax = ["CfgEpochClient", "energyRegenMax", 5] call EPOCH_fnc_returnConfigEntryV2;
_energyRange = ["CfgEpochClient", "energyRange", 75] call EPOCH_fnc_returnConfigEntryV2;
_hudConfigs = ["CfgEpochClient", "hudConfigs", []] call EPOCH_fnc_returnConfigEntryV2;

View File

@ -51,9 +51,15 @@ if !(isNull EPOCH_lastNPCtradeTarget) then {
{
_item = _x;
_rounds = 1;
_onHand = false;
if (_item isequaltype []) then {
_item = _x select 0;
_rounds = _x select 1;
if ((_x select 1) isequalto "Hand") then {
_onHand = true;
}
else {
_rounds = _x select 1;
};
};
if !(_item isequalto "") then {
_maxrnd = 1;
@ -66,7 +72,7 @@ if !(isNull EPOCH_lastNPCtradeTarget) then {
_tooltip = format ["%1 rounds left in Magazine",_rounds];
};
if (_index == 0 || (tolower _item) in _FilterArray) then {
_id = lbAdd [_PlayerItemsBox, _item call EPOCH_itemDisplayName];
_id = lbAdd [_PlayerItemsBox, (_item call EPOCH_itemDisplayName) + (if (_onHand) then {" (in Hand)"} else {""})];
lbSetData [_PlayerItemsBox, _id, _item];
lbSetValue [_PlayerItemsBox, _id, _rounds];
lbSetPicture [_PlayerItemsBox, _id, _item call EPOCH_itemPicture];
@ -74,6 +80,9 @@ if !(isNull EPOCH_lastNPCtradeTarget) then {
lbSetTooltip [_PlayerItemsBox, _id, _tooltip];
lbSetColor [_PlayerItemsBox,_id,[1,(_rounds/_maxrnd),0,1]];
};
if (_onHand) then {
lbSetColor [_PlayerItemsBox,_id,[1,1,1,0.5]];
};
};
};
} forEach EPOCH_NpcTradePlayerItems;

View File

@ -13,8 +13,8 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/traders/EPOCH_npcTraderAdd.sqf
*/
private [ "_PlayerFilerDropDown","_PlayerItemsBox","_PlayerItemsOutBox","_TraderItemsOutBox","_CryptoInCtrl","_CryptoOutCtrl","_allowAdd","_uiItem","_rounds","_itemIcon","_itemColor","_errormsg","_stockLimit","_config",
"_itemClasses","_itemQtys","_qtyIndex","_limit","_sizeOut","_item","_vehicle","_itemName","_index","_maxrnd","_ItemIndex","_cryptoCount","_worth","_itemTax","_tax"
private [ "_PlayerFilerDropDown","_PlayerItemsBox","_PlayerItemsOutBox","_TraderItemsOutBox","_CryptoInCtrl","_CryptoOutCtrl","_allowAdd","_uiItem","_rounds","_itemIcon","_itemColor","_errormsg","_config",
"_sizeOut","_item","_vehicle","_itemName","_index","_maxrnd","_ItemIndex","_cryptoCount","_worth","_itemTax","_tax"
];
params ["_control","_selected"];
_selected params ["_CurControl","_id"];
@ -33,36 +33,10 @@ if !(isNull EPOCH_lastNPCtradeTarget) then {
_itemIcon = _CurControl lbPicture _id;
_itemColor = _CurControl lbColor _id;
_errormsg = "";
_stockLimit = false;
_config = 'CfgPricing' call EPOCH_returnConfig;
if (isClass (_config >> _uiItem)) then {
if (_control == _PlayerItemsOutBox) then {
_itemClasses = EPOCH_NpcTradeTraderItems select 0;
_itemQtys = EPOCH_NpcTradeTraderItems select 1;
_qtyIndex = _itemClasses find _uiItem;
if (_qtyIndex != -1) then {
_itemQty = _itemQtys select _qtyIndex;
_maxrnd = 1;
if ([_uiItem,"cfgMagazines"] call Epoch_fnc_isAny) then {
_maxrnd = getnumber (configfile >> "cfgMagazines" >> _uiItem >> "count");
};
_itemQty = _itemQty / _maxrnd;
_sizeIn = lbSize _PlayerItemsOutBox;
if (_sizeIn > 0) then {
for "_i" from 0 to (_sizeIn - 1) do {
_InItem = lbData [_PlayerItemsOutBox, _i];
if ((lbData [_PlayerItemsOutBox, _i]) == _uiItem) then {
_itemQty = _itemQty + ((lbValue [_PlayerItemsOutBox, _i])/_maxrnd);
};
};
};
_limit = ["CfgTraderLimits", _uiItem, 100] call EPOCH_fnc_returnConfigEntryV2;
if (_itemQty >= _limit) then{
_stockLimit = true;
_allowAdd = false;
};
};
if (_uiItem isKindOf "Air" || _uiItem isKindOf "Ship" || _uiItem isKindOf "LandVehicle" || _uiItem isKindOf "Tank") then {
_sizeOut = lbSize _PlayerItemsOutBox;
if (_sizeOut > 0) then {
@ -114,7 +88,12 @@ if !(isNull EPOCH_lastNPCtradeTarget) then {
lbSetPicture [_control, _index, _itemIcon];
lbSetColor [_control,_index,_itemColor];
if (_control == _PlayerItemsBox && !(_uiItem iskindof "Landvehicle" || _uiItem iskindof "SHIP" || _uiItem iskindof "AIR" || _uiItem iskindof "TANK")) then {
EPOCH_NpcTradePlayerItems pushback [_uiItem,_rounds];
if ((_itemName find " (in Hand)") > -1) then {
EPOCH_NpcTradePlayerItems pushback [_uiItem,"Hand"];
}
else {
EPOCH_NpcTradePlayerItems pushback [_uiItem,_rounds];
};
}
else {
if ([_uiItem,"cfgMagazines"] call Epoch_fnc_isAny) then {
@ -124,9 +103,15 @@ if !(isNull EPOCH_lastNPCtradeTarget) then {
lbSetTooltip [_control,_index,_tooltip];
};
};
_ItemIndex = EPOCH_NpcTradePlayerItems find [_uiItem,_rounds];
_ItemIndex = -1;
if ((_itemName find " (in Hand)") > -1) then {
_ItemIndex = EPOCH_NpcTradePlayerItems find [_uiItem,"Hand"];
};
if (_ItemIndex < 0) then {
_ItemIndex = EPOCH_NpcTradePlayerItems find _uiItem;
if (_ItemIndex < 0) then {
_ItemIndex = EPOCH_NpcTradePlayerItems find [_uiItem,_rounds];
};
};
if (_ItemIndex > -1) then {
EPOCH_NpcTradePlayerItems deleteat _ItemIndex;
@ -173,12 +158,7 @@ if !(isNull EPOCH_lastNPCtradeTarget) then {
};
}
else {
if (_stockLimit) then{
["Trader has the maximum amount of this item", 5] call Epoch_message;
}
else {
[_errormsg, 5] call Epoch_message;
};
[_errormsg, 5] call Epoch_message;
};
};
}

View File

@ -23,7 +23,13 @@ if (alive _target) then {
EPOCH_lastNPCtradeTarget = _target;
EPOCH_NpcTradePlayerItems = (items player)+(magazinesammo player);
if (primaryWeapon player != "") then {
EPOCH_NpcTradePlayerItems pushback primaryWeapon player;
EPOCH_NpcTradePlayerItems pushback [primaryWeapon player,"Hand"];
};
if (secondaryWeapon player != "") then {
EPOCH_NpcTradePlayerItems pushback [secondaryWeapon player,"Hand"];
};
if (handgunWeapon player != "") then {
EPOCH_NpcTradePlayerItems pushback [handgunWeapon player,"Hand"];
};
if (count backpackItems player == 0 && count backpackmagazines player == 0 && backpack player != "") then {
EPOCH_NpcTradePlayerItems pushback backpack player;

View File

@ -13,12 +13,13 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/traders/EPOCH_startNpcTrade.sqf
*/
private ["_PlayerItemsOutBox","_TraderItemsOutBox","_config","_current_crypto","_sizeIn","_arrayIn","_item","_rounds","_mags","_itemMags","_index","_sizeOut","_arrayOut","_itemWorth","_itemTax","_tax","_maxrnd"];
private ["_EnableTempVehTrade","_PlayerItemsOutBox","_TraderItemsOutBox","_config","_current_crypto","_sizeIn","_arrayIn","_item","_rounds","_mags","_itemMags","_index","_sizeOut","_arrayOut","_itemWorth","_itemTax","_tax","_maxrnd"];
if (!isNil "EPOCH_TRADE_STARTED") exitWith{};
if (isNull _this) exitWith{};
if (alive _this) then {
_EnableTempVehTrade = ["CfgEpochClient", "EnableTempVehTrade", false] call EPOCH_fnc_returnConfigEntryV2;
_PlayerItemsOutBox = 41501;
_TraderItemsOutBox = 41502;
_config = 'CfgPricing' call EPOCH_returnConfig;
@ -27,6 +28,11 @@ if (alive _this) then {
_arrayIn = [];
if (_sizeIn > 0) then {
for "_i" from 0 to (_sizeIn - 1) do {
_onHand = false;
_itemName = lbText [_PlayerItemsOutBox, _i];
if ((_itemName find " (in hand)") > -1) then {
_onHand = true;
};
_item = lbData [_PlayerItemsOutBox, _i];
_rounds = lbValue [_PlayerItemsOutBox, _i];
if (isClass (_config >> _item)) then{
@ -38,13 +44,36 @@ if (alive _this) then {
_itemWorth = round (_itemWorth*(_rounds/_maxrnd));
_added = false;
if ([_item, "CfgWeapons"] call EPOCH_fnc_isAny) then {
if (_item in items player) then {
if (_item in items player && !_onHand) then {
player removeItem _item;
_arrayIn pushBack [_item,_rounds];
_added = true;
}
else {
if (_item == primaryweapon player) then {
if (_item in [primaryweapon player,secondaryweapon player, handgunweapon player]) then {
_index = if (_item == primaryweapon player) then {0} else {if (_item == secondaryweapon player) then {1} else {2}};
{
if (_foreachindex > 0) then {
_weaponaddon = _x;
_count = 1;
if !(_weaponaddon isequalto [] || _weaponaddon isequalto "") then {
if (_weaponaddon isequaltype []) then {
if (count _weaponaddon > 1) then {
_weaponaddon = _x select 0;
_count = _x select 1;
};
};
if ([_weaponaddon, "CfgWeapons"] call EPOCH_fnc_isAny) then {
_weaponaddon call EPOCH_fnc_addItemOverflow;
}
else {
if ([_weaponaddon, "CfgMagazines"] call EPOCH_fnc_isAny) then {
[_weaponaddon,_count] call EPOCH_fnc_addMagazineOverflow;
};
};
};
};
} foreach ((getunitloadout player) select _index);
player removeweapon _item;
_arrayIn pushBack [_item,_rounds];
_added = true;
@ -65,7 +94,7 @@ if (alive _this) then {
if (!isNull _vehicle) then {
if (local _vehicle) then {
_vehSlot = _vehicle getVariable["VEHICLE_SLOT", "ABORT"];
if (_vehSlot != "ABORT") then {
if (_vehSlot != "ABORT" || _EnableTempVehTrade) then {
_arrayIn pushBack [_item,_rounds];
_added = true;
};

View File

@ -25,12 +25,13 @@ if (_veh iskindof "ebike_epoch") then {
};
_wheelcounter = 0;
{
_HitPointName = _x;
_Hit = (getAllHitPointsDamage _veh) select 2 select _foreachindex;
_x params ["_searchedhit","_limit1","_limit2"];
_searchedhit = tolower _searchedhit;
{
_x params ["_searchedhit","_limit1","_limit2"];
_HitPointName = tolower _x;
_Hit = (getAllHitPointsDamage _veh) select 2 select _foreachindex;
if (_searchedhit isequalto _HitPointName) then {
_wheel = ["wheel",tolower _searchedhit] call bis_fnc_instring;
_wheel = ["wheel",_searchedhit] call bis_fnc_instring;
if (_wheel) then {
_wheelcounter = _wheelcounter + 1;
};
@ -42,7 +43,7 @@ _wheelcounter = 0;
_repairs pushback _searchedhit;
};
if (!((_veh getvariable ["vehicle_slot","-1"]) isequalto "-1") && _EnableRemoveParts) then {
if (_searchedhit in ["HitLFWheel","HitLF2Wheel","HitLMWheel","HitLBWheel","HitRFWheel","HitRF2Wheel","HitRMWheel","HitRBWheel","HitEngine"]) then {
if (_searchedhit in ["hitlfwheel","hitlf2wheel","hitlmwheel","hitlbwheel","hitrfwheel","hitrf2wheel","hitrmwheel","hitrbwheel","hitengine"]) then {
_removes pushback _searchedhit;
};
};
@ -50,7 +51,7 @@ _wheelcounter = 0;
else {
if (_searchedhit isequalto "glass") then {
if ("glass" in _repairs) exitwith {};
_glass = ["glass",tolower _HitPointName] call bis_fnc_instring;
_glass = ["glass",_HitPointName] call bis_fnc_instring;
if (_glass) then {
if (_Hit >= _limit1) exitwith {
_repairs pushback _searchedhit;
@ -58,12 +59,13 @@ _wheelcounter = 0;
};
};
};
} foreach _VehicleRepairs;
} foreach ((getAllHitPointsDamage _veh) select 0);
} foreach ((getAllHitPointsDamage _veh) select 0);
} foreach _VehicleRepairs;
_repairarrays = [];
{
if (!(_x in _repairs || _x in _replaces || (["glass",tolower _x] call Bis_fnc_instring)) || _x isequalto "") then {
_HitPointName = tolower _x;
if (!(_HitPointName in _repairs || _HitPointName in _replaces || (["glass",_HitPointName] call Bis_fnc_instring)) || _x isequalto "") then {
_repairarrays pushback [_foreachindex, 0];
};
} foreach ((getAllHitPointsDamage _veh) select 0);

View File

@ -14,6 +14,7 @@
*/
private ["_secondlocalcheck","_repairarrays","_config","_VehicleRepairs","_reqiredMat","_searchname","_line","_returnmat"];
params ["_veh","_do","_hitpointname"];
_hitpointname = tolower _hitpointname;
_secondlocalcheck = false;
_returnmat = "";
_repairarrays = [];
@ -31,25 +32,28 @@ EPOCH_Vehicle_MaintainLock = true;
switch _do do {
case 'repair': {
_reqiredMat = "";
_reqiredMat = "NONE";
_searchname = _hitpointname;
if (["glass",tolower _hitpointname] call Bis_fnc_instring) then {
if (["glass",_hitpointname] call Bis_fnc_instring) then {
_searchname = "glass";
};
{
_x params ["_name","","","_repairmat"];
_name = tolower _name;
if (_searchname isequalto _name) exitwith {
_reqiredMat = _repairmat;
};
} foreach _VehicleRepairs;
if (_reqiredMat isequalto "") exitwith {
if (_reqiredMat isequalto "NONE") exitwith {
['Error - Can not find required Material',5] call Epoch_message;
};
if !(_reqiredMat in (magazines player)) exitwith {
if (!(_reqiredMat in (magazines player)) && !(_reqiredMat isequalto "")) exitwith {
_line = format ['You need %1 to repair',_reqiredMat call EPOCH_itemDisplayName];
[_line,5] call Epoch_message;
};
player removemagazine _reqiredMat;
if !(_reqiredMat isequalto "") then {
player removemagazine _reqiredMat;
};
if (_hitpointname isequalto "glass") then {
{
if (["glass",tolower _x] call Bis_fnc_instring) then {
@ -62,25 +66,28 @@ switch _do do {
};
};
case 'replace': {
_reqiredMat = "";
_reqiredMat = "NONE";
_searchname = _hitpointname;
if (["glass",tolower _hitpointname] call Bis_fnc_instring) then {
if (["glass", _hitpointname] call Bis_fnc_instring) then {
_searchname = "glass";
};
{
_x params ["_name","","","","_replacemat"];
_name = tolower _name;
if (_searchname isequalto _name) exitwith {
_reqiredMat = _replacemat;
};
} foreach _VehicleRepairs;
if (_reqiredMat isequalto "") exitwith {
if (_reqiredMat isequalto "NONE") exitwith {
['Error - Can not find required Material',5] call Epoch_message;
};
if !(_reqiredMat in (magazines player)) exitwith {
if (!(_reqiredMat in (magazines player)) && !(_reqiredMat isequalto "")) exitwith {
_line = format ['You need %1 to repair',_reqiredMat call EPOCH_itemDisplayName];
[_line,5] call Epoch_message;
};
player removemagazine _reqiredMat;
if !(_reqiredMat isequalto "") then {
player removemagazine _reqiredMat;
};
if (_hitpointname isequalto "glass") then {
{
if (["glass",tolower _x] call Bis_fnc_instring) then {
@ -100,6 +107,7 @@ switch _do do {
_searchname = _hitpointname;
{
_x params ["_name","","","","_replacemat"];
_name = tolower _name;
if (_searchname isequalto _name) exitwith {
_returnmat = _replacemat;
};

View File

@ -68,13 +68,14 @@ _respawnButton ctrlEnable false;
[_display] spawn {
disableSerialization;
params ["_display"];
_startTime = diag_tickTime+5;
_startTime = diag_tickTime+4;
waitUntil {
uiSleep 0.2;
(isNull _display) || ((_startTime - diag_tickTime) <= 0)
};
if (!isNull _display) then {
player setUnitLoadout (getUnitLoadout player);
uisleep 1; // give one second to broadcast clothing change
missionnamespace setvariable ["EPOCH_forceUpdateNow",true];
};
};

View File

@ -20,7 +20,7 @@ private ["_arr","_ctrl","_ctrlCurrent","_ctrlDefault","_ctrlEdit","_data","_defa
//[[[end]]]
params ["_ctrl"];
_display = if (typeName _ctrl isEqualTo "CONTROL") then {ctrlParent _ctrl} else {displayNull};
_display = if (_ctrl isEqualType controlNull) then {ctrlParent _ctrl} else {displayNull};
_input = if (_ctrl isEqualType "STRING") then {_ctrl} else {str _ctrl};
switch (_input) do {

View File

@ -28,7 +28,7 @@ if !(false call EPOCH_crafting_checkResources) exitWith {};
//craft button
[] spawn {
private ["_craftReturn","_needBench","_craftCount","_fnc_UILock","_itemCraftTime","_selection","_craftItem","_item","_itemName","_itemCraftTime","_itemRecipeItems","_itemType","_nearbyReq","_hasNearby","_canCraft","_wH","_nearByHolder","_wHPos"];
private ["_GiveBackRounds","_TotalroundsIn","_TotalMaxRoundsIn","_roundsCheck","_maxMagrnd","_maxMagRndTmp","_roundsCheckTmp","_magsammosearched","_craftReturn","_needBench","_craftCount","_fnc_UILock","_itemCraftTime","_selection","_craftItem","_item","_itemName","_itemCraftTime","_itemRecipeItems","_itemType","_nearbyReq","_hasNearby","_canCraft","_wH","_nearByHolder","_wHPos"];
disableSerialization;
_fnc_UILock = {
@ -53,6 +53,8 @@ if !(false call EPOCH_crafting_checkResources) exitWith {};
_needBench = {"WorkBench_EPOCH" in (_x select 3 select 1)} count _nearbyReq;
_craftCount = _craftItem param [15,1];
_craftReturn = _craftItem param [16,[]];
_BulletCalculateOnCraft = ["CfgEpochClient", "BulletCalculateOnCraft", false] call EPOCH_fnc_returnConfigEntryV2;
for "_c" from 1 to rmx_var_craftQTYOut do {
false call _fnc_UILock;
@ -64,19 +66,63 @@ if !(false call EPOCH_crafting_checkResources) exitWith {};
if !(_canCraft && rmx_var_craftingLOOPS) exitWith {};
_GiveBackRounds = 0;
_TotalroundsIn = 0;
_TotalMaxRoundsIn = 0;
_roundsCheck = false;
_maxMagrnd = (getnumber (configfile >> "cfgMagazines" >> _item >> "count")) max 1;
{
if !(_x isEqualType []) then {_x = [_x,1]};
for "_r" from 1 to (_x select 1) do {
player removeItem (_x select 0); //removes any type of item, but only if not in special slots
_x params ["_recipetype","_recipetypecount"];
_recipetype = tolower _recipetype;
_maxMagRndTmp = getnumber (configfile >> "cfgMagazines" >> _recipetype >> "count");
_roundsCheckTmp = ([_recipetype,"cfgMagazines"] call Epoch_fnc_isAny && [_item,"cfgMagazines"] call Epoch_fnc_isAny && _maxMagrnd > 1 && _maxMagRndTmp > 1 && _BulletCalculateOnCraft);
for "_r" from 1 to _recipetypecount do {
if (_roundsCheckTmp) then {
_roundsCheck = true;
_magsammosearched = [];
{
_x params ["_type","_rounds"];
if ((tolower _type) isequalto _recipetype) then {
_magsammosearched pushback _x;
};
} foreach (magazinesammo player);
_TotalMaxRoundsIn = _TotalMaxRoundsIn + _maxMagRndTmp;
_TotalroundsIn = _TotalroundsIn + ((_magsammosearched deleteat 0) select 1);
player removemagazines _recipetype;
{
_x call EPOCH_fnc_addMagazineOverflow;
} foreach _magsammosearched;
}
else {
player removeItem _recipetype; //removes any type of item, but only if not in special slots
};
};
} forEach _itemRecipeItems;
if (_roundsCheck) then {
_GiveBackRounds = (_maxMagrnd * (_TotalroundsIn / _TotalMaxRoundsIn));
};
_nearByBench = nearestObjects [player,["WorkBench_EPOCH"],3];
if (!(_nearByBench isEqualTo []) && (_needBench > 0)) then { //adds item on top of bench if bench was required
(_nearByBench select 0) addItemCargoGlobal [_item,_craftCount];
} else {
[_item,_craftCount] call EPOCH_fnc_addItemOverflow;
if (_roundsCheck) then {
(_nearByBench select 0) addMagazineAmmoCargo [_item, _craftCount, ((ceil (_GiveBackRounds / _craftCount)) min _maxMagrnd) max 1];
}
else {
(_nearByBench select 0) addItemCargoGlobal [_item,_craftCount];
};
}
else {
if (_roundsCheck) then {
for "_i" from 1 to _craftCount do {
[_item,((ceil (_GiveBackRounds / _craftCount)) min _maxMagrnd) max 1] call EPOCH_fnc_addMagazineOverflow;
};
}
else {
[_item,_craftCount] call EPOCH_fnc_addItemOverflow;
};
};
// return items

View File

@ -21,7 +21,7 @@ _arrIn = _this;
_cfg = 'CfgEpochClient' call EPOCH_returnConfig;
_Suppressed = getarray (_cfg >> "SuppressedCraftingItems");
if !(typeName (_arrIn select 0) isEqualTo "CONFIG") exitWith {[]};
if !((_arrIn select 0) isEqualType configNull) exitWith {[]};
_type0 = []; _type1 = []; _type2 = []; _type3 = []; _out = [];
{

View File

@ -32,7 +32,7 @@ if(_customCol isEqualTo [])then{
_txtCol = if((_customCol select 1)isEqualTypeAll 0) then [{_customCol select 1},{_txtCol = [1,1,1,0.95]}];
};
if !(typeName _msg isEqualTo "STRING") then { //Needed to remove quotations from strings
if !(_msg isEqualType "STRING") then { //Needed to remove quotations from strings
_msg = str (parseText str _msg); //Parses and converts text back to small string
};

View File

@ -12,7 +12,7 @@
Usage:
"TEST" call Epoch_message_stack
["===================================",5,[[0,0,0,0.2],[1,0.5,0,1]]] call Epoch_message_stack;
["World!",5,[[0,0,0,0.2],[1,1,1,1]]] call Epoch_message_stack;
["Hello",5,[[0,0,0,0.2],[1,1,1,1]]] call Epoch_message_stack;
@ -34,7 +34,7 @@ if(_customCol isEqualTo [])then{
_bgCol = if((_customCol select 0)isEqualTypeAll 0) then [{_customCol select 0},{_bgCol = [0,0,0,0.2]}];
_txtCol = if((_customCol select 1)isEqualTypeAll 0) then [{_customCol select 1},{_txtCol = [1,1,1,0.95]}];
};
if !(typeName _msg isEqualTo "STRING") then { //Needed to remove quotations from strings
if !(_msg isEqualType "STRING") then { //Needed to remove quotations from strings
_msg = str (parseText str _msg); //Parses and converts text back to small string
};
@ -53,7 +53,7 @@ rmx_var_msgStackQueue = [[_msg, _time, [_bgCol,_txtCol]] ];
_cStartPos = [safeZoneX,((_yPos - _ySize) * GUI_GRID_H + GUI_GRID_Y),safeZoneW, _ySize * GUI_GRID_H];
_ctrlArr = [1];
_fnc_reorganizeCtrls = {
if !(_ctrlArr isEqualTo []) then {
{
@ -64,7 +64,7 @@ rmx_var_msgStackQueue = [[_msg, _time, [_bgCol,_txtCol]] ];
} forEach _ctrlArr;
};
};
while {(count _ctrlArr) > 0} do {
if ((_ctrlArr select 0) isEqualTo 1) then {_ctrlArr = [];};
if !(rmx_var_msgStackQueue isEqualTo []) then {
@ -72,19 +72,19 @@ rmx_var_msgStackQueue = [[_msg, _time, [_bgCol,_txtCol]] ];
_time = diag_tickTime + (rmx_var_msgStackQueue select 0 select 1);
_col = (rmx_var_msgStackQueue select 0)select 2;
rmx_var_msgStackQueue deleteAt 0;
_c = _dsp ctrlCreate ["rmx_t1", call epoch_getIDC];
_c ctrlSetBackgroundColor (_col select 0);
_c ctrlSetText _msg;
_c ctrlSetTextColor (_col select 1);
_c ctrlSetPosition _cStartPos;
_c ctrlSetFade 1;
_c ctrlCommit 0;
_c ctrlSetFade 0;
_c ctrlCommit 0.5;
_ctrlArr pushBack [_c,_time];
call _fnc_reorganizeCtrls;
};

View File

@ -24,19 +24,21 @@ private ["_priority","_wd","_db"];
params [["_level",0,[0]],["_speed",0,[0]]];
if (isNil "rmx_var_drunkHandles") then {
_priority = 15;
_wd = ["wetdistortion",_priority] call epoch_postProcessCreate;
_db = ["dynamicBlur",_priority] call epoch_postProcessCreate;
rmx_var_drunkHandles = [_wd,_db];
// Preload defaults
[(rmx_var_drunkHandles select 0), 0, [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]] call epoch_postprocessAdjust;
[(rmx_var_drunkHandles select 1), 0, [0]] call epoch_postprocessAdjust;
};
switch _level do {
case 0:
{
rmx_var_drunkHandles call epoch_postprocessDestroy;
rmx_var_drunkHandles = nil;
(rmx_var_drunkHandles select 0) ppEffectEnable false;
(rmx_var_drunkHandles select 1) ppEffectEnable false;
};
case 0.1:
{

View File

@ -25,25 +25,25 @@ private ["_cc","_ci","_fg","_priority"];
params [["_level",0,[0]],["_speed",0,[0]] ];
if (isNil "rmx_var_RadiationHandles") then {
_priority = 16;
_fg = ["filmGrain",_priority] call epoch_postProcessCreate;
_cc = ["colorCorrections",_priority] call epoch_postProcessCreate;
_ci = ["colorInversion",_priority] call epoch_postProcessCreate;
rmx_var_RadiationHandles = [_fg,_cc,_ci];
// Preload defaults
[(rmx_var_RadiationHandles select 0), 0, [0.005,1.25,2.01,0.75,1.0,true]] call epoch_postprocessAdjust;
[(rmx_var_RadiationHandles select 1), 0, [1,1,0,[0,0,0,0],[1,1,1,1],[0.299,0.587,0.114,0],[-1,-1,0,0,0,0,0]]] call epoch_postprocessAdjust;
[(rmx_var_RadiationHandles select 2), 0, [0,0,0]] call epoch_postprocessAdjust;
};
switch _level do {
case 0:
{
rmx_var_RadiationHandles call epoch_postprocessDestroy;
rmx_var_RadiationHandles = nil;
};
case 0;
case 0.1:
{
rmx_var_RadiationHandles call epoch_postprocessDestroy;
rmx_var_RadiationHandles = nil;
(rmx_var_RadiationHandles select 0) ppEffectEnable false;
(rmx_var_RadiationHandles select 1) ppEffectEnable false;
(rmx_var_RadiationHandles select 2) ppEffectEnable false;
};
case 0.2:
{

View File

@ -83,6 +83,7 @@ EPOCH_keysActionPressed = false; //prevents EH spam
// load some frequently used configs to variables
EPOCH_maxBuildingHeight = ["CfgEpochClient", "maxBuildingHeight", 100] call EPOCH_fnc_returnConfigEntryV2;
EPOCH_MaxBuildingTilt = ["CfgEpochClient", "MaxBuildingTilt", 180] call EPOCH_fnc_returnConfigEntryV2;
Epoch_NuisanceMulti = ["CfgEpochClient", "NuisanceMulti", 0.5] call EPOCH_fnc_returnConfigEntryV2;
//ON INIT and RESPAWN

View File

@ -29,7 +29,7 @@ class CfgActionMenu
dyna_buildMode = "([10] call EPOCH_fnc_cursorTarget) call EPOCH_checkBuild;";
dyna_isVehicle = "if (!(isNull dyna_cursorTarget) && alive dyna_cursorTarget) then {((dyna_cursorTarget isKindOf 'LandVehicle') || (dyna_cursorTarget isKindOf 'Air') || (dyna_cursorTarget isKindOf 'Ship') || (dyna_cursorTarget isKindOf 'Tank'))} else {false}";
dyna_isTrader = "if (!(isNull dyna_cursorTarget) && alive dyna_cursorTarget) then {((dyna_cursorTarget isKindOf 'Man') && (dyna_cursorTarget != player) && (!isPlayer dyna_cursorTarget) && ((dyna_cursorTarget getVariable['AI_SLOT', -1]) != -1))} else {false}";
dyna_isTrader = "if (!(isNull dyna_cursorTarget) && alive dyna_cursorTarget) then {((dyna_cursorTarget != player) && (!isPlayer dyna_cursorTarget) && ((dyna_cursorTarget getVariable['AI_SLOT', -1]) != -1))} else {false}";
dyna_isPlayer = "if (!(isNull dyna_cursorTarget) && alive dyna_cursorTarget) then {((dyna_cursorTarget isKindOf 'Man') && (dyna_cursorTarget != player) && (isPlayer dyna_cursorTarget))} else {false}";
dyna_isDeadPlayer = "if (!(isNull dyna_cursorTarget) && !(alive dyna_cursorTarget)) then {(dyna_cursorTargetType in ['Epoch_Male_F','Epoch_Female_F'])} else {false}";
dyna_canAcceptTrade = "if (!(isNull EPOCH_pendingP2ptradeTarget) && alive EPOCH_pendingP2ptradeTarget) then {((EPOCH_pendingP2ptradeTarget isKindOf 'Man') && (dyna_cursorTarget isEqualTo EPOCH_pendingP2ptradeTarget))} else {false}";
@ -50,6 +50,7 @@ class CfgActionMenu
dyna_mapDeathMarker = "(((getArray(('CfgMarkerSets' call EPOCH_returnConfig) >> 'DeathMarker' >> 'markerArray') select 0) select 0) in allMapMarkers)";
dyna_AtHome = "call {_config = 'CfgEpochClient' call EPOCH_returnConfig;_buildingJammerRange = getNumber(_config >> 'buildingJammerRange');_nearjammers = nearestobjects [player,['Plotpole_EPOCH'],_buildingJammerRange];if (_nearjammers isEqualTo []) exitwith {false};_nearestJammer = _nearjammers select 0;((_nearestJammer getVariable['BUILD_OWNER', '-1']) in[getPlayerUID player, Epoch_my_GroupUID])}";
dyna_Watersource = "call {_nearObjects = nearestObjects [player, [], 2];_check = 'water';_ok = false;{if (alive _x) then {_ok = [_x, _check] call EPOCH_worldObjectType;};if (_ok) exitWith {};} forEach _nearObjects;_ok}";
};
class self

View File

@ -95,7 +95,7 @@ class base_mode_snap_direction
{
condition = "EPOCH_buildMode == 1";
action = "EPOCH_snapDirection = EPOCH_snapDirection + 1; if (EPOCH_snapDirection > 3) then {EPOCH_snapDirection = 0};[format['SNAP DIRECTION: %1°', EPOCH_snapDirection*90], 5] call Epoch_message;";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_move.paa";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_rotate.paa";
tooltip = "Build Mode: Rotate 90°";
tooltipcode = "format ['Build Mode: Switch Snap Direction to %1° (current %2°)',if (EPOCH_snapDirection < 3) then {(EPOCH_snapDirection+1)*90} else {0},EPOCH_snapDirection*90]";
};
@ -103,23 +103,30 @@ class base_mode_detach
{
condition = "EPOCH_buildMode > 0 && !isnull EPOCH_target && EPOCH_target_attachedTo isequalto player && Epoch_target iskindof 'Const_Ghost_EPOCH'";
action = "EPOCH_target_attachedTo = objnull; ['Object Detached', 5] call Epoch_message;";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_move.paa";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_detach.paa";
tooltip = "Build Mode: Detach Object";
};
class base_mode_attach
{
condition = "EPOCH_buildMode > 0 && !isnull EPOCH_target && !(EPOCH_target_attachedTo isequalto player) && Epoch_target iskindof 'Const_Ghost_EPOCH'";
action = "EPOCH_target_attachedTo = player; ['Object Attached', 5] call Epoch_message;";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_move.paa";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_attach.paa";
tooltip = "Build Mode: Attach Object";
};
class Drink
{
condition = "_nearObjects = nearestObjects [player, [], 2];_check = 'water';_ok = false;{if (alive _x) then {_ok = [_x, _check] call EPOCH_worldObjectType;};if (_ok) exitWith {};} forEach _nearObjects;_ok";
action = "if (currentweapon player == '') then {player playmove 'AinvPknlMstpSnonWnonDnon_Putdown_AmovPknlMstpSnonWnonDnon';}else {if (currentweapon player == handgunweapon player) then {player playmove 'AinvPknlMstpSrasWpstDnon_Putdown_AmovPknlMstpSrasWpstDnon';}else { player playmove 'AinvPknlMstpSrasWrflDnon_Putdown_AmovPknlMstpSrasWrflDnon';};};{_output = _x call EPOCH_giveAttributes;if (_output != '') then {[_output, 5] call Epoch_message_stack;};} foreach [['Toxicity',4,1],['Stamina',10],['Thirst',100]];";
condition = "dyna_Watersource";
action = "if (currentweapon player == '') then {player playmove 'AinvPknlMstpSnonWnonDnon_Putdown_AmovPknlMstpSnonWnonDnon';}else {if (currentweapon player == handgunweapon player) then {player playmove 'AinvPknlMstpSrasWpstDnon_Putdown_AmovPknlMstpSrasWpstDnon';}else { player playmove 'AinvPknlMstpSrasWrflDnon_Putdown_AmovPknlMstpSrasWrflDnon';};};{_output = _x call EPOCH_giveAttributes;if (_output != '') then {[_output, 5] call Epoch_message_stack;};} foreach [['Thirst',100],['Toxicity',1,1],['Stamina',10]];";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Drink.paa";
tooltip = "Drink";
};
class Wash
{
condition = "dyna_Watersource";
action = "if !('Soap_Epoch' in magazines player) exitwith {['You need a Soap to wash yourself',5] call Epoch_Message;};[] spawn {player playMove 'AinvPknlMstpSnonWrflDnon_medic0';player playMove 'AinvPknlMstpSnonWrflDnon_medicEnd';['Washing ...',5] call Epoch_Message;player removeitem 'Soap_Epoch';uisleep 6;{_output = _x call EPOCH_giveAttributes; if (_output != '') then {[_output, 5] call Epoch_message_stack;};} foreach [['Soiled',-25]];};";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Washing.paa";
tooltip = "Wash yourself";
};
class ServicePoint
{
condition = "call EPOCH_SP_Check";

View File

@ -13,7 +13,6 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_target.hpp
*/
//Build mode enabled
class build_upgrade
{
condition = "dyna_buildMode select 0";
@ -27,7 +26,7 @@ class build_remove
{
condition = "dyna_buildMode select 1";
action = "dyna_cursorTarget call EPOCH_removeBUILD;";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_remove.paa";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_trash.paa";
tooltipcode = "format['Remove %1',getText(configFile >> 'CfgVehicles' >> (typeof dyna_cursorTarget) >> 'displayName')]";
};
class build_move
@ -111,7 +110,7 @@ class select_jammer
{
condition = "dyna_cursorTargetType isEqualTo 'PlotPole_EPOCH' && (damage dyna_cursorTarget < 1)";
action = "[dyna_cursorTarget,player,Epoch_personalToken] remoteExec [""EPOCH_server_makeSP"",2];";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\spawnpoint.paa";
tooltip = "Make Spawnpoint";
};
@ -175,29 +174,29 @@ class VehMaintanance
tooltip = "Repair Vehicle";
class RepairHull
{
condition = "'HitHull' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','HitHull'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hithull' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hithull'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_HullBody.paa";
tooltip = "Repair Hull";
};
class ReplaceHull
{
condition = "'HitHull' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitHull'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hithull' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hithull'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_HullBody.paa";
tooltip = "Repair Hull";
};
class RepairEngine
{
condition = "'HitEngine' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','HitEngine'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitengine' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hitengine'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Engine.paa";
tooltip = "Repair Engine";
};
class ReplaceEngine
{
condition = "'HitEngine' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitEngine'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitengine' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitengine'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Engine.paa";
tooltip = "Replace Engine";
};
@ -210,183 +209,211 @@ class VehMaintanance
};
class RepairBody
{
condition = "'HitBody' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','HitBody'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitbody' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hitbody'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_HullBody.paa";
tooltip = "Repair Body";
};
class ReplaceBody
{
condition = "'HitBody' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitBody'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitbody' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitbody'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_HullBody.paa";
tooltip = "Repair Body";
};
class RepairFuel
{
condition = "'HitFuel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','HitFuel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitfuel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hitfuel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Fuel.paa";
tooltip = "Repair Fuel Hose";
};
class RepairMainRotor
{
condition = "'HitHRotor' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','HitHRotor'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hithrotor' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hithrotor'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_MainRotor.paa";
tooltip = "Repair Main Rotor";
};
class ReplaceFuel
{
condition = "'HitFuel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitFuel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitfuel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitfuel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Fuel.paa";
tooltip = "Replace Fuel Hose";
};
class ReplaceMainRotor
{
condition = "'HitHRotor' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitHRotor'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hithrotor' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hithrotor'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_MainRotor.paa";
tooltip = "Replace Main Rotor";
};
class RepairTailRotor
{
condition = "'HitVRotor' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','HitVRotor'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitvrotor' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hitvrotor'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_TailRotor.paa";
tooltip = "Repair Tail Rotor";
};
class ReplaceTailRotor
{
condition = "'HitVRotor' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitVRotor'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitvrotor' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitvrotor'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_TailRotor.paa";
tooltip = "Replace Tail Rotor";
};
class ReplaceWinch
{
condition = "'HitWinch' in (EPOCH_VehicleRepairs select 0) || 'HitWinch' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitWinch'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitwinch' in (EPOCH_VehicleRepairs select 0) || 'hitwinch' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitwinch'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_SLG.paa";
tooltip = "Replace Winch";
};
class RepairTireBike1
{
condition = "'hitfwheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hitfwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa";
tooltip = "Repair 1st Wheel";
};
class RepairTireBike2
{
condition = "'hitbwheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hitbwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa";
tooltip = "Repair 2nd Wheel";
};
class RepairTire1
{
condition = "'HitLFWheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','HitLFWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitlfwheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hitlfwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa";
tooltip = "Repair 1st Left Wheel";
};
class RepairTire2
{
condition = "'HitLF2Wheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','HitLF2Wheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitlf2wheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hitlf2wheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa";
tooltip = "Repair 2nd Left Wheel";
};
class RepairTire3
{
condition = "'HitLMWheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','HitLMWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitlmwheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hitlmwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa";
tooltip = "Repair 3rd Left Wheel";
};
class RepairTire4
{
condition = "'HitLBWheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','HitLBWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitlbwheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hitlbwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa";
tooltip = "Repair 4th Left Wheel";
};
class RepairTire5
{
condition = "'HitRFWheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','HitRFWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitrfwheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hitrfwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa";
tooltip = "Repair 1st Right Wheel";
};
class RepairTire6
{
condition = "'HitRF2Wheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','HitRF2Wheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitrf2wheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hitrf2wheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa";
tooltip = "Repair 2nd Right Wheel";
};
class RepairTire7
{
condition = "'HitRMWheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','HitRMWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitrmwheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hitrmwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa";
tooltip = "Repair 3rd Right Wheel";
};
class RepairTire8
{
condition = "'HitRBWheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','HitRBWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitrbwheel' in (EPOCH_VehicleRepairs select 0)";
action = "[dyna_cursorTarget,'repair','hitrbwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Wheel.paa";
tooltip = "Repair 4th Right Wheel";
};
class ReplaceTireBike1
{
condition = "'hitfwheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitfwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa";
tooltip = "Replace 1st Wheel";
};
class ReplaceTireBike2
{
condition = "'hitbwheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitbwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa";
tooltip = "Replace 2nd Wheel";
};
class ReplaceTire1
{
condition = "'HitLFWheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitLFWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitlfwheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitlfwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa";
tooltip = "Replace 1st Left Wheel";
};
class ReplaceTire2
{
condition = "'HitLF2Wheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitLF2Wheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitlf2wheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitlf2wheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa";
tooltip = "Replace 2nd Left Wheel";
};
class ReplaceTire3
{
condition = "'HitLMWheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitLMWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitlmwheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitlmwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa";
tooltip = "Replace 3rd Left Wheel";
};
class ReplaceTire4
{
condition = "'HitLBWheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitLBWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitlbwheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitlbwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa";
tooltip = "Replace 4th Left Wheel";
};
class ReplaceTire5
{
condition = "'HitRFWheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitRFWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitrfwheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitrfwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa";
tooltip = "Replace 1st Right Wheel";
};
class ReplaceTire6
{
condition = "'HitRF2Wheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitRF2Wheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitrf2wheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitrf2wheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa";
tooltip = "Replace 2nd Right Wheel";
};
class ReplaceTire7
{
condition = "'HitRMWheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitRMWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitrmwheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitrmwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa";
tooltip = "Replace 3rd Right Wheel";
};
class ReplaceTire8
{
condition = "'HitRBWheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitRBWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitrbwheel' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitrbwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Replace_Wheel.paa";
tooltip = "Replace 4th Right Wheel";
};
class RepairAvionics
{
condition = "'HitAvionics' in (EPOCH_VehicleRepairs select 0) || 'HitAvionics' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','HitAvionics'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitavionics' in (EPOCH_VehicleRepairs select 0) || 'hitavionics' in (EPOCH_VehicleRepairs select 2)";
action = "[dyna_cursorTarget,'replace','hitavionics'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair_Avionics.paa";
tooltip = "Repair Avionics";
};
@ -399,64 +426,64 @@ class VehMaintanance
tooltip = "Remove Parts";
class RemoveEngine
{
condition = "'HitEngine' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','HitEngine'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitengine' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','hitengine'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Engine.paa";
tooltip = "Remove Engine";
};
class RemoveTire1
{
condition = "'HitLFWheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','HitLFWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitlfwheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','hitlfwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa";
tooltip = "Remove 1st Left Wheel";
};
class RemoveTire2
{
condition = "'HitLF2Wheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','HitLF2Wheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitlf2wheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','hitlf2wheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa";
tooltip = "Remove 2nd Left Wheel";
};
class RemoveTire3
{
condition = "'HitLMWheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','HitLMWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitlmwheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','hitlmwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa";
tooltip = "Remove 3rd Left Wheel";
};
class RemoveTire4
{
condition = "'HitLBWheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','HitLBWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitlbwheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','hitlbwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa";
tooltip = "Remove 4th Left Wheel";
};
class RemoveTire5
{
condition = "'HitRFWheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','HitRFWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitrfwheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','hitrfwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa";
tooltip = "Remove 1st Right Wheel";
};
class RemoveTire6
{
condition = "'HitRF2Wheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','HitRF2Wheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitrf2wheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','hitrf2wheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa";
tooltip = "Remove 2nd Right Wheel";
};
class RemoveTire7
{
condition = "'HitRMWheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','HitRMWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitrmwheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','hitrmwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa";
tooltip = "Remove 3rd Right Wheel";
};
class RemoveTire8
{
condition = "'HitRBWheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','HitRBWheel'] spawn EPOCH_client_VehicleMaintananceDo";
condition = "'hitrbwheel' in (EPOCH_VehicleRepairs select 1)";
action = "[dyna_cursorTarget,'remove','hitrbwheel'] spawn EPOCH_client_VehicleMaintananceDo";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Remove_Wheel.paa";
tooltip = "Remove 4th Right Wheel";
};
@ -546,8 +573,18 @@ class player_tempGroup_requests
class player_revive
{
condition = "dyna_isDeadPlayer && ('ItemDefibrillator' in dyna_magazinesPlayer)";
action = "[dyna_cursorTarget, player, Epoch_personalToken] remoteExec ['EPOCH_server_revivePlayer',2];";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\group_requests_ca.paa";
tooltip = "Revive Player";
condition = "dyna_isDeadPlayer && isplayer dyna_cursorTarget";
action = "dyna_cursorTarget call EPOCH_DefibrillatorUse;";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Revive.paa";
tooltipcode = "format ['Revive %1',name dyna_cursorTarget]";
};
class BaseCam
{
condition = "dyna_cursorTargetType isEqualTo 'BaseCamTerminal_EPOCH'";
action = "call Epoch_CamUse;";
icon = "x\addons\a3_epoch_code\Data\UI\buttons\Camera.paa";
tooltip = "Watch BaseCam";
};

View File

@ -8,6 +8,25 @@
*/
class CfgBaseBuilding
{
// Power Sources (only for Energy Calculations)
class Land_spp_Tower_F
{
powerCapacity = 10;
powerType = 1; // Solar
};
class Land_wpp_Turbine_V1_F
{
powerCapacity = 10;
powerType = 2; // Wind
};
class Land_wpp_Turbine_V2_F : Land_wpp_Turbine_V1_F {};
class Land_Wreck_Satellite_EPOCH
{
powerCapacity = 10;
powerType = 3; // Satellite
};
// BaseBuilding
class Default
{
upgradeBuilding[] = {};
@ -45,10 +64,10 @@ class CfgBaseBuilding
maxSnapDistance = 4.5;
// snap points for Foundation_EPOCH
C[] = {0,0,0.806411};
N[] = {0,10.463,0};
E[] = {10.463,0,0};
S[] = {0,-10.463,0};
W[] = {-10.463,0,0};
N[] = {0,10.474,0};
E[] = {10.474,0,0};
S[] = {0,-10.474,0};
W[] = {-10.474,0,0};
NE[] = {2.47112,2.46379,0.269223};
NW[] = {-2.4783,2.46379,0.269223};
SE[] = {2.47112,-2.46097,0.269223};
@ -76,10 +95,10 @@ class CfgBaseBuilding
maxSnapDistance = 3;
// snap points for Foundation_EPOCH
C[] = {0,0,0.806411};
N[] = {0,10.463,0};
E[] = {10.463,0,0};
S[] = {0,-10.463,0};
W[] = {-10.463,0,0};
N[] = {0,10.474,0};
E[] = {10.474,0,0};
S[] = {0,-10.474,0};
W[] = {-10.474,0,0};
NE[] = {2.47112,2.46379,0.269223};
NW[] = {-2.4783,2.46379,0.269223};
SE[] = {2.47112,-2.46097,0.269223};
@ -473,21 +492,22 @@ class CfgBaseBuilding
energyCost = 0.5;
// snap points for CinderWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.18644,0,0};
W[] = {-5.19304,0,0};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
};
class CinderWall_window_EPOCH : Default
{
removeParts[] = {{"CinderBlocks",4},{"ItemCorrugatedLg",2},{"ItemGlass",1}};
staticClass = "CinderWall_window_EPOCH";
snapType = "snapPointsPara";
snapPointsPara[] = {"N","E","W"};
snapPointsPara[] = {"N","E","W","CAM"};
allowedSnapPoints[] = {"N","S","E","W"};
energyCost = 0.5;
// snap points for CinderWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.18644,0,0};
W[] = {-5.19304,0,0};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
CAM[] = {0,-0.47,2.8};
};
// Kit_Garden
class Garden_EPOCH : Default
@ -543,7 +563,7 @@ class CfgBaseBuilding
class CinderWallGarage_SIM_EPOCH : CinderWallGarage_EPOCH
{
allowedSnapObjects[] = {"Const_Cinder_static_F","Const_floors_static_F"};
allowedSnapObjects[] = {"Const_Cinder_static_F","Const_floors_static_F","Const_WoodWalls_static_F"};
removeParts[] = {};
};
class CinderWallHalf_EPOCH : Default
@ -555,17 +575,17 @@ class CfgBaseBuilding
GhostPreview = "CinderWallHalf_Ghost_EPOCH";
energyCost = 0.2;
snapType = "snapPointsPara";
snapPointsPara[] = {"N","E","W"};
snapPointsPara[] = {"N","E","W","CAM"};
allowedSnapPoints[] = {"N","S","E","W"};
// snap points for CinderWallHalf_EPOCH
N[] = {0,0,1.57378};
E[] = {5.18644,0,0};
W[] = {-5.19304,0,0};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
CAM[] = {0,-0.47,1.4};
};
class CinderWallHalf_SIM_EPOCH : CinderWallHalf_EPOCH
{
allowedSnapObjects[] = {"Const_Cinder_static_F","Const_floors_static_F"};
allowedSnapObjects[] = {"Const_Cinder_static_F","Const_floors_static_F","Const_WoodWalls_static_F"};
removeParts[] = {};
upgradeBuilding[] = {};
};
@ -578,18 +598,18 @@ class CfgBaseBuilding
staticClass = "CinderWall_EPOCH";
GhostPreview = "CinderWall_EPOCH";
snapType = "snapPointsPara";
snapPointsPara[] = {"N","E","W"};
snapPointsPara[] = {"N","E","W","CAM"};
allowedSnapPoints[] = {"N","S","E","W"};
energyCost = 0.4;
// snap points for CinderWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.18644,0,0};
W[] = {-5.19304,0,0};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
CAM[] = {0,-0.47,2.8};
};
class CinderWall_SIM_EPOCH : CinderWall_EPOCH
{
allowedSnapObjects[] = {"Const_Cinder_static_F","Const_floors_static_F"};
allowedSnapObjects[] = {"Const_Cinder_static_F","Const_floors_static_F","Const_WoodWalls_static_F"};
upgradeBuilding[] = {};
removeParts[] = {};
};
@ -598,12 +618,13 @@ class CfgBaseBuilding
removeParts[] = {{"CinderBlocks",4},{"ItemCorrugatedLg",1},{"CircuitParts",1}};
staticClass = "CinderWallDoorwHatch_EPOCH";
snapType = "snapPointsPara";
snapPointsPara[] = {"N","E","W"};
snapPointsPara[] = {"N","E","W","CAM"};
allowedSnapPoints[] = {"N","S","E","W"};
// snap points for CinderWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.18644,0,0};
W[] = {-5.19304,0,0};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
CAM[] = {0,-0.47,2.8};
};
class WoodLargeWall_EPOCH : Default
{
@ -617,35 +638,58 @@ class CfgBaseBuilding
allowedSnapPoints[] = {"N","S","E","W"};
// snap points for WoodLargeWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.23785,0,0};
W[] = {-5.26294,0,0};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
};
class WoodLargeWall_SIM_EPOCH : WoodLargeWall_EPOCH
{
upgradeBuilding[] = {};
removeParts[] = {};
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"};
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"};
};
class WoodLargeWall_Ghost_EPOCH : WoodLargeWall_SIM_EPOCH {};
class PlyThirdWall_EPOCH : Default
{
upgradeBuilding[] = {};
removeParts[] = {{"PartPlankPack",1},{"ItemPlywoodPack",1}};
simulClass = "PlyThirdWall_SIM_EPOCH";
staticClass = "PlyThirdWall_EPOCH";
GhostPreview = "PlyThirdWall_Ghost_EPOCH";
snapType = "snapPointsPara";
snapPointsPara[] = {"N","E","W"};
allowedSnapPoints[] = {"N","S","E","W"};
// snap points for WoodLargeWall_EPOCH
N[] = {0,0,1.02012};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
};
class PlyThirdWall_SIM_EPOCH : PlyThirdWall_EPOCH
{
upgradeBuilding[] = {};
removeParts[] = {};
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"};
};
class PlyThirdWall_Ghost_EPOCH : PlyThirdWall_SIM_EPOCH {};
class WoodWall1_EPOCH : Default
{
upgradeBuilding[] = {{"WoodWall2_EPOCH",{{"PartPlankPack",1}}},{"WoodLargeWallCor_EPOCH",{{"ItemCorrugated",1}}},{"WoodWallWindow_EPOCH",{{"ItemGlass",2}}}};
upgradeBuilding[] = {{"WoodWall2_EPOCH",{{"PartPlankPack",1}}},{"WoodLargeWallCor_EPOCH",{{"ItemCorrugated",1}}},{"WoodWallWindow_EPOCH",{{"ItemGlass",2}}},{"WoodWallGarage_EPOCH",{{"ItemPlywoodPack",1},{"PartPlankPack",4},{"CircuitParts",1}}}};
removeParts[] = {{"PartPlankPack",2}};
simulClass = "WoodWall1_SIM_EPOCH";
staticClass = "WoodWall1_EPOCH";
GhostPreview = "WoodWall1_EPOCH";
snapType = "snapPointsPara";
snapPointsPara[] = {"N","E","W"};
snapPointsPara[] = {"N","E","W","CAM"};
allowedSnapPoints[] = {"N","S","E","W"};
energyCost = 0.2;
// snap points for WoodLargeWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.23785,0,0};
W[] = {-5.26294,0,0};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
CAM[] = {0,-0.4,2.8};
};
class WoodWall1_SIM_EPOCH : WoodWall1_EPOCH
{
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"};
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"};
energyCost = 0.2;
upgradeBuilding[] = {};
removeParts[] = {};
@ -655,36 +699,78 @@ class CfgBaseBuilding
removeParts[] = {{"ItemGlass",2},{"PartPlankPack",2}};
staticClass = "WoodWallWindow_EPOCH";
snapType = "snapPointsPara";
snapPointsPara[] = {"N","E","W"};
snapPointsPara[] = {"N","E","W","CAM"};
allowedSnapPoints[] = {"N","S","E","W"};
energyCost = 0.5;
// snap points for WoodLargeWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.23785,0,0};
W[] = {-5.26294,0,0};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
CAM[] = {0,-0.4,2.8};
};
class WoodLargeWallCor_EPOCH : Default
{
upgradeBuilding[] = {{"WoodLargeWallDoorway_EPOCH",{{"PartPlankPack",1}}}};
upgradeBuilding[] = {{"WoodLargeWallDoorway_EPOCH",{{"PartPlankPack",1}}},{"MetalWallGarage_EPOCH",{{"ItemCorrugated",1},{"PartPlankPack",4},{"CircuitParts",1}}}};
removeParts[] = {{"PartPlankPack",2},{"ItemCorrugated",1}};
simulClass = "WoodLargeWallCor_SIM_EPOCH";
staticClass = "WoodLargeWallCor_EPOCH";
GhostPreview = "WoodLargeWallCor_EPOCH";
snapType = "snapPointsPara";
snapPointsPara[] = {"N","E","W"};
snapPointsPara[] = {"N","E","W","CAM"};
allowedSnapPoints[] = {"N","S","E","W"};
energyCost = 0.2;
availableTextures[] = {"\x\addons\a3_epoch_assets\textures\cor\corrugated_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_black_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_blue_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_brown_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_green_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_orange_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_purple_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_red_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_teal_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_yellow_co.paa"};
// snap points for WoodLargeWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.23785,0,0};
W[] = {-5.26294,0,0};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
CAM[] = {0,-0.47,2.8};
};
class WoodLargeWallCor_SIM_EPOCH : WoodLargeWallCor_EPOCH
{
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"};
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"};
upgradeBuilding[] = {};
removeParts[] = {};
};
class MetalWallGarage_EPOCH : Default
{
removeParts[] = {{"PartPlankPack",2},{"ItemScraps",2},{"CircuitParts",1}};
simulClass = "MetalWallGarage_SIM_EPOCH";
staticClass = "MetalWallGarage_EPOCH";
GhostPreview = "MetalWallGarage_EPOCH";
snapType = "snapPointsPara";
snapPointsPara[] = {"N","E","W"};
allowedSnapPoints[] = {"N","S","E","W"};
energyCost = 0.5;
// snap points for CinderWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
};
class MetalWallGarage_SIM_EPOCH : MetalWallGarage_EPOCH
{
allowedSnapObjects[] = {"Const_Cinder_static_F","Const_floors_static_F","Const_WoodWalls_static_F"};
removeParts[] = {};
};
class WoodWallGarage_EPOCH : Default
{
removeParts[] = {{"PartPlankPack",2},{"CircuitParts",1}};
simulClass = "WoodWallGarage_SIM_EPOCH";
staticClass = "WoodWallGarage_EPOCH";
GhostPreview = "WoodWallGarage_EPOCH";
snapType = "snapPointsPara";
snapPointsPara[] = {"N","E","W"};
allowedSnapPoints[] = {"N","S","E","W"};
energyCost = 0.5;
// snap points for CinderWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
};
class WoodWallGarage_SIM_EPOCH : MetalWallGarage_EPOCH
{
allowedSnapObjects[] = {"Const_Cinder_static_F","Const_floors_static_F","Const_WoodWalls_static_F"};
removeParts[] = {};
};
class WoodWall2_EPOCH : Default
{
@ -693,17 +779,18 @@ class CfgBaseBuilding
simulClass = "WoodWall2_SIM_EPOCH";
staticClass = "WoodWall2_EPOCH";
GhostPreview = "WoodWall2_EPOCH";
snapPointsPara[] = {"N","E","W"};
snapPointsPara[] = {"N","E","W","CAM"};
allowedSnapPoints[] = {"N","S","E","W"};
energyCost = 0.2;
// snap points for WoodLargeWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.23785,0,0};
W[] = {-5.26294,0,0};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
CAM[] = {0,-0.4,2.8};
};
class WoodWall2_SIM_EPOCH : WoodWall2_EPOCH
{
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"};
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"};
upgradeBuilding[] = {};
removeParts[] = {};
};
@ -714,18 +801,19 @@ class CfgBaseBuilding
simulClass = "WoodLargeWallDoorway_SIM_EPOCH";
staticClass = "WoodLargeWallDoorway_EPOCH";
GhostPreview = "WoodLargeWallDoorway_EPOCH";
snapPointsPara[] = {"N","E","W"};
snapPointsPara[] = {"N","E","W","CAM"};
allowedSnapPoints[] = {"N","S","E","W"};
energyCost = 0.2;
availableTextures[] = {"\x\addons\a3_epoch_assets\textures\cor\corrugated_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_black_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_blue_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_brown_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_green_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_orange_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_purple_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_red_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_teal_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_yellow_co.paa"};
// snap points for WoodLargeWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.23785,0,0};
W[] = {-5.26294,0,0};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
CAM[] = {0,-0.47,2.8};
};
class WoodLargeWallDoorway_SIM_EPOCH : WoodLargeWallDoorway_EPOCH
{
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"};
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"};
upgradeBuilding[] = {};
removeParts[] = {};
};
@ -736,17 +824,18 @@ class CfgBaseBuilding
simulClass = "WoodWall3_SIM_EPOCH";
staticClass = "WoodWall3_EPOCH";
GhostPreview = "WoodWall3_EPOCH";
snapPointsPara[] = {"N","E","W"};
snapPointsPara[] = {"N","E","W","CAM"};
allowedSnapPoints[] = {"N","S","E","W"};
energyCost = 0.2;
// snap points for WoodLargeWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.23785,0,0};
W[] = {-5.26294,0,0};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
CAM[] = {0,-0.4,2.8};
};
class WoodWall3_SIM_EPOCH : WoodWall3_EPOCH
{
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"};
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"};
upgradeBuilding[] = {};
removeParts[] = {};
};
@ -757,18 +846,19 @@ class CfgBaseBuilding
simulClass = "WoodLargeWallDoor_SIM_EPOCH";
staticClass = "WoodLargeWallDoor_EPOCH";
GhostPreview = "WoodLargeWallDoor_EPOCH";
snapPointsPara[] = {"N","E","W"};
snapPointsPara[] = {"N","E","W","CAM"};
allowedSnapPoints[] = {"N","S","E","W"};
availableTextures[] = {"\x\addons\a3_epoch_assets\textures\cor\corrugated_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_black_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_blue_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_brown_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_green_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_orange_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_purple_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_red_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_teal_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_yellow_co.paa"};
energyCost = 0.2;
// snap points for WoodLargeWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.23785,0,0};
W[] = {-5.26294,0,0};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
CAM[] = {0,-0.47,2.8};
};
class WoodLargeWallDoor_SIM_EPOCH : WoodLargeWallDoor_EPOCH
{
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"};
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"};
upgradeBuilding[] = {};
removeParts[] = {};
};
@ -778,17 +868,18 @@ class CfgBaseBuilding
simulClass = "WoodWall4_SIM_EPOCH";
staticClass = "WoodWall4_EPOCH";
GhostPreview = "WoodWall4_EPOCH";
snapPointsPara[] = {"N","E","W"};
snapPointsPara[] = {"N","E","W","CAM"};
allowedSnapPoints[] = {"N","S","E","W"};
energyCost = 0.2;
// snap points for WoodLargeWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.23785,0,0};
W[] = {-5.26294,0,0};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
CAM[] = {0,-0.4,2.8};
};
class WoodWall4_SIM_EPOCH : WoodWall4_EPOCH
{
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"};
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"};
upgradeBuilding[] = {};
removeParts[] = {};
};
@ -798,18 +889,19 @@ class CfgBaseBuilding
simulClass = "WoodLargeWallDoorL_SIM_EPOCH";
staticClass = "WoodLargeWallDoorL_EPOCH";
GhostPreview = "WoodLargeWallDoorL_EPOCH";
snapPointsPara[] = {"N","E","W"};
snapPointsPara[] = {"N","E","W","CAM"};
allowedSnapPoints[] = {"N","S","E","W"};
availableTextures[] = {"\x\addons\a3_epoch_assets\textures\cor\corrugated_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_black_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_blue_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_brown_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_green_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_orange_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_purple_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_red_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_teal_co.paa","\x\addons\a3_epoch_assets\textures\cor\corrugated_yellow_co.paa"};
energyCost = 0.2;
// snap points for WoodLargeWall_EPOCH
N[] = {0,0,3.06034};
E[] = {5.23785,0,0};
W[] = {-5.26294,0,0};
E[] = {5.237,0,0};
W[] = {-5.237,0,0};
CAM[] = {0,-0.47,2.8};
};
class WoodLargeWallDoorL_SIM_EPOCH : WoodLargeWallDoorL_EPOCH
{
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F"};
allowedSnapObjects[] = {"Const_floors_static_F","Const_WoodWalls_static_F","Const_Cinder_static_F"};
upgradeBuilding[] = {};
removeParts[] = {};
};
@ -871,7 +963,7 @@ class CfgBaseBuilding
};
class WoodStairs_SIM_EPOCH : WoodStairs_EPOCH
{
allowedSnapPoints[] = {"NF","SF","EF","WF","CB"};
allowedSnapPoints[] = {"NF","SF","EF","WF","CB","CS"};
allowedSnapObjects[] = {"Const_floors_static_F","Constructions_foundation_F"};
upgradeBuilding[] = {};
removeParts[] = {};
@ -879,6 +971,7 @@ class CfgBaseBuilding
class WoodStairs_Ghost_EPOCH : WoodStairs_SIM_EPOCH {};
class WoodStairs2_EPOCH : Default
{
upgradeBuilding[] = {{"WoodStairs3_EPOCH",{{"ItemPipe",1},{"CircuitParts",1}}}};
removeParts[] = {{"PartPlankPack",4}};
simulClass = "WoodStairs2_SIM_EPOCH";
staticClass = "WoodStairs2_EPOCH";
@ -893,6 +986,7 @@ class CfgBaseBuilding
WF2[] = {-5.237,-0.003,0};
C[] = {-0.000251044,-0.00293543,6.37273};
CB[] = {-0.000299305,-0.000390954,3.32902};
CS[] = {-0.000251044,-0.00293543,3.060298}; // 2x WoodStairs without Space for Floor
CinN[] = {0.0214193,2.87136,3.05972};
CinE[] = {2.87868,-0.000390954,3.05972};
CinS[] = {0.0214193,-2.86826,3.05972};
@ -938,6 +1032,68 @@ class CfgBaseBuilding
allowedSnapObjects[] = {"Const_floors_static_F","Constructions_foundation_F"};
removeParts[] = {};
};
class WoodStairs3_EPOCH : Default
{
removeParts[] = {{"PartPlankPack",4},{"ItemPipe",1},{"CircuitParts",1}};
simulClass = "WoodStairs3_SIM_EPOCH";
staticClass = "WoodStairs3_EPOCH";
GhostPreview = "WoodStairs3_EPOCH";
snapPointsPara[] = {"NF2","SF2","EF2","WF2","NF","SF","EF","WF","C","CB","NWQF","NQF","NEQF","SWQF","SQF","SEQF","ENQF","EQF","ESQF","WNQF","WQF","WSQF","NWHF","NEHF","SWHF","SEHF","WNHF","WSHF","ENHF","ESHF"};
snapPointsPerp[] = {"N","S","E","W","CinN","CinS","CinE","CinW"};
energyCost = 0.3;
// snap points for WoodStairs_EPOCH
NF2[] = {0,5.237,0};
SF2[] = {0,-5.237,0};
EF2[] = {5.237,0,0};
WF2[] = {-5.237,-0.003,0};
C[] = {-0.000251044,-0.00293543,6.37273};
CB[] = {-0.000299305,-0.000390954,3.32902};
CS[] = {-0.000251044,-0.00293543,3.060298}; // 2x WoodStairs without Space for Floor
CinN[] = {0.0214193,2.87136,3.05972};
CinE[] = {2.87868,-0.000390954,3.05972};
CinS[] = {0.0214193,-2.86826,3.05972};
CinW[] = {-2.88969,-0.000390954,3.05972};
N[] = {0.0195083,2.46379,3.32952};
E[] = {2.47112,-0.000253316,3.32952};
S[] = {0.0195083,-2.46097,3.32952};
W[] = {-2.4783,-0.000253316,3.32952};
NE[] = {2.47112,2.46379,3.32952};
NW[] = {-2.4783,2.46379,3.32952};
SE[] = {2.47112,-2.46097,3.32952};
SW[] = {-2.4783,-2.46097,3.32952};
NF[] = {0,5.237,3.06};
SF[] = {0,-5.237,3.06};
EF[] = {5.237,0,3.06};
WF[] = {-5.237,0,3.06};
NWQF[] = {-1.30925,3.92775,3.06};
NQF[] = {0,3.92775,3.06};
NEQF[] = {1.30925,3.92775,3.06};
SWQF[] = {-1.30925,-3.92775,3.06};
SQF[] = {0,-3.92775,3.06};
SEQF[] = {1.30925,-3.92775,3.06};
ENQF[] = {3.92775,1.30925,3.06};
EQF[] = {3.92775,0,3.06};
ESQF[] = {3.92775,-1.30925,3.06};
WNQF[] = {-3.92775,1.30925,3.06};
WQF[] = {-3.92775,0,3.06};
WSQF[] = {-3.92775,-1.30925,3.06};
NWHF[] = {-1.30925,5.237,3.06};
NEHF[] = {1.30925,5.237,3.06};
SWHF[] = {-1.30925,-5.237,3.06};
SEHF[] = {1.30925,-5.237,3.06};
WNHF[] = {-5.237,1.30925,3.06};
WSHF[] = {-5.237,-1.30925,3.06};
ENHF[] = {5.237,1.30925,3.06};
ESHF[] = {5.237,-1.30925,3.06};
};
class WoodStairs3_SIM_EPOCH : WoodStairs3_EPOCH
{
allowedSnapPoints[] = {"NF","SF","EF","WF","CB"};
allowedSnapObjects[] = {"Const_floors_static_F","Constructions_foundation_F"};
removeParts[] = {};
};
class WoodTower_EPOCH : Default
{
removeParts[] = {{"PartPlankPack",4}};
@ -1111,6 +1267,30 @@ class CfgBaseBuilding
removeParts[] = {};
};
class WorkBench_Ghost_EPOCH : WorkBench_SIM_EPOCH {};
class SolarCharger_EPOCH : Default
{
removeParts[] = {{"KitSolarCharger",1}};
GhostPreview = "SolarCharger_Ghost_EPOCH";
staticClass = "SolarCharger_EPOCH";
simulClass = "SolarCharger_SIM_EPOCH";
};
class SolarCharger_SIM_EPOCH : SolarCharger_EPOCH
{
removeParts[] = {};
};
class SolarCharger_Ghost_EPOCH : SolarCharger_SIM_EPOCH {};
class SolarChargerXL_EPOCH : Default
{
removeParts[] = {{"KitSolarChargerXL",1}};
GhostPreview = "SolarChargerXL_Ghost_EPOCH";
staticClass = "SolarChargerXL_EPOCH";
simulClass = "SolarChargerXL_SIM_EPOCH";
};
class SolarChargerXL_SIM_EPOCH : SolarChargerXL_EPOCH
{
removeParts[] = {};
};
class SolarChargerXL_Ghost_EPOCH : SolarChargerXL_SIM_EPOCH {};
class LockBox_EPOCH : Default
{
returnOnPack[] = {{"ItemLockbox",1}};
@ -1391,6 +1571,44 @@ class CfgBaseBuilding
removeParts[] = {};
};
class WaterPump_Ghost_EPOCH : WaterPump_SIM_EPOCH {};
class BaseCam_EPOCH : Default
{
removeParts[] = {{"BaseCam",1}};
GhostPreview = "BaseCam_Ghost_EPOCH";
staticClass = "BaseCam_EPOCH";
simulClass = "BaseCam_SIM_EPOCH";
};
class BaseCam_SIM_EPOCH : BaseCam_EPOCH
{
removeParts[] = {};
allowedSnapPoints[] = {"CAM"};
allowedSnapObjects[] = {"Const_WoodWalls_static_F","Const_Cinder_static_F"};
};
class BaseCam_Ghost_EPOCH : BaseCam_SIM_EPOCH {};
class BaseCamTerminal_EPOCH : Default
{
removeParts[] = {{"BaseCamTerminal",1}};
GhostPreview = "BaseCamTerminal_Ghost_EPOCH";
staticClass = "BaseCamTerminal_EPOCH";
simulClass = "BaseCamTerminal_SIM_EPOCH";
};
class BaseCamTerminal_SIM_EPOCH : BaseCamTerminal_EPOCH
{
removeParts[] = {};
};
class BaseCamTerminal_Ghost_EPOCH : BaseCamTerminal_SIM_EPOCH {};
class snowman_EPOCH : Default
{
removeParts[] = {{1,"KitSnowman"}};
GhostPreview = "snowman_Ghost_EPOCH";
staticClass = "snowman_EPOCH";
simulClass = "snowman_SIM_EPOCH";
};
class snowman_SIM_EPOCH : snowman_EPOCH
{
removeParts[] = {};
};
class snowman_Ghost_EPOCH : snowman_SIM_EPOCH {};
};
/*[[[end]]]*/

View File

@ -51,6 +51,8 @@ class CfgClientFunctions
class unit_onKilledEH {};
class AutoRun_Check {};
class AutoRun {};
class DefibrillatorUse {};
class CamUse {};
};
class building
{

View File

@ -99,7 +99,7 @@ class CfgCrafting
/** --------- RECIPES BELOW --------- **/
class ItemCoolerE : Part
{
usedIn[] = {"ItemCooler0","ItemCooler1","ItemCooler2","ItemCooler3","ItemCooler4"};
usedIn[] = {"ItemCooler0","ItemCooler1","ItemCooler2","ItemCooler3","ItemCooler4","KitSnowman"};
previewPosition[] = {0.795709,1,0.415296};
previewScale = 0.8;
previewVector = 0;
@ -148,7 +148,7 @@ class CfgCrafting
};
class CircuitParts : Part
{
usedIn[] = {"EnergyPack","EnergyPackLg","KitPlotPole","ItemBattery","KitSolarGen","KitVehicleUpgradeI_200_EPOCH","KitVehicleUpgradeIV_200_EPOCH","BarrelBomb_EPOCH_Remote_Mag","BarrelBomb2_EPOCH_Remote_Mag","KitPortableLight_Single","KitPortableLight_Double"};
usedIn[] = {"EnergyPack","EnergyPackLg","KitPlotPole","ItemBattery","KitSolarGen","KitSolarCharger","KitSolarChargerXL","KitVehicleUpgradeI_200_EPOCH","KitVehicleUpgradeIV_200_EPOCH","BarrelBomb_EPOCH_Remote_Mag","BarrelBomb2_EPOCH_Remote_Mag","KitPortableLight_Single","KitPortableLight_Double","BaseCam","BaseCamTerminal"};
previewPosition[] = {0.791044,1,0.256956};
previewScale = 2;
previewVector = 2.3;
@ -415,7 +415,7 @@ class CfgCrafting
};
class ItemScraps : Item
{
usedIn[] = {"ItemCorrugated","KitMetalTrap","MeleeRod","KitVehicleUpgradeIV_200_EPOCH","KitBarbedWire"};
usedIn[] = {"ItemCorrugated","KitMetalTrap","MeleeRod","KitVehicleUpgradeIV_200_EPOCH","KitBarbedWire","BaseCam","BaseCamTerminal"};
nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}};
recipe[] = {{"PartOre",2}};
previewPosition[] = {0.797144,1,0.309158};
@ -466,10 +466,17 @@ class CfgCrafting
};
class ItemDuctTape : Part
{
usedIn[] = {"SpareTire","EngineParts","ItemRotor"};
usedIn[] = {"SpareTire","EngineParts","ItemRotor","BaseCam","BaseCamTerminal"};
previewPosition[] = {0.807346,1,0.27};
previewScale = 1.8;
previewVector = -3.9;
};
class ItemGlass : Part
{
usedIn[] = {"BaseCam", "BaseCamTerminal"};
previewPosition[] = {0.807346,1,0.27};
previewScale = 0.55;
previewVector = -3.9;
};
class EngineParts : Item
{
@ -786,6 +793,13 @@ class CfgCrafting
previewScale = 0.4;
previewVector = 2.1;
};
class icecream_epoch : Part
{
usedIn[] = {"KitSnowman"};
previewPosition[] = {0.796141,1,0.27};
previewScale = 0.7;
previewVector = 2.1;
};
class emptyjar_epoch : Part
{
usedIn[] = {"water_epoch"};
@ -802,7 +816,7 @@ class CfgCrafting
};
class clean_water_epoch : Item
{
usedIn[] = {"EnergyPack"};
usedIn[] = {"EnergyPack","KitSnowman"};
nearby[] = {{"Fire","","fire",{1,{"ALL"}},3,1,1,0}};
recipe[] = {"water_epoch"};
previewPosition[] = {0.807346,1,0.43035};
@ -819,7 +833,7 @@ class CfgCrafting
};
class ItemCorrugatedLg : Item
{
usedIn[] = {"KitPlotPole","KitTankTrap","KitHesco3","KitSolarGen","ItemRotor","EngineBlock","KitMetalFloor","KitMetalHalfFloor","KitMetalQuarterFloor","KitMetalTower","KitFieldToilet","KitSink","KitPortableLight_Single","KitPortableLight_Double","KitBarbedWire"};
usedIn[] = {"KitPlotPole","KitTankTrap","KitHesco3","KitSolarGen","KitSolarCharger","KitSolarChargerXL","ItemRotor","EngineBlock","KitMetalFloor","KitMetalHalfFloor","KitMetalQuarterFloor","KitMetalTower","KitFieldToilet","KitSink","KitPortableLight_Single","KitPortableLight_Double","KitBarbedWire"};
recipe[] = {{"ItemCorrugated",3}};
nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}};
previewPosition[] = {0.797491,1,0.32899};
@ -828,7 +842,7 @@ class CfgCrafting
};
class PartPlankPack : Item
{
usedIn[] = {"KitStudWall","KitWoodFloor","KitWoodFoundation","KitWoodStairs","KitWoodRamp","KitWoodLadder","KitWoodTower","KitTiPi","KitWorkbench","KitSpikeTrap","KitMetalTrap","KitWoodQuarterFloor","KitWoodHalfFloor","KitBarGate","KitBagBunker","KitWatchTower","KitLightPole","KitScaffolding"};
usedIn[] = {"KitStudWall","KitWoodFloor","KitWoodFoundation","KitWoodStairs","KitWoodRamp","KitWoodLadder","KitWoodTower","KitTiPi","KitWorkbench","KitSpikeTrap","KitMetalTrap","KitWoodQuarterFloor","KitWoodHalfFloor","KitBarGate","KitBagBunker","KitWatchTower","KitLightPole","KitScaffolding","KitPlyThirdWall_EPOCH"};
recipe[] = {{"WoodLog_EPOCH",2}};
previewPosition[] = {0.797837,1,0.288258};
previewScale = 0.2;
@ -837,7 +851,7 @@ class CfgCrafting
};
class ItemPlywoodPack : Item
{
usedIn[] = {};
usedIn[] = {"KitPlyThirdWall_EPOCH"};
recipe[] = {{"WoodLog_EPOCH",3}};
previewPosition[] = {0.797837,1,0.288258};
previewScale = 0.2;
@ -879,6 +893,17 @@ class CfgCrafting
previewScale = 0.07;
previewVector = 0;
};
class KitPlyThirdWall_EPOCH : Kit
{
recipe[] = {{"PartPlankPack",2},{"ItemPlywoodPack",1}};
model = "\x\addons\a3_epoch_community\models\third_ply_wall.p3d";
nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}};
previewPosition[] = {0.797675,1,0.398882};
previewScale = 0.07;
previewVector = 0;
descriptionShort = "1/3 Plywood Wall";
descriptionFull = "Base building material";
};
class KitWoodFloor : Kit
{
usedIn[] = {"KitWoodTower","KitBagBunker"};
@ -1117,9 +1142,20 @@ class CfgCrafting
previewScale = 0.055;
previewVector = 0;
};
class KitSnowman : Kit
{
recipe[] = {{"ItemCoolerE",1},{"icecream_epoch",1},{"clean_water_epoch",2}};
model = "\x\addons\a3_epoch_community\models\hol_x\epoch_snowman.p3d";
nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}};
previewPosition[] = {0.801378,1,0.29};
previewScale = 0.15;
previewVector = 0;
descriptionShort = "Snowman";
descriptionFull = "Nice deco for Wintertime";
};
class ItemSolar : Part
{
usedIn[] = {"KitSolarGen"};
usedIn[] = {"KitSolarGen","KitSolarCharger","KitSolarChargerXL"};
previewPosition[] = {0.802374,1,0.26};
previewScale = 0.19;
previewVector = 3.3;
@ -1133,7 +1169,7 @@ class CfgCrafting
};
class ItemCables : Item
{
usedIn[] = {"KitSolarGen","KitPlotPole","ItemCopperBar","KitVehicleUpgradeI_200_EPOCH"};
usedIn[] = {"KitSolarGen","KitSolarCharger","KitSolarChargerXL","KitPlotPole","ItemCopperBar","KitVehicleUpgradeI_200_EPOCH","BaseCam","BaseCamTerminal"};
nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}};
recipe[] = {{"ItemCopperBar",1}};
previewPosition[] = {0.802374,1,0.26};
@ -1227,7 +1263,7 @@ class CfgCrafting
};
class ItemBattery : Item
{
usedIn[] = {"KitSolarGen","KitPlotPole","BarrelBomb_EPOCH_Remote_Mag","BarrelBomb2_EPOCH_Remote_Mag"};
usedIn[] = {"KitSolarGen","KitSolarCharger","KitSolarChargerXL","KitPlotPole","BarrelBomb_EPOCH_Remote_Mag","BarrelBomb2_EPOCH_Remote_Mag"};
nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}};
recipe[] = {{"EnergyPackLg",3},{"CircuitParts",1}};
previewPosition[] = {0.802374,1,0.276733};
@ -1241,6 +1277,50 @@ class CfgCrafting
previewPosition[] = {0.804979,1,0.39189};
previewScale = 0.11;
previewVector = 0;
};
class KitSolarCharger : Kit
{
recipe[] = {{"ItemSolar",1},{"ItemCables",1},{"ItemBattery",1},{"ItemCorrugatedLg",2},{"CircuitParts",2}};
nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}};
model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Solar_Generator_Complete\Solar_generator.p3d";
previewPosition[] = {0.804979,1,0.39189};
previewScale = 0.11;
previewVector = 0;
descriptionShort = "Solar Charger Kit";
descriptionFull = "Used to charge small Energy Packs";
};
class KitSolarChargerXL : Kit
{
recipe[] = {{"ItemSolar",2},{"ItemCables",2},{"ItemBattery",2},{"ItemCorrugatedLg",2},{"CircuitParts",2}};
nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}};
model = "\x\addons\a3_epoch_assets_3\CfgVehicles\Solar_Generator_Complete\Solar_generator.p3d";
previewPosition[] = {0.804979,1,0.39189};
previewScale = 0.11;
previewVector = 0;
descriptionShort = "Solar Charger Kit XL";
descriptionFull = "Used to charge large Energy Packs";
};
class BaseCam : Kit
{
recipe[] = {{"ItemCables",1},{"ItemGlass",1},{"ItemDuctTape",1},{"ItemScraps",2},{"CircuitParts",2}};
nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}};
model = "\x\addons\a3_epoch_community\models\base_cam.p3d";
previewPosition[] = {0.804979,1,0.3};
previewScale = 0.5;
previewVector = 0;
descriptionShort = "Base Camera";
descriptionFull = "Protect your Base with a Camera.<br/>A BaseCam Terminal is needed,<br/>to check your Base Cameras";
};
class BaseCamTerminal : Kit
{
recipe[] = {{"ItemCables",1},{"ItemGlass",1},{"ItemDuctTape",1},{"ItemScraps",2},{"CircuitParts",2}};
nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}};
model = "\x\addons\a3_epoch_community\models\base_cam_terminal.p3d";
previewPosition[] = {0.804979,1,0.3};
previewScale = 0.5;
previewVector = 0;
descriptionShort = "Base Camera Terminal";
descriptionFull = "Check your Base Cameras with this Terminal";
};
class MeleeRod : Kit
{
@ -1395,7 +1475,7 @@ class CfgCrafting
};
class ItemCanvas : Item
{
usedIn[] = {"KitTentA","KitTentDome","KitSunShade","KitWatchTower","KitScaffolding"};
usedIn[] = {"KitTentA","KitTentDome","KitSunShade","KitWatchTower","KitScaffolding","ItemSeedBag"};
nearby[] = {{"Workbench","","workbench",{1,{"WorkBench_EPOCH"}},3,1,0,1}};
recipe[] = {{"ItemKiloHemp",1}};
previewPosition[] = {0.802443,1,0.254301};

View File

@ -14,7 +14,7 @@
/*[[[cog from arma_config_tools import *; json_to_arma()]]]*/
class CfgEpochClient
{
epochVersion = "1.1.0";
epochVersion = "1.2.0";
ArmAVersion = 176;
debug = "true"; // true = enable extra rpt debug lines, false to disable
@ -55,9 +55,16 @@ class CfgEpochClient
storageCountPerMember = 5; //ignore if "splitCountLimits=0" & "useGroupCountLimits=0"
maxdoors = 10; // Max allowed doors per Group
maxgates = 5; // Max allowed Gates per Group
maxCams = 2; // Max allowed BaseCams per Group
MaxBuildingTilt = 180; // Max degrees players can tilt building elements
AtmBlockedAtPlot = "true"; // Block ATM's in Plotpole-Range
disableRemoteSensors = "true"; // disableRemoteSensors true/false
ActionFireOnLighter = "true"; // Lighter is needed to inflame fires
ActionBurnBarrelOffExtinguisher = "true"; // FireExtinguisher is needed to put off Burn Barrels
ActionHookRope = "true"; // Rope is needed to hook vehicles (get back on release)
epochMessageBackgroundCol[] = {0,0,0,0.2}; //Epoch_message background color (format: {R,G,B,A})
epochMessageTextCol[] = {1,1,1,0.95}; //Epoch_message text color (format: {R,G,B,A})
@ -189,6 +196,19 @@ class CfgEpochClient
playerDeathMarkerGPSOnly = 1; // Map marker toggle in map dyna menu on death with assigned GPS only
mapOnZoomSetMarkerSize = 1; // When in map markers will change to larger size as player zooms in
bankTransferTime[] = {0.0006,1.2,0.06};
// Player (Building) Energy
energyPowerSources[] = { // Add PowerCapacity and PowerType in CfgBaseBuilding, if you add something here!
"Land_spp_Tower_F",
"Land_wpp_Turbine_V2_F",
"Land_wpp_Turbine_V1_F",
"SolarGen_EPOCH",
"Land_Wreck_Satellite_EPOCH"
};
energyRange = 75; // Range to check for energy sources
energyRegenMax = 5; // Max energy increase value (every 10 seconds)
energyCostNV = 3; // Energy loss value by using nightvision (every 10 seconds)
energyRegenInVeh = 5; // Energy increase value in Vehicles with Engine On (every 10 seconds)
// Favorite Bar
Fav_enableFavoriteBar = "true"; // If disabled, players will not be able to use favorite bar
@ -196,6 +216,9 @@ class CfgEpochClient
Fav_FastWeaponSwitching = "false"; // If enabled, same slot weapons from favorites bar are equipped instantly, otherwise reload action is played (recommended for immersion)
Fav_BannedItems[] = {"FAK"}; // Items that users are not allowed to pin
EnableTempVehTrade = "false"; // Enable selling of temp Vehicles (not handled by Epoch). Temp Vehicles will not be stored in Traders, but can be sold
BulletCalculateOnCraft = "true"; // Enable Bullet Calculation on Crafting - Example: If you craft a large EnergyPack with 3 half full EnergyPacks, you will only get a half filled large EnergyPack back
// Advanced Vehicle Repair
UseAdvancedVehicleRepair = "true"; // Switch On / Off Advanced Vehicle Repair (Does not effect SuppressedCraftingItems !)
EnableRemoveParts = "true"; // Enable removing Tires / Engines from Vehicles
@ -214,21 +237,25 @@ class CfgEpochClient
VehicleRepairs[] = { // {Hitpoint, dmg to repair, dmg to replace, mat to repair, mat to replace}
{"HitHull",0.33,0.66,"ItemScraps","ItemCorrugated"},
{"HitBody",0.33,1,"ItemScraps","ItemCorrugated"},
{"HitLFWheel",0.33,1,"VehicleRepair","SpareTire"},
{"HitLF2Wheel",0.33,1,"VehicleRepair","SpareTire"},
{"HitLMWheel",0.33,1,"VehicleRepair","SpareTire"},
{"HitLBWheel",0.33,1,"VehicleRepair","SpareTire"},
{"HitRFWheel",0.33,1,"VehicleRepair","SpareTire"},
{"HitRF2Wheel",0.33,1,"VehicleRepair","SpareTire"},
{"HitRMWheel",0.33,1,"VehicleRepair","SpareTire"},
{"HitRBWheel",0.33,1,"VehicleRepair","SpareTire"},
{"HitEngine",0.33,0.91,"EngineParts","EngineBlock"},
{"glass",0.33,1,"ItemGlass","ItemGlass"},
{"HitFuel",0.1,0.66,"ItemDuctTape","FuelTank"},
{"HitHRotor",0.33,1,"ItemCorrugated","ItemRotor"},
{"HitVRotor",0.33,1,"ItemCorrugated","ItemRotor"},
{"HitWinch",0.33,0.91,"ItemCables","ItemCables"},
{"HitAvionics",0.33,0.91,"CircuitParts","CircuitParts"}
{"HitAvionics",0.33,0.91,"CircuitParts","CircuitParts"},
// Wheels - Do not change the order (front to back wheels) here!
{"HitLFWheel",0.33,1,"VehicleRepair","SpareTire"},
{"HitRFWheel",0.33,1,"VehicleRepair","SpareTire"},
{"HitLF2Wheel",0.33,1,"VehicleRepair","SpareTire"},
{"HitRF2Wheel",0.33,1,"VehicleRepair","SpareTire"},
{"HitLMWheel",0.33,1,"VehicleRepair","SpareTire"},
{"HitRMWheel",0.33,1,"VehicleRepair","SpareTire"},
{"HitLBWheel",0.33,1,"VehicleRepair","SpareTire"},
{"HitRBWheel",0.33,1,"VehicleRepair","SpareTire"},
// Mountainbike wheels
{"HitFWheel",0.33,0.91,"",""},
{"HitBWheel",0.33,0.91,"",""}
};
// include configs

View File

@ -504,6 +504,16 @@ class CfgItemInteractions
buildClass = "Garden_EPOCH";
isStorage = 1;
};
class KitSolarCharger : Item_Build_base
{
buildClass = "SolarCharger_EPOCH";
isStorage = 1;
};
class KitSolarChargerXL : Item_Build_base
{
buildClass = "SolarChargerXL_EPOCH";
isStorage = 1;
};
class KitBurnBarrel : Item_Build_base
{
buildClass = "BurnBarrel_EPOCH";
@ -588,6 +598,10 @@ class CfgItemInteractions
{
buildClass = "BarbedWire_EPOCH";
};
class BaseCam : Item_Build_base
{
buildClass = "BaseCam_EPOCH";
};
class PaintCanBase : Default
{
interactAction = 12;
@ -985,7 +999,7 @@ class CfgItemInteractions
};
class ItemCanteen_Clean : Drink_base
{
interactAttributes[] = {{"Thirst",1000},{"Stamina",50}};
interactAttributes[] = {{"Thirst",1000},{"Stamina",100}};
interactReturnOnUse = "ItemCanteen_Empty";
};
class ItemBottlePlastic_Dirty: Drink_base
@ -996,7 +1010,7 @@ class CfgItemInteractions
class ItemCanteen_Dirty : Drink_base
{
interactAttributes[] = {{"Thirst",1000},{"Toxicity",5,1},{"Stamina",50},{"Radiation",2,1}};
interactAttributes[] = {{"Thirst",1000},{"Toxicity",10,1},{"Stamina",100},{"Radiation",4,1}};
interactReturnOnUse = "ItemCanteen_Empty";
};
class adrenaline_epoch : Drink_base
@ -1045,5 +1059,23 @@ class CfgItemInteractions
interactText = "USE";
interactAttributes[] = {{"Radiation",-15},{"Thirst",-50},{"Immunity",5}};
};
class ItemDefibrillator : Default
{
interactAction = 17;
interactText = "ReCharge";
};
class BaseCamTerminal : Item_Build_base
{
buildClass = "BaseCamTerminal_EPOCH";
interactActions[] = {{"Watch","call Epoch_CamUse;"}};
};
class KitSnowman : Item_Build_base
{
buildClass = "snowman_EPOCH";
};
class KitPlyThirdWall_EPOCH : Item_Build_base
{
buildClass = "PlyThirdWall_EPOCH";
};
};
/*[[[end]]]*/

View File

@ -171,6 +171,10 @@ class CfgItemSort
"U_O_FullGhillie_sard",
"U_O_FullGhillie_ard",
// Radiation Suits
"U_RadiationSuit_M_uniform",
"U_RadiationSuit_F_uniform",
// CIV
"U_I_OfficerUniform",
"U_I_C_Soldier_Para_1_F",
@ -431,6 +435,8 @@ class CfgItemSort
"H_F3_EPOCH",
"H_F4_EPOCH",
"H_F5_EPOCH",
"thor_mask_epoch",
"iron_mask_epoch",
"wolf_mask_epoch",
"pkin_mask_epoch",
"clown_mask_epoch",
@ -948,6 +954,7 @@ class CfgItemSort
Medical[] = {
"FAK",
"Soap_Epoch",
"Towelette",
"HeatPack",
"ColdPack",
@ -1051,11 +1058,13 @@ class CfgItemSort
"ItemCorrugated",
"ItemCorrugatedLg",
"KitStudWall",
"KitPlyThirdWall_EPOCH",
"KitWoodFloor",
"KitWoodHalfFloor",
"KitWoodQuarterFloor",
"KitWoodStairs",
"KitWoodRamp",
"KitSnowman",
"KitFirePlace",
"KitTiPi",
"KitShelf",
@ -1064,6 +1073,10 @@ class CfgItemSort
"KitPlotPole",
"KitCinderWall",
"KitSolarGen",
"KitSolarCharger",
"KitSolarChargerXL",
"BaseCam",
"BaseCamTerminal",
"KitWorkbench",
"KitWoodLadder",
"KitWoodTower",
@ -1187,6 +1200,11 @@ class CfgItemSort
"ItemFireExtinguisher"
};
Vehicles_Land[] = {
"hoverboard_epoch_1",
"hoverboard_epoch_bttf",
"hoverboard_epoch_a3",
"hoverboard_epoch_cargo",
"MBK_01_EPOCH",
"ebike_epoch", // Motorcycle
"C_Offroad_01_EPOCH", // Offroader
"C_Offroad_01_EPOCH1",
@ -1392,6 +1410,7 @@ class CfgItemSort
"O_Heli_Transport_04_box_EPOCH",
"O_Heli_Transport_04_covered_EPOCH",
"B_Heli_Light_01_EPOCH",
"uh1h_Epoch",
"B_Heli_Light_01_armed_F",
"B_Heli_Transport_01_EPOCH",

View File

@ -70,6 +70,14 @@ class CfgObjectInteractions
{
interactMode = 4;
};
class SolarCharger_EPOCH : Default
{
interactMode = 4;
};
class SolarChargerXL_EPOCH : Default
{
interactMode = 4;
};
class FieldToilet_EPOCH : Default
{
interactMode = 4;
@ -231,6 +239,7 @@ class CfgObjectInteractions
ppEffect[] = {};
};
class SmokeShellToxic_Ammo : SmokeShellCustom {};
class SmokeShellToxicSapper : SmokeShellCustom {};
class Epoch_Cloak_F : Default
{
distance = 30;

View File

@ -112,6 +112,10 @@ class CfgPricing
{
price = 25;
};
class ItemWaterPurificationTablets
{
price = 10;
};
class ItemBulb
{
price = 10;
@ -2096,6 +2100,10 @@ class CfgPricing
{
price = 3;
};
class Soap_Epoch
{
price = 4;
};
class Towelette
{
price = 1;
@ -3074,6 +3082,9 @@ class CfgPricing
{
price = 16;
};
class KitPlyThirdWall_EPOCH {
price = 18;
};
class KitWoodQuarterFloor
{
price = 8; // price of 2 planks
@ -3130,6 +3141,10 @@ class CfgPricing
{
price = 24; // price of 6 planks
};
class KitSnowman
{
price = 72;
};
class KitSpikeTrap
{
price = 42;
@ -3250,6 +3265,22 @@ class CfgPricing
{
price = 325;
};
class KitSolarCharger
{
price = 325;
};
class KitSolarChargerXL
{
price = 325;
};
class BaseCam
{
price = 250;
};
class BaseCamTerminal
{
price = 250;
};
class KitCinderWall
{
price = 80;
@ -3514,6 +3545,14 @@ class CfgPricing
{
price = 22;
};
class U_RadiationSuit_M_uniform
{
price = 7;
};
class U_RadiationSuit_F_uniform
{
price = 7;
};
class U_O_FullGhillie_lsh
{
price = 7;
@ -4352,20 +4391,40 @@ class CfgPricing
};
class C_Offroad_01_EPOCH
{
price = 750;
price = 7500;
tax = 0.9;
};
class C_Offroad_01_EPOCH1: C_Offroad_01_EPOCH{};
class C_Offroad_01_EPOCH2: C_Offroad_01_EPOCH{};
class C_Offroad_01_EPOCH3: C_Offroad_01_EPOCH{};
class C_Offroad_01_EPOCH4: C_Offroad_01_EPOCH{};
class C_Offroad_01_EPOCH5: C_Offroad_01_EPOCH{};
class hoverboard_epoch_1
{
price = 1000;
tax = 0.9;
};
class hoverboard_epoch_bttf: hoverboard_epoch_1{};
class hoverboard_epoch_a3: hoverboard_epoch_1{};
class hoverboard_epoch_cargo
{
price = 1200;
tax = 0.9;
};
class MBK_01_EPOCH
{
price = 1250;
tax = 0.9;
};
class C_Quadbike_01_EPOCH
{
price = 500;
price = 2500;
tax = 0.9;
};
class C_Hatchback_01_EPOCH
{
price = 750;
price = 7500;
tax = 0.9;
};
class C_Hatchback_01_EPOCH1: C_Hatchback_01_EPOCH{};
class C_Hatchback_01_EPOCH2: C_Hatchback_01_EPOCH{};
@ -4373,7 +4432,8 @@ class CfgPricing
class C_Hatchback_01_EPOCH4: C_Hatchback_01_EPOCH{};
class C_Hatchback_02_EPOCH
{
price = 1000;
price = 10000;
tax = 0.9;
};
class C_Hatchback_02_EPOCH1: C_Hatchback_02_EPOCH{};
class C_Hatchback_02_EPOCH2: C_Hatchback_02_EPOCH{};
@ -4381,7 +4441,8 @@ class CfgPricing
class C_Hatchback_02_EPOCH4: C_Hatchback_02_EPOCH{};
class C_SUV_01_EPOCH
{
price = 750;
price = 7500;
tax = 0.9;
};
class C_SUV_01_EPOCH1: C_SUV_01_EPOCH{};
class C_SUV_01_EPOCH2: C_SUV_01_EPOCH{};
@ -4390,22 +4451,27 @@ class CfgPricing
class C_Rubberboat_EPOCH
{
price = 500;
tax = 0.9;
};
class C_Rubberboat_02_EPOCH
{
price = 500;
tax = 0.9;
};
class C_Rubberboat_03_EPOCH
{
price = 500;
tax = 0.9;
};
class C_Rubberboat_04_EPOCH
{
price = 500;
tax = 0.9;
};
class C_Van_01_box_EPOCH
{
price = 1000;
price = 10000;
tax = 0.9;
};
class C_Van_01_box_EPOCH1: C_Van_01_box_EPOCH{};
class C_Van_01_box_EPOCH2: C_Van_01_box_EPOCH{};
@ -4413,7 +4479,8 @@ class CfgPricing
class C_Van_01_box_EPOCH4: C_Van_01_box_EPOCH{};
class C_Van_01_transport_EPOCH
{
price = 1000;
price = 10000;
tax = 0.9;
};
class C_Van_01_transport_EPOCH1: C_Van_01_transport_EPOCH{};
class C_Van_01_transport_EPOCH2: C_Van_01_transport_EPOCH{};
@ -4421,27 +4488,33 @@ class CfgPricing
class C_Van_01_transport_EPOCH4: C_Van_01_transport_EPOCH{};
class C_Boat_Civil_01_EPOCH
{
price = 750;
price = 7500;
tax = 0.9;
};
class C_Boat_Civil_01_police_EPOCH
{
price = 750;
price = 7500;
tax = 0.9;
};
class C_Boat_Civil_01_rescue_EPOCH
{
price = 750;
price = 7500;
tax = 0.9;
};
class B_Heli_Light_01_EPOCH
{
price = 2500;
price = 25000;
tax = 0.9;
};
class B_SDV_01_EPOCH
{
price = 1000;
price = 10000;
tax = 0.9;
};
class B_MRAP_01_EPOCH
{
price = 2500;
price = 45000;
tax = 0.9;
};
class B_MRAP_01_EPOCH1: B_MRAP_01_EPOCH{};
class B_MRAP_01_EPOCH2: B_MRAP_01_EPOCH{};
@ -4449,7 +4522,8 @@ class CfgPricing
class B_MRAP_01_EPOCH4: B_MRAP_01_EPOCH{};
class O_MRAP_02_EPOCH
{
price = 2500;
price = 45000;
tax = 0.9;
};
class O_MRAP_02_EPOCH1: O_MRAP_02_EPOCH{};
class O_MRAP_02_EPOCH2: O_MRAP_02_EPOCH{};
@ -4457,7 +4531,8 @@ class CfgPricing
class O_MRAP_02_EPOCH4: O_MRAP_02_EPOCH{};
class I_MRAP_03_EPOCH
{
price = 2500;
price = 45000;
tax = 0.9;
};
class I_MRAP_03_EPOCH1: I_MRAP_03_EPOCH{};
class I_MRAP_03_EPOCH2: I_MRAP_03_EPOCH{};
@ -4465,7 +4540,8 @@ class CfgPricing
class I_MRAP_03_EPOCH4: I_MRAP_03_EPOCH{};
class B_G_Offroad_01_armed_EPOCH
{
price = 2500;
price = 25000;
tax = 0.9;
};
class B_G_Offroad_01_armed_EPOCH1: B_G_Offroad_01_armed_EPOCH{};
class B_G_Offroad_01_armed_EPOCH2: B_G_Offroad_01_armed_EPOCH{};
@ -4473,7 +4549,8 @@ class CfgPricing
class B_G_Offroad_01_armed_EPOCH4: B_G_Offroad_01_armed_EPOCH{};
class B_Truck_01_mover_EPOCH
{
price = 1000;
price = 10000;
tax = 0.9;
};
class B_Truck_01_mover_EPOCH1: B_Truck_01_mover_EPOCH {};
class B_Truck_01_mover_EPOCH2: B_Truck_01_mover_EPOCH {};
@ -4481,7 +4558,8 @@ class CfgPricing
class B_Truck_01_mover_EPOCH4: B_Truck_01_mover_EPOCH {};
class B_Truck_01_transport_EPOCH
{
price = 1000;
price = 10000;
tax = 0.9;
};
class B_Truck_01_transport_EPOCH1: B_Truck_01_transport_EPOCH {};
class B_Truck_01_transport_EPOCH2: B_Truck_01_transport_EPOCH {};
@ -4489,7 +4567,8 @@ class CfgPricing
class B_Truck_01_transport_EPOCH4: B_Truck_01_transport_EPOCH {};
class B_Truck_01_covered_EPOCH
{
price = 1000;
price = 10000;
tax = 0.9;
};
class B_Truck_01_covered_EPOCH1: B_Truck_01_covered_EPOCH {};
class B_Truck_01_covered_EPOCH2: B_Truck_01_covered_EPOCH {};
@ -4497,7 +4576,8 @@ class CfgPricing
class B_Truck_01_covered_EPOCH4: B_Truck_01_covered_EPOCH {};
class B_Truck_01_box_EPOCH
{
price = 1000;
price = 10000;
tax = 0.9;
};
class B_Truck_01_box_EPOCH1: B_Truck_01_box_EPOCH {};
class B_Truck_01_box_EPOCH2: B_Truck_01_box_EPOCH {};
@ -4505,7 +4585,8 @@ class CfgPricing
class B_Truck_01_box_EPOCH4: B_Truck_01_box_EPOCH {};
class O_Truck_02_transport_EPOCH
{
price = 1000;
price = 10000;
tax = 0.9;
};
class O_Truck_02_transport_EPOCH1: O_Truck_02_transport_EPOCH {};
class O_Truck_02_transport_EPOCH2: O_Truck_02_transport_EPOCH {};
@ -4513,7 +4594,8 @@ class CfgPricing
class O_Truck_02_transport_EPOCH4: O_Truck_02_transport_EPOCH {};
class O_Truck_02_covered_EPOCH
{
price = 1000;
price = 10000;
tax = 0.9;
};
class O_Truck_02_covered_EPOCH1: O_Truck_02_covered_EPOCH {};
class O_Truck_02_covered_EPOCH2: O_Truck_02_covered_EPOCH {};
@ -4521,7 +4603,8 @@ class CfgPricing
class O_Truck_02_covered_EPOCH4: O_Truck_02_covered_EPOCH {};
class O_Truck_02_box_EPOCH
{
price = 1000;
price = 10000;
tax = 0.9;
};
class O_Truck_02_box_EPOCH1: O_Truck_02_box_EPOCH {};
class O_Truck_02_box_EPOCH2: O_Truck_02_box_EPOCH {};
@ -4529,7 +4612,8 @@ class CfgPricing
class O_Truck_02_box_EPOCH4: O_Truck_02_box_EPOCH {};
class O_Truck_03_transport_EPOCH
{
price = 1000;
price = 10000;
tax = 0.9;
};
class O_Truck_03_transport_EPOCH1: O_Truck_03_transport_EPOCH {};
class O_Truck_03_transport_EPOCH2: O_Truck_03_transport_EPOCH {};
@ -4537,49 +4621,64 @@ class CfgPricing
class O_Truck_03_transport_EPOCH4: O_Truck_03_transport_EPOCH {};
class O_Truck_03_covered_EPOCH
{
price = 1000;
price = 10000;
tax = 0.9;
};
class O_Truck_03_covered_EPOCH1: O_Truck_03_covered_EPOCH {};
class O_Truck_03_covered_EPOCH2: O_Truck_03_covered_EPOCH {};
class O_Truck_03_covered_EPOCH3: O_Truck_03_covered_EPOCH {};
class O_Truck_03_covered_EPOCH4: O_Truck_03_covered_EPOCH {};
class uh1h_Epoch
{
price = 22500;
tax = 0.9;
};
class O_Heli_Light_02_unarmed_EPOCH
{
price = 2500;
price = 25000;
tax = 0.9;
};
class I_Heli_Transport_02_EPOCH
{
price = 2500;
price = 25000;
tax = 0.9;
};
class I_Heli_light_03_unarmed_EPOCH
{
price = 2500;
price = 25000;
tax = 0.9;
};
class C_Heli_Light_01_civil_EPOCH
{
price = 2500;
price = 25000;
tax = 0.9;
};
class C_Heli_Light_01_civil_2seat_EPOCH: C_Heli_Light_01_civil_EPOCH {};
class C_Heli_Light_01_civil_4seat_EPOCH: C_Heli_Light_01_civil_EPOCH {};
class O_Heli_Transport_04_EPOCH
{
price = 2500;
price = 25000;
tax = 0.9;
};
class O_Heli_Transport_04_bench_EPOCH
{
price = 2500;
price = 25000;
tax = 0.9;
};
class O_Heli_Transport_04_box_EPOCH
{
price = 2500;
price = 25000;
tax = 0.9;
};
class O_Heli_Transport_04_covered_EPOCH
{
price = 2500;
price = 25000;
tax = 0.9;
};
class B_Heli_Transport_03_unarmed_EPOCH
{
price = 2500;
price = 25000;
tax = 0.9;
};
class I_UAV_01_F
{
@ -4588,275 +4687,343 @@ class CfgPricing
class jetski_epoch
{
price = 500;
tax = 0.9;
};
class ebike_epoch
{
price = 1500;
price = 3500;
tax = 0.9;
};
class mosquito_epoch
{
price = 1500;
tax = 0.9;
};
class K01
{
price = 300;
tax = 0.9;
};
class K02
{
price = 300;
tax = 0.9;
};
class K03
{
price = 300;
tax = 0.9;
};
class K04
{
price = 300;
tax = 0.9;
};
class CUP_C_Fishing_Boat_Chernarus
{
price = 800;
tax = 0.9;
};
class CUP_C_LR_Transport_CTK
{
price = 800;
tax = 0.9;
};
class CUP_B_Zodiac_USMC
{
price = 800;
tax = 0.9;
};
class CUP_C_Skoda_Red_CIV
{
price = 800;
tax = 0.9;
};
class CUP_C_Skoda_White_CIV
{
price = 800;
tax = 0.9;
};
class CUP_C_Skoda_Blue_CIV
{
price = 800;
tax = 0.9;
};
class CUP_C_Skoda_Green_CIV
{
price = 800;
tax = 0.9;
};
class CUP_C_SUV_CIV
{
price = 1500;
tax = 0.9;
};
class CUP_B_HMMWV_Transport_USA
{
price = 2500;
tax = 0.9;
};
class CUP_B_HMMWV_Unarmed_USA
{
price = 2500;
tax = 0.9;
};
class CUP_C_SUV_TK
{
price = 2000;
tax = 0.9;
};
class CUP_B_LR_Transport_CZ_D
{
price = 1100;
tax = 0.9;
};
class CUP_C_Datsun_Covered
{
price = 800;
tax = 0.9;
};
class CUP_C_Datsun_Plain
{
price = 800;
tax = 0.9;
};
class CUP_C_Datsun_Tubeframe
{
price = 800;
tax = 0.9;
};
class CUP_C_Datsun_4seat
{
price = 800;
tax = 0.9;
};
class CUP_C_Datsun
{
price = 800;
tax = 0.9;
};
class CUP_C_Golf4_green_Civ
{
price = 800;
tax = 0.9;
};
class CUP_C_Golf4_red_Civ
{
price = 800;
tax = 0.9;
};
class CUP_C_Golf4_blue_Civ
{
price = 800;
tax = 0.9;
};
class CUP_C_Golf4_black_Civ
{
price = 800;
tax = 0.9;
};
class CUP_C_Golf4_kitty_Civ
{
price = 800;
tax = 0.9;
};
class CUP_C_Golf4_reptile_Civ
{
price = 800;
tax = 0.9;
};
class CUP_C_Golf4_camodigital_Civ
{
price = 800;
tax = 0.9;
};
class CUP_C_Golf4_camodark_Civ
{
price = 800;
tax = 0.9;
};
class CUP_C_Golf4_camo_Civ
{
price = 800;
tax = 0.9;
};
class CUP_B_M1030
{
price = 500;
tax = 0.9;
};
class CUP_C_Ural_Civ_03
{
price = 1200;
tax = 0.9;
};
class CUP_C_Ural_Open_Civ_03
{
price = 1200;
tax = 0.9;
};
class CUP_C_Ural_Civ_02
{
price = 1200;
tax = 0.9;
};
class CUP_B_TowingTractor_USMC
{
price = 800;
tax = 0.9;
};
class CUP_C_C47_CIV
{
price = 1600;
tax = 0.9;
};
class CUP_B_LR_Transport_CZ_W
{
price = 800;
tax = 0.9;
};
class CUP_C_Golf4_white_Civ
{
price = 800;
tax = 0.9;
};
class CUP_C_Golf4_whiteblood_Civ
{
price = 800;
tax = 0.9;
};
class CUP_C_Golf4_yellow_Civ
{
price = 800;
tax = 0.9;
};
class CUP_C_Octavia_CIV
{
price = 1600;
tax = 0.9;
};
class CUP_C_Ural_Civ_01
{
price = 1000;
tax = 0.9;
};
class CUP_C_Ural_Open_Civ_01
{
price = 1000;
tax = 0.9;
};
class CUP_B_Ural_CDF
{
price = 1000;
tax = 0.9;
};
class CUP_B_Ural_Open_CDF
{
price = 1000;
tax = 0.9;
};
class CUP_C_Ural_Open_Civ_02
{
price = 1000;
tax = 0.9;
};
class CUP_B_HMMWV_Ambulance_USA
{
price = 1500;
tax = 0.9;
};
class CUP_C_UAZ_Unarmed_TK_CIV
{
price = 1000;
tax = 0.9;
};
class CUP_C_UAZ_Open_TK_CIV
{
price = 1000;
tax = 0.9;
};
class CUP_B_UAZ_Unarmed_CDF
{
price = 1000;
tax = 0.9;
};
class CUP_B_Ural_Empty_CDF
{
price = 1000;
tax = 0.9;
};
class CUP_C_DC3_CIV
{
price = 2400;
tax = 0.9;
};
class C_Boat_Transport_02_F
{
price = 1200;
tax = 0.9;
};
class C_Scooter_Transport_01_F
{
price = 1200;
tax = 0.9;
};
class C_Offroad_02_unarmed_F
{
price = 3500;
tax = 0.9;
};
class I_C_Offroad_02_unarmed_F
{
price = 3500;
tax = 0.9;
};
class B_T_LSV_01_unarmed_F
{
price = 4400;
tax = 0.9;
};
class O_LSV_02_unarmed_F
{
price = 4300;
tax = 0.9;
};
class O_T_LSV_02_unarmed_F
{
price = 4600;
tax = 0.9;
};
class C_Plane_Civil_01_F
{
price = 5000;
tax = 0.9;
};
class C_Plane_Civil_01_racing_F
{
price = 5000;
tax = 0.9;
};
class B_CTRG_LSV_01_light_F
{
price = 4400;
tax = 0.9;
};
class B_LSV_01_unarmed_F
{
price = 4400;
tax = 0.9;
};
class B_T_VTOL_01_vehicle_blue_EPOCH
{
price = 10000;
tax = 0.9;
};
class B_T_VTOL_01_infantry_olive_EPOCH: B_T_VTOL_01_vehicle_blue_EPOCH {};
class O_T_VTOL_02_infantry_EPOCH
{
price = 10000;
tax = 0.9;
};
class O_T_VTOL_02_vehicle_grey_EPOCH: O_T_VTOL_02_infantry_EPOCH {};
class B_UavTerminal
@ -5784,6 +5951,14 @@ class CfgPricing
{
price = 5;
};
class thor_mask_epoch
{
price = 30;
};
class iron_mask_epoch
{
price = 30;
};
class hockey_mask_epoch
{
price = 30;

View File

@ -26,6 +26,11 @@ class CfgRemoteExec
{
mode = 1;
jip = 0;
class EPOCH_server_SetFinalPlayerPos
{
allowedTargets=2;
jip = 0;
};
class bis_fnc_reviveinitaddplayer
{
allowedTargets = 2;

View File

@ -28,6 +28,10 @@ class CfgSnapChecks
class CinderWallDoorwHatch_EPOCH : WoodLargeWall_EPOCH {};
class CinderWall_EPOCH : WoodLargeWall_EPOCH {};
class CinderWallHalf_EPOCH : WoodLargeWall_EPOCH {};
class PlyThirdWall_EPOCH : WoodLargeWall_EPOCH
{
nails[] = {{{2.46932,0,0.120775},{2.46932,0,-0.190775}},{{-2.46932,0,0.120775},{-2.46932,0,-0.190775}},{{0,0,1},{2.76932,0,1}},{{0,0,1},{-2.76932,0,1}}};
};
class WoodFloor_Epoch
{
nails[] = {{{0,0,0.15},{2.8555,0,0.15}},{{0,0,0.15},{0,2.8555,0.15}},{{0,0,0.15},{-2.8555,0,0.15}},{{0,0,0.15},{0,-2.8555,0.15}},{{2.5555,0,0.15},{2.5555,0,-0.15}},{{-2.5555,0,0.15},{-2.5555,0,-0.15}},{{0,-2.5555,0.15},{0,-2.5555,-0.15}},{{0,2.5555,0.15},{0,2.5555,-0.15}}};
@ -51,6 +55,15 @@ class CfgSnapChecks
class MetalTower_EPOCH : WoodStairs_EPOCH {};
class CinderTower_EPOCH : WoodStairs_EPOCH {};
class WoodRamp_EPOCH : WoodStairs_EPOCH {};
class BaseCam_EPOCH
{
nails[] = {
{{0,0.15,-0.06},{0,0.3,0.04}},
{{0,0.15,-0.06},{0,0.3,-0.16}},
{{0,0.15,-0.06},{-0.1,0.3,-0.06}},
{{0,0.15,-0.06},{0.1,0.3,-0.06}}
};
};
};
/*[[[end]]]*/

View File

@ -15,6 +15,7 @@
//[[[cog import generate_private_arrays ]]]
private ["_Simulated","_DamageAllowed","_ExceptedBaseObjects","_IndestructibleBaseObjects","_UseIndestructible","_VAL","_ammoClass","_ammoObj","_anims","_animsData","_arr","_arrCount","_baseObj","_buildingJammerRange","_cfgBaseBuilding","_cfgEpochClient","_class","_color","_damage","_location","_marker","_maxTTL","_owner","_response","_serverSettingsConfig","_storageSlot","_textureSlot","_ttl","_vehHiveKey","_worldspace"];
//[[[end]]]
EPOCH_BaseCams = [];
_maxTTL = parseNumber EPOCH_expiresBuilding;
_serverSettingsConfig = configFile >> "CfgEpochServer";
_baseDynamicSimulationSystem = [_serverSettingsConfig, "baseDynamicSimulationSystem", true] call EPOCH_fnc_returnConfigEntry;
@ -142,8 +143,18 @@ for "_i" from 0 to _this do {
};
// Handle Jammers and create marker if EPOCH_SHOW_JAMMERS set true.
if (_class isKindOf "PlotPole_EPOCH") then {
if (EPOCH_SHOW_JAMMERS) then {
if (_class in ["PlotPole_EPOCH","BaseCam_EPOCH"]) then {
if (_owner != "-1") then {
_baseObj setVariable ["BUILD_OWNER", _owner, true];
};
// add BaseCam to public array
if (_class isequalto "BaseCam_EPOCH") then {
EPOCH_BaseCams pushBackUnique _baseObj;
// Set PubVar later after all Cams are loaded in
};
if (_class isequalto "PlotPole_EPOCH" && EPOCH_SHOW_JAMMERS) then {
_marker = createMarker [str(_location), _location];
_marker setMarkerShape "ICON";
// TODO allow players to change this per base
@ -159,10 +170,6 @@ for "_i" from 0 to _this do {
};
_baseObj setVariable ["BUILD_SLOT", _i, true];
if (_owner != "-1") then {
_baseObj setVariable ["BUILD_OWNER", _owner, true];
};
if (_textureSlot != 0) then {
// get texture path from index
_color = getArray (_cfgBaseBuilding >> _class >> "availableTextures");
@ -188,5 +195,6 @@ for "_i" from 0 to _this do {
EPOCH_BuildingSlots set [_i,0];
};
};
publicvariable "EPOCH_BaseCams";
missionNamespace setVariable ["EPOCH_BuildingSlotCount", {_x == 0} count EPOCH_BuildingSlots, true];
true

View File

@ -46,6 +46,10 @@ if (isText _staticClassConfig) then {
if (_staticClass isEqualTo "Garden_EPOCH") then {
EPOCH_activeGardens pushBackUnique _storageObj;
};
if (_staticClass in ["SolarCharger_EPOCH","SolarChargerXL_EPOCH"]) then {
EPOCH_activeSolars pushBackUnique _storageObj;
};
if (getNumber(_cfgBaseBuilding >> _staticClass >> "isSecureStorage") == 1) then{
_storageObj setVariable["EPOCH_Locked", false, true];
@ -81,8 +85,21 @@ if (isText _staticClassConfig) then {
if (_objSlot != -1) then {
_newVehicle = [_vehicle, false] call EPOCH_server_simulSwap;
_newVehicle setVariable["BUILD_OWNER", _playerUID, true];
// add BaseCam to public array
if (_newVehicle iskindof "BaseCam_EPOCH") then {
_playerGroup = _player getVariable["GROUP", ""];
_Owner = _playerUID;
if (_playerGroup != "") then {
_Owner = _playerGroup;
};
_newVehicle setVariable["BUILD_OWNER", _Owner, true];
EPOCH_BaseCams pushBackUnique _newVehicle;
publicvariable "EPOCH_BaseCams";
}
else {
_newVehicle setVariable["BUILD_OWNER", _playerUID, true];
};
_newVehicle call EPOCH_saveBuilding;
};

View File

@ -58,7 +58,7 @@ if ((_response select 0) == 1 && (_response select 1) isEqualType []) then {
if (_selectedPlayerName == "Dead Player") then {
_memberrange = ["PlayerData", _selectedPlayerUID] call EPOCH_fnc_server_hiveGETRANGE;
if (count (_memberrange select 1) > 0) then {
if (typename (_memberrange select 1 select 0) == "STRING") then {
if ((_memberrange select 1 select 0) isEqualType "STRING") then {
_selectedPlayerName = _memberrange select 1 select 0;
};
};

View File

@ -31,7 +31,7 @@ _contentArray = [];
} forEach (allPlayers select {getPlayerUID _x == _groupID});
if !(_contentArray isEqualTo []) then {
_contentArray params ["_groupName","_leaderName","_groupSize","_modArray","_memberArray"];
_allPlayers = allPlayers select {alive _x};
@ -54,13 +54,13 @@ if !(_contentArray isEqualTo []) then {
[_x] joinSilent _group;
};
} forEach (_allPlayers select {getPlayerUID _x == _selectedPlayerUID});
// find player name from DB
if (_selectedPlayerName == "Dead Player") then {
_memberrange = ["PlayerData", _selectedPlayerUID] call EPOCH_fnc_server_hiveGETRANGE;
if (count (_memberrange select 1) > 0) then {
if (typename (_memberrange select 1 select 0) == "STRING") then {
if ((_memberrange select 1 select 0) isEqualType "STRING") then {
_selectedPlayerName = _memberrange select 1 select 0;
};
};

View File

@ -18,7 +18,7 @@ private ["_allowedVehicleListName","_allowedVehiclesList","_backpacks","_cfgPric
params ["_player",["_token","",[""]],["_objArr",[]],["_pos",[]],["_wepHolder",objNull],["_clearCargo",true],["_objSpc","CAN_COLLIDE"],["_driverType",""],["_gunnerType",""],["_commanderType",""],["_crewType",""],["_doDamage",false]];
if !([_player,_token]call EPOCH_server_getPToken) exitWith {};
if (typeName _objArr != "ARRAY")then{_objArr = [_objArr];};
if !(_objArr isEqualType [])then{_objArr = [_objArr];};
if (count _objArr < 1) exitWith {};
diag_log format["Epoch: Attempt Create Object: %1 for %2",_objArr, name _player];

View File

@ -0,0 +1,43 @@
/*
Author: He-Man - EpochMod.com
Contributors:
Description:
Set final Player position on login
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/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_SetFinalPlayerPos.sqf
*/
params ["_player","_newPlyr"];
private ["_finalpos","_fallbackpos"];
if (isnull _player || isnull _newPlyr) exitwith {
diag_log "DEBUG: SetFinalPlayerPos failed - Player or PlayerObj is Null";
};
if !(typeof _player isequalto "VirtualMan_EPOCH") exitwith {
diag_log "DEBUG: SetFinalPlayerPos failed - PlayerObj != VirtualMan_EPOCH";
};
_finalpos = _newPlyr getvariable ["FinalDest",[]];
if (_finalpos isequalto []) exitwith {
diag_log "DEBUG: SetFinalPlayerPos failed - No FinalPos Variable set";
};
if !(_finalpos isequaltype []) exitwith {
diag_log "DEBUG: SetFinalPlayerPos failed - FinalPos is not an Array";
};
if (count _finalpos < 2) exitwith {
diag_log "DEBUG: SetFinalPlayerPos failed - count FinalPos < 2";
};
_fallbackpos = getmarkerpos "respawn_west";
_fallbackpos set [2,0];
_finalpos params [["_location",_fallbackpos],["_dir",0]];
_newPlyr setDir _dir;
_newPlyr setPosATL _location;
_newPlyr setVariable["SETUP", true, true];
_player setPosATL _location;
_newPlyr allowdamage true;
_newPlyr hideobjectglobal false;

View File

@ -13,7 +13,7 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_SetUnitLoadout.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_type"];
private ["_type","_loadabs"];
//[[[end]]]
params ["_newPlyr","_loadout"];
@ -83,6 +83,11 @@ if !(_bpack isequalto "") then {
[Vestcontainer _newPlyr, _vestitems],
[BackpackContainer _newPlyr, _bpackitems]
];
true
_loadabs = loadabs _newPlyr;
if !(uniform _newPlyr isequalto _uniform && vest _newPlyr isequalto _vest && backpack _newPlyr isequalto _bpack) then {
diag_log format ["EPOCH Debug: Setunitloadout failed - Unifmorm should: %1 is: %2 - Vest should: %3 is: %4 - Backpack should: %5 is: %6",_uniform,uniform _newPlyr,_vest,vest _newPlyr,_bpack,backpack _newPlyr];
_loadabs = -1;
};
_loadabs

View File

@ -61,7 +61,7 @@ if (_playerObj isEqualType objNull) then {
[_fsmHandle,['_checkPlayer_PVC', _dead]] remoteExecCall ['setFSMVariable', _playerObj];
if (!_dead) then { //Load old Char
[_playerObj, _isMale, _fsmHandle] call EPOCH_server_loadPlayer;
[_playerObj, _isMale, _fsmHandle, _arr] call EPOCH_server_loadPlayer;
};
};
};

View File

@ -17,7 +17,7 @@ private ["_Primary","_CheckLocation","_allGroupMembers","_alreadyDead","_assigne
//[[[end]]]
_reject = true;
params [["_player",objNull,[objNull]],["_isMale",true],["_fsmHandle",0]];
params [["_player",objNull,[objNull]],["_isMale",true],["_fsmHandle",0],["_playerData",[]]];
if (!isNull _player) then {
@ -30,16 +30,17 @@ if (!isNull _player) then {
if (_playerUID != "") then {
// Make Hive call
_playerData = [];
(["Player", _playerUID] call EPOCH_fnc_server_hiveGETRANGE) params [
["_status", 0 ],
["_playerDataTmp", [] ]
];
if (_status == 1 && _playerDataTmp isEqualType []) then {
_playerData = _playerDataTmp;
if (_playerdata isequalto []) then {
// Make Hive call
(["Player", _playerUID] call EPOCH_fnc_server_hiveGETRANGE) params [
["_status", 0 ],
["_playerDataTmp", [] ]
];
if (_status == 1 && _playerDataTmp isEqualType []) then {
_playerData = _playerDataTmp;
};
};
// Apperance defaults
_uniform = [_serverSettingsConfig, "defaultUniformFemale", "U_Test_uniform"] call EPOCH_fnc_returnConfigEntry;
_class = "Epoch_Female_F";
@ -177,9 +178,8 @@ if (!isNull _player) then {
_group = createGroup [west, true];
};
_player setPosATL _location;
_newPlyr = _group createUnit[_class, _location, [], 0, "CAN_COLLIDE"];
_newPlyr = _group createUnit[_class, getMarkerPos "respawn_west", [], 0, "CAN_COLLIDE"];
_newPlyr hideobjectglobal true;
if !(isNull _newPlyr) then {
// disable AI on temp unit
@ -199,126 +199,17 @@ if (!isNull _player) then {
// disable further damage server side
_newPlyr allowDamage false;
_newPlyr setDir _dir;
_newPlyr setPosATL _location;
// set player loadout
if (_schemaVersion >= 1.0) then {
_playerData params ["","","_appearance","","","_loadout"];
// get current weapon to send to param for selectWeapon
_currentWeapon = _appearance param [4,""];
_playerData params ["","","_appearance","","","_loadout"];
// get current weapon to send to param for selectWeapon
_currentWeapon = _appearance param [4,""];
// _newPlyr setUnitLoadout [_loadout, false];
// Workaround for Client / Server synchronizing issue in SetUnitLoadout
[_newPlyr,_loadout] call Epoch_server_SetUnitLoadout;
diag_log format["DEBUG: loaded player %1 with new schema Version %2", _newPlyr, _schemaVersion];
} else {
// Legacy code start
// Apperance + Weapons
_playerData params ["","","_appearance","","","_weaponsAndItems","_linkedItems","_normalMagazines","_itemsInContainers","_weaponsInContainers"];
// load Apperance
_appearance params ["_goggles","_headgear","_vest","_backpack","_uniform"];
// old data format for 0.5 and prior.
// Load Apperance START
if (_uniform != "") then {
_newPlyr addUniform _uniform;
};
if (_backpack != "") then {
_newPlyr addBackpack _backpack;
};
if (_goggles != "") then {
_newPlyr addGoggles _goggles;
};
if (_headgear != "") then {
_newPlyr addHeadgear _headgear;
};
if (_vest != "") then {
_newPlyr addVest _vest;
};
// Load Apperance END
// Load inventory + defaults START
if (count _weaponsAndItems >= 3) then {
_weaponsAndItems params ["_currentWeaponTmp","_weaponsAndItemsArray","_equipped"];
_currentWeapon = _currentWeaponTmp;
{
_weapon = _x deleteAt 0;
_type = getNumber(configfile >> "cfgweapons" >> _weapon >> "type");
_attachments = [];
_wMags = false;
_wMagsArray = [];
// suppressor, laser, optics, magazines(array), bipods
{
// magazines
if (_x isEqualType []) then{
_wMags = true;
_wMagsArray pushback _x;
} else {
// attachments
if (_x != "") then{
_attachments pushBack _x;
};
};
} forEach _x;
if (_wMags) then {
{
_newPlyr addMagazine _x;
} foreach _wMagsArray;
};
// add weapon if equiped
if (_weapon in _equipped) then {
_equipped = _equipped - [_weapon];
if (_weapon != "") then {
_newPlyr addWeapon _weapon;
};
switch (_type) do {
case 1: { // primary
removeAllPrimaryWeaponItems _newPlyr;
{ _newPlyr addPrimaryWeaponItem _x } forEach _attachments;
};
case 2: { // handgun
removeAllHandgunItems _newPlyr;
{ _newPlyr addHandgunItem _x } forEach _attachments;
};
case 4: { // secondary
// removeAllSecondaryWeaponItems player; does not exist ?
{
_newPlyr removeSecondaryWeaponItem _x;
} forEach (secondaryWeaponItems _newPlyr);
{ _newPlyr addSecondaryWeaponItem _x } forEach _attachments;
};
};
}else{
{
_newPlyr addItem _x;
} forEach _attachments;
};
} forEach _weaponsAndItemsArray;
};
// Linked items
{
if (_x in["Binocular", "Rangefinder","Laserdesignator","Laserdesignator_02","Laserdesignator_03","Laserdesignator_01_khk_F","Laserdesignator_02_ghex_F"]) then {
_newPlyr addWeapon _x;
} else {
_newPlyr linkItem _x;
};
} forEach _linkedItems;
// add items to containers
[_newPlyr, _itemsInContainers] call EPOCH_fnc_addItemToX;
// add weapons to containers
[_newPlyr, _weaponsInContainers] call EPOCH_fnc_addItemToX;
// Add magazines
{_newPlyr addMagazine _x} forEach _normalMagazines;
// Load inventory + defaults END
// Legacy code stop
};
// Workaround for Client / Server synchronizing issue in SetUnitLoadout
_loadabs = [_newPlyr,_loadout] call Epoch_server_SetUnitLoadout;
if (_loadabs isequalto -1) then {
deleteVehicle _newPlyr;
};
// Final Push
if (isNull _player) then {
@ -354,15 +245,11 @@ if (!isNull _player) then {
_communityStats = (_communityStatsArray param [1,[]]) param [0,[]];
_newPlyr setVariable["COMMUNITY_STATS", _communityStats];
// re enable damage server side
_newPlyr allowDamage true;
// Flag new body as ready for use.
_newPlyr setVariable["SETUP", true, true];
_newPlyr setVariable["FinalDest", [_location,_dir], true];
// Send message to player so they can take over the new body.
[_playerNetID, _playerUID, [_newPlyr, _vars, _currentWeapon, loadAbs _newPlyr, _playerGroup, _canBeRevived, _newPlyr call EPOCH_server_setPToken,_playerGroupArray, _communityStats, _hitpoints], _fsmHandle, _player] call EPOCH_server_pushPlayer;
// diag_log str([_playerNetID, _playerUID, _player, [_newPlyr, (_player isEqualTo _newPlyr), _vars, _currentWeapon, loadAbs _newPlyr, _playerGroup, _canBeRevived, [],_playerGroupArray, _communityStats, _hitpoints], _fsmHandle]);
[_playerNetID, _playerUID, [_newPlyr, _vars, _currentWeapon, _loadabs, _playerGroup, _canBeRevived, _newPlyr call EPOCH_server_setPToken,_playerGroupArray, _communityStats, _hitpoints], _fsmHandle, _player] call EPOCH_server_pushPlayer;
// revive test
_newPlyr setVariable ['#rev_enabled', true, true];

Some files were not shown because too many files have changed in this diff Show More