JeuxOnLineForumsPlusConnectés : 386 (sites) | 898 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [biblio]Sauvegarde des variables locales par StoreCampaignObject RSS
   
Répondre
Partager Outils Rechercher
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 

[biblio]Sauvegarde des variables locales par StoreCampaignObject

Bon, bien a t'en faire, qu'elle soit dispo au moment où ca sort ^^ (vivi j'ai pas trainé, j'en avais besoin pour le projet dont je parle quelques lignes plus bas ^^)

Donc, c'est tout simple : utilisez les fonctions Get/Set/DeleteVariableInt/Float/Location/String au lieux des foncitons Get/Set/DeleteLocalInt/Float/Location/String
et la fonction StVaCampaignObject et ReVaCampaignObject au lieu de StoreCampaignObject et RetrieveCampaignObject, et bien sur inclusez la biblio dans votre script avec

#include "lib_StVa"

et c'est tout ce qu'il y a a faire , après cela, vous pouvez enregistrer et restaurer vos objets, ils conserveront leurs variables

Code PHP:
//::///////////////////////////////////////////////
//:: Systeme StVa, beta 1.1
//:: lib_StVa.nss
//:://////////////////////////////////////////////
/*
Sauvegarde des variables locales d'un object stoque
dans les bases de donnes de peristance


Utilisation :

Il suffit d'utiliser les fonctions :
Par SetVariable*, GetVariable* et DeleteVariable*
a la place des SetLocal*, GetLocal*, DeleteLocal*
et d'utiliser les fonctions
StVaCampaignObject et StReCampaignObject
a la place des StoreCampaignObject et RetrieveCampaignObject

de plus, il est fortement recommende d'utiliser une base de donnee
*/
//:://////////////////////////////////////////////
//:: Created By: Azrael07
//:: Created On: 28/04/2003
//:://////////////////////////////////////////////

//Enregistrer la variable locale sur oObject de type Vector, de nom sName et de valeur vVector
void SetLocalVector(object oObjectstring sNamevector vVector);
//Récupère la variable locale de type Vector sur oObject, de nom sName
//Valeur renvoyée en cas d'erreur : 0.0f, 0.0f, 0.0f
vector GetLocalVector(object oObjectstring sName);
//Efface la variable locale de type Vector sur l'object oObject, de nom sName
void DeleteLocalVector(object oObjectstring sName);

//Enregistrer la variable locale sur oObject de type Float, de nom sName et de valeur fValue
//en utilisant le système de peristance StVa
void SetVariableFloat(object oObjectstring sNamefloat fValue);
//Enregistrer la variable locale sur oObject de type Integer, de nom sName et de valeur nValue
//en utilisant le système de peristance StVa
void SetVariableInt(object oObjectstring sNameint nValue);
//Enregistrer la variable locale sur oObject de type Vector, de nom sName et de valeur vVector
//en utilisant le système de peristance StVa
void SetVariableVector(object oObjectstring sNamevector vVector);
//Enregistrer la variable locale sur oObject de type Location, de nom sName et de valeur lLocation
//en utilisant le système de peristance StVa
void SetVariableLocation(object oObjectstring sNamelocation lLocation);
//Enregistrer la variable locale sur oObject de type String, de nom sName et de valeur sString
//en utilisant le système de peristance StVa
void SetVariableString(object oObjectstring sNamestring sString);

//Récupère la variable locale de type Float sur oObject, de nom sName
//en utilisant le système de peristance StVa
//Valeur renvoyée en cas d'erreur : 0.0f
float GetVariableFloat(object oObjectstring sName);
//Récupère la variable locale de type Int sur oObject, de nom sName
//en utilisant le système de peristance StVa
//Valeur renvoyée en cas d'erreur : 0
int GetVariableInt(object oObjectstring sName);
//Récupère la variable locale de type Vector sur oObject, de nom sName
//en utilisant le système de peristance StVa
//Valeur renvoyée en cas d'erreur : 0.0f, 0.0f, 0.0f
vector GetVariableVector(object oObjectstring sName);
//Récupère la variable locale de type Location sur oObject, de nom sName
//en utilisant le système de peristance StVa
location GetVariableLocation(object oObjectstring sName);
//Récupère la variable locale de type String sur oObject, de nom sName
//en utilisant le système de peristance StVa
//Valeur renvoyée en cas d'erreur : ""
string GetVariableString(object oObjectstring sName);

