diff --git a/@ExileServer/addons/exad_grinding/$PREFIX$ b/@ExileServer/addons/exad_grinding/$PREFIX$ new file mode 100644 index 0000000..27e2b77 --- /dev/null +++ b/@ExileServer/addons/exad_grinding/$PREFIX$ @@ -0,0 +1 @@ +exad_grinding \ No newline at end of file diff --git a/@ExileServer/addons/exad_grinding/Functions/fn_grindProgress.sqf b/@ExileServer/addons/exad_grinding/Functions/fn_grindProgress.sqf new file mode 100644 index 0000000..101cf6c --- /dev/null +++ b/@ExileServer/addons/exad_grinding/Functions/fn_grindProgress.sqf @@ -0,0 +1,35 @@ +/* + fn_grindProgress.sqf + + Copyright 2016 Jan Babor + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +private ["_object","_databaseID"]; + +_object = objectFromNetId ([_this, 0, "",[""]] call BIS_fnc_param); + +if(isNull _object)exitWith{false}; + +if((_object getVariable ["ExAd_Grinding_progress", 0]) >= ExAd_GRINDING_OBJECT_MAX)then{ + _object setVariable ["ExileAccessCode", nil]; + _object setVariable ["ExileIsLocked", nil, true]; + + _databaseID = _object getVariable ["ExileDatabaseID",0]; + format ["addDoorLock:%1:%2","000000",_databaseID] call ExileServer_system_database_query_fireAndForget; +}; + +_object setVariable ["ExAd_Grinding_progress", (_object getVariable ["ExAd_Grinding_progress", 0]) + ExAd_GRINDING_PROGRESS, true]; + +true \ No newline at end of file diff --git a/@ExileServer/addons/exad_grinding/Functions/fn_restoreLock.sqf b/@ExileServer/addons/exad_grinding/Functions/fn_restoreLock.sqf new file mode 100644 index 0000000..d1a72c3 --- /dev/null +++ b/@ExileServer/addons/exad_grinding/Functions/fn_restoreLock.sqf @@ -0,0 +1,27 @@ +/* + fn_restoreLock.sqf + + Copyright 2016 Jan Babor + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +private ["_object","_databaseID"]; + +_object = objectFromNetId ([_this, 0, "",[""]] call BIS_fnc_param); + +if(isNull _object)exitWith{false}; + +_object setVariable ["ExAd_Grinding_progress", 0, true]; + +true \ No newline at end of file diff --git a/@ExileServer/addons/exad_grinding/PboPrefix.txt b/@ExileServer/addons/exad_grinding/PboPrefix.txt new file mode 100644 index 0000000..27e2b77 --- /dev/null +++ b/@ExileServer/addons/exad_grinding/PboPrefix.txt @@ -0,0 +1 @@ +exad_grinding \ No newline at end of file diff --git a/@ExileServer/addons/exad_grinding/config.cpp b/@ExileServer/addons/exad_grinding/config.cpp new file mode 100644 index 0000000..aaf1932 --- /dev/null +++ b/@ExileServer/addons/exad_grinding/config.cpp @@ -0,0 +1,46 @@ +/* + config.cpp + + Copyright 2016 Jan Babor + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +class CfgPatches { + class ExAd_Grinding { + requiredVersion = 0.1; + requiredAddons[] = {"ExAd_Core"}; + }; +}; + +class CfgFunctions { + class ExAdServer { + class Grinding { + file = "exad_grinding\Functions"; + class grindProgress {}; + class restoreLock {}; + }; + }; +}; + +class CfgNetworkMessages +{ + class grindProgress + { + parameters[] = {"STRING"}; + }; + class restoreLock + { + parameters[] = {"STRING"}; + }; +}; \ No newline at end of file diff --git a/BattlEye/scripts.txt b/BattlEye/scripts.txt index e4f9655..239f2b9 100644 --- a/BattlEye/scripts.txt +++ b/BattlEye/scripts.txt @@ -2,6 +2,7 @@ eventHandler !="ExAd_ACTION_PARACHUTE_DETACH = (findDisplay 46) displayAddEvent compile !="call compile format[\"_messageParameters call ExAd_fnc_%1;\",_messageName]" createVehicle !="_parachuteObject = createVehicle [\"Steerable_Parachute_F\", getPosATL player, [], 0, \"CAN_COLLIDE\"]" addAction !="ExAd_ACTION_PARACHUTE = player addaction [format" +drawLine3D !="drawLine3D [cursorTarget modelToWorld [" Entities !="waitUntil {sleep 0.1; {player distance _x < 10 max (sizeOf typeOf _x)} count (player nearEntities [\"Helicopter_Base_F\", 20]) == 0}" disableCollisionWith !="_parachuteObject disableCollisionWith player" remoteexec !="_this remoteExec [\"ExAdServer_fnc_clientRequest\",2]" \ No newline at end of file diff --git a/docs/Grinding/examples.md b/docs/Grinding/examples.md new file mode 100644 index 0000000..b5f1edf --- /dev/null +++ b/docs/Grinding/examples.md @@ -0,0 +1 @@ +#Examples diff --git a/docs/Grinding/installation.md b/docs/Grinding/installation.md new file mode 100644 index 0000000..c28fd19 --- /dev/null +++ b/docs/Grinding/installation.md @@ -0,0 +1,51 @@ +# Installation + +Remember for this plugin to work you first need to install +* [Core](https://github.com/Bjanski/ExAd/blob/Core/docs/core/installation.md) + +## Client + +* Place the folder "Grinding" into "mpmissions\exile.\ExAdClient\" + +* Goto "mpmissions\exile.\ExAdClient\CfgFunctions" and uncomment + +_From_ +```cpp + //#include "Grinding\CfgFunctions.cpp" +``` +_To_ +```cpp + #include "Grinding\CfgFunctions.cpp" +``` + +* In "config.cpp" find "CfgInteractionMenus" and add to "Construction". +```cpp +class Construction + { + targetType = 2; + target = "Exile_Construction_Abstract_Static"; + + class Actions + { + class Grind : ExileAbstractAction + { + title = "Grind Lock"; + condition = "call ExAd_fnc_canGrindLock"; + action = "_this spawn ExAd_fnc_grindLock"; + }; + + class RestoreLock : ExileAbstractAction + { + title = "Restore Lock"; + condition = "_object call ExAd_fnc_canRestoreLock"; + action = "_this spawn ExAd_fnc_restoreLock"; + }; + }; +}; +``` + +* Now you can go into "mpmissions\exile.\ExAdClient\Grinding\customize.sqf" and change to desirable settings. + +## Server + +* Copy over and pack "@ExileServer\addons\exad_grinding" into a pbo. \ No newline at end of file diff --git a/docs/HaloParachute/installation.md b/docs/HaloParachute/installation.md index c9e8d19..e253075 100644 --- a/docs/HaloParachute/installation.md +++ b/docs/HaloParachute/installation.md @@ -5,7 +5,7 @@ ## Client * Place the folder "HaloParachute" into "mpmissions\exile.\ExAd\" -* Goto "mpmissions\exile.\ExAd\CfgFunctions" and uncomment +* Goto "mpmissions\exile.\ExAdClient\CfgFunctions" and uncomment From ```cpp diff --git a/docs/VirtualGarage/installation.md b/docs/VirtualGarage/installation.md index 1c2f885..98d928c 100644 --- a/docs/VirtualGarage/installation.md +++ b/docs/VirtualGarage/installation.md @@ -8,7 +8,7 @@ Remember for this plugin to work you first need to install * Place the folder "VirtualGarage" into "mpmissions\exile.\ExAdClient\" -* Goto "mpmissions\exile.\ExAd\CfgFunctions" and uncomment +* Goto "mpmissions\exile.\ExAdClient\CfgFunctions" and uncomment _From_ ```cpp @@ -22,7 +22,7 @@ _To_ * In "config.cpp" in the mission root folder, find class CfgExileCustomCode and add the following row ```js - ExileServer_system_territory_database_load = "EXOClient\CustomCode\ExileServer_system_territory_database_load.sqf"; + ExileServer_system_territory_database_load = "ExAdClient\CustomCode\ExileServer_system_territory_database_load.sqf"; ``` * In "config.cpp" you can also add the ("CfgInteractionMenus" >> "Flag" >> "VG") class if you want to be able to fast load the app through your flag pole. diff --git a/mpmissions/Exile.Altis/ExAdClient/Grinding/CHANGELOG.md b/mpmissions/Exile.Altis/ExAdClient/Grinding/CHANGELOG.md new file mode 100644 index 0000000..1c43b6d --- /dev/null +++ b/mpmissions/Exile.Altis/ExAdClient/Grinding/CHANGELOG.md @@ -0,0 +1,11 @@ +#VirtualGarage +## Changelog: + +### 160502 23:15 . v0.6.0 +#### Fixed + +#### Added +* Grinding introduced +* Grinding battleye scripts + +#### Deleted diff --git a/mpmissions/Exile.Altis/ExAdClient/Grinding/CfgFunctions.cpp b/mpmissions/Exile.Altis/ExAdClient/Grinding/CfgFunctions.cpp new file mode 100644 index 0000000..aefaef1 --- /dev/null +++ b/mpmissions/Exile.Altis/ExAdClient/Grinding/CfgFunctions.cpp @@ -0,0 +1,28 @@ +/* + CfgFunctions.cpp + + Copyright 2016 Jan Babor + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + + +class Grinding +{ + file = "ExAdClient\Grinding\Functions"; + class canGrindLock {}; + class canRestoreLock {}; + class grindLock {}; + class restoreLock {}; + class postInitGrinding {file = "ExAdClient\Grinding\postInit.sqf"; postInit = 1;}; +}; \ No newline at end of file diff --git a/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_canGrindLock.sqf b/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_canGrindLock.sqf new file mode 100644 index 0000000..3d44aac --- /dev/null +++ b/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_canGrindLock.sqf @@ -0,0 +1,19 @@ +/* + fn_canGrindLock.sqf + + Copyright 2016 Jan Babor + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +(((ExileClientInteractionObject getvariable ['ExileIsLocked',1]) isEqualTo -1) && !ExAd_GRINDING && ('Exile_Item_Grinder' in (magazines player))) \ No newline at end of file diff --git a/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_canRestoreLock.sqf b/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_canRestoreLock.sqf new file mode 100644 index 0000000..d79e902 --- /dev/null +++ b/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_canRestoreLock.sqf @@ -0,0 +1,19 @@ +/* + fn_canRestoreLock.sqf + + Copyright 2016 Jan Babor + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +(('Exile_Item_Codelock' in (magazines player)) && (ExileClientInteractionObject getVariable ['ExAd_Grinding_progress', 0] > 0)) \ No newline at end of file diff --git a/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_grindLock.sqf b/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_grindLock.sqf new file mode 100644 index 0000000..bb2f9a8 --- /dev/null +++ b/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_grindLock.sqf @@ -0,0 +1,92 @@ +/* + fn_grindLock.sqf + + Copyright 2016 Jan Babor + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +private ["_soundSrc","_ticker"]; + +if(vehicle player != player)exitWith{false}; + +ExAd_GRINDING_OBJECT = _this select 0; +ExAd_GRINDING = true; +call ExileClient_gui_interactionMenu_unhook; +_soundSrc = createSoundSource ["Sound_Factory10", position ExAd_GRINDING_OBJECT, [], 0]; +player playActionNow "medicStart"; + + +ExAd_DRAW3D_HANDLER = addMissionEventHandler ["Draw3D", { + private ["_object","_progress"]; + + _object = if(isNil "ExAd_GRINDING_OBJECT")then{cursorTarget}else{ExAd_GRINDING_OBJECT}; + _progress = 1 min ((_object getVariable ["ExAd_Grinding_progress", 1]) / ExAd_GRINDING_OBJECT_MAX); + + drawLine3D [cursorTarget modelToWorld [-0.5, -0.15, 1], cursorTarget modelToWorld [0.5, -0.15, 1], [0,0,0,1]]; + drawLine3D [cursorTarget modelToWorld [-0.5, -0.15, 0.95], cursorTarget modelToWorld [0.5, -0.15, 0.95], [0,0,0,1]]; + drawLine3D [cursorTarget modelToWorld [-0.5, 0.15, 1], cursorTarget modelToWorld [0.5, 0.15, 1], [0,0,0,1]]; + drawLine3D [cursorTarget modelToWorld [-0.5, 0.15, 0.95], cursorTarget modelToWorld [0.5, 0.15, 0.95], [0,0,0,1]]; + + drawLine3D [cursorTarget modelToWorld [-0.5, -0.15, 1], cursorTarget modelToWorld [-0.5, -0.15, 0.95], [0,0,0,1]]; + drawLine3D [cursorTarget modelToWorld [0.5, -0.15, 1], cursorTarget modelToWorld [0.5, -0.15, 0.95], [0,0,0,1]]; + drawLine3D [cursorTarget modelToWorld [-0.5, 0.15, 1], cursorTarget modelToWorld [-0.5, 0.15, 0.95], [0,0,0,1]]; + drawLine3D [cursorTarget modelToWorld [0.5, -0.15, 1], cursorTarget modelToWorld [0.5, -0.15, 0.95], [0,0,0,1]]; + + for "_i" from 1 to 49 do { + drawLine3D [cursorTarget modelToWorld [-0.5, -0.15, 1 - (0.001 * _i)], cursorTarget modelToWorld [((-0.5) + _progress), -0.15, 1 - (0.001 * _i)], [1,0.482,0,1]]; + drawLine3D [cursorTarget modelToWorld [0.5, 0.15, 1 - (0.001 * _i)], cursorTarget modelToWorld [((0.5) - _progress), 0.15, 1 - (0.001 * _i)], [1,0.482,0,1]]; + + drawLine3D [cursorTarget modelToWorld [0.5, -0.15, 1 - (0.001 * _i)], cursorTarget modelToWorld [((-0.5) + _progress), -0.15, 1 - (0.001 * _i)], [0.55,0.55,0.55,1]]; + drawLine3D [cursorTarget modelToWorld [-0.5, 0.15, 1 - (0.001 * _i)], cursorTarget modelToWorld [((0.5) - _progress), 0.15, 1 - (0.001 * _i)], [0.55,0.55,0.55,1]]; + } +}]; + +_ticker = 1; +while{(ExAd_GRINDING_OBJECT == cursorTarget) && ExAd_GRINDING}do{ + UISleep 1; + if(random[0,50,100] < 1)exitWith{ + player removeItem "Exile_Item_Grinder"; + ['Whoops', [STR_ExAd_GRINDING_NOTI_BROKE]] call ExileClient_gui_notification_event_addNotification; + false + }; + + if!("Exile_Magazine_Battery" in (magazines player))exitWith{ + ['Whoops', [STR_ExAd_GRINDING_NOTI_EMPTY_BAT]] call ExileClient_gui_notification_event_addNotification; + false + }; + + if((_ticker % ExAd_GRINDING_PROGRESS_INTERVALL) == 0)then{ + player removeItem "Exile_Magazine_Battery"; + + ["grindProgress", [netId ExAd_GRINDING_OBJECT]] call ExAd_fnc_serverDispatch; + ['Success', [STR_ExAd_GRINDING_NOTI_PROGRESS]] call ExileClient_gui_notification_event_addNotification; + + player playActionNow "medicStart"; + }; + + if(ExAd_GRINDING_OBJECT getVariable ["ExAd_Grinding_progress", 0] > ExAd_GRINDING_OBJECT_MAX)exitWith{ + UISleep 2; + ['Success', [STR_ExAd_GRINDING_NOTI_FINISHED]] call ExileClient_gui_notification_event_addNotification; + }; + _ticker = _ticker + 1; +}; + +deleteVehicle _soundSrc; +player playActionNow "medicStop"; +removeMissionEventHandler ["Draw3D",ExAd_DRAW3D_HANDLER]; + +ExAd_GRINDING_OBJECT = nil; +ExAd_GRINDING = false; +call ExileClient_gui_interactionMenu_unhook; + +true \ No newline at end of file diff --git a/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_restoreLock.sqf b/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_restoreLock.sqf new file mode 100644 index 0000000..c0a4628 --- /dev/null +++ b/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_restoreLock.sqf @@ -0,0 +1,33 @@ +/* + fn_restoreLock.sqf + + Copyright 2016 Jan Babor + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +params["_object"]; + +if(vehicle player != player)exitWith{false}; + +call ExileClient_gui_interactionMenu_unhook; +player playActionNow "medic"; + +UISleep 5; +player removeItem "Exile_Item_Codelock"; +['Success', [STR_ExAd_GRINDING_NOTI_RESTORED]] call ExileClient_gui_notification_event_addNotification; + +["restoreLock", [netId _object]] call ExAd_fnc_serverDispatch; + +call ExileClient_gui_interactionMenu_unhook; + +true \ No newline at end of file diff --git a/mpmissions/Exile.Altis/ExAdClient/Grinding/UPDATE.md b/mpmissions/Exile.Altis/ExAdClient/Grinding/UPDATE.md new file mode 100644 index 0000000..0fa0445 --- /dev/null +++ b/mpmissions/Exile.Altis/ExAdClient/Grinding/UPDATE.md @@ -0,0 +1,5 @@ +#VirtualGarage +## Instructions: + +### 160502 23:15 . v0.6.0 +#### Full installation diff --git a/mpmissions/Exile.Altis/ExAdClient/Grinding/customize.sqf b/mpmissions/Exile.Altis/ExAdClient/Grinding/customize.sqf new file mode 100644 index 0000000..0706812 --- /dev/null +++ b/mpmissions/Exile.Altis/ExAdClient/Grinding/customize.sqf @@ -0,0 +1,27 @@ +/* + customize.sqf + + Copyright 2016 Jan Babor + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +ExAd_GRINDING_PROGRESS_INTERVALL = 60; //SCALAR - Grinding, interval time measured in seconds. + +ExAd_GRINDING_PROGRESS = 30; //SCALAR - Damage each finished interval will take from the code lock. + +ExAd_GRINDING_OBJECT_MAX = 900; //SCALAR - Code lock sustainability. + +/* +The default values above means that a full succesful grind will take (900 / 30) * 60 = 1800 = 20 minutes +*/ \ No newline at end of file diff --git a/mpmissions/Exile.Altis/ExAdClient/Grinding/postInit.sqf b/mpmissions/Exile.Altis/ExAdClient/Grinding/postInit.sqf new file mode 100644 index 0000000..a607f51 --- /dev/null +++ b/mpmissions/Exile.Altis/ExAdClient/Grinding/postInit.sqf @@ -0,0 +1,32 @@ +/* + postInit.sqf + + Copyright 2016 Jan Babor + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +execVM "ExAdClient\Grinding\customize.sqf"; + +ExAd_GRINDING = false; + +STR_ExAd_GRINDING_NOTI_BROKE = if(isLocalized "STR_ExAd_GRINDING_NOTI_BROKE")then{localize "STR_ExAd_GRINDING_NOTI_BROKE"}else{"Your grinder broke, get a new one before you can continue."}; + +STR_ExAd_GRINDING_NOTI_EMPTY_BAT = if(isLocalized "STR_ExAd_GRINDING_NOTI_EMPTY_BAT")then{localize "STR_ExAd_GRINDING_NOTI_EMPTY_BAT"}else{"Find some batteries to get the grinder to work."}; + +STR_ExAd_GRINDING_NOTI_PROGRESS = if(isLocalized "STR_ExAd_GRINDING_NOTI_PROGRESS")then{localize "STR_ExAd_GRINDING_NOTI_PROGRESS"}else{"Your grinder broke, get a new one before you can continue."}; + +STR_ExAd_GRINDING_NOTI_FINISHED = if(isLocalized "STR_ExAd_GRINDING_NOTI_FINISHED")then{localize "STR_ExAd_GRINDING_NOTI_FINISHED"}else{"You have broken the code lock."}; + +STR_ExAd_GRINDING_NOTI_RESTORED = if(isLocalized "STR_ExAd_GRINDING_NOTI_RESTORED")then{localize "STR_ExAd_GRINDING_NOTI_RESTORED"}else{"You've changed the look"}; \ No newline at end of file diff --git a/mpmissions/Exile.Altis/config.cpp b/mpmissions/Exile.Altis/config.cpp index 9329a50..28911fc 100644 --- a/mpmissions/Exile.Altis/config.cpp +++ b/mpmissions/Exile.Altis/config.cpp @@ -19,4 +19,26 @@ class CfgInteractionMenus }; }; }; + class Construction + { + targetType = 2; + target = "Exile_Construction_Abstract_Static"; + + class Actions + { + class Grind : ExileAbstractAction + { + title = "Grind Lock"; + condition = "call ExAd_fnc_canGrindLock"; + action = "_this spawn ExAd_fnc_grindLock"; + }; + + class RestoreLock : ExileAbstractAction + { + title = "Restore Lock"; + condition = "_object call ExAd_fnc_canRestoreLock"; + action = "_this spawn ExAd_fnc_restoreLock"; + }; + }; + }; }; \ No newline at end of file diff --git a/mpmissions/Exile.Altis/stringtable.xml b/mpmissions/Exile.Altis/stringtable.xml index 2c6ab37..84309bc 100644 --- a/mpmissions/Exile.Altis/stringtable.xml +++ b/mpmissions/Exile.Altis/stringtable.xml @@ -25,4 +25,23 @@ + + + + Your grinder broke, get a new one before you can continue. + + + Find some batteries to get the grinder to work. + + + I think I'm getting through. + + + You have broken the code lock. + + + You've changed the look + + +