Un p'tit utilitaire ... euh ... utile ?

Discussions autour d'idées ou de projets pour Titan Quest (MODs, quêtes, cartes, etc.), et pour trouver d'autres personnes pour partager le travail.

Un p'tit utilitaire ... euh ... utile ?

Messagepar Talis_Cat » Mer Oct 29, 2008 1:25 pm

Ca fait un moment que ça me tourmentes de pas pouvoir éditer les .dbr sous OppenOffice Org (ou Excel d'ailleurs)

Je me suis enfin décidé à m'y mettre mais avant je voudrais m'assurer que ça n'intéresse personne d'autres ou que ça n'a pas déjà été fait (j'ai lu que CAS avait fait un truc similaire, et probablement mieux, mais il n'avait pas l'air de vouloir partager le méchant :D )

La principale raison pour laquelle je pose la question et au cas où ça poserait problème à certains que ce soit des macros Openoffice et non Excel et aussi si il y aurait des suggestions de choses à implémenter.
Et puis je saurais si ça vaut la peine de le mettre sur mon serveur ftp (je sais même pas si il est encore valide :lolol: )

Bon une petite description de comment je vois la chose pour finir :

Un onglet Extraction avec deux colonnes, une pour la liste des fichiers à extraire (en gérant les wildcards comme '*' ou '?') et une pour la liste des champs à extraire (genre charlevel, faudra faire gaffe au majuscules !!! )
Eventuellement une case en haut pour le nom de l'onglet créé par l'extraction.
On lançerait (pas trop fort :tusors: ) la macro extraction et ça créerait un nouvel onglet avec en absicce les champs et en ordonnée le nom des fichiers .dbr concernés (un peu à la Diablo ...) Les champs non trouvés aurait la mention N/A ce qui permettrait en plus de 'tagger' (c'est quoi le terme adéquat en Français ... Marqué ? Beurk ...) les champs non modifiés pour éviter les problèmes

Une fois les modifs faites on se placerait sur l'onglet contenant notre tableau et on lancerait compilation (pas trop ... non rien) et ça réintégrerait les données dans la .dbr qui va bien.

Bon bien sur faudra d'abord 'sortir' toutes les .dbr (avec TQVault par exemple)
De plus les 'int' et surtout les 'arrays' vont me donner des maux de crânes, faut pas qu'elles soient extraites en tant que 'string' et lors de la recompilation faudra que les virgules se retransforment en points et qu'il y a éventuellement le bon nombre de 0 pour les valeur de type 16.00000 (quoique, si ça se trouve le jeu s'en fout ...)

Mais je penses que ça vaut la peine.

Bref, qu'en pensez-vous, des idées, quelqu'un l'a déjà fait ou sait comment résoudre une partie des problèmes qui se profile ?
Avatar de l’utilisateur
Talis_Cat
Chasseur de Rats
 
Messages: 11
Inscription: Dim Oct 26, 2008 11:18 pm

Messagepar Ctrl-Alt-Suppr » Mer Oct 29, 2008 2:39 pm

Je serais bien incapable de faire ça ...

Je traite les .dbr comme n'importe quels fichiers texte.
Des .BAT avec diverses commandes DOS me permettent d'extraire et de traiter les paramètres.
J'analyse, je transforme et j'automatise sous Excel, avec quelques MacroVB (ce sont elles que je ne veux pas divulguer, car certaines sont professionnelles ... )

Mais pour un fichier .dbr, tu l'ouvres avec le bloc note, tu fais copier/coller dans Excel, tu convertis en fonction d'un caractère spécifique ... et hop te voilà avec 1 colonne pour les paramètres, 1 pour les valeurs.
Tout simplement.
Si tu trouves ça fastidieux, tu enregistres une macro toute simple de 2~3 étapes, et tu lui appliques un racc. clavier.

Il n'y a rien de compliqué dans la démarche ... ce qui est complexe (et long) avec les données de TQ, c'est de déceler les erreurs.
Exemple, si 998 monstres ont une valeur 020 et deux ont 0,20 ... faut pas mal creuser pour trouver cet écart ... puis réfléchir à une éventuelle correction si besoin.
Concernant les vrais BUGS (j'ai pas oublié que je dois finir une réponse dans un autre sujet) c'est plus complexe, car parfois il faut réussir à contourner les mécanismes du jeu pour arriver à une solution.
Avatar de l’utilisateur
Ctrl-Alt-Suppr
Administrateur
 
Messages: 5918
Inscription: Jeu Juin 29, 2006 5:33 pm

Messagepar Talis_Cat » Mer Oct 29, 2008 6:59 pm

Mais pour un fichier .dbr, tu l'ouvres avec le bloc note, tu fais copier/coller dans Excel, tu convertis en fonction d'un caractère spécifique ... et hop te voilà avec 1 colonne pour les paramètres, 1 pour les valeurs.
Tout simplement.
Si tu trouves ça fastidieux, tu enregistres une macro toute simple de 2~3 étapes, et tu lui appliques un racc. clavier.


Ben en fait ça je sais faire mais j'aimerais bien pouvoir éditer tout un tas de créatures en même temps et sans avoir tout les champs inutiles. De plus, comment revenir vers un fichier dbr ? Juste en créant un .txt à partir de ta feuille Excel ? Y'a pas de caractères chelou qui s'insèrent et tout ? (j'imagines que c'est là où tes fichiers .bat interviennent ;) )

Mais en ce qui concerne l'utilité de ce potentiel 'utilitaire' voici le scénario que je vois :

Je désires changer les niveaux de base de toutes mes créatures ainsi que leur défense en fonction d'un petit tableau de conversion que j'aurais fait (celui pour les niveaux est facile à faire, celui pour la défense ... ben là j'ai un doute)
Avec ta méthode je suis obligé d'ouvrir tout les fichiers créatures un par un et de leur appliqué les modifs. (en tout cas si j'ai bien compris)

Avec l'utilitaire j'indiquerais juste les chemins d'accès pour les créatures (en mettant *.dbr pour toutes les extraire) je préciserais le champ charlevel et skilllevel (éventuellement extraire toutes les skills au cas où la défense ne soit pas partout au même endroit)

Ensuite je fais une petite formule qui va transformer direct les valeurs level et défense en fonction des-dites chartes que j'aurais mises sur un autre onglet (par exemple XPx3 Lvl2->Lvl4, je crois)
Puis je fais un copier coller sur toutes les colonnes pour l'appliquer à tout le monde, je fais ensuite un nouveau copier collage spécial pour virer la formule et ne garder que les valeurs et enfin je 'recompiles'

Plus simple et plus rapide, non ? (en tout cas une fois l'utilitaire déjà programmé :D ) Ou peut-être que je suis encore trop habitué à éditer Diablo II ...
Avatar de l’utilisateur
Talis_Cat
Chasseur de Rats
 
Messages: 11
Inscription: Dim Oct 26, 2008 11:18 pm

Messagepar Mostal » Sam Nov 01, 2008 9:13 am

C'est tres simple de faire ça.

CAS a raison, les dbr sont des fichiers textes.
Pour l'edition d'un DBR je suis amoureux d'un notepad qui s'appelle... Notepad++ (juste enormissime, fantastique, génial... bref de très loin le meilleur : http://notepad-plus.sourceforge.net/fr/site.htm )

Maintenant si tu veux traiter en masse, il te suffit d'écrire un script avec le langage que tu aimes qui va parser ton document, tu repères le ou les champs qui t'intéressent, tu les traitent en fonction de de tes besoins. Tu recomposes ta ligne modifiée et tu l'insères en lieu et place qui convient.
Assure toi que ton script enchaine bien avec les dbr suivant en suivant l'arborescence de la structure de ton extraction.

Et environ 3 à 8s plus tard (selon ton processeur et le langage utilisée) tu peux avoir traité plusieurs milliers de fiches.

Tu peux tout faire au sein d'un script mais tu peux aussi scinder tes actions. Code un type de correction (surtout si tu tiens compte déjà de plusieurs éléments différents) par famille.
Par exemple un script pour changer l'XP selon le level, un autre pour modifier de 20% la taille de toutes les créatures etc...
Cela te permettra de détacher tes modifications un peu comme un ensemble de fonctions.

Tu as sans doute le remarquer déjà mais la structure est composé du TAG et de points virgules et d'une fin de ligne (comme un CSV en fait). Donc 'split' au niveau de la virgule et recompose ton tableau avec autant de séparateur que ton 'count' t'indique.


Pour le parsing appuie plutôt un Regex qu'un Posix mais ça tu t'en doutes :oops:

Ah oui et au début je te conseille de désactiver l'écriture du fichier et de lire tes lignes de debug pour voir si tes modifications à l'écran sont correcte.

Travaille aussi sur une copie de tes DBR. Avant de lancer le traitement en masse, fais un compare-it pour voir si uniquement tes modifications ont été appliquées. Au début ma recherche était mal foutu et mon script modifiait des paramètres que je ne souhaitais pas. Me fiance donc.
Mais une fois que tu es carré, tu peux y aller à la chaine.

@+

Tu feras sans doute mieux je te laisse le code central du parsing pour t'inspirer :
Code: Tout sélectionner
            $contenu = file_get_contents($rep.$dir); // on recupere le contenu du fichier comme une chaine

            // Dans le fichier on repère la patern à détecter
            if (preg_match_all('#characterLife,(.*?),#', $contenu, $resultat))
            {   
               // Pour toutes les occurences
               for($i = 0; $i < sizeof($resultat[$i]); $i++)
               {   
                  echo "<br><br>Traitement de characterLife : "; echo $resultat[1][$i];
                  // Traitement des ; dans la chaine
                  $tab = split(';',$resultat[1][$i]);
                  
                  $chaine = "";
                  for ($j = 0; $j < count($tab); $j++)
                  {
                     // Modification de la valeur cible
                     $recalcul = intval($tab[$j] * $valeurclef / 100);
                     $newresult = $tab[$j] + $recalcul;
                     echo "<br>+$valeurclef % de vie : $newresult";
                     $chaine = $chaine.";".$newresult;
                  }
                  $chaine = substr($chaine, 1);

                  echo "<br>Resultat final characterLife : $chaine";
                     
                  // On remplace l'ancien contenu par le nouveau nom de fichier
                  $new = str_replace ( "characterLife,".$resultat[1][$i], "characterLife,".$chaine, $contenu);
Avatar de l’utilisateur
Mostal
 
Messages: 1308
Inscription: Ven Aoû 10, 2007 11:46 am

Messagepar Talis_Cat » Jeu Nov 06, 2008 6:56 pm

Merci pour le lien et les conseils je vais regarder ça pour voir si ça me correspond mieux.
Le désavantage c'est que je ne pourrais pas utiliser directement les tableaux de conversion de level et de défanse que j'avais fait sous OpenOffice Calc tel quel ...
Et puis ce serait bien de faire quelque chose que les non programmeux puissent utiliser et de relativement universel d'un point de vue utilisation possible (plutôt qu'un script par genre de modif) ça encouragerait peut-être à la création de mods ?

Une question au passage : l'extraction de donnée par TQVault est-elle fiable, ou y a t-il un risque de corruption des .dbr ?
Avatar de l’utilisateur
Talis_Cat
Chasseur de Rats
 
Messages: 11
Inscription: Dim Oct 26, 2008 11:18 pm

Messagepar SuePitt » Ven Nov 14, 2008 5:09 pm

Salut Talis_Cat !

Je sais que ça fait un petit moment maintenant que tu as posté ce sujet mais je voudrais le relancer car l'idée me paraît très très intéressante.

Je ne suis pas du tout calée dans la technique, et je n'ai pas tout compris à vos échanges MAIS Kreeloo et moi on rêve d'un outil qui permette de :
- ne modifier que CERTAINES caractéristiques des .dbr
- à base de FORMULES (donc ce ne sera pas le même résultat à chaque fichier)
et on voudrait faire cela d'un trait, dans un même tableau,
- puis le réinjecter ensuite dans plusieurs fichiers .dbr d'origine (pour du traitement par lot)
.

Est-ce que le script que propose Mostal permet de faire cela en fait ? Et avec quoi peut-on créer et utiliser les scripts ?
J'ajoute que nous utilisons Notepad++ et AutoIt mais nous ne sommes ni codeurs ni développeurs (donc notre utilisation n'est pas celle de professionnels).

Je voudrais juste savoir si ce que nous souhaitons existe ou peut exister ou si nous devons nous résigner et nous contenter de ce qu'il y a déjà à notre disposition ?

P.S : "Et puis ce serait bien de faire quelque chose que les non programmeurs puissent utiliser et de relativement universel d'un point de vue utilisation possible (plutôt qu'un script par genre de modif) ça encouragerait peut-être à la création de mods ?"
--> Oui je suis bien d'accord ! ^^ On va le faire notre mod, quoi qu'il en coûte ... mais si c'est plutôt facile que compliqué on est preneur !! Et c'est surtout les caractéristiques des monstres qui sont très pénibles à modifier quand on les fait presque 1 par 1. :plit:
Dernière édition par SuePitt le Sam Nov 15, 2008 1:43 pm, édité 1 fois.
Itemus 1.4 co-creator and Tormentress co-killer
Avatar de l’utilisateur
SuePitt
Pourfendeur de Rats
 
Messages: 166
Inscription: Mer Avr 16, 2008 5:46 pm
Localisation: Between the sky and the sea

Messagepar Talis_Cat » Ven Nov 14, 2008 11:59 pm

Je n'ai pas encore regardé du côté de ce que proposais Mostal (je suis parti en vacances peu de temps après avoir posté ce message) Mais l'idée que j'avais à la base semble correspondre à ta demande.

Pour reprendre l'exemple de la chose que je voulais faire (le changement de level de tout les monstres) voilà comment je vois la chose :
Nota : J'ai mis des '*' afin de renvoyer à des informations/réflexiions complémentaires sans nuire à la lisibilité de la chose ...

- J'indique le chemin d'accès vers mon mod *
- J'indique le nom de l'onglet où je veux voir apparaitre mes résultats.
Exemple : Change_lvl (c'est plus 'cosmétique' qu'autre chose mais ça peut aider à s'y retrouver si on extrait plusieurs tableau)
- On indique sur la première feuille tout les répertoires contenant les .dbr qui nous intéressent **
Exemple : Tous les répertoires contenant les monstres
- De même on précise les champs (les caractéristiques, si tu préféres) qui nous intéressent.
Exemple : charlevel ***
- Je cliques sur le bouton qui va bien
- Un nouvel onglet est créé avec une ligne par .dbr (le nom figurera dans la première colonne)
Exemple : 1ère colonne toutes les .dbr de monstres. 2ème colonne : les level correspondant aux-dits monstres (enfin, si tout c'est bien passé :D )
- On fait les modifs comme dans un tableur normal (on peut faire des formules ou autres) ****
Exemple : Je crées deux nouvelles colonnes intitulées *Old Lvl et *New Lvl, ainsi qu'une copie de la colonne charlevel que j'intitule *Base Lvl. J'utilise la fonction qui permet de chercher une valeur (ici *Base Lvl) dans un tableau (celui constitué de *Old et *New Lvl) et de récupérer la valeur qui va bien dans la colonne charlevel (c'est pour cela qu'on en fait une copie ...) Je fais une copier/coller de la fonction recherche dans toutes les cellules de la colonne charlevel et voilà !
- Je n'ai plus qu'à revenir sur la première page, indiquer dans la cellule adéquate le nom de l'onglet où est mon tableau et à cliquer sur le bouton 'recompilation' (nom provisoire)
Tout est alors réinjecté dans les fichiers .dbr adéquat

* : Je penses aussi qu'il faudra indiquer un chemin vers un répertoire où TOUTES les .dbr non moddées sont situées afin d'avoir automatiquement une création des fichiers dont on a besoin dans le répertoire de notre mod. D'un autre côté cela créera aussi des fichiers qui ne sont pas nécessaires ...

** : Je pourrais automatiquement extraire les sous-répertoires mais pour l'instant je ne préfére pas ... peut-être rajouter une colonne où l'on indiquerait si on veut oui ou non extraire leur contenu ?

*** : A noter que c'est une array, une liste de valeur pour les non initiés, et que je ne suis pas encore sur de la façon dont je vais les traiter : une colonne par valeur, demander de préciser les valeurs qu'on veut extraire (exemple charlevel 1, charlevel 2 ...) ou une autre méthode

**** : A noter que l'on pourra librement rajouter ou supprimer des colonnes ou indiquer que tel colonne que l'on a extraite ne sert que de référence (ça évites les changements de valeurs malencontreux) Il suffira pour cela simplement de faire figurer un * au début du nom de la colonne ou de lui donner une valeur vide (mais on risque alors d'oublier quelle valeur la-dite colonne contient ...)

Voilà, j'espére avoir été clair sur le fonctionnement et le but de la chose. Je ne sais pas encore combien de temps cela prendra ... j'espére pas plus d'un mois.
Avatar de l’utilisateur
Talis_Cat
Chasseur de Rats
 
Messages: 11
Inscription: Dim Oct 26, 2008 11:18 pm

Messagepar SuePitt » Lun Nov 17, 2008 11:19 am

Ok Talis, merci de ta réponse, il ne me reste plus qu'à te souhaiter bon courage alors !
Tiens nous au courant de tes trouvailles ou difficultés, on t'aidera comme on peut !
Itemus 1.4 co-creator and Tormentress co-killer
Avatar de l’utilisateur
SuePitt
Pourfendeur de Rats
 
Messages: 166
Inscription: Mer Avr 16, 2008 5:46 pm
Localisation: Between the sky and the sea

Messagepar Talis_Cat » Lun Nov 17, 2008 1:49 pm

Merci pour les encouragements :)
J'espère pouvoir 'livrer' ça rapidement !



Pour l'instant les principaux obstacles que je vois sont :

- La manière de gérer les arrays. D'ailleurs si les utilisateurs potentiels ont une préférence leur avis est le bienvenue ;)

Pour l'instant je vois trois solutions :

1) Extraire la totalité de l'array comme une seule valeur (avec les ';' séparateurs bien sur) La solution la plus facile mais cela risque de compliquer leur modification à l'aide de formule sous Excel/OpenOfficeCalc

2) Faire une colonne par valeur contenu dans l'array et les intituler, par exemple, charlevel[1], charlevel[2] ...

C'est probablement la solution la plus pratique et c'est celle que j'ai choisie pour le moment mais elle est plus dure à implémenter (enfin pas tant que ça, donc c'est secondaire comme inconvénient) et peu de plus poser parfois problème (je pense aux arrays contenant une vingtaine de valeurs ou, surtout, celles n'ayant pas toujours le même nombre de valeur suivant les fichiers ...)

3) Comme la solution 2 mais l'utilisateur aura la possibilité de préciser le 'plage d'extraction' pour n'obtenir que certaines valeurs de l'array (par exemple charlevel[2] jusqu'à charlevel[4])

Inutilement complexe à mon goût surtout que cela ne corrige que le problème de trop grand nombre de valeur et, dans une certaines mesure seulement, le problème des arrays de taille variable



- Comment gérer les .dbr non présentes dans le répertoire du mod
Là encore feedback utilisateur, même néophyte, bienvenue

1) On extrait juste les valeurs des .dbr déjà présents dans le répertoire du mod.

Solution de fainéant (pour moi) qui présente quand même un avantage : on contrôle parfaitement les fichiers que l'on édite ou pas

A noter : pas besoin de tous les extraire via l'ArtManager, on peut aussi utiliser TQVault (ou autres) pour extraire les .dbr de la database et copier/coller ceux qui nous intéresse dans le répertoire du mod.

2) On crée automatiquement les .dbr manquants (sans écraser ceux déjà existant, bien sur) dés l'extraction.

Principal problème : trop de fichiers inutilement créés !

3) On lit les valeurs des fichiers dans le dossier du mod en premier lieu et on rajoutes celles qui manque SANS créer le fichier. Les fichiers ne sont créés que lors de la recompilation si ils ne sont pas présents ET qu'il y a eu une modification des valeurs

Problème : CHIANT à programmer (mais ça c'est mon problème :D ) et source potentielle de recompilation à rallonge ...



- Enfin un problème qui concerne le script en lui-même :

La 'réinjection' des valeurs numériques au bon format (sans chiffres après la virgule ou avec 6, je pense que ce sont les deux seuls formats utilisés)

Soit je passe par les .tpl (complexe vu que certains .dbr utilisent plusieurs template)
soit je fait plein de test pour connaitre la nature de la valeur présente dans le fichier avant d'y copier la nouvelle valeur (pénible à programmer, d'où une probabilité plus élevée d'erreur dans le script. De plus, cela risque de ralentir le traitement de trop nombreuses valeurs ...)
Avatar de l’utilisateur
Talis_Cat
Chasseur de Rats
 
Messages: 11
Inscription: Dim Oct 26, 2008 11:18 pm


Retourner vers Développement de cartes, projets futurs ou suggestions...

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités