SCRIPT

Documentación de Clima y hora del servidor

OV Clima

Control completo del clima y la hora del servidor, con panel en pantalla, clima por zonas del mapa, cielos especiales y una API para otros scripts.

Que hace

OV Clima sustituye a tu sincronizador de clima y hora (por ejemplo qb-weathersync, vSync o similares) por un sistema en el que el servidor manda y todos los jugadores ven lo mismo.

Requisitos

Dependencias declaradas en el fxmanifest.lua:

No requiere qb-core ni ox_inventory. Usa Lua 5.4 (lua54 'yes') y una base de datos MySQL o MariaDB con oxmysql.

Importante: no debe haber otro sincronizador de clima y hora activo (qb-weathersync, vSync, cd_easytime, Renewed-Weathersync u otros). Si tu panel de administración tiene su propio sistema de clima, desactívalo.

Instalacion

  1. Descarga el recurso desde el Portal de Cfx.re con la cuenta Cfx con la que lo compraste. Viene protegido con Asset Escrow de Cfx.re y solo funciona en servidores de tu cuenta.
  2. Copia la carpeta ov_clima en la carpeta resources de tu servidor.
  3. Detén y retira cualquier otro recurso que sincronice clima y hora.
  4. Añade en server.cfg, después de ox_lib y oxmysql:
   ensure ox_lib
   ensure oxmysql
   ensure ov_clima
  1. Concede los permisos ACE a tu equipo (ver "Comandos y permisos"), por ejemplo:
   add_ace group.admin ov_clima.admin allow
  1. Base de datos: no hay archivo .sql. Las tablas ov_clima_state y ov_clima_audit se crean solas al arrancar.
  2. Reinicia el servidor.

Protección y edición: según el fxmanifest.lua, quedan sin cifrar (escrow_ignore) shared/config.lua y toda la carpeta web/ (interfaz). El resto del código está cifrado. El recurso no lee convars del server.cfg.

Para que el filtro de imagen funcione, el recurso carga data/ov_filtros.xml como modificador de ciclo de color; no necesitas hacer nada más.

Configuracion

Se edita en shared/config.lua.

ClaveValor por defectoPara qué sirve
Config.Time.mode'managed''managed' (el servidor lleva el reloj) o 'realtime' (hora real).
Config.Time.msPerGameMinute2000Milisegundos reales por minuto de juego; 2000 = un día de juego dura 48 minutos reales.
Config.Time.startHour / startMinute12 / 0Hora inicial.
Config.Time.realtimeOffsetMinutes-240Desfase sobre UTC en el modo realtime.
Config.Time.driftToleranceMin0.6Desvío (en minutos de juego) a partir del cual el cliente corrige su reloj.
Config.Weather.autotrueClima automático activado al iniciar.
Config.Weather.startWeather'EXTRASUNNY'Clima inicial.
Config.Weather.transitionSeconds25Segundos de transición entre climas.
Config.Weather.manualHoldMinutes30Tiempo que se mantiene un clima puesto a mano antes de volver al automático (0 = hasta que se active el automático).
Config.Weather.allowSnowInAutofalsePermite que el automático llegue a SNOW, BLIZZARD o XMAS.
Config.Graphtabla de pesosProbabilidad de pasar de un clima a otro.
Config.Durationspor clima (minutos reales)Duración mínima y máxima de cada clima en el automático.
Config.Sync.resyncSeconds60Cada cuánto el cliente recalcula su desfase con el servidor.
Config.Persist.saveEverySeconds60Frecuencia de guardado del estado.
Config.Audit.enabledtrueRegistra los cambios en ov_clima_audit.
Config.Audit.webhook''Webhook de Discord opcional para avisar de cambios.
Config.Audit.keepDays90Días que se conserva el registro.
Config.AcePrefix'ov_clima'Prefijo de los permisos ACE.
Config.ZonesenterTransitionSeconds = 8, checkMs = 1000Transición y frecuencia de comprobación al cruzar zonas.
Config.Regions20 rectángulosZonas del mapa (id, label, box). Los límites son aproximados: ajústalos viéndolos en el mapa del panel.
Config.Skyrojo, verde, azul y auroraModificadores de color, intensidad (strength) y, en el rojo, clima forzado.
Config.Filterscine (intensidad 0.8)Filtros de imagen disponibles.
Config.Texttextos en españolMensajes mostrados a los jugadores.

Comandos y permisos

Permisos ACE (prefijo configurable en Config.AcePrefix): ov_clima.admin (todo), o por separado ov_clima.view, ov_clima.weather, ov_clima.time, ov_clima.flags y ov_clima.sky.

