[Résolu] Papyrus les accents dans les scripts , ArrGH!

Le langage des scripts.
Répondre
Avatar du membre
noone
Moddeur aspirant
Moddeur aspirant
Messages : 1031
Contact :

Papyrus les accents dans les scripts , ArrGH!

Message par noone »

Bien j'ai remarqué quelques soucis au niveau du travail sur les chaines de texte dans les scripts papyrus.

il faut dire que papyrus est assez limité à ce niveau (sauf erreur je n'ai pas vu grand chose même javascript à plus de méthodes)
et je voulais savoir si quelqu'un avait déjà trouvé une solution ou développé une fonction pour la gestion des accents dans les scripts.

Vraisemblablement le jeu fonctionne en utf8 jusqu'à ce qu'il tombe sur un caractère accentué et là il passe en iso windows xxxx
:colère:

Par exemple prenons une variable contenant des caractères accentués ex: "élixir" ou même "Élixir" , donc bêtement dans le code j'avais espéré pourvoir faire un test du genre:
if sMavariable == "Élixir"
Hélas à cause du code page ce test est foireux.
J'ai essayé aussi de faire le test avec l'écriture UTF8 du caractère mais pas plus de succès:
if sMavariable == "Élixir"
Pourtant ma variable s'affiche correctement en jeu et donne Élixir
En revanche si je prends "Élixir" que je le colle dans une variable
sVars = "Élixir" et que je me sers de cette variable en jeu j'obtient ÉÉlixir WTF!!! :gun:

bref je vais chercher j'ai bien vu que je pouvais bidouiller le fichier font.txt dans l'interface.bsa mais je serais plutôt d'idée à créer une fonction papyrus ou un plugin skse qui gère ça à la volée mais avant de me lancer la dedans j'aimerais savoir si personne ne l'a déjà fait :maitre:
Image
Si vous voulez mon aide commencez par utiliser mon generateur de BBCODE
Apprendre à utiliser le générateur
Avatar du membre
A .
Légende de la Confrérie
Légende de la Confrérie
Messages : 5582

Re: Papyrus les accents dans les scripts , ArrGH!

Message par A . »

Je me souviens que la question avait déjà dû être posée quelque part, car en recherchant sur le net je suis tombé sur sujet et il me semble l'avoir déjà parcouru : https://forums.nexusmods.com/index.php? ... in-skyrim/

Pour l'instant je n'ai rien trouvé d'autre, mais ça a l'air d'être assez foireux au niveau de la gestion des caractères spéciaux, et au final il n'y a pas vraiment de solution viable à part repasser par Tes5Edit de ce que je comprends en survolant rapidement la conversation. Pas sûr que ça t'aide, mais au pire tu peux essayer de contacter kuneko pour lui demander si au final une solution à son problème a été trouvée.

Je ne me suis pas vraiment penché sur le modding avec le CK/papyrus, mais de ce que je comprends de ton explication, tu as peut-être moyen de faire un script de routine pour faire basculer le jeu en iso windows xxxx ? (à moins qu'il reswitch à chaque fois après avoir vu un caractère spécial en UTF-8 )
Avatar du membre
noone
Moddeur aspirant
Moddeur aspirant
Messages : 1031
Contact :

Re: Papyrus les accents dans les scripts , ArrGH!

Message par noone »

Oui je l'avais vu ce post mais c'est gentil ,j'en ai vu un bien aussi sur wiwiland super instructif.
Non celui qu il va falloir que je questionne ici c'est certainement épervier666 vraisemblablement il lit les strings des fichiers papyrus compilés il doit avoir une bonne connaissance du problème (d'ailleurs il faudra que je le questionne sur ce point j'aimerai bien connaitre ça façon de procéder)
et oui il reswitch si il passe en jeu de caractère pour windows c'est juste pour éviter un cdt certainement ,bref pas simple cette histoire et je suis étonné que personne n'est fait un plugin ou une fonction (bon la fonction je comprends vu les limitation de ce langage encore que il doit y avoir moyen d'exporter et de réimporter les variables,j'ai vu du xml et du javascript,de json interagir avec papyrus )

Je vais trouver un moyen

En tout cas merci :maitre:

edit:Et sa solution c'est de reprendre tous les strings qui comportent des accents ,du jeu et des mods, et de les remplacer par leur équivalent utf8 .Du coup je jeu reste tout le temps en utf8 mais voilà le boulot :surprise: il faudrait déjà que les traducteurs prennent le pli et traduisent leur mod avec les caractères utf8 ou qu'épervier666 implémente le traitement par lot
Image
Si vous voulez mon aide commencez par utiliser mon generateur de BBCODE
Apprendre à utiliser le générateur
Avatar du membre
noone
Moddeur aspirant
Moddeur aspirant
Messages : 1031
Contact :

Re: Papyrus les accents dans les scripts , ArrGH!

Message par noone »

ça y est j'ai compris comment cela fonctionne ,j'explique ici pour ceux qui arriveraient depuis une requête de moteur de recherche.
Le jeu fonctionne bien en utf8 puisque initialement prévu pour la langue anglaise mais les petits gars de PNOS ont semble t il modifié le fichier fontlist.txt contenu dans interface.bsa et rajouté les caractères accentués dans la liste des caractères autorisés pour nous permettre d'utiliser les accents en jeu. (ils ont aussi probablement converti tous les strings :surprise: )
hélas dés qu'il s'agit de d caractères accentués géré dans des variables papyrus ils sont mals affichés puisque le moteur du jeu ne les reconnait pas comme des caractères utf8 et il change vers un autre jeu de caractère le windows-1... je sais plus combien (et là c'est le drame) .

Dés lors 3 solutions sont possibles .

Solution 1 (inenvisageable mais un noob peut le faire )
Il faudrait à l'aide d'un logiciel de traduction reprendre tous les caractères accentués du jeu et des mods et les transformer en équivalent utf8 ,remplacer les éèêëÊËàâäÂÄî etc etc... par leurs équivalents é è ê ë Ê etc... etc...Il faudrait aussi que les traducteurs de mods adoptent cette pratique (ou que vous le fassiez systématiquement lorsque vous installez un mod) .Dés lors le jeu ne changerai plus de jeu de caractère et resterai en utf8 et en utilisant é à la place de é dans les variables papyrus l'affichage se ferait correctement.

Solution 2 ( :pensif: potentiellement lourd)
Il est possible en papyrus de créer des fonctions globales (c'est le cas des strings utils) .Dans le même genre on peut très bien imaginer une fonction qui encode les variables string correctement ex utf8_encode (string).Bien qu'elle soit réalisable avec l'aide des strings utils je m'interroge en terme d'impact sur les performances du jeu,mais je vous en dirai plus lorsque je l'aurai écrit :)

Solution 3 (hors de ma portée ou pas encore à ma portée :boulet: )
la solution parfaite selon moi ,cette solution consisterait à créer un plugin skse qui gère cela à la volée,mais cela nécessite un bonne connaissance du c++ et de skse (mais je me renseigne)

Seule la solution 1 est sans impact sur les performances
Seule la solution 2 est a ma portée pour le moment
Seule la solution 3 est viable quand il s'agit de faire un traitement récursif autant le faire avec le langage le plus rapide
Image
Si vous voulez mon aide commencez par utiliser mon generateur de BBCODE
Apprendre à utiliser le générateur
Avatar du membre
Kesta
Maître de Forge
Maître de Forge
Messages : 1077

Re: Papyrus les accents dans les scripts , ArrGH!

Message par Kesta »

noone a écrit :
Solution 3 (hors de ma portée ou pas encore à ma portée :boulet: )
la solution parfaite selon moi ,cette solution consisterait à créer un plugin skse qui gère cela à la volée,mais cela nécessite un bonne connaissance du c++ et de skse (mais je me renseigne)
C'est pas exactement ce qu'est sensé être le camemberizator ?
Faites un feu à un homme, il aura chaud un jour.
Mettez le feu à un homme, il aura chaud jusqu'à la fin de sa vie.

Terry Pratchett
Avatar du membre
noone
Moddeur aspirant
Moddeur aspirant
Messages : 1031
Contact :

Re: Papyrus les accents dans les scripts , ArrGH!

Message par noone »

Je l'ai ce fameux camemberizator ( http://skyrim.wiwiland.net/spip.php?art ... _portfolio )
vraisemblablement cela sert à :

- Traduction de l’affichage des "conteneurs avec propriétaires" (les fameux cercueils)
- Passage de l’heure au format français (24h) dans les écrans de chargement et de sauvegarde
- Passage de la date au format français dans les écrans de chargement et de sauvegarde

ça n'a pas l'air de fonctionner pour les variables papyrus ce que je voudrais faire c'est un script qui fonctionne en arrière plan et qui intercepte et reformate toutes les variables de type string dans un format propre à l'affichage.
Un processus transparent pour le moddeur ou le traducteur qui érase les variables en mémoire mais pour y arriver il va falloir plancher sérieusement skse et j'ai peur que ce soit un peu lourd ces appels systématiques... ça va être long autant dire que le prochain elder scroll sera sorti .Mais enfin c'est instructif et ce jeu m'a fait essayé tous les métiers de création de jeux manqué plus que ça
(Note je vais aussi regarder du coté de scriptdragon au cas ou)

Plus je réfléchi sur ce problème et plus je me dis que quelqu’un a du créer un truc à ce sujet étant donné la grosse communauté qui est derrière surtout qu'elle comporte quand même des pointures (quand tu vois le soft de tannin par ex) mais jusqu'à présent je n'azi rien trouvé de tel

Mais bonne idée en tout cas je vais essayé de le décompiler cela pourrait me servir de base..
.
Edit: j'ai parlé trop vite j'ai désassemblé et converti en c la dll de camemberizator,bon les instructions barbares en ASM je m'y attendais mais la conversion en C est tout aussi indigeste,décidément les machines ne pensent pas comme nous.
Du coup j'ai mis la main sur des sources d'un version antérieure que j’étudiai à temps perdu.
Hélas sur cette affaires des accents suite à la découverte d'informations récentes sur le stockage en mémoire des variables papyrus j'ai de sérieux doute quand à la réalisation de la solution 2 ce qui ne me laisse que la solution 3 ou la solution 4 nouvellement trouvée du TESVEDIT ce qui reviendrait à faire par sript la solution 1 (pas vraiment viable des lors que l'on modifie le jeu assez souvent)
Enfin tout ça pour dire work in progress...
Image
Si vous voulez mon aide commencez par utiliser mon generateur de BBCODE
Apprendre à utiliser le générateur
Avatar du membre
noone
Moddeur aspirant
Moddeur aspirant
Messages : 1031
Contact :

Re: Papyrus les accents dans les scripts , ArrGH!

Message par noone »

Bien, je me suis lancé dans l'installation de visual studio (pourquoi je passe du côté obscur alors que j'ai netbeans ??? Bah parce que les moddeurs de Skyrim travaillent avec ça... Wtf, bien dommage qu'ils ne travaillent plus en vb 5 ou 6 pour le coup, j'aurai pu décompiler (https://www.vb-decompiler.org/products/fr.htm).

Enfin, pour ceux qui voudrait se lancer dans l'aventure comment créer sa DLL skse c'est par là que ça commence :
https://github.com/xanderdunn/skaar/wik ... ng-Started

Mon but échangé et la gestion transparente des accents dans les scripts, c'est-à-dire une fonction skse qui puisse être appelée via papyrus, une fonction globale comme les strings utils, si certain veulent réfléchir avec moi vous êtes le bienvenu ;)
Modifié en dernier par Akiro le 02 juin 2016, 22:13, modifié 1 fois.
Raison : Passage d'un disciple.
Image
Si vous voulez mon aide commencez par utiliser mon generateur de BBCODE
Apprendre à utiliser le générateur
Avatar du membre
Epervier 666
Maître codeur
Maître codeur
Messages : 679

Re: Papyrus les accents dans les scripts , ArrGH!

Message par Epervier 666 »

Yop

J'ai pas tout compris mais je retiens quand même la fin : Il serait possible pour SKSE de modifier des caractères à la volée ? Et dans ce cas, serait-ce possible de remplacer des textes à la volée (genre juste avant l'affichage en jeu) ? Et par exemple, en se basant sur des fichiers de correspondance ? genre des fichiers xml ? Vous voyez où je veux en venir ?

Bref, un plugin skse qui traduirait les mods à la volée ! :p

Bien entendu, je ne connais rien au scripting bethesda, ni à skse... Mais si ça vous a donné l'envie de chercher... :)

Pour revenir au sujet de base, je ne connais rien du tout au niveau de comment fait papyrus pour gérer ses trucs. Mais en gros, j'ai suivi ça :
http://www.uesp.net/wiki/Tes5Mod:String ... ile_Format
(tout en bas de la page)
Bref, j'utilise l'encodage défini par le traducteur.
Dernière bêta ESP-ESM Translator
ESP-ESM Translator : Pour la traduction des Mods (lien nexus)
Avatar du membre
noone
Moddeur aspirant
Moddeur aspirant
Messages : 1031
Contact :

Re: Papyrus les accents dans les scripts , ArrGH!

Message par noone »

@Epervier666 je ne sais pas si c'est possible mais effectivement si on peut changer un caractère à la volée on peut changer un mot et ça c'est le plugin ultime *shiny eyes*. Comme l'a souligné kesta le camemberizator, fait déjà un replace à la volée de la date d'un format à un autre, il doivent avoir des bonnes bases chez wiwiland (j'ai récup une source d'ailleurs, mais toujours pas étudiée).

"Je ne connais rien au scripting bethesda" :arrow: Le papyrus ressemble fortement au pascal voir au vb/vbscript, à mon avis t'es pas perdu, c'est même extrêmement limité. Et pour les Dll skse, ça doit être du C++, certes un peu moins accessible, mais le but c'est pas de faire du c++ mais d'utiliser les librairie de skse.

Comprendre les fonctions, les appeler après c'est que des alternatives, des tests et des boucles (enfin en théorie).

Bien ça "http://www.uesp.net/wiki/Tes5Mod:String ... ile_Format" et en fait maintenant que j'ai regardé ton prog esp translator dans les options, on peut choisir l'encodage de sortie et j'ai regardé, personne ne l'utilise en fait ce truc !!! Ils devraient tous choisir l'utf8 !
Modifié en dernier par Akiro le 02 juin 2016, 22:19, modifié 1 fois.
Raison : Correction incolore.
Image
Si vous voulez mon aide commencez par utiliser mon generateur de BBCODE
Apprendre à utiliser le générateur
Répondre

Retourner vers « Entraide sur les scripts »