Aller au contenu
  • 0

SignShop


Doc

Question

Posté(e)

Bonjour à tous,

Étant en "vacances", je m'amuse à coder un skript qui me trotte dans la tête depuis longtemps.

Le skript que j'essaye de coder est un skript permettant de créer un shop (joueur) avec une pancarte. Pour le moment tout fonctionne "bien" (C'est peut être pas optimisé, mais ça viendra?).

 

Je rencontre quand même un problème aux niveaux du remove de l'item. En effet quand je veux "stocker" l'item, je veux que l'item soit "clear" de l'inventaire du joueur, puis sauvegarder dans une variables.

Or je n'arrive pas à "remove" cet item.

 

C'est peut être un skript ridicule pour certains, mais ce n'est pas grave :p

 

----

Le problème vient de la variable : {save_item.%player%} qui correspaond au nombres + items, mais qui n'est plus valide quand on remove. Or si je remove avec le full id, ça fonctionne...

----

 

Voilà l'asticot :[ATTACH=full]985[/ATTACH]

# Shop : Première ligne
# %player% : Second line
# Nombre : Nombre
# items : item hand

command /SignShop [<text>] [<text>]:
   aliases: schop
   description: SignShop
   usage: /SChop
   executable by: players
   trigger:
       arg 1 is not set:
           message "Commande utilisable:"
           message "&7\__ &6/schop give : Vous donne une pancarte"
           message "&7\__ &6/schop prix <prix> : Prix de l'item"
       arg 1 is "give":
           give a sign named "&a--[&b&lSignChop&a]--" to player's inventory
           message "---------------------------------------------"
           message " "
           message "&aVous avez reçu votre pancarte!"
           message " "
           message "---------------------------------------------"
       arg 1 is "prix":
           arg 2 is set:
               set {se.editing.4.%player%} to true
               set {se.line4.%player%} to arg 2
               send "&2Cliquer sur la pancarte pour ajouter le prix !"
on place sign:
   name of player's tool is "&a--[&b&lSignChop&a]--"
   if block behind is air:
       cancel event
       message "---------------------------------------------"
       message " "
       message "&cVous devez placer la pancarte sur un mur/bloc!"
       message " "
       message "---------------------------------------------"
   else:
       message "---------------------------------------------"
       message " "
       message "&aLe shop à été placé !"
       message " "
       message "---------------------------------------------"

on sign change:
   name of player's tool is "&a--[&b&lSignChop&a]--"
   set line 1 to "&aSignShop"
   set line 2 to "%player%"

on rightclick on a sign:
   line 1 of the clicked block is "&aSignShop"
# On défini le prix
   {se.editing.4.%player%} is true:
       cancel event
       set line 4 to coloured {se.line4.%player%}
       delete {se.editing.4.%player%}
       delete {se.line4.%player%}
       clear {se.line4.%player%}
   set {_tool} to "%player's tool%"
   set {_split::*} to {_tool} split at " "
   set {_number} to {_split::1} parsed as number
   if {_number} is not set:
       set {_number} to 1
   if {_number} is 0:
       set line 3 to "<ERROR>"
       message "&cVous ne pouvez pas vendre de l'air ..."
       stop

# Si on a une pomme nommé oui ou non on bloque l'action
   if name of tool of player contains "&aOui":
       stop
   else if name of tool of player contains "&cNon":
       stop
   else if name of tool of player contains "&6Reprendre":
       stop

# Sinon, on écrit sur le panneau
   set line 3 to "%{_number}% %1 of player's tool%"
   set {save_item.%player%} to line 3
   message "Voulez-vous vraiment vendre ces items? [Oui/Non]"

# Si on a déja une pomme nommé "oui"
   if player's inventory contains a apple named "&aOui":
       cancel event
   else:
       give a apple named "&aOui" to player's inventory
       give a golden apple named "&cNon" to player's inventory
       give a enchanted golden apple named "&6Reprendre" to player's inventory

