/*
Bryan
Exile Server Manager
Fires from a request when the player wants to upgrade the territory.
*/
_flagID = parseNumber(_this select 0);
_playerUID = _this select 1;
try
{
_flag = _flagID call ExileServerManager_util_getFlagObject;
if (isNull _flag) then
{
throw "Invalid flag object";
};
if ((_flag getVariable ["ExileFlagStolen", 0]) isEqualTo 1) then
{
throw "Flag is stolen!";
};
_databaseID = _flag getVariable ["ExileDatabaseID",0];
_moderators = _flag getVariable ["ExileTerritoryModerators",[]];
if !((_playerUID) in _moderators) then
{
throw "No upgrade Access!";
};
_level = _flag getVariable ["ExileTerritoryLevel",0];
_territoryConfig = getArray(missionConfigFile >> "CfgTerritories" >> "Prices");
_territoryLevels = count _territoryConfig;
if (_territoryLevels < (_level + 1)) then
{
throw "This territory has already the highest level.";
};
_territoryPrice = (_territoryConfig select _level) select 0;
_territoryRange = (_territoryConfig select _level) select 1;
_playerObject = _playerUID call ExileClient_util_player_objectFromPlayerUID;
// The player is online
if !(isNull(_playerObject)) then
{
_playerMoney = _playerObject getVariable ["ExileLocker",0];
if (_playerMoney < _territoryPrice) then
{
throw "Not enough pop tabs!";
};
_playerMoney = _playerMoney - _territoryPrice;
_playerObject setVariable ["ExileLocker", _playerMoney];
}
else
{
_playerMoney = format["getLocker:%1", _playerUID] call ExileServer_system_database_query_selectSingleField;
if (_playerMoney < _territoryPrice) then
{
throw "Not enough pop tabs!";
};
_playerMoney = _playerMoney - _territoryPrice;
};
format["updateLocker:%1:%2", _playerMoney, _playerUID] call ExileServer_system_database_query_fireAndForget;
_flag setVariable ["ExileTerritoryLevel",_level + 1, true];
_flag setVariable ["ExileTerritorySize",_territoryRange, true];
format ["setTerritoryLevel:%1:%2",_level + 1,_databaseID] call ExileServer_system_database_query_fireAndForget;
format ["setTerritorySize:%1:%2",_territoryRange,_databaseID] call ExileServer_system_database_query_fireAndForget;
// Update all constructions and containers
_flag call ExileServer_system_territory_updateNearContainers;
_flag call ExileServer_system_territory_updateNearConstructions;
if !(isNull(_playerObject)) then
{
// Tell the client
[_playerObject getVariable ["ExileSessionID", -1], "toastRequest", ["SuccessTitleAndText", ["Territory upgraded!", format ["Your territory has reached level %1 and now has a new radius of %2 meters.", _level + 1, _territoryRange]]]] call ExileServer_system_network_send_to;
};
//extDB2 logging
_logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "territoryLogging");
if (_logging isEqualTo 1) then
{
_territoryLog = format ["PLAYER ( %1 ) PAID %2 POP TABS VIA THE ONLINE WEB PORTAL TO UPGRADE TERRITORY #%3 TO LEVEL %4 | PLAYER TOTAL POP TABS: %5",_playerUID,_territoryPrice,_databaseID,(_level + 1),_playerMoney];
"extDB2" callExtension format["1:TERRITORY:%1",_territoryLog];
};
}
catch
{
["Failed to upgrade via online portal!", _exception] call ExileServerManager_util_log;
};
true