Contenedores

ngPAWS (next generation Professional Adventure Writing System) es un sistema para crear aventuras de texto (también conocidas como ficción interactiva) que pueden jugarse en cualquier navegador actual (online u offline).

Moderador: Ejvg

Responder
Avatar de Usuario
edlobez
Mensajes: 16
Registrado: 01 May 2023, 09:16

Contenedores

Mensaje por edlobez »

Hola,
Estoy intentando crear un contenedor en ngpaws, pero no entiendo muy bien el funcionamiento... a ver.
Un contenedor: armario
Un objeto: bata de trabajo
Inicialmente el armario está cerrado y el balón dentro del armario.

Código: Seleccionar todo

/9    10       1        bata               _        ATTR aFemale  aWear
/10   11       1        armario            _        ATTR aMale aStatic aOpenable aContainer
En la tabla de respuestas:

Código: Seleccionar todo

ex bata
 present oBata
 writeln "Una bata de protección química, con guantes incluidos. Para manipular de forma segura frente a productos químicos peligrosos."
 done

ex bata
 present oArmario
 bnotzero oArmario aOpen
 writeln "Una bata de protección química, con guantes incluidos. Para manipular de forma segura frente a productos químicos peligrosos."
 done

coger bata
 present oArmario
 bnotzero oArmario aOpen
 isat oBata 10
 writeln "Coges la bata."
 place oBata 254
 done

sacar bata
 present oArmario
 bnotzero oArmario aOpen
 isat oBata 10
 writeln "Coges la bata."
 place oBata 254
 done

ex armario
 present oArmario
 bzero oArmario aOpen
 writeln "Un armario metálico para guardar ropa de trabajo. El armario está cerrado."
 done

ex armario
 present oArmario
 writeln "Un armario metálico para guardar ropa de trabajo."
 listcontents 10
 writeln ""
 done


abrir armario
 present oArmario
 bnotzero oArmario aOpen
 writeln "El armario ya está abierto."
 done

abrir armario
 present oArmario
 bset oArmario aOpen
 writeln "Abres el armario."
 done

cerrar armario
 present oArmario
 bnotzero oArmario aOpen
 writeln "Tranquilo, así está bien. No hace falta que seas tan ordenado."
 done
Todo funciona bien (o eso parece). He debido programar varias acciones de sacar, abrir, cerrar, pensaba que estaba automatizado todo al crear un contenedor, pero no me funcionaba.
Luego no entiendo porqué me pasa esto:

Código: Seleccionar todo

> EX ARMARIO
Un armario metálico para guardar ropa de trabajo. El armario está cerrado.
> SACAR BATA DE ARMARIO
Antes debes abrir el armario.
> ABRIR ARMARIO
Abres el armario.
> SACAR BATA DE ARMARIO
Coges la bata.
> SACAR BATA DE ARMARIO
Antes debes abrir el armario.
> METER BATA EN ARMARIO
Antes abre el armario.
> SACAR DE ARMARIO LA BATA
No puedes sacar cosas de ahí.
> ABRIR ARMARIO
El armario ya está abierto.

> EX ARMARIO
Un armario metálico para guardar ropa de trabajo. El armario está cerrado.
> ABRIR EL ARMARIO
Abres el armario.
> EX ARMARIO
Un armario metálico para guardar ropa de trabajo.
(dentro hay una bata de protección química)
[b]> ABRIR EL ARMARIO
El armario ya está abierto.[/b]  ---> [b][i]Me confirma que el atributo aOpen está a 1[/i][/b]
> CERRAR ARMARIO
Tranquilo, así está bien. No hace falta que seas tan ordenado.
> EX BATA
Una bata de protección química, con guantes incluidos. Para manipular de forma segura frente a productos químicos peligrosos.
> SACAR BATA DEL ARMARIO
Coges la bata.
> EX ARMARIO
Un armario metálico para guardar ropa de trabajo.

> METER BATA EN ARMARIO
Antes abre el armario.
[b][size=150]> SACAR BATA DE ARMARIO
Antes debes abrir el armario.[/size][/b]  --> [b]¿cómo que debo abrir el armario? si el atributo aOpen está a 1[/b]
De esto extraigo:

> ABRIR EL ARMARIO
El armario ya está abierto.
---> Me confirma que el atributo aOpen está a 1

> SACAR BATA DE ARMARIO
Antes debes abrir el armario.
--> ¿cómo que debo abrir el armario? si el atributo aOpen está a 1

Parece que cuando el armario está vacío es cuando da esa respuesta de Antes debe abrir el armario, cuando este ya está abierto.
Esta respuesta la da porque está llegando a esta parte del código:

SACAR _ ; SACAR un objeto de un contenedor que está presente pero cerrado
NOTEQ 15 255 ; El noun2 es un objeto
ONOTZERO @15 aContainer ; Es un contenedor
ONOTZERO @15 aOpenable
OZERO @15 aOpen
PRESENT @15
WRITELN "Antes debes abrir {OBJECT|15}."
BREAK
DONE

y está dando cómo válido
OZERO @15 aOpen
cuando antes he verificado que está a 1...

No sé, ¿alguna luz? Pensaba que el crear un objeto contenedor todo estaría más automatizado. Ya que luego para otro objeto que no he programado respuestas:

Código: Seleccionar todo

> METER DESTORNILLADOR EN ARMARIO
Antes abre el armario.
O alguien sabe de un ejemplo de uso de contenedor que se abra y cierre?
Saludos
edlobez
Avatar de Usuario
tranqui69
Mensajes: 106
Registrado: 15 Abr 2023, 08:33
Contactar:

Re: Contenedores

Mensaje por tranqui69 »

Voy a intentar echar un cable.
Entiendo que todas las acciones de la tabla de respuestas están escritas ANTES de SACAR _

¿Es posible que en la acción PRESENT @15 te refieras a PRESENT @51 (51 es la bandera del objeto actualmente referenciado)?
¿La bandera 15 la usas para algo en concreto?
Avatar de Usuario
edlobez
Mensajes: 16
Registrado: 01 May 2023, 09:16

Re: Contenedores

Mensaje por edlobez »

No, claro, pero este código es el que viene por defecto en la base de datos de inicio no es mío:

SACAR _ ; SACAR un objeto de un contenedor que está presente pero cerrado
NOTEQ 15 255 ; El noun2 es un objeto
ONOTZERO @15 aContainer ; Es un contenedor
ONOTZERO @15 aOpenable
OZERO @15 aOpen
PRESENT @15
WRITELN "Antes debes abrir {OBJECT|15}."
BREAK
DONE

Que lo he pegado porqué no sé porque me responde aquí.
Y ahora que lo dices, revisando la BBDD de datos de inicio, las respuestas para "sacar" aparece el flag 15 y el 51. No sé si el 15 es para el segundo nombre.
Saludos
edlobez
Avatar de Usuario
edlobez
Mensajes: 16
Registrado: 01 May 2023, 09:16

Re: Contenedores

Mensaje por edlobez »

Me respondo a mi mismo. A la hora de comprobar el atributo de un objeto, estaba usando el condacto "bzero" cuando debería usar "ozero".

https://github.com/Utodev/ngPAWS/wiki/OZERO_ES

Gracias
Saludos
edlobez
Responder