- Route bank sync payloads through the client bridge - Refresh account state without rebuilding the full session - Split CAD dispatcher UI into modular source files
201 lines
7.9 KiB
Plaintext
201 lines
7.9 KiB
Plaintext
#include "..\script_component.hpp"
|
|
|
|
/*
|
|
* File: fnc_initMEconomyStore.sqf
|
|
* Author: IDSolutions
|
|
* Date: 2025-12-20
|
|
* Last Update: 2026-02-13
|
|
* Public: No
|
|
*
|
|
* Description:
|
|
* No description added yet.
|
|
*
|
|
* Parameter(s):
|
|
* N/A
|
|
*
|
|
* Returns:
|
|
* Something [BOOL]
|
|
*
|
|
* Example(s):
|
|
* [parameter] call forge_x_component_fnc_myFunction
|
|
*/
|
|
|
|
#pragma hemtt ignore_variables ["_self"]
|
|
GVAR(MEconomyStore) = createHashMapObject [[
|
|
["#type", "IMedEconomy"],
|
|
["#create", {
|
|
_self set ["mSpawns", createHashMap];
|
|
|
|
GVAR(occupancyTriggers) = [];
|
|
["INFO", "Medical Store Initialized!", nil, nil] call EFUNC(common,log);
|
|
}],
|
|
["init", {
|
|
private _mSpawns = (_self get "mSpawns");
|
|
private _prefix = "med_spawn";
|
|
|
|
for "_i" from 0 to 10 do {
|
|
private _var = if (_i == 0) then { _prefix } else { format ["%1_%2", _prefix, _i] };
|
|
private _obj = missionNamespace getVariable [_var, objNull];
|
|
|
|
if (!isNull _obj) then {
|
|
_mSpawns set [_var, [_obj, (getPos _obj)]];
|
|
};
|
|
};
|
|
|
|
if (_mSpawns isEqualTo createHashMap) then {
|
|
["WARNING", "No medical spawns found in the world.", nil, nil] call EFUNC(common,log);
|
|
} else {
|
|
{
|
|
_y params ["_obj", "_pos"];
|
|
private _trigger = createTrigger ["EmptyDetector", _pos];
|
|
|
|
_trigger setVariable ["isOccupied", false, true];
|
|
_trigger setVariable ["linkedObject", _obj, true];
|
|
_trigger setTriggerArea [5, 5, 0, true, 5];
|
|
_trigger setTriggerActivation ["ANYPLAYER", "PRESENT", true];
|
|
_trigger setTriggerStatements [
|
|
"{ (_x isKindOf 'CAManBase') && _x distance thisTrigger < 0.5 } count thisList > 0",
|
|
"thisTrigger setVariable ['isOccupied', true, true];",
|
|
"thisTrigger setVariable ['isOccupied', false, true];"
|
|
];
|
|
|
|
GVAR(occupancyTriggers) pushBack _trigger;
|
|
} forEach _mSpawns;
|
|
};
|
|
}],
|
|
["onHealed", {
|
|
params [["_unit", objNull, [objNull]]];
|
|
|
|
if (isNull _unit) exitWith { ["WARNING", format ["Invalid unit provided: %1", (name _unit)], nil, nil] call EFUNC(common,log); };
|
|
|
|
private _uid = getPlayerUID _unit;
|
|
private _account = EGVAR(bank,BankStore) call ["get", [_uid, ""]];
|
|
if (_account isEqualTo createHashMap) then {
|
|
_account = EGVAR(bank,BankStore) call ["init", [_uid]];
|
|
};
|
|
|
|
if (_account isEqualTo createHashMap) exitWith { ["ERROR", format ["No account found for %1. UID: %2", (name _unit), _uid], nil, nil] call EFUNC(common,log); };
|
|
|
|
private _bank = _account get "bank";
|
|
private _cash = _account get "cash";
|
|
|
|
private _healCost = 100;
|
|
private _newBalance = 0;
|
|
|
|
if (_bank < _healCost && _cash < _healCost) exitWith {
|
|
[CRPC(notifications,recieveNotification), ["danger", "Insufficient Funds", format ["Insufficient funds for %1. Bank: $%2, Cash: $%3, Required: $%4", (name _unit), [_bank] call EFUNC(common,formatNumber), [_cash] call EFUNC(common,formatNumber), [_healCost] call EFUNC(common,formatNumber)]], _unit] call CFUNC(targetEvent);
|
|
};
|
|
|
|
if (_bank >= _healCost) then {
|
|
_newBalance = _bank - _healCost;
|
|
_account set ["bank", _newBalance];
|
|
} else {
|
|
_newBalance = _cash - _healCost;
|
|
_account set ["cash", _newBalance];
|
|
};
|
|
|
|
[CRPC(actor,onActorHealed), [], _unit] call CFUNC(targetEvent);
|
|
}],
|
|
["onRespawn", {
|
|
params [["_unit", objNull, [objNull]], ["_corpse", objNull, [objNull]], ["_uid", "", [""]]];
|
|
|
|
private _loadout = [[], [], [], ["U_BG_Guerrilla_6_1", []], [], [], "", "", [], ["", "", "", "", "", ""]];
|
|
private _medSpawn = (GVAR(occupancyTriggers) select { !(GETVAR(_x,isOccupied,false)) }) param [0, objNull];
|
|
private _medSpawnObj = _medSpawn getVariable ["linkedObject", objNull];
|
|
private _medSpawnPos = (getPosATL _medSpawnObj) vectorAdd [0.05, -0.125, 0.45];
|
|
private _medSpawnDir = getDir _medSpawnObj;
|
|
|
|
deleteVehicle _corpse;
|
|
|
|
private _player = [_uid] call EFUNC(common,getPlayer);
|
|
[CRPC(actor,onActorRespawn), [_loadout, _medSpawnPos, _medSpawnDir], _player] call CFUNC(targetEvent);
|
|
}],
|
|
["onKilled", {
|
|
params [["_unit", objNull, [objNull]]];
|
|
|
|
private _unitPos = getPosATL _unit;
|
|
private _bodyBag = createVehicle ["forge_bodyBag", _unitPos, [], 0, "NONE"];
|
|
|
|
_self call ["saveWeapons", [_unit]];
|
|
_self call ["moveInventory", [_unit, _bodyBag]];
|
|
}],
|
|
["saveWeapons", {
|
|
params [["_unit", objNull, [objNull]]];
|
|
|
|
private _droppedWeapons = [];
|
|
private _droppedItems = [];
|
|
|
|
_droppedWeapons pushBack (primaryWeapon _unit);
|
|
_droppedItems append (primaryWeaponItems _unit);
|
|
_droppedItems append (primaryWeaponMagazine _unit);
|
|
_droppedWeapons pushBack (secondaryWeapon _unit);
|
|
_droppedItems append (secondaryWeaponItems _unit);
|
|
_droppedItems append (secondaryWeaponMagazine _unit);
|
|
|
|
if (isPlayer _unit) then { _droppedItems pushBack (goggles _unit); };
|
|
if (currentWeapon _unit isEqualTo handgunWeapon _unit) then {
|
|
_droppedWeapons pushBack (handgunWeapon _unit);
|
|
_droppedItems append (handgunItems _unit);
|
|
_droppedItems append (handgunMagazine _unit);
|
|
};
|
|
|
|
_unit setVariable [QGVAR(droppedWeapons), _droppedWeapons, true];
|
|
_unit setVariable [QGVAR(droppedItems), _droppedItems, true];
|
|
}],
|
|
["moveInventory", {
|
|
params [["_unit", objNull, [objNull]], ["_bodyBag", objNull, [objNull]]];
|
|
|
|
private _items = [];
|
|
private _weapons = [];
|
|
private _backpack = backpack _unit;
|
|
private _nearHolders = _bodyBag nearObjects ["WeaponHolderSimulated", 3];
|
|
|
|
_items pushBack (headgear _unit);
|
|
_items pushBack (uniform _unit);
|
|
_items append (uniformItems _unit);
|
|
_items pushBack (vest _unit);
|
|
_items append (vestItems _unit);
|
|
_items append (backpackItems _unit);
|
|
_weapons pushBack (primaryWeapon _unit);
|
|
_items append (primaryWeaponItems _unit);
|
|
_items append (primaryWeaponMagazine _unit);
|
|
_weapons pushBack (secondaryWeapon _unit);
|
|
_items append (secondaryWeaponItems _unit);
|
|
_items append (secondaryWeaponMagazine _unit);
|
|
_weapons pushBack (handgunWeapon _unit);
|
|
_items append (handgunItems _unit);
|
|
_items append (handgunMagazine _unit);
|
|
_weapons append (_unit getVariable [QGVAR(droppedWeapons), []]);
|
|
_items append (_unit getVariable [QGVAR(droppedItems), []]);
|
|
_items append (assignedItems _unit);
|
|
_items pushBack (_unit call CFUNC(binocularMagazine));
|
|
|
|
if !((goggles _unit ) in (_unit getVariable [QGVAR(droppedItems), []])) then { _items pushBack (goggles _unit); };
|
|
|
|
_items = _items select { _x isNotEqualTo "" };
|
|
_weapons = _weapons select { _x isNotEqualTo "" };
|
|
|
|
{ _bodyBag addItemCargoGlobal [_x, 1] } forEach _items;
|
|
|
|
{
|
|
private _weaponNonPresent = [_x] call CFUNC(getNonPresetClass);
|
|
if (_weaponNonPresent == "") then { _weaponNonPresent = _x; };
|
|
_bodyBag addWeaponCargoGlobal [_weaponNonPresent, 1];
|
|
} forEach _weapons;
|
|
|
|
if (_backpack isNotEqualTo "") then {
|
|
private _backpackNonPresent = [_backpack, "CfgVehicles"] call CFUNC(getNonPresetClass);
|
|
if (_backpackNonPresent == "") then { _backpackNonPresent = _backpack; };
|
|
_bodyBag addItemCargoGlobal [_backpackNonPresent, 1];
|
|
};
|
|
|
|
{
|
|
private _holderWeapons = ((getWeaponCargo _x) select 0) select { _x in _weapons };
|
|
if (_holderWeapons isNotEqualTo []) then { deleteVehicle _x; };
|
|
} forEach _nearHolders;
|
|
}]
|
|
]];
|
|
|
|
SETMVAR(FORGE_MEconomyStore,GVAR(MEconomyStore));
|
|
GVAR(MEconomyStore)
|