ihave some question!!!
this my source screen!!!
when i equip the item on , it has no error!!
when i turn it off,the item is still in the equipment list, but on the character's hand , i can't see it .
this is my equip.cs
PHP Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ExodusBinaries.PacketHandling.ItemPacket
{
public class Equip
{
public static void HandleUnEquip(GameClient GC, byte[] Data)
{
if (GC.MyChar.Loc.Map == 1090)
{ return; }
uint ItemUID = BitConverter.ToUInt32(Data, 4);
if (GC.MyChar.Inventory.Count < 40)
{
byte Slot = GC.MyChar.Equips.GetSlot(ItemUID);
if (Slot != 0)
{
// Console.WriteLine("uid is {0}", GC.MyChar.Equips.Get(Slot).UID);
if (GC.MyChar.Equips.Get(Slot).UID == 0)
{
GC.MyChar.Equips.Get(Slot).UID = (uint)GC.MyChar.Rnd.Next(10000000);
}
//GC.MyChar.Inventory.Add(GC.MyChar.Equips.Get(Slot).UID, GC.MyChar.Equips.Get(Slot));
//Database.NewItem(GC.MyChar.Equips.Get(Slot), GC.MyChar);
GC.MyChar.EquipStats(Slot, false);
GC.MyChar.Equips.UnEquip(Slot, GC.MyChar);
/* UnEquip if excute , the item is remove , but still in the equipment list */
World.Spawn(GC.MyChar, false);
/* World.Spawn if excute , i can't see any equip in character's hand */
//Database.SaveCharacter(GC.MyChar, GC.MyChar.MyClient.AuthInfo.Account);
}
}
}
public static void HandleEquip(GameClient GC, byte[] Data)
{
if (GC.MyChar.Loc.Map == 1090)
{
return;
}
uint ItemUID = BitConverter.ToUInt32(Data, 4); //获得客户端传来的物品唯一辨别ID
byte Pos = Data[8]; //获得物品的装备位置
Item I = GC.MyChar.FindInvItem(ItemUID); //从人物背包集合里面查找这个物品
if (I.ID == 0)
{
GC.AddSend(Packets.ItemPacket(ItemUID, 0, 3));
return;
}
bool Arrow = false; //是否为箭支
if (I.ID == 1050000 || I.ID == 1050001 || I.ID == 1050002)
{
Pos = 5; Arrow = true;
}
if (Arrow)
{
if (GC.MyChar.Equips.Get(4).ID == 0)
return;
else if (GC.MyChar.Equips.Get(4).ID / 10000 != 50)
return;
}
if (Pos == 0)
{
GC.MyChar.UseItem(I); //如果判断这个物品是非装备的话,执行使用物品方法
}
else
{
if (I.CanEquip(GC.MyChar)) //判断是否为可以装备的物品
{
Item Current = GC.MyChar.Equips.Get(Pos); //获得人物当前装备栏的装备
if (Current.UID == 0 && (Pos != 4 || GC.MyChar.Equips.Get(5).UID == 0 || ItemIDManipulation.Digit(I.ID, 1) != 5))
{
GC.AddSend(Packets.ItemPacket(I.UID, 0, 3)); //刷新装备栏
I.Position = Pos; //更新数据库状态
//GC.MyChar.Inventory.Remove(I.UID); //从背包集合删除此物品
GC.MyChar.Equips.Replace(Pos, I, GC.MyChar); //带上此装备
GC.MyChar.EquipStats(Pos, true); //添加此装备拥有的状态
//Database.SaveCharacter(GC.MyChar, GC.Account);
}
else if (Current.UID != 0 && (Pos != 4 || GC.MyChar.Equips.Get(5).UID == 0 || ItemIDManipulation.Digit(I.ID, 1) != 5))
{
GC.MyChar.EquipStats(Pos, false); //删除原来带在身上装备的状态
/*以下于与上面的判断结果执行方式是一样的*/
GC.AddSend(Packets.ItemPacket(I.UID, 0, 3));
I.Position = Pos;
//GC.MyChar.Inventory.Remove(I.UID);
if (Current.UID == 0)
{
Current.UID = (uint)GC.MyChar.Rnd.Next(10000000);
}
//GC.MyChar.Inventory.Add(Current.UID, Current);
GC.AddSend(Packets.AddItem(Current, 0));
Current.Position = 0; //添加原来身上的装备到物品栏
GC.MyChar.Equips.Replace(Pos, I, GC.MyChar);
GC.MyChar.EquipStats(Pos, true);
//Database.SaveCharacter(GC.MyChar, GC.Account);
}
else if (GC.MyChar.Inventory.Count < 40)
{
if (GC.MyChar.Equips.Get(4).UID != 0)
{
GC.MyChar.EquipStats(4, false);
GC.MyChar.MyClient.AddSend(Packets.ItemPacket(I.UID, 0, 3));
I.Position = Pos;
//GC.MyChar.Inventory.Remove(I.UID);
GC.MyChar.AddFullItem(I.ID, I.Bless, I.Plus, I.Enchant, I.Soc1, I.Soc2, I.Color, I.Progress, I.TalismanProgress, I.Effect, I.FreeItem, I.CurDur, I.MaxDur, I.Suspicious, I.Locked);
if (Current.UID == 0)
{
GC.MyChar.Equips.Get(4).UID = (uint)GC.MyChar.Rnd.Next(10000000);
}
//GC.MyChar.Inventory.Add(GC.MyChar.Equips.Get(4).UID, GC.MyChar.Equips.Get(4));
GC.MyChar.Equips.Get(4).Position = 0;
GC.AddSend(Packets.AddItem(GC.MyChar.Equips.Get(4), 0));
GC.MyChar.Equips.Replace(4, I, GC.MyChar);
GC.MyChar.EquipStats(4, true);
//Database.SaveCharacter(GC.MyChar, GC.Account);
}
GC.MyChar.EquipStats(5, false);
if (Current.UID == 0)
{
GC.MyChar.Equips.Get(5).UID = (uint)GC.MyChar.Rnd.Next(10000000);
}
//GC.MyChar.Inventory.Add(GC.MyChar.Equips.Get(5).UID, GC.MyChar.Equips.Get(5));
cq_item.Update(GC.MyChar.Equips.Get(5), GC.MyChar,0);
GC.MyChar.MyClient.AddSend(Packets.AddItem(GC.MyChar.Equips.Get(5), 0));
GC.MyChar.Equips.UnEquip(5,GC.MyChar);
//Database.SaveCharacter(GC.MyChar, GC.Account);
}
}
World.Spawn(GC.MyChar, false);
//Database.SaveCharacter(GC.MyChar, GC.Account);
}
//Database.SaveCharacter(GC.MyChar, GC.Account);
}
}
}
this is my UnEquip method
PHP Code:
public void UnEquip(byte Pos, Character C)
{
if (C.Loc.Map != 1090)
{
C.MyClient.AddSend(Packets.ItemPacket(Get(Pos).UID, Pos, 6));
if (Pos == 1) HeadGear = new Item();
else if (Pos == 2) Necklace = new Item();
else if (Pos == 3) Armor = new Item();
else if (Pos == 4) RightHand = new Item();
else if (Pos == 5) LeftHand = new Item();
else if (Pos == 6) Ring = new Item();
else if (Pos == 7) Gourd = new Item();
else if (Pos == 8) Boots = new Item();
else if (Pos == 9) Garment = new Item();
else if (Pos == 10) Fan = new Item();
else if (Pos == 11) Tower = new Item();
else if (Pos == 12) Steed = new Item();
}
else
{
C.MyClient.LocalMessage(2005, "Unable use this");
return;
}
}






