From c848fc4cd216352365fd78fb26083f9b655617ab Mon Sep 17 00:00:00 2001 From: Bjanski Date: Tue, 3 May 2016 01:21:03 +0200 Subject: [PATCH] Completed Grinding implementation --- BattlEye/scripts.txt | 1 + docs/Grinding/examples.md | 1 + docs/Grinding/installation.md | 51 +++++++++++++++++++ docs/HaloParachute/installation.md | 2 +- docs/VirtualGarage/installation.md | 4 +- .../ExAdClient/Grinding/CHANGELOG.md | 1 + .../ExAdClient/Grinding/CfgFunctions.cpp | 6 ++- .../Grinding/Functions/fn_canGrindLock.sqf | 19 +++++++ .../Grinding/Functions/fn_canRestoreLock.sqf | 19 +++++++ .../Grinding/Functions/fn_grindLock.sqf | 6 +-- .../Grinding/Functions/fn_restoreLock.sqf | 2 +- .../ExAdClient/Grinding/customize.sqf | 10 ++-- .../ExAdClient/Grinding/postInit.sqf | 2 + mpmissions/Exile.Altis/config.cpp | 22 ++++++++ 14 files changed, 134 insertions(+), 12 deletions(-) create mode 100644 docs/Grinding/examples.md create mode 100644 docs/Grinding/installation.md create mode 100644 mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_canGrindLock.sqf create mode 100644 mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_canRestoreLock.sqf 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 index 6383674..1c43b6d 100644 --- a/mpmissions/Exile.Altis/ExAdClient/Grinding/CHANGELOG.md +++ b/mpmissions/Exile.Altis/ExAdClient/Grinding/CHANGELOG.md @@ -6,5 +6,6 @@ #### 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 index 948482b..aefaef1 100644 --- a/mpmissions/Exile.Altis/ExAdClient/Grinding/CfgFunctions.cpp +++ b/mpmissions/Exile.Altis/ExAdClient/Grinding/CfgFunctions.cpp @@ -17,10 +17,12 @@ */ -class VirtualGarage +class Grinding { file = "ExAdClient\Grinding\Functions"; + class canGrindLock {}; + class canRestoreLock {}; class grindLock {}; class restoreLock {}; - class postInit {file = "ExAdClient\Grinding\postInit.sqf"; postInit = 1;}; + 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 index 72c80f0..bb2f9a8 100644 --- a/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_grindLock.sqf +++ b/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_grindLock.sqf @@ -30,7 +30,7 @@ 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 ["EXO_Grinding_progress", 1]) / ExAd_GRINDING_OBJECT_MAX); + _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]]; @@ -69,14 +69,14 @@ while{(ExAd_GRINDING_OBJECT == cursorTarget) && ExAd_GRINDING}do{ player removeItem "Exile_Magazine_Battery"; ["grindProgress", [netId ExAd_GRINDING_OBJECT]] call ExAd_fnc_serverDispatch; - ['Whoops', [STR_ExAd_GRINDING_NOTI_PROGRESS]] call ExileClient_gui_notification_event_addNotification; + ['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; - ['Whoops', [STR_ExAd_GRINDING_NOTI_FINISHED]] call ExileClient_gui_notification_event_addNotification; + ['Success', [STR_ExAd_GRINDING_NOTI_FINISHED]] call ExileClient_gui_notification_event_addNotification; }; _ticker = _ticker + 1; }; diff --git a/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_restoreLock.sqf b/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_restoreLock.sqf index b1bd12d..c0a4628 100644 --- a/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_restoreLock.sqf +++ b/mpmissions/Exile.Altis/ExAdClient/Grinding/Functions/fn_restoreLock.sqf @@ -24,7 +24,7 @@ player playActionNow "medic"; UISleep 5; player removeItem "Exile_Item_Codelock"; -['Whoops', [STR_ExAd_GRINDING_NOTI_RESTORED]] call ExileClient_gui_notification_event_addNotification; +['Success', [STR_ExAd_GRINDING_NOTI_RESTORED]] call ExileClient_gui_notification_event_addNotification; ["restoreLock", [netId _object]] call ExAd_fnc_serverDispatch; diff --git a/mpmissions/Exile.Altis/ExAdClient/Grinding/customize.sqf b/mpmissions/Exile.Altis/ExAdClient/Grinding/customize.sqf index 0b9aab7..0706812 100644 --- a/mpmissions/Exile.Altis/ExAdClient/Grinding/customize.sqf +++ b/mpmissions/Exile.Altis/ExAdClient/Grinding/customize.sqf @@ -16,8 +16,12 @@ 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. -ExAd_GRINDING_PROGRESS_INTERVALL = 60; //SCALAR - Damage each finished interval will take from the code lock. - -ExAd_GRINDING_PROGRESS = 60; //SCALAR - Time each interval will take measured in seconds. \ No newline at end of file +/* +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 index 723c721..a607f51 100644 --- a/mpmissions/Exile.Altis/ExAdClient/Grinding/postInit.sqf +++ b/mpmissions/Exile.Altis/ExAdClient/Grinding/postInit.sqf @@ -19,6 +19,8 @@ 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."}; 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