private void DoTrade()
{
if (tradeTarget != null && Owner != null && tradeTarget.Owner != null &&
Owner == tradeTarget.Owner)
{
var thisItems = new List<Item>();
for (var i = 0; i < trade.Length; i++)
if (trade[i])
{
thisItems.Add(Inventory[i]);
Inventory[i] = null;
UpdateCount++;
if (itemnumber1 == 0)
{
items1 = items1 + " " + thisItems[itemnumber1].ObjectId;
}
else if (itemnumber1 > 0)
{
items1 = items1 + ", " + thisItems[itemnumber1].ObjectId;
}
itemnumber1++;
}
if (thisItems.Count == 0)
thisItems.Add(null);
var targetItems = new List<Item>();
for (var i = 0; i < tradeTarget.trade.Length; i++)
if (tradeTarget.trade[i])
{
targetItems.Add(tradeTarget.Inventory[i]);
tradeTarget.Inventory[i] = null;
tradeTarget.UpdateCount++;
if (itemnumber2 == 0)
{
items2 = items2 + " " + targetItems[itemnumber2].ObjectId;
}
else if (itemnumber2 > 0)
{
items2 = items2 + ", " + targetItems[itemnumber2].ObjectId;
}
itemnumber2++;
}
if (targetItems.Count == 0)
targetItems.Add(null);
for (var i = 0; i < Inventory.Length; i++) //put items by slotType
if (Inventory[i] == null)
{
if (SlotTypes[i] == 0)
{
Inventory[i] = targetItems[0];
targetItems.RemoveAt(0);
}
else
{
var itmIdx = -1;
for (var j = 0; j < targetItems.Count; j++)
{
try
{
if (targetItems[j].SlotType == SlotTypes[i])
{
itmIdx = j;
break;
}
}
catch
{
itmIdx = -1;
}
}
if (itmIdx != -1)
{
Inventory[i] = targetItems[itmIdx];
targetItems.RemoveAt(itmIdx);
}
}
if (targetItems.Count == 0) break;
}
if (targetItems.Count > 0)
for (var i = 0; i < Inventory.Length; i++) //force put item
if (Inventory[i] == null)
{
Inventory[i] = targetItems[0];
targetItems.RemoveAt(0);
if (targetItems.Count == 0) break;
}
for (var i = 0; i < tradeTarget.Inventory.Length; i++) //put items by slotType
if (tradeTarget.Inventory[i] == null)
{
if (tradeTarget.SlotTypes[i] == 0)
{
tradeTarget.Inventory[i] = thisItems[0];
thisItems.RemoveAt(0);
}
else
{
var itmIdx = -1;
for (var j = 0; j < thisItems.Count; j++)
{
try
{
if (thisItems[j].SlotType == tradeTarget.SlotTypes[i])
{
itmIdx = j;
break;
}
}
catch
{
itmIdx = -1;
}
}
if (itmIdx != -1)
{
tradeTarget.Inventory[i] = thisItems[itmIdx];
thisItems.RemoveAt(itmIdx);
}
}
if (thisItems.Count == 0) break;
}
if (thisItems.Count > 0)
for (var i = 0; i < tradeTarget.Inventory.Length; i++) //force put item
if (tradeTarget.Inventory[i] == null)
{
tradeTarget.Inventory[i] = thisItems[0];
thisItems.RemoveAt(0);
if (thisItems.Count == 0) break;
}
psr.SendPacket(new TradeDonePacket
{
Result = 1,
Message = "Trade successful!"
});
tradeTarget.psr.SendPacket(new TradeDonePacket
{
Result = 1,
Message = "Trade successful!"
});
const string dir = @"logs";
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
using (var writer = new StreamWriter(@"logs\TradeLog.log", true))
{
writer.WriteLine(Name + " traded " + "{" + items1 + "}" + " with " + tradeTarget.Name + " for " +
"{" + items2 + "}");
}
Console.Out.WriteLine(Name + " traded " + "{" + items1 + "}" + " with " + tradeTarget.Name + " for " +
"{" + items2 + "}");
items1 = "";
items2 = "";
itemnumber1 = 0;
itemnumber2 = 0;
UpdateCount++;
tradeTarget.UpdateCount++;
tradeTarget.tradeTarget = null;
tradeTarget.trade = null;
tradeTarget.tradeAccepted = false;
tradeTarget = null;
trade = null;
tradeAccepted = false;
}
}