├── .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 |
--------------------------------------------------------------------------------