So I've got an issue with (Warehouse's / VIP / Slash) not allowing me to place items into them. instead the item just stay in my inventory.
asking if anyone could look over the code below and give me some results to fixing this problem.
Thanks in advance
..../Gamepackets/warehouse
....Game/Conquerstructures/warehouse
...NPC
..../ Packethandler
..../ Packethandler
Any clue will help Thanks.
asking if anyone could look over the code below and give me some results to fixing this problem.
Thanks in advance
..../Gamepackets/warehouse
PHP Code:
namespace COServer.Network.GamePackets
{
public unsafe class Warehouse : Writer, Interfaces.IPacket
{
Byte[] Packet;
public Warehouse(Boolean Create)
{
if (Create)
{
Packet = new Byte[92];
WriteUInt16((UInt16)(Packet.Length - 8), 0, Packet);
WriteUInt16(1102, 2, Packet);
WriteUInt32((UInt32)Time32.timeGetTime().GetHashCode(), 4, Packet);
}
}
public enum Mode : byte
{
Entire,
AddItem,
RemoveItem
}
public UInt32 NpcID
{
get { return BitConverter.ToUInt32(Packet, 4); }
set { WriteUInt32(value, 4, Packet); }
}
public Mode Action
{
get { return (Mode)Packet[12]; }
set { Packet[12] = (Byte)value; }
}
public Byte Type
{
get { return Packet[12]; }
set { Packet[12] = value; }
}
public UInt32 UID
{
get { return BitConverter.ToUInt32(Packet, 20); }
set { WriteUInt32(value, 20, Packet); }
}
public UInt32 Count
{
get { return BitConverter.ToUInt32(Packet, 24); }
set
{
if (value > 20)
throw new Exception("Invalid Count value.");
Byte[] packet = new Byte[8 + 28 + (76 * value)];
WriteUInt16((UInt16)(packet.Length - 8), 0, packet);
WriteUInt16(1102, 2, packet);
WriteUInt32(NpcID, 4, packet);
WriteUInt32(Type, 12, packet);
packet[13] = Packet[13];
WriteUInt32(value, 24, packet);
Packet = packet;
}
}
public void Append(ConquerItem item)
{
WriteUInt32(item.UID, 28, Packet);
WriteUInt32(item.ID, 32, Packet);
WriteByte((Byte)item.SocketOne, 37, Packet);
WriteByte((Byte)item.SocketTwo, 38, Packet);
WriteByte(item.Plus, 45, Packet);
WriteByte(item.Bless, 46, Packet);
WriteByte((Byte)(item.Bound == true ? 1 : 0), 47, Packet);
WriteUInt16(item.Enchant, 48, Packet);
WriteUInt16((ushort)item.Effect, 50, Packet);
WriteByte((Byte)(item.Suspicious == true ? 1 : 0), 52, Packet);
WriteByte(item.Lock, 54, Packet);
WriteByte((Byte)item.Color, 55, Packet);
WriteUInt32(item.SocketProgress, 56, Packet);
WriteUInt32(item.PlusProgress, 60, Packet);
WriteBoolean(item.Inscribed, 64, Packet);
WriteUInt32(item.TimeLeftInMinutes, 68, Packet);
WriteUInt32(item.StackSize, 76, Packet);
}
public Byte[] ToArray()
{
return Packet;
}
public void Deserialize(Byte[] buffer)
{
Packet = buffer;
}
public void Send(Client.GameState client)
{
client.Send(Packet);
}
public static void Process(Byte[] packet, Client.GameState client)
{
if (client.Action != 2) return;
Warehouse warehouse = new Warehouse(false);
warehouse.Deserialize(packet);
switch (warehouse.Action)
{
case Warehouse.Mode.Entire:
{
Game.ConquerStructures.Warehouse wh = client.Warehouses[(Game.ConquerStructures.Warehouse.WarehouseID)warehouse.NpcID];
if (wh == null) return;
Byte count = 0;
warehouse.Count = 1;
warehouse.Action = Warehouse.Mode.AddItem;
for (; count < wh.Count; count++)
{
warehouse.Append(wh.Objects[count]);
client.Send(warehouse);
ItemLock itemLock = new ItemLock(true);
itemLock.UID = wh.Objects[count].UID;
itemLock.ID = ItemLock.UnlockDate;
itemLock.dwParam = (UInt32)(wh.Objects[count].UnlockEnd.Year * 10000 + wh.Objects[count].UnlockEnd.Month * 100 + wh.Objects[count].UnlockEnd.Day);
client.Send(itemLock);
ItemAdding add = new ItemAdding(true);
if (wh.Objects[count].Purification.Available)
add.Append(wh.Objects[count].Purification);
if (wh.Objects[count].ExtraEffect.Available)
if (wh.Objects[count].ExtraEffect.Available)
add.Append(wh.Objects[count].ExtraEffect);
if (wh.Objects[count].Purification.Available || wh.Objects[count].ExtraEffect.Available)
client.Send(add);
if (client.Entity.HeavenBlessing == 0 && client.Entity.GuiHeavenBlessing == 0)
{
Data Data = new Data(true);
Data.UID = client.Entity.UID;
Data.ID = 116;
Data.dwParam = Data.CustomCommands.GuiHeavenBlessing;
client.Send(Data);
client.Entity.GuiHeavenBlessing++;
}
}
break;
}
case Warehouse.Mode.AddItem:
{
if (client.Booth != null) return;
foreach (ConquerItem itemx in client.Inventory.Objects)
{
if ((itemx.ID == 1100003) || (itemx.ID == 1100006) || (itemx.ID == 1100009))
{
if (!client.Warehouses.ContainsKey((Game.ConquerStructures.Warehouse.WarehouseID)(uint)itemx.UID))
{
client.Warehouses.Add((Game.ConquerStructures.Warehouse.WarehouseID)(uint)itemx.UID, new COServer.Game.ConquerStructures.Warehouse(client, (Game.ConquerStructures.Warehouse.WarehouseID)(uint)itemx.UID));
}
}
}
Game.ConquerStructures.Warehouse wh = client.Warehouses[(Game.ConquerStructures.Warehouse.WarehouseID)warehouse.NpcID];
if (wh == null) return;
ConquerItem item = null;
if (client.Inventory.TryGetItem(warehouse.UID, out item))
{
if (item.ID >= 729960 && item.ID <= 729970) return;
if (!ConquerItem.isRune(item.UID))
{
if (wh.Add(item))
{
warehouse.UID = 0;
warehouse.Count = 1;
warehouse.Append(item);
client.Send(warehouse);
ItemLock itemLock = new ItemLock(true);
itemLock.UID = item.UID;
itemLock.ID = ItemLock.UnlockDate;
itemLock.dwParam = (UInt32)(item.UnlockEnd.Year * 10000 + item.UnlockEnd.Month * 100 + item.UnlockEnd.Day);
client.Send(itemLock);
ItemAdding add = new ItemAdding(true);
if (item.Purification.Available)
add.Append(item.Purification);
if (item.ExtraEffect.Available)
add.Append(item.ExtraEffect);
if (item.Purification.Available || item.ExtraEffect.Available)
client.Send(add);
return;
}
}
else client.Send(new Message("You can not store Flame Stone Rune's in Warehouse", System.Drawing.Color.Red, Message.TopLeft));
}
break;
}
case Warehouse.Mode.RemoveItem:
{
Game.ConquerStructures.Warehouse wh = client.Warehouses[(Game.ConquerStructures.Warehouse.WarehouseID)warehouse.NpcID];
if (wh == null) return;
if (wh.ContainsUID(warehouse.UID))
{
if (wh.Remove(warehouse.UID))
{
client.Send(warehouse);
return;
}
}
break;
}
default: Console.WriteLine("[Warehouse] Unknown type: " + warehouse.Action); break;
}
}
}
}
....Game/Conquerstructures/warehouse
PHP Code:
namespace COServer.Game.ConquerStructures
{
public unsafe class Warehouse
{
ConquerItem[] objects;
Client.GameState Owner;
WarehouseID _ID;
byte MaxCount = 20;
Dictionary<uint, ConquerItem> items;
public Warehouse(Client.GameState client, WarehouseID ID)
{
Owner = client;
_ID = ID;
MaxCount = 60;
items = new Dictionary<uint, ConquerItem>(MaxCount);
objects = new ConquerItem[0];
}
public bool Add(ConquerItem item)
{
if (!items.ContainsKey(item.UID) && Count < MaxCount)
{
item.Warehouse = (ushort)_ID;
item.Position = 0;
Owner.Inventory.Remove(item, Game.Enums.ItemUse.Move);
items.Add(item.UID, item);
objects = items.Values.ToArray();
return true;
}
return false;
}
public bool Remove(ConquerItem item)
{
if (items.ContainsKey(item.UID))
{
item.Warehouse = 0;
if (Owner.Inventory.Add(item, Enums.ItemUse.Move))
{
items.Remove(item.UID);
objects = items.Values.ToArray();
Network.GamePackets.Warehouse warehouse = new Network.GamePackets.Warehouse(true);
warehouse.Action = Network.GamePackets.Warehouse.Mode.RemoveItem;
warehouse.Count = 1;
warehouse.Append(item);
Owner.Send(warehouse);
return true;
}
}
return false;
}
public bool Remove(uint UID)
{
if (items.ContainsKey(UID))
{
ConquerItem item = items[UID];
item.Warehouse = 0;
if (Owner.Inventory.Add(item, Enums.ItemUse.Move))
{
items.Remove(item.UID);
objects = items.Values.ToArray();
return true;
}
}
return false;
}
public ConquerItem[] Objects
{
get { return objects; }
}
public byte Count
{
get { return (byte)Objects.Length; }
}
public ConquerItem GetItem(uint UID)
{
ConquerItem item = null;
items.TryGetValue(UID, out item);
return item;
}
public bool ContainsUID(uint UID)
{
return items.ContainsKey(UID);
}
public enum WarehouseID : ushort
{
TwinCity = 8,
PhoenixCity = 10012,
ApeCity = 10028,
DesertCity = 10011,
BirdCity = 10027,
StoneCity = 4101,
Market = 44,
House = 100
}
}
}
...NPC
PHP Code:
Warehousemen
case 8:
case 44:
case 4101:
case 10012:
case 10028:
case 10011:
case 10027:
case 30658:
{
switch (npcRequest.OptionID)
{
case 0:
{
Data data = new Data(true);
INpc npc = null;
if (client.Map.Npcs.TryGetValue(client.ActiveNpc, out npc))
{
if (client.WarehousePW == 0 && client.Entity.NotHavePassword == false)
{
dialog.Text("First time here? Well, for the security of your warehouse, please set a warehouse password (Setting - Secondary).");
dialog.Option("Alright. Thanks, man.", 1);
dialog.Avatar(30);
dialog.Send();
return;
}
if (!client.WarehouseOpen)
client.Send(new Message("", System.Drawing.Color.Maroon, Message.TopLeft));
else
{
if (!client.WarehouseOpen)
{
data = new Data(true);
data.ID = Data.OpenWindow;
data.UID = client.Entity.UID;
data.TimeStamp = Time32.Now;
data.dwParam = 568;
data.wParam1 = client.Entity.X;
data.wParam2 = client.Entity.Y;
client.Send(data);
return;
}
}
data = new Data(true);
data.ID = Data.OpenWindow;
data.UID = client.Entity.UID;
data.TimeStamp = Time32.Now;
data.dwParam = Data.WindowCommands.Warehouse;
data.wParam1 = npc.X;
data.wParam2 = npc.Y;
client.Send(data);
}
break;
}
case 1:
{
client.Entity.NotHavePassword = true;
break;
}
}
break;
}
..../ Packethandler
PHP Code:
case PacketID.Warehouses:
{
Warehouse.Process(packet, client);
break;
}
..../ Packethandler
PHP Code:
#region WarehouseOpen
if (req.InteractType == NpcReply.MessageBox)
{
if (client.Entity.ActivePOPUP == 99995)
{
client.Entity.ActivePOPUP = 0;
break;
}
if (req.OptionID == 255 && client.MessageOK != null)
client.MessageOK.Invoke(client);
else
if (client.MessageCancel != null)
client.MessageCancel.Invoke(client);
client.MessageOK = null;
client.MessageCancel = null;
}
else
{
Data data = new Data(true);
if (ID == 2031)
client.ActiveNpc = req.NpcID;
if (req.NpcID == 12)
{
if (client.WarehousePW != 0)
{
if (!client.WarehouseOpen)
{
data = new Data(true);
data.ID = Data.OpenWindow;
data.UID = client.Entity.UID;
data.TimeStamp = Time32.Now;
data.dwParam = 568;
data.wParam1 = client.Entity.X;
data.wParam2 = client.Entity.Y;
client.Send(data);
break;
}
}
else
{
client.Send(new Message("To protect your items that are stored in warehouse, you should set a Secondary password at Settings.", System.Drawing.Color.Red, Message.TopLeft));
}
if (client.Entity.VIPLevel > 0)
{
data = new Data(true);
data.ID = Data.OpenWindow;
data.UID = client.Entity.UID;
data.TimeStamp = Time32.Now;
data.dwParam = Data.WindowCommands.VIPWarehouse;
data.wParam1 = client.Entity.X;
data.wParam2 = client.Entity.Y;
client.Send(data);
break;
}
}
#endregion
Any clue will help Thanks.