Aller au contenu
  • 0

Skript - Problème "parsed as a integer"


Question

Posté(e)

Version de Minecraft : 1.13.x - 1.14.x (Native : 1.14.4)
Version de Skript : 2.5.3

Addons utilisés: Vixio, Skript-GUI, SkQuery, SkEnt, SkDragon, Skellett, SkBee, SharpSK et Reqn

Type du skript : Achat dans un magasin joueur (Market / HDV)

Description du script :

Bonjour à tous et à toutes !

J'ai récemment créer un Market, un peu comme pour les serveurs Factions avec le HDV, celui-ci fonctionne extrêmement bien sauf une chose.
Quand j'essaye d'acheter l'objet d'un autre joueur via le menu, je définis une variable sur une variable texte suivi d'un "parsed as a integer".

Cependant, une fois le "parsed ..." mis, ma variable retourne "<none>" au lieu du prix alors que la variable contenant le prix de base, elle me retourne bien le prix sauf que comme celle-ci est un texte, je ne peux pas l'utiliser 😕

Voici le code :

 

Citation

on inventory click:
	if name of player's inventory contain "&8● &6Magasin":
		set {_Item} to clicked item
		set {_ItemLore::*} to lore of clicked item
		set {_Lore.1} to {_ItemLore::1}
		set {_Lore.2} to {_ItemLore::2}
		if {_Lore.1} contain "&7Vendeur &8: &f":
			replace all "&7Vendeur &8: &f" with "" in {_Lore.1}
		else:
			stop
		if {_Lore.2} contain "&7Prix &8: &f":
			replace all "&7Prix &8: &f" with "" in {_Lore.2}
			replace all "$" with "" in {_Lore.2}
		else:
			stop

		set {_Seller} to "%{_Lore.1}%" parsed as a offline player
		set {_Price} to "%{_Lore.2}%" parsed as a integer

		if {_Seller} = player:
			create a gui with virtual chest inventory with 1 rows named "&8● &2Confirmation":
				make gui slot 2 with green wool block named "&aReprendre &8'&f%clicked item%&8'":
					remove {_Item} from {Market::*}
					set 1st line of lore of {_Item} to ""
					set 2th line of lore of {_Item} to ""
					add {_Item} to player's inventory
					send "{@Prefix} &7Votre objet vous à été rendu !" to player
					Market(player, 1)
				make gui slot 6 with red wool block named "&cAnnuler":
					Market(player, 1)
			open last gui to player
			stop

		loop {Market::*}:
			if 1st line of lore of loop-value contain "%{_Seller}%":
				if 2th line of lore of loop-value contain "%{_Lore.2}%":
					if clicked item = loop-value:
						if {Economy::Dollard::%player%} >= {_Price}:
							remove loop-value from {Market::*}
							add loop-value to player's inventory
							remove {_Price} from {Economy::Dollard::%player%}
							add {_Price} to {Economy::Dollard::%{_Seller}%}
							send "{@Prefix} &7Vous avez acheté &8'&e%clicked item%&8' &7de &8'&e%{_Seller}%&8' &7pour &8'&e%{_Price}%&e$&8' &7!" to player
							send "{@Prefix} &e%player% &7à acheté &8'&e%clicked item%&8' &7pour &8'&e%{_Price}%&e$&8' &7!" to {_Seller}
						else:
							send "{@Error} &cVous n'avez pas assez d'argent !" to player
							stop
		
		send "&7Vendeur &8: &f%{_Seller}% &8// &7Prix &8: &f%{_Price}%"
		close player's inventory

 

Ici, je ne donne que le "on inventory click:" car, premièrement, je ne veux pas partager le reste du code et deuxième, le problème vient de là.

Alors, la variable qui pose problème est "{_Price}" défini sur "{_Lore.2}", "{_Lore.2}" me retourne bien le prix indiqué dans la ligne 2 du lore mais quand je défini "{_Price}" sur celle-ci suivi d'un "parsed as a integer" afin de faire comprendre à Skript que c'est un nombre, il me retourne "<none>" comme dit précédemment.

Cela fait plusieurs jours que j'essaye de réglé ce problème, en vain alors si vous avez la solution, merci grandement à vous !

Bonne journée !

13 réponses à cette question

Messages recommandés

  • 0
Posté(e) (modifié)

Le souci c'est que la variable que tu parse as integer n'est pas seulement un nombre sous "format texte", je m'explique :

