Database et bidouillages

Répondre
Partager Rechercher
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 ^_^
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
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 ?
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 !!
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
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
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
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 ^^
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 ?
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
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.
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)
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...
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
ouaaaaaa, merci beaucoup pour tout ca, ca va vachement m'aider

Citation :
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 ?
bien, je ne connais pas du tout le nwnx en fait, si ce que tu dis est exact, il faudrait que je me penche un peu la dessus, ca semble interessant.
Cela dit, l'idée du log est completement dépassée, on avait plutot envie de faire ca en utilisant la database justement.

Cela dit, je veux bien que tu m'en dise un peu plus la dessus, voir si c'est exploitable.

Pour finir, si quelqu'un sais pour quand est prévue la 1.30, voir si j'ai le temp de passer mon bac pour m'y mettre, ou bien si c'est pressé ^_^
Quoi ? Je pensais que tu allais sacrifier ton bac pour nous refiler toutes ces magnifiques commandes

Plus sérieusement, je n'ai jamais testé le NWNx donc vaudrait mieux demander à quelqu'un de plus calé. En fait je me demandais si par exemple il était possible d'envoyer une sorte de signal avec le NWNx, qui aurait pour conséquence de lancer un programme capable de modifier le contenu de la DB.
Il me semble que ce dernier permet l'exécution directe de lignes de commandes sur une base de donnée, ça ne permettrait pas de lancer ledit programme directement par script ?

Dernière chose, je crois que ma commande GetSpeed existe déjà et s'appelle GetMovementRate, mea culpa
Avec pas mal de scriptage, possible.
D'autant plus qu'une commande IncreaseRemainingSpell est tout à fait possible à faire vu la tête d'un fichier ITP.

Mais bon, il me semblait avoir lu sur les forums officiels qu'on ne pouvait pas rajouter de classe de lanceur de sort.

On verra tout ça une fois la DB sortie
Répondre

Connectés sur ce fil

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