Thursday, June 04, 2026 5:10:21 AM
> project show esm_alpha
The experimental first version of ESM that connected Arma 3 Exile servers to a PHP website. This college project prototype established the core concepts that would evolve into the ESM ecosystem.
Details
> upgradeTerritory.sqf
/*
	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
All opinions represented herein are my own
- © 2024 - 2026 itsthedevman
- build 4294fb2