Aller au contenu
  • 0

Spawn de l'ender.


Question

Posté(e)

Bonjour à tous.

J'ai repris un vieux skript que j'avais dans le but de l'améliorer. Mais je but sur certaines choses.

Étant débutant, mon skript ne doit vraiment pas être optimisé ...

Se skript me permet de faire spawner un ender dragon toutes les 30minutes.

  • Toutes les 30 minutes on fait spawn un ender dragin sous certaines conditions :
    • Vérification qu'il est spawn ou non.
    • Si il n'a pas spawn, on en fait spawn un.
    • Si il y a déjà un ender dragon on attend qu'il meurt.

 

Je me heurte à quelques problèmes que voilà :

  1. Faire spawn l'ender toutes les 30 minutes.
  2. Le give des exp via une variables.
  3. La possibilités de ne pas faire spawn un portail à la mort de l'ender?

Pour le petit 1 : Je n'ai pas d'erreurs dans le skript, mais ce n'est pas pour autant qu'il spawn.

on spawn:
   world is "world_the_end"
   if event-entity is an ender dragon:
       set {spawn.dragon} to true
       set {_time} to now
       broadcast "&4L'ender dragon &7vient de respawn dans &2l'End &7!"  
       set {_difference} to difference between {_time} and now
       if {_difference} is less than 30 minutes:
           set  {_difference} to difference between {_difference} and 30 minutes
           make a random player out of all players execute command "/enderdragon"
           stop    

Pour le petit 2 : Je crois que les décimales ne sont pas prises en comptes?

J'ai testé avec un :

set {_exp} to random number between 12000 and 15800
give {_exp} xp to attacker

Mais il ne prend pas en compte ceci.

Donc je suis resté sur un :

give 12000 xp or 15000 xp to attacker

Pour le petit 3 : Je ne sais pas si c'est faisable. J'ai pas trouvé grand choses sur ça. Il y'a toujours les plugins mais bon, j'aimerais bien minimisé les plugins sur mon serveur.

 

Pour faire court, voilàa le skript en question :

#----------------------------------- Spawn du dragon ----------------------------------

variables:
   {spawn.dragon} = false

on spawn:
   world is "world_the_end"
   if event-entity is an ender dragon:
       set {spawn.dragon} to true
       set {_time} to now
       broadcast "&4L'ender dragon &7vient de respawn dans &2l'End &7!"  
       set {_difference} to difference between {_time} and now
       if {_difference} is less than 30 minutes:
           set  {_difference} to difference between {_difference} and 30 minutes
           make a random player out of all players execute command "/enderdragon"
           stop  


#----------------------------------- Mort du dragon -----------------------------------

on death of an ender dragon:
   world is "world_the_end"
   if attacker is a player:
       broadcast "%attacker% vient de tuer &4l'ender dragon &7!"
   give 12000 xp or 15000 xp to attacker
   execute console command "/eco give %attacker% 8000"
   add 5 obsidian to {_items::*}
   add 3 enchanted golden apple to {_items::*}
   add 5 diamond to {_items::*}
   add 30 Arrow to {_items::*}
   add dragon egg to {_items::*}
   set {_item} to random element out of {_items::*}
   give {_item} to the attacker
   message "&7Vous avez reçu &2%{_item}% &7, Félicitations !" to attacker
   set {spawn.dragon} to false

#----------------------------------- Clic sur l'oeuf -------------------------------

on rightclick on dragon egg:
   world is "world_the_end"
   target block is a dragon egg
   set target block to air
   spawn an ender dragon

#----------------------------------- Faire spawn le dragon -------------------------------

command /enderdragon:
   trigger:
       world is "world_the_end"
       set {_x} to random number between 14 and 50
       set {_y} to random number between 60 and 100
       set {_z} to random number between -40 and 40
       spawn an ender dragon at location at {_x}, {_y}, {_z}

on script load:
   set {spawn.dragon} to false
   make a random player out of all players execute command "/enderdragon"

 

J'oubliais, je n'ai pas d'erreurs dans les logs ^-^

 

Si quelqu'un à une idée, je ne dits pas non !

Merci d'avance !

Cordialement Doc !

13 réponses à cette question

Messages recommandés

  • 0
Posté(e)
Pour le petit 2 : Je crois que les décimales ne sont pas prises en comptes?

J'ai testé avec un :

set {_exp} to random ==> integer <== between 12000 and 15800
give {_exp} xp to attacker

#Ici utilise un integer = Entier au lieux d'un number

  • 0
Posté(e)
every 30 minutes: <====== Toutes les 30 minutes
   world is "world_the_end"
   if event-entity is an ender dragon:
       set {spawn.dragon} to true
       set {_time} to now
       broadcast "&4L'ender dragon &7vient de respawn dans &2l'End &7!" 
       set {_difference} to difference between {_time} and now
       if {_difference} is less than 30 minutes:
           set  {_difference} to difference between {_difference} and 30 minutes
           make a random player out of all players execute command "/enderdragon"
           stop    

  • 0
Posté(e)

Bonjour,

Merci pour tes réponses, je vais gratter de se côtés :)

 

Petit retour :

Il y a toujours un petit soucis au niveau du give d'exp.

{_exp} xp can't be added to an entity because the former is neither an item type, an inventory nor an experience point

Mais ont peut contourner ça en faisant :

    set {_exp} to a random integer between 12000 and 15800
   execute command "/xp %attacker% {_exp}"

 

Pour le "every 30 minutes" je suis forcer de mettre "in world_the_end" Sinon ça ne passe pas. Et pour le "if event-entity is", idem, je suis forcer de passer à "if entity is an" :

every 30 minutes in "world_the_end":
   if entity is an ender dragon:

 

En tout cas merci pour ton aide, je testerais un peu plus en début d’après-midi !

  • 0
Posté(e)

Bonjour Haltte.

Peux tu attendre un peu avant de le mettre en résolu? J'ai pas vraiment eu le temps de tester si tout fonctionner "correctement".

Je te demande donc, si il est possible que tu laisse ouvert le sujet encore quelques heures.

 

Merci d'avance,

Doc.

  • 0
Posté(e)

Re bonjour,

J'essaye toujours de gratter le skript, mais apparemment il n'as pas l'air de vouloir prendre en compte une partie.

 

J'ai ajouté un "debug" et je n'arrive pas à exécuter la commande qui est sensé faire spawn l'ender.

 

Après avoir passé la journée dessus, je bloque vraiment.

 

variables:
   {spawn.dragon} = false

on script load:
   clear {spawn.dragon}
   broadcast "1"
   wait 1 seconds
   make a random player out of all players execute command "/enderdragon"
   broadcast "2"

on spawn:
   set {spawn.dragon} to false
   if event-entity is an ender dragon:
       broadcast "Le dragon vient de respawn."
       set {spawn.dragon} to true
       stop

on death of an ender dragon:
   world is "world_the_end"
   set {spawn.dragon} to false
   set {_exp} to random integer between 8000 and 15000
   set {_money} to random integer between 5000 and 8000
   add 5 obsidian to {_items::*}
   add 3 enchanted golden apple to {_items::*}
   add 5 diamond to {_items::*}
   add 30 Arrow to {_items::*}
   add dragon egg to {_items::*}
   set {_item} to random element out of {_items::*}
   attacker is a player
   if attacker is a player:
       broadcast "%attacker% à tué le dragon."
       execute console command "xp %attacker% {_exp}"
       message "Vous avez reçu %{_exp}%" to attacker
       execute console command "eco give %attacker% {_money}"
       message "Vous avez reçu %{_money}%" to attacker
       give {_item} to the attacker
       message "Vous avez reçu ceci : %{_item}%" to attacker
   stop


command /enderdragon:
   trigger:
       world is "world_the_end"
       broadcast "3"
       set {_x} to random integer between 0 and 30
       set {_y} to random integer between 80 and 100
       set {_z} to random integer between 0 and 30
       spawn an ender dragon at location at {_x}, {_y}, {_z}
       set {spawn.dragon} to true
       broadcast "4"

every 2 minutes:
   world is "world_the_end"
   broadcast "Autre test (all 2mins)"
   set {_time} to now
   set {_difference} to difference between {_time} and now
   broadcast "1"
   if {_difference} is less than 2 minutes:
       set {_difference} to difference between {_difference} and 2 minutes
       make a random player out of all players execute command "/enderdragon"
       broadcast "2"
       stop

on right click on dragon egg:
   world is "world_the_end"
   if {spawn.dragon} is false:
       target block is a dragon egg
       set target block to air
       spawn an ender dragon
       stop
   else if {spawn.dragon} is true:
       message "Vous devez attendre que l'autre dragon meurt."
       stop

 

 

Merci d'avance !

Cordialement Doc.

  • 0
Posté(e)

Bonjour (matinale)

Après avoir bosser dessus toute la soirée, je n'y arrive toujours pas, je reviens donc vers votre savoir qui pourra peut être m'aiguiller.

 

J'en suis arrivé là :

  • L'ender spawn bien, mais il ne prend pas en compte le set {_spawn.dragon} to true (qui doit bloquer le spawn du dragon), donc même si il y a déjà un dragon, un second respawn et ainsi de suite.
  • Toutes les 30 minutes (dans le skript) j'ai un dragon qui spawn peut importe si il y en a déjà un, et je ne veux pas de ça.
     
  • Un dragon de spawn = aucun autre dragon. Si il meurt et si le temps est écoulé (30 minutes ici), alors on en fait spawn un. Si il est encore en vie et que le temps n'est pas écoulé, j'affiche un message : broadcast "{@Prefix} L'enderdragon n'a pas été tué, tuez le !"

C'est la seule chose que je n'arrive pas à régler.

 

options:
   Prefix: &5[&7EnderSpawn&5] #Prefix

on spawn:
   if event-entity is an ender dragon:
       set {_spawn.dragon} to true
       broadcast "{@Prefix} Le dragon vient de respawn."
       stop

on death of an ender dragon:
   world is "world_the_end"
   set {_exp} to random integer between 8000 and 15000
   set {_money} to random integer between 5000 and 8000
   add 5 obsidian to {_items::*}
   add 3 enchanted golden apple to {_items::*}
   add 5 diamond to {_items::*}
   add 30 Arrow to {_items::*}
   add dragon egg to {_items::*}
   set {_item} to random element out of {_items::*}
   attacker is a player
   if attacker is a player:
       broadcast "{@Prefix} %attacker% à tué le dragon."
       execute console command "/xp %{_exp}% %attacker% "
       message "{@Prefix} Vous avez reçu %{_exp}% xp's" to attacker
       execute console command "/eco give %attacker% %{_money}%"
       message "{@Prefix} Vous avez reçu %{_money}%$" to attacker
       give {_item} to the attacker
       message "{@Prefix} Vous avez reçu ceci : %{_item}%" to attacker
       set {_spawn.dragon} to false
   stop


command /enderdragon:
   trigger:
       world is "world_the_end"
       set {_x} to random integer between 0 and 30
       set {_y} to random integer between 80 and 100
       set {_z} to random integer between 0 and 30
       spawn an ender dragon at location at {_x}, {_y}, {_z}
       {_spawn.dragon} is true
       set {_spawn.dragon} to true

every 30 minutes in "world_the_end":
   if {_spawn.dragon} is false:
       set {_time.ender} to now                                                 # Now = Date xx/xx/xxxx + time xx:xx:xx
       set {_difference} to difference between {_time.ender} and now
       if {_difference} is less than 30 minutes:
           set {_difference} to difference between {_difference} and 30 minutes
           make a random player out of all players execute command "/enderdragon"
           stop
   if {_spawn.dragon} is true:
       broadcast "{@Prefix} L'enderdragon n'a pas été tué, tuez le !"
       stop

on right click on dragon egg:
   world is "world_the_end"
   if {_spawn.dragon} is false:
       target block is a dragon egg
       set target block to air
       spawn an ender dragon
       stop
   else if {_spawn.dragon} is true:
       message "{@Prefix} Vous devez attendre que l'autre Ender Dragon meurt."
       stop

on script load:
   #clear {_spawn.dragon}
   #clear {_time.ender}
   #clear {_difference}
   #set {_spawn.dragon} to false
   if {_spawn.dragon} is false:
       make a random player out of all players execute command "/enderdragon"
       set {_spawn.dragon} to true
       stop
   else if {_spawn.dragon} is true:
       stop

 

Merci d'avance,

Cordialement Doc

  • 0
Posté(e)

Pour le spawn de l'ender dragon:

on spawn:
   if {_spawn.dragon} is false:
       if event-entity is an ender dragon:
           set {_spawn.dragon} to true
           broadcast "{@Prefix} Le dragon vient de respawn."
           stop
   else if {_spawn.dragon} is true:
       cancel event
       stop

 

Pour la commande:

command /enderdragon:
   trigger:
       if {_spawn.dragon} is false:
           world is "world_the_end"
           set {_x} to random integer between 0 and 30
           set {_y} to random integer between 80 and 100
           set {_z} to random integer between 0 and 30
           spawn an ender dragon at location at {_x}, {_y}, {_z}
           set {_spawn.dragon} to true
       else if {_spawn.dragon} is true:
           message "{@Prefix} Impossible de faire spawn l'enderdragon !"

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.