Bueno, el código que yo he escrito (erróneo) es algo así:
Using perl Syntax Highlighting
$_l = $::char->{look}{body} - 1;
if ($_l == -1) {$z = ([-1,0],[-2,0],[-2,1],[-2,2],[-1,1],[-1,2],[0,1],[0,2])}
elsif ($_l == 0) {$z = ([-1,1],[-2,2],[-1,2],[0,1],[0,2],[1,1],[2,2],[1,2])}
elsif ($_l == 1) {$z = ([1,0],[2,0],[1,1],[2,1],[2,2],[1,2],[0,1],[0,2])}
elsif ($_l == 2) {$z = ([1,-1],[2,-2],[2,-1],[1,0],[2,0],[1,1],[2,1],[2,2])}
elsif ($_l == 3) {$z = ([0,-1],[0,-2],[1,-1],[1,-2],[2,-2],[2,-1],[1,0],[2,0])}
elsif ($_l == 4) {$z = ([-1,-1],[-2,-2],[-1,-2],[0,-1],[0,-2],[1,-1],[1,-2],[2,-2])}
elsif ($_l == 5) {$z = ([-1,0],[-2,0],[-1,-1],[-2,-1],[-2,-2],[-1,-2],[0,-1],[0,-2])}
else {$z = ([-1,-1],[-2,-2],[-2,-1],[-1,0],[-2,0],[-1,1],[-2,1],[-2,2])}
foreach ($z) {
next if (!$::field->isWalkable($::char->{pos}{x} + $z->[0], $::char->{pos}{x} + $z->[1]));
foreach (@{$::npcsList->getItems()}) {
next if ($_->{pos_to}{x} != $::char->{pos}{x} + $z->[0] || $_->{pos_to}{y} != $::char->{pos}{x} + $z->[1]);
foreach (@{$::playersList->getItems()}) {
next if ($_->{pos_to}{x} != $::char->{pos}{x} + $z->[0] || $_->{pos_to}{y} != $::char->{pos}{x} + $z->[1]);
$::Macro::Data::varStack{loc} = "$::char->{pos}{x} += $z->[0] $::char->{pos}{y} += $z->[1]";
}
}
next;
}
$::Macro::Data::varStack{loc} = "none";
if ($_l == -1) {$z = ([-1,0],[-2,0],[-2,1],[-2,2],[-1,1],[-1,2],[0,1],[0,2])}
elsif ($_l == 0) {$z = ([-1,1],[-2,2],[-1,2],[0,1],[0,2],[1,1],[2,2],[1,2])}
elsif ($_l == 1) {$z = ([1,0],[2,0],[1,1],[2,1],[2,2],[1,2],[0,1],[0,2])}
elsif ($_l == 2) {$z = ([1,-1],[2,-2],[2,-1],[1,0],[2,0],[1,1],[2,1],[2,2])}
elsif ($_l == 3) {$z = ([0,-1],[0,-2],[1,-1],[1,-2],[2,-2],[2,-1],[1,0],[2,0])}
elsif ($_l == 4) {$z = ([-1,-1],[-2,-2],[-1,-2],[0,-1],[0,-2],[1,-1],[1,-2],[2,-2])}
elsif ($_l == 5) {$z = ([-1,0],[-2,0],[-1,-1],[-2,-1],[-2,-2],[-1,-2],[0,-1],[0,-2])}
else {$z = ([-1,-1],[-2,-2],[-2,-1],[-1,0],[-2,0],[-1,1],[-2,1],[-2,2])}
foreach ($z) {
next if (!$::field->isWalkable($::char->{pos}{x} + $z->[0], $::char->{pos}{x} + $z->[1]));
foreach (@{$::npcsList->getItems()}) {
next if ($_->{pos_to}{x} != $::char->{pos}{x} + $z->[0] || $_->{pos_to}{y} != $::char->{pos}{x} + $z->[1]);
foreach (@{$::playersList->getItems()}) {
next if ($_->{pos_to}{x} != $::char->{pos}{x} + $z->[0] || $_->{pos_to}{y} != $::char->{pos}{x} + $z->[1]);
$::Macro::Data::varStack{loc} = "$::char->{pos}{x} += $z->[0] $::char->{pos}{y} += $z->[1]";
}
}
next;
}
$::Macro::Data::varStack{loc} = "none";
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
para comprenderlo mejor, básicamente es un código que mira la posición del personaje y devuelve una posición cercana sin obstáculos.
Quitando el hecho del código raro que tiene que ver con el programa y tal, el problema es la primera parte y el foreach; he visto códigos parecidos funcionar pero el mío parece que no tiene ganas... ^^U las variables que no están declaradas en el código es porque ya están sacadas previamente, eso no es problema. Mi problema es con la parte del if del principio asignando $z y el foreach.
¿Alguien sabe cómo debería asignar $z para que funcionara? Porque en el siguiente código:
Using perl Syntax Highlighting
foreach my $z ( [0,0], [0,1],[1,0],[0,-1],[-1,0], [-1,1],[1,1],[1,-1],[-1,-1],[0,2],[2,0],[0,-2],[-2,0] ) {
#...
}
#...
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
PD: espero no haberme equivocado de subforo.