JeuxOnLineForumsPlusConnectés : 486 (sites) | 968 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [Bibliothèque]Custom tokens ! RSS
   
Répondre
Partager Outils Rechercher
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 

[Bibliothèque]Custom tokens !

Voilà ce que j'ai à proposer :

[Edit by eM :]
ICI .

Une bibliothèque de gestion des tokens, non des tokens dans l'inventaire, mais bien de ceux qu'on peut utiliser dans les dialogues pour obtenir le nom du PC par exemple. ( <FirstName>, <Sir/Madam>, etc...)

Les tokens proposés en standard par Bioware sont utiles mais un peu limité, surtout en français et surtout en grammaire française : il n'existe même pas de token permettant l'accord au féminin comme </e> !

Aussi Bioware a-t-il fourni un outil pour se créer ses propres tokens : les customs tokens, ils s'écrivent <CUSTOMn> (avec n un entier entre 1 et 99999 environ) et ont une valeur bien déterminée. Autrement dit, pour tout accord de genre ces tokens sont lourdement inadaptés puisqu'il faut pour les utiliser dans ce cas, créer un script qui change leur valeur en fonction du sexe du PC ET placer ce script dans toutes les conversations où on va utiliser ce token...

Tout cela devient franchement très lourd lorsqu'on doit gérer plusieurs tokens qu'on emploie fréquemment, d'autant plus que les tokens de Bioware souffrent d'une seconde limitation :
On ne peut pas les utiliser dans un script ! L'emploi des tokens (aussi bien standard que custom) est limité aux dialogues.
Alors d'accord un peu d'imagination permet de huiler les rouages et d'éviter d'avoir à personnaliser ses scripts en fonction du PC auquel on s'adresse (tâche la plupart du temps très lourde il faut bien l'avouer), mais n'est-il pas regrettable de se priver ainsi d'un monde ou les NPCs, soudain guéri de leur presbytie, s'adresse aux PCs selon leur apparence, leur réputation, leur sexe et leur race...
N'est-il pas regrettable que la plupart des taverniers elfes traitent les PCs nains comme des clients normaux alors qu'ils ne devraient leur adresser la parole que pour des injures pleines de fiel ?...

