CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 11 Jul 2020 06:47

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 8 mensajes ] 
Autor Mensaje
NotaPublicado: 22 Ene 2007 12:18 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

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

Estoy programando una radio, y entonces quiero interaccionar con ciertos PNJ's, a los que quiero hacer "hablar" como si realmente estuvieran en el mismo sitio que el jugador. Es decir, no quiero hacer nada "extra" para que conversen por la radio.

La solución parece consistir en utilizar la función "sumarAlAlcance( obj )", de manera que obj pasaría a estar, como si dijéramos, en el mismo sitio que el jugador aunque no lo esté realmente.

Sin embargo, no todos los PNJ's están siempre disponibles por radio, así que necesitaría también poder quitarlos a voluntad, algo así como: quitarDelAlcance( obj ).

Y ahí es donde está el problema, he buscado en el manual y la función aparece (no lo he hecho ahora, no sé si se llama así), pero no compila, en cualquier caso.

¿Alguien sabría como hacerlo? ... ¿Zak, ahora que estás por aquí?

Salud !

Baltasar

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 22 Ene 2007 12:22 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 07 Sep 2004 21:52
Mensajes: 1897
Juraría 2 cosas:

1) que el capítulo de al alcance no está traducido (no lo se seguro) y que era una de mis cosas pendientes de realizar.

y 2) En el DM4 o documentate hay un ejemplo directo de eso que quieres hacer. Un teléfono que pone al alcance a una persona en concreta sólo para hablar.

Chao!

_________________
Ruber "Urbatain" Eaglenest.
------------------------
http://www.indieorama.com/author/rubereaglenest/


Arriba
 Perfil  
 
 Asunto: alAlcance()
NotaPublicado: 22 Ene 2007 13:08 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

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

Urbatain escribió:
Juraría 2 cosas:
1) que el capítulo de al alcance no está traducido (no lo se seguro) y que era una de mis cosas pendientes de realizar.
y 2) En el DM4 o documentate hay un ejemplo directo de eso que quieres hacer. Un teléfono que pone al alcance a una persona en concreta sólo para hablar.


En documentATE, yo creo que no sale nada sobre este tema. En el DM4 puede ser (le echaré un ojo), pero me hace falta saber la correspondencia hispana, que como ya dije, no funciona tal y como aparece en la documentación.

Salud !

Baltasar

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
NotaPublicado: 22 Ene 2007 17:29 
Desconectado
Grafista
Grafista

Registrado: 09 Mar 2004 17:20
Mensajes: 504
baltasarq escribió:
Sin embargo, no todos los PNJ's están siempre disponibles por radio, así que necesitaría también poder quitarlos a voluntad, algo así como: quitarDelAlcance( obj ). Y ahí es donde está el problema, he buscado en el manual y la función aparece (no lo he hecho ahora, no sé si se llama así), pero no compila, en cualquier caso.


Hay otra posibilidad... ¡lo soñaste! :P

Lo cierto es que si existe esa función, debe de estar muy oscuramente documentada porque ni la recuerdo ni encuentro referencia a ella por ningún sitio... es más, no la necesitas, ya que la cosa no funciona como lo estás planteando.

Los alcances se calculan y actualizan en cada turno. Muy exageradamente podríamos decir que en cada turno se parte de la premisa de que nada está al alcance salvo que: o bien las reglas estandar o bien una rutina del autor que las intercepte decidan lo contrario.

Eso quiere decir que no debes de preocuparte de "quitar", sino simplemente de "poner" o "no poner" según las circunstancias lo requieran.

La manera estandar, facilita, sencillona y elegante de hacerlo sería:

-dar al objeto "radio" una propiedad "sumaAlAlcance"
-esta propiedad no sería una lista de objetos, sino una rutina que, mediante llamadas a SumarAlAlcance(), ponga al alcance a los objetos (en este caso, personajes) requeridos en cada momento y a los que no haga falta, no los ponga (como el chiste de pisar el cesped en Campeche, ya sabes 8) )

Y, en principio, ya está. Digo en principio porque no se te habrá escapado que esto sólo debe ocurrir cuando se intenta realizar la acción de hablar por la radio con el personaje, ya que de lo contrario el parser aceptaría alegremente como válidos los intentos de examinarlo, cogerlo, metertelo en el bolsillo, abrazarlo, comértelo...

Obviamente la propia rutina que hayamos puesto en la propiedad sumaAlAlcance puede comprobar esto con total tranquilidad, algo así como:

