Aller au contenu
  • 0

Skript kit


Question

Posté(e)

Bonjours, j'essaye de faire un code qui permet à un joueur d'avoir un kit toutes les 24 heures.. Mon code fonctionne avec un cooldown avec un décompte, mais le seul bémol, c'est que quand le joueur est déconnecté le cooldown ne fonctionne pas. Est-ce possible de m'aider à regler ce problème. Merci à vous ! Voici le code en-dessous.
(Les commandes et les arguments sont temporaires)

command /kit [<text>] [<text>]:
	trigger:
		if arg 1 is not set:
			if {keyvip.%player%} is true:
				send "&8[&2Kit&8] &bVous devez attendre encore %{keyvip.h.%player%}% h %{keyvip.min.%player%}% m et %{keyvip.sec.%player%}% s."
				stop
			else:
				execute console command "give %player% dirt 1"
				send "&8[&2Kit&8] &6Vous avez reçu votre kit &7Key VIP"
				set {keyvip.sec.%player%} to 5
				set {keyvip.min.%player%} to 1
				set {keyvip.h.%player%} to 1
				add 1 to {keyvip.h.%player%}
				remove 1 from {keyvip.h.%player%}
				set {keyvip.%player%} to true
		if arg 1 is set:
			if arg 1 is "clear":
				clear {keyvip.%player%}
				clear {keyvip.min.%player%}
				clear {keyvip.sec.%player%}
				clear {keyvip.h.%player%}
				
every second:
	loop all players:
		if {keyvip.%loop-player%} is true:	
			remove 1 from {keyvip.sec.%loop-player%}
			if {keyvip.sec.%loop-player%} = 0:
				if {keyvip.min.%loop-player%} >= 1:
					remove 1 from {keyvip.min.%loop-player%}
					set {keyvip.sec.%loop-player%} to 10		
				if {keyvip.min.%loop-player%} = 0:
					if {keyvip.sec.%loop-player%} = 0:
						if {keyvip.h.%loop-player%} <= 0:
							if {keyvip.min.%loop-player%} <= 0:
								if {keyvip.sec.%loop-player%} <= 0:
									send "&8[&2Kit&8] &aVous pouvez désormais récupérer votre kit !" to loop-player
									clear {keyvip.%loop-player%}
									clear {keyvip.min.%loop-player%}
									clear {keyvip.sec.%loop-player%}
									clear {keyvip.h.%loop-player%}
						if {keyvip.h.%loop-player%} >= 1:
							remove 1 from {keyvip.h.%loop-player%}
							set {keyvip.min.%loop-player%} to 1
							set {keyvip.sec.%loop-player%} to 10

22 réponses à cette question

Messages recommandés

  • 0
Posté(e)

C'est normal car tu loop tout les players a chaque second un player déconnecter n'est donc pas pris dans la boucle se qui entraîne donc un mauvais cooldown se que tu peux essayer de faire c'est de changer de méthode de cooldown je te passe un morceau de code essaye de l'intégré au mieux :

if difference between {timer::%player%} and now is greater than 24 hours:
	#Il a dépassé 24H d'intervalle donc il peux faire son kit ici
    <code de kit>
    set {timer::%player%} to now #important on actualise la variable temporelle
else:
	#Le monsieur est trop presser il faut lui dire qu'il na pas le temps encore
    send "Nop !" to player

ici on joue sur la différence entre 2 périodes donc si le joueur n'est pas connecter la variable temporelle est quand même fixer ? 

  • 0
Posté(e) (modifié)

Merci bien, je vais essayer de chercher de mon côté ?
[EDIT]

Et aussi dans ton skript, on a pas le décompte, je viens de le tester sa met juste une date et l'heure dont nous avons exécuter la commande...

Modifié par TheFighter51
Rajout
  • 0
Posté(e)
Il y a 2 heures, TheFighter51 a dit :

Merci bien, je vais essayer de chercher de mon côté ?
[EDIT]

Et aussi dans ton skript, on a pas le décompte, je viens de le tester sa met juste une date et l'heure dont nous avons exécuter la commande...

		if difference between {timer::%player%} and now is greater than 24 hours:
			#<code kit>
			set {timer::%player%} to now
		else:
			set {time.%player%} to 24 hours
			remove difference between {timer::%player%} and now from {time.%player%}
			send "<red>Nop ! Reviens dans : %{time.%player%}%"

Cela devrai t'afficher un cooldown ? 

  • 0
Posté(e)

Je crois que tu ne comprends malheureusement pas ma demande, genre quand le joueur fait par exemple /kit key vip
Sa lui donne son kit, et dès qu'il exécute la même commande, si il a récupérer son kit sa lui dit par exemple "Vous devez attendre 12h 58m 35s avant de pour ravoir votre kit". et non "Nop ! Reviens dans: 1 day" a chaque fois.
Merci..

  • 0
Posté(e) (modifié)
Il y a 1 heure, TheFighter51 a dit :

Je crois que tu ne comprends malheureusement pas ma demande, genre quand le joueur fait par exemple /kit key vip
Sa lui donne son kit, et dès qu'il exécute la même commande, si il a récupérer son kit sa lui dit par exemple "Vous devez attendre 12h 58m 35s avant de pour ravoir votre kit". et non "Nop ! Reviens dans: 1 day" a chaque fois.
Merci..

Salut alors avant toute chose je teste les skripts avant des les envoyer de plus j'ai très bien compris ce que tu demande simplement ici quand tu fais /kit key vip il aura sont kit cependant aucun message directement envoyé et quand il fera /kit key vip pour la seconde fois si il la déjà fais durant les 24H qui on précédé la dernière commande il aura son cooldown affiché

Je vais rechercher une erreur si tu veux mais moi cela marche très bien sur mon serveur :

image.png.b6796b9c1644c09e5b25177cc3451aea.png

 

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

Moi cela ne fonctionne pas cela me marque constament "1 day".

command /kit [<text>] [<text>]:
	trigger:
		if arg 1 is set:
			if arg 1 is "key":
				if arg 2 is "vip":
					if difference between {timer::%player%} and now is greater than 24 hours:
						execute console command "give %player% dirt"
						set {timer::%player%} to now
					else:
						set {time.%player%} to 24 hours
						remove difference between {timer::%player%} and now from {time.%player%}
						send "<red>Nop ! Reviens dans : %{time.%player%}%"

Voilà mon code.

Modifié par TheFighter51
  • 0
Posté(e)

Remplace 

if difference between {timer::%player%} and now is greater than 24 hours:

par 

if difference between {timer::%player%} and now is greater than 10 seconds:

et 

set {time.%player%} to 24 hours

par 

set {time.%player%} to 10 seconds

 

Ton intervalle sera fixer a 10 seconds execute la commande plusieurs fois durant les 10sec pour voir si cela bouge

  • 0
Posté(e)

Non tout se fait avec skript et il me semble même skript 1.0 je ne comprend absolument pas étant donné que on a les mêmes skript et que chez moi ça marche tu n'as aucune erreur console ? 

  • 0
Posté(e)

Re alors voila essaye ça maintenant

command /kit [<text>] [<text>]:
	trigger:
		if arg 1 is set:
			if arg 1 is "key":
				if arg 2 is "vip":
					if {timer::%player%} is not set:
						set {timer::%player%} to now
						add 25 hours to {timer::%player%}
					if difference between {timer::%player%} and now is greater than 24 hours:
						execute console command "give %player% dirt"
						set {timer::%player%} to now
					else:
						set {time.%player%} to 24 hours
						remove difference between {timer::%player%} and now from {time.%player%}
						send "<red>Nop ! Reviens dans : %{time.%player%}%"

 

  • 0
Posté(e)

Alors depuis avant

il y a 1 minute, TheFighter51 a dit :

Merci mais c'est normal que les secondes soit jusqu'à 100 ??
Quand j'ai activé le cooldown et que j'ai execute la commande a nouveau sa a mit "23 hours and 59.99 minutes"

Alors je me sens bien con car je l'avais jamais remarquer je pense qu'elle sont exprimé en % sinon la on y peut rien ??

  • 0
Posté(e) (modifié)
il y a 8 minutes, TheFighter51 a dit :

Ah ouais c'est vraiment pas terrible le skript pour les kits...

La je peux vraiment rien y faire ? 

EDIT:

Voila tu pourrais aussi essayer de split le now avec par exemple comme split les : ou quoi tu récupérera donc plein de valeur a toi de bien les comprendre et de les parse en integer

Modifié par Itexe
Petite pensé en plus
  • 0
Posté(e)
à l’instant, TheFighter51 a dit :

J'ai pas compris ce que tu as écris ?

 

Essaye de faire un send "%now%" tu va voir un certain format de date va apparaite en splitant le string, chaine de texte de %now% tu pourras obtenir dans un tableau plusieurs éléments par exemple :

 

On va simplifier les choses :

%now% affiche : 12:15.99

Donc 12H 15minutes et bah on sait pas trop on va dire 99% de 60

En utilisant un split avec comme séparateur ":" on obtient dans un tableau

tableau::0 = 12 donc quand tu voudra faire appelle aux heure tu fera {tableau::0} et tu obtiens les heures

tableau::1 = 15.99

si tu resplit ton tableau::1 avec comme séparateur "."

tu obtiens

tableau_2::0 = 15

tableau_2::1 = 99

Voila tu as donc tes heures,minutes et seconde séparer 

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

Et genre que tu pense que c'est possible de faire une sorte "d'opération" pour savoir combien équivaut le pourcentage en minute ?

 

Non je ne sais pas appart mettre la fonction "every 1 seconds" et ensuite tu affiche en broadcast la différence et tu analyse. Sinon tu refais tout ton affichage tu convertis en minutes ton split d'heure tu le mes en minute tu fais 1440 - (les minutes écoulé) et tu as les minutes restante ensuite tu divise par 60 tu récupère le nombre entié se qui sera tes heures tu reprend l'ancien nombre et tu fais (toutes tes minutes écoulé) - (tes heures récupéré en minute écoulé) et tu obtiens les minutes restante et tu affiche pas les secondes ? 

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.