Vous devez être connecté et donner une réaction ( Like ) au sujet pour débloquer les liens de téléchargements...
  • 0
Testuff

en cours [Résolu] Recommencer une quete

Question

Version des fichiers/ Type d'émulateur : 2014

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

Votre niveau (Débutant, Intermédiaire, Avancé..) : Débutant

 

Description du problème : Je souhaiterais pouvoir refaire une quête avec un perso, mais je ne vois pas comment.

Comment reproduire le problème ? : Problème identique sur toutes les quêtes se terminant par set_state(_COMPLETE__)    State __COMPLETE__ BEGIN

Recherches et tests effectués :

Après avoir effectué plusieurs de recherche, voici ce que j'ai compris :

- Lorsqu'une quête se termine par :

set_state(_COMPLETE__)

State __COMPLETE__ begin

 

la quête ne pourra jamais être refaite.

 

J'ai cherché un peu dans la base SQL et je vois que dans table PLAYER / QUEST, on peut trouver la liste des quetes en cours ou en attente pour chaque joueur avec un status + un chiffrage long et bizarre. Ce chiffre semble décrire l'état d'avancement de la quête au programme.

 

J'ai donc cherché à modifier se chiffre pour refaire une quête, mais cela ne marche pas.

 

Pouvez m'aider et me donner un peu plus d'explication sur ce qu'engendre le  "set_state(_COMPLETE__)" et le "state __COMPLETE__ begin" dans la base SQL, et m'aider à trouver comment "rebooter" une quete, s'il vous plait ?

 

merci d'avance pour votre aide

 

Screenshot du problème concerné : NEANT

 

En postant ma demande d'aide, j'affirme avoir lu et accepté le Règlement de Funky-Emulation.

Edited by Kameyu

Share this post


Link to post
Share on other sites

11 answers to this question

Recommended Posts

  • 0

Hello !

 

Avec  set_state(), tu peux mettre le nom du state que tu veux pour changer "l'état" de la quête.

Imaginons que tu englobes ta quêtes dans un state appelé "ma_quete". Si à la fin de la quête, tu fais set_state(start), et bien tu vas pouvoir changer l'état de la quête du joueur et il va pouvoir recommencé dès le début de la state()

 

Sachant que start, c'est la state qui est exécuté en première dans tous les cas.

Share this post


Link to post
Share on other sites
  • 0

Bonsoir,

 

Merci pour cette réponse rapide.

 

Je t'avoue que je ne suis pas un expert en programmation, loin de là. Je ne suis pas sûr d'avoir bien compris.

 

Si je comprends bien set_state() permet de faire sauter le programme jusqu'à la ligne "state ..... begin", c'est bien ça ?

 

180523061858671231.png

 

Mais lorsque le programme arrive à la ligne : "steta __COMPLETE__ begin", concretement il doit bien écrire une information à quelque part pour dire que la quete est "complete" et qu'il ne faut pas la refaire non, svp ?

 

merci encore à tous pour votre aide

 

Share this post


Link to post
Share on other sites
  • 0

Exemple:

quest test begin
	state start begin
		when login begin
			say("coucou")
		end
	end
end

 

Là rien de compliqué. Une quête simple qui dit "Coucou" à chaque connexion sur le jeu (ou changement de map). Maintenant, comment je fais pour que ça ne le fasse qu'une seule fois:

 

quest test begin
	state start begin
		when login begin
			say("coucou")
			set_state(__COMPLETE__)
		end
	end
	
	state __COMPLETE__ begin
	end
end

 

Une fois qu'on a dit coucou, je set la state du joueur à __COMPLETE__. Et comme tu peux le voir, il n'y a rien dans la state __COMPLETE__. C'est juste un moyen pour que le serveur ne recommence pas à state start begin à chaque fois.

Dans ton cas, c'est spécial car tu as plusieurs state. Si le joueur se trouve déjà dans une state qui n'est pas start, le serveur restera dans celle la et n'ira pas chercher à exécuter la state start.

 

Dans ton cas il suffit de faire set_state(start) et la quête recommencera à la state start. Voici un exemple:

 

quest test begin
	state start begin
		when login begin
			say("coucou")
			set_state(etape1)
		end
	end

	state etape1 begin
		when login begin
			say("Bienvenue dans l'étape 1 !")
			set_state(start)
		end
	end
end

La première fois que le joueur va se co, il va obtenir le message: coucou.

La deuxième fois qu'il va se co ou changer de map, il va obtenir le message: Bienvenue dans l'étape 1

La troisième fois qu'il va se co au changer de map, il va obtenir le message coucou 

 

Techniquement, je fais un set_state(etape1). Ensuite une fois qu'il s'est reco ou changer de map, et qu'il a obtenu le message de bienvenue dans l'étape 1, je fais set_state(start) pour faire redémarrer la quête du joueur.

 

Je sais pas si je suis clair, hésite pas si tu as des questions.

Share this post


Link to post
Share on other sites
  • 0

Ok, merci , je penses avoir compris :-).

 

Juste "la state" de la quête est physiquement stockée où dans le jeu, stp ? sur la base SQL ou dans un fichier particulier ? car à chaque redémarrage du serveur, il connais déja le status de toutes quêtes.

 

merci en tout cas pour le super détail de l'explication :-).

 

 

Share this post


Link to post
Share on other sites
  • 0

C'est stocké dans la table quest (base de données player).

On stocke la state actuelle du joueur et comme ça on sait à quel endroit dans la quête le joueur se trouve.

Share this post


Link to post
Share on other sites
  • 0

Ok merci encore, je vais regarder ça en rentrant ce soir.

 

Si tu as un exemple de table player/quest pour me montrer où je trouve cette valeur, car de mémoire, toutes mes quêtes en sont __status avec une collone suivante avec des chiffres.

Share this post


Link to post
Share on other sites
  • 0

 

fdjTO40.png

 

Tu as le nom de la state dans la colonne szState.

Pas sûr mais je crois que __status est = à start.

Share this post


Link to post
Share on other sites
  • 0

OK, c'est good j'ai trouvé, la colonne IValue donne state ou se trouve la quete et ces nombres sont définis à cet endroit : /usr/metin2/share/locale/france/quest/object/state

 

merci encore pour ton aide

Share this post


Link to post
Share on other sites
  • 0
Le 23/05/2018 à 18:45, Testuff a dit :

Juste "la state" de la quête est physiquement stockée où dans le jeu, stp ?

 

Alors, petite précision avant de clore le sujet;

 

Les identifiants des states sont stockés à deux endroits; le premier c'est pour savoir quel est l'identifiant du state et il est stocké ici:

/usr/metin2/share/locale/france/quest/object/state

L'autre, il est stocké dans la base player.quest, plus en détail:

image.thumb.png.468572f7f563849f0b25a7b489b1ea28.png

 

dwPID correspond à l'ID du personnage concerné.

szName correspond au nom de la quête.

La colonne szState peut valoir soit "__status", soit un nom de variable (qu'on déclare avec "setf" ou "setqf")

Ensuite, szState "__status" correspond au state en cours de la quête.

 

Modifier le state par un autre (suivi d'un redémarrage serveur ou un /reload q en jeu) permettra de modifier directement le state :).

 

P.S.: Pour passer ton sujet en résolu, édite ton premier message pour modifier la balise de titre de [En cours] à [Résolu].

 

La bise!

Edited by Kameyu

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.