JeuxOnLineForumsPlusCréer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Database et bidouillages RSS
   
Répondre
Partager Outils Rechercher
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 

Database et bidouillages

Voila une idée qui est passée dans mon esprit de bidouilleur, qui ouvre ses portes à des possibilités monstrueuses.

Tout part de la nouvelle fonction de persistance StoreCampaignObject
Cette fonction a pour effet d'enregistrer tout les paramètres d'un objet dans la database, pour ainsi le récupérer plus tard.
Pour assurer la fiabilité de la fonction, c'est absolument TOUT les paramètres qui sont enregistrés, des variables que l'on connais bien (points de vie, caractéritiques, et autres), à des paramètres un peu moins courants dans la programmation par nwscript (vitesse, nom, tag), jusqu'au moindre petits détails qui font de l'objet ce qu'il est (model et sons utiliés par exemple).

La database étant, selon les dires de jaha, d'un type asset courant (apparament compatible avec access), la modification de celle-çi doit être relativement aisée, pour ainsi avoir un total controle sur les sauvegardes du module.
Là où tout cela devient vraimnet fabuleux, c'est lorsque l'on immagine toutes les bidouilles que l'on peut faire avec ca. Immaginons des fonctions telle que "SetName", qui à pour effet d'écrire dans les logs un message indiquant que le nom de tel objet doit être modifié, et qui exporte l'objet en question dans la database.
Un programme externe, lancé avec le server (et qui passe totalement inapercu coté client) passe en revue les logs, et detecte les commandes lancé par la fonction SetName, modifiant la base de donnée de sauvegarde selon les demandes de ces commandes.
Il ne nous reste plus qu'a recharger l'objet grace a RetrieveCampaignObject, et nous retrouvons un objet source identique à l'objet cible, mais avec un nouveau nom.

Nous pouvons utiliser exactement le même principe pour un nombre d'applications incalculable : modification de la vitesse des créatures, par exemple.

Si on pousse le système jusqu'au bout, on peut même créer un "blueprint" (je met entre guillement car il ne s'agit pas d'un blueprint proprement parler, mais d'un objet ayant exactement les mêmes caractéristiques) en utilisant le même principe, en configurant chaques variables de l'objet "a la main" (ou en modifiant n'importe quelle données d'un blueprint existant), ce qui peut par exemple permettre un système d'artisanat hyper développé, dans lequel tout type d'arme est possible.

Je n'ai mis la que quelques unes des applications possibles, car c'est la une grande étape qui peut être franchie, et un nouvel univer s'offre a nous, encore totalement inéxploré (je suis a fond dedans mdr)


Evidement, ce n'est pas simple a réalisé (bien que ce ne soit pas hyper complexe non plus), et si j'ai la ferme intention de m'occuper serieusement de ce truc, j'avoue que je ne refuserais pas l'aide d'une ou plusieurs personnes motivés pour bosser la dessus avec moi.

Deuxièmement, je vous laisse aussi me donner la liste de toutes les fonctions profitant de ce système que vous jugeriez utile, je crains ne pas toute pouvoir les ressencer à moi seul ^_^
Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
Hmmm et Question comme ça, si tu peux récupérer le Name d'un perso ou d'un objet ou quoi que ce soit, si j'ai bien tout suivi, on pourrait aisément créer le SetName() etc... pour pouvoir donner à un nom ou modifier le nom d'un objet qui existe dans le monde etc...

Moi, je serai partant suivant ce que tu as besoin Azra . Car avec mon module,mes scripts, et mes systèmes et mon boulot en ce moment c'est un peu chaud
Lien direct vers le message - Vieux
Avatar de Drak Valer
Drak Valer
Alpha & Oméga
 
Avatar de Drak Valer
 
il est en train de dire qu'on pourrait generer des blueprint dynamiquement la ??

par exemple pour un systeme d'artisanat , ou on aurait pas besoin de se taper 12000 bp a taper pr chaq sorte d'objets crées , le forgeron pourrait dire , je veux l'epaulette untel de tel couleur et le torse de tel couleur et tout ??