on rightclick:
   if name of tool of player contains "&aOui":
       set {itemdonne.%player%} to true
       if player's inventory does not contain {save_item.%player%}:
           message "L'item n'existe pas -.-"
       else:
           message "Vos %{save_item.%player%}% ont été stockés."
           remove {save_item.%player%} from player

   if name of tool of player contains "&cNon":
       message "&cVous ne vendrez pas ceci : &6%{save_item.%player%}%"
   if name of tool of player contains "&6Reprendre":
       if {itemdonne.%player%} is true:
           give {save_item.%player%} to player's inventory
           message "&aItems redonné."
           clear {itemdonne.%player%}
       else:
           cancel event
           message "&cAucun item stockés !"

 

 

Edit :

Correction d'un petite parti du skript.

Problème toujours pas résolu.

 

Merci d'avance pour l'aide que vous pourrez m'apporter !

Cordialement

  • J'aime 1

6 réponses à cette question

Messages recommandés

  • 0
Posté(e)

Bonjour,

J'ai apporté quelques modifications (voir post du dessus), mais toujours avec le soucis avec la variables : {save_item.%player%}.

Personne a une petite idée.

 

Merci d'avance.

  • 0
Posté(e)

Plop,

Merci pour ta réponse. Justement, j'aimerais que le joueur mette que ce qui se trouve dans le slot sélectionné.

Donc pour le moment je tourne en rond ^^'

 

Bon à prendre, mais ce n'est pas se que je recherche :p

 

Pour le skript, voilà ou j'en suis :

# Shop : Première ligne
# %player% : Second line
# Nombre : Nombre
# items : item hand

command /SignShop [<text>] [<text>]:
   aliases: schop
   description: SignShop
   usage: /SChop
   executable by: players
   trigger:
       arg 1 is not set:
           message "Commande utilisable:"
           message "&7\__ &6/schop give : Vous donne une pancarte"
           message "&7\__ &6/schop prix <prix> : Prix de l'item"
       arg 1 is "give":
           give a sign named "&a--[&b&lSignChop&a]--" to player's inventory
           message "---------------------------------------------"
           message " "
           message "&aVous avez reçu votre pancarte!"
           message " "
           message "---------------------------------------------"
       arg 1 is "prix":
           arg 2 is set:
               set {se.editing.4.%player%} to true
               set {se.line4.%player%} to arg 2
               send "&2Cliquer sur la pancarte pour ajouter le prix !"
on place sign:
   name of player's tool is "&a--[&b&lSignChop&a]--"
   if block behind is air:
       cancel event
       message "---------------------------------------------"
       message " "
       message "&cVous devez placer la pancarte sur un mur/bloc!"
       message " "
       message "---------------------------------------------"
   else:
       message "---------------------------------------------"
       message " "
       message "&aLe shop à été placé !"
       message " "
       message "---------------------------------------------"

on sign change:
   name of player's tool is "&a--[&b&lSignChop&a]--"
   set line 1 to "&aSignShop"
   set line 2 to "%player%"

on rightclick on a sign:
   line 1 of the clicked block is "&aSignShop"
# On défini le prix
   {se.editing.4.%player%} is true:
       cancel event
       set line 4 to coloured {se.line4.%player%}
       delete {se.editing.4.%player%}
       delete {se.line4.%player%}
       clear {se.line4.%player%}
   set {_tool} to "%player's tool%"
   set {_split::*} to {_tool} split at " "
   set {_number} to {_split::1} parsed as integer
   if {_number} is not set:
       set {_number} to 1
   if {_number} is 0:
       set line 3 to "<ERROR>"
       message "&cVous ne pouvez pas vendre de l'air ..."
       stop

# Si on a une pomme nommé oui ou non on bloque l'action
   if name of tool of player contains "&aOui":
       stop
   else if name of tool of player contains "&cNon":
       stop
   else if name of tool of player contains "&6Reprendre":
       stop

# Sinon, on écrit sur le panneau
   set line 3 to "%{_number}% %1 of player's tool%"
   set {save_item.%player%} to line 3
   message "Voulez-vous vraiment vendre ces items? [Oui/Non]"

# Si on a déja une pomme nommé "oui"
   if player's inventory contains a apple named "&aOui":
       cancel event
   else:
       give a apple named "&aOui" to player's inventory
       give a golden apple named "&cNon" to player's inventory
       give a enchanted golden apple named "&6Reprendre" to player's inventory

