├── .gitattributes ├── adminSpectate └── adminSpectate.sqf ├── afkTimer └── afkTimer.sqf ├── atmHack ├── atm_hack.sqf ├── hackerOutpost_SL1.sqf ├── hackerOutpost_SL2.sqf ├── hackerOutpost_SL3.sqf ├── hackerOutpostsList.sqf ├── init.sqf ├── laptop.paa └── mission_Hackers.sqf ├── breakInToVehicle ├── breakInToVehicle.sqf └── sounds │ ├── vehicleAlarm-01-000.ogg │ ├── vehicleAlarm-01-001.ogg │ ├── vehicleAlarm-01-002.ogg │ ├── vehicleAlarm-01-003.ogg │ ├── vehicleAlarm-01-004.ogg │ ├── vehicleAlarm-01-005.ogg │ ├── vehicleAlarm-01-006.ogg │ ├── vehicleAlarm-01-007.ogg │ └── vehicleAlarm-01-008.ogg ├── buryDeadBody ├── buryDeadBody.paa └── buryDeadBody.sqf ├── buySaveLoadOut ├── buyLoadOut.paa ├── buySaveLoadOut.sqf └── saveLoadOut.paa ├── cfgGrabber ├── fn_cfgGrabber.sqf ├── fn_cfgGrabberMen.sqf └── fn_cfgGrabberVehicle.sqf ├── cleanStores └── cleanStores.sqf ├── cleanupMissionObjects └── cleanupMissionObjects.sqf ├── clearDeadBody ├── clearDeadBody.paa └── clearDeadBody.sqf ├── deadBodyFlies ├── deadBodyFlies.ogg └── deadBodyFlies.sqf ├── fixTownStreetLamps └── fixTownStreetLamps.sqf ├── fullScreenNightVision └── fullScreenNightVision.sqf ├── globalChatMessages └── globalChatMessages.sqf ├── lootSpawnerBPM └── lootSpawnerBPM.Altis │ ├── buildingPosManual.sqf │ ├── functions │ ├── addPosition.sqf │ ├── destroyBuilding.sqf │ ├── drawBoundingBox.sqf │ ├── getPositions.sqf │ └── hideObject.sqf │ ├── init.sqf │ ├── lootSpawner │ ├── lootSpawner.sqf │ ├── lootSpawnerConfig.sqf │ └── lootSpawnerGen.sqf │ └── mission.sqm ├── mapMarkerIntercept └── mapMarkerIntercept.sqf ├── outOfBounds ├── outOfBounds.sqf ├── outOfBoundsHeli.sqf ├── outOfBoundsLandVehicle.sqf ├── outOfBoundsPlane.sqf ├── outOfBoundsPlayer.sqf ├── outOfBoundsRemote.sqf ├── outOfBoundsRemoteStore.sqf └── outOfBoundsShip.sqf ├── playerCustomUniforms └── playerCustomUniforms.sqf ├── playerJump └── playerJump.sqf ├── purchaseFuel ├── purchaseFuel.paa ├── purchaseFuel.sqf └── purchaseFuelInit.sqf ├── randomCrateLoadOut └── randomCrateLoadOut.sqf ├── randomSoldierLoadOut └── randomSoldierLoadOut.sqf ├── roadBlocks ├── createRoadBlock.sqf ├── mission.sqm ├── mission_RoadBlock.sqf ├── roadBlocks │ ├── roadBlockBrokenMRAP.jpg │ ├── roadBlockBrokenMRAP.sqf │ ├── roadBlockGreenShot.jpg │ ├── roadBlockGreenShot.sqf │ ├── roadBlockList.sqf │ ├── roadBlockNoSoul.jpg │ ├── roadBlockNoSoul.sqf │ ├── roadBlockRubbleTrouble.jpg │ └── roadBlockRubbleTrouble.sqf └── roadBlocksInstructions.txt ├── serverRestartMessages └── serverRestartMessages.sqf ├── spawnBeaconDetector ├── sounds │ ├── spawnBeaconDetectorBeep.ogg │ ├── spawnBeaconDetectorBlipBlip.ogg │ ├── spawnBeaconDetectorOff.ogg │ └── spawnBeaconDetectorOn.ogg ├── spawnBeaconDetector.paa └── spawnBeaconDetector.sqf ├── stratisEnhanced ├── mission.sqm └── stratisEnhanced.txt └── titleTextMessagesServer ├── titleTextMessagesServer.sqf └── titleTextMessagesServerText.sqf /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | 7 | # Standard to msysgit 8 | *.doc diff=astextplain 9 | *.DOC diff=astextplain 10 | *.docx diff=astextplain 11 | *.DOCX diff=astextplain 12 | *.dot diff=astextplain 13 | *.DOT diff=astextplain 14 | *.pdf diff=astextplain 15 | *.PDF diff=astextplain 16 | *.rtf diff=astextplain 17 | *.RTF diff=astextplain 18 | -------------------------------------------------------------------------------- /adminSpectate/adminSpectate.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: adminSpectate.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 7:02 PM 17/11/2016 25 | Modification Date: 7:02 PM 17/11/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.Xx mission (A3Wasteland.com). This script will enable the built-in 29 | ArmA 3 spectate system for use within A3Wasteland, which is a much nicer and easier spectate 30 | system to use and control. It will also allow AI spectating as well as player spectating via 31 | a configuration entry/toggle. 32 | 33 | When in spectate mode, your in-game character is hidden/invisible, unable to take damage or be 34 | interacted with. When cancelling spectate mode, your in-game character will reappear at the 35 | same position as previous and will function as normal. It will also re-enable your previous player 36 | view (3rd person/1st person) and ear plug state (muted/unmuted). 37 | 38 | Place this script at... 39 | \client\systems\adminPanel\adminSpectate.sqf 40 | 41 | Edit... 42 | \client\systems\adminPanel\optionSelect.sqf 43 | 44 | And paste in... 45 | case : // admin spectate (soulkobk) 46 | { 47 | closeDialog 0; 48 | execVM "client\systems\adminPanel\adminSpectate.sqf"; 49 | }; 50 | 51 | Within the existing switch code... 52 | switch (lbCurSel _adminSelect) do { }; 53 | 54 | Be sure to change to a consecutive number within the 'case #:' structure. eg 'case 9:'. 55 | 56 | Edit... 57 | \client\systems\adminPanel\loadServerAdministratorMenu.sqf 58 | 59 | Paste in... 60 | "Spectate" 61 | 62 | Into the existing variable array at the bottom of the list... 63 | _panelOptions = [ ]; 64 | 65 | Change the _enableAISpectating variable below... 66 | enable PLAYER and AI spectating = true 67 | enable PLAYER ONLY spectating = false 68 | 69 | Access to spectate is via the 'U' key to activate/deactivate (toggle) spectate mode (admins only). 70 | 71 | Parameter(s): NONE 72 | 73 | Example: NONE 74 | 75 | Change Log: 76 | 1.0.0 - original base script. 77 | 78 | ---------------------------------------------------------------------------------------------- 79 | */ 80 | 81 | _enableAISpectating = true; // default true. allowed values, true or false. 82 | 83 | /* ------------------------------------------------------------------------------------------ 84 | DO NOT EDIT BELOW HERE! 85 | ------------------------------------------------------------------------------------------ */ 86 | 87 | addLocations = { 88 | _townMarkerArray = []; 89 | { 90 | if (["Town_", _x] call fn_startsWith) then 91 | { 92 | _townMarkerArray pushBack _x; 93 | }; 94 | } forEach allMapMarkers; 95 | _townDetails = compileFinal preprocessFileLineNumbers "mapConfig\towns.sqf"; 96 | { 97 | _townMarkerCurr = _x; 98 | { 99 | _townMarkerName = _x select 0; 100 | _townMarkerRadius = _x select 1; 101 | _townMarkerCityName = _x select 2; 102 | _townMarkerPos = getMarkerPos _townMarkerName; 103 | _townMarkerPos set [2,20]; 104 | _townIcon = "\A3\3den\Data\Displays\Display3DEN\PanelLeft\locationList_ca.paa"; 105 | if (_townMarkerCurr isEqualTo _townMarkerName) then 106 | { 107 | ["AddLocation", [_townMarkerName,_townMarkerCityName,"",_townIcon,[_townMarkerPos,[0,0,0],[0,0,0]],[0, false]]] call BIS_fnc_EGSpectator; 108 | }; 109 | } forEach (call _townDetails); 110 | } forEach _townMarkerArray; 111 | }; 112 | 113 | if (isNil "isAdminSpectating") then 114 | { 115 | isAdminSpectating = true; 116 | } 117 | else 118 | { 119 | isAdminSpectating = false; 120 | }; 121 | 122 | if (isAdminSpectating) then 123 | { 124 | hint "Spectate ON"; 125 | playerSoundVolume = soundVolume; 126 | playerCameraView = cameraView; 127 | 0.2 fadeSound 1; 128 | ["Initialize", [player, [], _enableAISpectating]] call BIS_fnc_EGSpectator; 129 | [] spawn {call addLocations}; 130 | [player, true] call fn_hideObjectGlobal; 131 | pvar_enableSimulationGlobal = [player,false]; 132 | publicVariableServer "pvar_enableSimulationGlobal"; 133 | player allowDamage false; 134 | closeDialog 0; 135 | } 136 | else 137 | { 138 | hint "Spectate OFF"; 139 | 0.2 fadeSound playerSoundVolume; 140 | ["Terminate"] call BIS_fnc_EGSpectator; 141 | [player, false] call fn_hideObjectGlobal; 142 | pvar_enableSimulationGlobal = [player,true]; 143 | publicVariableServer "pvar_enableSimulationGlobal"; 144 | player allowDamage true; 145 | player switchCamera playerCameraView; 146 | isAdminSpectating = nil; 147 | closeDialog 0; 148 | }; 149 | 150 | waitUntil {!isNull findDisplay 60492}; 151 | _spectatePress = (findDisplay 60492) displayAddEventHandler ["KeyDown", onKeyPress]; 152 | _spectateRelease = (findDisplay 60492) displayAddEventHandler ["KeyUp", onKeyRelease]; 153 | -------------------------------------------------------------------------------- /afkTimer/afkTimer.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: afkTimer.sqf 22 | Version: 1.0.1 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 7:05 PM 04/11/2016 25 | Modification Date: 1:36 PM 25/11/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.Xx mission (A3Wasteland.com). This script is a player AFK timer. 29 | 30 | The script checks for player velocity and the direction the player is looking, if both are 31 | idle for greater than a second it will trigger the AFK timer. If the player moves or looks 32 | around with the camera, the AFK timer resets. If the player is idle for too long (default 10 33 | minutes), it will result in a notice on screen and the player kicked back to the lobby. 34 | 35 | *Use this script in conjuction with BEC to also kick idle players from the lobby. 36 | 37 | Place this file at... 38 | \client\functions\afkTimer.sqf 39 | 40 | Edit file... 41 | \client\init.sqf 42 | 43 | And paste in at the end of the file... 44 | [] execVM "client\functions\afkTimer.sqf"; 45 | 46 | Parameter(s): 47 | 48 | Example: 49 | 50 | Change Log: 51 | 1.0.0 - original base script. 52 | 1.0.1 - fix for headless client kick. 53 | 54 | ---------------------------------------------------------------------------------------------- 55 | */ 56 | 57 | _afkTimeMax = 10*60; // maximum 10 minutes AFK time (default). 58 | 59 | /* ------------------------------------------------------------------------------------------ 60 | DO NOT EDIT BELOW HERE! 61 | ------------------------------------------------------------------------------------------ */ 62 | 63 | if !(hasInterface) exitWith {}; 64 | 65 | waitUntil {alive player}; 66 | 67 | afkTimerCheck = true; 68 | 69 | _timerAFK = nil; 70 | _playerVelocity = vectorMagnitude velocity player * 3.6; 71 | _playerlastViewDirection = round((((screenToWorld [0.5,0.5] select 0) - (position player select 0)) atan2 ((screenToWorld [0.5,0.5] select 1) - (position player select 1))) + 360) % 360; 72 | 73 | while {afkTimerCheck} do 74 | { 75 | _playerCurrViewDirection = round((((screenToWorld [0.5,0.5] select 0) - (position player select 0)) atan2 ((screenToWorld [0.5,0.5] select 1) - (position player select 1))) + 360) % 360; 76 | uiSleep 0.5; 77 | if (_playerVelocity isEqualTo 0) then 78 | { 79 | if (_playerCurrViewDirection isEqualTo _playerLastViewDirection) then 80 | { 81 | if (isNil "_timerAFK") then 82 | { 83 | _timerAFK = (diag_tickTime + _afkTimeMax); 84 | }; 85 | } 86 | else 87 | { 88 | _timerAFK = nil; 89 | }; 90 | } 91 | else 92 | { 93 | _timerAFK = nil; 94 | }; 95 | _playerVelocity = vectorMagnitude velocity player * 3.6; 96 | _playerLastViewDirection = round((((screenToWorld [0.5,0.5] select 0) - (position player select 0)) atan2 ((screenToWorld [0.5,0.5] select 1) - (position player select 1))) + 360) % 360; 97 | if (!isNil "_timerAFK") then 98 | { 99 | if (diag_tickTime >= _timerAFK) then 100 | { 101 | afkTimerCheck = false; 102 | 9999 cutText ["", "BLACK", 0.01]; 103 | 0 fadeSound 0; 104 | uiNamespace setVariable ["BIS_fnc_guiMessage_status", false]; 105 | _afkMessage = ["You Were Kicked For Being AFK For Too Long!","AFK KICK",true,false] spawn BIS_fnc_guiMessage; 106 | _afkMessageWait = diag_tickTime + 30; 107 | waitUntil {scriptDone _afkMessage || diag_tickTime >= _afkMessageWait}; 108 | endMission "LOSER"; 109 | waitUntil {uiNamespace setVariable ["BIS_fnc_guiMessage_status", false]; closeDialog 0; false}; 110 | }; 111 | }; 112 | uiSleep 0.5; 113 | }; 114 | -------------------------------------------------------------------------------- /atmHack/atm_hack.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: atm_hack.sqf 22 | Version: 1.0.A3WL0 23 | Author: soulkobk (soulkobk.blogspot.com) - base script template by MercyfulFate. 24 | Creation Date: 9:11 PM 29/05/2018 25 | Modification Date: 9:11 PM 29/05/2018 26 | 27 | Description: 28 | For use with A3Wasteland 1.4x mission (A3Wasteland.com). 29 | 30 | Parameter(s): 31 | 32 | Example: 33 | 34 | Change Log: 35 | 1.0.A3WL0 - new atm hack routine for laptopkl for a A3Wasteland hack ATM mission. 36 | 37 | ---------------------------------------------------------------------------------------------- 38 | */ 39 | 40 | #define HACK_DURATION 120 41 | #define HACK_ANIMATION "Acts_Briefing_SA_Loop" 42 | #define HACK_STARTMONEY 125000 43 | 44 | #define ERR_IN_VEHICLE "HACKING ATM CANCELLED! You can't do that whilst in a vehicle." 45 | #define ERR_DESTROYED "HACKING ATM CANCELLED! The ATM has been destroyed." 46 | #define ERR_TOO_FAR_AWAY "HACKING ATM CANCELLED! You moved too far away from the ATM." 47 | #define ERR_CANCELLED "HACKING ATM CANCELLED! What'd you do that for? Get hacking!" 48 | #define ERR_INTERRUPTED "HACKING ATM CANCELLED! The hacking connection was interrupted, try again!" 49 | #define ERR_NO_ATM "HACKING ATM CANCELLED! You are not close enough to an ATM." 50 | #define ERR_NO_LAPTOP "HACKING ATM CANCELLED! You don't have a laptop!" 51 | #define ITEM_COUNT(ITEMID) ITEMID call mf_inventory_count 52 | 53 | private ["_checks","_accounts","_success","_hackedTotalMoney","_hackedTotalNumber","_atm","_error"]; 54 | 55 | _atm = call mf_laptopkl_nearest_atm; 56 | 57 | _error = ""; 58 | switch (true) do 59 | { 60 | case (isNull _atm): {_error = ERR_NO_ATM}; 61 | case (vehicle player != player):{_error = ERR_IN_VEHICLE}; 62 | case (player distance _atm > (sizeOf typeOf _atm / 3) max 2): {_error = ERR_NO_ATM}; 63 | case (ITEM_COUNT(MF_ITEMS_LAPTOPKL) <= 0): {_error = ERR_NO_LAPTOP}; 64 | }; 65 | 66 | if (_error != "") exitWith 67 | { 68 | [format ["%1",_error], 5] call mf_notify_client; 69 | _success = false; 70 | _success 71 | }; 72 | 73 | _progressPercentStr = "000"; 74 | _checks = 75 | { 76 | private ["_progress","_failed","_text"]; 77 | _progress = _this select 0; 78 | _atm = call mf_laptopkl_nearest_atm; 79 | _text = ""; 80 | _failed = true; 81 | _progressPercent = (round(100 * _progress)); 82 | if (_progressPercent < 9) then 83 | { 84 | _progressPercentStr = format ["00%1",_progressPercent]; 85 | } 86 | else 87 | { 88 | if (_progressPercent < 100) then 89 | { 90 | _progressPercentStr = format ["0%1",_progressPercent]; 91 | } 92 | else 93 | { 94 | _progressPercentStr = format ["%1",_progressPercent]; 95 | }; 96 | }; 97 | switch (true) do 98 | { 99 | case (!alive player): {}; // player is dead, no need for a notification. 100 | case (vehicle player != player): {_text = ERR_IN_VEHICLE}; // player is in a vehicle. 101 | case (_atm isEqualTo objNull): {_text = ERR_TOO_FAR_AWAY}; // nearest ATM is not found. 102 | case (player distance _atm > (sizeOf typeOf _atm / 3) max 2): {_text = ERR_TOO_FAR_AWAY}; // ATM is too far away. 103 | case (doCancelAction): {_text = ERR_CANCELLED; doCancelAction = false}; // player pressed cancel button. 104 | default { 105 | switch (selectRandomWeighted [0,0.9,1,0.1,2,0.25,3,0.25]) do 106 | { 107 | case 0: {_text = format["Hacking ATM %1%2 Complete",_progressPercentStr,"%"]}; 108 | case 1: {_text = ""}; 109 | case 2: {_text = format["Hakcnig aTm 010%2 Cometepl",_progressPercentStr,"%"]}; 110 | case 3: {_text = format["Hkacgin AMt 099%2 Cleometp",_progressPercentStr,"%"]}; 111 | }; 112 | _failed = false; 113 | }; 114 | }; 115 | if (round(random 1000) < 1) then // simulated connection interruption. 116 | { 117 | _text = ERR_INTERRUPTED; 118 | _failed = true; 119 | }; 120 | [_failed, _text]; 121 | }; 122 | 123 | _accounts = 124 | { 125 | _hackedTotalMoney = HACK_STARTMONEY; 126 | _hackedTotalNumber = 0; 127 | { 128 | _hacked = _x; 129 | _hackingUID = getPlayerUID _hacked; 130 | _hackingAccountsCheck = []; 131 | if (isPlayer _hacked) then 132 | { 133 | _hackingBMoney = _hacked getVariable ["bmoney",0]; 134 | if (_hackingBMoney > 0) then 135 | { 136 | _hackingPercentage = 0.05; // default of 0.05% (being an INDY/GUER is harder to obtain money via capture zones). 137 | switch (true) do 138 | { 139 | case (side _hacked isEqualTo BLUFOR): {_hackingPercentage = 0.1}; // 1% (increase percentage based upon faction). less armour on uniforms. 140 | case (side _hacked isEqualTo OPFOR): {_hackingPercentage = 0.15}; // 1.5% (increase percentage based upon faction). more armour on uniforms. 141 | }; 142 | _hackingAmount = round(_hackingPercentage * _hackingBMoney); 143 | _hackingBalanceUpdate = (_hackingBMoney - _hackingAmount); 144 | _hacked setVariable ["bmoney",_hackingBalanceUpdate,true]; 145 | if (["A3W_playerSaving"] call isConfigOn) then 146 | { 147 | [_hackingUID, [["BankMoney",_hackingBalanceUpdate]],[]] call fn_saveAccount; // force saves the player account. 148 | }; 149 | _hackedTotalMoney = _hackedTotalMoney + _hackingAmount; 150 | _hackedTotalNumber = _hackedTotalNumber + 1; 151 | }; 152 | }; 153 | } forEach (playableUnits - [player]); 154 | }; 155 | 156 | _success = [HACK_DURATION,HACK_ANIMATION,_checks,[_atm]] call a3w_actions_start; 157 | 158 | if (_success) then 159 | { 160 | _hackedAccounts = call _accounts; 161 | player setVariable ["cmoney",(player getVariable ["cmoney", 0]) + _hackedTotalMoney,true]; 162 | [format ["You Have Successfully Hacked The ATM And Stole $%1 From %2 Players Bank Accounts!",[_hackedTotalMoney] call fn_numbersText,_hackedTotalNumber],5] call mf_notify_client; 163 | [MF_ITEMS_LAPTOPKL,1] call mf_inventory_remove; 164 | }; 165 | 166 | _success; 167 | -------------------------------------------------------------------------------- /atmHack/hackerOutpost_SL1.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: hackerOutpost_SL1.sqf 22 | Version: 1.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 4:39 PM 19/06/2018 25 | Modification Date: 4:39 PM 19/06/2018 26 | 27 | Description: 28 | Place this file at \server\missions\outposts\hackerOutpost_SL1.sqf 29 | 30 | Parameter(s): none 31 | 32 | Example: none 33 | 34 | Change Log: 35 | 1.0 - original base outpost. 36 | 37 | ---------------------------------------------------------------------------------------------- 38 | */ 39 | 40 | [ 41 | ["Land_HBarrier_1_F",[-5,2,0],0], 42 | ["Land_HBarrier_1_F",[-5,2,1.25],0], 43 | ["Land_HBarrier_1_F",[5.125,2,0],0], 44 | ["Land_HBarrier_1_F",[5.125,2,1.25],0], 45 | ["Land_HBarrier_5_F",[5.5,-5,1.25],0], 46 | ["Land_HBarrier_5_F",[5,5.5,1.25],270], 47 | ["Land_HBarrier_5_F",[5.5,-5,0],0], 48 | ["Land_HBarrier_5_F",[-5.75,5,1.25],0], 49 | ["Land_HBarrier_5_F",[-5,0.5,1.25],0.000122943], 50 | ["Land_HBarrier_5_F",[-5,5.5,1.25],270], 51 | ["Land_HBarrier_5_F",[-5,0.5,0],0.000122943], 52 | ["Land_HBarrier_5_F",[-5,-5.75,1.25],270], 53 | ["Land_HBarrier_5_F",[-5.75,5,0],0], 54 | ["Land_HBarrier_5_F",[-5.75,-5,1.25],0], 55 | ["Land_HBarrier_5_F",[5,-5.75,1.25],270], 56 | ["Land_HBarrier_5_F",[5,-5.75,0],270], 57 | ["Land_HBarrier_5_F",[5,5.5,0],270], 58 | ["Land_HBarrier_5_F",[5.5,5,0],0], 59 | ["Land_HBarrier_5_F",[5.125,0.5,1.25],180], 60 | ["Land_HBarrier_5_F",[-5,-5.75,0],270], 61 | ["Land_HBarrier_5_F",[-0.125,-5.625,0],0], 62 | ["Land_HBarrier_5_F",[5.5,5,1.25],0], 63 | ["Land_HBarrier_5_F",[-0.125,5.75,0],0], 64 | ["Land_HBarrier_5_F",[5.125,0.5,0],180], 65 | ["Land_HBarrier_5_F",[-5,5.5,0],270], 66 | ["Land_HBarrier_5_F",[-0.125,-5.625,1.25],0], 67 | ["Land_HBarrier_5_F",[-5.75,-5,0],0], 68 | ["Land_HBarrier_5_F",[-0.125,5.75,1.25],0], 69 | ["Land_LampShabby_F",[-5,4.625,0],180], 70 | ["Land_LampShabby_F",[-5,-4.625,0],0], 71 | ["Land_LampShabby_F",[5.125,4.625,0],180], 72 | ["Land_LampShabby_F",[5.125,-4.625,0],0], 73 | ["Land_WoodenTable_large_F",[-0.875002,4.00001,4.29153e-006],270], 74 | ["Land_WoodenCrate_01_stack_x5_F",[-1.25,0.625,0],255], 75 | ["Land_WoodenCrate_01_stack_x5_F",[10.875,-7.125,0],135], 76 | ["Land_WoodenCrate_01_stack_x5_F",[7.375,7.125,0],195], 77 | ["Land_WoodenCrate_01_stack_x5_F",[2.5,-1.25,0],195], 78 | ["Land_WoodenCrate_01_stack_x5_F",[2.125,-8.125,0],195], 79 | ["Land_WoodenCrate_01_stack_x5_F",[-3,2.625,0],285], 80 | ["Land_WoodenCrate_01_stack_x5_F",[-7.875,7.75,0],195], 81 | ["Land_WoodenCrate_01_stack_x3_F",[0,-3.75,0],165], 82 | ["Land_WoodenCrate_01_stack_x3_F",[7.25,2.625,0],165], 83 | ["Land_WoodenCrate_01_stack_x3_F",[-9.125,-2.375,0],135], 84 | ["Land_WoodenCrate_01_stack_x3_F",[-2.5,-1.5,0],330], 85 | ["Land_WoodenCrate_01_stack_x3_F",[1.375,3.875,0],6.83019e-005], 86 | ["Land_Razorwire_F",[11.125,0,0],90.0001], 87 | ["Land_Razorwire_F",[-7.875,-5,0],0.000122943], 88 | ["Land_Razorwire_F",[-11.25,0,0],90.0001], 89 | ["Land_Razorwire_F",[7.75,-5,0],180], 90 | ["Land_BagFence_Short_F",[9.625,-2.875,0],90.0001], 91 | ["Land_BagFence_Round_F",[-8.875,-0.625001,0],135], 92 | ["Land_BagFence_Round_F",[9,-4.625,0],315], 93 | ["Land_BagFence_Round_F",[-8.875,-4.375,0],45.0002], 94 | ["Land_BagFence_Round_F",[9,-0.875,0],225], 95 | ["Land_Laptop_F",[-0.533493,3.90854,0.862612],15.0001], // this is the laptopkl item for use with hacking ATM's 96 | ["Land_SatellitePhone_F",[-1.43305,3.96657,0.862614],330], 97 | ["Land_SatelliteAntenna_01_F",[3.12516,2.62521,3.8147e-006],240] 98 | ] 99 | -------------------------------------------------------------------------------- /atmHack/hackerOutpost_SL2.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: hackerOutpost_SL2.sqf 22 | Version: 1.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 4:39 PM 19/06/2018 25 | Modification Date: 4:39 PM 19/06/2018 26 | 27 | Description: 28 | Place this file at \server\missions\outposts\hackerOutpost_SL2.sqf 29 | 30 | Parameter(s): none 31 | 32 | Example: none 33 | 34 | Change Log: 35 | 1.0 - original base outpost. 36 | 37 | ---------------------------------------------------------------------------------------------- 38 | */ 39 | 40 | [ 41 | ["Land_Cargo_Patrol_V1_F",[0,0,4.76837e-007],0], 42 | ["Land_CampingTable_F",[1.25,3.375,-0.00259161],360], 43 | ["Land_CampingTable_small_F",[1.75,0.999999,0.00260496],270.001], 44 | ["Land_HBarrier_Big_F",[6.875,6,2.125],90], 45 | ["Land_HBarrier_Big_F",[-0.124998,-8.00002,0],180], 46 | ["Land_HBarrier_Big_F",[-9.07316,-0.971575,0],305.001], 47 | ["Land_HBarrier_Big_F",[-6.875,-6,2.125],270], 48 | ["Land_HBarrier_Big_F",[6.875,6,0],90], 49 | ["Land_HBarrier_Big_F",[9.0732,0.971581,0],125.001], 50 | ["Land_HBarrier_Big_F",[-6.87502,-6.00002,0],270], 51 | ["Land_HBarrier_Big_F",[0.125,8,0],0], 52 | ["Land_HBarrier_3_F",[8.625,-7.125,0],315], 53 | ["Land_HBarrier_3_F",[-1.875,3,1.25],0], 54 | ["Land_HBarrier_3_F",[-8.62502,7.12501,0],135.001], 55 | ["Land_HBarrier_3_F",[-1.875,3,0],0], 56 | ["Land_HBarrier_3_F",[1.875,-3,1.25],0], 57 | ["Land_HBarrier_3_F",[1.875,-3,0],0], 58 | ["Land_LampShabby_F",[3.125,-7.625,0],0], 59 | ["Land_LampShabby_F",[-3.125,7.75,0],180], 60 | ["Land_DragonsTeeth_01_1x1_old_F",[8.625,-8.875,0],0], 61 | ["Land_DragonsTeeth_01_1x1_old_F",[-7.87503,6.37502,0],144.001], 62 | ["Land_DragonsTeeth_01_1x1_old_F",[-8.62502,8.87502,0],180], 63 | ["Land_DragonsTeeth_01_1x1_old_F",[-10,7.25002,0],180], 64 | ["Land_DragonsTeeth_01_1x1_old_F",[10,-7.25,0],0], 65 | ["Land_DragonsTeeth_01_1x1_old_F",[7.875,-6.375,0],324], 66 | ["Land_DragonsTeeth_01_4x2_old_F",[-6.87502,-6.00002,0],270], 67 | ["Land_DragonsTeeth_01_4x2_old_F",[0.125,8,0],0], 68 | ["Land_DragonsTeeth_01_4x2_old_F",[-9.07316,-0.971575,0],305.001], 69 | ["Land_DragonsTeeth_01_4x2_old_F",[6.875,6,0],90], 70 | ["Land_DragonsTeeth_01_4x2_old_F",[9.0732,0.971581,0],125.001], 71 | ["Land_DragonsTeeth_01_4x2_old_F",[-0.124998,-8.00002,0],180], 72 | ["Land_CzechHedgehog_01_new_F",[-3.5,5.25,4.76837e-007],340], 73 | ["Land_CzechHedgehog_01_new_F",[5,-3,4.76837e-007],31], 74 | ["Land_CzechHedgehog_01_new_F",[5.75,-8.25,4.76837e-007],323], 75 | ["Land_CzechHedgehog_01_new_F",[-6.125,10.875,9.53674e-007],22], 76 | ["Land_CzechHedgehog_01_new_F",[10.125,7.75,2.38419e-006],59], 77 | ["Land_CzechHedgehog_01_new_F",[-1.23668,5.28382,9.53674e-007],137.49], 78 | ["Land_SatelliteAntenna_01_F",[6.82879,2.55422,4.32248],43.132], 79 | ["Land_SatelliteAntenna_01_F",[-7.0611,-2.7815,4.30574],44.9729], 80 | ["Land_SatellitePhone_F",[0.87501,3.37502,0.81101],203.002], 81 | ["Land_PCSet_01_screen_F",[1.7498,1.00004,0.813663],277.002], 82 | ["Land_Laptop_F",[1.75001,3.50001,0.811003],222.001], // this is the laptopkl item for use with hacking ATM's 83 | ["O_supplyCrate_F",[0.250095,-1.24976,4.34305],359.997,{_this call randomCrateLoadOut; _this setVariable ["R3F_LOG_disabled",true,true];}] 84 | ] 85 | -------------------------------------------------------------------------------- /atmHack/hackerOutpost_SL3.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: hackerOutpost_SL3.sqf 22 | Version: 1.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 4:39 PM 19/06/2018 25 | Modification Date: 4:39 PM 19/06/2018 26 | 27 | Description: 28 | Place this file at \server\missions\outposts\hackerOutpost_SL2.sqf 29 | 30 | Parameter(s): none 31 | 32 | Example: none 33 | 34 | Change Log: 35 | 1.0 - original base outpost. 36 | 37 | ---------------------------------------------------------------------------------------------- 38 | */ 39 | 40 | [ 41 | ["Land_ConcreteHedgehog_01_F",[10.4041,7.3372,0.0119934],28], 42 | ["Land_ConcreteHedgehog_01_F",[6.5,8.5,0.0119934],330], 43 | ["Land_ConcreteHedgehog_01_F",[-10.625,-7,0.0119934],39], 44 | ["Land_ConcreteHedgehog_01_F",[-4.125,-12.125,0.0119934],338], 45 | ["Land_ConcreteHedgehog_01_F",[-5.625,-7.375,0.0119934],23], 46 | ["Land_ConcreteHedgehog_01_F",[4.625,12,0.0119934],335], 47 | ["Land_ConcreteWall_01_l_8m_F",[9.41781,2.52349,0],255.001], 48 | ["Land_ConcreteWall_01_l_8m_F",[5.59237,-7.98674,0],325], 49 | ["Land_ConcreteWall_01_l_8m_F",[0,-9.75,0],0], 50 | ["Land_ConcreteWall_01_l_8m_F",[-9.16206,3.33472,0],110.002], 51 | ["Land_ConcreteWall_01_l_8m_F",[9.16203,-3.33471,0],290.001], 52 | ["Land_ConcreteWall_01_l_8m_F",[-5.59239,7.98677,0],145.002], 53 | ["Land_ConcreteWall_01_l_8m_F",[4.44055e-006,9.75004,0],180.001], 54 | ["Land_ConcreteWall_01_l_8m_F",[-9.41784,-2.5235,0],75.0016], 55 | ["Land_ConcreteWall_01_l_4m_F",[7.75002,10.125,0],219], 56 | ["Land_ConcreteWall_01_l_4m_F",[-7.75,-10.125,0],39], 57 | ["Land_HBarrier_5_F",[5.47817,3.24688,4.76837e-007],84], 58 | ["Land_HBarrier_5_F",[2,6.125,0],12], 59 | ["Land_HBarrier_5_F",[-4,-5.25,1.25],41], 60 | ["Land_HBarrier_5_F",[3.5,-5.125,0],317], 61 | ["Land_HBarrier_5_F",[-5.75,-1.25,0],287], 62 | ["Land_HBarrier_5_F",[2,6.125,1.25],12], 63 | ["Land_HBarrier_5_F",[-4,-5.25,0],41], 64 | ["Land_HBarrier_1_F",[3.125,-10,0],20.001], 65 | ["Land_HBarrier_1_F",[4,9.5,0],29.0014], 66 | ["Land_HBarrier_1_F",[-4.125,-9.5,0],323], 67 | ["Land_HBarrier_1_F",[8.25,-6.25,0],323], 68 | ["Land_HBarrier_1_F",[4.72817,6.37188,4.76837e-007],297.002], 69 | ["Land_HBarrier_1_F",[10.5,-0.5,0],224.001], 70 | ["Land_HBarrier_1_F",[-8.125,-6.25,0],26.001], 71 | ["Land_HBarrier_1_F",[8.25,6.5,0],337.001], 72 | ["Land_HBarrier_1_F",[-3.25,9.875,0],353.001], 73 | ["Land_HBarrier_1_F",[-10.375,0.375,0],348.001], 74 | ["Land_HBarrier_1_F",[-8.25,6.25,0],323], 75 | ["Land_HBarrier_3_F",[-4.375,5.125,0],305.001], 76 | ["Land_HBarrier_3_F",[-0.375,4.625,1.25],297.001], 77 | ["Land_HBarrier_3_F",[-4.375,5.125,1.25],305.001], 78 | ["Land_HBarrier_3_F",[-0.875,2.5,0],236.001], 79 | ["Land_HBarrier_3_F",[-3.125,-8.125,0],305.001], 80 | ["Land_HBarrier_3_F",[-5,7.25,0],235.001], 81 | ["Land_HBarrier_3_F",[3.5,-2.75,1.25],209.001], 82 | ["Land_HBarrier_3_F",[3.5,-2.75,0],209.001], 83 | ["Land_HBarrier_3_F",[-0.375,4.625,0],297.001], 84 | ["Land_LampShabby_F",[2,-6.25,0],0], 85 | ["Land_LampShabby_F",[-5,0.75,0],88], 86 | ["Land_LampShabby_F",[5.25,3.375,0],222.001], 87 | ["Land_SatelliteAntenna_01_F",[0.737741,-5.35818,9.53674e-007],4.37354e-006], 88 | ["Land_SatelliteAntenna_01_F",[2.1035,-4.20133,4.76837e-007],323.001], 89 | ["Land_WoodenTable_large_F",[-3.75,-2.5,0],360], 90 | ["Land_WoodenTable_large_F",[2.24999,3.87498,5.24521e-006],278.001], 91 | ["Land_WoodenTable_small_F",[-6.5,5.625,0],295], 92 | ["Land_WoodenTable_small_F",[3.625,1.75,-2.38419e-006],173.001], 93 | ["Land_CampingChair_V2_F",[2.75,1.62501,9.53674e-007],305], 94 | ["Land_CampingChair_V2_F",[-3.5,0.12499,4.76837e-006],266], 95 | ["Land_CampingChair_V2_F",[-3.75,-0.749995,1.90735e-006],305], 96 | ["Land_Stretcher_01_folded_olive_F",[2.25,3.5,0],46], 97 | ["Land_Stretcher_01_folded_olive_F",[-6.75,5.25,-4.76837e-007],46], 98 | ["Land_Stretcher_01_olive_F",[-2,1.625,0],327.002], 99 | ["Land_Stretcher_01_olive_F",[-6.875,0.5,4.76837e-007],19.0015], 100 | ["Land_Stretcher_01_olive_F",[-2.25,-4.875,0],314.001], 101 | ["Land_PCSet_01_screen_F",[3.75008,1.49997,0.862648],91.0014], 102 | ["Land_PCSet_01_case_F",[3.74998,2.12505,0.862604],60.9999], 103 | ["Land_PCSet_01_mouse_F",[3.37501,1.49995,0.866083],74.003], 104 | ["Land_PCSet_01_mousepad_F",[3.37499,1.50001,0.862596],57.9997], 105 | ["Land_SatellitePhone_F",[1.62496,3.99994,0.862625],359.999], 106 | ["Land_SatellitePhone_F",[-3.75002,-2.25002,0.862613],255.001], 107 | ["Land_Laptop_F",[2.74998,3.49993,0.862596],1.92639e-005], // this is the laptopkl item for use with hacking ATM's 108 | ["Box_FIA_Support_F",[-0.500005,-1.5,9.53674e-007],75,{_this call randomCrateLoadOut; _this setVariable ["R3F_LOG_disabled",true,true];}] 109 | ] 110 | -------------------------------------------------------------------------------- /atmHack/hackerOutpostsList.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: hackerOutpostsList.sqf 22 | Version: 1.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 4:39 PM 19/06/2018 25 | Modification Date: 4:39 PM 19/06/2018 26 | 27 | Description: 28 | Place this file at \server\missions\outposts\hackerOutpostsList.sqf 29 | 30 | Parameter(s): none 31 | 32 | Example: none 33 | 34 | Change Log: 35 | 1.0 - original outpost list. 36 | 37 | ---------------------------------------------------------------------------------------------- 38 | */ 39 | 40 | [ 41 | "hackerOutpost_SL1", 42 | "hackerOutpost_SL2", 43 | "hackerOutpost_SL3" 44 | ] 45 | -------------------------------------------------------------------------------- /atmHack/init.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: init.sqf 22 | Version: 1.0.A3WL0 23 | Author: soulkobk (soulkobk.blogspot.com) - base script template by MercyfulFate. 24 | Creation Date: 9:11 PM 29/05/2018 25 | Modification Date: 9:11 PM 29/05/2018 26 | 27 | Description: 28 | For use with A3Wasteland 1.4x mission (A3Wasteland.com). 29 | 30 | Place this file at \client\items\laptopkl\init.sqf 31 | Place atm_hack.sqf file at \client\items\laptopkl\atm_hack.sqf 32 | 33 | Edit file storeConfig.sqf and paste in... 34 | ["Laptop (Kali Linux)", "laptopkl", localize "STR_WL_ShopDescriptions_Laptopkl", "client\icons\laptop.paa", 250000, 125000, "HIDDEN"], 35 | ...within the 'customPlayerItems = []' array (~line 1265). 36 | 37 | Edit file stringtable.xml and paste in... 38 | 39 | A laptop with kali linux operating system used for hacking ATM's. 40 | 41 | ...within the '' section. 42 | 43 | Copy/paste in laptop.paa at path \client\icons\laptop.paa 44 | 45 | Edit file \client\items\init.sqf and paste in... 46 | [_this, "laptopkl"] call mf_init; 47 | ...underneath '[_this, "cratemoney"] call mf_init;' 48 | 49 | Parameter(s): 50 | 51 | Example: 52 | 53 | Change Log: 54 | 1.0.A3WL0 - new init for laptopkl for a A3Wasteland hack ATM mission. 55 | 56 | ---------------------------------------------------------------------------------------------- 57 | */ 58 | 59 | MF_ITEMS_LAPTOPKL = "laptopkl"; 60 | 61 | private ["_path","_icon"]; 62 | _path = _this; 63 | _icon = "client\icons\laptop.paa"; 64 | 65 | mf_laptopkl_nearest_atm = { 66 | _objectArray = ["Land_ATM_01_F","Land_ATM_02_F","Land_ATM_01_malden_F","Land_ATM_02_malden_F"]; 67 | _objects = nearestObjects [player,_objectArray,3]; 68 | _object = objNull; 69 | if (count _objects > 0) then 70 | { 71 | _object = _objects select 0; 72 | }; 73 | _object; 74 | } call mf_compile; 75 | 76 | mf_laptopkl_atm_hack = [_path, "atm_hack.sqf"] call mf_compile; 77 | [MF_ITEMS_LAPTOPKL,"Laptop (Kali Linux)",mf_laptopkl_atm_hack,"Land_Laptop_F",_icon,1] call mf_inventory_create; 78 | 79 | private ["_condition","_action"]; 80 | _condition = "(!isNull ([] call mf_laptopkl_nearest_atm)) && (MF_ITEMS_LAPTOPKL call mf_inventory_count > 0)"; 81 | _action = [format [" Hack ATM",_icon],mf_laptopkl_atm_hack,nil,2,true,false,"",_condition]; 82 | ["laptopkl-hacking",_action] call mf_player_actions_set; 83 | -------------------------------------------------------------------------------- /atmHack/laptop.paa: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/atmHack/laptop.paa -------------------------------------------------------------------------------- /atmHack/mission_Hackers.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: mission_Hackers.sqf 22 | Version: 1.0 23 | Author: soulkobk (soulkobk.blogspot.com) - template by [404] Deadbeat, [404] Costlyy, JoSchaap, AgentRev 24 | Creation Date: 4:39 PM 19/06/2018 25 | Modification Date: 4:39 PM 19/06/2018 26 | 27 | Description: 28 | Place this file at \server\missions\moneyMissions\mission_Hackers.sqf 29 | 30 | Edit \server\missions\setupMissionArrays.sqf and add... 31 | ["mission_Hackers", 1] 32 | at the bottom of the existing 'MoneyMissions' array. 33 | 34 | Parameter(s): none 35 | 36 | Example: none 37 | 38 | Change Log: 39 | 1.0 - original base script. 40 | 41 | ---------------------------------------------------------------------------------------------- 42 | */ 43 | 44 | if (!isServer) exitwith {}; 45 | 46 | #include "moneyMissionDefines.sqf"; 47 | 48 | private ["_nbUnits","_outpost","_objects"]; 49 | 50 | _setupVars = 51 | { 52 | _missionType = "ATM Hacker"; 53 | _locationsArray = MissionSpawnMarkers; 54 | _nbUnits = selectRandom [12,16,20,24]; 55 | }; 56 | 57 | _setupObjects = 58 | { 59 | _missionPos = markerPos _missionLocation; 60 | _outpost = selectRandom (call compile preprocessFileLineNumbers "server\missions\outposts\hackerOutpostsList.sqf"); 61 | _objects = [_outpost, _missionPos, 0] call createOutpost; 62 | _aiGroup = createGroup CIVILIAN; 63 | [_aiGroup, _missionPos, _nbUnits, 50] call createCustomGroup; 64 | _missionHintText = format ["The enemy are attempting to hack an ATM remotely, go eradicate the enemy, steal the laptop and go hack an ATM for yourself!",moneyMissionColor] 65 | }; 66 | 67 | _waitUntilMarkerPos = nil; 68 | _waitUntilExec = nil; 69 | _waitUntilCondition = nil; 70 | 71 | _failedExec = 72 | { 73 | { 74 | deleteVehicle _x; 75 | } forEach _objects; 76 | }; 77 | 78 | _successExec = 79 | { 80 | { 81 | _x setVariable ["R3F_LOG_disabled",false,true]; 82 | if ((typeOf _x) isEqualTo "Land_Laptop_F") then 83 | { 84 | _x setVariable ["mf_item_id","laptopkl",true]; // allow the laptopkl to be picked up. 85 | }; 86 | } forEach _objects; 87 | [_locationsArray, _missionLocation, _objects] call setLocationObjects; 88 | _successHintMessage = "The enemy have been eradicated from trying to hack an ATM remotely... quick, go steal the laptop for yourself and get out of there!"; 89 | }; 90 | 91 | _this call moneyMissionProcessor; 92 | -------------------------------------------------------------------------------- /breakInToVehicle/breakInToVehicle.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: breakInToVehicle.sqf - credits to MercyfulFate, AgentRev, Gigatek for original base code 22 | Version: 1.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 12:12 PM 29/09/2016 25 | Modification Date: 12:12 PM 29/09/2016 26 | 27 | Description: 28 | Break in to vehicle replacement script with custom sound effects and loop. Player must have a 29 | toolkit in order to be able to break in to vehicles. 30 | 31 | Place this script at... 32 | \addons\breakInToVehicle\breakInToVehicle.sqf 33 | 34 | Place the sounds at... 35 | \addons\breakInToVehicle\sounds\* 36 | 37 | Edit... 38 | \client\functions\playerActions.sqf 39 | Add in the code... 40 | if (["A3W_vehicleLocking"] call isConfigOn) then 41 | { 42 | [player, [" Break In To Vehicle", "addons\breakInToVehicle\breakInToVehicle.sqf", [cursorTarget], 1, false, false, "", "alive cursorTarget && !isNull cursorTarget && isNull objectParent player && {{ cursorTarget isKindOf _x } count ['LandVehicle', 'Ship', 'Air'] > 0 ;} && cursorTarget getVariable ['ownerUID',''] != getPlayerUID player && locked cursorTarget >= 2 && cursorTarget distance player < 4 && ('ToolKit' in (items player))"]] call fn_addManagedAction; 43 | }; 44 | 45 | Parameter(s): none 46 | 47 | Example: none 48 | 49 | Change Log: 50 | 1.0 - original base script. 51 | 52 | ---------------------------------------------------------------------------------------------- 53 | */ 54 | 55 | #define DURATION (round (random 30)) + 30 56 | #define ANIMATION "AinvPknlMstpSlayWrflDnon_medic" 57 | 58 | #define FORMAT2(STR1,STR2) format ["%1 %2", STR1, STR2] 59 | #define ERR_FAILED "Breaking In To Vehicle Failed!" 60 | #define ERR_IN_VEHICLE "You Can't Do That Whilst In A Vehicle." 61 | #define ERR_DISTANCE "You Are Too Far Away From The Vehicle." 62 | #define ERR_MOVED "Somebody Moved The Vehicle." 63 | #define ERR_TOWED "Somebody Towed Or Lifted The Vehicle." 64 | #define ERR_UNLOCKED "The Vehicle Is Unlocked." 65 | #define ERR_CREW "Somebody Is Inside The Vehicle." 66 | #define ERR_DESTROYED "The Vehicle Is Destroyed." 67 | #define ERR_CANCELLED "Breaking In To Vehicle Cancelled!" 68 | 69 | private _vehicle = ["LandVehicle", "Air", "Ship"] call mf_nearest_vehicle; 70 | 71 | if (_vehicle getVariable ["breakInToVehicleAlarmOn", false]) exitWith {}; 72 | 73 | private _checks = 74 | { 75 | params ["_progress", "_vehicle"]; 76 | private _failed = true; 77 | private _text = ""; 78 | 79 | switch (true) do 80 | { 81 | case (!alive player): { _vehicle setVariable ["breakInToVehicleAlarmOn", false, true]; }; // player is dead, no need for a notification 82 | case (vehicle player != player): { _text = FORMAT2(ERR_FAILED, ERR_IN_VEHICLE); _vehicle setVariable ["breakInToVehicleAlarmOn", false, true]; }; 83 | case (!alive _vehicle): { _text = FORMAT2(ERR_FAILED, ERR_DESTROYED); _vehicle setVariable ["breakInToVehicleAlarmOn", false, true]; }; 84 | case (locked _vehicle < 2): { _text = FORMAT2(ERR_FAILED, ERR_UNLOCKED); _vehicle setVariable ["breakInToVehicleAlarmOn", false, true]; }; 85 | case ({alive _x} count crew _vehicle > 0): { _text = FORMAT2(ERR_FAILED, ERR_CREW); _vehicle setVariable ["breakInToVehicleAlarmOn", false, true]; }; 86 | case (doCancelAction): { _text = ERR_CANCELLED; doCancelAction = false; _vehicle setVariable ["breakInToVehicleAlarmOn", false, true]; }; 87 | default 88 | { 89 | _text = format ["Breaking In To Vehicle... %1%2 Complete", round(100 * _progress), "%"]; 90 | _failed = false; 91 | }; 92 | }; 93 | [_failed, _text] 94 | }; 95 | 96 | _soundThread = [_vehicle] spawn { 97 | params ["_vehicle"]; 98 | _soundFiles = ["vehicleAlarm-01-001.ogg","vehicleAlarm-01-002.ogg","vehicleAlarm-01-003.ogg","vehicleAlarm-01-004.ogg","vehicleAlarm-01-005.ogg","vehicleAlarm-01-006.ogg"]; 99 | _s = 0; _sound = 0; _vehicle setVariable ["breakInToVehicleAlarmOn", true]; 100 | while {(_vehicle getVariable ["breakInToVehicleAlarmOn", false])} do 101 | { 102 | _soundFile = (_soundFiles select _sound); 103 | _soundPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString; 104 | _soundToPlay = _soundPath + "addons\breakInToVehicle\sounds\" + _soundFile; 105 | playSound3D [_soundToPlay, _vehicle, false, getPosASL _vehicle, 2, 1, 300]; 106 | uiSleep 1; 107 | _s = _s + (1 / 4); 108 | if (_s >= (count _soundFiles)) then {_s = 0}; 109 | _sound = (floor _s); 110 | }; 111 | }; 112 | 113 | private _outcome = [DURATION, ANIMATION, _checks, [_vehicle]] call a3w_actions_start; 114 | 115 | if (_outcome) then 116 | { 117 | _vehicle call fn_forceSaveVehicle; 118 | ["Break In To Vehicle Successful!", 5] call mf_notify_client; 119 | terminate _soundThread; 120 | uiSleep 1; 121 | [_vehicle, 1] call A3W_fnc_setLockState; // Unlock 122 | _soundPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString; 123 | _soundToPlay = _soundPath + "addons\breakInToVehicle\sounds\vehicleAlarm-01-007.ogg"; 124 | _sound = playSound3D [_soundToPlay, _vehicle, false, getPosASL _vehicle, 2, 1, 150]; 125 | _soundToPlay = _soundPath + "addons\breakInToVehicle\sounds\vehicleAlarm-01-008.ogg"; 126 | _sound = playSound3D [_soundToPlay, _vehicle, false, getPosASL _vehicle, 1, 1, 150]; 127 | }; 128 | 129 | if !(_outcome) then 130 | { 131 | terminate _soundThread; 132 | uiSleep 1; 133 | _soundPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString; 134 | _soundToPlay = _soundPath + "addons\breakInToVehicle\sounds\vehicleAlarm-01-000.ogg"; 135 | _sound = playSound3D [_soundToPlay, _vehicle, false, getPosASL _vehicle, 2, 1, 150]; 136 | }; 137 | 138 | uiSleep 1; 139 | _vehicle setVariable ["breakInToVehicleAlarmOn", false, true]; 140 | 141 | _outcome 142 | -------------------------------------------------------------------------------- /breakInToVehicle/sounds/vehicleAlarm-01-000.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/breakInToVehicle/sounds/vehicleAlarm-01-000.ogg -------------------------------------------------------------------------------- /breakInToVehicle/sounds/vehicleAlarm-01-001.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/breakInToVehicle/sounds/vehicleAlarm-01-001.ogg -------------------------------------------------------------------------------- /breakInToVehicle/sounds/vehicleAlarm-01-002.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/breakInToVehicle/sounds/vehicleAlarm-01-002.ogg -------------------------------------------------------------------------------- /breakInToVehicle/sounds/vehicleAlarm-01-003.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/breakInToVehicle/sounds/vehicleAlarm-01-003.ogg -------------------------------------------------------------------------------- /breakInToVehicle/sounds/vehicleAlarm-01-004.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/breakInToVehicle/sounds/vehicleAlarm-01-004.ogg -------------------------------------------------------------------------------- /breakInToVehicle/sounds/vehicleAlarm-01-005.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/breakInToVehicle/sounds/vehicleAlarm-01-005.ogg -------------------------------------------------------------------------------- /breakInToVehicle/sounds/vehicleAlarm-01-006.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/breakInToVehicle/sounds/vehicleAlarm-01-006.ogg -------------------------------------------------------------------------------- /breakInToVehicle/sounds/vehicleAlarm-01-007.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/breakInToVehicle/sounds/vehicleAlarm-01-007.ogg -------------------------------------------------------------------------------- /breakInToVehicle/sounds/vehicleAlarm-01-008.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/breakInToVehicle/sounds/vehicleAlarm-01-008.ogg -------------------------------------------------------------------------------- /buryDeadBody/buryDeadBody.paa: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/buryDeadBody/buryDeadBody.paa -------------------------------------------------------------------------------- /buryDeadBody/buryDeadBody.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: buryDeadBody.sqf 22 | Version: 1.0.5 23 | Author: soulkobk (soulkobk.blogspot.com) (base script authors MercyfulFate, AgentRev, Gigatek) 24 | Creation Date: 12:47 PM 29/10/2016 25 | Modification Date: 7:38 PM 23/12/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.Xx mission (A3Wasteland.com). The script adds a 'Bury Dead Body' 29 | action to dead bodies for a COST set in the header of this script (default $5000 of CARRIED 30 | money). The action will remove dead bodies and immediate surrounding (< 2 meters) dropped items. 31 | 32 | Place this file at... 33 | \addons\buryDeadBody\buryDeadBody.sqf 34 | 35 | Place the buryDeadBody.paa icon at... 36 | \addons\buryDeadBody\buryDeadBody.paa 37 | 38 | Edit file... 39 | \client\functions\playerActions.sqf 40 | 41 | And paste in... 42 | [" Bury Dead Body", "addons\buryDeadBody\buryDeadBody.sqf", [], 1.1, false, false, "", "!(([allDeadMen,[],{player distance _x},'ASCEND',{((player distance _x) < 2) && !(_x getVariable ['buryDeadBodyBurried',false])}] call BIS_fnc_sortBy) isEqualTo [])"], 43 | 44 | Above the line... 45 | [format ["....... 46 | 47 | Parameter(s): NONE 48 | 49 | Example: NONE 50 | 51 | Change Log: 52 | 1.0.0 - original base script. all credit to original authors of base script. 53 | 1.0.1 - updated setVariable to global, line 91 and 131. 54 | 1.0.2 - updated enableSimulationGlobal function for server-side execution and updated 55 | deleteVehicle to use objectFromNetId. 56 | 1.0.3 - changed all cursorObject to cursorTarget for more consistant error checking 57 | (playerActions.sqf entry also updated). 58 | 1.0.4 - redid closest dead body check (addAction and script). script now uses proximity 59 | (BIS_fnc_sortBy) which is much more consistent for accessing dead bodies. 60 | 1.0.5 - changed animation loop to action "hideBody" and removed some unneeded code. 61 | 62 | ---------------------------------------------------------------------------------------------- 63 | */ 64 | 65 | _price = 5000; 66 | _duration = (round (random 30)) + 30; 67 | _animation = "AinvPknlMstpSlayWrflDnon_medic"; 68 | 69 | _cleanUpObjects = [ 70 | "Land_Suitcase_F", // Repair Kit 71 | "Land_BakedBeans_F", // Canned Food 72 | "Land_BottlePlastic_V2_F", // Water Bottle 73 | "Land_Sleeping_bag_folded_F", // Spawn Beacon 74 | "Land_CanisterFuel_F", // Jerrycan 75 | "Land_CanisterOil_F", // Syphon Hose 76 | "Land_Ground_sheet_folded_OPFOR_F", // Camo Net 77 | "GroundWeaponHolder", // static weapon holder, all weapons, weapon attachments, magazines, throwables, backpacks, vests, uniforms, helments, etc 78 | "WeaponHolderSimulated" // simulated weapon holder, all weapons, weapon attachments, magazines, throwables, backpacks, vests, uniforms, helments, etc 79 | ]; 80 | 81 | _maxObjectDistanceGather = 3; // max distance from dead body to gather and delete items. 82 | 83 | /* ------------------------------------------------------------------------------------------ 84 | DO NOT EDIT BELOW HERE! 85 | ------------------------------------------------------------------------------------------ */ 86 | 87 | #define FORMAT1(STR1,STR2) format ["%1 %2", STR1, STR2] 88 | #define ERR_FAILED "Burying Dead Body Failed!" 89 | #define ERR_IN_VEHICLE "You Can't Bury A Dead Body Whilst In A Vehicle." 90 | #define ERR_ALIVE "This Is No Dead Body!" 91 | #define ERR_CANCELLED "Burying Dead Body Cancelled!" 92 | 93 | private _deadBody = ([allDeadMen,[],{player distance _x},"ASCEND",{(player distance _x) < 2}] call BIS_fnc_sortBy) select 0; 94 | 95 | if ((alive _deadBody) && !(_deadBody isKindOf "Man")) exitWith {}; 96 | 97 | if ((typeName _price != "SCALAR") || (typeName _duration != "SCALAR")) exitWith {}; 98 | 99 | _deadBodyBuried = (_deadBody getVariable ["buryDeadBodyBurried",nil]); 100 | if (!isNil "_deadBodyBuried") exitWith 101 | { 102 | ["Dead Body Is Already Successfully Burried!", 5] call mf_notify_client; 103 | }; 104 | 105 | _durationStatic = (_deadBody getVariable ["buryDeadBodyDuration",nil]); 106 | if (!isNil "_durationStatic") then 107 | { 108 | _duration = _durationStatic; 109 | } 110 | else 111 | { 112 | _deadBody setVariable ["buryDeadBodyDuration",_duration,true]; 113 | }; 114 | 115 | _playerCMoney = player getVariable ["cmoney",0]; 116 | uiSleep 0.1; 117 | 118 | if (_playerCMoney < _price) exitWith 119 | { 120 | _text = format ["Burying A Dead Body Costs $%1, You Do Not Have Enough Carried Money!",_price]; 121 | [_text, 5] call mf_notify_client; 122 | }; 123 | 124 | _text = format ["\n\n\nBurying A Dead Body Will Cost You $%1, You Can Cancel At Anytime Before It Reaches 100%2 Complete!",_price,"%"]; 125 | [_text, _duration] call mf_notify_client; 126 | 127 | private _checks = 128 | { 129 | params ["_progress", "_vehicle"]; 130 | private _failed = true; 131 | private _text = ""; 132 | switch (true) do 133 | { 134 | case (!alive player): {}; 135 | case (vehicle player != player): { _text = FORMAT1(ERR_FAILED, ERR_IN_VEHICLE); }; 136 | case (alive _deadBody): { _text = FORMAT1(ERR_FAILED, ERR_ALIVE); }; 137 | case (doCancelAction): { _text = ERR_CANCELLED; doCancelAction = false; }; 138 | default 139 | { 140 | _text = format ["Burying Dead Body... %1%2 Complete",round(100 * _progress),"%"]; 141 | _failed = false; 142 | }; 143 | }; 144 | [_failed, _text] 145 | }; 146 | 147 | private _outcome = [_duration, _animation, _checks, [_deadBody]] call a3w_actions_start; 148 | 149 | if (_outcome) then 150 | { 151 | _deadBody setVariable ["buryDeadBodyBurried",true,true]; 152 | player setVariable ["cmoney",(_playerCMoney - _price),true]; 153 | _deadBodyObjects = nearestObjects [_deadBody, _cleanUpObjects, _maxObjectDistanceGather]; 154 | { 155 | deleteVehicle objectFromNetId (netID _x); 156 | } forEach _deadBodyObjects; 157 | uiSleep 0.5; 158 | player action ["hideBody",_deadBody]; 159 | _buryTime = time + 5; 160 | waitUntil {time > _buryTime}; 161 | _deadBodyLoop = 0; 162 | while {(!isNull _deadBody) || (_deadBodyLoop < 50)} do 163 | { 164 | deleteVehicle objectFromNetId (netID _deadBody); 165 | _deadBodyLoop = _deadBodyLoop + 1; 166 | uiSleep 0.1; 167 | }; 168 | if (!isNull _deadBody) then 169 | { 170 | ["Someone Dug Up The Dead Body, You Get A Refund!", 5] call mf_notify_client; 171 | _deadBody setVariable ["buryDeadBodyBurried",nil,true]; 172 | uiSleep 0.5; 173 | player setVariable ["cmoney",(_playerCMoney + _price),true]; 174 | } 175 | else 176 | { 177 | ["Burying Of Dead Body Successful!", 5] call mf_notify_client; 178 | }; 179 | }; 180 | 181 | _outcome 182 | -------------------------------------------------------------------------------- /buySaveLoadOut/buyLoadOut.paa: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/buySaveLoadOut/buyLoadOut.paa -------------------------------------------------------------------------------- /buySaveLoadOut/saveLoadOut.paa: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/buySaveLoadOut/saveLoadOut.paa -------------------------------------------------------------------------------- /cfgGrabber/fn_cfgGrabber.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2017 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: fn_cfgGrabber.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 00:00 PM 28/06/2017 25 | Modification Date: 00:00 PM 28/06/2017 26 | 27 | Description: 28 | Run this script to gather all weapons, items, etc to clipboard. Use this list in your scripts 29 | for items arrays. 30 | 31 | Parameter(s): 32 | 33 | Example: 34 | 35 | Change Log: 36 | 1.0.0 - original base script. 37 | 38 | ---------------------------------------------------------------------------------------------- 39 | */ 40 | /////////////////////////////////////////////////////////////////////////////////////////////////// 41 | _br = toString [13, 10]; 42 | _tab = toString [9]; 43 | /////////////////////////////////////////////////////////////////////////////////////////////////// 44 | _str = ""; 45 | _str = "/*" + _br + _tab + "fn_cfgGrabber by soulkobk (soulkobk.blogspot.com)." + _br; 46 | _str = _str + _tab + format ["array list: objectClass %1 objectDisplayName - objectLabel - objectDLC/objectExpansion","//"] + _br; 47 | _str = _str + _tab + "regex: remove all double quotes, replace single quotes with double quotes" + _br; 48 | _str = _str + "*/" + _br + _br; 49 | /////////////////////////////////////////////////////////////////////////////////////////////////// 50 | _cfgWeapons = configFile >> "CfgWeapons"; 51 | _weapons = []; 52 | _label = ""; 53 | for "_i" from 0 to (count _cfgWeapons)-1 do 54 | { 55 | _curWeapon = _cfgWeapons select _i; 56 | 57 | if (isClass _curWeapon) then 58 | { 59 | _className = configName _curWeapon; 60 | _displayName = getText(_curWeapon >> "displayName"); if (_displayName == "") then { _displayName = "NODESCRIPTION"}; 61 | _dlc = getText(_curWeapon >> "DLC"); if (_dlc == "") then { _dlc = "VANILLA"}; 62 | _weaponType = getNumber(_curWeapon >> "type"); 63 | _scope = getNumber(_curWeapon >> "scope"); 64 | _picture = getText(_curWeapon >> "picture"); if (_picture == "") exitWith { _picture = "NONE"}; 65 | 66 | if (_scope >= 2 && _weaponType in [1,2,4] && _picture != "" && !(_className in _weapons) && _className != "NVGoggles") then 67 | { 68 | switch (_weaponType) do 69 | { 70 | case 1: { _label = "PRIMARYWEAPON"}; 71 | case 2: { _label = "SECONDARYWEAPON"}; 72 | case 4: { _label = "LAUNCHERWEAPON"}; 73 | case 4096: { _label = "BINOCULAR"}; 74 | }; 75 | 76 | _line = "'" + format ["%1",_className] + "'" + format [" // %1 - %2 - %3",_displayName,_label,(toUpper _dlc)]; 77 | _str = _str + _tab + (str _line) + _br; 78 | _weapons set[count _weapons, _className]; 79 | }; 80 | }; 81 | }; 82 | /////////////////////////////////////////////////////////////////////////////////////////////////// 83 | _cfgWeapons = configFile >> "CfgMagazines"; 84 | _magazines = []; 85 | for "_i" from 0 to (count _cfgWeapons)-1 do 86 | { 87 | _curWeapon = _cfgWeapons select _i; 88 | 89 | if (isClass _curWeapon) then 90 | { 91 | _className = configName _curWeapon; 92 | _displayName = getText(_curWeapon >> "displayName"); if (_displayName == "") then { _displayName = "NODESCRIPTION"}; 93 | _dlc = getText(_curWeapon >> "DLC"); if (_dlc == "") then { _dlc = "VANILLA"}; 94 | _weaponType = getNumber(_curWeapon >> "type"); 95 | _scope = getNumber(_curWeapon >> "scope"); 96 | _picture = getText(_curWeapon >> "picture"); if (_picture == "") exitWith { _picture = "NONE"}; 97 | if (_scope >= 2 && _picture != "" && !(_className in _magazines)) then 98 | { 99 | _label = "MAGAZINE"; 100 | _line = "'" + format ["%1",_className] + "'" + format [" // %1 - %2 - %3",_displayName,_label,(toUpper _dlc)]; 101 | _str = _str + _tab + (str _line) + _br; 102 | _magazines set[count _magazines, _className]; 103 | }; 104 | }; 105 | }; 106 | /////////////////////////////////////////////////////////////////////////////////////////////////// 107 | _cfgWeapons = configFile >> "CfgWeapons"; 108 | _items = []; 109 | for "_i" from 0 to (count _cfgWeapons)-1 do 110 | { 111 | _curWeapon = _cfgWeapons select _i; 112 | 113 | if (isClass _curWeapon) then 114 | { 115 | _className = configName _curWeapon; 116 | _displayName = getText(_curWeapon >> "displayName"); if (_displayName == "") then { _displayName = "NODESCRIPTION"}; 117 | _dlc = getText(_curWeapon >> "DLC"); if (_dlc == "") then { _dlc = "VANILLA"}; 118 | _weaponType = getNumber(_curWeapon >> "type"); 119 | _scope = getNumber(_curWeapon >> "scope"); 120 | _picture = getText(_curWeapon >> "picture"); if (_picture == "") exitWith { _picture = "NONE"}; 121 | if (_scope >= 2 && _weaponType in [131072,4096] && _picture != "" && !(_className in _items) && _className != "Binocular") then 122 | { 123 | switch (_weaponType) do 124 | { 125 | case 4096: { _label = "BINOCULAR"}; 126 | case 131072: { _label = "ITEM"}; 127 | }; 128 | 129 | if (_label == "ITEM") then 130 | { 131 | if ("V" in (_className splitString "_")) then { _label = "VEST"}; 132 | if ("U" in (_className splitString "_")) then { _label = "UNIFORM"}; 133 | if ("H" in (_className splitString "_")) then { _label = "HEADGEAR"}; 134 | if ("muzzle" in (_className splitString "_")) then { _label = "MUZZLE"}; 135 | if ("bipod" in (_className splitString "_")) then { _label = "BIPOD"}; 136 | if ("optic" in (_className splitString "_")) then { _label = "OPTIC"}; 137 | if ("acc" in (_className splitString "_")) then { _label = "WEAPONLIGHT"}; 138 | }; 139 | _line = "'" + format ["%1",_className] + "'" + format [" // %1 - %2 - %3",_displayName,_label,(toUpper _dlc)]; 140 | _str = _str + _tab + (str _line) + _br; 141 | _items set[count _items, _className]; 142 | }; 143 | }; 144 | }; 145 | /////////////////////////////////////////////////////////////////////////////////////////////////// 146 | _cfgWeapons = configFile >> "CfgVehicles"; 147 | _backpacks = []; 148 | for "_i" from 0 to (count _cfgWeapons)-1 do 149 | { 150 | _curWeapon = _cfgWeapons select _i; 151 | 152 | if (isClass _curWeapon) then 153 | { 154 | _className = configName _curWeapon; 155 | _displayName = getText(_curWeapon >> "displayName"); if (_displayName == "") then { _displayName = "NODESCRIPTION"}; 156 | _dlc = getText(_curWeapon >> "DLC"); if (_dlc == "") then { _dlc = "VANILLA"}; 157 | _weaponType = getText(_curWeapon >> "vehicleClass"); 158 | _scope = getNumber(_curWeapon >> "scope"); 159 | _picture = getText(_curWeapon >> "picture"); if (_picture == "") exitWith { _picture = "NONE"}; 160 | if (_scope >= 2 && _weaponType == "Backpacks" && _picture != "" && !(_className in _backpacks)) then 161 | { 162 | _label = "BACKPACK"; 163 | _line = "'" + format ["%1",_className] + "'" + format [" // %1 - %2 - %3",_displayName,_label,(toUpper _dlc)]; 164 | _str = _str + _tab + (str _line) + _br; 165 | _backpacks set[count _backpacks, _className]; 166 | }; 167 | }; 168 | }; 169 | /////////////////////////////////////////////////////////////////////////////////////////////////// 170 | copyToClipboard _str; 171 | -------------------------------------------------------------------------------- /cfgGrabber/fn_cfgGrabberMen.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2017 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: fn_cfgGrabberMen.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 00:00 PM 28/06/2017 25 | Modification Date: 00:00 PM 28/06/2017 26 | 27 | Description: 28 | Run this script to gather all men to clipboard. Use this list in your scripts 29 | for items arrays. 30 | 31 | Parameter(s): 32 | 33 | Example: 34 | 35 | Change Log: 36 | 1.0.0 - original base script. 37 | 38 | ---------------------------------------------------------------------------------------------- 39 | */ 40 | /////////////////////////////////////////////////////////////////////////////////////////////////// 41 | _br = toString [13, 10]; 42 | _tab = toString [9]; 43 | 44 | _str = ""; 45 | _str = "/*" + _br + _tab + "fn_cfgGrabberMen by soulkobk (soulkobk.blogspot.com)." + _br; 46 | _str = _str + _tab + format ["array list: objectClass %1 objectDisplayName - objectLabel - objectDLC/objectExpansion","//"] + _br; 47 | _str = _str + _tab + "regex: remove all double quotes, replace single quotes with double quotes" + _br; 48 | _str = _str + "*/" + _br + _br; 49 | 50 | _cfgSoldier = configFile >> "CfgVehicles"; 51 | for "_i" from 0 to (count _cfgSoldier)-1 do 52 | { 53 | _curSoldier = _cfgSoldier select _i; 54 | 55 | if (isClass _curSoldier) then 56 | { 57 | _className = configName _curSoldier; 58 | _displayName = getText(_curSoldier >> "displayName"); if (_displayName == "") then { _displayName = "NODESCRIPTION"}; 59 | _dlc = getText(_curSoldier >> "DLC"); if (_dlc == "") then { _dlc = "VANILLA"}; 60 | _typeSoldier = ["Men", getText(_curSoldier >> "vehicleClass")] call BIS_fnc_inString; 61 | _scope = getNumber(_curSoldier >> "scope"); 62 | if (_scope >= 2 && (_typeSoldier isEqualTo true)) then 63 | { 64 | _label = getText(_curSoldier >> "vehicleClass"); 65 | _line = "'" + format ["%1",_className] + "'" + format [" // %1 - %2 - %3",_displayName,(toUpper _label),(toUpper _dlc)]; 66 | _str = _str + _tab + (str _line) + _br; 67 | }; 68 | }; 69 | }; 70 | 71 | copyToClipboard _str; 72 | -------------------------------------------------------------------------------- /cfgGrabber/fn_cfgGrabberVehicle.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2017 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: fn_cfgGrabberVehicle.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 00:00 PM 28/06/2017 25 | Modification Date: 00:00 PM 28/06/2017 26 | 27 | Description: 28 | Run this script to gather all vehicles to clipboard. Use this list in your scripts 29 | for items arrays. 30 | 31 | Parameter(s): 32 | 33 | Example: 34 | 35 | Change Log: 36 | 1.0.0 - original base script. 37 | 38 | ---------------------------------------------------------------------------------------------- 39 | */ 40 | /////////////////////////////////////////////////////////////////////////////////////////////////// 41 | _br = toString [13, 10]; 42 | _tab = toString [9]; 43 | 44 | _str = ""; 45 | _str = "/*" + _br + _tab + "fn_cfgGrabberVehicle by soulkobk (soulkobk.blogspot.com)." + _br; 46 | _str = _str + _tab + format ["array list: objectClass %1 objectDisplayName - objectLabel - objectDLC/objectExpansion","//"] + _br; 47 | _str = _str + _tab + "regex: remove all double quotes, replace single quotes with double quotes" + _br; 48 | _str = _str + "*/" + _br + _br; 49 | 50 | _cfgVehicle = configFile >> "CfgVehicles"; 51 | for "_i" from 0 to (count _cfgVehicle)-1 do 52 | { 53 | _curVehicle = _cfgVehicle select _i; 54 | 55 | if (isClass _curVehicle) then 56 | { 57 | _className = configName _curVehicle; 58 | _displayName = getText(_curVehicle >> "displayName"); if (_displayName == "") then { _displayName = "NODESCRIPTION"}; 59 | _dlc = getText(_curVehicle >> "DLC"); if (_dlc == "") then { _dlc = "VANILLA"}; 60 | _typeVehicle = getText(_curVehicle >> "DriverAction"); 61 | _scope = getNumber(_curVehicle >> "scope"); 62 | if (_scope >= 2 && !(_typeVehicle isEqualTo "")) then 63 | { 64 | _label = getText(_curVehicle >> "vehicleClass"); 65 | _line = "'" + format ["%1",_className] + "'" + format [" // %1 - %2 - %3",_displayName,(toUpper _label),(toUpper _dlc)]; 66 | _str = _str + _tab + (str _line) + _br; 67 | }; 68 | }; 69 | }; 70 | 71 | copyToClipboard _str; 72 | -------------------------------------------------------------------------------- /cleanStores/cleanStores.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: cleanStores.sqf 22 | Version: 1.0.2 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 9:33 PM 04/07/2016 25 | Modification Date: 8:57 PM 08/11/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.2b mission (A3Wasteland.com). This script is for cleaning up left-over 29 | store objects that lay around and clutter up the store floors with unwanted items that were 30 | disregarded by players (players don't always place items in the store crates). 31 | 32 | Place this script in the mission file, in path \addons\cleanStores\cleanStores.sqf and edit 33 | \server\init.sqf and place the following line at the bottom of the script... 34 | [] ExecVM "addons\cleanStores\cleanStores.sqf"; 35 | 36 | The script will output to the server log file that the script is initialized and for how many 37 | stores and radius. 38 | 39 | Parameter(s): none 40 | 41 | Example: none 42 | 43 | Change Log: 44 | 1.0.0 - original base script. 45 | 1.0.1 - updated to getNumber of the mapSize from the configFile and calculate the map center, 46 | and calculate a proper radius to cover the entire map square. 47 | 1.0.2 - updated deleteVehicle to use objectFromNetId. 48 | 49 | ---------------------------------------------------------------------------------------------- 50 | */ 51 | 52 | if !(isServer) exitWith {}; // DO NOT DELETE THIS LINE! 53 | 54 | SL_cleanUpDuration = 2*60; // maximum duration time in seconds that items are left on the ground for. (default 2 minutes) 55 | SL_cleanUpRadius = 15; // maximum radius in meters from store NPC to clean up. (default 15 meters) 56 | SL_cleanUpSleep = 10; // sleep time in seconds per object loop check. (default 10 seconds) 57 | 58 | SL_cleanUpObjects = [ 59 | // "Land_Suitcase_F", // Repair Kit 60 | // "Land_BakedBeans_F", // Canned Food 61 | // "Land_BottlePlastic_V2_F", // Water Bottle 62 | // "Land_Sleeping_bag_folded_F", // Spawn Beacon 63 | // "Land_CanisterFuel_F", // Jerrycan 64 | // "Land_CanisterOil_F", // Syphon Hose 65 | // "Land_Ground_sheet_folded_OPFOR_F", // Camo Net 66 | "GroundWeaponHolder", // static weapon holder, all weapons, weapon attachments, magazines, throwables, backpacks, vests, uniforms, helments, etc 67 | "WeaponHolderSimulated" // simulated weapon holder, all weapons, weapon attachments, magazines, throwables, backpacks, vests, uniforms, helments, etc 68 | ]; 69 | 70 | /* ------------------------------------------------------------------------------------------ 71 | DO NOT EDIT BELOW HERE! 72 | ------------------------------------------------------------------------------------------ */ 73 | 74 | _mapSizeSquare = getNumber (configfile >> "CfgWorlds" >> worldName >> "mapSize"); 75 | _mapSizeEllipse = sqrt ((_mapSizeSquare * _mapSizeSquare) + (_mapSizeSquare * _mapSizeSquare)); 76 | _entitiesStoreNPC = ([(_mapSizeSquare / 2),(_mapSizeSquare / 2),0] nearEntities [["CAManBase"], _mapSizeEllipse]) - allPlayers; 77 | 78 | _storeNumbers = 0; 79 | _storePositions = []; 80 | { 81 | _isStore = (toLower str _x) find "store"; 82 | if (_isStore != -1) then 83 | { 84 | _storePositions pushBack (position _x); 85 | _storeNumbers = _storeNumbers + 1; 86 | }; 87 | } forEach _entitiesStoreNPC; 88 | 89 | { 90 | [_x] spawn { 91 | params ["_storePosition"]; 92 | while {true} do 93 | { 94 | _nearestObjects = nearestObjects [_storePosition, SL_cleanUpObjects, SL_cleanUpRadius]; 95 | if (count _nearestObjects != 0) then 96 | { 97 | { 98 | _cleanUpTime = _x getVariable ["SL_cleanUpTime", 0]; 99 | if (_cleanUpTime == 0) then 100 | { 101 | _x setVariable ["SL_cleanUpTime", diag_tickTime, false]; 102 | } 103 | else 104 | { 105 | if (diag_tickTime > (_cleanUpTime + SL_cleanUpDuration)) then 106 | { 107 | deleteVehicle objectFromNetId (netID _x); 108 | }; 109 | }; 110 | } forEach _nearestObjects; 111 | }; 112 | uiSleep SL_cleanUpSleep; 113 | }; 114 | }; 115 | } forEach _storePositions; 116 | 117 | diag_log format ["[STORE CLEANUP] -> Object clean up initiated for %1 stores, each at a radius of %2 meters.", _storeNumbers, SL_cleanUpRadius]; 118 | -------------------------------------------------------------------------------- /cleanupMissionObjects/cleanupMissionObjects.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: cleanupMissionObjects.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 6:59 PM 06/06/2016 25 | Modification Date: 10:47 PM 13/06/2016 26 | 27 | Description: 28 | Coded for use with A3Wasteland 1.Xx mission, to clean up mission objects after a successful 29 | mission, and after a certain time period (currently set at 10 minutes after mission complete). 30 | It will cycle through all objects found at the location given and delete objects in the 31 | _missionObjectsToDelete array if no 'man' are close by or object has been locked (change 32 | of ownership) within the radius set in this script. 33 | 34 | Place this script in directory... 35 | \server\missions\factoryMethods\cleanupMissionObjects.sqf 36 | 37 | Edit... 38 | \server\functions\serverCompile.sqf 39 | 40 | And paste in... 41 | cleanupMissionObjects = [_path, "cleanupMissionObjects.sqf"] call mf_compile; 42 | 43 | Underneath the line... 44 | //Factory Compiles 45 | 46 | Edit... 47 | \server\missions\missionProcessor.sqf 48 | 49 | And paste in... 50 | [markerPos _missionLocation] spawn cleanupMissionObjects; 51 | 52 | Directly after the line... 53 | diag_log format ["WASTELAND SERVER - %1 Mission%2 complete: %3", MISSION_PROC_TYPE_NAME, _controllerSuffix, _missionType]; 54 | 55 | Parameter(s): position array ([x,y,z]) 56 | 57 | Example: [markerPos _missionLocation] spawn cleanupMissionObjects; 58 | 59 | Change Log: 60 | 1.0.0 - original base script for object delete. 61 | 62 | ---------------------------------------------------------------------------------------------- 63 | */ 64 | 65 | _missionRadius = 25; // 25 = 25 meters radius around mission spawn. 66 | 67 | _missionTimeWait = 10*60; // 10*60 = 10 minutes, aka 600 seconds. 68 | 69 | _missionObjectsToDelete = [ 70 | "B_CargoNet_01_ammo_F", 71 | "CamoNet_BLUFOR_open_F", 72 | "CargoNet_01_barrels_F", 73 | "I_HMG_01_high_F", 74 | "Land_BagBunker_Small_F", 75 | "Land_BagBunker_Tower_F", 76 | "Land_BagFence_Corner_F", 77 | "Land_BagFence_End_F", 78 | "Land_BagFence_Long_F", 79 | "Land_BagFence_Round_F", 80 | "Land_BagFence_Short_F", 81 | "Land_BarGate_F", 82 | "Land_BarrelSand_F", 83 | "Land_Cargo20_military_green_F", 84 | "Land_Cargo_House_V3_F", 85 | "Land_Cargo_HQ_V3_F", 86 | "Land_Cargo_Patrol_V1_F", 87 | "Land_Cargo_Patrol_V2_F", 88 | "Land_Cargo_Patrol_V3_F", 89 | "Land_Cargo_Tower_V1_F", 90 | "Land_CncBarrierMedium4_F", 91 | "Land_CncWall4_F", 92 | "Land_CratesWooden_F", 93 | "Land_HBarrierBig_F", 94 | "Land_HBarrier_1_F", 95 | "Land_HBarrier_3_F", 96 | "Land_HBarrier_5_F", 97 | "Land_HBarrier_Big_F", 98 | "Land_LampHalogen_F", 99 | "Land_LampHarbour_F", 100 | "Land_LampShabby_F", 101 | "Land_Mil_WallBig_4m_F", 102 | "Land_Mil_WallBig_Corner_F", 103 | "Land_Pillow_camouflage_F", 104 | "Land_PowerGenerator_F", 105 | "Land_Sleeping_bag_F", 106 | "Land_SolarPanel_1_F", 107 | "Land_TTowerSmall_1_F" 108 | ]; 109 | 110 | /* ------------------------------------------------------------------------------------------ 111 | DO NOT EDIT BELOW HERE! 112 | ------------------------------------------------------------------------------------------ */ 113 | 114 | _missionPosition = param [0, [0,0,0], [],3]; 115 | 116 | if (_missionPosition isEqualTo [0,0,0]) exitWith {}; 117 | 118 | uiSleep _missionTimeWait; 119 | 120 | _anyPlayersAround = nearestObjects [_missionPosition, ["MAN"], _missionRadius]; 121 | while {((count _anyPlayersAround) > 0)} do 122 | { 123 | _anyPlayersAround = nearestObjects [_missionPosition, ["MAN"], _missionRadius]; 124 | uiSleep (_missionTimeWait / 2); 125 | }; 126 | 127 | _anyObjectsAround = nearestObjects [_missionPosition, ["ALL"], _missionRadius]; 128 | _anyObjectsAroundCount = (count _anyObjectsAround); 129 | _anyObjectsAroundDeleted = 0; 130 | { 131 | if (_x getVariable ["ownerUID", ""] == "") then 132 | { 133 | _typeOfObject = typeOf _x; 134 | if (_typeOfObject in _missionObjectsToDelete) then 135 | { 136 | deleteVehicle _x; 137 | _anyObjectsAroundDeleted = _anyObjectsAroundDeleted + 1; 138 | }; 139 | }; 140 | } forEach _anyObjectsAround; 141 | 142 | diag_log format ["[CLEANUP MISSION OBJECTS] - CLEANED UP %1 OBJECT(S) OF %2 FOUND WITHIN %3 METERS RADIUS OF POSITION %4", _anyObjectsAroundDeleted, _anyObjectsAroundCount, _missionRadius, _missionPosition]; 143 | -------------------------------------------------------------------------------- /clearDeadBody/clearDeadBody.paa: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/clearDeadBody/clearDeadBody.paa -------------------------------------------------------------------------------- /clearDeadBody/clearDeadBody.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: clearDeadBody.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 5:07 PM 30/11/2016 25 | Modification Date: 5:07 PM 30/11/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.Xx mission (A3Wasteland.com). The script adds a 'Clear Dead Body' 29 | action to dead bodies in order to clear/move immediate surrounding dropped items away from the 30 | dead body at a predefined distance (_maxObjectDistancePlace). This script makes it easier to 31 | access dead bodies and each dropped item. The action can only be used once per dead body. 32 | 33 | Place this file at... 34 | \addons\clearDeadBody\clearDeadBody.sqf 35 | 36 | Place the clearDeadBody.paa icon at... 37 | \addons\clearDeadBody\clearDeadBody.paa 38 | 39 | Edit file... 40 | \client\functions\playerActions.sqf 41 | 42 | And paste in... 43 | [" Clear Dead Body", "addons\clearDeadBody\clearDeadBody.sqf", [], 1.1, false, false, "", "!(([allDeadMen,[],{player distance _x},'ASCEND',{((player distance _x) < 2) && !(_x getVariable ['SL_clearDeadBody',false])}] call BIS_fnc_sortBy) isEqualTo [])"], 44 | 45 | Above the line... 46 | [format ["....... 47 | 48 | Parameter(s): NONE 49 | 50 | Example: NONE 51 | 52 | Change Log: 53 | 1.0.0 - original base script. 54 | 55 | ---------------------------------------------------------------------------------------------- 56 | */ 57 | 58 | _cleanUpObjects = [ 59 | "Land_Suitcase_F", // Repair Kit 60 | "Land_BakedBeans_F", // Canned Food 61 | "Land_BottlePlastic_V2_F", // Water Bottle 62 | "Land_Sleeping_bag_folded_F", // Spawn Beacon 63 | "Land_CanisterFuel_F", // Jerrycan 64 | "Land_CanisterOil_F", // Syphon Hose 65 | "Land_Ground_sheet_folded_OPFOR_F", // Camo Net 66 | "GroundWeaponHolder", // static weapon holder, all weapons, weapon attachments, magazines, throwables, backpacks, vests, uniforms, helments, etc 67 | "WeaponHolderSimulated" // simulated weapon holder, all weapons, weapon attachments, magazines, throwables, backpacks, vests, uniforms, helments, etc 68 | ]; 69 | 70 | _maxObjectDistanceGather = 3; // max distance from dead body to gather and move items. 71 | _maxObjectDistancePlace = 2; // max distance from dead body to move items to. 72 | 73 | /* ------------------------------------------------------------------------------------------ 74 | DO NOT EDIT BELOW HERE! 75 | ------------------------------------------------------------------------------------------ */ 76 | 77 | _deadBody = ([allDeadMen,[],{player distance _x},"ASCEND",{(player distance _x) < 2}] call BIS_fnc_sortBy) select 0; 78 | 79 | if ((alive _deadBody) && !(_deadBody isKindOf "Man")) exitWith {}; 80 | 81 | _deadBodyAlreadyCleared = _deadBody getVariable ["SL_clearDeadBody",false]; 82 | 83 | if (_deadBodyAlreadyCleared) exitWith 84 | { 85 | ["Dead Body Was Already Cleared!", 5] call mf_notify_client; 86 | }; 87 | 88 | _deadBodyNearItems = nearestObjects [_deadBody, _cleanUpObjects, _maxObjectDistanceGather]; 89 | { 90 | _deadBodyHeightATL = (getPosATL _deadBody select 2) + 0.1; 91 | _relPos = [_deadBody, _maxObjectDistancePlace, round(random 360)] call BIS_fnc_relPos; 92 | _relPos set [2,_deadBodyHeightATL]; 93 | _x setPos _relPos; 94 | _x setDir round(random 360); 95 | } forEach _deadBodyNearItems; 96 | 97 | _deadBody setVariable ["SL_clearDeadBody",true,true]; 98 | -------------------------------------------------------------------------------- /deadBodyFlies/deadBodyFlies.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/deadBodyFlies/deadBodyFlies.ogg -------------------------------------------------------------------------------- /deadBodyFlies/deadBodyFlies.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: deadBodyFlies.sqf 22 | Version: 1.0.1 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 8:34 PM 16/12/2016 25 | Modification Date: 7:38 PM 23/12/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.Xx mission (A3Wasteland.com). The script spawns flies with sound 29 | effects to dead bodies after a certain duration has passed (1/4 of the total corpseRemovalMinTime) 30 | 31 | The flies and sound effects will be present until the corpse has been removed (despawned by the 32 | ArmA 3 engine). The sound effects are audible up until 50 from the dead body... the close you 33 | get, the louder the sound effect. 34 | 35 | This script was made to introduce more immersion in to the game, as naturally dead bodies will 36 | decompose, which would attract flies (and other insects)... this script mimics that. 37 | 38 | Place this file at... 39 | \server\functions\deadBodyFlies.sqf 40 | 41 | Place the deadBodyFlies.ogg sound effect file at... 42 | \server\sounds\deadBodyFlies.ogg 43 | 44 | Edit the file... 45 | \globalCompile.sqf 46 | 47 | And paste in... 48 | deadBodyFlies = [_serverFunc, "deadBodyFlies.sqf"] call mf_compile; // deadBodyFlies by soulkobk 49 | 50 | Below the line... 51 | vehicleHitTracking = [_serverFunc, "vehicleHitTracking.sqf"] call mf_compile; 52 | 53 | Edit the file... 54 | \server\functions\serverPlayerDied.sqf 55 | 56 | And paste in... 57 | [_unit] call deadBodyFlies; // deadBodyFlies by soulkobk 58 | 59 | Below the line... 60 | _unit setVariable ["processedDeath", diag_tickTime]; 61 | 62 | Parameter(s): NONE 63 | 64 | Example: NONE 65 | 66 | Change Log: 67 | 1.0.0 - original base script. 68 | 1.0.1 - added check for water surface and depth (exit if on/under water, as dead bodies will 69 | sink to the bottom... there are no flies under water!). reduced flies particle loop. 70 | 71 | ---------------------------------------------------------------------------------------------- 72 | */ 73 | 74 | /* ------------------------------------------------------------------------------------------ 75 | DO NOT EDIT BELOW HERE! 76 | ------------------------------------------------------------------------------------------ */ 77 | 78 | _deadUnit = _this select 0; 79 | 80 | if ((surfaceIsWater (getPosASL _deadUnit)) && (((getPosASL _deadUnit) select 2) < 0)) exitWith {}; 81 | 82 | [_deadUnit] spawn 83 | { 84 | params ["_deadUnit"]; 85 | _soundPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString; 86 | _soundFlies = _soundPath + "server\sounds\deadBodyFlies.ogg"; 87 | _corpseTime = getNumber (missionconfigfile >> "corpseRemovalMinTime"); 88 | uiSleep (_corpseTime / 4); 89 | _deadUnitPosFlies = getPosATL _deadUnit; 90 | _fliesArr = []; 91 | for "_fly" from 0 to 1 do 92 | { 93 | _flies = [_deadUnitPosFlies, 0.05, 1.5] call BIS_fnc_flies; 94 | _fliesArr pushBackUnique _flies; 95 | }; 96 | _deadUnitPosSound = getPosASL _deadUnit; 97 | while {(_deadUnit in allDeadMen)} do 98 | { 99 | _pitch = selectRandom [0.8,0.9,1.0,1.1,1.2]; 100 | _sound = playSound3D [_soundFlies, _deadUnit, false, _deadUnitPosSound, 1, _pitch, 50]; 101 | uiSleep 8.5; 102 | }; 103 | { 104 | _flies = _x; 105 | { 106 | deleteVehicle _x; 107 | } forEach _flies; 108 | } forEach _fliesArr; 109 | }; 110 | -------------------------------------------------------------------------------- /fixTownStreetLamps/fixTownStreetLamps.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: fixTownStreetLamps.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 6:42 PM 05/11/2016 25 | Modification Date: 6:42 PM 05/11/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.Xx mission (A3Wasteland.com). This script will check your town lamps 29 | to see if they have been shot out (globes blown), if so it will fix it and turn each lamp back on. 30 | 31 | The maximum time any lamp in the town area is able to stay off is set by the variable 32 | _sleepTimeBetweenChecks. When the lamps turn back on, they will realistically (or as close to) 33 | flicker back to the on state. 34 | 35 | Place this script at... 36 | \addons\fixTownStreetLamps\fixTownStreetLamps.sqf 37 | 38 | Edit file... 39 | \server\init.sqf 40 | 41 | And paste at the bottom of the script... 42 | [] execVM "addons\fixTownStreetlamps\fixTownStreetLamps.sqf"; 43 | 44 | Parameter(s): 45 | 46 | Example: 47 | 48 | Change Log: 49 | 1.0.0 - original base script. 50 | 51 | ---------------------------------------------------------------------------------------------- 52 | */ 53 | 54 | _sleepTimeBetweenChecks = 30*60; // default is 30 minutes. 55 | 56 | _typesOfLamps = 57 | [ 58 | "Lamps_Base_F", 59 | "Land_LampAirport_F", 60 | "Land_LampSolar_F", 61 | "Land_LampStreet_F", 62 | "Land_LampStreet_small_F", 63 | "PowerLines_base_F", 64 | "Land_LampDecor_F", 65 | "Land_LampHalogen_F", 66 | "Land_LampHarbour_F", 67 | "Land_LampShabby_F", 68 | "Land_PowerPoleWooden_L_F", 69 | "Land_NavigLight", 70 | "Land_runway_edgelight", 71 | "Land_runway_edgelight_blue_F", 72 | "Land_Flush_Light_green_F", 73 | "Land_Flush_Light_red_F", 74 | "Land_Flush_Light_yellow_F", 75 | "Land_Runway_PAPI", 76 | "Land_Runway_PAPI_2", 77 | "Land_Runway_PAPI_3", 78 | "Land_Runway_PAPI_4", 79 | "Land_fs_roof_F", 80 | "Land_fs_sign_F" 81 | ]; 82 | 83 | /* ------------------------------------------------------------------------------------------ 84 | DO NOT EDIT BELOW HERE! 85 | ------------------------------------------------------------------------------------------ */ 86 | 87 | _townMarkerArray = []; 88 | { 89 | if (["Town_", _x] call fn_startsWith) then 90 | { 91 | _townMarkerArray pushBack _x; 92 | }; 93 | } forEach allMapMarkers; 94 | 95 | _townDetails = compileFinal preprocessFileLineNumbers "mapConfig\towns.sqf"; 96 | { 97 | _townMarkerCurr = _x; 98 | { 99 | _townMarkerName = _x select 0; 100 | _townMarkerRadius = _x select 1; 101 | _townMarkerCityName = _x select 2; 102 | _townMarkerPos = getMarkerPos _townMarkerName; 103 | if (_townMarkerCurr isEqualTo _townMarkerName) then 104 | { 105 | [_townMarkerPos,_townMarkerRadius,_townMarkerCityName,_sleepTimeBetweenChecks,_typesOfLamps] spawn 106 | { 107 | params ["_townMarkerPos","_townMarkerRadius","_townMarkerCityName","_sleepTimeBetweenChecks","_typesOfLamps"]; 108 | diag_log format ["[FIX TOWN STREET LAMPS] -> %1 ENABLED (%2M RADIUS)",_townMarkerCityName,_townMarkerRadius]; 109 | while {true} do 110 | { 111 | _townLampsNextCheck = diag_tickTime + _sleepTimeBetweenChecks; 112 | _townLamps = nearestObjects [_townMarkerPos, _typesOfLamps, _townMarkerRadius]; 113 | { 114 | _townLamp = _x; 115 | _townLampHitIndexes = count (getAllHitPointsDamage _townLamp select 0); 116 | if (!isNil "_townLampHitIndexes") then 117 | { 118 | if (_townLampHitIndexes > 0) then 119 | { 120 | [_townLamp,_townLampHitIndexes] spawn 121 | { 122 | params ["_townLamp","_townLampHitIndexes"]; 123 | for "_i" from 0 to (_townLampHitIndexes - 1) do 124 | { 125 | _townLampIndexDamage = _townLamp getHitIndex _i; 126 | if (_townLampIndexDamage > 0) then 127 | { 128 | for "_j" from 0 to round(random 5) do 129 | { 130 | _townLamp setHitIndex [_i,1]; 131 | uiSleep (random 0.5); 132 | _townLamp setHitIndex [_i,0]; 133 | uiSleep (random 0.5); 134 | }; 135 | }; 136 | }; 137 | }; 138 | }; 139 | }; 140 | _townLampHitIndexes = nil; 141 | } forEach _townLamps; 142 | waitUntil {diag_tickTime > _townLampsNextCheck}; 143 | }; 144 | }; 145 | }; 146 | } forEach (call _townDetails); 147 | } forEach _townMarkerArray; 148 | -------------------------------------------------------------------------------- /fullScreenNightVision/fullScreenNightVision.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: fullScreenNightVision.sqf 22 | Version: 1.2 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 12:54 PM 2/05/2018 25 | Modification Date: 9:13 PM 21/05/2018 26 | 27 | Description: 28 | This script will allow night vision mode in FULL SCREEN, no black borders! No mod needed! 29 | How? Unequip the Night Vision Goggles altogether (hmd slot), and equip Combat Goggles (Green) 30 | (goggles slot) to replace the night vision optics (NVG head gear will function as normal if 31 | they are equipped to the hmd slot). 32 | 33 | * Unequipped NVGoggles and equipped Combat Goggles (Green) = FULL SCREEN NIGHT VISION. 34 | * Equipped NVGoggles and equipped Combat Goggles (Green) = black border night vision. 35 | * Unequipped Combat Goggles (Green) and equipped NVGoggles = black border night vision. 36 | 37 | Enjoy a simple mod-free version of full screen night vision without any use of custom ppEffects. 38 | 39 | Place the following code within your init.sqf file... 40 | [] execVM "\fullScreenNightVision.sqf"; 41 | 42 | Parameter(s): none 43 | 44 | Example: none 45 | 46 | Change Log: 47 | 1.0 - original base script. 48 | 1.1 - fixed event handler bind. small routine changes. 49 | 1.2 - code updates, added event handlers for put/take so night vision does NOT turn off 50 | when dropping or picking up items from inventory. added steath balaclava with green 51 | goggles to accepted list. 52 | 53 | ---------------------------------------------------------------------------------------------- 54 | */ 55 | 56 | if (!hasInterface) exitWith {}; // DO NOT DELETE THIS! 57 | 58 | SL_var_fullScreenNightVision = 59 | [ 60 | "G_Combat_Goggles_tna_F", // Combat Goggles (Green). 61 | "G_Balaclava_TI_G_tna_F" // Stealth Balaclava (Green, Goggles). 62 | ]; 63 | 64 | /* ------------------------------------------------------------------------------------------ 65 | DO NOT EDIT BELOW HERE! 66 | ------------------------------------------------------------------------------------------ */ 67 | 68 | SL_fn_fullScreenNightVision = { 69 | params ["_displayCode","_keyCode","_isShift","_isCtrl","_isAlt"]; 70 | _handled = false; 71 | if ((_keyCode in actionKeys "NightVision") && (goggles player in SL_var_fullScreenNightVision)) then 72 | { 73 | switch SL_var_fullScreenNightVisionMode do 74 | { 75 | case 0: { 76 | if (cameraView != "GUNNER") then 77 | { 78 | player action ["nvGoggles", player]; 79 | SL_var_fullScreenNightVisionMode = currentVisionMode player; 80 | _handled = true; 81 | }; 82 | }; 83 | case 1: { 84 | if (cameraView != "GUNNER") then 85 | { 86 | player action ["nvGogglesOff", player]; 87 | SL_var_fullScreenNightVisionMode = currentVisionMode player; 88 | _handled = true; 89 | }; 90 | }; 91 | }; 92 | }; 93 | _handled 94 | }; 95 | 96 | waitUntil {alive player}; 97 | 98 | player addEventHandler ["GetOutMan", { 99 | params ["_player", "_role", "_vehicle", "_turret"]; 100 | if (goggles _player in SL_var_fullScreenNightVision) then 101 | { 102 | switch SL_var_fullScreenNightVisionMode do 103 | { 104 | case 1: { 105 | _player action ["nvGoggles", _player]; 106 | SL_var_fullScreenNightVisionMode = currentVisionMode _player; 107 | }; 108 | case 0: { 109 | _player action ["nvGogglesOff", _player]; 110 | SL_var_fullScreenNightVisionMode = currentVisionMode _player; 111 | }; 112 | }; 113 | }; 114 | }]; 115 | 116 | player addEventHandler ["Put", { 117 | params ["_player", "_container", "_item"]; 118 | if (goggles _player in SL_var_fullScreenNightVision) then 119 | { 120 | switch SL_var_fullScreenNightVisionMode do 121 | { 122 | case 1: { 123 | _player action ["nvGoggles", _player]; 124 | SL_var_fullScreenNightVisionMode = currentVisionMode _player; 125 | }; 126 | case 0: { 127 | _player action ["nvGogglesOff", _player]; 128 | SL_var_fullScreenNightVisionMode = currentVisionMode _player; 129 | }; 130 | }; 131 | }; 132 | }]; 133 | 134 | player addEventHandler ["Take", { 135 | params ["_player", "_container", "_item"]; 136 | if (goggles _player in SL_var_fullScreenNightVision) then 137 | { 138 | switch SL_var_fullScreenNightVisionMode do 139 | { 140 | case 1: { 141 | _player action ["nvGoggles", _player]; 142 | SL_var_fullScreenNightVisionMode = currentVisionMode _player; 143 | }; 144 | case 0: { 145 | _player action ["nvGogglesOff", _player]; 146 | SL_var_fullScreenNightVisionMode = currentVisionMode _player; 147 | }; 148 | }; 149 | }; 150 | }]; 151 | 152 | SL_var_fullScreenNightVisionMode = currentVisionMode player; 153 | 154 | waitUntil {!(isNull (findDisplay 46))}; 155 | (findDisplay 46) displayAddEventHandler ["KeyDown", "_this call SL_fn_fullScreenNightVision;"]; 156 | -------------------------------------------------------------------------------- /globalChatMessages/globalChatMessages.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: globalChatMessages.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 5:31 PM 18/10/2016 25 | Modification Date: 5:31 PM 18/10/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.Xx mission (A3Wasteland.com). 29 | 30 | This script will show global chat messages to clients, as per the _globalChatMessages array. 31 | Be sure to set _globalChatMessagesSleep at minimum of 10 minutes sleep duration, else the 32 | script will default back to 10 minutes sleep duration to avoid spamming globalChat and 33 | annoying the hell out of players. 34 | 35 | Place this script in directory... 36 | \client\functions\globalChatMessages.sqf 37 | 38 | Edit... 39 | \client\init.sqf 40 | 41 | And at the bottom of the script, paste in... 42 | [] execVM "client\functions\globalChatMessages.sqf"; 43 | 44 | *Please note that this is a static message, so if server administrators want to modify the 45 | messages contained, they need to update this script within their mission.pbo each time. 46 | 47 | *Please also note that this script is based upon having a 'game logic' named 'server' within 48 | your mission.sqm file (it should be in the vanilla A3Wasteland mission already, if not then 49 | you must add a game logic to your mission and name it 'server'). 50 | 51 | Parameter(s): for _globalChatMessages, use syntax -> ["",], 52 | 53 | Example: none 54 | 55 | Change Log: 56 | 1.0.0 - original base script. 57 | 58 | ---------------------------------------------------------------------------------------------- 59 | */ 60 | 61 | _globalChatPrefix = "[KOBK]"; 62 | 63 | _globalChatMessagesSleep = 30*60; // 30 minutes sleep per full loop. 64 | 65 | _globalChatMessages = [ 66 | ["You are playing on the [KOBK] A3Wasteland Stratis server.",1], 67 | ["TeamSpeak -> 127.0.0.1:12701",1], 68 | ["WWW/Forums -> github.com/soulkobk",30], 69 | ["Server restarts are at 6am, 12pm, 6pm and 12am daily (AEST).",1], 70 | ["Day/Night cycle is 5 hours day, 1 hour night per 6 hour session.",30], 71 | ["Voice and text chat have been disabled, please use TeamSpeak for communication.",30], 72 | ["Any queries? Direct them to the administrators via TeamSpeak or the Forum.",30], 73 | ["Enjoy the server? Tell your friends!",30], 74 | ["Want to become a part of the [KOBK] clan? You can apply via our WWW site.",30], 75 | ["Want to help cover server costs? You can donate via our WWW site.",30], 76 | ["Enjoy your time on the battle field!",30] 77 | ]; 78 | 79 | /* ------------------------------------------------------------------------------------------ 80 | DO NOT EDIT BELOW HERE! 81 | ------------------------------------------------------------------------------------------ */ 82 | 83 | if (((count _globalChatMessages) >= 1) && (hasInterface)) then 84 | { 85 | if (_globalChatMessagesSleep < 600) then 86 | { 87 | _globalChatMessagesSleep = 600; 88 | }; 89 | while {true} do 90 | { 91 | uiSleep _globalChatMessagesSleep; 92 | { 93 | _currentMessage = _x select 0; 94 | _currentSleep = _x select 1; 95 | server globalChat format ["%1 -> %2",_globalChatPrefix,_currentMessage]; 96 | uiSleep _currentSleep; 97 | } forEach _globalChatMessages; 98 | }; 99 | }; -------------------------------------------------------------------------------- /lootSpawnerBPM/lootSpawnerBPM.Altis/buildingPosManual.sqf: -------------------------------------------------------------------------------- 1 | _buildingPos_Land_i_House_Big_01_V1_F = [[3.52148,4.57617,-2.56494],[2.58887,6.33203,0.331089],[-1.24902,4.19922,-2.56494],[-2.76221,2.11914,-2.56494],[-0.476074,1.81836,-2.56494],[1.89258,0.0351563,-2.56494],[3.47656,-1.97266,-2.56494],[3.78711,-4.93945,-2.56494],[2.11621,-5.91211,-2.56493],[-0.342773,-4.0332,-2.56493],[-3.26025,-0.864258,-2.65494],[-3.33789,-3.66992,-2.65494],[3.89844,2.02539,-0.904934],[1.21875,0.290039,0.855064],[3.52539,-1.81934,0.855064],[0.059082,-1.89844,0.855064],[3.60498,-5.21484,0.855064],[-2.56055,-5.66016,0.855064],[0.985352,4.28516,0.855064],[-0.90332,6.13672,0.855064]]; 2 | _buildingPos_Land_i_House_Big_01_V2_F = [[-3.46045,-0.401367,-2.65493],[-3.39844,-3.4502,-2.65493],[-0.59375,-3.49316,-2.56494],[3.05176,-5.40137,-2.56493],[3.76172,-2.29688,-2.56494],[1.77539,-0.254883,-2.56494],[-2.78174,2.04297,-2.56493],[-3.46436,5.5166,-2.56493],[2.86768,4.04004,-2.56493],[-0.441406,2.06934,-2.56493],[3.96191,2.04785,-0.904939],[1.5498,0.110352,0.855067],[3.61914,-1.86328,0.855067],[-0.256836,-1.79688,0.855066],[3.59961,-5.2334,0.855068],[-2.54443,-5.85547,0.855064],[1.68213,3.98926,0.855067],[-0.350586,6.14258,0.855067]]; 3 | _buildingPos_Land_i_House_Big_01_V3_F = [[-3.4375,-0.383789,-2.65493],[-3.41016,-3.45215,-2.65493],[-0.583008,-3.51465,-2.56493],[3.18164,-5.82813,-2.56493],[3.69629,-2.30469,-2.56493],[1.83936,-0.201172,-2.56493],[-2.47852,1.98438,-2.56493],[-1.1543,3.83008,-2.56493],[-2.99219,5.53711,-2.56493],[2.74805,4.11719,-2.56493],[3.9082,1.96387,-0.904931],[1.61035,0.384766,0.855069],[3.33105,-1.86816,0.85507],[0.22998,-1.85449,0.855068],[3.75586,-5.14941,0.855069],[-4.89063,0.837646,1.01227],[1.26172,4.1709,0.855071],[-0.627441,6.12891,0.855069]]; 4 | _buildingPos_Land_i_House_Big_02_V1_F = [[-3.00977,-5.39258,-2.72594],[-3.31543,-1.97266,-2.62327],[1.31152,-1.54932,-2.62327],[-3.16309,0.547852,-2.62327],[-2.84473,3.83203,-2.62327],[3.45508,1.39063,-2.62327],[3.63867,-3.17969,-0.825936],[3.93945,-1.61816,-0.82593],[0.318359,-3.06152,0.78407],[-3.48633,-1.81934,0.784063],[-3.05469,-5.00098,0.784068],[-3.03125,0.500977,0.784067],[2.27832,0.885742,0.784066],[-2.94434,6.20508,0.724065],[0.203125,6.19971,0.724064]]; 5 | _buildingPos_Land_i_House_Big_02_V2_F = [[1.43896,3.99805,-2.62327],[3.25586,1.72852,-2.62328],[-2.72705,4.19922,-2.62327],[-3.15674,1.23633,-2.62327],[1.20898,-1.53906,-2.62327],[-2.84766,-1.69141,-2.62327],[-2.88965,-5.33008,-2.72594],[3.87744,-3.08984,-0.825932],[3.896,-1.73047,-0.825935],[0.212402,-3.12305,0.784065],[-3.09521,-1.71484,0.784069],[-2.92529,-5.00195,0.784065],[-3.03809,0.507813,0.784069],[1.48291,0.736328,0.784065],[2.75977,3.79883,0.784065],[-3.1582,6.17578,0.724068],[-0.0869141,6.29688,0.724068]]; 6 | _buildingPos_Land_i_House_Big_02_V3_F = [[1.43896,3.99805,-2.62327],[3.25586,1.72852,-2.62328],[-2.72705,4.19922,-2.62327],[-3.15674,1.23633,-2.62327],[1.20898,-1.53906,-2.62327],[-2.84766,-1.69141,-2.62327],[-2.88965,-5.33008,-2.72594],[3.87744,-3.08984,-0.825932],[3.896,-1.73047,-0.825935],[0.212402,-3.12305,0.784065],[-3.09521,-1.71484,0.784069],[-2.92529,-5.00195,0.784065],[-3.03809,0.507813,0.784069],[1.48291,0.736328,0.784065],[2.75977,3.79883,0.784065],[-3.1582,6.17578,0.724068],[-0.0869141,6.29688,0.724068]]; 7 | -------------------------------------------------------------------------------- /lootSpawnerBPM/lootSpawnerBPM.Altis/functions/addPosition.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: addPosition.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 12:00 PM 08/06/2016 25 | Modification Date: 6:00 PM 02/02/2018 26 | 27 | Description: 28 | 29 | Parameter(s): none 30 | 31 | Example: none 32 | 33 | Change Log: 34 | 1.0.0 - original base script. 35 | 36 | ---------------------------------------------------------------------------------------------- 37 | */ 38 | 39 | if (isNil "bldPosArr") then 40 | { 41 | bldPosArr = [] 42 | }; 43 | 44 | _posIsWater = false; 45 | _pos = getPosATL player; 46 | 47 | if (surfaceIsWater _pos) then 48 | { 49 | _pos = getPosASL player; 50 | _posIsWater = true; 51 | }; 52 | 53 | if (isNil "currBuilding") exitWith 54 | { 55 | hint parseText "ERROR
BUILDING CLASS NOT REGISTERED
PRESS 'G' FIRST!
TO REGISTER A BUILDING CLASS"; 56 | }; 57 | 58 | _bldPos = currBuilding worldToModel _pos; 59 | if (player inArea currBuildingMkrID) then 60 | { 61 | if !(_bldPos in bldPosArr) then 62 | { 63 | bldPosArr pushbackUnique _bldPos; 64 | _object = createVehicle ["Sign_Arrow_Yellow_F",getPosATL player, [], 0, "CAN_COLLIDE"]; 65 | if (_posIsWater isEqualTo true) then 66 | { 67 | _object setPosASL (getPosASL player); 68 | }; 69 | _object disableCollisionWith player; 70 | hint parseText format ["ADDED BUILDING POSITION
%1
TO BUILDING

