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

Quête (tp un joueur avec soi)


XDarkKillerX

Question

Bonjour :)

 

Je rencontre un petit soucis avec une quête dont le but est de téléporter un joueur avec soi via un item.(La personne possédant l'item étant aussi un joueur et doit aussi être téléportée.)

 

J'ai cherché sur EB et ici dans les quêtes parce qu'il y en avait une qui permettait de téléporter sa buff avec sois dans telle ou telle map, mais pas trouvée !

 

Donc je me suis rabattu sur la quête du mariage, mais si on s'intéresse aux fonctions qui permettent de téléporter les mariés map mariage, on se rend compte que ça colle pas pour ce que je veux faire.

 

En gros c'est tout con :

 

wait()

marriage.engage_to(u_vid)

 

Le problème dans ma quête c'est ce (u_vid), qui permet de téléporter la personne avec sois choisie dans un "input" précédemment.

J'utilise pc.warp et on ne peut pas rajouter à cette fonction "avec quelqu'un" donc u_vid.

 

Voici ma quête en question :

 

quest testitem begin
state start begin
	when 40001.use begin
		say_title("La vieille dame:")
		say("Vous voulez vous marier ?")
		say("Pouvez-vous me dire le nom de l'heureux(se) élu(e)?")
		say_reward("Entrez le pseudo de votre fiancé(e)")

		local sname = input ()

		local u_vid = find_pc_by_name (sname) 
		local m_vid = pc . get_vid () 

		if u_vid == 0 then
			---                                                   l
			say_title("La vieille dame:")
			say("Cette personne n'existe pas") 
			say_reward(string . format ("Nom : %s inconnu" , sname)) 
			npc.unlock() 
			return
		end

		local ok_sign = confirm (u_vid , "Voulez-vous vous marier avec " .. pc . name .. "?" , 30)

		if ok_sign == CONFIRM_OK then

		local m_name = pc . name

		say("blabla")
		wait()
		pc.warp(0,102400)
		end
	end
end
end

 

Problème : seul le possesseur de l'item est téléporté, malgré que la demande arrive bien à l'autre perso choisi dans le input.Quand je clique sur "Oui" avec le second perso ça fait rien.

 

J'ai aussi vu des histoires de :

 

local old = pc.select (u_vid)

 

ou

 

pc.select(old)

 

Qui désignent soit le perso qui demande soit le perso à qui ont demande, j'ai tenté de faire le pc.warp pour les deux mais sans succès, tout plante quand je test ça :

 

			pc.select(u_vid)
		wait()
		pc.warp(0,102400)

		pc.select(old)
		say("blabla")
		wait()
		pc.warp(0,102400)

 

Perso je n'ai plus d'idées x_x

Merci d'avance et faites pas gaff aux dialogues tout pourris j'ai laissé les trucs du mariage x)

 

Cordialement

Lien vers le commentaire
Partager sur d’autres sites

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

Meilleurs contributeurs dans cette question

Meilleurs contributeurs dans cette question

12 réponses à cette question

Messages recommandés

  • 0

Salut,

 

J'ai essayé de coder quelque chose en vitesse, j'avais pas trop le temps donc c'est possible d'y trouver des erreurs, mais si ça peut aider. :)

 

quest tpOther begin
state start begin


	when 40001.use begin
		local pseudo = pc.get_name()
		local coor_x = pc.get_local_x()
		local coor_y = pc.get_local_y()
		local vid_p = pc.get_vid()
		say_title("Téléporter un joueur sur soi")
		say("")
		say("Quel joueur voulez-vous téléporter ?")
		say("")
		local a_tp = input()
		local vid_a_tp = find_pc_by_name(a_tp)
		if vid_a_tp == 0 then
			say_title("Téléporter un joueur sur soi")
			say("")
               say("Cette personne n'existe pas")
			say("")
               say_reward(string.format("Nom : %s inconnu" , a_tp))
               return
		end
		local ok_sign = confirm(vid_a_tp , "Voulez-vous vous téléporter sur "..pseudo.." ?", 30)
		timer("tp", 32)
		if ok_sign == CONFIRM_OK then
			pc.select(vid_a_tp)
			if pc.count_item(40001) >= 1 then
				pc.warp(coor_x, coor_y)
				pc.select(vid_p)
				pc.setqf("tp", 1)
			else
				pc.select(vid_p)
				say_title("Téléporter un joueur sur soi")
				say("")
				say(a_tp "n'a pas l'item de téléportation.")
				return
			end
		else
			pc.setqf("tp", 0)
		end
	end

	when tp.timer begin 
		if pc.getqf("tp") == 0 then
			say_title("Téléporter un joueur sur soi")
			say("")
			say(a_tp "a refusé votre invitation.")
		end
	end


end
end

 

Bonne soirée ! :)

