CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 18 Oct 2019 12:57

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 10 mensajes ] 
Autor Mensaje
NotaPublicado: 05 Jun 2011 23:42 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 10 Sep 2004 00:17
Mensajes: 3039
Ubicación: Chile
Saludos:

Para alegría de muchos, según comentarios recibidos :-P , estoy usando PNJMovil en mi siguiente trabajo.

En principio, inicializo o gatillo el movimniento del PSI después de algunas condiciones, con
Código:
ArrancarDaemon(self);
PNJ_Ruta(self, MOVIMIENTO_ALEATORIO, 50);


Aparte, defino una ruta circular con
Código:
Array RutaCircular -->
obj_n obj_e obj_e obj_s obj_s obj_o obj_o obj_n;


y según se dan ciertas condiciones, pongo al PSI a moverse en ello con:
Código:
PNJ_Ruta(PSI, MOVIMIENTO_NINGUNO);
PNJ_Ruta(PSI, MOVIMIENTO_PREFIJADO, RutaCircular,8);


Sin embargo, con esto consigo sólo una vuelta circular y a mi me gustaría tenerlo en repetición de esta ruta circular hasta que se den otras condiciones... ¿cómo puedo lograr esto?

Atento a vuestra respuesta, en especial de Baltasar que algo entiende de esta rutina (segun creo), se despide,

_________________
[Incanus]
El Escritorio - Blog Aventurero y Literario


Arriba
 Perfil  
 
NotaPublicado: 06 Jun 2011 07:24 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 23 Mar 2010 20:11
Mensajes: 1141
Ubicación: Valencia
Hola,

Yo uso también PNJMovil...

Cuando llegues al final de la ruta, puedes parar el daemon y volverlo a arrancar... Cuando arranques por primera vez el daemon, puedes activar algún flag y cuando el pnj vuelva a pasar por esa localidad, si el flag está activado, pues reinicias el movimiento.

Yo también tengo un pnj que se mueve por una ruta predefinida, pero no la he programado así... Como se pasea sólo por 4 localidades, lo he hecho a base de IFs.. Si está en loc1, muevete por el norte, si está en loc2, por el este... así está en una ruta circular infinita hasta que se cumplan ciertas condiciones.

_________________
El humor existe para recordarnos que por muy alto que sea el trono en el que uno se siente, todo el mundo usa su culo para sentarse.


Arriba
 Perfil  
 
NotaPublicado: 06 Jun 2011 12:19 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 24 Dic 2010 14:37
Mensajes: 929
Acordaos de esto:

Código:
pnj_ha_llegado - Esta rutina es llamada cuando un PNJ llega finalmente
              a su destino, ya sea siguiendo una ruta predefinida o
              una calculada. Esta rutina debe terminar con una llamada
              a PNJ_Ruta(), ya sea para darle una nueva ruta al PNJ,
              para cambiar su tipo de movimiento (por ejemplo hacerlo
              aleatorio), o para hacer que se pare con el tipo
              MOVIMIENTO_NINGUNO. Si no se llama a PNJ_Ruta() puede
              producirse un cuelgue. Por defecto la librería
              porporciona esta propiedad de modo que pasa al PNJ a
              movimiento aleatorio una vez que alcanza su destino.


En los ejemplos que vienen con la misma librería:

Código:
PNJMovil
Array RutaVampiro -->
    obj_n obj_e 0 0 obj_o obj_o 0 obj_e obj_s;


PNJMovil Vampy "vampiro" Hall
 with    nombre 'vampiro' 'dracula' 'horrible',
   articulo "al",
   descripcion "El horrible vampiro está como
       alelado. Probablemente sea sonámbulo.",
   ordenes [;
       "No parece darse cuenta de tu presencia.";
   ],
   antes [;
    DespertarOtro: "¡Temerario! Despertar a un vampiro sonámbulo
            sería el fin de tus correrías.";
    Atacar: "Incluso sonámbulo es invencible, sin las
       herramientas adecuadas [que, por otra parte,  no podrás
       encontrar en esta demo, jeje]";
    Besar: "Mmmchuic.";
   ],
   pnj_bloqueado [;  ! Nada especial. Reintentará seguir su ruta.
       parardaemon(vampy);
   ],
   pnj_ha_llegado [;
       PNJ_Ruta(self, MOVIMIENTO_PREFIJADO, RutaVampiro, 9);

       ! O bien, si quisieras que ya no la repita mas:
       ! PNJ_Ruta(Vampiro, MOVIMIENTO_NINGUNO);
       ! self.descripcion="El vampiro se ha quedado quieto por fin.";
       !
       ! O bien, darle una ruta nueva.
   ],
has  animado;   


Esta es la forma 'natural' en esta librería de tener un PNJ que se mueve de forma permanente por un ciclo fijo.


Arriba
 Perfil  
 
NotaPublicado: 06 Jun 2011 12:56 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 23 Mar 2010 20:11
Mensajes: 1141
Ubicación: Valencia
Si si...

De hecho, es en esa función donde yo he añadido mis IFs... es que mi ruta circular es mucho más complicada que ir moviéndose y se van mostrando mensajes de ambientación, así que no definí una ruta circular, sino que le voy diciendo cada vez que llega a una localidad a qué localidad siguiente debe ir dependiendo de ciertos condicionantes.

