edlobez escribió:
Código:
void update ( PropertyEntry pe , World w ){
int RndSustos;
int numSustos=4;
int numCanta=10;
String[] canta=new String[numCanta];
String[] sustos=new String[numSustos];
sustos[0]="Ayyy que susto, que asco de pájaro";
sustos[1]="¡Pero de donde habrá salido ese bicho!";
sustos[2]="Es que no me lo quito de la cabeza, tan negro y feo";
sustos[3]="¡Con lo limpio que lo tengo todo, no me explico de por dónde se habrá colado!";
canta[0]="¿Qué tiene la zarzamora que a todas horas llora que lloraaaaaa por los rinconessss?";
canta[1]="ella que siempre reíaaaaa y presumíaaaaa de que partía los corazoneeeeeees";
canta[2]="En el café de levante entre palmas y alegríaaaaa cantaba la zarzamora";
canta[3]="se lo pusieron de mote porque dicen que teniaaaaaa los ojos como la mora";
canta[4]="Le habló primero a un tratante, y olé, y luego fue de un Marques";
canta[5]="que la lleno de brillantes, y olé, de la cabeza a los pies";
canta[6]="De un querer hizo la prueba y un cariño conoció";
canta[7]="que la trae y que la lleva por la calle del dolor";
canta[8]="Los flamencos del colmado la vigilan a deshoraaaaa";
canta[9]="porque se han empestillado en saber del querer desgraciado que embrujo a la zarzamora";
RndSustos=world.getRandom().nextInt(numSustos);
RndCanta=world.getRandom().nextInt(numCanta);
//el lanzador de frases
if ( equals( pe.getName(), "mensajes") ) {
//miramos las propieddes a true
if (get(self, "asustada")) {
//mobile("jugador").write("\n");
self.say(sustos[RndSustos]);
}
else if (get(self, "cantando")) {
//mobile("jugador").write("\n");
world.getMessages().setNextMessage("someone.says.something", "Eugenia cantando \"$text\".\n");
self.say(canta[RndCanta]);
world.getMessages().setMessage("someone.says.something", "Eugenia dice \"$text\".\n");
}
// reiniciamos el contador
setTime(self, "mensajes", 30);
end();
}
//miramos si ha llegado a cero el tiempo que está asustada eugenia
if ( equals ( pe.getName() , "asustada" ) ) {
//mejor que no empiece a cantar hasta dentro de un ratín
set(self, "cantando", false);
setTime(self, "cantando", 30);
set(self, "asustada", false);
self.say("ayy ya se me pasó el susto señor Pedro, menos mal");
Thread.sleep(4000);
end();
}
// vuelve a cantar
if (equals(pe.getName(), "cantando") && !get(self, "cantando")) { set(self, "cantando", true); }
} // fin update
Recupero este mensaje para comentar algo que hablé con Al-K en el IRC. El problema es que el PSI sigue cantando y me explico, en el código anterior en las líneas:
Código:
else if (get(self, "cantando")) {
//mobile("jugador").write("\n");
world.getMessages().setNextMessage("someone.says.something", "Eugenia cantando \"$text\".\n");
self.say(canta[RndCanta]);
world.getMessages().setMessage("someone.says.something", "Eugenia dice \"$text\".\n");
}
Cuando llega el tiempo establecido el personaje suelta una frase de la canción:
Eugenia cantando "que la trae y que la lleva por la calle del dolor".Tenía el problema que alguna veces, cuando el PSI nos tenía que decir algo seguía "cantándolo":
Eugenia cantando dice "Buenas señor Pedro". !!Aquí no está saludando y nos canta.
Por el IRC comentamos de cambiar la línea:
Código:
world.getMessages().setNextMessage("someone.says.something", "Eugenia cantando \"$text\".\n");
por
Código:
world.getMessages().setMessage("someone.says.something", "Eugenia cantando \"$text\".\n");
La cambié y en principio parecía solucionado, pero sigue cantando cuando no toca. Pensaba que justo el PSI nos decía una frase cuando se cumple el tiempo de cantar la frase. Por lo que me he creado una función "dice":
Código:
//función de hablar de los personajes
void dice (String text) {
world.getMessages().setMessage("someone.says.something", "$1 dice \"$text\".\n");
self.say(text);
}
De tal forma que en lugar de la función predefinida "say" de cada personaje, las he cambiado todas por "dice", sin embargo sigue cantando.... y ye me he perdido.
Te paso un log:
>> decir a eugenia "que le pasa al reloj de la pared"
Dices "Señora Eugenia, el reloj de la portería ¿se ha estropeado?".
Eugenia
cantando dice "Parece que sí señor Pedro. Esta mañana al llegar me di cuenta, ayer funcionaba. En cuanto tenga un momento libre lo pondré en hora". !!! ESTA FRASE LA CANTA Y NO SÉ PORQUÉ
Eugenia cantando "Le habló primero a un tratante, y olé, y luego fue de un Marques". !!!ESTA FRASE ESTÁ BIEN LA DEBE CANTAR
No sé porqué me canta la frase respuesta del reloj, si el mensaje lo suelta llamando a la función "dice" que establece el mensaje por defecto.

