diff --git a/ArmA3_exile_vemf_reloaded.7z b/ArmA3_exile_vemf_reloaded.7z deleted file mode 100644 index 3ee1839..0000000 Binary files a/ArmA3_exile_vemf_reloaded.7z and /dev/null differ diff --git a/Exile.MapName/VEMFr_client/gui/RscDisplayVEMFrClient.hpp b/Exile.MapName/VEMFr_client/gui/RscDisplayVEMFrClient.hpp deleted file mode 100644 index 3460117..0000000 --- a/Exile.MapName/VEMFr_client/gui/RscDisplayVEMFrClient.hpp +++ /dev/null @@ -1,128 +0,0 @@ -class RscDisplayVEMFrClient -{ - idd = 2991; - fadeIn = 0.2; - fadeOut = 1; - duration = 99999; - onLoad = "uiNamespace setVariable ['RscDisplayVEMFrClient', _this select 0]; ExecVM 'VEMFr_client\sqf\onLoad.sqf'"; - onUnLoad = "uiNamespace setVariable ['RscDisplayVEMFrClient', displayNull]"; - movingEnable = 0; - class RscBackground - { - access = 0; - colorBackground[] = {0.48,0.5,0.35,1}; - colorShadow[] = {0,0,0,0.5}; - colorText[] = {0.1,0.1,0.1,1}; - deletable = 0; - fade = 0; - fixedWidth = 0; - font = "PuristaLight"; - h = 1; - idc = -1; - linespacing = 1; - shadow = 0; - SizeEx = 1; - style = 512; - text = ""; - tooltipColorBox[] = {1,1,1,1}; - tooltipColorShade[] = {0,0,0,0.65}; - tooltipColorText[] = {1,1,1,1}; - type = 0; - w = 1; - x = 0; - y = 0; - }; - class RscPictureKeepAspect - { - access = 0; - colorBackground[] = {0,0,0,1}; - colorText[] = {1,1,1,1}; - deletable = 0; - fade = 0; - fixedWidth = 0; - font = "PuristaMedium"; - h = 0.15; - idc = -1; - lineSpacing = 0; - shadow = 0; - sizeEx = 0; - style = "0x30 + 0x800"; - text = ""; - tooltipColorBox[] = {1,1,1,1}; - tooltipColorShade[] = {0,0,0,0.65}; - tooltipColorText[] = {1,1,1,1}; - type = 0; - w = 0.2; - x = 0; - y = 0; - }; - class RscText - { - access = 0; - colorBackground[] = {0.071,0.078,0.094,1}; - colorShadow[] = {0,0,0,0.5}; - colorText[] = {0.22,0.745,0.882,1}; - deletable = 0; - fade = 0; - fixedWidth = 0; - font = "PuristaMedium"; - h = 0.037; - idc = -1; - linespacing = 1; - shadow = 1; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; - style = 0; - text = ""; - tooltipColorBox[] = {1,1,1,1}; - tooltipColorShade[] = {0,0,0,0.65}; - tooltipColorText[] = {1,1,1,1}; - type = 0; - w = 0.3; - x = 0; - y = 0; - }; - class controls - { - class icon:RscPictureKeepAspect - { - x = 0.25 * safezoneW + safezoneX; - y = 0.825 * safezoneH + safezoneY; - w = 0.025 * safezoneW; - h = 0.05 * safezoneH; - - fade = 1; - idc = 10; - text = "\A3\ui_f\data\map\markers\nato\o_unknown.paa"; - }; - class txtTitle: RscText - { - x = 0.285 * safezoneW + safezoneX; - y = 0.825 * safezoneH + safezoneY; - w = 0 * safezoneW; - h = 0.02 * safezoneH; - - colorBackground[] = {1,1,1,0.7}; - colorText[] = {0,0,0,1}; - fade = 1; - idc = 11; - shadow = 0; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.85)"; - text = ""; - }; - class txtMsg: RscText - { - x = 0.285 * safezoneW + safezoneX; - y = 0.845 * safezoneH + safezoneY; - w = 0 * safezoneW; - h = 0.03 * safezoneH; - - colorBackground[] = {1,1,1,0.7}; - colorText[] = {0,0,0,1}; - fade = 1; - idc = 12; - shadow = 0; - sizeEx = "( ( ( ((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.25)"; - text = ""; - }; - }; -}; diff --git a/Exile.MapName/VEMFr_client/sqf/initClient.sqf b/Exile.MapName/VEMFr_client/sqf/initClient.sqf deleted file mode 100644 index 9e51410..0000000 --- a/Exile.MapName/VEMFr_client/sqf/initClient.sqf +++ /dev/null @@ -1,45 +0,0 @@ -if hasInterface then - { - uiNamespace setVariable ["VEMFrMsgQueue", []]; - uiNamespace setVariable ["RscDisplayVEMFrClient", displayNull]; - // custom addPublicVariableEventHandler. Those bloody BE filters..... - if isMultiplayer then - { - _handleMessage = - { - _data = _this; - _msg = param [0, "", [[],format[""]]]; - _mode = param [1, "", ["", -1]]; - if (_mode isEqualTo "sys") then - { - systemChat _msg; - } else - { - (uiNamespace getVariable ["VEMFrMsgQueue", []]) pushBack _msg; - if isNull(uiNamespace getVariable ["RscDisplayVEMFrClient", displayNull]) then - { - (["RscDisplayVEMFrClient"] call BIS_fnc_rscLayer) cutRsc["RscDisplayVEMFrClient", "PLAIN", 0, true] - }; - }; - }; - while {true} do - { - if not isNil"VEMFrMsgToClient" then - { - VEMFrMsgToClient spawn _handleMessage; - VEMFrMsgToClient = nil; - } else - { - uiSleep 0.05; - }; - }; - } else - { - _arr = uiNamespace getVariable ["VEMFrMsgQueue",[]]; - _arr pushBack [0,"NEW TAKEOVER","Raiders have taken over ..."]; - _arr pushBack [1,"NEW POLICE RAID", format["%1 Police forces are raiding ...", worldName]]; - _arr pushBack [2,"NEW S.W.A.T. RAID", format["%1's S.W.A.T. teams are raiding ...", worldName]]; - waitUntil { if not(isNull(findDisplay 46)) then {true} else {uiSleep 0.5; false} }; - player addAction ["Trigger VEMFr Message",{(["RscDisplayVEMFrClient"] call BIS_fnc_rscLayer) cutRsc["RscDisplayVEMFrClient", "PLAIN", 0, true]},"",-1,false,true,"User2","alive player"]; - }; - }; diff --git a/Exile.MapName/VEMFr_client/sqf/onLoad.sqf b/Exile.MapName/VEMFr_client/sqf/onLoad.sqf deleted file mode 100644 index def44a8..0000000 --- a/Exile.MapName/VEMFr_client/sqf/onLoad.sqf +++ /dev/null @@ -1,110 +0,0 @@ -disableSerialization; -_dsp = uiNamespace getVariable ["RscDisplayVEMFrClient", displayNull]; -if not isNull _dsp then - { - if (count (uiNamespace getVariable ["VEMFrMsgQueue", []]) isEqualTo 0) then - { - (["RscDisplayVEMFrClient"] call BIS_fnc_rscLayer) cutFadeOut 0; - systemChat "[VEMFrClient] No messages to display"; - } else - { - playSound "HintExpand"; - // do stuff - _ctrlPic = _dsp displayCtrl 10; - _ctrlTitle = _dsp displayCtrl 11; - _ctrlMsg = _dsp displayCtrl 12; - { - [_dsp, _x] spawn - { - disableSerialization; - _dsp = _this select 0; - _data = _this select 1; - _ctrlPic = _dsp displayCtrl 10; - if (ctrlFade _ctrlPic < 1) then - { - _ctrlPic ctrlSetFade 1; - _ctrlPic ctrlCommit 0.5; - uiSleep 0.75; - }; - _ctrlPic ctrlSetTextColor call - { - private ["_return"]; - if (_data select 0 isEqualTo 0) then - { - _return = [0.5,0,0,1]; - }; - if (_data select 0 isEqualTo 1) then - { - _return = [0,0.3,0.6,1]; - }; - if (_data select 0 isEqualTo 2) then - { - _return = [0,0,0,1]; - }; - if isNil"_return" then - { - _return = [1,1,1,1]; - }; - _return - }; - _ctrlPic ctrlSetFade 0; - _ctrlPic ctrlCommit 0.5; - }; - - if (_ctrlTitle getVariable ["expanded",false] AND _ctrlMsg getVariable ["expanded", false]) then - { - _ctrlPos = ctrlPosition _ctrlTitle; - _ctrlTitle ctrlSetPosition [_ctrlPos select 0, _ctrlPos select 1, 0 * safezoneW, _ctrlPos select 3]; - _ctrlTitle ctrlSetFade 1; - _ctrlTitle ctrlCommit 0.5; - _ctrlTitle setVariable ["expanded", false]; - uiSleep 0.75; - _ctrlTitle ctrlSetText toUpper (_x select 1); - _ctrlPos = ctrlPosition _ctrlTitle; - _ctrlTitle ctrlSetPosition [_ctrlPos select 0, _ctrlPos select 1, 0.1 * safezoneW, _ctrlPos select 3]; - _ctrlTitle ctrlSetFade 0; - _ctrlTitle ctrlCommit 0.5; - _ctrlTitle setVariable ["expanded", true]; - - _ctrlPos = ctrlPosition _ctrlMsg; - _ctrlMsg ctrlSetPosition [_ctrlPos select 0, _ctrlPos select 1, 0 * safezoneW, _ctrlPos select 3]; - _ctrlMsg ctrlSetFade 1; - _ctrlMsg ctrlCommit 0.5; - _ctrlMsg setVariable ["expanded", false]; - uiSleep 0.75; - _ctrlMsg ctrlSetText (_x select 2); - _ctrlPos = ctrlPosition _ctrlMsg; - _ctrlMsg ctrlSetPosition [_ctrlPos select 0, _ctrlPos select 1, 0.45 * safezoneW, _ctrlPos select 3]; - _ctrlMsg ctrlSetFade 0; - _ctrlMsg ctrlCommit 0.5; - _ctrlMsg setVariable ["expanded", true]; - - uiSleep (count (_x select 2) / 5); - } else - { - _ctrlTitle ctrlSetText toUpper (_x select 1); - _ctrlPos = ctrlPosition _ctrlTitle; - _ctrlTitle ctrlSetPosition [_ctrlPos select 0, _ctrlPos select 1, 0.1 * safezoneW, _ctrlPos select 3]; - _ctrlTitle ctrlSetFade 0; - _ctrlTitle ctrlCommit 0.5; - _ctrlTitle setVariable ["expanded", true]; - - _ctrlMsg ctrlSetText (_x select 2); - _ctrlPos = ctrlPosition _ctrlMsg; - _ctrlMsg ctrlSetPosition [_ctrlPos select 0, _ctrlPos select 1, 0.45 * safezoneW, _ctrlPos select 3]; - _ctrlMsg ctrlSetFade 0; - _ctrlMsg ctrlCommit 0.5; - _ctrlMsg setVariable ["expanded", true]; - - uiSleep (count (_x select 2) / 5); - }; - } forEach (uiNamespace getVariable ["VEMFrMsgQueue",[]]); - uiNamespace setVariable ["VEMFrMsgQueue", []]; - (["RscDisplayVEMFrClient"] call BIS_fnc_rscLayer) cutFadeOut 0.5; - }; - } else - { - systemChat "Nope."; - }; - -//(uiNamespace getVariable ["VEMFrMsgQueue", []]) pushBack ["title","message"]; diff --git a/Exile.MapName/description.ext b/Exile.MapName/description.ext deleted file mode 100644 index bea5e25..0000000 --- a/Exile.MapName/description.ext +++ /dev/null @@ -1,4 +0,0 @@ -class RscTitles -{ - #include "VEMFr_client\gui\RscDisplayVEMFrClient.hpp" -}; diff --git a/Exile.MapName/init.sqf b/Exile.MapName/init.sqf deleted file mode 100644 index f8cd472..0000000 --- a/Exile.MapName/init.sqf +++ /dev/null @@ -1,5 +0,0 @@ -// Put this somewhere in your own init.sqf outside of any other brackets and if statements -if hasInterface then -{ - [] ExecVM "VEMFr_client\sqf\initClient.sqf"; // Client-side part of VEMFr -}; diff --git a/exile_vemf_reloaded/config.cpp b/exile_vemf_reloaded/config.cpp deleted file mode 100644 index 5782098..0000000 --- a/exile_vemf_reloaded/config.cpp +++ /dev/null @@ -1,382 +0,0 @@ -/* - Author: IT07 - - Description: - cpp config file for exile_vemf_reloaded - - What is exile_vemf_reloaded? (short: VEMFr) - It is a complete remake (and port to Exile) of VEMF (for Epoch) by TheVampire. - exile_vemf_reloaded was originally called VEMF but because the original creator (TheVampire) wanted to continue his work on VEMF, - this remade version of VEMF had its name changed into exile_vemf_reloaded. -*/ - -/////////////// -/// NOTE: settings that are set to 0 means they are DISABLED | settings set to 1 (or higher) are either enabled or have a specific function -/////////////// - -class CfgVemfReloaded -{ - /////// Debugging/learning/logging /////// - debugMode = 3; // 0 = no debugging | 1 = ERRORS only | 2 = INFO only | 3 = ERRORS & INFO - overridesToRPT = 1; // Enable/disable logging of override settings to .RPT - /////////////////////////////////////// - - // Global settings - addons[] = {}; // Not used for now - allowTWS = 0; // Enable/disable the usage of TWS scopes by AI - headLessClientSupport = 0; - headLessClientNames[] = {"HC1"}; - housesBlackList[] = {"Land_Pier_F"}; - killPercentage = 100; // How much of total AI has to be killed for mission completion (in percentage) - logCowardKills = 1; // Enable/disable logging of who killed AI whilst it was parachuting down - maxGlobalMissions = 10; // Enable/disable global mission amount limit - maxNew = 2; // Enable/disable MAXIMUM time (in minutes) before new mission can run - minNew = 1; // Enable/disable MINIMUM time (in minutes) before new mission can run - minPlayers = 1; // Enable/disable minimal required player count for (new) missions to (start) spawn(ing) - minServerFPS = 20; // Enable/disable minimum server FPS for VEMF to keep spawning missions - missionDistance = 2000; // Enable/disable minimum distance between missions - missionList[] = {"DynamicLocationInvasion","BaseAttack"}; // Each entry should represent an .sqf file in the missions folder - noMissionPos[] = {{{2998.62,18175.4,0.00143886},500},{{14601.3,16799.3,0.00143814},800},{{23334.8,24189.5,0.00132132},600}}; // Format: {{position},radius} | Default: Exile Altis safezones - nonPopulated = 1; // Enable/disable allowance of missions at locations WITHOUT (enterable) buildings - punishRoadKills = 1; // Enable/disable respect deduction if player roadkills AI - removeAllAssignedItems = 0; // Enable/disable removal of Map, Compass, Watch and Radio from all AI - sayKilled = 1; // Enable/disable AI kill messages - sayKilledName = 0; // Enable/disable the usage of AI's names instead of just "AI" - timeOutTime = 25; // Enable/disable mission timeOutTime (in minutes) - validateLoot = 1; // Enable/disable validation of all defined loot classnames. Checks if classnames exist in server's game configFile - - // Exile specific settings - aiMode = 1; // 0 = normal soldier AI | 1 = regular police AI | 2 = S.W.A.T. AI - respectReward = 20; // 0 = no respect for killing AI | respectReward > 0 = amount of minimum respect reward for player - respectRoadKillDeduct = 20; // 0 = no deduction for roadkilling AI | respectRoadKillDeduct > = amount of respect to deduct from player; - - // AI Unit settings - unitClass = "O_G_Sharpshooter_F"; // Default: "O_G_Sharpshooter_F" | optional: "B_G_Soldier_AR_F" - // NOTE: VEMFr will automatically adjust the AI's side that belongs to the unit of given unitClass - - class locationBlackLists - { // NOTE: If the map you use is not listed below, simply add it by yourself or put the locations you want to blacklist into the locations array of the Other class - class Altis - { - locations[] = {"Almyra","Atsalis","Cap Makrinos","Chelonisi","Fournos","Kavala","Makrynisi","Monisi","Polemista","Pyrgos","Pyrgi","Sagonisi","Savri","Selakano","Sofia","Surf Club","Syrta","Zaros"}; - }; - class Stratis - { - locations[] = {"Jay Cove","Kamino Bay","Keiros Bay","Kyfi Bay","Limeri Bay","Marina Bay","Nisi Bay","Strogos Bay","Tsoukala Bay"}; - }; - class Namalsk - { - locations[] = {"Brensk Bay","Lubjansk Bay","Nemsk Bay","Seraja Bay","Sebjan Mine","Tara Strait"}; - }; - class Other - { - locations[] = {}; - }; - }; - - class BaseAttack // WORK IN PROGRESS!! - { // BaseAttack (mission) settings - aiMode = 1; // 0 = "military" | 1 = Police | 2 = S.W.A.T. - aiSetup[] = {2,5}; // format: {amountOfGroups,unitsInEachGroup}; - allowLaunchers = 1; // Allow/disallow AI to have rocket launchers - hasLauncherChance = 25; // In percentage. How big the chance that each AI gets a launcher - maxAttacks = 5; // Maximum amount of active attacks at the same time | can not be turned off - minimumLevel = 2; // Minimum required level of base before it can get attacked - /* - NOTES: - 1) every territory flag can only be attacked once every restart - 2) only players within a certain range of the attacked territory can see the mission announcement - 3) as a "punishment" for killing AI, players do NOT get any respect increase/decrease for killing AI - */ - }; - - class DynamicLocationInvasion - { // DynamicLocationInvasion (mission) settings - allowCrateLift = 0; // Allow/disallow the loot crate to be lifted with helicopter - allowLaunchers = 1; // Allow/disallow AI to have rocket launchers - allowRepeat = 0; // Allow/disallow re-invading of a previously invaded city/town/location - announce = 1; // Enable/disable mission notificatons - cal50s = 3; // Max amount of .50 caliber machineguns at mission | Needs to be lower than total unit count per mission - cal50sDelete = 1; // Enable/disable the removal of .50cal | 2 = destroy (not remove) - class crateParachute - { - enabled = 0; // Enable/disable parachute of the loot crate - altitude = 250; // loot crate spawn-altitude in meters - }; - crateTypes[] = {"I_CargoNet_01_ammo_F","O_CargoNet_01_ammo_F","B_CargoNet_01_ammo_F","I_supplyCrate_F","Box_East_AmmoVeh_F","Box_NATO_AmmoVeh_F"}; - flairTypes[] = {"Chemlight_green","Chemlight_red","Chemlight_yellow","Chemlight_blue"}; - groupCount[] = {2,4}; // In format: {minimum, maximum}; VEMF will pick a random number between min and max. If you want the same amount always, use same numbers for minimum and maximum. - groupUnits[] = {4,6}; // How much units in each group. Works the same like groupCount - hasLauncherChance = 25; // In percentage. How big the chance that each AI gets a launcher - class heliPatrol - { - enabled = 1; - classes[] = {"B_Heli_Light_01_armed_F","B_Heli_Attack_01_F","B_Heli_Transport_03_F","B_Heli_Transport_01_F","B_Heli_Transport_01_camo_F"}; // the types of heli(s) - locked = 0; // Enable/disable heli lock to prevent/allow players from flying it - }; - useMarker = 1; // Enable/disable mission markers - markCrateOnMap = 1; // Enable/disable loot crate marker on map called "Loot" - markCrateVisual = 1; // Enable/disable loot crate VISUAL marker (smoke and/or chem) - /* maxDistance NOTE: make sure to keep this number very high. 15000 is for Altis */ - maxDistancePrefered = 7000; // Prefered maximum mission distance from player - maxInvasions = 7; // Max amount of active uncompleted invasions allowed at the same time - mines = 0; // Enable/disable mines at mission | 1 = anti-Armor mines | 2 = anti-Personell mines | 3 = both anti-Armor and anti-Personell mines - minesAmount = 20; // Ignore if mines = 0; - minesCleanup = 1; // Enable/disable the removal of mines once mission has been completed | 2 = explode mines - nonPopulated = -1; // Allow/disallow this mission type being placed at locations without buildings | using -1 will ignore this setting and use the global settting - randomModes = 1; // Enable/disable randomization of AI types (linked to aiMode setting) - skipDistance = 800; // No missions at locations which have players within this range (in meters) - skipDistanceReversed = 0; // If set higher than 0, missions will only spawn if player is at least given amount (in meters) away from a location whilst at the same time not be further away than twice the given number (in meters) - smokeTypes[] = {"SmokeShell","SmokeShellBlue","SmokeShellGreen","SmokeShellOrange","SmokeShellRed","SmokeShellYellow"}; - spawnCrateFirst = 0; // Enable/disable the spawning of loot crate before mission has been completed - streetLights = 0; // Enable/disable street lights at mission location - streetLightsRestore = 1; // Enable/disable restoration of street lights after mission completion - streetLightsRange = 500; // Affects streetlights within this distance from mission's center - }; - - class aiStatic - { // Simply spawns units at desired positions - amount[] = {10,20,12,11,40,21,19}; // How much AI units on each seperate position. Example: 1st location, 10. 2nd location, 20. 3rd location, 12. And so on.... - enabled = 0; // Enable/disable static AI spawning - positions[] = {}; // Add positions here. Each position must have {} around it and must be seperated with a comma if multiple positions present. Last position in list should NOT have a comma behind it! - random = 1; // Enable/disable randomization of AI units amount - }; - - class aiCleanUp - { // Contains settings for removal of items from each AI that gets eliminated - aiDeathRemovalEffect = 0; // Enable/disable the "death effect" from Virtual Arsenal. Flashes AI and deletes it after being eliminated - removeHeadGear = 0; // Enable/disable removal of headgear after AI has been eliminated, obviously - removeLaunchers = 0; // Enable/disable removal of rocket launchers from AI after they are eliminated - }; - - - class aiSkill // Minimum: 0 | Maximum: 1 - { // Global AI skill settings. They affect each VEMF unit for any default VEMF mission - difficulty = "Veteran"; // Options: "Easy" "Normal" "Veteran" "Hardcore" | Default: Veteran - class Easy // AI looks stupid with this setting xD - { - accuracy = 0.4; aimingShake = 0.20; aimingSpeed = 0.3; endurance = 0.25; spotDistance = 0.5; spotTime = 0.85; courage = 1; reloadSpeed = 0.3; commanding = 1; general = 0.3; - }; - class Normal - { - accuracy = 0.4; aimingShake = 0.20; aimingSpeed = 0.3; endurance = 0.25; spotDistance = 0.5; spotTime = 0.85; courage = 1; reloadSpeed = 0.3; commanding = 1; general = 0.4; - }; - class Veteran - { - accuracy = 0.4; aimingShake = 0.20; aimingSpeed = 0.3; endurance = 0.25; spotDistance = 0.5; spotTime = 0.85; courage = 1; reloadSpeed = 0.3; commanding = 1; general = 0.5; - }; - class Hardcore // Also known as Aimbots - { - accuracy = 0.4; aimingShake = 0.20; aimingSpeed = 0.3; endurance = 0.25; spotDistance = 0.5; spotTime = 0.85; courage = 1; reloadSpeed = 0.3; commanding = 1; general = 0.7; - }; - }; - - class policeConfig - { - backpacks[] = { - "B_AssaultPack_khk","B_AssaultPack_dgtl","B_AssaultPack_rgr","B_AssaultPack_sgg","B_AssaultPack_cbr", - "B_AssaultPack_mcamo","B_TacticalPack_rgr","B_TacticalPack_mcamo","B_TacticalPack_ocamo","B_TacticalPack_blk", - "B_TacticalPack_oli","B_FieldPack_khk","B_FieldPack_ocamo","B_FieldPack_oucamo","B_FieldPack_cbr", - "B_FieldPack_blk","B_Carryall_ocamo","B_Carryall_oucamo","B_Carryall_mcamo","B_Carryall_khk","B_Carryall_cbr", - "B_Parachute","B_FieldPack_oli","B_Carryall_oli","B_Kitbag_Base","B_Kitbag_cbr","B_Kitbag_mcamo", - "B_Kitbag_rgr","B_Kitbag_sgg","B_OutdoorPack_Base","B_OutdoorPack_blk","B_OutdoorPack_blu", - "B_OutdoorPack_tan" - }; - headGear[] = { - "H_Cap_police","H_Beret_blk_POLICE","H_Cap_blk_ION","H_Cap_khaki_specops_UK","H_Cap_tan_specops_US","H_Cap_brn_SPECOPS","H_Cap_blk_CMMG","H_Cap_blk","H_Cap_blu","H_Cap_red", - "H_Cap_press","H_Cap_usblack","H_Beret_brn_SF","H_Beret_Colonel" - }; - pistols[] = {"hgun_ACPC2_F","hgun_P07_F","hgun_Pistol_heavy_01_F","hgun_Pistol_heavy_02_F","hgun_Rook40_F"}; - rifles[] = { - "arifle_Katiba_F","arifle_Katiba_C_F","arifle_Katiba_GL_F","arifle_Mk20_F","arifle_Mk20_plain_F","arifle_Mk20C_F","arifle_Mk20C_plain_F","arifle_Mk20_GL_F","arifle_Mk20_GL_plain_F", - "arifle_MXC_F","arifle_MX_F","arifle_MX_SW_F","arifle_MXC_Black_F","arifle_MX_Black_F","arifle_TRG21_F","arifle_TRG20_F","arifle_TRG21_GL_F","hgun_PDW2000_F","SMG_01_F","SMG_02_F" - }; - uniforms[] = {"U_C_Journalist","U_Rangemaster","U_Marshal","U_Competitor"}; - vests[] = {"V_TacVest_blk_POLICE","V_PlateCarrierSpec_blk","V_PlateCarrierGL_blk","V_TacVestCamo_khk","V_TacVest_blk","V_BandollierB_blk","V_Rangemaster_belt"}; - }; - - class crateLoot - { // Loot crate configuration - primarySlotsMax = 7; // Maximum primary weapons in each loot crate - primarySlotsMin = 2; // Minimum primary weapons in each loot crate - primaryWeaponLoot[] = - { // The number after each classname means how much of that type will be put in crate. WARNING: DO NOT USE NUMBERS WITH DECIMALS. - {"srifle_DMR_01_F",2},{"srifle_EBR_F",3},{"srifle_GM6_F",1},{"LMG_Mk200_F",3},{"LMG_Zafir_F",3},{"arifle_Katiba_F",3},{"arifle_Katiba_GL_F",2},{"arifle_Mk20_F",2}, - {"arifle_Mk20_plain_F",2},{"arifle_Mk20C_F",2},{"arifle_Mk20C_plain_F",2},{"arifle_Mk20_GL_F",2},{"arifle_Mk20_GL_plain_F",2},{"arifle_MXC_F",2},{"arifle_MX_F",2}, - {"arifle_MX_GL_F",2},{"arifle_MX_SW_F",2},{"arifle_MXM_F",2},{"arifle_MXC_Black_F",2},{"arifle_MX_Black_F",2},{"arifle_MX_GL_Black_F",2},{"arifle_MX_SW_Black_F",2}, - {"arifle_MXM_Black_F",2},{"arifle_SDAR_F",2},{"arifle_TRG21_F",2},{"arifle_TRG20_F",2},{"arifle_TRG21_GL_F",2},{"SMG_01_F",2},{"SMG_02_F",2},{"srifle_GM6_camo_F",2}, - {"srifle_LRR_camo_F",2},{"srifle_DMR_02_F",2},{"srifle_DMR_02_camo_F",2},{"srifle_DMR_02_sniper_F",2},{"srifle_DMR_03_F",2},{"srifle_DMR_03_khaki_F",2},{"srifle_DMR_03_tan_F",2}, - {"srifle_DMR_03_multicam_F",2},{"srifle_DMR_03_woodland_F",2},{"srifle_DMR_04_F",2},{"srifle_DMR_04_Tan_F",2},{"srifle_DMR_05_blk_F",2},{"srifle_DMR_05_hex_F",2},{"srifle_DMR_05_tan_f",2},{"srifle_DMR_06_camo_F",2},{"srifle_DMR_06_olive_F",2},{"MMG_01_hex_F",2},{"MMG_01_tan_F",2},{"MMG_02_camo_F",2}, - {"MMG_02_black_F",2},{"MMG_02_sand_F",2} - }; - - secondarySlotsMax = 3; // Maximum number of secondary weapons to be in each loot crate - secondarySlotsMin = 1; // Minimum number of secondary weapons to be in each loot crate - secondaryWeaponLoot[] = - { // The number after each classname means how much of that type will be put in crate. WARNING: DO NOT USE NUMBERS WITH DECIMALS. - {"hgun_ACPC2_F",3},{"hgun_P07_F",3},{"hgun_Pistol_heavy_01_F",3},{"hgun_Pistol_heavy_02_F",3},{"hgun_Rook40_F",3} - }; - - magSlotsMax = 8; // Maximum number of magazine slots in each loot crate - magSlotsMin = 6; // Minimum number of magazine slots in each loot crate - magLoot[] = - { // The number after each classname means how much of that type will be put in crate. WARNING: DO NOT USE NUMBERS WITH DECIMALS. - {"30Rnd_556x45_Stanag",20},{"30Rnd_556x45_Stanag_Tracer_Red",20},{"30Rnd_556x45_Stanag_Tracer_Green",20}, - {"30Rnd_556x45_Stanag_Tracer_Yellow",20},{"30Rnd_65x39_caseless_mag",20},{"30Rnd_65x39_caseless_green",20},{"30Rnd_65x39_caseless_mag_Tracer",20}, - {"30Rnd_65x39_caseless_green_mag_Tracer",20},{"20Rnd_762x51_Mag",20},{"7Rnd_408_Mag",20},{"5Rnd_127x108_Mag",20},{"100Rnd_65x39_caseless_mag",20}, - {"100Rnd_65x39_caseless_mag_Tracer",20},{"200Rnd_65x39_cased_Box",20},{"200Rnd_65x39_cased_Box_Tracer",20},{"30Rnd_9x21_Mag",20},{"16Rnd_9x21_Mag",20}, - {"30Rnd_45ACP_Mag_SMG_01",20},{"30Rnd_45ACP_Mag_SMG_01_Tracer_Green",20},{"9Rnd_45ACP_Mag",20},{"150Rnd_762x51_Box",20},{"150Rnd_762x51_Box_Tracer",20}, - {"150Rnd_762x54_Box",20},{"150Rnd_762x54_Box_Tracer",20},{"11Rnd_45ACP_Mag",20},{"6Rnd_45ACP_Cylinder",20},{"10Rnd_762x51_Mag",20},{"10Rnd_762x54_Mag",20}, - {"5Rnd_127x108_APDS_Mag",20},{"10Rnd_338_Mag",20},{"130Rnd_338_Mag",20},{"10Rnd_127x54_Mag",20},{"150Rnd_93x64_Mag",20},{"10Rnd_93x64_DMR_05_Mag",20} - }; - - attSlotsMax = 4; // Maximum number of attachment slots in each loot crate - attSlotsMin = 2; // Minimum number of attachment slots in each loot crate - attLoot[] = - { // The number after each classname means how much of that type will be put in crate. WARNING: DO NOT USE NUMBERS WITH DECIMALS. - {"ItemGPS",5},{"ItemRadio",4},{"ItemMap",6},{"MineDetector",1},{"Binocular",4},{"Rangefinder",2},{"muzzle_snds_H",2}, - {"muzzle_snds_L",2},{"muzzle_snds_M",2},{"muzzle_snds_B",2},{"muzzle_snds_H_MG",2},{"muzzle_snds_H_SW",2}, - {"optic_Arco",3},{"optic_Aco",3},{"optic_ACO_grn",3},{"optic_Aco_smg",3},{"optic_ACO_grn_smg",3},{"optic_Holosight",3}, - {"optic_Holosight_smg",3},{"optic_SOS",3},{"acc_flashlight",3},{"acc_pointer_IR",3},{"optic_MRCO",3},{"muzzle_snds_acp",3}, - {"optic_NVS",3},{"optic_DMS",3},{"optic_Yorris",2},{"optic_MRD",2},{"optic_LRPS",3},{"muzzle_snds_338_black",3},{"muzzle_snds_338_green",3}, - {"muzzle_snds_338_sand",3},{"muzzle_snds_93mmg",3},{"muzzle_snds_93mmg_tan",3},{"optic_AMS",3},{"optic_AMS_khk",3},{"bipod_03_F_oli",3}, - {"optic_AMS_snd",3},{"optic_KHS_blk",3},{"optic_KHS_hex",3},{"optic_KHS_old",3},{"optic_KHS_tan",3},{"bipod_01_F_snd",3}, - {"bipod_01_F_blk",3},{"bipod_01_F_mtp",3},{"bipod_02_F_blk",3},{"bipod_02_F_tan",3},{"bipod_02_F_hex",3},{"bipod_03_F_blk",3} - }; - - itemSlotsMax = 4; // Maximum number of attachment slots in each loot crate - itemSlotsMin = 2; // Minimum number of attachment slots in each loot crate - itemLoot[] = - { // The number after each classname means how much of that type will be put in crate. WARNING: DO NOT USE NUMBERS WITH DECIMALS. - {"Exile_Item_Flag",3},{"Exile_Item_FuelCanisterFull",2},{"Exile_Item_FuelCanisterEmpty",1},{"Exile_Item_InstaDoc",4},{"Exile_Item_Matches",3},{"Exile_Item_PlasticBottleFreshWater",5} - }; - - vestSlotsMax = 3; // Maximum number of vest slots in each loot crate - vestSlotsMin = 1; // Minimum number of vest slots in each loot crate - vestLoot[] = // NOTE ABOUT VESTS: it is recommended to keep amount for each vest at 1 because vests do not stack unlike weapons, items and magazines - { // The number after each classname means how much of that type will be put in crate. WARNING: DO NOT USE NUMBERS WITH DECIMALS. - {"V_PlateCarrier1_rgr",1},{"V_PlateCarrier2_rgr",1},{"V_PlateCarrier3_rgr",1},{"V_PlateCarrierGL_rgr",1},{"V_PlateCarrier1_blk",1}, - {"V_PlateCarrierSpec_rgr",1},{"V_Chestrig_khk",1},{"V_Chestrig_rgr",1},{"V_Chestrig_blk",1},{"V_Chestrig_oli",1},{"V_TacVest_khk",1}, - {"V_TacVest_brn",1},{"V_TacVest_oli",1},{"V_TacVest_blk",1},{"V_TacVest_camo",1},{"V_TacVest_blk_POLICE",1},{"V_TacVestIR_blk",1},{"V_TacVestCamo_khk",1}, - {"V_HarnessO_brn",1},{"V_HarnessOGL_brn",1},{"V_HarnessO_gry",1},{"V_HarnessOGL_gry",1},{"V_HarnessOSpec_brn",1},{"V_HarnessOSpec_gry",1}, - {"V_PlateCarrierIA1_dgtl",1},{"V_PlateCarrierIA2_dgtl",1},{"V_PlateCarrierIAGL_dgtl",1},{"V_RebreatherB",1},{"V_RebreatherIR",1},{"V_RebreatherIA",1}, - {"V_PlateCarrier_Kerry",1},{"V_PlateCarrierL_CTRG",1},{"V_PlateCarrierH_CTRG",1},{"V_I_G_resistanceLeader_F",1},{"V_Press_F",1} - }; - - headGearSlotsMax = 3; // Maximum number of headGear slots in each loot crate - headGearSlotsMin = 1; // Minimum number of headGear slots in each loot crate - headGearLoot[] = // NOTE ABOUT HEADGEAR: it is recommended to keep amount for each headGear item at 1 because headGear items do not stack unlike weapons, items and magazines - { // The number after each classname means how much of that type will be put in crate. WARNING: DO NOT USE NUMBERS WITH DECIMALS. - {"H_HelmetB",1},{"H_HelmetB_camo",1},{"H_HelmetB_paint",1},{"H_HelmetB_light",1},{"H_Booniehat_khk",1},{"H_Booniehat_oli",1},{"H_Booniehat_indp",1}, - {"H_Booniehat_mcamo",1},{"H_Booniehat_grn",1},{"H_Booniehat_tan",1},{"H_Booniehat_dirty",1},{"H_Booniehat_dgtl",1},{"H_Booniehat_khk_hs",1},{"H_HelmetB_plain_mcamo",1}, - {"H_HelmetB_plain_blk",1},{"H_HelmetSpecB",1},{"H_HelmetSpecB_paint1",1},{"H_HelmetSpecB_paint2",1},{"H_HelmetSpecB_blk",1},{"H_HelmetIA",1},{"H_HelmetIA_net",1}, - {"H_HelmetIA_camo",1},{"H_Helmet_Kerry",1},{"H_HelmetB_grass",1},{"H_HelmetB_snakeskin",1},{"H_HelmetB_desert",1},{"H_HelmetB_black",1},{"H_HelmetB_sand",1}, - {"H_Cap_red",1},{"H_Cap_blu",1},{"H_Cap_oli",1},{"H_Cap_headphones",1},{"H_Cap_tan",1},{"H_Cap_blk",1},{"H_Cap_blk_CMMG",1},{"H_Cap_brn_SPECOPS",1},{"H_Cap_tan_specops_US",1}, - {"H_Cap_khaki_specops_UK",1},{"H_Cap_grn",1},{"H_Cap_grn_BI",1},{"H_Cap_blk_Raven",1},{"H_Cap_blk_ION",1},{"H_Cap_oli_hs",1},{"H_Cap_press",1},{"H_Cap_usblack",1},{"H_Cap_police",1}, - {"H_HelmetCrew_B",1},{"H_HelmetCrew_O",1},{"H_HelmetCrew_I",1},{"H_PilotHelmetFighter_B",1},{"H_PilotHelmetFighter_O",1},{"H_PilotHelmetFighter_I",1}, - {"H_PilotHelmetHeli_B",1},{"H_PilotHelmetHeli_O",1},{"H_PilotHelmetHeli_I",1},{"H_CrewHelmetHeli_B",1},{"H_CrewHelmetHeli_O",1},{"H_CrewHelmetHeli_I",1},{"H_HelmetO_ocamo",1}, - {"H_HelmetLeaderO_ocamo",1},{"H_MilCap_ocamo",1},{"H_MilCap_mcamo",1},{"H_MilCap_oucamo",1},{"H_MilCap_rucamo",1},{"H_MilCap_gry",1},{"H_MilCap_dgtl",1}, - {"H_MilCap_blue",1},{"H_HelmetB_light_grass",1},{"H_HelmetB_light_snakeskin",1},{"H_HelmetB_light_desert",1},{"H_HelmetB_light_black",1},{"H_HelmetB_light_sand",1},{"H_BandMask_blk",1}, - {"H_BandMask_khk",1},{"H_BandMask_reaper",1},{"H_BandMask_demon",1},{"H_HelmetO_oucamo",1},{"H_HelmetLeaderO_oucamo",1},{"H_HelmetSpecO_ocamo",1},{"H_HelmetSpecO_blk",1}, - {"H_Bandanna_surfer",1},{"H_Bandanna_khk",1},{"H_Bandanna_khk_hs",1},{"H_Bandanna_cbr",1},{"H_Bandanna_sgg",1},{"H_Bandanna_sand",1},{"H_Bandanna_surfer_blk",1},{"H_Bandanna_surfer_grn",1}, - {"H_Bandanna_gry",1},{"H_Bandanna_blu",1},{"H_Bandanna_camo",1},{"H_Bandanna_mcamo",1},{"H_Shemag_khk",1},{"H_Shemag_tan",1},{"H_Shemag_olive",1},{"H_Shemag_olive_hs",1}, - {"H_ShemagOpen_khk",1},{"H_ShemagOpen_tan",1},{"H_Beret_blk",1},{"H_Beret_blk_POLICE",1},{"H_Beret_red",1},{"H_Beret_grn",1},{"H_Beret_grn_SF",1},{"H_Beret_brn_SF",1}, - {"H_Beret_ocamo",1},{"H_Beret_02",1},{"H_Beret_Colonel",1},{"H_Watchcap_blk",1},{"H_Watchcap_cbr",1},{"H_Watchcap_khk",1},{"H_Watchcap_camo",1},{"H_Watchcap_sgg",1}, - {"H_TurbanO_blk",1},{"H_Cap_marshal",1} - }; - - bagSlotsMax = 2; - bagSlotsMin = 1; - backpackLoot[] = // NOTE ABOUT BACKPACKS: it is recommended to keep amount for each bag at 1 because bags do not stack unlike weapons, items and magazines - { // The number after each classname means how much of that type will be put in crate. WARNING: DO NOT USE NUMBERS WITH DECIMALS. - {"B_AssaultPack_khk",1},{"B_AssaultPack_dgtl",1},{"B_AssaultPack_rgr",1},{"B_AssaultPack_sgg",1},{"B_AssaultPack_cbr",1}, - {"B_AssaultPack_mcamo",1},{"B_TacticalPack_rgr",1},{"B_TacticalPack_mcamo",1},{"B_TacticalPack_ocamo",1},{"B_TacticalPack_blk",1}, - {"B_TacticalPack_oli",1},{"B_FieldPack_khk",1},{"B_FieldPack_ocamo",1},{"B_FieldPack_oucamo",1},{"B_FieldPack_cbr",1}, - {"B_FieldPack_blk",1},{"B_Carryall_ocamo",1},{"B_Carryall_oucamo",1},{"B_Carryall_mcamo",1},{"B_Carryall_khk",1},{"B_Carryall_cbr",1}, - {"B_Parachute",1},{"B_FieldPack_oli",1},{"B_Carryall_oli",1},{"B_Kitbag_Base",1},{"B_Kitbag_cbr",1},{"B_Kitbag_mcamo",1}, - {"B_Kitbag_rgr",1},{"B_Kitbag_sgg",1},{"B_OutdoorPack_Base",1},{"B_OutdoorPack_blk",1},{"B_OutdoorPack_blu",1}, - {"B_OutdoorPack_tan",1} - }; - - blackListLoot[] = - { - "DemoCharge_Remote_Mag","SatchelCharge_Remote_Mag","ATMine_Range_Mag","ClaymoreDirectionalMine_Remote_Mag", - "APERSMine_Range_Mag","APERSBoundingMine_Range_Mag","SLAMDirectionalMine_Wire_Mag","APERSTripMine_Wire_Mag", - "ChainSaw","srifle_DMR_03_spotter_F" - }; - // End of loot crate configuration - }; - class aiGear - { // Configuration of what AI have - aiHeadGear[] = - { - "H_HelmetB","H_HelmetB_camo","H_HelmetB_paint","H_HelmetB_light","H_Booniehat_khk","H_Booniehat_oli","H_Booniehat_indp", - "H_Booniehat_mcamo","H_Booniehat_grn","H_Booniehat_tan","H_Booniehat_dirty","H_Booniehat_dgtl","H_Booniehat_khk_hs","H_HelmetB_plain_mcamo", - "H_HelmetB_plain_blk","H_HelmetSpecB","H_HelmetSpecB_paint1","H_HelmetSpecB_paint2","H_HelmetSpecB_blk","H_HelmetIA","H_HelmetIA_net", - "H_HelmetIA_camo","H_Helmet_Kerry","H_HelmetB_grass","H_HelmetB_snakeskin","H_HelmetB_desert","H_HelmetB_black","H_HelmetB_sand", - "H_Cap_red","H_Cap_blu","H_Cap_oli","H_Cap_headphones","H_Cap_tan","H_Cap_blk","H_Cap_blk_CMMG","H_Cap_brn_SPECOPS","H_Cap_tan_specops_US", - "H_Cap_khaki_specops_UK","H_Cap_grn","H_Cap_grn_BI","H_Cap_blk_Raven","H_Cap_blk_ION","H_Cap_oli_hs","H_Cap_press","H_Cap_usblack","H_Cap_police", - "H_HelmetCrew_B","H_HelmetCrew_O","H_HelmetCrew_I","H_PilotHelmetFighter_B","H_PilotHelmetFighter_O","H_PilotHelmetFighter_I", - "H_PilotHelmetHeli_B","H_PilotHelmetHeli_O","H_PilotHelmetHeli_I","H_CrewHelmetHeli_B","H_CrewHelmetHeli_O","H_CrewHelmetHeli_I","H_HelmetO_ocamo", - "H_HelmetLeaderO_ocamo","H_MilCap_ocamo","H_MilCap_mcamo","H_MilCap_oucamo","H_MilCap_rucamo","H_MilCap_gry","H_MilCap_dgtl", - "H_MilCap_blue","H_HelmetB_light_grass","H_HelmetB_light_snakeskin","H_HelmetB_light_desert","H_HelmetB_light_black","H_HelmetB_light_sand","H_BandMask_blk", - "H_BandMask_khk","H_BandMask_reaper","H_BandMask_demon","H_HelmetO_oucamo","H_HelmetLeaderO_oucamo","H_HelmetSpecO_ocamo","H_HelmetSpecO_blk", - "H_Bandanna_surfer","H_Bandanna_khk","H_Bandanna_khk_hs","H_Bandanna_cbr","H_Bandanna_sgg","H_Bandanna_sand","H_Bandanna_surfer_blk","H_Bandanna_surfer_grn", - "H_Bandanna_gry","H_Bandanna_blu","H_Bandanna_camo","H_Bandanna_mcamo","H_Shemag_khk","H_Shemag_tan","H_Shemag_olive","H_Shemag_olive_hs", - "H_ShemagOpen_khk","H_ShemagOpen_tan","H_Beret_blk","H_Beret_blk_POLICE","H_Beret_red","H_Beret_grn","H_Beret_grn_SF","H_Beret_brn_SF", - "H_Beret_ocamo","H_Beret_02","H_Beret_Colonel","H_Watchcap_blk","H_Watchcap_cbr","H_Watchcap_khk","H_Watchcap_camo","H_Watchcap_sgg", - "H_TurbanO_blk","H_Cap_marshal" - }; - aiUniforms[] = - { - "U_I_CombatUniform","U_I_CombatUniform_tshirt","U_I_CombatUniform_shortsleeve","U_I_pilotCoveralls", - "U_I_GhillieSuit","U_I_OfficerUniform","U_IG_Guerilla1_1","U_IG_Guerilla2_1","U_IG_Guerilla2_2","U_IG_Guerilla2_3", - "U_IG_Guerilla3_1","U_IG_Guerilla3_2","U_IG_leader","U_BG_Guerilla1_1","U_BG_Guerilla2_1","U_BG_Guerilla2_3", - "U_BG_Guerilla3_1","U_BG_Guerilla3_2","U_BG_leader","U_OG_Guerilla1_1","U_OG_Guerilla2_1","U_OG_Guerilla2_2", - "U_OG_Guerilla2_3","U_OG_Guerilla3_1","U_OG_Guerilla3_2","U_C_WorkerCoveralls","U_C_HunterBody_grn", - "U_C_HunterBody_brn","U_B_CTRG_1","U_B_CTRG_2","U_B_CTRG_3","U_B_survival_uniform","U_I_G_Story_Protagonist_F", - "U_I_G_resistanceLeader_F","U_IG_Guerrilla_6_1","U_BG_Guerrilla_6_1","U_OG_Guerrilla_6_1","U_B_FullGhillie_lsh", - "U_B_FullGhillie_sard","U_B_FullGhillie_ard","U_O_FullGhillie_lsh","U_O_FullGhillie_sard","U_O_FullGhillie_ard", - "U_I_FullGhillie_lsh","U_I_FullGhillie_sard","U_I_FullGhillie_ard" - }; - aiVests[] = - { - "V_PlateCarrier1_rgr","V_PlateCarrier2_rgr","V_PlateCarrier3_rgr","V_PlateCarrierGL_rgr","V_PlateCarrier1_blk", - "V_PlateCarrierSpec_rgr","V_Chestrig_khk","V_Chestrig_rgr","V_Chestrig_blk","V_Chestrig_oli","V_TacVest_khk", - "V_TacVest_brn","V_TacVest_oli","V_TacVest_blk","V_TacVest_camo","V_TacVest_blk_POLICE","V_TacVestIR_blk","V_TacVestCamo_khk", - "V_HarnessO_brn","V_HarnessOGL_brn","V_HarnessO_gry","V_HarnessOGL_gry","V_HarnessOSpec_brn","V_HarnessOSpec_gry", - "V_PlateCarrierIA1_dgtl","V_PlateCarrierIA2_dgtl","V_PlateCarrierIAGL_dgtl","V_RebreatherB","V_RebreatherIR","V_RebreatherIA", - "V_PlateCarrier_Kerry","V_PlateCarrierL_CTRG","V_PlateCarrierH_CTRG","V_I_G_resistanceLeader_F","V_Press_F" - }; - aiRifles[] = - { - "srifle_EBR_F","srifle_DMR_01_F","arifle_Katiba_F","arifle_Katiba_C_F","arifle_Katiba_GL_F","arifle_MXC_F", - "arifle_MX_F","arifle_MX_GL_F","arifle_MXM_F","arifle_SDAR_F","arifle_TRG21_F","arifle_TRG20_F", - "arifle_TRG21_GL_F","arifle_Mk20_F","arifle_Mk20C_F","arifle_Mk20_GL_F","arifle_Mk20_plain_F", - "arifle_Mk20C_plain_F","arifle_Mk20_GL_plain_F","SMG_01_F","SMG_02_F","hgun_PDW2000_F","arifle_MXM_Black_F", - "arifle_MX_GL_Black_F","arifle_MX_Black_F","arifle_MXC_Black_F","LMG_Mk200_F","arifle_MX_SW_F", - "LMG_Zafir_F","arifle_MX_SW_Black_F" - }; - aiBackpacks[] = - { - "B_AssaultPack_khk","B_AssaultPack_dgtl","B_AssaultPack_rgr","B_AssaultPack_sgg","B_AssaultPack_cbr", - "B_AssaultPack_mcamo","B_TacticalPack_rgr","B_TacticalPack_mcamo","B_TacticalPack_ocamo","B_TacticalPack_blk", - "B_TacticalPack_oli","B_FieldPack_khk","B_FieldPack_ocamo","B_FieldPack_oucamo","B_FieldPack_cbr", - "B_FieldPack_blk","B_Carryall_ocamo","B_Carryall_oucamo","B_Carryall_mcamo","B_Carryall_khk","B_Carryall_cbr", - "B_Parachute","B_FieldPack_oli","B_Carryall_oli","B_Kitbag_Base","B_Kitbag_cbr","B_Kitbag_mcamo", - "B_Kitbag_rgr","B_Kitbag_sgg","B_OutdoorPack_Base","B_OutdoorPack_blk","B_OutdoorPack_blu", - "B_OutdoorPack_tan" - }; - aiLaunchers[] = - { - "launch_NLAW_F","launch_RPG32_F","launch_B_Titan_F","launch_B_Titan_short_F" - }; - aiPistols[] = - { - "hgun_ACPC2_F","hgun_Rook40_F","hgun_P07_F","hgun_Pistol_heavy_01_F","hgun_Pistol_heavy_02_F" - }; - }; -}; - -#include "cpp\CfgPatches.cpp" -#include "cpp\CfgFunctions.cpp" diff --git a/exile_vemf_reloaded/cpp/CfgFunctions.cpp b/exile_vemf_reloaded/cpp/CfgFunctions.cpp deleted file mode 100644 index 7df119b..0000000 --- a/exile_vemf_reloaded/cpp/CfgFunctions.cpp +++ /dev/null @@ -1,24 +0,0 @@ -class CfgFunctions -{ - class exile_vemf_reloaded - { - tag = "VEMFr"; - class serverFunctions - { - file = "exile_vemf_reloaded\fn"; - class playerNear {}; - class checkSide {}; - class findPos {}; - class config {}; - class giveAmmo {}; - class giveWeaponItems {}; - class hc {}; - class launch { postInit = 1; }; - class loadInv {}; - class mines {}; - class spawnInvasionAI {}; - class spawnVEMFrAI {}; - class waitForPlayers {}; - }; - }; -}; diff --git a/exile_vemf_reloaded/cpp/CfgPatches.cpp b/exile_vemf_reloaded/cpp/CfgPatches.cpp deleted file mode 100644 index 6d120bd..0000000 --- a/exile_vemf_reloaded/cpp/CfgPatches.cpp +++ /dev/null @@ -1,12 +0,0 @@ -class CfgPatches -{ - class exile_vemf_reloaded - { - units[] = {}; - requiredAddons[] = {"exile_server","exile_vemf_reloaded_config"}; - fileName = "exile_vemf_reloaded.pbo"; - requiredVersion = 1.56; // VEMFr does not work on older versions due to use of the latest scripting commands - version = "0745.1"; // Do NOT change - author = "IT07"; - }; -}; diff --git a/exile_vemf_reloaded/fn/fn_checkSide.sqf b/exile_vemf_reloaded/fn/fn_checkSide.sqf deleted file mode 100644 index 64c5743..0000000 --- a/exile_vemf_reloaded/fn/fn_checkSide.sqf +++ /dev/null @@ -1,49 +0,0 @@ -/* - Author: IT07 - - Description: checks the side of given unit and returns it - - Params: - _this: STRING - unit classname - - Returns: SIDE - unit's side -*/ - -private ["_r","_f"]; -_f = getText (configFile >> "CfgVehicles" >> _this >> "faction"); -if not(_f isEqualTo "") then - { - scopeName "isNull"; - if (_f isEqualTo "BLU_G_F") then - { - _r = WEST; - breakOut "isNull"; - }; - if (_f isEqualTo "CIV_F") then - { - _r = civilian; - breakOut "isNull"; - }; - if (_f isEqualTo "IND_F") then - { - _r = independent; - breakOut "isNull"; - }; - if (_f isEqualTo "IND_G_F") then - { - _r = resistance; - breakOut "isNull"; - }; - if (_f isEqualTo "OPF_G_F") then - { - _r = EAST; - }; - } else - { - ["fn_checkSide", 0, format["Failed to find faction of %1", _this]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - -if not(isNil "_r") then - { - _r - }; diff --git a/exile_vemf_reloaded/fn/fn_config.sqf b/exile_vemf_reloaded/fn/fn_config.sqf deleted file mode 100644 index 4a5238b..0000000 --- a/exile_vemf_reloaded/fn/fn_config.sqf +++ /dev/null @@ -1,83 +0,0 @@ -/* - Author: IT07 - - Description: - gets config value of given var from VEMF config OR cfgPath - - Params: - method 1: - _this: STRING - SINGLE config value to get from root of CfgVemfReloaded - method 2: - _this select 0: ARRAY of STRINGS - MULTIPLE config values to get from root of VEMFconfig - method 3: - _this select 0: ARRAY of STRINGS - config path to get value from. Example: "root","subclass" - _this select 1: ARRAY of STRINGS - MULTIPLE config values to get from given path - - Returns: - ARRAY - Result -*/ - -private["_r","_chck","_v","_cfg"]; -_r = []; -_chck = - { - if (isNumber _cfg) then { _v = getNumber _cfg }; - if (isText _cfg) then { _v = getText _cfg }; - if (isArray _cfg) then { _v = getArray _cfg }; - if (isNil "_v") then { _v = "nil" }; - }; - -if (_this isEqualType "") then - { - if (isNull (configFile >> "CfgVemfReloadedOverrides" >> _this)) then - { - _cfg = configFile >> "CfgVemfReloaded" >> _this; - } else - { - _cfg = configFile >> "CfgVemfReloadedOverrides" >> _this; - }; - call _chck; - _r = _v; - }; - -if (_this isEqualType []) then - { - if (_this isEqualTypeArray [[],[]]) then - { - private ["_p","_b"]; - _p = _this select 0; - _b = - { - { - _cfg = _cfg >> _x; - } forEach _p; - }; - { - _cfg = configFile >> "CfgVemfReloadedOverrides"; - call _b; - _cfg = _cfg >> _x; - if (isNull _cfg) then - { - _cfg = configFile >> "CfgVemfReloaded"; - call _b; - _cfg = _cfg >> _x; - }; - call _chck; - _r pushBack _v; - } forEach (_this select 1); - }; - if (_this isEqualTypeArray [[]]) then - { - { - _cfg = configFile >> "CfgVemfReloadedOverrides" >> _x; - if (isNull _cfg) then - { - _cfg = configFile >> "CfgVemfReloaded" >> _x; - }; - call _chck; - _r pushBack _v; - } forEach (_this select 0); - }; - }; - -_r diff --git a/exile_vemf_reloaded/fn/fn_findPos.sqf b/exile_vemf_reloaded/fn/fn_findPos.sqf deleted file mode 100644 index 4e0d08b..0000000 --- a/exile_vemf_reloaded/fn/fn_findPos.sqf +++ /dev/null @@ -1,145 +0,0 @@ -/* - Author: IT07 - - Description: - can find a location or pos randomly on the map where there are no players - - Params: - _this select 0: STRING - Mode to use. Options: "loc" or "pos" - _this select 1: BOOLEAN - True if _pos needs to be a road - _this select 2: POSITION - Center for nearestLocations check - _this select 3: SCALAR - Distance in meters. Locations closer than given position will be excluded/included - _this select 4: SCALAR - Max prefered distance in meters from center. If not achievable, further dest will be selected - _this select 5: SCALAR - Distance in meters to check from _this2 for players - _this select 6: STRING (optional) - Exact config name of mission override settings to load - - Returns: - if mode == loc: LOCATION - if mode == pos: POSITION -*/ - -private [ - "_r","_this0","_this1","_this2","_this3","_this4","_this5","_this6", - "_s0","_s1","_s2","_s3", - "_ms0", - "_rad","_arr","_bin","_used","_fltr","_badNames","_maps","_bad", - "_pos","_xx","_pos","_hi","_low","_dist","_loc" -]; - -params [ - ["_this0", "", [""]], - ["_this1", false, [false]], - ["_this2", [], [[]]], - ["_this3", -1, [0]], - ["_this4", -1, [0]], - ["_this5", -1, [0]], - ["_this6", "", [""]] -]; - -([["nonPopulated","noMissionPos","missionDistance","missionList"]] call VEMFr_fnc_config) params ["_s0","_s1","_s2","_s3"]; -([[_this6],["skipDistanceReversed"]] call VEMFr_fnc_config) params ["_ms0"]; - -if (_this6 in _s3) then - { - _s0 = ([[_this6],["nonPopulated"]] call VEMFr_fnc_config) select 0; - }; - -_rad = 5000; -if (_this0 isEqualTo "loc") then - { - // Get a list of locations close to _this2 (position of player) - _arr = nearestLocations [_this2, ["CityCenter","Strategic","StrongpointArea","NameVillage","NameCity","NameCityCapital",if (_s0 isEqualTo 1) then {"nameLocal","Area","BorderCrossing","Hill","fakeTown","Name","RockArea","ViewPoint"}], if (_ms0 > 0) then {_ms0*2} else {worldSize}]; - if ((count _arr) > 0) then - { - _maps = "isClass _x" configClasses (configFile >> "CfgVemfReloaded" >> "locationBlackLists"); - { // Make a list of locationBlackLists's children - _maps set [_forEachIndex, toLower (configName _x)]; - } forEach _maps; - - if ((toLower worldName) in _maps) then - { - _bad = ([["locationBlackLists", worldName],["locations"]] call VEMFr_fnc_config) select 0 - } else - { - _bad = ([["locationBlackLists","Other"],["locations"]] call VEMFr_fnc_config) select 0 - }; - - _bin = []; - _used = uiNamespace getVariable ["VEMFrUsedLocs",[]]; - - _fltr = - { - scopeName "filter"; - _xx = _x; - { - if (((_x select 0) distance (locationPosition _xx)) <= (_x select 1)) then { _bin pushBack _xx; breakOut "filter" }; - } forEach _s1; - - if (_x in _used) then { _bin pushBack _x } - else - { - { - if (((locationPosition _xx) distance (locationPosition _x)) < _s2) then { _bin pushBack _xx; breakOut "filter" }; - } forEach _used; - }; - - if ((text _x) in _bad) then { _bin pushBack _x }; - }; - { - _dist = _this2 distance (locationPosition _x); - if (_ms0 > 0) then - { - if ((_dist <= (_ms0*2)) AND (_dist > _ms0)) then { call _fltr } - else { _bin pushBack _x }; - } else - { - if (_dist > _this3) then { call _fltr } - else { _bin pushBack _x }; - }; - } forEach _arr; - - { // Remove all invalid locations from _arr - _arr deleteAt (_arr find _x); - } forEach _bin; - - // Check what kind of distances we have - _low = []; // Closer then _this4 - _hi = []; // Further than _this4 - { - _dist = _this2 distance (locationPosition _x); - if (_dist > _this4) then { _hi pushBack _x }; - if (_dist <= _this4) then { _low pushBack _x }; - } forEach _arr; - - // Check if there are any prefered locations. If yes, randomly select one - if ((count _low) > 0) then - { - _loc = selectRandom _low; - _r = _loc; - _used pushBackUnique _loc; - } else - { - if ((count _hi) > 0) then - { - _loc = selectRandom _hi; - _r = _loc; - _used pushBackUnique _loc; - }; - }; - }; - }; - -if (_this0 isEqualTo "pos") then - { - for "_p" from 1 to 10 do - { - _pos = [_this2, _this3, -1, 2, 0, 50, 0] call BIS_fnc_findSafePos; - if _this1 then { _pos = position (nearRoads select 0) }; - if not([_pos, _this5] call VEMFr_fnc_playerNear) then - { - _r = _pos; - }; - }; - }; - -if not(isNil "_r") then { _r }; diff --git a/exile_vemf_reloaded/fn/fn_giveAmmo.sqf b/exile_vemf_reloaded/fn/fn_giveAmmo.sqf deleted file mode 100644 index 995baa8..0000000 --- a/exile_vemf_reloaded/fn/fn_giveAmmo.sqf +++ /dev/null @@ -1,64 +0,0 @@ -/* - Author: IT07 - - Description: - Adds magazines to given unit's vest/backpack if it flairTypes - - Params: - _this: ARRAY - _this select 0: OBJECT - unit to give ammo to - _this select 1: STRING - primaryWeapon classname - _this select 2: STRING - secondaryWeapon classname - _this select 3: STRING - handGunWeapon classname - - Returns: - BOOLEAN - true if successful -*/ - -private ["_r","_this0","_m"]; -params [ - ["_this0", objNull, [objNull]], - ["_this1", "", [""]], - ["_this2", "", [""]], - ["_this3", "", [""]] -]; - -_r = []; -if not(_this1 isEqualTo "") then - { - _m = selectRandom (getArray (configFile >> "CfgWeapons" >> _this1 >> "magazines")); - for "_l" from 1 to 5 do - { - if not(_this0 canAdd _m) exitWith {}; - _this0 addItem _m; - }; - _r pushBack true; - }; - -if not(_this2 isEqualTo "") then - { - if not((backPack _this0) isEqualTo "") then - { - _m = selectRandom (getArray (configFile >> "CfgWeapons" >> _this2 >> "magazines")); - for "_l" from 1 to 3 do - { - if not(_this0 canAdd _m) exitWith {}; - _this0 addItem _m; - }; - _r pushBack true; - }; - }; - -if not(_this3 isEqualTo "") then - { - _m = selectRandom (getArray (configFile >> "CfgWeapons" >> _this3 >> "magazines")); - for "_l" from 1 to 4 do - { - if not(_this0 canAdd _m) exitWith {}; - _this0 addItem _m; - }; - _r pushBack true; - }; - -if ((count _r) > 0) then { _r = true } else { _r = nil }; -_r diff --git a/exile_vemf_reloaded/fn/fn_giveWeaponItems.sqf b/exile_vemf_reloaded/fn/fn_giveWeaponItems.sqf deleted file mode 100644 index 923af40..0000000 --- a/exile_vemf_reloaded/fn/fn_giveWeaponItems.sqf +++ /dev/null @@ -1,64 +0,0 @@ -/* - Author: IT07 - - Description: - Gives random weapon attachments to given unit - - Params: - _this: ARRAY - _this select 0: OBJECT - unit - - Returns: BOOLEAN - true if no errors occured -*/ - -private ["_r","_p","_w","_a","_bin"]; -_u = param [0,objNull,[objNull]]; -if not (isNull _u) then - { - _p = [1,0,1,0,1,1,1,1,0,0,1,1,1]; - _w = primaryWeapon _u; - if ((selectRandom _p) isEqualTo 1) then - { // Select random scope - _a = getArray (configFile >> "CfgWeapons" >> _w >> "WeaponSlotsInfo" >> "CowsSlot" >> "compatibleItems"); - if (("allowTWS" call VEMFr_fnc_config) isEqualTo 0) then - { - _bin = []; - { - if (((toLower _x) find "tws") > -1) then - { - _bin pushBack _x; - }; - } forEach _a; - { - _a deleteAt (_a find _x); - } forEach _bin; - }; - _u addPrimaryWeaponItem (selectRandom _a); - }; - if ((selectRandom _p) isEqualTo 1) then - { // Select random muzzle - _u addPrimaryWeaponItem (selectRandom (getArray (configFile >> "CfgWeapons" >> _w >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems"))); - }; - if ((selectRandom _p) isEqualTo 1) then - { // Select random pointer - _u addPrimaryWeaponItem (selectRandom (getArray (configFile >> "CfgWeapons" >> _w >> "WeaponSlotsInfo" >> "PointerSlot" >> "compatibleItems"))); - }; - if ((selectRandom _p) isEqualTo 1) then - { // Select random bipod - _u addPrimaryWeaponItem (selectRandom (getArray (configFile >> "CfgWeapons" >> _w >> "WeaponSlotsInfo" >> "UnderbarrelSlot" >> "compatibleItems"))); - }; - - // handgunWeapon items - _w = handgunWeapon _u; - _p = [1,0,1,0,0,1,0,0,0,0,1,1,1]; - if ((selectRandom _p) isEqualTo 1) then - { // Select random scope - _u addHandgunItem (selectRandom (getArray (configFile >> "CfgWeapons" >> _w >> "WeaponSlotsInfo" >> "CowsSlot" >> "compatibleItems"))); - }; - if ((selectRandom _p) isEqualTo 1) then - { // Select random muzzle - _u addHandgunItem (selectRandom (getArray (configFile >> "CfgWeapons" >> _w >> "WeaponSlotsInfo" >> "MuzzleSlot" >> "compatibleItems"))); - }; - _r = true; - }; -_r diff --git a/exile_vemf_reloaded/fn/fn_hc.sqf b/exile_vemf_reloaded/fn/fn_hc.sqf deleted file mode 100644 index c0fb971..0000000 --- a/exile_vemf_reloaded/fn/fn_hc.sqf +++ /dev/null @@ -1,38 +0,0 @@ -/* - Author: IT07 - - Description: - selects a headless client with least (VEMFr) load - - Params: - None - - Returns: - OBJECT - the headless client -*/ - -private ["_r","_n","_arr","_gl"]; -_n = "headLessClientNames" call VEMFr_fnc_config; -_arr = []; -_gl = uiNamespace getVariable "VEMFrHcLoad"; -{ - if (((side _x) isEqualTo sideLogic) AND ((name _x) in _n)) then - { - _arr pushBackUnique _x; - if not(_x in (_gl select 0)) then - { - _i = (_gl select 0) pushBack _x; - (_gl select 1) set [_i, 0]; - }; - }; -} forEach playableUnits; - -_l = 99999; -{ - if (_x <= _l) then { _l = _x }; -} forEach (_gl select 1); - -_r = (_gl select 0) select ((_gl select 1) find _l); -(_gl select 1) set [(_gl select 0) find _r, _l + 1]; - -_r diff --git a/exile_vemf_reloaded/fn/fn_launch.sqf b/exile_vemf_reloaded/fn/fn_launch.sqf deleted file mode 100644 index 45d15ab..0000000 --- a/exile_vemf_reloaded/fn/fn_launch.sqf +++ /dev/null @@ -1,60 +0,0 @@ -/* - Author: IT07 - - Description: - launches VEMFr (You don't say?) -*/ - -if isNil "VEMFrHasStarted" then - { - VEMFrHasStarted = call compileFinal "true"; - ["Launcher", 2, format["/// STARTING VEMFr v%1 \\\", getText (configFile >> "CfgPatches" >> "exile_vemf_reloaded" >> "version")]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - uiNamespace setVariable ["VEMFrUsedLocs", []]; - uiNamespace setVariable ["VEMFrAttackedFlags", []]; - uiNamespace setVariable ["VEMFrHcLoad", [[],[]]]; - - [] spawn - { - if (("overridesToRPT" call VEMFr_fnc_config) isEqualTo 1) then - { - _r = configProperties [configFile >> "CfgVemfReloadedOverrides", "true", false]; - { - if (isClass _x) then - { - _c1 = configName _x; - _l1 = configProperties [configFile >> "CfgVemfReloadedOverrides" >> _c1, "true", false]; - { - if (isClass _x) then - { - _c2 = configName _x; - _l2 = configProperties [configFile >> "CfgVemfReloadedOverrides" >> _c1 >> _c2, "true", false]; - { - if not(isClass _x) then - { - ["overridesToRPT", 1, format["Overriding 'CfgVemfReloaded >> %1 >> %2 >> %3'", _c1, _c2, configName _x]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - } forEach _l2; - } else - { - ["overridesToRPT", 1, format["Overriding 'CfgVemfReloaded >> %1 >> %2", _c1, configName _x]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - } forEach _l1; - } else - { - ["overridesToRPT", 1, format["Overriding 'CfgVemfReloaded >> %1'", configName _x]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - } forEach _r; - }; - - _s = ["checkLoot","missionTimer","REMOTEguard","spawnStaticAI"]; - { - ExecVM format["exile_vemf_reloaded\sqf\%1.sqf", _x]; - } forEach _s; - - west setFriend [independent, 0]; - independent setFriend [west, 0]; - }; - } else - { - ["Launcher", 0, format["exile_vemf_reloaded FAILED to launch! VEMFrHasStarted (%1) is already defined!", VEMFrHasStarted]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; diff --git a/exile_vemf_reloaded/fn/fn_loadInv.sqf b/exile_vemf_reloaded/fn/fn_loadInv.sqf deleted file mode 100644 index d0d4e6d..0000000 --- a/exile_vemf_reloaded/fn/fn_loadInv.sqf +++ /dev/null @@ -1,211 +0,0 @@ -/* - Author: IT07 - - Description: - gives inventory to given units - - Param: - _this: ARRAY - _this select 0: ARRAY - units to load inventory for - _this select 1: STRING - must be in missionList - _this select 2: SCALAR - inventory mode - - Returns: - BOOLEAN - true if nothing failed -*/ - -private ["_r","_this0","_this1","_this2"]; -params [ - ["_this0", [], [[]]], - ["_this1", "", [""]], - ["_this2", 0, [0]] -]; - -if ((_this1 in ("missionList" call VEMFr_fnc_config)) OR (_this1 isEqualTo "Static")) then - { - scopeName "this"; - if (_this2 isEqualTo 0) then // "Militia" - { - private ["_s","_unifs","_headG","_vests","_packs","_lnchers","_rfles","_pstls","_ls","_lc","_a"]; - // Define settings - _s = [["aiGear"],["aiUniforms","aiHeadGear","aiVests","aiBackpacks","aiLaunchers","aiRifles","aiPistols"]] call VEMFr_fnc_config; - _s params ["_unifs","_headG","_vests","_packs","_lnchers","_rfles","_pstls"]; - { - private ["_xx","_g","_a","_pw","_hw"]; - _xx = _x; - // Strip it - removeAllWeapons _xx; - removeAllItems _xx; - if ("removeAllAssignedItems" call VEMFr_fnc_config isEqualTo 1) then - { - removeAllAssignedItems _xx; - }; - removeVest _xx; - removeBackpack _xx; - removeGoggles _xx; - removeHeadGear _xx; - if (count _unifs > 0) then - { - removeUniform _xx; - _g = selectRandom _unifs; - _xx forceAddUniform _g; // Give the poor naked guy some clothing :) - }; - if (_this1 isEqualTo "BaseAttack") then - { - _xx addBackpack "B_Parachute"; - }; - _g = selectRandom _headG; - _xx addHeadGear _g; - _g = selectRandom _vests; - _xx addVest _g; - _ls = [[_this1],["allowLaunchers","hasLauncherChance"]] call VEMFr_fnc_config; - if ((_ls select 0) isEqualTo 1) then - { - _lc = _ls select 1; - if ((_lc isEqualTo 100) OR ((ceil random (100 / _lc) isEqualTo (ceil random (100 / _lc))))) then - { - if not(_this1 isEqualTo "BaseAttack") then - { - _g = selectRandom _packs; - _xx addBackpack _g; - }; - _g = selectRandom _lnchers; - _a = getArray (configFile >> "cfgWeapons" >> _g >> "magazines"); - if (count _a > 2) then - { - _a resize 2; - }; - for "_i" from 0 to (2 + (round random 1)) do - { - _xx addMagazine (selectRandom _a); - }; - _xx addWeapon _g; - }; - }; - - // Select a random weapon - _pw = selectRandom _rfles; - _hw = selectRandom _pstls; - // Give this guy some ammo - _g = [_xx, _pw, "", _hw] call VEMFr_fnc_giveAmmo; - if (isNil "_g") then - { - ["fn_loadInv", 0, format["FAILED to give ammo to AI: %1", _xx]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - _xx addWeapon _pw; - _xx selectWeapon _pw; - _xx addWeapon _hw; - // Give this guy some weaponItems - _g = [_xx] call VEMFr_fnc_giveWeaponItems; - if not _g then - { - ["fn_loadInv", 0, format["FAILED to giveWeaponItems to %1", _xx]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - } forEach _this0; - _r = true; - breakOut "this"; - }; - - if (_this2 isEqualTo 1) then // Regular police - { - private ["_s","_headG","_vests","_unifs","_rfles","_pstls","_packs"]; - _s = [["policeConfig"],["headGear","vests","uniforms","rifles","pistols","backpacks"]] call VEMFr_fnc_config; - _s params ["_headG","_vests","_unifs","_rfles","_pstls","_packs"]; - { - private ["_xx","_g","_pw","_hw"]; - _xx = _x; - // Strip it - removeAllWeapons _xx; - removeAllItems _xx; - if ("removeAllAssignedItems" call VEMFr_fnc_config isEqualTo 1) then - { - removeAllAssignedItems _xx; - }; - removeUniform _xx; - removeVest _xx; - removeBackpack _xx; - removeGoggles _xx; - removeHeadGear _xx; - _g = selectRandom _headG; - _xx addHeadGear _g; - _g = selectRandom _vests; - _xx addVest _g; - _g = selectRandom _unifs; - _xx forceAddUniform _g; - - _pw = selectRandom _rfles; - _hw = selectRandom _pstls; - // Give this guy some ammo - _g = [_xx, _pw, "", _hw] call VEMFr_fnc_giveAmmo; - if (isNil "_g") then - { - ["fn_loadInv", 0, format["FAILED to give ammo to AI: %1", _xx]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - _xx addWeapon _pw; - _xx selectWeapon _pw; - _xx addWeapon _hw; - if not(_this1 isEqualTo "BaseAttack") then - { - _xx addBackPack (selectRandom _packs); - } else - { - _xx addBackpack "B_Parachute"; - }; - // Give this guy some weaponItems - _g = [_xx] call VEMFr_fnc_giveWeaponItems; - if (isNil "_g") then - { - ["fn_loadInv", 0, format["FAILED to giveWeaponItems to %1", _xx]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - } forEach _this0; - _r = true; - breakOut "this"; - }; - - if (_this2 isEqualTo 2) then // S.W.A.T. - { - private ["_s","_rfles","_pstls"]; - _s = [["policeConfig"],["rifles","pistols"]] call VEMFr_fnc_config; - _s params ["_rfles","_pstls"]; - { - private ["_xx","_g","_pw","_hw"]; - _xx = _x; - // Strip it - if ("removeAllAssignedItems" call VEMFr_fnc_config isEqualTo 1) then { removeAllAssignedItems _xx }; - removeAllItems _xx; - removeAllWeapons _xx; - removeBackpack _xx; - removeGoggles _xx; - removeHeadGear _xx; - removeUniform _xx; - removeVest _xx; - _xx addHeadGear "H_HelmetB_light_black"; - _xx addGoggles "G_Balaclava_blk"; - _xx addVest "V_PlateCarrier2_blk"; - _xx forceAddUniform "Exile_Uniform_ExileCustoms"; - - _pw = selectRandom _rfles; - _hw = selectRandom _pstls; - // Give this guy some ammo - _g = [_xx, _pw, "", _hw] call VEMFr_fnc_giveAmmo; - if (isNil "_g") then - { - ["fn_loadInv", 0, format["FAILED to give ammo to AI: %1", _xx]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - _xx addWeapon _pw; - _xx selectWeapon _pw; - _xx addWeapon _hw; - - if (_this1 isEqualTo "BaseAttack") then { _xx addBackpack "B_Parachute" }; - - // Give this guy some weaponItems - _g = [_xx] call VEMFr_fnc_giveWeaponItems; - if (isNil "_g") then - { - ["fn_loadInv", 0, format["FAILED to giveWeaponItems to %1", _xx]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - } forEach _this0; - _r = true; - }; - }; -_r diff --git a/exile_vemf_reloaded/fn/fn_mines.sqf b/exile_vemf_reloaded/fn/fn_mines.sqf deleted file mode 100644 index 049c54f..0000000 --- a/exile_vemf_reloaded/fn/fn_mines.sqf +++ /dev/null @@ -1,47 +0,0 @@ -/* - Author: IT07 - - Description: - places mines around given position within given radius - - Params: - _this select 0: POSITION - center of area to place mines around - _this select 1: SCALAR - the minimum distance - _this select 2: SCALAR - the maximum distance (must be higher than minimum of course) - _this select 3: STRING - exact config name of mission - - Returns: - ARRAY - array containing all mine objects -*/ - -scopeName "mines"; -private ["_r","_this0","_this1","_this2","_this3","_s","_ms","_a","_mt"]; -params [ - ["_this0",[],[[]]], - ["_this1",-1,[0]], - ["_this2",-1,[0]], - ["_this3", "", [""]] -]; - -_s = [[_this3],["mines","minesAmount"]] call VEMFr_fnc_config; -_s params ["_ms","_a"]; -if ((_this3 in ("missionList" call VEMFr_fnc_config)) AND (_ms > 0) AND ((count _this0) isEqualTo 3) AND (_this1 > -1) AND (_this2 > _this1) AND (_a > -1)) then - { - if (_ms isEqualTo 1) then { _mt = ["ATMine"] }; - if (_ms isEqualTo 2) then { _mt = ["APERSMine"] }; - if (_ms isEqualTo 3) then { _mt = ["ATMine","APERSMine"] }; - if (_ms < 1 OR _ms > 3) then - { - ["fn_mines", 0, "Invalid mines mode!"] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - breakOut "mines" - }; - _r = []; - ["fn_mines", 1, format["Placing %1 mines at %2", _a, _this0]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - for "_m" from 1 to _a do - { - _r pushBack (createMine [selectRandom _mt, ([_this0, _this1, _this2, 2, 0, 20, 0] call BIS_fnc_findSafePos), [], 0]); - uiSleep 0.1; - }; - }; - -_r diff --git a/exile_vemf_reloaded/fn/fn_playerNear.sqf b/exile_vemf_reloaded/fn/fn_playerNear.sqf deleted file mode 100644 index f5013a7..0000000 --- a/exile_vemf_reloaded/fn/fn_playerNear.sqf +++ /dev/null @@ -1,33 +0,0 @@ -/* - Author: IT07 - - Description: - checks for players within given distance of given location/position - - Params: - _this select 0: POSITION - center of area to check around - _this select 1: SCALAR - radius around the position to check for players - - Returns: - BOOL - true if player(s) found -*/ - -private ["_r","_this0","_this1"]; -// By default, we assume that there are no players close. The distance check below should prove otherwise if there are players close -_r = false; -params [ - ["_this0", [], [[]]], - ["_this1", -1, [0]] -]; -if (((count _this0) isEqualTo 3) AND (_this1 > -1)) then - { - scopeName "find"; - { - if ((isPlayer _x) AND ((speed _x) < 250)) then - { - if ((position _x distance _this0) < _this1) then { _r = true; breakOut "find" }; - }; - } forEach allPlayers; - }; - -_r diff --git a/exile_vemf_reloaded/fn/fn_spawnInvasionAI.sqf b/exile_vemf_reloaded/fn/fn_spawnInvasionAI.sqf deleted file mode 100644 index 89db330..0000000 --- a/exile_vemf_reloaded/fn/fn_spawnInvasionAI.sqf +++ /dev/null @@ -1,183 +0,0 @@ -/* - Author: IT07 - - Description: - spawns AI using given _this0 and unit/group count. - - Params: - _this select 0: POSITION - where to spawn the units around - _this select 1: SCALAR - how many groups to spawn - _this select 2: SCALAR - how many units to put in each group - _this select 3: SCALAR - AI mode - _this select 4: STRING - exact config name of mission - _this select 5: SCALAR (optional) - maximum spawn distance from center - - Returns: - ARRAY format [[groups],[50cals]] -*/ - -private ["_r","_this0","_this1","_this2","_this3","_this4","_this5"]; -params [ - ["_this0", [], [[]]], - ["_this1", 1, [0]], - ["_this2", 1, [0]], - ["_this3", -1, [0]], - ["_this4", "", [""]], - ["_this5", 175, [0]] -]; - -if (_this4 in ("missionList" call VEMFr_fnc_config)) then - { - private [ - "_grps","_s","_ccrcy","_mShk","_mSpd","_stmna","_sptDst","_sptTme", - "_crge","_rldSpd","_cmmndng","_gnrl","_notTheseHouses","_gdHss","_nHss","_cl50s","_nts" - ]; - _r = [[],[]]; - _grps = []; - _s = [["aiSkill", ([["aiSkill"],["difficulty"]] call VEMFr_fnc_config) select 0],["accuracy","aimingShake","aimingSpeed","endurance","spotDistance","spotTime","courage","reloadSpeed","commanding","general"]] call VEMFr_fnc_config; - _s params ["_ccrcy","_mShk","_mSpd","_stmna","_sptDst","_sptTme","_crge","_rldSpd","_cmmndng","_gnrl"]; - _notTheseHouses = "housesBlackList" call VEMFr_fnc_config; - _gdHss = []; - { // Filter the houses that are too small for one group - if not(typeOf _x in _notTheseHouses) then - { - if ([_x, _this2] call BIS_fnc_isBuildingEnterable) then - { - _gdHss pushBack _x; - }; - }; - } forEach (nearestTerrainObjects [_this0,["House"],_this5]); - - _gdHss = _gdHss call BIS_fnc_arrayShuffle; - _nHss = false; - if (count _gdHss < _this1) then - { - _nHss = true; - }; - - _cl50s = ([["DynamicLocationInvasion"],["cal50s"]] call VEMFr_fnc_config) select 0; - - _nts = []; // Define units array. the for loops below will fill it with units - for "_g" from 1 to _this1 do // Spawn Groups near Position - { - if not _nHss then - { - if (count _gdHss < 1) then - { - _nHss = true - }; - }; - - private ["_grp","_hs","_hsPstns","_plcd50","_i"]; - _grp = createGroup (("unitClass" call VEMFr_fnc_config) call VEMFr_fnc_checkSide); - (_r select 0) pushBack _grp; - _grp allowFleeing 0; - if not _nHss then - { - _hs = selectRandom _gdHss; - _hsID = _gdHss find _hs; - _gdHss deleteAt _hsID; - _hsPstns = [_hs] call BIS_fnc_buildingPositions; - }; - - _plcd50 = false; - for "_u" from 1 to _this2 do - { - private ["_spwnPs","_hmg","_nt"]; - if _nHss then - { - _spwnPs = [_this0,20,_this5,1,0,200,0] call BIS_fnc_findSafePos; // Find Nearby Position - } else - { - _spwnPs = selectRandom _hsPstns; - if not _plcd50 then - { - _plcd50 = true; - if (_cl50s > 0) then - { - _hmg = createVehicle ["O_HMG_01_high_F", _spwnPs, [], 0, "CAN_COLLIDE"]; - _hmg setVehicleLock "LOCKEDPLAYER"; - (_r select 1) pushBack _hmg; - }; - }; - }; - - _nt = _grp createUnit [("unitClass" call VEMFr_fnc_config), _spwnPs, [], 0, "CAN_COLLIDE"]; // Create Unit There - if ((not _nHss) AND (_cl50s > 0)) then - { - if not(isNil "_hmg") then - { - if not(isNull _hmg) then - { - _nt moveInGunner _hmg; - _hmg = nil; - _cl50s = _cl50s - 1; - }; - }; - _hsPstns deleteAt (_hsPstns find _spwnPs); - }; - - _nt addMPEventHandler ["mpkilled","if (isDedicated) then { [[(_this select 0),(name(_this select 0))],[(_this select 1),(name(_this select 1))]] ExecVM 'exile_vemf_reloaded\sqf\aiKilled.sqf' }"]; - - // Set skills - _nt setSkill ["aimingAccuracy", _ccrcy]; - _nt setSkill ["aimingShake", _mShk]; - _nt setSkill ["aimingSpeed", _mSpd]; - _nt setSkill ["endurance", _stmna]; - _nt setSkill ["spotDistance", _sptDst]; - _nt setSkill ["spotTime", _sptTme]; - _nt setSkill ["courage", _crge]; - _nt setSkill ["reloadSpeed", _rldSpd]; - _nt setSkill ["commanding", _cmmndng]; - _nt setSkill ["general", _gnrl]; - - _nt enableAI "TARGET"; - _nt enableAI "AUTOTARGET"; - _nt enableAI "MOVE"; - _nt enableAI "ANIM"; - _nt enableAI "TEAMSWITCH"; - _nt enableAI "FSM"; - _nt enableAI "AIMINGERROR"; - _nt enableAI "SUPPRESSION"; - _nt enableAI "CHECKVISIBLE"; - _nt enableAI "COVER"; - _nt enableAI "AUTOCOMBAT"; - _nt enableAI "PATH"; - }; - - _i = [units _grp, _this4, _this3] call VEMFr_fnc_loadInv; // Load the AI's inventory - if isNil "_i" then - { - ["fn_spawnInvasionAI", 0, "failed to load AI's inventory..."] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - _grps pushBack _grp; // Push it into the _grps array - }; - - if (((count _grps) isEqualTo _this1) AND _nHss) then - { - private ["_wypnts","_wp","_cyc"]; - _wypnts = - [ - [(_this0 select 0), (_this0 select 1)+50, 0], - [(_this0 select 0)+50, (_this0 select 1), 0], - [(_this0 select 0), (_this0 select 1)-50, 0], - [(_this0 select 0)-50, (_this0 select 1), 0] - ]; - { // Make them Patrol - for "_z" from 1 to (count _wypnts) do - { - _wp = _x addWaypoint [(_wypnts select (_z-1)), 10]; - _wp setWaypointType "SAD"; - _wp setWaypointCompletionRadius 20; - }; - _cyc = _x addWaypoint [_this0,10]; - _cyc setWaypointType "CYCLE"; - _cyc setWaypointCompletionRadius 20; - } forEach _grps; - }; - } else - { - ["fn_spawnInvasionAI",0,format["'%1' is not in missionList", _this4]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - -_r diff --git a/exile_vemf_reloaded/fn/fn_spawnVEMFrAI.sqf b/exile_vemf_reloaded/fn/fn_spawnVEMFrAI.sqf deleted file mode 100644 index 4bfd1f6..0000000 --- a/exile_vemf_reloaded/fn/fn_spawnVEMFrAI.sqf +++ /dev/null @@ -1,90 +0,0 @@ -/* - Author: original by Vampire, completely rewritten by IT07 - - Description: - spawns VEMFr AI using given _this0 and unit/group count. Handles their inventory and transfers them to a client - - Params: - _this select 0: POSITION - where to spawn the units around - _this select 1: SCALAR - how many groups to spawn - _this select 2: SCALAR - how many units to put in each group - _this select 3: SCALAR - AI mode - _this select 4: STRING - exact config name of mission - _this select 5: SCALAR - (optional) altitude to create units at - _this select 6: SCALAR - (optional) spawn radius - - Returns: - ARRAY with group(s) -*/ - -private ["_r","_allUnits","_this0","_this1","_this2","_this3","_this4"]; -_allUnits = []; -params [ - ["_this0", [], [[]]], - ["_this1", 1, [0]], - ["_this2", 1, [0]], - ["_this3", -1, [0]], - ["_this4", "", [""]], - ["_this5", 0, [0]], - ["_this6", 20, [0]] -]; - -if ((_this4 in ("missionList" call VEMFr_fnc_config)) OR (_this4 isEqualTo "Static")) then - { - scopeName "outer"; - _r = []; - _this0 = [_this0 select 0, _this0 select 1, _this5]; - private ["_s","_ccrcy","_mshk","_mspd","_stmn","_sptDst","_sptTm","_crg","_rldSpd","_cmmndng","_gnrl","_i","_grp","_unit"]; - - _s = [["aiSkill", ([["aiSkill"],["difficulty"]] call VEMFr_fnc_config) select 0],["accuracy","aimingShake","aimingSpeed","endurance","spotDistance","spotTime","courage","reloadSpeed","commanding","general"]] call VEMFr_fnc_config; - _s params ["_ccrcy","_mshk","_mspd","_stmn","_sptDst","_sptTm","_crg","_rldSpd","_cmmndng","_gnrl"]; - for "_g" from 1 to _this1 do - { - _grp = createGroup (("unitClass" call VEMFr_fnc_config) call VEMFr_fnc_checkSide); - _grp allowFleeing 0; - for "_u" from 1 to _this2 do - { - _unit = _grp createUnit [("unitClass" call VEMFr_fnc_config), _this0, [], _this6, "FORM"]; // Create Unit There - _allUnits pushBack _unit; - _unit addMPEventHandler ["mpkilled","if (isDedicated) then { [[(_this select 0),(name(_this select 0))],[(_this select 1),(name(_this select 1))]] ExecVM 'exile_vemf_reloaded\sqf\aiKilled.sqf' }"]; - // Set skills - _unit setSkill ["aimingAccuracy", _ccrcy]; - _unit setSkill ["aimingShake", _mshk]; - _unit setSkill ["aimingSpeed", _mspd]; - _unit setSkill ["endurance", _stmn]; - _unit setSkill ["spotDistance", _sptDst]; - _unit setSkill ["spotTime", _sptTm]; - _unit setSkill ["courage", _crg]; - _unit setSkill ["reloadSpeed", _rldSpd]; - _unit setSkill ["commanding", _cmmndng]; - _unit setSkill ["general", _gnrl]; - - _unit enableAI "TARGET"; - _unit enableAI "AUTOTARGET"; - _unit enableAI "MOVE"; - _unit enableAI "ANIM"; - _unit enableAI "TEAMSWITCH"; - _unit enableAI "FSM"; - _unit enableAI "AIMINGERROR"; - _unit enableAI "SUPPRESSION"; - _unit enableAI "CHECKVISIBLE"; - _unit enableAI "COVER"; - _unit enableAI "AUTOCOMBAT"; - _unit enableAI "PATH"; - }; - _r pushBack _grp; - }; - - _i = [_allUnits, _this4, _this3] call VEMFr_fnc_loadInv; // Load the AI's inventory - if (isNil "_i") then - { - _r = nil; - ["fn_spawnVEMFrAI", 0, "failed to load AI's inventory..."] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - breakOut "outer"; - }; - } else - { - ["fn_spawnVEMFrAI", 0, format["'%1' is not in missionList or is not equal to 'Static'", _this4]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - -_r diff --git a/exile_vemf_reloaded/fn/fn_waitForPlayers.sqf b/exile_vemf_reloaded/fn/fn_waitForPlayers.sqf deleted file mode 100644 index 204fb64..0000000 --- a/exile_vemf_reloaded/fn/fn_waitForPlayers.sqf +++ /dev/null @@ -1,36 +0,0 @@ -/* - Author: IT07 - - Description: - fn_waitForPlayers - waits for player to be nearby given pos - - Params: - _this select 0: POSITION - center of area to check for players - _this select 1: SCALAR - radius to check around POSITION - - Returns: - BOOL - true if there is a player present -*/ - -private ["_r","_this0","_this1"]; -params [ - ["_this0", [], [[]]], - ["_this1", -1, [0]] -]; - -_r = false; -if ([_this0, _this1] call VEMFr_fnc_playerNear) then - { - _r = true; - } else - { - private ["_t","_tot"]; - _t = round time; - _tot = ("timeOutTime" call VEMFr_fnc_config)*60; - waitUntil { if (([_this0, _this1] call VEMFr_fnc_playerNear) OR (round time - _t > _tot)) then {true} else {uiSleep 4; false} }; - if ([_this0, _this1] call VEMFr_fnc_playerNear) then - { - _r = true; - }; - }; -_r diff --git a/exile_vemf_reloaded/missions/BaseAttack.sqf b/exile_vemf_reloaded/missions/BaseAttack.sqf deleted file mode 100644 index 2824b2c..0000000 --- a/exile_vemf_reloaded/missions/BaseAttack.sqf +++ /dev/null @@ -1,131 +0,0 @@ -/* - Author: IT07 - - Description: - A simple mission for VEMFr that sends a chopper to a player's territory and paradrops all units inside -*/ - -VEMFrMissionCount = VEMFrMissionCount + 1; -_mn = param [0, "", [""]]; -if (isNil "VEMFrAttackCount") then { VEMFrAttackCount = 0 }; -VEMFrAttackCount = VEMFrAttackCount + 1; -_s = [[_mn],["maxAttacks","aiSetup","minimumLevel"]] call VEMFr_fnc_config; -_s params ["_s0","_s1","_s2"]; -if (VEMFrAttackCount <= _s0) then -{ - scopeName "outer"; - if (_mn in ("missionList" call VEMFr_fnc_config)) then - { - if (((_s1 select 0) > 0) AND ((_s1 select 1) > 0)) then - { - _hst = uiNamespace getVariable ["VEMFrAttackedFlags",[]]; - _objs = []; - { - if (((speed _x) < 25) AND ((vehicle _x) isEqualTo _x)) then - { - { - if (not(_x in _hst) AND ((_x getVariable ["ExileTerritoryLevel",0]) > _s2)) then { _objs pushBack _x }; - } forEach (nearestObjects [position _x, ["Exile_Construction_Flag_Static"], 150]); - }; - } forEach allPlayers; - - if (count _objs > 0) then - { - _flg = selectRandom _objs; - _hst pushBack _flg; - _pos = position _flg; - _nrPlyr = selectRandom (nearestObjects [_pos, ["Exile_Unit_Player"], 150]); - if not(isNil "_nrPlyr") then - { - _flgNm = _flg getVariable ["exileterritoryname", "ERROR: UNKNOWN NAME"]; - _prGrps = [_pos, _s1 select 0, _s1 select 1, ([[_mn],["aiMode"]] call VEMFr_fnc_config select 0), _mn, 1000 + (random 1000), 150] call VEMFr_fnc_spawnVEMFrAI; - if not(isNil "_prGrps") then - { - _ntCnt = 0; - { - if (count (units _x) isEqualTo (_s1 select 1)) then - { - _ntCnt = _ntCnt + (count(units _x)); - }; - } forEach _prGrps; - if (_ntCnt isEqualTo ((_s1 select 0) * (_s1 select 1))) then - { - _wyPnts = []; - _nts = []; - { - _wp = _x addWaypoint [_pos, 50, 1]; - _wp setWaypointBehaviour "COMBAT"; - _wp setWaypointCombatMode "RED"; - _wp setWaypointCompletionRadius 10; - _wp setWaypointFormation "DIAMOND"; - _wp setWaypointSpeed "FULL"; - _wp setWaypointType "SAD"; - _x setCurrentWaypoint _wp; - _wyPnts pushback _wp; - { - _nts pushback _x; - } forEach (units _x); - [_x] ExecVM "exile_vemf_reloaded\sqf\signAI.sqf"; - } forEach _prGrps; - _plyrs = nearestObjects [_pos, ["Exile_Unit_Player"], 275]; - [-1, "NEW BASE ATTACK", format["A para team is on the way to %1 @ %2's location!", _flgNm, name _nrPlyr], _plyrs] ExecVM "exile_vemf_reloaded\sqf\notificationToClient.sqf"; - ["BaseAttack", 1, format["A para team is on the way to %1 @ %2's location!", _flgNm, name _nrPlyr]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - - while {true} do - { - scopeName "loop"; - _ddCnt = 0; - { - if (damage _x isEqualTo 1 OR isNull _x) then - { - _ddCnt = _ddCnt + 1; - }; - } forEach _nts; - if (_ddCnt isEqualTo _ntCnt) then - { - breakOut "loop"; - } else - { - uiSleep 4; - }; - }; - _plyrs = nearestObjects [_pos, ["Exile_Unit_Player"], 275]; - [-1, "DEFEATED", format["Base attack on %1 has been defeated!", _flgNm], _plyrs] ExecVM "exile_vemf_reloaded\sqf\notificationToClient.sqf"; - breakOut "outer"; - } else - { - { - { - deleteVehicle _x; - } forEach (units _x); - } forEach _prGrps; - ["BaseAttack", 0, format["Incorrect amount of total units (%1). Should be %2", _ntCnt, (_s1 select 0) * (_s1 select 1)]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - breakOut "outer"; - }; - } else - { - ["BaseAttack", 0, format["Incorrect spawned group count (%1). Should be %2", count _prGrps, _s1 select 0]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - breakOut "outer"; - }; - } else - { - _hst deleteAt (_hst find _flg); - ["BaseAttack", 0, "Can not find player near flag!"] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - breakOut "outer"; - }; - } else - { - breakOut "outer"; - }; - } else - { - ["BaseAttack", 0, format["invalid aiSetup setting! (%1)", _s1]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - breakOut "outer"; - }; - } else - { - ["BaseAttack", 0, format["Failed to start mission. Given _mn (%1) is not in active missionList", _mn]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; -}; -VEMFrAttackCount = VEMFrAttackCount - 1; -VEMFrMissionCount = VEMFrMissionCount - 1; diff --git a/exile_vemf_reloaded/missions/DynamicLocationInvasion.sqf b/exile_vemf_reloaded/missions/DynamicLocationInvasion.sqf deleted file mode 100644 index 56bb329..0000000 --- a/exile_vemf_reloaded/missions/DynamicLocationInvasion.sqf +++ /dev/null @@ -1,380 +0,0 @@ -/* - DynamicLocationInvasion by IT07 -*/ - -VEMFrMissionCount = VEMFrMissionCount + 1; -if isNil "VEMFrInvasionCount" then { VEMFrInvasionCount = 0; }; -VEMFrInvasionCount = VEMFrInvasionCount + 1; -_this0 = param [0, "", [""]]; -if (VEMFrInvasionCount <= (([[_this0],["maxInvasions"]] call VEMFr_fnc_config) select 0)) then -{ - scopeName "outer"; - // Define the settings - _ms = [ - [_this0], - ["groupCount","groupUnits","maxDistancePrefered","skipDistance","useMarker","markCrateVisual","markCrateOnMap","announce","streetLights","streetLightsRestore","streetLightsRange","allowCrateLift","allowRepeat","randomModes","spawnCrateFirst","mines","flairTypes","smokeTypes","minesCleanup","skipDistanceReversed"] - ] call VEMFr_fnc_config; - _ms params [ - "_ms0","_ms1","_ms2","_ms3","_ms4","_ms5","_ms6","_ms7","_ms8","_ms9","_ms10","_ms11","_ms12","_ms13","_ms14","_ms15","_ms16","_ms17","_ms18","_ms19" - ]; - - ([[_this0,"crateParachute"],["enabled","altitude"]] call VEMFr_fnc_config) params ["_cp0","_cp1"]; - - _l = ["loc", false, position (selectRandom allPlayers), if (_ms19 > 0) then {_ms19} else {_ms3}, _ms2, if (_ms19 > 0) then {_ms19} else {_ms3}, _this0] call VEMFr_fnc_findPos; - if not(isNil "_l") then - { - _ln = text _l; - _lp = position _l; - if (_ln isEqualTo "") then { _ln = "Area"; }; - [_this0, 1, format["Invading %1...", _ln]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - - _m = "aiMode" call VEMFr_fnc_config; - if (_ms13 isEqualTo 1) then { _m = selectRandom [0,1,2] }; - if (_ms7 isEqualTo 1) then - { - if (_m isEqualTo 0) then - { - [_m, "NEW INVASION", format["Raiders have invaded %1 @ %2", _ln, mapGridPosition _lp]] ExecVM "exile_vemf_reloaded\sqf\notificationToClient.sqf"; - }; - if (_m isEqualTo 1) then - { - [_m, "NEW POLICE RAID", format["%1 Police forces are now controlling %2 @ %3", worldName, _ln, mapGridPosition _lp]] ExecVM "exile_vemf_reloaded\sqf\notificationToClient.sqf"; - }; - if (_m isEqualTo 2) then - { - [_m, "NEW S.W.A.T. RAID", format["%1 S.W.A.T. teams are now raiding %2 @ %3", worldName, _ln, mapGridPosition _lp]] ExecVM "exile_vemf_reloaded\sqf\notificationToClient.sqf"; - }; - }; - - private "_mrkr"; - if (_ms4 isEqualTo 1) then - { // Create/place the marker if enabled - _mrkr = createMarker [format["VEMFr_DynaLocInva_ID%1", random 9000], _lp]; - _mrkr setMarkerShape "ICON"; - _mrkr setMarkerType "o_unknown"; - if (_m < 0 OR _m > 2) then - { - ["DynamicLocationInvasion", 0, format["Invalid aiMode (%1) detected, failed to setMarkerColor!", _aiMode]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - breakOut "outer"; - }; - if (_m isEqualTo 0) then - { - _mrkr setMarkerColor "ColorEAST"; - }; - if (_m isEqualTo 1) then - { - _mrkr setMarkerColor "ColorWEST"; - }; - if (_m isEqualTo 2) then - { - _mrkr setMarkerColor "ColorBlack"; - }; - }; - - // If enabled, kill all the lights - if (_ms8 isEqualTo 0) then - { - { - if (damage _x < 0.95) then - { - _x setDamage 0.95; - uiSleep 0.1; - }; - } forEach (nearestObjects [_lp, ["Lamps_Base_F","PowerLines_base_F","Land_PowerPoleWooden_L_F"], _ms10]); - }; - - private "_crate"; - _dSpwnCrt = { - // Choose a box - _bx = selectRandom (([[_this0],["crateTypes"]] call VEMFr_fnc_config) select 0); - _ps = [_lp, 0, 200, 0, 0, 300, 0] call bis_fnc_findSafePos; - if (_cp0 > 0) then - { - _cht = createVehicle ["I_Parachute_02_F", _ps, [], 0, "FLY"]; - _cht setPos [getPos _cht select 0, getPos _cht select 1, _cp1]; - _cht enableSimulationGlobal true; - - if not(isNull _cht) then - { - _crate = createVehicle [_bx, getPos _cht, [], 0, "NONE"]; - _crate allowDamage false; - _crate enableSimulationGlobal true; - _crate attachTo [_cht, [0,0,0]]; - [_this0, 1, format ["Crate parachuted at: %1 / Grid: %2", (getPosATL _crate), mapGridPosition (getPosATL _crate)]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - [_crate, _ln, _lp] ExecVM "exile_vemf_reloaded\sqf\loadLoot.sqf"; - waitUntil { if (((getPos _crate) select 2) < 7) then {true} else {uiSleep 1; false} }; - detach _crate; - } else - { - [_this0, 0, "Where is the chute??"] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - } else - { - _crate = createVehicle [_bx, _ps, [], 0, "NONE"]; - _crate allowDamage false; - [_crate, _ln, _lp] ExecVM "exile_vemf_reloaded\sqf\loadLoot.sqf"; - }; - - if (_ms11 > 0) then - { - _crate enableRopeAttach false; - } else - { - _crate enableRopeAttach true; - }; - }; - - if ([_lp, 800] call VEMFr_fnc_waitForPlayers) then - { - _spwnd = [_lp, ((_ms0 select 0) + round random ((_ms0 select 1) - (_ms0 select 0))), ((_ms1 select 0) + round random ((_ms1 select 1) - (_ms1 select 0))), _m, _this0, 200] call VEMFr_fnc_spawnInvasionAI; - _nts = []; - { - [_x] ExecVM "exile_vemf_reloaded\sqf\signAI.sqf"; - { - _nts pushBack _x; - } forEach (units _x); - } forEach (_spwnd select 0); - - _cl50s = _spwnd select 1; - - ([[_this0,"heliPatrol"],["enabled","classes","locked"]] call VEMFr_fnc_config) params ["_hp0","_hp1","_hp2"]; - if (_hp0 > 0) then - { - [_this0, 1, format["Adding a heli patrol to the invasion of %1 at %2", _ln, mapGridPosition _lp]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - _heli = createVehicle [(selectRandom _hp1), _lp, [], 5, "FLY"]; - _heli setPosATL [(getPos _heli) select 0, (getPos _heli) select 1, 750]; - _heli flyInHeight 80; - if (_hp2 isEqualTo 1) then - { - _heli lock true; - }; - - _trrts = allTurrets [_heli, false]; - - _hlGrp = ([_lp, 1, ((count _trrts) + (_heli emptyPositions "commander") + 1), _m, _this0] call VEMFr_fnc_spawnVEMFrAI) select 0; - { - if (((_heli emptyPositions "driver") isEqualTo 1) AND (_x isEqualTo (leader(group _x)))) then - { - _x moveInDriver _heli; - } else - { - private "_path"; - { - if (isNull (_heli turretUnit _x)) then - { - _path = _x; - }; - } forEach _trrts; - - if not(isNil "_path") then - { - _x moveInTurret [_heli, _path]; - } else - { - if ((_heli emptyPositions "commander") > 0) then - { - _x moveInCommander _heli; - }; - }; - }; - - if not(backPack _x isEqualTo "") then - { - removeBackpack _x; - }; - _x addBackpack "B_Parachute"; - _nts pushBack _x; - } forEach (units _hlGrp); - - _wp = _hlGrp addWaypoint [[_lp select 0, _lp select 1, 50], 0, 2, "SAD"]; - _wp setWaypointType "SAD"; - _wp setWaypointSpeed "NORMAL"; - _wp setWaypointBehaviour "AWARE"; - _wp setWaypointCombatMode "RED"; - //_wp setWaypointLoiterType "CIRCLE"; - //_wp setWaypointLoiterRadius 200; - _hlGrp setCurrentWaypoint _wp; - - [_hlGrp] ExecVM "exile_vemf_reloaded\sqf\signAI.sqf"; - }; - - // Place the crate if enabled - if (_ms14 isEqualTo 1) then - { - call _dSpwnCrt; - }; - - // Place mines if enabled - private ["_mnsPlcd","_mines"]; - if (_ms15 > 0) then - { - _mnsPlcd = [_lp, 5, 100, _this0] call VEMFr_fnc_mines; - if ((count _mnsPlcd) > 0) then - { - [_this0, 1, format["%1 mines placed at %2", count _mnsPlcd, _ln]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - } else - { - [_this0, 0, format["Failed to place %1 mines at %2", count _mnsPlcd, _ln]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - }; - - // Wait for Mission Completion - _h = [_nts] ExecVM "exile_vemf_reloaded\sqf\killedMonitor.sqf"; - waitUntil { if (scriptDone _h) then {true} else {uiSleep 1; false} }; - - ["DynamicLocationInvasion", 1, format["mission in %1 has been completed!", _ln]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - - if (_ms12 isEqualTo 1) then - { - _u = uiNamespace getVariable "VEMFrUsedLocs"; - _u deleteAt (_u find _l); - }; - - // Broadcast - if (_ms7 isEqualTo 1) then - { - if (_m isEqualTo 0) then - { - [_m ,"RAIDERS KILLED", format["%1 @ %2 is now clear of %3 raiders", _ln, mapGridPosition (_lp), worldName]] ExecVM "exile_vemf_reloaded\sqf\notificationToClient.sqf"; - }; - if (_m isEqualTo 1) then - { - [_m, "RAID ENDED", format["%1 @ %2 is now clear of %3 Police", _ln, mapGridPosition (_lp), worldName]] ExecVM "exile_vemf_reloaded\sqf\notificationToClient.sqf"; - }; - if (_m isEqualTo 2) then - { - [_m, "S.W.A.T. RAID ENDED", format["%1 @ %2 is now clear of %3 S.W.A.T. teams", _ln, mapGridPosition (_lp)]] ExecVM "exile_vemf_reloaded\sqf\notificationToClient.sqf"; - }; - }; - - // Deal with the 50s - if not(isNil "_cl50s") then - { - _d = ([[_this0],["cal50sDelete"]] call VEMFr_fnc_config) select 0; - if (_d > 0) then - { - { - if (_d isEqualTo 1) then { deleteVehicle _x }; - if (_d isEqualTo 2) then { _x setDamage 1 }; - } forEach _cl50s; - }; - }; - - if not(isNil "_mrkr") then - { - deleteMarker _mrkr - }; - - if ((([["DynamicLocationInvasion"],["spawnCrateFirst"]] call VEMFr_fnc_config) select 0) isEqualTo 0) then - { - call _dSpwnCrt; - }; - - // Put a marker on the crate if enabled - if not(isNil "_crate") then - { - if not(isNull _crate) then - { - if not ([getPos _crate, 3] call VEMFr_fnc_playerNear) then - { - if (_ms5 isEqualTo 1) then - { - // If night, attach a chemlight - if (sunOrMoon <= 0.35) then - { - [_this0, 1, "attaching a chemlight to the _crate"] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - _lightType = selectRandom _ms16; - (_lightType createVehicle (position _crate)) attachTo [_crate,[0,0,0]]; - } else - { - [_this0, 1, "attaching smoke to the _crate"] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - // Attach smoke - _rndmColor = selectRandom _ms17; - (createVehicle [_rndmColor, getPos _crate, [], 0, "CAN_COLLIDE"]) attachTo [_crate,[0,0,0]]; - }; - }; - - if (_ms6 isEqualTo 1) then - { - private "_mrkr"; - _mrkr = createMarker [format["VEMF_lootCrate_ID%1", random 9000], position _crate]; - _mrkr setMarkerShape "ICON"; - _mrkr setMarkerType "mil_box"; - _mrkr setMarkerColor "colorBlack"; - _mrkr setMarkerText " Loot"; - [_crate, _mrkr] spawn - { - _crate = _this select 0; - _mrkr = _this select 1; - waitUntil { if ([getPos _crate, 3] call VEMFr_fnc_playerNear) then {true} else {uiSleep 4; false} }; - deleteMarker _mrkr; - }; - }; - }; - } else - { - [_this0, 0, "isNull _crate!"] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - } else - { - [_this0, 0, "isNil _crate!"] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - - - // Explode or remove the mines - if not(isNil "_mnsPlcd") then - { - if (_ms18 isEqualTo 2) then - { - [_this0, _ln, _mnsPlcd] spawn - { - uiSleep (5 + (random 2)); - [(_this select 0), 1, format["Starting to explode all %1 mines at %2", count (_this select 2), (_this select 1)]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - { - if not(isNull _x) then - { - _x setDamage 1; - uiSleep (1.25 + (random 3.5)); - }; - } forEach (_this select 2); - [(_this select 0), 1, format["Successfully exploded all %1 mines at %2", count (_this select 2), (_this select 1)]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - - _mnsPlcd = nil; - }; - if (_ms18 isEqualTo 1) then - { - [_mnsPlcd] spawn - { - { - if not(isNull _x) then { deleteVehicle _x }; - } forEach (_this select 0); - }; - - [_this0, 1, format["Successfully deleted all %1 mines at %2", count _mnsPlcd, _ln]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - }; - - // If enabled, fix all the lights - if (_ms9 isEqualTo 1) then - { - { - if (damage _x > 0.94) then - { - _x setDamage 0; - uiSleep (1 + (random 2)); - }; - } forEach (nearestObjects [_lp, ["Lamps_Base_F","PowerLines_base_F","Land_PowerPoleWooden_L_F"], _ms10]); - }; - } else - { // If done waiting, and no players were detected - [_this0, 1, format["Invasion of %1 @ %2 timed out.", _ln, mapGridPosition _lp]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - if not(isNil "_mrkr") then { deleteMarker _mrkr }; - _arr = uiNamespace getVariable "VEMFrUsedLocs"; - _arr deleteAt (_arr find _l); - }; - }; -}; - -VEMFrInvasionCount = VEMFrInvasionCount - 1; -VEMFrMissionCount = VEMFrMissionCount - 1; diff --git a/exile_vemf_reloaded/sqf/REMOTEguard.sqf b/exile_vemf_reloaded/sqf/REMOTEguard.sqf deleted file mode 100644 index 7eaccad..0000000 --- a/exile_vemf_reloaded/sqf/REMOTEguard.sqf +++ /dev/null @@ -1,37 +0,0 @@ -/* - Author: IT07 - - Description: - this function makes sure that AI spawned by VEMF does NOT become local to the server. - On detection of a local group, it will reassign it to a client or Headless Client if enabled. - - Params: - none, this is a Standalone function - - Returns: - nothing -*/ - -while {true} do - { - if ((count playableUnits) > 0) then - { - waitUntil {if ((count allGroups) > 0) then {uiSleep 0.25; true} else {uiSleep 0.5; false} }; - { - if ((local _x) AND (_x getVariable ["isVEMFrGroup",false])) then - { - if ((count (units _x)) > 0) then - { - //["REMOTEguard",1,format["Attempting to transfer group: %1", _x]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - // Group still has units, check if there is anyone that can be the owner - _h = [_x] ExecVM "exile_vemf_reloaded\sqf\setGroupOwner.sqf"; - waitUntil { if (scriptDone _h) then {true} else {uiSleep 0.1; false} }; - //["REMOTEguard",1,format["Transfer attempted. Group (%1) is %2", _x, if (local _x) then {"still local!"} else {"now REMOTE"}]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - } else - { - deleteGroup _x; - }; - }; - } forEach allGroups; - } else { uiSleep 5 }; - }; diff --git a/exile_vemf_reloaded/sqf/aiKilled.sqf b/exile_vemf_reloaded/sqf/aiKilled.sqf deleted file mode 100644 index 172720a..0000000 --- a/exile_vemf_reloaded/sqf/aiKilled.sqf +++ /dev/null @@ -1,220 +0,0 @@ -/* - Author: IT07 - - Description: - executed upon AI unit death - - Params: - _this: ARRAY - _this select 0: OBJECT - the killed AI - _this select 1: OBJECT - killer - - Returns: - nothing -*/ - -(_this select 0) params [ - ["_t", objNull, [objNull]], - ["_nt", "", [""]] -]; -(_this select 1) params [ - ["_k", objNull, [objNull]], - ["_nk", "", [""]] -]; - -if (isPlayer _k) then - { - scopeName "isPlayer"; - _rspct = - { - _arr = [[]]; - (_arr select 0) pushBack [(selectRandom ["AI WACKED","AI CLIPPED","AI WIPED","AI ERASED","AI LYNCHED","AI WRECKED","AI SNUFFED","AI WASTED","AI ZAPPED"]), _rw]; - _dist = _t distance _k; - private "_ok"; - if (_dist < 2500) then - { - scopeName "below2500"; - if (_dist <= 5) then - { - (_arr select 0) pushBack ["CQB Master", 25]; - _ok = true; - _ok breakOut "below2500"; - }; - if (_dist <= 10) then - { - (_arr select 0) pushBack ["Close one", 15]; - _ok = true; - _ok breakOut "below2500"; - }; - if (_dist <= 50) then - { - (_arr select 0) pushBack ["Danger close", 15]; - _ok = true; - _ok breakOut "below2500"; - }; - if (_dist <= 100) then - { - (_arr select 0) pushBack ["Lethal aim", 20]; - _ok = true; - _ok breakOut "below2500"; - }; - if (_dist <= 200) then - { - (_arr select 0) pushBack ["Deadly.", 25]; - _ok = true; - _ok breakOut "below2500"; - }; - if (_dist <= 500) then - { - (_arr select 0) pushBack ["Niiiiice.", 30]; - _ok = true; - _ok breakOut "below2500"; - }; - if (_dist <= 1000) then - { - (_arr select 0) pushBack ["Dat distance...", 45]; - _ok = true; - _ok breakOut "below2500"; - }; - if (_dist <= 2000) then - { - (_arr select 0) pushBack ["Danger far.", 50]; - _ok = true; - _ok breakOut "below2500"; - }; - if (_dist > 2000) then - { - (_arr select 0) pushBack [format["hax? %1m!!!", round _dist], 65]; - _ok = true; - _ok breakOut "below2500"; - }; - }; - - if _ok then - { - [_k, "showFragRequest", _arr] call ExileServer_system_network_send_to; - _rspct = (_k getVariable ["ExileScore", 0]) + (((_arr select 0) select 1) select 1) + _rw; - _k setVariable ["ExileScore", _rspct]; - ExileClientPlayerScore = _rspct; - (owner _k) publicVariableClient "ExileClientPlayerScore"; - ExileClientPlayerScore = nil; - - _kllCnt = (_k getVariable ["ExileKills",0]) + 1; - _k setVariable ["ExileKills", _kllCnt]; - ExileClientPlayerKills = _kllCnt; - (owner _k) publicVariableClient "ExileClientPlayerKills"; - ExileClientPlayerKills = nil; - - format["addAccountKill:%1", getPlayerUID _k] call ExileServer_system_database_query_fireAndForget; - format['setAccountScore:%1:%2', _rspct, getPlayerUID _k] call ExileServer_system_database_query_fireAndForget; - } else - { - ["handleKillMessage", 0, format["There is something wrong with the kill distance (%1)", _dist]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - breakOut "isPlayer"; - }; - }; - - _rw = "respectReward" call VEMFr_fnc_config; - - if (_k isKindOf "Man") then // Roadkill or regular kill - { - if (vehicle _k isEqualTo _k) then // If on foot - { - if (vehicle _t isEqualTo _t) then - { - if (_rw > 0) then { call _rspct }; - [[_t, _nt],[_k, _nk]] ExecVM "exile_vemf_reloaded\sqf\sayKilledWeapon.sqf"; - } else - { - if (typeOf (vehicle _t) isEqualTo "Steerable_Parachute_F") then - { - if ("logCowardKills" call VEMFr_fnc_config isEqualTo 1) then - { - ["fn_aiKilled", 1, format["A coward (%1 @ %2) killed a parachuting AI", _nk, mapGridPosition _k]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - } else - { - if (_rw > 0) then { call _rspct }; - [[_t, _nt],[_k, _nk]] ExecVM "exile_vemf_reloaded\sqf\sayKilledWeapon.sqf"; - }; - }; - } else // If in vehicle (a.k.a. roadkill) - { - if (("punishRoadKills" call VEMFr_fnc_config) isEqualTo 1) then - { - _pnsh = "respectRoadKillDeduct" call VEMFr_fnc_config; - _crRspct = _k getVariable ["ExileScore", 0]; - //diag_log text format["_crRspct of _k (%1) is %2", _k, _crRspct]; - _nwRspct = _crRspct - _pnsh; - _k setVariable ["ExileScore", _nwRspct]; - ExileClientPlayerScore = _nwRspct; - (owner _k) publicVariableClient "ExileClientPlayerScore"; - ExileClientPlayerScore = nil; - [_k, "showFragRequest", [[["ROADKILL..."],["Respect Penalty:", -_pnsh]]]] call ExileServer_system_network_send_to; - format["setAccountMoneyAndRespect:%1:%2:%3", _k getVariable ["ExileMoney", 0], _nwRspct, (getPlayerUID _k)] call ExileServer_system_database_query_fireAndForget; - - if (("sayKilled" call VEMFr_fnc_config) isEqualTo 1) then - { - [format["(VEMFr) %1 [Roadkill] %2", _nk, if (("sayKilledName" call VEMFr_fnc_config) > 0) then {_nt} else {"AI"}]] ExecVM "exile_vemf_reloaded\sqf\systemChatToClient.sqf"; - }; - }; - }; - } else // If kill from vehicle (NOT a roadkill) - { - if (typeOf (vehicle _t) isEqualTo "Steerable_Parachute_F") then - { - if ("logCowardKills" call VEMFr_fnc_config isEqualTo 1) then - { - ["fn_aiKilled", 1, format["A coward (%1 @ %2) killed a parachuting AI", _nk, mapGridPosition _k]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - } else - { - _k = effectiveCommander _k; - if (_rw > 0) then { call _rspct }; - [[_t, _nt],[_k, _nk]] ExecVM "exile_vemf_reloaded\sqf\sayKilledWeapon.sqf"; - }; - }; - }; - - ([["aiCleanup"],["removeLaunchers","aiDeathRemovalEffect","removeHeadGear"]] call VEMFr_fnc_config) params ["_ms0","_ms1","_ms2"]; - if (_ms0 isEqualTo 1) then - { - _sw = secondaryWeapon _t; - if not(_sw isEqualTo "") then - { - _t removeWeaponGlobal _sw; - _mssls = getArray (configFile >> "cfgWeapons" >> _sw >> "magazines"); - { - if (_x in _mssls) then - { - _t removeMagazineGlobal _x; - }; - } forEach (magazines _t); - }; - }; - if (_ms2 isEqualTo 1) then // If removeHeadGear setting is enabled - { - removeHeadGear _t; - }; - - if (_ms1 isEqualTo 1) then // If killEffect enabled - { - playSound3D ["A3\Missions_F_Bootcamp\data\sounds\vr_shutdown.wss", _t, false, getPosASL _t, 2, 1, 60]; - for "_u" from 1 to 12 do - { - if not(isObjectHidden _t) then - { - _t hideObjectGlobal true; - } else - { - _t hideObjectGlobal false; - }; - uiSleep 0.12; - }; - _t hideObjectGlobal true; - removeAllWeapons _t; - // Automatic cleanup yaaay - deleteVehicle _t; - }; - - _t removeAllEventHandlers "MPKilled"; diff --git a/exile_vemf_reloaded/sqf/broadCast.sqf b/exile_vemf_reloaded/sqf/broadCast.sqf deleted file mode 100644 index 81bec65..0000000 --- a/exile_vemf_reloaded/sqf/broadCast.sqf +++ /dev/null @@ -1,60 +0,0 @@ -/* - Author: IT07 - - Description: - will alert players - - Params: - for global(!) systemChat message: - _this select 0: FORMATTED STRING - thing to send - _this select 1: ARRAY - objects to send message to. If empty, broadcast will go to all players - _this select 2: STRING - must be "sys" - for mission announcement: - _this: ARRAY - _this select 0: ARRAY - _this select 0 select 0: SCALAR - broadcast type (determines the color of the message icon) - _this select 0 select 1: STRING - announcement title - _this select 0 select 2: FORMATTED STRING - Message line - _this select 1: ARRAY - objects to send message to. If empty, broadcast will go to all players - _this select 2: STRING - (optional) must be empty or nil | for systemChat broadcast, use "sys" - - Returns: - nothing -*/ - -_send = - { - private "_arr"; - if (count _this isEqualTo 0) then - { - _arr = allPlayers; - } else - { - _arr = _this; - }; - { - if (isPlayer _x AND alive _x) then - { - VEMFrMsgToClient = [_msg, _mode]; - (owner _x) publicVariableClient "VEMFrMsgToClient"; - }; - } forEach _arr; - }; - -_to = param [1, [], [[]]]; - -if (_this select 0 isEqualType []) then // mission notification - { - _mode = (_this select 0) param [0, -1, [0]]; - _title = (_this select 0) param [1, "DEFAULT TITLE", [""]]; - _line = (_this select 0) param [2, "Default message", [""]]; - _msg = [_mode, _title, _line]; - _to call _send; - }; - -if (_this select 0 isEqualType "") then // systemchat broadcast - { - _mode = param [2, "", [""]]; - _msg = param [0, "", [""]]; - _to call _send; - }; diff --git a/exile_vemf_reloaded/sqf/checkLoot.sqf b/exile_vemf_reloaded/sqf/checkLoot.sqf deleted file mode 100644 index 991f076..0000000 --- a/exile_vemf_reloaded/sqf/checkLoot.sqf +++ /dev/null @@ -1,65 +0,0 @@ -/* - Author: IT07 - - Description: - checks the VEMF loot table for invalid classnames. Reports to RPT if invalid classes found. - - Params: - none - - Returns: - nothing -*/ - -if ("validateLoot" call VEMFr_fnc_config isEqualTo 1) then -{ // _validateLoot is enabled, go ahead... - if ("debugMode" call VEMFr_fnc_config < 1) then - { - ["CheckLoot", 0, "Failed to validate loot: no output allowed in RPT"] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - } else - { - ["CheckLoot", 1, "Validating loot tables..."] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - _bin = []; - - _mags = []; - _cfgMags = "_mags pushBack (configName _x); true" configClasses (configFile >> "cfgMagazines"); - - _weapons = []; - _cfgWeapons = "_weapons pushBack (configName _x); true" configClasses (configFile >> "cfgWeapons"); - - _bags = []; - _cfgBags = "getText (_x >> 'vehicleClass') isEqualTo 'Backpacks'" configClasses (configFile >> "cfgVehicles"); - { - _bags pushBack (configName _x); - } forEach _cfgBags; - - _aiGear = [["aiGear"],["aiUniforms","aiVests","aiRifles","aiBackpacks","aiLaunchers","aiPistols"]] call VEMFr_fnc_config; - { - { - if not((_x in _mags) OR (_x in _weapons) OR (_x in _bags)) then - { - _bin pushBack _x; - }; - } forEach _x; - } forEach _aiGear; - - _loot = [["crateLoot"],["primaryWeaponLoot","secondaryWeaponLoot","magazinesLoot","attachmentsLoot","itemsLoot","vestsLoot","headGearLoot","backpacksLoot"]] call VEMFr_fnc_config; - { - { - _class = _x select 0; - if not((_class in _mags) OR (_class in _weapons) OR (_class in _bags)) then - { - _bin pushBack _x; - }; - } forEach _x; - } forEach _loot; - - if (count _bin isEqualTo 0) then - { - ["CheckLoot", 1, "Loot tables are all valid :)"] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - } else - { - ["CheckLoot", 0, format["Invalid classes found in loot! | %1", _bin]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - }; -}; diff --git a/exile_vemf_reloaded/sqf/killedMonitor.sqf b/exile_vemf_reloaded/sqf/killedMonitor.sqf deleted file mode 100644 index 4fcd61a..0000000 --- a/exile_vemf_reloaded/sqf/killedMonitor.sqf +++ /dev/null @@ -1,35 +0,0 @@ -/* - Author: IT07 - - Description: - will loop until all given objects are dead - - Params: - _this select 0: ARRAY - array of objects to monitor - - Returns: - nothing -*/ - -_a = param [0,[],[[]]]; -if ((count _a) > 0) then - { - _k = 0; - _cnt = count _a; - _kp = round(("killPercentage" call VEMFr_fnc_config)/100*_cnt); - while {true} do - { - scopeName "while"; - _k = 0; - { - if (((damage _x) isEqualTo 1) OR (isNull _x)) then { _k = _k + 1 }; - } forEach _a; - if (_k < _kp) then - { - uiSleep 3; - } else - { - breakOut "while"; - }; - }; - }; diff --git a/exile_vemf_reloaded/sqf/loadLoot.sqf b/exile_vemf_reloaded/sqf/loadLoot.sqf deleted file mode 100644 index 5588c36..0000000 --- a/exile_vemf_reloaded/sqf/loadLoot.sqf +++ /dev/null @@ -1,122 +0,0 @@ -/* - Author: IT07 - - Description: - loads loot crate inventory - - Params: - _this: ARRAY - _this select 0: OBJECT - the crate - _this select 1: STRING - (optional) name of the location where crate is - _this select 2: ARRAY - (optional) position of location where crate is - - Returns: - nothing -*/ - -params [ - ["_crate", objNull, [objNull]], - ["_locName", "", [""]], - ["_locPos", [], [[]]] -]; - -_crate setVariable ["isVEMFrCrate", 1, true]; -clearBackpackCargoGlobal _crate; -clearItemCargoGlobal _crate; -clearMagazineCargoGlobal _crate; -clearWeaponCargoGlobal _crate; - -_ms = [ - ["crateLoot"], - [ - "primarySlotsMax","primarySlotsMin","secondarySlotsMax","secondarySlotsMin","magSlotsMax","magSlotsMin","attSlotsMax","attSlotsMin","itemSlotsMax","itemSlotsMin", - "vestSlotsMax","vestSlotsMin","headGearSlotsMax","headGearSlotsMin","bagSlotsMax","bagSlotsMin","primaryWeaponLoot","secondaryWeaponLoot","magLoot","attLoot", - "itemLoot","vestLoot","backpackLoot","headGearLoot","blackListLoot" - ] -] call VEMFr_fnc_config; -_ms params [ - "_maxPrim","_minPrim","_maxSec","_minSec","_maxMagSlots","_minMagSlots","_maxAttSlots","_minAttSlots","_maxItemSlots","_minItemSlots","_maxVestSlots","_minVestSlots", - "_maxHeadGearSlots","_minHeadGearSlots","_maxBagSlots","_minBagSlots","_primaries","_secondaries","_magazines","_attachments","_items","_vests","_backpacks","_headGear","_blackList" -]; - -// Add primary weapons -for "_j" from 0 to (_maxPrim - _minPrim + floor random _minPrim) do - { - _g = _primaries call BIS_fnc_selectRandom; - if not((_g select 0) in _blackList) then - { - _crate addWeaponCargoGlobal [_g select 0, _g select 1]; - }; - }; - -// Secondary weapons -for "_j" from 0 to (_maxSec - _minSec + floor random _minSec) do - { - _g = _secondaries call BIS_fnc_selectRandom; - if not((_g select 0) in _blackList) then - { - _crate addWeaponCargoGlobal [_g select 0, _g select 1]; - }; - }; - -// Magazines -for "_j" from 0 to (_maxMagSlots - _minMagSlots + floor random _minMagSlots) do - { - _g = _magazines call BIS_fnc_selectRandom; - if not((_g select 0) in _blackList) then - { - _crate addMagazineCargoGlobal [_g select 0, _g select 1]; - }; - }; - -// Weapon attachments -for "_j" from 0 to (_maxAttSlots - _minAttSlots + floor random _minAttSlots) do - { - _g = _attachments call BIS_fnc_selectRandom; - if not((_g select 0) in _blackList) then - { - _crate addItemCargoGlobal [_g select 0, _g select 1]; - }; - }; - -// Items -for "_j" from 0 to (_maxItemSlots - _minItemSlots + floor random _minItemSlots) do - { - _g = _items call BIS_fnc_selectRandom; - if not((_g select 0) in _blacklist) then - { - _crate addItemCargoGlobal [_g select 0, _g select 1]; - }; - }; - -// Vests -for "_j" from 0 to (_maxVestSlots - _minVestSlots + floor random _minVestSlots) do - { - _g = _vests call BIS_fnc_selectRandom; - if not((_g select 0) in _blackList) then - { - _crate addItemCargoGlobal [_g select 0, _g select 1]; - }; - }; - -// Helmets / caps / berets / bandanas -for "_j" from 0 to (_maxHeadGearSlots - _minHeadGearSlots + floor random _minHeadGearSlots) do - { - _g = _headGear call BIS_fnc_selectRandom; - if not((_g select 0) in _blackList) then - { - _crate addItemCargoGlobal [_g select 0, _g select 1]; - }; - }; - -// Backpacks -for "_j" from 0 to (_maxBagSlots - _minBagSlots + floor random _minBagSlots) do - { - _g = _backpacks call BIS_fnc_selectRandom; - if not((_g select 0) in _blackList) then - { - _crate addBackpackCargoGlobal [_g select 0, _g select 1]; - }; - }; - -["loadLoot", 1, format["Loot loaded into crate located in '%1' at %2", _locName, mapGridPosition _crate]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; diff --git a/exile_vemf_reloaded/sqf/log.sqf b/exile_vemf_reloaded/sqf/log.sqf deleted file mode 100644 index 0615633..0000000 --- a/exile_vemf_reloaded/sqf/log.sqf +++ /dev/null @@ -1,49 +0,0 @@ -/* - Author: IT07 - - Description: - will log given data if debug is enabled - - Params: - _this: ARRAY - contains data required for logging - _this select 0: STRING - prefix. Use "" if none - _this select 1: SCALAR - 0 = error, 1 = info, 2 = special - _this select 2: STRING - the thing to log - - Returns: - nothing (use spawn, not call) -*/ - -if (("debugMode" call VEMFr_fnc_config) > 0) then -{ - scopeName "_top"; - params [ - ["_p", "", [""]], - ["_t", 3, [0]], - ["_l", "", [""]] - ]; - - _do = { diag_log text format["IT07: [VEMFr] %1 -- %2: %3", _p, _this, _l] }; - _m = "debugMode" call VEMFr_fnc_config; - if (_t isEqualTo 0) then - { - if (_m isEqualTo 1 OR _m isEqualTo 3) then - { - "ERROR" call _do; - breakOut "_top"; - }; - }; - if (_t isEqualTo 1) then - { - if (_m isEqualTo 2 OR _m isEqualTo 3) then - { - "INFO" call _do; - breakOut "_top"; - }; - }; - if (_t isEqualTo 2) then // This bypasses _m setting. Always logs given params even if debugMode is set to 0 - { - "SYSTEM" call _do; - breakOut "_top"; - }; -}; diff --git a/exile_vemf_reloaded/sqf/missionTimer.sqf b/exile_vemf_reloaded/sqf/missionTimer.sqf deleted file mode 100644 index 13d2321..0000000 --- a/exile_vemf_reloaded/sqf/missionTimer.sqf +++ /dev/null @@ -1,69 +0,0 @@ -/* - Author: IT07 - - Description: - Handles the start and timeout of missions - - Params: - none - - Returns: - nothing -*/ - -scopeName "outer"; -_mgm = "maxGlobalMissions" call VEMFr_fnc_config; -["missionTimer", 1, format["Global mission-limit is set at: %1", _mgm]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; -_minNew = "minNew" call VEMFr_fnc_config; -if (_minNew > -1) then - { - _maxNew = "maxNew" call VEMFr_fnc_config; - if (_maxNew > 0) then - { - _ml = "missionList" call VEMFr_fnc_config; - if (count _ml > 0) then - { - _minFps = "minServerFPS" call VEMFr_fnc_config; - _mnPlyrs = "minPlayers" call VEMFr_fnc_config; - if isNil "VEMFrForceStart" then { VEMFrForceStart = false }; - waitUntil { if ((((count allPlayers) >= _mnPlyrs) AND (diag_fps > _minFps)) OR VEMFrForceStart) then { true } else { uiSleep 5; false } }; - if VEMFrForceStart then - { - ["missionTimer", 1, format["VEMFr has been forced to start. Server FPS: %1", diag_fps]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - } else - { - ["missionTimer", 1, format["Enough players online (%1) and server FPS (%2) is above %3. Starting missionTimer...", count allPlayers, diag_fps, _minFps]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - }; - - VEMFrMissionCount = 0; - _im = false; - if (_mgm isEqualTo 0) then { _im = true }; - _zz = { uiSleep ((_minNew*60)+ floor random ((_maxNew*60)-(_minNew*60))) }; - call _zz; - - while {true} do - { - // Pick A Mission if enough players online - if ((count allPlayers) >= _mnPlyrs) then - { - scopeName "pick"; - if ((VEMFrMissionCount < _mgm) AND (VEMFrMissionCount >= 0) OR _im) then - { - _mssnNm = selectRandom _ml; - _h = [_mssnNm] execVM format["exile_vemf_reloaded\missions\%1.sqf", _mssnNm]; - uiSleep 5; - if (scriptDone _h) then { breakOut "pick" } else { call _zz }; - } else - { - if (VEMFrMissionCount < 0) then - { - ["missionTimer", 0, format["VEMFrMissionCount (%1) is BELOW 0! Stopping missionTimer...", VEMFrMissionCount]] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - breakOut "outer"; - }; - call _zz; - }; - } else { uiSleep 60 }; - }; - }; - }; -}; diff --git a/exile_vemf_reloaded/sqf/notificationToClient.sqf b/exile_vemf_reloaded/sqf/notificationToClient.sqf deleted file mode 100644 index df12023..0000000 --- a/exile_vemf_reloaded/sqf/notificationToClient.sqf +++ /dev/null @@ -1,28 +0,0 @@ -/* - Author: IT07 - - Description: - will put mission notification on either all screens or just on given - - Params: - _this select 0: SCALAR - mission type (AI mode) - _this select 1: STRING - notification title - _this select 2: STRING - notification message - _this select 3: ARRAY (optional) - specific clients to (ONLY) send notification to - - Returns: - nothing -*/ - -params [ - ["_mt", -1, [-1]], - ["_title", "", [""]], - ["_line", "", [""]], - ["_to", [], [[]]] -]; - -if ((count _to) isEqualTo 0) then { _to = allPlayers }; -{ - VEMFrMsgToClient = [[_mt, _title, _line], ""]; - (owner _x) publicVariableClient "VEMFrMsgToClient"; -} forEach _to; diff --git a/exile_vemf_reloaded/sqf/sayKilledWeapon.sqf b/exile_vemf_reloaded/sqf/sayKilledWeapon.sqf deleted file mode 100644 index def5dc4..0000000 --- a/exile_vemf_reloaded/sqf/sayKilledWeapon.sqf +++ /dev/null @@ -1,25 +0,0 @@ -/* - Author: IT07 - - Description: - handles the broadcast of a systemChat kill message -*/ - -(_this select 0) params [ - ["_t", objNull, [objNull]], - ["_nt", "", [""]] -]; -(_this select 1) params [ - ["_k", objNull, [objNull]], - ["_nk", "", [""]] -]; - - -private ["_crWpn","_cfg"]; -if (vehicle _k isEqualTo _k) then { _crWpn = currentWeapon _k; _cfg = "CfgWeapons" } -else { _crWpn = typeOf (vehicle _k); _cfg = "CfgVehicles" }; -_dist = _t distance _k; - -_sk = "sayKilled" call VEMFr_fnc_config; -if (_sk < 2) then { [format["(VEMFr) %1 [%2] %3 (%4m)", _nk, getText(configFile >> _cfg >> _crWpn >> "displayName"), if (("sayKilledName" call VEMFr_fnc_config) > 0) then {_nt} else {"AI"}, round _dist]] ExecVM "exile_vemf_reloaded\sqf\systemChatToClient.sqf" } -else { [format["(VEMFr) You [%1] %2 (%3m)", getText(configFile >> _cfg >> _crWpn >> "displayName"), if (("sayKilledName" call VEMFr_fnc_config) > 0) then {_nt} else {"AI"}, round _dist]] ExecVM "exile_vemf_reloaded\sqf\systemChatToClient.sqf" }; diff --git a/exile_vemf_reloaded/sqf/setGroupOwner.sqf b/exile_vemf_reloaded/sqf/setGroupOwner.sqf deleted file mode 100644 index 20d1cdb..0000000 --- a/exile_vemf_reloaded/sqf/setGroupOwner.sqf +++ /dev/null @@ -1,53 +0,0 @@ -/* - Author: IT07 - - Description: - handles the transfer of ownership to another given unit/client/object. - Will transfer complete group to the same (new) owner. - - Params: - _this select 0: GROUP - the group of which the ownership should be transfered - - Returns: - nothing -*/ - -_grp = param [0, grpNull, [grpNull]]; -if not(isNull _grp) then - { - // Check if HC is enabled - _hcNbld = "headLessClientSupport" call VEMFr_fnc_config; - _force = uiNamespace getVariable ["VEMFr_forceAItoClients", nil]; - if not(isNil "_force") then { if (_force isEqualType true) then { if _force then { _hcNbld = -1 } } }; - - private "_to"; - if (_hcNbld isEqualTo 1) then - { - _arr = []; - { - if (typeOf _x isEqualTo "HeadlessClient_F") then { _arr pushBack [_x, owner _x] }; - } forEach allPlayers; - - if (count _arr > 0) then { _to = call VEMFr_fnc_hc } else { uiNamespace setVariable ["VEMFr_forceAItoClients", true] }; - } else // If Headlessclient setting is not enabled - { - if ((count allPlayers) > 0) then - { - _distToX = worldSize; - { - _dist = _x distance (leader _grp); - if (_dist <= _distToX) then - { - _distToX = _dist; - _to = _x; - }; - } forEach allPlayers; - }; - }; - - if not(isNil "_to") then - { - _grp setGroupOwner (owner _to); - waitUntil { if not(local _grp) then {true} else {uiSleep 0.1; false} }; - }; - }; diff --git a/exile_vemf_reloaded/sqf/signAI.sqf b/exile_vemf_reloaded/sqf/signAI.sqf deleted file mode 100644 index 30bc610..0000000 --- a/exile_vemf_reloaded/sqf/signAI.sqf +++ /dev/null @@ -1,15 +0,0 @@ -/* - Author: IT07 - - Description: - marks given group(!) as VEMF AI which will then be used by REMOTEguard for monitor of groupOwner - - Params: - _this: ARRAY - _this select 0: GROUP - group to sign as VEMF AI - - Returns: - nothing -*/ - -(param [0, grpNull, [grpNull]]) setVariable ["isVEMFrGroup",true,true]; diff --git a/exile_vemf_reloaded/sqf/spawnStaticAI.sqf b/exile_vemf_reloaded/sqf/spawnStaticAI.sqf deleted file mode 100644 index 1d9985f..0000000 --- a/exile_vemf_reloaded/sqf/spawnStaticAI.sqf +++ /dev/null @@ -1,22 +0,0 @@ -/* - Author: IT07 - - Description: - spawns AI at all given locations in config file - - Params: - none - - Returns: - nothing -*/ - -if ((([["aiStatic"],["enabled"]] call VEMFr_fnc_config) select 0) isEqualTo 1) then -{ - ["spawnStaticAI", 2, "launching..."] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - ([["aiStatic"],["positions","amount"]] call VEMFr_fnc_config) params ["_s0","_s1"]; - ["spawnStaticAI", 2, "spawning AI on positions..."] ExecVM "exile_vemf_reloaded\sqf\log.sqf"; - { - [_x, 2, _s1 select _foreachindex, ("aiMode" call VEMFr_fnc_config), "Static"] spawn VEMFr_fnc_spawnVEMFrAI; - } forEach _s0; -}; diff --git a/exile_vemf_reloaded/sqf/systemChatToClient.sqf b/exile_vemf_reloaded/sqf/systemChatToClient.sqf deleted file mode 100644 index a700e06..0000000 --- a/exile_vemf_reloaded/sqf/systemChatToClient.sqf +++ /dev/null @@ -1,21 +0,0 @@ -/* - Author: IT07 - - Params: - _this select 0: FORMATTED STRING - line to broadcast - _this select 1: ARRAY - specific clients to (ONLY) send line to - - Returns: - nothing -*/ - -params [ - ["_line", "", [""]], - ["_to", [], [[]]] -]; - -if (_to isEqualTo []) then { _to = allPlayers }; -{ - VEMFrMsgToClient = [_line, "sys"]; - (owner _x) publicVariableClient "VEMFrMsgToClient"; -} forEach _to; diff --git a/exile_vemf_reloaded_config/CfgPatches.hpp b/exile_vemf_reloaded_config/CfgPatches.hpp deleted file mode 100644 index 4f8f5ad..0000000 --- a/exile_vemf_reloaded_config/CfgPatches.hpp +++ /dev/null @@ -1,10 +0,0 @@ -class CfgPatches -{ - class exile_vemf_reloaded_config - { - units[] = {}; - requiredAddons[] = {"exile_server"}; - fileName = "exile_vemf_reloaded_config.pbo"; - author = "IT07"; - }; -}; diff --git a/exile_vemf_reloaded_config/config.cpp b/exile_vemf_reloaded_config/config.cpp deleted file mode 100644 index 0017b5f..0000000 --- a/exile_vemf_reloaded_config/config.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "CfgPatches.hpp" - -class CfgVemfReloadedOverrides -{ - /* - File: config.cpp - Description: put all of the settings you always change in here and simply keep this pbo. Then you don't have to redo all your changes to the config.cpp everytime - Description 2: the only thing you will have to do now is simply check the CHANGELOG.md on GitHub everytime there is an update to check if there are any deprecated settings - Description 3: instead of changing the config.cpp settings everytime, just add your changes here. Saves a lot of time. Yes you are welcome you lucky bastard - Note: it is extremely difficult for a coder to explain with text how to do this so I have put a few examples in this file instead - Note 2: the already present lines below line 10 are just examples so feel free to delete them - */ - - // Put all the settings you want to override below this line - /* - debugMode = 2; // Overrides CfgVemfReloaded >> debugMode - maxGlobalMissions = 5; // Overrides CfgVemfReloaded >> maxGlobalMissions - minServerFPS = 5; // Overrides CfgVemfReloaded >> minServerFPS - class crateLoot - { - primarySlotsMax = 3; // Overrides CfgVemfReloaded >> crateLoot >> primarySlotsMax - primarySlotsMin = 1; // Overrides CfgVemfReloaded >> crateLoot >> primarySlotsMin - }; - class locationBlackLists - { // NOTE: If the map you use is not listed below, simply add it by yourself or put the locations you want to blacklist into the locations array of the Other class - class Altis - { - locations[] = {}; // Overrides CfgVemfReloaded >> locationBlackLists >> Altis >> locations - }; - }; - class aiGear - { - aiPistols[] = {"hgun_ACPC2_F","hgun_Rook40_F"}; // Overrides CfgVemfReloaded >> aiGear >> aiPistols - }; - */ -}; // Do not touch this line