on rightclick:
   if name of tool of player contains "&aOui":
       set {itemdonne.%player%} to true
       if player's inventory does not contain {save_item.%player%}:
           message "L'item n'existe pas -.-"
       else:
           message "Vos %{save_item.%player%}% ont été stockés."
           remove {save_item.%player%} from player

   if name of tool of player contains "&cNon":
       message "&cVous ne vendrez pas ceci : &6%{save_item.%player%}%"
   if name of tool of player contains "&6Reprendre":
       if {itemdonne.%player%} is true:
           give {save_item.%player%} to player's inventory
           message "&aItems redonné."
           clear {itemdonne.%player%}
       else:
           cancel event
           message "&cAucun item stockés !"

on break sign:
   if name of tool of player contains "&a--[&b&lSignChop&a]--":
       remove apple named "&aOui" from player
       remove golden apple named "&cNon" from player
       remove enchanted golden apple named "&6Reprendre" from player
       stop

  • 0
Posté(e)

Bonsoir,

Je reviens avec un skript légérement modifier au niveau des variables. Sans doute un peu plus propre, mais toujours pas fonctionnel :

 

Rappel :

- Shop par pancarte

-- Ligne 1 : Player

-- Ligne 2 : Nom de l'item

-- Ligne 3 : Nombres d'items (mains)