c'est ca que t'es en train de nous raconter la ?
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Vii, ça serait assez cool, et même à priori, ça devrait pas être trop dur à faire... Enfin moi j'attend de voir à quoi exactement on a accès dans l'objet, si ça se trouve, on pourra modifier ainsi toutes les propriétés de l'objet, modifier ses scripts, son modèle, ses anims... Enfin on verra, si ça se confirme, ça sera vraiment super !!
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Azra m'en a parlé et d'après ce que j'ai pu voir et tester...

TOUT est stocké dans la database!

D'ailleurs ce système pourrait fonctionner sur les items mais même sur les créatures...
Héhé, imaginez les sorts d'invocation personnalisés
Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
Tiens, je pense que d'un seul coup , ceux qui ont pris un malin plaisir pour critiquer,par principe de critiquer, les développeurs de bio vont commencer comme par magie à apprécier la database de bioware, si vous les faîtes baver comme ça



Moi en tout cas, je me dis que cela peut être très très fort
Lien direct vers le message - Vieux
Avatar de Drak Valer
Drak Valer
Alpha & Oméga
 
Avatar de Drak Valer
 
J'me sens visé
N'empeche que j'avais qd meme un peu raison hein
Deja le fait qu'on puisse pas creer ces propres colonnes , j'trouve ca triste , m'enfin y parait qu'on pourra stocker des trucs dans des .2da perso .. ralala

Ce qui est dommage aussi c'est que comme d'habitude pour bidouiller va falloir acceder par un programme tiers fait maison , alors que Bioware etais a deux doigts de donner les fcts de maniere native en nwscript
voili voilou
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
database POWA !!!!!!

(Drak Valer, c'est bien une base de donnée, et non pas un classement ligne par ligne )

pour le SetName, un problème tout de même : il faut obligatoirement détruire/créer l'objet pour utliser le système, il peut donc y avoir un bug visuel au moment de la mise a jour (un effet d'apparition par fondu). Enfin bon, on va pas chipoter ^_^

Pour l'instant, je m'atelle a faire une bibliothèque permettant la sauvegarde des variables sur les objets mis en reserve (qui sera necessaire pour développer ce système). La ou je pense avoir besoin d'aide, c'est pour la réalisation du fichier qui lis dans les logs, car si je connais asset bien less "bases" du C++, en revanche je ne connais pas bien toutes les fonctions existantes et je suis incapable de faire un .exe en win32. Je peux faire le source qui parse les logs a partir d'un pointeur, mais pour ce qui est de la gestion avec la database il faudrait que je fasse des recherches (chose dont je n'ai pas vraiment le temp ), si quelqu'un s'en sent capable, ce serait très volontier que je lui laisse cette tache.
Bon, comme la database est apparament un format courant, on doit pouvoir trouver des bibliothèques pour lire/ecrire dedant, voir un .dll déja tout compilé , mais jusqu'a la fin de la semaine je ne peut pas vraiment chercher à en savoir plus, car je suis sous un pc d'emprunt, sous lequel il n'est pas question d'installer Access ou Visual Studio.

Citation:
il est en train de dire qu'on pourrait generer des blueprint dynamiquement la ??

par exemple pour un systeme d'artisanat , ou on aurait pas besoin de se taper 12000 bp a taper pr chaq sorte d'objets crées , le forgeron pourrait dire , je veux l'epaulette untel de tel couleur et le torse de tel couleur et tout ??

c'est ca que t'es en train de nous raconter la ?
bien... c'est l'une des nombreuses applications que l'on pourrait faire de ce système


EDIT : bon, j'ai fait la première phase du système, c'est à dire une bibliothèque qui permet la sauvegarde des variables locales d'un objet par le StoreCampaignObject (qui devient alors StVaCampaignObject ^^)

le support est la, il ne reste plus qu'a faire le gros boulot ^^
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Bon, je me propose de faire ça en Perl, mais je dois avouer que pour l'instant, le format de l'objet ne m'est pas encore très familier, quelqu'un en sait plus ?
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
bien, RAT le proposais aussi, donc bien c'est comme vous voulez (enfin, moi je préfererais en C, c'est bcp plus facile pour moi l'adapter à 4e Age )

