Aller au contenu
  • 0

Besoin d'aide pour le codage de mon skript.


Question

Posté(e)

Bonsoir la communauté !

Je suis entrain de coder un skript qui ferait que lorsqu'un joueur meurt (ou se deco) tout les blocks qu'il a casser auparavant soit régénéré.

J'ai donc commencé à écrire ceci :

 

on break:
   set {location} to location of the event-block
   set {type} to type of the event-block
on death of player:
       set the block at {location} to {type}

 

Le problème est qu'il s'applique uniquement au dernier block cassé par le joueur, c'est embêtant.

J'ai pensé à utiliser une boucle loop mais j'arrive toujours à faire appliquer ce que je voudrais.

 

Merci pour votre aide, bonne soirée

 

Natube

21 réponses à cette question

Messages recommandés

  • 0
Posté(e)

Salut alors déjà il faut que tes variables soit spécifique à chaque joueur donc pour ca il faut que tu utilises des variables du genre : {location.%player%} . Ensuite, il faut que tu utilises une variable liste qui va enregistrer toutes les locations des blocs elle aussi spécifique au joueur : {listeblockcassé.%player%}::*} .

 

on break:
   set {location} to location of the event-block
   wait 1 tick
   add {location} to {listeblockcassé.%player%}::*}
   set {type} to type of the event-block
on death of player:
   loop {listeblockcassé.%player%::*}:
      set the block at loop-value to {type}

 

Ensuite pour le type je sais pas trop comment procéder..

 

Essaye déjà ce que je t'ai donné pour voir si ca marche.

J'ai pas testé donc il y aura surement des erreurs.

  • 0
Posté(e)

Merci pour les réponses.

Je savais pas pour les variables par joueur et les listes, j'ai essayé, il n'y a pas d'erreur mais ça ne marche pas du tout, il ne se passe rien.

Pourtant le code parait cohérent

 

on break:
   set {location.%player's uuid%} to location of the event-block
   wait 1 tick
   add {location.%player's uuid%} to {listeblockcasséloc.%player's uuid%::*}
   set {type} to type of the event-block
on death of player:
   loop {listeblockcasséloc.%player's uuid%::*}:
       set the block at loop-value to {type}

 

 

EDIT :

Finalement j'ai réussie à le faire marcher en stockant le type des blocs avant la location et en faisant un clear de la liste des locations à ma mort :

 

on break:
   set {type.%player's uuid%} to type of the event-block
   set {location.%player's uuid%} to location of the event-block
   wait 1 tick
   add {location.%player's uuid%} to {listeblockcasseloc.%player's uuid%::*}
on death of player:
   loop {listeblockcasseloc.%player's uuid%::*}:
       set blocks at {listeblockcasseloc.%player's uuid%::*} to {type.%player's uuid%}
   clear {listeblockcasseloc.%player's uuid%::*}

 

Reste plus qu'à réfléchir pour garder chaques types de blocks en fonction de sa position :rolleyes:

  • 0
Posté(e)

J'ai éssayé ça :

on break:
   set {type.%player's uuid%} to type of the event-block
   wait 1 tick
   add {type.%player's uuid%} to {listeblockcassetype.%player's uuid%::*}
   set {location.%player's uuid%} to location of the event-block
   wait 1 tick
   add {location.%player's uuid%} to {listeblockcasseloc.%player's uuid%::*}
on death of player:
   loop {listeblockcasseloc.%player's uuid%::*}:
       loop {listeblockcassetype.%player's uuid%::*}:
           set blocks at {listeblockcasseloc.%player's uuid%::*} to loop-value
   clear {listeblockcasseloc.%player's uuid%::*}
   clear {listeblockcassetype.%player's uuid%::*}

 

Mais il me demande de spécifier un loop-value en utilisant loop-value-1/2/3 etc.

Une idée ?

  • 0
Posté(e)
Quand t'as une loop dans une loop faut préciser quel loop-value tu prends,celle de la première loop ou deuxième ?

Ah merci, donc maintenant plus d'erreur. Mais tout les block que je casse sont remplacé par le dernier type de blocks que j'ai cassé, c'est bizarre je comprend pas

  • 0
Posté(e)
on break:
   add type of the event-block to {listeblockcassetype.%player's uuid%::*}
   add location of event-block to {listeblockcasseloc.%player's uuid%::*}

on death of player:
   loop {listeblockcasseloc.%player's uuid%::*}:
       loop {listeblockcassetype.%player's uuid%::*}:
           set blocks at {listeblockcasseloc::%loop-value-2%} to {listeblockcassetype::%loop-value-1%}
   clear {listeblockcasseloc.%player's uuid%::*}
   clear {listeblockcassetype.%player's uuid%::*}

  • 0
Posté(e)
on break:
   add type of the event-block to {listeblockcassetype.%player's uuid%::*}
   add location of event-block to {listeblockcasseloc.%player's uuid%::*}

on death of player:
   loop {listeblockcasseloc.%player's uuid%::*}:
       loop {listeblockcassetype.%player's uuid%::*}:
           set blocks at {listeblockcasseloc::%loop-value-2%} to {listeblockcassetype::%loop-value-1%}
   clear {listeblockcasseloc.%player's uuid%::*}
   clear {listeblockcassetype.%player's uuid%::*}

 

ça ne marche même pas non plus :/

  • 0
Posté(e)

 

Ce serait pas plus simple ?

 

Non, j'ai essayé ce code pour voir et ça ne fait qu'ajouter des blocs d'air à la liste

On break:
   Add event-block to {a.%player%::*}
command /block:
   trigger:
       broadcast "%{a.%player%::*}%"

à quelques exceptions près, genre 1 block sur 10 qui est bien stocké

  • 0
Posté(e)
On break:
   Add block-location to {a.%player%::*}
   Set {b.%player%.%location of block%} to type of block

On death of a player:
   Loop {a.%player%::*}:
       Set block at loop-value to {b.%player%.%loop-value%}

 

Yes ! Parfait ça marche niquel merci pour ton aide !

Du coup je met le code entier du skript final que je voulais si ça intéresse des gens :

 

On break:
   add location of event-block to {a.%player%::*}
   Set {b.%player%.%location of block%} to type of block}
On death of player:
   Loop {a.%player%::*}:
       Set block at loop-value to {b.%player%.%loop-value%}

On place:
   add location of block to {c.%player%::*}
On death of player:
   Loop {c.%player%::*}:
       set block at loop-value to air

 

J'ai juste pas (encore) réussie à faire appliquer la même chose de la déconnexion des joueurs.

Merci pour votre aide.

  • 0
Posté(e)
Par contre tu risques d'avoir problème:

Un joueur casse un bloc de tnt

Un 2ème joueur place un bloc par dessus

Le bloc en question ne se regenera pas en tnt mais en air je pense

 

Oui j'ai essayé, si on casse un bloc, repose, recasse, repose un autre, etc sur le même emplacement ça va pas se régénérer correctement, c'est la limite du skript mais je sais même pas si on peut fixer ça donc pour l'instant j'y ai pas réfléchis

  • 0
Posté(e)
Tu aurais eu le même problème en java:

C est la limite de l'algorithme

 

C est pas compliqué à patcher je pense ;)

En java un gars avait réussie à me patcher ça, mais en skript je sais pas si on peut, je verrais ça

  • 0
Posté(e)
Don't worry ! On peut j'ai juste plus le code en tête :cool:

C'est pas censé être un bon début ça ?

 

On break:
   loop {c.%player%::*}:
       loop {a.%player%::*}:
           if loop-value-1 or loop-value-2 is location of event-block:
               stop
           else:
               add location of event-block to {a.%player%::*}
               Set {b.%player%.%location of block%} to type of block
On death of player:
   Loop {a.%player%::*}:
       Set block at loop-value to {b.%player%.%loop-value%}

On place:
   loop {c.%player%::*}:
       loop {a.%player%::*}:
           if loop-value-1 or loop-value-2 is location of event-block:
               stop
           else:
               add location of block to {c.%player%::*}
On death of player:
   Loop {c.%player%::*}:
       set block at loop-value to air

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