public void RequestTrade(RealmTime time, RequestTradePacket pkt)
{
if (!NameChosen)
{
SendInfo("Unique name is required to trade with others!");
return;
}
if (tradeTarget != null)
{
SendError("You're already trading!");
tradeTarget = null;
return;
}
var target = Owner.GetUniqueNamedPlayer(pkt.Name);
if (target == null)
{
SendError("Player not found!");
return;
}
if (target.tradeTarget != null && target.tradeTarget != this)
{
SendError(target.Name + " is already trading!");
return;
}
if (potentialTrader.ContainsKey(target))
{
tradeTarget = target;
trade = new bool[12];
tradeAccepted = false;
target.tradeTarget = this;
target.trade = new bool[12];
target.tradeAccepted = false;
potentialTrader.Clear();
target.potentialTrader.Clear();
var my = new TradeItem[Inventory.Length];
for (var i = 0; i < Inventory.Length; i++)
my[i] = new TradeItem
{
Item = Inventory[i] == null ? -1 : Inventory[i].ObjectType,
SlotType = SlotTypes[i],
Included = false,
Tradeable =
(Inventory[i] != null && i >= 4) && (!Inventory[i].Soulbound && !Inventory[i].Undead && !Inventory[i].SUndead)
};
var your = new TradeItem[target.Inventory.Length];
for (var i = 0; i < target.Inventory.Length; i++)
your[i] = new TradeItem
{
Item = target.Inventory[i] == null ? -1 : target.Inventory[i].ObjectType,
SlotType = target.SlotTypes[i],
Included = false,
Tradeable =
(target.Inventory[i] != null && i >= 4) && (!target.Inventory[i].Soulbound && !target.Inventory[i].Undead &&
!target.Inventory[i].SUndead)
};
psr.SendPacket(new TradeStartPacket
{
MyItems = my,
YourName = target.Name,
YourItems = your
});
target.psr.SendPacket(new TradeStartPacket
{
MyItems = your,
YourName = Name,
YourItems = my
});
}
else
{
target.potentialTrader[this] = 1000*20;
target.psr.SendPacket(new TradeRequestedPacket
{
Name = Name
});
SendInfo("Sent trade request to " + target.Name);
}
}