Pour pallier à tous ces inconvénients, je me propose de mettre à disposition ce que je considère comme l'aboutissement de mes efforts en ce domaine. C'est à dire une bibliothèque (inspirée par une idée fondatrice de Lendraste et par une fonction de Gloirin/Wololo) qui permet ce que je crois être la solution la plus souple et la plus puissante qui soit actuellement possible (tant que Bioware n'aura pas autorisé le dialog.tlk dans les haks, on ne trouvera pas mieux qui soit indépendant de la machine) : Une solution qui vous permet d'associer deux concepts intéressants, c'est à dire l'association d'un script à un type de token, et la personnalisation de ce type de token indépendamment du script. Je m'explique :

"<mf:cuisinier/cuisinière>", ce token est lié au script "tok_mf" qui renvoie 0 si la cible du token est masculine, 1 si elle est féminine. Ce script se présente ainsi :
Code PHP:
#include "nwl_sti"

void main()
{
    
object oTest GetObjectTokTarget();
    
int nChoice = -1;

    if (
GetGender(oTest) == GENDER_FEMALEnChoice 1;
        else 
nChoice 0;

    
ReponseInt(nChoice);

Comme vous le voyez, ce script est totalement indépendant du contexte, sa mise en oeuvre est assuré par la bibliothèque centrale qui se chargera de le lancer automatiquement si le token est utilisé, de lui fournir les bonnes valeurs et de récolter le résultat, résultat qui sera utilisé pour obtenir un résultat final qui n'est pas explicité dans le script.
Ce script est bien évidemment l'un des plus utile : il permet d'utiliser des tokens comme : "<mf:/e>" (le fameux token d'accord dont je vous parlais) ou même :
"<mf:Viens te battre femmelette, on va voir ce que tu vaux !/Désolé m'dame, j'croyais qu'c'était quelqu'un d'autre [Il incline respectueusement son chapeau].>"

Ce concept est extensible à toute sorte de chose, en fait à tout ce que vous permet votre imagination : il vous suffit de rédiger une fois un script, vous n'êtes plus limité par une mise en place fastidieuse puisque c'est la bibliothèque qui s'en occupe à votre place.
Notez que ce token est utilisable aussi bien dans les scripts (ou il est possible de le "calculer" grâce à l'une des fonctions de la bibliothèque) que dans les dialogues. Pour ces derniers, une seule opération suffit à rendre le token disponible et dynamique :
Code PHP:
AddCustomToken(666"<mf:cuisinier/cuisinière>"); 
Suite à l'utilisation de cette fonction, ce token sera disponible sous l'appellation "<CUSTOM666>" dans tous les dialogues et ceci sans qu'il soit nécessaire de placer un quelconque script pour recalculer sa valeur : la bibliothèque s'en chargera toute seule !



Vous êtes encore là ?
Bon, si vous êtes intéressé ou désirez des précisions n'hésitez pas !
Lien direct vers le message - Vieux
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
Wink
Ca m'intéresse beaucoup, je suis en train de me farcir la traduction de l'ATS de Mojo et y'en a partout des Custom tokens. Même si j'arrive à me démerder avec ça reste quand même assez obscure. Alors si tu veux développer plus loin tu auras une oreille attentive en ce qui me concerne

Jaha Effect
[edit] je parle bien des CUSTOM TOKEN qui se trouvent dans les dialogues et pas ceux dans l'inventaire
Lien direct vers le message - Vieux
Avatar de RAT
RAT
Alpha & Oméga
 
Avatar de RAT
 
Cela m'intéresse énormément
Lien direct vers le message - Vieux
Avatar de Iridian
Iridian
Roi
 
Avatar de Iridian
 
Je suis également très intéressé par cette bibliothèque.
A vrai dire, je n'utilise pas les Tokens pour l'instant, à cause des problèmes que tu soulèves.
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
En ce moment, j'utilise des tokens qui doivent être calculé à la seconde près où la discussion a lieu donc ça ne m'intéresse pô directement mais je vais kan même (essayer de) suivre ce système de prêt
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Citation:
j'utilise des tokens qui doivent être calculé à la seconde près où la discussion a lieu donc ça ne m'intéresse pô directement
A la seconde près vraiment ou alors ça suffirait qu'il soit calculé juste au début de la conversation ?
Parce que c'est exactement ce que fait ma bibliothèque (bah voui, sinon ça n'a aucun intérêt).

Par ailleurs il existe une fonction qui recalcule automatiquement tout les customs tokens à la demande. Ca peut servir.


Citation:
Ca m'intéresse beaucoup, je suis en train de me farcir la traduction de l'ATS de Mojo et y'en a partout des Custom tokens. Même si j'arrive à me démerder avec ça reste quand même assez obscure. Alors si tu veux développer plus loin tu auras une oreille attentive en ce qui me concerne
Ah une oreille attentive, y a rien de tel !
En fait si tu cherche des informations sur les customs tokens en eux-mêmes, ça pisse pas loin parce que l'implémentation de Bioware pour les tokens customs est totalement basique : il s'agit simplement d'une chaîne en mémoire, numéroté et accessible (uniquement en écriture) par la fonction SetCustomToken(int nN° Du Token, string sChaine Du Token).
Elle remplace directement le token correspondant <CUSTOMn> si il se trouve dans un dialogue.
Comme tu le vois, de base les custom token n'offre aucune place au dynamisme. Ce traitement de l'information doit donc se faire en aval au travers d'un script qui vérifiera le sexe (par exemple) du PC qui tape la discute et qui modifiera la valeur du token en fonction de cela. Bien sur c'est lourd, bien sur c'est chiant....

Alors qu'il aurait été si simple pour Bioware d'offrir la possibilité de créer un script "lié" à un custom token qui en aurait décidé la valeur juste quand le token aurait été rencontré dans une phrase...

Mais il ne l'ont pas fait, d'où la création de cette bibliothèque qui permet également d'étendre la notion de token au script.
Exemple : Ce script fait appel à l'une des fonctions de remplacement de ma bibliothèque pour délivrer un message personnalisé (il est vrai peu original...):
Code PHP:
#include "nwl_tokcust"

void main()
{
    
object oPC GetLastPerceived();
        
    if(
GetLastPerceptionSeen())
    {
        
SpeakTokStr("<bTimelocalint:Excusez-moi, vous m'empéchez de me concentrer, faites plus attention./" +
        
"J'en suis à une phase cruciale de ma méditation, et vous la troublez, retirez-vous !/" +
        
"Je vous ai déjà dit que vous êtes chiant<mf:/e> ?/" +
        
"Etes vous <mf:un crétin/une idiote> ou simplement <mf:un inconscient/une inconsciente> ?/" +
        
"Mais qu'avez vous à passer et à repasser ?!/" +
        
"Vous allez vous en mordre les doigts !!!/" +
        
"Cette fois c'en est trop, disparaissez pauvre <mf:sot/sotte> ! [l'air semble crépiter tandis qu'il se lève]>"oPC);
                
        
nTime GetLocalInt(oPC"bTime");
        
        if(
nTime == 6)
        {
            
ClearAllActions();
            
ActionCastFakeSpellAtObject(SPELL_FINGER_OF_DEATHoPC);
            
ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_INSTANTExtraordinaryEffect(EffectDeath(), oPC));
            
ActionPlayAnimation(ANIMATION_LOOPING_MEDITATE1.03600.0);
            
SetLocalInt(oPC"bTime"0);
        }
        else 
SetLocalInt(oPC"bTime"nTime+1);        
    }

Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Haaaaaaaa

Ok, je croyais que la bibliothèque définissait des CUSTOM au lancement du module et qu'une fois ceci fait, ils restaient fixe.

Donc début de conversation, oui ça m'intéresse

Plus précisement, j'aimerais qu'un PNJ (un horloger par exemple) puisse me dire l'heure exact:
"Bouyour, il est 13h37."

J'arrive à reproduire ce phénoméne en attachant un script de mon cru dans les conditions d'éxecution.
Code PHP:
Il est <StartAction><CUSTOM6734></Start>:<StartAction><CUSTOM6735></Start>(<StartAction><CUSTOM6736></Start>). 
Code PHP:
int StartingConditional() {
    
int nHour GetTimeHour();
    
int nSecond GetTimeSecond();
    
int nMinByHour FloatToIntHoursToSeconds1)) / 60;

    
int nMinute = (60 nMinByHour) * GetTimeMinute();
    
nMinute nMinute nSecond nMinByHour;

    
sHour IntToString(nHour);

    if (
nMinute 10)
        
sMinute "0" IntToStringnMinute);
    else
        
sMinute IntToStringnMinute);

    if (
nSecond 10)
        
sSecond "0" IntToStringnSecond);
    else
        