_________________
El humor existe para recordarnos que por muy alto que sea el trono en el que uno se siente, todo el mundo usa su culo para sentarse.


Arriba
 Perfil  
 
NotaPublicado: 06 Jun 2011 14:12 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 10 Sep 2004 00:17
Mensajes: 3039
Ubicación: Chile
Johan Paz escribió:
Esta es la forma 'natural' en esta librería de tener un PNJ que se mueve de forma permanente por un ciclo fijo.

¡Excelente y mil gracias! Ya se ve que no leí muy bien toda la documentación.

Ahora, otra duda:

Necesito que si yo estoy en una localidad cuando llega el PSI o si yo entro a la localidad en que está el PSI ocurra algo, pero no veo claro cómo hacerlo: si es con accion_antes, accion_despues y/o cómo se codifica en el código del PSI.

De antemano nuevamente agradecido,

_________________
[Incanus]
El Escritorio - Blog Aventurero y Literario


Arriba
 Perfil  
 
NotaPublicado: 06 Jun 2011 15:08 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 23 Mar 2010 20:11
Mensajes: 1141
Ubicación: Valencia
Yo lo hago en la rutina del daemon... que si no recuerdo mal, se ejecuta al final del turno.
Código:
 
Object -> oPatrulla "patrulla"
  with
    name 'patrulla' 'soldado',
    ....   
    daemon [;
      if (self notin location) give self ~estatico; !Si el jugador se ha ido, se le permite mover otra vez
      if (self has estatico) rfalse; !El pnj no se puede mover
      ...
      if ((self in location) && (player hasnt escondido)) {
         print "Stormtrooper: ", (s_underline) "¡ALTO EN NOMBRE DEL IMPERIO!";
    give player descubierto;
    rfalse;
       }
    ],

_________________
El humor existe para recordarnos que por muy alto que sea el trono en el que uno se siente, todo el mundo usa su culo para sentarse.


Arriba
 Perfil  
 
NotaPublicado: 06 Jun 2011 15:20 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 24 Dic 2010 14:37
Mensajes: 929
joruiru escribió:
Yo lo hago en la rutina del daemon... que si no recuerdo mal, se ejecuta al final del turno.
Código:
 
Object -> oPatrulla "patrulla"
  with
    name 'patrulla' 'soldado',
    ....   
    daemon [;
      if (self notin location) give self ~estatico; !Si el jugador se ha ido, se le permite mover otra vez
      if (self has estatico) rfalse; !El pnj no se puede mover
      ...
      if ((self in location) && (player hasnt escondido)) {
         print "Stormtrooper: ", (s_underline) "¡ALTO EN NOMBRE DEL IMPERIO!";
    give player descubierto;
    rfalse;
       }
    ],


accion_antes - Esta propiedad debe ser usada por los autores en lugar
del daemon del PNJ (la propiedad daemon de un PNJMovil no
está disponible porque es usada por esta librería)
. La
propiedad accion_antes, si existe, se ejecuta antes de
intentar mover al PNJ, en cada turno *incluso si el PNJ
no se mueve*. Si esta propiedad retorna true, entonces el
PNJ no se moverá ese turno.

accion_despues - Si esta propiedad existe en un PNJMovil, será
llamada sólo después de que el personaje se haya movido
con éxito de una localización a otra. Es útil para los
casos en los que el PNJ tiene que reaccionar
instantáneamente a los objetos, eventos u otros PNJs que
encuentre en la nueva habitación. *No es llamada si el
PNJ no se mueve*.

Ojo a la parte en negrita.


Arriba
 Perfil  
 
NotaPublicado: 06 Jun 2011 16:05 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 23 Mar 2010 20:11
Mensajes: 1141
Ubicación: Valencia
Perdon, es que justo el ejemplo que he copiado no es un PNJMovil... es un Object... por eso me funciona...

Estas cosas me pasan por estar en el curro y copiar y pegar deprisa y corriendo...

_________________
El humor existe para recordarnos que por muy alto que sea el trono en el que uno se siente, todo el mundo usa su culo para sentarse.


Arriba
 Perfil  
 
NotaPublicado: 06 Jun 2011 16:27 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 10 Sep 2004 00:17
Mensajes: 3039
Ubicación: Chile
Johan Paz escribió:
Ojo a la parte en negrita.

Esto de la documentación ya me da pena :oops:

¡Gracias de nuevo, Johan! Va de maravillas gracias a tus recomendaciones y puntualizaciones, todas muy al uso :-)

_________________
[Incanus]
El Escritorio - Blog Aventurero y Literario


Arriba
 Perfil  
 
NotaPublicado: 06 Jun 2011 16:31 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 10 Sep 2004 00:17
Mensajes: 3039
Ubicación: Chile
joruiru escribió:
Estas cosas me pasan por estar en el curro y copiar y pegar deprisa y corriendo...

Nada, estimado: también se agradecen, que donde falte librería, bien está el ingenio :-)

Que así se aprende: digo, que así aprendo de vosotros y con vosotros 8)

_________________
[Incanus]
El Escritorio - Blog Aventurero y Literario


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 10 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:  
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM