Esempio n. 1
0
        public async Task ModifyInventory(Action <ModifyInventoryContext> action = null, bool exclRequest = false)
        {
            var context  = new ModifyInventoryContext(Character);
            var equipped = Character.GetInventory(ItemInventoryType.Equip).Items
                           .Where(i => i.Position < 0)
                           .Select(i => i.TemplateID)
                           .ToList();

            action?.Invoke(context);
            using (var p = new Packet(SendPacketOperations.InventoryOperation))
            {
                p.Encode <bool>(exclRequest);
                context.Encode(p);
                p.Encode <bool>(false);
                await SendPacket(p);
            }

            var newEquippedItems = Character.GetInventory(ItemInventoryType.Equip).Items
                                   .Where(i => i.Position < 0)
                                   .ToList();
            var newEquipped = newEquippedItems
                              .Select(i => i.TemplateID)
                              .ToList();

            if (equipped.Except(newEquipped).Any() ||
                newEquipped.Except(equipped).Any())
            {
                ValidateStat();
                AvatarModified();
            }
        }
        public Task ModifyInventory(Action <ModifyInventoryContext> action = null, bool exclRequest = false)
        {
            var context  = new ModifyInventoryContext(Character);
            var equipped = Character.GetInventory(ItemInventoryType.Equip).Items
                           .Where(i => i.Position < 0)
                           .Select(i => i.TemplateID)
                           .ToList();

            action?.Invoke(context);
            using (var p = new OutPacket(GameSendOperations.InventoryOperation))
            {
                p.Encode <bool>(exclRequest);
                context.Encode(p);
                p.Encode <bool>(false);
                SendPacket(p);
            }

            var newEquipped = Character.GetInventory(ItemInventoryType.Equip).Items
                              .Where(i => i.Position < 0)
                              .Select(i => i.TemplateID)
                              .ToList();

            if (equipped.Except(newEquipped).Any() ||
                newEquipped.Except(equipped).Any())
            {
                ValidateStat();
                using (var p = new OutPacket(GameSendOperations.UserAvatarModified))
                {
                    p.Encode <int>(ID);
                    p.Encode <byte>(0x1);   // Flag
                    Character.EncodeLook(p);
                    p.Encode <bool>(false); // bCouple
                    p.Encode <bool>(false); // bFriendship
                    p.Encode <bool>(false); // Marriage
                    p.Encode <int>(CompletedSetItemID ?? 0);

                    Field.BroadcastPacket(this, p);
                }
            }

            return(Task.CompletedTask);
        }