sSecond IntToStringnSecond);

    
SetCustomToken6734IntToString(nHour));
    
SetCustomToken6735sMinute);
    
SetCustomToken6736sSecond);

    return 
TRUE;
    } 
Bon c'est du script de barbare

Les secondes sont facultatives, ça me sert de debug. Je viens de remarquer que le token des heures existe déjà dans nwn lol, mais pô pour les minutes.

J'ai encore plein d'autres tokens comme ça pour les mois, les jours de la semaine, etc.

Vu que je serais pô seul à utiliser ces token, ta biblio me semble très très intéressante
Lien direct vers le message - Vieux
Avatar de Taern
Taern
Alpha & Oméga
 
Avatar de Taern
 
Si je peut me permettre d'ajouter ma tite pierre à l'édifice au vu du script de Skanzo (même si ça traite pas directement du sujet) :
tu peux obtenir un texte coloré plus simplement qu'en utilisant <StartAction> etc.
Je m'explique : dans ton dialogue, tu réduit ceci :
Code PHP:
Il est <StartAction><CUSTOM6734></Start>:<StartAction><CUSTOM6735></Start>(<StartAction><CUSTOM6736></Start> ). 
en ceci :
Code PHP:
Il est <CUSTOM6734>. 
Ensuite, dans ton token 6734, tu enregistre la string complète "heure:minute:seconde".