'%2'

COPIED
%3
BUILDING POSITIONS TO CLIPBOARD",str _bldPos,(typeOf currBuilding),(count bldPosArr)]; 71 | _string = format ["_buildingPos_%1 = %2;",(typeOf currBuilding),str bldPosArr]; 72 | copyToClipboard _string; 73 | }; 74 | } 75 | else 76 | { 77 | hint parseText format ["ERROR
POSITION
%1
IS NOT WITHIN THE BOUNDS OF
'%2'
AT POSITION
%3",_bldPos,(typeOf currBuilding),(getPos currBuilding)]; 78 | }; 79 | -------------------------------------------------------------------------------- /lootSpawnerBPM/lootSpawnerBPM.Altis/functions/destroyBuilding.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: destroyBuilding.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 12:00 PM 08/06/2016 25 | Modification Date: 6:00 PM 02/02/2018 26 | 27 | Description: 28 | 29 | Parameter(s): none 30 | 31 | Example: none 32 | 33 | Change Log: 34 | 1.0.0 - original base script. 35 | 36 | ---------------------------------------------------------------------------------------------- 37 | */ 38 | 39 | _bld2Damage = nearestObjects [player, ["House","Ruins"], 50]; 40 | _bld2Damage = _bld2Damage select 0; 41 | _bld2Damage setDamage [1,false]; 42 | -------------------------------------------------------------------------------- /lootSpawnerBPM/lootSpawnerBPM.Altis/functions/drawBoundingBox.sqf: -------------------------------------------------------------------------------- 1 | // bounding box draw 3d code by killzonekid -> http://killzonekid.com/arma-3-bounding-box-utility/ 2 | 3 | params ["_buildingClass"]; 4 | 5 | if (isNil "_buildingClass") exitWith {}; 6 | 7 | _buildingClass call { 8 | private ["_obj","_bb","_bbx","_bby","_bbz","_arr","_y","_z"]; 9 | _obj = _this; 10 | _bb = { 11 | _bbx = [_this select 0 select 0, _this select 1 select 0]; 12 | _bby = [_this select 0 select 1, _this select 1 select 1]; 13 | _bbz = [_this select 0 select 2, _this select 1 select 2]; 14 | _arr = []; 15 | 0 = { 16 | _y = _x; 17 | 0 = { 18 | _z = _x; 19 | 0 = { 20 | 0 = _arr pushBack (_obj modelToWorld [_x,_y,_z]); 21 | } count _bbx; 22 | } count _bbz; 23 | reverse _bbz; 24 | } count _bby; 25 | _arr pushBack (_arr select 0); 26 | _arr pushBack (_arr select 1); 27 | _arr 28 | }; 29 | bboxr = boundingBoxReal _obj call _bb; 30 | addMissionEventHandler ["Draw3D", { 31 | for "_i" from 0 to 7 step 2 do { 32 | drawLine3D [ 33 | bboxr select _i, 34 | bboxr select (_i + 2), 35 | [0,1,0,1] 36 | ]; 37 | drawLine3D [ 38 | bboxr select (_i + 2), 39 | bboxr select (_i + 3), 40 | [0,1,0,1] 41 | ]; 42 | drawLine3D [ 43 | bboxr select (_i + 3), 44 | bboxr select (_i + 1), 45 | [0,1,0,1] 46 | ]; 47 | }; 48 | }]; 49 | }; 50 | -------------------------------------------------------------------------------- /lootSpawnerBPM/lootSpawnerBPM.Altis/functions/getPositions.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: getPositions.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 12:00 PM 08/06/2016 25 | Modification Date: 6:00 PM 02/02/2018 26 | 27 | Description: 28 | 29 | Parameter(s): none 30 | 31 | Example: none 32 | 33 | Change Log: 34 | 1.0.0 - original base script. 35 | 36 | ---------------------------------------------------------------------------------------------- 37 | */ 38 | 39 | #include "..\buildingPosManual.sqf" 40 | 41 | currBuilding = nearestObjects [player, ["House","Ruins"], 50]; 42 | currBuilding = currBuilding select 0; 43 | 44 | { deleteVehicle _x; } forEach nearestObjects [player,["Sign_Arrow_Green_F"],2000]; 45 | { deleteVehicle _x; } forEach nearestObjects [player,["Sign_Arrow_Yellow_F"],2000]; 46 | { deleteVehicle _x; } forEach nearestObjects [player,["Sign_Arrow_F"],2000]; 47 | { deleteVehicle _x; } forEach nearestObjects [player,["Sign_Arrow_Cyan_F"],2000]; 48 | { deleteVehicle _x; } forEach nearestObjects [player,["Sign_Arrow_Blue_F"],2000]; 49 | 50 | if (!isNil "currBuildingMkrID") then 51 | { 52 | deleteMarker currBuildingMkrID; 53 | }; 54 | 55 | if (!isNil "currBuildingLblID") then 56 | { 57 | deleteMarker currBuildingLblID; 58 | }; 59 | 60 | removeAllMissionEventHandlers "draw3D"; 61 | [currBuilding] execVM "functions\drawBoundingBox.sqf"; 62 | 63 | bldPosArr = []; 64 | 65 | _string = format ["_buildingPos_%1 = [];",(typeOf currBuilding)]; 66 | copyToClipboard _string; 67 | 68 | if !(isNil format ["_buildingPos_%1",(typeOf currBuilding)]) then 69 | { 70 | currBuildingColor = "colorGreen"; 71 | _numPositions = 0; 72 | private "_buildingPosManual"; 73 | call compile format ["_buildingPosManual = _buildingPos_%1",(typeOf currBuilding)]; 74 | for [{_a = 0},{_a < (count _buildingPosManual)},{_a = _a + 1}] do 75 | { 76 | _bldPos = getPos currBuilding; 77 | _buildingPosCurrent = _buildingPosManual select _a; 78 | _buildingPos = currBuilding modelToWorld _buildingPosCurrent; 79 | _object = createVehicle ["Sign_Arrow_F",_buildingPos, [], 0, "CAN_COLLIDE"]; 80 | _object disableCollisionWith player; 81 | _numPositions = _numPositions + 1; 82 | }; 83 | _noMoreBuildingPositions = false; 84 | _i = 0; 85 | while {!_noMoreBuildingPositions} do 86 | { 87 | _currPosition = currBuilding buildingPos _i; 88 | if !(str _currPosition == "[0,0,0]") then 89 | { 90 | _object = createVehicle ["Sign_Arrow_Green_F",_currPosition, [], 0, "CAN_COLLIDE"]; 91 | _object disableCollisionWith player; 92 | _i = _i + 1; 93 | _numPositions = _numPositions + 1; 94 | } 95 | else 96 | { 97 | _noMoreBuildingPositions = true; 98 | }; 99 | }; 100 | _allBuildings = nearestObjects [getPos currBuilding,[(typeOf currBuilding)], 2000]; 101 | { 102 | _bbr = boundingBoxReal _x; 103 | _bbr = _bbr select 0; 104 | _mkrMapID = format ["%1_%2",_x,(getPos _x)]; 105 | _mkrMap = createMarker [_mkrMapID,(getPos _x)]; 106 | _mkrMap setMarkerColor currBuildingColor; 107 | _mkrMap setMarkerShape "RECTANGLE"; 108 | _mkrMap setMarkerAlpha 1; 109 | _mkrMap setMarkerBrush "SOLIDFULL"; 110 | _mkrMap setMarkerSize [(_bbr select 0),(_bbr select 1)]; 111 | _mkrMap setMarkerDir (getDir _x); 112 | } forEach _allBuildings; 113 | hint parseText format ["REGISTERED BUILDING CLASS

