JeuxOnLineForumsPlusCréer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [PHP] Gestion des fichiers 2DA RSS
   
Répondre
Partager Outils Rechercher
Avatar de Ia~
Ia~
Alpha & Oméga
 
Avatar de Ia~
 
Bon, premiers résultats.

En premier, une bête petite fonction en NWScript, Set2DAString :
Code PHP:
// Ecrit dans le log la demande d'ecriture dans un fichier
//  2DA, interpretee par le 2DAWriter.
void Set2DAString(string s2DAstring sColonneint nLignestring sValeur) {
    
WriteTimestampedLogEntry("2DAWrite|"+s2DA+"|"+sColonne+"|"+IntToString(nLigne)+"|"+sValeur);

Et en second, un script PHP à mettre en shell ou a executer de temps en temps, qui parse les logs et modifie les 2DA en fonction.
Code PHP:
//:: Fonction : Parse2DAWrite
// Traite les 2DAWrite dans un fichier de log NWN et régénère un
// nouveau log sans les 2DAWrite déjà traités pour remplacer l'ancien.
// $file    => Chemin du fichier du log serveur
// $2dapath => Chemin du répertoire des 2DA (ne pas oublier le slash ou l'antislash à la fin, je ne le met pas pour la compatibilité Lin/Win)
function Parse2DAWrite($file,$2dapath) {
    
$fp fopen($file,"r");
    
$started 0;
    while(!
feof($fp)) {
        
$line fgets($fp,8192);
        while(
$line[0] == "."$line[0] = "";
        if(
$started == 1) {
            if(
strpos($line,"[") === false$started 0;
            else {
                
$line substr($line,strpos($line,"]") + 2);
                if(
substr($line,0,9) == "2DAWrite|") {
                    
$new explode("|",substr($line,9));
                    
$data[$new[0]][] = array($new[1],$new[2],$new[3]);
                }
            }
        }
        if(
strpos($line,"End Server Options") > 0$started 1;
    }
    
fclose($fp);
    foreach(
$data as $key => $value) {
        
$work = new C2DA($2dapath.$key.".2da");
        foreach(
$value as $key2 => $value2$work->Set2DAString($value2[0],$value2[1],$value2[2]);
        
$work->Save2DA($2dapath.$key.".2da");
        unset(
$work);
    }

Cette fonction nécessite au préalable l'inclusion de l'objet C2DA précédemment posté.

Encore un dernier truc : pourquoi avoir choisi PHP ? Plusieures raisons.
- C'est un langage que je maitrise pas trop mal, et ça aide à pas mettre 3 plombes à faire un script;
- C'est un langage sur, efficace, open-source;
- Il est portable sur Windows et Linux;
- On peut l'utiliser dans des pages Web.

Je demandais pas mieux, alors j'ai adopté.

J'ai testé le script, ça fonctionne. J'ai utilisé l'override pour procéder, ayant la flemme de faire (ou de chercher, je crois que ça existe déjà) un module PHP pour décompresser/recompresser les 2DA d'un HAK ou d'un BIF.

Dernière étape : Un p'tit prog (Windows, vu que sous Linux, un shell suffit) qui se lance en tray pour parser automatiquement les logs tous les X temps.
J'ai vaguement commencé le développement, mais c'est assez chiant, vu que je dois refaire toute la classe C2DA en C# (je code ça en C#) pour éviter de devoir installer à chaque fois l'interpréteur PHP.

Je sais pas si ça va vraiment servir à quelqu'un, vu que 90% des serveurs qui auraient usage du script tournent sous Linux, et vu les améliorations très très nettes de la nouvelle version du serveur Linux (encore en beta fermée, je crois).

Bref, votre avis. Ca vaut le coup que je finisse, ou je laisse dans l'état ? C'est fonctionnel ainsi, le "relanceur", c'est du gadget.
Lien direct vers le message - Vieux
Avatar de 'Az
'Az [P.H.]
Alpha & Oméga
 
Avatar de 'Az
 
ben si tu fais ca en C je reprendrais probablement le code, mais sous une forme compilée je m'en fous complètement ^_^

voila c dit ^^

PS : tt pas sencé le sortir hier soir ca ???? tu prend tu retard dans ton boulot c pas bien
Lien direct vers le message - Vieux
Avatar de Ia~
Ia~
Alpha & Oméga
 
Avatar de Ia~
 
Si je le fais c'est en .NET de toute façon, et il y a une plate-forme .NET sous Linux, non ?

Et pour hier soir, ouais, hein, pfffrrrt !!
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > [PHP] Gestion des fichiers 2DA
   

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 15h10.
   

© 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