diff --git a/@ExileServer/addons/exad_core/Functions/Debug/fn_log.sqf b/@ExileServer/addons/exad_core/Functions/Debug/fn_log.sqf
new file mode 100644
index 0000000..f757345
--- /dev/null
+++ b/@ExileServer/addons/exad_core/Functions/Debug/fn_log.sqf
@@ -0,0 +1,23 @@
+/*
+ fn_log.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 ["_file","_msg"];
+
+if(ExAd_Logging)then{
+ "Arma_Log" callExtension format['%1\%2:%3',ExAd_Log_Folder,_file,_msg];
+}
\ No newline at end of file
diff --git a/@ExileServer/addons/exad_core/Functions/Utils/fn_territoryPlayerPresent.sqf b/@ExileServer/addons/exad_core/Functions/Utils/fn_territoryPlayerPresent.sqf
new file mode 100644
index 0000000..64ed671
--- /dev/null
+++ b/@ExileServer/addons/exad_core/Functions/Utils/fn_territoryPlayerPresent.sqf
@@ -0,0 +1 @@
+/*
fn_territoryPlayerPresent.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 ["_flag","_res"];
_res = false;
{
if( (([_flag, getPlayerUID _x ] call ExileClient_util_territory_getAccessLevel) select 0) > 0 ) exitWith {
_res = true
}
}forEach playableUnits;
_res
\ No newline at end of file
diff --git a/@ExileServer/addons/exad_core/config.cpp b/@ExileServer/addons/exad_core/config.cpp
index 79f7c41..0d90f39 100644
--- a/@ExileServer/addons/exad_core/config.cpp
+++ b/@ExileServer/addons/exad_core/config.cpp
@@ -25,6 +25,10 @@ class CfgPatches {
class CfgFunctions {
class ExAdServer {
+ class Debug {
+ file = "exad_core\Functions\Debug";
+ class log {};
+ };
class System {
file = "exad_core\Functions\System";
class clientDispatch {};
@@ -36,6 +40,7 @@ class CfgFunctions {
class createCrate {};
class createMarker {};
class putInContainer {};
+ class territoryPlayerPresent {};
};
};
};
diff --git a/@ExileServer/addons/exad_grinding/Functions/fn_grindProgress.sqf b/@ExileServer/addons/exad_grinding/Functions/fn_grindProgress.sqf
index 101cf6c..4e1c75d 100644
--- a/@ExileServer/addons/exad_grinding/Functions/fn_grindProgress.sqf
+++ b/@ExileServer/addons/exad_grinding/Functions/fn_grindProgress.sqf
@@ -28,8 +28,12 @@ if((_object getVariable ["ExAd_Grinding_progress", 0]) >= ExAd_GRINDING_OBJECT_M
_databaseID = _object getVariable ["ExileDatabaseID",0];
format ["addDoorLock:%1:%2","000000",_databaseID] call ExileServer_system_database_query_fireAndForget;
+
+ ["Grinding", format["Grind successful: Territory ID - %1|Object ID - %2", _object setVariable ["ExileTerritoryID", -1], _object getVariable ["ExileDatabaseID",0]]] call ExAdServer_fnc_log;
};
+
+
_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
index d1a72c3..b465969 100644
--- a/@ExileServer/addons/exad_grinding/Functions/fn_restoreLock.sqf
+++ b/@ExileServer/addons/exad_grinding/Functions/fn_restoreLock.sqf
@@ -24,4 +24,6 @@ if(isNull _object)exitWith{false};
_object setVariable ["ExAd_Grinding_progress", 0, true];
+["Grinding", format["Lock restored: Territory ID - %1|Object ID - %2", _object setVariable ["ExileTerritoryID", -1], _object getVariable ["ExileDatabaseID",0]]] call ExAdServer_fnc_log;
+
true
\ No newline at end of file
diff --git a/@ExileServer/addons/exad_hacking/Functions/fn_startHack.sqf b/@ExileServer/addons/exad_hacking/Functions/fn_startHack.sqf
index 05dc04a..2323d1e 100644
--- a/@ExileServer/addons/exad_hacking/Functions/fn_startHack.sqf
+++ b/@ExileServer/addons/exad_hacking/Functions/fn_startHack.sqf
@@ -22,7 +22,13 @@ _player = objectFromNetId ([_this, 1, "",[""]] call BIS_fnc_param);
if(isNull _object || isNull _player)exitWith{false};
-if(((((getPos _object) nearObjects ["Exile_Construction_Flag_Static", 150]) select 0) getVariable ["ExAd_HACKS_SUCCEEDED",0]) >= ExAd_HACKING_TERRITORY_MAX)exitWith{
+_flag = ((getPos _object) nearObjects ["Exile_Construction_Flag_Static", 150]) select 0;
+
+if(ExAd_HACKING_PLAYER_ONLINE && !([_flag] call ExAdServer_fnc_territoryPlayerPresent))exitWith{
+ [STR_ExAd_HACKING_NOTI_NO_PLAYER_PRESENT ,0,0.6,2,0] remoteExec ["BIS_fnc_dynamicText",owner _player];
+};
+
+if(_flag getVariable ["ExAd_HACKS_SUCCEEDED",0] >= ExAd_HACKING_TERRITORY_MAX)exitWith{
[STR_ExAd_HACKING_NOTI_MAX_TERRITORY_HACKS_REACHED ,0,0.6,2,0] remoteExec ["BIS_fnc_dynamicText",owner _player];
};
@@ -36,6 +42,8 @@ if(isNil "ExAd_HACKS_IN_PROGRESS")then{
ExAd_HACKS_IN_PROGRESS = 0;
};
+["Hacking", format["Hack started: Player - %1(%2)|Territory - %3|Hacks in motion - %4",name _player, getPlayerUID _player, _flag getVariable ["ExileTerritoryName", "Unknown"], ExAd_HACKS_IN_PROGRESS]] call ExAdServer_fnc_log;
+
_pos = _player modelToWorld [0, +0.5, 0];
_pos set [2,((getPosATL _player) select 2)];
@@ -47,8 +55,8 @@ _laptop animate ["LaptopLidRotation", 1];
_player removeItem "Exile_Item_Laptop";
-[_object, _player, _laptop] spawn {
- params ["_object","_player","_laptop","_markers","_marker","_success","_ticks","_newSize","_destroy","_msg"];
+[_object, _player, _laptop, _flag] spawn {
+ params ["_object","_player","_laptop","_flag","_markers","_marker","_success","_ticks","_newSize","_destroy","_msg"];
UISleep 2;
(parseText (format["%4
%8", ExAd_Hint_Title_Color, ExAd_Hint_Title_Size, ExAd_Hint_Title_Font,STR_ExAd_HACKING_HINT_TITLE, ExAd_Hint_Msg_Color, ExAd_Hint_Msg_Size, ExAd_Hint_Msg_Font, STR_ExAd_HACKING_HINT_HACK_START])) remoteExec ["hint", -2];
@@ -86,7 +94,6 @@ _player removeItem "Exile_Item_Laptop";
_destroy = false;
_msg = if(_success && ((random 1) > ExAd_HACKING_FAILED_HACK))then{
- _flag = ((getPos _object) nearObjects ["Exile_Construction_Flag_Static", 150]) select 0;
_flag setVariable ["ExAd_HACKS_SUCCEEDED", (_flag getVariable ["ExAd_HACKS_SUCCEEDED",0]) + 1];
if(_object isKindOf "Exile_Construction_Flag_Static")then{
if(!isClass(configFile >> "CfgPatches" >> "ExAd_VG"))then{
@@ -113,20 +120,28 @@ _player removeItem "Exile_Item_Laptop";
_vehObj setPosATL _pos;
_vehObj lock 0;
- format[STR_ExAd_HACKING_NOTI_VG_SUCCESS, (getText(ConfigFile >> "CfgVehicles" >> typeOf _vehObj >> "displayName"))]
+ _displayName = getText(ConfigFile >> "CfgVehicles" >> typeOf _vehObj >> "displayName");
+ ["Hacking", format["Hack Successful: Territory - %1| Virtual Garage - %2(%3)",_flag getVariable ["ExileTerritoryName", "Unknown"], _displayName, _objId]] call ExAdServer_fnc_log;
+
+ format[STR_ExAd_HACKING_NOTI_VG_SUCCESS, _displayName]
}else{
+ ["Hacking", format["Hack Successful: Territory - %1| Virtual Garage - No Vehicle",_flag getVariable ["ExileTerritoryName", "Unknown"]]] call ExAdServer_fnc_log;
STR_ExAd_HACKING_NOTI_VG_NO_VEH
}
}
}else{
+ ["Hacking", format["Hack Successful: Territory - %1| Safe(%2) opened",_flag getVariable ["ExileTerritoryName", "Unknown"], _object getVariable ["ExileDatabaseID", -1]]] call ExAdServer_fnc_log;
+
_object setVariable ["ExileIsLocked",0,true];
STR_ExAd_HACKING_NOTI_SAFE_SUCCESS
}
}else{
if(_laptop getVariable ["ExAd_HACK_INTERUPTED",false])then{
+ ["Hacking", format["Hack Interupted: Territory - %1",_flag getVariable ["ExileTerritoryName", "Unknown"]]] call ExAdServer_fnc_log;
STR_ExAd_HACKING_NOTI_INTERUPTED
}else{
_destroy = true;
+ ["Hacking", format["Hack Failed: Territory - %1",_flag getVariable ["ExileTerritoryName", "Unknown"]]] call ExAdServer_fnc_log;
STR_ExAd_HACKING_NOTI_FAILED
}
};
diff --git a/@ExileServer/addons/exad_vg/Functions/fn_VGLoad.sqf b/@ExileServer/addons/exad_vg/Functions/fn_VGLoad.sqf
index f052709..7794999 100644
--- a/@ExileServer/addons/exad_vg/Functions/fn_VGLoad.sqf
+++ b/@ExileServer/addons/exad_vg/Functions/fn_VGLoad.sqf
@@ -1,4 +1,6 @@
/*
+ fn_VGLoad.sqf
+
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
@@ -12,7 +14,6 @@
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 ["_objVehNetId","_objVeh","_flagNetId","_flag","_objVehId","_flagId","_data","_extDB2Message","_vehList"];
@@ -21,7 +22,8 @@ _objId = [_this,0,"",[""]] call BIS_fnc_param;
_flagNetId = [_this,1,"",[""]] call BIS_fnc_param;
_playerNetId = [_this,2,"",[""]] call BIS_fnc_param;
_flag = objectFromNetId _flagNetId;
-_requestFrom = owner (objectFromNetId _playerNetId);
+_player = objectFromNetId _playerNetId;
+_requestFrom = owner _player;
_proceed = false;
_vehList = _flag getVariable ["ExAdVGVeh", []];
@@ -33,7 +35,7 @@ _vehList = _flag getVariable ["ExAdVGVeh", []];
}
}forEach _vehList;
-if(!_proceed)exitWith{[_requestFrom, "notificationRequest", ["Whoops", ["They vehicle is not available anymore"]]] call ExileServer_system_network_send_to};
+if(!_proceed)exitWith{[_requestFrom, "notificationRequest", ["Whoops", [STR_ExAd_VG_NOTI_NOT_AVAILABLE]]] call ExileServer_system_network_send_to};
_flag setVariable ["ExAdVGVeh", _vehList, true];
@@ -49,4 +51,6 @@ _pos = getPosATL _vehObj;
_pos set [2, (_pos select 2) + 0.1];
_vehObj setPosATL _pos;
+["VirtualGarage", format["Spawned: Player - %1(%2)|Vehicle - %3(%4)|",name _player, getPlayerUID _player, typeOf _vehObj, _objId]] call ExAdServer_fnc_log;
+
true
\ No newline at end of file
diff --git a/@ExileServer/addons/exad_vg/Functions/fn_VGStore.sqf b/@ExileServer/addons/exad_vg/Functions/fn_VGStore.sqf
index 8aa90a9..8b73cf8 100644
--- a/@ExileServer/addons/exad_vg/Functions/fn_VGStore.sqf
+++ b/@ExileServer/addons/exad_vg/Functions/fn_VGStore.sqf
@@ -22,8 +22,9 @@ _objVeh = objectFromNetId _objVehNetId;
_flagNetId = [_this,1,"",[""]] call BIS_fnc_param;
_flag = objectFromNetId _flagNetId;
_owner = owner _objVeh;
+_player = {if(owner _x == _owner)exitWith{_x}}forEach playableUnits;
-if!(_objVeh getVariable ["ExileIsPersistent", false])exitWith{[_requestFrom, "notificationRequest", ["Whoops", [STR_ExAd_VIRTUALGARAGE_NOTI_NOT_PERSISTENT]]] call ExileServer_system_network_send_to; false};
+if!(_objVeh getVariable ["ExileIsPersistent", false])exitWith{[_owner, "notificationRequest", ["Whoops", [STR_ExAd_VG_NOTI_NOT_PERSISTENT]]] call ExileServer_system_network_send_to; false};
if!(_objVeh setOwner 2)exitWith{format["Get out of the vehicle before storing it."] remoteExec ["hint", _owner]; false};
@@ -42,6 +43,8 @@ _objVehId = _objVeh getVariable ["ExileDatabaseID",-1];
_flagId = _flag getVariable ["ExileDatabaseID", -1];
if(_objVehId > -1 && _flagId > -1)then{
+ ["VirtualGarage", format["Store: Player - %1(%2)|Vehicle - %3(%4)|Reset gear - %5",name _player, getPlayerUID _player, typeOf _objVeh, _objVehId, str ExAd_VG_CLEAN_ON_STORE]] call ExAdServer_fnc_log;
+
_data = [_flagId, _objVehId];
_extDB2Message = ["loadVehToVG", _data] call ExileServer_util_extDB2_createMessage;
diff --git a/@ExileServer/addons/exad_vg/Functions/fn_requestVGDetailInfo.sqf b/@ExileServer/addons/exad_vg/Functions/fn_requestVGDetailInfo.sqf
index 9013e33..406ebe0 100644
--- a/@ExileServer/addons/exad_vg/Functions/fn_requestVGDetailInfo.sqf
+++ b/@ExileServer/addons/exad_vg/Functions/fn_requestVGDetailInfo.sqf
@@ -26,15 +26,21 @@ _ctrl = [_this,4,-1,[0]] call BIS_fnc_param;
_flag = objectFromNetId _flagNetId;
_requestFrom = owner (objectFromNetId _playerNetId);
-/*Check if vehicle is in flag - avoid cheaters fishing for pin codes*/
-
_data = format ["loadVehicle:%1", _objId] call ExileServer_system_database_query_selectSingle;
-_displayName = getText(ConfigFile >> "CfgVehicles" >> (_data select 1) >> "displayName");
-_pinCode = if(_streamFriendlyUI == 0)then{_data select 20}else{"XXXX"};
+if(count _data > 0)then{
+ _displayName = getText(ConfigFile >> "CfgVehicles" >> (_data select 1) >> "displayName");
+ _pinCode = if(_streamFriendlyUI == 0)then{_data select 20}else{"XXXX"};
+ _fuel = _data select 5;
+ _damage = _data select 6;
+ _texture = _data select 21;
+ _items = _data select 17;
+ _magazines = _data select 18;
+ _weapons = _data select 19;
-_text = format["%1
Pin code: %2
",_displayName, _pinCode];
+ _text = format[STR_ExAd_VG_APP_DETAILS, "
", _displayName, _pinCode, _fuel, _damage, _texture, _items, _magazines, _weapons];
-[_text,_ctrl] remoteExec ["ExAd_fnc_loadVGDetailView", _requestFrom];
+ [_text,_ctrl] remoteExec ["ExAd_fnc_loadVGDetailView", _requestFrom];
+};
true
\ No newline at end of file
diff --git a/BattlEye/scripts.txt b/BattlEye/scripts.txt
index 7208b43..292439c 100644
--- a/BattlEye/scripts.txt
+++ b/BattlEye/scripts.txt
@@ -1,5 +1,5 @@
eventHandler !="ExAd_ACTION_PARACHUTE_DETACH = (findDisplay 46) displayAddEventHandler ["KeyDown",{"
-compile !="call compile format[\"_messageParameters call ExAd_fnc_%1;\",_messageName]"
+compile !="call compile format[\"_messageParameters call ExAd_fnc_%1;\",_messageName]" !="call compile format['%1 = if(isLocalized \"%1\")then{localize \"%1\"}else{\"%3"
createVehicle !="_parachuteObject = createVehicle [\"Steerable_Parachute_F\", getPosATL player, [], 0, \"CAN_COLLIDE\"]"
addAction !="ExAd_ACTION_PARACHUTE = player addaction [format"
drawLine3D !="drawLine3D [cursorTarget modelToWorld ["
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 06fc04c..c8f1394 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,19 @@
#
-
# Changelog:
+## 160610 01:20 . v0.7.6
+###Fixed
+* Quick-fix - VG App scroll for stored list(Virtual Garage)
+* The configuration file could be reed after the postInit script (All) - IMPORTANT TO UPDATE ALL PLUGINS.
+
+###Added
+* Extra loggin functionality (All)
+* Progress bar height customizable (Grinding)
+* Added a lot of new custom UI Display texts - Check stringtabl.xml for new ones. (All)
+* Added vehicle details to VirtualGarage DetailsView (Virtual Garage)
+* Added function ExAd_fnc_territoryPlayerPresent, to see if a player with permissions for a specific flag is online (Core)
+* Added a feature so the server owner can decide if hacking should require a player with premissions to be online.(Hacking)
+
## 160510 21:00 . v0.7.5
###Fixed
* Syntax error in postInit.sqf (HaloParachute)
diff --git a/docs/Grinding/changelog.md b/docs/Grinding/changelog.md
index a9c1f81..f1a5aa5 100644
--- a/docs/Grinding/changelog.md
+++ b/docs/Grinding/changelog.md
@@ -1,15 +1,24 @@
-#VirtualGarage
+#Grinding
## Changelog:
-### 160510 16:00 . v0.7.3
+### v0.7.6
+####Fixed
+* The configuration file could be reed after the postInit script - IMPORTANT TO UPDATE ALL PLUGINS.
+
+###Added
+* Extra loggin functionality
+* Added a lot of new custom UI Display texts - Check stringtabl.xml for new ones.
+* Progress bar height customizable
+
+### v0.7.3
#### Fixed
* Declaration of un custamized variables
-### 160505 01:40 . v0.6.1
+### v0.6.1
#### Fixed
* Sound error for grinding, tmp fix, sound will work on Chernarus
-### 160502 23:15 . v0.6.0
+### v0.6.0
#### Added
* Grinding introduced
* Grinding battleye scripts
diff --git a/docs/Grinding/update.md b/docs/Grinding/update.md
index cff423e..8f32cb4 100644
--- a/docs/Grinding/update.md
+++ b/docs/Grinding/update.md
@@ -1,13 +1,17 @@
-#VirtualGarage
+#Grinding
## Instructions:
+
+### v0.7.6
+* Replace or merge "mpmissions\Exile.