JeuxOnLineForumsPlusConnectés : 631 (sites) | 1297 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [Beta Test] BD Bioware RSS
   
Répondre
Partager Outils Rechercher
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
Post

[Beta Test] BD Bioware

Bon on commence les hostilités, on va commencer par la liste des fonctions disponibles dans cette BD. Je viens seulement de l'avoir donc c'est pas encore testé mais je m'y met à la première heure demain
Voilà ce qui nous attends

SetCampaignFloat
SetCampaignInt
SetCampaignVector
SetCampaignLocation
SetCampaignString
DestroyCampaignDatabase
GetCampaignFloat
GetCampaignInt
GetCampaignVector
GetCampaignLocation
GetCampaignString
DeleteCampaignVariable
StoreCampaignObject
RetrieveCampaignObject

Voilà pour ce soir

Jaha Effect
Lien direct vers le message - Vieux
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
Allez quelques indices sur ces fonctions

Code PHP:
// Campaign variable table database control.
// Use the set functions to add/change a variable to a campaign database.
// Use the get functions to retrieve the variable from a campaign database
// Use the delete functions to remove the variable from a campaign database.
// The database name must be the same for both set and get functions. It IS case sensitive.
// The var name must be unique acrossed the entire database.
// If you want a variable to pertain to a specific player in the game, provide a player object.
void SetCampaignFloat   (string sCampaignNamestring sVarNamefloat flFloat,    object oPlayer=OBJECT_INVALID);
void SetCampaignInt     (string sCampaignNamestring sVarNameint nInt,         object oPlayer=OBJECT_INVALID);
void SetCampaignVector  (string sCampaignNamestring sVarNamevector vVector,   object oPlayer=OBJECT_INVALID);
void SetCampaignLocation(string sCampaignNamestring sVarNamelocation locLocationobject oPlayer=OBJECT_INVALID);
void SetCampaignString  (string sCampaignNamestring sVarNamestring sString,   object oPlayer=OBJECT_INVALID);

// This will destroy the entire campaign database if it exists.
void DestroyCampaignDatabase(string sCampaignName);

float    GetCampaignFloat   (string sCampaignNamestring sVarNameobject oPlayer=OBJECT_INVALID);
int      GetCampaignInt     (string sCampaignNamestring sVarNameobject oPlayer=OBJECT_INVALID);
vector   GetCampaignVector  (string sCampaignNamestring sVarNameobject oPlayer=OBJECT_INVALID);
location GetCampaignLocation(string sCampaignNamestring sVarNameobject oPlayer=OBJECT_INVALID);
string   GetCampaignString  (string sCampaignNamestring sVarNameobject oPlayer=OBJECT_INVALID);

// This will remove ANY campaign variable. Regardless of type.
void DeleteCampaignVariable(string sCampaignNamestring sVarNameobject oPlayer=OBJECT_INVALID);

// Stores an object with the given id.
// Returns 0 if it failed, 1 if it worked.
int StoreCampaignObject(string sCampaignNamestring sVarNameobject oObjectobject oPlayer=OBJECT_INVALID);

// Use RetrieveCampaign with the given id to restore it.
// If you specify an owner, the object will try to be created in their repository
// If the owner can't handle the item (or if it's a creature) it will be created on the ground.
object RetrieveCampaignObject(string sCampaignNamestring sVarNamelocation locLocationobject oOwner OBJECT_INVALIDobject oPlayer=OBJECT_INVALID); 
Jaha Effect
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Ça sent bon
Lien direct vers le message - Vieux
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
Bon ben j'ai pas pu résister, il a fallu que je fasse un petit test vite fait.
Déjà l'installe, il s'avère que Bioware voulait bien faire en proposant dans leur fichier de dl, un nwserver_database.exe et un nwmain_database.exe. Mais pas de bol ces deux exe ne marchent pas avec la BD, par contre la 1.29 que tout le monde a chez soi supporte très bien la BD.
Un nouveau nwscript.nss avec les nouvelles fonctions à placer dans l'override.
Un joli répertoire Database qui ne sert strictement à rien car la BD crée directement sous la racine de NWN les fichiers de base de donnée.
Et une modif du fichier NWN.ini qui indique l'emplacement du repertoire Database qui ne sert à rien puisque la BD ne met rien dans ce répertoire.
Enfin bon, on s'en fout puisque ça marche avec nwmain.exe et nwserver.exe et c'est le principal.

J'ai fais des petits tests rapide, Get/SetCampaignInt et String marche très très bien, on coupe le serveur, on redémarre et on récupère ces variables sans aucun prob.
Par contre j'ai un petit doute sur les float, je sais pas si c'est le Set ou le GetCampaignFloat qui merde mais visiblement, il ne m'a pas renvoyé la float que je lui avait assigné dans le script.
Je vérifierais si c'est un cas particulier ou pas après avoir dormi un peu

