Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Quete pour monde persistant

Par Prophet le 6/9/2002 à 6:41:13 (#2106107)

Bonjour.

J'ai une petite question au sujet des quete dans les monde persistant. Est il possible que la quete ne soit realisable qu'une seul foit par joueur?

Car pour linstant, lorsque le joueur accepte la quete, la variable de la quete passe a 1, et lorsquil la fini elle revient a 0 pour que qun autre joueur puisse la faire, mais le probleme est qu'elle devient realisable indefiniment par tout les joueurs, et puisque quil y a une recompense au bout, je n'apprecie pas trop.

Alors y a t'il un moyen de 'storer' une variable sur le joueur apres quil ai fini la quete?

Merci d'avance :)

Par miriandel le 6/9/2002 à 9:55:32 (#2106490)

Bien sûr, tu peux stocker des variables (Int, Float, Object et Location) sur n'importe quel objet du monde, y compris une armoire...

Si tu joues en Servervault, bien sûr :merci:

Par Gargantuel le 6/9/2002 à 10:12:18 (#2106565)

Je te suggere d'utiliser ces fonctions là :


// Assignation d'une quete à un groupe de joueurs
void SetQuest(string sQuestName, int iState, object oPC)
{
if (!GetIsPC(oPC))
{
WriteLog("Tentative d'ajout d'une quete sur un objet invalide", LOG_ERROR);
} else {
object oPCFaction = GetFirstFactionMember(oPC);
while (GetIsObjectValid(oPCFaction))
{
AddJournalQuestEntry(sQuestName, iState, oPCFaction);
SetLocalInt(oPCFaction, sQuestName, iState);
oPCFaction = GetNextFactionMember(oPC);
WriteLog(("La quete " + sQuestName + " a ete fixe a " + IntToString(iState) + " pour ce joueur.", LOG_INFO, oPCFaction);
}
}
}

// Recuperation de l'etat d'une quete pour un joueur
int GetQuest(string sQuestName, object oPC)
{
if (!GetIsPC(oPC))
{
WriteLog("Tentative de lecture de l'etat d'une quete sur un objet invalide", LOG_ERROR);
return 0;
} else {
return GetLocalInt(oPC, sQuestName);
}
}

Le plus simple serait de coller la variable sur les joueurs eux meme. Comme ca pas de risque qu'un joueur la fasse deux fois.

Il existe quand meme une faille à mon systeme : Si un joueur n'ayant pas réalisé la quete la lance pour son groupe, ceux du groupe ayant déjà fait cette quete la recommencent.
C'est à toi de voir si tu acceptes cette situation ou pas.

NB: La fonction WriteLog est une fonction de gestion des logs que j'ai développé (voir liste des scripts pret à servir). Si tu ne t'en sers pas, vire les lignes WriteLog.

Par Kemay le 6/9/2002 à 15:42:19 (#2108631)

Le problème de mettre les variables sur le joueur lui même dans un monde persistant, c'est qu'elles ne seront pas sauvegardées s'il se déconnecte. Utiliser le log sur les joueurs ne me paraît pas une très bonne idée puisque si le joueur est déconnecté et se reconnecte la variable aura disparu.

A mon avis, pour les mondes persistants, le mieux est de faire des variables sur le module de cette façon

SetLocalInt(GetModule(),GetPCPlayerName(oPC)+GetName(oPC)+"Nom_de_la_Variable");
Et de sauvegarder ces variables sous forme de logs régulièrement, pour pouvoir les réinclure aux modules la prochaines fois que tu le charge. Le seul défaut de cette méthode, c'est qu'un même joueur ne doit pas avoir deux personnages du même nom sur le serveur, mais ca ne me semble pas un défaut très gênant :)

Par Trollky le 6/9/2002 à 16:36:15 (#2109059)

Si tu veux faire un journal persistant (si j'ai bien compris) il te suffit d'utiliser un script tout fait par ici. Je te rappelle que pour faire fonctionner ce script tu auras besoin du PWDB.
En te rappellant que le PWDB inclut de nouvelles fonctions qui sont utilisés par ce script (include) . Il faut que tu l'importes à ton module pour utiliser le script du journal persistant.
Ah oui j'allais oublier, le Persistant World Economy Management System tu le trouveras par là.

Dsl je suis speed :rolleyes:

Par Prophet le 6/9/2002 à 19:44:20 (#2110336)

Merci bcp pour vos reponse ;)

Mais finalement je vais abandonner mon mod persistant (trop compliquer faire les scripts lol).

JOL Archives 1.0.1
@ JOL / JeuxOnLine