Salut !
Je pense que le code peut potentiellement être optimisé mais j'ai essayé de penser un minimum au côté pratique, j'ai mis quelques commentaires qui, je pense, suffiront à te faire comprendre comment le code marche.
La commande /freeze admet un seul argument qui est un pseudo de joueur.
Si le joueur mentionné n'est pas encore freeze, cela va le freeze, puis ca va sauvegarder son casque actuellement porté dans une variable qui lui est propre, et pour finir va lui mettre un bloc de glace sur la tête.
Si le joueur est déjà freeze, alors la commande va l'unfreeze et lui restituer son casque initialement porté.
Si le joueur freezed essaye de faire le moindre mouvement, celui-ci sera annulé. (À noter que si le joueur est dans les airs, cela le figera en lévitation)
Pour prévenir de potentiel bug ou autre, j'ai mis qu'après un reload (du skript, pas forcément du serveur) tous les joueurs sont unfreeze.
J'ai aussi fait une courte vidéo qui montre le rendu en jeu, il est évidemment possible pour toi de facilement modifier le code (par exemple envoyer un message au joueur pour le prévenir qu'il vient d'être freeze/unfreeze)
[Contenu masqué]
command /freeze [<player>]:
permission: sk.freeze
trigger:
if arg 1 is not set:
send "&b&lFreeze | &fIl faut entrer le pseudo d'un joueur"
else:
# Si le joueur n'est pas encore freeze
if {%arg-1%::freezed} is false:
set {%arg-1%::freezed} to true
send "&b&lFreeze | &fLe joueur (&b%arg-1%&f) a bien ete freeze"
# Pour permettre au joueur de récupérer son casque après le freeze
set {%arg-1%::saved-helmet} to player's helmet
set helmet of arg 1 to ice
# Si le joueur est actuellement freeze
else if {%arg-1%::freezed} is true:
set {%arg-1%::freezed} to false
send "&b&lFreeze | &fLe joueur (&b%arg-1%&f) a bien ete unfreeze"
# Là on vérifie si il avait déjà un casque qu'on a save
if {%arg-1%::saved-helmet} is set:
# Alors on le lui rend
set helmet of arg 1 to {%arg-1%::saved-helmet}
else:
delete player's helmet
on load:
loop all players:
set {%loop-value%::freezed} to false
# Même chose que pour le defreeze, c'est pour restituer les potentiels casques
if {%loop-value%::saved-helmet} is set:
set helmet of loop-value to {%loop-value%::saved-helmet}
on any movement:
if {%player%::freezed} is true:
cancel event
Bonne journée !
freeze.sk