Aller au contenu

Classement

Contenu populaire

Affichage du contenu avec la meilleure réputation le 18/09/2016 dans toutes les zones

  1. Salut à tous ! Ce tutoriel est destiné aux personnes qui savent déjà créer des fonctions "basiques" qui ne nécessitent pas de "return". Si vous ne savez pas créer de fonctions basiques, allez vous renseigner ici >> Cliquer ici Enfin bref, vous êtes ici sur le TMTCPas #1.5 Les Fonctions "Avancées" (Avec le return) A partir de maintenant, je vais faire comme si vous connaissiez les fonctions. Imaginons que nous souhaitons créer une sorte de calculatrice In-Game qui permette de faire des additions basiques. On va ici utiliser une fonction, bien que ce ne soit pas nécessaire, mais c'est pour l'exemple. Voici la commande: command /calcul <text> <text>: trigger: send "%calcul(arg 1, arg 2)%" Vous voyez donc cette ligne : send "%calcul(arg 1, arg 2)%" En fait, la fonction calcul(), que nous allons créer plus bas, renvoie quelque chose, c'est à dire quel va envoyer un "message" à votre Script (ce "message" peut-être du texte, un nombre, un block, etc...) Voici comment créer une fonction qui renvoie une donnée : function calcul(first: number, second: number) :: number: set {_final} to {_first} + {_seconde} # Ici on fait le calcul return {_final} # Ici le envoie la réponse au calcul Si vous êtes habituez aux fonctions basiques, vous avez sans doute remarqué le ":: number" derrière votre fonction, en effet, c'est ce bout de code qui va vous permettre de définir de quel "type" sera la donnée que vous allez renvoyer avec votre fonction. En résumé : function calcul(first: number, seconde: number) :: number: # ":: number" le type de donnée que va renvoyer la fonction set {_final} to {_first} + {_second} # Ici le calcul est effectué par la fonction return {_final} # Ici on "envoie" la réponse au calcul command /calcul <number> <text>: trigger: send "%calcul(arg 1, arg 2)%" # C'est ici que la "réponse" est donné Voilà ! Si tu n'as pas compris ce tutoriel, envoie-moi un MP qu'on règle tout ça ensemble :)
    4 points
  2. Sommaire: Base de l'addon Créer un effet Créer une condition Créer une expression Créer un évent Créer un type --------------------------- Créer un effet On va commencer par le plus facile. Je rappelle, un effet permet d’exécuter du code sans renvoyer d'informations en échange. Tout d'abord on va choisir l'effet à créer et on va créer une classe où on veut. Par exemple je crée un package « fr.nashoba24.wolvsk.effets » et je crée une classe nommée EffSendMessageToPlayer car je veux envoyer un message à un joueur grâce à cette fonction. Ensuite je vais coller dans cette nouvelle classe le code suivant, puis je l'éditerai : package votre.package; import ch.njol.skript.lang.Effect; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; import javax.annotation.Nullable; import org.bukkit.event.Event; public class VotreClass extends Effect { @SuppressWarnings("unchecked") @Override public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean paramKleenean, ParseResult paramParseResult) { return true; } @Override public String toString(@Nullable Event e, boolean b) { return null; } @Override protected void execute(Event e) { } } La fonction init() permet d'enregistrer les éventuelles variables et de retourner vrai si tout est bon (que les variables sont bonnes par exemple) La fonction toString() retourne le nom de l'effet, qui sera éventuellement utilisé dans des messages d'erreur par exemple. Pour finir, la fonction execute() est appelée quand l'effet est exécuté. Il contiendra donc votre code pour réaliser un effet en Skript. Voyons d'abord la fonction init(). L'argument expr[] retourne les variables dont vous aurez éventuellement besoin dans votre fonction execute(). matchedPattern renvoie le numéro du pattern correspondant (on verra plus tard qu'on peut avoir plusieurs patterns pour un(e) même effet/évent/condition). Pour les 2 autres je ne vais pas vous cacher que je n'en ai jamais eu besoin donc je ne sais pas à quoi ça sert ? Maintenant on va voir comment enregistrer une variable. Tout d'abord, après public class VotreClass extends Effect { on va rajouter une voir plusieurs lignes avec les variables dont vous aurez besoin. Vous devez la déclarer comme ceci : private Expression<TypeDeVotreObjet> nomDeLaVariable; Ensuite dans init(), on va changer la valeur de la variable. Pour ceci on ajoute autant de lignes que nécessaire avec nomDeLaVariable = (Expression<TypeDeVotreObjet>) expr[numéro]; La numéro correspond au numéro de l'objet envoyé par Skript. Pour le trouver, il vous suffit de compter le numéro de l'objet dans le pattern. Par exemple avec send %string% to %player% Là, l'objet %string% aura pour numéro 0 et player aura pour numéro 1. Voyons voir maintenant à quoi ressemble ma class si j'enregistre les variables pour envoyer un message. J'aurais besoin de variable : le message et le joueur. Le pattern que j'utilise est « send %string% to %player% » package votre.package; import ch.njol.skript.lang.Effect; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; import javax.annotation.Nullable; import org.bukkit.entity.Player; import org.bukkit.event.Event; public class EffSendMessageToPlayer extends Effect { private Expression<String> message; private Expression<Player> player; @SuppressWarnings("unchecked") @Override public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean paramKleenean, ParseResult paramParseResult) { message = (Expression<String>) expr[0]; player = (Expression<Player>) expr[1]; return true; } @Override public String toString(@Nullable Event e, boolean b) { return null; } @Override protected void execute(Event e) { } } Maintenant attaquons nous à la fonction toString(). C'est relativement simple, il faut retourner un String avec le nom de la fonction qui sera éventuellement utilisé par exemple dans des message d'erreurs. Ici je vais retourner « send message to player ». J'obtiens donc : @Override public String toString(@Nullable Event e, boolean b) { return "send message to player"; } Pour finir il faut remplir la fonction execute(). Vous pouvez mettre ici n'importe quel code, qui fera au final ce que la fonction demande. Ici je dois faire en sorte d'envoyer le message au joueur. Vous aurez sûrement besoin de variable, je vais donc vous montrer comment récupérer une variable. Il faut tout simplement faire ceci : nomDeLaVariable.getSingle(e) Au final ma class ressemble à ça : package votre.package; import ch.njol.skript.lang.Effect; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; import javax.annotation.Nullable; import org.bukkit.entity.Player; import org.bukkit.event.Event; public class EffSendMessageToPlayer extends Effect { private Expression<String> message; private Expression<Player> player; @SuppressWarnings("unchecked") @Override public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean paramKleenean, ParseResult paramParseResult) { message = (Expression<String>) expr[0]; player = (Expression<Player>) expr[1]; return true; } @Override public String toString(@Nullable Event e, boolean b) { return "send message to player"; } @Override protected void execute(Event e) { player.getSingle(e).sendMessage(message.getSingle(e)); } } Bien, il reste une seule chose à faire : enregistrer l'effet dans Skript. Pour ceci, il faut placer la ligne suivante dans une fonction appelée au démarrage du serveur (par exemple onEnable(), dans la classe principale). Skript.registerEffect(VotreClass.class, pattern); A la place de VotreClass, vous mettez le nom de la classe contenant l'effet et à la place de pattern vous mettez votre pattern sous forme de String. Si vous voulez en mettre plusieurs, vous pouvez mettre une virgule et mettre d'autres patterns après. Pour mon exemple ça me donne ça : Skript.registerEffect(EffSendMessageToPlayer.class, "(send|message) %string% to %player%");
    2 points
  3. Salut à tous ! Récemment, j'ai eu plusieurs demande d'aide vis à vis des fonctions et aujourd'hui j'ai décidé de lancer ma propre série de tutoriel, les TMTCPas (Toi même tu sais pas). Enfin bref, ce premier tuto sera destiné au fonction basique qui ne nécessite pas de return. Bon, dejà le principe d'une fonction (ou d'un sub), c'est de réduire la taille d'un fichier, ça tu le sais. Exemple: Imaginons que j'ai un skript qui ressemble à ça: on death: if damage was cause by explosion: add 1 to {killstreak.%attacker%} add 1 to {kill.%attacker%} add 1 to {death.%victim%} send "Tu es mort d'explosion." to victim else if damage was cause by lava: add 1 to {killstreak.%attacker%} add 1 to {kill.%attacker%} add 1 to {death.%victim%} send "Tu es mort de lave." to victim else if damage was cause by sword: add 1 to {killstreak.%attacker%} add 1 to {kill.%attacker%} add 1 to {death.%victim%} send "Tu es mort d'épée." to victim (Je sais même pas trop si on peut écrire ça comme ça mais c'est pas trop le problème ^^) Donc bon, là on a clairement un problème, vu qu'on répète à chaque fois la même ^^ Donc ! Comment régler ce problème ! On va créer une fonction ! Alors, toutes fonctions doit être créer de cette manière: function attackerVictim() # code Donc ici, ça devrait ressembler à un truc à peu près comme ça: function attackerVictim() add 1 to {killstreak.%attacker%} add 1 to {kill.%attacker%} add 1 to {death.%victim%} Donc bon, là, si on l'intègre au code comme ça, ça va pas fonctionner : on death: if damage was cause by explosion: attackerVictim() # Ici on appelle la fonction send "Tu es mort d'explosion." to victim else if damage was cause by lava: attackerVictim() send "Tu es mort de lave." to victim else if damage was cause by sword: attackerVictim() send "Tu es mort d'épée." to victim function attackerVictim() add 1 to {killstreak.%attacker%} add 1 to {kill.%attacker%} add 1 to {death.%victim%} Problème : La fonction ne va pas comprendre ce qu'est %victim% et %attacker% donc, on va passer par des "paramètres" que tu peux mettre quand tu créer une fonction, ça ressemble à ça: function attackerVictim(a: player, v: player) # Donc là j'ai crée des variables temporaires dans ma fonction, et j'ai décidé de les parse as player. D'où le "a: player". add 1 to {killstreak.%{_a}%} # Donc ici on remplace %attacker% par %{_a}% (qui représente l'attaquant) add 1 to {kill.%{_a}%} # Ici pareil add 1 to {death.%{_v}%} # Ici on met %{_v}% Sachez que l'on pourrait également mettre des paramètres de fonction de ce type : a: text # Il faudrait alors appeler la fonction dans le code comme ça : attackerVictim("attacker", victim) a: number a: block Donc notre fonction est prête ! Il ne manque plus qu'à l'appeler et on fait comme ça: on death: if damage was cause by explosion: attackerVictim(attacker, victim) # Ici on appelle la fonction, attacker ça va envoyer le pseudo de l'attaquant à la fonction attackerVictim et victim va envoyer le pseudo de la victime à ta fonction ! send "Tu es mort d'explosion." to victim else if damage was cause by lava: attackerVictim(attacker, victim) send "Tu es mort de lave." to victim else if damage was cause by sword: attackerVictim(attacker, victim) send "Tu es mort d'épée." to victim function attackerVictim(a: player, v: player) add 1 to {killstreak.%{_a}%} add 1 to {kill.%{_a}%} add 1 to {death.%{_v}%} Voilà ! Si tu n'as pas compris ce tutoriel, envoie-moi un MP qu'on règle tout ça ensemble :)
    2 points
  4. Super ! C'est toi qui m'avait appris ça en plus^^ !
    2 points
  5. PLAGIAT DU TUTORIEL QUE TU M'AS ÉCRIT (en MP) ! Ton tutoriel est GÉ-NI-AL !
    2 points
  6. C'est autorisé, si c'est juste pour regarder. Sinon beaucoup de projet sont open sources: Skript: https://github.com/Njol/Skript SkQuery: https://github.com/w00tmast3r/skquery/ SkRayFall: https://github.com/eyesniper2/skRayFall/ skUtilities: https://github.com/tim740/skUtilities/ Umbaska: https://github.com/nfelly/Umbaska WolvSK (pub cachée): https://github.com/Nashoba24/WolvSK
    2 points
  7. Pour trouver tous les events/effects, il faut décompiler Skript et ses addons puis se balader dans les class.
    2 points
  8. Ce serait plus intéressant si y'avait un moyen de donner un peu plus de visibilité aux statuts, dans la mesure où tu vas rarement faire la commande pour chaque joueur. Tu pourrais même ne pas te douter que cette fonction existe. Pourrait peut-être y avoir un message désactivable sur le tchat à chaque changement de statut et une commande pour afficher les statuts de tous les joueurs connectés.
    1 point
  9. Sympa ! Tu m'apprends encore une fois une nouvelle chose :) Merci beaucoup !
    1 point
  10. Méga tutoriel sympa et moins compliqué que celui de Angelus, GG !
    1 point
  11. Un bon petit tutoriel :) hâte de voir la suite ^^!
    1 point
  12. Linaris/PoudlardRP l'ont fait en JAVA et non en skript. Cela n'est pas encore possible pour skript, à voir avec des développeurs d'add-ons. Cordialement, Joris
    1 point
  13. Comment l'imprimante est-elle utilisée, que veux-tu dire par billet ?
    1 point
  14. C'est impossible de mettre un item dans le ce slot en Skript.
    1 point
  15. Y a pas mieux. Et puis c'est très bizarre que ça lag autant juste pour une ligne x)
    1 point
  16. Remplace par "add location of event-block to {blocklist.%player%::*}" et ensuite pour les remplacer par de l'air : loop {blocklist.%player%::*}: set block at loop-value to air
    1 point
  17. Ca fait deux fois que je le répète, on a besoin de ton code.
    1 point
  18. Demande traitée ! Nom du script : MurDeBriques (Oui j'abuse :)) ! Description du script : En faisant un clic droit avec une brique (ID : 336), cela va faire apparaître un mur de briques. Le tout est configurable. Commandes : > Aucune... Configuration du script : [spoiler=Configuration] Message_Mur_Placé: &aLe mur a bien été placé ! Bloc_A_Placé: Brick Block # ! A mettre en anglais, ou bien mettre l'ID ! > Une erreur ? Envoie une image de tes erreurs avec ta version MC et la liste de tous tes ADD-ON ! > Skript & ADD-ON ? Télécharge le tout ici ! > Utile pour toi ? Lâche un "J'aime" !
    1 point
  19. @SkyAbout Ton bloc ne désigne pas le joueur qui doit recevoir de l'argent. @Raphy123 Si on met every 10 minutes, ça va effectivement fonctionner pour tout le monde sur le serveur au même moment, mais c'est pas très important dans la mesure où ça prend en compte que les joueurs en ligne. Effectivement, tu peux recevoir l'argent au moment où tu te connectes si t'arrives au bon moment, mais ça va pas changer grand chose sur le fond. Tu peux très bien fonctionner avec ça : every 10 minutes: loop all players: make console execute command "/eco give %loop-player% 1" send "&eVous recevez &a1$ &epour votre présence." to loop-player Et puis y'a déjà des plugins qui font ça. https://www.spigotmc.org/resources/time-is-money.12409/ https://dev.bukkit.org/bukkit-plugins/timeismoney/ https://skript-mc.fr/forum/resources/time-is-money.147/ https://dev.bukkit.org/bukkit-plugins/skript/forum/requests/73503-time-is-money-request/#p8 https://dev.bukkit.org/bukkit-plugins/skript/forum/requests/82496-time-money/#p2
    1 point
  20. 1 point
  21. merci mais j'ai vraiment essayer de trouver et je n'y arrive pas :(
    1 point
  22. b'ah c'est possible de set un truc la car des serveurs l'ont fait et des personnes donc... Linaris et PoudlardRP sans vouloir faire de pub x)
    1 point
  23. Pour give un item enchanter tu met par exemple : give 1 diamond sword of sharpness 1 named "NomQueTuVeut" to player
    1 point
  24. every 5 seconds: loop all players: set loop-player tab name to "&a%loop-player% &e%loop-player's ping%"
    1 point
  25. Demande traitée ! Nom du script : BadCoins ! Description du script : Système d'économie complet, avec système de vente par panneaux ! Nom de la monnaie : BadCoins ! J'ai gardé la même variable pour la monnaie d'un joueur : {badcoins.%player%} ! Pour faire vendre un/des item(s) à des joueurs par panneaux, il suffit de placer un panneau en respectant le schéma : Ligne 1 : [Vendre] Ligne 2 : [Nom_Item] ! A mettre en anglais Ligne 3 : [Prix] << A mettre sous cette forme : "30 BadCoins". J'ai aussi fait une configuration complète pour toi ! Commandes : > /BadCoins : Voir son solde >> N/A > /BadCoins [Joueur] : Voir le solde d'un joueur >> N/A > /BadCoins [Joueur] Add [somme] : Ajouter de l'argent à un joueur >> BadCoins.Admins > /BadCoins [Joueur] Remove [somme] : Retirer de l'argent à un joueur >> BadCoins.Admins > /BadCoins [Joueur] Clear : Remettre le solde d'un joueur à 0 >> BadCoins.Admins > /BadCoins [Joueur] Set [somme] : Permet de régler la somme d'un joueur >> BadCoins.Admin Configuration du script : [spoiler=Configuration] Prefix: &8[&bBadCoins&8] Commande_Principale: /BadCoins Permission_Commande_Principale: BadCoins.Admins Permission_Message: &cErreur : Vous n'avez pas la permission ! View_Solde: ON # Autorise les joueurs à voire le solde des autres joueurs ! ON = Activé, OFF = Désactivé ! Solde_De_Départ: 500 Pas_Assez_BadCoins: &cErreur : Vous n'avez pas assez de BadCoins ! Achat_Effectué: &aVous avez acheté &b%{_Item}% &apour &e%{_Prix}% &aBadCoins ! Message_View_Solde: &aVous avez &e%{_Money}% &aBadCoins ! Message_Other_View_Solde: &aLe joueur &b%{_Player}% &apossède &e%{_Money}% &aBadCoins ! Message_Add_Solde: &aVous avez ajouté &e%{_Money}% &aBadCoins au joueur &b%{_Player}% &a! Message_Remove_Solde: &aVous avez retiré &e%{_Money}% &aBadCoins au joueur &b%{_Player}% &a! Message_Clear_Solde: &aVous avez remis le solde de &b%{_Player}% &aà &e0 &aBadCoins ! Message_Set_Solde: &aVous avez régler le solde de &b%{_Player}% &aà &e%{_Money}% &aBadCoins ! > Une erreur ? Poste une image de tes erreurs avec ta version MC ainsi que la liste de tes ADD-ON ! > Skript & ADD-ON ? Télécharge le tout ici ! > Utile pour toi ? Lâche un "J'aime" !
    1 point
  26. Double merci !@PsYZiiK
    1 point
  27. Je ne suis pas sûr mais tu peux toujours essayer entre le slot 40 et 45.
    1 point
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.