Friday, September 20, 2024 12:04:26 AM
> settings

Customize


Authenticate

> ExileServer_marxet_system_network_createListingRequest.sqf
/*
    MarXet v2.0
    Written by WolfkillArcadia
    CC BY-NC-SA 4.0
*/
 
private["_sessionID", "_package", "_listingClassname", "_listingInfo", "_startingAmount", "_auctionLength", "_containerType", "_containerNetID", "_playerObject", "_id", "_itemProperties", "_removed", "_respect", "_vehicle", "_endTime", "_dbPackage", "_traderLog"];
_sessionID = _this select 0;
_package = _this select 1;
_listingClassname = (_package select 0) select 0;
_listingInfo = (_package select 0) select 1;
_startingAmount = parseNumber(_package select 1);
_auctionLength = _package select 2;
_containerType = _package select 3;
_containerNetID = _package select 4;
try 
{
	_playerObject = _sessionID call ExileServer_system_session_getPlayerObject;
	if (isNull _playerObject) then 
	{
		throw "Player is Null";
	};
	if (_playerObject getVariable ["ExileMutex", false]) then 
	{
		throw "Player is Mutex";
	};
	_playerObject setVariable ["ExileMutex", true];
	_id = [] call ExileServer_marxet_system_request_generateID;
	if (_id isEqualTo "") then 
	{
		throw "Failed to generate ID";
	};
	if (_startingAmount < 1) then 
	{
		throw "Starting price must be greater than or equal to 1";
	};
	_itemProperties = [];
	_removed = false;
	switch (_listingClassname) do 
	{
		case "ExileScore": 
		{
			_respect = _playerObject getVariable ["ExileScore", 0];
			_respect = _respect - parseNumber(_listingInfo);
			_playerObject setVariable ["ExileScore", _respect];
			_itemProperties = [parseNumber(_listingInfo)];
			format["setAccountScore:%1:%2", _respect, getPlayerUID _playerObject] call ExileServer_system_database_query_fireAndForget;
			[_sessionID, "updateRespect", [_respect]] call ExileServer_system_network_send_to;
			_removed = true;
		};
		default 
		{
			switch (_containerType) do
			{
				case 1:
				{
					_removed = [_playerObject, _listingClassname] call ExileClient_util_playerCargo_remove;
				};
				case 2:
				{
					_removed = [(uniformContainer _playerObject), _listingClassname] call ExileClient_util_containerCargo_remove;
				};
				case 3:
				{
					_removed = [(vestContainer _playerObject), _listingClassname] call ExileClient_util_containerCargo_remove;
				};
				case 4:
				{
					_removed = [(backpackContainer _playerObject), _listingClassname] call ExileClient_util_containerCargo_remove;
				};
				case 5:
				{
					_vehicle = objectFromNetId _containerNetID;
					_removed = [_vehicle, _listingClassname] call ExileClient_util_containerCargo_remove;
				};
			};
		};
	};
	if !(_removed) then 
	{
		throw "Failed to remove trade item/money/respect";
	};
	_endTime = parseSimpleArray ("extDB3" callExtension format[
		"9:DATEADD:%1:[%2,%3,%4,0]", 
		"marxetCurrentDate" call ExileServer_system_database_query_selectSingleField, 
		_auctionLength select 0, 
		_auctionLength select 1, 
		_auctionLength select 2
	]) select 1;
	MarXetAuction setVariable 
	[
		_id, 
		[
			false,
			[
				getPlayerUID(_playerObject),
				name(_playerObject)
			],
			[] call ExileServer_util_time_currentTime,
			[
				_listingClassname,
				_itemProperties
			],
			[
				_endTime call ExileClient_marxet_util_time_convert,
				_startingAmount,
				0,
				""
			]
		], 
		true
	];
	_dbPackage = 
	[
		"marxetCreateListing", 
		[
			_id,
			getPlayerUID(_playerObject),
			_listingClassname,
			_itemProperties,
			_startingAmount,
			_startingAmount,
			_endTime
		]
	] 
	call ExileServer_util_extDB2_createMessage;
	_dbPackage call ExileServer_system_database_query_insertSingle;
	[_sessionID, "createListingResponse", [true, _listingClassname]] call ExileServer_system_network_send_to;
	MarXetUpdatePending = true;
	publicVariable "MarXetUpdatePending";
	if (getNumber(missionConfigFile >> "CfgMarXet" >> "Settings" >> "Logging" >> "logToFile") isEqualTo 1) then
	{
		_traderLog = format [
			"PLAYER %1 (%2) CREATED A LISTING. ID: %3. LISTING ITEM: %4. STARTING PRICE %5. ENDING DATE: %6", 
			_playerObject, 
			getPlayerUID(_playerObject),
			_id,
			_startingAmount,
			_endTime call ExileClient_marxet_util_time_pretty
		];
		"extDB3" callExtension format["1:TRADING:%1",_traderLog];
	};
	if (getNumber(missionConfigFile >> "CfgMarXet" >> "Settings" >> "Logging" >> "logToDiscord") isEqualTo 1) then
	{
		[
			"success", 
			"embed", 
			[
				"Listing Created",
				"",
				[
					["Player Name (UID)", format["%1 (%2)", name _playerObject, getPlayerUID(_playerObject)], true],
					["MarXet ID", _id, true],
					["Trading For", _listingClassname, true],
					["Starting Price", _startingAmount, true],
					["End date", _endTime call ExileClient_marxet_util_time_pretty, true]
				]
			]
		]
		call ESM_fnc_logToDiscord;
	};
	if (isClass(configFile >> "CfgPatches" >> "exile_server_xm8")) then 
	{
		[
			getPlayerUID(_playerObject),
			"Listing Created",
			format[
				"Awesome!\nYour listing of **%1** has been created\nWe will send you another notification when the listing closes\nThank you for using **MarXet**, Exile's leading Player Marketplace and Auction House",
				getText(configFile >> (_listingClassname call ExileClient_util_gear_getConfigNameByClassName) >> _listingClassname >> "displayName")
			]
		] 
		call ExileServer_system_xm8_sendCustom;
	};
}
catch 
{
	[_sessionID, "createListingResponse", [false, _exception]] call ExileServer_system_network_send_to;
};
if (!isNil "_playerObject") then 
{
	_playerObject setVariable ["ExileMutex", false];
};
All opinions represented herein are my own
- © 2024 itsthedevman
- build 3c15a1b