[Bibliothèque]Custom tokens !

Répondre
Partager Rechercher
@ Reyan > Pour la limite je sais pas trop... vu la structure je vois bien dans les 500 tokens par phrases mais le traitement risque d'être assez long...
(C'est indépendant de la taille des tokens, par contre les tokens imbriqués sont un chouilla plus lourd à traiter...)

Pour les CUSTOM tokens, la limite est celle de Bioware et je ne la connais pas, sorry. (enfin ça fait beaucoup : des dizaines de milliers je pense...)
merciii encore achement tout plein beaucoup

@darshman : gnagnagna, mauvaise langue va c passke g psa gerer c tt, doit manquer un ":" ou une "}" qq part c tt

@Jedaï : je t dis que g t fan de ta bibliothèque

Citation :
Mais j'avais mis ces possibilités supplémentaires sous le tapis vu que j'avais l'impression que les tokens de base suffisait et que les avancés étaient assez compliqués comme ça....
pas bien
ca veut dire que c pas optimisé ? que ca marche bof ? que y a des trucs a décocher pour tenter le diable ?
Non, non, c'est optimisé (enfin à peu près) mais c'est juste un peu compliqué et rarement utile alors...
Enfin je pense que savoir que si on met {object_self?token):blabla/bla2} le token concernera celui qui parle, ça peut servir mais franchement
Code PHP:

SpeakTokStr("Le deuxième joueur le plus proche de l'objet que l'on a enregistré sous le nom d'Alchimiste grâce à la fonction SetTokenObject() est{Alchimiste?2GetNearestCreaturecreature_type_player_char_player_char_is_pc, mf): un homme/ une femme} !"OBJECT_INVALID); 

C'est pas toujours utile non ?
(J't'assure qu'ça marche au poil !! )

Effectivement peut y avoir un problème si tu oublie un ":" ou un "{".
Cette bibliothèque de gestion des tokens m'est vraiment d'une grande utilité! J'ai posté sur les forums de Bioware avant de poster ici (je sais, je n'ai pas été fidèle) ma question quant à savoir comment utiliser des string en plusieurs langues différentes dans un script et je n'ai eu comme réponse que c'était impossible. Faux, cette bibliothèque le permet!

Une petite question à cette égard: Est-ce qu'il y a un équivalent de SpeakTokStr pour remplacer ou plutôt utiliser les tokens dans la fonction SendMessageToPC?
Citation :
Provient du message de Taern
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

Bon, je suis HS aussi, mais ce serait pas mal d'avoir une possibilité de compatibilité de coloration avec la 1.29, vu qu'il me semble que les balises <c... ont été supprimées avec le dernier patch. :/ Il existe un susbstitut documenté ? J'ai déjà vu des persos utiliser du texte coloré en jeu, mais je ne sais pas comment ils l'obtenaient.

Gad', qui voulait pas relancer un topic exprès pour ça
Oui, c'est effectivement ça, et je crois bien avoir testé, mes tokens couleurs marchent très bien en 1.29, il faut dire que je suis propre moi, je les fermes, s'agirait pas non plus de laisser des tokens ouverts partout alors qu'ils sont créés automatiquement par une fonction et que ça fait juste 3 lignes à rajouter.

Par ailleurs, j'ai répondu à Akkei par mail mais je vais recopier la réponse ici :

D'abord pour ce qui est de la langue : il me semble effectivement que c'est la bonne solution, avec quelques bémols mais bon...

Pour le SendMessageToPC() :

Pour ta question, je n'ai pas, je crois, fait une telle fonction, mais ceci devrait être facile à réparer, c'est la fonction ProcessString(string s, object oTarget) qui effectue en réalité tout le travail de remplacement des tokens, il te suffit donc de rajouter la fonction que voici dans ma bibliothèque :

Code PHP:

void SendTokStrToPCobject oPlayerstring sMessage )
{
    
SendMessageToPCoPlayerProcessStringsMessageoPlayer ) );

Ou si tu préfère stipuler la cible des tokens séparément de la cible du message :

Code PHP:

void SendTokStrToPCobject oPlayerstring sMessageobject oTokenTarget OBJECT_INVALID )
{
    
SendMessageToPCoPlayerProcessStringsMessageoTokenTarget ) );

