CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 13 Nov 2019 04:55

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 9 mensajes ] 
Autor Mensaje
NotaPublicado: 04 Jun 2009 14:17 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 18 Mar 2004 19:26
Mensajes: 1458
Ubicación: Barcelona
Tengo un bug de esos tontos en InformATE pero que me lleva de cabeza. Veamos, tengo un muro que se puede saltar/trepar desde ambos lados, lo he programado correctamente para que funcione "trepar muro" y que el resto de acciones sean sinónimos poniendo algo tal que así en el antes:
Código:
trepar: if (uno==muro) JugadorA (localidad);
saltar: if (uno==muro) <<trepar muro>>;

y además en el reaccionar_antes he puesto:
Código:
saltar: <<trepar muro>>;

ya que habrá gente que ponga simplemente "saltar".
Esto último no funciona y me gustaría saber porqué.
Otra cosa que no me sale es la de saltar con ayuda de otro personaje, pero tampoco me funciona (la orden sería "súbete a personaje":
Código:
arriba: if (uno==personaje) print "Con la ayuda del personaje logras saltar el muro"; EsperarTecla(0); <<trepar muro>>;

¿Alguna ayuda?

_________________
http://xaviercarrascosa.com/ficcion-interactiva/


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 04 Jun 2009 14:29 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Sep 2004 12:53
Mensajes: 1145
Como no lo dices explícitamente... supongo que el reaccionar_antes te refieres de la habitación, ¿no?

Aparte de eso te sería más sencillo para no repetir código usar:

Código:
trepar, saltar: if (uno==muro) JugadorA (localidad);

_________________
- Lenko -


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 04 Jun 2009 14:39 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Sep 2004 12:53
Mensajes: 1145
Mirando DocumentATE

Citar:
Durante el estado 'Antes' la librería llama a tu código varias veces y puede resultar útil conocer en qué orden lo hace:

1. Si has escrito una rutina llamada RutinaPreJuego, ésta será llamada. Si retorna true, no ocurrirá nada más. La acción ha sido impedida.
2. Se llama de igual forma a la rutina ordenes del objeto jugador. Para más detalles ver la sección sobre criaturas.
3. Se llama a la rutina reaccionar_antes de todos los objetos que estén en las cercanías (más técnicamente, los objetos que están en el 'alcance').
4. Se llama a la rutina antes de la habitación en que tiene lugar la acción.
5. Si la acción se está aplicando sobre un objeto (guardado en la variable uno), se llamará a la rutina antes de ese objeto.


Así que supongo que debes de poner el código de "Saltar" en la rutina antes de la habitación.

_________________
- Lenko -


Arriba
 Perfil  
 
NotaPublicado: 04 Jun 2009 16:31 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 23 Abr 2004 08:49
Mensajes: 2918
Ubicación: España (Galicia)
Hola !

grendelkhan escribió:
y además en el reaccionar_antes he puesto:
Código:
saltar: <<trepar muro>>;



Dado que pones "trepar muro" en lugar de trepar self, deduzco que el reaccionar_antes es el de la habitacion. Este reaccionar_antes nunca es ejecutado (no me preguntes por qué, miesterios de Inform, se ve que no está al alcance), de ahí que no te funcione.

Ponlo dentro del objeto muro, en su reaccionar_antes.

Citar:
ya que habrá gente que ponga simplemente "saltar".
Esto último no funciona y me gustaría saber porqué.
Otra cosa que no me sale es la de saltar con ayuda de otro personaje, pero tampoco me funciona (la orden sería "súbete a personaje":
Código:
arriba: if (uno==personaje) print "Con la ayuda del personaje logras saltar el muro"; EsperarTecla(0); <<trepar muro>>;

¿Alguna ayuda?


A ver, el problema es dónde está ese código. Si está en el reaccionar_antes de la habitación, entonces es normal que no se ejecute. Si quieres ponerlo en el reaccionar_antes del muro:

Código:
object muro
with
   name 'muro',
   description "Un muro de adobe bastante alto.",
   reaccionar_antes [;
      trepar, saltar:
         if ( uno == self ) {
            <<trepar muro>>;
         }
      arriba:
         if ( uno has creature ) {
            print "Te apoyas en ", (el) uno, " para subir.^";
            print "~¡Hasta luego, Lucas!~^";
            <<trepar muro>>;
         }
   ],
   antes [;
      trepar:
         print "Saltas el muro, y encuentras...^";
         jugadorA( loc, 2 );
         rtrue;
   ]
;


También puedes repartirlo por el código adelante (por si no ha sonado excesivamente peyorativo, no te lo aconsejo), y poner lo de arriba en el propio personaje:

Código:
object Lucas
with
   name 'Lucas',
   description "Lucas es un tío muy majo. Suele dejar que te subas a su espalda.",
   antes [;
      arriba:
         if ( localizacion == parent( muro ) ) {
            print "Te apoyas en ", (el) uno, " para subir.^";
            print "~¡Hasta luego, Lucas!~^";
            <<trepar muro>>;
         } else "Hombre, por lo menos hay que tener una buena razón-";
   ]
has creature;


Espero que sirva.

Salud !

Baltasar

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 04 Jun 2009 16:35 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 745
Hola. Lo de saltar con la ayuda de otro personaje se me escapa, pero para saltar el muro usando simplemente "saltar", tienes que añadir una línea más en la rutina reaccionar_antes (me parece más correcto que uses el reaccionar_antes del objeto muro que el de la habitación):

Código:
saltar:
    if (uno == 0) uno = self;
    <<trepar muro>>;


Creo que así debería funcionar. Me explicó algo muy parecido Baltasarq en este hilo.

Un saludo!

EDITO: Vaya. Se me han adelantado. Pues eso, lo que ya te ha explicado Balta. Aunque creo que en su código no hace lo de que con el comando "saltar" a secas se comprenda como "saltar muro".


Última edición por Makinaimo el 05 Jun 2009 09:48, editado 1 vez en total

Arriba
 Perfil  
 
NotaPublicado: 04 Jun 2009 22:13 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
grendelkhan escribió:
Tengo un bug de esos tontos en InformATE pero que me lleva de cabeza. Veamos, tengo un muro que se puede saltar/trepar desde ambos lados, lo he programado correctamente para que funcione "trepar muro" y que el resto de acciones sean sinónimos poniendo algo tal que así en el antes:
Código:
trepar: if (uno==muro) JugadorA (localidad);
saltar: if (uno==muro) <<trepar muro>>;

y además en el reaccionar_antes he puesto:
Código:
saltar: <<trepar muro>>;

ya que habrá gente que ponga simplemente "saltar".
Esto último no funciona y me gustaría saber porqué.
Otra cosa que no me sale es la de saltar con ayuda de otro personaje, pero tampoco me funciona (la orden sería "súbete a personaje":
Código:
arriba: if (uno==personaje) print "Con la ayuda del personaje logras saltar el muro"; EsperarTecla(0); <<trepar muro>>;

¿Alguna ayuda?


La acción saltar quizá funcione en el antes();, de la localidad, o de las dos localidades a ambos lados (No me preguntes por qué, pero he tenido problemas similares y así funciona).

En cuanto a subirte al PNJ, si haces "xverbo subete", saldrá algo como
* soporte -> entrar

Luego la acción correcta sería, dentro del antes(); del PNJ

enter, Entrar, Meterse: "Te subes al PNJ";

...o lo que salga en la gramática (como ahora estoy con el infsp no tengo frescas las acciones en español)

(quizá haya que darle al PNJ las propiedades soporte y entrable, o modificar la gramática),

Saludos

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 04 Jun 2009 22:14 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
¡¡Anda que no corréis!! XD

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 04 Jun 2009 23:31 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 18 Mar 2004 19:26
Mensajes: 1458
Ubicación: Barcelona
Muchas gracias a todos, voy a probar todo lo que habéis dicho a ver qué me sale :D

_________________
http://xaviercarrascosa.com/ficcion-interactiva/


Arriba
 Perfil  
 
NotaPublicado: 05 Jun 2009 07:46 
Desconectado
Guionista
Guionista
Avatar de Usuario

Registrado: 20 Ene 2007 20:09
Mensajes: 356
baltasarq escribió:
Dado que pones "trepar muro" en lugar de trepar self, deduzco que el reaccionar_antes es el de la habitacion. Este reaccionar_antes nunca es ejecutado (no me preguntes por qué, miesterios de Inform, se ve que no está al alcance), de ahí que no te funcione.


Bueno, pues actualmente estoy aprendiendo esto del inform y me ha dado por investigar este tema en la documentación, con conclusiones al menos curiosas :D
La habitación NO está en el scope, a no ser que estés dentro de un contenedor, en cuyo caso este último sí lo estará.
Por tanto, según ha indicado Lenko (punto 3), no se llamará a la rutina react_before de la localidad. Pero sin embargo, la propia rutina before de la habitación se comporta exactamente igual que un react_before, aunque la acción no va estrictamente dirigida a ella. Probad a interceptar un Take "algo" en el before de una localidad y vereis lo que digo.
Igual es por mis conocimientos aún limitados del tema pero, ¿no es un poco ilógico?


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 9 mensajes ] 

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
cron
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM