/// <summary>
        /// Warning !! this method is experimental, there is known issues dues to architectural problems:
        /// the Item wont be initialize by ItemGenerationProvider.
        /// </summary>
        /// <param name="character"></param>
        /// <param name="item"></param>
        /// <param name="quantity"></param>
        public static void AddQuietCharacterItem(CharacterRecord character, CharacterItemRecord item)
        {
            lock (CharactersItems)
            {
                bool isOnline = WorldServer.Instance.IsOnline(character.Id);

                if (isOnline)
                {
                    Logger.Write <CharacterItemRecord>("Cannot attribute " + item.Template.Name + " to " + character.Name + " , the character is online!", ConsoleColor.Red);
                }
                else
                {
                    item.CharacterId = character.Id;
                    var items = CharacterItemRecord.GetCharacterItems(character.Id);
                    var same  = items.FirstOrDefault(x => x.GId == item.GId && x.PositionEnum == CharacterInventoryPositionEnum.INVENTORY_POSITION_NOT_EQUIPED && Inventory.SameEffects(x.Effects, item.Effects));

                    if (same != null)
                    {
                        same.Quantity += item.Quantity;
                        same.UpdateElement();
                    }
                    else
                    {
                        item.UId = ItemUIdPopper.PopUID();
                        item.AddElement();
                    }
                }
            }
        }
        public static CharacterMountRecord New(CharacterItemRecord item)
        {
            MountRecord template = MountRecord.GetMount(item.GId);
            long        uid      = CharactersMounts.DynamicPop(x => x.UId);

            return(new CharacterMountRecord(uid, item.CharacterId, false, true, false, false,
                                            template.Id, DefaultMountName, template.Effects.ConvertAll <EffectInteger>(x => x.GenerateEffect() as EffectInteger), false, false));
        }
        public CharacterItemRecord ToMimicry(int newskinid, ushort appearanceId)
        {
            CharacterItemRecord newItem = (CharacterItemRecord)this.CloneWithoutUID();

            newItem.AddEffectInteger(EffectsEnum.Effect_ChangeAppearence1151, (ushort)newskinid);
            newItem.Quantity     = 1;
            newItem.AppearanceId = appearanceId;
            return(newItem);
        }
        public CharacterItemRecord Cut(uint quantity, CharacterInventoryPositionEnum newItempos)
        {
            CharacterItemRecord newItem = (CharacterItemRecord)this.CloneWithoutUID();

            this.PositionEnum = newItempos;
            this.Quantity     = quantity;
            newItem.Quantity -= quantity;

            this.UpdateElement();

            return(newItem);
        }