C# [Stump] Problème référence

Soap

Membre
Inscrit
12 Avril 2017
Messages
72
Reactions
2
#1
Plop, je compte étudier stump dorénavant en me basant sur celui de Bouh² version 2.10. En essayant d'ajouter 3 commandes : Teleport, Poutch, AddLevel j'ai toujours le même replyError IG. La réf d'objet n'est pas attribuée. Cependant dans mon code je n'arrive pas a trouver où j'ai merdé. Voici les codes des 3 class. Pour informations lorsque je tape dans le tchat Poutch 25 (l'erreur n'est plus celle précédente mais une erreur de cast.)

C#:
    public class Teleport : InGameCommand
    {
        public Teleport()
        {
            this.Aliases = new[] { "Teleportation" };
            this.RequiredRole = RoleEnum.Player;
            this.Description = "Cette commande vous permet de vous téléporter dans le monde de Soap";
            this.AddParameter<string>("Destination");
        }
        public override void Execute(GameTrigger trigger)
        {
            if(!trigger.Character.IsFighting())
            {
                string input = trigger.Get<string>("Destination");
                switch(input.ToUpper())
                {
                    case "SHOP":
                        TeleportationPlayer(trigger.Character, 54159142, 390);
                        trigger.Reply("Vous êtes téléporté à l'espace shop.");
                        break;
                    case "BOUTIQUE":
                        TeleportationPlayer(trigger.Character, 76284416, 190);
                        trigger.Reply("Vous êtes téléporté à l'espace boutique.");
                        break;
                    case "PVP":
                        TeleportationPlayer(trigger.Character, 88212759, 287);
                        trigger.Reply("Vous êtes téléporté à l'espace pvp");
                        break;
                    case "MARIAGE":
                        TeleportationPlayer(trigger.Character, 99094023, 465);
                        trigger.Reply("Vous êtes téléporté à l'espace mariage.");
                        break;
                    case "ENCLOS":
                        TeleportationPlayer(trigger.Character, 74711552, 190);
                        trigger.Reply("Vous êtes téléporté à l'espace enclos.");
                        break;
                    default:
                        trigger.ReplyError("La saisie est incorrecte, les commandes disponibles sont :.Tp shop /.Tp boutique /.Tp pvp /.Tp mariage /.Tp enclos");
                        break;
                }
            }
        }
        public static void TeleportationPlayer(Character player, int mapid, short cellid)
        {
            player.Teleport(new ObjectPosition(World.Instance.GetMap(mapid), cellid));
C#:
 public class Poutch : InGameCommand
    {
        public Poutch()
        {
            this.Aliases = new[] { "Poutch" };
            this.RequiredRole = Stump.DofusProtocol.Enums.RoleEnum.Player;
            this.Description = "Cette commande permet de lancer un combat contre un poutch. Les niveaux disponibles sont : 1,25,50,75,100";
            this.AddParameter<string>("Level");
        }
        public override void Execute(GameTrigger trigger)
        {
            if (!trigger.Character.IsFighting())
            {
                var input = trigger.Get<short>("Level");
                switch (input)
                {
                    case 1:
                        this.MonsterSpawn(trigger, 1);
                        trigger.Reply("Vous êtes entré en combat face à un poutch level 1.");
                        break;
                    case 25:
                        this.MonsterSpawn(trigger, 2);
                        trigger.Reply("Vous êtes entré en combat face à un poutch level 25.");
                        break;
                    case 50:
                        this.MonsterSpawn(trigger, 3);
                        trigger.Reply("Vous êtes entré en combat face à un poutch level 50.");
                        break;
                    case 75:
                        this.MonsterSpawn(trigger, 4);
                        trigger.Reply("Vous êtes entré en combat face à un poutch level 75.");
                        break;
                    case 100:
                        this.MonsterSpawn(trigger, 5);
                        trigger.Reply("Vous êtes entré en combat face à un poutch level 100.");
                        break;
                    default:
                        trigger.ReplyError("La saisie est incorrecte, les niveaux des poutch sont 1, 25, 50, 75 ou 100.");
                        break;
                }
            }
            else
                trigger.ReplyError("Pour lancer cette commande, il faut être en dehors d'un combat.");
            }
        private void MonsterSpawn(GameTrigger trigger, int grade)
        {
            Monster monster = new Monster(Singleton<MonsterManager>.Instance.GetMonsterGrade(494, grade), new MonsterGroup(0, trigger.Character.Position));
            Fight fight = Singleton<FightManager>.Instance.CreatePvMFight(trigger.Character.Map);
            fight.RedTeam.AddFighter(trigger.Character.CreateFighter(fight.RedTeam));
            fight.BlueTeam.AddFighter(monster.CreateFighter(fight.BlueTeam));
            fight.StartPlacement();
        }
    }
}
C#:
   public class AddLevel : InGameCommand
    {
        private uint _tokens;
        public AddLevel()
        {
            this.Aliases = new[] { "LevelUp" };
            this.RequiredRole = Stump.DofusProtocol.Enums.RoleEnum.Player;
            this.Description = string.Format("Ajoute un niveau à votre niveau actuel contre {0} tokens, à condition de ne pas être niveau 199.",this._tokens);
        }
        public override void Execute(GameTrigger trigger)
        {
            this.LevelUp(trigger);
        }
        private uint TokenPrice(GameTrigger trigger)
        {
            if (trigger.Character.Level <= 100)
            {
                this._tokens = 50;
            }
            else if (trigger.Character.Level > 100 && trigger.Character.Level <= 150)
            {
                this._tokens = 100;
            }
            else if (trigger.Character.Level > 150 && trigger.Character.Level <= 190)
                this._tokens = 150;
            else
            {
                this._tokens = 200;
            }
            return this._tokens;
        }
        private void LevelUp(GameTrigger trigger)
        {
            this.TokenPrice(trigger);
            if (!trigger.Character.IsFighting() && trigger.Character.Level < 199 && trigger.Character.Inventory.Tokens.Stack >= this._tokens)
            {
                trigger.Character.Inventory.UnStackItem(trigger.Character.Inventory.Tokens, this._tokens);
                trigger.Character.AddOneLevel(); // (this.Character.Level += 1) dans la class Character
            }
            else
            {
                if (trigger.Character.Inventory.Tokens != null &&trigger.Character.Inventory.Tokens.Stack < this._tokens)
                {
                    trigger.ReplyError(string.Format("Il vous manque {0} tokens pour pouvoir utiliser cette commande.", (this._tokens - trigger.Character.Inventory.Tokens.Stack)));
                }
                if (trigger.Character.Level >= 199)
                {
                    trigger.ReplyError("Vous ne respectez pas la condition de level de cette commande.");
                }
                if (trigger.Character.IsFighting())
                {
                    trigger.ReplyError("Vous ne pouvez pas lancer cette commande en combat.");
                }
            }
        }
    }
}
(.poutch 50)
(Error) Raised exception (error-index:2) : Le cast spécifié n'est pas valide.
(Error) Incorrect Command "poutch100". Type commandslist or help for command list.
(.poutch 100)
(Error) Raised exception (error-index:3) : Le cast spécifié n'est pas valide.
(Error) Raised exception (error-index:4) : La référence d'objet n'est pas définie à une instance d'un objet.
(Error) Raised exception (error-index:5) : La référence d'objet n'est pas définie à une instance d'un objet.
 
Dernière édition:
Inscrit
18 Février 2015
Messages
228
Reactions
7
#2
this.AddParameter<string>("Level");
}
public override void Execute(GameTrigger trigger)
{
if (!trigger.Character.IsFighting())
{
var input = trigger.Get<short>("Level");
Tu demande un paramettre de type string et tu fait un get de type short c'est impossible

if (!trigger.Character.IsFighting() && trigger.Character.Level < 199 && trigger.Character.Inventory.Tokens.Stack >= this._tokens)
Ici le Tokens peut être null donc faut vérifier s'il n'est pas null avant de vérifier si il y a une value dans Stack
 
Haut Bas