Comme tu l'as dis, t'essaye de faire comprendre au script que ta variable {_Lore.2} est un nombre, SAUF QUE : si le contenu de la variable était par exemple "58" (et j'ai bien mis des guillemets pour dire que c'est un texte) et que t'ecris "set {_Price} to "%{_Lore.2}%" parsed as integer", ca va bien te retourner 58, sauf que là ta variable ne contient pas QUE le nombre, mais aussi d'autre texte, en l'occurence ta variable contient je suppose  : "&7Prix &8: &f + ton nombre ici j'imagine"
Et skript ne peut pas transformer des lettres en nombre (c'est logique). Si tu n'as toujours pas compris je t'invite à faire par exemple : 


set {_texte1} to "58"
set {_texte2} to "le nombre 58"
set {_exemple1} to "%{_texte1}%" parsed as a integer
set {_exemple2} to "%{_texte2}%" parsed as a integer

et tu verras que la variable {_exemple1} te retournera 58 et la variable {_exemple2} te retournera <none>, car tu peux transformer une variable qui contient un texte en integer UNIQUEMENT si elle contient SEULEMENT un nombre et pas de texte.

Modifié par Blob
j'ai corrigé quelques fautes
  • 0
Posté(e) (modifié)
il y a 52 minutes, Blob a dit :

Le souci c'est que la variable que tu parse as integer n'est pas seulement un nombre sous "format texte", je m'explique :

Comme tu l'as dis, t'essaye de faire comprendre au script que ta variable {_Lore.2} est un nombre, SAUF QUE : si le contenu de la variable était par exemple "58" (et j'ai bien mis des guillemets pour dire que c'est un texte) et que t'ecris "set {_Price} to "%{_Lore.2}%" parsed as integer", ca va bien te retourner 58, sauf que là ta variable ne contient pas QUE le nombre, mais aussi d'autre texte, en l'occurence ta variable contient je suppose  : "&7Prix &8: &f + ton nombre ici j'imagine"
Et skript ne peut pas transformer des lettres en nombre (c'est logique). Si tu n'as toujours pas compris je t'invite à faire par exemple : 


set {_texte1} to "58"
set {_texte2} to "le nombre 58"
set {_exemple1} to "%{_texte1}%" parsed as a integer
set {_exemple2} to "%{_texte2}%" parsed as a integer

et tu verras que la variable {_exemple1} te retournera 58 et la variable {_exemple2} te retournera <none>, car tu peux transformer une variable qui contient un texte en integer UNIQUEMENT si elle contient SEULEMENT un nombre et pas de texte.

Regarde bien mon code, je remplace le "Prix :" et le signe "$" 🙂
Surtout que quand j'envoie ma variable, il me retourne bien le nombre et rien d'autre.

Modifié par Shykuzo
  • 0
Posté(e)

Pourquoi ne pas directement utiliser sous cette forme au lieu de passer par un on inventory click:

make gui slot 0 with dirt:
	# </> Le code de ton on inventory click

Je suppose que quand tu définis les slots de ton GUI, le prix que tu indiques dans le lore est un integer et le vendeur un offline player.

  • 0
Posté(e) (modifié)
Il y a 17 heures, TitiLaPierre a dit :

Pourquoi ne pas directement utiliser sous cette forme au lieu de passer par un on inventory click:


make gui slot 0 with dirt:
	# </> Le code de ton on inventory click

Je suppose que quand tu définis les slots de ton GUI, le prix que tu indiques dans le lore est un integer et le vendeur un offline player.

Oui et effectivement, je n'y ai pas pensé, je vais essayer 🙂
EDIT :
Même en mettant tout le code du "on inventory click:" dans le GUI directement, le bug est toujours présent 😕

Citation

command /market [<text>] [<integer>]:
	aliases: /ah, /hdv
	trigger:
		if player is in world "Survie":
			if arg 1 is not set:
				Market(player, 1)
			else:
				if arg 1 is not "Sell" or "Clear":
					send "{@Error} &cCette option est innexistante !" to player
					stop
				else:
					if arg 1 is "Sell":
						if arg 2 is not set:
							send "{@Error} &cVeuillez indiquer un prix !" to player
							stop
						else:
							if player's tool != air:
								set {_Item} to player's tool with lore "&7Vendeur &8: &f%player%" and "&7Prix &8: &f%arg-2%&f$"
								add {_Item} to {Market::*}
								remove player's tool from player's inventory
								send "{@Prefix} &7Votre objet à été ajouté au Market !" to player
								stop
							else:
								send "{@Error} &cVeuillez tenir l'objet que vous souhaitez vendre !" to player
								stop
					if arg 1 is "Clear":
						if player has permission "{@Permission - Market}":
							clear {Market::*}
							send "{@Prefix} &7Le Market à été vidé !" to player
							stop
						else:
							send "{@Error} &cCette option est innexistante !" to player
							stop
		else:
			send "{@Error} &cCommande inconnue !" to player
			stop

 

 

Modifié par Shykuzo
  • 0
Posté(e)

Salut,
J'ai eu ce problème lors de la création d'un skript de jobs sans pouvoir le résoudre,
Question que je te pose:

Pourquoi vouloir un parsed as integer ?
Si ton nombre de base X est un entier mais sous forme de int, alors ça ne se verra pas. (C'est moins clair que le parsed pour toi mais tes joueurs le verront pas)

 

  • 0
Posté(e)
Le 28/03/2021 à 10:10, Alliz a dit :

Salut,
J'ai eu ce problème lors de la création d'un skript de jobs sans pouvoir le résoudre,
Question que je te pose:

Pourquoi vouloir un parsed as integer ?
Si ton nombre de base X est un entier mais sous forme de int, alors ça ne se verra pas. (C'est moins clair que le parsed pour toi mais tes joueurs le verront pas)

 

J'ai pas le choix, la variable qui gère l'argent ({Economy::Dollard::%player%}) contient un integer.
Ma variable {Lore.2} contient un texte.

Donc, afin de vérifier si le joueur à tel montant ou pas, j'ai besoin que cette variable soit transformée en integer.
Sauf que, malgré des dizaines de tentatives, je n'ai pas réussis à faire fonctionner le "parsed" 😕

  • 0
Posté(e)

Salut, y'a une règle en anglais, peut-être que comme il faut rajouter 1 n quand une lettre est à côté d'une voyelle ? Du coup peut-être: parsed as an integer ?

 

  • 0
Posté(e)
Il y a 1 heure, Crastix a dit :

Salut, y'a une règle en anglais, peut-être que comme il faut rajouter 1 n quand une lettre est à côté d'une voyelle ? Du coup peut-être: parsed as an integer ?

 

J'ai déjà essayé mais si cela venait de sa, Skript m'aurait retourné une erreur, hors, ce n'est pas le cas.

  • Ok . 1
  • 0
Posté(e)
Le 04/04/2021 à 20:24, TitiLaPierre a dit :

Salut!

Peux-tu envoyer le code que tu utilises (Celui sans le on inventory).

C'est celui de mon message de demande d'aide '-'

Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.
×
×
  • 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.