Classement
Contenu populaire
Affichage du contenu avec la meilleure réputation le 30/04/2019 dans Messages
-
C’est Biosphere2 Difficulté: Partie 1: Facile | Partie 2: Difficile (voir Hardcore pour les maths) Partie 1 - Les bases Biosphere2 c'est quoi ? Biosphere2 est un add-on de Skript permettant d'utiliser des vecteurs, de générer des formes géométriques, bref plein de trucs mathématiques qui, on va pas se le cacher, hyper facilement. Cet add-on peut être puissant dans un cadre bien précis (génération de structures, etc...) Les bases, ça donne quoi ? On va commencer doucement avec les vecteurs. Un vecteur c'est quoi ? Un vecteur est un segment de droite orienté, formant une entité mathématique sur lequel on peut effectuer des opérations. Plus d'info sur la page wikipédia si vous ne savez pas ce qu'est un vecteur 😉 . Pour générer un vecteur basique, y'a pas plus simple, il faut juste regarder la syntaxe: set {_line::*} to line with length 10 and density 5 show happy villager at player offset by {_line::*} Cela va vous tracer un segment de particules de villageois contents avec une densité de 5 (donc 5 particules à 1 point du segment) et long de 10 blocs au-dessus de la tête du joueur. L'offset permet de tracer la ligne au-dessus du joueur et ne prend pas les coordonnées relatives. Ce sont des coordonnées absolues. Bon c'est bien mignon les particules mais le mieux ça reste avec des blocs imaginez la construction d'un dôme de verre qui se construit petit à petit ! On va y venir. Le vecteur linéaire peut être utile pour tracer des chemins par exemple. Faisons une ligne de cube en or: command /genLine: trigger: set {_location} to location of player set {_length} to 20 set {_density} to 1 set {_player} to player set {_line::*} to line with length {_length} and density {_density} set {_looped} to 0 loop {_length} times: set {_x} to ({_location} offset by {_line::%{_looped}%})'s x-location set {_y} to ({_location} offset by {_line::%{_looped}%})'s y-location set {_z} to ({_location} offset by {_line::%{_looped}%})'s z-location set {_locationFinale} to location {_x}, {_y}, {_z} in world of {_player} set block at {_locationFinale} to gold block add 1 to {_looped} wait 1 tick Bon, ce n'est pas dur à comprendre. On va commencer à créer des variables temporaires qui vont permettre d'initialiser la ligne. Pour commencer, on définition la location du joueur où la ligne va se générer, ensuite on demande une ligne de 20 blocs de long (en réalité il en retire deux à la fin donc si on définit une longueur de 20, on va avoir une ligne de 18 blocs de long), ensuite la densité (0.1 = très espacée, +20 = très proche) on va prendre une densité de 1, ensuite on définit une variable {_player} pour définir l’exécuteur, on définit la ligne avec les paramètres choisis au-dessus puis pour finir un variable compteur. Retenez bien ce paterne car il va nous servir pour plein d'autres formes. Une fois l'initialisation faites, on va tracer la ligne: - On va d'une part faire une boucle suivant la longueur de la ligne - On défini ensuite les positions X, Y et Z une part une sur la position {_location} défini dans l'initialisation - On défini une variable finale regroupant X, Y, Z et le monde de l’exécuteur - On pose le bloc à la position donnée par la variable finale - On fini par ajouter 1 à la variable de bouclage pour passer au bloc suivant et ainsi de suite jusqu'à ce que la longueur totale soit parcourue et posée. Voilà. Bon le problème c'est que cette syntaxe nous permet de tracer uniquement suivant une suite X+1 de l’exécuteur. On va maintenant faire des vecteurs personnalisés avec les directions que l'on souhaite. C'est presque la même chose mais avec quelques modifications: command /genLine2: trigger: set {_location} to location of player set {_density} to 1 set {_player} to player set {_line::*} to vector line between vector 0, 0, 0 and vector 8, 0, 8 with density {_density} set {_looped} to 1 while {_line::%{_looped}%} is set: set {_x} to ({_location} offset by {_line::%{_looped}%})'s x-location set {_y} to ({_location} offset by {_line::%{_looped}%})'s y-location set {_z} to ({_location} offset by {_line::%{_looped}%})'s z-location set {_locationFinale} to location {_x}, {_y}, {_z} in world of {_player} set block at {_locationFinale} to gold block add 1 to {_looped} wait 1 tick Bon, on peut constater qu'on a presque la même initialisation et la même procédure de pose: On définit une position, une densité, un exécuteur et un compteur. On retire la longueur car ça serait trop chiant à calculer et on remplace la boucle par le while. Techniquement on pourrait utiliser le while partout pour des choses basiques. Dans la définition du vecteur linéaire, on peut constater qu'il y a deux points de vecteurs. Ce sont les coordonnées absolues. Le premier point définit la position de départ du vecteur en position absolue (comme si vous utilisiez les ~ dans un command bloc) et le second point désigne les points d'arrivée. Les deux points vont donc former un vecteur. Je vous laisse faire le test ça fonctionne parfaitement Bon, je vous ai donné les bases à savoir. Vous êtes maintenant en mesure d'utiliser n'importe quelle forme que biosphere2 vous propose. En voici une petite liste avec leur syntaxe: - Ligne: set {_line::*} to line with length {longueur} and density {densité} set {_line::*} to vector line between vector X1, Y1, Z1 and vector X2, Y2, Z2 - Cercle: set {_circle::*} to circle with radius {radius} and density {densité} - Sommets d'un cube: set {_cube::*} to cube with radius {radius} - Arrêtes et sommets d'un cube: set {_cubeoutline::*} to cube outline with radius {radius} and density {densité} - Spirale: set {_helix::*} to helix with radius {radius}, height {hauteur}, step {pas de montée} and density {densité} - Sphère: set {_cubeoutline::*} to sphere with radius {radius} and density {densité} Ces formes vous pouvez les utiliser pour les particules aussi et pas que pour poser des blocs. Cet add-on utilise le système de coordonnées absolues donc vous pouvez faire tout et n'importe quoi. Voila c'est fini pour les bases et pour son utilisation basique 😉 On se retrouve pour la seconde partie qui devient un peu plus difficile. Partie 2 - Expert Bon, maintenant je vais vous montrer un cas concret d'utilisation. Ce cas m'a demandé quelques mois de travail mine de rien et je pense que vous pouvez être confronté à ce genre de chose si vous utilisez des formes géométriques de manières poussées. Commençons ! Dans ce cas, on va générer une sphère de deux types de verres différents, qui ne cassent pas les blocs solides mais uniquement les blocs transparents (feuillages, herbes, etc.) ,qui se génère longitude par longitude, qui retire les liquides qui sont à l’intérieur de la sphère, qui se régénère si un bloc de la sphère et cassé, et avec un rayon allant de 5 à 80 (au-delà de 80 le serveur demande beaucoup de ressources de calculs donc on cap la limite à 80 blocs de rayon). Ça fait beaucoup de paramètres mais faisables en quelques lignes et avec une bonne dose de mathématiques. Commençons par l'initialisation (le plus simple): options: densité: 5 #Pour être sur de ne rater aucun bloc ignoreBlocks: air or sapling or plants or water or stationary water or water source or flowing water or falling water or moving water or lava or stationary lava or lava source or flowing lava or falling lava or moving lava or 175:2 fluidSponge: water or stationary water or water source or flowing water or falling water or moving water or lava or stationary lava or lava source or flowing lava or falling lava or moving lava C'est tout ?! Oui. On va maintenant procéder par fonctions. On va faire la plus simple en première. Faire la fonction de génération de la sphère: function DOME_LOAD(l: location, p: player): set {_count} to 0 while {Dome::Enable} is true: set {_number} to 1 loop {Dome::coefCirculation} times: set {_x} to ({_l} offset by {_cubeoutline::%{_number}%})'s x-location set {_y} to ({_l} offset by {_cubeoutline::%{_number}%})'s y-location set {_z} to ({_l} offset by {_cubeoutline::%{_number}%})'s z-location set {_loopedLocation} to location {_x}, {_y}, {_z} in world of {_p} set {_loopedBlock} to block at {_loopedLocation} if {_loopedBlock} is {@ignoreBlocks} or air: set block at {_loopedLocation} to glass add 1 to {_number} chance of 3%: wait 1 tick #Sinon serveur crash message "Génération terminée" to {_p} add 1 to {_count} message "Nombre de génération effectuée: %{_count}%" to {_p} Faisons maintenant la partie la plus compliquée, générons le nombre qui va nous permettre de savoir combien de blocs il va devoir vérifier (c'est la variable {Dôme: :coefCirculation} qu'il va falloir définir). Ce nombre peut être en premier temps déduit à l’arrache c'est-à-dire qu'on y met un grand nombre au pif et on regarde si la sphère va jusqu'au bout de son check. Une fois qu'on a un nombre plutôt correct et facile à arrondir, on l'arrondi. Par exemple pour un radius de 10 avec une densité de 5 c'est 22771588.52 checks pour la sphère. Oui c'est énorme et pour le calculer ce n'est pas simple du tout. Par exemple si on veut une sphère de 10 blocs de radius, on va essayer de faire un loop de 10 fois. On définit {Dôme: : coef Circulation} = 10 et on se rend compte que 10 nous pose 3 blocs. On se creuse la tête encore plus mais ce n'est pas simple. Je vais vous simplifier l'affaire et vous épargner l'étape ultra difficile mais il va falloir savoir la maîtriser. Pour trouver ce nombre, on doit élever le radius au cube qui forme notre premier facteur (donc {radius}^3) puis on y ajoute un nombre déduit par une régression exponentielle. Voici comment on calcule notre régression exponentielle: Tout d'abord on va dresser un tableau: Pour un radius de (x) : 5 | 10 | 20 | 40 | 80 Il nous faut: (y) : 50 | 25 | 12.5 | 6.25 | 3.125 Ça c'est les valeurs dont j'ai trouvé quand j'ai généré une sphère avec ({radius}^3)*(nombre du tableau). Pour l'instant on a seulement 5 points mais comment trouver les autres ? Par la régression exponentielle. La régression va nous permettre de trouver la courbe entre les points à partir de deux points connus. Faisons entre 5 et 10 (car on ne peut pas faire entre 5 et 80 directement, vous allez comprendre pourquoi): On remarque que quand on multiplie x par 2, on divise y par 2 donc notre fonction se présentera sous cette forme là: f(x) = k*exp(a*x). Trouvons k et a. ( exp() = exponentielle ) On a f(5) = 50 et f(10) = 25 On commence par trouver a et prendre le x le plus haut donc f(10) f(10) = 25 <=> k*exp(10*a) = 25 <=> k*exp(10*a)/k*exp(5*a) = exp(10*a)/exp(5*a) = 25/50 (on supprime les k car on les retrouve au numérateur et dénominateur) <=> exp(5*a) = 1/2 <=> a = ln (1/2)/5 ( ln = logarithme népérien ). On a trouvé le a pour 5 =< x < 10. On cherche ensuite k avec le x le plus bas donc f(5) (c'est plus simple): f(5) = 50 <=> k*exp(5*a) = 50 <=> k*(1/2) = 50 <=> k = 100 Voila on a notre k et notre a, on regroupe le tout et on trouve: k*exp(a*x) = 100 * exp( ( (ln (1/2) /5) * x ). Maintenant on réitère l'opération pour 10 =< x < 20 ; 20 =< x < 40 ; 40 =< x < 80. Voici notre fonction: set {_l} to location of player set {Dome::Enable} to false if arg-1 > 4: if arg-1 < 11: set {Dome::Longeur} to ((arg-1^3)*(100*exp(arg-1*(ln(0.5)/5)))) set {Dome::Enable} to true else: if arg-1 > 10: if arg-1 < 21: set {Dome::Longeur} to ((arg-1^3)*(50*exp(arg-1*(ln(0.5)/10)))) set {Dome::Enable} to true else: if arg-1 > 20: if arg-1 < 41: set {Dome::Longeur} to ((arg-1^3)*(25*exp(arg-1*(ln(0.5)/20)))) set {Dome::Enable} to true else: if arg-1 > 40: if arg-1 < 81: set {Dome::Longeur} to ((arg-1^3)*(6.25*exp(arg-1*(ln(0.5)/40)))) set {Dome::Enable} to true Voilà. Cette partie était la plus difficile (et sans doute la plus difficile à comprendre aussi) mais pour faire ça il m'a fallu des mois pour comprendre comment fonctionnait la régression exponentielle. Je vous ai fait un petit cours donc voilà ^^. Mais faut suivre en maths car ce n'est pas simple. On regroupe tout notre code et on en arrive à ça: options: ignoreBlocks: air or sapling or plants or water or stationary water or water source or flowing water or falling water or moving water or lava or stationary lava or lava source or flowing lava or falling lava or moving lava or 175:2 fluidSponge: water or stationary water or water source or flowing water or falling water or moving water or lava or stationary lava or lava source or flowing lava or falling lava or moving lava command /genSphere <integer>: trigger: set {_l} to location of player set {Dome::Enable} to false if arg-1 > 4: if arg-1 < 11: set {Dome::Longeur} to ((arg-1^3)*(100*exp(arg-1*(ln(0.5)/5)))) # On défini notre variable de longueur avec la régression exponentielle set {Dome::Enable} to true # On Enable le while else: if arg-1 > 10: if arg-1 < 21: set {Dome::Longeur} to ((arg-1^3)*(50*exp(arg-1*(ln(0.5)/10)))) set {Dome::Enable} to true else: if arg-1 > 20: if arg-1 < 41: set {Dome::Longeur} to ((arg-1^3)*(25*exp(arg-1*(ln(0.5)/20)))) set {Dome::Enable} to true else: if arg-1 > 40: if arg-1 < 81: set {Dome::Longeur} to ((arg-1^3)*(6.25*exp(arg-1*(ln(0.5)/40)))) set {Dome::Enable} to true set {_sphere::*} to sphere with radius arg-1 and density 5 # On génère les points de la sphère dans une variable set {_count} to 0 while {Dome::Enable} is true: set {_number} to 1 loop {Dome::Longeur} times: set {_x} to ({_l} offset by {_sphere::%{_number}%})'s x-location set {_y} to ({_l} offset by {_sphere::%{_number}%})'s y-location set {_z} to ({_l} offset by {_sphere::%{_number}%})'s z-location set {_loopedLocation} to location {_x}, {_y}, {_z} in world of player set {_loopedBlock} to block at {_loopedLocation} if {_loopedBlock} is {@ignoreBlocks} or air: set block at {_loopedLocation} to stone chance of 3%: # On oublit pas l'anti crash wait 1 ticks add 1 to {_number} loop blocks in radius arg-1 of {_l}: # La fonction qui supprime les liquides if loop-block is water or lava: loop blocks in radius 10 of position of loop-value: if loop-block-2 is {@fluidSponge}: set block at loop-value-2 to air message "Génération terminée" add 1 to {_count} wait 5 ticks message "Nombre de génération effectuée: %{_count}%" command /ws: # Et on fait une commande d'arret de génération. trigger: set {Dome::Enable} to false message "Stop whiling" Et voilà, on a un script de génération de sphères qui ne casse pas les blocs solides mais uniquement les blocs transparents (feuillage, herbes, etc...) ,qui se génère longitude par longitude et blocs par blocs, qui retire les liquides qui sont à l’intérieur de la sphère, qui se régénère si un bloc de la sphère est cassé, et avec un rayon allant de 5 à 80. Bon amusement avec les géométries 😉 Vengelis1 point
-
Hey, souvent on voit des demandes d'aide qui consistent en un "ça marche pas, voici mon code". @PsYZiiK avait proposé un formulaire, mais chaque cas étant ce qu'il est, il est difficile d'en avoir un qui couvre vraiment tous ces cas. Aujourd'hui, je vous propose donc de trouver les problèmes de vos plugins pour vous en débarrasser vous-même et ainsi désengorger la section Aide et vous permettre de dire précisément où se situe votre problème aux gens qui vous aident. 1. Les messages d'erreur de Skript Ce qui est génial avec ces messages qui s'affichent quand on recharge un plugin Skript, c'est qu'ils sont (souvent) courts et simples à comprendre. Ils se présentent comme ceci : Explication de l'erreur (Plugin.sk, line X: 'Instruction mise en cause') La ligne C'est le plus important en fait et y'a plein de gens qui passent à côté en lisant leur message d'erreur. Et le principe est tout simple, évident même : c'est la ligne où Skript a trouvé une erreur en chargeant le plugin. Alors pas la peine de désespérer en cherchant d'où peut venir le problème quand vous avez un message d'erreur, c'est écrit exactement où vous devez regarder. Instruction mise en cause C'est juste un copier/coller de la ligne d'où vient le problème. Pour le coup, c'est une partie un peu inutile. Si vous avez le numéro de la ligne -ce qui est toujours le cas-, cette partie du message risque de vous servir rarement. Par contre, si la ligne en question est très longue, cette partie risque de prendre beaucoup de place et rendre le message un peu plus difficile à lire. Le plugin.sk C'est juste au cas où vous rechargez plusieurs plugins en même temps et que du coup, vous ne savez pas si l'erreur vient du premier, du deuxième ou du douzième. L'explication de l'erreur Ici, c'est ce qui va vous permettre, après avoir localisé le problème, de savoir ce qu'il est. Je vais développer un peu chacun d'eux plus loin. indentation error: expected X tabs, but found Y tabs Ce message est un peu particulier, parce qu'en général, il est présent plusieurs fois pour une seule erreur, mais il est très fréquent quand on débute. Il apparaît quand Skript trouve une incohérence dans les tabulations (tabs). Le cas le plus répandu, c'est quand on oublie de mettre deux points ":" à la fin d'une condition ou d'un événement. Dans ce cas, Skript considère la ligne de l'oubli comme une condition sans if ou un effet, deux cas où les lignes suivantes doivent être au même niveau que l'instruction en cause. Du coup, le fait que toutes les lignes suivantes soient décalées d'une tabulation fait que Skript les voit comme mal placées et signale une erreur pour chacune d'elles alors que la ligne où se situe le vrai problème n'est pas signalée par ce message. En revanche, la bonne ligne est souvent signalée par le message d'erreur suivant. Can't understand this condition/effect : Instruction Cette explication, c'est celle qui apparaît quand Skript ne reconnaît pas la syntaxe que vous avez utilisée dans une instruction sans deux points ":" à la fin. Le problème : - comme je disais au dessus, peut venir du fait qu'il manque les deux points ":", puisque Skript lit très différemment les instructions avec et sans. - mais le plus souvent, le problème est que la syntaxe n'est pas reconnue parce qu'elle est ajoutée par un add-on que vous n'avez pas installé ou qui n'est pas à la bonne version (ou de Skript qui n'est pas à la bonne version). Si vous ne savez pas de quel add-on vient une instruction, cherchez-la sur internet. - une autre cause récurrente. c'est que vous vous êtes juste trompé en écrivant l'instruction et que Skript ne comprend pas si c'est juste à peu près la bonne instruction. Dans ce cas, vérifiez la syntaxe là aussi en cherchant l'instruction sur internet. Le mot syntaxe comprend aussi les types d'arguments que vous utilisez. Si vous tentez de mettre potato là où Skript attendait un nombre, vous aurez le même message. Vous pouvez trouver la grande majorité des instructions et les add-ons dont elles dépendent sur SkUnity, ainsi que leur syntaxe, simplement en tapant le début dans le moteur de recherche en haut à droite. Empty configuration section! You might want to indent one or more of the subsequent lines to make them belong to this section or remove the colon at the end of the line if you don't want this line to start a section. Bon je sais, c'est long comme message, mais c'est très simple. Si vous avez une instruction qui finit par deux points ":", mais que la ligne en dessous n'a pas une tabulation en plus, le message apparaît pour dire qu'il faut soit retirer les deux points ":" soit ajouter la tabulation qui manque pour les instructions qui dépendent de celle qui pose problème. En général, on est tête en l'air et il fallait ajouter la tabulation. Beaucoup d'autres messages d'erreurs Il existe beaucoup d'autres erreurs, mais elles sont pour la plupart très simples à comprendre et ne nécessitent pas spécialement d'être développées. Si vous ne comprenez pas, un traducteur en ligne devrait faire l'affaire. Et si vous ne trouvez pas votre bonheur, vous avez toujours la possibilité de chercher votre erreur sur internet au cas où quelqu'un aurait eu le même problème et si vous êtes désespérés, vous pouvez poster un topic dans les demandes d'aide, où vous devrez donner l'erreur qui vous bloque, la partie du code liée, voire le code entier si vous n'êtes pas sûr d'avoir tous les éléments dans une partie réduite et dire ce que vous essayez de faire, puis tout ce que vous avez tenté pour résoudre le problème. 2. Les messages d'erreur Java Hors des messages d'erreur de Skript, on croise parfois d'autres messages qui proviennent des add-on ou de Skript directement. Les messages dans le tchat qui commencent par "An error occured while..." signalent qu'il y a un message d'erreur de ce type à lire dans la console, même si pas toujours. La difficulté de ces messages, c'est qu'ils sont longs et moins explicites. Dans cette partie, on va prendre un exemple très courant : [spoiler=An internal error occurred while checking for the latest version of Skript] [16:11:49] [skript update thread/INFO]: [0;37;22m[[0;33;22mSkript[0;37;22m][m [0;31;22mAn internal error occurred while checking for the latest version of Skript. Please refer to the server log for details.[m [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! [skript] Severe Error: [16:11:49] [skript update thread/ERROR]: #!#! Unexpected error while checking for a new version of Skript [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! If you're developing an add-on for Skript this likely means that you have done something wrong. [16:11:49] [skript update thread/ERROR]: #!#! If you're a server admin however please go to http://forums.skunity.com/t/4148?u=nfell2009 [16:11:49] [skript update thread/ERROR]: #!#! and check whether this error has already been reported. [16:11:49] [skript update thread/ERROR]: #!#! If not please reply with meaningful content, copy & paste this whole error into a pastebin (http://pastebin.com), [16:11:49] [skript update thread/ERROR]: #!#! and describe what you did before it happened and/or what you think caused the error. [16:11:49] [skript update thread/ERROR]: #!#! If you think that it's a trigger that's causing the error please post the trigger as well. [16:11:49] [skript update thread/ERROR]: #!#! By following this guide fixing the error should be easy and done fast. IF YOU DON'T FOLLOW IT, WE'LL HUNT YOU DOWN. [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! Stack trace: [16:11:49] [skript update thread/ERROR]: #!#! javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1] Message: Fin prématurée du fichier. [16:11:49] [skript update thread/ERROR]: #!#! at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(Unknown Source) [16:11:49] [skript update thread/ERROR]: #!#! at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(Unknown Source) [16:11:49] [skript update thread/ERROR]: #!#! at ch.njol.skript.Updater.getChangelogs(Updater.java:286) [16:11:49] [skript update thread/ERROR]: #!#! at ch.njol.skript.Updater$2.run(Updater.java:210) [16:11:49] [skript update thread/ERROR]: #!#! at java.lang.Thread.run(Unknown Source) [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! Version Information: [16:11:49] [skript update thread/ERROR]: #!#! Skript: 2.2-Fixes-V9b [16:11:49] [skript update thread/ERROR]: #!#! Bukkit: 1.10-R0.1-SNAPSHOT [16:11:49] [skript update thread/ERROR]: #!#! Minecraft: 1.10 [16:11:49] [skript update thread/ERROR]: #!#! Java: 1.8.0_101 (Java HotSpot(TM) Client VM 25.101-b13) [16:11:49] [skript update thread/ERROR]: #!#! OS: Windows 10 x86 10.0 [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! Running CraftBukkit: false [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! Current node: set {_Ligne} to line 2 of lore of player's tool (Entraînement au tir.sk, line 36) [16:11:49] [skript update thread/ERROR]: #!#! Current item: null [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! Thread: Skript update thread [16:11:49] [skript update thread/ERROR]: #!#! [16:11:49] [skript update thread/ERROR]: #!#! End of Error. [16:11:49] [skript update thread/ERROR]: #!#! A noter que la plupart des informations sont présentes dans le début de l'erreur. On a donc ça (étalé sur deux lignes) : [skript] Severe Error: Unexpected error while checking for a new version of Skript Le premier mot, c'est Skript, mais ça veut pas dire que le problème vient forcément du plugin Skript lui-même, donc on n'apprend pas grand chose. C'est la ligne qui suit les deux points qui est plus intéressante. Elle indique ce que le plugin cherchait à faire quand l'erreur est arrivée. Dans notre cas, Skript cherchait à vérifier si une nouvelle version n'était pas disponible. Dans ce cas-ci, puisque normalement, vous ne tournez pas sur la dernière version de Skript, cette erreur est sans importance et dans ce cas-ci, il vaut mieux désactiver le checking de nouvelle version dans la config' du plugin. Après, je suis pas forcément bien calé en java donc je vais pas trop insister sur cette partie, ça pourrait être cool que quelqu'un la fasse. Le mieux, si l'erreur est incompréhensible pour vous aussi, c'est de chercher le début sur Google avec des guillemets ("votre erreur"). 3. Ça marche pas, mais y'a pas de message d'erreur Agent 007, voici votre équipement pour cette mission : broadcast "Le joueur est dans le bon monde" broadcast "%{Variable}%" send "Il a bien un bâton dans la main" to console Ces outils, les plus élémentaires qui soient, permettent de localiser à peu près n'importe quel problème par logique. Une fois le problème repéré, on peut, au mieux le résoudre soi-même, au pire en donner tous les éléments dans une demande d'aide au lieu d'un "ça marche pas svp". L'intérêt donc des instructions énoncées au dessus, c'est qu'en les disposant un peu partout dans son code, on peut savoir ce qui se passe exactement lorsqu'on exécute son plugin, en regardant quels messages se sont affichés ou non.1 point
-
1 point
-
Sur notepad++, en haut dans " Encodage " tu mets en UTF-8, des fois ca s'enleve tout seul. mets un j'aime si ca t'as aidé et en résolu si c'est réglé ! ^^1 point