PD: Verás en el código que te he pegado está aún la función "say", pero es que el código lo he recuperado del mensaje anterior. Te paso el actual:
Código:
void update ( PropertyEntry pe , World w ){
int RndSustos;
int RndCanta;
int numSustos=4;
int numCanta=10;
// sustoAnterior=0;
// canteAnterior=0
String[] canta=new String[numCanta];
String[] sustos=new String[numSustos];
sustos[0]="Ayyy que susto, que asco de pájaro";
sustos[1]="¡Pero de donde habrá salido ese bicho!";
sustos[2]="Es que no me lo quito de la cabeza, tan negro y feo";
sustos[3]="¡Con lo limpio que lo tengo todo, no me explico de por dónde se habrá colado!";
canta[0]="¿Qué tiene la zarzamora que a todas horas llora que lloraaaaaa por los rinconessss?";
canta[1]="ella que siempre reíaaaaa y presumíaaaaa de que partía los corazoneeeeeees";
canta[2]="En el café de levante entre palmas y alegríaaaaa cantaba la zarzamora";
canta[3]="se lo pusieron de mote porque dicen que teniaaaaaa los ojos como la mora";
canta[4]="Le habló primero a un tratante, y olé, y luego fue de un Marques";
canta[5]="que la lleno de brillantes, y olé, de la cabeza a los pies";
canta[6]="De un querer hizo la prueba y un cariño conoció";
canta[7]="que la trae y que la lleva por la calle del dolor";
canta[8]="Los flamencos del colmado la vigilan a deshoraaaaa";
canta[9]="porque se han empestillado en saber del querer desgraciado que embrujo a la zarzamora";
//que no repita el mismo mensaje, el siguiente siempre difierente
do {
RndSustos=world.getRandom().nextInt(numSustos);
} while (RndSustos==sustoAnterior);
sustoAnterior=RndSustos;
do {
RndCanta=world.getRandom().nextInt(numCanta);
} while (RndCanta==canteAnterior);
canteAnterior=RndCanta;
//el lanzador de frases
if ( equals( pe.getName(), "mensajes") ) {
//miramos las propieddes a true
if (get(self, "asustada")) {
//mobile("jugador").write("\n");
self.dice(sustos[RndSustos]);
}
else if (get(self, "cantando")) {
//mobile("jugador").write("\n");
world.getMessages().setMessage("someone.says.something", "Eugenia cantando \"$text\".\n");
self.say(canta[RndCanta]);
world.getMessages().setMessage("someone.says.something", "$1 dice \"$text\".\n");
}
// reiniciamos el contador
setTime(self, "mensajes", 100);
end();
}
//miramos si ha llegado a cero el tiempo que está asustada eugenia
if ( equals ( pe.getName() , "asustada" ) ) {
//mejor que no empiece a cantar hasta dentro de un ratín
set(self, "cantando", false);
setTime(self, "cantando", 30);
set(self, "asustada", false);
setTime(self, "asustada", -1);
self.dice("ayy ya se me pasó el susto señor Pedro, menos mal");
end();
}
// vuelve a cantar
if (equals(pe.getName(), "cantando") && !get(self, "cantando")) { set(self, "cantando", true); }
} // fin update