Código:
Objeto radio "radio"
with
nombre 'radio',
sumaAlAlcance
[;
   if (accion==##Hablar_Por_La_Radio)
    {
      !aqui vienen las comprobaciones que hagan falta para
                !poner o no poner al/los personajes que haga falta al
                !alcance o no
         }
],
has femenino
;


Dando por sentado que has definido una acción llamada "Hablar_por_la_radio" con la sintaxis que hayas considerado oportuno y que será tratada por una rutina "Hablar_Por_La_RadioSub()" que se encargará, entre muchas otras cosas, de comprobar que el personaje con quien se quiera hablar este o no presente según lo que se haya determinado en la rutina "SumaAlAlcance" del objeto radio y obrar en consecuencia.

Otra posible vía de bregar con el tema es tratear con el token "Scope=rutina()" en la gramatica de la acción "Hablar_por_la_radio", con lo que también te aseguras de que sólo se manipulan los alcances con dicha acción y no con cualquier otra, pero si lo anterior funciona no merece la pena el esfuerzo ni las complicaciones adicionales que surgen por este camino.


Arriba
 Perfil  
 
NotaPublicado: 22 Ene 2007 17:55 
Desconectado
Elfito
Elfito
Avatar de Usuario

Registrado: 09 Sep 2004 14:41
Mensajes: 14
Radio Marte Libre escribió:
Los alcances se calculan y actualizan en cada turno. Muy exageradamente podríamos decir que en cada turno se parte de la premisa de que nada está al alcance salvo que: o bien las reglas estandar o bien una rutina del autor que las intercepte decidan lo contrario.

Eso quiere decir que no debes de preocuparte de "quitar", sino simplemente de "poner" o "no poner" según las circunstancias lo requieran.


Estaba a punto de escribir casi lo mismo :-)

Radio Marte Libre escribió:
[...]

Obviamente la propia rutina que hayamos puesto en la propiedad sumaAlAlcance puede comprobar esto con total tranquilidad, algo así como:

Código:
Objeto radio "radio"
with
nombre 'radio',
sumaAlAlcance
[;
   if (accion==##Hablar_Por_La_Radio)
    {
      !aqui vienen las comprobaciones que hagan falta para
                !poner o no poner al/los personajes que haga falta al
                !alcance o no
         }
],
has femenino
;



O también, haciendo uso de la variable razon_alcance, que el parser rellena con diferentes constantes según cuál es la razón para la cual está computando el alcance. En caso de que lo esté computando para asuntos de conversación con PNJs, tomará el valor RAZON_HABLAR, con lo que la cosa podría quedar:

Código:
Objeto radio "radio"
with
nombre 'radio',
sumaAlAlcance
[;
   if (razon_alcance==RAZON_HABLAR)
    {
      !aqui vienen las comprobaciones que hagan falta para
                !poner o no poner al/los personajes que haga falta al
                !alcance o no
         }
],
has femenino
;


En todo caso, sin probarlo, no estoy seguro de si esto funcionaría, ya que no sé si el parser llama a la propiedad "sumaAlAlcance" de los objetos cuando la razon es RAZON_HABLAR. Si no funcionara, tendrías que programar la rutina AlAlcance, la cual no forma parte de ningún objeto, sino que es una rutina aislada que el parser llama en cada turno para dar una oportunidad al programador de cambiar lo que hay en el alcance. Un ejemplo de esto lo tienes en DocumentATE, al final de la sección sobre PNJs


Arriba
 Perfil  
 
NotaPublicado: 22 Ene 2007 18:08 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

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

Zak escribió:
En todo caso, sin probarlo, no estoy seguro de si esto funcionaría, ya que no sé si el parser llama a la propiedad "sumaAlAlcance" de los objetos cuando la razon es RAZON_HABLAR. Si no funcionara, tendrías que programar la rutina AlAlcance, la cual no forma parte de ningún objeto, sino que es una rutina aislada que el parser llama en cada turno para dar una oportunidad al programador de cambiar lo que hay en el alcance. Un ejemplo de esto lo tienes en DocumentATE.


Pues visto lo visto, creo que lo mejor será bregar con esa rutina. Gracias a los dos, en cualquier caso, por vuestra ayuda. :-D

Salud !

Baltasar

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 22 Ene 2007 22:27 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
Y ya para completar todas las posibilidadades, la solución utilizando la función AlAlcance, independiente de cualquier objeto.
Código:
[AlAlcance;
if (radio in jugador || radio in parent(jugador))
   {
     if(accion_que_seria == ##tocar or ##encender)
          PonerAlAlcance(interlocutor1);

     if (razon_alcance == RAZON_HABLAR)
          PonerAlAlcance(interlocutor1);
    }
rfalse;
          ];


Aunque quizá sea menos óptima porque hay que introducir código gratuito para ver si la radio la tiene el jugador, está en la localidad, está en una mesa de la localidad... cuando utilizando la fórmula de suma_al_alcance dentro del objeto radio, nos ahorramos tener que comprobar la accesibilidad de la radio al jugador.

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
 Asunto: Re: alAlcance()
NotaPublicado: 25 Ene 2007 00:41 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 15 Ene 2005 22:26
Mensajes: 780
baltasarq escribió:
pero me hace falta saber la correspondencia hispana, que como ya dije, no funciona tal y como aparece en la documentación.

Baltasar


...hablando de correspondencias. He subido al CAAD un listado de correspondencias en formato XLS. Es (mas o menos) el que he usado para INFSP.

Salud!

_________________
INFSP7 - Canal de Noticias INFSP

Porque donde está tu tesoro, allí también estará tu corazón.


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 8 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 3 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