Compare commits
2 Commits
65d9154c09
...
0ed1bc3a19
Author | SHA1 | Date | |
---|---|---|---|
![]() |
0ed1bc3a19 | ||
![]() |
90476345db |
@ -1,6 +1,5 @@
|
|||||||
PREP(adminRefresh);
|
PREP(adminRefresh);
|
||||||
PREP(handleTransfer);
|
PREP(handleTransfer);
|
||||||
PREP(initAdmin);
|
|
||||||
PREP(openAdmin);
|
PREP(openAdmin);
|
||||||
PREP(sendMessage);
|
PREP(sendMessage);
|
||||||
PREP(updatePaygrade);
|
PREP(updatePaygrade);
|
@ -1,96 +1 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
[QGVAR(handleEvents), {
|
|
||||||
params ["_control", "_isConfirmDialog", "_message"];
|
|
||||||
|
|
||||||
diag_log format ["[FORGE: Admin] Received event: %1", _message];
|
|
||||||
|
|
||||||
_message = fromJSON _message;
|
|
||||||
private _event = _message get "event";
|
|
||||||
private _data = _message get "data";
|
|
||||||
|
|
||||||
switch (_event) do {
|
|
||||||
case "REQUEST_PLAYER_DATA": {
|
|
||||||
private _playerData = createHashMap;
|
|
||||||
private _playerList = [];
|
|
||||||
|
|
||||||
{
|
|
||||||
private _player = _x;
|
|
||||||
private _uid = getPlayerUID _player;
|
|
||||||
private _name = name _player;
|
|
||||||
private _paygrade = GETVAR(_player,FORGE_PayGrade,QUOTE(E1));
|
|
||||||
private _funds = GETVAR(_player,FORGE_Bank,0);
|
|
||||||
|
|
||||||
private _playerInfo = createHashMapFromArray [
|
|
||||||
["uid", _uid],
|
|
||||||
["name", _name],
|
|
||||||
["paygrade", _paygrade],
|
|
||||||
["funds", _funds],
|
|
||||||
["side", str (side _player)]
|
|
||||||
];
|
|
||||||
|
|
||||||
_playerList pushBack _playerInfo;
|
|
||||||
} forEach allPlayers;
|
|
||||||
|
|
||||||
_playerData set ["players", _playerList];
|
|
||||||
_control ctrlWebBrowserAction ["ExecJS", format ["handlePlayerDataRequest(%1)", (toJSON _playerList)]];
|
|
||||||
};
|
|
||||||
case "REQUEST_PAYGRADE_DATA": {
|
|
||||||
private _payGrades = (missionConfigFile >> "CfgPaygrades" >> "payGrades") call BIS_fnc_getCfgData;
|
|
||||||
private _paygradeData = createHashMap;
|
|
||||||
private _paygradeList = [];
|
|
||||||
|
|
||||||
{
|
|
||||||
private _paygradeInfo = createHashMapFromArray [
|
|
||||||
["paygrade", _x select 0],
|
|
||||||
["bonus", _x select 1]
|
|
||||||
];
|
|
||||||
|
|
||||||
_paygradeList pushBack _paygradeInfo;
|
|
||||||
} forEach _payGrades;
|
|
||||||
|
|
||||||
_paygradeData set ["paygrades", _paygradeList];
|
|
||||||
_control ctrlWebBrowserAction ["ExecJS", format ["handlePaygradeDataRequest(%1)", (toJSON _paygradeList)]];
|
|
||||||
};
|
|
||||||
case "BROADCAST_MESSAGE": {
|
|
||||||
_data params ["_uid", "_message"];
|
|
||||||
|
|
||||||
if ((isNil "_message") || {_message isEqualTo ""}) exitWith { hintSilent "Message cannot be empty!"; };
|
|
||||||
|
|
||||||
["forge_server_admin_handleEvents", ["sendMessage", [_uid, _message]]] call CFUNC(serverEvent);
|
|
||||||
};
|
|
||||||
case "SEND_MESSAGE": {
|
|
||||||
_data params ["_uid", "_message"];
|
|
||||||
|
|
||||||
if ((isNil "_uid") || {_uid isEqualTo ""}) exitWith { hintSilent "You did not select a player!"; };
|
|
||||||
|
|
||||||
["forge_server_admin_handleEvents", ["sendMessage", [_uid, _message]]] call CFUNC(serverEvent);
|
|
||||||
};
|
|
||||||
case "UPDATE_PAYGRADE": {
|
|
||||||
private _uid = _data select 0;
|
|
||||||
private _paygrade = _data select 1;
|
|
||||||
|
|
||||||
if ((isNil "_uid") || {_uid isEqualTo ""}) exitWith { hintSilent "You did not select a player!"; };
|
|
||||||
|
|
||||||
["forge_server_admin_handleEvents", ["updatePaygrade", [_uid, _paygrade]]] call CFUNC(serverEvent);
|
|
||||||
};
|
|
||||||
case "HANDLE_TRANSFER": {
|
|
||||||
private _condition = _data select 0;
|
|
||||||
private _amount = _data select 1;
|
|
||||||
private _uid = _data select 2;
|
|
||||||
|
|
||||||
["forge_server_admin_handleEvents", ["handleTransfer", [_condition, _amount, _uid]]] call CFUNC(serverEvent);
|
|
||||||
};
|
|
||||||
case "ADVANCE_ALL": {
|
|
||||||
private _amount = _data select 0;
|
|
||||||
|
|
||||||
["forge_server_admin_handleEvents", ["advanceAll", [_amount]]] call CFUNC(serverEvent);
|
|
||||||
};
|
|
||||||
case "HANDLE_PAYDAY": {
|
|
||||||
["forge_server_admin_handleEvents", ["handlePayday"]] call CFUNC(serverEvent);
|
|
||||||
};
|
|
||||||
default {
|
|
||||||
diag_log format ["[FORGE: Admin] Unhandled event: %1", _event];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}] call CFUNC(addEventHandler);
|
|
@ -1 +1,93 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
[QGVAR(handleEvents), {
|
||||||
|
params ["_control", "_isConfirmDialog", "_message"];
|
||||||
|
|
||||||
|
diag_log format ["[FORGE::Client::Admin::XEH_postInit] Received event: %1", _message];
|
||||||
|
|
||||||
|
_message = fromJSON _message;
|
||||||
|
private _event = _message get "event";
|
||||||
|
private _data = _message get "data";
|
||||||
|
|
||||||
|
switch (_event) do {
|
||||||
|
case "REQUEST::PLAYER::DATA": {
|
||||||
|
private _playerData = createHashMap;
|
||||||
|
private _playerList = [];
|
||||||
|
|
||||||
|
{
|
||||||
|
private _player = _x;
|
||||||
|
private _uid = getPlayerUID _player;
|
||||||
|
private _name = name _player;
|
||||||
|
private _paygrade = GETVAR(_player,FORGE_PayGrade,QUOTE(E1)); //TODO: Implement paygrade from server
|
||||||
|
private _funds = GETVAR(_player,FORGE_Bank,0); //TODO: Implement funds from server
|
||||||
|
|
||||||
|
private _playerInfo = createHashMapFromArray [
|
||||||
|
["uid", _uid],
|
||||||
|
["name", _name],
|
||||||
|
["paygrade", _paygrade],
|
||||||
|
["funds", _funds],
|
||||||
|
["side", str (side _player)]
|
||||||
|
];
|
||||||
|
|
||||||
|
_playerList pushBack _playerInfo;
|
||||||
|
} forEach allPlayers;
|
||||||
|
|
||||||
|
_playerData set ["players", _playerList];
|
||||||
|
_control ctrlWebBrowserAction ["ExecJS", format ["handlePlayerDataRequest(%1)", (toJSON _playerList)]];
|
||||||
|
};
|
||||||
|
case "REQUEST::PAYGRADE::DATA": {
|
||||||
|
private _payGrades = (missionConfigFile >> "CfgPaygrades" >> "payGrades") call BIS_fnc_getCfgData;
|
||||||
|
private _paygradeData = createHashMap;
|
||||||
|
private _paygradeList = [];
|
||||||
|
|
||||||
|
{
|
||||||
|
private _paygradeInfo = createHashMapFromArray [
|
||||||
|
["paygrade", _x select 0],
|
||||||
|
["bonus", _x select 1]
|
||||||
|
];
|
||||||
|
|
||||||
|
_paygradeList pushBack _paygradeInfo;
|
||||||
|
} forEach _payGrades;
|
||||||
|
|
||||||
|
_paygradeData set ["paygrades", _paygradeList];
|
||||||
|
_control ctrlWebBrowserAction ["ExecJS", format ["handlePaygradeDataRequest(%1)", (toJSON _paygradeList)]];
|
||||||
|
};
|
||||||
|
case "BROADCAST::MESSAGE": {
|
||||||
|
_data params ["_uid", "_message"];
|
||||||
|
|
||||||
|
if ((isNil "_message") || {_message isEqualTo ""}) exitWith { systemChat "Message cannot be empty!"; };
|
||||||
|
|
||||||
|
["forge_server_admin_handleEvents", ["ADMIN::SEND::MESSAGE", [_uid, _message]]] call CFUNC(serverEvent);
|
||||||
|
};
|
||||||
|
case "SEND::MESSAGE": {
|
||||||
|
_data params ["_uid", "_message"];
|
||||||
|
|
||||||
|
if ((isNil "_uid") || {_uid isEqualTo ""}) exitWith { systemChat "You did not select a player!"; };
|
||||||
|
|
||||||
|
["forge_server_admin_handleEvents", ["ADMIN::SEND::MESSAGE", [_uid, _message]]] call CFUNC(serverEvent);
|
||||||
|
};
|
||||||
|
case "UPDATE::PAYGRADE": {
|
||||||
|
_data params ["_uid", "_paygrade"];
|
||||||
|
|
||||||
|
if ((isNil "_uid") || {_uid isEqualTo ""}) exitWith { systemChat "You did not select a player!"; };
|
||||||
|
|
||||||
|
["forge_server_admin_handleEvents", ["ADMIN::UPDATE::PAYGRADE", [_uid, _paygrade]]] call CFUNC(serverEvent);
|
||||||
|
};
|
||||||
|
case "HANDLE::TRANSFER": {
|
||||||
|
_data params ["_condition", "_amount", "_uid"];
|
||||||
|
|
||||||
|
["forge_server_admin_handleEvents", ["ADMIN::TRANSFER", [_condition, _amount, _uid]]] call CFUNC(serverEvent);
|
||||||
|
};
|
||||||
|
case "ADVANCE::ALL": {
|
||||||
|
_data params ["_amount"];
|
||||||
|
|
||||||
|
["forge_server_admin_handleEvents", ["ADMIN::ADVANCE::ALL", [_amount]]] call CFUNC(serverEvent);
|
||||||
|
};
|
||||||
|
case "HANDLE::PAYDAY": {
|
||||||
|
["forge_server_admin_handleEvents", ["ADMIN::PAYDAY"]] call CFUNC(serverEvent);
|
||||||
|
};
|
||||||
|
default {
|
||||||
|
diag_log format ["[FORGE::Client::Admin::XEH_postInit] Unhandled event: %1", _event];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}] call CFUNC(addEventHandler);
|
@ -33,8 +33,8 @@ private _index = lbCurSel _list;
|
|||||||
private _uid = _list lbData _index;
|
private _uid = _list lbData _index;
|
||||||
private _amount = round (parseNumber (ctrlText 2023005));
|
private _amount = round (parseNumber (ctrlText 2023005));
|
||||||
|
|
||||||
if (_condition in ["advance", "deduct"] && ((isNil "_uid") || { _uid isEqualTo "" })) exitWith { hint "You did not select a player!"; };
|
if ({_condition in ["advance", "deduct"]} && ((isNil "_uid") || { _uid isEqualTo "" })) exitWith { hint "You did not select a player!"; };
|
||||||
|
|
||||||
["forge_server_admin_handleEvents", ["handleTransfer", [_condition, _amount, _uid]]] call CFUNC(serverEvent);
|
["forge_server_admin_handleEvents", ["ADMIN::TRANSFER", [_condition, _amount, _uid]]] call CFUNC(serverEvent);
|
||||||
|
|
||||||
ctrlSetText [2023005, ""];
|
ctrlSetText [2023005, ""];
|
@ -1,37 +0,0 @@
|
|||||||
#include "..\script_component.hpp"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Function: forge_client_admin_fnc_initAdmin
|
|
||||||
* Author: IDSolutions
|
|
||||||
*
|
|
||||||
* [Description]
|
|
||||||
* Initializes the admin menu.
|
|
||||||
*
|
|
||||||
* Arguments:
|
|
||||||
* None
|
|
||||||
*
|
|
||||||
* Return Value:
|
|
||||||
* None
|
|
||||||
*
|
|
||||||
* Examples:
|
|
||||||
* None
|
|
||||||
*
|
|
||||||
* Public: No
|
|
||||||
*/
|
|
||||||
|
|
||||||
{
|
|
||||||
private _configName = configName(_x);
|
|
||||||
private _className = (missionConfigFile >> "CfgCpofs" >> "cpofs" >> _configName >> "className") call BFUNC(getCfgData);
|
|
||||||
private _pos = (missionConfigFile >> "CfgCpofs" >> "cpofs" >> _configName >> "pos") call BFUNC(getCfgData);
|
|
||||||
private _dir = (missionConfigFile >> "CfgCpofs" >> "cpofs" >> _configName >> "dir") call BFUNC(getCfgData);
|
|
||||||
|
|
||||||
private _cpof = createSimpleObject [_className, [0, 0, 0]];
|
|
||||||
|
|
||||||
_cpof setPosATL _pos;
|
|
||||||
_cpof setDir _dir;
|
|
||||||
_cpof allowDamage false;
|
|
||||||
_cpof setVariable ["isCPOF", true, true];
|
|
||||||
|
|
||||||
diag_log text format ["[FORGE Admin] ClassName: '%1' Pos: '%2' Dir: '%3'", _className, _pos, _dir];
|
|
||||||
|
|
||||||
} forEach ("true" configClasses (missionConfigFile >> "CfgCpofs" >> "cpofs"));
|
|
@ -1,11 +1,8 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function: forge_client_admin_fnc_openAdmin
|
|
||||||
* Author: IDSolutions
|
* Author: IDSolutions
|
||||||
*
|
* Opens the admin dialog.
|
||||||
* [Description]
|
|
||||||
* Opens the admin menu.
|
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* None
|
* None
|
||||||
@ -13,8 +10,8 @@
|
|||||||
* Return Value:
|
* Return Value:
|
||||||
* None
|
* None
|
||||||
*
|
*
|
||||||
* Examples:
|
* Example:
|
||||||
* None
|
* [] call forge_client_admin_fnc_openAdmin;
|
||||||
*
|
*
|
||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
|
@ -30,8 +30,6 @@ private _message = ctrlText _control;
|
|||||||
|
|
||||||
if ((isNil "_uid") || {_uid isEqualTo ""}) exitWith { hintSilent "You did not select a player!"; };
|
if ((isNil "_uid") || {_uid isEqualTo ""}) exitWith { hintSilent "You did not select a player!"; };
|
||||||
|
|
||||||
["forge_server_admin_handleEvents", ["sendMessage", [_uid, _message]]] call CFUNC(serverEvent);
|
["forge_server_admin_handleEvents", ["ADMIN::SEND::MESSAGE", [_uid, _message]]] call CFUNC(serverEvent);
|
||||||
|
|
||||||
hintSilent format ["Message sent to UID %1: %2", _uid, _message];
|
|
||||||
|
|
||||||
["dummy"] call FUNC(adminRefresh);
|
["dummy"] call FUNC(adminRefresh);
|
@ -32,6 +32,6 @@ private _paygrade = _rankData select 0;
|
|||||||
|
|
||||||
if ((isNil "_uid") || {_uid isEqualTo ""}) exitWith { hintSilent "You did not select a player!" };
|
if ((isNil "_uid") || {_uid isEqualTo ""}) exitWith { hintSilent "You did not select a player!" };
|
||||||
|
|
||||||
["forge_server_admin_handleEvents", ["updatePaygrade", [_uid, _paygrade]]] call CFUNC(serverEvent);
|
["forge_server_admin_handleEvents", ["ADMIN::UPDATE::PAYGRADE", [_uid, _paygrade]]] call CFUNC(serverEvent);
|
||||||
|
|
||||||
["dummy"] call FUNC(adminRefresh);
|
["dummy"] call FUNC(adminRefresh);
|
@ -46,7 +46,7 @@ function initializeAdmin() {
|
|||||||
*/
|
*/
|
||||||
function requestPlayerData() {
|
function requestPlayerData() {
|
||||||
const message = {
|
const message = {
|
||||||
event: "REQUEST_PLAYER_DATA",
|
event: "REQUEST::PLAYER::DATA",
|
||||||
data: {}
|
data: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ function requestPlayerData() {
|
|||||||
*/
|
*/
|
||||||
function requestPaygradeData() {
|
function requestPaygradeData() {
|
||||||
const message = {
|
const message = {
|
||||||
event: "REQUEST_PAYGRADE_DATA",
|
event: "REQUEST::PAYGRADE::DATA",
|
||||||
data: {}
|
data: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -286,7 +286,7 @@ function updatePaygrade(uid, isPromotion) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const message = {
|
const message = {
|
||||||
event: "UPDATE_PAYGRADE",
|
event: "UPDATE::PAYGRADE",
|
||||||
data: [uid, newPaygrade]
|
data: [uid, newPaygrade]
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -341,7 +341,7 @@ function giveMoney() {
|
|||||||
function giveAllMoney() {
|
function giveAllMoney() {
|
||||||
const amount = parseInt(document.getElementById('giveAllAmount').value);
|
const amount = parseInt(document.getElementById('giveAllAmount').value);
|
||||||
const message = {
|
const message = {
|
||||||
event: "ADVANCE_ALL",
|
event: "ADVANCE::ALL",
|
||||||
data: [amount]
|
data: [amount]
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,7 +371,7 @@ function takeMoney() {
|
|||||||
*/
|
*/
|
||||||
function handleTransferFunds(condition, amount, uid) {
|
function handleTransferFunds(condition, amount, uid) {
|
||||||
const message = {
|
const message = {
|
||||||
event: "HANDLE_TRANSFER",
|
event: "HANDLE::TRANSFER",
|
||||||
data: [condition, amount, uid]
|
data: [condition, amount, uid]
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -425,7 +425,7 @@ function sendPlayerMessage() {
|
|||||||
const message = document.getElementById('messageInput').value;
|
const message = document.getElementById('messageInput').value;
|
||||||
if (message && selectedPlayerId) {
|
if (message && selectedPlayerId) {
|
||||||
const messageData = {
|
const messageData = {
|
||||||
event: "SEND_MESSAGE",
|
event: "SEND::MESSAGE",
|
||||||
data: [selectedPlayerId, message]
|
data: [selectedPlayerId, message]
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -441,7 +441,7 @@ function broadcastMessage() {
|
|||||||
const message = document.getElementById('broadcastMessage').value;
|
const message = document.getElementById('broadcastMessage').value;
|
||||||
if (message) {
|
if (message) {
|
||||||
const messageData = {
|
const messageData = {
|
||||||
event: "BROADCAST_MESSAGE",
|
event: "BROADCAST::MESSAGE",
|
||||||
data: ["", message]
|
data: ["", message]
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -461,7 +461,7 @@ function broadcastMessage() {
|
|||||||
*/
|
*/
|
||||||
function Payday() {
|
function Payday() {
|
||||||
const message = {
|
const message = {
|
||||||
event: "HANDLE_PAYDAY",
|
event: "HANDLE::PAYDAY",
|
||||||
data: []
|
data: []
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
PREP(deposit);
|
PREP(deposit);
|
||||||
PREP(initBank);
|
|
||||||
PREP(openBank);
|
PREP(openBank);
|
||||||
PREP(refresh);
|
PREP(refresh);
|
||||||
PREP(submit);
|
PREP(submit);
|
||||||
|
@ -1 +1,11 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
[{
|
||||||
|
GETVAR(player,value_loadDone,false)
|
||||||
|
}, {
|
||||||
|
private _bank = GETVAR(player,FORGE_Bank,0);
|
||||||
|
private _cash = GETVAR(player,FORGE_Cash,0);
|
||||||
|
private _uid = getPlayerUID player;
|
||||||
|
|
||||||
|
["forge_server_bank_handleEvents", ["BANK::HANDLE::PLAYER::LOAD", [_uid, _bank, _cash]]] call CFUNC(serverEvent);
|
||||||
|
}] call CFUNC(waitUntilAndExecute);
|
@ -1 +1,86 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
[QGVAR(handleEvents), {
|
||||||
|
params ["_control", "_isConfirmDialog", "_message"];
|
||||||
|
|
||||||
|
diag_log text format ["[FORGE::Client::Bank::XEH_postInit] Received event: '%1'", _message];
|
||||||
|
|
||||||
|
_message = fromJSON _message;
|
||||||
|
private _event = _message get "event";
|
||||||
|
private _data = _message get "data";
|
||||||
|
|
||||||
|
switch (_event) do {
|
||||||
|
case "REQUEST::PLAYER::DATA": {
|
||||||
|
private _playerData = createHashMap;
|
||||||
|
private _playerList = [];
|
||||||
|
|
||||||
|
{
|
||||||
|
private _player = _x;
|
||||||
|
private _uid = getPlayerUID _player;
|
||||||
|
private _name = name _player;
|
||||||
|
private _funds = GETVAR(_player,FORGE_Bank,0); //TODO: Implement funds from server
|
||||||
|
private _cash = GETVAR(_player,FORGE_Cash,0); //TODO: Implement cash from server
|
||||||
|
private _playerInfo = createHashMapFromArray [
|
||||||
|
["uid", _uid],
|
||||||
|
["name", _name],
|
||||||
|
["funds", _funds],
|
||||||
|
["cash", _cash]
|
||||||
|
];
|
||||||
|
|
||||||
|
_playerList pushBack _playerInfo;
|
||||||
|
} forEach allPlayers;
|
||||||
|
|
||||||
|
_playerData set ["players", _playerList];
|
||||||
|
_control ctrlWebBrowserAction ["ExecJS", format ["handlePlayerDataRequest(%1)", (toJSON _playerList)]];
|
||||||
|
};
|
||||||
|
case "REQUEST::PLAYER::FUNDS": {
|
||||||
|
private _playerData = createHashMap;
|
||||||
|
private _uid = getPlayerUID player;
|
||||||
|
private _balance = GETVAR(_player,FORGE_Bank,0); //TODO: Implement balance from server
|
||||||
|
private _cash = GETVAR(_player,FORGE_Cash,0); //TODO: Implement cash from server
|
||||||
|
private _playerData = createHashMapFromArray [
|
||||||
|
["balance", _balance],
|
||||||
|
["cash", _cash]
|
||||||
|
];
|
||||||
|
|
||||||
|
_control ctrlWebBrowserAction ["ExecJS", format ["handlePlayerFundsRequest(%1)", (toJSON _playerData)]];
|
||||||
|
};
|
||||||
|
case "REQUEST::TRANSACTION::HISTORY": {
|
||||||
|
private _uid = getPlayerUID player;
|
||||||
|
private _history = []; //TODO: Implement history from server
|
||||||
|
private _historyData = createHashMapFromArray [["history", _history]];
|
||||||
|
|
||||||
|
_control ctrlWebBrowserAction ["ExecJS", format ["handleTransactionHistoryRequest(%1)", (toJSON _historyData)]];
|
||||||
|
};
|
||||||
|
case "DEPOSIT::FUNDS": {
|
||||||
|
_data params ["_amount"];
|
||||||
|
|
||||||
|
if (_amount <= 0) exitWith { systemChat "Invalid amount, must be greater than 0!"; false };
|
||||||
|
|
||||||
|
["forge_server_bank_handleEvents", ["BANK::DEPOSIT", [getPlayerUID player, _amount]]] call CFUNC(serverEvent);
|
||||||
|
|
||||||
|
true
|
||||||
|
};
|
||||||
|
case "WITHDRAW::FUNDS": {
|
||||||
|
_data params ["_amount"];
|
||||||
|
|
||||||
|
if (_amount <= 0) exitWith { systemChat "Invalid amount, must be greater than 0!"; false };
|
||||||
|
|
||||||
|
["forge_server_bank_handleEvents", ["BANK::WITHDRAW", [getPlayerUID player, _amount]]] call CFUNC(serverEvent);
|
||||||
|
|
||||||
|
true
|
||||||
|
};
|
||||||
|
case "TRANSFER::FUNDS": {
|
||||||
|
_data params ["_amount", "_toUid"];
|
||||||
|
|
||||||
|
if ((_amount <= 0) || {_toUid isEqualTo ""}) exitWith { systemChat "Invalid UID or amount, UID cannot be empty and amount must be greater than 0!"; false };
|
||||||
|
|
||||||
|
["forge_server_bank_handleEvents", ["BANK::TRANSFER", [getPlayerUID player, _toUid, _amount]]] call CFUNC(serverEvent);
|
||||||
|
|
||||||
|
true
|
||||||
|
};
|
||||||
|
default {
|
||||||
|
diag_log format ["[FORGE::Client::Bank::XEH_postInit] Unhandled event: %1", _event];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}] call CFUNC(addEventHandler);
|
@ -15,4 +15,5 @@ class CfgPatches {
|
|||||||
|
|
||||||
#include "CfgEventHandlers.hpp"
|
#include "CfgEventHandlers.hpp"
|
||||||
#include "ui\BaseControls.hpp"
|
#include "ui\BaseControls.hpp"
|
||||||
#include "ui\RscBankDialog.hpp"
|
#include "ui\RscBankDialog.hpp"
|
||||||
|
#include "ui\RscWebBank.hpp"
|
@ -1,11 +1,8 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function: forge_client_bank_fnc_deposit
|
|
||||||
* Author: IDSolutions
|
* Author: IDSolutions
|
||||||
*
|
* Deposits money into the bank.
|
||||||
* [Description]
|
|
||||||
* Deposits money into the bank
|
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* None
|
* None
|
||||||
@ -13,25 +10,27 @@
|
|||||||
* Return Value:
|
* Return Value:
|
||||||
* None
|
* None
|
||||||
*
|
*
|
||||||
* Examples:
|
* Example:
|
||||||
* None
|
* [] call forge_client_bank_fnc_deposit;
|
||||||
*
|
*
|
||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private _amount = parseNumber (ctrlText IDC_AMOUNTINPUT);
|
private _amount = parseNumber (ctrlText IDC_AMOUNTINPUT);
|
||||||
private _bank = GETVAR(player,FORGE_Bank,0);
|
private _uid = getPlayerUID player;
|
||||||
private _cash = GETVAR(player,FORGE_Cash,0);
|
|
||||||
|
|
||||||
if (_amount > 0 && _amount <= _cash) then {
|
private _messageData = createHashMapFromArray [
|
||||||
_cash = _cash - _amount;
|
["event", "DEPOSIT::FUNDS"],
|
||||||
_bank = _bank + _amount;
|
["data", createHashMapFromArray [
|
||||||
|
["amount", _amount],
|
||||||
|
["uid", _uid]
|
||||||
|
]]
|
||||||
|
];
|
||||||
|
|
||||||
SETPVAR(player,FORGE_Bank,_bank);
|
private _response = ["forge_client_bank_handleEvents", (toJSON _messageData)] call CFUNC(localEvent);
|
||||||
SETPVAR(player,FORGE_Cash,_cash);
|
|
||||||
|
|
||||||
[] call FUNC(refresh);
|
if (_response) then {
|
||||||
hint "Money deposited successfully";
|
[format ["Deposited $%1", _amount], "info", 3, "right"] call EFUNC(misc,notify);
|
||||||
} else {
|
} else {
|
||||||
hint "Invalid amount";
|
[format ["Deposit failed"], "warning", 3, "right"] call EFUNC(misc,notify);
|
||||||
};
|
};
|
@ -1,11 +1,8 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function: forge_client_bank_fnc_openBank
|
|
||||||
* Author: IDSolutions
|
* Author: IDSolutions
|
||||||
*
|
* Opens the bank dialog.
|
||||||
* [Description]
|
|
||||||
* Opens the bank dialog
|
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* None
|
* None
|
||||||
@ -13,34 +10,51 @@
|
|||||||
* Return Value:
|
* Return Value:
|
||||||
* None
|
* None
|
||||||
*
|
*
|
||||||
* Examples:
|
* Example:
|
||||||
* None
|
* [] call forge_client_bank_fnc_openBank;
|
||||||
*
|
*
|
||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private _bank = GETVAR(player,FORGE_Bank,0);
|
private _productVersion = productVersion;
|
||||||
private _cash = GETVAR(player,FORGE_Cash,0);
|
private _steamBranchName = _productVersion select 8;
|
||||||
private _payMultiplier = "MULTIPLYR" call BFUNC(getParamValue);
|
private _payMultiplier = "MULTIPLYR" call BFUNC(getParamValue);
|
||||||
private _plyscore = rating player;
|
|
||||||
private _pending = _plyscore * _payMultiplier;
|
|
||||||
|
|
||||||
disableSerialization;
|
if (_steamBranchName == "profiling") then {
|
||||||
createDialog "RscBankDialog";
|
private _display = (findDisplay 46) createDisplay "RscWebBank";
|
||||||
|
private _ctrl = _display displayCtrl 2025;
|
||||||
|
|
||||||
private _formattedBank = _bank call EFUNC(misc,formatNumber);
|
_ctrl ctrlAddEventHandler ["JSDialog", {
|
||||||
private _formattedCash = _cash call EFUNC(misc,formatNumber);
|
params ["_control", "_isConfirmDialog", "_message"];
|
||||||
private _formattedPending = _pending call EFUNC(misc,formatNumber);
|
[QGVAR(handleEvents), [_control, _isConfirmDialog, _message]] call CFUNC(localEvent);
|
||||||
|
}];
|
||||||
|
|
||||||
ctrlSetText [IDC_CASHTEXT, format ["Cash: $%1", _formattedCash]];
|
_ctrl ctrlWebBrowserAction ["LoadFile", QUOTE(PATHTOF(ui\_site\index.html))];
|
||||||
ctrlSetText [IDC_BANKTEXT, format ["Bank: $%1", _formattedBank]];
|
_ctrl ctrlWebBrowserAction ["OpenDevConsole"];
|
||||||
ctrlSetText [IDC_RATINGTEXT, format ["Pending: %1", _formattedPending]];
|
} else {
|
||||||
ctrlSetText [IDC_TIMESHEETTEXT, "Ready for Timesheet"];
|
disableSerialization;
|
||||||
|
createDialog "RscBankDialog";
|
||||||
|
|
||||||
{
|
private _uid = getPlayerUID player;
|
||||||
lbAdd [IDC_PLAYERINPUT, name _x];
|
private _bank = GETVAR(player,FORGE_Bank,0); //TODO: Implement balance from server
|
||||||
lbSetData [IDC_PLAYERINPUT, _forEachIndex, netId _x];
|
private _cash = GETVAR(player,FORGE_Cash,0); //TODO: Implement cash from server
|
||||||
} forEach allPlayers;
|
private _plyscore = rating player;
|
||||||
|
private _pending = _plyscore * _payMultiplier;
|
||||||
|
|
||||||
lbSetCurSel [IDC_PLAYERINPUT, 0];
|
private _formattedBank = _bank call EFUNC(misc,formatNumber);
|
||||||
ctrlSetText [IDC_AMOUNTINPUT, ""];
|
private _formattedCash = _cash call EFUNC(misc,formatNumber);
|
||||||
|
private _formattedPending = _pending call EFUNC(misc,formatNumber);
|
||||||
|
|
||||||
|
ctrlSetText [IDC_CASHTEXT, format ["Cash: $%1", _formattedCash]];
|
||||||
|
ctrlSetText [IDC_BANKTEXT, format ["Bank: $%1", _formattedBank]];
|
||||||
|
ctrlSetText [IDC_RATINGTEXT, format ["Pending: %1", _formattedPending]];
|
||||||
|
ctrlSetText [IDC_TIMESHEETTEXT, "Ready for Timesheet"];
|
||||||
|
|
||||||
|
{
|
||||||
|
lbAdd [IDC_PLAYERINPUT, name _x];
|
||||||
|
lbSetData [IDC_PLAYERINPUT, _forEachIndex, netId _x];
|
||||||
|
} forEach allPlayers;
|
||||||
|
|
||||||
|
lbSetCurSel [IDC_PLAYERINPUT, 0];
|
||||||
|
ctrlSetText [IDC_AMOUNTINPUT, ""];
|
||||||
|
};
|
@ -1,11 +1,8 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function: forge_client_bank_fnc_refresh
|
|
||||||
* Author: IDSolutions
|
* Author: IDSolutions
|
||||||
*
|
* Refreshes the bank dialog.
|
||||||
* [Description]
|
|
||||||
* Refreshes the bank dialog
|
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* None
|
* None
|
||||||
@ -13,14 +10,15 @@
|
|||||||
* Return Value:
|
* Return Value:
|
||||||
* None
|
* None
|
||||||
*
|
*
|
||||||
* Examples:
|
* Example:
|
||||||
* None
|
* [] call forge_client_bank_fnc_refresh;
|
||||||
*
|
*
|
||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private _bank = GETVAR(player,FORGE_Bank,0);
|
private _bank = GETVAR(player,FORGE_Bank,0); //TODO: Implement balance from server
|
||||||
private _cash = GETVAR(player,FORGE_Cash,0);
|
private _cash = GETVAR(player,FORGE_Cash,0); //TODO: Implement cash from server
|
||||||
|
|
||||||
private _payMultiplier = "MULTIPLYR" call BFUNC(getParamValue);
|
private _payMultiplier = "MULTIPLYR" call BFUNC(getParamValue);
|
||||||
private _plyscore = rating player;
|
private _plyscore = rating player;
|
||||||
private _pending = _plyscore * _payMultiplier;
|
private _pending = _plyscore * _payMultiplier;
|
||||||
|
@ -19,9 +19,9 @@
|
|||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private _bank = GETVAR(player,FORGE_Bank,0);
|
private _bank = GETVAR(player,FORGE_Bank,0); //TODO: Implement balance from server
|
||||||
private _payMultiplyer = "MULTIPLYR" call BFUNC(getParamValue);
|
private _payMultiplyer = "MULTIPLYR" call BFUNC(getParamValue);
|
||||||
private _plyscore = rating player;
|
private _plyscore = rating player; //TODO: Implement rating from server
|
||||||
private _multiplyer = _plyscore * _payMultiplyer;
|
private _multiplyer = _plyscore * _payMultiplyer;
|
||||||
|
|
||||||
_bank = _bank + _multiplyer;
|
_bank = _bank + _multiplyer;
|
||||||
|
@ -1,11 +1,8 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function: forge_client_bank_fnc_transfer
|
|
||||||
* Author: IDSolutions
|
* Author: IDSolutions
|
||||||
*
|
* Transfers money to a player.
|
||||||
* [Description]
|
|
||||||
* Transfers money to a player
|
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* None
|
* None
|
||||||
@ -13,8 +10,8 @@
|
|||||||
* Return Value:
|
* Return Value:
|
||||||
* None
|
* None
|
||||||
*
|
*
|
||||||
* Examples:
|
* Example:
|
||||||
* None
|
* [] call forge_client_bank_fnc_transfer;
|
||||||
*
|
*
|
||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
@ -22,23 +19,28 @@
|
|||||||
private _display = findDisplay IDD_BANKDIALOG;
|
private _display = findDisplay IDD_BANKDIALOG;
|
||||||
private _input = _display displayCtrl IDC_AMOUNTINPUT;
|
private _input = _display displayCtrl IDC_AMOUNTINPUT;
|
||||||
private _dropdown = _display displayCtrl IDC_PLAYERINPUT;
|
private _dropdown = _display displayCtrl IDC_PLAYERINPUT;
|
||||||
|
|
||||||
private _amount = parseNumber (ctrlText _input);
|
private _amount = parseNumber (ctrlText _input);
|
||||||
private _selectedTarget = lbCurSel _dropdown;
|
private _selectedTarget = lbCurSel _dropdown;
|
||||||
private _selectedTargetData = _dropdown lbData _selectedTarget;
|
private _selectedTargetData = _dropdown lbData _selectedTarget;
|
||||||
private _target = objectFromNetId _selectedTargetData;
|
private _target = objectFromNetId _selectedTargetData;
|
||||||
|
|
||||||
private _bank = GETVAR(player,FORGE_Bank,0);
|
private _fromUid = getPlayerUID player;
|
||||||
private _targetBank = GETVAR(_target,FORGE_Bank,0);
|
private _toUid = getPlayerUID _target;
|
||||||
|
|
||||||
if (!isNull _target && _amount > 0 && _amount <= _bank) then {
|
private _messageData = createHashMapFromArray [
|
||||||
_targetBank = _targetBank + _amount;
|
["event", "TRANSFER::FUNDS"],
|
||||||
SETPVAR(_target,FORGE_Bank,_targetBank);
|
["data", createHashMapFromArray [
|
||||||
|
["fromUid", _fromUid],
|
||||||
|
["toUid", _toUid],
|
||||||
|
["amount", _amount]
|
||||||
|
]]
|
||||||
|
];
|
||||||
|
|
||||||
_bank = _bank - _amount;
|
private _response = [QGVAR(handleEvents), (toJSON _messageData)] call CFUNC(localEvent);
|
||||||
SETPVAR(player,FORGE_Bank,_bank);
|
|
||||||
|
|
||||||
[] call FUNC(refresh);
|
if (_response) then {
|
||||||
[format ["Transferred $%1", _amount], "info", 3, "right"] call EFUNC(misc,notify);
|
[format ["Transferred $%1", _amount], "info", 3, "right"] call EFUNC(misc,notify);
|
||||||
} else {
|
} else {
|
||||||
[format ["Invalid transfer details"], "warning", 3, "right"] call EFUNC(misc,notify);
|
[format ["Transfer failed"], "warning", 3, "right"] call EFUNC(misc,notify);
|
||||||
};
|
};
|
@ -1,11 +1,8 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function: forge_client_bank_fnc_withdraw
|
|
||||||
* Author: IDSolutions
|
* Author: IDSolutions
|
||||||
*
|
* Withdraws money from the bank.
|
||||||
* [Description]
|
|
||||||
* Withdraws money from the bank
|
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* None
|
* None
|
||||||
@ -13,8 +10,8 @@
|
|||||||
* Return Value:
|
* Return Value:
|
||||||
* None
|
* None
|
||||||
*
|
*
|
||||||
* Examples:
|
* Example:
|
||||||
* None
|
* [] call forge_client_bank_fnc_withdraw;
|
||||||
*
|
*
|
||||||
* Public: Yes
|
* Public: Yes
|
||||||
*/
|
*/
|
||||||
@ -23,18 +20,17 @@ private _display = findDisplay IDD_BANKDIALOG;
|
|||||||
private _input = _display displayCtrl IDC_AMOUNTINPUT;
|
private _input = _display displayCtrl IDC_AMOUNTINPUT;
|
||||||
private _amount = parseNumber (ctrlText _input);
|
private _amount = parseNumber (ctrlText _input);
|
||||||
|
|
||||||
private _bank = GETVAR(player,FORGE_Bank,0);
|
private _messageData = createHashMapFromArray [
|
||||||
private _cash = GETVAR(player,FORGE_Cash,0);
|
["event", "WITHDRAW::FUNDS"],
|
||||||
|
["data", createHashMapFromArray [
|
||||||
|
["amount", _amount]
|
||||||
|
]]
|
||||||
|
];
|
||||||
|
|
||||||
if (_amount > 0 && _amount <= _bank) then {
|
private _response = ["forge_client_bank_handleEvents", (toJSON _messageData)] call CFUNC(localEvent);
|
||||||
_bank = _bank - _amount;
|
|
||||||
_cash = _cash + _amount;
|
|
||||||
|
|
||||||
SETPVAR(player,FORGE_Bank,_bank);
|
if (_response) then {
|
||||||
SETPVAR(player,FORGE_Cash,_cash);
|
[format ["Withdrawn $%1", _amount], "info", 3, "right"] call EFUNC(misc,notify);
|
||||||
|
|
||||||
[] call FUNC(refresh);
|
|
||||||
[format ["Money withdrawn successfully"], "info", 3, "right"] call EFUNC(misc,notify);
|
|
||||||
} else {
|
} else {
|
||||||
[format ["Invalid amount"], "warning", 3, "right"] call EFUNC(misc,notify);
|
[format ["Withdrawal failed"], "warning", 3, "right"] call EFUNC(misc,notify);
|
||||||
};
|
};
|
@ -4,9 +4,6 @@
|
|||||||
<Key ID="STR_forge_client_bank_Amount">
|
<Key ID="STR_forge_client_bank_Amount">
|
||||||
<English>Amount</English>
|
<English>Amount</English>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_forge_client_bank_Close">
|
|
||||||
<English>Close</English>
|
|
||||||
</Key>
|
|
||||||
<Key ID="STR_forge_client_bank_Deposit">
|
<Key ID="STR_forge_client_bank_Deposit">
|
||||||
<English>Deposit</English>
|
<English>Deposit</English>
|
||||||
</Key>
|
</Key>
|
||||||
|
17
addons/bank/ui/RscWebBank.hpp
Normal file
17
addons/bank/ui/RscWebBank.hpp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
class RscWebBank {
|
||||||
|
idd = 20250502;
|
||||||
|
fadein = 0;
|
||||||
|
fadeout = 0;
|
||||||
|
duration = 1e+011;
|
||||||
|
|
||||||
|
class controls {
|
||||||
|
class Background: RscText {
|
||||||
|
type = 106;
|
||||||
|
idc = 2025;
|
||||||
|
x = "safeZoneY * (pixelW/pixelH) * 2.975";
|
||||||
|
y = "safeZoneY + (safeZoneH * 0.05)";
|
||||||
|
w = "safeZoneW * (pixelW/pixelH) * 1.17";
|
||||||
|
h = "safeZoneH * 0.875";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
@ -1,14 +1,32 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<!--
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
Dynamic Resource Loading
|
||||||
<title>FORGE - FDIC</title>
|
The following script loads CSS and JavaScript files dynamically using the A3API
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
This approach is used instead of static HTML imports to work with Arma 3's file system
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
-->
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
<script>
|
||||||
<link rel="stylesheet" href="styles.css">
|
Promise.all([
|
||||||
<script src="script.js" defer></script>
|
// Load CSS file
|
||||||
|
A3API.RequestFile("z\\forge_client\\addons\\bank\\ui\\_site\\styles.css"),
|
||||||
|
// Load JavaScript file
|
||||||
|
A3API.RequestFile("z\\forge_client\\addons\\bank\\ui\\_site\\script.js")
|
||||||
|
]).then(([css, js]) => {
|
||||||
|
// Apply CSS
|
||||||
|
const style = document.createElement('style');
|
||||||
|
style.textContent = css;
|
||||||
|
document.head.appendChild(style);
|
||||||
|
|
||||||
|
// Load and execute JavaScript
|
||||||
|
const script = document.createElement('script');
|
||||||
|
script.text = js;
|
||||||
|
document.head.appendChild(script);
|
||||||
|
|
||||||
|
// Initialize the bank interface
|
||||||
|
initializeBank();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<header>
|
||||||
@ -16,7 +34,6 @@
|
|||||||
<h1>Federal Deposit Insurance Corporation</h1>
|
<h1>Federal Deposit Insurance Corporation</h1>
|
||||||
<div class="balance-display">
|
<div class="balance-display">
|
||||||
<div class="balance-item">
|
<div class="balance-item">
|
||||||
<div class="balance-icon">💰</div>
|
|
||||||
<div class="balance-info">
|
<div class="balance-info">
|
||||||
<span class="balance-label">Wallet Balance</span>
|
<span class="balance-label">Wallet Balance</span>
|
||||||
<span class="balance-amount" id="walletBalance">$0</span>
|
<span class="balance-amount" id="walletBalance">$0</span>
|
||||||
@ -24,7 +41,6 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="balance-divider"></div>
|
<div class="balance-divider"></div>
|
||||||
<div class="balance-item">
|
<div class="balance-item">
|
||||||
<div class="balance-icon">🏦</div>
|
|
||||||
<div class="balance-info">
|
<div class="balance-info">
|
||||||
<span class="balance-label">Account Balance</span>
|
<span class="balance-label">Account Balance</span>
|
||||||
<span class="balance-amount" id="accountBalance">$0</span>
|
<span class="balance-amount" id="accountBalance">$0</span>
|
||||||
@ -35,57 +51,52 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<main class="container">
|
<main class="container">
|
||||||
<div class="actions-grid"> <!-- Transfer Between Accounts -->
|
<div class="actions-grid">
|
||||||
|
<!-- Transfer Between Accounts -->
|
||||||
<div class="action-tile">
|
<div class="action-tile">
|
||||||
<h2>Transfer Money</h2>
|
<h2>Transfer Money</h2>
|
||||||
<form id="transferForm">
|
<div class="form-group">
|
||||||
<div class="form-group">
|
<label for="transferType">Transfer From</label>
|
||||||
<label for="transferType">Transfer From</label>
|
<select id="transferType" required>
|
||||||
<select id="transferType" required>
|
<option value="to_wallet">Account to Wallet</option>
|
||||||
<option value="to_wallet">Account to Wallet</option>
|
<option value="to_account">Wallet to Account</option>
|
||||||
<option value="to_account">Wallet to Account</option>
|
</select>
|
||||||
</select>
|
</div>
|
||||||
</div>
|
<div class="form-group">
|
||||||
<div class="form-group">
|
<label for="transferAmount">Amount</label>
|
||||||
<label for="transferAmount">Amount</label>
|
<input type="number" id="transferAmount" min="1" step="1" required>
|
||||||
<input type="number" id="transferAmount" min="1" step="1" required>
|
</div>
|
||||||
</div>
|
<button type="button" class="submit-btn" onclick="handleTransfer()">Transfer</button>
|
||||||
<button type="submit" class="submit-btn">Transfer</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Transfer to Player -->
|
<!-- Transfer to Player -->
|
||||||
<div class="action-tile">
|
<div class="action-tile">
|
||||||
<h2>Transfer to Player</h2>
|
<h2>Transfer to Player</h2>
|
||||||
<form id="transferPlayerForm">
|
<div class="form-group">
|
||||||
<div class="form-group">
|
<label for="playerSelect">Player</label>
|
||||||
<label for="playerSelect">Player</label>
|
<select id="playerSelect" required>
|
||||||
<select id="playerSelect" required>
|
<option value="" disabled selected>Select Player</option>
|
||||||
<option value="" disabled selected>Select Player</option>
|
</select>
|
||||||
</select>
|
</div>
|
||||||
</div>
|
<div class="form-group">
|
||||||
<div class="form-group">
|
<label for="playerTransferAmount">Amount</label>
|
||||||
<label for="playerTransferAmount">Amount</label>
|
<input type="number" id="playerTransferAmount" min="1" step="1" required>
|
||||||
<input type="number" id="playerTransferAmount" min="1" step="1" required>
|
</div>
|
||||||
</div>
|
<button type="button" class="submit-btn" onclick="handlePlayerTransfer()">Send Money</button>
|
||||||
<button type="submit" class="submit-btn">Send Money</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Submit Timesheet -->
|
<!-- Submit Timesheet -->
|
||||||
<div class="action-tile">
|
<div class="action-tile">
|
||||||
<h2>Submit Timesheet</h2>
|
<h2>Submit Timesheet</h2>
|
||||||
<form id="timesheetForm">
|
<div class="form-group">
|
||||||
<div class="form-group">
|
<label for="hoursWorked">Hours Worked</label>
|
||||||
<label for="hoursWorked">Hours Worked</label>
|
<input type="number" id="hoursWorked" min="1" step="0.5" required>
|
||||||
<input type="number" id="hoursWorked" min="1" step="0.5" required>
|
</div>
|
||||||
</div>
|
<div class="form-group">
|
||||||
<div class="form-group">
|
<label for="hourlyRate">Hourly Rate</label>
|
||||||
<label for="hourlyRate">Hourly Rate</label>
|
<input type="number" id="hourlyRate" min="1" step="1" required>
|
||||||
<input type="number" id="hourlyRate" min="1" step="1" required>
|
</div>
|
||||||
</div>
|
<button type="button" class="submit-btn" onclick="handleTimesheet()">Submit Timesheet</button>
|
||||||
<button type="submit" class="submit-btn">Submit Timesheet</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -1,79 +1,212 @@
|
|||||||
// Simulated data - this would be replaced with actual game data
|
/**
|
||||||
|
* Bank Management Script
|
||||||
|
* This script handles the bank interface functionality for the Arma 3 game interface.
|
||||||
|
* It provides wallet/account management, transfers, and transaction history.
|
||||||
|
*/
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
// #region DATA STRUCTURES AND VARIABLES
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bank state - will be populated from game events
|
||||||
|
*/
|
||||||
let bankState = {
|
let bankState = {
|
||||||
wallet: 1000,
|
wallet: 0,
|
||||||
account: 5000,
|
account: 0,
|
||||||
players: [
|
players: [],
|
||||||
{ id: 1, name: "Player 1" },
|
|
||||||
{ id: 2, name: "Player 2" },
|
|
||||||
{ id: 3, name: "Player 3" }
|
|
||||||
],
|
|
||||||
transactions: []
|
transactions: []
|
||||||
};
|
};
|
||||||
|
|
||||||
// Initialize the interface
|
//=============================================================================
|
||||||
|
// #region INITIALIZATION AND DATA REQUESTS
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the bank interface
|
||||||
|
* Sets up the UI and requests initial data from the game engine
|
||||||
|
*/
|
||||||
function initializeBank() {
|
function initializeBank() {
|
||||||
updateBalanceDisplays();
|
// Request initial data from the game
|
||||||
|
requestPlayerFunds();
|
||||||
|
requestPlayerData();
|
||||||
|
requestTransactionHistory();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request player funds data from the game engine
|
||||||
|
*/
|
||||||
|
function requestPlayerFunds() {
|
||||||
|
const message = {
|
||||||
|
event: "REQUEST::PLAYER::FUNDS",
|
||||||
|
data: {}
|
||||||
|
};
|
||||||
|
|
||||||
|
A3API.SendAlert(JSON.stringify(message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request player data from the game engine
|
||||||
|
*/
|
||||||
|
function requestPlayerData() {
|
||||||
|
const message = {
|
||||||
|
event: "REQUEST::PLAYER::DATA",
|
||||||
|
data: {}
|
||||||
|
};
|
||||||
|
|
||||||
|
A3API.SendAlert(JSON.stringify(message));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Request transaction history from the game engine
|
||||||
|
*/
|
||||||
|
function requestTransactionHistory() {
|
||||||
|
const message = {
|
||||||
|
event: "REQUEST::TRANSACTION::HISTORY",
|
||||||
|
data: {}
|
||||||
|
};
|
||||||
|
|
||||||
|
A3API.SendAlert(JSON.stringify(message));
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
// #region DATA HANDLERS
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle player data received from the game engine
|
||||||
|
* @param {Array} data - List of player objects
|
||||||
|
*/
|
||||||
|
function handlePlayerDataRequest(data) {
|
||||||
|
bankState.players = data;
|
||||||
populatePlayerList();
|
populatePlayerList();
|
||||||
setupEventListeners();
|
|
||||||
loadTransactionHistory();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update balance displays in the header
|
/**
|
||||||
|
* Handle player funds data received from the game engine
|
||||||
|
* @param {Object} data - Object containing cash and balance
|
||||||
|
*/
|
||||||
|
function handlePlayerFundsRequest(data) {
|
||||||
|
console.log('Received funds data:', data);
|
||||||
|
|
||||||
|
// Parse the data if it's a string
|
||||||
|
if (typeof data === 'string') {
|
||||||
|
try {
|
||||||
|
data = JSON.parse(data);
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Failed to parse data:', e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure we have valid numbers, default to 0 if null
|
||||||
|
bankState.wallet = data.cash !== null ? Number(data.cash) : 0;
|
||||||
|
bankState.account = data.balance !== null ? Number(data.balance) : 0;
|
||||||
|
updateBalanceDisplays();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle transaction history data received from the game engine
|
||||||
|
* @param {Object} data - Object containing transaction history
|
||||||
|
*/
|
||||||
|
function handleTransactionHistoryRequest(data) {
|
||||||
|
console.log('Received transaction history:', data);
|
||||||
|
|
||||||
|
// Parse the data if it's a string
|
||||||
|
if (typeof data === 'string') {
|
||||||
|
try {
|
||||||
|
data = JSON.parse(data);
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Failed to parse transaction history:', e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize empty array if history is null
|
||||||
|
bankState.transactions = [];
|
||||||
|
updateTransactionHistory();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
// #region UI UPDATES AND DISPLAY
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update balance displays in the header
|
||||||
|
*/
|
||||||
function updateBalanceDisplays() {
|
function updateBalanceDisplays() {
|
||||||
document.getElementById('walletBalance').textContent = `$${bankState.wallet.toLocaleString()}`;
|
const walletElement = document.getElementById('walletBalance');
|
||||||
document.getElementById('accountBalance').textContent = `$${bankState.account.toLocaleString()}`;
|
const accountElement = document.getElementById('accountBalance');
|
||||||
|
|
||||||
|
if (walletElement && accountElement) {
|
||||||
|
walletElement.textContent = `$${(bankState.wallet || 0).toLocaleString()}`;
|
||||||
|
accountElement.textContent = `$${(bankState.account || 0).toLocaleString()}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Populate the player selection dropdown
|
/**
|
||||||
|
* Populate the player selection dropdown
|
||||||
|
*/
|
||||||
function populatePlayerList() {
|
function populatePlayerList() {
|
||||||
const playerSelect = document.getElementById('playerSelect');
|
const playerSelect = document.getElementById('playerSelect');
|
||||||
playerSelect.innerHTML = '<option value="" disabled selected>Select Player</option>';
|
playerSelect.innerHTML = '<option value="" disabled selected>Select Player</option>';
|
||||||
|
|
||||||
bankState.players.forEach(player => {
|
bankState.players.forEach(player => {
|
||||||
const option = document.createElement('option');
|
const option = document.createElement('option');
|
||||||
option.value = player.id;
|
option.value = player.uid;
|
||||||
option.textContent = player.name;
|
option.textContent = player.name;
|
||||||
playerSelect.appendChild(option);
|
playerSelect.appendChild(option);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a new transaction to history
|
/**
|
||||||
function addTransaction(type, amount, details = '') {
|
* Update the transaction history display
|
||||||
const transaction = {
|
*/
|
||||||
type,
|
|
||||||
amount,
|
|
||||||
details,
|
|
||||||
timestamp: new Date().toISOString()
|
|
||||||
};
|
|
||||||
|
|
||||||
bankState.transactions.unshift(transaction);
|
|
||||||
updateTransactionHistory();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update the transaction history display
|
|
||||||
function updateTransactionHistory() {
|
function updateTransactionHistory() {
|
||||||
const historyList = document.getElementById('transactionHistory');
|
const historyList = document.getElementById('transactionHistory');
|
||||||
|
if (!historyList) return;
|
||||||
|
|
||||||
historyList.innerHTML = '';
|
historyList.innerHTML = '';
|
||||||
|
|
||||||
|
if (!Array.isArray(bankState.transactions)) {
|
||||||
|
console.error('Transaction history is not an array:', bankState.transactions);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bankState.transactions.length === 0) {
|
||||||
|
const li = document.createElement('li');
|
||||||
|
li.className = 'history-item empty';
|
||||||
|
li.textContent = 'No transactions yet';
|
||||||
|
historyList.appendChild(li);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
bankState.transactions.forEach(transaction => {
|
bankState.transactions.forEach(transaction => {
|
||||||
|
if (!transaction) return;
|
||||||
|
|
||||||
const li = document.createElement('li');
|
const li = document.createElement('li');
|
||||||
li.className = 'history-item';
|
li.className = 'history-item';
|
||||||
|
|
||||||
const isNegative = ['transfer_out', 'to_wallet'].includes(transaction.type);
|
const isNegative = ['transfer_out', 'to_wallet'].includes(transaction.type);
|
||||||
const amountClass = isNegative ? 'amount-negative' : 'amount-positive';
|
const amountClass = isNegative ? 'amount-negative' : 'amount-positive';
|
||||||
const amountPrefix = isNegative ? '-' : '+';
|
const amountPrefix = isNegative ? '-' : '+';
|
||||||
|
const amount = Math.abs(Number(transaction.amount) || 0);
|
||||||
|
|
||||||
li.innerHTML = `
|
li.innerHTML = `
|
||||||
<span class="transaction-type">${formatTransactionType(transaction.type)}</span>
|
<span class="transaction-type">${formatTransactionType(transaction.type)}</span>
|
||||||
<span class="transaction-details">${transaction.details}</span>
|
<span class="transaction-details">${transaction.details || ''}</span>
|
||||||
<span class="amount ${amountClass}">${amountPrefix}$${Math.abs(transaction.amount).toLocaleString()}</span>
|
<span class="amount ${amountClass}">${amountPrefix}$${amount.toLocaleString()}</span>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
historyList.appendChild(li);
|
historyList.appendChild(li);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Format transaction type for display
|
/**
|
||||||
|
* Format transaction type for display
|
||||||
|
* @param {string} type - Transaction type code
|
||||||
|
* @returns {string} Formatted transaction type
|
||||||
|
*/
|
||||||
function formatTransactionType(type) {
|
function formatTransactionType(type) {
|
||||||
const types = {
|
const types = {
|
||||||
'to_wallet': 'To Wallet',
|
'to_wallet': 'To Wallet',
|
||||||
@ -85,63 +218,94 @@ function formatTransactionType(type) {
|
|||||||
return types[type] || type;
|
return types[type] || type;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up all form event listeners
|
//=============================================================================
|
||||||
function setupEventListeners() { // Handle transfers between wallet and account
|
// #region ACTION HANDLERS
|
||||||
document.getElementById('transferForm').addEventListener('submit', (e) => {
|
//=============================================================================
|
||||||
e.preventDefault();
|
|
||||||
const amount = parseInt(document.getElementById('transferAmount').value);
|
/**
|
||||||
const transferType = document.getElementById('transferType').value;
|
* Handle transfer between wallet and account
|
||||||
|
*/
|
||||||
if (transferType === 'to_wallet') {
|
function handleTransfer() {
|
||||||
if (amount > bankState.account) {
|
const amount = parseInt(document.getElementById('transferAmount').value);
|
||||||
alert('Insufficient funds in account');
|
const transferType = document.getElementById('transferType').value;
|
||||||
return;
|
|
||||||
}
|
if (amount <= 0) {
|
||||||
bankState.account -= amount;
|
alert('Amount must be greater than 0');
|
||||||
bankState.wallet += amount;
|
return;
|
||||||
} else {
|
}
|
||||||
if (amount > bankState.wallet) {
|
|
||||||
alert('Insufficient funds in wallet');
|
const event = transferType === 'to_wallet' ? 'WITHDRAW::FUNDS' : 'DEPOSIT::FUNDS';
|
||||||
return;
|
|
||||||
}
|
const message = {
|
||||||
bankState.wallet -= amount;
|
event: event,
|
||||||
bankState.account += amount;
|
data: {
|
||||||
|
amount: amount
|
||||||
}
|
}
|
||||||
|
};
|
||||||
addTransaction(transferType, amount);
|
|
||||||
updateBalanceDisplays();
|
A3API.SendAlert(JSON.stringify(message));
|
||||||
e.target.reset();
|
document.getElementById('transferAmount').value = '';
|
||||||
}); // Transfer to Player
|
|
||||||
document.getElementById('transferPlayerForm').addEventListener('submit', (e) => {
|
|
||||||
e.preventDefault();
|
|
||||||
const amount = parseInt(document.getElementById('playerTransferAmount').value);
|
|
||||||
const playerId = document.getElementById('playerSelect').value;
|
|
||||||
const playerName = bankState.players.find(p => p.id.toString() === playerId)?.name;
|
|
||||||
|
|
||||||
if (amount > bankState.account) {
|
|
||||||
alert('Insufficient funds in account');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bankState.account -= amount;
|
|
||||||
addTransaction('transfer_out', amount, `To ${playerName}`);
|
|
||||||
updateBalanceDisplays();
|
|
||||||
e.target.reset();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Submit Timesheet
|
|
||||||
document.getElementById('timesheetForm').addEventListener('submit', (e) => {
|
|
||||||
e.preventDefault();
|
|
||||||
const hours = parseFloat(document.getElementById('hoursWorked').value);
|
|
||||||
const rate = parseInt(document.getElementById('hourlyRate').value);
|
|
||||||
const amount = Math.floor(hours * rate);
|
|
||||||
|
|
||||||
bankState.account += amount;
|
|
||||||
addTransaction('timesheet', amount, `${hours} hours @ $${rate}/hr`);
|
|
||||||
updateBalanceDisplays();
|
|
||||||
e.target.reset();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize when DOM is loaded
|
/**
|
||||||
|
* Handle transfer to another player
|
||||||
|
*/
|
||||||
|
function handlePlayerTransfer() {
|
||||||
|
const amount = parseInt(document.getElementById('playerTransferAmount').value);
|
||||||
|
const playerUid = document.getElementById('playerSelect').value;
|
||||||
|
|
||||||
|
if (amount <= 0) {
|
||||||
|
alert('Amount must be greater than 0');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!playerUid) {
|
||||||
|
alert('Please select a player');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const message = {
|
||||||
|
event: 'TRANSFER::FUNDS',
|
||||||
|
data: {
|
||||||
|
amount: amount,
|
||||||
|
uid: playerUid
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
A3API.SendAlert(JSON.stringify(message));
|
||||||
|
document.getElementById('playerTransferAmount').value = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle timesheet submission
|
||||||
|
*/
|
||||||
|
function handleTimesheet() {
|
||||||
|
const hours = parseFloat(document.getElementById('hoursWorked').value);
|
||||||
|
const rate = parseInt(document.getElementById('hourlyRate').value);
|
||||||
|
const amount = Math.floor(hours * rate);
|
||||||
|
|
||||||
|
if (amount <= 0) {
|
||||||
|
alert('Invalid timesheet amount');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const message = {
|
||||||
|
event: 'DEPOSIT::FUNDS',
|
||||||
|
data: {
|
||||||
|
amount: amount
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
A3API.SendAlert(JSON.stringify(message));
|
||||||
|
document.getElementById('hoursWorked').value = '';
|
||||||
|
document.getElementById('hourlyRate').value = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
// #region INITIALIZATION
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize when DOM is loaded
|
||||||
|
*/
|
||||||
document.addEventListener('DOMContentLoaded', initializeBank);
|
document.addEventListener('DOMContentLoaded', initializeBank);
|
||||||
|
@ -1,48 +1 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
[QGVAR(handleEvents), {
|
|
||||||
params ["_control", "_isConfirmDialog", "_message"];
|
|
||||||
|
|
||||||
diag_log format ["[FORGE: Garage] Received event: %1", _message];
|
|
||||||
|
|
||||||
_message = fromJSON _message;
|
|
||||||
private _event = _message get "event";
|
|
||||||
private _data = _message get "data";
|
|
||||||
|
|
||||||
private _vehicles = GETVAR(player,FORGE_Garage,[]);
|
|
||||||
|
|
||||||
switch (_event) do {
|
|
||||||
case "REQUEST_GARAGE_DATA": {
|
|
||||||
private _garageData = createHashMap;
|
|
||||||
private _vehicleList = [];
|
|
||||||
|
|
||||||
{
|
|
||||||
private _vehicle = _x;
|
|
||||||
if (isNull _vehicle || { !alive _vehicle }) exitWith {};
|
|
||||||
|
|
||||||
private _vehicleInfo = createHashMapFromArray [
|
|
||||||
["classname", typeOf _vehicle],
|
|
||||||
["damage", damage _vehicle],
|
|
||||||
["fuel", fuel _vehicle],
|
|
||||||
["hitpoints", getAllHitPointsDamage _vehicle]
|
|
||||||
];
|
|
||||||
|
|
||||||
_vehicleList pushBack _vehicleInfo;
|
|
||||||
} forEach _vehicles;
|
|
||||||
|
|
||||||
_garageData set ["vehicles", _vehicleList];
|
|
||||||
_control ctrlWebBrowserAction ["ExecJS", format ["handleGarageDataRequest(%1)", (toJSON _vehicleList)]];
|
|
||||||
};
|
|
||||||
case "STORE_VEHICLE": {
|
|
||||||
// Logic to store vehicle in garage
|
|
||||||
// This would typically involve saving the vehicle's state to a database or similar
|
|
||||||
};
|
|
||||||
case "RETRIEVE_VEHICLE": {
|
|
||||||
// Logic to retrieve vehicle from garage
|
|
||||||
// This would typically involve loading the vehicle's state from a database or similar
|
|
||||||
};
|
|
||||||
default {
|
|
||||||
diag_log format ["[FORGE: Garage] Unknown event: %1", _event];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}] call CFUNC(addEventHandler);
|
|
@ -1 +1,48 @@
|
|||||||
#include "script_component.hpp"
|
#include "script_component.hpp"
|
||||||
|
|
||||||
|
[QGVAR(handleEvents), {
|
||||||
|
params ["_control", "_isConfirmDialog", "_message"];
|
||||||
|
|
||||||
|
diag_log text format ["[FORGE::Client::Garage::XEH_postInit] Received event: '%1'", _message];
|
||||||
|
|
||||||
|
_message = fromJSON _message;
|
||||||
|
private _event = _message get "event";
|
||||||
|
private _data = _message get "data";
|
||||||
|
|
||||||
|
private _vehicles = GETVAR(player,FORGE_Garage,[]); //TODO: Implement garage from server
|
||||||
|
|
||||||
|
switch (_event) do {
|
||||||
|
case "REQUEST::GARAGE::DATA": {
|
||||||
|
private _garageData = createHashMap;
|
||||||
|
private _vehicleList = [];
|
||||||
|
|
||||||
|
{
|
||||||
|
private _vehicle = _x;
|
||||||
|
if (isNull _vehicle || { !alive _vehicle }) exitWith {};
|
||||||
|
|
||||||
|
private _vehicleInfo = createHashMapFromArray [
|
||||||
|
["classname", typeOf _vehicle],
|
||||||
|
["damage", damage _vehicle],
|
||||||
|
["fuel", fuel _vehicle],
|
||||||
|
["hitpoints", getAllHitPointsDamage _vehicle]
|
||||||
|
];
|
||||||
|
|
||||||
|
_vehicleList pushBack _vehicleInfo;
|
||||||
|
} forEach _vehicles;
|
||||||
|
|
||||||
|
_garageData set ["vehicles", _vehicleList];
|
||||||
|
_control ctrlWebBrowserAction ["ExecJS", format ["handleGarageDataRequest(%1)", (toJSON _vehicleList)]];
|
||||||
|
};
|
||||||
|
case "STORE::VEHICLE": {
|
||||||
|
// Logic to store vehicle in garage
|
||||||
|
// This would typically involve saving the vehicle's state to a database or similar
|
||||||
|
};
|
||||||
|
case "RETRIEVE::VEHICLE": {
|
||||||
|
// Logic to retrieve vehicle from garage
|
||||||
|
// This would typically involve loading the vehicle's state from a database or similar
|
||||||
|
};
|
||||||
|
default {
|
||||||
|
diag_log text format ["[FORGE::Client::Garage::XEH_postInit] Unknown event: '%1'", _event];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}] call CFUNC(addEventHandler);
|
@ -1,9 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project name="forge_client">
|
<Project name="forge_client">
|
||||||
<Package name="Garage">
|
<Package name="Garage">
|
||||||
<Key ID="STR_forge_client_garage_Close">
|
|
||||||
<English>Close</English>
|
|
||||||
</Key>
|
|
||||||
<Key ID="STR_forge_client_garage_Name">
|
<Key ID="STR_forge_client_garage_Name">
|
||||||
<English>Garage</English>
|
<English>Garage</English>
|
||||||
</Key>
|
</Key>
|
||||||
|
@ -1,19 +1,16 @@
|
|||||||
#include "..\script_component.hpp"
|
#include "..\script_component.hpp"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Function: forge_client_init_fnc_handlePlayerLoad
|
|
||||||
* Author: IDSolutions
|
* Author: IDSolutions
|
||||||
*
|
|
||||||
* [Description]
|
|
||||||
* Handle player load from DB.
|
* Handle player load from DB.
|
||||||
*
|
*
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* 0: Data from key [<ARRAY|STRING|NUMBER|BOOL>] (default: [])
|
* 0: Data from key <ARRAY|STRING|NUMBER|BOOL> (default: [])
|
||||||
*
|
*
|
||||||
* Return Value:
|
* Return Value:
|
||||||
* N/A
|
* None
|
||||||
*
|
*
|
||||||
* Examples:
|
* Example:
|
||||||
* [[_data]] call forge_client_init_fnc_handlePlayerLoad (Server or Singleplayer Only)
|
* [[_data]] call forge_client_init_fnc_handlePlayerLoad (Server or Singleplayer Only)
|
||||||
* [[_data]] remoteExecCall ["forge_client_init_fnc_handlePlayerLoad", 2, false] (Multiplayer Only)
|
* [[_data]] remoteExecCall ["forge_client_init_fnc_handlePlayerLoad", 2, false] (Multiplayer Only)
|
||||||
*
|
*
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project name="forge_client">
|
<Project name="forge_client">
|
||||||
<Package name="Locker">
|
<Package name="Locker">
|
||||||
<Key ID="STR_forge_client_locker_Close">
|
|
||||||
<English>Close</English>
|
|
||||||
</Key>
|
|
||||||
<Key ID="STR_forge_client_locker_Equip">
|
<Key ID="STR_forge_client_locker_Equip">
|
||||||
<English>Equip</English>
|
<English>Equip</English>
|
||||||
</Key>
|
</Key>
|
||||||
|
@ -7,9 +7,6 @@
|
|||||||
<Key ID="STR_forge_client_store_Category">
|
<Key ID="STR_forge_client_store_Category">
|
||||||
<English>FILTER BY CATEGORY</English>
|
<English>FILTER BY CATEGORY</English>
|
||||||
</Key>
|
</Key>
|
||||||
<Key ID="STR_forge_client_store_Close">
|
|
||||||
<English>Close</English>
|
|
||||||
</Key>
|
|
||||||
<Key ID="STR_forge_client_store_Name">
|
<Key ID="STR_forge_client_store_Name">
|
||||||
<English>Store</English>
|
<English>Store</English>
|
||||||
</Key>
|
</Key>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user