Lien vers le commentaire
Partager sur d’autres sites

  • 0

J'ai pourtant cru que ce pavé serait clair, je veux que le joueur se téléporte dans un endroit précis (0,102400), et donc que quand il clic sur l'item, un input lui laisse le choix de taper le pseudo d'un ami pour que celui ci soit téléporté avec lui.En regardant ma quête c'est pourtant super clair je trouve :/

 

Je le redis mais je suis certain qu'une quête comme ça existait, on pouvait choisir en se téléportant de tp sa buff avec soit, non pas par un système de groupe mais bien par un input et donc de rentrer manuellement le pseudo de la chamane désirée.

J'espère que je me suis mieux exprimé, j'suis pas doué pour expliquer x)

Lien vers le commentaire
Partager sur d’autres sites

  • 0
  • Retraité

say_title("Tp ton ami :")
say("")
local sname = input() 						
local u_vid = find_pc_by_name(sname)

if u_vid == 0 then 
say_title("tp:") 
say("") 
say("Cette personne n'existe pas.") 
say("") 
return 
end 

local old = pc.select(u_vid)
pc.warp(10100, 1210900)

pc.select(old)
pc.warp(10100, 1210900)

 

Ce serait donc ce genre de code.

Truc basique et simple de compréhension.

You can't be immortal,
But you can make people remember
you for thousands of years...

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Merci la quête fonctionne très bien, mais elle est extrêmement radicale x)

 

J'ai tenté de rajouter un petit message pour chaque joueur et confirmer la téléportation, mais à chaque fois c'est un échec, n'y a t-il aucun moyen de laisser le choix au moins à la personne invitée ? ^^'

 

quest testitem begin
state start begin
	when 40001.use begin
		say_title("Tp ton ami :")
		say("")
	local sname = input()                         
	local u_vid = find_pc_by_name(sname)

	if u_vid == 0 then 
		say_title("tp") 
		say("") 
		say("Cette personne n'existe pas.") 
		say("") 
	return 
end 

		pc.select(u_vid)
		say_title("test")
		say("")
		say("Souhaitez vous etre teleporte ?")

		local s = select("Oui", "Non")

		if s == 1 then

		say("bon voyage")
		wait()
		pc.warp(0,102400)

		else

		return
		end

		pc.select(old)
		say_title("test")
		say("")
		say("Souhaitez vous etre teleporte ?")

		local s = select("Oui", "Non")

		if s == 1 then

		say("bon voyage")
		wait()
		pc.warp(0,102400)

		end
	end
end
end

 

Avec ceci, le personnage avec lequel je clic sur l'item est bugué (bandes noires des quêtes mais plus rien d'affiché), et le joueur qu'on invite reçoit le message avec "Oui" ou "Non" mais dans les deux cas il fait pareil, bandes noires :/

Lien vers le commentaire
Partager sur d’autres sites

  • 0
  • Retraité
quest testitem begin
   state start begin
       when 40001.use begin		
		say_title("Anneau de téléportation:")
		say("")
		say("Blabla veux-tu aller à cet endroit")
		local choix = select("Oui"," Non")

		if choix == 2 then
			say_title("Anneau de téléportation:")
			say("")
			say("Tant pis pour toi, bye.")				
			return  

		elseif choix == 1 then
			say_title("Anneau de téléportation:")
			say("")
			say("Veux-tu etre accompagné ? ")
			local choix2 = select("Oui"," Non")

			if choix2 == 2 then
				say_title("Anneau de téléportation:")
				say("")
				say("Blabla il y va seul")
				pc.warp(0,102400) 

			elseif choix2 == 1 then
				say_title("Pseudo de ton ami:")
				say("")
				local sname = input() 					
				local u_vid = find_pc_by_name(sname)			
				if u_vid == 0 then 		
					say_title("Anneau de téléportation:") 
					say("") 
					say("Ce personnage n'existe pas.") 
					say_reward(string.format("Nom : %s inconnu", sname)) 
					say("") 
					return 						
				end
				local demande = confirm(u_vid , "Voulez-vous être téléporté avec "..pc.get_name().." ?", 30)
				timer("accord", 31)

				local old = pc.select(u_vid)
				pc.warp(0,102400) 

				pc.select(old)
				pc.warp(0,102400) 
			end
		end
	end

       when accord.timer begin 
           if pc.getqf("accord") == 0 then
               say_title("Erreur")
               say("")
               say("Votre ami a refusé ou est inactif. ")
           end
       end	
end
end

