Ir al contenido

Referencias e identificadores

Una variable solo guarda números. Pero como cada furni y cada persona de la sala tienen un número que los identifica, eso basta para que una variable guarde a quién se refiere.

Es el patrón que separa un montaje que funciona con un jugador de uno que funciona con veinte.

Son siempre los mismos dos pasos:

  1. Guardar: copiar el identificador del objeto —@id si es un furni, @index si es una persona— dentro de una variable, con Cambiar valor de variable, poniendo ese identificador en su Valor de referencia.
  2. Recuperar: reunir con Furnis con variable o Usuarios con variable a los que tengan esa variable con ese valor.

Nunca “sacas” el objeto de la variable. Lo que haces es buscar quién coincide.

Y esa es la parte que hay que decidir bien desde el principio, porque no se puede cambiar después sin rehacer el montaje.

Un jugador puede haber recogido treinta casillas. Treinta ids no caben en una sola variable, así que la marca va en cada furni y su valor es el @index de la persona.

Caja de variable:
Variable de furni [dueño · mientras la sala esté activa · tiene valor]
Pila A — marcar la casilla que alguien pisa
│
├─ Causante: Sobre un Furni
│ └─ Elige Furni ............................. Casilla de presión
│
├─ Efecto: Dar variable
│ ├─ Escoge una variable ..................... dueño (ámbito furni)
│ ├─ Sobreescribir la variable existente ..... marcada
│ └─ Escoge el objetivo de la variable ....... Furni desencadenante
│
└─ Efecto: Cambiar valor de variable
├─ Escoge una variable ..................... dueño (ámbito furni)
├─ Escoge una operación .................... Asignar
├─ Valor de referencia ..................... @index (ámbito usuario)
│ └─ Escoge la fuente de la variable .... Usuario desencadenante
└─ Escoge el objetivo de la variable ....... Usar furni desencadenante

Y para reunir “las casillas de esta persona”, el selector compara la variable del furni contra el índice de quien disparó:

Pila B — que las casillas de cada uno le sigan
│
├─ Causante: Click en Furni
│ └─ Elige Furni ............................. Botón de recoger
│
├─ Selector: Furnis con variable
│ ├─ Escoge una variable ..................... dueño (ámbito furni)
│ ├─ Seleccionar por valor ................... marcada
│ ├─ Opciones ................................ =
│ └─ Valor de referencia ..................... @index (ámbito usuario)
│ └─ Escoge la fuente de la variable .... Usar usuario desencadenante
│
└─ Efecto: Mover Furni a Usuario
├─ Furnis a mover .......................... Usar furnis de Selector
└─ Usuarios a mover ........................ Usar usuario desencadenante

Al revés: cada jugador tiene un bloque invisible, una baldosa caminable. Eso sí cabe en una variable de usuario cuyo valor es el @id del furni.

Caja de variable:
Variable de usuario [mi_bloque · mientras esté en la sala · tiene valor]

Se rellena igual que antes, con la referencia al revés —@id del furni, guardado en el usuario— y para recuperar el mueble se compara el @id de cada furni contra esa variable:

├─ Selector: Furnis con variable
│ ├─ Escoge una variable ..................... @id (ámbito furni)
│ ├─ Seleccionar por valor ................... marcada
│ ├─ Opciones ................................ =
│ └─ Valor de referencia ..................... mi_bloque (ámbito usuario)
│ └─ Escoge la fuente de la variable .... Usar usuario desencadenante

La regla en una línea: si la relación es de uno, la variable va en el usuario; si es de muchos, va en el furni.

Cada persona de la sala tiene hasta cuatro números, y elegir mal es la causa de bugs que solo aparecen cuando entra la segunda persona.

Identificador Lo tiene Único entre
@index Todo lo que hay en la sala: personas, bots y mascotas Toda la sala
@user_id Solo las personas Todo el hotel
@bot_id Solo los bots Todos los bots
@pet_id Solo las mascotas Todas las mascotas

Es la misma idea aplicada al espacio, y el error más caro de todos porque tarda semanas en aparecer.

@position.x y @position.y son la baldosa de la cuadrícula de la sala, y esa cuadrícula no empieza en (0,0): casi todas las salas tienen un desfase, y la baldosa de arriba puede ser la (4,1). Puedes verlo abriendo :floor → Importar/Exportar.

Lo grave no es el desfase. Lo grave es que las coordenadas cambian si alguien edita el plano de la sala. Una fila que hoy es X=5 puede ser X=7 después de un :floorplan, y todos los wireds que tenían el 5 escrito a mano quedan apuntando a otro sitio. No fallan: hacen lo que les pediste, en el lugar equivocado.

La solución es un furni de referencia. Colocas un furni —uno invisible vale— en la fila que te importa, y en vez de escribir el número, operas contra su @position.x:

└─ Efecto: Cambiar valor de variable
├─ Escoge una variable ..................... @position.x (ámbito furni)
├─ Escoge una operación .................... Asignar
├─ Valor de referencia ..................... @position.x (ámbito furni)
│ └─ Escoge la fuente de la variable .... Selección de furnis secundarios
└─ Escoge el objetivo de la variable ....... Usar furnis seleccionados

El furni que se mueve es el que marcas en Usar furnis seleccionados; el de referencia, el que marcas en la Selección de furnis secundarios. Los dos se marcan clicándolos en la sala.

Sale dos cosas gratis: el montaje sobrevive a los cambios de plano, y puedes reubicar la zona entera moviendo el furni de referencia, sin abrir un solo wired.

Si necesitas las dos coordenadas, copia @position. Los furnis y las personas tienen una variable @position que lleva la baldosa entera —x e y— en un solo número, y escribirla los manda a las dos coordenadas de una vez. Con la @position del furni de referencia en el Valor de referencia, lo que se mueve —un furni o una persona— llega a su misma baldosa sin que escribas ni una coordenada; si no puede estar ahí, se queda donde estaba. Cómo está formado ese número lo tienes en Las empaquetadas.

Por lo mismo. @id y @class_id son números que el hotel reparte, y no son estables ni entre salas ni entre hoteles: un montaje copiado de otro sitio con ids escritos a dedo apunta a muebles que aquí no existen.

Los identificadores se leen, no se escriben. Si necesitas señalar un furni concreto, señálalo en la ventana del wired, que para eso está; si necesitas señalar “el mismo que antes”, guárdalo en una variable como se explica arriba.

Una referencia es un número que apunta a algo que puede desaparecer. Si el jugador se va y su bloque sigue marcado con su índice, el siguiente que entre con ese índice hereda el bloque.

Por eso el causante Salida es parte de este patrón, no un extra: es donde se borran las marcas que los furnis guardaban de quien se acaba de ir. Las variables de usuario «mientras esté en la sala» no hace falta tocarlas: el sistema las borra solo al salir, y de hecho ya no existen cuando corre tu pila de Salida — no cuentes con leerlas ahí.