Puis vient le moment de la coloration En mettant une balise <c...> dans une string, tous les caractères qui la suive seront colorés selon ce que tu as mis après le "<c".
En gros, tu a 3 caractères à mettre : le premier commande le rouge, le 2e le vert et le 3e le bleu (à revérifier ). Ce qui sera pris en compte, c'est le code ASCII du caractère que tu mets.

exemple : <c+dd>
+ = 200 en ASCII
d = 100
Ce qui me donnera un texte légèrement rouge et un peu sombre (j'ai pas testé hein ).

Pour accéder aux caractères ASCII, tape : ALT[maintenu] + (code du caractère tapé sur le clavier num)
(j'ai essayé en le tapant dans le bloc notes et en le copiant dans le script, ça marche impec)

Pfiou, voilà, c'était complètement HS mais je m'en voulais de te voir galérer avec les tokens d'action

__________________


Militant pour la résurrection de NWN1
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Citation:
Ok, je croyais que la bibliothèque définissait des CUSTOM au lancement du module et qu'une fois ceci fait, ils restaient fixe.
Tu me prend pour un fou !!

Je me serais pas tapé plus de mille lignes de code pour faire la même chose que ce que fait déjà très bien NWN !!!!

Quant à ton token, on pourrais le "traduire" par le token "<time:>" et le script "tok_time" suivant :
Code PHP:
#include "nwl_sti"

void main()
{
    
string sChoice "";
    
    
int nHour GetTimeHour();
    
int nSecond GetTimeSecond();
    
int nMinByHour FloatToIntHoursToSeconds1)) / 60;

    
int nMinute = (60 nMinByHour) * GetTimeMinute();
    
nMinute nMinute nSecond nMinByHour;

    
sHour IntToString(nHour);

    if (
nMinute 10)
        
sMinute "0" IntToStringnMinute);
    else
        
sMinute IntToStringnMinute);

    if (
nSecond 10)
        
sSecond "0" IntToStringnSecond);
    else
        
sSecond IntToStringnSecond);
    
    
sChoice sHour ":" sMinute ":" sSecond;
    
ReponseString(sChoice);    

