Ir al contenido
Wiki Hartico
ConceptosSobre qué actúa

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.

Guardar y recuperar

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.

Las dos direcciones no son iguales

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

Furni → usuario, cuando son muchos

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

Usuario → furni, cuando es uno solo

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.

El selector de furnis solo mira el suelo

Furnis con variable no alcanza los muebles de pared. Si tu referencia apunta a un cuadro, no vas a poder recuperarlo por esta vía.

Qué identificador usar

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.

IdentificadorLo tieneÚnico entre
@indexTodo lo que hay en la sala: personas, bots y mascotasToda la sala
@user_idSolo las personasTodo el hotel
@bot_idSolo los botsTodos los bots
@pet_idSolo las mascotasTodas las mascotas

Los tres últimos colisionan entre sí

@user_id, @bot_id y @pet_id son listas distintas. Puede existir a la vez el bot 1000 y la persona 1000, y comparar sus números diría que son el mismo. Si tu juego mezcla personas con bots o mascotas, el único identificador que no colisiona es @index.

Nunca guardes @index en una variable permanente

El índice se reparte por orden de llegada: el primero que entra es el 0, el segundo el 1. Al descargarse la sala vuelven a empezar en 0, así que un índice guardado ayer apunta hoy a otra persona — y tu juego le entrega el progreso de otro sin dar ningún error.

La regla: @index para lo que dura una partida, @user_id para lo que se guarda.

Nunca escribas una coordenada a mano

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.

Y tampoco escribas un id a mano

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.

Limpia las referencias

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í.

Lo siguiente

En esta página