//Efface la variable locale de type Float sur l'object oObject, de nom sName
//en utilisant le système de peristance StVa
void DeleteVariableFloat(object oObjectstring sName);
//Efface la variable locale de type Int sur l'object oObject, de nom sName
//en utilisant le système de peristance StVa
void DeleteVariableInt(object oObjectstring sName);
//Efface la variable locale de type Vector sur l'object oObject, de nom sName
//en utilisant le système de peristance StVa
void DeleteVariableVector(object oObjectstring sName);
//Efface la variable locale de type Location sur l'object oObject, de nom sName
//en utilisant le système de peristance StVa
void DeleteVariableLocation(object oObjectstring sName);
//Efface la variable locale de type String sur l'object oObject, de nom sName
//en utilisant le système de peristance StVa
void DeleteVariableString(object oObjectstring sName);

//Stoque l'objet oObject dans le fichier de données sCampaignName et de référence sVarName
//Stoque également toutes les variables locales associées à l'objet
//oPlayer: joueur associé à l'objet stoqué, aucun si non spécifié
//Renvoie 1 si l'opération réussie, 0 si un échec se produit
int StVaCampaignObject(string sCampaignNamestring sVarNameobject oObjectobject oPlayer=OBJECT_INVALID);

//Restore l'objet stoqué dans le fichier de données sCampaignName, de référence sVarName, sur la locatin locLocation
//Restore également toutes les variables locales associées à l'objet
//Si oOwner est spécifié, l'objet sera créé dans son inventaire si possible
//oPlayer: joueur associé à l'objet stoqué, aucun si non spécifié
object ReVaCampaignObject(string sCampaignNamestring sVarNamelocation locLocationobject oOwner OBJECT_INVALIDobject oPlayer=OBJECT_INVALID);