-- Ligne 4 : Prix (commande : /Schop prix <valeur>

 

Problème :

- Impossible de remove les items de l'inventaire. Items non trouvés?

 

EDIT :

- Semble fonctionnel, via un multi edit...

- Parce que je viens de comprendre le fonctionnement des split (21h40), j'édite mon code, ça pourra toujours servir.

 

command /SignShop [<text>] [<text>]:
   aliases: schop
   description: SignShop
   usage: /SChop
   executable by: players
   trigger:
       arg 1 is not set:
           message "Commande utilisable:"
           message "&7\__ &6/schop give : Vous donne une pancarte"
           message "&7\__ &6/schop prix <prix$> : Prix de l'item"
       arg 1 is "give":
           give a sign named "&a--[&b&lSignChop&a]--" to player's inventory
           message "---------------------------------------------"
           message " "
           message "&aVous avez reçu votre pancarte!"
           message " "
           message "---------------------------------------------"
       arg 1 is "prix":
           arg 2 is set:
               set {se.editing.4.%player%} to true
               set {se.line4.%player%} to arg 2
               send "&2Cliquer sur la pancarte pour ajouter le prix !"
on place sign:
   name of player's tool is "&a--[&b&lSignChop&a]--"
   if block behind is air:
       cancel event
       message "---------------------------------------------"
       message " "
       message "&cVous devez placer la pancarte sur un mur/bloc!"
       message " "
       message "---------------------------------------------"
   else:
       message "---------------------------------------------"
       message " "
       message "&aLe shop à été placé !"
       message " "
       message "---------------------------------------------"

on sign change:
   name of player's tool is "&a--[&b&lSignChop&a]--"
   # set line 1 to "&aSignShop"
   set line 1 to "%player%"

on rightclick on a sign:
   line 1 of the clicked block is "%player%"
# On défini le prix
   {se.editing.4.%player%} is true:
       cancel event
       set line 4 to coloured {se.line4.%player%}
       delete {se.editing.4.%player%}
       delete {se.line4.%player%}
       clear {se.line4.%player%}
   set {_tool} to "%tool of player%"
   set {_split::*} to {_tool} split at " "
   set {_number} to {_split::1} parsed as integer
   # if {_split::2} is set:
       # message "%{_split::2}%"
   # if {_split::2} and {_split::3} is set:
       # message "%{_split::2}% %{_split::3}%"

   if {_number} is not set:
       set {_number} to 1
   if {_number} is 0:
       set line 2 to "&4<ITEM ERROR>"
       set line 3 to "&4<NBRES ERROR>"
       message "&cVous ne pouvez pas vendre de l'air."
       stop

# Si on a une pomme nommé oui ou non on bloque l'action
   if name of tool of player contains "&aOui":
       stop
   else if name of tool of player contains "&cNon":
       stop
   else if name of tool of player contains "&6Reprendre":
       stop

# Sinon, on écrit sur le panneau
   if {_split::1} is set:
       set line 2 to "%{_split::1}%"
   if {_split::2} is set:
       set line 2 to "%{_split::2}%"
   if {_split::2} and {_split::3} is set:
       message "%{_split::2}% %{_split::3}%"
       set line 2 to "%{_split::2}% %{_split::3}%"
   set line 3 to "%{_number}%"
   set {line2} to line 2 of block parsed as item
   set {line3} to line 3 parsed as number
   set {line4} to line 4
   if line 4 is not set:
       cancel event
   else:
       message "&aVoulez-vous vraiment vendre ces items? &7[&aOui&7/&cNon&7]"

# Si on a déja une pomme nommé "oui"
   if player's inventory contains a apple named "&aOui":
       cancel event
   else:
       give a apple named "&aOui" to player's inventory
   if player's inventory contains a golden apple named "&cNon":
       cancel event
   else:
       give a golden apple named "&cNon" to player's inventory
   if player's inventory contains a enchanted golden apple named "&6Reprendre":
       cancel event
   else:
       give a enchanted golden apple named "&6Reprendre" to player's inventory

on rightclick:
   if name of tool of player contains "&aOui":
       if player's inventory contains {line3} of {line2}:
           message "&aVos %{line2}% ont été stockés."
           remove {line3} of {line2} from player   
           set {itemdonne.%player%} to true
           remove apple named "&aOui" from player
           remove golden apple named "&cNon" from player
           # remove enchanted golden apple named "&6Reprendre" from player
       else:
           # message "%{line3}% %{line2}% L'item n'existe pas -.-"
           message "&cItem introuvable"

   if name of tool of player contains "&cNon":
       message "&cVous ne vendrez pas ceci : &6%{line2}%"
   if name of tool of player contains "&6Reprendre":
       if {itemdonne.%player%} is true:
           give {line3} of {line2} to player's inventory
           message "&aItems redonné."
           # clear {line2}
           # clear {line3}
       else:
           cancel event
           message "&cAucun item stockés !"

on leftclick on sign:
   if name of clicked block is set:
       name of clicked block is "&a--[&b&lSignChop&a]--":
           message "&cItem introuvable"
           cancel event

Cordialement Doc.

  • 0
Posté(e)

Plop,

Je sais que ça ne fait pas 24heures, mais étant donné que ce n'est pas un up, mais plutôt une "réponse", je me permets de poster le skript à peu prés fonctionnel.. Il y'a des trucs a optimiser, mais bon. C'est une première version.

 

Si ça intéresse des personnes voilà la première "release" potable du Skript...

#############################################################
# Skript par Doc/HalCroves
# https://skript-mc.fr/forum/index.php?threads/signshop.2763/
# Site : LoDCraft.fr
##############################################################

command /SignShop [<text>] [<text>]:
   aliases: sshop
   description: SignShop
   usage: /SShop
   executable by: players
   trigger:
       arg 1 is not set:
           message "Commande utilisable:"
           message "&7\__ &6/sshop give : Vous donne une pancarte"
           message "&7\__ &6/sshop prix <prix> : Prix de l'item"
           stop
       arg 1 is "give":
           give a sign named "&a--[&b&lSignShop&a]--" to player's inventory
           message "---------------------------------------------"
           message " "
           message "&aVous avez reçu votre pancarte!"
           message "&a1ere ligne: SShop"
           message " "
           message "---------------------------------------------"
           stop
       arg 1 is "prix":
           arg 2 is set:
               set {se.editing.4.%player%} to true
               set {se.line4.%player%} to arg 2
               send "&2Cliquer sur la pancarte pour ajouter le prix !"
on place sign:
   name of player's tool is "&a--[&b&lSignShop&a]--"
   if block behind is air:
       cancel event
       message "---------------------------------------------"
       message " "
       message "&cVous devez placer la pancarte sur un mur/bloc!"
       message " "
       message "---------------------------------------------"
       stop
   else:
       message "---------------------------------------------"
       message " "
       message "&aLe shop à été placé !"
       message "&a1ere ligne: SShop"
       message " "
       message "---------------------------------------------"
       set line 1 to "SShop"
       stop

on sign change:
   if line 1 is "SShop":
       # message "oui"
       set line 1 to "%player%"
       set line 4 to "&c<Prix>"
   else:
       message "&c<ERROR> Contacter un administrateur."

on rightclick on a sign:
   line 1 of the clicked block is "%player%"
   if line 2 is "&4<VENDU>":
       clear line 2
       clear line 3
       set line 4 to "&c<Prix>"

# On défini le prix
   {se.editing.4.%player%} is true:
       cancel event
       set line 4 to coloured {se.line4.%player%}
       delete {se.editing.4.%player%}
       delete {se.line4.%player%}
       clear {se.line4.%player%}
       set {se.editing.4.%player%} to false
   set {_tool} to "%tool of player%"
   set {_split::*} to {_tool} split at " "
   set {_number} to {_split::1} parsed as integer 
   if {_number} is not set:
       set {_number} to 1
   if {_number} is 0:
       set line 2 to "&4<ITEM ERROR>"
       set line 3 to "&4<NBRES ERROR>"
       message "&cVous ne pouvez pas vendre de l'air."
       stop

# Si on a une pomme nommé oui ou non on bloque l'action
   if name of tool of player contains "&aOui":
       stop
   else if name of tool of player contains "&cNon":
       stop
   else if name of tool of player contains "&6Reprendre":
       stop

# Sinon, on écrit sur le panneau
   if {_split::1} is set:
       set line 2 to "%{_split::1}%"
   if {_split::2} is set:
       set line 2 to "%{_split::2}%"
   if {_split::2} and {_split::3} is set:
       set line 2 to "%{_split::2}% %{_split::3}%"
   set line 3 to "%{_number}%"
   set {line1} to line 1
   set {line2} to line 2 of block parsed as item
   set {line3} to line 3 parsed as number
   set {line4} to line 4
   if line 4 of the clicked block is "&c<Prix>" or "&c<VENDU>" or " ":
       cancel event
       message "&cVeuillez ajouter le prix de(s) items."
       message "&7\__ &6/sshop prix <prix> : Prix de l'item"
   else:
       message "&aVoulez-vous vraiment vendre ces items? &7[&aOui&7/&cNon&7]"

# Si on a déja une pomme nommé "oui"
   if player's inventory contains a apple named "&aOui":
       cancel event
   else:
       give a apple named "&aOui" to player's inventory
   if player's inventory contains a golden apple named "&cNon":
       cancel event
   else:
       give a golden apple named "&cNon" to player's inventory
   if player's inventory contains a enchanted golden apple named "&6Reprendre":
       cancel event
   else:
       give a enchanted golden apple named "&6Reprendre" to player's inventory

on rightclick:
   if name of tool of player contains "&aOui":
       if player's inventory contains {line3} of {line2}:
           if line 4 of clicked block is "&c<Prix>":
               cancel event
               message "&cAjouter un prix avant de vendre."
           else:           
               message "&aVos %{line2}% ont été stockés."
               remove {line3} of {line2} from player  
               set {itemdonne.%player%} to true
               remove apple named "&aOui" from player
               remove golden apple named "&cNon" from player
       else:
           message "&cItem introuvable"

   if name of tool of player contains "&cNon":
       message "&cVous ne vendrez pas ceci : &6%{line2}%"
   if name of tool of player contains "&6Reprendre":
       if {itemdonne.%player%} is true:
           give {line3} of {line2} to player's inventory
           message "&aItems redonné."
           clear {itemdonne.%player%}
       else:
           cancel event
           message "&cAucun item stockés !"

on leftclick on sign:
   if line 1 is {line1}:
       if line 4 is {line4}:
           give {line3} of {line2} to player's inventory
           execute console command "/eco take %player% %{line4}%"
           execute console command "/eco give %{line1}% %{line4}%"
           clear {line2}
           clear {line3}
           clear {line4}
           set line 2 to "&4<VENDU>"
           set line 3 to "&aAcheté par :"
           set line 4 to "%player%"
           stop

×
×
  • 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.