diff --git a/addons/common/$PBOPREFIX$ b/addons/common/$PBOPREFIX$ new file mode 100644 index 0000000..c43bd6a --- /dev/null +++ b/addons/common/$PBOPREFIX$ @@ -0,0 +1 @@ +z\forge_client\addons\common \ No newline at end of file diff --git a/addons/common/CfgEventHandlers.hpp b/addons/common/CfgEventHandlers.hpp new file mode 100644 index 0000000..78b189a --- /dev/null +++ b/addons/common/CfgEventHandlers.hpp @@ -0,0 +1,19 @@ +class Extended_PreStart_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preStart)); + }; +}; + +class Extended_PreInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_preInit)); + serverInit = QUOTE(call COMPILE_FILE(XEH_preInit_server)); + }; +}; + +class Extended_PostInit_EventHandlers { + class ADDON { + init = QUOTE(call COMPILE_FILE(XEH_postInit)); + clientInit = QUOTE(call COMPILE_FILE(XEH_postInit_client)); + }; +}; \ No newline at end of file diff --git a/addons/common/XEH_PREP.hpp b/addons/common/XEH_PREP.hpp new file mode 100644 index 0000000..909cabc --- /dev/null +++ b/addons/common/XEH_PREP.hpp @@ -0,0 +1,3 @@ +PREP(actorStateGet); +PREP(actorStateSet); +PREP(getPlayer); \ No newline at end of file diff --git a/addons/common/XEH_postInit.sqf b/addons/common/XEH_postInit.sqf new file mode 100644 index 0000000..84f2529 --- /dev/null +++ b/addons/common/XEH_postInit.sqf @@ -0,0 +1 @@ +#include "script_component.hpp" \ No newline at end of file diff --git a/addons/common/XEH_postInit_client.sqf b/addons/common/XEH_postInit_client.sqf new file mode 100644 index 0000000..84f2529 --- /dev/null +++ b/addons/common/XEH_postInit_client.sqf @@ -0,0 +1 @@ +#include "script_component.hpp" \ No newline at end of file diff --git a/addons/common/XEH_preInit.sqf b/addons/common/XEH_preInit.sqf new file mode 100644 index 0000000..d7d59fe --- /dev/null +++ b/addons/common/XEH_preInit.sqf @@ -0,0 +1,8 @@ +#include "script_component.hpp" +ADDON = false; + +PREP_RECOMPILE_START; +#include "XEH_PREP.hpp" +PREP_RECOMPILE_END; + +ADDON = true; \ No newline at end of file diff --git a/addons/common/XEH_preInit_server.sqf b/addons/common/XEH_preInit_server.sqf new file mode 100644 index 0000000..84f2529 --- /dev/null +++ b/addons/common/XEH_preInit_server.sqf @@ -0,0 +1 @@ +#include "script_component.hpp" \ No newline at end of file diff --git a/addons/common/XEH_preStart.sqf b/addons/common/XEH_preStart.sqf new file mode 100644 index 0000000..7dca066 --- /dev/null +++ b/addons/common/XEH_preStart.sqf @@ -0,0 +1,2 @@ +#include "script_component.hpp" +#include "XEH_PREP.hpp" \ No newline at end of file diff --git a/addons/common/config.cpp b/addons/common/config.cpp new file mode 100644 index 0000000..338b901 --- /dev/null +++ b/addons/common/config.cpp @@ -0,0 +1,16 @@ +#include "script_component.hpp" + +class CfgPatches { + class ADDON { + name = COMPONENT_NAME; + units[] = {}; + weapons[] = {}; + requiredVersion = REQUIRED_VERSION; + requiredAddons[] = {"forge_client_main"}; + authors[] = {"J. Schmidt", "Creedcoder"}; + author = "IDSolutions"; + VERSION_CONFIG; + }; +}; + +#include "CfgEventHandlers.hpp" \ No newline at end of file diff --git a/addons/common/functions/fnc_actorStateGet.sqf b/addons/common/functions/fnc_actorStateGet.sqf new file mode 100644 index 0000000..86c570a --- /dev/null +++ b/addons/common/functions/fnc_actorStateGet.sqf @@ -0,0 +1,43 @@ +#include "..\script_component.hpp" + +/* + * Author: IDSolutions + * Gets the current state of a player + * + * Arguments: + * 0: Player + * + * Return Value: + * Player State + * + * Example: + * _state = [player] call forge_client_common_fnc_actorStateGet + * + * Public: No + */ + +params [["_player", objNull, [objNull]]]; + +private _loadout = getUnitLoadout _player; +private _pos = getPosASL _player; +private _dir = getDir _player; +private _stance = stance _player; +private _phone = GETVAR(_player,FORGE_Phone,QUOTE(000-000-0000)); +private _email = GETVAR(_player,FORGE_Email,QUOTE(player@example.com)); +private _bank = GETVAR(_player,FORGE_Bank,0); +private _cash = GETVAR(_player,FORGE_Cash,0); +private _state = lifeState _player; + +private _hash = createHashMap; + +_hash set ["loadout", _loadout]; +_hash set ["position", _pos]; +_hash set ["direction", _dir]; +_hash set ["stance", _stance]; +_hash set ["phone", _phone]; +_hash set ["email", _email]; +_hash set ["bank", _bank]; +_hash set ["cash", _cash]; +_hash set ["state", _state]; + +_hash \ No newline at end of file diff --git a/addons/common/functions/fnc_actorStateSet.sqf b/addons/common/functions/fnc_actorStateSet.sqf new file mode 100644 index 0000000..9928f5b --- /dev/null +++ b/addons/common/functions/fnc_actorStateSet.sqf @@ -0,0 +1,65 @@ +#include "..\script_component.hpp" + +/* + * Author: IDSolutions + * Sets the state of a player + * + * Arguments: + * 0: Player + * 1: Data + * + * Return Value: + * Unit State + * + * Example: + * [player, _data] call forge_client_common_fnc_actorStateSet + * + * Public: No + */ + +params [["_player", objNull, [objNull]], ["_data", "", [""]]]; +private _hash = createHashMap; + +if (isNull _player || _data isEqualTo "") exitWith { + diag_log text format ["[FORGE:Player:Actor] Invalid player or data: %1", _player]; +}; + +(parseSimpleArray _data) params ["_uid", "_loadout", "_pos", "_dir", "_stance", "_email", "_phone", "_bank", "_cash", "_state"]; + +_player setUnitLoadout _loadout; + +if !(isNil "_pos") then { + _player setPosASL _pos; + + private _pAlt = ((getPosATLVisual player) select 2); + private _pVelZ = ((velocity player) select 2); + if (_pAlt > 5 && _pVelZ < 0) then { + player setVelocity [0, 0, 0]; + player setPosATL [((getPosATLVisual player) select 0), ((getPosATLVisual player) select 1), 1]; + hint "You logged off mid air. You were moved to a safe position on the ground."; + }; +}; + +if !(isNil "_dir") then { + _player setDir _dir; +}; + +_player playAction _stance; +SETPVAR(_player,FORGE_Phone,_phone); +SETPVAR(_player,FORGE_Email,_email); +SETPVAR(_player,FORGE_Bank,_bank); +SETPVAR(_player,FORGE_Cash,_cash); +SETPVAR(_player,FORGE_State,_state); + +_hash set ["uid", _uid]; +_hash set ["loadout", _loadout]; +_hash set ["position", _pos]; +_hash set ["direction", _dir]; +_hash set ["stance", _stance]; +_hash set ["phone", _phone]; +_hash set ["email", _email]; +_hash set ["bank", _bank]; +_hash set ["cash", _cash]; +_hash set ["state", _state]; + +_hash \ No newline at end of file diff --git a/addons/common/functions/fnc_getPlayer.sqf b/addons/common/functions/fnc_getPlayer.sqf new file mode 100644 index 0000000..445972c --- /dev/null +++ b/addons/common/functions/fnc_getPlayer.sqf @@ -0,0 +1,27 @@ +#include "..\script_component.hpp" + +/* + * Author: IDSolutions + * Gets a player object by UID. + * + * Arguments: + * 0: Player UID + * + * Return Value: + * Player object or objNull if not found + * + * Example: + * ["76561198012345678"] call forge_client_common_fnc_getPlayer + * + * Public: Yes + */ + +params ["_uid"]; + +private _player = objNull; + +{ + if ((getPlayerUID _x) isEqualTo _uid) exitWith { _player = _x; }; +} forEach allPlayers; + +_player \ No newline at end of file diff --git a/addons/common/functions/fnc_vehicleStateGet.sqf b/addons/common/functions/fnc_vehicleStateGet.sqf new file mode 100644 index 0000000..e69de29 diff --git a/addons/common/functions/fnc_vehicleStateSet.sqf b/addons/common/functions/fnc_vehicleStateSet.sqf new file mode 100644 index 0000000..e69de29 diff --git a/addons/common/script_component.hpp b/addons/common/script_component.hpp new file mode 100644 index 0000000..b78be45 --- /dev/null +++ b/addons/common/script_component.hpp @@ -0,0 +1,16 @@ +#define COMPONENT common +#define COMPONENT_BEAUTIFIED Common +#include "\z\forge_client\addons\main\script_mod.hpp" + +// #define DEBUG_MODE_FULL +// #define DISABLE_COMPILE_CACHE + +#ifdef DEBUG_ENABLED_COMMON + #define DEBUG_MODE_FULL +#endif + +#ifdef DEBUG_SETTINGS_COMMON + #define DEBUG_SETTINGS DEBUG_SETTINGS_COMMON +#endif + +#include "\z\forge_client\addons\main\script_macros.hpp" \ No newline at end of file