Página 1 de 1

escena.pl

NotaPublicado: 23 Ago 2007 13:10
por Niskir
No es precisamente el código más complejo jamás escrito, pero hace la parte más pesada para sacar un diálogo de un log. Los emotes hay que hacerlos a mano.

Uso: perl escena.pl < log

Código: Seleccionar todo
#!/usr/bin/perl

while (<STDIN>) {
        print $_ if (m/dice.*\'$/ || m/Dices.*\'$/ || m/susurra.*\'$/i);
}

NotaPublicado: 27 Ago 2007 22:59
por Niskir
Una versión un poco mejor, a la que le podemos pasar como parámetros los nombres de los jugadores que intervienen, p.ej: escena.pl Jug1 Jug2 Jug3 ... < log

Código: Seleccionar todo
#!/usr/bin/perl

use strict;

my $i;
my $ya=0;

while (<STDIN>) {
        if (m/(dice|susurra|grita|chilla).*\'$/i) {
                print $_;
                $ya=1;
        }
        if ($#ARGV>-1 && !$ya) {
                foreach $i (0 .. $#ARGV) {
                        print $_ if (m/$ARGV[$i]/);
                }
        }
        $ya=0;
}


Ya solo queda poner los emotes propios (los de los otros jugadores los pilla) y limpiar algún prompt que se haya podido colar.

NotaPublicado: 27 Ago 2007 23:34
por Rilke
Joer, estas cosas siempre vienen muy bien.

Ahora... (es que yo soy un poco torpe con estas cosas... aunque no el único :P)... ¿cómo se utilizan estos scripts? ¿Son para Zmud? El "/user/bin/" me suena tan linux...
Cuéntanos qué son exactamente, y como usarlos, y los ponemos como post-it para que no se pierda.

Seguimos hablando,

Rilke

NotaPublicado: 28 Ago 2007 00:40
por Niskir
Son en perl para línea de comando. Si usas Unix/Linux/BSD/MacOS y similares lo más probable es que ya tengas perl instalado, o que sea trivial hacerlo desde el instalador de tu sistema. Si usas otra cosa puedes probar aquí: http://www.cpan.org/ports/

Pero no sé yo si me molestaría en hacer una instalación completa de perl sólo para esta tontería de script :D

Además es probable que tu sistema tenga herramientas nativas que permitan hacer lo mismo sin tener que instalar nada.

En cuanto al uso, es sencillo. Si has grabado una escena con tu cliente mud, se habrá creado un fichero de texto (digamos log.txt, p. ej). Lo que hace el script es sacar sólo las líneas de ese fichero que contengan ciertos patrones propios de una escena (dice, susurra...) y los nombres de los jugadores que le pases como parámetro.

Código: Seleccionar todo
$ perl escena.pl Rilke Niskir <log> escena.txt

(debería poner log.txt, pero parece que los signos de mayor y menor interfieren con el código del foro)

Esto dejaría en el fichero escena.txt los diálogos y emotes de una escena en la que hubíeramos participado tú y yo. Siempre requerirá alguna edición manual, pero es mucho más cómodo que andar copipegando línea a línea.

Espero que el rollo que he soltado responda a tu pregunta ;)

NotaPublicado: 28 Ago 2007 00:42
por Rilke
Perfecto!

Pruebo ahora mismo.

NotaPublicado: 28 Ago 2007 00:50
por Rilke
Probado.
Y, en efecto, a excepción de esos detalles que comentabas que hay que editar a mano...

ES UNA MARAVILLA!!!!!

Cuántas horas de limpiar y limpiar logs, por dios!!! jajajaja


Gracias Niskir.
Informanos si tienes avances o modificaciones al script, ok?


Ril.

NotaPublicado: 28 Ago 2007 02:25
por Niskir
Me alegra que te sirva. Queda por hacer que también pille los emotes propios, pero hay tantos...

Si se me ocurre alguna mejora la pondré en este hilo.

NotaPublicado: 28 Ago 2007 02:59
por Niskir
Me he puesto a enredar y ha salido esto:

Código: Seleccionar todo
#!/usr/bin/perl

use strict;

my $i;
my $ya=0;
my $linea;
my @social=('Compras', 'Bebes', 'Miras', 'Ries', 'Sonries',
        'Respingas', 'Elevas', 'Zarandeas', 'Te comes');

while (<STDIN>) {
        $linea=$_;
        $linea=~s/<d> // if (m/^<\d+/); # quitar prompt
        if ($linea=~m/(dice|susurra|grita|chilla).*\'$/i) {
                print $linea;
                $ya=1;
        }
        if ($#ARGV>-1 && !$ya) {
                foreach $i (0 .. $#ARGV) {
                        if ($linea=~m/$ARGV[$i]/ && !$ya) {
                                print $linea;
                                $ya=1;
                        }
                }
        }
        foreach $i (0 .. $#social) {
                if ($linea=~m/^$social[$i]/ && !$ya) {
                        print $linea;
                        $ya=1;
                }
        }

        $ya=0;
}


Ahora "sólo" queda ir llenando el array @social con los emotes más habituales (basta con el principio de la frase).

NotaPublicado: 28 Sep 2007 01:23
por Niskir
La "penúltima" versión:
Código: Seleccionar todo
#!/usr/bin/perl

use strict;

my $i;
my $ya=0;
my $linea;
my $total=0;
my $extraidas=0;
my @social=('Compras', 'Bebes', 'Miras', 'Ries', 'Sonries',
        'Respingas', 'Elevas', 'Zarandeas', 'Te ', 'Dices',
        'Susurras', 'Pones', 'Coges', 'Chillas', 'Gritas',
        'Ruedas', 'Felicitas', 'Hmm..', 'Das ', 'Le ', 'Meditas',
        'Haces', 'Blandes', 'Saltas', 'Taconeas', 'Abofeteas',
        'No puedes', 'Toses', 'Tu cabezota', 'Tiras', 'Dejas',
        'Guardas', 'Aplaudes', 'Asientes', 'Senyalas', 'Niegas',
        'Cierras', 'Abres');

while (<STDIN>) {
        $total++;
        $linea=$_;
        $linea=~s/&lt;\d+.+&gt; // if (m/^&lt;\d+/); # quitar prompt
        $ya=1 if ($linea=~m/(dice|susurra|grita|chilla) \'.*\'$/);
        if ($#ARGV&gt;-1 && !$ya) {
                foreach $i (0 .. $#ARGV) {
                        $ya=1 if ($linea=~m/$ARGV[$i]/ && !$ya);
                }
        }
        foreach $i (0 .. $#social) {
                $ya=1 if ($linea=~m/^$social[$i]/ && !$ya);
        }
        if($ya) {
                print $linea;
                $extraidas++;
        }
        $ya=0;
}

print STDERR "Extraídas $extraidas líneas de un total de $total.\n";


Edit: parece que hay un problemilla con los signos de mayor y menor y el foro, hay que sustituir &lt; por "menor que" y &gt; por "mayor que".

Si encontráis sociales que no capte el script, los añadís a la matriz @social (basta el principio de la frase, entre comillas simples y separadas unas de otras por comas).