コード例 #1
0
        public void UnequipItem(CharacterItemRecord item, byte newposition, ItemRecord template, uint quantity)
        {
            var existing = Items.ExistingItem(item);

            if (existing == null)
            {
                item.Position = newposition;
                SaveTask.UpdateElement(item);
                ItemEffectsProvider.RemoveEffects(Character.Client, item.GetEffects());
                RemoveItemSkin(item, template);
            }
            else
            {
                if (item.UID != existing.UID)
                {
                    existing.Quantity += quantity;
                    RemoveItem(item.UID, item.Quantity);
                    ItemEffectsProvider.RemoveEffects(Character.Client, item.GetEffects());
                    RemoveItemSkin(item, template);
                }
                else
                {
                    Character.NotificationError("Spamming ItemMove!");
                }
            }
            Character.RefreshGroupInformations();
        }
コード例 #2
0
        void AddItemSkin(CharacterItemRecord record, ItemRecord template)
        {
            if (template.AppearanceId != 0)
            {
                switch (template.Type)
                {
                case ItemTypeEnum.PET:
                    Character.Look.subentities.Add(new SubEntity((sbyte)SubEntityBindingPointCategoryEnum.HOOK_POINT_CATEGORY_PET,
                                                                 0, ContextActorLook.SimpleBonesLook((ushort)template.AppearanceId, PET_SIZE).ToEntityLook()));
                    return;

                case ItemTypeEnum.PETSMOUNT:
                    Character.Look = Character.Look.CharacterToRider((ushort)template.AppearanceId, new List <ushort>(), Character.Look.indexedColors.Take(3).ToList(), 100);
                    return;

                default:
                    if (record.ContainEffect(EffectsEnum.Eff_Mimicry))
                    {
                        var mimicryEffect = record.GetFirstEffect <ObjectEffectInteger>(EffectsEnum.Eff_Mimicry);
                        var mimicryAppId  = (ushort)ItemRecord.GetItem(mimicryEffect.value).AppearanceId;
                        Character.Look.AddSkin(mimicryAppId);
                    }
                    else
                    {
                        Character.Look.AddSkin((ushort)template.AppearanceId);
                    }
                    break;
                }
            }
        }
