Beispiel #1
0
        void UnEquipItem_Handler(Task t)
        {
            byte equipSlot = 0xFF;

            EquipItemRequest eir      = (EquipItemRequest)t.Args;
            Item             equipped = t.Client.Character.EquippedItem(eir.ItemID);

            if (equipped != null)
            {
                equipSlot = equipped.Slot;
                t.Client.Character.UnEquipItem(equipped.Slot, eir.Slot);
                AddDBQuery(equipped.UpdateDBString(), null, false);
            }

            // Send response to the client
            t.Client.SendPacket(new UnEquipItemResponse(t.Client.Character, eir.ItemID, eir.Slot, equipSlot != 0xFF));

            if (equipSlot != 0xFF)
            {
                // Tell other players about it
                SeeUnequipPacket pkt     = new SeeUnequipPacket(t.Client.Character.ID, equipSlot);
                PlayMap          map     = _server.GetPlayMap(t.Client.Character.MapID);
                Connection[]     players = map.Players;
                foreach (Connection c in players)
                {
                    if (c != t.Client)
                    {
                        c.SendPacket(pkt);
                    }
                }
            }
        }
Beispiel #2
0
        public static EquipItemRequest Read(PacketHeader header, BinaryReader br)
        {
            EquipItemRequest eir = new EquipItemRequest();

            eir.ItemID = br.ReadUInt32();
            eir.Slot   = br.ReadByte();
            return(eir);
        }
Beispiel #3
0
        void EquipItem_Handler(Task t)
        {
            EquipItemRequest eir      = (EquipItemRequest)t.Args;
            Item             item     = t.Client.Character.FindItem(eir.ItemID);
            Item             equipped = t.Client.Character.EquippedItem(eir.Slot);
            bool             visible  = false;

            if (equipped != null)
            {
                t.Client.Character.UnEquipItem(eir.Slot);
                AddDBQuery(equipped.UpdateDBString(), null, false);
                visible = true;
            }

            if (item != null)
            {
                t.Client.Character.EquipItem(item, eir.Slot);
                AddDBQuery(item.UpdateDBString(), null, false);
                visible = true;
                t.Client.NotifyEquipItem();
            }

            t.Client.SendPacket(new EquipItemResponse(t.Client.Character, item, equipped, visible));

            if (visible)
            {
                // Show all nearby clients the change
                SeeEquipmentChangePacket pkt = new SeeEquipmentChangePacket(t.Client.Character.ID, item);
                PlayMap      map             = _server.GetPlayMap(t.Client.Character.MapID);
                Connection[] players         = map.Players;
                foreach (Connection c in players)
                {
                    if (c != t.Client)
                    {
                        c.SendPacket(pkt);
                    }
                }
            }
        }
Beispiel #4
0
 private void Client_OnUnEquipItem(object sender, EquipItemRequest e)
 {
     TaskProcessor.AddTask(new Task(Task.TaskType.UnEquipItem, (Connection)sender, e));
 }
Beispiel #5
0
 public static EquipItemRequest Read(PacketHeader header, BinaryReader br)
 {
     EquipItemRequest eir = new EquipItemRequest();
     eir.ItemID = br.ReadUInt32();
     eir.Slot = br.ReadByte();
     return eir;
 }
Beispiel #6
0
 void UnEquipItem_Handler(PacketHeader header, BinaryReader br)
 {
     OnUnEquipItem(this, EquipItemRequest.Read(header, br));
 }
Beispiel #7
0
 private void Client_OnUnEquipItem(object sender, EquipItemRequest e)
 {
     TaskProcessor.AddTask(new Task(Task.TaskType.UnEquipItem, (Connection)sender, e));
 }