From dfcacb794835b544d8d630c44fe63b61cb2c3940 Mon Sep 17 00:00:00 2001 From: IT07 Date: Sat, 16 Jul 2016 23:17:51 +0200 Subject: [PATCH] Bye --- ArmA3_exile_vemf_reloaded.7z | Bin 27472 -> 0 bytes .../gui/RscDisplayVEMFrClient.hpp | 128 ------ Exile.MapName/VEMFr_client/sqf/initClient.sqf | 45 --- Exile.MapName/VEMFr_client/sqf/onLoad.sqf | 110 ----- Exile.MapName/description.ext | 4 - Exile.MapName/init.sqf | 5 - exile_vemf_reloaded/config.cpp | 382 ------------------ exile_vemf_reloaded/cpp/CfgFunctions.cpp | 24 -- exile_vemf_reloaded/cpp/CfgPatches.cpp | 12 - exile_vemf_reloaded/fn/fn_checkSide.sqf | 49 --- exile_vemf_reloaded/fn/fn_config.sqf | 83 ---- exile_vemf_reloaded/fn/fn_findPos.sqf | 145 ------- exile_vemf_reloaded/fn/fn_giveAmmo.sqf | 64 --- exile_vemf_reloaded/fn/fn_giveWeaponItems.sqf | 64 --- exile_vemf_reloaded/fn/fn_hc.sqf | 38 -- exile_vemf_reloaded/fn/fn_launch.sqf | 60 --- exile_vemf_reloaded/fn/fn_loadInv.sqf | 211 ---------- exile_vemf_reloaded/fn/fn_mines.sqf | 47 --- exile_vemf_reloaded/fn/fn_playerNear.sqf | 33 -- exile_vemf_reloaded/fn/fn_spawnInvasionAI.sqf | 183 --------- exile_vemf_reloaded/fn/fn_spawnVEMFrAI.sqf | 90 ----- exile_vemf_reloaded/fn/fn_waitForPlayers.sqf | 36 -- exile_vemf_reloaded/missions/BaseAttack.sqf | 131 ------ .../missions/DynamicLocationInvasion.sqf | 380 ----------------- exile_vemf_reloaded/sqf/REMOTEguard.sqf | 37 -- exile_vemf_reloaded/sqf/aiKilled.sqf | 220 ---------- exile_vemf_reloaded/sqf/broadCast.sqf | 60 --- exile_vemf_reloaded/sqf/checkLoot.sqf | 65 --- exile_vemf_reloaded/sqf/killedMonitor.sqf | 35 -- exile_vemf_reloaded/sqf/loadLoot.sqf | 122 ------ exile_vemf_reloaded/sqf/log.sqf | 49 --- exile_vemf_reloaded/sqf/missionTimer.sqf | 69 ---- .../sqf/notificationToClient.sqf | 28 -- exile_vemf_reloaded/sqf/sayKilledWeapon.sqf | 25 -- exile_vemf_reloaded/sqf/setGroupOwner.sqf | 53 --- exile_vemf_reloaded/sqf/signAI.sqf | 15 - exile_vemf_reloaded/sqf/spawnStaticAI.sqf | 22 - .../sqf/systemChatToClient.sqf | 21 - exile_vemf_reloaded_config/CfgPatches.hpp | 10 - exile_vemf_reloaded_config/config.cpp | 36 -- 40 files changed, 3191 deletions(-) delete mode 100644 ArmA3_exile_vemf_reloaded.7z delete mode 100644 Exile.MapName/VEMFr_client/gui/RscDisplayVEMFrClient.hpp delete mode 100644 Exile.MapName/VEMFr_client/sqf/initClient.sqf delete mode 100644 Exile.MapName/VEMFr_client/sqf/onLoad.sqf delete mode 100644 Exile.MapName/description.ext delete mode 100644 Exile.MapName/init.sqf delete mode 100644 exile_vemf_reloaded/config.cpp delete mode 100644 exile_vemf_reloaded/cpp/CfgFunctions.cpp delete mode 100644 exile_vemf_reloaded/cpp/CfgPatches.cpp delete mode 100644 exile_vemf_reloaded/fn/fn_checkSide.sqf delete mode 100644 exile_vemf_reloaded/fn/fn_config.sqf delete mode 100644 exile_vemf_reloaded/fn/fn_findPos.sqf delete mode 100644 exile_vemf_reloaded/fn/fn_giveAmmo.sqf delete mode 100644 exile_vemf_reloaded/fn/fn_giveWeaponItems.sqf delete mode 100644 exile_vemf_reloaded/fn/fn_hc.sqf delete mode 100644 exile_vemf_reloaded/fn/fn_launch.sqf delete mode 100644 exile_vemf_reloaded/fn/fn_loadInv.sqf delete mode 100644 exile_vemf_reloaded/fn/fn_mines.sqf delete mode 100644 exile_vemf_reloaded/fn/fn_playerNear.sqf delete mode 100644 exile_vemf_reloaded/fn/fn_spawnInvasionAI.sqf delete mode 100644 exile_vemf_reloaded/fn/fn_spawnVEMFrAI.sqf delete mode 100644 exile_vemf_reloaded/fn/fn_waitForPlayers.sqf delete mode 100644 exile_vemf_reloaded/missions/BaseAttack.sqf delete mode 100644 exile_vemf_reloaded/missions/DynamicLocationInvasion.sqf delete mode 100644 exile_vemf_reloaded/sqf/REMOTEguard.sqf delete mode 100644 exile_vemf_reloaded/sqf/aiKilled.sqf delete mode 100644 exile_vemf_reloaded/sqf/broadCast.sqf delete mode 100644 exile_vemf_reloaded/sqf/checkLoot.sqf delete mode 100644 exile_vemf_reloaded/sqf/killedMonitor.sqf delete mode 100644 exile_vemf_reloaded/sqf/loadLoot.sqf delete mode 100644 exile_vemf_reloaded/sqf/log.sqf delete mode 100644 exile_vemf_reloaded/sqf/missionTimer.sqf delete mode 100644 exile_vemf_reloaded/sqf/notificationToClient.sqf delete mode 100644 exile_vemf_reloaded/sqf/sayKilledWeapon.sqf delete mode 100644 exile_vemf_reloaded/sqf/setGroupOwner.sqf delete mode 100644 exile_vemf_reloaded/sqf/signAI.sqf delete mode 100644 exile_vemf_reloaded/sqf/spawnStaticAI.sqf delete mode 100644 exile_vemf_reloaded/sqf/systemChatToClient.sqf delete mode 100644 exile_vemf_reloaded_config/CfgPatches.hpp delete mode 100644 exile_vemf_reloaded_config/config.cpp diff --git a/ArmA3_exile_vemf_reloaded.7z b/ArmA3_exile_vemf_reloaded.7z deleted file mode 100644 index 3ee18391eaa930f33bfa1f149d4b18fcf58353fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27472 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 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