Jump to content
  • 0

Quête


Saejin

Question

Version des Files / Type d’Émulateur : 2019

Domaine ( Base de Données, Client, Core, Sources... ) : Base de données

Niveau : Débutant, Intermédiaire ou Avancé ? Débutant

Bonjour,

 

1. Description du dysfonctionnement :

Je rencontre un soucis.

Je sais pas si c'est exactement pareille avec toutes les autres quêtes car je n'ai pas eu le temps de tout regarder,

mais lorsque j'ai une quête map 1 par exemple, en me téléportant ailleurs, par exemple la vallée des orcs, j'ai les targets qui pointent dans la carte où je me trouve.

 

2. SysErr ( Client / Server ) / SysLog ( Server )

Il n'y a aucun syserr jusqu'à présent.

 

 

3. Screenshots ?

 

spacer.png

 

spacer.png

 

J'affirme avoir lu et accepté le règlement de Funky Émulation

Merci d'avance

Edited by Saejin (see edit history)
Link to post

15 answers to this question

Recommended Posts

  • 0

Bonjour,

 

Petit up svp.

 

Je me demande si mettre un "pc.get_map_index() == ID_MAP" ne résolu pas mon soucis ?

Mais comment le mettre à côté de "when login or levelup with pc.get_level() or == 1 begin" ?

 

Car la quête se lance dès le début du jeu, au niveau 1.
 

Je me demande si faire ceci est bon :

        when login or levelup with pc.get_level() == 1 begin
            set_state( gotoinfomation )
        end
        when login with pc.get_map_index() == 41 begin

 

J'aurais plus tôt fais du genre :  

when login or levelup with pc.get_level() == 1 begin and with pc.get_map_index() == 41 begin

 

Mais je sais pas si c'est comme ça que s'écrit le code et si cela est fonctionnelle ou si ça va pas causer de soucis...

 

EDIT 1:

 

en faisans ceci, ma quête fonctionne bien mais le soucis reste le même. En me téléportant ailleurs le target est présent sur la carte...

 

quest main_quest_lv1 begin
	state start begin
		when login or levelup with pc.get_level() == 1 and pc.get_map_index() == 41 begin
			set_state( gotoinfomation )
		end
	end
	state gotoinfomation begin
		when letter begin
			send_letter("Bienvenu sur Metin2")
		end
		when button or info begin
			say_title("Bienvenu sur Metin2")
			say("")
			---                                                   l
			say("Les aventures de Metin2 ne font que commencer!")
			say("")
			say("Allez parler au garde du village.Il vous donnera")
			say("des informations de base et des missions")
			say("qui vous habitueront au jeu.")
			say("")
			wait()
			say_title("Bienvenu sur Metin2")
			say("")
			---                                                   l
			say("Si vous désirez chasser, vous trouverez")
			say("des animaux sauvages en dehors du village.")
			say("Ces animaux sont marqués en rouge sur la minimap")
			say("")
			say("Au début vous devriez chasser les chiens errants")
			say("ce sont les cibles les plus faciles.")
			say("")
			say("Bonne chance!")
			say("")
			set_state( gototeacher )
		end
	end

	state gototeacher begin
		when letter begin
			local v=find_npc_by_vnum(20354)
			if v!=0 then
				target.vid("__TARGET__", v, mob_name(20354))
			end
		end
		when button or info begin
			say_title("Trouver le garde du village.")
			say("")
			---                                                   l
			say("Parler au garde du village.")
			say("")
			say("Trouvez le pnj avec une flèche qui pointe")
			say("au dessus de lui.Si vous ne la voyez pas")
			say("vous pouvez suivre le point rouge qui clignote")
			say("dans la minimap")
			say("")
		end
		when __TARGET__.target.click begin
			target.delete("__TARGET__")
			say_title("Garde du village:")
			say("")
			---                                                   l
			say("Vous devez être nouveau dans le village.")
			say("Vous n'avez pas l'étoffe d'un héros.")
			say("Regardez-vous! Savez vous utiliser une arme?")
			say("Vous devez être vigilant si vous voulez survire")
			say("à cette guerre.")
			say("")
			say("Je vais vous aider, jusqu'à ce que vous gagnez")
			say("assez d'expérience, ou que vous passiez level 10.")
			say("Je suis une personne occupée et je n'aime pas")
			say("perdre mon temps.")
			say("")
			wait()
			say_title("Garde du village:")
			say("")
			---                                                   l
			say("Maintenant vous devriez aller vous entrainer!")
			say("Une fois que vous aurez un peu évoluer, revenez")
			say("me voir.")
			say("")
			say("Que faites-vous encore là?")
			say("Vous n'apprendrez rien en rester ici !")
			say("")
			clear_letter()
			set_state(__COMPLETE__)
			set_quest_state("find_squareguard","find")
			set_quest_state("main_quest_lv2","run")
		end
	end
	state __COMPLETE__ begin
	end
end

 

EDIT 2:

 

Mon soucis viendrais de :

local v=find_npc_by_vnum(20354)
            if v!=0 then
                target.vid("__TARGET__", v, mob_name(20354))

 

