Aller au contenu
  • 0

Mini jeu : Wexp


Question

Posté(e)

Bonjour tout le monde;

Je suis tout nouveau sur Skript et je me suis lancé comme projet de faire un mini-jeu. Vous connaissez certainement le serveur Hypixel avec sa partie "arcade". Je me suis mis à faire le jeu où il faut "claim" le plus de bloc avec sa houe.

Pour ceux qui ne connaissent pas, voici le principe du jeu : vous arrivez dans une arène et vous avez avec vous une houe. Le but est simple, clique droit sur le sol pour transformer ce bloc en votre bloc de laine. Vous ne pouvez transformer un bloc uniquement si un bloc de couleur vous appartient sur les côtés. La partie se finit lorsque l'arène est pleine et/ou quand le timer est à zéro.

J'ai ainsi renommé le mini-jeu Wexp (pour Wool Expand, aller savoir pourquoi...).

Je viens ici pour vous faire part de mon projet et de mes avancements.

 

[spoiler=Voici mon skript (attention au pavé)]

#----- VARRIABLES

variables:
   {number.player} = 0
   {wool.%player%} = wool
   {woolcolor.%player%} = 0
   {woolblock.%player%} = 0

#----------#----------#----------#----------#
#                                           #
#                 Conditions                #
#                                           #
#----------#----------#----------#----------#

 #-- Quand joueur clique sur le panneau
on click on sign:
   if line 1 of clicked block is "[Wexp]":
       if line 2 of clicked block is "Arena":
           send "Tu as cliqué sur le panneau" to player

             #-- Quand - de 4 joueurs
           if {number.player} < 4:
               set line 3 to "Event ouvert !"
               add 1 to {number.player}
               set line 4 to "%{number.player}%/4"
                 #-- Couleur de la laine
               add 1 to {woolcolor.%player%}
               set data value of {wool.%player%} to {woolcolor.%player%}
               give a diamond hoe to player
               send "Tu es téléporté à l'arène !"
               execute console command "/warp wexparena %player%"

     #-- Quand + de 4 joueurs
           if {number.player} >= 4:
               execute console command "/wexpclose"
               set line 3 to "Event full !"

on rightclick on mycelium with any hoe:
   if player is in "woolexpworld":
       if player is holding diamond hoe:0:
           set clicked block to {wool.%player%}
           damage tool by 1
           add 1 to {woolblock.%player%}
       block east is {wool.%player%}:
           set clicked block to {wool.%player%}
           add 1 to {woolblock.%player%}
       block west is {wool.%player%}:
           set clicked block to {wool.%player%}
           add 1 to {woolblock.%player%}
       block south is {wool.%player%}:
           set clicked block to {wool.%player%}
           add 1 to {woolblock.%player%}
       block north is {wool.%player%}:
           set clicked block to {wool.%player%}
           add 1 to {woolblock.%player%}


#----------#----------#----------#----------#
#                                           #
#                 Commandes                 #
#                                           #
#----------#----------#----------#----------#

 #-- Quand l'event est fermé ou full
command /wexpclose:
   description: Ferme l'event wool exp CONSOLE COMMAND
   permission: skript.wexpclose.woolexp
   trigger:
       broadcast "Event fermé ou full"
       execute console command "/wexmatch"

 #-- Quand le mini jeu est finis
command /wexpfinish:
   description: Ferme l'event quand il est finis et lance le reset CONSOLE COMMAND
   permission: skript.wexpfinsh.woolexp
   trigger:
       broadcast "Event finis, reset en cours"
       execute console command "/wexpreset"

 #-- Reset de la map + variables
command /wexpreset:
   description: Reset l'event wool exp CONSOLE COMMAND
   permission: skript.wexpreset.woolexp
   trigger:
       set {number.player} to 0
       set {wool.%player%} to wool
       set {woolcolor.%player%} to 0
       broadcast "Event reset !"
       loop all players:
           send "slt" to loop-player
           execute console command "/warp signwexp %loop-player%"



 #-- Première commande quand le match commence, compteur
command /wexpmatch:
 permission: skript.wexpreset.woolexp
 trigger:
   broadcast "Le match commence ! Il vous reste 60 secondes"
   wait 30 seconds
   broadcast "Il vous reste 30 secondes"
   wait 20 seconds
   broadcast "Il vous reste 10 secondes"
   wait 5 seconds
   broadcast "Il vous reste 5 secondes"
   wait 1 seconds
   broadcast "Il vous reste 4 secondes"
   wait 1 seconds
   broadcast "Il vous reste 3 secondes"
   wait 1 seconds
   broadcast "Il vous reste 2 secondes"
   wait 1 seconds
   broadcast "Il vous reste 1 secondes"
   wait 1 seconds
   broadcast "Le match est finis"
   execute console command "/wexpfinish"

 

 

 

