3623 lines
124 KiB
Plaintext
3623 lines
124 KiB
Plaintext
|
/*
|
||
|
EAT_fnc_actionAllowed = {
|
||
|
local _onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
|
||
|
local _canDo = (!r_drag_sqf && !r_player_unconscious && !_onLadder && (vehicle player == player));
|
||
|
_canDo
|
||
|
};
|
||
|
*/
|
||
|
|
||
|
// Generates a selectable list of players for teleports and spectate
|
||
|
// Title is set by setting EAT_pMenuTitle = "TITLE HERE" before calling the function
|
||
|
EAT_pMenuTitle = "";
|
||
|
EAT_fnc_playerSelect =
|
||
|
{
|
||
|
private["_pmenu","_arr"];
|
||
|
_pmenu = [["",true],[EAT_pMenuTitle, [-1], "", -5, [["expression", ""]], "1", "0"]];
|
||
|
for "_i" from (_this select 0) to (_this select 1) do
|
||
|
{_arr = [format['%1', plist select (_i)], [12], "", -5, [["expression", format ["pselect5 = plist select %1;", _i]]], "1", "1"]; _pmenu set [_i + 2, _arr];};
|
||
|
if (count plist > (_this select 1)) then {_pmenu set [(_this select 1) + 2, ["Next", [13], "", -5, [["expression", "snext = true;"]], "1", "1"]];}
|
||
|
else {_pmenu set [(_this select 1) + 2, ["", [-1], "", -5, [["expression", ""]], "1", "0"]];};
|
||
|
_pmenu set [(_this select 1) + 3, ["Exit", [13], "", -5, [["expression", "pselect5 = 'exit';"]], "1", "1"]];
|
||
|
showCommandingMenu "#USER:_pmenu";
|
||
|
};
|
||
|
|
||
|
// Convert multidimensional array to single dimensional - Used in adminBuild
|
||
|
myfnc_MDarray = {
|
||
|
local _list = [];
|
||
|
local _temp = _this select 0;
|
||
|
|
||
|
for "_i" from 0 to ((count _temp) - 1) do {
|
||
|
_list set [_i,((_temp select _i) select 2)];
|
||
|
};
|
||
|
_list
|
||
|
};
|
||
|
|
||
|
// Prints the position of the admin or a cursorTarget to the RPT
|
||
|
EAT_GetPosition = {
|
||
|
private "_text";
|
||
|
local _obj = _this select 0;
|
||
|
if(isNull _obj) exitWith {"No target" call dayz_rollingMessages;};
|
||
|
local _pos = getPosATL _obj;
|
||
|
local _dir = getDir _obj;
|
||
|
|
||
|
if (isPlayer _obj) then {
|
||
|
_text = format["Position of %1 is: %3%2",name _obj,_pos,_dir];
|
||
|
} else {
|
||
|
_text = format["Position of %1 is: %3%2",typeOf _obj,_pos,_dir];
|
||
|
};
|
||
|
|
||
|
if(EAT_logMinorTool) then {
|
||
|
"Saved to client RPT and EAT logs" call dayz_rollingMessages;
|
||
|
diag_log _text;
|
||
|
_text call EAT_Logger;
|
||
|
} else {
|
||
|
"Saved to client RPT" call dayz_rollingMessages;
|
||
|
diag_log _text;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
// Posts object information to system chat
|
||
|
EAT_GetObjDetails = {
|
||
|
local _obj = cursorTarget;
|
||
|
if(isNull _obj) exitWith {"No target" call dayz_rollingMessages;};
|
||
|
local _charID = _obj getVariable ["CharacterID","0"];
|
||
|
local _objID = _obj getVariable["ObjectID","0"];
|
||
|
local _objUID = _obj getVariable["ObjectUID","0"];
|
||
|
local _lastUpdate = _obj getVariable ["lastUpdate",time];
|
||
|
local _owner = _obj getVariable["ownerPUID","0"];
|
||
|
|
||
|
systemChat format["%1: charID: %2, objID: %3, objUID: %4, Owner %5, lastUpdate: %6",typeOF _obj,_charID,_objID,_objUID,_owner,_lastUpdate];
|
||
|
};
|
||
|
|
||
|
// Flips the nearest land vehicle
|
||
|
EAT_FlipVeh = {
|
||
|
local _vehicle = getPos player nearestObject "LandVehicle";
|
||
|
if (isNull _vehicle) exitWith {"There are no vehicles near to flip" call dayz_rollingMessages;};
|
||
|
_vehicle setVectorUp [0,0,1];
|
||
|
local _name = getText(configFile >> "cfgVehicles" >> (typeOf _vehicle) >> "displayName");
|
||
|
format ["Your %1 is now right-side up",_name] call dayz_rollingMessages;
|
||
|
};
|
||
|
|
||
|
// Ejects players from a vehicle
|
||
|
EAT_Eject = {
|
||
|
local _ct = cursorTarget;
|
||
|
if(isNull _ct) exitWith {"No target" call dayz_rollingMessages;};
|
||
|
if !(_ct isKindOf "AllVehicles") exitWith {"Target not a vehicle" call dayz_rollingMessages;};
|
||
|
if ((count crew _ct) < 1) exitWith {format["There are no players in the %1", (getText(configFile >> "CfgVehicles" >> (typeOf _ct) >> "displayName"))] call dayz_rollingMessages;};
|
||
|
_ct forceSpeed 0;
|
||
|
{_x action ["Eject", _ct];} forEach crew _ct;
|
||
|
uiSleep 5;
|
||
|
_ct forceSpeed -1;
|
||
|
};
|
||
|
|
||
|
// Allows the player to glide forward quickly across the map. It is called from key bind.
|
||
|
EAT_FastForward = {
|
||
|
local _player = vehicle player;
|
||
|
local _dir = getdir _player;
|
||
|
local _pos = getPosATL _player;
|
||
|
local _pos2 = getPos _player;
|
||
|
local _z2 = _pos2 select 2;
|
||
|
local _z = 0;
|
||
|
|
||
|
if (_player isKindOf "Air" && _z2 < 20 && isEngineOn _player) then {_z = _z2 + 30;} else {if (_z2 > 3) then {_z = _z2;} else {if (surfaceIsWater _pos) then {_z = 2;} else {_z=0;};};};
|
||
|
_pos = [(_pos select 0) + 5 * sin (_dir), (_pos select 1) + 5 * cos (_dir), _z];
|
||
|
if (surfaceIsWater _pos) then {_player setPosASL _pos;} else {_player setPosATL _pos;};
|
||
|
};
|
||
|
|
||
|
// Toggles fast forward key bind on and off
|
||
|
EAT_FastForwardToggle = {
|
||
|
local _active = _this select 0;
|
||
|
if (_active) then {
|
||
|
["FastWalk"] call EAT_Keybind;
|
||
|
} else {
|
||
|
["EndFastWalk"] call EAT_Keybind;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
// Allows the admin to leap vertically or directionally
|
||
|
EAT_AdminFastUp = {
|
||
|
local _vel = velocity player;
|
||
|
player setVelocity [_vel select 0,_vel select 1,5];
|
||
|
};
|
||
|
|
||
|
// This function toggles the jump key bind on and off
|
||
|
EAT_FastUpToggle = {
|
||
|
local _active = _this select 0;
|
||
|
if (_active) then {
|
||
|
["FastUp"] call EAT_Keybind;
|
||
|
} else {
|
||
|
["EndFastUp"] call EAT_Keybind;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
// Lowers the terrain
|
||
|
EAT_GrassOffToggle = {
|
||
|
local _active = _this select 0;
|
||
|
local _toggle = "on";
|
||
|
if (_active) then {
|
||
|
setTerrainGrid 50;
|
||
|
}else{
|
||
|
_toggle = "off";
|
||
|
setTerrainGrid 25;
|
||
|
};
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has turned grass %3",name player,getPlayerUID player,_toggle] call EAT_Logger;};
|
||
|
};
|
||
|
|
||
|
// Allows admin to be invisible to other players
|
||
|
EAT_AdminInvisible = {
|
||
|
EAT_clientToServer = ["invisibility",player,[(_this select 0),(getPos player)],dayz_authKey];
|
||
|
publicVariableServer "EAT_clientToServer";
|
||
|
};
|
||
|
|
||
|
// Turns the build count to one and removes the requirement for a plot pole to build
|
||
|
EAT_adminBuildCount = {
|
||
|
local _active = _this select 0;
|
||
|
if(_active) then {
|
||
|
DZE_StaticConstructionCount = 1;
|
||
|
DZE_requireplot = 0;
|
||
|
} else {
|
||
|
DZE_StaticConstructionCount = 0;
|
||
|
DZE_requireplot = 1;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_AddWeapon = {
|
||
|
#define IS_HANDGUN(wpn) (getNumber (configFile >> "CfgWeapons" >> wpn >> "type") == 2)
|
||
|
local _gun = _this select 0;
|
||
|
local _ammo = _this select 1;
|
||
|
local _mags = [];
|
||
|
|
||
|
if (count _this > 2) then { // grenade launcher ammo
|
||
|
player addMagazine (_this select 2);
|
||
|
player addMagazine (_this select 2);
|
||
|
};
|
||
|
|
||
|
if (IS_HANDGUN(_gun)) then {
|
||
|
{
|
||
|
if (IS_HANDGUN(_x)) exitWith {
|
||
|
player removeWeapon _x;
|
||
|
_mags = getArray (configFile >> "cfgWeapons" >> _x >> "magazines");
|
||
|
player removeMagazines (_mags select 0);
|
||
|
}
|
||
|
} count (weapons player);
|
||
|
} else {
|
||
|
_mags = getArray (configFile >> "cfgWeapons" >> (primaryWeapon player) >> "magazines");
|
||
|
player removeWeapon (primaryWeapon player);
|
||
|
player removeMagazines (_mags select 0);
|
||
|
};
|
||
|
|
||
|
// Add magazines before gun so the gun loads ammo on spawn
|
||
|
player addMagazine _ammo;
|
||
|
player addMagazine _ammo;
|
||
|
player addWeapon _gun;
|
||
|
player selectWeapon _gun;
|
||
|
};
|
||
|
|
||
|
EAT_Loadouts = {
|
||
|
local _primaryWeapon = _this select 0;
|
||
|
local _secondaryWeapon = _this select 1;
|
||
|
local _primaryAmmo = getArray (configFile >> "cfgWeapons" >> _primaryWeapon >> "magazines");
|
||
|
local _secondaryAmmo = getArray (configFile >> "cfgWeapons" >> _secondaryWeapon >> "magazines");
|
||
|
local _rifleMag = _primaryAmmo select 0;
|
||
|
local _pistolMag = _secondaryAmmo select 0;
|
||
|
local _weps = ["ItemRadio","NVGoggles_DZE","Binocular_Vector","ItemGPS","ItemHatchet","ItemKnife","ItemMatchbox","ItemEtool","ItemToolbox","ItemCrowbar",_primaryWeapon,_secondaryWeapon];
|
||
|
local _bloodbag = ["bloodBagONEG","ItemBloodbag"] select dayz_classicBloodBagSystem;
|
||
|
local _mags = ["ItemMorphine","ItemEpinephrine","ItemAntibiotic","ItemPainkiller","ItemWaterBottleBoiled","FoodBeefCooked","ItemBandage","ItemBandage",_bloodbag,_rifleMag,_rifleMag,_rifleMag,_pistolMag,_pistolMag,_pistolMag];
|
||
|
|
||
|
removeAllWeapons player;
|
||
|
removeAllItems player;
|
||
|
removeBackpack player;
|
||
|
|
||
|
player addBackpack "CoyoteBackpack_Camping_DZE2";
|
||
|
|
||
|
{
|
||
|
player addMagazine _x;
|
||
|
} count _mags;
|
||
|
|
||
|
{
|
||
|
player addWeapon _x;
|
||
|
} count _weps;
|
||
|
|
||
|
player selectWeapon _primaryWeapon;
|
||
|
};
|
||
|
|
||
|
EAT_AddBackPack = {
|
||
|
removeBackpack player;
|
||
|
player addBackpack (_this select 0);
|
||
|
};
|
||
|
|
||
|
EAT_AddMeds = {
|
||
|
local _bloodbag = ["bloodBagONEG","ItemBloodbag"] select dayz_classicBloodBagSystem;
|
||
|
{
|
||
|
player addMagazine _x;
|
||
|
} count ["ItemMorphine","ItemEpinephrine","ItemAntibiotic","ItemPainkiller","ItemSodaPepsi","FoodBeefCooked","ItemBandage","ItemBandage",_bloodbag];
|
||
|
};
|
||
|
|
||
|
EAT_RemoveGear = {
|
||
|
removeAllWeapons player;
|
||
|
removeAllItems player;
|
||
|
removeBackpack player;
|
||
|
"Gear deleted!" call dayz_rollingMessages;
|
||
|
};
|
||
|
|
||
|
EAT_AddTools = {
|
||
|
local _tools = ["ItemRadio","ItemHatchet","ItemKnife","ItemMatchbox","ItemEtool","ItemToolbox","ItemCrowbar"];
|
||
|
|
||
|
{
|
||
|
if (_x in weapons player) then {
|
||
|
player removeWeapon _x;
|
||
|
};
|
||
|
} count _tools;
|
||
|
|
||
|
{
|
||
|
player addWeapon _x;
|
||
|
} count _tools;
|
||
|
};
|
||
|
|
||
|
EAT_AddTempVeh = {
|
||
|
local _vehicle = _this select 0;
|
||
|
local _dir = getDir vehicle player;
|
||
|
local _pos = getPosATL vehicle player;
|
||
|
_pos = [(_pos select 0) + 9 * sin (_dir), (_pos select 1) + 9 * cos (_dir), 0];
|
||
|
|
||
|
EAT_clientToServer = ["tempVeh",player,[_vehicle,_dir,_pos],dayz_authKey];
|
||
|
publicVariableServer "EAT_clientToServer";
|
||
|
|
||
|
format["Spawned a %1", (getText(configFile >> "cfgVehicles" >> _vehicle >> "displayName"))] call dayz_rollingMessages;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has added a temporary vehicle: %3",name player,getPlayerUID player,_vehicle] call EAT_Logger;};
|
||
|
};
|
||
|
|
||
|
EAT_AddVeh = {
|
||
|
local _vehicle = _this select 0;
|
||
|
local _dir = getDir vehicle player;
|
||
|
local _pos = getPos vehicle player;
|
||
|
_pos = [(_pos select 0) + 9 * sin (_dir), (_pos select 1) + 9 * cos (_dir), 0];
|
||
|
local _keyColor = ["Green","Red","Blue","Yellow","Black"] call BIS_fnc_selectRandom;
|
||
|
local _keyNumber = (floor(random 2500)) + 1;
|
||
|
local _keySelected = format[("ItemKey%1%2"),_keyColor,_keyNumber];
|
||
|
local _isKeyOK = isClass(configFile >> "CfgWeapons" >> _keySelected);
|
||
|
false call dz_fn_meleeMagazines;
|
||
|
local _isOk = [player,_keySelected] call BIS_fnc_invAdd;
|
||
|
true call dz_fn_meleeMagazines;
|
||
|
|
||
|
if (_isOk and _isKeyOK) then {
|
||
|
PVDZE_veh_Publish2 = [[_dir,_pos],_vehicle,false,_keySelected,player,dayz_authKey];
|
||
|
publicVariableServer "PVDZE_veh_Publish2";
|
||
|
|
||
|
format["%1 spawned, key added to toolbelt", (getText(configFile >> "cfgVehicles" >> _vehicle >> "displayName"))] call dayz_rollingMessages;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has added a permanent vehicle: %3",name player,getPlayerUID player,_vehicle] call EAT_Logger;};
|
||
|
} else {
|
||
|
"Your toolbelt is full" call dayz_rollingMessages;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_AddVehDialog = {
|
||
|
PermDialogSelected = -1;
|
||
|
TempDialogSelected = -1;
|
||
|
AdminDialogList = 13000;
|
||
|
if (isNil "EAT_EpochOnlyVehicles") then {EAT_EpochOnlyVehicles = false;};
|
||
|
if (isNil "vhnlist") then {vhnlist = [];};
|
||
|
|
||
|
LoadAllVehiclesList = {
|
||
|
lbClear AdminDialogList;
|
||
|
vhnlist = +EAT_allVehList;
|
||
|
|
||
|
{
|
||
|
local _index = lbAdd [AdminDialogList, format["%2 (%1)", _x select 0, _x select 1]];
|
||
|
lbSetPicture [AdminDialogList, _index, (_x select 2)];
|
||
|
} count vhnlist;
|
||
|
};
|
||
|
|
||
|
LoadEpochOnlyList = {
|
||
|
lbClear AdminDialogList;
|
||
|
vhnlist = +EAT_allEpochVehList;
|
||
|
|
||
|
{
|
||
|
local _index = lbAdd [AdminDialogList, format["%2 (%1)", _x select 0, _x select 1]];
|
||
|
lbSetPicture [AdminDialogList, _index, (_x select 2)];
|
||
|
} count vhnlist;
|
||
|
};
|
||
|
|
||
|
createDialog "EAT_Veh_AdminDialog";
|
||
|
call LoadAllVehiclesList;
|
||
|
|
||
|
LoadSpecificList = {
|
||
|
lbClear AdminDialogList;
|
||
|
vhnlist = [];
|
||
|
local _kindOf = _this select 0;
|
||
|
if (EAT_EpochOnlyVehicles) then {
|
||
|
{
|
||
|
if ((_x select 0) isKindOf _kindOf) then {
|
||
|
vhnlist set [count vhnlist, _x]
|
||
|
};
|
||
|
} count EAT_allEpochVehList;
|
||
|
} else {
|
||
|
{
|
||
|
if ((_x select 0) isKindOf _kindOf) then {
|
||
|
vhnlist set [count vhnlist, _x]
|
||
|
};
|
||
|
} count EAT_allVehList;
|
||
|
};
|
||
|
{
|
||
|
local _index = lbAdd [AdminDialogList, format["%2 (%1)", _x select 0, _x select 1]];
|
||
|
lbSetPicture [AdminDialogList, _index, (_x select 2)];
|
||
|
} count vhnlist;
|
||
|
};
|
||
|
|
||
|
waitUntil { !dialog };
|
||
|
if ((PermDialogSelected < 0) && (TempDialogSelected < 0)) exitWith {};
|
||
|
|
||
|
if (PermDialogSelected > -1) then {
|
||
|
[((vhnlist select PermDialogSelected) select 0)] call EAT_AddVeh;
|
||
|
};
|
||
|
|
||
|
if (TempDialogSelected > -1) then {
|
||
|
[((vhnlist select TempDialogSelected) select 0)] call EAT_AddTempVeh;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_AISpawn = {
|
||
|
private ["_player","_done"];
|
||
|
if (!("ItemGPS" in items player)) then {player addWeapon "ItemGPS";};
|
||
|
EAT_aiArea = 0;
|
||
|
EAT_aiCount = 0;
|
||
|
_done = false;
|
||
|
EAT_aiSpawnType = "";
|
||
|
|
||
|
EAT_aiTypeMenu =
|
||
|
[
|
||
|
["",true],
|
||
|
["Select AI Type:", [-1], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["Hero",[],"", -5,[["expression","EAT_aiSpawnType = ""Hero"";"]],"1","1"],
|
||
|
["Bandit",[],"", -5,[["expression","EAT_aiSpawnType = ""Bandit"";"]],"1","1"],
|
||
|
["", [], "", -5,[["expression", ""]], "1", "0"],
|
||
|
["Exit", [20], "", -5, [["expression", "EAT_aiArea = -1;"]], "1", "1"]
|
||
|
];
|
||
|
|
||
|
EAT_aiAreaMenu =
|
||
|
[
|
||
|
["",true],
|
||
|
["Set AI Movement Radius:", [-1], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["40m",[],"", -5,[["expression","EAT_aiArea = 40;"]],"1","1"],
|
||
|
["50m",[],"", -5,[["expression","EAT_aiArea = 50;"]],"1","1"],
|
||
|
["75m",[],"", -5,[["expression","EAT_aiArea = 75;"]],"1","1"],
|
||
|
["100m",[],"", -5,[["expression","EAT_aiArea = 100;"]],"1","1"],
|
||
|
["150m",[],"", -5,[["expression","EAT_aiArea = 150;"]],"1","1"],
|
||
|
["200m",[],"", -5,[["expression","EAT_aiArea = 200;"]],"1","1"],
|
||
|
["300m",[],"", -5,[["expression","EAT_aiArea = 200;"]],"1","1"],
|
||
|
["", [], "", -5,[["expression", ""]], "1", "0"],
|
||
|
["Exit", [20], "", -5, [["expression", "EAT_aiArea = -1;"]], "1", "1"]
|
||
|
];
|
||
|
|
||
|
EAT_amountMenu =
|
||
|
[
|
||
|
["",true],
|
||
|
["Select AI count:", [-1], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["1",[],"", -5,[["expression","EAT_aiCount = 1;"]],"1","1"],
|
||
|
["2",[],"", -5,[["expression","EAT_aiCount = 2;"]],"1","1"],
|
||
|
["4",[],"", -5,[["expression","EAT_aiCount = 4;"]],"1","1"],
|
||
|
["6",[],"", -5,[["expression","EAT_aiCount = 6;"]],"1","1"],
|
||
|
["8",[],"", -5,[["expression","EAT_aiCount = 8;"]],"1","1"],
|
||
|
["10",[],"", -5,[["expression","EAT_aiCount = 10;"]],"1","1"],
|
||
|
["20",[],"", -5,[["expression","EAT_aiCount = 20;"]],"1","1"],
|
||
|
["30",[],"", -5,[["expression","EAT_aiCount = 30;"]],"1","1"],
|
||
|
["40",[],"", -5,[["expression","EAT_aiCount = 40;"]],"1","1"],
|
||
|
["50",[],"", -5,[["expression","EAT_aiCount = 50;"]],"1","1"],
|
||
|
["", [], "", -5,[["expression", ""]], "1", "0"],
|
||
|
["Exit", [20], "", -5, [["expression", "EAT_aiCount = -1;"]], "1", "1"]
|
||
|
];
|
||
|
|
||
|
showCommandingMenu "#USER:EAT_aiTypeMenu";
|
||
|
waitUntil{(EAT_aiSpawnType != "") || (commandingMenu == "")};
|
||
|
if(EAT_aiSpawnType == "") exitWith{};
|
||
|
|
||
|
showCommandingMenu "#USER:EAT_aiAreaMenu";
|
||
|
waitUntil{(EAT_aiArea != 0) || (commandingMenu == "")};
|
||
|
if(EAT_aiArea == 0) exitWith{};
|
||
|
|
||
|
showCommandingMenu "#USER:EAT_amountMenu";
|
||
|
waitUntil{(EAT_aiCount != 0) || (commandingMenu == "")};
|
||
|
if(EAT_aiCount == 0) exitWith{};
|
||
|
|
||
|
|
||
|
_player = player;
|
||
|
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has added %3 AI units",name _player,getPlayerUID _player,EAT_aiCount] call EAT_Logger;};
|
||
|
|
||
|
EAT_SpawnAI = {
|
||
|
private ["_divisor","_aiPosition"];
|
||
|
_divisor = _this select 0;
|
||
|
_aiPosition = [_this select 1, _this select 2,_this select 3];
|
||
|
|
||
|
EAT_clientToServer = ["addAI",player,[EAT_aiSpawnType,EAT_aiArea,EAT_aiCount,_divisor,_aiPosition,(getPos player)],dayz_authKey];
|
||
|
publicVariableServer "EAT_clientToServer";
|
||
|
|
||
|
};
|
||
|
|
||
|
EAT_aiSpawnSelection = {
|
||
|
private ["_pos1","_pos2","_pos3"];
|
||
|
_pos1 = _this select 0;
|
||
|
_pos2 = _this select 1;
|
||
|
_pos3 = _this select 2;
|
||
|
if(EAT_aiCount %5 == 0) then {
|
||
|
[5,_pos1,_pos2,_pos3] call EAT_SpawnAI;
|
||
|
[5,_pos1,_pos2,_pos3] call EAT_SpawnAI;
|
||
|
[5,_pos1,_pos2,_pos3] call EAT_SpawnAI;
|
||
|
[5,_pos1,_pos2,_pos3] call EAT_SpawnAI;
|
||
|
[5,_pos1,_pos2,_pos3] call EAT_SpawnAI;
|
||
|
} else {
|
||
|
if(EAT_aiCount %4 == 0) then {
|
||
|
[4,_pos1,_pos2,_pos3] call EAT_SpawnAI;
|
||
|
[4,_pos1,_pos2,_pos3] call EAT_SpawnAI;
|
||
|
[4,_pos1,_pos2,_pos3] call EAT_SpawnAI;
|
||
|
[4,_pos1,_pos2,_pos3] call EAT_SpawnAI;
|
||
|
} else {
|
||
|
if(EAT_aiCount %2 == 0) then {
|
||
|
[2,_pos1,_pos2,_pos3] call EAT_SpawnAI;
|
||
|
[2,_pos1,_pos2,_pos3] call EAT_SpawnAI;
|
||
|
} else {
|
||
|
[1,_pos1,_pos2,_pos3] call EAT_SpawnAI;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
openMap [false, false];
|
||
|
TitleText [format[""], "PLAIN DOWN"];
|
||
|
_done = true;
|
||
|
};
|
||
|
|
||
|
closeDialog 0;
|
||
|
uiSleep 0.5;
|
||
|
"Click on the map to spawn AI" call dayz_rollingMessages;
|
||
|
|
||
|
if(!(visibleMap)) then {
|
||
|
openMap [true, false];
|
||
|
};
|
||
|
|
||
|
onMapSingleClick '[_pos select 0, _pos select 1, _pos select 2] call EAT_aiSpawnSelection';
|
||
|
waitUntil{_done || !(visibleMap)};
|
||
|
onMapSingleClick "";
|
||
|
};
|
||
|
|
||
|
EAT_DeleteObj = {
|
||
|
local _obj = cursorTarget;
|
||
|
if(isNull _obj) exitWith{"No object selected" call dayz_rollingMessages;};
|
||
|
EAT_DeleteObjText = getText (configFile >> "CfgVehicles" >> typeOf _obj >> "displayName");
|
||
|
EAT_databaseRemove = 0;
|
||
|
|
||
|
local _objectID = _obj getVariable["ObjectID","0"];
|
||
|
local _objectUID = _obj getVariable["ObjectUID","0"];
|
||
|
|
||
|
EAT_deleteMenu =
|
||
|
[
|
||
|
["",true],
|
||
|
[format["Delete this %1?:",EAT_DeleteObjText], [-1], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["Yes",[0],"", -5,[["expression","EAT_databaseRemove = 1;"]],"1","1"],
|
||
|
["No", [0], "", -5, [["expression", "EAT_databaseRemove = -1"]], "1", "1"]
|
||
|
];
|
||
|
showCommandingMenu "#USER:EAT_deleteMenu";
|
||
|
waitUntil{(EAT_databaseRemove != 0) || (commandingMenu == "")};
|
||
|
if(EAT_databaseRemove <= 0) exitWith{};
|
||
|
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has deleted object: %3 ID:%4 UID:%5 from database",name player,getPlayerUID player,EAT_DeleteObjText,_objectID,_objectUID] call EAT_Logger;};
|
||
|
|
||
|
format["Deleted %1",EAT_DeleteObjText] call dayz_rollingMessages;
|
||
|
|
||
|
PVDZ_obj_Destroy = [_objectID,_objectUID,player,_obj,dayz_authKey];
|
||
|
publicVariableServer "PVDZ_obj_Destroy";
|
||
|
};
|
||
|
|
||
|
EAT_DisplayCode = {
|
||
|
local _ct = cursorTarget;
|
||
|
if (isNull _ct) exitWith {"No target" call dayz_rollingMessages;};
|
||
|
local _combo = _ct getVariable ["CharacterID","0"];
|
||
|
local _id = parseNumber _combo;
|
||
|
|
||
|
if (_ct isKindOf "AllVehicles") then {
|
||
|
if (_id == 0) exitWith {format ["%1 has ID 0 - No Key", (getText(configFile >> "cfgVehicles" >> (typeOf _ct) >> "displayName"))] call dayz_rollingMessages;};
|
||
|
local _result = call {
|
||
|
if (_id > 0 && {_id <= 2500}) exitWith {format["Green%1",_id];};
|
||
|
if (_id > 2500 && {_id <= 5000}) exitWith {format["Red%1",_id - 2500];};
|
||
|
if (_id > 5000 && {_id <= 7500}) exitWith {format["Blue%1",_id - 5000];};
|
||
|
if (_id > 7500 && {_id <= 10000}) exitWith {format["Yellow%1",_id - 7500];};
|
||
|
if (_id > 10000 && {_id <= 12500}) exitWith {format["Black%1",_id - 10000];};
|
||
|
};
|
||
|
format["Vehicle Key: %1", _result] call dayz_rollingMessages;
|
||
|
} else {
|
||
|
if (_id == 0) exitWith {format ["%1 has ID 0", (getText(configFile >> "cfgMagazines" >> (typeOf _ct) >> "displayName"))] call dayz_rollingMessages;};
|
||
|
format["Item Code: %1", _id] call dayz_rollingMessages;
|
||
|
};
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has viewed a locked item: %3",name player,getPlayerUID player,_combo] call EAT_Logger;};
|
||
|
};
|
||
|
|
||
|
EAT_HealPlayer = {
|
||
|
EAT_healDistance = -1;
|
||
|
EAT_distanceMenu =
|
||
|
[
|
||
|
["",true],
|
||
|
["Select distance:", [-1], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["5", [2], "", -5, [["expression", "EAT_healDistance=5;"]], "1", "1"],
|
||
|
["10", [3], "", -5, [["expression", "EAT_healDistance=10;"]], "1", "1"],
|
||
|
["25", [4], "", -5, [["expression", "EAT_healDistance=25;"]], "1", "1"],
|
||
|
["50", [5], "", -5, [["expression", "EAT_healDistance=50;"]], "1", "1"],
|
||
|
["100", [6], "", -5, [["expression", "EAT_healDistance=100;"]], "1", "1"],
|
||
|
["500", [7], "", -5, [["expression", "EAT_healDistance=500;"]], "1", "1"],
|
||
|
["1000", [8], "", -5, [["expression", "EAT_healDistance=1000;"]], "1", "1"],
|
||
|
["10000", [9], "", -5, [["expression", "EAT_healDistance=10000;"]], "1", "1"],
|
||
|
["Self", [10], "", -5, [["expression", "EAT_healDistance=0;"]], "1", "1"],
|
||
|
["Exit", [13], "", -3, [["expression", ""]], "1", "1"]
|
||
|
];
|
||
|
|
||
|
showCommandingMenu "#USER:EAT_distanceMenu";
|
||
|
WaitUntil{commandingMenu == ""};
|
||
|
|
||
|
if(EAT_healDistance == -1) exitWith {};
|
||
|
|
||
|
r_player_blood = r_player_bloodTotal;
|
||
|
r_player_inpain = false;
|
||
|
r_player_infected = false;
|
||
|
r_player_injured = false;
|
||
|
dayz_hunger = 0;
|
||
|
dayz_thirst = 0;
|
||
|
dayz_temperatur = 100;
|
||
|
|
||
|
r_fracture_legs = false;
|
||
|
r_fracture_arms = false;
|
||
|
r_player_dead = false;
|
||
|
r_player_unconscious = false;
|
||
|
r_player_loaded = false;
|
||
|
r_player_cardiac = false;
|
||
|
r_player_lowblood = false;
|
||
|
r_doLoop = false;
|
||
|
r_action = false;
|
||
|
r_player_timeout = 0;
|
||
|
r_handlerCount = 0;
|
||
|
r_interrupt = false;
|
||
|
|
||
|
disableUserInput false;
|
||
|
dayz_sourceBleeding = objNull;
|
||
|
player setVariable ["USEC_injured",false,true];
|
||
|
player setVariable['USEC_inPain',false,true];
|
||
|
player setVariable['USEC_infected',false,true];
|
||
|
player setVariable['USEC_lowBlood',false,true];
|
||
|
player setVariable['USEC_BloodQty',12000,true];
|
||
|
player setVariable['USEC_isCardiac',false,true];
|
||
|
{player setVariable[_x,false,true];} forEach USEC_woundHit;
|
||
|
player setVariable ["unconsciousTime", r_player_timeout, true];
|
||
|
player setVariable['NORRN_unconscious',false,true];
|
||
|
player setVariable ['messing',[dayz_hunger,dayz_thirst],true];
|
||
|
player setHit ['legs',0];
|
||
|
player setVariable ['hit_legs',0,true];
|
||
|
player setVariable ['hit_hands',0,true];
|
||
|
player setVariable["inCombat",false, true];
|
||
|
|
||
|
disableSerialization;
|
||
|
local _UIfix = (uiNameSpace getVariable 'DAYZ_GUI_display') displayCtrl 1303;
|
||
|
local _UIfix2 = (uiNameSpace getVariable 'DAYZ_GUI_display') displayCtrl 1203;
|
||
|
_UIfix ctrlShow false;
|
||
|
_UIfix2 ctrlShow false;
|
||
|
|
||
|
if(EAT_healDistance == 0) exitWith {};
|
||
|
|
||
|
local _entities = player nearEntities ["CAManBase", EAT_healDistance];
|
||
|
local _list = [];
|
||
|
|
||
|
{
|
||
|
if (isPlayer _x) then {
|
||
|
PVDZ_send = [_x,"Bandage", [_x,player]];
|
||
|
publicVariableServer "PVDZ_send";
|
||
|
|
||
|
PVDZ_send = [_x, "Transfuse", [_x, player, 12000]];
|
||
|
publicVariableServer "PVDZ_send";
|
||
|
|
||
|
PVDZ_send = [_x,"Morphine", [_x,player]];
|
||
|
publicVariableServer "PVDZ_send";
|
||
|
|
||
|
PVDZ_send = [_x,"Epinephrine", [_x,player,"ItemEpinephrine"]];
|
||
|
publicVariableServer "PVDZ_send";
|
||
|
|
||
|
PVDZ_send = [_x,"Painkiller", [_x,player]];
|
||
|
publicVariableServer "PVDZ_send";
|
||
|
|
||
|
PVDZ_send = [_x,"Antibiotics", [_x,player]];
|
||
|
publicVariableServer "PVDZ_send";
|
||
|
|
||
|
_list set[count _list, (name _x)];
|
||
|
};
|
||
|
} count _entities;
|
||
|
|
||
|
if (count _list > 0) then {format ["%1 healed",_list] call dayz_rollingMessages;};
|
||
|
};
|
||
|
|
||
|
EAT_Humanity = {
|
||
|
local _addOrRemove = _this select 0;
|
||
|
local _target = cursorTarget;
|
||
|
|
||
|
if (!isPlayer _target) then {_target = player;};
|
||
|
|
||
|
EAT_humanityGain = -1;
|
||
|
local _humanity = _target getVariable["humanity", 0];
|
||
|
|
||
|
if(_addOrRemove != "reset") then {
|
||
|
EAT_humanityChange = [
|
||
|
["",true],
|
||
|
["Select humanity amount:", [-1], "", 0, [["expression", ""]], "1", "0"],
|
||
|
["100", [2], "", -5, [["expression", "EAT_humanityGain=100;"]], "1", "1"],
|
||
|
["500", [3], "", -5, [["expression", "EAT_humanityGain=500;"]], "1", "1"],
|
||
|
["1000", [4], "", -5, [["expression", "EAT_humanityGain=1000;"]], "1", "1"],
|
||
|
["2500", [5], "", -5, [["expression", "EAT_humanityGain=2500;"]], "1", "1"],
|
||
|
["5000", [6], "", -5, [["expression", "EAT_humanityGain=5000;"]], "1", "1"],
|
||
|
["Exit", [8], "", 0, [["expression", ""]], "1", "1"]
|
||
|
];
|
||
|
|
||
|
showCommandingMenu "#USER:EAT_humanityChange";
|
||
|
waitUntil{(commandingMenu == "")};
|
||
|
if((EAT_humanityGain == -1)) exitWith {};
|
||
|
|
||
|
if(_addOrRemove == "remove") then {
|
||
|
EAT_humanityGain = EAT_humanityGain - (EAT_humanityGain * 2);
|
||
|
};
|
||
|
|
||
|
_target setVariable["humanity", _humanity + EAT_humanityGain, true];
|
||
|
format["%1 humanity has been added (total: %2) for player %3", EAT_humanityGain, _humanity + EAT_humanityGain, name _target] call dayz_rollingMessages;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has added %3 to %4 humanity (total %5)",name player,getPlayerUID player,EAT_humanityGain,name _target,_humanity + EAT_humanityGain] call EAT_Logger;};
|
||
|
}else{
|
||
|
EAT_humanityGain = _humanity - (_humanity * 2);
|
||
|
_target setVariable["humanity", 2500, true];
|
||
|
format["Humanity reset to 2500 for player %1", name _target] call dayz_rollingMessages;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has adjusted %3 humanity to 2500",name player,getPlayerUID player,name _target] call EAT_Logger;};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_SendMessage = {
|
||
|
uiSleep 0.2; // Sleep to make sure scroll menu is cleared
|
||
|
EAT_SendDialogText = "";
|
||
|
createDialog "EAT_messageBox_Dialog";
|
||
|
ctrlSetText [1001,"Send a server message"];
|
||
|
waitUntil {!dialog};
|
||
|
if(EAT_SendDialogText == "") exitWith {};
|
||
|
|
||
|
EAT_clientToServer = ["ServerMessage",player,[EAT_SendDialogText],dayz_authKey];
|
||
|
publicVariableServer "EAT_clientToServer";
|
||
|
};
|
||
|
|
||
|
EAT_AddMoney = {
|
||
|
// Add money to cursor target or self
|
||
|
|
||
|
private ["_amount","_wealth","_addMoney"];
|
||
|
|
||
|
_target = cursorTarget;
|
||
|
_player = player;
|
||
|
//_amount = _this select 0; //this value will be either a coin amount or a briefcase amount depending on if ZSC is installed.
|
||
|
|
||
|
if(!isPlayer _target) then {_target = _player;};
|
||
|
EAT_moneyAmount = 0;
|
||
|
|
||
|
if(Z_SingleCurrency) then {
|
||
|
_addMoney =
|
||
|
[
|
||
|
["",true],
|
||
|
["Add Money to Player or Self:", [-1], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["1,000", [2], "", -5, [["expression", "EAT_moneyAmount=1000;"]], "1", "1"],
|
||
|
["5,000", [3], "", -5, [["expression", "EAT_moneyAmount=5000;"]], "1", "1"],
|
||
|
["10,000", [4], "", -5, [["expression", "EAT_moneyAmount=10000;"]], "1", "1"],
|
||
|
["25,000", [5], "", -5, [["expression", "EAT_moneyAmount=25000;"]], "1", "1"],
|
||
|
["50,000", [6], "", -5, [["expression", "EAT_moneyAmount=50000;"]], "1", "1"],
|
||
|
["100,000", [7], "", -5, [["expression", "EAT_moneyAmount=100000;"]], "1", "1"],
|
||
|
["250,000", [8], "", -5, [["expression", "EAT_moneyAmount=250000;"]], "1", "1"],
|
||
|
["Exit", [13], "", -3, [["expression", "EAT_moneyAmount = -1;"]], "1", "1"]
|
||
|
];
|
||
|
showCommandingMenu "#USER:_addMoney";
|
||
|
WaitUntil{(EAT_moneyAmount !=0) || (commandingMenu == "")};
|
||
|
if(EAT_moneyAmount <= 0) exitWith{};
|
||
|
|
||
|
_wealth = _target getVariable[Z_MoneyVariable,0];
|
||
|
_target setVariable[Z_MoneyVariable,_wealth + EAT_moneyAmount,true];
|
||
|
|
||
|
} else {
|
||
|
_addMoney =
|
||
|
[
|
||
|
["",true],
|
||
|
["Add Money to Player or Self:", [-1], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["1 Briefcase", [2], "", -5, [["expression", "EAT_moneyAmount=1;"]], "1", "1"],
|
||
|
["2 Briefcases", [3], "", -5, [["expression", "EAT_moneyAmount=2;"]], "1", "1"],
|
||
|
["3 Briefcases", [4], "", -5, [["expression", "EAT_moneyAmount=3;"]], "1", "1"],
|
||
|
["4 Briefcases", [5], "", -5, [["expression", "EAT_moneyAmount=4;"]], "1", "1"],
|
||
|
["5 Briefcases", [6], "", -5, [["expression", "EAT_moneyAmount=5;"]], "1", "1"],
|
||
|
["Exit", [13], "", -3, [["expression", "EAT_moneyAmount = -1;"]], "1", "1"]
|
||
|
];
|
||
|
showCommandingMenu "#USER:_addMoney";
|
||
|
WaitUntil{(EAT_moneyAmount !=0) || (commandingMenu == "")};
|
||
|
if(EAT_moneyAmount <= 0) exitWith{};
|
||
|
|
||
|
_target addMagazine ["ItemBriefcase100oz",EAT_moneyAmount];
|
||
|
/*
|
||
|
{
|
||
|
[_target,"ItemBriefcase100oz"] call BIS_fnc_invAdd
|
||
|
} count _amount;
|
||
|
*/
|
||
|
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_Lock = {
|
||
|
local _obj = cursorTarget;
|
||
|
if (isNull _obj) exitWith {"No Target" call dayz_rollingMessages;};
|
||
|
|
||
|
local _objType = typeOf _obj;
|
||
|
local _objectID = _obj getVariable["ObjectID","0"];
|
||
|
|
||
|
call {
|
||
|
if(_objType in DZE_UnLockedStorage) exitWith { // Lock safe/lockbox
|
||
|
local _lockedClass = getText (configFile >> "CfgVehicles" >> _objType >> "lockedClass");
|
||
|
local _text = getText (configFile >> "CfgVehicles" >> _objType >> "displayName");
|
||
|
local _ownerID = _obj getVariable["ownerPUID","0"];
|
||
|
|
||
|
disableUserInput true; // Make sure player can not modify gear while it is being saved
|
||
|
(findDisplay 106) closeDisplay 0; // Close gear
|
||
|
dze_waiting = nil;
|
||
|
|
||
|
[_lockedClass,objNull] call fn_waitForObject;
|
||
|
|
||
|
PVDZE_handleSafeGear = [player,_obj,1];
|
||
|
publicVariableServer "PVDZE_handleSafeGear";
|
||
|
//wait for response from server to verify safe was logged and saved before proceeding
|
||
|
waitUntil {!isNil "dze_waiting"};
|
||
|
disableUserInput false; // Safe is done saving now
|
||
|
|
||
|
format[localize "str_epoch_player_117",_text] call dayz_rollingMessages;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has locked a safe - ID:%3 UID:%4",name player,getPlayerUID player,_objectID,_ownerID] call EAT_Logger;};
|
||
|
};
|
||
|
if (_obj isKindOf "AllVehicles") exitWith { // Lock vehicle
|
||
|
{player removeAction _x} forEach s_player_lockunlock;s_player_lockunlock = [];
|
||
|
s_player_lockUnlock_crtl = 1;
|
||
|
|
||
|
PVDZE_veh_Lock = [_obj,true];
|
||
|
if (local _obj) then {
|
||
|
PVDZE_veh_Lock spawn local_lockUnlock
|
||
|
} else {
|
||
|
publicVariable "PVDZE_veh_Lock";
|
||
|
};
|
||
|
s_player_lockUnlock_crtl = -1;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has locked a vehicle: %3",name player,getPlayerUID player,_obj] call EAT_Logger;};
|
||
|
};
|
||
|
// Lock Door
|
||
|
if (_obj animationPhase "Open_hinge" == 1) then {_obj animate ["Open_hinge", 0];};
|
||
|
if (_obj animationPhase "Open_latch" == 1) then {_obj animate ["Open_latch", 0];};
|
||
|
if (_obj animationPhase "Open_door" == 1) then {_obj animate ["Open_door", 0];};
|
||
|
if (_obj animationPhase "DoorR" == 1) then {_obj animate ["DoorR", 0];};
|
||
|
if (_obj animationPhase "LeftShutter" == 1) then {_obj animate ["LeftShutter", 0];};
|
||
|
if (_obj animationPhase "RightShutter" == 1) then {_obj animate ["RightShutter", 0];};
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has locked a door - ID:%3 Combo:%4",name _player,getPlayerUID _player,_objectID,(_obj getVariable ["CharacterID","0"])] call EAT_Logger;};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_Repair = {
|
||
|
local _vehicle = cursorTarget;
|
||
|
if (isNull _vehicle) exitWith {"No target" call dayz_rollingMessages;};
|
||
|
|
||
|
{
|
||
|
local _damage = [_vehicle,_x] call object_getHit;
|
||
|
if ((_damage select 0) > 0) then {
|
||
|
[_vehicle, (_damage select 1), 0, true] call fnc_veh_handleRepair;
|
||
|
};
|
||
|
} forEach (_vehicle call vehicle_getHitpoints);
|
||
|
|
||
|
if (local _vehicle) then {
|
||
|
[_vehicle,1] call local_setFuel;
|
||
|
} else {
|
||
|
PVDZ_send = [_vehicle,"SetFuel",[_vehicle,1]];
|
||
|
publicVariableServer "PVDZ_send";
|
||
|
};
|
||
|
|
||
|
format["%1 Repaired and Refueled", (getText(configFile >> "cfgVehicles" >> (typeOf _vehicle) >> "displayName"))] call dayz_rollingMessages;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has repaired %3",name player,getPlayerUID player,_vehicle] call EAT_Logger;};
|
||
|
};
|
||
|
|
||
|
EAT_Unlock = {
|
||
|
local _obj = cursorTarget;
|
||
|
if (isNull _obj) exitWith {"No Target" call dayz_rollingMessages;};
|
||
|
local _objectID = _obj getVariable["ObjectID","0"];
|
||
|
local _objType = typeOf _obj;
|
||
|
|
||
|
call {
|
||
|
if (_objType in DZE_LockedStorage) exitWith { // Unlock Safe/Lock_Box
|
||
|
// Get all required variables
|
||
|
local _unlockedClass = getText (configFile >> "CfgVehicles" >> _objType >> "unlockedClass");
|
||
|
local _ownerID = _obj getVariable["ownerPUID","0"];
|
||
|
disableUserInput true; // Make sure player can not modify gear while it is filling
|
||
|
(findDisplay 106) closeDisplay 0; // Close gear
|
||
|
dze_waiting = nil;
|
||
|
[_unlockedClass,objNull] call fn_waitForObject;
|
||
|
|
||
|
PVDZE_handleSafeGear = [player,_obj,0];
|
||
|
publicVariableServer "PVDZE_handleSafeGear";
|
||
|
//wait for response from server to verify safe was logged before proceeding
|
||
|
waitUntil {!isNil "dze_waiting"};
|
||
|
disableUserInput false; // Safe is done filling now
|
||
|
|
||
|
format[localize "STR_BLD_UNLOCKED", (getText (configFile >> "CfgVehicles" >> _objType >> "displayName"))] call dayz_rollingMessages;
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has unlocked a safe - ID:%3 UID:%4",name player,getPlayerUID player,_objectID,_ownerID] call EAT_Logger;};
|
||
|
};
|
||
|
if (_obj isKindOf "AllVehicles") exitWith { // Unlock vehicle
|
||
|
{player removeAction _x} forEach s_player_lockunlock;s_player_lockunlock = [];
|
||
|
s_player_lockUnlock_crtl = 1;
|
||
|
|
||
|
PVDZE_veh_Lock = [_obj,false];
|
||
|
|
||
|
if (local _obj) then {
|
||
|
PVDZE_veh_Lock spawn local_lockUnlock
|
||
|
} else {
|
||
|
publicVariable "PVDZE_veh_Lock";
|
||
|
};
|
||
|
|
||
|
s_player_lockUnlock_crtl = -1;
|
||
|
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has unlocked vehicle: %3 with ID:%4",name player,getPlayerUID player,_obj,_objectID] call EAT_Logger;};
|
||
|
};
|
||
|
//Unlock Door
|
||
|
if(_obj animationPhase "Open_hinge" == 0) then {_obj animate ["Open_hinge", 1];};
|
||
|
if(_obj animationPhase "Open_latch" == 0) then {_obj animate ["Open_latch", 1];};
|
||
|
if(_obj animationPhase "Open_door" == 0) then {_obj animate ["Open_door", 1];};
|
||
|
if(_obj animationPhase "DoorR" == 0) then {_obj animate ["DoorR", 1];};
|
||
|
if(_obj animationPhase "LeftShutter" == 0) then {_obj animate ["LeftShutter", 1];};
|
||
|
if(_obj animationPhase "RightShutter" == 0) then {_obj animate ["RightShutter", 1];};
|
||
|
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has unlocked a door - ID:%3 Combo:%4",name player,getPlayerUID player,_objectID,(_obj getVariable ["CharacterID","0"])] call EAT_Logger;};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_RecoverKey = {
|
||
|
local _obj = cursorTarget;
|
||
|
if (isNull _obj) exitWith {"No target" call dayz_rollingMessages;};
|
||
|
|
||
|
if (_obj isKindOf "AllVehicles") then {
|
||
|
local _id = parseNumber (_obj getVariable ["CharacterID","0"]);
|
||
|
if (_id == 0) exitWith {format ["%1 has ID 0 - No Key possible", (getText(configFile >> "cfgVehicles" >> (typeOf _obj) >> "displayName"))] call dayz_rollingMessages;};
|
||
|
|
||
|
local _result = call {
|
||
|
if (_id > 0 && {_id <= 2500}) exitWith {format["ItemKeyGreen%1", _id];};
|
||
|
if (_id > 2500 && {_id <= 5000}) exitWith {format["ItemKeyRed%1", _id - 2500];};
|
||
|
if (_id > 5000 && {_id <= 7500}) exitWith {format["ItemKeyBlue%1", _id - 5000];};
|
||
|
if (_id > 7500 && {_id <= 10000}) exitWith {format["ItemKeyYellow%1", _id - 7500];};
|
||
|
if (_id > 10000 && {_id <= 12500}) exitWith {format["ItemKeyBlack%1", _id - 10000];};
|
||
|
};
|
||
|
|
||
|
local _isKeyOK = isClass(configFile >> "CfgWeapons" >> _result);
|
||
|
false call dz_fn_meleeMagazines;
|
||
|
local _isOk = [player,_result] call BIS_fnc_invAdd;
|
||
|
true call dz_fn_meleeMagazines;
|
||
|
if (_isOk && _isKeyOK) then {
|
||
|
format["Key [%1] added to inventory!",_result] call dayz_rollingMessages;
|
||
|
} else {
|
||
|
"Your toolbelt is full" call dayz_rollingMessages;
|
||
|
};
|
||
|
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has generated %3 for a %4",name player,getPlayerUID player,_result,_obj] call EAT_Logger;};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_SkinChanger = {
|
||
|
private ["_skin","_unitBag","_bagType","_bagMagazines","_bagWeapons","_array1","_array2"];
|
||
|
_skin = _this select 0;
|
||
|
_unitBag = unitBackpack player;
|
||
|
_bagType = (typeOf _unitBag);
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has changed skins to %3",name player,getPlayerUID player,_skin] call EAT_Logger;};
|
||
|
|
||
|
if(_bagType != "") then {
|
||
|
_bagWeapons = getWeaponCargo _unitBag;
|
||
|
_bagMagazines = getMagazineCargo _unitBag;
|
||
|
removeBackpack (vehicle player);
|
||
|
[dayz_playerUID,dayz_characterID,_skin] spawn player_humanityMorph;
|
||
|
uiSleep 0.3;
|
||
|
|
||
|
(vehicle player) addBackpack _bagType;
|
||
|
uiSleep 0.1;
|
||
|
|
||
|
_array1 = _bagWeapons select 0;
|
||
|
_array2 = _bagWeapons select 1;
|
||
|
|
||
|
{
|
||
|
(unitBackpack player) addWeaponCargo [(_array1 select _forEachIndex),(_array2 select _forEachIndex)];
|
||
|
} forEach _array1;
|
||
|
|
||
|
_array1 = _bagMagazines select 0;
|
||
|
_array2 = _bagMagazines select 1;
|
||
|
|
||
|
{
|
||
|
(unitBackpack player) addMagazineCargo [(_array1 select _forEachIndex),(_array2 select _forEachIndex)];
|
||
|
} forEach _array1;
|
||
|
} else {
|
||
|
[dayz_playerUID,dayz_characterID,_skin] spawn player_humanityMorph;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_SpawnCrate = {
|
||
|
private ["_crate","_player","_dir","_pos"];
|
||
|
|
||
|
_crate = _this select 0;
|
||
|
_player = player;
|
||
|
|
||
|
// Location of player and crate
|
||
|
_dir = getDir _player;
|
||
|
_pos = getposATL _player;
|
||
|
_pos = [(_pos select 0)+3*sin(_dir),(_pos select 1)+3*cos(_dir), (_pos select 2)];
|
||
|
|
||
|
EAT_selectDelay = 0;
|
||
|
|
||
|
// Run delaymenu
|
||
|
EAT_delaymenu =
|
||
|
[
|
||
|
["",true],
|
||
|
["Select delay", [-1], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["", [-1], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["30 seconds", [], "", -5, [["expression", "EAT_selectDelay=30;"]], "1", "1"],
|
||
|
["1 min", [], "", -5, [["expression", "EAT_selectDelay=60;"]], "1", "1"],
|
||
|
["3 min", [], "", -5, [["expression", "EAT_selectDelay=180;"]], "1", "1"],
|
||
|
["5 min", [], "", -5, [["expression", "EAT_selectDelay=300;"]], "1", "1"],
|
||
|
["10 min", [], "", -5, [["expression", "EAT_selectDelay=600;"]], "1", "1"],
|
||
|
["30 min", [], "", -5, [["expression", "EAT_selectDelay=1800;"]], "1", "1"],
|
||
|
["", [-1], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["No timer", [], "", -5, [["expression", "EAT_selectDelay=0;"]], "1", "1"],
|
||
|
["", [-1], "", -5, [["expression", ""]], "1", "0"]
|
||
|
];
|
||
|
showCommandingMenu "#USER:EAT_delaymenu";
|
||
|
|
||
|
WaitUntil{commandingMenu == ""};
|
||
|
|
||
|
EAT_clientToServer = ["crate",player,[EAT_selectDelay,_crate,_dir,_pos],dayz_authKey];
|
||
|
publicVariableServer "EAT_clientToServer";
|
||
|
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has added a %3 crate",name _player,getPlayerUID _player,_crate] call EAT_Logger;};
|
||
|
|
||
|
if(EAT_selectDelay != 0) then {
|
||
|
format[_crate + " crate will disappear in %1 seconds.",EAT_selectDelay] call dayz_rollingMessages;
|
||
|
} else {
|
||
|
format[_crate + " has no timer. Shoot it to destroy."] call dayz_rollingMessages;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_Spectate = {
|
||
|
private ["_mycv","_max","_j","_name","_player","_menuCheckOk"];
|
||
|
|
||
|
_mycv = cameraView;
|
||
|
_player = player;
|
||
|
_menuCheckOk = false;
|
||
|
_max = 10;
|
||
|
_j = 0;
|
||
|
_name = "";
|
||
|
|
||
|
|
||
|
EAT_pMenuTitle = "Spectate Player:";
|
||
|
snext = false;
|
||
|
plist = [];
|
||
|
pselect5 = "";
|
||
|
spectate = true;
|
||
|
|
||
|
{if (_x != _player) then {plist set [count plist, name _x];};} forEach playableUnits;
|
||
|
|
||
|
while {pselect5 == "" && !_menuCheckOk} do
|
||
|
{
|
||
|
[_j, (_j + _max) min (count plist)] call EAT_fnc_playerSelect; _j = _j + _max;
|
||
|
WaitUntil {pselect5 != "" || snext || commandingMenu == ""};
|
||
|
_menuCheckOk = (commandingMenu == "");
|
||
|
snext = false;
|
||
|
};
|
||
|
|
||
|
if (pselect5!= "exit" && pselect5!="") then
|
||
|
{
|
||
|
_name = pselect5;
|
||
|
{
|
||
|
if(format[name _x] == _name) then
|
||
|
{
|
||
|
["Spectate"] call EAT_Keybind;
|
||
|
(vehicle _x) switchCamera "EXTERNAL";
|
||
|
"F6 to return" call dayz_rollingMessages;
|
||
|
waitUntil {uiSleep 1; !(alive _x) or !(alive player) or !(spectate)};
|
||
|
["EndSpectate"] call EAT_Keybind;
|
||
|
player switchCamera _mycv;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has begun spectating %3",name _player,getPlayerUID _player,_name] call EAT_Logger;};
|
||
|
};
|
||
|
} forEach playableUnits;
|
||
|
};
|
||
|
spectate = false;
|
||
|
if (!spectate && pselect5 != "exit") then
|
||
|
{
|
||
|
"Spectate done" call dayz_rollingMessages;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has stopped spectating %3",name _player,getPlayerUID _player,_name] call EAT_Logger;};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_LocateVeh = {
|
||
|
private ["_inv","_searchString","_ID","_found","_targetColor","_finalID","_targetPosition","_targetVehicle","_count","_key","_keyName","_showMapMarker","_markerColour","_locatorMarker"];
|
||
|
|
||
|
/****************************************| Config |**************************************************************************************/
|
||
|
|
||
|
_showMapMarker = True; // True = display the map markers, False = just identify the keys
|
||
|
_markerColour = "ColorOrange"; // Alternatives = "ColorBlack", "ColorRed", "ColorGreen", "ColorBlue", "ColorYellow", "ColorWhite"
|
||
|
|
||
|
/****************************************| Config |**************************************************************************************/
|
||
|
|
||
|
if( isNil "locateVehicle") then {locateVehicle = true;} else {locateVehicle = !locateVehicle};
|
||
|
|
||
|
if(locateVehicle) then {
|
||
|
|
||
|
_inv = [player] call BIS_fnc_invString;
|
||
|
_keyColor = [];
|
||
|
_keyID = [];
|
||
|
_removedID = [];
|
||
|
_count = 0;
|
||
|
|
||
|
if (!("ItemGPS" in _inv)) then {player addWeapon "ItemGPS";};
|
||
|
|
||
|
{
|
||
|
for "_i" from 1 to 2500 do {
|
||
|
_searchString = format ["ItemKey%1%2",_x,str(_i)];
|
||
|
if ((_searchString in _inv)) then {
|
||
|
_count = _count + 1;
|
||
|
_targetColor = _x;
|
||
|
_keyColor = _keyColor + [_targetColor];
|
||
|
_ID = str(_i);
|
||
|
_ID = parseNumber _ID;
|
||
|
if (_targetColor == "Green") then { _finalID = _ID; };
|
||
|
if (_targetColor == "Red") then { _finalID = _ID + 2500; };
|
||
|
if (_targetColor == "Blue") then { _finalID = _ID + 5000; };
|
||
|
if (_targetColor == "Yellow") then { _finalID = _ID + 7500; };
|
||
|
if (_targetColor == "Black") then { _finalID = _ID + 10000; };
|
||
|
_keyID = _keyID + [_finalID];
|
||
|
_removedID = _removedID + [_ID];
|
||
|
};
|
||
|
};
|
||
|
} forEach ["Black","Yellow","Blue","Green","Red"];
|
||
|
|
||
|
_i = 0;
|
||
|
for "_i" from 0 to 10 do {deleteMarkerLocal ("locatorMarker"+ (str _i));};
|
||
|
|
||
|
if (_count == 0) exitWith {"Place a key in your inventory to find that vehicle." call dayz_rollingMessages; locateVehicle = false;};
|
||
|
format["Found: %1 vehicle key",_count] call dayz_rollingMessages;
|
||
|
|
||
|
_count = _count - 1;
|
||
|
|
||
|
_i = 0;
|
||
|
for "_i" from 0 to _count do {
|
||
|
_finalID = _keyID select _i;
|
||
|
_ID = _removedID select _i;
|
||
|
_targetColor = _keyColor select _i;
|
||
|
_key = format["ItemKey%1%2",_targetColor,_ID];
|
||
|
_keyName = getText (configFile >> "CfgWeapons" >> _key >> "displayName");
|
||
|
_found = 0;
|
||
|
|
||
|
{
|
||
|
private ["_tID","_vehicle_type"];
|
||
|
_vehicle_type = typeOf _x;
|
||
|
_tID = parseNumber (_x getVariable ["CharacterID","0"]);
|
||
|
if ((_tID == _finalID) && ((_vehicle_type isKindOf "Air") || (_vehicle_type isKindOf "LandVehicle") || (_vehicle_type isKindOf "Ship"))) then {
|
||
|
_targetPosition = getPosATL _x;
|
||
|
_targetVehicle = _x;
|
||
|
_found = 1;
|
||
|
};
|
||
|
} forEach vehicles;
|
||
|
|
||
|
if (_found != 0) then {
|
||
|
_vehicleName = gettext (configFile >> "CfgVehicles" >> (typeof _targetVehicle) >> "displayName");
|
||
|
if (_showMapMarker) then {
|
||
|
_Marker = "locatorMarker" + (str _i);
|
||
|
_locatorMarker = createMarkerLocal [_Marker,[(_targetPosition select 0),(_targetPosition select 1)]];
|
||
|
_locatorMarker setMarkerShapeLocal "ICON";
|
||
|
_locatorMarker setMarkerTypeLocal "DOT";
|
||
|
_locatorMarker setMarkerColorLocal _markerColour;
|
||
|
_locatorMarker setMarkerSizeLocal [1.0, 1.0];
|
||
|
_locatorMarker setMarkerTextLocal format ["locator: %1",_vehicleName];
|
||
|
} else {
|
||
|
format["%1 belongs to %2 - %3",_keyName,_vehicleName,_finalID] call dayz_rollingMessages;
|
||
|
};
|
||
|
} else {
|
||
|
format["%1 - Vehicle ID: %2 - (This vehicle no longer exists in the database)",_keyName,_finalID] call dayz_rollingMessages;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
if (_showMapMarker) then {
|
||
|
"Map markers added. Run this again to remove them." call dayz_rollingMessages;
|
||
|
};
|
||
|
} else {
|
||
|
_i=0;
|
||
|
for "_i" from 0 to 10 do {deleteMarkerLocal ("locatorMarker"+ (str _i));};
|
||
|
"Map markers removed" call dayz_rollingMessages;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_SpawnZombie = {
|
||
|
private["_zCreate","_zPos","_setZedType","_zSpawnFnc","_zSpawnFnc","_player"];
|
||
|
zTypes = ["zZombie_Base","z_villager1","z_villager2","z_villager3","z_suit1","z_suit2","z_worker1","z_worker2","z_worker3","z_soldier","z_soldier_heavy","z_soldier_pilot","z_policeman","z_teacher","z_doctor","z_hunter","z_priest"];
|
||
|
|
||
|
EAT_area = 0;
|
||
|
zCount = 0;
|
||
|
_player = player;
|
||
|
|
||
|
_areaMenu =
|
||
|
[
|
||
|
["",true],
|
||
|
["Set Radius:", [-1], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["5m",[],"", -5,[["expression","EAT_area = 5;"]],"1","1"],
|
||
|
["10m",[],"", -5,[["expression","EAT_area = 10;"]],"1","1"],
|
||
|
["20m",[],"", -5,[["expression","EAT_area = 20;"]],"1","1"],
|
||
|
["30m",[],"", -5,[["expression","EAT_area = 30;"]],"1","1"],
|
||
|
["40m",[],"", -5,[["expression","EAT_area = 40;"]],"1","1"],
|
||
|
["50m",[],"", -5,[["expression","EAT_area = 50;"]],"1","1"],
|
||
|
["75m",[],"", -5,[["expression","EAT_area = 75;"]],"1","1"],
|
||
|
["100m",[],"", -5,[["expression","EAT_area = 100;"]],"1","1"],
|
||
|
["125m",[],"", -5,[["expression","EAT_area = 125;"]],"1","1"],
|
||
|
["150m",[],"", -5,[["expression","EAT_area = 150;"]],"1","1"],
|
||
|
["200m",[],"", -5,[["expression","EAT_area = 200;"]],"1","1"],
|
||
|
["", [], "", -5,[["expression", ""]], "1", "0"],
|
||
|
["Exit", [20], "", -5, [["expression", "EAT_area = -1;"]], "1", "1"]
|
||
|
];
|
||
|
|
||
|
_amountMenu =
|
||
|
[
|
||
|
["",true],
|
||
|
["Select zombie count:", [-1], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["1",[],"", -5,[["expression","zCount = 1;"]],"1","1"],
|
||
|
["2",[],"", -5,[["expression","zCount = 2;"]],"1","1"],
|
||
|
["3",[],"", -5,[["expression","zCount = 3;"]],"1","1"],
|
||
|
["4",[],"", -5,[["expression","zCount = 4;"]],"1","1"],
|
||
|
["5",[],"", -5,[["expression","zCount = 5;"]],"1","1"],
|
||
|
["10",[],"", -5,[["expression","zCount = 10;"]],"1","1"],
|
||
|
["20",[],"", -5,[["expression","zCount = 20;"]],"1","1"],
|
||
|
["30",[],"", -5,[["expression","zCount = 30;"]],"1","1"],
|
||
|
["40",[],"", -5,[["expression","zCount = 40;"]],"1","1"],
|
||
|
["50",[],"", -5,[["expression","zCount = 50;"]],"1","1"],
|
||
|
["100",[],"", -5,[["expression","zCount = 100;"]],"1","1"],
|
||
|
["", [], "", -5,[["expression", ""]], "1", "0"],
|
||
|
["Exit", [20], "", -5, [["expression", "zCount = -1;"]], "1", "1"]
|
||
|
];
|
||
|
|
||
|
showCommandingMenu "#USER:_areaMenu";
|
||
|
waitUntil{(EAT_area != 0) || (commandingMenu == "")};
|
||
|
if(EAT_area <= 0) exitWith{};
|
||
|
|
||
|
showCommandingMenu "#USER:_amountMenu";
|
||
|
waitUntil{(zCount != 0) || (commandingMenu == "")};
|
||
|
if(zCount <= 0) exitWith{};
|
||
|
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has added %3 zombies",name _player,getPlayerUID _player,zCount] call EAT_Logger;};
|
||
|
|
||
|
_i = 1;
|
||
|
for "_i" from 1 to zCount do {
|
||
|
[zTypes] spawn {
|
||
|
zTypes = _this select 0;
|
||
|
_setZedType = zTypes call BIS_fnc_selectRandom;
|
||
|
_zCreate = createAgent [_setZedType, position player, [], EAT_area, "NONE"];
|
||
|
_zPos = getPosATL _zCreate;
|
||
|
[_zPos,_zCreate] execFSM "\z\addons\dayz_code\system\zombie_agent.fsm";
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
/*************Start Base Manager Functions******************/
|
||
|
fn_BCSelect = {
|
||
|
systemChat str [lbCurSel 14000];
|
||
|
[lbCurSel 14000] spawn {
|
||
|
private ["_pindex", "_bindex", "_base", "_player", "_base_objects"];
|
||
|
systemChat str _this;
|
||
|
//_pindex = _this select 0;
|
||
|
_bindex = _this select 0;
|
||
|
if (_bindex < 0) exitWith {};
|
||
|
_base = BCBaseList select _bindex;
|
||
|
//_player = BCNearbyList select _pindex;
|
||
|
_attach_position = player modelToWorld (_base select 2);
|
||
|
//_attach_position set [2, getPosASL player select 2];
|
||
|
_attach_position set [2, ([player] call FNC_GetPos) select 2];
|
||
|
_base_objects = [_base select 3, _attach_position, player] call fn_BCCreateBase;
|
||
|
[_base_objects] call fn_BCBuildbase;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
fn_BCInsert = {
|
||
|
createdialog "EAT_BaseManager_Dialog";
|
||
|
//lbClear 12000;
|
||
|
lbClear 14000;
|
||
|
//ctrlShow [12005, false];
|
||
|
{
|
||
|
lbAdd [14000, format["%1 (%2)", _x select 1, _x select 0]];
|
||
|
true
|
||
|
} count BCBaseList;
|
||
|
};
|
||
|
|
||
|
fn_BCSetCenter = {
|
||
|
BC_radius = nil;
|
||
|
//BC_Center = getPosASL player;
|
||
|
BC_Center = [player] call FNC_GetPos;
|
||
|
local _centerSign = createVehicle ["Sign_arrow_down_large_EP1", [0,0,0], [], 0, "CAN_COLLIDE"];
|
||
|
if (surfaceIsWater BC_Center) then {
|
||
|
_centerSign setPosASL BC_Center;
|
||
|
} else {
|
||
|
_centerSign setPosATL BC_Center;
|
||
|
};
|
||
|
//_centerSign setPosASL BC_Center;
|
||
|
_centerSign spawn {sleep 30; deleteVehicle _this;};
|
||
|
showCommandingMenu "#USER:BCMainMenu";
|
||
|
};
|
||
|
|
||
|
fn_BCSetRadius = {
|
||
|
if (isNil "BC_Center") exitWith
|
||
|
{
|
||
|
systemChat "Center not set";
|
||
|
};
|
||
|
BC_radius = [player, BC_center] call BIS_fnc_distance2D;
|
||
|
showCommandingMenu "#USER:BCMainMenu";
|
||
|
|
||
|
// Have the server spawn the transparent red globes to avoid BattlEye kicks
|
||
|
EAT_clientToServer = ["Base Manager",player,[BC_radius,BC_center,getPos player],dayz_authKey];
|
||
|
publicVariableServer "EAT_clientToServer";
|
||
|
};
|
||
|
|
||
|
fn_BCExport = {
|
||
|
private ["_objects", "_position", "_distance", "_nearest_objects", "_export","_i"];
|
||
|
if (isNil "BC_Center" or isNil "BC_radius") exitWith
|
||
|
{
|
||
|
systemChat "Center not set";
|
||
|
};
|
||
|
_objects = [];
|
||
|
_export = "";
|
||
|
_position = BC_center;
|
||
|
_distance = BC_radius;
|
||
|
_nearest_objects = nearestObjects [[_position select 0, _position select 1], DayZ_SafeObjects, _distance];
|
||
|
_objectCount = count _nearest_objects;
|
||
|
_i = 1;
|
||
|
{
|
||
|
private ["_obj_type", "_direction", "_obj_position", "_relative_position", "_row"];
|
||
|
_obj_type = typeOf _x;
|
||
|
_direction = getDir _x;
|
||
|
//_obj_position = getPosASL _x;
|
||
|
_obj_position = [_x] call FNC_GetPos;
|
||
|
_relative_position = [
|
||
|
(_obj_position select 0) - (_position select 0),
|
||
|
(_obj_position select 1) - (_position select 1),
|
||
|
(_obj_position select 2) - (_position select 2)
|
||
|
];
|
||
|
_row = [_obj_type, _relative_position, _direction];
|
||
|
if(_i < _objectCount) then {
|
||
|
_export = _export + str(_row) + ",$$";
|
||
|
} else {
|
||
|
_export = _export + str(_row);
|
||
|
};
|
||
|
_row set [count _row, _x];
|
||
|
_objects set [count _objects, _row];
|
||
|
_i = _i + 1;
|
||
|
} count _nearest_objects;
|
||
|
|
||
|
EAT_PVEH_baseExporter = _export;
|
||
|
publicVariableServer "EAT_PVEH_baseExporter";
|
||
|
|
||
|
systemChat format["Exported base to server\EpochAdminTools\Bases.sqf"];
|
||
|
showCommandingMenu "#USER:BCMainMenu";
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has exported a base",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
|
||
|
_objects
|
||
|
};
|
||
|
|
||
|
fn_BCCopy = {
|
||
|
private ["_objects", "_position", "_distance", "_nearest_objects"];
|
||
|
if (isNil "BC_Center" or isNil "BC_radius") exitWith
|
||
|
{
|
||
|
systemChat "Center not set";
|
||
|
};
|
||
|
_objects = [];
|
||
|
_position = BC_center;
|
||
|
_distance = BC_radius;
|
||
|
_nearest_objects = nearestObjects [[_position select 0, _position select 1], DayZ_SafeObjects, _distance];
|
||
|
{
|
||
|
private ["_obj_type","_direction","_obj_position","_relative_position","_row","_vector"];
|
||
|
_obj_type = typeOf _x;
|
||
|
_direction = getDir _x;
|
||
|
//_obj_position = getPosASL _x;
|
||
|
_obj_position = [_x] call FNC_GetPos;
|
||
|
_vector = [vectorDir _x,vectorUp _x];
|
||
|
_relative_position = [
|
||
|
(_obj_position select 0) - (_position select 0),
|
||
|
(_obj_position select 1) - (_position select 1),
|
||
|
(_obj_position select 2) - (_position select 2)
|
||
|
];
|
||
|
_row = [_obj_type, _relative_position, _direction, _vector];
|
||
|
_row set [count _row, _x];
|
||
|
_objects set [count _objects, _row];
|
||
|
true
|
||
|
} count _nearest_objects;
|
||
|
systemChat format["Copied %1 items", count _nearest_objects];
|
||
|
BCCopiedBase = _objects;
|
||
|
showCommandingMenu "#USER:BCMainMenu";
|
||
|
_objects
|
||
|
};
|
||
|
|
||
|
fn_BCPaste = {
|
||
|
private ["_dimensions", "_attach_position", "_base_objects"];
|
||
|
if (isNil "BCCopiedBase") exitWith
|
||
|
{
|
||
|
"No base has been copied" call dayz_rollingmessages;
|
||
|
};
|
||
|
_dimensions = BCCopiedBase call fn_BCGetDimensions;
|
||
|
_attach_position = player modelToWorld [0, ((_dimensions select 0) max (_dimensions select 1)), 0];
|
||
|
diag_log str [0, ((_dimensions select 0) max (_dimensions select 1)), 0];
|
||
|
//_attach_position set [2, getPosASL player select 2];
|
||
|
_attach_position set [2, ([player] call FNC_GetPos) select 2];
|
||
|
_base_objects = [BCCopiedBase, _attach_position] call fn_BCCreateBase;
|
||
|
[_base_objects] call fn_BCBuildbase;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has pasted a copied base",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
};
|
||
|
|
||
|
fn_BCDelete = {
|
||
|
BaseDestruction = [
|
||
|
["What should delete?",true],
|
||
|
["Finish",[2],"",-5,[["expression","[] spawn fn_BCConfirmDelete"]],"1","1"],
|
||
|
[format["Vehicles(%1)",BD_vehicles], [3], "", -5, [["expression", "BD_vehicles = !BD_vehicles; [] spawn fn_BCDelete"]], "1", "1"],
|
||
|
[format["PlotPoles(%1)",BD_PlotPoles], [4], "", -5, [["expression", "BD_PlotPoles = !BD_PlotPoles; [] spawn fn_BCDelete"]], "1", "1"],
|
||
|
[format["Buildables(%1)",BD_Buildables], [5], "", -5, [["expression", "BD_Buildables = !BD_Buildables; [] spawn fn_BCDelete"]], "1", "1"]
|
||
|
];
|
||
|
showCommandingMenu "#USER:BaseDestruction";
|
||
|
};
|
||
|
|
||
|
fn_BCConfirmDelete = {
|
||
|
private ["_position", "_distance", "_objectClasses", "_objects"];
|
||
|
|
||
|
if (isNil "BC_Center" or isNil "BC_radius") exitWith
|
||
|
{
|
||
|
systemChat "Center or radius not set";
|
||
|
};
|
||
|
if (!BD_Buildables && !BD_PlotPoles && !BD_vehicles) exitWith
|
||
|
{
|
||
|
systemChat "Nothing deleted. You set all options to false";
|
||
|
};
|
||
|
|
||
|
_position = BC_center;
|
||
|
_distance = BC_radius;
|
||
|
_objectClasses = [];
|
||
|
|
||
|
if (BD_Buildables) then {
|
||
|
_objectClasses = DayZ_SafeObjects;
|
||
|
};
|
||
|
if (BD_vehicles) then {
|
||
|
_objectClasses = _objectClasses + ["LandVehicle","Helicopter","Plane","Ship"];
|
||
|
};
|
||
|
if (BD_PlotPoles) then {
|
||
|
_objectClasses = _objectClasses + ["Plastic_Pole_EP1_DZ"];
|
||
|
} else {
|
||
|
_objectClasses = _objectClasses - ["Plastic_Pole_EP1_DZ"];
|
||
|
};
|
||
|
|
||
|
_objects = nearestObjects [[_position select 0, _position select 1], _objectClasses, _distance];
|
||
|
|
||
|
{
|
||
|
_objectID = _x getVariable ["ObjectID", "0"];
|
||
|
_objectUID = _x getVariable ["ObjectUID", "0"];
|
||
|
PVDZ_obj_Destroy = [_objectID, _objectUID, player, _x, dayz_authKey];
|
||
|
publicVariableServer "PVDZ_obj_Destroy";
|
||
|
} forEach _objects;
|
||
|
|
||
|
[format["<t size='0.6'>Deleted %1 objects</t>", count _objects],0,0.8,0.5,0,0,8] spawn BIS_fnc_dynamicText;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has deleted %3 items using deletebase",name player,getPlayerUID player,count _objects] call EAT_Logger;};
|
||
|
};
|
||
|
|
||
|
fn_BCSaveToDb = {
|
||
|
{
|
||
|
_x setVariable ["CharacterID",dayz_characterID,true];
|
||
|
|
||
|
PVDZ_obj_Publish = [dayz_characterID,_x,[getDir _x,getPosATL _x,[vectorDir _x,vectorUp _x]],[],player,dayz_authKey];
|
||
|
publicVariableServer "PVDZ_obj_Publish";
|
||
|
|
||
|
} forEach BCCurrentBase;
|
||
|
[format["<t size='0.6'>Added %1 objects to database</t>", count BCCurrentBase],0,0.8,0.5,0,0,8] spawn BIS_fnc_dynamicText;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has placed a saved base",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
};
|
||
|
|
||
|
fn_BCCancelBase = {
|
||
|
{
|
||
|
detach _x; deleteVehicle _x;
|
||
|
} count BCCurrentBase;
|
||
|
BCCurrentBase = [];
|
||
|
["<t size='0.6'>Cancelled</t>",0,0.8,0.5,0,0,8] spawn BIS_fnc_dynamicText;
|
||
|
};
|
||
|
|
||
|
fn_BCCenter = {
|
||
|
private ["_ax", "_ay", "_az", "_total"];
|
||
|
_ax = 0;
|
||
|
_ay = 0;
|
||
|
_az = 0;
|
||
|
{
|
||
|
private ["_pos"];
|
||
|
//_pos = getPosASL _x;
|
||
|
_pos = [_x] call FNC_GetPos;
|
||
|
_ax = _ax + (_pos select 0);
|
||
|
_ay = _ay + (_pos select 1);
|
||
|
_az = _az + (_pos select 2);
|
||
|
} count _this;
|
||
|
_total = count _this;
|
||
|
_center = [_ax / _total, _ay / _total, _az / _total];
|
||
|
_center
|
||
|
};
|
||
|
|
||
|
fn_BCRotateVector = {
|
||
|
local _object = _this select 0;
|
||
|
local _vector = _this select 1;
|
||
|
local _aroundZ = (360 - (_this select 2)) - 360;
|
||
|
local _dirX = ((_vector select 0) select 0);
|
||
|
local _dirY = ((_vector select 0) select 1);
|
||
|
local _dirZ = ((_vector select 0) select 2);
|
||
|
local _upX = ((_vector select 1) select 0);
|
||
|
local _upY = ((_vector select 1) select 1);
|
||
|
local _upZ = ((_vector select 1) select 2);
|
||
|
|
||
|
|
||
|
local _sinaroundZ = sin _aroundZ;
|
||
|
local _cosaroundZ = cos _aroundZ;
|
||
|
local _dirXTemp = _dirX;
|
||
|
_dirX = (_dirXTemp * _cosaroundZ) - (_dirY * _sinaroundZ);
|
||
|
_dirY = (_dirY * _cosaroundZ) + (_dirXTemp * _sinaroundZ);
|
||
|
local _upXTemp = _upX;
|
||
|
_upX = (_upXTemp * _cosaroundZ) - (_upY * _sinaroundZ);
|
||
|
_upY = (_upY * _cosaroundZ) + (_upXTemp * _sinaroundZ);
|
||
|
|
||
|
local _dir = [_dirX, _dirY, _dirZ];
|
||
|
local _up = [_upX, _upY, _upZ];
|
||
|
_object setVectorDirAndUp [_dir, _up];
|
||
|
};
|
||
|
|
||
|
fn_BCCreateBase = {
|
||
|
|
||
|
//#include "\z\addons\dayz_code\util\Vector.hpp"
|
||
|
|
||
|
private ["_objects", "_items", "_position", "_player","_dirPlayer","_playerVectorDir"];
|
||
|
_objects = [];
|
||
|
_items = _this select 0;
|
||
|
_position = _this select 1;
|
||
|
_dirPlayer = getDir player;
|
||
|
if (count _this == 3) then {
|
||
|
_player = _this select 2;
|
||
|
};
|
||
|
{
|
||
|
private ["_object", "_orig_obj","_objectVectorDir","_resultVectorDir","_rotateDegrees","_newDir","_rotate","_vector","_newVector"];
|
||
|
_object = createVehicle [_x select 0, [0,0,0], [], 0, "CAN_COLLIDE"];
|
||
|
//_object = (_x select 0) createVehicle [0,0,0];
|
||
|
_newDir = ((_x select 2) - _dirPlayer);
|
||
|
_object setDir _newDir;
|
||
|
//_rotate = ((360 - _newDir) - 360);
|
||
|
//_vector = _x select 3;
|
||
|
//_object setVectorDirAndUp (Vector_Rotate3D_Fast((_vector select 0), (_vector select 1), _rotate)); // use this instead of creating a new function.
|
||
|
//_newVector = [(_vector select 0), (_vector select 1), _rotate] call dz_fn_vector_rotate3d;
|
||
|
//diag_log _newVector;
|
||
|
//diag_log formatText ["Vector after rotation %1",(Vector_Rotate3D((_vector select 0), (_vector select 1), _rotate));];
|
||
|
//_object setVectorDirAndUp (Vector_Rotate3D((_vector select 0), (_vector select 1), _rotate));
|
||
|
if (surfaceIsWater _position) then {
|
||
|
_object setPosASL [
|
||
|
((_x select 1) select 0) + (_position select 0),
|
||
|
((_x select 1) select 1) + (_position select 1),
|
||
|
((_x select 1) select 2) + (_position select 2)
|
||
|
];
|
||
|
} else {
|
||
|
_object setPosATL [
|
||
|
((_x select 1) select 0) + (_position select 0),
|
||
|
((_x select 1) select 1) + (_position select 1),
|
||
|
((_x select 1) select 2) + (_position select 2)
|
||
|
];
|
||
|
};
|
||
|
[_object, (_x select 3), _newDir] call fn_BCRotateVector;
|
||
|
_object attachTo [player];
|
||
|
|
||
|
/*
|
||
|
if (count _x == 4) then {
|
||
|
_orig_obj = _x select 3;
|
||
|
_object setVariable ["CharacterID", _orig_obj getVariable ["CharacterID", ""], true];
|
||
|
};
|
||
|
*/
|
||
|
if (!isNil "_player") then {
|
||
|
_object setVariable ["CharacterID", (_player getVariable ["CharacterID","0"]), true];
|
||
|
};
|
||
|
_objects set [count _objects, _object];
|
||
|
|
||
|
true
|
||
|
} count _items;
|
||
|
_objects
|
||
|
};
|
||
|
|
||
|
fn_BCBuildbase = {
|
||
|
private ["_base_objects", "_finished", "_place"];
|
||
|
_base_objects = _this select 0;
|
||
|
{
|
||
|
_x attachTo [player];
|
||
|
true
|
||
|
} count _base_objects;
|
||
|
_finished = false;
|
||
|
DZE_Q = false;
|
||
|
DZE_Z = false;
|
||
|
DZE_4 = false;
|
||
|
DZE_6 = false;
|
||
|
DZE_5 = false;
|
||
|
DZE_cancelBuilding = false;
|
||
|
_place = false;
|
||
|
while {!_finished} do {
|
||
|
private ["_player_direction"];
|
||
|
["<t size='0.6'>SPACE: Place | Q/E: Rotate | PgUp/PgDn: Height</t>",0,0.8,0.5,0,0,8] spawn BIS_fnc_dynamicText;
|
||
|
_player_direction = getDir player;
|
||
|
if (DZE_Q or DZE_Z) then {
|
||
|
{
|
||
|
private ["_obj_direction", "_position"];
|
||
|
detach _x;
|
||
|
_obj_direction = getDir _x;
|
||
|
//_position = getPosASL _x;
|
||
|
_position = [_x] call FNC_getPos;
|
||
|
_position set [2, (_position select 2) + (if (DZE_Q) then {0.5} else {-0.5})];
|
||
|
//_x setPosASL _position;
|
||
|
if (surfaceIsWater _position) then {
|
||
|
_x setPosASL _position;
|
||
|
} else {
|
||
|
_x setPosATL _position;
|
||
|
};
|
||
|
_x attachTo [player];
|
||
|
_x setDir (_obj_direction - _player_direction);
|
||
|
true
|
||
|
} count _base_objects;
|
||
|
DZE_Q = false;
|
||
|
DZE_Z = false;
|
||
|
};
|
||
|
if (DZE_4 or DZE_6) then {
|
||
|
private ["_center_position"];
|
||
|
_center_position = _base_objects call fn_BCCenter;
|
||
|
{
|
||
|
private ["_position", "_obj_direction", "_dif_direction", "_new_direction", "_distance", "_rotated_position"];
|
||
|
detach _x;
|
||
|
//_position = getPosASL _x;
|
||
|
_position = [_x] call FNC_getPos;
|
||
|
_obj_direction = ([_center_position, _position] call BIS_fnc_dirTo);
|
||
|
_dif_direction = if (DZE_4) then {10} else {-10};
|
||
|
_new_direction = _obj_direction + _dif_direction;
|
||
|
_distance = [_center_position, _position] call BIS_fnc_distance2D;
|
||
|
_obj_direction = getDir _x;
|
||
|
_rotated_position = [_center_position, _distance, _new_direction] call BIS_fnc_relPos;
|
||
|
_rotated_position set [2, _position select 2];
|
||
|
//_x setPosASL _rotated_position;
|
||
|
if (surfaceIsWater _position) then {
|
||
|
_x setPosASL _rotated_position;
|
||
|
} else {
|
||
|
_x setPosATL _rotated_position;
|
||
|
};
|
||
|
_x attachTo [player];
|
||
|
_x setDir (((_obj_direction - _player_direction) + _dif_direction) % 360);
|
||
|
true
|
||
|
} count _base_objects;
|
||
|
DZE_4 = false;
|
||
|
DZE_6 = false;
|
||
|
};
|
||
|
if(DZE_5) exitWith {
|
||
|
_finished = true;
|
||
|
_place = true;
|
||
|
};
|
||
|
if (DZE_cancelBuilding) exitWith {
|
||
|
_finished = true;
|
||
|
_place = false;
|
||
|
};
|
||
|
sleep 0.1;
|
||
|
};
|
||
|
{detach _x; true} count _base_objects;
|
||
|
BCCurrentBase = _base_objects;
|
||
|
if (_place) then {
|
||
|
showCommandingMenu "#USER:BCBaseSaveMenu";
|
||
|
} else {
|
||
|
call fn_BCCancelBase;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
fn_BCGetDimensions = {
|
||
|
private ["_xmin", "_xmax", "_ymin", "_ymax"];
|
||
|
_xmin = 0;
|
||
|
_xmax = 0;
|
||
|
_ymin = 0;
|
||
|
_ymax = 0;
|
||
|
{
|
||
|
private ["_position"];
|
||
|
_position = _x select 1;
|
||
|
if ((_position select 0) < _xmin) then {
|
||
|
_xmin = _position select 0;
|
||
|
};
|
||
|
if ((_position select 0) > _xmax) then {
|
||
|
_xmax = _position select 0;
|
||
|
};
|
||
|
if ((_position select 1) < _ymin) then {
|
||
|
_ymin = _position select 1;
|
||
|
};
|
||
|
if ((_position select 1) > _ymax) then {
|
||
|
_ymax = _position select 1;
|
||
|
};
|
||
|
true
|
||
|
} count _this;
|
||
|
[abs _xmin + abs _xmax, abs _ymin + abs _ymax]
|
||
|
};
|
||
|
|
||
|
BCSaveAsScript = {
|
||
|
private ["_lastObject","_position","_distance","_objectClasses","_objects","_pos","_class","_dir","_buildings"];
|
||
|
|
||
|
if (isNil "BC_Center" or isNil "BC_radius") exitWith
|
||
|
{
|
||
|
systemChat "Center or radius not set";
|
||
|
};
|
||
|
|
||
|
_position = BC_center;
|
||
|
_distance = BC_radius;
|
||
|
_objectClasses = [];
|
||
|
_buildings = [EAT_allBuildingList] call myfnc_MDarray;
|
||
|
_objectClasses = _buildings + DayZ_SafeObjects;
|
||
|
_objects = nearestObjects [[_position select 0, _position select 1], _objectClasses, _distance];
|
||
|
_lastObject = _objects select ((count _objects) -1);
|
||
|
_objects = _objects - [_objects select ((count _objects) -1)];
|
||
|
|
||
|
diag_log "////////////////// Begin Scripted Base /////////////////////////////";
|
||
|
diag_log text "[[";
|
||
|
{
|
||
|
_pos = [_x] call FNC_GetPos;
|
||
|
_class = TypeOf _x;
|
||
|
_dir = getDir _x;
|
||
|
diag_log text format[" [""%1"",%2,%3],",_class,_pos,_dir];
|
||
|
} forEach _objects;
|
||
|
diag_log text format[" [""%1"",%2,%3]",TypeOf _lastObject,[_lastObject] call FNC_GetPos,getDir _lastObject];
|
||
|
diag_log text "],false,false,false] call fnc_spawnObjects;";
|
||
|
diag_log "/////////////////// End Scripted Base //////////////////////////////";
|
||
|
systemChat "The base has been saved to the client rpt";
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
BCMainMenu =
|
||
|
[
|
||
|
["Base Manager",true],
|
||
|
["Insert", [2], "", -5, [["expression", "[] spawn fn_BCInsert"]], "1", "1"],
|
||
|
["Export to sqf",[3], "", -5, [["expression", "[] spawn fn_BCExport"]], "1", "1"],
|
||
|
["===========", [], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["Set Center", [4], "", -5, [["expression", "[] spawn fn_BCSetCenter"]], "1", "1"],
|
||
|
["Set Radius", [5], "", -5, [["expression", "[] spawn fn_BCSetRadius"]], "1", "1"],
|
||
|
["===========", [], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["Copy", [6], "", -5, [["expression", "[] spawn fn_BCCopy"]], "1", "1"],
|
||
|
["Paste", [7], "", -5, [["expression", "[] spawn fn_BCPaste"]], "1", "1"],
|
||
|
["Save As Script", [8], "", -5, [["expression", "[] spawn BCSaveAsScript"]], "1", "1"],
|
||
|
|
||
|
["Delete", [9], "", -5, [["expression", "[] spawn fn_BCDelete"]], "1", "1"],
|
||
|
["===========", [], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["Exit", [10], "", -5, [["expression", ""]], "1", "1"]
|
||
|
];
|
||
|
|
||
|
BCBaseSaveMenu = [
|
||
|
["",true],
|
||
|
["Save", [2], "", -5, [["expression", "[] spawn fn_BCSaveToDb"]], "1", "1"],
|
||
|
["Exit", [3], "", -5, [["expression", "[] spawn fn_BCCancelBase"]], "1", "1"]
|
||
|
];
|
||
|
|
||
|
EAT_BaseManager = {
|
||
|
showCommandingMenu "#USER:BCMainMenu";
|
||
|
};
|
||
|
|
||
|
/****************End Base Manager Functions******************/
|
||
|
|
||
|
EAT_AdminBuild = {
|
||
|
private ["_abort","_reason","_distance","_isNear","_lockable","_isAllowedUnderGround","_offset","_classname",
|
||
|
"_zheightdirection","_zheightchanged","_rotate","_objectHelperPos","_objectHelperDir","_objHDiff","_position",
|
||
|
"_isOk","_dir","_vector","_cancel","_location2","_buildOffset","_location",
|
||
|
"_counter","_dis","_sfx","_combination_1_Display","_combination_1",
|
||
|
"_combination_2","_combination_3","_combination","_combinationDisplay","_combination_4","_num_removed",
|
||
|
"_tmpbuilt","_vUp","_classnametmp","_text","_ghost","_objectHelper","_location1","_object","_helperColor",
|
||
|
"_canDo","_pos","_onLadder","_vehicle","_inVehicle","_isPole","_isPerm","_moveDistanceOriginal"];
|
||
|
|
||
|
//Check if building already in progress, exit if so.
|
||
|
if (dayz_actionInProgress) exitWith {localize "str_epoch_player_40" call dayz_rollingMessages;};
|
||
|
dayz_actionInProgress = true;
|
||
|
|
||
|
_pos = [player] call FNC_GetPos;
|
||
|
|
||
|
_onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
|
||
|
|
||
|
_vehicle = vehicle player;
|
||
|
_inVehicle = (_vehicle != player);
|
||
|
_isPerm = false;
|
||
|
|
||
|
DZE_Q = false;
|
||
|
DZE_Z = false;
|
||
|
|
||
|
DZE_Q_alt = false;
|
||
|
DZE_Z_alt = false;
|
||
|
|
||
|
DZE_Q_ctrl = false;
|
||
|
DZE_Z_ctrl = false;
|
||
|
|
||
|
DZE_5 = false;
|
||
|
DZE_4 = false;
|
||
|
DZE_6 = false;
|
||
|
|
||
|
DZE_F = false;
|
||
|
|
||
|
DZE_cancelBuilding = false;
|
||
|
|
||
|
DZE_updateVec = false;
|
||
|
DZE_memDir = 0;
|
||
|
DZE_memForBack = 0;
|
||
|
DZE_memLeftRight = 0;
|
||
|
|
||
|
call gear_ui_init;
|
||
|
closeDialog 1;
|
||
|
|
||
|
if (dayz_isSwimming) exitWith {dayz_actionInProgress = false; localize "str_player_26" call dayz_rollingMessages;};
|
||
|
if (_inVehicle) exitWith {dayz_actionInProgress = false; localize "str_epoch_player_42" call dayz_rollingMessages;};
|
||
|
if (_onLadder) exitWith {dayz_actionInProgress = false; localize "str_player_21" call dayz_rollingMessages;};
|
||
|
|
||
|
DZE_buildItem = _this select 0;
|
||
|
if(isNil "adminRebuildItem" && DZE_buildItem == "rebuild") exitWith {dayz_actionInProgress = false; systemChat "You have not selected a buildable item yet"};
|
||
|
if(DZE_buildItem == "rebuild") then {
|
||
|
DZE_buildItem = adminRebuildItem;
|
||
|
_isPerm = adminRebuildPerm;
|
||
|
} else {
|
||
|
adminRebuildItem = DZE_buildItem;
|
||
|
isBuilding = _this select 1;
|
||
|
adminRebuildPerm = _this select 2;
|
||
|
_isPerm = adminRebuildPerm;
|
||
|
};
|
||
|
// declare tempVariables for the unidimentional array with the list of each items for each category to be compared
|
||
|
_buildRes = [(EAT_buildResidential - EAT_buildShed) + EAT_buildFarm] call myfnc_MDarray;
|
||
|
_buildMil = [(EAT_buildCastle + EAT_buildMilitary + EAT_buildIndustrial)] call myfnc_MDarray;
|
||
|
_buildReli = [EAT_buildReligious] call myfnc_MDarray;
|
||
|
_buildMisc = [(EAT_buildGrave + EAT_buildOutdoors)] call myfnc_MDarray;
|
||
|
|
||
|
_classname = DZE_buildItem;
|
||
|
_classnametmp = _classname;
|
||
|
|
||
|
_text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName");
|
||
|
if(isNil "_text") then {
|
||
|
_text = _classname;
|
||
|
};
|
||
|
_ghost = getText (configFile >> "CfgVehicles" >> _classname >> "ghostpreview");
|
||
|
|
||
|
_lockable = 0; //default define if lockable not found in config file below
|
||
|
if(isNumber (configFile >> "CfgVehicles" >> _classname >> "lockable")) then { //find out if item is lockable object
|
||
|
_lockable = getNumber(configFile >> "CfgVehicles" >> _classname >> "lockable"); // 2=lockbox, 3=combolock, 4=safe
|
||
|
};
|
||
|
|
||
|
_isAllowedUnderGround = 1; //check if allowed to build under terrain
|
||
|
if(isNumber (configFile >> "CfgVehicles" >> _classname >> "nounderground")) then {
|
||
|
_isAllowedUnderGround = getNumber(configFile >> "CfgVehicles" >> _classname >> "nounderground");
|
||
|
};
|
||
|
|
||
|
_offset = getArray (configFile >> "CfgVehicles" >> _classname >> "offset"); //check default distance offset, define if does not exist
|
||
|
|
||
|
if((count _offset) <= 0) then {
|
||
|
if(isBuilding) then {
|
||
|
if(DZE_buildItem in _buildRes) then {
|
||
|
_offset = [0,15,2];
|
||
|
} else {
|
||
|
if(DZE_buildItem in _buildMil) then {
|
||
|
_offset = [0,15,2];
|
||
|
} else {
|
||
|
if(DZE_buildItem in _buildReli) then {
|
||
|
_offset = [0,25,2];
|
||
|
} else {
|
||
|
if(DZE_buildItem in _buildMisc) then {
|
||
|
_offset = [0,2,1];
|
||
|
} else {
|
||
|
_offset = [0,6,2];
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
} else {
|
||
|
_offset = [0,2,0];
|
||
|
};
|
||
|
};
|
||
|
|
||
|
_isPole = (_classname == "Plastic_Pole_EP1_DZ");
|
||
|
|
||
|
_distance = DZE_PlotPole select 0;
|
||
|
_needText = localize "str_epoch_player_246";
|
||
|
|
||
|
if(_isPole) then {
|
||
|
_distance = DZE_PlotPole select 1;
|
||
|
};
|
||
|
|
||
|
// check for near plot
|
||
|
_findNearestPoles = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], _distance];
|
||
|
_findNearestPole = [];
|
||
|
|
||
|
{
|
||
|
if (alive _x) then {
|
||
|
_findNearestPole set [(count _findNearestPole),_x];
|
||
|
};
|
||
|
} count _findNearestPoles;
|
||
|
|
||
|
_IsNearPlot = count (_findNearestPole);
|
||
|
|
||
|
// If item is plot pole && another one exists within 45m
|
||
|
if(_isPole && _IsNearPlot > 0) exitWith {dayz_actionInProgress = false; cutText ["You are too close to another plot pole" , "PLAIN DOWN"]; };
|
||
|
|
||
|
_objectHelper = objNull;
|
||
|
_isOk = true;
|
||
|
_location1 = [player] call FNC_GetPos; // get inital players position
|
||
|
_dir = getDir player; //required to pass direction when building
|
||
|
|
||
|
// if ghost preview available use that instead
|
||
|
if (_ghost != "") then {
|
||
|
_classname = _ghost;
|
||
|
};
|
||
|
|
||
|
_object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"]; //object preview, not an actual object that will be built
|
||
|
|
||
|
if((count _offset) <= 0) then {
|
||
|
_offset = [0,(abs(((boundingBox _object)select 0) select 1)),0];
|
||
|
};
|
||
|
|
||
|
_objectHelper = "Sign_sphere10cm_EP1" createVehicle [0,0,0];
|
||
|
_helperColor = "#(argb,8,8,3)color(0,0,0,0,ca)";
|
||
|
_objectHelper setObjectTexture [0,_helperColor];
|
||
|
_objectHelper attachTo [player,_offset];
|
||
|
_object attachTo [_objectHelper,[0,0,0]];
|
||
|
|
||
|
if (isClass (configFile >> "SnapBuilding" >> _classname)) then {
|
||
|
["","","",["Init",_object,_classname,_objectHelper]] spawn snap_build;
|
||
|
};
|
||
|
|
||
|
// Do not turn on vectors for GUI spawned buildings
|
||
|
if !(DZE_buildItem in DZE_noRotate) then{
|
||
|
["","","",["Init","Init",0]] spawn build_vectors;
|
||
|
};
|
||
|
|
||
|
_objHDiff = 0;
|
||
|
_cancel = false;
|
||
|
_reason = "";
|
||
|
_moveDistanceOriginal = DZE_buildMaxMoveDistance;
|
||
|
|
||
|
// Allow more movement for GUI building spawns - 100 meters
|
||
|
if (DZE_buildItem in (_buildRes + _buildMil + _buildReli + _buildMisc)) then {
|
||
|
DZE_buildMaxMoveDistance = 100;
|
||
|
};
|
||
|
|
||
|
helperDetach = false;
|
||
|
_canDo = (!r_drag_sqf and !r_player_unconscious);
|
||
|
_position = [_objectHelper] call FNC_GetPos;
|
||
|
|
||
|
while {_isOk} do {
|
||
|
_zheightchanged = false;
|
||
|
_zheightdirection = "";
|
||
|
_rotate = false;
|
||
|
|
||
|
if (DZE_Q) then {
|
||
|
DZE_Q = false;
|
||
|
_zheightdirection = "up";
|
||
|
_zheightchanged = true;
|
||
|
};
|
||
|
if (DZE_Z) then {
|
||
|
DZE_Z = false;
|
||
|
_zheightdirection = "down";
|
||
|
_zheightchanged = true;
|
||
|
};
|
||
|
if (DZE_Q_alt) then {
|
||
|
DZE_Q_alt = false;
|
||
|
_zheightdirection = "up_alt";
|
||
|
_zheightchanged = true;
|
||
|
};
|
||
|
if (DZE_Z_alt) then {
|
||
|
DZE_Z_alt = false;
|
||
|
_zheightdirection = "down_alt";
|
||
|
_zheightchanged = true;
|
||
|
};
|
||
|
if (DZE_Q_ctrl) then {
|
||
|
DZE_Q_ctrl = false;
|
||
|
_zheightdirection = "up_ctrl";
|
||
|
_zheightchanged = true;
|
||
|
};
|
||
|
if (DZE_Z_ctrl) then {
|
||
|
DZE_Z_ctrl = false;
|
||
|
_zheightdirection = "down_ctrl";
|
||
|
_zheightchanged = true;
|
||
|
};
|
||
|
if (DZE_4) then {
|
||
|
_rotate = true;
|
||
|
DZE_4 = false;
|
||
|
if(DZE_dirWithDegrees) then{
|
||
|
DZE_memDir = DZE_memDir - DZE_curDegree;
|
||
|
}else{
|
||
|
DZE_memDir = DZE_memDir - 45;
|
||
|
};
|
||
|
};
|
||
|
if (DZE_6) then {
|
||
|
_rotate = true;
|
||
|
DZE_6 = false;
|
||
|
if(DZE_dirWithDegrees) then{
|
||
|
DZE_memDir = DZE_memDir + DZE_curDegree;
|
||
|
}else{
|
||
|
DZE_memDir = DZE_memDir + 45;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
if(DZE_updateVec) then{
|
||
|
[_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
|
||
|
DZE_updateVec = false;
|
||
|
};
|
||
|
|
||
|
if (DZE_F and _canDo) then {
|
||
|
if (helperDetach) then {
|
||
|
_objectHelper attachTo [player];
|
||
|
DZE_memDir = DZE_memDir-(getDir player);
|
||
|
helperDetach = false;
|
||
|
[_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
|
||
|
} else {
|
||
|
_objectHelperPos = getPosATL _objectHelper;
|
||
|
detach _objectHelper;
|
||
|
DZE_memDir = getDir _objectHelper;
|
||
|
[_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
|
||
|
_objectHelper setPosATL _objectHelperPos;
|
||
|
_objectHelper setVelocity [0,0,0]; //fix sliding glitch
|
||
|
helperDetach = true;
|
||
|
};
|
||
|
DZE_F = false;
|
||
|
};
|
||
|
|
||
|
if(_rotate) then {
|
||
|
[_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
|
||
|
};
|
||
|
|
||
|
if(_zheightchanged) then {
|
||
|
if (!helperDetach) then {
|
||
|
detach _objectHelper;
|
||
|
_objectHelperDir = getDir _objectHelper;
|
||
|
};
|
||
|
|
||
|
_position = [_objectHelper] call FNC_GetPos;
|
||
|
|
||
|
if(_zheightdirection == "up") then {
|
||
|
_position set [2,((_position select 2)+0.1)];
|
||
|
_objHDiff = _objHDiff + 0.1;
|
||
|
};
|
||
|
if(_zheightdirection == "down") then {
|
||
|
_position set [2,((_position select 2)-0.1)];
|
||
|
_objHDiff = _objHDiff - 0.1;
|
||
|
};
|
||
|
|
||
|
if(_zheightdirection == "up_alt") then {
|
||
|
_position set [2,((_position select 2)+1)];
|
||
|
_objHDiff = _objHDiff + 1;
|
||
|
};
|
||
|
if(_zheightdirection == "down_alt") then {
|
||
|
_position set [2,((_position select 2)-1)];
|
||
|
_objHDiff = _objHDiff - 1;
|
||
|
};
|
||
|
|
||
|
if(_zheightdirection == "up_ctrl") then {
|
||
|
_position set [2,((_position select 2)+0.01)];
|
||
|
_objHDiff = _objHDiff + 0.01;
|
||
|
};
|
||
|
if(_zheightdirection == "down_ctrl") then {
|
||
|
_position set [2,((_position select 2)-0.01)];
|
||
|
_objHDiff = _objHDiff - 0.01;
|
||
|
};
|
||
|
|
||
|
if((_isAllowedUnderGround == 0) && ((_position select 2) < 0)) then {
|
||
|
_position set [2,0];
|
||
|
};
|
||
|
|
||
|
if (surfaceIsWater _position) then {
|
||
|
_objectHelper setPosASL _position;
|
||
|
} else {
|
||
|
_objectHelper setPosATL _position;
|
||
|
};
|
||
|
|
||
|
if (!helperDetach) then {
|
||
|
_objectHelper attachTo [player];
|
||
|
};
|
||
|
[_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw;
|
||
|
};
|
||
|
|
||
|
uiSleep 0.5;
|
||
|
|
||
|
_location2 = [player] call FNC_GetPos;
|
||
|
_objectHelperPos = [_objectHelper] call FNC_GetPos;
|
||
|
|
||
|
if(DZE_5) exitWith {
|
||
|
_position = [_object] call FNC_GetPos;
|
||
|
detach _object;
|
||
|
_dir = getDir _object;
|
||
|
_vector = [(vectorDir _object),(vectorUp _object)];
|
||
|
deleteVehicle _object;
|
||
|
detach _objectHelper;
|
||
|
deleteVehicle _objectHelper;
|
||
|
};
|
||
|
|
||
|
if(_location1 distance _location2 > DZE_buildMaxMoveDistance) exitWith {
|
||
|
_cancel = true;
|
||
|
_reason = format[localize "STR_EPOCH_BUILD_FAIL_MOVED",DZE_buildMaxMoveDistance];
|
||
|
detach _object;
|
||
|
deleteVehicle _object;
|
||
|
detach _objectHelper;
|
||
|
deleteVehicle _objectHelper;
|
||
|
};
|
||
|
|
||
|
if(_location1 distance _objectHelperPos > DZE_buildMaxMoveDistance) exitWith {
|
||
|
_cancel = true;
|
||
|
_reason = format[localize "STR_EPOCH_BUILD_FAIL_TOO_FAR",DZE_buildMaxMoveDistance];
|
||
|
detach _object;
|
||
|
deleteVehicle _object;
|
||
|
detach _objectHelper;
|
||
|
deleteVehicle _objectHelper;
|
||
|
};
|
||
|
|
||
|
if (DZE_cancelBuilding) exitWith {
|
||
|
_cancel = true;
|
||
|
_reason = localize "STR_EPOCH_PLAYER_46";
|
||
|
detach _object;
|
||
|
deleteVehicle _object;
|
||
|
detach _objectHelper;
|
||
|
deleteVehicle _objectHelper;
|
||
|
};
|
||
|
};
|
||
|
_proceed = false;
|
||
|
_counter = 0;
|
||
|
_location = [0,0,0];
|
||
|
|
||
|
if(!_cancel) then {
|
||
|
|
||
|
_classname = _classnametmp;
|
||
|
|
||
|
// Start Build
|
||
|
_tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"]; //create actual object that will be published to database
|
||
|
|
||
|
_tmpbuilt setdir _dir; //set direction inherited from passed args from control
|
||
|
_tmpbuilt setVariable["memDir",_dir,true];
|
||
|
if (isBuilding) then {_tmpbuilt setVariable["EAT_Building",1,true];};
|
||
|
|
||
|
// Get position based on object
|
||
|
_location = _position;
|
||
|
|
||
|
if((_isAllowedUnderGround == 0) && ((_location select 2) < 0)) then { //check Z axis if not allowed to build underground
|
||
|
_location set [2,0]; //reset Z axis to zero (above terrain)
|
||
|
};
|
||
|
|
||
|
_tmpbuilt setVectorDirAndUp _vector;
|
||
|
|
||
|
_buildOffset = [0,0,0];
|
||
|
_vUp = _vector select 1;
|
||
|
switch (_classname) do {
|
||
|
case "MetalFloor_DZ": { _buildOffset = [(_vUp select 0) * .148, (_vUp select 1) * .148,0]; };
|
||
|
//case "CinderWall_DZ": { _buildOffset = [(_vUp select 0) * 1.686, (_vUp select 1) * 1.686,0]; };
|
||
|
};
|
||
|
|
||
|
_location = [
|
||
|
(_location select 0) - (_buildOffset select 0),
|
||
|
(_location select 1) - (_buildOffset select 1),
|
||
|
(_location select 2) - (_buildOffset select 2)
|
||
|
];
|
||
|
|
||
|
if (surfaceIsWater _location) then {
|
||
|
_tmpbuilt setPosASL _location;
|
||
|
_location = ASLtoATL _location; //Database uses ATL
|
||
|
} else {
|
||
|
_tmpbuilt setPosATL _location;
|
||
|
};
|
||
|
|
||
|
//format[localize "str_epoch_player_138",_text] call dayz_rollingMessages;
|
||
|
|
||
|
call player_forceSave;
|
||
|
|
||
|
format[localize "str_build_01",_text] call dayz_rollingMessages;
|
||
|
|
||
|
_tmpbuilt setVariable ["OEMPos",_location,true]; //store original location as a variable
|
||
|
|
||
|
if(_isPerm) then {
|
||
|
_tmpbuilt setVariable ["CharacterID",dayz_characterID,true];
|
||
|
// fire?
|
||
|
if(_tmpbuilt isKindOf "Land_Fire_DZ") then { //if campfire, then spawn, but do not publish to database
|
||
|
_tmpbuilt spawn player_fireMonitor;
|
||
|
} else {
|
||
|
if (DZE_permanentPlot) then {
|
||
|
_tmpbuilt setVariable ["ownerPUID",dayz_playerUID,true];
|
||
|
if (_isPole) then {
|
||
|
_friendsArr = [[dayz_playerUID,toArray (name player)]];
|
||
|
_tmpbuilt setVariable ["plotfriends", _friendsArr, true];
|
||
|
PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],_friendsArr,player,dayz_authKey];
|
||
|
} else {
|
||
|
PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,dayz_playerUID,_vector],[],player,dayz_authKey];
|
||
|
};
|
||
|
} else {
|
||
|
PVDZ_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location, _vector],[]];
|
||
|
};
|
||
|
publicVariableServer "PVDZ_obj_Publish";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has used admin build to place: %3",name player,getPlayerUID player,_tmpbuilt] call EAT_Logger;};
|
||
|
|
||
|
} else { //cancel build if passed _cancel arg was true or building on roads/trader city
|
||
|
format[localize "str_epoch_player_47",_text,_reason] call dayz_rollingMessages;
|
||
|
};
|
||
|
|
||
|
// Reset variable if it was changed because of GUI building placement
|
||
|
DZE_buildMaxMoveDistance = _moveDistanceOriginal;
|
||
|
|
||
|
dayz_actionInProgress = false;
|
||
|
};
|
||
|
|
||
|
EAT_BuildingDialog = {
|
||
|
private ["_dialog","_building"];
|
||
|
PermDialogSelected = -1;
|
||
|
TempDialogSelected = -1;
|
||
|
AdminDialogList = 13000;
|
||
|
buildingList = EAT_allBuildingList;
|
||
|
|
||
|
_dialog = createDialog "EAT_build_SuperAdminDialog";
|
||
|
lbClear AdminDialogList;
|
||
|
|
||
|
{
|
||
|
private ["_index"];
|
||
|
_index = lbAdd [AdminDialogList, format["%1 - %2 (%3)", _x select 0, _x select 1, _x select 2]];
|
||
|
lbSetPicture [AdminDialogList, _index];
|
||
|
} forEach buildingList;
|
||
|
|
||
|
LoadSpecificList = {
|
||
|
lbClear AdminDialogList;
|
||
|
buildingList = _this select 0;
|
||
|
|
||
|
switch(buildingList) do
|
||
|
{
|
||
|
case "Residential":
|
||
|
{
|
||
|
buildingList = EAT_buildResidential;
|
||
|
};
|
||
|
case "Military":
|
||
|
{
|
||
|
buildingList = EAT_buildMilitary;
|
||
|
};
|
||
|
case "Industrial":
|
||
|
{
|
||
|
buildingList = EAT_buildIndustrial;
|
||
|
};
|
||
|
case "Religious":
|
||
|
{
|
||
|
buildingList = EAT_buildReligious;
|
||
|
};
|
||
|
case "Farm":
|
||
|
{
|
||
|
buildingList = EAT_buildFarm;
|
||
|
};
|
||
|
case "Ores":
|
||
|
{
|
||
|
buildingList = EAT_buildOre;
|
||
|
};
|
||
|
case "Graves":
|
||
|
{
|
||
|
buildingList = EAT_buildGrave;
|
||
|
};
|
||
|
case "Roads":
|
||
|
{
|
||
|
buildingList = EAT_buildRoad;
|
||
|
};
|
||
|
case "Castle":
|
||
|
{
|
||
|
buildingList = EAT_buildCastle;
|
||
|
};
|
||
|
case "Epoch":
|
||
|
{
|
||
|
buildingList = EAT_buildModular;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
lbClear AdminDialogList;
|
||
|
|
||
|
{
|
||
|
private ["_index", "_x"];
|
||
|
_index = lbAdd [AdminDialogList, format["%1 - %2 (%3)", _x select 0, _x select 1, _x select 2]];
|
||
|
lbSetPicture [AdminDialogList, _index];
|
||
|
} forEach buildingList;
|
||
|
};
|
||
|
|
||
|
waitUntil { !dialog };
|
||
|
if ((PermDialogSelected < 0) && (TempDialogSelected < 0)) exitWith {};
|
||
|
|
||
|
if (PermDialogSelected > -1) then {
|
||
|
_building = ((buildingList select PermDialogSelected) select 2);
|
||
|
if (_building in EAT_buildUniArray) then {
|
||
|
[_building,false,true] spawn EAT_AdminBuild;
|
||
|
} else {
|
||
|
[_building,true,true] spawn EAT_AdminBuild;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
if (TempDialogSelected > -1) then {
|
||
|
_building = ((buildingList select TempDialogSelected) select 2);
|
||
|
if (_building in EAT_buildUniArray) then {
|
||
|
[_building,false,false] spawn EAT_AdminBuild;
|
||
|
} else {
|
||
|
[_building,true,false] spawn EAT_AdminBuild;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_MaintainArea = {
|
||
|
private ["_target","_objectClasses","_range","_objects","_count","_findNearestPole","_IsNearPlot","_objects_filtered"];
|
||
|
|
||
|
player removeAction s_player_maintain_area;
|
||
|
s_player_maintain_area = 1;
|
||
|
player removeAction s_player_maintain_area_preview;
|
||
|
s_player_maintain_area_preview = 1;
|
||
|
|
||
|
// check for near plot
|
||
|
_target = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], 20];
|
||
|
_findNearestPole = [];
|
||
|
|
||
|
{
|
||
|
if (alive _x) then {
|
||
|
_findNearestPole set [(count _findNearestPole),_x];
|
||
|
};
|
||
|
} count _target;
|
||
|
|
||
|
_IsNearPlot = count (_findNearestPole);
|
||
|
if(_IsNearPlot < 1) exitWith {s_player_maintain_area_preview = -1;s_player_maintain_area = -1; "No plot pole found in 20 meters" call dayz_rollingMessages;};
|
||
|
_target = _target select 0;
|
||
|
_objectClasses = DZE_maintainClasses;
|
||
|
_range = DZE_maintainRange; // set the max range for the maintain area
|
||
|
_objects = nearestObjects [_target, _objectClasses, _range];
|
||
|
|
||
|
//filter to only those that have 10% damage
|
||
|
_objects_filtered = [];
|
||
|
{
|
||
|
if (damage _x >= DZE_DamageBeforeMaint) then {
|
||
|
_objects_filtered set [count _objects_filtered, _x];
|
||
|
};
|
||
|
} count _objects;
|
||
|
_objects = _objects_filtered;
|
||
|
|
||
|
// TODO dynamic requirements based on used building parts?
|
||
|
_count = count _objects;
|
||
|
|
||
|
if (_count == 0) exitWith {
|
||
|
cutText [format[(localize "STR_EPOCH_ACTIONS_22"), _count], "PLAIN DOWN"];
|
||
|
s_player_maintain_area = -1;
|
||
|
s_player_maintain_area_preview = -1;
|
||
|
};
|
||
|
|
||
|
// all required items removed from player gear
|
||
|
cutText [format[(localize "STR_EPOCH_ACTIONS_4"), _count], "PLAIN DOWN", 5];
|
||
|
PVDZE_maintainArea = [player,1,_target];
|
||
|
publicVariableServer "PVDZE_maintainArea";
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has used admin build to maintain an area",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
|
||
|
s_player_maintain_area = -1;
|
||
|
s_player_maintain_area_preview = -1;
|
||
|
};
|
||
|
|
||
|
EAT_DownGrade = {
|
||
|
private ["_location","_dir","_classname","_text","_object","_objectID","_objectUID","_newclassname","_obj","_downgrade","_objectCharacterID"];
|
||
|
|
||
|
player removeAction s_player_downgrade_build;
|
||
|
s_player_downgrade_build = 1;
|
||
|
|
||
|
// get cursor target
|
||
|
_obj = cursorTarget;
|
||
|
if(isNull _obj) exitWith {s_player_downgrade_build = -1; "No Object Selected" call dayz_rollingMessages};
|
||
|
|
||
|
_objectCharacterID = _obj getVariable ["CharacterID","0"];// Current charID
|
||
|
|
||
|
if (DZE_Lock_Door != _objectCharacterID) exitWith {s_player_downgrade_build = -1; localize "str_epoch_player_49" call dayz_rollingMessages;};
|
||
|
|
||
|
_objectID = _obj getVariable ["ObjectID","0"];// Find objectID
|
||
|
_objectUID = _obj getVariable ["ObjectUID","0"];// Find objectUID
|
||
|
|
||
|
if(_objectID == "0" && _objectUID == "0") exitWith {s_player_downgrade_build = -1; localize "str_epoch_player_50" call dayz_rollingMessages;};
|
||
|
|
||
|
// Get classname
|
||
|
_classname = typeOf _obj;
|
||
|
|
||
|
// Find display name
|
||
|
_text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName");
|
||
|
|
||
|
// Find next downgrade
|
||
|
_downgrade = getArray (configFile >> "CfgVehicles" >> _classname >> "downgradeBuilding");
|
||
|
|
||
|
if ((count _downgrade) > 0) then {
|
||
|
|
||
|
_newclassname = _downgrade select 0;
|
||
|
|
||
|
// Get position
|
||
|
_location = _obj getVariable["OEMPos",(getposATL _obj)];
|
||
|
|
||
|
// Get direction
|
||
|
_dir = getDir _obj;
|
||
|
_vector = [(vectorDir _obj),(vectorUp _obj)];
|
||
|
|
||
|
// Reset the character ID on locked doors before they inherit the newclassname
|
||
|
if (_classname in DZE_DoorsLocked) then {
|
||
|
_obj setVariable ["CharacterID",dayz_characterID,true];
|
||
|
_objectCharacterID = dayz_characterID;
|
||
|
};
|
||
|
|
||
|
_classname = _newclassname;
|
||
|
_object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"];
|
||
|
_object setDir _dir;
|
||
|
_object setVariable["memDir",_dir,true];
|
||
|
_object setVectorDirAndUp _vector;
|
||
|
_object setPosATL _location;
|
||
|
|
||
|
format[localize "str_epoch_player_142",_text] call dayz_rollingMessages;
|
||
|
|
||
|
if (DZE_GodModeBase && {!(_classname in DZE_GodModeBaseExclude)}) then {
|
||
|
_object addEventHandler ["HandleDamage",{false}];
|
||
|
};
|
||
|
|
||
|
if (DZE_permanentPlot) then {
|
||
|
_ownerID = _obj getVariable["ownerPUID","0"];
|
||
|
_object setVariable ["ownerPUID",_ownerID,true];
|
||
|
PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location,dayz_playerUID,_vector],_classname,_obj,player,[],dayz_authKey];
|
||
|
} else {
|
||
|
PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location, _vector],_classname,_obj,player,[],dayz_authKey];
|
||
|
};
|
||
|
publicVariableServer "PVDZE_obj_Swap";
|
||
|
|
||
|
player reveal _object;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has used admin build to downgrade: %3",name player,getPlayerUID player,_obj] call EAT_Logger;};
|
||
|
|
||
|
} else {
|
||
|
localize "str_epoch_player_51" call dayz_rollingMessages;
|
||
|
};
|
||
|
|
||
|
s_player_downgrade_build = -1;
|
||
|
};
|
||
|
|
||
|
EAT_Upgrade = {
|
||
|
private ["_location","_dir","_classname","_text","_object","_objectID","_objectUID","_newclassname","_obj","_upgrade","_lockable",
|
||
|
"_combination_1","_combination_2","_combination_3","_combination","_objectCharacterID"];
|
||
|
|
||
|
player removeAction s_player_upgrade_build;
|
||
|
s_player_upgrade_build = 1;
|
||
|
|
||
|
_obj = cursorTarget;
|
||
|
if(isNull _obj) exitWith {s_player_upgrade_build = -1; "No Object Selected" call dayz_rollingMessages;};
|
||
|
|
||
|
_objectID = _obj getVariable ["ObjectID","0"]; // Find objectID
|
||
|
_objectUID = _obj getVariable ["ObjectUID","0"];// Find objectUID
|
||
|
|
||
|
if (_objectID == "0" && _objectUID == "0") exitWith {s_player_upgrade_build = -1; localize "str_epoch_player_50" call dayz_rollingMessages;};
|
||
|
|
||
|
_classname = typeOf _obj;
|
||
|
_text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName");
|
||
|
_upgrade = getArray (configFile >> "CfgVehicles" >> _classname >> "upgradeBuilding");
|
||
|
|
||
|
if ((count _upgrade) > 0) then {
|
||
|
_newclassname = _upgrade select 0;
|
||
|
_lockable = 0;
|
||
|
if(isNumber (configFile >> "CfgVehicles" >> _newclassname >> "lockable")) then {
|
||
|
_lockable = getNumber(configFile >> "CfgVehicles" >> _newclassname >> "lockable");
|
||
|
};
|
||
|
|
||
|
_location = _obj getVariable["OEMPos",(getposATL _obj)];
|
||
|
_dir = getDir _obj;
|
||
|
_vector = [(vectorDir _obj),(vectorUp _obj)];
|
||
|
_objectCharacterID = _obj getVariable ["CharacterID","0"];
|
||
|
_classname = _newclassname;
|
||
|
_object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"];
|
||
|
_object setDir _dir;
|
||
|
_object setVariable["memDir",_dir,true];
|
||
|
_object setVectorDirAndUp _vector;
|
||
|
_object setPosATL _location;
|
||
|
|
||
|
if (_lockable == 3) then {
|
||
|
_combination_1 = floor(random 10);
|
||
|
_combination_2 = floor(random 10);
|
||
|
_combination_3 = floor(random 10);
|
||
|
_combination = format["%1%2%3",_combination_1,_combination_2,_combination_3];
|
||
|
|
||
|
_objectCharacterID = _combination;
|
||
|
DZE_Lock_Door = _combination;
|
||
|
|
||
|
format[localize "str_epoch_player_158",_combination,_text] call dayz_rollingMessages;
|
||
|
systemChat format[localize "str_epoch_player_158",_combination,_text];
|
||
|
} else {
|
||
|
format[localize "str_epoch_player_159",_text] call dayz_rollingMessages;
|
||
|
};
|
||
|
if (DZE_GodModeBase && {!(_classname in DZE_GodModeBaseExclude)}) then {
|
||
|
_object addEventHandler ["HandleDamage",{false}];
|
||
|
};
|
||
|
if (DZE_permanentPlot) then {
|
||
|
_ownerID = _obj getVariable["ownerPUID","0"];
|
||
|
_object setVariable ["ownerPUID",_ownerID,true];
|
||
|
PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location,_ownerID,_vector],_classname,_obj,player,[],dayz_authKey];
|
||
|
} else {
|
||
|
PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location,_vector],_classname,_obj,player,[],dayz_authKey];
|
||
|
};
|
||
|
publicVariableServer "PVDZE_obj_Swap";
|
||
|
|
||
|
player reveal _object;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has used admin build to upgrade: %3",name player,getPlayerUID player,_obj] call EAT_Logger;};
|
||
|
|
||
|
} else {
|
||
|
localize "str_epoch_player_82" call dayz_rollingMessages;
|
||
|
};
|
||
|
|
||
|
s_player_upgrade_build = -1;
|
||
|
};
|
||
|
|
||
|
EAT_AdminModeToggle = {
|
||
|
/*
|
||
|
Below are the default ON/OFF toggles. Anything marked
|
||
|
true will turn on when you turn on AdminMode.
|
||
|
To make an option default ON change = false to = true.
|
||
|
To make an option default OFF change = true to = false.
|
||
|
To disable an option entirely, go down to toggleMenu =
|
||
|
*/
|
||
|
|
||
|
if (isNil "EAT_AdminMode") then {EAT_AdminMode = true;} else {EAT_AdminMode = !EAT_AdminMode;};
|
||
|
|
||
|
optionMenu =
|
||
|
{
|
||
|
toggleMenu =
|
||
|
[
|
||
|
// To disable an option for admins place a // in the front of the line below
|
||
|
// and change the initialization to false in the config at the top of this file
|
||
|
["",true],
|
||
|
["Toggle options:(current state)", [-1], "", -5, [["expression", ""]], "1", "0"],
|
||
|
[format["Vehicle Speed Boost: %1",EAT_speedBoost],[0],"", -5, [["expression", 'EAT_speedBoost = [EAT_speedBoost,EAT_VehSpeedBoost] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"],
|
||
|
[format["Fast Forward: %1",EAT_fastWalk],[0],"", -5, [["expression", 'EAT_fastWalk = [EAT_fastWalk,EAT_FastForwardToggle] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"],
|
||
|
[format["Fast Up: %1",EAT_fastUp],[0],"", -5, [["expression", 'EAT_fastUp = [EAT_fastUp,EAT_fastUpToggle] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"],
|
||
|
[format["Enhanced ESP: %1",EAT_enhancedESPMode], [0], "", -5, [["expression", 'if (EAT_enhancedESPMode) then {EAT_enhancedESPMode = false; EATenhancedESP = false;} else {call EAT_enhancedESPToggle;}; [] spawn optionMenu']], "1", "1"],
|
||
|
[format["Player ESP: %1",EAT_playerESPMode], [0], "", -5, [["expression", 'if (EAT_playerESPMode) then {EAT_playerESPMode = false; EATplayerESP = false;} else {call EAT_playerESPToggle}; [] spawn optionMenu']], "1", "1"],
|
||
|
[format["Invisibility ON: %1",EAT_invisibility], [0], "", -5, [["expression", 'EAT_invisibility = [EAT_invisibility,EAT_AdminInvisible] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"],
|
||
|
[format["Flying ON: %1",EAT_flyingMode], [0], "", -5, [["expression", 'if (EAT_flyingMode) then {EAT_flyingMode = false; EATflying = false;} else {EAT_flyingMode = [EAT_flyingMode,EAT_flying] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"],
|
||
|
[format["Infinite Ammo: %1",EAT_infAmmo], [0], "", -5, [["expression", 'if (EAT_infAmmo) then {EAT_infAmmo = false; EATinfiniteAmmo = false;} else {EAT_infAmmo = [EAT_infAmmo,EAT_InfiniteAmmo] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"],
|
||
|
[format["God Mode: %1",EAT_playerGod], [0], "", -5, [["expression", 'if (EAT_playerGod) then {EAT_playerGod = false; EATplayerGod = false;} else {EAT_playerGod = [EAT_playerGod,EAT_GodMode] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"],
|
||
|
[format["Car God Mode: %1",EAT_vehicleGod], [0], "", -5, [["expression", 'if (EAT_vehicleGod) then {EAT_vehicleGod = false; EATvehicleGod = false;} else {EAT_vehicleGod = [EAT_vehicleGod,EAT_VehGod] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"],
|
||
|
[format["Zombie Shield: %1",EAT_ZombieShield], [0], "", -5, [["expression", 'if (EAT_ZombieShield) then {EAT_ZombieShield = false; EAT_SheildMe = false;} else {EAT_ZombieShield = [EAT_ZombieShield,EAT_ZomShield] call EAT_ScriptToggle;}; [] spawn optionMenu']], "1", "1"],
|
||
|
[format["Grass Off: %1",EAT_grassOff], [0], "", -5, [["expression", 'EAT_grassOff = [EAT_grassOff,EAT_GrassOffToggle] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"],
|
||
|
[format["Admin Fast Build (No Plot Req): %1",EAT_adminBuildMode], [0], "", -5, [["expression", 'EAT_adminBuildMode = [EAT_adminBuildMode,EAT_adminBuildCount] call EAT_ScriptToggle; [] spawn optionMenu']], "1", "1"],
|
||
|
["", [], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["Exit", [0], "", -5, [["expression", ""]], "1", "1"]
|
||
|
];
|
||
|
showCommandingMenu "#USER:toggleMenu";
|
||
|
};
|
||
|
|
||
|
if(EAT_AdminMode) then {
|
||
|
"***Press F4 to toggle AdminMode options***" call dayz_rollingMessages;
|
||
|
["AdminMode"] call EAT_Keybind;
|
||
|
call EAT_AdminToggleOn;
|
||
|
} else{
|
||
|
"Admin Mode - DISABLED" call dayz_rollingMessages;
|
||
|
["EndAdminMode"] call EAT_Keybind;
|
||
|
call EAT_AdminToggleOff;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_flying = {
|
||
|
EATflying = _this select 0;
|
||
|
|
||
|
hovering = nil;
|
||
|
hoverPos = nil;
|
||
|
|
||
|
move_forward =
|
||
|
{
|
||
|
if ((getPosATL (vehicle player) select 2) > 1) then
|
||
|
{
|
||
|
_vehicle = (vehicle player);
|
||
|
_vel = velocity _vehicle;
|
||
|
_dir = direction _vehicle;
|
||
|
_speed = 0.4; comment "Added speed";
|
||
|
_vehicle setVelocity [(_vel select 0)+(sin _dir*_speed),(_vel select 1)+
|
||
|
(cos _dir*_speed),0.4];
|
||
|
};
|
||
|
};
|
||
|
|
||
|
move_left =
|
||
|
{
|
||
|
if ((getPosATL (vehicle player) select 2) > 1) then
|
||
|
{
|
||
|
_leftDirection = getdir (vehicle player);
|
||
|
(vehicle player) setdir (_leftDirection) - 2;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
move_backward =
|
||
|
{
|
||
|
if ((getPosATL (vehicle player) select 2) > 1) then
|
||
|
{
|
||
|
_vehicle = (vehicle player);
|
||
|
_vel = velocity _vehicle;
|
||
|
_dir = direction _vehicle;
|
||
|
_speed = -0.4; comment "Added speed";
|
||
|
_vehicle setVelocity [(_vel select 0)+(sin _dir*_speed),(_vel select 1)+
|
||
|
(cos _dir*_speed),0.4];
|
||
|
};
|
||
|
};
|
||
|
|
||
|
move_right =
|
||
|
{
|
||
|
if ((getPosATL (vehicle player) select 2) > 1) then
|
||
|
{
|
||
|
_rightDirection = getdir (vehicle player);
|
||
|
(vehicle player) setdir (_rightDirection) + 2;
|
||
|
player setVariable["lastPos",1];player setVariable["lastPos",[]];
|
||
|
};
|
||
|
};
|
||
|
|
||
|
move_up =
|
||
|
{
|
||
|
_vehicle = (vehicle player);
|
||
|
_vel = velocity _vehicle;
|
||
|
_dir = direction _vehicle;
|
||
|
_speed = 6; comment "Added speed";
|
||
|
_vehicle setVelocity [(_vel select 0),(_vel select 1),8];
|
||
|
};
|
||
|
|
||
|
move_down =
|
||
|
{
|
||
|
if ((getPosATL (vehicle player) select 2) > 1) then
|
||
|
{
|
||
|
_vehicle = (vehicle player);
|
||
|
_forwardCurrentDirection = getdir (vehicle player);
|
||
|
_forwardCurrentPosition = getPosATL (vehicle player);
|
||
|
(vehicle player) setdir _forwardCurrentDirection;
|
||
|
_vehicle setVelocity [0,0,-4];
|
||
|
};
|
||
|
};
|
||
|
|
||
|
toggle_hover =
|
||
|
{
|
||
|
if (isnil "hovering") then
|
||
|
{
|
||
|
hovering = true;
|
||
|
"Hovering ON" call dayz_rollingMessages;
|
||
|
hoverPos = getPosATL (vehicle player);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
hovering = nil;
|
||
|
"Hovering OFF" call dayz_rollingMessages;
|
||
|
hoverPos = nil;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has added flying",name player,getPlayerUID player]call EAT_Logger;};
|
||
|
|
||
|
keyForward = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 17) then {call move_forward;}"];//W - Forward
|
||
|
keyLeft = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 30) then {call move_left;}"];//A - Left
|
||
|
keyBackward = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 31) then {call move_backward;}"];//S - Backward
|
||
|
keyRight = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 32) then {call move_right;}"];//D - Right
|
||
|
keyUp = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 16) then {call move_up;}"];//Q - Up
|
||
|
keyDown = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 44) then {call move_down;}"];//Z - Down
|
||
|
keyHover = (findDisplay 46) displayAddEventHandler ["KeyDown","if ((_this select 1) == 57) then {call toggle_hover;}"];//SpaceBar - Toggle Hover
|
||
|
|
||
|
|
||
|
[] spawn {
|
||
|
while {EATflying} do
|
||
|
{
|
||
|
if (!isNil "hovering") then
|
||
|
{
|
||
|
(vehicle player) setVelocity [0,0,0.2];
|
||
|
};
|
||
|
uiSleep 0.01;
|
||
|
};
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has DISABLED flying",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
|
||
|
(findDisplay 46) displayRemoveEventHandler ["KeyDown", keyForward];
|
||
|
(findDisplay 46) displayRemoveEventHandler ["KeyDown", keyLeft];
|
||
|
(findDisplay 46) displayRemoveEventHandler ["KeyDown", keyBackward];
|
||
|
(findDisplay 46) displayRemoveEventHandler ["KeyDown", keyRight];
|
||
|
(findDisplay 46) displayRemoveEventHandler ["KeyDown", keyUp];
|
||
|
(findDisplay 46) displayRemoveEventHandler ["KeyDown", keyDown];
|
||
|
(findDisplay 46) displayRemoveEventHandler ["KeyDown", keyHover];
|
||
|
|
||
|
hovering = nil;
|
||
|
hoverPos = nil;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_EnhancedESP = {
|
||
|
if(isNil "markers") then { markers = []};
|
||
|
if(isNil "vehList") then { vehList = []};
|
||
|
if(isNil "unlockedVehList") then { unlockedVehList = []};
|
||
|
if(isNil "lockedVehList") then { lockedVehList = []};
|
||
|
if(isNil "changed") then {changed = false};
|
||
|
if(isNil "toggleCheck") then {toggleCheck = 0};
|
||
|
if(isNil "delayTime") then {delayTime = 0};
|
||
|
if(isNil "poleList") then {poleList = [];};
|
||
|
if(isNil "storageList") then {storageList = [];};
|
||
|
if(isNil "buildableObjectsList") then {buildableObjectsList = [];};
|
||
|
if(isNil "crashList") then {crashList = [];};
|
||
|
if(isNil "storageObjects") then {storageObjects = ["TentStorage","TentStorageDomed","TentStorageDomed2","VaultStorageLocked","OutHouse_DZ","Wooden_shed_DZ","WoodShack_DZ","StorageShed_DZ","LockboxStorageLocked","GunRack_DZ","WoodCrate_DZ"];};
|
||
|
if(isNil "buildableObjects") then {buildableObjects = ["WoodFloor_DZ","WoodLargeWall_DZ","WoodLargeWallDoor_DZ","WoodLargeWallWin_DZ","WoodSmallWall_DZ","WoodSmallWallWin_DZ","WoodSmallWallDoor_DZ","WoodFloorHalf_DZ","WoodFloorQuarter_DZ","WoodStairs_DZ","WoodStairsSans_DZ","WoodStairsRails_DZ","WoodSmallWallThird_DZ","WoodLadder_DZ","Land_DZE_GarageWoodDoor","Land_DZE_LargeWoodDoor","Land_DZE_WoodDoor","Land_DZE_GarageWoodDoorLocked","Land_DZE_LargeWoodDoorLocked","Land_DZE_WoodDoorLocked","CinderWallHalf_DZ","CinderWall_DZ","CinderWallDoorway_DZ","CinderWallDoor_DZ","CinderWallDoorLocked_DZ","CinderWallSmallDoorway_DZ","CinderWallDoorSmall_DZ","CinderWallDoorSmallLocked_DZ","MetalFloor_DZ","WoodRamp_DZ"];};
|
||
|
|
||
|
if (!("ItemGPS" in items player)) then {player addWeapon "ItemGPS";};
|
||
|
|
||
|
EATenhancedESP = _this select 0;
|
||
|
|
||
|
// START OF CONFIG
|
||
|
// Defines the default on and off of map markers
|
||
|
if (isNil "AddPlayersToMap") then {AddPlayersToMap = true;};
|
||
|
if (isNil "AddDeadPlayersToMap") then {AddDeadPlayersToMap = false;};
|
||
|
if (isNil "AddZombieToMap") then {AddZombieToMap = false;};
|
||
|
if (isNil "AddUnlockedVehiclesToMap") then {AddUnlockedVehiclesToMap = true;};
|
||
|
if (isNil "AddLockedVehiclesToMap") then {AddLockedVehiclesToMap = true;};
|
||
|
if (isNil "AddPlotPoleToMap") then {AddPlotPoleToMap = false;};
|
||
|
if (isNil "AddStorageToMap") then {AddStorageToMap = false;};
|
||
|
if (isNil "AddBuildablesToMap") then {AddBuildablesToMap = false;};
|
||
|
if (isNil "AddCrashesToMap") then {AddCrashesToMap = false;};
|
||
|
// END OF CONFIG
|
||
|
|
||
|
|
||
|
//GLOBAL VARS START
|
||
|
|
||
|
GlobalSleep = 1;//Sleep between update markers
|
||
|
GlobalMarkerSize = [1.5,1.5];
|
||
|
|
||
|
//----------------------#Players#--------------------------
|
||
|
AddPlayersToScreen=true;
|
||
|
PlayersMarkerType=["x_art"];
|
||
|
PlayerMarkerColor=[1,0,0,1];//two in the fourth degree is equal to sixteen, so there are 16 colors
|
||
|
PlayerShowBloodInt=false;
|
||
|
PlayerShowDistance=true;
|
||
|
TheThicknessOfThePointPlayer=0.7;
|
||
|
//----------------------#Players#--------------------------
|
||
|
|
||
|
//--------------------#Dead Players#------------------------
|
||
|
DeadPlayersMarkerSize=[2,2];
|
||
|
DeadPlayersMarkerType="DestroyedVehicle";
|
||
|
DeadPlayerMarkerColor="ColorBlack";//two in the fourth degree is equal to sixteen, so there are 16 colors
|
||
|
//--------------------#Dead Players#------------------------
|
||
|
|
||
|
//----------------------#Zombies#--------------------------
|
||
|
ZombieVisibleDistance=100;
|
||
|
ZombieMarkerType="vehicle";
|
||
|
ZombieMarkerColor="ColorGreen";
|
||
|
ZombieName="Zombie";
|
||
|
//----------------------#Zombies#--------------------------
|
||
|
|
||
|
//----------------------#Unlocked-Vehicles#-------------------------
|
||
|
UnlockedVehicleMarkerType="vehicle";
|
||
|
UnlockedVehicleMarkerColor="ColorBlue";
|
||
|
//----------------------#Unlocked-Vehicles#-------------------------
|
||
|
|
||
|
//----------------------#Locked-Vehicles#-------------------------
|
||
|
LockedVehicleMarkerType="vehicle";
|
||
|
LockedVehicleMarkerColor="ColorRed";
|
||
|
//----------------------#Locked-Vehicles#-------------------------
|
||
|
|
||
|
//----------------------#PlottPole#-------------------------
|
||
|
PlotPoleMarkerType="mil_triangle";
|
||
|
PlotPoleMarkerColor="ColorWhite";
|
||
|
PlotPoleMarkerSize = [0.4,0.4];
|
||
|
//----------------------#PlotPole#-------------------------
|
||
|
|
||
|
//----------------------#Storage#----------------------------
|
||
|
StorageMarkerType="mil_box";
|
||
|
StorageMarkerColor="ColorYellow";
|
||
|
StorageMarkerSize = [0.25,0.25];
|
||
|
//----------------------#Storage#----------------------------
|
||
|
|
||
|
//----------------------#Buildables#----------------------------
|
||
|
BuildablesMarkerType="mil_box";
|
||
|
BuildablesMarkerColor="ColorYellow";
|
||
|
BuildablesMarkerSize = [0.5,0.5];
|
||
|
//----------------------#Buildables#----------------------------
|
||
|
|
||
|
//----------------------#Crashes#--------------------------
|
||
|
CrashesMarkerType="vehicle";
|
||
|
CrashesMarkerColor="ColorBrown";
|
||
|
//----------------------#Crashes#--------------------------
|
||
|
|
||
|
//GLOBAL VARS END
|
||
|
|
||
|
|
||
|
F5Menu =
|
||
|
{
|
||
|
F5OptionMenu =
|
||
|
[
|
||
|
["",true],
|
||
|
["Toggle options:(current state)", [-1], "", -5, [["expression", ""]], "1", "0"],
|
||
|
[format["Show Dead Bodies: %1",AddDeadPlayersToMap], [0], "", -5, [["expression", "AddDeadPlayersToMap = !AddDeadPlayersToMap;changed = true; [] spawn F5Menu"]], "1", "1"],
|
||
|
[format["Show Epoch Buildables: %1",AddBuildablesToMap], [0], "", -5, [["expression", "AddBuildablesToMap = !AddBuildablesToMap;changed = true; [] spawn F5Menu"]], "1", "1"],
|
||
|
[format["Show Plot Poles: %1",AddPlotPoleToMap], [0], "", -5, [["expression", "AddPlotPoleToMap = !AddPlotPoleToMap;changed = true; [] spawn F5Menu"]], "1", "1"],
|
||
|
[format["Show Player Storage: %1",AddStorageToMap], [0], "", -5, [["expression", "AddStorageToMap = !AddStorageToMap;changed = true; [] spawn F5Menu"]], "1", "1"],
|
||
|
[format["Show Epoch Missions: %1",AddCrashesToMap], [0], "", -5, [["expression", "AddCrashesToMap = !AddCrashesToMap;changed = true; [] spawn F5Menu"]], "1", "1"],
|
||
|
[format["Show Zombies: %1",AddZombieToMap], [0], "", -5, [["expression", "AddZombieToMap = !AddZombieToMap;changed = true; [] spawn F5Menu"]], "1", "1"],
|
||
|
[format["Show Players: %1",AddPlayersToMap], [0], "", -5, [["expression", "AddPlayersToMap = !AddPlayersToMap;changed = true; [] spawn F5Menu"]], "1", "1"],
|
||
|
[format["Show Locked Vehicles: %1",AddLockedVehiclesToMap], [0], "", -5, [["expression", "AddLockedVehiclesToMap = !AddLockedVehiclesToMap;changed = true; [] spawn F5Menu"]], "1", "1"],
|
||
|
[format["Show Unlocked Vehicles: %1",AddUnlockedVehiclesToMap], [0], "", -5, [["expression", "AddUnlockedVehiclesToMap = !AddUnlockedVehiclesToMap;changed = true; [] spawn F5Menu"]], "1", "1"],
|
||
|
["", [], "", -5, [["expression", ""]], "1", "0"],
|
||
|
["Exit", [0], "", -5, [["expression", ""]], "1", "1"]
|
||
|
];
|
||
|
showCommandingMenu "#USER:F5OptionMenu";
|
||
|
};
|
||
|
|
||
|
dList = []; //List of dead bodies
|
||
|
dListMarkers = []; //List of Dead player markers
|
||
|
["ESP"] call EAT_Keybind;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has enhanced ESP",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
|
||
|
[] spawn {
|
||
|
While {EATenhancedESP} do
|
||
|
{
|
||
|
If (AddPlayersToMap && (delayTime == 0 || changed)) then
|
||
|
{
|
||
|
{
|
||
|
(group _x) addGroupIcon PlayersMarkerType;
|
||
|
if (PlayerShowBloodInt && PlayerShowDistance) then
|
||
|
{
|
||
|
BloodVal=round(_x getVariable["USEC_BloodQty",12000]);
|
||
|
(group _x) setGroupIconParams [PlayerMarkerColor, format["%1(%2)-%3",name _x,BloodVal,round(player distance _x)],TheThicknessOfThePointPlayer,true];
|
||
|
} else {
|
||
|
If (PlayerShowBloodInt && !PlayerShowDistance) then
|
||
|
{
|
||
|
BloodVal=round(_x getVariable["USEC_BloodQty",12000]);
|
||
|
(group _x) setGroupIconParams [PlayerMarkerColor, format ["%1(%2)",name _x, BloodVal],TheThicknessOfThePointPlayer,true];
|
||
|
} else {
|
||
|
If (PlayerShowDistance && !PlayerShowBloodInt) then
|
||
|
{
|
||
|
//_text=parseText format ["%1<br/><t align='center'>%2</t>",name _x,round(player distance _x)];
|
||
|
(group _x) setGroupIconParams [PlayerMarkerColor, format["%1-%2", name _x,round(player distance _x)],TheThicknessOfThePointPlayer,true];
|
||
|
} else {
|
||
|
//_text=parseText format ["%1",name _x];
|
||
|
(group _x) setGroupIconParams [PlayerMarkerColor, format ["%1",name _x],TheThicknessOfThePointPlayer,true];
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
ParamsPlayersMarkers=[true,AddPlayersToScreen];
|
||
|
setGroupIconsVisible ParamsPlayersMarkers;
|
||
|
} forEach allUnits;
|
||
|
};
|
||
|
|
||
|
if (EATenhancedESP && visibleMap) then
|
||
|
{
|
||
|
if (AddDeadPlayersToMap && (delayTime == 0 || changed)) then {
|
||
|
{
|
||
|
if(!(_x isKindOf "zZombie_base") && (_x isKindOf "Man") && !(_x in dList)) then {
|
||
|
|
||
|
private ["_pos"];
|
||
|
_pos = getPos _x;
|
||
|
deadMarker = createMarkerLocal [format ["DBP%1%2", _pos select 0, _pos select 1],[(_pos select 0) + 20, _pos select 1, 0]];
|
||
|
deadMarker setMarkerTypeLocal DeadPlayersMarkerType;
|
||
|
deadMarker setMarkerSizeLocal DeadPlayersMarkerSize;
|
||
|
deadMarker setMarkerColorLocal DeadPlayerMarkerColor;
|
||
|
deadMarker setMarkerTextLocal format["%1", _x getVariable["bodyName","unknown"]];
|
||
|
deadMarker setMarkerPosLocal ([(getPosATL _x select 0) + 15, getPosATL _x select 1, 0]);
|
||
|
dList set [count dList, _x];
|
||
|
dListMarkers set [count dListMarkers, deadMarker];
|
||
|
};
|
||
|
}Foreach AllDead;
|
||
|
};
|
||
|
|
||
|
If (AddZombieToMap && (delayTime == 0 || changed)) then {
|
||
|
_pos = getPos player;
|
||
|
_zombies = _pos nearEntities ["zZombie_Base",ZombieVisibleDistance];
|
||
|
k=0;
|
||
|
{
|
||
|
deleteMarkerLocal ("zmMarker"+ (str k));
|
||
|
k=k+1;
|
||
|
}forEach markers;
|
||
|
|
||
|
k=0;
|
||
|
{
|
||
|
_text = format ["zmMarker%1", k];
|
||
|
markers set [k, _text];
|
||
|
|
||
|
if(alive _x) then
|
||
|
{
|
||
|
pos = position _x;
|
||
|
deleteMarkerLocal ("zmMarker"+ (str k));
|
||
|
MarkerZm = "zmMarker" + (str k);
|
||
|
ParamsZm=[MarkerZm,pos];
|
||
|
MarkerZm = createMarkerLocal ParamsZm;
|
||
|
MarkerZm setMarkerTypeLocal ZombieMarkerType;
|
||
|
MarkerZm setMarkerSizeLocal GlobalMarkerSize;
|
||
|
MarkerZm setMarkerPosLocal (pos);
|
||
|
MarkerZm setMarkerColorLocal(ZombieMarkerColor);
|
||
|
MarkerZm setMarkerTextLocal ZombieName;
|
||
|
k=k+1;
|
||
|
};
|
||
|
|
||
|
}forEach _zombies;
|
||
|
};
|
||
|
|
||
|
/* Old vehicle ESP
|
||
|
If (AddVehicleToMap) then
|
||
|
{
|
||
|
vehList = allmissionobjects "LandVehicle" + allmissionobjects "Air" + allmissionobjects "Boat";
|
||
|
i = 0;
|
||
|
{
|
||
|
_name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName");
|
||
|
pos = position _x;
|
||
|
deleteMarkerLocal ("vehMarker"+ (str i));
|
||
|
MarkerVeh = "vehMarker" + (str i);
|
||
|
ParamsVeh=[MarkerVeh,pos];
|
||
|
MarkerVeh = createMarkerLocal ParamsVeh;
|
||
|
MarkerVeh setMarkerTypeLocal VehicleMarkerType;
|
||
|
MarkerVeh setMarkerSizeLocal GlobalMarkerSize;
|
||
|
MarkerVeh setMarkerPosLocal (pos);
|
||
|
MarkerVeh setMarkerColorLocal(VehicleMarkerColor);
|
||
|
MarkerVeh setMarkerTextLocal format ["%1",_name];
|
||
|
i=i+1;
|
||
|
} forEach vehList;
|
||
|
};
|
||
|
*/
|
||
|
|
||
|
if(AddUnlockedVehiclesToMap || AddLockedVehiclesToMap) then {
|
||
|
vehList = allmissionobjects "LandVehicle" + allmissionobjects "Air" + allmissionobjects "Boat";
|
||
|
lockedVehList = [];
|
||
|
unlockedVehList = [];
|
||
|
|
||
|
{
|
||
|
if(locked _x) then {
|
||
|
lockedVehList = lockedVehList + [_x];
|
||
|
} else {
|
||
|
unlockedVehList = unlockedVehList + [_x];
|
||
|
};
|
||
|
} forEach vehList;
|
||
|
|
||
|
If (AddUnlockedVehiclesToMap) then
|
||
|
{
|
||
|
i = 0;
|
||
|
{
|
||
|
_name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName");
|
||
|
pos = position _x;
|
||
|
deleteMarkerLocal ("UvehMarker"+ (str i));
|
||
|
MarkerUVeh = "UvehMarker" + (str i);
|
||
|
ParamsUVeh=[MarkerUVeh,pos];
|
||
|
MarkerUVeh = createMarkerLocal ParamsUVeh;
|
||
|
MarkerUVeh setMarkerTypeLocal UnlockedVehicleMarkerType;
|
||
|
MarkerUVeh setMarkerSizeLocal GlobalMarkerSize;
|
||
|
MarkerUVeh setMarkerPosLocal (pos);
|
||
|
MarkerUVeh setMarkerColorLocal(UnlockedVehicleMarkerColor);
|
||
|
MarkerUVeh setMarkerTextLocal format ["%1",_name];
|
||
|
i=i+1;
|
||
|
} forEach unlockedVehList;
|
||
|
};
|
||
|
|
||
|
if (AddLockedVehiclesToMap) then
|
||
|
{
|
||
|
i4 = 0;
|
||
|
{
|
||
|
_name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName");
|
||
|
pos = position _x;
|
||
|
deleteMarkerLocal ("LvehMarker"+ (str i4));
|
||
|
MarkerLVeh = "LvehMarker" + (str i4);
|
||
|
ParamsLVeh=[MarkerLVeh,pos];
|
||
|
MarkerLVeh = createMarkerLocal ParamsLVeh;
|
||
|
MarkerLVeh setMarkerTypeLocal LockedVehicleMarkerType;
|
||
|
MarkerLVeh setMarkerSizeLocal GlobalMarkerSize;
|
||
|
MarkerLVeh setMarkerPosLocal (pos);
|
||
|
MarkerLVeh setMarkerColorLocal(LockedVehicleMarkerColor);
|
||
|
MarkerLVeh setMarkerTextLocal format ["%1",_name];
|
||
|
i4=i4+1;
|
||
|
} forEach lockedVehList;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
If(AddPlotPoleToMap && (delayTime == 0 || changed)) then
|
||
|
{
|
||
|
poleList = allMissionObjects "Plastic_Pole_EP1_DZ";
|
||
|
i0 = 0;
|
||
|
{
|
||
|
_name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName");
|
||
|
pos = position _x;
|
||
|
deleteMarkerLocal ("poleMarker"+ (str i0));
|
||
|
MarkerPole = "poleMarker" + (str i0);
|
||
|
ParamsPole=[MarkerPole,pos];
|
||
|
MarkerPole = createMarkerLocal ParamsPole;
|
||
|
MarkerPole setMarkerTypeLocal PlotPoleMarkerType;
|
||
|
MarkerPole setMarkerSizeLocal PlotPoleMarkerSize;
|
||
|
MarkerPole setMarkerPosLocal (pos);
|
||
|
MarkerPole setMarkerColorLocal(PlotPoleMarkerColor);
|
||
|
MarkerPole setMarkerTextLocal format ["%1",_name];
|
||
|
i0=i0+1;
|
||
|
}forEach poleList;
|
||
|
};
|
||
|
|
||
|
If (AddStorageToMap && (delayTime == 0 || changed)) then
|
||
|
{
|
||
|
storageList = [];
|
||
|
{
|
||
|
storageList = storageList + allmissionobjects (_x);
|
||
|
} forEach storageObjects;
|
||
|
|
||
|
i1 = 0;
|
||
|
{
|
||
|
_name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName");
|
||
|
pos = position _x;
|
||
|
deleteMarkerLocal ("storageMarker"+ (str i1));
|
||
|
MarkerStorage = "storageMarker" + (str i1);
|
||
|
ParamsStorage=[MarkerStorage,pos];
|
||
|
MarkerStorage = createMarkerLocal ParamsStorage;
|
||
|
MarkerStorage setMarkerTypeLocal StorageMarkerType;
|
||
|
MarkerStorage setMarkerSizeLocal StorageMarkerSize;
|
||
|
MarkerStorage setMarkerPosLocal (pos);
|
||
|
MarkerStorage setMarkerColorLocal(StorageMarkerColor);
|
||
|
MarkerStorage setMarkerTextLocal format ["%1",_name];
|
||
|
|
||
|
i1=i1+1;
|
||
|
}forEach storageList;
|
||
|
};
|
||
|
|
||
|
If (AddCrashesToMap && (delayTime == 0 || changed)) then
|
||
|
{
|
||
|
crashList = allmissionobjects "CrashSite_RU" + allmissionobjects "CrashSite_US" + allmissionobjects "CrashSite_EU" + allmissionobjects "CrashSite_UN" + allmissionobjects "Misc_cargo_cont_net1" + allmissionobjects "Misc_cargo_cont_net2" + allmissionobjects "Misc_cargo_cont_net3" + allmissionobjects "Supply_Crate_DZE";
|
||
|
i2 = 0;
|
||
|
{
|
||
|
_name = gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName");
|
||
|
if (gettext (configFile >> "CfgVehicles" >> (typeof _x) >> "displayName") == "House") then {_name = "Crashsite"};
|
||
|
pos = position _x;
|
||
|
deleteMarkerLocal ("crashMarker"+ (str i2));
|
||
|
MarkerCrash = "crashMarker" + (str i2);
|
||
|
ParamsCrash=[MarkerCrash,pos];
|
||
|
MarkerCrash = createMarkerLocal ParamsCrash;
|
||
|
MarkerCrash setMarkerTypeLocal CrashesMarkerType;
|
||
|
MarkerCrash setMarkerSizeLocal GlobalMarkerSize;
|
||
|
MarkerCrash setMarkerPosLocal (pos);
|
||
|
MarkerCrash setMarkerColorLocal(CrashesMarkerColor);
|
||
|
MarkerCrash setMarkerTextLocal format ["%1",_name];
|
||
|
|
||
|
i2=i2+1;
|
||
|
}forEach crashList;
|
||
|
};
|
||
|
|
||
|
If(AddBuildablesToMap && (delayTime == 0 || changed)) then
|
||
|
{
|
||
|
buildableObjectsList = [];
|
||
|
{
|
||
|
buildableObjectsList = buildableObjectsList + allmissionobjects (_x);
|
||
|
} forEach buildableObjects;
|
||
|
i3 = 0;
|
||
|
{
|
||
|
pos = position _x;
|
||
|
deleteMarkerLocal ("buildablesMarker" + (str i3));
|
||
|
MarkerBuildables = "buildablesMarker" + (str i3);
|
||
|
ParamsBuildables=[MarkerBuildables,pos];
|
||
|
MarkerBuildables = createMarkerLocal ParamsBuildables;
|
||
|
MarkerBuildables setMarkerTypeLocal BuildablesMarkerType;
|
||
|
MarkerBuildables setMarkerSizeLocal BuildablesMarkerSize;
|
||
|
MarkerBuildables setMarkerPosLocal (pos);
|
||
|
MarkerBuildables setMarkerColorLocal(BuildablesMarkerColor);
|
||
|
i3=i3+1;
|
||
|
}forEach buildableObjectsList;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
If (!AddDeadPlayersToMap && changed) then
|
||
|
{
|
||
|
{
|
||
|
deleteMarkerLocal _x;
|
||
|
}forEach dListMarkers;
|
||
|
dListMarkers = [];
|
||
|
};
|
||
|
|
||
|
If (!AddZombieToMap && changed) then
|
||
|
{
|
||
|
k=0;
|
||
|
{
|
||
|
deleteMarkerLocal ("zmMarker"+ (str k));
|
||
|
k=k+1;
|
||
|
}forEach markers;
|
||
|
markers = [];
|
||
|
};
|
||
|
|
||
|
If (!AddUnlockedVehiclesToMap && changed) then
|
||
|
{
|
||
|
i=0;
|
||
|
{
|
||
|
deleteMarkerLocal ("UvehMarker"+ (str i));
|
||
|
i=i+1;
|
||
|
}forEach unlockedVehList;
|
||
|
};
|
||
|
|
||
|
If (!AddLockedVehiclesToMap && changed) then
|
||
|
{
|
||
|
i4=0;
|
||
|
{
|
||
|
deleteMarkerLocal ("LvehMarker"+ (str i4));
|
||
|
i4=i4+1;
|
||
|
}forEach lockedVehList;
|
||
|
};
|
||
|
|
||
|
If (!AddPlotPoleToMap && changed) then
|
||
|
{
|
||
|
i0=0;
|
||
|
{
|
||
|
deleteMarkerLocal ("poleMarker"+ (str i0));
|
||
|
i0=i0+1;
|
||
|
}forEach poleList;
|
||
|
};
|
||
|
|
||
|
If (!AddStorageToMap && changed) then
|
||
|
{
|
||
|
i1=0;
|
||
|
{
|
||
|
deleteMarkerLocal ("storageMarker"+ (str i1));
|
||
|
i1=i1+1;
|
||
|
}forEach storageList;
|
||
|
};
|
||
|
|
||
|
If (!AddCrashesToMap && changed) then
|
||
|
{
|
||
|
i2=0;
|
||
|
{
|
||
|
deleteMarkerLocal ("crashMarker"+ (str i2));
|
||
|
i2=i2+1;
|
||
|
}forEach crashList;
|
||
|
};
|
||
|
|
||
|
If (!AddBuildablesToMap && changed) then
|
||
|
{
|
||
|
i3=0;
|
||
|
{
|
||
|
deleteMarkerLocal ("buildablesMarker"+ (str i3));
|
||
|
i3=i3+1;
|
||
|
}forEach buildableObjectsList;
|
||
|
};
|
||
|
|
||
|
sleep GlobalSleep;
|
||
|
|
||
|
// Makes sure items have correctly turned off
|
||
|
if(toggleCheck != 2 && changed) then {
|
||
|
toggleCheck = toggleCheck + 1;
|
||
|
if(toggleCheck == 2) then {
|
||
|
changed = false;
|
||
|
toggleCheck = 0;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
delayTime = delayTime + 1;
|
||
|
if(delayTime == 5) then {
|
||
|
delayTime = 0;
|
||
|
};
|
||
|
|
||
|
Sleep GlobalSleep;
|
||
|
|
||
|
};
|
||
|
|
||
|
// When loop ends, end keybind and delete all markers
|
||
|
["EndESP"] call EAT_Keybind;
|
||
|
|
||
|
{
|
||
|
clearGroupIcons (group _x);
|
||
|
} forEach allUnits;
|
||
|
|
||
|
If (AddDeadPlayersToMap) then
|
||
|
{
|
||
|
{
|
||
|
deleteMarkerLocal _x;
|
||
|
}Foreach dListMarkers;
|
||
|
};
|
||
|
|
||
|
If (AddZombieToMap) then
|
||
|
{
|
||
|
k=0;
|
||
|
{
|
||
|
deleteMarkerLocal ("zmMarker"+ (str k));
|
||
|
k=k+1;
|
||
|
}forEach markers;
|
||
|
};
|
||
|
|
||
|
If (AddUnlockedVehiclesToMap) then
|
||
|
{
|
||
|
i=0;
|
||
|
{
|
||
|
deleteMarkerLocal ("UvehMarker"+ (str i));
|
||
|
i=i+1;
|
||
|
}forEach unlockedVehList;
|
||
|
};
|
||
|
|
||
|
If (AddLockedVehiclesToMap) then
|
||
|
{
|
||
|
i4=0;
|
||
|
{
|
||
|
deleteMarkerLocal ("LvehMarker"+ (str i4));
|
||
|
i4=i4+1;
|
||
|
}forEach lockedVehList;
|
||
|
};
|
||
|
|
||
|
If (AddPlotPoleToMap) then
|
||
|
{
|
||
|
i0=0;
|
||
|
{
|
||
|
deleteMarkerLocal ("poleMarker"+ (str i0));
|
||
|
i0=i0+1;
|
||
|
}forEach poleList;
|
||
|
};
|
||
|
|
||
|
If (AddStorageToMap) then
|
||
|
{
|
||
|
i1=0;
|
||
|
{
|
||
|
deleteMarkerLocal ("storageMarker"+ (str i1));
|
||
|
i1=i1+1;
|
||
|
}forEach storageList;
|
||
|
};
|
||
|
|
||
|
If (AddCrashesToMap) then
|
||
|
{
|
||
|
i2=0;
|
||
|
{
|
||
|
deleteMarkerLocal ("crashMarker"+ (str i2));
|
||
|
i2=i2+1;
|
||
|
}forEach crashList;
|
||
|
};
|
||
|
|
||
|
If (AddBuildablesToMap) then
|
||
|
{
|
||
|
i3=0;
|
||
|
{
|
||
|
deleteMarkerLocal ("buildablesMarker"+ (str i3));
|
||
|
i3=i3+1;
|
||
|
}forEach buildableObjectsList;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_PlayerESP = {
|
||
|
setGroupIconsVisible [true, true];
|
||
|
#define COLOR_GREEN [0,1,0,1]
|
||
|
#define COLOR_BLUE [0,0,1,1]
|
||
|
#define COLOR_WHITE [1, 1, 1, 1]
|
||
|
#define COLOR_ORANGE [1,0.3,0,1]
|
||
|
#define COLOR_RED [1,0,0,1]
|
||
|
|
||
|
if (!("ItemGPS" in items player)) then {player addWeapon "ItemGPS";};
|
||
|
|
||
|
EATplayerESP = _this select 0;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has player ESP",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
|
||
|
[] spawn {
|
||
|
private ["_color","_crew","_vehname","_i","_crewtotal"];
|
||
|
_color = "";
|
||
|
while {EATplayerESP} do
|
||
|
{
|
||
|
{
|
||
|
if (vehicle _x == _x) then {
|
||
|
clearGroupIcons group _x;
|
||
|
group _x addGroupIcon ["x_art"];
|
||
|
|
||
|
if ((side _x == side player) && (side player != resistance)) then {
|
||
|
_color = COLOR_RED;
|
||
|
} else {
|
||
|
_color = COLOR_ORANGE;
|
||
|
};
|
||
|
group _x setGroupIconParams [_color, format ["[%1]-[%2m]",name _x,round(_x distance player)], 0.5, true];
|
||
|
|
||
|
} else {
|
||
|
clearGroupIcons group _x;
|
||
|
group _x addGroupIcon ["x_art"];
|
||
|
|
||
|
_vehname = (getText (configFile >> 'CfgVehicles' >> (typeof vehicle _x) >> 'displayName'));
|
||
|
|
||
|
_crewtotal = (crew (vehicle _x));
|
||
|
_crew = (name (crew (vehicle _x) select 0));
|
||
|
_i = 1;
|
||
|
|
||
|
{
|
||
|
if(_i != 1) then {
|
||
|
_crew = _crew + ", " + (name _x);
|
||
|
};
|
||
|
|
||
|
_i = _i + 1;
|
||
|
|
||
|
} forEach _crewtotal;
|
||
|
|
||
|
if ((side _x == side player) && (side player != resistance)) then {
|
||
|
_color = COLOR_BLUE;
|
||
|
} else {
|
||
|
_color = COLOR_RED;
|
||
|
};
|
||
|
|
||
|
group _x setGroupIconParams [_color, format ["[%2]-[%3%4%5%6%7%8%9%10%11]-[%1m]",round(_x distance player),_vehname,_crew], 0.5, true];
|
||
|
|
||
|
};
|
||
|
} forEach playableUnits;
|
||
|
sleep 1;
|
||
|
};
|
||
|
{clearGroupIcons group _x;} forEach playableUnits;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has DISABLED player ESP",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_GodMode = {
|
||
|
/*
|
||
|
Heals all damage and makes the user invincible to damage by everything
|
||
|
excluding antihack killing a hacker.
|
||
|
*/
|
||
|
private["_player","_vehicle"];
|
||
|
EATplayerGod = _this select 0;
|
||
|
_player = player;
|
||
|
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has _player god mode",name _player,getPlayerUID _player] call EAT_Logger;};
|
||
|
|
||
|
fnc_usec_unconscious = {};
|
||
|
_player removeAllEventHandlers "handleDamage";
|
||
|
_player addEventHandler ["handleDamage", { false }];
|
||
|
_player allowDamage false;
|
||
|
r_player_unconscious = false;
|
||
|
r_player_injured = false;
|
||
|
r_fracture_legs = false;
|
||
|
r_fracture_arms = false;
|
||
|
r_player_timeout = 0;
|
||
|
dayz_sourceBleeding = objNull;
|
||
|
disableUserInput false;
|
||
|
_player setVariable ["USEC_injured",false,true];
|
||
|
{_player setVariable[_x,false,true];} forEach USEC_woundHit;
|
||
|
_player setVariable ["unconsciousTime", r_player_timeout, true];
|
||
|
_player setHit ["body",0];
|
||
|
_player setHit ["hands",0];
|
||
|
_player setHit ["legs",0];
|
||
|
_player setVariable['medForceUpdate',true,true];
|
||
|
|
||
|
[_player] spawn {
|
||
|
private "_player";
|
||
|
_player = _this select 0;
|
||
|
|
||
|
while {EATplayerGod} do {
|
||
|
dayz_hunger = 0;
|
||
|
dayz_thirst = 0;
|
||
|
dayz_temperatur = 36;
|
||
|
r_player_infected = false;
|
||
|
fnc_usec_damageHandler = {};
|
||
|
player_zombieCheck = {};
|
||
|
r_player_inpain = false;
|
||
|
r_player_blood = 11999;
|
||
|
uiSleep 0.3;
|
||
|
};
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has DISABLED _player god mode",name _player,getPlayerUID _player] call EAT_Logger;};
|
||
|
|
||
|
player_zombieCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_zombieCheck.sqf";
|
||
|
fnc_usec_damageHandler = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandler.sqf";
|
||
|
fnc_usec_unconscious = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_unconscious.sqf";
|
||
|
_player removeAllEventHandlers "handleDamage";
|
||
|
_player addEventHandler ["handleDamage", {true}];
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_VehGod = {
|
||
|
/*
|
||
|
Air vehicles will explode if hit with a rocket or when crashing.
|
||
|
*/
|
||
|
EATvehicleGod = _this select 0;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has vehicle god mode",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
|
||
|
[] spawn {
|
||
|
private "_vehicle";
|
||
|
while{EATvehicleGod} do
|
||
|
{
|
||
|
|
||
|
_vehicle = (vehicle player);
|
||
|
if (_vehicle != player) then {
|
||
|
_vehicle setFuel 1;
|
||
|
_vehicle setDamage 0;
|
||
|
};
|
||
|
uiSleep 0.1;
|
||
|
};
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has DISABLED vehicle god mode",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_InfiniteAmmo = {
|
||
|
|
||
|
EATinfiniteAmmo = _this select 0;
|
||
|
|
||
|
// Tool use logger
|
||
|
if (EAT_logMajorTool) then {format["%1 %2 -- has turned ON infinite ammo",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
|
||
|
[] spawn {
|
||
|
while {EATinfiniteAmmo} do
|
||
|
{
|
||
|
vehicle player setVehicleAmmo 1;
|
||
|
vehicle player setUnitRecoilCoefficient 0;
|
||
|
uiSleep 0.1;
|
||
|
};
|
||
|
vehicle player setUnitRecoilCoefficient 1;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has turned OFF infinite ammo",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_VehSpeedBoost = {
|
||
|
_isActive = _this select 0;
|
||
|
|
||
|
if (_isActive) then {
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has added speed boost",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
|
||
|
SPEED_UP =(findDisplay 46) displayAddEventHandler ["KeyDown","_this select 1 call MY_KEYDOWN_FNC;false;"];
|
||
|
|
||
|
MY_KEYDOWN_FNC = {
|
||
|
private["_vehicle","_nos","_supgrade"];
|
||
|
_vehicle = vehicle player;
|
||
|
if (_vehicle == player) exitWith {};
|
||
|
|
||
|
_nos = _vehicle getVariable "nitro";
|
||
|
_supgrade = _vehicle getVariable "supgrade";
|
||
|
|
||
|
if(isEngineOn _vehicle) then
|
||
|
{
|
||
|
switch (_this) do {
|
||
|
case 17: {
|
||
|
if(!isNil "_supgrade") then {
|
||
|
_vehicle SetVelocity [(velocity _vehicle select 0) * 1.011, (velocity _vehicle select 1) *1.011, (velocity _vehicle select 2) * 0.99];
|
||
|
} else {
|
||
|
_vehicle setVariable ["supgrade", 1, true];
|
||
|
};
|
||
|
};
|
||
|
case 42: {
|
||
|
if(!isNil "_nos") then {
|
||
|
_vehicle setVelocity [(velocity _vehicle select 0) * 1.01, (velocity _vehicle select 1) * 1.01, (velocity _vehicle select 2) * 0.99];
|
||
|
} else {
|
||
|
_vehicle setVariable ["nitro", 1, true];
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
} else {
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has DISABLED speed boost",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
|
||
|
(findDisplay 46) displayRemoveEventHandler ["KeyDown", SPEED_UP];
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_ZomShield = {
|
||
|
EAT_SheildMe = _this select 0;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has zombie shield",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
|
||
|
[] spawn {
|
||
|
private["_pos","_zombies"];
|
||
|
while {EAT_SheildMe} do
|
||
|
{
|
||
|
_pos = getPos player;
|
||
|
_zombies = _pos nearEntities ["zZombie_Base",30];
|
||
|
{
|
||
|
deleteVehicle _x;
|
||
|
} forEach _zombies;
|
||
|
};
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMinorTool) then {format["%1 %2 -- has disabled zombie shield",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
EAT_TeleportToggle = {
|
||
|
private ["_done","_location","_locOK","_pos","_worked"];
|
||
|
if (!("ItemGPS" in items player)) then {player addWeapon "ItemGPS";};
|
||
|
_done = false;
|
||
|
_locOK = true;
|
||
|
_worked = false;
|
||
|
|
||
|
EAT_teleport = {
|
||
|
_pos = [_this select 0, _this select 1,_this select 2];
|
||
|
|
||
|
if ((vehicle player) isKindOf "Air" && isEngineOn (vehicle player) && (speed (vehicle player)) > 20) then{
|
||
|
(vehicle player) setpos [_pos select 0, _pos select 1, 1000];
|
||
|
player setVariable["lastPos",0, true];
|
||
|
_worked = true;
|
||
|
} else {
|
||
|
if ((vehicle player) != player && !((vehicle player) isKindOf "Ship")) then {
|
||
|
_location = [_pos select 0, _pos select 1] findEmptyPosition [0,10];
|
||
|
if (count _location < 1) then {
|
||
|
"Unable to teleport here." call dayz_rollingMessages;
|
||
|
} else {
|
||
|
(vehicle player) setpos _location;
|
||
|
_worked = true;
|
||
|
};
|
||
|
} else {
|
||
|
(vehicle player) setpos [_pos select 0, _pos select 1, 0];
|
||
|
_worked = true;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
openMap [false, false];
|
||
|
TitleText [format[""], "PLAIN DOWN"];
|
||
|
_done = true;
|
||
|
|
||
|
// Tool use logger
|
||
|
if(_worked) then {
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has teleported",name player,getPlayerUID player] call EAT_Logger;};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
closeDialog 0;
|
||
|
uiSleep 0.5;
|
||
|
"Click on the map to Teleport" call dayz_rollingMessages;
|
||
|
|
||
|
if(!(visibleMap)) then {
|
||
|
openMap [true, false];
|
||
|
};
|
||
|
|
||
|
onMapSingleClick '[_pos select 0, _pos select 1, _pos select 2] call EAT_teleport';
|
||
|
waitUntil{_done || !(visibleMap)};
|
||
|
onMapSingleClick "";
|
||
|
};
|
||
|
|
||
|
EAT_TpToPlayer = {
|
||
|
private["_max","_j","_menuCheckOk"];
|
||
|
_menuCheckOk = false; _max = 10; _j = 0;
|
||
|
snext = false; plist = []; pselect5 = "";
|
||
|
|
||
|
{if ((_x != player) && (getPlayerUID _x != "")) then {plist set [count plist, name _x];};} forEach entities "CAManBase";
|
||
|
{if ((count crew _x) > 0) then {{if ((_x != player) && (getPlayerUID _x != "")) then {plist set [count plist, name _x];};} forEach crew _x;};} foreach (entities "LandVehicle" + entities "Air" + entities "Ship");
|
||
|
|
||
|
EAT_pMenuTitle = "Teleport to Player:";
|
||
|
|
||
|
while {pselect5 == "" && !_menuCheckOk} do
|
||
|
{
|
||
|
[_j, (_j + _max) min (count plist)] call EAT_fnc_playerSelect; _j = _j + _max;
|
||
|
WaitUntil {pselect5 != "" || snext || commandingMenu == ""};
|
||
|
_menuCheckOk = (commandingMenu == "");
|
||
|
snext = false;
|
||
|
};
|
||
|
|
||
|
if (pselect5 != "exit" && pselect5 != "") then
|
||
|
{
|
||
|
_name = pselect5;
|
||
|
|
||
|
{
|
||
|
scopeName "fn_tpToPlayer";
|
||
|
if(name _x == _name) then {
|
||
|
format["Teleporting to %1", _name] call dayz_rollingMessages;
|
||
|
(vehicle player) attachTo [_x, [2, 2, 0]];
|
||
|
uiSleep 0.25;
|
||
|
detach (vehicle player);
|
||
|
|
||
|
// Tool use logger
|
||
|
if(EAT_logMajorTool) then {format["%1 %2 -- has teleported to %3_%4",name player,getPlayerUID player,_name,_x] call EAT_Logger;};
|
||
|
breakOut "fn_tpToPlayer";
|
||
|
};
|
||
|
} forEach entities "CAManBase";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
// Toggles Individual Functions on and off
|
||
|
EAT_ScriptToggle = {
|
||
|
local _toggle = _this select 0;
|
||
|
local _function = _this select 1;
|
||
|
_toggle = !_toggle;
|
||
|
[_toggle] call _function;
|
||
|
_toggle
|
||
|
};
|
||
|
|
||
|
// Sends function usage info to server for logging
|
||
|
EAT_Logger = {
|
||
|
EAT_PVEH_usageLogger = _this;
|
||
|
publicVariableServer "EAT_PVEH_usageLogger";
|
||
|
};
|
||
|
|
||
|
// Turns default admin mode functions on. EAT_AdminMode = true
|
||
|
EAT_AdminToggleOn = {
|
||
|
if (EAT_fastWalk) then {[EAT_AdminMode] call EAT_FastForwardToggle;};
|
||
|
if (EAT_fastUp) then {[EAT_AdminMode] call EAT_FastUpToggle;};
|
||
|
if (EAT_speedBoost) then {[EAT_AdminMode] call EAT_VehSpeedBoost;};
|
||
|
if (EAT_enhancedESPMode) then {[EAT_AdminMode] call EAT_EnhancedESP;};
|
||
|
if (EAT_playerESPMode) then {[EAT_AdminMode] call EAT_PlayerESP;};
|
||
|
if (EAT_invisibility) then {[EAT_AdminMode] call EAT_AdminInvisible;};
|
||
|
if (EAT_infAmmo) then {[EAT_AdminMode] call EAT_InfiniteAmmo;};
|
||
|
if (EAT_flyingMode) then {[EAT_AdminMode] call EAT_Flying;};
|
||
|
if (EAT_playerGod) then {[EAT_AdminMode] call EAT_GodMode;};
|
||
|
if (EAT_vehicleGod) then {[EAT_AdminMode] call EAT_VehGod;};
|
||
|
if (EAT_ZombieShield) then {[EAT_AdminMode] call EAT_ZomShield;};
|
||
|
if (EAT_grassOff) then {[EAT_AdminMode] call EAT_GrassOffToggle;};
|
||
|
if (EAT_adminBuildMode) then {[EAT_AdminMode] call EAT_adminBuildCount;};
|
||
|
};
|
||
|
|
||
|
// Turns default admin mode functions off if they are on. EAT_AdminMode = false
|
||
|
// Scripts that run on a loop to do not need to be run again. The control variable just needs to be set to false for the script to stop
|
||
|
EAT_AdminToggleOff = {
|
||
|
if (EAT_fastWalk) then {[EAT_AdminMode] call EAT_FastForwardToggle;};
|
||
|
if (EAT_fastUp) then {[EAT_AdminMode] call EAT_FastUpToggle;};
|
||
|
if (EAT_speedBoost) then {[EAT_AdminMode] call EAT_VehSpeedBoost;};
|
||
|
if (EAT_enhancedESPMode) then {EATenhancedESP = false;};
|
||
|
if (EAT_playerESPMode) then {EATplayerESP = false;};
|
||
|
if (EAT_invisibility) then {[EAT_AdminMode] call EAT_AdminInvisible;};
|
||
|
if (EAT_infAmmo) then {EATinfiniteAmmo = false;};
|
||
|
if (EAT_flyingMode) then {EATflying = false;};
|
||
|
if (EAT_playerGod) then {EATplayerGod = false;};
|
||
|
if (EAT_vehicleGod) then {EATvehicleGod = false;};
|
||
|
if (EAT_ZombieShield) then {EAT_SheildMe = false;};
|
||
|
if (EAT_grassOff) then {[EAT_AdminMode] call EAT_GrassOffToggle;};
|
||
|
if (EAT_adminBuildMode) then {[EAT_AdminMode] call EAT_adminBuildCount;};
|
||
|
};
|
||
|
|
||
|
// ESP has its own functions because one turns the other off
|
||
|
EAT_playerESPToggle = {
|
||
|
EAT_playerESPMode = !EAT_playerESPMode;
|
||
|
if(EAT_playerESPMode && EAT_enhancedESPMode) then {EAT_enhancedESPMode = false; EATenhancedESP = false;};
|
||
|
if (EAT_playerESPMode) then {[EAT_playerESPMode] call EAT_PlayerESP;} else {EATplayerESP = false;};
|
||
|
};
|
||
|
EAT_enhancedESPToggle = {
|
||
|
EAT_enhancedESPMode = !EAT_enhancedESPMode;
|
||
|
if(EAT_playerESPMode && EAT_enhancedESPMode) then {EAT_playerESPMode = false; EATplayerESP = false;};
|
||
|
if (EAT_enhancedESPMode) then {[EAT_enhancedESPMode] call EAT_EnhancedESP;} else {EATenhancedESP = false;};
|
||
|
};
|
||
|
|
||
|
// Build unidimensional array of modular building items
|
||
|
EAT_buildUniArray = [EAT_buildModular] call myfnc_MDarray;
|
||
|
|
||
|
// This last section compiles all of the vehicles used in the vehicle spawner into arrays so there is no delay when loading the graphical menu.
|
||
|
// Do not alter this code.
|
||
|
EAT_allVehList = [];
|
||
|
EAT_allEpochVehList = [];
|
||
|
local _filter = ["SUV_TK_CIV_EP1","SUV_TK_EP1","SUV_UN_EP1","SUV_PMC","ArmoredSUV_PMC","SUV_PMC_BAF"];
|
||
|
local _cfgvehicles = configFile >> "cfgVehicles";
|
||
|
local _vehicle = objNull;
|
||
|
local _image = "";
|
||
|
local _text = "";
|
||
|
local _type = "";
|
||
|
|
||
|
for "_i" from 0 to ((count _cfgvehicles) - 1) do {
|
||
|
_vehicle = _cfgvehicles select _i;
|
||
|
if (isClass _vehicle) then {
|
||
|
_type = configName(_vehicle);
|
||
|
if ((getNumber(_vehicle >> "scope") == 2) && {getText (_vehicle >> "picture") != ""} && {_type isKindOf "AllVehicles"} && {!(["Parachute",_type] call fnc_inString)} && {!(_type isKindOf "CAManBase")}) then {
|
||
|
_text = getText(configFile >> "cfgVehicles" >> _type >> "displayName");
|
||
|
_image = (getText (configFile >> "CfgVehicles" >> _type >> "picture"));
|
||
|
EAT_allVehList set [count EAT_allVehList,[_type, _text, _image]];
|
||
|
if (["_DZ",_type] call fnc_inString || {["SUV_",_type] call fnc_inString} || {["JetSki",_type] call fnc_inString}) then {
|
||
|
if !(_type in _filter) then {
|
||
|
EAT_allEpochVehList set [count EAT_allEpochVehList,[_type, _text, _image]];
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
diag_log "Admin Tools: Common Functions Loaded";
|