Merge pull request #29 from Bjanski/Dev

Dev
This commit is contained in:
Jan Babor 2016-05-03 00:21:56 +01:00
commit 33445d4b1b
21 changed files with 473 additions and 3 deletions

View File

@ -0,0 +1 @@
exad_grinding

View File

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

View File

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

View File

@ -0,0 +1 @@
exad_grinding

View File

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

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

@ -0,0 +1,11 @@
#VirtualGarage
## Changelog:
### 160502 23:15 . v0.6.0
#### Fixed
#### Added
* Grinding introduced
* Grinding battleye scripts
#### Deleted

View File

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

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

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

View File

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

View File

@ -0,0 +1,5 @@
#VirtualGarage
## Instructions:
### 160502 23:15 . v0.6.0
#### Full installation

View File

@ -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
*/

View File

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

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

View File

@ -25,4 +25,23 @@
</Key>
</Container>
</Package>
<Package name="Grinding">
<Container name="Notifications">
<Key ID="STR_ExAd_GRINDING_NOTI_BROKE">
<Original>Your grinder broke, get a new one before you can continue.</Original>
</Key>
<Key ID="STR_ExAd_GRINDING_NOTI_EMPTY_BAT">
<Original>Find some batteries to get the grinder to work.</Original>
</Key>
<Key ID="STR_ExAd_GRINDING_NOTI_PROGRESS">
<Original>I think I'm getting through.</Original>
</Key>
<Key ID="STR_ExAd_GRINDING_NOTI_FINISHED">
<Original>You have broken the code lock.</Original>
</Key>
<Key ID="STR_ExAd_GRINDING_NOTI_RESTORED">
<Original>You've changed the look</Original>
</Key>
</Container>
</Package>
</Project>