Balzhur • Ver Tema - escena.pl

escena.pl

Tienes alguna duda de alguna trama? Quieres comentar alguna escena publicada? Aquí puedes escribirlas :)
Reglas del Foro
Antes de postear asegurate de conocer las Normas

escena.pl

Notapor Niskir el 23 Ago 2007 13:10

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);
}
Niskir
 
Mensajes: 280
Registrado: 07 Jul 2007 03:31

Notapor Niskir el 27 Ago 2007 22:59

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.
Niskir
 
Mensajes: 280
Registrado: 07 Jul 2007 03:31

Notapor Rilke el 27 Ago 2007 23:34

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
Avatar de Usuario
Rilke
 
Mensajes: 412
Registrado: 17 May 2004 23:11
Ubicación: Bosque de Kedrova

Notapor Niskir el 28 Ago 2007 00:40

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 ;)
Niskir
 
Mensajes: 280
Registrado: 07 Jul 2007 03:31

Notapor Rilke el 28 Ago 2007 00:42

Perfecto!

Pruebo ahora mismo.
Avatar de Usuario
Rilke
 
Mensajes: 412
Registrado: 17 May 2004 23:11
Ubicación: Bosque de Kedrova

Notapor Rilke el 28 Ago 2007 00:50

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.
Avatar de Usuario
Rilke
 
Mensajes: 412
Registrado: 17 May 2004 23:11
Ubicación: Bosque de Kedrova

Notapor Niskir el 28 Ago 2007 02:25

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.
Niskir
 
Mensajes: 280
Registrado: 07 Jul 2007 03:31

Notapor Niskir el 28 Ago 2007 02:59

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).
Niskir
 
Mensajes: 280
Registrado: 07 Jul 2007 03:31

Notapor Niskir el 28 Sep 2007 01:23

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).
Niskir
 
Mensajes: 280
Registrado: 07 Jul 2007 03:31



¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado


cron