Pb avec PUMA

Répondre
Partager Rechercher
Bonjour a tous,

Voila j'utilise le PUMA pour mon serveur et j'ai un petit probleme avec (et aucune des archives ni fait référence)

Donc voila je co avec un PJ, l'ecran de chargement de la dernière zone enregistrée se s'affiche, mais a la fin du chargement de celui ci, cela ouvre un chargement celui ci de la zone de rez et de commencement de mon serveur...*

Donc voila a prioris la sauvegarde de la variable de ma position fonctionne mais je dois avoir un pb avec un script ... par contre le quel ?

Merci d'avance .........


Excuse moi ... quitte à passer pour un bêta ... mais c'est quoi un PUMA ... un animal ? Un animal dans ton serveur ?

Sinon, pour le peu que j'ai capté ... lorsqu'un module est lancé pour la première fois par le serveur, la première connexion fait exactement ce que tu décris, quelque soit le système de persistance utilisé (NWNX ou NWNX-FF). Pour parer à ce problème de première co, il faut temporiser le saut vers l'emplacement de la dernière sauvegarde, ou alors pointer vers une zone, sur laquelle l'évènement OnEnter te renverra vers la dernière zone sauvegardée.

Par contre , sérieux ... c'est quoi PUMA ?
Oui c'est bien un systeme de persistance et des liens sont bien présent dans les archives...


Je suis content de ne pas etre le seul a souffrir de ce probleme, pourriez vous (dsl mais je script vraiment mais vraiment vraiment tres tres peuet tres tres mal) me fournir en script la solution .... s'il vous plait ????
Connait pas les avantages inconvénients mais yavait eu un post ya qqs mois sur ce sujet, les émminences de Maskado avaient longuement débattu à ce sujet pour comparer PUMA NWNX et la BDD Bio...

Je sais pas si c'est en persistant... C'est assez vieux
Donne nous le script qui est présent sur l'évènement OnClientEnter de ton module.

Comme ça on te dira la modification à faire (sachant que c'est tout bête à priori)
Pour ce qui concerne les avantages et les inconvénients je ne pourais vous les donner ... PUMA est sympa et assez facile a mettre en place .... permet de sauvegarder la localisation (quand ca marce ... lol) ... c rat qui a fait en colaboration avec d'autres DIEUX (je ne pourais redonné les noms mais le fait est qu'ils sont énormes)

Et voici mon script :

#include "cnr_recipe_utils"
#include "pwum_functions"
void main()
{
object oPlayer;
object oPC;
oPC = GetEnteringObject();
oPlayer = GetEnteringObject();
if (GetLocalInt(GetModule(), GetName(oPlayer) + "LocationSaved") == FALSE)
{
ResumePCLocation(oPlayer);
SetLocalInt(GetModule(), GetName(oPlayer) + "LocationSaved", TRUE);
}


///////////////////////////////////////////////////////////
// Make sure all players carry the new Tradeskill Journal.
///////////////////////////////////////////////////////////

// First, check if they have either journal, new or old.
object oJournal = CnrGetItemByResRef("cnrtradejournal", oPC);
if (oJournal == OBJECT_INVALID)
{
//////////////////////////
// First time in module....
//////////////////////////

// Strip player of all default game items here.

//object oItem = GetFirstItemInInventory(oPC);
//while (oItem != OBJECT_INVALID)
//{
// DestroyObject(oItem);
// oItem = GetNextItemInInventory(oPC);
//}

// create a journal for the player
oJournal = CreateItemOnObject("cnrtradejournal", oPC);
}
else
{
// The player has a journal. Now determine what type it is, new or old

if (GetTag(oJournal) != "cnrTradeJournal")
{
// Player has the old type journal. We need to convert the XP stored in its tag
// to the new format, then we can destroy the old journal and create a new journal.

CnrConvertOldJournalXPToNewFormat(oJournal, oPC);
DestroyObject(oJournal);
CreateItemOnObject("cnrtradejournal", oPC);
}
//else
//{
// Player has the new type journal. nothing needs to be done!
//}

}


// Allow the builder to set the trade level caps for this PC.
// execute hook script
ExecuteScript("hook_set_lev_cap", oPC);

int bInitRecipesOnModuleLoad = CnrGetPersistentInt(OBJECT_SELF, "CnrBoolInitRecipesOnModuleLoad");
bInitRecipesOnModuleLoad = bInitRecipesOnModuleLoad || CNR_BOOL_INIT_RECIPES_ON_MODULE_LOAD;
if (bInitRecipesOnModuleLoad == TRUE)
{
int nRecipeCount = GetLocalInt(GetModule(), "CnrRecipeCount");
SendMessageToPC(oPC, "Total CNR recipe count = " + IntToString(nRecipeCount));
}
}


a première vue ... je te dirai d'essayer ca, en jouant sur la valeur afin de voir lors de la PREMIERE connexion si tu arrives à temporiser le saut vers l'emplacement sauvegardé lors de la dernière deco.

DelayCommand(XX.X,ResumePCLocation(oPlayer));

ou XX.X vaut une certaine valeur comprise en 1.0 et 100.0 à toi de voir.

Mais si j'étais toi et au regard de ton code voici ce que je ferai (c'est juste un conseil pas une imposition)

1 - Tu créés une zone microset de 2x2
2 - Tu places le point d'atterrissage du module sur cette zone.
3 - Tu laisses ton script OnEnter du module tel quel
4 - Dans l'évènement OnEnter de la zone microset que tu viens de créer, tu places le script suivant :


#include "cnr_recipe_utils"
#include "pwum_functions"
void TestPresence(object oPC,object oArea)
{
if(GetArea(oPC) == oArea)
AssignCommand(oPC,JumpToObject(GetObjectByTag("POINT_DE_SAUT_PAR_DEFAUT")));
}

void main()
{
object oPC = GetEnteringObject();
// on force le joueur a se repositionner a sa dernière location
ResumePCLocation(oPC);
SetLocalInt(GetModule(), GetName(oPC) + "LocationSaved", TRUE);
// Cas ou il n'y a pas de dernière location et ou le joueur reste toujours sur cette zone
DelayCommand(5.0,TestPresence(oPC,OBJECT_SELF));
}


Nota Bene : cette zone est juste une zone tampon permettant de renvoyer un joueur sur sa dernière zone en cas d'échec du script OnEnter du module. Donc, stp, pas de placables, pas de PNJ, RIEN du tout sur cette zone.

POINT_DE_SAUT_PAR_DEFAUT est un point sur une carte quelconque (sauf la carte microset que tu viens de créer) afin que le joueur en cas de première connexion à ton monde ne reste pas planté sur la zone microset !
En fait c'est même certain que le problème vient du fait que le "ResumePCLocation(oPlayer);" est placé dans le OnClientEnter du module... Il suffit de le placer dans le OnEnter de la zone de départ. C'est tout bête, mais on n'y pense qu'après...
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés