diff --git a/Rearm.paa b/Rearm.paa new file mode 100644 index 00000000..5d9c4a37 Binary files /dev/null and b/Rearm.paa differ diff --git a/Refuel.paa b/Refuel.paa new file mode 100644 index 00000000..783ac0b0 Binary files /dev/null and b/Refuel.paa differ diff --git a/Repair.paa b/Repair.paa new file mode 100644 index 00000000..8d6e67d9 Binary files /dev/null and b/Repair.paa differ diff --git a/Server_Install_Pack/sc/BattlEye/remoteexec.txt b/Server_Install_Pack/sc/BattlEye/remoteexec.txt index 8ee6daf4..741678bc 100644 --- a/Server_Install_Pack/sc/BattlEye/remoteexec.txt +++ b/Server_Install_Pack/sc/BattlEye/remoteexec.txt @@ -1 +1 @@ -5 "" !="bis_fnc_execvm \[\[.+\],\"initPlayerServer.sqf\"]" !="bis_fnc_effectkilled(airdestruction|secondaries) \[.+\]" !="epoch_server_checkplayer \[[A-Z]{1} [A-Za-z]{4,10} [0-9]{1,3}-[0-9]{1,3}:[0-9]{1,3}( \(.+\)|) REMOTE\]" !="epoch_server_(save(_vehicles|building)|(lock|pack)Storage|(upgrade|remove|paint|maint)build) \[.+\]" !="epoch_server_((load|respawn|dead|invite|revive|teleport)Player|(upgrade|updateplayer|create|delete)Group) \[.+\]" !="epoch_server_(deadplayerdetonate|triggerantagonist|playersetvariable|missioncomms|make(marker|SP)|removemarker) \[.+\]" !="epoch_server_(knockDownTree|mineRocks|lootAnimal|handle_(say3d|switchmove|sapperObjs)) \[.+\]" !="epoch_server_((repair|fill|lock)Vehicle|(loot|fill)Container|(store|take)Crypto|make(NPC|)Trade) \[.+\]" !="epoch_server_(tradeRequest|equippeditem|packJack|create(object|AirDrop)|airDropCrate|destroytrash|unpackBackpack) \[.+\]" !="epoch_(localcleanup|fnc_saveplayer|client_bitePlayer|serverlootobject) \[.+\]" +5 "" !="bis_fnc_execvm \[\[.+\],\"initPlayerServer.sqf\"]" !="bis_fnc_effectkilled(airdestruction|secondaries) \[.+\]" !="epoch_server_checkplayer \[[A-Z]{1} [A-Za-z]{4,10} [0-9]{1,3}-[0-9]{1,3}:[0-9]{1,3}( \(.+\)|) REMOTE\]" !="epoch_server_(save(_vehicles|building)|(lock|pack)Storage|(upgrade|remove|paint|maint)build) \[.+\]" !="epoch_server_((load|respawn|dead|invite|revive|teleport)Player|(upgrade|updateplayer|create|delete)Group) \[.+\]" !="epoch_server_(deadplayerdetonate|triggerantagonist|playersetvariable|missioncomms|make(marker|SP)|removemarker) \[.+\]" !="epoch_server_(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) \[.+\]" diff --git a/Sources/epoch_code/compile/servicepoint/EPOCH_SP_Check.sqf b/Sources/epoch_code/compile/servicepoint/EPOCH_SP_Check.sqf new file mode 100644 index 00000000..8f010c6f --- /dev/null +++ b/Sources/epoch_code/compile/servicepoint/EPOCH_SP_Check.sqf @@ -0,0 +1,14 @@ +if (vehicle player == player) exitwith {false}; +if !(local vehicle player) exitwith {false}; +if (speed vehicle player > 2 || speed vehicle player < -2) exitwith {false}; +if (((getpos vehicle player) select 2) > 1) exitwith {false}; + +_config = 'CfgServicePoint' call EPOCH_returnConfig; +_servicepoints = getArray (_config >> worldname >> 'ServicePoints'); +_servicepointDist = ["CfgServicePoint", "ServicePointDist", 40] call EPOCH_fnc_returnConfigEntryV2; + +if (_servicepoints isequalto []) exitwith {false}; +if !(({player distance _x < _servicepointDist} count _servicepoints > 0)) exitwith {false}; +_Vehicle = vehicle player; +if (!(_Vehicle iskindof 'ship') && (((getposasl _Vehicle) select 2) < 1)) exitwith {false}; +true diff --git a/Sources/epoch_code/compile/servicepoint/EPOCH_SP_Rearm.sqf b/Sources/epoch_code/compile/servicepoint/EPOCH_SP_Rearm.sqf new file mode 100644 index 00000000..9b01a283 --- /dev/null +++ b/Sources/epoch_code/compile/servicepoint/EPOCH_SP_Rearm.sqf @@ -0,0 +1,30 @@ +params ['_vehicle','_ammotype','_turret','_reloagmags','_ammocount','_costs']; +private ['_magname']; +_vehtype = typeof _vehicle; +_VehName = getText(configFile >> 'cfgVehicles' >> _vehtype >> 'displayName'); +if (!local _vehicle) exitWith { + _line = 'Rearm denied - Vehicle is not local to you!'; + [_line,5] call Epoch_message; +}; +if(count (crew _vehicle) > 1) exitWith { + _line = 'Rearm denied - All Passengers must exit the Vehicle!'; + [_line,5] call Epoch_message; +}; +if (EPOCH_playerCrypto < _costs) exitWith { + _line = format ['You need %1 Crypto to re-arm %2', _costs,_VehName]; + [_line,5] call Epoch_message; +}; + +if(_costs > 0)then{ + [player,(_costs*-1)] remoteexec ['epoch_server_paycrypto',2]; +}; +_vehicle removeMagazinesTurret [_ammotype,_turret]; +for '_i' from 1 to _reloagmags do { + _vehicle addMagazineTurret [_ammotype, _turret, _ammocount]; +}; +_magname = getText (configFile >> 'CfgMagazines' >> _ammotype >> 'displayName'); +if (_magname isequalto '') then { + _magname = _ammotype; +}; +_line = format ['%1 rearmed with %2', _VehName, _magname]; +[_line,5] call Epoch_message; diff --git a/Sources/epoch_code/compile/servicepoint/EPOCH_SP_Refuel.sqf b/Sources/epoch_code/compile/servicepoint/EPOCH_SP_Refuel.sqf new file mode 100644 index 00000000..4c3cfb02 --- /dev/null +++ b/Sources/epoch_code/compile/servicepoint/EPOCH_SP_Refuel.sqf @@ -0,0 +1,33 @@ +private ['_vehicle','_args','_servicePoint','_costs','_updateInterval','_amount','_type','_name','_textMissing']; +_vehicle = _this select 0; +if (!local _vehicle) exitWith {}; +_args = _this select 1; +_costs = _args select 0; +_updateInterval = _args select 1; +_amount = _args select 2; +_type = typeOf _vehicle; +_name = getText(configFile >> 'cfgVehicles' >> _type >> 'displayName'); +if (EPOCH_playerCrypto < _costs) exitWith { + _line = format ['You need %1 Crypto to refuel %2', _costs,_name]; + [_line,5] call Epoch_message; +}; +if(_costs > 0)then{ + [player,(_costs*-1)] remoteexec ['epoch_server_paycrypto',2]; +}; +_vehicle engineOn false; +if ((vehicle player != _vehicle) || (!local _vehicle) || speed _vehicle < -2 || speed _vehicle > 2) exitWith { + _line = format ['Fueling of %1 stopped', _name]; + [_line,5] call Epoch_message; +}; +while {(vehicle player == _vehicle) && (local _vehicle)} do { + if (speed _vehicle > 2 || speed _vehicle < -2 ) exitWith { + _line = format ['Refueling of %1 stopped', _name]; + [_line,5] call Epoch_message; + }; + _vehicle setFuel ((Fuel _vehicle)+_amount); + if (Fuel _vehicle > 0.99) exitWith { + _line = format ['%1 Refueled', _name]; + [_line,5] call Epoch_message; + }; + uisleep _updateInterval; +}; diff --git a/Sources/epoch_code/compile/servicepoint/EPOCH_SP_Repair.sqf b/Sources/epoch_code/compile/servicepoint/EPOCH_SP_Repair.sqf new file mode 100644 index 00000000..1a162305 --- /dev/null +++ b/Sources/epoch_code/compile/servicepoint/EPOCH_SP_Repair.sqf @@ -0,0 +1,50 @@ +private ['_Ignatz_vehicle','_args','_servicePoint','_costs','_repairTime','_type','_name','_hitpoints','_allRepaired']; +_Ignatz_vehicle = _this select 0; +if (!local _Ignatz_vehicle) exitWith { + diag_log format['Error: called service_point_repair.sqf with non-local vehicle: %1', _Ignatz_vehicle] +}; +_args = _this select 1; +_costs = _args select 0; +_repairTime = _args select 1; +_type = typeOf _Ignatz_vehicle; +_name = getText(configFile >> 'cfgVehicles' >> _type >> 'displayName'); +if (EPOCH_playerCrypto < _costs) exitWith { + _line = format ['You need %1 Crypto to Repair %2', _costs,_name]; + [_line,5] call Epoch_message; +}; +if(_costs > 0)then{ + [player,(_costs*-1)] remoteexec ['epoch_server_paycrypto',2]; +}; +_Ignatz_vehicle engineOn false; +_repaired = []; +_allRepaired = true; +_allHitPointsDamage = getAllHitPointsDamage _Ignatz_vehicle; +{ + if ((vehicle player != _Ignatz_vehicle) || (!local _Ignatz_vehicle) || speed _Ignatz_vehicle < -2 || speed _Ignatz_vehicle > 2) exitWith { + _allRepaired = false; + _line = format ['Repairing of %1 stopped', _name]; + [_line,5] call Epoch_message; + }; + if (!(_x in _repaired) && !(_x isequalto "") && (_allHitPointsDamage select 2 select _foreachindex) > 0) then { + _partName = toarray _x; + _partName set [0,20]; + _partName set [1,45]; + _partName set [2,20]; + _partName = toString _partName; + _Ignatz_vehicle setHitPointDamage [_x,0]; + _line = format ['Repairing%1 ...', _partName]; + [_line,5] call Epoch_message; + _repaired pushback _x; + uisleep _repairTime; + }; +} foreach (_allHitPointsDamage select 0); +if (_allRepaired) then { + if ((damage _Ignatz_vehicle) > 0) then { + [_Ignatz_vehicle,["ALL",0],player,Epoch_personalToken] remoteExec ["EPOCH_server_repairVehicle",2]; + }; + _pos = getposatl _Ignatz_vehicle; + _pos set [2,(_pos select 2)+0.25]; + _Ignatz_vehicle setposatl _pos; + _line = format ['%1 full Repaired', _name]; + [_line,5] call Epoch_message; +}; diff --git a/Sources/epoch_code/compile/servicepoint/EPOCH_SP_Start.sqf b/Sources/epoch_code/compile/servicepoint/EPOCH_SP_Start.sqf new file mode 100644 index 00000000..d16359e8 --- /dev/null +++ b/Sources/epoch_code/compile/servicepoint/EPOCH_SP_Start.sqf @@ -0,0 +1,104 @@ +Ignatz_Refuel = nil; +Ignatz_Repair = nil; +Ignatz_Rearm0 = nil; +Ignatz_Rearm1 = nil; +Ignatz_Rearm2 = nil; +Ignatz_Rearm3 = nil; + +if (vehicle player == player) exitwith {false}; +if !(local vehicle player) exitwith {false}; +if (speed vehicle player > 2 || speed vehicle player < -2) exitwith {false}; +if (((getpos vehicle player) select 2) > 1) exitwith {false}; + +private ['_missingammo','_ownedcompletemags','_magname','_actionTitle','_costs','_vehicle','_refuel_costs','_refuel_updateInterval','_refuel_amount','_costsFree','_repair_costs','_repair_repairTime','_fnc_getCosts','_fnc_actionTitle']; + +_config = 'CfgServicePoint' call EPOCH_returnConfig; +_servicepoints = getArray (_config >> worldname >> 'ServicePoints'); +_servicepointDist = ["CfgServicePoint", "ServicePointDist", 40] call EPOCH_fnc_returnConfigEntryV2; + +if !(({player distance _x < _servicepointDist} count _servicepoints > 0)) exitwith {false}; +_Vehicle = vehicle player; +if (!(_Vehicle iskindof 'ship') && (((getposasl _Vehicle) select 2) < 1)) exitwith {false}; + +_repair_costs = ["CfgServicePoint", "repair_costs", []] call EPOCH_fnc_returnConfigEntryV2; +_refuel_costs = ["CfgServicePoint", "refuel_costs", []] call EPOCH_fnc_returnConfigEntryV2; +_refuel_updateInterval = ["CfgServicePoint", "refuel_updateInterval", 1] call EPOCH_fnc_returnConfigEntryV2; +_refuel_amount = ["CfgServicePoint", "refuel_amount", 0.1] call EPOCH_fnc_returnConfigEntryV2; +_repairTime = ["CfgServicePoint", "repairTime", 1.2] call EPOCH_fnc_returnConfigEntryV2; +_VehiclesAndAmmo = ["CfgServicePoint", "VehiclesAndAmmo", []] call EPOCH_fnc_returnConfigEntryV2; + +_Ignatz_SP_Array = []; +_costsFree = 'free'; + +_fnc_getCosts = { + private ['_typeName','_vehicle','_costs','_cost']; + _vehicle = _this select 0; + _costs = _this select 1; + _cost = 0; + { + _typeName = _x select 0; + if (_vehicle isKindOf _typeName) exitWith { + _cost = _x select 1; + }; + } forEach _costs; + _cost +}; +_fnc_actionTitle = { + private ['_itemName','_displayName','_actionName','_costs','_costsText','_actionTitle']; + _actionName = _this select 0; + _costs = _this select 1; + _costsText = _costsFree; + if (_costs > 0) then { + _costsText = format ['%1 Crypto',_costs]; + }; + _actionTitle = format ['%1 (%2)', _actionName, _costsText]; + _actionTitle +}; + +{ + if ((typeof _vehicle) == _x select 0) exitwith { + { + _ammotype = _x select 0; + _turret = _x select 1; + _maxmags = _x select 2; + _costs = _x select 3; + _ammocount = getNumber (configfile >> "CfgMagazines" >> (_x select 0) >> "count"); + _maxammototal = _maxmags*_ammocount; + _totalammocount = 0; + { + if (_ammotype isequalto (_x select 0) && _turret isequalto (_x select 1)) then { + _totalammocount = _totalammocount + (_x select 2); + }; + } foreach (magazinesAllTurrets _vehicle); + if (_totalammocount < _maxammototal) then { + for '_i' from 1 to 10 do { + if (_totalammocount < _i*_ammocount) exitwith { + _ownedcompletemags = _i-1; + _missingammo = _ammocount*_i - _totalammocount; + _costs = round (_costs/_ammocount*_missingammo); + }; + }; + _magname = getText (configFile >> 'CfgMagazines' >> _ammotype >> 'displayName'); + if (_magname isequalto '') then { + _magname = _ammotype; + }; + _reloagmags = _ownedcompletemags+1; + _actionTitle = format['Rearm %1 with %2 round %3 (%4 Crypto)',getText (configFile >> 'Cfgvehicles' >> typeOf _vehicle >> 'displayName'),_missingammo,_magname, _costs]; + _Ignatz_SP_Array pushback [_actionTitle,[_vehicle,_ammotype,_turret,_reloagmags,_ammocount,_costs]]; + }; + } foreach (_x select 1); + }; +} foreach _VehiclesAndAmmo; + +_costs = [_vehicle, _refuel_costs] call _fnc_getCosts; +_actionTitle = [format['Refuel %1',getText (configFile >> 'Cfgvehicles' >> typeOf _vehicle >> 'displayName')], _costs] call _fnc_actionTitle; +Ignatz_Refuel = [_actionTitle,[_vehicle,[_costs, _refuel_updateInterval,_refuel_amount]]]; + +_costs = [_vehicle, _repair_costs] call _fnc_getCosts; +_actionTitle = [format['Repair %1',getText (configFile >> 'Cfgvehicles' >> typeOf _vehicle >> 'displayName')], _costs] call _fnc_actionTitle; +Ignatz_Repair = [_actionTitle,[_vehicle,[_costs, _repairTime]]]; +if (count _Ignatz_SP_Array > 0) then {Ignatz_Rearm0 = _Ignatz_SP_Array select 0;}; +if (count _Ignatz_SP_Array > 1) then {Ignatz_Rearm1 = _Ignatz_SP_Array select 1;}; +if (count _Ignatz_SP_Array > 2) then {Ignatz_Rearm2 = _Ignatz_SP_Array select 2;}; +if (count _Ignatz_SP_Array > 3) then {Ignatz_Rearm3 = _Ignatz_SP_Array select 3;}; +true diff --git a/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp b/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp index 2123fbc4..1abe7985 100644 --- a/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp +++ b/Sources/epoch_config/Configs/CfgActionMenu/CfgActionMenu_self.hpp @@ -99,3 +99,52 @@ class base_mode_snap_direction_3 icon = "x\addons\a3_epoch_code\Data\UI\buttons\build_move.paa"; tooltip = "Build Mode: Snap Direction 270°"; }; +class ServicePoint +{ + condition = "call EPOCH_SP_Check"; + action = "call EPOCH_SP_Start;"; +// icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair.paa"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa"; + tooltip = "Service Point"; + + class Refuel + { + condition = "true"; + action = "(Ignatz_Refuel select 1) spawn EPOCH_SP_Refuel"; +// icon = "x\addons\a3_epoch_code\Data\UI\buttons\Refuel.paa"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa"; + tooltipcode = "Ignatz_Refuel select 0"; + }; + class Repair + { + condition = "true"; + action = "(Ignatz_Repair select 1) spawn EPOCH_SP_Repair"; +// icon = "x\addons\a3_epoch_code\Data\UI\buttons\Repair.paa"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa"; + tooltipcode = "Ignatz_Repair select 0"; + }; + class Rearm0 + { + condition = "!isnil 'Ignatz_Rearm0'"; + action = "(Ignatz_Rearm0 select 1) call EPOCH_SP_Rearm"; +// icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa"; + tooltipcode = "Ignatz_Rearm0 select 0"; + }; + class Rearm1 + { + condition = "!isnil 'Ignatz_Rearm1'"; + action = "(Ignatz_Rearm1 select 1) call EPOCH_SP_Rearm"; +// icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa"; + tooltipcode = "Ignatz_Rearm1 select 0"; + }; + class Rearm2 + { + condition = "!isnil 'Ignatz_Rearm2'"; + action = "(Ignatz_Rearm2 select 1) call EPOCH_SP_Rearm"; +// icon = "x\addons\a3_epoch_code\Data\UI\buttons\Rearm.paa"; + icon = "x\addons\a3_epoch_code\Data\UI\buttons\player_inspect.paa"; + tooltipcode = "Ignatz_Rearm2 select 0"; + }; +}; \ No newline at end of file diff --git a/Sources/epoch_config/Configs/CfgClientFunctions.hpp b/Sources/epoch_config/Configs/CfgClientFunctions.hpp index c4405dd6..a63456b6 100644 --- a/Sources/epoch_config/Configs/CfgClientFunctions.hpp +++ b/Sources/epoch_config/Configs/CfgClientFunctions.hpp @@ -168,6 +168,14 @@ class CfgClientFunctions class initUI {}; class refeshUI {}; }; + class servicepoint + { + class SP_Check {}; + class SP_Rearm {}; + class SP_Refuel {}; + class SP_Repair {}; + class SP_Start {}; + }; class customs { file = "epoch_code\customs"; diff --git a/Sources/epoch_config/Configs/CfgRemoteExec.hpp b/Sources/epoch_config/Configs/CfgRemoteExec.hpp index 88af98bf..e79ff538 100644 --- a/Sources/epoch_config/Configs/CfgRemoteExec.hpp +++ b/Sources/epoch_config/Configs/CfgRemoteExec.hpp @@ -26,6 +26,11 @@ class CfgRemoteExec { mode = 1; jip = 0; + class EPOCH_server_paycrypto + { + allowedTargets = 2; + jip = 0; + }; class EPOCH_server_save_vehicles { allowedTargets = 2; diff --git a/Sources/epoch_config/Configs/CfgServicePoint.hpp b/Sources/epoch_config/Configs/CfgServicePoint.hpp new file mode 100644 index 00000000..304ccb71 --- /dev/null +++ b/Sources/epoch_config/Configs/CfgServicePoint.hpp @@ -0,0 +1,248 @@ +class CfgServicePoint { + class Altis { + ServicePoints[] = { + {13325,14477,0} + }; + }; + class Tanoa { + ServicePoints[] = { +/* + {2157.79,3477.65,0}, + {11731.5,3125.95,0}, + {7008.93,7582.59,0}, + {2326.28,13167.9,0}, + {11805.8,13100.6,0}, + + {5525.8,10345.2,0}, + {11916,2383.88,0}, + {13562.4,12139.5,0} +*/ + }; + }; + class Chernarus { + ServicePoints[] = { + + }; + }; + ServicePointDist = 40; + refuel_updateInterval = 1; + refuel_amount = 0.1; + repairTime = 1.2; + repair_costs[] = { + {"Air",0}, + {"Tank",0}, + {"Ship",0}, + {"Landvehicle",0} + }; + refuel_costs[] = { + {"Air",0}, + {"Tank",0}, + {"Ship",0}, + {"Landvehicle",0} + }; + VehiclesAndAmmo[] = { +/* + { + "typeof vehicle", + { + {"Ammoclass",{Turretpath},MaxMagsCount,PricePerMag}, + {"Ammoclass",{Turretpath},MaxMagsCount,PricePerMag} + } + }, +*/ + { + "B_G_Offroad_01_armed_F", + { + {"100Rnd_127x99_mag_Tracer_Yellow",{0},4,200} + } + }, + { + "O_G_Offroad_01_armed_F", + { + {"100Rnd_127x99_mag_Tracer_Yellow",{0},4,200} + } + }, + { + "I_G_Offroad_01_armed_F", + { + {"100Rnd_127x99_mag_Tracer_Yellow",{0},4,200} + } + }, + { + "I_MRAP_03", + { + {"SmokeLauncherMag",{0},1,150} + } + }, + { + "I_MRAP_03_EPOCH", + { + } + }, + { + "O_MRAP_02_F", + { + {"SmokeLauncherMag",{-1},1,150} + } + }, + { + "B_LSV_01_armed_olive_F", + { + {"100Rnd_127x99_mag_Tracer_Red",{0},3,200}, + {"130Rnd_338_Mag",{1},3,260} + } + }, + { + "B_LSV_01_armed_black_F", + { + {"100Rnd_127x99_mag_Tracer_Red",{0},3,200}, + {"130Rnd_338_Mag",{1},3,260} + } + }, + { + "O_T_LSV_02_armed_black_F", + { + {"500Rnd_65x39_Belt_Tracer_Green_Splash",{0},3,500} + } + }, + { + "O_T_LSV_02_armed_ghex_F", + { + {"500Rnd_65x39_Belt_Tracer_Green_Splash",{0},3,500} + } + }, + { + "B_SDV_01_EPOCH", + { + } + }, + { + "B_Heli_Light_01_armed_F", + { + {"5000Rnd_762x51_Belt",{-1},1,1600} + } + }, + { + "O_Heli_Light_02_unarmed_EPOCH", + { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + } + }, + { + "O_Heli_Light_02_v2_F", + { + {"2000Rnd_65x39_Belt_Tracer_Green_Splash",{-1},1,1200}, + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + } + }, + { + "B_Heli_Transport_01_EPOCH", + { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150}, + {"2000Rnd_65x39_Belt_Tracer_Red",{1},1,1200}, + {"2000Rnd_65x39_Belt_Tracer_Red",{2},1,1200} + } + }, + { + "I_Heli_Transport_02_F", + { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + } + }, + { + "I_Heli_Transport_02_EPOCH", + { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + } + }, + { + "B_Heli_Transport_03_F", + { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150}, + {"2000Rnd_65x39_Belt_Tracer_Red",{1},1,1200}, + {"2000Rnd_65x39_Belt_Tracer_Red",{2},1,1200} + } + }, + { + "B_Heli_Transport_03_black_F", + { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150}, + {"2000Rnd_65x39_Belt_Tracer_Red",{1},1,1200}, + {"2000Rnd_65x39_Belt_Tracer_Red",{2},1,1200} + } + }, + { + "B_Heli_Transport_03_unarmed_EPOCH", + { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + } + }, + { + "I_Heli_light_03_unarmed_EPOCH", + { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + } + }, + { + "B_T_VTOL_01_vehicle_blue_F", + { + {"240Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + } + }, + { + "B_T_VTOL_01_infantry_olive_F", + { + {"240Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + } + }, + { + "B_T_VTOL_01_infantry_blue_F", + { + {"240Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + } + }, + { + "O_T_VTOL_02_vehicle_F", + { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + } + }, + { + "O_T_VTOL_02_vehicle_grey_F", + { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + } + }, + { + "O_T_VTOL_02_infantry_F", + { + {"168Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + } + }, + { + "B_Heli_Attack_01_F", + { + {"240Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + } + }, + { + "O_Heli_Attack_02_black_F", + { + {"192Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + } + }, + { + "O_Heli_Attack_02_F", + { + {"192Rnd_CMFlare_Chaff_Magazine",{-1},1,150} + } + }, + { + "O_Boat_Armed_01_hmg_F", + { + {"SmokeLauncherMag_boat",{-1},1,100}, + {"200Rnd_127x99_mag_Tracer_Green",{1},3,300} + } + } + }; +}; \ No newline at end of file diff --git a/Sources/epoch_config/sandbox_config.hpp b/Sources/epoch_config/sandbox_config.hpp index cb6a82ec..f67094ca 100644 --- a/Sources/epoch_config/sandbox_config.hpp +++ b/Sources/epoch_config/sandbox_config.hpp @@ -52,6 +52,7 @@ wreckRemovalMaxTime = 360; disableRandomization[] = {"All"}; +#include "Configs\CfgServicePoint.hpp" #include "Configs\CfgItemSort.hpp" #include "Configs\CfgTraderMissions.hpp" #include "Configs\CfgMissions.hpp" diff --git a/Sources/epoch_server/compile/epoch_player/EPOCH_server_PayCrypto.sqf b/Sources/epoch_server/compile/epoch_player/EPOCH_server_PayCrypto.sqf new file mode 100644 index 00000000..74bba9df --- /dev/null +++ b/Sources/epoch_server/compile/epoch_player/EPOCH_server_PayCrypto.sqf @@ -0,0 +1,8 @@ +params [["_player",objNull,[objNull]],["_crypto",0,[0]]]; +_player = _this select 0; +_crypto = _this select 1; +if (_crypto > 0) exitwith { // This is only for pay Crypto, not for give Crypto ;) + diag_log format ['Player %1 (%2) killed for Code hack',name _player, getplayeruid _player]; + _player setdamage 1 +}; +_this call EPOCH_server_effectCrypto; diff --git a/Sources/epoch_server/config.cpp b/Sources/epoch_server/config.cpp index 47544f7c..2c17b445 100644 --- a/Sources/epoch_server/config.cpp +++ b/Sources/epoch_server/config.cpp @@ -63,6 +63,7 @@ class CfgServerFunctions class server_unpackBackpack {}; class server_deadPlayerDetonate{}; class server_playerSetVariable{}; + class server_PayCrypto{}; }; class epoch_traders { class server_loadTraders {}; diff --git a/Sources/epoch_server/init/server_init.sqf b/Sources/epoch_server/init/server_init.sqf index 42469024..4626a12d 100644 --- a/Sources/epoch_server/init/server_init.sqf +++ b/Sources/epoch_server/init/server_init.sqf @@ -210,6 +210,19 @@ if (_dateChanged) then { }; }; +_config = 'CfgServicePoint' call EPOCH_returnConfig; +_servicepoints = getArray (_config >> worldname >> 'ServicePoints'); +{ + _marker = createMarker [('ServicePointMarker'+(str _foreachindex)), _x]; + _marker setmarkertype "mil_dot"; + _marker setmarkercolor 'ColorBlack'; + _marker setMarkerText ("Service Point"); + if !(surfaceiswater _x) then { + "Land_HelipadCircle_F" createvehicle _x; + }; +} forEach _ServicePoints; + + // set time multiplier setTimeMultiplier ([_serverSettingsConfig, "timeMultiplier", 1] call EPOCH_fnc_returnConfigEntry);