Pour le format, bien j'ai mis tout ce que je savais sur le post de jaha
Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
Comme vous voulez je ne suis pas chiant
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Ce qui veut dire également qu'on pourra créer de nouvelles classes de magie, et pas seulement des classes de guerriers. (c'est à dire rajouter une colonne dans le 2da :
Code:
sorcier magicien druide InvocateurCéleste
9       9        *****  1         
*****   *****    9      0
exemple d'un invocateur céleste qui aurait les sorts de niveau 9 de sorciers et de druides au levels 0 et 1... c'était pour illustrer)

Il faut avoir bien regardé les 2da pour comprendre la portée du système.
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
La j'avoue que je ne te suis pas.

Tu peux expliquer un peu plus ? je ne voit pas trop comment tu compte t'y prendre O_o

Déjà, je pense que rajouter des classes de magiciens, tu peux le faire sans ce système, ensuite je ne vois pas en quoi il pourrait t'aider (les personnages joueurs ne peuvent pas être retouchés avec ce système)
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
hop une réponse 20 années plus tard

C'est très simple : ce .2da sert à attribuer les sorts. Chaque classe magique est une colonne, chaque sort une ligne, et le chiffre représente le niveau du sort dans la matière en question. Ce système oblige à rajouter une colonne pour chaque classe magique nouvelle...
Lien direct vers le message - Vieux
Avatar de Taern
Taern
Alpha & Oméga
 
Avatar de Taern
 
En plus on ne peut pas rajouter de classe de lanceurs de sorts il me semble.

Enfin puisque je viens de me rappeler de ce sujet je vais en profiter pour faire une petite liste de fonctions comme demander par Azra :

void SetName(object oObject, string sNom);
(Pour séparer le prénom du nom d'une créature, on utilisera par exemple un séparateur |)

int AddItemProperty(object oItem, int nProperty, int nParam1, int nParam2);
int RemoveItemProperty(object oItem, int nProperty, int nNth = 1);
int SetItemPropertyParameter(object oItem, int nProperty, string sValue, int nNthParameter, int nNthProperty = 1);
string GetItemPropertyParameter(object oItem, int nProperty, int nNthParameter, int nNthProperty = 1);

int SetObjectAppearance(object oObject, string sValue);
int SetObjectAppearancePart(object oObject, int nAppearancePart, string sValue);
int SetObjectColor(object oObject, int nObjectPart, int nColorValue);

string GetObjectAppearance(object oObject);
string GetObjectAppearancePart(object oObject, int nAppearancePart);
int GetObjectColor(object oObject, int nObjectPart);

int SetSpeed(object oCreature, int nValue);
void SetDescription(object oObject, string sValue);
int SetPhenotype(object oCreature, int nPhenotype);
int GetSpeed(object oCreature);
string GetDescription(object oObject);
int GetPhenotype(object oCreature);

void SetAge(object oCreature, int nValue);
int SetGender(object oCreature, int nValue);
void SetDeity(object oCreature, string sValue);
int SetAbilityScore(object oCreature, int nAbility, int nValue);
void BindScriptToEvent(object oObject, string sEvent, string sBoundScript);

Et plus hypothétiquement :

int AddInnateSpell(object oCreature, int nSpell, int nTimesPerDay);

Voilà, j'ai trouvé tout ça en regardant la structure d'un fichier d'objet sous Leto, donc logiquement ça devrait également se trouver dans la DB.
Les int renvoyés par certaines fonctions Set* sont des booléens qui témoignent du succès de l'opération (compte tenu que certaines valeurs ne peuvent pas correspondre pour certains champs, par exemple des nombres négatifs pour les caras).
Pour la dernière commande, je sais que le Character Creator de CODI est capable de rajouter des sorts innés dans le menu radial du PJ, donc je me suis dit que ça serait sympa de pouvoir le faire également par script. Enfin j'ai pas trouvé où les sorts connus étaient référencés dans le fichier ITP, donc je suis pas sûr du tout de sa faisabilité.

Dernière chose Azrael, tu parle d'un programme qui lira les logs pour y trouver les commandes précitées, mais la question est : quand-est ce qu'il les lira ? Pourquoi ne pas essayer d'utiliser le NWNX, qui détecte certaines actions du nwmain pour ensuite agir en conséquence ?

En dehors de ça, bonne chance
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Database et bidouillages
   

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 19h00.
   

© 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