You can't be immortal,
But you can make people remember
you for thousands of years...

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Y'a pas besoin de timer valithis normalement ton ",30" à la fin du local demande = confirm c'est déjà comme un timer. Donc tu mets if demande == CONFIRM_OK then (ça ressemble à ça je sais plus c'est quoi exactement) alors ça tp et "else" pour mettre "votre ami a refusé ou est inactif". Et d'ailleurs sans le CONFIRM_OK avec ta quête le mec il peut répondre ni oui ni non je crois et ça le téléporte quand même (pas sûr, t'as testé ?)

 

J'sais pas si c'est faux mais j'dirais :

quest testitem begin
   state start begin
       when 40001.use begin        
           say_title("Anneau de téléportation:")
           say("")
           say("Blabla veux-tu aller à cet endroit")
           local choix = select("Oui", "Non")
           if choix == 2 then
               say_title("Anneau de téléportation:")
               say("")
               say("Tant pis pour toi, bye.")                
               return  
           elseif choix == 1 then
               say_title("Anneau de téléportation:")
               say("")
               say("Veux-tu etre accompagné ? ")
               local choix2 = select("Oui"," Non")
               if choix2 == 2 then
                   say_title("Anneau de téléportation:")
                   say("")
                   say("Blabla il y va seul")
                   pc.warp(0,102400) 
               elseif choix2 == 1 then
                   say_title("Pseudo de ton ami:")
                   say("")
                   local sname = input()                     
                   local u_vid = find_pc_by_name(sname)            
                   if u_vid == 0 then         
                       say_title("Anneau de téléportation:") 
                       say("") 
                       say("Ce personnage n'existe pas.") 
                       say_reward(string.format("Nom : %s inconnu", sname)) 
                       say("") 
                       return                         
                   end
                   local demande = confirm(u_vid , "Voulez-vous être téléporté avec "..pc.get_name().." ?", 30)
				if demande == CONFIRM_OK then
					local old = pc.select(u_vid)
					pc.warp(0,102400) 
					pc.select(old)
					pc.warp(0,102400)
				end
					say_title("Erreur")
					say("")
					say("Votre ami a refusé ou est inactif. ")
               end
           end
	end
   end
end 

Lien vers le commentaire
Partager sur d’autres sites

  • 0
  • Retraité

Non pas testé j'ai fait sa sur le coup, à la va vite.

Le timer est surtout là pour ajouter du texte, informer le joueur que le gars à soit refuser, soit il est inactif.

 

Et oui j'ai oublié le confirm.

Je pensais aussi au unlock sur refus.

 

Ça devrait donc être bon avec ce confirm, prend le code de prindo, la flemme de réecrire :P

You can't be immortal,
But you can make people remember
you for thousands of years...

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Problème résolu, mais je me suis rendu compte d'un problème assez embêtant, c'est que les mariés peuvent se tp dans cette map.La téléportation entre eux DANS la map ne me dérange pas, c'est surtout quand l'un est dans la map et l'autre map 1 par exemple, l'accès est gratuit et ne passe pas par l'item :/

 

Y'a t"il un moyen de bloquer ça ?

Lien vers le commentaire
Partager sur d’autres sites

  • 0
  • Retraité

Rajoute ça dans ta quête ou alors dans une spéciale.

 

when login begin 
if pc.get_map_index() == ID_DE_TA_MAP then --- S'il se trouve sur la map en question alors
	if pc.get_gold() > VALEUR then     --- Changer valeur par le prix du TP
		if pc.getqf("verif") == 0 then --- S'il était pas sur cette map alors
			pc.setqf("verif", 1)       --- Mettre verif à 1
			pc.change_gold(-Yang)      --- Lui enlever X yangs (Remplacer Yang par valeur)
		end
	else --- Si pas assez d'argent
		syschat("Tu n'as pas assez de yang")
		pc.warp(X ,Y)  --- Je le TP à un endroit défini
	end
else  --- Sinon
	pc.setqf("verif", 0) --- Mettre verif à 0
end
end

 

En gros tu l'as comprit, j'ai utilisé une variable pour éviter qu'il paie 2 fois.

Quand il va se tp, on va lui enlever les yangs mais s'il déco a cause d'un crash et qu'il va reco, il ne va pas être débité une nouvelle fois.

 

Mais dans le cas où tu utiliserais la quête ci-dessus, il faut enlever le change gold dans ton anneau de TP car elle va s’appliquer à tout le monde. Au lieu de débiter au moment d'utiliser l'anneau, ils vont être débité au moment où ils apparaissent sur la map.

Laisse tout de même la fonction get gold sur ta quête de TP, ça évite qu'ils se fassent TP pour rien

Lien vers le commentaire
Partager sur d’autres sites

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


  • brilliantdiscord_widget
  • Flux d'Activité

    1. 37
    2. 21

      Metin2 en 2020 peut-on en parler?

    3. 0

      METIN2Project

    4. 3

      Ressources - UnPack - Metin2 Client - Officiel

    5. 0

      Barre des tâches d'argent étendue

    6. 16

      Redémarrage automatique des channels

  • En ligne récemment

    • Aucun utilisateur enregistré regarde cette page.

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.