Aller au contenu
  • 0

Fonctionnement aléatoire d'un algorithme et problème introuvable


Question

Posté(e) (modifié)

Version de Minecraft : 1.16.3
Version de Skript : 2.5

Addons utilisés: Skelett, skRayFall, skUtilities

Description du script :

Bonjour à tous ! J'ai écrit un skript (le code ci-dessous n'est que la partie qui me pose problème et je ne vois pas en quoi le reste peut influer sur mon problème, mais si besoin je peux envoyer le fichier de Skript) qui vise à recréer Among Us dans Minecraft, et j'ai écrit ce bout de code afin d'afficher la salle dans laquelle le joueur se trouve dans l'Action Bar du joueur.

Seulement, petit problème, quand le joueur est entre x= 120, x=139 et entre y=353, y=373, pas de problème, il y a affiché "Cafeteria" dans la Action Bar, quand le joueur est entre x=144, x=148 et y=358, y=365 ça affiche bien "Weapons" dans la Action Bar. J'utilise le même procédé pour détecter quand le joueur est dans Storage, et là impossible de le faire marcher, le Skript ne détecte même pas quand le joueur est dans les bonnes coordonnées (je l'ai vérifié en tentant un broadcast à chaque fois que le joueur entre dans les coordonnées, rien ne s'affiche).

J'ai bien vérifié toutes mes variables, le {au.ingame} est bien égal à 1, je ne comprend pas pourquoi il ne me détecte pas le joueur. Si vous pouviez m'aider, vous me sauveriez ! Je sais que je peux faire confiance à ce forum, j'ai vu passer des tas de très bons conseils qui m'ont sauvé plus d'une fois !

Je vous souhaite une très bonne soirée !

Capouhccino, débutant en Skript

 

command /cos:
  trigger:
    if {au.ingame} = 1:
      while {au.ingame} = 1:
        if player's x-coordinate is between 120 and 139 :
          if player's z-coordinate is between 353 and 373 :
            set {cos.%player%} to "Cafeteria"
        else if player's x-coordinate is between 144 and 148 :
          if player's z-coordinate is between 358 and 365 :
            set {cos.%player%} to "Weapons"
        else if player's x-coordinate is between 121 and 132 :
          if player's z-coordinate is between 382 and 399 :
            set {cos.%player%} to "Storage"
            broadcast "storage"
        send action bar "Vous etes dans %{cos.%player%}%" to player
        wait 1 seconds

 

Modifié par Vengelis_
Edition par un modérateur

4 réponses à cette question

Messages recommandés

  • 0
Posté(e)

Bonsoir @Capouhccino,

Excellent choix de Skript, je te soutient à 100% ! C'est pourquoi ce soir je vais te donner une petite ligne de code que te changera. 😉

Alors voilà, sur Skript tu as une expression qui te permet d'office de savoir si un joueur (ou n'importe quoi d'autre) est entre deux points (un peu comme WorldGuard avec les régions...)

%location% is within %location% to %location%