Ce que fait actuellement le script :

- lorsque clique sur un panneau, Tp le joueur

- Au bout de 4 joueurs, ferme l'arène (et devrait commencer le match ... :eek:)

- Timer fini mais pas super

 

Ce qui me manque :

- le système de comptage de point (je pense utiliser le nombre de blocs placés par chaque joueur, mais le souci c'est que je ne sais pas lier une variable à un joueur puis la recracher sur le chat (ou scoreboard).

- Surement d'autre chose...

 

Mes questions :

- comment faire justement pour dire que tel joueur a placé tel nombre de blocs ?

- Vous avez une solution pour ce qui est des scoreboards qui clignote ? j'ai vu une solution mais pas encore testée ;

[spoiler=Code à test]

loop all players in world "kitpvpkillingfields":
       {board.up.%loop-player%} is not set:
           set {board.up.%loop-player%.kp} to false
#if the variable is not set up... it sets the variable so that way it will force the board to display correctly

       {board.up.%loop-player%.kp} is true:
           make score of "&cDeaths:" in board of loop-player to {deaths.%loop-player%.kit}
           make score of "&aKills:" in board of loop-player to {kills.%loop-player%.kit}
           make score of "&aKillstreak:" in board of loop-player to {killstreak.%loop-player%}
           make score of "&aAssists:" in board of loop-player to {assist.%loop-player%.kp}
           make score of "&eBounty:" in board of loop-player to {value.%loop-player%.kit.live}
           make score "&aTickets:" in board of loop-player to loop-player's balance
           set {board.up.%loop-player%.sb} to false
           #notice the lack of move board expression?

#if the board is not there it will then execute this
       {board.up.%loop-player%.kp} is false:
           display board named "&9&lKP &9Stats" to loop-player
           make score of "&cDeaths:" in board of loop-player to {deaths.%loop-player%.kit}
           make score of "&aKills:" in board of loop-player to {kills.%loop-player%.kit}
           make score of "&aKillstreak:" in board of loop-player to {killstreak.%loop-player%}
           make score of "&aAssists:" in board of loop-player to {assist.%loop-player%.kp}
           make score of "&eBounty:" in board of loop-player to {value.%loop-player%.kit.live}
           make score "&aTickets:" in board of loop-player to loop-player's balance
           set {board.up.%loop-player%.sb} to false
           set {board.up.%loop-player%.kp} to true
           move display of loop-player to "sidebar"
#now only if the board was not there... it will then move the display

 

trouvable ici http://dev.bukkit.org/bukkit-plugins/skript/forum/misc/64998-text-scoreboards/

- Et je n'ai pas vraiment vérifié, mais une commande Skript peut pas en exécuter une autre ? Quand je /wexpclose le match ne commence pas, alors que normalement si :(

 

Il me semble avoir posé tous mes problèmes, si vous voyez des trucs à corriger, à me conseiller n'hésité pas ! Merci pour tout d'avance, et bon code :)

 

Nosh,

 

 

Avec une idée originale du serveur Hypixel

12 réponses à cette question

Messages recommandés

  • 0
Posté(e)

Tu as écrit que le mini jeux devrait ce lancer si il a 4 joueurs

bas tiens !

        if number of all players is 4:

           make player execute command "/start" #Mes la commande pour lancer le mini-jeux
           set {Game.Start} to true

et si tu veux que les joueurs ne join plus si ils sont 4 !

        if {Game.Start} is true:

           send "&a Le mini-jeux est complet !"
  • 0
Posté(e)

Ok ! Merci je modifierai en fonction

 

Tu aurai une solution pour set une variable à un joueur et l'afficher n'importe où ?

 

Exemple :

Un joueur à une variable associé = au nombre de bloc de laine posé. Dans le chat ou dans un scoreboard je veux affiché une liste :

Ligne 1 : Nomduplayer avec le plus haut score de bloc posé + son nombre de bloc

Ligne 2 : Nomduplayer avec le second plus haut score de bloc posé + son nombre de bloc

Ligne 3 : Nomduplayer avec le troisieme plus haut score de bloc posé + son nombre de bloc

Ligne 4 : Nomduplayer avec le moins haut score de bloc posé + son nombre de bloc

 

 

Merciiii !

 

Nosh,

  • 0
