public void InventorySwap(RealmTime time, InvSwapPacket pkt)
{
var en1 = Owner.GetEntity(pkt.Obj1.ObjectId);
var en2 = Owner.GetEntity(pkt.Obj2.ObjectId);
var con1 = en1 as IContainer;
var con2 = en2 as IContainer;
//TODO: locker
var item1 = con1.Inventory[pkt.Obj1.SlotId];
var item2 = con2.Inventory[pkt.Obj2.SlotId];
if (!AuditItem(con2, item1, pkt.Obj2.SlotId) ||
!AuditItem(con1, item2, pkt.Obj1.SlotId))
(en1 as Player).Client.SendPacket(new InvResultPacket {Result = 1});
else
{
var publicbags = new List<short>
{
0x0500,
0xffd,
0x0501
};
con1.Inventory[pkt.Obj1.SlotId] = item2;
con2.Inventory[pkt.Obj2.SlotId] = item1;
if (publicbags.Contains(en1.ObjectType) && (item2.Soulbound || item2.Undead || item2.SUndead))
{
DropBag(item2);
con1.Inventory[pkt.Obj1.SlotId] = null;
}
if (publicbags.Contains(en2.ObjectType) && (item1.Soulbound || item1.Undead || item1.SUndead))
{
DropBag(item1);
con2.Inventory[pkt.Obj2.SlotId] = null;
}
en1.UpdateCount++;
en2.UpdateCount++;
if (en1 is Player)
{
if (en1.Owner.Name == "Vault")
(en1 as Player).Client.Save();
(en1 as Player).CalcBoost();
(en1 as Player).Client.SendPacket(new InvResultPacket {Result = 0});
}
if (en2 is Player)
{
if (en2.Owner.Name == "Vault")
(en2 as Player).Client.Save();
(en2 as Player).CalcBoost();
(en2 as Player).Client.SendPacket(new InvResultPacket {Result = 0});
}
if (Owner is Vault)
if ((Owner as Vault).psr.Account.Name == psr.Account.Name)
return;
if (!(en2 is Player))
{
var con = en2 as Container;
const string dir = @"logs";
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
using (var writer = new StreamWriter(@"logs\DropLog.log", true))
{
writer.WriteLine(Name + " placed a " + item1.ObjectId +
(con.BagOwner != null ? " (Soulbound)" : ""));
}
}
}
}