public IControl Build(object item)
 {
     if (item is EditableParameterViewModel <long> intParam)
     {
         if (intParam.Parameter.Parameter is BoolParameter && BoolParameter != null)
         {
             return(BoolParameter.Build(item));
         }
         if (intParam.Parameter.Parameter is FlagParameter && FlagParameter != null)
         {
             return(FlagParameter.Build(item));
         }
         if (intParam.UseModernPicker && ItemsParameter != null)
         {
             return(ItemsParameter.Build(item));
         }
     }
     else if (item is EditableParameterActionViewModel aevm && ButtonParameter != null)
     {
         return(ButtonParameter.Build(item));
     }
     return(Generic?.Build(item) ?? new Panel());
 }
Пример #2
0
        public override bool Execute(Npc npc, Character character)
        {
            if (!base.Execute(npc, character))
            {
                return(false);
            }

            if (string.IsNullOrEmpty(ItemsParameter) && KamasParameter == 0)
            {
                character.ResetStats(false);
                return(true);
            }

            if (character.Kamas < KamasParameter)
            {
                //Vous n'avez pas assez de kamas pour effectuer cette action.
                character.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 82);
                return(false);
            }

            if (ItemsParameter != null)
            {
                var parameter     = ItemsParameter.Split(',');
                var itemsToDelete = new Dictionary <BasePlayerItem, int>();

                foreach (var itemParameter in parameter.Select(x => x.Split('_')))
                {
                    if (!int.TryParse(itemParameter[0], out int itemId))
                    {
                        return(false);
                    }

                    if (!int.TryParse(itemParameter[1], out int amount))
                    {
                        return(false);
                    }

                    var template = ItemManager.Instance.TryGetTemplate(itemId);
                    if (template == null)
                    {
                        return(false);
                    }

                    var item = character.Inventory.TryGetItem(template);

                    if (item == null)
                    {
                        //Vous ne possédez pas l'objet nécessaire.
                        character.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 4);
                        return(false);
                    }

                    if (item.Stack < amount)
                    {
                        //Vous ne possédez pas l'objet en quantité suffisante.
                        character.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 252);
                        return(false);
                    }

                    itemsToDelete.Add(item, amount);
                }

                foreach (var itemToDelete in itemsToDelete)
                {
                    character.Inventory.RemoveItem(itemToDelete.Key, itemToDelete.Value);
                }
            }

            character.Inventory.SubKamas(KamasParameter);
            character.ResetStats(false);

            return(true);
        }
Пример #3
0
        public override int StartExecute(Character character)
        {
            if (!Record.AreConditionsFilled(character))
            {
                character.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 1);
                return(-1);
            }

            if (ItemsParameter != null)
            {
                var parameter     = ItemsParameter.Split(',');
                var itemsToDelete = new Dictionary <BasePlayerItem, int>();

                foreach (var itemParameter in parameter.Select(x => x.Split('_')))
                {
                    int itemId;
                    int amount;

                    if (!int.TryParse(itemParameter[0], out itemId))
                    {
                        return(-1);
                    }

                    if (!int.TryParse(itemParameter[1], out amount))
                    {
                        return(-1);
                    }

                    var template = ItemManager.Instance.TryGetTemplate(itemId);
                    if (template == null)
                    {
                        return(-1);
                    }

                    var item = character.Inventory.TryGetItem(template);

                    if (item == null)
                    {
                        //Vous ne possédez pas l'objet nécessaire.
                        character.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 4);
                        return(-1);
                    }

                    if (item.Stack < amount)
                    {
                        //Vous ne possédez pas l'objet en quantité suffisante.
                        character.SendInformationMessage(TextInformationTypeEnum.TEXT_INFORMATION_ERROR, 252);
                        return(-1);
                    }

                    itemsToDelete.Add(item, amount);
                }

                foreach (var itemToDelete in itemsToDelete)
                {
                    character.Inventory.RemoveItem(itemToDelete.Key, itemToDelete.Value);
                }
            }

            character.Teleport(GetPosition());
            return(base.StartExecute(character));
        }