Valà
Citation :
Provient du message de Jedaï
D'abord pour ce qui est de la langue : il me semble effectivement que c'est la bonne solution, avec quelques bémols mais bon...
Quels bémols? Je crois d'ailleurs avoir rencontré des problèmes à cet égard. J'utilise le token {modint(LANG:Good day/Bonjour} pour la traduction. J'ai personnellement la version originale et, lorsque je teste le module, j'ai toujours droit au Good day. La personne qui m'aide à vérifier si tout marche avec la version française m'indique qu'elle voit pour la majorité des "SpeakTokStr" la version anglaise, mais pour certains la version française. Je suis certain d'avoir bien construit mes scripts (ou du moins la très grande majorité). Est-ce possible que le français ne soit pas toujours l'option #2 dans l'ordre suivi pour ce token?

Merci pour ton aide,

Akkei
bon moi aussi j'essaie de traduire a ma façon l'ATS de MOJO mais comment accéder est changer un custom dialogue pour le traduire exemple le livre des tableau technique ne sont que des custom j'aimerais traduire les phrases
Je suppose que tu modifie bien le local int 'LANG' sur le OnModuleLoad lorsque tu veux changer de langue ?
Attention, ici 'Good Day' est l'option #0 et 'Bonjour' est l'option #1.

Sinon je ne vois pas...

Pour mes bémols, ils sont simples : les tokens sont remplacés de l'intérieur vers l'extérieur (ceci pour des raisons techniques, ainsi que d'aspects pratiques), donc le token pour les langues, le plus extérieur logiquement, est effectué en dernier, ce qui signifie une certaine perte de temps pour transcrire des tokens inutiles (à vrai dire, elle doit être assez minime mais bon...), je pensais à inclure le système pour les langues de façon plus étroite, directement dans la fonction ProcessString() en fait, ainsi que dans les scripts des tokens. Toujours avec un local int sur le module, ça nous ferait un système simple à utiliser et sans perte d'efficacité.
Citation :
Provient du message de Jedaï
Je suppose que tu modifie bien le local int 'LANG' sur le OnModuleLoad lorsque tu veux changer de langue ?
Attention, ici 'Good Day' est l'option #0 et 'Bonjour' est l'option #1.

Ouh! Je suis certain que je n'ai pas modifié ce int parce que je n'ai pas de script sur le OnModuleLoad... Je suis retourné lire ton ficher "LisezMoi" et je n'ai rien trouvé à cet égard. Je me vois donc à nouveau dans l'obligation d'implorer ton aide et de te demander plus de détails à ce sujet. Merci d'avance!

Akkei
Euh... le token "{modint(Machintruc: Choix 0/ Choix 1/ Choix 2/ ... / Choix N}" va chercher une variable locale de nom "Machintruc" stockée sur le module et selon la valeur de cette variable, affiche le choix correspondant (ou plutôt est remplacé par ce choix), à priori, il n'existe pas de moyen automatique de connaître la langue actuelle du module par script, donc on est bien obligé d'indiquer la langue actuelle quelque part... Avec ce système, il y a une seule valeur à changer, une valeur facilement accessible : n'importe qui est en mesure d'ouvrir le script sur le OnModuleLoad et d'aller chercher la ligne :
Code PHP:

//0 -> English
//1 -> Français
//2 -> Deutsch
LANGUAGE 0
Puis de changer la valeur, non ?

Evidemment, dans le main() du script sur le OnModuleLoad, tu dois aussi avoir :
Code PHP:

SetLocalIntGetModule(), "LANG"LANGUAGE); 


Maintenant, si tu veux aussi automatiser ça, tu peux utiliser la particularité, semble-t-il, de la fonction GetName() appliqué au module ou aux zones : dans ces cas, GetName() renvoie la version localisée, tu n'as plus qu'à vérifier si le module a été lancé en français, ou en anglais (évidemment il faut que les deux noms soient différents), puis à positionner automatiquement la variable locale "LANG", et voilà, le tour est joué
(A noter que moi j'ai la VO, donc je préfère encore la solution non-automatique )
Répondre

Connectés sur ce fil

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