コード例 #1
0
        private void ApplyItemSetEffects(ItemSetRecord itemSet, int count, bool equiped)
        {
            if (equiped)
            {
                if (count >= 2)
                {
                    if (count >= 3)
                    {
                        ItemEffectsProvider.RemoveEffects(Character, itemSet.GetSetEffects(count - 2));
                    }

                    ItemEffectsProvider.AddEffects(Character, itemSet.GetSetEffects(count - 1));
                    OnSetUpdated(itemSet, count - 1);
                }
            }
            else
            {
                if (count >= 1)
                {
                    if (count >= 2)
                    {
                        ItemEffectsProvider.AddEffects(Character, itemSet.GetSetEffects(count - 1));
                    }

                    ItemEffectsProvider.RemoveEffects(Character, itemSet.GetSetEffects(count));
                    OnSetUpdated(itemSet, count);
                }
            }
        }
コード例 #2
0
        public void ToggleMount()
        {
            var mount = Mount;

            if (mount != null)
            {
                if (!mount.Toggled)
                {
                    Unequip(CharacterInventoryPositionEnum.ACCESSORY_POSITION_PETS);
                    Character.Look = Character.Look.GetMountLook(mount.Template.Look);
                    ItemEffectsProvider.AddEffects(Character, mount.Effects.ToList <Effect>());
                }
                else
                {
                    Character.Look = Character.Look.GetMountDriverLook();
                    Character.Look.SetBones(1);
                    ItemEffectsProvider.RemoveEffects(Character, mount.Effects.ToList <Effect>());
                }

                mount.Toggled = !mount.Toggled;
                mount.UpdateElement();
                Character.Client.Send(new MountRidingMessage(mount.Toggled));
                Character.RefreshStats();
                Character.RefreshActorOnMap();
            }
        }
コード例 #3
0
        /// <summary>
        /// Appelée lorsque la position d'un item a été modifié
        /// </summary>
        /// <param name="item"></param>
        /// <param name="lastPosition"></param>
        private void OnItemMoved(CharacterItemRecord item, CharacterInventoryPositionEnum lastPosition)
        {
            bool flag  = lastPosition != CharacterInventoryPositionEnum.INVENTORY_POSITION_NOT_EQUIPED;
            bool flag2 = item.IsEquiped();


            if (flag2 && !flag)
            {
                ItemEffectsProvider.AddEffects(Character, item.Effects);
            }

            if (!flag2 && flag)
            {
                ItemEffectsProvider.RemoveEffects(Character, item.Effects);
            }

            if (item.AppearanceId != 0)
            {
                UpdateLook(item, flag2);
            }

            if (item.Template.HasSet) // Si il y a une panoplie
            {
                int num = CountItemSetEquiped(item.Template.ItemSet);

                if (flag2) //Si on vient d'équiper l'objet
                {
                    ApplyItemSetEffects(item.Template.ItemSet, num, flag2);
                }
                else
                {
                    ApplyItemSetEffects(item.Template.ItemSet, num, flag2);
                }
            }
        }
コード例 #4
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();
        }