Completed Grinding implementation

This commit is contained in:
Bjanski 2016-05-03 01:21:03 +02:00
parent b86f73d767
commit c848fc4cd2
14 changed files with 134 additions and 12 deletions

View File

@ -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]"

View File

@ -0,0 +1 @@
#Examples

View File

@ -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.<MAP>\ExAdClient\"
* Goto "mpmissions\exile.<MAP>\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.<MAP>\ExAdClient\Grinding\customize.sqf" and change to desirable settings.
## Server
* Copy over and pack "@ExileServer\addons\exad_grinding" into a pbo.

View File

@ -5,7 +5,7 @@
## Client
* Place the folder "HaloParachute" into "mpmissions\exile.<MAP>\ExAd\"
* Goto "mpmissions\exile.<MAP>\ExAd\CfgFunctions" and uncomment
* Goto "mpmissions\exile.<MAP>\ExAdClient\CfgFunctions" and uncomment
From
```cpp

View File

@ -8,7 +8,7 @@ Remember for this plugin to work you first need to install
* Place the folder "VirtualGarage" into "mpmissions\exile.<MAP>\ExAdClient\"
* Goto "mpmissions\exile.<MAP>\ExAd\CfgFunctions" and uncomment
* Goto "mpmissions\exile.<MAP>\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.

View File

@ -6,5 +6,6 @@
#### Added
* Grinding introduced
* Grinding battleye scripts
#### Deleted

View File

@ -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;};
};

View File

@ -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)))

View File

@ -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))

View File

@ -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;
};

View File

@ -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;

View File

@ -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.
/*
The default values above means that a full succesful grind will take (900 / 30) * 60 = 1800 = 20 minutes
*/

View File

@ -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."};

View File

@ -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";
};
};
};
};