Comment je pourrais contrer ce soucis en gardant le target mais dans sa map respective ?

 

Merci d'avance

Edited by Saejin (see edit history)
Link to post
  • 0

Bonjour Saejin,

 

c'est un problème plutôt original que tu as là, dont la source m'est inconnue.

Mais, comme tu l'as justement remarqué, tu peux modifier la quête afin de bloquer le ciblage du pnj sur la map en question en utilisant la fonction pc.get_map_index().

En fait, tu as déjà toutes les cartes en main, il ne te reste plus qu'à les combiner entre elles :

 

        when letter begin
            local map = pc.get_map_index()
            local v=find_npc_by_vnum(20354)
            if v!=0 and (map == 1 or map == 3 or map == 21 or map == 23 or map == 41 or map == 43) then
                target.vid("__TARGET__", v, mob_name(20354))
            end
        end

 

Link to post
  • 0

Bonjour,

 

Merci d'avoir répondu ainsi que pour l'aide et le temps consacrer.

 

Malgré le changement en indiquant les propres maps de la quêtes, le soucis reste le même

 

Merci d'avance

Link to post
  • 0

Très bien, merci pour le retour, cela permet d'explorer d'autres pistes.

En regardant les screenshots de plus près, nous pouvons voir que ce problème est récurrent sur toutes les quêtes ce qui indique un problème profond.

Donc tu ne peux t'attendre à voir toutes les target s'évaporer d'un coup de baguette. Mais si une seule venait à disparaître, c'est que la méthode fonctionne mais qu'il est nécessaire de l'appliquer sur toutes les quêtes concernées, une par une.

 

J'exclus ma première hypothèse qui était que la fonction target.vid arrive à détecter le pnj sur une autre map.

Le problème pourrait venir du fait que la fonction target.vid persiste d'une map à l'autre malgré la téléportation du joueur.

Dans ce cas-là, plutôt qu'essayer d'appeler la fonction target.vid dans les maps concernées, nous pouvons envisager le problème sous l'angle inverse retirer l'effet de la fonction target.vid dans les maps non concernées.

Notamment, si je ne me trompe pas, grâce à la fonction target.remove.

 

Mais je ne me souviens plus quel paramètre elle attend : target.remove("__TARGET__") ou target.remove(v) ?

Link to post
  • 0

Bonjour et merci d'avoir répondu,

 

Exactement, cela arrive pour chaque quête.

 

target.delete("__TARGET__")

 

Elle est présente dans la quête après avoir cliqué sur le PNJ en question une fois validé ce qui est demander

 

Merci d'avance pour le temps et l'aide consacrer
 

Edited by Saejin (see edit history)
Link to post
  • 0

Je te remercie, j'ai visiblement survolé trop vite la quête.
C'est donc target.delete("__TARGET__").
J'entrevois deux façons de procéder, j'ai un doute sur les deux car j'ignore s'il nous est permis de supprimer une cible sans qu'elle soit préalablement sélectionnée par un évènement.
Il est possible de cumuler les deux façons, elles n'ont pas exactement le même effet.
À toi de tester les bouts de code ci-dessous et si l'un d'entre eux s'avère fonctionnel, de décider la solution qui te parait la plus cohérente pour ton serveur.
Je te rappelle qu'une seule target devrait disparaître.

 

Solution n°1 : supprimer la target lorsque le joueur se connecte. Avant d'éventuellement la relancer.

        when letter begin
            target.delete("__TARGET__")
            local v=find_npc_by_vnum(20354)
            if v!=0 then
                target.vid("__TARGET__", v, mob_name(20354))
            end
        end

Solution n°2 : supprimer automatiquement la target à la déconnexion du joueur, à insérer où tu le souhaites dans le 'state gotoinfomation'

        when logout begin
            target.delete("__TARGET__")
        end

 

Link to post
  • 0

Bonjour et merci d'avoir répondu,

 

Le soucis reste le même avec les deux solutions

 

Voici la quête complète au cas où:

