mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-20 19:57:46 +00:00
97 lines
No EOL
3.5 KiB
Lua
97 lines
No EOL
3.5 KiB
Lua
--[[
|
|
|
|
TradeExecuteCommand Script
|
|
|
|
Handles all trading between players
|
|
|
|
Functions:
|
|
|
|
processTradeCommandOpenTray() - Opens the trade widget.
|
|
processTradeCommandCloseTray() - Closes the trade widget.
|
|
processTradeCommandReply(command, params) - Operates the trade widget.
|
|
processUpdateTradeCommandTrayData() - ?
|
|
|
|
Commands:
|
|
|
|
set: TradeWidget resets "Set Mode" (turned on once item selected while waiting for reply).
|
|
back: TradeWidget resets "Choose Mode" (turned on when ui operation is done).
|
|
fix: You have accepted the deal.
|
|
targetfix: Target has accepted the deal.
|
|
doedit: You have canceled your accept.
|
|
reedit: Target has canceled their accept.
|
|
|
|
--]]
|
|
|
|
require ("global")
|
|
|
|
function onEventStarted(player, actor, triggerName)
|
|
|
|
callClientFunction(player, "delegateCommand", GetStaticActor("TradeExecuteCommand"), "processTradeCommandOpenTray");
|
|
|
|
tradeOffering = player:GetTradeOfferings();
|
|
|
|
while (true) do
|
|
widgetOpen, chosenOperation, tradeSlot, itemActor, quantity, itemPackageId, itemSlot = callClientFunction(player, "delegateCommand", GetStaticActor("TradeExecuteCommand"), "processUpdateTradeCommandTrayData");
|
|
|
|
--Abort script if client script dead
|
|
if (widgetOpen == false or widgetOpen == nil) then
|
|
player:FinishTradeTransaction();
|
|
break;
|
|
end
|
|
|
|
--Handle you/target canceling/finishing the trade
|
|
if (not player:IsTrading() or not player:GetOtherTrader():IsTrading()) then
|
|
player:FinishTradeTransaction();
|
|
break;
|
|
end
|
|
|
|
--Handle target accepting
|
|
if (player:GetOtherTrader():IsTradeAccepted() == true) then
|
|
callClientFunction(player, "delegateCommand", GetStaticActor("TradeExecuteCommand"), "processTradeCommandReply", "targetfix");
|
|
else
|
|
callClientFunction(player, "delegateCommand", GetStaticActor("TradeExecuteCommand"), "processTradeCommandReply", "reedit");
|
|
end
|
|
|
|
--Check if both accepted the trade
|
|
if (player:IsTradeAccepted() and player:GetOtherTrader():IsTradeAccepted()) then
|
|
callClientFunction(player, "delegateCommand", GetStaticActor("TradeExecuteCommand"), "processTradeCommandCloseTray");
|
|
GetWorldManager():CompleteTrade(player, player:GetOtherTrader());
|
|
break;
|
|
end
|
|
|
|
--Clear Item
|
|
if (chosenOperation == 1) then
|
|
player:RemoveTradeItem(tradeSlot - 1);
|
|
callClientFunction(player, "delegateCommand", GetStaticActor("TradeExecuteCommand"), "processTradeCommandReply", "set");
|
|
--Clear All
|
|
elseif (chosenOperation == 2) then
|
|
player:ClearTradeItems();
|
|
callClientFunction(player, "delegateCommand", GetStaticActor("TradeExecuteCommand"), "processTradeCommandReply", "set");
|
|
--Item Chosen
|
|
elseif (chosenOperation == 3) then
|
|
player:AddTradeItem(tradeSlot - 1, itemActor, quantity);
|
|
callClientFunction(player, "delegateCommand", GetStaticActor("TradeExecuteCommand"), "processTradeCommandReply", "set", 2, 2, 2, 2);
|
|
--Gil Chosen
|
|
elseif (chosenOperation == 4) then
|
|
player:AddTradeItem(tradeSlot - 1, itemActor, quantity);
|
|
callClientFunction(player, "delegateCommand", GetStaticActor("TradeExecuteCommand"), "processTradeCommandReply", "set");
|
|
--Cancel
|
|
elseif (chosenOperation == 11) then
|
|
player:FinishTradeTransaction();
|
|
break;
|
|
--OK
|
|
elseif (chosenOperation == 12) then
|
|
callClientFunction(player, "delegateCommand", GetStaticActor("TradeExecuteCommand"), "processTradeCommandReply", "fix");
|
|
player:AcceptTrade(true);
|
|
--Reedit
|
|
elseif (chosenOperation == 13) then
|
|
callClientFunction(player, "delegateCommand", GetStaticActor("TradeExecuteCommand"), "processTradeCommandReply", "doedit");
|
|
player:AcceptTrade(false);
|
|
end
|
|
|
|
wait(1);
|
|
end
|
|
|
|
player:EndEvent();
|
|
|
|
end |