public void InventoryDrop(RealmTime time, InvDropPacket pkt)
{
//TODO: locker again
const short NORM_BAG = 0x0500;
const short SOUL_BAG = 0x0503;
const short PDEM_BAG = 0xffd;
const short DEM_BAG = 0xffe;
const short SDEM_BAG = 0xfff;
var entity = Owner.GetEntity(pkt.Slot.ObjectId);
var con = entity as IContainer;
if (con.Inventory[pkt.Slot.SlotId] == null) return;
if ((entity is Player) && (entity as Player).Decision == 1)
{
(entity as Player).Client.SendPacket(new InvResultPacket {Result = 1});
return;
}
var item = con.Inventory[pkt.Slot.SlotId];
con.Inventory[pkt.Slot.SlotId] = null;
entity.UpdateCount++;
Container container;
if (item.Soulbound)
{
container = new Container(SOUL_BAG, 1000*60, true) {BagOwner = AccountId};
}
else if (item.Undead)
{
container = new Container(DEM_BAG, 1000*60, true) {BagOwner = AccountId};
}
else if (item.PUndead)
{
container = new Container(PDEM_BAG, 1000*60, true);
}
else if (item.SUndead)
{
container = new Container(SDEM_BAG, 1000*60, true) {BagOwner = AccountId};
}
else
{
container = new Container(NORM_BAG, 1000*60, true);
}
var bagx = entity.X + (float) ((invRand.NextDouble()*2 - 1)*0.5);
var bagy = entity.Y + (float) ((invRand.NextDouble()*2 - 1)*0.5);
try
{
container.Inventory[0] = item;
container.Move(bagx, bagy);
container.Size = 75;
Owner.EnterWorld(container);
if (entity is Player)
{
(entity as Player).CalcBoost();
(entity as Player).Client.SendPacket(new InvResultPacket
{
Result = 0
});
(entity as Player).Client.Save();
}
if (Owner is Vault)
if ((Owner as Vault).psr.Account.Name == psr.Account.Name)
return;
const string dir = @"logs";
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
using (var writer = new StreamWriter(@"logs\DropLog.log", true))
{
writer.WriteLine(Name + " dropped a " + item.ObjectId +
(container.BagOwner != null ? " (Soulbound)" : ""));
}
}
catch
{
Console.Out.WriteLine(Name + " just attempted to dupe.");
}
}