--Traduit by Salya pour Emulation-bay
quest main_quest_lv1 begin
    state start begin
        when login or levelup with pc.get_level() == 1 begin
            set_state( gotoinfomation )
        end
    end
    state gotoinfomation begin
        when letter begin
            send_letter("Bienvenu sur Metin2")
        end
        when logout begin
                    target.delete("__TARGET__")
        end
        when button or info begin
            say_title("Bienvenu sur Metin2")
            say("")
            ---                                                   l
            say("Les aventures de Metin2 ne font que commencer!")
            say("")
            say("Allez parler au garde du village.Il vous donnera")
            say("des informations de base et des missions")
            say("qui vous habitueront au jeu.")
            say("")
            wait()
            say_title("Bienvenu sur Metin2")
            say("")
            ---                                                   l
            say("Si vous désirez chasser, vous trouverez")
            say("des animaux sauvages en dehors du village.")
            say("Ces animaux sont marqués en rouge sur la minimap")
            say("")
            say("Au début vous devriez chasser les chiens errants")
            say("ce sont les cibles les plus faciles.")
            say("")
            say("Bonne chance!")
            say("")
            set_state( gototeacher )
        end
    end

    state gototeacher begin
        when letter begin
            target.delete("__TARGET__")
            local map = pc.get_map_index()
            local v=find_npc_by_vnum(20354)
            if v!=0 and (map == 1 or map == 2 or map == 21 or map == 22 or map == 41 or map == 42) then
                target.vid("__TARGET__", v, mob_name(20354))
            end
        end
        when button or info begin
            say_title("Trouver le garde du village.")
            say("")
            ---                                                   l
            say("Parler au garde du village.")
            say("")
            say("Trouvez le pnj avec une flèche qui pointe")
            say("au dessus de lui.Si vous ne la voyez pas")
            say("vous pouvez suivre le point rouge qui clignote")
            say("dans la minimap")
            say("")
        end
        when __TARGET__.target.click begin
            target.delete("__TARGET__")
            say_title("Garde du village:")
            say("")
            ---                                                   l
            say("Vous devez être nouveau dans le village.")
            say("Vous n'avez pas l'étoffe d'un héros.")
            say("Regardez-vous! Savez vous utiliser une arme?")
            say("Vous devez être vigilant si vous voulez survire")
            say("à cette guerre.")
            say("")
            say("Je vais vous aider, jusqu'à ce que vous gagnez")
            say("assez d'expérience, ou que vous passiez level 10.")
            say("Je suis une personne occupée et je n'aime pas")
            say("perdre mon temps.")
            say("")
            wait()
            say_title("Garde du village:")
            say("")
            ---                                                   l
            say("Maintenant vous devriez aller vous entrainer!")
            say("Une fois que vous aurez un peu évoluer, revenez")
            say("me voir.")
            say("")
            say("Que faites-vous encore là?")
            say("Vous n'apprendrez rien en rester ici !")
            say("")
            clear_letter()
            set_state(__COMPLETE__)
            set_quest_state("find_squareguard","find")
            set_quest_state("main_quest_lv2","run")
        end
    end
    state __COMPLETE__ begin
    end
end
 

 

Merci d'avance pour le temps et l'aide consacrer

Edited by Saejin (see edit history)
Link to post
  • 0

Hé bien...

 

Peux-tu effectuer un test ?

J'aimerai que tu mettes la ligne target.delete("__TARGET__") en commentaire puis que tu accomplisses la quête, enfin que tu téléportes dans la map orc juste après de façon traditionnelle.

Pour finir tu te confectionneras un sandwich au beurre que tu rouleras dans la pâte à tartiner de ton choix et...

Par traditionnelle, je veux dire sans utiliser de commandes gm mais en passant par le téléporteur, comme le ferai un joueur.

La target de la quête est-elle toujours active ?

Si oui, persiste-t-elle après une déconnexion/reconnexion ?

Link to post
  • 0

Merci d'avoir répondu,

 

EDIT 1 :

 

En me téléportant via le téléporteur comme un joueur normal,

le soucis reste le même

 

EDIT 2 :

Et comme le target est pas supprimé malgré la quête fini, celui-ci reste

 

Merci d'avance

Edited by Saejin (see edit history)
Link to post
  • 0

Bien. Je m'excuse de t'avoir demandé quelque chose de si... trivial. Le but était d'invalider les dernières théories imaginées.

Comme je l'ai écris dans un message précédent, le problème semble profond et aucune retouche de quête ne semble pouvoir compenser cela (mise à part le retrait pur et simple des targets).

Je m'excuse mais je ne pense pas pouvoir t'aider plus avant.

Link to post
  • 0

Merci d'avoir répondu,

 

Je vais continuer mes recherches à droite et à gauche et sur le web de mon côté afin de trouver une solution car c'est très embêtant.

 

Je vous remercie pour tout, le temps et l'aide que vous m'avez consacrer

Link to post
  • 0

Bonjour,

 

Je me demandais si c'était possible, par exemple, de supprimer le target une fois téléporter sur une autre carte, puis une fois revenu sur la carte d'origine de la quête, on re ajoute le target ?

Et cela à chaque phase de la quête ?

 

Merci d'avance

Link to post
  • 0

Bonjour Saejin,

 

c'est grosso-modo ce que j'ai tenté de faire à travers les différentes solutions proposées.

1/ Enlever la target à la connexion du joueur pour éventuellement la rajouter ensuite.

2/ Enlever la target à la déconnexion du joueur pour éventuellement la rajouter ensuite.

Il faut comprendre qu'une téléportation est une déconnexion du joueur d'une map suivi d'une connexion du joueur dans la nouvelle.

Ton idée est donc très proche de la 1/.

 

Je t'encourage tout de même à essayer, tu pourrais bien trouver ce que je n'ai su voir. Et puis c'est une merveilleuse façon d'apprendre.

Edited by Riws (see edit history)
Link to post
  • 0

Bonjour à tous,

 

Je n'ai toujours pas trouver, si quelqu'un à réussi à contourner ce soucis, pourrait-il nous apporter sa solution ?

 

Merci d'avance

Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.