(Il me semble que tu vas devoir installer SkQuery qui est un addon disponible sur spigot juste ici → https://www.spigotmc.org/resources/skquery-1-9-1-16.36631/)

 

Je te propose de d'abord créer une petite hache qui te permettra de définir plus facilement tes zones...

# ## Cette commande te permettra de te donner la hache de sélection ## #
command /amongus [<text=wand>]:
	aliases: au
	trigger:
		if arg 1 is "wand" or "hache" or "setlocation" or "setup" or "define" or "setloc":
			if sender has permission "Administrateur": # ou bien alors la permission que tu souhaite
				if sender is a player: # on empêche la console de faire la commande !
					loop all items in the inventory of player: # on recherche s'il n'y a pas déjà un hache de sélection dans l'inventaire du joueur (ça sert a rien d'en avoir 2 :D)
						if loop-item is golden axe of unbreaking 10 named "&eSélectionner&7: &cCafetaria":
							stop trigger # si la hache est trouvée, alors le skript ne calcule plus ce qu'il y a dans les lignes suivantes
						if loop-item is golden axe of unbreaking 10 named "&eSélectionner&7: &cWeapons":
							stop trigger
						if loop-item is golden axe of unbreaking 10 named "&eSélectionner&7: &cStorage":
							stop trigger
					give 1 golden axe of unbreaking 10 named "&eSélectionner&7: &cCafetaria" to player
					send "&b» &6Veuillez sélectionner vos zones&6, puis &ndroppez la hache&r&6 pour en sélectionner un autre." to sender # Il et toujours important de mettre des messages d'erreurs
				else:
					send "&b» &cERREUR: La console ne peut executer cette commande!" to sender # pour que le joueur sache comment utiliser la commande
			else:
				send "&7» &cERREUR: Vous n'avez pas la permission de faire cela!" to sender # ; (Je ne vais pas te cacher que j'en ai assez des skripts sans messages d'erreurs, c'est mon pêché mignon !)


# ## Ici on peut set la position n°2 en faisant un clique droit comme le plugin worldedit ## #
on leftclick:
	if player's tool is a golden axe of unbreaking 10 named "&eSélectionner&7: &cCafetaria": # on verifie que le joueur ai bien une hache de sélection dansles mains
		if event-block's location is set: # on verifie qu'il tape un bloc et non pas de l'air
			cancel event # on annule le clique gauche pour ne rien casser
			set {_temploc} to event-block's location # Je préfère comparer variable avec variable personnelement
			if {zone::cafetaria::1} is not {_temploc}: # On verifie que tu n'as pas au préalable déjà sélectionné ce bloc (sinon...)
				send "&b» &aVous avez sélectionné la &bpos1 &ade la zone &cCafetaria&a!" to player # Message de confirmation
				set {zone::cafetaria::1} to event-block's location # On enregistre le bloc dans une variable "liste" (c'est très pratique pour stocker n'importe quoi...)
				send "&b» &7(%{zone::cafetaria::1}%&7)" to player
			else: # (...sinon) On le supprimera de la selection
				send "&b» &cVous avez désélectionné la &bpos1 &cde la zone Cafetaria&c!" to player
				send "&b» &7(%{zone::cafetaria::1}%&7)" to player
				clear {zone::cafetaria::1} # supprimé avec cette ligne

	if player's tool is a diamond axe of unbreaking 10 named "&eSélectionner&7: &cWeapons": # pour chaque paragraphe, c'est la même chose mais avec un zone différente, si tu en ajoute pensa a modifier le nom de la hache
		if event-block's location is set:
			cancel event
			set {_temploc} to event-block's location
			if {zone::weapons::1} is not {_temploc}: # ainsi que les variables {zone::weapons::1} {zone::storage::1} {zone::parc::1} {zone::electricity::1} etc
				send "&b» &aVous avez sélectionné la &bpos1 &ade la zone &cWeapons&a!" to player
				set {zone::weapons::1} to event-block's location
				send "&b» &7(%{zone::weapons::1}%&7)" to player
			else:
				send "&b» &cVous avez désélectionné la &bpos1 &cde la zone &cWeapons&c!" to player
				send "&b» &7(%{zone::weapons::1}%&7)" to player
				clear {zone::weapons::1}

	if player's tool is a diamond axe of unbreaking 10 named "&eSélectionner&7: &cStorage":
		if event-block's location is set:
			cancel event
			set {_temploc} to event-block's location
			if {zone::storage::1} is not {_temploc}:
				send "&b» &aVous avez sélectionné la &bpos1 &ade la zone &cStorage&a!" to player
				set {zone::storage::1} to event-block's location
				send "&b» &7(%{zone::storage::1}%&7)" to player
			else:
				send "&b» &cVous avez désélectionné la &bpos1 &cde la zone &cStorage&c!" to player
				send "&b» &7(%{zone::storage::1}%&7)" to player
				clear {zone::storage::1}

# ## Ici on peut set la position n°2 en faisant un clique droit comme le plugin worldedit ## #
on rightclick:
	if player's tool is a golden axe of unbreaking 10 named "&eSélectionner&7: &cCafetaria": # ici c'est la même chose qu'au dessus... petite nuance, le nom des variable "{zone::cafetaria::2}" se terminent par ::2 pour dire que c'est la position 2
		if event-block's location is set:
			cancel event
			set {_temploc} to event-block's location
			if {zone::cafetaria::2} is not {_temploc}:
				send "&b» &aVous avez sélectionné la &bpos2 &ade la zone &cCafetaria&a!" to player
				set {zone::cafetaria::2} to event-block's location
				send "&b» &7(%{zone::cafetaria::2}%&7)" to player
			else:
				send "&b» &cVous avez désélectionné la &bpos2 &cde la zone Cafetaria&c!" to player
				send "&b» &7(%{zone::cafetaria::2}%&7)" to player
				clear {zone::cafetaria::2}

	if player's tool is a diamond axe of unbreaking 10 named "&eSélectionner&7: &cWeapons":
		if event-block's location is set:
			cancel event
			set {_temploc} to event-block's location
			if {zone::weapons::2} is not {_temploc}:
				send "&b» &aVous avez sélectionné la &bpos2 &ade la zone &cWeapons&a!" to player
				set {zone::weapons::2} to event-block's location
				send "&b» &7(%{zone::weapons::2}%&7)" to player
			else:
				send "&b» &cVous avez désélectionné la &bpos2 &cde la zone &cWeapons&c!" to player
				send "&b» &7(%{zone::weapons::2}%&7)" to player
				clear {zone::weapons::2}

	if player's tool is a diamond axe of unbreaking 10 named "&eSélectionner&7: &cStorage":
		if event-block's location is set:
			cancel event
			set {_temploc} to event-block's location
			if {zone::storage::2} is not {_temploc}:
				send "&b» &aVous avez sélectionné la &bpos2 &ade la zone &cStorage&a!" to player
				set {zone::storage::2} to event-block's location
				send "&b» &7(%{zone::storage::2}%&7)" to player
			else:
				send "&b» &cVous avez désélectionné la &bpos2 &cde la zone &cStorage&c!" to player
				send "&b» &7(%{zone::storage::2}%&7)" to player
				clear {zone::storage::2}


# ## Cette partie te permet de switch de zone en droppant ta hache ;) ## #
on drop:
	if event-item is a golden axe of unbreaking 10 named "&eSélectionner&7: &cCafetaria": # on cherche la hache dans ton inventaire
		cancel event # on annule le drop
		wait 1 tick # le wait est obligatoire pour laisser le temps au serveur de supprimer ton item pour le remplacer ...
		remove golden axe of unbreaking 10 named "&eSélectionner&7: &cCafetaria" from player's inventory # on la supprime
		set player's tool to golden axe of unbreaking 10 named "&eSélectionner&7: &cWeapons" # on en mets une autre (il y a surement un moyen de renomer les items mais je ne sais pas faire :p)
	else: # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Sinon
		if event-item is a golden axe of unbreaking 10 named "&eSélectionner&7: &cWeapons": # ainsi de suite, on recherche l'item
			cancel event
			wait 1 tick
			remove golden axe of unbreaking 10 named "&eSélectionner&7: &cWeapons" from player's inventory # on supprime l'ancienne
			set player's tool to golden axe of unbreaking 10 named "&eSélectionner&7: &cStorage" # pour en mettre une nouvelle dans ta main
		else:
			if event-item is a golden axe of unbreaking 10 named "&eSélectionner&7: &cStorage": # etc, et ça a l'infinie
				cancel event
				wait 1 tick
				remove golden axe of unbreaking 10 named "&eSélectionner&7: &cStorage" from player's inventory
				set player's tool to golden axe of unbreaking 10 named "&eSélectionner&7: &cCafetaria"
			else:
				stop trigger # Enfin on fini avec ceci pour drop normalement car tu ne tiens pas la hache dans les mains ici
                
# ## Code by Nyu! pour @Capouhccino ## #
                

 

Enfin, avec ta toute nouvelle hache, tu peux vérifier si un joueur se trouve dans la zone demandé...

Exemples:

# exemple: » if player is within {zone::cafetaria::1} to {zone::cafetaria::2} « ← On verifie si le joueur se trouve dans la sélection avec cette condition.

# Pour chaque joueur, il te suffira de faire un loop:
every seconds: # toutes les secondes, l'action bar s'actualisera
	loop all players: # (Alors, ce genre de loop a utiliser avec modération = peut faire laguer avec trop de joueur (genre 70))
		if loop-player is within {zone::cafetaria::1} to {zone::cafetaria::2}: # on cherche le joueur dans cafetaria
			set action bar of loop-player to "&7--- &cCafetaria&r &7---" # s'il y est, alors action bar !
		else: # sinon
			if loop-player is within {zone::weapons::1} to {zone::weapons::2}: # on cherche ailleurs
				set action bar of loop-player to "&7--- &cWeapons&r &7---"
			else:
				if loop-player is within {zone::storage::1} to {zone::storage::2}: # et ainsi de suite
					set action bar of loop-player to "&7--- &cStorage&r &7---"
                    
# ## Code by Nyu! pour @Capouhccino ## #

 

Voilà, ce sera tout pour moi, a moins que tu n'es des question alors j'y répondrais volontiers ! Vraiment n'hésite surtout pas! 😋

Bonne soirée à toi @Capouhccino en espérant avoir régler ton problème.

Nyu!

PS: Il y a peut-être des erreurs d'inattention niveau syntaxe (j'avoue que je n'ai pas testé mes codes), je m'en excuse d'avance.

  • 0
Posté(e)

Bonjour @Nyu ! 

 

Merci beaucoup ! Je vais essayer ton code cet après midi ! Je te remercie vraiment d'avoir pris le temps de me répondre un code si complet ! 

Je te dis si j'ai des questions cet après midi. 

Encore merci ! 

Capouhccino

  • Merci 1
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.