1. Si vous venez d'arriver sur le forum et que vous êtes un peu perdus, cliquez ici !
    Rejeter la notice

[Skript] Problème avec un event....

Discussion dans 'Serveurs' créé par cercus, 7 Août 2016.

  1. cercus

    cercus Bûcheron

    Inscrit:
    13 Fev 2014
    Messages:
    162
    Points:
    98
    Sexe:
    Homme
    Bonjour a tous, je me tourne vers vous car skript me retourne 2 erreurs sur ce skript :

    Code (cpp):
    Command /TWD5:
        permission: achiev5.sk
        permission message: &2[Achievement] &cVous avez deja fait cet achievement !
        trigger:
            player has permission "achiev5.sk"
            on death of a zombie:
                attacker is player
                give 16 gold ingot to player
                execute server command "/manudelp %player% achiev5.sk"
                send "[Achievement] %player% à gagné(e) l'achievemement &a[The zombie]"
                execute server command "/xp %player% 4L"
            else:
                send "&2[Achievement] &cVous n'avez pas le nombre requis !" to player

    Les erreurs en question :

    Code (cpp):
     can't understand this condition: 'on death of a zombie' (achievement.sk, line 76: on death of a zombie:')
    'else' has to be placed just after an 'if' or 'else if' section (achievement.sk, line 82: else:')
    [ Skript] Encountered 2 errors while reloading achievement.sk!
    Merci de m'aider
     
  2. Seblor

    Seblor Responsable de Modération
    Staff

    Inscrit:
    15 Sept 2013
    Messages:
    2 576
    Points:
    195
    Sexe:
    Homme
    Je ne connais pas bien Skript, mais si j'ai bien compris la doc, tu ne devrai pas avoir un `:` après ta condition `player has permission "achiev5.sk"` ?

    ça donnerai donc :
    Code (cpp):
    Command /TWD5:
        permission: achiev5.sk
        permission message: &2[Achievement] &cVous avez deja fait cet achievement !
        trigger:
            player has permission "achiev5.sk":
                on death of a zombie:
                    attacker is player
                    give 16 gold ingot to player
                    execute server command "/manudelp %player% achiev5.sk"
                    send "[Achievement] %player% à gagné(e) l'achievemement &a[The zombie]"
                    execute server command "/xp %player% 4L"
            else:
                send "&2[Achievement] &cVous n'avez pas le nombre requis !" to player
    Je pense que le compilateur (/interpréteur) a vu 2 erreurs car la déclaration de la condition n'est pas bonne, et le "else" n'a donc pas de première condition à laquelle se "raccrocher".

    Le message d'erreur indique que ton événement "on death[...]" est considéré comme condition, c'est pourquoi j'en arrive à cette conclusion.
     
  3. cercus

    cercus Bûcheron

    Inscrit:
    13 Fev 2014
    Messages:
    162
    Points:
    98
    Sexe:
    Homme
    J'ai mis le " : " après player has permission "achiev5.sk" mais il m'affiche encore la même erreur :

    Code (cpp):
     can't understand this condition: 'on death of a zombie' (achievement.sk, line 76: on death of a zombie:')
    [ Skript] Encountered 1 error while reloading achievement.sk!
     
  4. Seblor

    Seblor Responsable de Modération
    Staff

    Inscrit:
    15 Sept 2013
    Messages:
    2 576
    Points:
    195
    Sexe:
    Homme
    Je ne suis pas sûr, mais je pense que tu devrai inverser l'événement "on death of a zombie" et la

    condition player has permission [...]

    Je dirais que ça donne quelque chose du genre :

    Code (cpp):
    Command /TWD5:
        permission: achiev5.sk
        permission message: &2[Achievement] &cVous avez deja fait cet achievement !
        trigger:
            on death of a zombie:
                attacker is a player
                player has permission "achiev5.sk":
                    give 16 gold ingot to player
                    execute server command "/manudelp %player% achiev5.sk"
                    send "[Achievement] %player% à gagné(e) l'achievemement &a[The zombie]"
                    execute server command "/xp %player% 4L"
                else:
                    send "&2[Achievement] &cVous n'avez pas le nombre requis !" to player
    Après, je ne sais pas comment fonctionnent les accès à "player".

    Edit : mais en fait, je ne comprend pas pourquoi tu met un événement sur une commande. Ce n'est pas normal.
     
    #4 Seblor, 8 Août 2016
    Dernière édition: 8 Août 2016
  5. cercus

    cercus Bûcheron

    Inscrit:
    13 Fev 2014
    Messages:
    162
    Points:
    98
    Sexe:
    Homme
    Toujours pas, c'est encore le "on death of a zombie" qui pose probleme...
     
  6. Seblor

    Seblor Responsable de Modération
    Staff

    Inscrit:
    15 Sept 2013
    Messages:
    2 576
    Points:
    195
    Sexe:
    Homme
    Attend, je crois que le problème se situe dans ce que j'ai mis dans mon "edit" :
    Tu ne peux pas créer d'événements dans un groupe d'instruction résultant d'un événement.

    Soit tu veux faire une commande, doit tu veux faire un événement.

    Essaie de sortir tout ce bloc d'instruction de la commande :
    Code (cpp):
             on death of a zombie:
                attacker is a player
                player has permission "achiev5.sk":
                    give 16 gold ingot to player
                    execute server command "/manudelp %player% achiev5.sk"
                    send "[Achievement] %player% à gagné(e) l'achievemement &a[The zombie]"
                    execute server command "/xp %player% 4L"
                else:
                    send "&2[Achievement] &cVous n'avez pas le nombre requis !" to player
     
  7. cercus

    cercus Bûcheron

    Inscrit:
    13 Fev 2014
    Messages:
    162
    Points:
    98
    Sexe:
    Homme
    Cela marche si je sort le bloc d'instruction de la commande mais mon objectif est que dès qu'on fait cette commande, l'achievement est obtenu et non automatiquement
     
  8. Seblor

    Seblor Responsable de Modération
    Staff

    Inscrit:
    15 Sept 2013
    Messages:
    2 576
    Points:
    195
    Sexe:
    Homme
    Le problème, c'est qu'algorithmiquement, ton objectif est trop bizarre.
    Si je comprend bien, tu voudrai suivre cet algorigramme :
    event.png
    Non seulement ça créerai deux événements, mais en plus, je doute qu'il soit possible de créer dynamiquement un événement.

    Je te propose la solution suivante :
    event2.png
    Je me suis juste trompé sur une chose. Le fait de mettre 2 conditions à la suive est interprété par un "OU" logique.
    Il faut juste rajouter un double point après la première condition.
    Ce qui, de plus, corrige un possible problème : le else pouvait s'activer si l'attaquant n'était pas un joueur, ce qui aurait pu provoquer une erreur lors de l'exécution.

    Ce qui donnerai donc le code suivant :
    Code (cpp):
    on death of a zombie:
        attacker is a player:
            player has permission "achiev5.sk":
                give 16 gold ingot to player
                execute server command "/manudelp %player% achiev5.sk"
                send "[Achievement] %player% à gagné(e) l'achievemement &a[The zombie]"
                execute server command "/xp %player% 4L"
            else:
                send "&2[Achievement] &cVous n'avez pas le nombre requis !" to player
     
  9. cercus

    cercus Bûcheron

    Inscrit:
    13 Fev 2014
    Messages:
    162
    Points:
    98
    Sexe:
    Homme
    Il ne m'indique pas d'erreur, ce qui est une bonne chose mais une autre question, qu'est ce qu'il faut ajouter à ce code pour que le joueur gagne l'achievement seulement quand il a tué 5 zombies ?
     
  10. Seblor

    Seblor Responsable de Modération
    Staff

    Inscrit:
    15 Sept 2013
    Messages:
    2 576
    Points:
    195
    Sexe:
    Homme
    Vite fait, en suivant la doc, je dirais :
    Code (cpp):
    on death of a zombie:
        attacker is a player:
            player has permission "achiev5.sk":
                if {zombieKills.%player%} is not set:
                    {zombieKills.%player%} = 0
                else if {zombieKills.%player%} is less than 5:
                    add 1 to {zombieKills.%player%}
                else
                    give 16 gold ingot to player
                    execute server command "/manudelp %player% achiev5.sk"
                    send "[Achievement] %player% à gagné(e) l'achievemement &a[The zombie]"
                    execute server command "/xp %player% 4L"
            else:
                send "&2[Achievement] &cVous n'avez pas le nombre requis !" to player
    Après, je préfère toujours utiliser l'UUID plutôt que le pseudo d'un joueur, mais, je cite :
    Donc pour le moment, ça n'est pas possible (sauf si la doc n'est pas à jour).


    Edit : J'ai rajouté une vérification, parce que je ne sais pas si une variable est définie à 0 par défaut.
    Edit 2 : J'ai inversé le else if et le else. ça devrait être bon maintenant.
     
    #10 Seblor, 9 Août 2016
    Dernière édition: 11 Août 2016
  11. Seblor

    Seblor Responsable de Modération
    Staff

    Inscrit:
    15 Sept 2013
    Messages:
    2 576
    Points:
    195
    Sexe:
    Homme
  12. cercus

    cercus Bûcheron

    Inscrit:
    13 Fev 2014
    Messages:
    162
    Points:
    98
    Sexe:
    Homme
    Le script me retourne aucune erreur mais je n'ai pas encore testé en jeu
     
  13. Seblor

    Seblor Responsable de Modération
    Staff

    Inscrit:
    15 Sept 2013
    Messages:
    2 576
    Points:
    195
    Sexe:
    Homme
    D'accord. J'attendrai que tu test pour passer en résolu.
     
  14. cercus

    cercus Bûcheron

    Inscrit:
    13 Fev 2014
    Messages:
    162
    Points:
    98
    Sexe:
    Homme
    J'ai tué mes 5 zombies mais ça ne m'a donné mes 16 lingots et mon xp...
     
  15. Seblor

    Seblor Responsable de Modération
    Staff

    Inscrit:
    15 Sept 2013
    Messages:
    2 576
    Points:
    195
    Sexe:
    Homme
    Essaie d'afficher la variable {zombieKills.%player%}

    Sinon, tu es bien sûr d'avoir remis la permission "achiev5.sk" ?
     

Partager cette page