wServer.realm.entities.player.Player.InventorySwap C# (CSharp) Method

InventorySwap() public method

public InventorySwap ( RealmTime time, wServer.cliPackets.InvSwapPacket pkt ) : void
time RealmTime
pkt wServer.cliPackets.InvSwapPacket
return void
        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)" : ""));
                    }
                }
            }
        }