コード例 #3
0
        bool CheckRingStacks(CharacterItemRecord item, byte newposition)
        {
            var pos = (CharacterInventoryPositionEnum)newposition;

            if (pos == CharacterInventoryPositionEnum.INVENTORY_POSITION_RING_LEFT)
            {
                var current = GetItemByPosition(CharacterInventoryPositionEnum.INVENTORY_POSITION_RING_RIGHT);
                if (current != null)
                {
                    if (current.GID == item.GID)
                    {
                        return(true);
                    }
                }
            }
            if (pos == CharacterInventoryPositionEnum.INVENTORY_POSITION_RING_RIGHT)
            {
                var current = GetItemByPosition(CharacterInventoryPositionEnum.INVENTORY_POSITION_RING_LEFT);
                if (current != null)
                {
                    if (current.GID == item.GID)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
コード例 #4
0
        void RemoveItemSkin(CharacterItemRecord record, ItemRecord template)
        {
            if (template.AppearanceId != 0)
            {
                switch (template.Type)
                {
                case ItemTypeEnum.PET:
                    Character.Look.subentities.RemoveAll(x => x.bindingPointCategory == (sbyte)SubEntityBindingPointCategoryEnum.HOOK_POINT_CATEGORY_PET);
                    return;

                case ItemTypeEnum.PETSMOUNT:
                    Character.Look = Character.Look.RiderToCharacter();
                    break;

                default:
                    if (record.ContainEffect(EffectsEnum.Eff_Mimicry))
                    {
                        ObjectEffectInteger mimicryEffect = record.GetFirstEffect <ObjectEffectInteger>(EffectsEnum.Eff_Mimicry);
                        ushort mimicryAppId = (ushort)ItemRecord.GetItem(mimicryEffect.value).AppearanceId;

                        Character.Look.RemoveSkin(mimicryAppId);
                    }
                    else
                    {
                        Character.Look.RemoveSkin((ushort)template.AppearanceId);
                    }
                    break;
                }
            }
        }
コード例 #5
0
        public ItemCut(CharacterItemRecord item, uint quantity, byte newItempos)
        {
            newItem       = item.CloneAndGetNewUID();
            item.Position = newItempos;
            item.Quantity = quantity;

            newItem.Quantity -= quantity;
            BaseItem          = item;
            SaveTask.UpdateElement(BaseItem);
        }
コード例 #6
0
        public CharacterItemRecord Add(ushort gid, uint quantity, bool notif = true, bool refresh = true)
        {
            ItemRecord template = ItemRecord.GetItem(gid);

            if (template == null)
            {
                Character.Reply("L'item n'éxiste pas");
                return(null);
            }
            var newObjitem = template.GenerateRandomObjectItem();

            newObjitem.quantity = quantity;
            CharacterItemRecord newItem = new CharacterItemRecord(newObjitem, Character.Id);

            ItemCustomEffects.Instance.Init(newItem);
            Add(newItem, refresh);
            if (notif)
            {
                Character.Reply("Vous avez obtenu " + quantity + " " + template.Name);
            }
            return(newItem);
        }
コード例 #7
0
        public void Add(CharacterItemRecord item, bool refresh = true)
        {
            var existingItem = Items.ExistingItem(item);

            if (existingItem == null)
            {
                Items.Add(item);
                if (!CharacterItemRecord.CharactersItems.Contains(item))
                {
                    SaveTask.AddElement(item);
                }
            }
            else
            {
                existingItem.Quantity += item.Quantity;
                SaveTask.UpdateElement(existingItem);
            }
            if (refresh)
            {
                Refresh();
                Character.RefreshShortcuts();
            }
        }
コード例 #8
0
        public void Add(BidShopItemRecord item)
        {
            var newItem = new CharacterItemRecord(item.UID, 63, item.GID, Character.Id, item.Quantity, item.GetEffects());

            Add(newItem);
        }
コード例 #9
0
        public void Add(BankItemRecord item, uint quantity)
        {
            var newItem = new CharacterItemRecord(item.UID, 63, item.GID, Character.Id, quantity, item.GetEffects());

            Add(newItem);
        }
コード例 #10
0
 public Inventory(Character character)
 {
     this.Character = character;
     this.Items     = CharacterItemRecord.GetCharacterItems(Character.Id);
     this.Initialize();
 }
コード例 #11
0
        public void EquipItem(CharacterItemRecord item, ItemRecord template, byte newposition, uint quantity)
        {
            if (!ConditionProvider.ParseAndEvaluate(Character.Client, template.Criteria))
            {
                Character.Reply("Vous n'avez pas les critères nessessaire pour équiper cet objet");
                return;
            }
            if (CheckRingStacks(item, newposition))
            {
                Character.Reply("Vous avez déja équipé cet anneau!");
                return;
            }
            if (CheckDofusStacks(item, newposition))
            {
                Character.Reply("Vous avez déja équipé ce dofus");
                return;
            }
            if (DOFUS_POSITIONS.Contains((CharacterInventoryPositionEnum)item.Position) && DOFUS_POSITIONS.Contains((CharacterInventoryPositionEnum)newposition))
            {
                return;
            }
            if ((CharacterInventoryPositionEnum)newposition == CharacterInventoryPositionEnum.ACCESSORY_POSITION_SHIELD)
            {
                var weapon = GetEquipedWeapon();
                if (weapon != null)
                {
                    if (WeaponRecord.GetWeapon(weapon.GID).TwoHanded)
                    {
                        Character.Reply("Vous devez deséquiper votre arme pour équiper le bouclier.");
                        return;
                    }
                }
            }
            if ((CharacterInventoryPositionEnum)newposition == CharacterInventoryPositionEnum.ACCESSORY_POSITION_WEAPON)
            {
                var shield = GetItemByPosition(CharacterInventoryPositionEnum.ACCESSORY_POSITION_SHIELD);
                if (WeaponRecord.GetWeapon(item.GID).TwoHanded)
                {
                    Character.Reply("Vous devez enlevé votre bouclier pour équiper votre arme.");
                    return;
                }
            }
            var equiped = EquipedItem(newposition);

            if (equiped != null)
            {
                UnequipItem(equiped, 63, equiped.GetTemplate(), quantity);
                SaveTask.UpdateElement(equiped);
            }
            if (item.Quantity == 1)
            {
                item.Position = newposition;
                SaveTask.UpdateElement(item);
                AddItemSkin(item, template);
                ItemEffectsProvider.AddEffects(Character.Client, item.GetEffects());
            }
            else
            {
                var items = ItemCut.Cut(item, quantity, newposition);
                Add(items.newItem);
                ItemEffectsProvider.AddEffects(Character.Client, items.BaseItem.GetEffects());
                AddItemSkin(item, template);
            }
            Character.RefreshGroupInformations();
        }
コード例 #12
0
 bool CheckDofusStacks(CharacterItemRecord item, byte newposition)
 {
     return(false); // TODO
 }
コード例 #13
0
        public static BankItemRecord ExistingItem(this List <BankItemRecord> itemlist, CharacterItemRecord item)
        {
            var existingItem = itemlist.Find(x => x.GID == item.GID && x.EffectsLinkedToList == item.EffectsLinkedToList);

            if (existingItem == null)
            {
                return(null);
            }
            else
            {
                return(existingItem);
            }
        }
コード例 #14
0
 public static ItemCut Cut(CharacterItemRecord item, uint quantity, byte newItempos)
 {
     return(new ItemCut(item, quantity, newItempos));
 }