ComandoPermisoQué hace
/climainfoviewMuestra el estado actual y la lista de climas.
/clima [tipo] [segundos]weatherCambia el clima con una transición opcional.
`/climaauto [on\off]`weatherActiva o desactiva el clima automático.
/hora [0-23] [0-59]timeCambia la hora.
/congelarhoratimeCongela o reanuda la hora.
/apagonflagsActiva o desactiva el apagón.
/nieveflagsActiva o desactiva la nieve en el suelo.
/climadiagviewDiagnóstico y sobrescrituras activas.
`/climazona [región] [clima\quitar]`weatherClima por zona (sin argumentos lista las zonas; todas quitar las limpia).
`/cielo [rojo\verde\azul\aurora\normal]`skyCielo especial para todos.
/climapanelviewAbre el panel en pantalla.
/filtroningunoCada jugador activa o desactiva el filtro de imagen solo para sí.
/filtroprueba [nombre] [fuerza]ningunoPrueba un modificador de color por nombre (0 quita la prueba).

/climapanel también está registrado como tecla (Ajustes > Teclas > FiveM > "Panel de clima y hora (Otra Vida)"), sin tecla asignada por defecto.

Climas disponibles: EXTRASUNNY, CLEAR, CLOUDS, OVERCAST, CLEARING, SMOG, FOGGY, RAIN, THUNDER, SNOWLIGHT, SNOW, BLIZZARD, XMAS, HALLOWEEN.

Exports del servidor (devuelven true, resultado o false, código_de_error):

GetApiVersion, GetState, GetWeather, GetTime, GetWeatherTypes, IsValidWeather, SetWeather(clima, {instant, transition, holdMinutes}), SetAutoWeather, SetTime(h, m, {instant}), SetTimeFrozen, SetTimeScale, SetBlackout, SetSnow, SetZoneWeather, ClearZones, GetZones, SetSky, SetFilter, GetFilter, RequestOverride, ReleaseOverride, ListOverrides.

Compatibilidad con qb-weathersync: setWeather, setTime, setTimeFreeze, setDynamicWeather, setBlackout y getWeatherState, y en el cliente los eventos qb-weathersync:client:DisableSync y EnableSync.

Sobrescrituras con dueño (RequestOverride): un script pide un clima, hora o bandera temporal con spec = { scope = 'global' | 'player', target, weather, transition, time = { hour, minute, frozen }, blackout, snow, priority, ttl }. Gana la de mayor prioridad; se limpian solas al terminar el ttl, al liberarlas o al detenerse el recurso que las pidió, y no alteran el estado base.

Eventos del servidor: ov_clima:weatherChanged, ov_clima:timeChanged, ov_clima:flagsChanged, ov_clima:zonesChanged. En el cliente: ov_clima:client:weatherChanged y ov_clima:client:regionChanged.

Exports del cliente: GetWeather, GetTime, PauseSync, ResumeSync (cada recurso tiene su propio pedido) e IsSyncPaused.

Como se usa

Jugadores: el clima y la hora se ven automáticamente. Con /filtro se activa o desactiva el filtro de imagen solo para uno mismo.

Equipo de administración:

  1. Con el permiso adecuado, abre el panel con /climapanel.
  2. Elige un clima y su transición, ajusta la hora con el control deslizante, congela la hora o cambia la velocidad del día.
  3. Activa cielos especiales, apagón o nieve.
  4. En el mapa, toca una zona y asígnale un clima propio; cada jugador verá el clima de la zona en la que está, y fuera de cualquier zona rige el global.
  5. Los botones se bloquean si te falta el permiso correspondiente.

Para administradores

Códigos de error de la API: invalid_weather, invalid_time, invalid_scale, invalid_mode, invalid_arg, invalid_scope, player_not_found, player_time_unsupported, not_found y realtime_mode.

Preguntas frecuentes

¿Es compatible con otros scripts de clima? No debe haber dos sincronizadores a la vez. OV Clima responde a los exports y eventos habituales de qb-weathersync, por lo que los scripts que los usan (por ejemplo casas o interiores) siguen funcionando.

¿Necesito qb-core? No. Solo necesita ox_lib y oxmysql.

¿Cómo hago que la hora siga la hora real? Cambia Config.Time.mode a 'realtime' y ajusta realtimeOffsetMinutes.

¿Cómo evito que llueva? Quita RAIN y THUNDER de los destinos en Config.Graph, o fija un clima a mano y desactiva el automático.

¿Cómo cambio la duración del día? Config.Time.msPerGameMinute, o SetTimeScale desde otro script.

¿Dónde veo los errores? En la consola del servidor y en la consola del cliente (F8). Puedes activar Config.Debug para más detalle.

Actualizaciones y soporte

Las versiones nuevas aparecen en el Portal de Cfx.re y en la tienda. Conserva tu shared/config.lua al actualizar. Para soporte, usa el Discord de la tienda: [enlace de soporte].