void ERROR(string sMessageint bDMs TRUE)
{
    
WriteTimestampedLogEntry(sMessage);
    if(
bDMsSendMessageToAllDMs(sMessage);
}

//Enregistrer la variable locale sur oObject de type Vector, de nom sName et de valeur vVector
void SetLocalVector(object oObjectstring sNamevector vVector)
{
    
SetLocalFloat(oObjectsName "x"vVector.x);
    
SetLocalFloat(oObjectsName "y"vVector.y);
    
SetLocalFloat(oObjectsName "z"vVector.z);
}

//Récupère la variable locale de type Vector sur oObject, de nom sName
//Valeur renvoyée en cas d'erreur : 0.0f, 0.0f, 0.0f
vector GetLocalVector(object oObjectstring sName)
{
    return 
Vector(GetLocalFloat(oObjectsName "x"), GetLocalFloat(oObjectsName "y"), GetLocalFloat(oObjectsName "z"));
}

//Efface la variable locale de type Vector sur l'object oObject, de nom sName
void DeleteLocalVector(object oObjectstring sName)
{
    
DeleteLocalFloat(oObjectsName "x");
    
DeleteLocalFloat(oObjectsName "y");
    
DeleteLocalFloat(oObjectsName "z");
}

//Enregistrer la variable locale sur oObject de type Float, de nom sName et de valeur fValue
//en utilisant le système de peristance StVa
void SetVariableFloat(object oObjectstring sNamefloat fValue)
{
    
string sType "1";

    
string sList GetLocalString(oObject"StVa_list");
    if(
FindSubString(sListsType sName) == -1SetLocalString(oObject"StVa_list"sList sType sName ";");

    
SetLocalFloat(oObjectsNamefValue);
}

//Récupère la variable locale de type Float sur oObject, de nom sName
//en utilisant le système de peristance StVa
//Valeur renvoyée en cas d'erreur : 0.0f
float GetVariableFloat(object oObjectstring sName)
{
    return 
GetLocalFloat(oObjectsName);
}

//Enregistrer la variable locale sur oObject de type Integer, de nom sName et de valeur nValue
//en utilisant le système de peristance StVa
void SetVariableInt(object oObjectstring sNameint nValue)
{
    
string sType "2";

    
string sList GetLocalString(oObject"StVa_list");
    if(
FindSubString(StVa_listsType sName) == -1SetLocalString(oObject"StVa_list"sList sType sName ";");

    
SetLocalInt(oObjectsNamenValue);
}

//Récupère la variable locale de type Int sur oObject, de nom sName
//en utilisant le système de peristance StVa
//Valeur renvoyée en cas d'erreur : 0
int GetVariableInt(object oObjectstring sName)
{
    return 
GetLocalInt(oObjectsName);
}

//Enregistrer la variable locale sur oObject de type Vector, de nom sName et de valeur vVector
//en utilisant le système de peristance StVa
void SetVariableVector(object oObjectstring sNamevector vVector)
{
    
string sType "3";

    
string sList GetLocalString(oObject"StVa_list");
    if(
FindSubString(StVa_listsType sName) == -1SetLocalString(oObject"StVa_list"sList sType sName ";");

    
SetLocalVector(oObjectsNamevVector);
}

//Récupère la variable locale de type Vector sur oObject, de nom sName
//en utilisant le système de peristance StVa
//Valeur renvoyée en cas d'erreur : 0.0f, 0.0f, 0.0f
vector GetVariableVector(object oObjectstring sName)
{
    return 
GetLocalVector(oObjectsName);
}

//Enregistrer la variable locale sur oObject de type Location, de nom sName et de valeur lLocation
//en utilisant le système de peristance StVa
void SetVariableLocation(object oObjectstring sNamelocation lLocation)
{
    
string sType "4";

    
string sList GetLocalString(oObject"StVa_list");
    if(
FindSubString(StVa_listsType sName) == -1SetLocalString(oObject"StVa_list"sList sType sName ";");

    
SetLocalLocation(oObjectsNamelLocation);
}

//Récupère la variable locale de type Location sur oObject, de nom sName
//en utilisant le système de peristance StVa
location GetVariableLocation(object oObjectstring sName)
{
    return 
GetLocalLocation(oObjectsName);
}

//Enregistrer la variable locale sur oObject de type String, de nom sName et de valeur sString
//en utilisant le système de peristance StVa
void SetVariableString(object oObjectstring sNamestring sString)
{
    
string sType "5";

    
string sList GetLocalString(oObject"StVa_list");
    if(
FindSubString(StVa_listsType sName) == -1SetLocalString(oObject"StVa_list"sList sType sName ";");

    
SetLocalString(oObjectsNamesString);
}

//Récupère la variable locale de type String sur oObject, de nom sName
//en utilisant le système de peristance StVa
//Valeur renvoyée en cas d'erreur : ""
string GetVariableString(object oObjectstring sName)
{
    return 
GetLocalString(oObjectsName);
}

void DeleteVariable(object oObjectstring sNameint nType)
{
    
string sList GetLocalString(oObject"StVa_list");
    
int nLength GetStringLength(sList);

    
string sType IntToString(nType);
    
int nStart FindSubString(sListsType sName);
    
int nNameLength GetStringLength(sName);

    
sList GetSubString(sList0nStart 1) + GetSubString(sListnStart nNameLength 1nLength);
}

//Récupère la variable locale de type Float sur oObject, de nom sName
//en utilisant le système de peristance StVa
//Valeur renvoyée en cas d'erreur : 0.0f
void DeleteVariableFloat(object oObjectstring sName)
{
    
DeleteVariable(oObjectsName1);
    
DeleteLocalFloat(oObjectsName);
}

//Efface la variable locale de type Int sur l'object oObject, de nom sName
//en utilisant le système de peristance StVa
void DeleteVariableInt(object oObjectstring sName)
{
    
DeleteVariable(oObjectsName2);
    
DeleteLocalInt(oObjectsName);
}

//Efface la variable locale de type Vector sur l'object oObject, de nom sName
//en utilisant le système de peristance StVa
void DeleteVariableVector(object oObjectstring sName)
{
    
DeleteVariable(oObjectsName3);
    
DeleteLocalVector(oObjectsName);
}

//Efface la variable locale de type Location sur l'object oObject, de nom sName
//en utilisant le système de peristance StVa
void DeleteVariableLocation(object oObjectstring sName)
{
    
DeleteVariable(oObjectsName4);
    
DeleteLocalLocation(oObjectsName);
}

//Efface la variable locale de type String sur l'object oObject, de nom sName
//en utilisant le système de peristance StVa
void DeleteVariableString(object oObjectstring sName)
{
    
DeleteVariable(oObjectsName5);
    
DeleteLocalString(oObjectsName);
}

//Stoque l'objet oObject dans le fichier de données sCampaignName et de référence sVarName
//Stoque également toutes les variables locales associées à l'objet
//oPlayer: joueur associé à l'objet stoqué, aucun si non spécifié
//Renvoie 1 si l'opération réussie, 0 si un échec se produit
int StVaCampaignObject(string sCampaignNamestring sVarNameobject oObjectobject oPlayer=OBJECT_INVALID)
{
    
string sList GetLocalString(oObject"StVa_list");
    
int nLength GetStringLength(sList);
    
string sCharsName;
    
int nType;

    
int iPass 0;
    for(
iPassiPass <= nLengthiPass++)
    {
        
sChar GetSubString(sListiPass1);
        if(
sChar == ";")
        {
            switch(
nType)
            {
            case 
1SetCampaignFloat(sCampaignNamesVarName sNameGetLocalFloat(oObjectsName), oPlayer); break;
            case 
2SetCampaignInt(sCampaignNamesVarName sNameGetLocalInt(oObjectsName), oPlayer); break;
            case 
3SetCampaignVector(sCampaignNamesVarName sNameGetLocalVector(oObjectsName), oPlayer); break;
            case 
4SetCampaignLocation(sCampaignNamesVarName sNameGetLocalLocation(oObjectsName), oPlayer); break;
            case 
5SetCampaignString(sCampaignNamesVarName sNameGetLocalString(oObjectsName), oPlayer); break;
            default: 
ERROR("Système StVa : nType inexistant");
            }
            
sName "";
            
nType 0;
        }
        else
        {
            if(!
nTypenType StringToInt(sChar);
            else 
sName += sChar;
        }
    }

    
SetCampaignString(sCampaignNamesVarName "StVa_list"sList);
    
int nResult StoreCampaignObject(sCampaignNamesVarNameoObjectoPlayer OBJECT_INVALID);

    return 
nResult;
}

void RecallVariables(object oObjectstring sCampaignNamestring sVarNameobject oPlayer)
{
    
string sList GetCampaignString(sCampaignNamesVarName "StVa_list"oPlayer);
    
int nLength GetStringLength(sList);
    
string sCharsName;
    
int nType;

    
int iPass 0;
    for(
iPassiPass <= nLengthiPass++)
    {
        
sChar GetSubString(sListiPass1);
        if(
sChar == ";")
        {
            switch(
nType)
            {
            case 
1SetLocalFloat(oObjectsNameGetCampaignFloat(sCampaignNamesVarName sNameoPlayer)); break;
            case 
2SetLocalInt(oObjectsNameGetCampaignInt(sCampaignNamesVarName sNameoPlayer)); break;
            case 
3SetLocalVector(oObjectsNameGetCampaignVector(sCampaignNamesVarName sNameoPlayer)); break;
            case 
4SetLocalLocation(oObjectsNameGetCampaignLocation(sCampaignNamesVarName sNameoPlayer)); break;
            case 
5SetLocalString(oObjectsNameGetCampaignString(sCampaignNamesVarName sNameoPlayer)); break;
            default: 
ERROR("Système StVa : nType inexistant");
            }
            
sName "";
            
nType 0;
        }
        else
        {
            if(!
nTypenType StringToInt(sChar);
            else 
sName += sChar;
        }
        
SetLocalString(oObject"StVa_list"sList);
    }
}

//Restore l'objet stoqué dans le fichier de données sCampaignName, de référence sVarName, sur la locatin locLocation
//Restore également toutes les variables locales associées à l'objet
//Si oOwner est spécifié, l'objet sera créé dans son inventaire si possible
//oPlayer: joueur associé à l'objet stoqué, aucun si non spécifié
object ReVaCampaignObject(string sCampaignNamestring sVarNamelocation locLocationobject oOwner OBJECT_INVALIDobject oPlayer=OBJECT_INVALID)
{
    
object oObject RetrieveCampaignObject(sCampaignNamesVarNamelocLocationoOwneroPlayer);
    
RecallVariables(oObjectsCampaignNamesVarNameoPlayer);
    return 
oObject;

pour l'instant, la biblio ne gère par le paramètre "oPlayer", je m'en occuperais le plus vite possible
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
J'ai pas regardé le reste, mais je te signale qu'il y a un petit problème avec les SetVariable*() : à chaque fois que tu veux modifier la variable, son nom est rerajouté à la fin de la liste...
Donc on pourrait passer par un SetLocal*(), si ce n'est que tu ne peut-être sûr d'avoir déjà sauvé une fois la variable avec un SetVariable*().

Donc il faudrait que tu rajoute un test qui vérifie si la variable (avec le bon type) n'est pas déjà dans la liste avant de rajouter son nom.

Bon boulot sinon
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
ah oui, en effet, et pas des moindres d'ailleur, retester la chaine pour voir si la variable existe déjà risque de bouffer pas mal de ressources :/

Cela dit, le système marche quand même, c'est juste qu'on à la une grosse fuite de mémoire, qui risque de devenir vraiment endicapente lorsqu'un objet est souvent modifié.

bon, je travaille la dessus, je vais essayer de trouver une solution économique ^^

Merci jedaï
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Non, ne t'inquiète pas, un findsubstring() ne bouffe pas trop de ressource quand même ! (il renvoie -1 s'il ne trouve pas)
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
bien, ca ne bouffe pas TROP de ressources, mais ce serait quand même ce qui en bouffe le plus dans un SetVariable*

baah, je sais bien que je chipote, mais les fonction SetVariable était vraiment hyper rapides, et le seront un peu moins maintenant ^^

Je change ca d'ici demain
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
bon, voila c'est corrigé, j'ai édité le post au dessus
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Oups :
Code PHP:
string sList GetLocalString(oObject"StVa_list");
if(
FindSubString(StVa_listsType sName) == -1//StVa_list ? connais pas moi ?? (défaite par abandon du compilateur)
     
SetLocalString(oObject"StVa_list"sList sType sName ";"); 
Mais elle compile plus maintenant !!
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Tu la corriges ou tu veux que je le fasse ?
Tiens sinon j'ai une autre idée pour les SetVariable*() pour éviter le FindSubString(), tu peux simplement tester si la variable a déjà une valeur différente de celle par défaut (ceci est uniquement valable pour les float, int et string) pour savoir si elle a déjà été affectée.
Bien sûr c'est moins sûr si le programmeur mélange les SetLocal*() et les SetVariable*(), mais il a qu'à ne pas le faire hein !
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
ralallala, voila ce que c'ets de pas avoir de compilateurs sous la main, on se dis "de toutes facon c'est facile je ferais pas de fautes".... mdr

bon, je corrige. Pour ton idée jedai, vi ca peux marcher en effet, mais je verrais ca une autre fois.

Si tu veux corriger le tout, je veux bien, au moins tu pourras compiler pour pas laisser de fautes (ouf, je rentre vendredi, il ét temp ^_^)
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [biblio]Sauvegarde des variables locales par StoreCampaignObject
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 09h08.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite