Lo que ven los demás
Por qué no alcanza con el juego
GTA les manda a los demás los tatuajes de cada jugador en un bloque fijo de 1.792 lugares, uno por diseño, contando solo las colecciones marcadas con bRequiredForSync. Los tatuajes del propio juego ya ocupan unos 1.600. Los diseños que no entran no los ven los demás, y como el juego ordena mal las colecciones, cuáles quedan afuera puede cambiar entre reinicios (issues de FiveM #2010 y #3092).
Por eso este pack no usa ese bloque: su colección tiene bRequiredForSync = false, y cada tatuaje del juego conserva su lugar. El pack les muestra sus tatuajes a los demás por su cuenta.
Cómo funciona
- El juego de cada jugador lee los tatuajes de su propio personaje y se los manda al servidor, que se los pasa a los jugadores de alrededor. Todos: los de este pack, los del juego y los de cualquier otro pack.
- Los demás le ponen exactamente esa lista al personaje de ese jugador.
- La lista se pone de nuevo cuando el jugador cambia de tatuajes o de ropa, cuando se acerca, y de nuevo cada 2 segundos a menos de 30 metros y cada 5 segundos más lejos, hasta
Config.SyncDistance, por si el juego vuelve a poner su propia copia. - Nunca lee el personaje de otro jugador: FiveM no garantiza lo que el juego dice de él.
- El servidor revisa cada lista antes de pasarla, así que funciona con
sv_stateBagStrictMode. - Una lista lleva hasta 100 tatuajes. Pasado eso quedan los primeros, en el orden en que los lista el juego, igual en el servidor y en cada pantalla. Una lista nunca se tira entera.
- Una lista se manda cuando se lee igual dos veces, y no mientras el jugador está en un menú (
Config.HoldWhileMenus), así los tatuajes que solo se prueban no se mandan. Tampoco durante 3 segundos después de que cambia el ped o el modelo del jugador, porque al recargar la apariencia los tatuajes vuelven un momento después.
Así que los demás ven lo que lleva puesto el personaje. Si otro menú le saca tatuajes (una barbería que pone un degradado, una tienda que los borra al cerrarse), los demás también lo ven, como con los tatuajes del propio juego.
No depende del script de tatuajes: lee el personaje, no la base de datos del script. También prende el arreglo de FiveM para el orden roto del juego (game_enableStableOverlaySort), para los tatuajes que el juego sigue mandando por su cuenta.
Con ZAIDERS Appearance
ZAIDERS Appearance les muestra a los demás los tatuajes de cada jugador por su cuenta, y además manda las capas más oscuras (un tatuaje puesto más de una vez). Mientras lo hace, este pack se hace a un lado solo: no manda nada ni toca a nadie. El pack encuentra a ZAIDERS Appearance por el nombre de su fxmanifest.lua, se llame como se llame su carpeta, y le pregunta una vez por segundo, así solo uno de los dos funciona a la vez.
- Si la sincronización de ZAIDERS Appearance está apagada, no está prendido o es una versión sin su propia sincronización de tatuajes, la hace el pack.
- Cuando ZAIDERS Appearance para mientras sincroniza (un
ensure zaiders_appearance), el pack espera 20 segundos antes de hacerse cargo. Si vuelve mientras tanto, no cambia nada. Cuando el pack se hace cargo, cada jugador sigue mostrando lo que tenía hasta que llega su propia lista nueva (un segundo o dos). - Mientras hay una tienda de ZAIDERS Appearance abierta, lo que el jugador se prueba no se manda. Los demás siguen viendo lo que lleva puesto.
- Mientras otro script de tatuajes está a cargo de los tatuajes, ZAIDERS Appearance también espera con lo que se prueba en otros menús, como el pack, y
exports.zaiders_tattoos:setBusyse le pasa: la misma llamada sirve en los dos casos.
Qué necesita
- OneSync prendido (
on), nolegacy. FiveM solo manda los state bags de los jugadores con OneSync prendido. Con legacy o apagado, la consola del servidor lo avisa cuando arranca el pack, la sincronización del pack queda quieta (/zaiderstattoosdiceidle, oquietaconsetr zaiders_tattoos_language es) y los demás ven solo lo que manda el juego. - El mismo pack en todos los jugadores. Pasa solo: todos lo bajan de tu servidor.
- Un solo script haciendo esto. Si otro pack de tatuajes trae su propio script para mostrar tatuajes a los demás, apaga ese: este pack muestra todos los tatuajes, de todas las colecciones. Si en cambio apagas este (
Config.Sync = false), nadie más ve los tatuajes de este pack, salvo que los sincronice ZAIDERS Appearance.
Configuración
| Opción | Por defecto | Qué hace |
|---|---|---|
Config.Sync | true | Prende o apaga todo esto. |
Config.SyncDistance | 120 | Metros alrededor de un jugador en los que se le ponen sus tatuajes. |
Config.SyncInterval | 1000 | Milisegundos entre revisiones de los tatuajes propios (250 como mínimo). |
Config.HoldWhileMenus | true | No manda la lista del jugador mientras está en un menú (60 segundos como mucho). Otros scripts lo pueden decir con exports.zaiders_tattoos:setBusy, que hace esperar la lista aunque esta opción esté en false. |
Config.FixTattooSort | true | Prende game_enableStableOverlaySort. |
Config.DiagCommand | false | Agrega /zaiderstattoos (chat o F8): quién sincroniza, qué tienes puesto y publicaste, y qué publicó cada jugador de alrededor y cuándo se le puso. |
Config.Sync, Config.SyncDistance y Config.SyncInterval también se pueden poner desde el server.cfg (setr zaiders_tattoos_sync 0, setr zaiders_tattoos_distance 150, setr zaiders_tattoos_interval 750). Las otras tres, solo en config.lua. Ver Configuración.
