Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Quete pour monde persistant
Quete pour monde persistant
Par Prophet le 6/9/2002 à 6:41:13 (#2106107)
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)
Si tu joues en Servervault, bien sûr :merci:
Par Gargantuel le 6/9/2002 à 10:12:18 (#2106565)
// 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)
A mon avis, pour les mondes persistants, le mieux est de faire des variables sur le module de cette façonSetLocalInt(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)
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)
Mais finalement je vais abandonner mon mod persistant (trop compliquer faire les scripts lol).
JOL Archives 1.0.1
@ JOL / JeuxOnLine