Token que tu pourras à présent employer dans tes scripts (c'est un truc de fainéant ça) et dans tes dialogues si tu mets ceci dans ton OnModuleLoad :

Code PHP:
AddCustomToken(6000"<time:>"); 
Bon tu pourras pas faire tes deux points en noir et les chiffres en couleurs (note que tu pourrais si tu définissais trois tokens, ou si je faisais l'effort d'essayer de comprendre les "tokens de couleurs" que Bioware a récemment dévoilé) mais le token <CUSTOM6000> sera disponible dans tous tes dialogues avec l'heure de début de conversation (pourvue que celle-ci ne dure pas trop...).

Le token pour les mois est fourni en standard mais je ne vois pas trop comment tu obtient le jour de la semaine ? De toute façon si tu pouvais le faire avec le système de Bioware, tu pourras le faire dans ma bibliothèque.
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Whouaa

Déjà, les color token, ça m'enlève une épine du pied! Paske ça fait un bail que je me pose la question:
"Comment c'est qu'ça marche ce foutu <c machin qui me fait toujours un texte bizar hyper sombre?"

Trop extra
Merci Taern!


Ben heu, sinon Jed, ta biblio, c'est on ne peut plus simple, il me la faut!
Mais bon, je sais que tu y arrivera parce que t'es complétement fou!

J'essaie d'inclure dans mon module mon propre système de date qui n'a plus rien à voir avec celui de Nwn. C'est un truc de zinglé du neurone

Jedaï, I you si ça marche!
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Bah voilà les deux nouvelles versions des scripts que j'avais donné hier, les changements résultent de tout ce que j'ai modifié entretemps. Je précise qu'il ne s'agit pas là de théorie, mais que ma bibliothèque est d'ores et déjà capable de gérer ça :

Code PHP:
#include "nwl_sti"

void main()
{
    
string sChoice "";
    
    
int nHour GetTimeHour();
    
int nSecond GetTimeSecond();
    
int nMinByHour FloatToIntHoursToSeconds1)) / 60;

    
int nMinute = (60 nMinByHour) * GetTimeMinute();
    
nMinute nMinute nSecond nMinByHour;

    
sHour IntToString(nHour);

    if (
nMinute 10)
        
sMinute "0" IntToStringnMinute);
    else
        
sMinute IntToStringnMinute);

    if (
nSecond 10)
        
sSecond "0" IntToStringnSecond);
    else
        
sSecond IntToStringnSecond);
    
    
sChoice "{c(red:}" sHour "{c(white:}:" +"{c(red:}" sMinute "{c(white:}:" +"{c(red:}" sSecond "{c(white:}" ;
    
ReponseString(sChoice);    

Et pour initialiser le token pour les dialogues :
Code PHP:
AddCustomToken(6000"{time(:}"); 
Là en fait j'ai terminé presque tous les tests préliminaires, ma prochaine tentative va être de surcharger le système (sachant que j'ai un 500 MHz et 64 MO de RAM, ça devrait pas être trop difficile ) pour voir combien de token il peut gérer sans peine et si ça vaut le coup de repenser un grand coup (même si là je ne vois pas de solution : on n'a pas accès aux dialogues par les scripts donc on peut pas savoir ce qu'il y a comme token à l'intérieur ) le système de recalcul automatique de custom token.
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Voilà, elle est disponible, manque un peu d'un tutoriel sur la création de script-token, mais c'est pas trop dur de toute façon. Je verrais à améliorer le tutorial quand j'aurais un peu de temps libre (tout de suite je suis un peu submergé... ). L'utilisation est expliqué dans le readme.

Vous la trouverez à ce lien.

En espérant que ça vous serve !
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
J'ai commencé à regarder. Dès demain je vais bidouiller tout ça pour mon module.
Mais vu dans quel état j'ai laissé mon module, ça va pô être de la tarte de s'y retrouver

Edit: Houla, excuse Jed. Oubli le PM que je t'ai envoyé. Il me manquait un include, j'avais pô téléchargé le bon zip
Lien direct vers le message - Vieux
Avatar de Reyan
Reyan [L.D.D]
Roi / Reine
 
Avatar de Reyan
 
bon, j'arrive un peu après la bataille, mais elle m'a mis ds tt mes états cette bibliothèque ^_^
c très vachement térrible pour faire des machin rp super custom de la mort avé plein d'aléatoire dedans
mais je me demandais : est ce qu'on peut traiter les tokens avant de lancer la "speaktokstr"' ?
je m'explique : en fait le but ce serais de faire des réplique qui dépendrais Et de la race du PNJ ET de la race du PJ
alors, déjà comme c'est des string on peut bien les torturer les tokens, mais est ce que c'est possible ? parce que pour l'instant ils sont appliqués qu'a un seul objet ... ou alors g loupé un épisode ?
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [Bibliothèque]Custom tokens !
   

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 12h49.
   

© 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