Cuxial Tablet tiene seis páginas, que se eligen en la barra superior. Esta página explica qué hace cada una para el jugador y cómo el staff lo edita todo desde el panel de administración.
Abrir la tablet
F1 la abre y la cierra. El personaje coge un prop de tablet con la mano izquierda y reproduce una animación mientras está abierta. Por defecto no se abre mientras el jugador está muerto, nadando, conduciendo o esposado; de pasajero sí. Con tablet.rememberPage la tablet se reabre en la última página visitada; si no, se abre en tablet.startPage.
Las páginas se desactivan una a una en tablet.pages. Una página desactivada desaparece de la barra y no se puede abrir con los exports.
Perfil
El carnet del jugador, sus cuentas, su trabajo y grado actuales, las horas trabajadas y los minutos de la sesión actual. Debajo, dos listas:
- Vehículos: nombre, matrícula y si cada uno está en el garaje, fuera, destruido o en el depósito.
- Propiedades: nombre, dirección y tipo (casa, apartamento, garaje o negocio).
Las dos listas salen de adaptadores que leen tus propios recursos. De fábrica, los vehículos salen de qbx_vehicles y las propiedades de nolag_properties; sin ellos las listas quedan vacías. Consulta Hooks.
Noticias
Una portada con entradas destacadas y en tendencia, un filtro por categoría y un feed. Cinco tipos de entrada:
| Tipo | Qué contiene |
|---|---|
| Artículo | Título, entradilla, miniatura y cuerpo |
| Galería | Un conjunto de imágenes |
| Vídeo | Un enlace a un vídeo |
| Evento | Una fecha y un lugar |
| Encuesta | Opciones que votan los lectores, un voto por personaje |
Los lectores abren una entrada, le dan like y votan en las encuestas. Una entrada pasa a tendencia cuando alcanza news.autoTrendingLikeThreshold likes, y las news.trendingCount entradas con más likes se muestran arriba.
Los jugadores cuyo trabajo está en news.publisherJobs, y el staff, ven un botón Redactar. Eligen el tipo, la categoría, el título y el contenido, y la entrada se publica al momento para todos. Los autores pueden borrar sus propias entradas; el staff puede borrar cualquiera.
Directos
Los jugadores cuyo trabajo está en live.broadcasterJobs, y el staff, pueden emitir desde la página de noticias. El locutor pone un título al directo, coge un prop de cámara al hombro y la cámara del juego pasa a ser la emisión: lo que mira es lo que ven los espectadores. La rueda del ratón hace zoom, Retroceso corta el directo y el micrófono se activa y desactiva desde la tablet.
Cuando empieza un directo, todo el servidor recibe una alerta en pantalla. Los espectadores lo abren desde la lista de directos activos y lo ven dentro de la tablet, con un chat limitado a live.chat.maxLen caracteres y live.chat.perMinute mensajes por minuto, y reacciones rápidas. Un directo termina cuando el locutor lo corta, se desconecta, llega a live.maxDurationSec o el staff lo corta desde el panel. Un directo admite hasta live.maxViewers espectadores.
El vídeo viaja por el módulo de media de Cuxial Bridge. Con el relay configurado, los locutores publican a la calidad de live.enc; sin él, el vídeo pasa por el servidor de juego a calidad reducida. Consulta Instalación.
Trabajos online
Cada servicio de data/jobs_online.lua es una tarjeta con su nombre, imagen, color y cuántos jugadores están en servicio ahora mismo. Los recuentos se refrescan cada jobs.onlineRefreshSec segundos. Las tarjetas se ordenan por priority y se agrupan por category.
Empleos
Un catálogo de trabajos que el jugador puede empezar por su cuenta, de data/jobs_city.lua: imagen, nombre y descripción. El botón Empezar cierra la tablet y, según jobs.city.startMode:
waypoint: marca las coordenadas del trabajo en el mapa.event: dispara un evento de cliente con el id del trabajo, para que tu recurso de trabajos tome el control.
Mira
Un estudio para montar una mira personalizada que sustituye a la del juego.
- Biblioteca: 146 presets en diez categorías (minimalistas, clásicas, corchetes, anillos, tácticas, geométricas, cyber, direccionales, compuestas y vanguardistas). Elige uno como punto de partida.
- Capas: hasta
crosshair.maxLayerscapas de seis tipos (punto, cruz, círculo, chevrón, corchete y barra en T), cada una con su tamaño, grosor, separación, longitud, opacidad, color, contorno y rotación. El color global se aplica a las capas sin color propio. - Separación dinámica: la separación crece al moverse, esprintar o conducir y se reduce al apuntar, con un factor de suavizado.
- Por arma: un perfil para cada grupo de arma (cuerpo a cuerpo, pistola, subfusil, rifle, escopeta, francotirador, pesada y arrojadiza). La tablet cambia de perfil al cambiar de arma.
- Siempre visible: dibuja la mira aunque no se apunte.
- Códigos: cualquier mira se copia como un código de texto y otro jugador lo pega.
- Galería: los jugadores publican hasta
crosshair.gallery.maxPerPlayermiras con un nombre. Los demás las ven por más gustadas, mejores de la semana o más nuevas, les dan like y las usan con un clic. El staff borra entradas desde el panel. - Hitmarker: un marcador al impactar (cruz, X, anillo o punto) con sonido, duración y un número de daño que flota sobre el objetivo. Cada jugador lo ajusta, dentro de lo que permiten
crosshair.allowHitmarkerycrosshair.allowDamageNumbers.
La mira se guarda en el servidor por personaje y se vuelve a aplicar en cada conexión. El staff puede leer y sobrescribir la mira de cualquier jugador desde el panel.
VIP
La página VIP contiene la economía de coins. Las coins viven en una cuenta de dinero de tu framework (vip.account), así que cualquier recurso que dé dinero a esa cuenta da coins. La página tiene siete pestañas.
Tienda
Un catálogo de artículos que se pagan con coins, filtrado por categoría y ordenado por destacados, novedades o precio. Cada tarjeta muestra el precio, el stock restante cuando vip.stockMode = 'perItem', la etiqueta nuevo durante vip.newDays días y la etiqueta top ventas en los vip.topSellersCount artículos más vendidos de los últimos 30 días.
| Función | Cómo funciona |
|---|---|
| Ofertas flash | Un descuento con fecha de fin. El precio sale tachado y una cuenta atrás corre en la tarjeta. |
| Artículos limitados | Una fecha de fin tras la cual el artículo sale de la tienda. |
| Packs | Un artículo principal más artículos extra que se entregan juntos. |
| Requisito de lealtad | Un artículo puede exigir un nivel de lealtad. |
| Categoría temática | Los artículos con tema llevan un estilo de tarjeta especial. |
| Vista 3D | Los artículos marcados con preview3d muestran un botón Ver en 3D: el arma flota delante de la cámara, se gira y se compra desde ahí. |
| Carrito | Hasta vip.cart.maxItems líneas, pagadas de una vez. |
| Lista de deseos | Artículos guardados en el PC del propio jugador. |
| Regalos | Compra un artículo para un jugador conectado con un mensaje. El regalo espera en la bandeja del destinatario y se entrega cuando lo reclama. Se puede añadir un recargo de vip.gift.feePct por ciento. |
Los precios incluyen el descuento de lealtad del comprador. Si el inventario no puede llevar el artículo, la compra se devuelve.
Cartera
El saldo, el historial de movimientos y dos acciones:
- Transferir coins a un jugador conectado, perdiendo
vip.wallet.transfer.feePctpor ciento de comisión, con un mínimo por transferencia y un tope diario por jugador. - Canjear un código con la forma
VIP-XXXX-XXXXcreado por el staff. Cada código da coins o un ítem, tiene un número de usos y una caducidad opcional, y se canjea una vez por personaje.
Diaria
Un ciclo de daily.cycleDays premios, uno por día, definidos en data/daily.lua. Las reglas:
- Un premio se reclama una vez cada
daily.claimWindowHourshoras. - Cada reclamo suma un día a la racha.
- Los premios en coins reciben un bonus de
daily.streakBonusPctpor ciento por cada día de racha, con tope endaily.streakBonusMaxPctpor ciento. Los premios en ítems no se multiplican. - Si pasan más de
daily.graceHourshoras sin reclamar, la racha queda en riesgo: el siguiente reclamo la reinicia en 1. Condaily.breakStreakOnMiss = falsela racha nunca se rompe. - Mientras la racha está en riesgo, el jugador puede rescatarla pagando
daily.rescue.pricecoins, hastadaily.rescue.maxPerCycleveces por ciclo. - Al completar el ciclo, vuelve a empezar por el día 1. El último día puede marcarse como hito.
- Los jugadores de un nivel de lealtad con
extraDailyDayreciben un día extra al final de cada ciclo, que repite el último premio.
Pase
Un pase de temporada con pass.totalTiers niveles y pass.xpPerLevel de XP por nivel. Cada nivel tiene un premio gratis y un premio premium, definidos en data/pass.lua. El premium se activa para la temporada pagando pass.premiumPrice coins.
El XP sale de:
| Fuente | XP |
|---|---|
| Reclamar la recompensa diaria | pass.xpSources.daily |
| Gastar coins en la tienda o en cajas | pass.xpSources.shopPerCoin por coin |
| Completar un trabajo | pass.xpSources.jobComplete, a través de cuxial_jobs o del export EmitJobCompleted |
| Jugar | pass.xpSources.playtimePerMin por minuto conectado |
| Misiones semanales | El XP de cada misión |
Los premios se reclaman nivel a nivel o todos de golpe. Cada semana se eligen pass.missions.weeklyCount misiones de data/missions.lua; la semana se reinicia el día pass.missions.resetDay. Las misiones cuentan trabajos completados, minutos jugados, reclamos diarios, coins gastadas, metros recorridos o cajas abiertas.
Cambiar el nombre o el número de temporada desde el panel inicia una temporada nueva: todos los jugadores empiezan de nuevo en el nivel 1 y el progreso anterior se conserva en la base de datos.
Cajas
Las cajas son niveles definidos en data/cases.lua, cada uno con un precio y una probabilidad por rareza. El conjunto de premios posibles es compartido y cada premio tiene una rareza. Abrir una caja:
- El jugador elige el nivel y cuántas abrir a la vez, entre
cases.multiOpen. - El servidor decide el resultado y cobra las coins.
- La tablet reproduce una tira de ruleta que se detiene en la tarjeta ganadora.
Con cases.showOdds se muestran las probabilidades por rareza en cada nivel. Con cases.pity.enabled, un jugador que abre cases.pity.legendaryAfter cajas sin legendaria recibe una garantizada en la siguiente apertura. Los premios que no caben en el inventario van a la bandeja de regalos para reclamarlos después.
Historial
Todos los movimientos VIP del personaje: compras, cajas, diaria, premios del pase, transferencias, códigos, regalos, lealtad y ajustes del staff, con filtro por origen.
Lealtad
Niveles que se alcanzan por el total de coins gastadas en la tienda, en cajas y en el premium, definidos en vip.loyalty.tiers. Cada nivel tiene un descuento en la tienda y puede añadir un día extra de recompensa diaria. El total nunca baja, así que un nivel nunca se pierde.
Panel de administración
/tabletadmin abre el panel para el staff con el permiso admin. Todo lo que se guarda desde él va a la base de datos y se aplica al momento a todos los jugadores, sin reiniciar. Seis pestañas:
| Pestaña | Qué edita |
|---|---|
| Ajustes | Todas las secciones de shared/config.lua editables en vivo: tablet, VIP, diaria, pase, cajas, noticias, directos, mira y trabajos, más los catálogos de trabajos online y empleos. Las coordenadas de un empleo se eligen en el mundo con la herramienta de colocación. |
| Tienda | El catálogo: crear, editar, desactivar y reordenar artículos, con un selector de ítems que busca en tu inventario. |
| Pase y diaria | Los premios de cada nivel del pase, el ciclo diario y las misiones semanales. |
| Cajas | Niveles, probabilidades y el conjunto de premios, con un simulador que abre un nivel muchas veces y muestra la distribución resultante. |
| Operaciones | Buscar un jugador por nombre, id de servidor o citizenid y ver su estado VIP; dar o quitar coins; dar XP del pase; reiniciar la diaria; leer o sobrescribir su mira; cortar un directo; borrar una entrada de la galería; crear y desactivar códigos y ver quién los ha canjeado. |
| Estadísticas | Coins gastadas por día, número de compradores, artículos más vendidos y cajas abiertas por nivel, en 7 o 30 días. |
Cada sección indica si está en valores de fábrica o modificada. Una sección puede volver a los valores de fábrica, y toda la configuración se exporta como JSON y se importa en otro servidor. Cuando otro miembro del staff guarda, el panel se recarga y conserva tus ediciones sin guardar.
Dos ajustes exigen que los jugadores vuelvan a conectar: la tecla de la tablet y la tecla que corta un directo. El panel los marca.