Posté(e)

Je sais pas si c'est ce que tu veux mais tiens !

On place wool:

 Add 1 to {nombredeblock.%player%}

 

Si le joueur place un laine sa ajoute 1 point à la variable

 

Si tu veux donne moi ton Skype je pourrais t'aider !

  • 0
Posté(e)

Update du code

 

[spoiler=Code]

#----- VARRIABLES
variables:
   {number.player} = 0
   {wool.%player%} = wool
   {woolcolor.%player%} = 0
   {woolblock.%player%} = 0

#----------#----------#----------#----------#
#                                           #
#                 Conditions                #
#                                           #
#----------#----------#----------#----------#

 #-- Quand joueur clique sur le panneau
on click on sign:
   if line 1 of clicked block is "[Wexp]":
       if line 2 of clicked block is "Arena":
           send "Tu as cliqué sur le panneau" to player

             #-- Quand - de 4 joueurs 

           if {number.player} < 4:
               set line 3 to "Event ouvert !"
               add 1 to {number.player}
               set line 4 to "%{number.player}%/4"
               #-- Couleur de la laine
               add 1 to {woolcolor.%player%}
               set data value of {wool.%player%} to {woolcolor.%player%}
               give a diamond hoe to player
               send "Tu es téléporté à l'arène !"
               execute console command "/warp wexparena %player%"
               set {Game.Start} to true       

             #-- Quand + de 4 joueurs
           if {number.player} >= 4:
               execute console command "/wexp close"
               set line 3 to "Event full !"

on rightclick on mycelium with any hoe:
   if player is in "woolexpworld":
       if player is holding diamond hoe:0:
           set clicked block to {wool.%player%}
           damage tool by 1
           add 1 to {woolblock::%player%}
           play raw sound "random.pop" at player with pitch 0.5 volume 0.2
       block east is {wool.%player%}:
           set clicked block to {wool.%player%}
           add 1 to {woolblock::%player%}
           play raw sound "random.pop" at player wich pitch 0.5 volume 0.2
       block west is {wool.%player%}:
           set clicked block to {wool.%player%}
           add 1 to {woolblock::%player%}
           play raw sound "random.pop" at player with pitch 0.5 volume 0.2
       block south is {wool.%player%}:
           set clicked block to {wool.%player%}
           add 1 to {woolblock::%player%}
           play raw sound "random.pop" at player with pitch 0.5 volume 0.2
       block north is {wool.%player%}:
           set clicked block to {wool.%player%}
           add 1 to {woolblock::%player%}
           play raw sound "random.pop" at player with pitch 0.5 volume 0.2



#----------#----------#----------#----------#
#                                           #
#                 Commandes                 #
#                                           #
#----------#----------#----------#----------#

command /wexp <text>:
   permission: skript.wexp.woolexp
   trigger:
         #-- Quand l'event est fermé ou full
       if arg is "close":
           broadcast "Event fermé ou full"
           execute console command "/wexp start"


         #-- Quand le mini jeu est finis
       if arg is "finish":
           broadcast "Event finis, reset en cours"
           loop {woolblock::*}:
               broadcast "%loop-index% -> %{woolblock::%loop-index%}%"
           execute console command "/wexp reset"


         #-- Reset de la map + variables
       if arg is "reset":
           set {number.player} to 0
           broadcast "Event reset !"
           loop players:              
               if loop-player is in "woolexpworld":
                   send "slt" to loop-player
                   set {wool.%player%} to wool
                   set {woolblock::*} to 0
                   set {woolcolor.%player%} to 0
                   set data value of {wool.%player%} to 1
                   execute console command "/warp signwexp %loop-player%"


         #-- Première commande quand le match commence, compteur
       if arg is "start":
           broadcast "Le match commence ! Il vous reste 60 secondes"
           wait 30 seconds
           broadcast "Il vous reste 30 secondes"
           #wait 20 seconds
           broadcast "Il vous reste 10 secondes"
           wait 5 seconds
           broadcast "Il vous reste 5 secondes"
           wait 1 seconds
           broadcast "Il vous reste 4 secondes"
           wait 1 seconds
           broadcast "Il vous reste 3 secondes"
           wait 1 seconds
           broadcast "Il vous reste 2 secondes"
           wait 1 seconds
           broadcast "Il vous reste 1 secondes"
           wait 1 seconds
           broadcast "Le match est finis"
           execute console command "/wexp finish"

 

 

 

 

J'ai changer la partie commande. On a ainsi une seule et même commande avec plusieurs type d'argument possible.

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