[BD Bioware] Sauvegarde de Location d'un PJ

Répondre
Partager Rechercher
Voilà encore deux petites fonctions tirée du forum de la beta (Post original de Makabey) chargé de sauvegarder et récupérer la location d'un pj quand il déco avec une seule limitation, chaque Area doit avoir un tag unique.
Code PHP:

//use:
// SetCampaignString("DB_Name", "VarName", LocationToString(GetLocation(GetFirstPC())));
// location lLoc = StringToLocation(GetCampaignString("DB_Name", "VarName"));
string LocationToString(location lLocation)
  {
    
/*
       Composes a string from a Location.
       Used mainly to Save a player's position..
    */
    
object oArea GetAreaFromLocation(lLocation);
    
vector vPosition GetPositionFromLocation(lLocation);
    
float fAngle GetFacingFromLocation(lLocation);
    
float fTemp vPosition.100;
    
string sRetour;
    
sRetour GetTag(oArea) + "¤";
    
sRetour += IntToString(FloatToInt(vPosition.100)) + "¤";
    
sRetour += IntToString(FloatToInt(vPosition.100)) + "¤";
    
sRetour += IntToString(FloatToInt(vPosition.100)) + "¤";
    
sRetour += IntToString(FloatToInt(fAngle 100));
    return 
sRetour;
  }

location StringToLocation(string sLocation)
  {
   
/*
      Builds a location object from sLocation, if any part is invalid,
      returns de starting position of the module...
   */
   
int nPos 0;
   
object oArea;
   
vector vPosition;
   
float fAngle;
   
float fX;
   
float fY;
   
float fZ;
   
location lLocation;
   
string sTmp;
   
nPos FindSubString(sLocation"¤");
   if(
nPos == -1) return GetStartingLocation();
   
// Retrouver l'Area
   
sTmp GetSubString(sLocation0nPos);
   
oArea GetObjectByTag(sTmp);
   if(!
GetIsObjectValid(oArea)) {return GetStartingLocation();}
   
sTmp GetStringRight(sLocationGetStringLength(sLocation) - (nPos 1));
   
nPos FindSubString(sTmp"¤");
   if(
nPos == -1) return GetStartingLocation();
   
// Retrouver le 'X'
   
sLocation GetSubString(sTmp0nPos);
   
fX StringToFloat(sLocation) / 100;
   if(
fX 0.1) {return GetStartingLocation();}
   
sLocation GetStringRight(sTmpGetStringLength(sTmp) - (nPos 1));
   
nPos FindSubString(sLocation"¤");
   if(
nPos == -1) return GetStartingLocation();
   
// Retrouver le 'Y'
   
sTmp GetSubString(sLocation0nPos);
   
fY StringToFloat(sTmp) / 100;
   if(
fY 0.1) {return GetStartingLocation();}
   
sTmp GetStringRight(sLocationGetStringLength(sLocation) - (nPos 1));
   
nPos FindSubString(sTmp"¤");
   if(
nPos == -1) return GetStartingLocation();
   
// Retrouver le 'Z'
   
sLocation GetSubString(sTmp0nPos);
   
fZ StringToFloat(sLocation) / 100;
   if(
fZ 0.0) {fZ 0.0;}
   
sLocation GetStringRight(sTmpGetStringLength(sTmp) - (nPos 1));
   
fAngle StringToFloat(sLocation) / 100;
   if(
fAngle 360.0fAngle -= 360.0;
   
vPosition Vector(fXfYfZ);
   
lLocation Location(oAreavPositionfAngle);
   return 
lLocation;
  } 
Jaha Effect
Non, il n'y a aucun intérêt à passer par une telle formule du point de vue stockage, puisque la DB permet de stocker des locations, dans un seul 'bloc' et sans problème....
Mais je pense que l'intérêt de la méthode de Jaha, c'est le contrôle de la validité et de l'existence de la location.... Je me trompe ?

En effet, je me souviens d'un post où l'on avait pu vérifier que faire un GetLocalLocation( object, "nom de location qui n'est pas enregistré), arrêtait l'exécution du script sans avertissement, ce qui peut-être dommageable....(un local string erroné ne renvoie qu'une chaîne vide)
Si c'est pas pour ça, je vois pas ?
Citation :
Provient du message de Jedaï
Mais je pense que l'intérêt de la méthode de Jaha, c'est le contrôle de la validité et de l'existence de la location.... Je me trompe ?

En effet, je me souviens d'un post où l'on avait pu vérifier que faire un GetLocalLocation( object, "nom de location qui n'est pas enregistré), arrêtait l'exécution du script sans avertissement, ce qui peut-être dommageable....(un local string erroné ne renvoie qu'une chaîne vide)
C'est exactement ça.

Jaha Effect
Citation :
Provient du message de Iridian
Question sans doute stupide :
Dans la prochaine version on pourra récupérer ce genre d'information à coup sur lors de la déconnection du joueur ?
Cf. ce topic de Zunder

Apparemment il est possible de récupérer les variables à la sortie du joueur, à condition de faire une petite manip car GetName(oPJ) renvoie une chaîne vide sur le OnClientLeave.

Donc optimistes soyons, optimistes restons
Citation :
Provient du message de Taern
Apparemment il est possible de récupérer les variables à la sortie du joueur, à condition de faire une petite manip car GetName(oPJ) renvoie une chaîne vide sur le OnClientLeave.

Donc optimistes soyons, optimistes restons
Etrange, moi j'y ai vu aucune vrai solution dans ce post.

Jaha Effect
On parle de la même chose au moins ?
La question est : comment est-il possible de récupérer des variables sur un PJ quittant le module.
La réponse, qui semble confirmée par Zunder, est d'utiliser un identifiant (assigné sur le PJ à l'entrée sur le module) sous forme de variable locale, identifiant qui sera utilisé à la place du nom du PJ (puisque GetName n'est pas utilisable sur cet event).

Pour moi, c'est une solution Que je n'ai pas testée personnellement certes, mais c'est une solution.
Oui, surtout que sur le onleave, le pj est un OBJECT_INVALID. Personnellement j'utilise nwnx 2 pour l'instant, et j'arrive très bien à sauvegarder sa location lors de sa deco, et à la récuperer lors de sa reco, après un reboot.
Citation :
Provient du message de Elmo
ptet qu'il voulait dire que deux zone peuvent pas avoir le même tag...
oui c meme sûrement ça, y'a pas vraiment d'ambiguïté en lisant ce que dit Jaha.
M'enfin bon...
Citation :
Provient du message de Dolanor
oui c même sûrement ça, y'a pas vraiment d'ambiguïté en lisant ce que dit Jaha.
M'enfin bon...
Certe, c'est même plutôt clair.

Par contre si le PJ est "OBJECT_INVALID", comment peut-on récupérer son nom qui est dans une variable stockée sur lui même ?
(GetLocalString(oPJ,"variable)=GetLocalString(OBJECT_INVALID,"variable))
Répondre

Connectés sur ce fil

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