Aller au contenu
Top-Metin2.org - Vous êtes à la recherche d'un serveur Metin 2 ? ×
×
×
  • Créer...
  • 0

[QUEST] Timer qui ne se déclenche pas ?


Sufhal

Question

  • Retraité

Bonjour à tous !

 

J'ai mis en place une arène (physiquement) sur une map et je souhaiterais y téléporter 2 joueurs afin qu'ils s'affrontent.

Pas de problème particulier jusqu'au moment où les joueurs sont téléportés : j'utilise un timer juste avant la téléportation des deux joueurs et au moment où ils apparaissent dans l'arène le timer ne se met pas en route.

Il y a t'il des règles concernant l'utilisation de ces timers ? 

 

Voici un code simplifié de la quête :

quest sufhal_pvp_npc begin
	state start begin

		when 9071.chat."Lancer un défi" with pc.level >= 50 begin

			if not npc.lock() then                
				---                                                   l
				say_title(mob_name(9071)..":")
				say("Je suis déjà occupé avec quelqu'un d'autre !")
				say("Veuillez patienter quelques instants.")
				return
			end

			if game.get_event_flag("pvp_enabled") == 1 and game.get_event_flag("pvp_busy") == 0 then
				---                                                   l
				say_title(mob_name(9071)..":")
				say("L'arène vous permet de combattre des joueurs")
				say("connectés de niveau supérieur ou égal à 50.")
				say("Ils recevront une invitation à accepter un duel.")
				say("Ils peuvent accepter ou refuser selon leur envie.")
				say("Que voulez-vous faire ?")

				local choix = select("Inscrire mon adversaire","Fermer")

				if choix == 2 then
					return
				end

				---                                                   l
				say_title(mob_name(9071)..":")
				say("Veuillez entrer le nom du joueur que vous voulez")
				say("combattre. Il ne doit pas avoir plus de 5 niveaux")
				say("de plus ou de moins que vous.")

				local adv_name = input()

				if adv_name == "" then
					---                                                   l
					say_title(mob_name(9071)..":")
					say("Vous ne savez pas avec qui vous battre ?")
					say("Demandez en général, quelqu'un sera peut-être")
					say("intéressé.")
					npc.unlock()
					return
				else
					---                                                   l
					say_title(mob_name(9071)..":")
					say("Votre invitation à combattre a été envoyée au")
					say("joueur "..adv_name..".")
					wait()

					adv_vid = find_pc_by_name(adv_name)

					if adv_vid == 0 then
						---                                                   l
						say_title(mob_name(9071)..":")
						say("Désolé mais "..adv_name.." n'est pas connecté.")					
						npc.unlock()									
						return

					elseif adv_vid == pc.get_vid() then
						---                                                   l
						say_title(mob_name(9071)..":")
						say("Vous ne pouvez pas vous défier vous même.")
						say("C'était bien essayé.")
						npc.unlock()
						return
					end

					adv = pc.select(adv_vid)
					adv_level = pc.get_level()
					pc.select(adv)

					if adv_level < 50 then
						---                                                   l
						say_title(mob_name(9071)..":")
						say("L'adversaire n'a pas atteint le niveau 50.")
						npc.unlock()										
						return
					end

					if not npc.is_near_vid(adv_vid, 10) then
						---                                                   l
						say_title(mob_name(9071)..":")
						say("L'opposant doit être à vos cotés.")
						say(adv_name.." est trop loin.")										
						npc.unlock()
						return
					end

					local agree = confirm(adv_vid, "Accepter le combat contre "..pc.name.."?", 20)

					if agree != CONFIRM_OK then
						---                                                   l
						say_title(mob_name(9071)..":")
						say(sname.." a refusé le combat.")
						npc.unlock()							
						return
					end

					local coord_1_x = 2800000+(384*100)
					local coord_1_y = 2800000+(310*100)
					local coord_2_x = 2800000+(412*100)
					local coord_2_y = 2800000+(310*100)

					pc.warp(coord_1_x,coord_1_y)

					pc.select(adv_vid)
					pc.warp(coord_2_x,coord_2_y)

					timer("temporizer_one", 120)					

				end
				npc.unlock()
			end
		end

		when temporizer_one.timer begin
			notice_in_map("Le combat commence dans 120 secondes !")
			timer("fight_one", 120)
		end

		when fight_one.timer begin

			command("pvp "..adv_vid)
			local partner = pc.select(adv_vid)
			command("pvp "..partner)

			notice("La première manche à commencée !")
		end

	end