'%1'

BUILDING POS MANUAL ALREADY EXISTS
CONTAINING
%2 BUILDING POSITIONS
WHICH ARE MARKED AS RED ARROWS",(typeOf currBuilding),_numPositions]; 114 | } 115 | else 116 | { 117 | currBuildingColor = "colorRed"; 118 | _numPositions = 0; 119 | _noMoreBuildingPositions = false; 120 | _i = 0; 121 | while {!_noMoreBuildingPositions} do 122 | { 123 | _currPosition = currBuilding buildingPos _i; 124 | if !(str _currPosition == "[0,0,0]") then 125 | { 126 | _object = createVehicle ["Sign_Arrow_Green_F",_currPosition, [], 0, "CAN_COLLIDE"]; 127 | _object disableCollisionWith player; 128 | _i = _i + 1; 129 | _numPositions = _numPositions + 1; 130 | } 131 | else 132 | { 133 | _noMoreBuildingPositions = true; 134 | }; 135 | }; 136 | hint parseText format ["REGISTERED BUILDING CLASS

'%1'

BUILDING POS MANUAL MISSING
PLACED GREEN ARROW ON %2 EXISTING VANILLA BUILDING POSITIONS
PRESS 'F' TO ADD POSITIONS",(typeOf currBuilding),_numPositions]; 137 | }; 138 | 139 | // current marker (for inArea check) 140 | // currBuildingColor = "colorYellow"; 141 | currBuildingBBR = boundingBoxReal currBuilding; 142 | currBuildingBBR = currBuildingBBR select 0; 143 | 144 | currBuildingMkrID = format ["currBuildingMkr_%1_%2",currBuilding,(getPos currBuilding)]; 145 | currBuildingMkr = createMarker [currBuildingMkrID,(getPos currBuilding)]; 146 | currBuildingMkr setMarkerColor currBuildingColor; 147 | currBuildingMkr setMarkerShape "RECTANGLE"; 148 | currBuildingMkr setMarkerAlpha 1; 149 | currBuildingMkr setMarkerBrush "SOLIDFULL"; 150 | currBuildingMkr setMarkerSize [(currBuildingBBR select 0),(currBuildingBBR select 1)]; 151 | currBuildingMkr setMarkerDir (getDir currBuilding); 152 | 153 | currBuildingLblID = format ["currBuildingLbl_%1_%2",currBuilding,(getPos currBuilding)]; 154 | currBuildingLbl = createMarker [currBuildingLblID,(getPos currBuilding)]; 155 | currBuildingLbl setMarkerColor currBuildingColor; 156 | currBuildingLbl setMarkerShape "ICON"; 157 | currBuildingLbl setMarkerAlpha 1; 158 | currBuildingLbl setMarkerText (typeOf currBuilding); 159 | currBuildingLbl setMarkerType "mil_dot"; 160 | -------------------------------------------------------------------------------- /lootSpawnerBPM/lootSpawnerBPM.Altis/functions/hideObject.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: hideObject.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 12:00 PM 08/06/2016 25 | Modification Date: 6:00 PM 02/02/2018 26 | 27 | Description: 28 | 29 | Parameter(s): none 30 | 31 | Example: none 32 | 33 | Change Log: 34 | 1.0.0 - original base script. 35 | 36 | ---------------------------------------------------------------------------------------------- 37 | */ 38 | 39 | _bld2Hide = nearestObjects [player, ["House","Ruins"], 50]; 40 | _bld2Hide = _bld2Hide select 0; 41 | hideObject _bld2Hide; 42 | -------------------------------------------------------------------------------- /lootSpawnerBPM/lootSpawnerBPM.Altis/init.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: init.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 12:00 PM 08/06/2016 25 | Modification Date: 6:00 PM 02/02/2018 26 | 27 | Description: 28 | 29 | press 'g' for get positions (will mark building with arrows for vanilla building positions). 30 | press 'f' to add a position (where the player is exactly standing, will mark with an arrow). 31 | press 'h' to hide the closest object the player is near. 32 | press 't' to destroy the closest object the player is near. 33 | 34 | the lootSpawner is included, check the \lootSpawner directory (read the headers of the files). 35 | 36 | Parameter(s): none 37 | 38 | Example: none 39 | 40 | Change Log: 41 | 1.0.0 - original base script. 42 | 43 | ---------------------------------------------------------------------------------------------- 44 | */ 45 | 46 | BPM_fnc_keyDown = { 47 | switch (_this) do { 48 | // key g 49 | case 34: { 50 | _script = [] execVM "functions\getPositions.sqf"; 51 | }; 52 | // key f 53 | case 33: { 54 | _script = [] execVM "functions\addPosition.sqf"; 55 | }; // key h 56 | case 35: { 57 | _script = [] execVM "functions\hideObject.sqf"; 58 | }; 59 | //key t 60 | case 20: { 61 | _script = [] execVM "functions\destroyBuilding.sqf"; 62 | }; 63 | }; 64 | }; 65 | 66 | waitUntil {!isNull (findDisplay 46)}; 67 | (findDisplay 46) displayAddEventHandler ["KeyDown","_this select 1 call BPM_fnc_keyDown;false;"]; 68 | 69 | // remove all items 70 | removeHeadgear player; 71 | removeGoggles player; 72 | removeVest player; 73 | removeBackpack player; 74 | removeAllWeapons player; 75 | removeAllAssignedItems player; 76 | // god mode 77 | player enableFatigue false; 78 | player setFatigue 0; 79 | player allowDamage false; 80 | player setDamage 0; 81 | player enableStamina false; 82 | // add items 83 | player addWeapon "ItemGPS"; // GPS 84 | player addWeapon "ItemCompass"; // COMPASS 85 | player addWeapon "ItemMap"; // MAP 86 | -------------------------------------------------------------------------------- /mapMarkerIntercept/mapMarkerIntercept.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: mapMarkerIntercept.sqf 22 | Version: 1.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 5:34 PM 29/05/2016 25 | Modification Date: 5:34 PM 29/05/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.2b mission (A3Wasteland.com). The script creates dynamic mission map 29 | markers for use with mission spawning based upon conditions/defines set up in this scripts 30 | configuration. 31 | 32 | Modify server\missions\setupMissionArrays.sqf to run this script, and place this script in the 33 | directory server\functions\. 34 | Add in the following 2 lines above the MissionSpawnMarkers = []; declaration. 35 | _mapMarkerIntercept = [] execVM "server\functions\mapMarkerIntercept.sqf"; 36 | waitUntil {scriptDone _mapMarkerIntercept}; 37 | 38 | Parameter(s): none 39 | 40 | Example: none 41 | 42 | Change Log: 43 | 1.0 - original base script, defines for use with map Stratis. 44 | 45 | ---------------------------------------------------------------------------------------------- 46 | */ 47 | 48 | // The current defines are set up for the map of Stratis (for use with A3Wasteland Stratis 1.2b) 49 | 50 | #define MAPWIDTH 8250 51 | #define MAPHEIGHT 8250 52 | 53 | #define MAPSTEPS 45 54 | 55 | #define MINWATERDEPTH 40 56 | #define MAXWATERDEPTH 41 57 | 58 | #define MAXGRADE 0.5 59 | #define MAXRADIUS 15 60 | 61 | // If defined, the below debug will show each position and radius on the map as colored map markers. 62 | // #define __DUBUG__ 63 | 64 | /* ------------------------------------------------------------------------------------------ 65 | DO NOT EDIT BELOW HERE! 66 | ------------------------------------------------------------------------------------------ */ 67 | 68 | { 69 | switch (true) do 70 | { 71 | case (["Mission_", _x] call fn_startsWith): 72 | { 73 | deleteMarker _x; 74 | }; 75 | case (["SunkenMission_", _x] call fn_startsWith): 76 | { 77 | deleteMarker _x; 78 | }; 79 | }; 80 | } forEach allMapMarkers; 81 | 82 | diag_log "[MAP MARKER INTERCEPT] - DELETED ALL LAND MISSION AND SUNKEN MISSION MAP MARKERS!"; 83 | 84 | _xPos = (MAPWIDTH / MAPSTEPS); 85 | _yPos = (MAPHEIGHT / MAPSTEPS); 86 | 87 | _xPosMeters = MAPSTEPS; 88 | _yPosMeters = MAPSTEPS; 89 | 90 | _maxGradient = MAXGRADE; 91 | _maxGradientRadius = MAXRADIUS; 92 | 93 | _minWaterDepth = MINWATERDEPTH; 94 | _maxWaterDepth = MAXWATERDEPTH; 95 | 96 | _xPosMetersCurr = _xPosMeters; 97 | _yPosMetersCurr = _yPosMeters; 98 | 99 | _yPosMax = false; 100 | 101 | while {!(_yposMax)} do 102 | { 103 | _mapPosCurr = [_xPosMetersCurr,_yPosMetersCurr,0]; 104 | _mapPosCurrDepth = ASLtoATL _mapPosCurr; 105 | _mapPosCurrDepth = (_mapPosCurrDepth select 2); 106 | if ((surfaceIsWater _mapPosCurr) && (_mapPosCurrDepth >= _minWaterDepth) && (_mapPosCurrDepth <= _maxWaterDepth)) then 107 | { 108 | _markerstr = createMarker [format ["SunkenMission_%1",_mapPosCurr],_mapPosCurr]; 109 | #ifdef __DUBUG__ 110 | _markerstr setMarkerShape "ELLIPSE"; 111 | _markerstr setMarkerSize [_maxGradientRadius,_maxGradientRadius]; 112 | _markerstr setMarkerColor "colorBlue"; 113 | _markerstr setMarkerAlpha 1; 114 | #endif 115 | } 116 | else 117 | { 118 | _isFlatEmpty = !(_mapPosCurr isFlatEmpty [_maxGradientRadius, -1, _maxGradient, _maxGradientRadius, 0, false] isEqualTo []); 119 | if (_isFlatEmpty) then 120 | { 121 | _isOnRoad = isOnRoad _mapPosCurr; 122 | _isOnShore = !(_mapPosCurr isFlatEmpty [-1, -1, -1, -1, 0, true] isEqualTo []); 123 | _isNearRoad = !(_mapPosCurr nearRoads (_maxGradientRadius * 2) isEqualTo []); 124 | if ((!_isOnShore) && (!_isOnRoad) && (!_isNearRoad)) then 125 | { 126 | _markerstr = createMarker [format ["Mission_%1",_mapPosCurr],_mapPosCurr]; 127 | #ifdef __DUBUG__ 128 | _markerstr setMarkerShape "ELLIPSE"; 129 | _markerstr setMarkerSize [_maxGradientRadius,_maxGradientRadius]; 130 | _markerstr setMarkerColor "colorGreen"; 131 | _markerstr setMarkerAlpha 1; 132 | #endif 133 | }; 134 | }; 135 | }; 136 | _xPosMetersCurr = _xPosMetersCurr + _xPosMeters; 137 | if (_xPosMetersCurr > (_xPosMeters * _xPos)) then 138 | { 139 | _xPosMetersCurr = _xPosMeters; 140 | _yPosMetersCurr = _yPosMetersCurr + _yPosMeters; 141 | }; 142 | if (_yPosMetersCurr > (_yPosMeters * _yPos)) then 143 | { 144 | _yposMax = true; 145 | }; 146 | }; 147 | 148 | diag_log "[MAP MARKER INTERCEPT] - DYNAMICALLY CREATED NEW MAP MARKERS FOR ALL LAND MISSIONS AND SUNKEN MISSIONS!"; 149 | -------------------------------------------------------------------------------- /outOfBounds/outOfBounds.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: outOfBounds.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 9:33 PM 04/07/2016 25 | Modification Date: 3:01 PM 06/07/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.xx mission (A3Wasteland.com). This script will create a playable area 29 | boundary on the map (server side) which is automatically calculated from the current maps 30 | configuration. It will also execute a constant player check to make sure they are within the 31 | playable area at all times. If the player is outside of the play area, a timer will show on 32 | screen with a count down and an audible warning. If the countdown reaches 0 seconds, then the 33 | player (and any vehicle the player is in) will be killed and forced to respawn. 34 | 35 | The playable area is within a visible blue circle border on the map as well as an altitude limit 36 | (in meters) as set per the _maxHeight variable. The maximum time duration any player is allowed 37 | to be outside the playable area (in seconds) is set by the _maxTime variable. 38 | 39 | Place this file at... 40 | \addons\outOfBounds\outOfBounds.sqf 41 | 42 | Edit the file... 43 | \init.sqf 44 | 45 | And paste in at the bottom... 46 | [] execVM "addons\outOfBounds\outOfBounds.sqf"; 47 | 48 | Below the line... 49 | [] execVM "addons\R3F_ARTY_AND_LOG\init.sqf"; 50 | 51 | Parameter(s): none 52 | 53 | Example: none 54 | 55 | Change Log: 56 | 1.0.0 - original base script. 57 | 58 | ---------------------------------------------------------------------------------------------- 59 | */ 60 | 61 | _maxTime = 20; // 20 seconds max default 62 | _maxHeight = 1500; // 1500m height max default 63 | 64 | /* ------------------------------------------------------------------------------------------ 65 | DO NOT EDIT BELOW HERE! 66 | ------------------------------------------------------------------------------------------ */ 67 | 68 | if (isServer) then 69 | { 70 | _mapSizeSquare = getNumber (configfile >> "CfgWorlds" >> worldName >> "mapSize"); 71 | _mapSizeEllipse = sqrt ((_mapSizeSquare * _mapSizeSquare) + (_mapSizeSquare * _mapSizeSquare)); 72 | _mapCenterPos = [(_mapSizeSquare / 2),(_mapSizeSquare / 2)]; 73 | 74 | _mkrInBounds = createMarker ["playableArea",_mapCenterPos]; 75 | _mkrInBounds setMarkerColor "ColorBlue"; 76 | _mkrInBounds setMarkerShape "ELLIPSE"; 77 | _mkrInBounds setMarkerBrush "BORDER"; 78 | _mkrInBounds setMarkerAlpha 1; 79 | _mkrInBounds setMarkerSize [(_mapSizeEllipse / 2),(_mapSizeEllipse / 2)]; 80 | }; 81 | 82 | if (hasInterface) then 83 | { 84 | [_maxTime,_maxHeight] spawn 85 | { 86 | params ["_maxTime","_maxHeight"]; 87 | respawnDialogActive = false; 88 | _inLoop = false; 89 | _loopForever = true; 90 | while {_loopForever} do 91 | { 92 | waitUntil {uiSleep 0.1; alive player && !playerSpawning && !respawnDialogActive}; 93 | if (alive player) then 94 | { 95 | _outOfBounds = !(player inArea "playableArea"); 96 | _outOfBoundsAltitude = (getPos player select 2 > _maxHeight); 97 | if (((_outOfBounds) || (_outOfBoundsAltitude)) && (!_inLoop)) then 98 | { 99 | _inLoop = true; 100 | _inLoopTimer = _maxTime; 101 | _secondsText = ""; 102 | while {(_outOfBounds) || (_outOfBoundsAltitude)} do 103 | { 104 | if (_inLoopTimer > 1) then 105 | { 106 | _secondsText = "SECONDS"; 107 | } 108 | else 109 | { 110 | _secondsText = "SECOND"; 111 | }; 112 | _oobText = format ["YOU ARE OUTSIDE OF THE PLAYABLE AREA!\n\nYOU HAVE %1 %2 TO BE INSIDE THE PLAYABLE AREA AND UNDER %3M ALTITUDE!",_inLoopTimer,_secondsText,_maxHeight]; 113 | [_oobText, 1] call mf_notify_client; 114 | playSound "Alarm"; 115 | uiSleep 1; 116 | _inLoopTimer = _inLoopTimer - 1; 117 | if (_inLoopTimer isEqualTo 0) exitWith 118 | { 119 | vehicle player setDamage 1; 120 | player setDamage 1; 121 | }; 122 | _outOfBounds = !(player inArea "playableArea"); 123 | _outOfBoundsAltitude = (getPos player select 2 > _maxHeight); 124 | }; 125 | if (alive player) then 126 | { 127 | _oobText = "YOU ARE BACK INSIDE THE PLAYABLE AREA!"; 128 | [_oobText, 10] call mf_notify_client; 129 | } 130 | else 131 | { 132 | _oobText = "YOU WERE OUTSIDE OF THE PLAYABLE AREA FOR TOO LONG AND HAVE BEEN KILLED!"; 133 | [_oobText, 10] call mf_notify_client; 134 | }; 135 | _inLoop = false; 136 | _outOfBounds = false; 137 | _outOfBoundsAltitude = false; 138 | }; 139 | }; 140 | uiSleep 1; 141 | }; 142 | }; 143 | }; 144 | -------------------------------------------------------------------------------- /outOfBounds/outOfBoundsHeli.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: outOfBoundsHeli.sqf 22 | Version: 1.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 2:14 PM 20/02/2018 25 | Modification Date: 2:14 PM 20/02/2018 26 | 27 | Description: 28 | out of bounds checks for player in a helicopter. 29 | 30 | Parameter(s): none 31 | 32 | Example: none 33 | 34 | Change Log: 35 | 1.0 - original base script. 36 | 37 | ---------------------------------------------------------------------------------------------- 38 | */ 39 | 40 | _maxTime = 30; // max out of bounds timer 41 | _maxHeight = 1700; // max helicopter height 42 | 43 | /* ------------------------------------------------------------------------------------------ 44 | DO NOT EDIT BELOW HERE! 45 | ------------------------------------------------------------------------------------------ */ 46 | 47 | if (isServer) then 48 | { 49 | _mapSizeSquare = getNumber (configfile >> "CfgWorlds" >> worldName >> "mapSize"); 50 | _mapSizeEllipse = sqrt ((_mapSizeSquare * _mapSizeSquare) + (_mapSizeSquare * _mapSizeSquare)); 51 | _mapCenterPos = [(_mapSizeSquare / 2),(_mapSizeSquare / 2)]; 52 | _mkrInBounds = createMarker ["playableAreaHeli",_mapCenterPos]; 53 | _mkrInBounds setMarkerColor "ColorOrange"; 54 | _mkrInBounds setMarkerShape "ELLIPSE"; 55 | _mkrInBounds setMarkerBrush "BORDER"; 56 | _mkrInBounds setMarkerAlpha 1; 57 | _mkrInBounds setMarkerSize [(_mapSizeEllipse / 1.99),(_mapSizeEllipse / 1.99)]; 58 | }; 59 | 60 | if (hasInterface) then 61 | { 62 | waitUntil {!isNull player}; 63 | if !(player diarySubjectExists "outofbounds") then 64 | { 65 | player createDiarySubject ["outofbounds", "Out Of Bounds"]; 66 | }; 67 | if (player diarySubjectExists "outofbounds") then 68 | { 69 | player createDiaryRecord ["outofbounds", 70 | [ 71 | "Helicopter", 72 | " 73 |
Marker: ORANGE Ellipse. 74 |
Altitude Limit: " + str _maxHeight + " meters. 75 |
Timer: " + str _maxTime + " seconds. 76 | 77 | " 78 | ]]; 79 | }; 80 | 81 | [_maxTime,_maxHeight] spawn 82 | { 83 | params ["_maxTime","_maxHeight"]; 84 | _loopForever = true; 85 | while {_loopForever} do 86 | { 87 | waitUntil {uiSleep 1; alive player && !(player getVariable ["playerSpawning",true])}; 88 | waitUntil {uiSleep 1; (((objectParent player) isKindOf "Helicopter") && !((objectParent player) isKindOf "ParachuteBase")) && (!((objectParent player) inArea "playableAreaHeli") || ((getPos (objectParent player) select 2) > _maxHeight))}; 89 | /////////////////////////////////////////////////////////////////////////////////////// 90 | _secondsTimer = _maxTime; 91 | _secondsText = ""; 92 | while {!((objectParent player) inArea "playableAreaHeli") || ((getPos (objectParent player) select 2) > _maxHeight)} do 93 | { 94 | if (_secondsTimer > 1) then 95 | { 96 | _secondsText = "SECONDS"; 97 | } 98 | else 99 | { 100 | _secondsText = "SECOND"; 101 | }; 102 | _text = format ["YOU AND YOUR HELICOPTER ARE OUTSIDE OF THE PLAYABLE AREA!\n\nYOU HAVE %1 %2 TO BE INSIDE THE PLAYABLE AREA AND UNDER %3M ALTITUDE!",_secondsTimer,_secondsText,_maxHeight]; 103 | [_text, 1] call mf_notify_client; 104 | uiSleep 1; 105 | _secondsTimer = _secondsTimer - 1; 106 | if (_secondsTimer isEqualTo 0) exitWith 107 | { 108 | (objectParent player) setDamage 1; 109 | player setDamage 1; 110 | }; 111 | }; 112 | /////////////////////////////////////////////////////////////////////////////////////// 113 | if !((objectParent player) isEqualTo objNull) then 114 | { 115 | if ((alive player) && (alive (objectParent player))) then 116 | { 117 | _text = "YOU AND YOUR HELICOPTER ARE BACK INSIDE THE PLAYABLE AREA"; 118 | [_text, 10] call mf_notify_client; 119 | } 120 | else 121 | { 122 | _text = "YOU WERE KILLED AND YOUR HELICOPTER WAS DESTROYED DUE TO BEING OUTSIDE OF THE PLAYABLE AREA FOR TOO LONG"; 123 | [_text, 10] call mf_notify_client; 124 | }; 125 | }; 126 | /////////////////////////////////////////////////////////////////////////////////////// 127 | }; 128 | }; 129 | }; 130 | -------------------------------------------------------------------------------- /outOfBounds/outOfBoundsLandVehicle.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: outOfBoundsLandVehicle.sqf 22 | Version: 1.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 2:14 PM 20/02/2018 25 | Modification Date: 2:14 PM 20/02/2018 26 | 27 | Description: 28 | out of bounds checks for player in a land vehicle. 29 | 30 | Parameter(s): none 31 | 32 | Example: none 33 | 34 | Change Log: 35 | 1.0 - original base script. 36 | 37 | ---------------------------------------------------------------------------------------------- 38 | */ 39 | 40 | _maxTime = 30; // max out of bounds timer 41 | _maxHeight = 1700; // max land vehicle height 42 | 43 | /* ------------------------------------------------------------------------------------------ 44 | DO NOT EDIT BELOW HERE! 45 | ------------------------------------------------------------------------------------------ */ 46 | 47 | if (isServer) then 48 | { 49 | _mapSizeSquare = getNumber (configfile >> "CfgWorlds" >> worldName >> "mapSize"); 50 | _mapSizeEllipse = sqrt ((_mapSizeSquare * _mapSizeSquare) + (_mapSizeSquare * _mapSizeSquare)); 51 | _mapCenterPos = [(_mapSizeSquare / 2),(_mapSizeSquare / 2)]; 52 | _mkrInBounds = createMarker ["playableAreaLandVehicle",_mapCenterPos]; 53 | _mkrInBounds setMarkerColor "ColorBrown"; 54 | _mkrInBounds setMarkerShape "ELLIPSE"; 55 | _mkrInBounds setMarkerBrush "BORDER"; 56 | _mkrInBounds setMarkerAlpha 1; 57 | _mkrInBounds setMarkerSize [(_mapSizeEllipse / 1.97),(_mapSizeEllipse / 1.97)]; 58 | }; 59 | 60 | if (hasInterface) then 61 | { 62 | waitUntil {!isNull player}; 63 | if !(player diarySubjectExists "outofbounds") then 64 | { 65 | player createDiarySubject ["outofbounds", "Out Of Bounds"]; 66 | }; 67 | if (player diarySubjectExists "outofbounds") then 68 | { 69 | player createDiaryRecord ["outofbounds", 70 | [ 71 | "Land Vehicle", 72 | " 73 |
Marker: BROWN Ellipse. 74 |
Altitude Limit: " + str _maxHeight + " meters. 75 |
Timer: " + str _maxTime + " seconds. 76 | 77 | " 78 | ]]; 79 | }; 80 | 81 | [_maxTime,_maxHeight] spawn 82 | { 83 | params ["_maxTime","_maxHeight"]; 84 | _loopForever = true; 85 | while {_loopForever} do 86 | { 87 | waitUntil {uiSleep 1; alive player && !(player getVariable ["playerSpawning",true])}; 88 | waitUntil {uiSleep 1; ((objectParent player) isKindOf "LandVehicle") && (!((objectParent player) inArea "playableAreaLandVehicle") || ((getPos (objectParent player) select 2) > _maxHeight))}; 89 | /////////////////////////////////////////////////////////////////////////////////////// 90 | _secondsTimer = _maxTime; 91 | _secondsText = ""; 92 | while {!((objectParent player) inArea "playableAreaLandVehicle") || ((getPos (objectParent player) select 2) > _maxHeight)} do 93 | { 94 | if (_secondsTimer > 1) then 95 | { 96 | _secondsText = "SECONDS"; 97 | } 98 | else 99 | { 100 | _secondsText = "SECOND"; 101 | }; 102 | _text = format ["YOU AND YOUR LAND VEHICLE ARE OUTSIDE OF THE PLAYABLE AREA!\n\nYOU HAVE %1 %2 TO BE INSIDE THE PLAYABLE AREA AND UNDER %3M ALTITUDE!",_secondsTimer,_secondsText,_maxHeight]; 103 | [_text, 1] call mf_notify_client; 104 | uiSleep 1; 105 | _secondsTimer = _secondsTimer - 1; 106 | if (_secondsTimer isEqualTo 0) exitWith 107 | { 108 | (objectParent player) setDamage 1; 109 | player setDamage 1; 110 | }; 111 | }; 112 | /////////////////////////////////////////////////////////////////////////////////////// 113 | if !((objectParent player) isEqualTo objNull) then 114 | { 115 | if ((alive player) && (alive (objectParent player))) then 116 | { 117 | _text = "YOU AND YOUR LAND VEHICLE ARE BACK INSIDE THE PLAYABLE AREA"; 118 | [_text, 10] call mf_notify_client; 119 | } 120 | else 121 | { 122 | _text = "YOU WERE KILLED AND YOUR LAND VEHICLE WAS DESTROYED DUE TO BEING OUTSIDE OF THE PLAYABLE AREA FOR TOO LONG"; 123 | [_text, 10] call mf_notify_client; 124 | }; 125 | }; 126 | /////////////////////////////////////////////////////////////////////////////////////// 127 | }; 128 | }; 129 | }; 130 | -------------------------------------------------------------------------------- /outOfBounds/outOfBoundsPlane.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: outOfBoundsPlane.sqf 22 | Version: 1.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 2:14 PM 20/02/2018 25 | Modification Date: 2:14 PM 20/02/2018 26 | 27 | Description: 28 | out of bounds checks for player in a plane. 29 | 30 | Parameter(s): none 31 | 32 | Example: none 33 | 34 | Change Log: 35 | 1.0 - original base script. 36 | 37 | ---------------------------------------------------------------------------------------------- 38 | */ 39 | 40 | _maxTime = 30; // max out of bounds timer 41 | _maxHeight = 2200; // max plane height 42 | 43 | /* ------------------------------------------------------------------------------------------ 44 | DO NOT EDIT BELOW HERE! 45 | ------------------------------------------------------------------------------------------ */ 46 | 47 | if (isServer) then 48 | { 49 | _mapSizeSquare = getNumber (configfile >> "CfgWorlds" >> worldName >> "mapSize"); 50 | _mapSizeEllipse = sqrt ((_mapSizeSquare * _mapSizeSquare) + (_mapSizeSquare * _mapSizeSquare)); 51 | _mapCenterPos = [(_mapSizeSquare / 2),(_mapSizeSquare / 2)]; 52 | _mkrInBounds = createMarker ["playableAreaPlane",_mapCenterPos]; 53 | _mkrInBounds setMarkerColor "ColorRed"; 54 | _mkrInBounds setMarkerShape "ELLIPSE"; 55 | _mkrInBounds setMarkerBrush "BORDER"; 56 | _mkrInBounds setMarkerAlpha 1; 57 | _mkrInBounds setMarkerSize [(_mapSizeEllipse / 1.5),(_mapSizeEllipse / 1.5)]; 58 | }; 59 | 60 | if (hasInterface) then 61 | { 62 | waitUntil {!isNull player}; 63 | if !(player diarySubjectExists "outofbounds") then 64 | { 65 | player createDiarySubject ["outofbounds", "Out Of Bounds"]; 66 | }; 67 | if (player diarySubjectExists "outofbounds") then 68 | { 69 | player createDiaryRecord ["outofbounds", 70 | [ 71 | "Plane", 72 | " 73 |
Marker: RED Ellipse. 74 |
Altitude Limit: " + str _maxHeight + " meters. 75 |
Timer: " + str _maxTime + " seconds. 76 | 77 | 78 | " 79 | ]]; 80 | }; 81 | 82 | [_maxTime,_maxHeight] spawn 83 | { 84 | params ["_maxTime","_maxHeight"]; 85 | _loopForever = true; 86 | while {_loopForever} do 87 | { 88 | waitUntil {uiSleep 1; alive player && !(player getVariable ["playerSpawning",true])}; 89 | waitUntil {uiSleep 1; ((objectParent player) isKindOf "Plane") && (!((objectParent player) inArea "playableAreaPlane") || ((getPos (objectParent player) select 2) > _maxHeight))}; 90 | /////////////////////////////////////////////////////////////////////////////////////// 91 | _secondsTimer = _maxTime; 92 | _secondsText = ""; 93 | while {!((objectParent player) inArea "playableAreaPlane") || ((getPos (objectParent player) select 2) > _maxHeight)} do 94 | { 95 | if (_secondsTimer > 1) then 96 | { 97 | _secondsText = "SECONDS"; 98 | } 99 | else 100 | { 101 | _secondsText = "SECOND"; 102 | }; 103 | _text = format ["YOU AND YOUR PLANE ARE OUTSIDE OF THE PLAYABLE AREA!\n\nYOU HAVE %1 %2 TO BE INSIDE THE PLAYABLE AREA AND UNDER %3M ALTITUDE!",_secondsTimer,_secondsText,_maxHeight]; 104 | [_text, 1] call mf_notify_client; 105 | uiSleep 1; 106 | _secondsTimer = _secondsTimer - 1; 107 | if (_secondsTimer isEqualTo 0) exitWith 108 | { 109 | (objectParent player) setDamage 1; 110 | player setDamage 1; 111 | }; 112 | }; 113 | /////////////////////////////////////////////////////////////////////////////////////// 114 | if !((objectParent player) isEqualTo objNull) then 115 | { 116 | if ((alive player) && (alive (objectParent player))) then 117 | { 118 | _text = "YOU AND YOUR PLANE ARE BACK INSIDE THE PLAYABLE AREA"; 119 | [_text, 10] call mf_notify_client; 120 | } 121 | else 122 | { 123 | _text = "YOU WERE KILLED AND YOUR PLANE WAS DESTROYED DUE TO BEING OUTSIDE OF THE PLAYABLE AREA FOR TOO LONG"; 124 | [_text, 10] call mf_notify_client; 125 | }; 126 | }; 127 | /////////////////////////////////////////////////////////////////////////////////////// 128 | }; 129 | }; 130 | }; 131 | -------------------------------------------------------------------------------- /outOfBounds/outOfBoundsPlayer.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: outOfBoundsPlayer.sqf 22 | Version: 1.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 2:14 PM 20/02/2018 25 | Modification Date: 2:14 PM 20/02/2018 26 | 27 | Description: 28 | out of bounds checks for player on-foot or in a parachute. 29 | 30 | Parameter(s): none 31 | 32 | Example: none 33 | 34 | Change Log: 35 | 1.0 - original base script. 36 | 37 | ---------------------------------------------------------------------------------------------- 38 | */ 39 | 40 | _maxTime = 30; // max out of bounds timer 41 | _maxHeight = 2500; // max player height 42 | 43 | /* ------------------------------------------------------------------------------------------ 44 | DO NOT EDIT BELOW HERE! 45 | ------------------------------------------------------------------------------------------ */ 46 | 47 | if (isServer) then 48 | { 49 | _mapSizeSquare = getNumber (configfile >> "CfgWorlds" >> worldName >> "mapSize"); 50 | _mapSizeEllipse = sqrt ((_mapSizeSquare * _mapSizeSquare) + (_mapSizeSquare * _mapSizeSquare)); 51 | _mapCenterPos = [(_mapSizeSquare / 2),(_mapSizeSquare / 2)]; 52 | _mkrInBounds = createMarker ["playableAreaPlayer",_mapCenterPos]; 53 | _mkrInBounds setMarkerColor "ColorGreen"; 54 | _mkrInBounds setMarkerShape "ELLIPSE"; 55 | _mkrInBounds setMarkerBrush "BORDER"; 56 | _mkrInBounds setMarkerAlpha 1; 57 | _mkrInBounds setMarkerSize [(_mapSizeEllipse / 1.96),(_mapSizeEllipse / 1.96)]; 58 | }; 59 | 60 | if (hasInterface) then 61 | { 62 | waitUntil {!isNull player}; 63 | if !(player diarySubjectExists "outofbounds") then 64 | { 65 | player createDiarySubject ["outofbounds", "Out Of Bounds"]; 66 | }; 67 | if (player diarySubjectExists "outofbounds") then 68 | { 69 | player createDiaryRecord ["outofbounds", 70 | [ 71 | "Parachute", 72 | " 73 |
Marker: GREEN Ellipse. 74 |
Altitude Limit: " + str _maxHeight + " meters. 75 |
Timer: " + str _maxTime + " seconds. 76 | 77 | " 78 | ]]; 79 | player createDiaryRecord ["outofbounds", 80 | [ 81 | "Player", 82 | " 83 |
Marker: GREEN Ellipse. 84 |
Altitude Limit: " + str _maxHeight + " meters. 85 |
Timer: " + str _maxTime + " seconds. 86 | 87 | " 88 | ]]; 89 | 90 | }; 91 | 92 | [_maxTime,_maxHeight] spawn 93 | { 94 | params ["_maxTime","_maxHeight"]; 95 | _loopForever = true; 96 | while {_loopForever} do 97 | { 98 | waitUntil {uiSleep 1; alive player && !(player getVariable ["playerSpawning",true])}; 99 | waitUntil {uiSleep 1; (((objectParent player) isEqualTo objNull) || ((objectParent player) isKindOf "ParachuteBase")) && (!(player inArea "playableAreaPlayer") || ((getPos player select 2) > _maxHeight))}; 100 | /////////////////////////////////////////////////////////////////////////////////////// 101 | _secondsTimer = _maxTime; 102 | _secondsText = ""; 103 | while {!(player inArea "playableAreaPlayer") || ((getPos player select 2) > _maxHeight)} do 104 | { 105 | if (_secondsTimer > 1) then 106 | { 107 | _secondsText = "SECONDS"; 108 | } 109 | else 110 | { 111 | _secondsText = "SECOND"; 112 | }; 113 | _text = format ["YOU ARE OUTSIDE OF THE PLAYABLE AREA!\n\nYOU HAVE %1 %2 TO BE INSIDE THE PLAYABLE AREA AND UNDER %3M ALTITUDE!",_secondsTimer,_secondsText,_maxHeight]; 114 | [_text, 1] call mf_notify_client; 115 | uiSleep 1; 116 | _secondsTimer = _secondsTimer - 1; 117 | if (_secondsTimer isEqualTo 0) exitWith 118 | { 119 | (objectParent player) setDamage 1; 120 | player setDamage 1; 121 | }; 122 | }; 123 | /////////////////////////////////////////////////////////////////////////////////////// 124 | if ((objectParent player) isEqualTo objNull) then 125 | { 126 | if (alive player) then 127 | { 128 | _text = "YOU ARE BACK INSIDE THE PLAYABLE AREA"; 129 | [_text, 10] call mf_notify_client; 130 | } 131 | else 132 | { 133 | _text = "YOU WERE KILLED DUE TO BEING OUTSIDE OF THE PLAYABLE AREA FOR TOO LONG"; 134 | [_text, 10] call mf_notify_client; 135 | }; 136 | }; 137 | /////////////////////////////////////////////////////////////////////////////////////// 138 | }; 139 | }; 140 | }; 141 | -------------------------------------------------------------------------------- /outOfBounds/outOfBoundsRemote.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: outOfBoundsRemote.sqf 22 | Version: 1.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 2:14 PM 20/02/2018 25 | Modification Date: 2:14 PM 20/02/2018 26 | 27 | Description: 28 | out of bounds checks for player connected to a remote vehicle (uav/ugv). 29 | 30 | Parameter(s): none 31 | 32 | Example: none 33 | 34 | Change Log: 35 | 1.0 - original base script. 36 | 37 | ---------------------------------------------------------------------------------------------- 38 | */ 39 | 40 | _maxTime = 30; // max out of bounds timer 41 | _maxHeight = 1500; // max remote height 42 | 43 | /* ------------------------------------------------------------------------------------------ 44 | DO NOT EDIT BELOW HERE! 45 | ------------------------------------------------------------------------------------------ */ 46 | 47 | if (isServer) then 48 | { 49 | _mapSizeSquare = getNumber (configfile >> "CfgWorlds" >> worldName >> "mapSize"); 50 | _mapSizeEllipse = sqrt ((_mapSizeSquare * _mapSizeSquare) + (_mapSizeSquare * _mapSizeSquare)); 51 | _mapCenterPos = [(_mapSizeSquare / 2),(_mapSizeSquare / 2)]; 52 | _mkrInBounds = createMarker ["playableAreaRemote",_mapCenterPos]; 53 | _mkrInBounds setMarkerColor "ColorYellow"; 54 | _mkrInBounds setMarkerShape "ELLIPSE"; 55 | _mkrInBounds setMarkerBrush "BORDER"; 56 | _mkrInBounds setMarkerAlpha 1; 57 | _mkrInBounds setMarkerSize [(_mapSizeEllipse / 1.98),(_mapSizeEllipse / 1.98)]; 58 | }; 59 | 60 | if (hasInterface) then 61 | { 62 | waitUntil {!isNull player}; 63 | if !(player diarySubjectExists "outofbounds") then 64 | { 65 | player createDiarySubject ["outofbounds", "Out Of Bounds"]; 66 | }; 67 | if (player diarySubjectExists "outofbounds") then 68 | { 69 | player createDiaryRecord ["outofbounds", 70 | [ 71 | "Remote Vehicle (UAV/UGV)", 72 | " 73 |
Marker: YELLOW Ellipse. 74 |
Altitude Limit: " + str _maxHeight + " meters. 75 |
Timer: " + str _maxTime + " seconds. 76 | 77 | " 78 | ]]; 79 | }; 80 | 81 | [_maxTime,_maxHeight] spawn 82 | { 83 | params ["_maxTime","_maxHeight"]; 84 | _loopForever = true; 85 | while {_loopForever} do 86 | { 87 | waitUntil {uiSleep 1; alive player && !(player getVariable ["playerSpawning",true])}; 88 | waitUntil {uiSleep 1; !((UAVcontrol (getConnectedUAV player) select 0) isEqualTo objNull) && (!((getConnectedUAV player) inArea "playableAreaRemote") || ((getPos (getConnectedUAV player) select 2) > _maxHeight))}; 89 | /////////////////////////////////////////////////////////////////////////////////////// 90 | _secondsTimer = _maxTime; 91 | _secondsText = ""; 92 | while {!((getConnectedUAV player) inArea "playableAreaRemote") || ((getPos (getConnectedUAV player) select 2) > _maxHeight)} do 93 | { 94 | if (_secondsTimer > 1) then 95 | { 96 | _secondsText = "SECONDS"; 97 | } 98 | else 99 | { 100 | _secondsText = "SECOND"; 101 | }; 102 | _text = format ["YOUR REMOTE VEHICLE IS OUTSIDE OF THE PLAYABLE AREA!\n\nYOU HAVE %1 %2 TO GET IT INSIDE THE PLAYABLE AREA AND UNDER %3M ALTITUDE!",_secondsTimer,_secondsText,_maxHeight]; 103 | [_text, 1] call mf_notify_client; 104 | uiSleep 1; 105 | _secondsTimer = _secondsTimer - 1; 106 | if (_secondsTimer isEqualTo 0) exitWith 107 | { 108 | (getConnectedUAV player) setDamage 1; 109 | player setDamage 1; 110 | }; 111 | }; 112 | /////////////////////////////////////////////////////////////////////////////////////// 113 | if !((getConnectedUAV player) isEqualTo objNull) then 114 | { 115 | if ((alive player) && (alive (getConnectedUAV player))) then 116 | { 117 | _text = "YOUR REMOTE VEHICLE ARE BACK INSIDE THE PLAYABLE AREA"; 118 | [_text, 10] call mf_notify_client; 119 | } 120 | else 121 | { 122 | _text = "YOU WERE KILLED AND YOUR REMOTE VEHICLE WAS DESTROYED DUE TO BEING OUTSIDE OF THE PLAYABLE AREA FOR TOO LONG"; 123 | [_text, 10] call mf_notify_client; 124 | }; 125 | }; 126 | /////////////////////////////////////////////////////////////////////////////////////// 127 | }; 128 | }; 129 | }; 130 | -------------------------------------------------------------------------------- /outOfBounds/outOfBoundsRemoteStore.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: outOfBoundsRemoteStore.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 9:33 PM 04/07/2016 25 | Modification Date: 3:01 PM 06/07/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.xx mission (A3Wasteland.com). This script will create a playable area 29 | boundary on the map (server side) which is automatically calculated from the current maps 30 | configuration. It will also execute a constant _uav check to make sure they are within the 31 | playable area at all times. If the _uav is outside of the play area, a timer will show on 32 | screen with a count down and an audible warning. If the countdown reaches 0 seconds, then the 33 | _uav (and any vehicle the _uav is in) will be killed and forced to respawn. 34 | 35 | The playable area is within a visible blue circle border on the map as well as an altitude limit 36 | (in meters) as set per the _maxHeightRemote variable. The maximum time duration any _uav is allowed 37 | to be outside the playable area (in seconds) is set by the _maxTime variable. 38 | 39 | Place this file at... 40 | \addons\outOfBounds\outOfBoundsRemoteStore.sqf 41 | 42 | Edit the file... 43 | \server\functions\fn_createCrewUAV.sqf 44 | 45 | And paste in at the bottom... 46 | [_uav] execVM "addons\outOfBounds\outOfBoundsRemoteStore.sqf"; 47 | 48 | Above the line... (right at the bottom of the script). 49 | _grp 50 | 51 | Parameter(s): none 52 | 53 | Example: none 54 | 55 | Change Log: 56 | 1.0.0 - original base script. 57 | 58 | ---------------------------------------------------------------------------------------------- 59 | */ 60 | 61 | _maxTime = 30; // max out of bounds timer 62 | _maxHeightRemote = 1500; // max remote-vehicle height - this MUST match the outOfBoundsRemote.sqf entry! 63 | 64 | /* ------------------------------------------------------------------------------------------ 65 | DO NOT EDIT BELOW HERE! 66 | ------------------------------------------------------------------------------------------ */ 67 | 68 | params ["_uav"]; 69 | 70 | if (!isNil "_uav") then 71 | { 72 | _uavText = format ["\n! %1 PLEASE NOTE THAT THE REMOTE VEHICLE '%2' HAS A MAX ALTITUDE OF %3M !",toUpper (name player),toUpper (getText (configfile >> "CfgVehicles" >> typeOf _uav >> "displayName")),_maxHeightRemote]; 73 | [_uavText, 5] call mf_notify_client; 74 | 75 | [_uav,_maxTime,_maxHeightRemote] spawn 76 | { 77 | params ["_uav","_maxTime","_maxHeightRemote"]; 78 | respawnDialogActive = false; 79 | _inLoop = false; 80 | while {alive _uav} do 81 | { 82 | waitUntil {uiSleep 1; alive _uav}; 83 | if (alive _uav) then 84 | { 85 | _outOfBounds = !(_uav inArea "playableAreaRemote"); 86 | _outOfBoundsAltitude = (getPos _uav select 2 > _maxHeightRemote); 87 | if (((_outOfBounds) || (_outOfBoundsAltitude)) && (!_inLoop)) then 88 | { 89 | _inLoop = true; 90 | _inLoopTimer = _maxTime; 91 | _secondsText = ""; 92 | while {(_outOfBounds) || (_outOfBoundsAltitude)} do 93 | { 94 | uiSleep 1; 95 | _inLoopTimer = _inLoopTimer - 1; 96 | if (_inLoopTimer isEqualTo 0) exitWith 97 | { 98 | vehicle _uav setDamage 1; 99 | _uav setDamage 1; 100 | }; 101 | _outOfBounds = !(_uav inArea "playableAreaRemote"); 102 | _outOfBoundsAltitude = (getPos _uav select 2 > _maxHeightRemote); 103 | }; 104 | _inLoop = false; 105 | _outOfBounds = false; 106 | _outOfBoundsAltitude = false; 107 | }; 108 | }; 109 | uiSleep 1; 110 | }; 111 | }; 112 | }; 113 | -------------------------------------------------------------------------------- /outOfBounds/outOfBoundsShip.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2018 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: outOfBoundsShip.sqf 22 | Version: 1.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 2:14 PM 20/02/2018 25 | Modification Date: 2:14 PM 20/02/2018 26 | 27 | Description: 28 | out of bounds checks for player in a ship. 29 | 30 | Parameter(s): none 31 | 32 | Example: none 33 | 34 | Change Log: 35 | 1.0 - original base script. 36 | 37 | ---------------------------------------------------------------------------------------------- 38 | */ 39 | 40 | _maxTime = 30; // max out of bounds timer 41 | _maxHeight = 1700; // max water vehicle height (same height as helicopter, as some water vehicles can be slingloaded) 42 | 43 | /* ------------------------------------------------------------------------------------------ 44 | DO NOT EDIT BELOW HERE! 45 | ------------------------------------------------------------------------------------------ */ 46 | 47 | if (isServer) then 48 | { 49 | _mapSizeSquare = getNumber (configfile >> "CfgWorlds" >> worldName >> "mapSize"); 50 | _mapSizeEllipse = sqrt ((_mapSizeSquare * _mapSizeSquare) + (_mapSizeSquare * _mapSizeSquare)); 51 | _mapCenterPos = [(_mapSizeSquare / 2),(_mapSizeSquare / 2)]; 52 | _mkrInBounds = createMarker ["playableAreaShip",_mapCenterPos]; 53 | _mkrInBounds setMarkerColor "ColorBlue"; 54 | _mkrInBounds setMarkerShape "ELLIPSE"; 55 | _mkrInBounds setMarkerBrush "BORDER"; 56 | _mkrInBounds setMarkerAlpha 1; 57 | _mkrInBounds setMarkerSize [(_mapSizeEllipse / 2),(_mapSizeEllipse / 2)]; 58 | }; 59 | 60 | if (hasInterface) then 61 | { 62 | waitUntil {!isNull player}; 63 | if !(player diarySubjectExists "outofbounds") then 64 | { 65 | player createDiarySubject ["outofbounds", "Out Of Bounds"]; 66 | }; 67 | if (player diarySubjectExists "outofbounds") then 68 | { 69 | player createDiaryRecord ["outofbounds", 70 | [ 71 | "Water Vehicle", 72 | " 73 |
Marker: BLUE Ellipse. 74 |
Altitude Limit: " + str _maxHeight + " meters. 75 |
Timer: " + str _maxTime + " seconds. 76 | 77 | " 78 | ]]; 79 | }; 80 | 81 | [_maxTime,_maxHeight] spawn 82 | { 83 | params ["_maxTime","_maxHeight"]; 84 | _loopForever = true; 85 | while {_loopForever} do 86 | { 87 | waitUntil {uiSleep 1; alive player && !(player getVariable ["playerSpawning",true])}; 88 | waitUntil {uiSleep 1; ((objectParent player) isKindOf "Ship") && (!((objectParent player) inArea "playableAreaShip") || ((getPos (objectParent player) select 2) > _maxHeight))}; 89 | /////////////////////////////////////////////////////////////////////////////////////// 90 | _secondsTimer = _maxTime; 91 | _secondsText = ""; 92 | while {!((objectParent player) inArea "playableAreaShip") || ((getPos (objectParent player) select 2) > _maxHeight)} do 93 | { 94 | if (_secondsTimer > 1) then 95 | { 96 | _secondsText = "SECONDS"; 97 | } 98 | else 99 | { 100 | _secondsText = "SECOND"; 101 | }; 102 | _text = format ["YOU AND YOUR WATER VEHICLE ARE OUTSIDE OF THE PLAYABLE AREA!\n\nYOU HAVE %1 %2 TO BE INSIDE THE PLAYABLE AREA AND UNDER %3M ALTITUDE!",_secondsTimer,_secondsText,_maxHeight]; 103 | [_text, 1] call mf_notify_client; 104 | uiSleep 1; 105 | _secondsTimer = _secondsTimer - 1; 106 | if (_secondsTimer isEqualTo 0) exitWith 107 | { 108 | (objectParent player) setDamage 1; 109 | player setDamage 1; 110 | }; 111 | }; 112 | /////////////////////////////////////////////////////////////////////////////////////// 113 | if !((objectParent player) isEqualTo objNull) then 114 | { 115 | if ((alive player) && (alive (objectParent player))) then 116 | { 117 | _text = "YOU AND YOUR WATER VEHICLE ARE BACK INSIDE THE PLAYABLE AREA"; 118 | [_text, 10] call mf_notify_client; 119 | } 120 | else 121 | { 122 | _text = "YOU WERE KILLED AND YOUR WATER VEHICLE WAS DESTROYED DUE TO BEING OUTSIDE OF THE PLAYABLE AREA FOR TOO LONG"; 123 | [_text, 10] call mf_notify_client; 124 | }; 125 | }; 126 | /////////////////////////////////////////////////////////////////////////////////////// 127 | }; 128 | }; 129 | }; 130 | -------------------------------------------------------------------------------- /playerCustomUniforms/playerCustomUniforms.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: playerCustomUniforms.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 4:47 PM 27/11/2016 25 | Modification Date: 4:47 PM 27/11/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.Xx mission (A3Wasteland.com). This script allows use of custom 29 | uniform textures for groups/donators/vip/etc based off a uniform class within the ArmA 3 30 | configuration if the player UID is matched within the configuration. 31 | 32 | Within the _playerCustomUniforms array below, see 'TEMPLATE' for the base structure of how 33 | this script is configured. The configuration is set up to easily allow for multiple entries. 34 | 35 | This script is 100% client side, so in order to change/add/update you will need to repack 36 | your mission file each time. 37 | 38 | Place this script at... 39 | \addons\playerCustomUniforms\playerCustomUniforms.sqf 40 | 41 | Edit... 42 | \client\init.sqf 43 | And paste in... 44 | [] execVM "addons\playerCustomUniforms\playerCustomUniforms.sqf"; 45 | At the bottom of the script. 46 | 47 | Add any custom uniform textures to directory... 48 | \addons\playerCustomUniforms\textures\ 49 | 50 | Edit... 51 | \client\clientEvents\onRespawn.sqf 52 | And paste in... 53 | [] spawn SL_customUniformCheck; 54 | At the bottom of the script. 55 | 56 | Edit... 57 | \client\systems\generalStore\buyItems.sqf 58 | And paste in... 59 | [] spawn SL_customUniformCheck; 60 | Underneath the line... 61 | player forceAddUniform _class; 62 | 63 | Lastly, customize the configuration below via the '_playerCustomUniforms' variable/array. 64 | 65 | *NOTE, no uniform templates are supplied with this script, it is entirely up to the end user 66 | to obtain/extract uniform textures and customize them. 67 | 68 | Parameter(s): none 69 | 70 | Example: none 71 | 72 | Change Log: 73 | 1.0.0 - original base script. 74 | 75 | ---------------------------------------------------------------------------------------------- 76 | */ 77 | 78 | if (!hasInterface) exitWith {}; // DO NOT DELETE THIS LINE! 79 | 80 | _playerCustomUniforms = 81 | [ 82 | /////////////////////////////////////////////////////////////////////////////////////////////// 83 | // TEMPLATE... 84 | [ // 85 | [ // "UID", // 86 | "76561192222222222", // 87 | "76561193333333333" // 88 | ], 89 | [ // ["","",""], 90 | ["WEST","U_B_CombatUniform_mcam","addons\playerCustomUniforms\textures\UniformWEST.jpg"], // WEST/BLUFOR 'DEFAULT' UNIFORM 91 | ["EAST","U_O_OfficerUniform_ocamo","addons\playerCustomUniforms\textures\UniformEAST.jpg"], // EAST/OFPOR 'DEFAULT' UNIFORM 92 | ["GUER","U_I_CombatUniform","addons\playerCustomUniforms\textures\UniformGUER.jpg"] // GUER/INDEPENDENT 'DEFAULT' UNIFORM 93 | ] 94 | ], 95 | /////////////////////////////////////////////////////////////////////////////////////////////// 96 | [ // TAG 97 | [ 98 | "765611944444444444", // 99 | "765611955555555555" // 100 | ], 101 | [ 102 | ["WEST","U_B_CombatUniform_mcam","addons\playerCustomUniforms\textures\tagUniformWEST.jpg"], 103 | ["EAST","U_O_OfficerUniform_ocamo","addons\playerCustomUniforms\textures\tagUniformEAST.jpg"], 104 | ["GUER","U_I_CombatUniform","addons\playerCustomUniforms\textures\tagUniformGUER.jpg"] 105 | ] 106 | ], 107 | [ // KOBK 108 | [ 109 | "76561196666666666", // 110 | "76561197777777777" // 111 | ], 112 | [ 113 | ["WEST","U_B_CombatUniform_mcam","addons\playerCustomUniforms\textures\kobkUniformWEST.jpg"], 114 | ["EAST","U_O_OfficerUniform_ocamo","addons\playerCustomUniforms\textures\kobkUniformEAST.jpg"], 115 | ["GUER","U_I_CombatUniform","addons\playerCustomUniforms\textures\kobkUniformGUER.jpg"] 116 | ] 117 | ], 118 | [ // G4 119 | [ 120 | "76561198888888888", // 121 | "76561199999999999" // 122 | ], 123 | [ 124 | ["WEST","U_B_CombatUniform_mcam","addons\playerCustomUniforms\textures\g4UniformWEST.jpg"], 125 | ["EAST","U_O_OfficerUniform_ocamo","addons\playerCustomUniforms\textures\g4UniformEAST.jpg"], 126 | ["GUER","U_I_CombatUniform","addons\playerCustomUniforms\textures\g4UniformGUER.jpg"] 127 | ] 128 | ] 129 | ]; 130 | 131 | /* ------------------------------------------------------------------------------------------ 132 | DO NOT EDIT BELOW HERE! 133 | ------------------------------------------------------------------------------------------ */ 134 | 135 | SL_customUniformCheck = { 136 | _hasCustomUniform = player getVariable ["SL_customUniform",false]; 137 | if (_hasCustomUniform) exitWith 138 | { 139 | waitUntil {uiSleep 0.1; !(player getVariable ["playerSpawning", true]);}; 140 | if ((uniform player == SL_customUniformClassWEST) && ((str (side player)) == "WEST")) then 141 | { 142 | player setObjectTextureGlobal [0,SL_customUniformTextureWEST]; 143 | }; 144 | if ((uniform player == SL_customUniformClassEAST) && ((str (side player)) == "EAST")) then 145 | { 146 | player setObjectTextureGlobal [0,SL_customUniformTextureEAST]; 147 | }; 148 | if ((uniform player == SL_customUniformClassGUER) && ((str (side player)) == "GUER")) then 149 | { 150 | player setObjectTextureGlobal [0,SL_customUniformTextureGUER]; 151 | }; 152 | }; 153 | }; 154 | 155 | if !(_playerCustomUniforms isEqualTo []) then 156 | { 157 | { 158 | _groupUIDs = _x select 0; 159 | if ((getPlayerUID player) in _groupUIDs) exitWith 160 | { 161 | diag_log format ["[PLAYER CUSTOM UNIFORMS] -> UID %1 FOUND, APPLIED CUSTOM UNIFORM DATA TO %2.",(getPlayerUID player),(name player)]; 162 | player setVariable ["SL_customUniform",true,false]; 163 | _customUniformClassList = _x select 1; 164 | { 165 | _customUniformSide = _x select 0; 166 | switch (_customUniformSide) do 167 | { 168 | case "WEST": { 169 | SL_customUniformClassWEST = _x select 1; 170 | SL_customUniformTextureWEST = _x select 2; 171 | }; 172 | case "EAST": { 173 | SL_customUniformClassEAST = _x select 1; 174 | SL_customUniformTextureEAST = _x select 2; 175 | }; 176 | case "GUER": { 177 | SL_customUniformClassGUER = _x select 1; 178 | SL_customUniformTextureGUER = _x select 2; 179 | }; 180 | }; 181 | } forEach _customUniformClassList; 182 | player addEventHandler ["Take", { 183 | _unit = _this select 0; 184 | _container = _this select 1; 185 | _item = _this select 2; 186 | if ((_item == SL_customUniformClassWEST) && (uniform _unit == SL_customUniformClassWEST) && ((str (side _unit)) == "WEST")) then 187 | { 188 | _unit setObjectTextureGlobal [0,SL_customUniformTextureWEST]; 189 | }; 190 | if ((_item == SL_customUniformClassEAST) && (uniform _unit == SL_customUniformClassEAST) && ((str (side _unit)) == "EAST")) then 191 | { 192 | _unit setObjectTextureGlobal [0,SL_customUniformTextureEAST]; 193 | }; 194 | if ((_item == SL_customUniformClassGUER) && (uniform _unit == SL_customUniformClassGUER) && ((str (side _unit)) == "GUER")) then 195 | { 196 | _unit setObjectTextureGlobal [0,SL_customUniformTextureGUER]; 197 | }; 198 | }]; 199 | [] spawn SL_customUniformCheck; 200 | }; 201 | } forEach _playerCustomUniforms; 202 | }; 203 | -------------------------------------------------------------------------------- /playerJump/playerJump.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: playerJump.sqf 22 | Version: 1.0.1 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 12:00 PM 11/05/2016 25 | Modification Date: 7:52 PM 13/11/2016 26 | 27 | Description: 28 | This jump script is to replace any/all glitchy/buggy jump scripts. This script will NOT visually 29 | glitch your screen when jumping. This script can be used in a single and multi player environment. 30 | 31 | In order to use it, place the following line in your init.sqf... 32 | [] execVM "addons\playerJump\playerJump.sqf"; // (adjust mission directory pathing as needed). 33 | 34 | Players jump key will be a combination of SHIFT and 'STEP OVER' (default 'v' key), so a more 35 | plug-n-play solution is met (no custom key bindings). 36 | 37 | *Please note that the ONLY animation available for jump within ArmA 3 currently is when a player 38 | has a primary weapon in their hands. The jump animation does not show proper with no weapon in 39 | the hands of the player... ArmA 3 bug. 40 | 41 | Parameter(s): none 42 | 43 | Example: none 44 | 45 | Change Log: 46 | 1.0.0 - original base script. 47 | 1.0.1 - changed displaySetEventHandler to displayAddEventHandler. changed key bindings to use 48 | run/sprint (SHIFT) and 'GET OVER' (default 'v' key) for jumping. slight changes to 49 | SL_fn_jumpOver routine and displayAddEventHandler string. player can now also jump 50 | whilst crouch running. 51 | 52 | ---------------------------------------------------------------------------------------------- 53 | */ 54 | 55 | if (!hasInterface) exitWith {}; 56 | 57 | SL_jumpBaseHeight = 1.80; 58 | SL_jumpMaxHeight = 3.50; 59 | SL_jumpBaseSpeed = 0.40; 60 | SL_jumpAnimation = "AovrPercMrunSrasWrflDf"; 61 | 62 | "SL_fn_jumpOverAnim" addPublicVariableEventHandler { 63 | (_this select 1) spawn SL_fn_doAnim; 64 | }; 65 | 66 | SL_fn_doAnim = 67 | { 68 | params ["_unit","_velocity","_direction","_speed","_height","_anim"]; 69 | _unit setVelocity [(_velocity select 0) + (sin _direction * _speed), (_velocity select 1) + (cos _direction * _speed), ((_velocity select 2) * _speed) + _height]; 70 | _unit switchMove _anim; 71 | }; 72 | 73 | SL_fn_jumpOver = { 74 | params ["_displayCode","_keyCode","_isShift","_isCtrl","_isAlt"]; 75 | _handled = false; 76 | if ((_keyCode in actionKeys "GetOver" && _isShift) && (animationState player != SL_jumpAnimation)) then { 77 | private ["_height","_velocity","_direction","_speed"]; 78 | if ((player == vehicle player) && (isTouchingGround player) && ((stance player == "STAND") || (stance player == "CROUCH"))) exitWith 79 | { 80 | _height = (SL_jumpBaseHeight - (load player)) max SL_jumpMaxHeight; 81 | _velocity = velocity player; 82 | _direction = direction player; 83 | _speed = SL_jumpBaseSpeed; 84 | player setVelocity [(_velocity select 0) + (sin _direction * _speed), (_velocity select 1) + (cos _direction * _speed), ((_velocity select 2) * _speed) + _height]; 85 | SL_fn_jumpOverAnim = [player,_velocity,_direction,_speed,_height,SL_jumpAnimation]; 86 | publicVariable "SL_fn_jumpOverAnim"; 87 | if (currentWeapon player == "") then // half working buggy 'fix' for having no weapon in hands (no animation available for it... BIS!!) 88 | { 89 | player switchMove SL_jumpAnimation; 90 | player playMoveNow SL_jumpAnimation; 91 | } 92 | else 93 | { 94 | player switchMove SL_jumpAnimation; 95 | }; 96 | _handled = true; 97 | }; 98 | }; 99 | _handled 100 | }; 101 | 102 | waituntil {!(isNull (findDisplay 46))}; 103 | (findDisplay 46) displayAddEventHandler ["KeyDown", "_this call SL_fn_jumpOver;"]; 104 | -------------------------------------------------------------------------------- /purchaseFuel/purchaseFuel.paa: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/purchaseFuel/purchaseFuel.paa -------------------------------------------------------------------------------- /purchaseFuel/purchaseFuel.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: purchaseFuel.sqf 22 | Version: 1.0.5 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 4:59 PM 11/10/2016 25 | Modification Date: 7:01 PM 19/10/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.Xx mission (A3Wasteland.com). This script MUST be paired up with 29 | 'purchaseFuelInit.sqf'. 30 | 31 | This script is the action/functioning to refuel vehicles (air and land) at a cost per vehicle. 32 | 33 | Edit the cost price per tank of fuel with the variable _fuelPricePerTank below. For example 34 | if the price is set at 2500, then $2500 is the cost of a FULL tank of fuel. The script also 35 | deducts cost if you are in the middle of a Refueling, but abort. You can't glitch fill your 36 | vehicle for free! 37 | 38 | Place this script in directory... 39 | \addons\purchaseFuel\purchaseFuel.sqf 40 | 41 | COPY/MOVE the 'purchaseFuel.paa' (icon) into the directory... 42 | \addons\purchaseFuel\purchaseFuel.paa 43 | 44 | *Please note that with the use of this script, that 'Jerry Cans' will still be able to filled 45 | for FREE. 46 | 47 | Parameter(s): none 48 | 49 | Example: none 50 | 51 | Change Log: 52 | 1.0.0 - original base script. 53 | 1.0.1 - purchaseFuelInit.sqf changes. 54 | 1.0.2 - purchaseFuelInit.sqf changes. 55 | 1.0.3 - fixed money deductions upon fuel purchase (setVariable global). 56 | 1.0.4 - purchaseFuelInit.sqf changes. 57 | 1.0.5 - changed parsed player to global player for cmoney variable. 58 | 59 | ---------------------------------------------------------------------------------------------- 60 | */ 61 | 62 | _fuelPricePerTank = 2500; // this is wasteland after all... fuel is scarce, and pricey ;P 63 | 64 | /* ------------------------------------------------------------------------------------------ 65 | DO NOT EDIT BELOW HERE! 66 | ------------------------------------------------------------------------------------------ */ 67 | 68 | if (mutexScriptInProgress) exitWith 69 | { 70 | ["You are already performing another action.", 5] call mf_notify_client; 71 | }; 72 | 73 | mutexScriptInProgress = true; 74 | 75 | _source = _this select 0; 76 | _unit = _this select 1; 77 | _vehicle = vehicle _unit; 78 | 79 | _vehicleFuel = fuel _vehicle / 2; 80 | 81 | _fuelPrice = ceil (_fuelPricePerTank * (1 - (_vehicleFuel * 2))); 82 | 83 | _vehicleName = getText (configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName"); 84 | 85 | if (driver _vehicle != _unit) exitWith 86 | { 87 | _text = format ["You must be the driver to refuel the vehicle %1.\nREFUELING ABORTED!",_vehicleName]; 88 | [_text, 5] call mf_notify_client; 89 | mutexScriptInProgress = false; 90 | }; 91 | 92 | if ((_vehicleFuel * 2) >= 0.95) exitWith 93 | { 94 | _text = format ["Your vehicle %1 is already full of fuel.\nREFUELING ABORTED!",_vehicleName]; 95 | [_text, 5] call mf_notify_client; 96 | mutexScriptInProgress = false; 97 | }; 98 | 99 | _unitCMoney = player getVariable "cmoney"; 100 | 101 | if (_unitCMoney < _fuelPrice) exitWith 102 | { 103 | _text = format ["You need $%1 of carried money to refuel the vehicle %2, you have $%3 on you.\nREFUELING ABORTED!",_fuelPrice,_vehicleName,_unitCMoney]; 104 | [_text, 5] call mf_notify_client; 105 | mutexScriptInProgress = false; 106 | }; 107 | 108 | _text = format ["You have 5 seconds to stop the engine in order to refuel the vehicle for $%1.\nYou can abort the fueling process by removing yourself from driver position or by starting the engine.", _fuelPrice]; 109 | [_text, 5] call mf_notify_client; 110 | 111 | uiSleep 5; 112 | 113 | refuelingVehicle = true; 114 | 115 | [_vehicle,_unit] spawn { 116 | params ["_vehicle","_unit"]; 117 | while {refuelingVehicle} do 118 | { 119 | if (!(driver _vehicle == _unit) || (isEngineOn _vehicle)) then 120 | { 121 | refuelingVehicle = false; 122 | mutexScriptInProgress = false; 123 | }; 124 | uiSleep 0.1; 125 | }; 126 | }; 127 | 128 | uiSleep 0.5; 129 | 130 | if !(refuelingVehicle) exitWith 131 | { 132 | _text = format ["Refueling of vehicle %1 interrupted.\nREFUELING ABORTED!",_vehicleName]; 133 | [_text, 5] call mf_notify_client; 134 | }; 135 | 136 | _text = format ["Refueling vehicle %1, please wait.",_vehicleName]; 137 | [_text, 5] call mf_notify_client; 138 | 139 | uiSleep 0.5; 140 | 141 | for "_i" from _vehicleFuel to 1 step 0.01 do 142 | { 143 | _fuelLevel = _vehicleFuel + _i; 144 | _vehicle setFuel _fuelLevel; 145 | uiSleep 0.5; 146 | if !(refuelingVehicle) exitWith {}; 147 | }; 148 | 149 | if (refuelingVehicle) then 150 | { 151 | _vehicle setFuel 1; 152 | _text = format ["Refueling of vehicle %1 complete, which cost $%2.\nREFUELING COMPLETE!",_vehicleName,_fuelPrice]; 153 | [_text, 5] call mf_notify_client; 154 | player setVariable ["cmoney",(_unitCMoney - _fuelPrice),true]; 155 | } 156 | else 157 | { 158 | _beforeVehicleFuel = _vehicleFuel; 159 | _afterVehicleFuel = fuel _vehicle / 2; 160 | _differenceVehicleFuel = _afterVehicleFuel - _beforeVehicleFuel; 161 | _partialFuelPrice = ceil (_fuelPricePerTank * (_differenceVehicleFuel * 2)); 162 | if (_partialFuelPrice <= 0) then 163 | { 164 | _text = format ["Refueling of vehicle %1 interrupted.\nREFUELING ABORTED!",_vehicleName]; 165 | [_text, 5] call mf_notify_client; 166 | } 167 | else 168 | { 169 | _text = format ["Refueling of vehicle %1 interrupted, which cost $%2.\nREFUELING ABORTED!",_vehicleName,_partialFuelPrice]; 170 | [_text, 5] call mf_notify_client; 171 | player setVariable ["cmoney",(_unitCMoney - _partialFuelPrice),true]; 172 | }; 173 | }; 174 | 175 | mutexScriptInProgress = false; 176 | refuelingVehicle = false; 177 | -------------------------------------------------------------------------------- /purchaseFuel/purchaseFuelInit.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: purchaseFuelInit.sqf 22 | Version: 1.0.5 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 4:59 PM 11/10/2016 25 | Modification Date: 7:01 PM 19/10/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.Xx mission (A3Wasteland.com). This script MUST be paired up with 29 | 'purchaseFuel.sqf'. 30 | 31 | This script will disable 'free' fuel at ALL fuel stations and attach an action to 'Purchase Fuel' 32 | at a cost set within the 'purchaseFuel.sqf' script, which is needed for this init script to 33 | function. Tested and functioning on all Air and Land Vehicles, including UAV's (you must be the 34 | driver/operator). 35 | 36 | Place this script in directory... 37 | \addons\purchaseFuel\purchaseFuelInit.sqf 38 | 39 | Edit the file... 40 | \server\init.sqf 41 | 42 | And at the bottom of the script, paste in... 43 | [] execVM "addons\purchaseFuel\purchaseFuelInit.sqf"; 44 | 45 | Edit the file... 46 | \client\init.sqf 47 | 48 | And at the bottom of the script, paste in... 49 | [] execVM "addons\purchaseFuel\purchaseFuelInit.sqf"; 50 | 51 | COPY/MOVE the 'purchaseFuel.paa' (icon) into the directory... 52 | \addons\purchaseFuel\purchaseFuel.paa 53 | 54 | *Please note that with the use of this script, that 'Jerry Cans' will still be able to filled 55 | for FREE. 56 | 57 | Parameter(s): none 58 | 59 | Example: none 60 | 61 | Change Log: 62 | 1.0.0 - original base script. 63 | 1.0.1 - updated purchase fuel action with custom icon. (made by soulkobk to match other 64 | A3Wasteland icons). 65 | 1.0.2 - redid forEach loop due to addAction only working client side! purchaseFuelInit.sqf 66 | must be executed client AND server side. moved directories to \addons\purchaseFuel. 67 | 1.0.3 - purchaseFuel.sqf changes. 68 | 1.0.4 - updated setFuelCargo for hasInterFace check due to allowing free fuel still. SMH. 69 | 1.0.5 - purchaseFuel.sqf changes. 70 | 71 | ---------------------------------------------------------------------------------------------- 72 | */ 73 | 74 | _fuelFeedArray = 75 | [ 76 | "Land_fs_feed_F", 77 | "Land_FuelStation_Feed_F", 78 | "Land_FuelStation_01_pump_F", 79 | "Land_FuelStation_02_pump_F" 80 | ]; 81 | 82 | /* ------------------------------------------------------------------------------------------ 83 | DO NOT EDIT BELOW HERE! 84 | ------------------------------------------------------------------------------------------ */ 85 | 86 | _mapSizeSquare = getNumber (configfile >> "CfgWorlds" >> worldName >> "mapSize"); 87 | _mapSizeEllipse = sqrt ((_mapSizeSquare * _mapSizeSquare) + (_mapSizeSquare * _mapSizeSquare)); 88 | 89 | _fuelFeeds = nearestObjects [[(_mapSizeSquare / 2),(_mapSizeSquare / 2),0], _fuelFeedArray, _mapSizeEllipse]; 90 | 91 | { 92 | if (isServer || isDedicated) then 93 | { 94 | _x setFuelCargo 0; 95 | }; 96 | if (hasInterFace) then 97 | { 98 | _x setFuelCargo 0; 99 | _x addAction [" Purchase Fuel", "addons\purchaseFuel\purchaseFuel.sqf", player, 1.5, true, true, "(driver (vehicle player))", "((UAVControl (getConnectedUAV player) select 1) == 'DRIVER') || (vehicle player) isKindOf 'Air' || (vehicle player) isKindOf 'LandVehicle' && !((vehicle player) isKindOf 'ParachuteBase');", 10, false]; 100 | }; 101 | } forEach _fuelFeeds; 102 | 103 | if (isServer || isDedicated) then 104 | { 105 | diag_log format ["[PURCHASE FUEL] -> ENABLED FUEL PURCHASING AT %1 FUEL PUMPS, NO MORE FREE FUEL!", (count _fuelFeeds)]; 106 | }; 107 | -------------------------------------------------------------------------------- /roadBlocks/createRoadBlock.sqf: -------------------------------------------------------------------------------- 1 | // ****************************************************************************************** 2 | // * This project is licensed under the GNU Affero GPL v3. Copyright © 2016 A3Wasteland.com * 3 | // ****************************************************************************************** 4 | /* 5 | Original Script Author: Joris-Jan van 't Land 6 | Edited by armatec, JoSchaap, AgentRev, soulkobk 7 | 8 | Description: 9 | Takes an array of data about a dynamic object template and creates the objects. 10 | 11 | Parameter(s): 12 | _this select 0: compositions name - "roadBlockLarge" 13 | _this select 1: Location to start 14 | _this select 2: Direction in degrees - Number 15 | 16 | Example: 17 | ["roadBlockLarge", getMarkerPos "roadBlock_1", markerDir "roadBlock_1" ] execVM "createRoadBlock.sqf"; 18 | 19 | */ 20 | 21 | private ["_fileName", "_dir", "_pos", "_objList", "_objs", "_class", "_relPos", "_relDir", "_fuel", "_damage", "_init"]; 22 | 23 | _fileName = _this select 0; 24 | _basePos = _this select 1; 25 | _baseDir = _this select 2; 26 | 27 | _objList = call compile preprocessFileLineNumbers format ["server\missions\roadBlocks\%1.sqf", _fileName]; 28 | _objs = []; 29 | 30 | { 31 | private ["_obj"]; 32 | _objName = _x select 0; 33 | _objPos = _x select 1; 34 | _objDir = _x select 2; 35 | _objInit = _x param [3, nil]; 36 | _objPos = _basePos vectorAdd ([_objPos, -(_baseDir)] call BIS_fnc_rotateVector2D); 37 | _obj = createVehicle [_objName, _objPos, [], 0, "CAN_COLLIDE"]; 38 | _obj setDir (_baseDir + _objDir); 39 | _obj setPos _objPos; 40 | _obj setPosATL _objPos; 41 | _objDirCurr = getDir _obj; 42 | _objs pushBack _obj; 43 | if (!isNil "_objInit") then { _obj call _objInit }; 44 | uiSleep 0.1; 45 | } forEach _objList; 46 | 47 | _objs 48 | -------------------------------------------------------------------------------- /roadBlocks/mission_RoadBlock.sqf: -------------------------------------------------------------------------------- 1 | // ****************************************************************************************** 2 | // * This project is licensed under the GNU Affero GPL v3. Copyright © 2016 A3Wasteland.com * 3 | // ****************************************************************************************** 4 | // @file Version: 1.0 5 | // @file Name: mission_RoadBlock.sqf 6 | // @file Author: [404] Deadbeat, [404] Costlyy, JoSchaap, AgentRev, soulkobk 7 | // @file Created: 08/12/2012 15:19 8 | // @file Modified: 4:31 PM 06/07/2016 (soulkobk) 9 | 10 | if (!isServer) exitwith {}; 11 | 12 | #include "sideMissionDefines.sqf"; 13 | 14 | private ["_nbUnits", "_roadBlock", "_objects", "_loadout"]; 15 | 16 | _setupVars = 17 | { 18 | _missionType = "Road Block"; 19 | _locationsArray = RoadBlockMissionMarkers; 20 | }; 21 | _setupObjects = 22 | { 23 | _nbUnits = if (missionDifficultyHard) then { AI_GROUP_LARGE } else { AI_GROUP_MEDIUM }; 24 | _missionPos = markerPos _missionLocation; 25 | _missionDir = markerDir _missionLocation; 26 | _roadBlock = selectRandom (call compile preprocessFileLineNumbers "server\missions\roadBlocks\roadBlockList.sqf"); 27 | _objects = [_roadBlock, _missionPos, _missionDir] call createRoadBlock; 28 | { _x setVariable ["R3F_LOG_disabled", true, true] } forEach _objects; 29 | _aiGroup = createGroup CIVILIAN; 30 | [_aiGroup, _missionPos, _nbUnits, 15] call createCustomGroup; 31 | _missionHintText = format ["Enemies have set up a road block and are stopping all traffic! Go and take it over!", sideMissionColor]; 32 | }; 33 | 34 | _waitUntilMarkerPos = nil; 35 | _waitUntilExec = nil; 36 | _waitUntilCondition = nil; 37 | 38 | _failedExec = 39 | { 40 | { deleteVehicle _x } forEach _objects; 41 | }; 42 | _successExec = 43 | { 44 | { _x setVariable ["R3F_LOG_disabled", false, true] } forEach _objects; 45 | 46 | [_locationsArray, _missionLocation, _objects] call setLocationObjects; 47 | 48 | _successHintMessage = "The road block has been taken over, good work!"; 49 | 50 | // changed by soulkobk for random number of boxes and random crate loot 51 | _crateBoxes = 52 | [ 53 | "Box_IND_Ammo_F", 54 | "Box_IND_AmmoOrd_F", 55 | "Box_IND_Grenades_F", 56 | "Box_IND_Support_F", 57 | "Box_IND_Wps_F", 58 | "Box_IND_WpsLaunch_F", 59 | "Box_IND_WpsSpecial_F" 60 | ]; 61 | _numBoxes = round(random 2) + 1; // minimum 1, maximum 4. 62 | switch (_numBoxes) do // because apparently a for _i loop doesnt work with missions... bad coding? pfft. 63 | { 64 | case 1: { 65 | _crateBox1 = createVehicle [(selectRandom _crateBoxes), _missionPos, [], 15, "None"]; 66 | _crateBox1 setDir random 360; 67 | _crateBox1 call randomCrateLoadOut; // must use soulkobk' randomCrateLoadOut script (github.com/soulkobk). 68 | }; 69 | case 2: { 70 | _crateBox1 = createVehicle [(selectRandom _crateBoxes), _missionPos, [], 15, "None"]; 71 | _crateBox1 setDir random 360; 72 | _crateBox1 call randomCrateLoadOut; // must use soulkobk' randomCrateLoadOut script (github.com/soulkobk). 73 | _crateBox2 = createVehicle [(selectRandom _crateBoxes), _missionPos, [], 15, "None"]; 74 | _crateBox2 setDir random 360; 75 | _crateBox2 call randomCrateLoadOut; // must use soulkobk' randomCrateLoadOut script (github.com/soulkobk). 76 | }; 77 | case 3: { 78 | _crateBox1 = createVehicle [(selectRandom _crateBoxes), _missionPos, [], 15, "None"]; 79 | _crateBox1 setDir random 360; 80 | _crateBox1 call randomCrateLoadOut; // must use soulkobk' randomCrateLoadOut script (github.com/soulkobk). 81 | _crateBox2 = createVehicle [(selectRandom _crateBoxes), _missionPos, [], 15, "None"]; 82 | _crateBox2 setDir random 360; 83 | _crateBox2 call randomCrateLoadOut; // must use soulkobk' randomCrateLoadOut script (github.com/soulkobk). 84 | _crateBox3 = createVehicle [(selectRandom _crateBoxes), _missionPos, [], 15, "None"]; 85 | _crateBox3 setDir random 360; 86 | _crateBox3 call randomCrateLoadOut; // must use soulkobk' randomCrateLoadOut script (github.com/soulkobk). 87 | }; 88 | case 4: { 89 | _crateBox1 = createVehicle [(selectRandom _crateBoxes), _missionPos, [], 15, "None"]; 90 | _crateBox1 setDir random 360; 91 | _crateBox1 call randomCrateLoadOut; // must use soulkobk' randomCrateLoadOut script (github.com/soulkobk). 92 | _crateBox2 = createVehicle [(selectRandom _crateBoxes), _missionPos, [], 15, "None"]; 93 | _crateBox2 setDir random 360; 94 | _crateBox2 call randomCrateLoadOut; // must use soulkobk' randomCrateLoadOut script (github.com/soulkobk). 95 | _crateBox3 = createVehicle [(selectRandom _crateBoxes), _missionPos, [], 15, "None"]; 96 | _crateBox3 setDir random 360; 97 | _crateBox3 call randomCrateLoadOut; // must use soulkobk' randomCrateLoadOut script (github.com/soulkobk). 98 | _crateBox4 = createVehicle [(selectRandom _crateBoxes), _missionPos, [], 15, "None"]; 99 | _crateBox4 setDir random 360; 100 | _crateBox4 call randomCrateLoadOut; // must use soulkobk' randomCrateLoadOut script (github.com/soulkobk). 101 | }; 102 | }; 103 | }; 104 | 105 | _this call sideMissionProcessor; 106 | -------------------------------------------------------------------------------- /roadBlocks/roadBlocks/roadBlockBrokenMRAP.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/roadBlocks/roadBlocks/roadBlockBrokenMRAP.jpg -------------------------------------------------------------------------------- /roadBlocks/roadBlocks/roadBlockBrokenMRAP.sqf: -------------------------------------------------------------------------------- 1 | /////////////////////////////////////////////////////////////////////////////////////////////////// 2 | // This project is licensed under the GNU Affero GPL v3. Copyright © 2016 soulkobk.blogspot.com 3 | /////////////////////////////////////////////////////////////////////////////////////////////////// 4 | // @file Name: roadBlockBrokenMRAP.sqf 5 | // @file Author: soulkobk 8:05 PM 24/10/2016 6 | // @file Usage: for use with A3Wasteland 1.2b mission (A3Wasteland.com) 7 | /////////////////////////////////////////////////////////////////////////////////////////////////// 8 | 9 | [ 10 | 11 | ["Land_CncBarrier_stripes_F",[4,2,0],0], 12 | ["Land_CncBarrier_stripes_F",[0,-6,0],0], 13 | ["Land_CncBarrier_stripes_F",[0,2,0],0], 14 | ["Land_CncBarrier_stripes_F",[-4,2,0],0], 15 | ["Land_CncBarrier_stripes_F",[4,-6,0],0], 16 | ["Land_CncBarrier_stripes_F",[-4,-6,0],0], 17 | ["Land_HBarrier_5_F",[9,2,0],0], 18 | ["Land_HBarrier_5_F",[-14,-2,0],90], 19 | ["Land_HBarrier_5_F",[9,-6,0],0], 20 | ["Land_HBarrier_5_F",[14,-2,0],270], 21 | ["Land_HBarrier_5_F",[-11,-10,0],90], 22 | ["Land_HBarrier_5_F",[-9,2,0],0], 23 | ["Land_HBarrier_5_F",[-9,-6,0],0], 24 | ["Land_HBarrier_5_F",[11,6,0],90], 25 | ["Land_LampSolar_F",[6,2,0],0], 26 | ["Land_LampSolar_F",[-6,-6,0],180], 27 | ["Land_Wreck_Hunter_F",[-2,-2,0],100], 28 | ["Land_ScrapHeap_1_F",[4.07518,-3.14843,1.90735e-006],95], 29 | ["I_HMG_01_high_F",[-9,-9,0],180], 30 | ["I_HMG_01_high_F",[9,5,0],0] 31 | 32 | ]; -------------------------------------------------------------------------------- /roadBlocks/roadBlocks/roadBlockGreenShot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/roadBlocks/roadBlocks/roadBlockGreenShot.jpg -------------------------------------------------------------------------------- /roadBlocks/roadBlocks/roadBlockGreenShot.sqf: -------------------------------------------------------------------------------- 1 | /////////////////////////////////////////////////////////////////////////////////////////////////// 2 | // This project is licensed under the GNU Affero GPL v3. Copyright © 2016 soulkobk.blogspot.com 3 | /////////////////////////////////////////////////////////////////////////////////////////////////// 4 | // @file Name: roadBlockGreenShot.sqf 5 | // @file Author: soulkobk 8:05 PM 24/10/2016 6 | // @file Usage: for use with A3Wasteland 1.2b mission (A3Wasteland.com) 7 | /////////////////////////////////////////////////////////////////////////////////////////////////// 8 | 9 | [ 10 | 11 | ["Land_HBarrier_01_big_4_green_F",[-8.5,11,0],0], 12 | ["Land_HBarrier_01_big_4_green_F",[-12,0,0],90], 13 | ["Land_HBarrier_01_big_4_green_F",[8.5,-11,0],0], 14 | ["Land_HBarrier_01_big_4_green_F",[-8.5,-11,0],0], 15 | ["Land_HBarrier_01_big_4_green_F",[-12.148,-8.499,0],90], 16 | ["Land_HBarrier_01_big_4_green_F",[12.148,8.499,0],90], 17 | ["Land_HBarrier_01_big_4_green_F",[12,0,0],90], 18 | ["Land_HBarrier_01_big_4_green_F",[5,-8.5,0],90], 19 | ["Land_HBarrier_01_big_4_green_F",[-5,-8.5,0],90], 20 | ["Land_HBarrier_01_big_4_green_F",[5,8,0],90], 21 | ["Land_HBarrier_01_big_4_green_F",[11.852,-8.499,0],90], 22 | ["Land_HBarrier_01_big_4_green_F",[-5,8.5,0],90], 23 | ["Land_HBarrier_01_big_4_green_F",[8.5,11,0],0], 24 | ["Land_HBarrier_01_big_4_green_F",[-11.852,8.499,0],90], 25 | ["Land_StoneWall_01_s_d_F",[5,-0.5,0],270,{_this allowDamage false;}], // if you run over these without damage off, they 'die' and flip up. 26 | ["Land_StoneWall_01_s_d_F",[-0.0946038,-11.253,1.43051e-005],0,{_this allowDamage false;}], // if you run over these without damage off, they 'die' and flip up. 27 | ["Land_StoneWall_01_s_d_F",[0,0,0],180,{_this allowDamage false;}], // if you run over these without damage off, they 'die' and flip up. 28 | ["Land_StoneWall_01_s_d_F",[-5,-0.5,0],270,{_this allowDamage false;}], // if you run over these without damage off, they 'die' and flip up. 29 | ["Land_StoneWall_01_s_d_F",[0,11,0],0,{_this allowDamage false;}], // if you run over these without damage off, they 'die' and flip up. 30 | ["Land_Cargo_Patrol_V1_F",[8.5,8,4.76837e-007],180], 31 | ["Land_Cargo_Patrol_V1_F",[-8.5,-8,4.76837e-007],1.36604e-005], 32 | ["RoadCone_L_F",[-3,12.5,0],0], 33 | ["RoadCone_L_F",[3,12.5,0],0], 34 | ["RoadCone_L_F",[-3,-12.5,0],0], 35 | ["RoadCone_L_F",[3,-12.5,0],0], 36 | ["Land_LampSolar_F",[-4.5,5.5,0],180], 37 | ["Land_LampSolar_F",[4.5,-5.5,0],0], 38 | ["I_HMG_01_high_F",[-8.5,2,0],90], 39 | ["I_HMG_01_high_F",[8.5,-2,0],270], 40 | ["I_GMG_01_high_F",[2.5,-9,0],180], 41 | ["I_GMG_01_high_F",[-2.5,8.5,0],0] 42 | 43 | ]; -------------------------------------------------------------------------------- /roadBlocks/roadBlocks/roadBlockList.sqf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/roadBlocks/roadBlocks/roadBlockList.sqf -------------------------------------------------------------------------------- /roadBlocks/roadBlocks/roadBlockNoSoul.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/roadBlocks/roadBlocks/roadBlockNoSoul.jpg -------------------------------------------------------------------------------- /roadBlocks/roadBlocks/roadBlockNoSoul.sqf: -------------------------------------------------------------------------------- 1 | /////////////////////////////////////////////////////////////////////////////////////////////////// 2 | // This project is licensed under the GNU Affero GPL v3. Copyright © 2016 soulkobk.blogspot.com 3 | /////////////////////////////////////////////////////////////////////////////////////////////////// 4 | // @file Name: roadBlockLarge.sqf 5 | // @file Author: soulkobk 4:03 PM 06/07/2016 6 | // @file Usage: for use with A3Wasteland 1.Xx mission (A3Wasteland.com) 7 | /////////////////////////////////////////////////////////////////////////////////////////////////// 8 | 9 | [ 10 | 11 | ["Land_HBarrierTower_F",[10,0.25,0],270,{_this setVectorUP [0,0,1];}], 12 | ["Land_HBarrierTower_F",[-10,-0.25,0],90,{_this setVectorUP [0,0,1];}], 13 | ["Land_BarGate_F",[-0.25,14.5,0],180], 14 | ["Land_BarGate_F",[0.25,-14.5,0],0], 15 | ["Land_HBarrier_Big_F",[-8.25,-4.625,0],180], 16 | ["Land_HBarrier_Big_F",[-8.25,4.375,0],180], 17 | ["Land_HBarrier_Big_F",[8.125,-4.375,0],0], 18 | ["Land_HBarrier_Big_F",[8.125,4.625,0],0], 19 | ["Land_HBarrier_Big_F",[5,-9.75,0],90], 20 | ["Land_HBarrier_Big_F",[-5.125,9.75,0],270], 21 | ["Land_LampSolar_F",[4.25,-4.5,0],0], 22 | ["Land_LampSolar_F",[4.25,4.5,0],0], 23 | ["Land_LampSolar_F",[-4.5,-4.5,0],180], 24 | ["Land_LampSolar_F",[-4.5,4.5,0],180], 25 | ["Land_HBarrier_5_F",[-14,-0.25,0],90], 26 | ["Land_HBarrier_5_F",[5,11.125,0],270], 27 | ["Land_HBarrier_5_F",[-5,-11.125,0],90], 28 | ["Land_HBarrier_5_F",[14,0.25,0],270], 29 | ["Land_HBarrier_3_F",[-2.625,-9,0],0], 30 | ["Land_HBarrier_3_F",[2.625,9,0],180], 31 | ["RoadBarrier_F",[1.375,6.375,0],270], 32 | ["RoadBarrier_F",[3.75,0,0],270], 33 | ["RoadBarrier_F",[-3.75,0,0],90], 34 | ["RoadBarrier_F",[-1.25,-6.375,0],90], 35 | ["Land_BagFence_Round_F",[11.375,13.125,0],225], 36 | ["Land_BagFence_Round_F",[-11.5,-13,0],45], 37 | ["Land_BagFence_Long_F",[-7.625,-13.625,0],180], 38 | ["Land_BagFence_Long_F",[7.5,13.75,0],0], 39 | ["Land_BagFence_Long_F",[12,10.5,0],270], 40 | ["Land_BagFence_Long_F",[-12.125,-7.375,0],90], 41 | ["Land_BagFence_Long_F",[-12.125,-10.375,0],90], 42 | ["Land_BagFence_Long_F",[12,7.5,0],270], 43 | ["Land_BagFence_Short_F",[9.75,13.75,0],0], 44 | ["Land_BagFence_Short_F",[-9.875,-13.625,0],180], 45 | ["RoadBarrier_small_F",[5,15.25,0],180], 46 | ["RoadBarrier_small_F",[-5,-15.25,0],0], 47 | ["RoadBarrier_small_F",[5,-15.25,0],180], 48 | ["RoadBarrier_small_F",[-5,15.25,0],0], 49 | ["I_HMG_01_high_F",[8.75,8.875,0],90], 50 | ["I_HMG_01_high_F",[-8.75,-8.75,0],270], 51 | ["I_HMG_01_high_F",[-3.25,-12.875,0],180], 52 | ["I_HMG_01_high_F",[3.125,12.75,0],0] 53 | 54 | ] -------------------------------------------------------------------------------- /roadBlocks/roadBlocks/roadBlockRubbleTrouble.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/roadBlocks/roadBlocks/roadBlockRubbleTrouble.jpg -------------------------------------------------------------------------------- /roadBlocks/roadBlocks/roadBlockRubbleTrouble.sqf: -------------------------------------------------------------------------------- 1 | /////////////////////////////////////////////////////////////////////////////////////////////////// 2 | // This project is licensed under the GNU Affero GPL v3. Copyright © 2016 soulkobk.blogspot.com 3 | /////////////////////////////////////////////////////////////////////////////////////////////////// 4 | // @file Name: roadBlockGreenShot.sqf 5 | // @file Author: soulkobk 8:05 PM 24/10/2016 6 | // @file Usage: for use with A3Wasteland 1.2b mission (A3Wasteland.com) 7 | /////////////////////////////////////////////////////////////////////////////////////////////////// 8 | 9 | [ 10 | ["Land_Fortress_01_bricks_v1_F",[1.375,-2.875,0],90], 11 | ["Land_Fortress_01_bricks_v1_F",[0,-7,0],0], 12 | ["Land_Fortress_01_bricks_v1_F",[0,7,0],180], 13 | ["Land_Fortress_01_bricks_v1_F",[-1.5,3.625,0],270], 14 | ["Land_HBarrier_01_line_3_green_F",[-10.5,0,-0.125],90], 15 | ["Land_HBarrier_01_line_3_green_F",[10.5,1,0],90], 16 | ["Land_HBarrier_01_line_3_green_F",[-10.5,0,1.125],90], 17 | ["Land_HBarrier_01_line_3_green_F",[10.5,1,1.25],90], 18 | ["Land_LampSolar_F",[4.25,-2,0],0], 19 | ["Land_LampSolar_F",[-4.25,3.125,0],180], 20 | ["Land_BagFence_01_long_green_F",[-4,2,0],270], 21 | ["Land_BagFence_01_long_green_F",[-4,8,0],270], 22 | ["Land_BagFence_01_long_green_F",[-4,-4,0],270], 23 | ["Land_BagFence_01_long_green_F",[4,-4,0],270], 24 | ["Land_BagFence_01_long_green_F",[-4,-1,0],270], 25 | ["Land_BagFence_01_long_green_F",[4,-1,0],270], 26 | ["Land_BagFence_01_long_green_F",[4,8,0],270], 27 | ["Land_BagFence_01_long_green_F",[-4,-7,0],270], 28 | ["Land_BagFence_01_long_green_F",[-4,5,0],270], 29 | ["Land_BagFence_01_long_green_F",[4,-7,0],270], 30 | ["Land_BagFence_01_long_green_F",[4,5,0],270], 31 | ["Land_BagFence_01_long_green_F",[4,2,0],270], 32 | ["Land_HBarrier_01_wall_4_green_F",[-7,1.5,0],5.46415e-005], 33 | ["Land_HBarrier_01_wall_4_green_F",[7,-0.5,0],180], 34 | ["Land_HBarrier_01_wall_corner_green_F",[7,4,0],2.6467e-005], 35 | ["Land_HBarrier_01_wall_corner_green_F",[-7,-3,0],180], 36 | ["I_GMG_01_high_F",[-5.75,6,0],0], 37 | ["I_GMG_01_high_F",[5.75,-5,0],180] 38 | 39 | ]; -------------------------------------------------------------------------------- /roadBlocks/roadBlocksInstructions.txt: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: roadBlocksInstructions.txt 22 | Version: 1.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 8:05 PM 18/09/2016 25 | Modification Date: 8:05 PM 18/09/2016 26 | 27 | Instructions: 28 | 29 | *PLEASE NOTE, you must use soulkobk' randomCrateLoadOut script (github.com/soulkobk) or edit the mission_RoadBlock.sqf 30 | 31 | Place file at... 32 | \server\missions\sideMissions\mission_RoadBlock.sqf 33 | 34 | Place file at... 35 | \server\missions\factoryMethods\createRoadBlock.sqf 36 | 37 | Place directory and contents at... 38 | \server\missions\roadBlocks 39 | 40 | Edit... 41 | \server\missions\setupMissionArrays.sqf 42 | 43 | Add... 44 | ["mission_RoadBlock", 1.5], 45 | ...to... 46 | Sidemissions = [] array. 47 | 48 | Add... 49 | RoadBlockMissionMarkers = []; 50 | ...before the forEach loop... 51 | forEach allMapMarkers; 52 | 53 | Add... 54 | case (["RoadBlockMission_", _x] call fn_startsWith): 55 | { 56 | RoadBlockMissionMarkers pushBack [_x, false]; 57 | }; 58 | ...in to the forEach loop... 59 | forEach allMapMarkers; 60 | 61 | Load the supplied STRATIS mission.sqm file (3DEN), and copy ALL the 'RoadBlockMission' markers to clipboard. 62 | 63 | Load your A3Wasteland STRATIS mission file (3DEN), and delete ALL markers that are for any old RoadBlockMission's 64 | 65 | Paste in (SHIFT + CTRL + V) the NEW RoadBlockMission markers to the map, then press CTRL + S to save your mission file. 66 | 67 | Complete! 68 | 69 | ---------------------------------------------------------------------------------------------- 70 | */ 71 | -------------------------------------------------------------------------------- /spawnBeaconDetector/sounds/spawnBeaconDetectorBeep.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/spawnBeaconDetector/sounds/spawnBeaconDetectorBeep.ogg -------------------------------------------------------------------------------- /spawnBeaconDetector/sounds/spawnBeaconDetectorBlipBlip.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/spawnBeaconDetector/sounds/spawnBeaconDetectorBlipBlip.ogg -------------------------------------------------------------------------------- /spawnBeaconDetector/sounds/spawnBeaconDetectorOff.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/spawnBeaconDetector/sounds/spawnBeaconDetectorOff.ogg -------------------------------------------------------------------------------- /spawnBeaconDetector/sounds/spawnBeaconDetectorOn.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/spawnBeaconDetector/sounds/spawnBeaconDetectorOn.ogg -------------------------------------------------------------------------------- /spawnBeaconDetector/spawnBeaconDetector.paa: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/soulkobk/ArmA3_Scripts/33559b3817f49cd258648e789c8d549c4c4e0b76/spawnBeaconDetector/spawnBeaconDetector.paa -------------------------------------------------------------------------------- /stratisEnhanced/stratisEnhanced.txt: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2017 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: stratisEnhanced.txt / mission.sqm 22 | Version: 1.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 4:32 PM 30/05/2017 25 | Modification Date: 4:32 PM 30/05/2017 26 | 27 | Description: 28 | The supplied mission.sqm file includes an 'enhanced Stratis' consisting of building compilations 29 | all over the map of Stratis in order to fill the void of bare terrain within mission(s). 30 | 31 | Instructions: 32 | (1) Load the supplied STRATIS mission.sqm file (3DEN), and select/copy ALL decendants of 'Map Objects' to clipboard. 33 | (2) Load your own STRATIS mission file (3DEN). 34 | 35 | !!! 36 | 37 | MAKE SURE THAT IN THE EDEN EDITOR THAT 'TOGGLE VERTICAL MODE' HAS NO TERRAIN SNAPPING... 38 | 39 | AND 40 | 41 | ...'TOGGLE SURFACE SNAPPING' HAS NO SURFACE SNAPPING... 42 | 43 | ELSE 44 | 45 | ...THE COMPOSITIONS WILL NOT PASTE IN PROPERLY! (INCORRECT HIGHTS AND INCORRECT TERRAIN SNAPPING) 46 | 47 | !!! 48 | 49 | (3) Paste in (SHIFT + CTRL + V) the NEW building compilations by soulkobk to the map of STRATIS, then press CTRL + S to save your mission file. 50 | (4) Complete! 51 | 52 | *NOTE* If you use any or all of these compliations within your own mission, please be sure to 53 | keep this txt file intact and attached within the mission.pbo (give credit where credit is due). 54 | 55 | ---------------------------------------------------------------------------------------------- 56 | */ 57 | -------------------------------------------------------------------------------- /titleTextMessagesServer/titleTextMessagesServer.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: titleTextMessagesServer.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 4:59 PM 11/10/2016 25 | Modification Date: 4:57 PM 19/10/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.Xx mission (A3Wasteland.com). This script MUST be paired up with 29 | the file titleTextMessagesServerText.sqf 30 | 31 | This script will display title text messages on each client (players) screen whilst in-game, as 32 | per the text contained within the titleTextMessagesServerText.sqf file. 33 | 34 | Place this file SERVER SIDE at \A3Wasteland_settings\titleTextMessagesServer.sqf 35 | 36 | Edit your SERVER SIDE FILE... 37 | \init.sqf 38 | 39 | Paste in... 40 | execVM (externalConfigFolder + "\titleTextMessagesServer.sqf"); 41 | 42 | Edit your MISSION FILE (mission.pbo)... 43 | \init.sqf 44 | 45 | Paste in... 46 | "TTM_TITLETEXT_PUBVAR" addPublicVariableEventHandler 47 | { 48 | private ["_ttMessage","_ttDuration"]; 49 | _ttMessage = _this select 1 select 0; 50 | _ttDuration = _this select 1 select 1; 51 | _ttMessageTitleText = format ["%1",_ttMessage]; 52 | titleText [_ttMessageTitleText,"PLAIN DOWN",_ttDuration]; 53 | }; 54 | 55 | Directly underneath the line... 56 | [] execVM "briefing.sqf"; 57 | 58 | *Be sure to use the -filePatching switch when launching the ArmA 3 A3Wasteland server. 59 | 60 | Parameter(s): none 61 | 62 | Example: none 63 | 64 | Change Log: 65 | 1.0.0 - original base script. 66 | 67 | ---------------------------------------------------------------------------------------------- 68 | */ 69 | 70 | if !(isServer) exitWith {}; // DO NOT DELETE THIS LINE! 71 | 72 | _loopSleep = 30*60; // 30 minutes aka 1800 seconds. 73 | _externalDirectory = "\A3Wasteland_settings"; // server side (external) directory path. 74 | 75 | /* ------------------------------------------------------------------------------------------ 76 | DO NOT EDIT BELOW HERE! 77 | ------------------------------------------------------------------------------------------ */ 78 | 79 | _ttMessages = []; 80 | 81 | if (loadFile (_externalDirectory + "\titleTextMessagesServerText.sqf") != "") then 82 | { 83 | _ttMessages = call compile preprocessFileLineNumbers (_externalDirectory + "\titleTextMessagesServerText.sqf"); 84 | diag_log format ["[TITLE TEXT MESSAGES] -> LOADED FILE WITH %1 LINES OF TEXT",(count _ttMessages)]; 85 | }; 86 | 87 | if ((count _ttMessages) >= 1) then 88 | { 89 | if (_loopSleep < 600) then 90 | { 91 | _loopSleep = 600; 92 | }; 93 | while {true} do 94 | { 95 | uiSleep 60; 96 | { 97 | _currentMessage = _x select 0; 98 | _currentFade = _x select 1; 99 | _currentSleep = _x select 2; 100 | TTM_TITLETEXT_PUBVAR = [format ["%1",_currentMessage],_currentFade]; 101 | publicVariable "TTM_TITLETEXT_PUBVAR"; 102 | uiSleep _currentSleep; 103 | } forEach _ttMessages; 104 | uiSleep _loopSleep - 60; 105 | }; 106 | }; 107 | -------------------------------------------------------------------------------- /titleTextMessagesServer/titleTextMessagesServerText.sqf: -------------------------------------------------------------------------------- 1 | /* 2 | ---------------------------------------------------------------------------------------------- 3 | 4 | Copyright © 2016 soulkobk (soulkobk.blogspot.com) 5 | 6 | This program is free software: you can redistribute it and/or modify 7 | it under the terms of the GNU Affero General Public License as 8 | published by the Free Software Foundation, either version 3 of the 9 | License, or (at your option) any later version. 10 | 11 | This program is distributed in the hope that it will be useful, 12 | but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | GNU Affero General Public License for more details. 15 | 16 | You should have received a copy of the GNU Affero General Public License 17 | along with this program. If not, see . 18 | 19 | ---------------------------------------------------------------------------------------------- 20 | 21 | Name: titleTextMessagesServerText.sqf 22 | Version: 1.0.0 23 | Author: soulkobk (soulkobk.blogspot.com) 24 | Creation Date: 4:59 PM 11/10/2016 25 | Modification Date: 4:57 PM 19/10/2016 26 | 27 | Description: 28 | For use with A3Wasteland 1.Xx mission (A3Wasteland.com). This script MUST be paired up with 29 | the file titleTextMessagesServer.sqf 30 | 31 | You are able to edit this file whenever you want to! After a server restart, it will display the 32 | updated messages. You no longer need to edit and repack your mission.pbo to change messages! 33 | 34 | Place this file SERVER SIDE at... 35 | \A3Wasteland_settings\titleTextMessagesServerText.sqf 36 | 37 | Parameter(s): ["",,], 38 | 39 | Example: ["You are playing on the [KOBK] A3Wasteland Stratis server.",2,15], 40 | 41 | Change Log: 42 | 1.0.0 - original base script. 43 | 44 | ---------------------------------------------------------------------------------------------- 45 | */ 46 | 47 | [ 48 | ["You are playing on the [KOBK] A3Wasteland Stratis server.",2,15], 49 | ["TeamSpeak -> 127.0.0.1:12701",2,15], 50 | ["WWW/Forums -> github.com/soulkobk",2,15], 51 | ["Server restarts are at 6am, 12pm, 6pm and 12am daily (AEST).",2,15], 52 | ["Day/Night cycle is 5 hours day, 1 hour night per 6 hour session.",2,15], 53 | ["Voice and text chat have been disabled, please use TeamSpeak for communication.",2,15], 54 | ["Any queries? Direct them to the administrators via TeamSpeak or the Forum.",30], 55 | ["Enjoy the server? Tell your friends!",2,15], 56 | ["Want to become a part of the [KOBK] clan? You can apply via our WWW site.",2,15], 57 | ["Want to help cover server costs? You can donate via our WWW site.",2,15], 58 | ["Enjoy your time on the battle field!",2,15] 59 | ]; 60 | --------------------------------------------------------------------------------