Voilà pour cette nuit
....
[Edit]
Raté, j'arrive pas à dormir.
Alors le truc du Set/GetCampaignFloat. J'ai fait un petit dialogue avec ce script dedans
Code PHP:
void main()
{
    
object oPC GetPCSpeaker ();
    
SetCampaignFloat("test""float"18.075oPC);
    
SetLocalFloat(oPC"float2"18.075);

et je verifie avec
Code PHP:
void main()
{
    
object oPC GetPCSpeaker();
    
float fFloat GetCampaignFloat("test""float",oPC);
    
float fFloat2 GetLocalFloat(oPC,"float2");
    
SpeakString(FloatToString(fFloat));
    
SpeakString(FloatToString(fFloat2));

Seulement le prob c'est que le SpeakString me renvoit 18.074998856 au lieu de 18.075, les deux tests me renvois ça, que ce soit avec les float persistants ou les float locaux.
C'est un bug connu ? J'avais jamais remarqué. Je me demande si c'est pas le FloatToString qui m'arrondit ça de manière un peu louche ?
En ce qui concerne les locations, ça marche très bien aussi, on va pouvoir passer à plus sérieux

Jaha Effect
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
Bon, bien c'est grosso modo ce dont on s'attendait, enfin, en ce qui me conserne, ca m'a l'air interessant, je pense que je vais opter pour ce système.

Citation:
Seulement le prob c'est que le SpeakString me renvoit 18.074998856 au lieu de 18.075, les deux tests me renvois ça, que ce soit avec les float persistants ou les float locaux.
bien....... étrange en effet ^_^' j'avais jamais vu.

Essaye d'afficher la valeur en la multipliant avant le FloatToString pour essayer de cibler le problème (c'est vrai que c'est le genre de salle blague qui peut fouttre en l'air une aprem de debugging ca :/ )

La question que je me pose (je pense que la réponce est oui, mais on ne sais jamais) : quand on enregistre un objet dans la database par un StoreCampainObject, les variables locales sont enregistrées aussi ?
Lien direct vers le message - Vieux
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
Citation:
Provient du message de Azrael07
La question que je me pose (je pense que la réponce est oui, mais on ne sais jamais) : quand on enregistre un objet dans la database par un StoreCampainObject, les variables locales sont enregistrées aussi ?
Il semble malheureusement que celà ne soit pas le cas, aucun objet n'a ces variables locales de sauvées pour le moment quand on enregistre un objet dans la BD.
Je dis pour le moment parce que ça peut très bien évoluer

Jaha Effect
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
bah... de toutes facon ca se bidouille... c'est pas un problème trop gravissime ^^, mais c'est quand même un gros point négatif du système.
Tu veux pas aller crier un peu ?
Lien direct vers le message - Vieux
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
Citation:
Provient du message de Azrael07
Tu veux pas aller crier un peu ?
Ouais tien je vais faire ça
*pars en hurlant*

Jaha Effect
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Bon pour le problème des float, vous prenez pas la tête, c'est tout à fait normal, quel que soit le langage de programmation, du moins si on fonctionne en précision 'double' : En réalité les float sont des 'double' qui ne peuvent prendre qu'un nombre de valeur donné, dont 18.075 ne fait pas partie, donc on arrondit à la valeur 'possible' la plus proche, ici 18.0745..

Donc aucune erreur de Bioware ici, c'est une limitation commune au mode de stockage des nombres en virgule flottante (les autres solutions, plus précises, sont trop gourmande en espace sur le disque et sans intérêt pour un usage courant, par contre pour des mathématiciens....).

Je signale d'ailleurs que si tu essaie avec un float constant (c'est à dire que tu fait directement FloatToString( 18.075 ) ) tu obtiendras normalement le même résultat.

Par contre le système semble se conformer à ce qui était prévu et pour l'instant c'est plein de bonnes nouvelles, même le StoreObject() est récupérable, avec les nouvelles fonctions on pourra facilement faire une bidouille (faudra juste penser à stocker quelque part la liste des variables locales à sauver sur un objet, donc modifier les SetLocal...() pour qu'ils enregistrent le nom de leur variable dans une local string au nom bien définie 'list_pvar' par exemple).
Lien direct vers le message - Vieux
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
Voilà qui éclaire un grand coup ma lanterne
Au moins ça m'évite de chercher 50 ans pour un truc qui est 'normal'

Jaha Effect
Lien direct vers le message - Vieux
Mercius
Roi
 
Une question me vient à l'esprit : Peut-on accéder aux variables, lorsque le serveur est offline, par le biais d'un fichier (ou autre)?
(comme par exemple avec MySQL, lorsque l'on visionne les enregistrements)
Lien direct vers le message - Vieux
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
Pour info, on peut accéder aux tables de la BD via Access avec les derniers drivers Microsoft ODBC (6.1.8629.1) pour FoxPro mais on peu les lire avec n'importe quoi qui gère les DBase/xBase.

Jaha Effect
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
En effet, Jedaï a raison

J'ai eu ce même problème mais pô avec des variables de scripts mais plutôt avec le positionnement d'objets plaçables.

J'ai essayé de positionner une dalle (walkable héhé) exactement au milieu d'une tuile, du genre x=35 & y=45.
Le résultat est que quoi je fasse, en vérifiant avec Leto j'avais toujours des 44.9985441 ou 35.0000001.

Le principe est le même
Lien direct vers le message - Vieux
Mercius
Roi
 
Citation:
Provient du message de Jaha Effect
Pour info, on peut accéder aux tables de la BD via Access avec les derniers drivers Microsoft ODBC (6.1.8629.1) pour FoxPro mais on peu les lire avec n'importe quoi qui gère les DBase/xBase.

Jaha Effect
je suppose donc, qu'il est possible d'utiliser ces flags sur des sites web. Coup de maître si cela est possible, car Bioware met ainsi hors-jeu tous les systèmes de persistance.

Autre question : As-tu testé, si lors de la deco d'un joueur, un serveur peut enfin enregistrer proprement avec cette db la dernière position? (puis ramener le joueur à cet endroit lors de sa reco)
Lien direct vers le message - Vieux
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
Le problème de la déco du joueur ne tien pas au système de persistance mais à l'événement OnclientExit car quand cet événement est activé, le PC renvoi une location invalide donc ce que l'on pourra rappeler c'est la dernière location du PC.
Par contre l'utilisation de la BD permet des sauvegarde de location plus fréquente sans faire gonfler démesurément le log et pour cause

Jaha Effect
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [Beta Test] BD Bioware
   

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 13h36.
   

© 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