end

 

Et voici la partie bloquante : 

					[...]

					timer("temporizer_one", 120)					

				end
				npc.unlock()
			end
		end

		when temporizer_one.timer begin
			notice_in_map("Le combat commence dans 120 secondes !")
			timer("fight_one", 120)
		end

		when fight_one.timer begin

			command("pvp "..adv_vid)
			local partner = pc.select(adv_vid)
			command("pvp "..partner)

			notice("La première manche à commencée !")
		end

		[...]

 

J'en profite pour anticiper une autre question : quelqu'un à déjà utilisé la fonction ci-dessous ? Si oui, fonctionne-t-elle ? 

command("pvp "..adv_vid)

 

 

Une idée ?

Merci par avance :) 

 

PS : La quête se compile sans erreur.

Modifié par _Sufhal
Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 6
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans cette question

Meilleurs contributeurs dans cette question

6 réponses à cette question

Messages recommandés

  • 0
  • Retraité

Comme son nom l'indique il permet de temporiser, c'est à dire de laisser le temps au joueur d'être téléporté et de se préparer à combattre

Modifié par _Sufhal
Lien vers le commentaire
Partager sur d’autres sites

  • 0
  • Retraité

C'est effectivement l'impression que ça me donne cependant je pense qu'il n'y a que ceux là qui ont de l'interêt à être utilisés parce que l'arène n'est pas la seule "attraction" de la map en question donc il ne serait pas optimal d'utiliser des server_timer, je me trompe ?

 

Edit : ça ne fonctionne pas non plus en remplaçant les timer par des server_timer, une autre idée ?

 

Edit : après une longue recherche sur EPVP j'ai trouvé que le server_timer n'était pas lié à la map mais plutôt au joueur et qu'il faut ajouter un troisième argument pc.get_name(). Je ne peux pas tester dans l’immédiat mais au nombre de "Merci" cette information me paraît fiable. Je reviens vers vous dans la soirée !

 

 

Edit : Je viens de tester et ça ne fonctionne toujours pas... Ces timers sont vitaux pour le bon déroulement de la quête, quelqu'un s'en sert régulièrement (en dehors des donjons) ?

Modifié par _Sufhal
Lien vers le commentaire
Partager sur d’autres sites

  • 0
  • Retraité

Je me permet de relancer le sujet, j'ai apporter de légères modification au script :
J'ai testé les timer sur une quête vide et ils fonctionnent bien.

J'ai réécris la fin de ma quête orginale en mettant un set_state à la place du timer et j'ai mis le timer en question dans le state.

 

Voici la partie modifiée : 

pc.setqf("in_arena", 1)

local coord_1_x = 2800000+(384*100)
local coord_1_y = 2800000+(310*100)
local coord_2_x = 2800000+(412*100)
local coord_2_y = 2800000+(310*100)

pc.warp(coord_1_x,coord_1_y)
pc.select(adv_vid)
pc.warp(coord_2_x,coord_2_y)

set_state(manche)
state manche begin
	when login or enter with game.get_event_flag("pvp_enabled") == 1 and pc.getqf("in_arena") == 1 begin
		notice("state manche started")
		timer("timertest", 10)
	end
	when timertest.timer begin
		notice("timer started")
		pc.setqf("in_arena", 0)
		set_state(start)
	end
end

 

Sauf que la quête ne sort pas du state "start". Il y a-t-il des conditions particulières pour pouvoir effectuer un set_state ?

Lien vers le commentaire
Partager sur d’autres sites

  • 0
  • Retraité

Du nouveau pour les prochains tomberont sur ce post avec un problème similaire :

J'ai placé le set_state avant la téléportation et tout fonctionne, le set_state et les timers !

Le sujet est donc résolu et peut être clos xD

À bientôt pour un autre bug !

Lien vers le commentaire
Partager sur d’autres sites

Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.


Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / 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.