Aller au contenu

Question

Posté(e) (modifié)

Bonjour, il y a t'il un autre moyen de faire le code si dessous car on j'ai lu quelque sujet et j'ai cru comprendre que le every tick/second n'est pas très optimal, donc est-il possible de faire pour que ce soit plus optimal ? Si sa l'est, si c'est avec les while, est-ce possible de m'expliquer en même temps car je ne comprend pas trop les while même après lu quelques tutos.

Merci encore pour le temps que vous prenez pour m'aider.

every tick:
	loop all players:
		if {level.jobs.bucheron.%loop-player%} = 0:
			if {xp.jobs.bucheron.%loop-player%} >= {xp0.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 1
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 1 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 1:
			if {xp.jobs.bucheron.%loop-player%} >= {xp1.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 2
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 2 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 2:
			if {xp.jobs.bucheron.%loop-player%} >= {xp2.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 3
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 3 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 3:
			if {xp.jobs.bucheron.%loop-player%} >= {xp3.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 4
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 4 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 4:
			if {xp.jobs.bucheron.%loop-player%} >= {xp4.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 5
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 5 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 5:
			if {xp.jobs.bucheron.%loop-player%} >= {xp5.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 6
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 6 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 6:
			if {xp.jobs.bucheron.%loop-player%} >= {xp6.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 7
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 7 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 7:
			if {xp.jobs.bucheron.%loop-player%} >= {xp7.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 8
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 8 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 8:
			if {xp.jobs.bucheron.%loop-player%} >= {xp8.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 9
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 9 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 9:
			if {xp.jobs.bucheron.%loop-player%} >= {xp9.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 10
				broadcast "&9Jobs &8» &bBravo à &f%loop-player% &bqui est passé &clevel 10&b pour le métier de &6Bûcheron&b."
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 10 &adu métier &6Bûcheron" to loop-player

 

Modifié par TheFighter51

15 réponses à cette question

Messages recommandés

  • 0
Posté(e)
Il y a 13 heures, TheFighter51 a dit :

Bonjour, il y a t'il un autre moyen de faire le code si dessous car on j'ai lu quelque sujet et j'ai cru comprendre que le every tick/second n'est pas très optimal, donc est-il possible de faire pour que ce soit plus optimal ? Si sa l'est, si c'est avec les while, est-ce possible de m'expliquer en même temps car je ne comprend pas trop les while même après lu quelques tutos.

Merci encore pour le temps que vous prenez pour m'aider.


every tick:
	loop all players:
		if {level.jobs.bucheron.%loop-player%} = 0:
			if {xp.jobs.bucheron.%loop-player%} >= {xp0.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 1
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 1 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 1:
			if {xp.jobs.bucheron.%loop-player%} >= {xp1.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 2
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 2 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 2:
			if {xp.jobs.bucheron.%loop-player%} >= {xp2.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 3
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 3 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 3:
			if {xp.jobs.bucheron.%loop-player%} >= {xp3.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 4
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 4 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 4:
			if {xp.jobs.bucheron.%loop-player%} >= {xp4.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 5
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 5 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 5:
			if {xp.jobs.bucheron.%loop-player%} >= {xp5.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 6
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 6 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 6:
			if {xp.jobs.bucheron.%loop-player%} >= {xp6.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 7
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 7 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 7:
			if {xp.jobs.bucheron.%loop-player%} >= {xp7.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 8
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 8 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 8:
			if {xp.jobs.bucheron.%loop-player%} >= {xp8.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 9
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 9 &adu métier &6Bûcheron" to loop-player
		if {level.jobs.bucheron.%loop-player%} = 9:
			if {xp.jobs.bucheron.%loop-player%} >= {xp9.jobs}:
				set {xp.jobs.bucheron.%loop-player%} to 0
				set {level.jobs.bucheron.%loop-player%} to 10
				broadcast "&9Jobs &8» &bBravo à &f%loop-player% &bqui est passé &clevel 10&b pour le métier de &6Bûcheron&b."
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 10 &adu métier &6Bûcheron" to loop-player

 

Salut, dans ce genre de situation, je crois que tu n'as pas trop le choix d'utiliser un event 'every x tick ou seconds', je te conseille de prendre le 'every 1 second' qui sera plus optimisé qu'un every tick, même si ce n'est toujours pas bien optimisé. (every tick: 20 fois par seconde)

Cordialement, Uri'

  • 0
Posté(e) (modifié)

Pour retirer le "every X ticks" c'est simple, il suffit de mettre ton code de au même event que la méthode de gain d'exp. Exemple, si tu gagnes de l'exp en cassant un log :

on break of log:
	if {level.jobs.bucheron.%player%} = 0:
		if {xp.jobs.bucheron.%player%} >= {xp0.jobs}:
  			set {xp.jobs.bucheron.%player%} to 0
			set {level.jobs.bucheron.%player%} to 1
			send "&9Jobs &8» &aBravo vous êtes passé au &dlevel 1 &adu métier &6Bûcheron" to player

Pour optimiser tout ça (pour éviter de répéter le même code à chaque fois pour chaque level), tu peux loop l'action en ajoutant une variable provisoire qui augmentera jusqu'au niveau max. Exemple :
 

on break of log:
	set {_loop} to 0
	loop 100 times: #(100 = level max)
		if {level.jobs.bucheron.%player%} = {_loop}:
			if {xp.jobs.bucheron.%player%} >= {xp%{_loop}%.jobs}:
				set {xp.jobs.bucheron.%player%} to 0
				set {level.jobs.bucheron.%player%} to ({_loop} + 1)
				send "&9Jobs &8» &aBravo vous êtes passé au &dlevel %{_loop} + 1% &adu métier &6Bûcheron" to loop-player
		add 1 to {_loop}

Si tu gagnes de l'exp sur plusieurs event (une commande, casser des blocs, placer des blocs) tu peux aussi faire une function (comme ça t'auras pas à copier coller ton code à chaque event), tu mets juste ton code dans la function et à chaque event tu mets la function

PS: je sais pas si c'est très compréhensible dsl

Modifié par Lemrigue
  • J'aime 1
  • 0
Posté(e)

Je te remercie pour ça, je pense que sa va beaucoup m'aider, j'ai d'autres questions, est-il possible de vérifier si la bûche par exemple a été poser par un joueur ou est apparu naturellement pour éviter une sorte de farm que je ne veux pas sur mon serveur et vu que j'ai dis 10 level, je met le loop à dix comme ça quand le joueur à assez d'exp pour passer de niveau, quand il cassera une bûche il montera automatiquement de niveau, est dès qu'il est level max, cela ne fonctionnera plus on est d'accord

Donc si j'ai bien compris de tout ce que tu m'a dit:

on break:
	if block is any log:
		set {_loop} to 0
		loop 100 times: #(100 = level max)
			if {level.jobs.bucheron.%player%} = {_loop}:
				if {xp.jobs.bucheron.%player%} >= {xp%{_loop}%.jobs}:
					set {xp.jobs.bucheron.%player%} to 0
					set {level.jobs.bucheron.%player%} to ({_loop} + 1)
					send "&9Jobs &8» &aBravo vous êtes passé au &dlevel %{_loop} + 1% &adu métier &6Bûcheron" to loop-player
			add 1 to {_loop}
		if {level.jobs.bucheron.%player%} = 0:
			add 1 to {xp.jobs.bucheron.%player%}
			add 0.50 to player's balance 
			send action bar from "&a+ 0.50$   &e+ 1 exp" to player
		if {level.jobs.bucheron.%player%} = 1:
			add 1.25 to {xp.jobs.bucheron.%player%}
			add 0.75 to player's balance 
			send action bar from "&a+ 0.75$   &e+ 1.25 exp" to player
		if {level.jobs.bucheron.%player%} = 2:
			add 1.50 to {xp.jobs.bucheron.%player%}
			add 1 to player's balance 
			send action bar from "&a+ 1$   &e+ 1.50 exp" to player
		if {level.jobs.bucheron.%player%} = 3:
			add 1.75 to {xp.jobs.bucheron.%player%}
			add 1.25 to player's balance 
			send action bar from "&a+ 1.25$   &e+ 1.75 exp" to player
		if {level.jobs.bucheron.%player%} = 4:
			add 2 to {xp.jobs.bucheron.%player%}
			add 1.50 to player's balance 
			send action bar from "&a+ 1.50$   &e+ 2 exp" to player
		if {level.jobs.bucheron.%player%} = 5:
			add 2.25 to {xp.jobs.bucheron.%player%}
			add 1.75 to player's balance 
			send action bar from "&a+ 1.75$   &e+ 2.25 exp" to player
		if {level.jobs.bucheron.%player%} = 6:
			add 2.50 to {xp.jobs.bucheron.%player%}
			add 2 to player's balance 
			send action bar from "&a+ 2$   &e+ 2.50 exp" to player
		if {level.jobs.bucheron.%player%} = 7:
			add 2.75 to {xp.jobs.bucheron.%player%}
			add 2.25 to player's balance 
			send action bar from "&a+ 2.25$   &e+ 2.75 exp" to player
		if {level.jobs.bucheron.%player%} = 8:
			add 3 to {xp.jobs.bucheron.%player%}
			add 2.50 to player's balance 
			send action bar from "&a+ 2.50$   &e+ 3 exp" to player
		if {level.jobs.bucheron.%player%} = 9:
			add 3.25 to {xp.jobs.bucheron.%player%}
			add 2.75 to player's balance 
			send action bar from "&a+ 2.75$   &e+ 3.25 exp" to player
		if {level.jobs.bucheron.%player%} = 10:
			add 3 to player's balance 
			send action bar from "&a+ 3$" to player

 

  • 0
Posté(e) (modifié)

Oui exact, si tu mets : "loop 10 times", le joueur ne pourra plus monter de niveau après le niveau 10, par contre j'ai oublié de préciser qu'il vaut mieux mettre le code pour monter de niveau après celui où tu gagnes de l'exp, puisque tu vas casser le bloc, recevoir l'exp et après que tu aies reçu l'exp ça va regarder si ton exp est assez élevé. Si ça regarde si ton exp est assez élevé avant que tu aies reçu l'exp ça va décaler la monter de niveau de 1 bloc
Aussi, tu peux optimiser ça en mettant le code d'exp dans la boucle de départ. J'ai remarqué que l'exp et l'argent augmente de 0,25 à chaque monter de niveau donc ça donnerait une formule de ce style :
 

on break:
	if block is any log:
		set {_loop} to 0
		loop 10 times: #(10 = level max)
			if {level.jobs.bucheron.%player%} = {_loop}:

				add (1 + 0.25 * {_loop}) to {xp.jobs.bucheron.%player%}
				add (0.5 + 0.25 * {_loop}) to player's balance
				send action bar from "&a+ %0.5 + 0.25 * {_loop}%$   &e+ %1 + 0.25 * {_loop}% exp" to player

				if {xp.jobs.bucheron.%player%} >= {xp%{_loop}%.jobs}:
					set {xp.jobs.bucheron.%player%} to 0
					set {level.jobs.bucheron.%player%} to ({_loop} + 1)
					send "&9Jobs &8» &aBravo vous êtes passé au &dlevel %{_loop} + 1% &adu métier &6Bûcheron" to player
			add 1 to {_loop}

là c'est des maths tout simple : quand le joueur sera niveau 0 ça lui donnera 1 + 0.25 * 0, soit 1 exp, quand il sera niveau 4 ça lui donnera 1 + 0.25 * 4, soit 2 exp, etc etc (j'ai pas testé mais ça devrait marcher)

 

Sinon pour vérifier si le bloc a été posé par un joueur je ne sais pas trop comment faire, tu peux tenter de set une variable de location à l'endroit où un joueur pose un bloc ( {block.%event-location%} ), et quand un joueur casse un bloc, vérifier si une variable avec cette location existe

Modifié par Lemrigue
  • 0
Posté(e) (modifié)

Ah ok merci pour cette optimisation au top ! Je vais testé également.

Pour la vérification, un truc de se genre est bon tu penses:

on place:
	if block is any log:
		set {block.%event-location%} to event-block
		stop
on break:
	if block is any log:
		if {block.%event-location%} is set:
			stop
		else:
			#la je met ton code

EDIT:

Je ne comprends pas l'emplacement du add 1 to {_loop}

j'ai une erreur a propos du de l'action bar:

 

2018-11-03_19.41.14.png

EDIT 2:

Problème résolu, mais le code que j'ai donné ne fonctionne pas...

EDIT 3:

Ton code fonctionne, oui mais y'a juste un soucis, quand on au niveau 1 et qu'on est a 1249 d'exp, quand on casse le block, sa fait passer le niveau certes, mais sa donne de l'exp supplémentaire pour l'autre niveau, au lieu de commencer à 0, ils commencent à 1.5...

Modifié par TheFighter51
  • 0
Posté(e)

la variable {_loop} commence à 0, et elle doit rester à 0 pour tout le code du level 0, du coup on ajoute 1 à cette variable à la fin de la loop. Quand toute la loop a été executée, on lui rajoute 1 et la loop recommence à 1. Si le "add 1 to {_loop}" était placé au début du code, ça commencerait au level 1 et ça zapperait le level 0

Pour ton code, c'est good, c'est ce à quoi je pensais, j'ai testé en local pour voir ce qui allait pas, et c'est juste le "if block is any log" qu'il faut changer en "if event-block is any log" !
Aussi, quand tu casses le block rajoute que ça doit suppr la variable "{block.%event-location%}" sinon tu en auras beaucoup, genre :
 

on break:
	if event-block is any log:
		if {block.%event-location%} is set:
			delete {block.%event-location%}
			stop
		else:
			#la je met le code

 

  • 0
Posté(e)

D'accord sa fonctionne super bien mais y'a juste un soucis, quand on est au niveau 1 et qu'on est a 1249 d'exp, quand on casse le block, sa fait passer le niveau certes, mais sa donne de l'exp supplémentaire pour l'autre niveau, au lieu de commencer à 0, ils commencent à 1.5...

  • 0
Posté(e) (modifié)

Ah oui vu que c'est une loop ça continue après qu'il ait monté de niveau, il suffit de rajouter un "stop" après la monté de niveau :
après le "send" rajoute un stop :

send "&9Jobs &8» &aBravo vous êtes passé au &dlevel %{_loop} + 1% &adu métier &6Bûcheron" to player
stop

 

Modifié par Lemrigue
  • 0
Posté(e)

oui, juste un "{_loop} < 10:" avant "add (1 + 0.25 * {_loop}) to {xp.jobs.bucheron.%player%}" devrait faire l'affaire

			if {level.jobs.bucheron.%player%} = {_loop}:
				if {_loop} < 10:
					add (1 + 0.25 * {_loop}) to {xp.jobs.bucheron.%player%}
				add (0.5 + 0.25 * {_loop}) to player's balance

 

  • 0
Posté(e) (modifié)

Donc sa devrait faire ça ?

on break:
	if event-block is any log:
		if {block.%event-location%} is set:
			delete {block.%event-location%}
			stop
		else:
			set {_loop} to 0
			loop 10 times: #(10 = level max)
				if {level.jobs.bucheron.%player%} = {_loop}:
						if {_loop} < 10:
							add (1+0.25*{_loop}) to {xp.jobs.bucheron.%player%}
						add (0.5+0.25*{_loop}) to player's balance
						send action bar from "&a+ %0.5+0.25*{_loop}%$   &e+ %1+0.25*{_loop}% exp" to player
						if {xp.jobs.bucheron.%player%} >= {xp%{_loop}%.jobs}:
							set {xp.jobs.bucheron.%player%} to 0
							set {level.jobs.bucheron.%player%} to ({_loop}+1)
							send "&9Jobs &8» &aBravo vous êtes passé au &dniveau %{_loop}+1% &adu métier &6Bûcheron" to player
							stop
					add (0.5 + 0.25 * {_loop}) to player's balance
					send action bar from "&a+ %0.10+0.25*{_loop}%$" to player
				add 1 to {_loop}

EDIT:

Quand je suis niveau 10, je ne gagne pas d'argent même si j'ai le loop < 10 ou non ...

Modifié par TheFighter51
  • 0
Posté(e)

Cela fonctionne. Voici mon code final:

on place:
	if block is any log:
		set {block.%event-location%} to event-block
		stop
	
on break:
	if event-block is any log:
		if {block.%event-location%} is set:
			delete {block.%event-location%}
			stop
		else:
			set {_loop} to 0
			loop 11 times: #(10 = level max)
				if {level.jobs.bucheron.%player%} = {_loop}:
					if {_loop} < 10:
						add (1+0.25*{_loop}) to {xp.jobs.bucheron.%player%}
					add (0.5+0.25*{_loop}) to player's balance
					if {_loop} < 10:
						send action bar from "&a+ %0.5+0.25*{_loop}%$   &e+ %1+0.25*{_loop}% exp" to player
					if {_loop} = 10:
						send action bar from "&a+ %0.5+0.25*{_loop}%$" to player
					if {xp.jobs.bucheron.%player%} >= {xp%{_loop}%.jobs}:
						set {xp.jobs.bucheron.%player%} to 0
						set {level.jobs.bucheron.%player%} to ({_loop}+1)
						send "&9Jobs &8» &aBravo vous êtes passé au &dniveau %{_loop}+1% &adu métier &6Bûcheron" to player
						stop
				add 1 to {_loop}

J'ai une dernière question, qui n'est pas en rapport avec mon titre mais, j'ai créer un scoreboard avec titlemanager et j'ai rajouté une variable d'un vote.*

Cela fonctionne mais au lieu que ce soit par exemple Vote: 1 c'est Vote: 1.0, est-il possible d'enlever le 0 à la fin ?

  • 0
Posté(e)

Bonsoir @TheFighter51,

 

Afin de rendre la lecture et la compréhension de la discussion plus facile,
merci de créer une nouvelle demande d'aide avec plus de détails, vous obtiendrez des réponses plus rapidement.

 

Je lock ?

Bonne soirée.

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.