Crea y borra mesas, averigua dónde está sentado un jugador y reacciona a rondas, partidas y apuestas desde tus propios recursos. Toda la API es de servidor.
Exports de servidor
GetTables
Devuelve todas las mesas.
local tables = exports.cuxial_domino:GetTables()Devuelve: table[], ordenada por id. Cada entrada es el resumen de una mesa:
| Campo | Tipo | Descripción |
|---|---|---|
id | number | Id de la mesa. |
name | string | nil | Nombre dado a la mesa. |
pos | table | { x, y, z }. |
heading | number | Orientación de la mesa. |
maxPlayers | number | De 1 a 4. |
teamMode | boolean | true en las mesas de 4 por parejas. |
tableModel | string | Modelo de la mesa. |
scoreMode | string | 'classic' o 'fives'. |
betMin, betMax | number | nil | Límites de apuesta de la mesa. nil usa los límites globales. |
seated | number | Jugadores sentados ahora mismo. |
inGame | boolean | true mientras se juega una ronda. |
for _, t in ipairs(exports.cuxial_domino:GetTables()) do
print(t.id, t.name, t.seated, t.inGame)
endGetTable
Devuelve el resumen de una mesa.
local tbl = exports.cuxial_domino:GetTable(id)| Parámetro | Tipo | Descripción |
|---|---|---|
id | number | Id de la mesa. |
Devuelve: el resumen de la mesa, o nil si la mesa no existe.
local tbl = exports.cuxial_domino:GetTable(3)
if tbl and not tbl.inGame then print('La mesa 3 está libre') endCreateTable
Crea una mesa y la guarda en la base de datos.
local id, err = exports.cuxial_domino:CreateTable(data)| Parámetro | Tipo | Descripción |
|---|---|---|
data.pos | table | { x, y, z }. Obligatorio. Usa las coordenadas de un jugador de pie en el sitio: la mesa se coloca un metro por debajo de z. |
data.heading | number | Orientación. 0.0 por defecto. |
data.maxPlayers | number | De 1 a 4. 4 por defecto. |
data.teamMode | boolean | Parejas. Solo se aplica con maxPlayers = 4. |
data.style | string | 'luxury', 'wood' o 'classic'. 'luxury' por defecto. |
data.tableModel | string | Nombre de un modelo. Si se indica, sustituye a style. |
data.scoreMode | string | 'classic' o 'fives'. 'classic' por defecto. |
data.name | string | Nombre de la mesa. Se corta a 60 caracteres. |
data.betMin, data.betMax | number | Límites de apuesta. Hacen falta los dos; con solo uno, la mesa usa los límites globales. |
Devuelve: el id de la mesa nueva, o nil y un motivo. El motivo es 'err_too_close' cuando hay otra mesa a menos de table.minDistanceBetween, y 'err_table_not_found' cuando falta data o data.pos.
local id, err = exports.cuxial_domino:CreateTable({
pos = { x = 195.0, y = -934.0, z = 30.7 },
heading = 90.0,
maxPlayers = 4,
teamMode = true,
style = 'wood',
scoreMode = 'classic',
name = 'Plaza central',
betMin = 100,
betMax = 5000,
})
if not id then print('No se pudo crear la mesa: ' .. tostring(err)) endDeleteTable
Borra una mesa. Levanta a los jugadores sentados y devuelve cualquier apuesta ya cobrada.
local ok = exports.cuxial_domino:DeleteTable(id)| Parámetro | Tipo | Descripción |
|---|---|---|
id | number | Id de la mesa. |
Devuelve: boolean. false si la mesa no existe.
exports.cuxial_domino:DeleteTable(3)GetPlayerTable
Devuelve dónde está sentado un jugador.
local tableId, seat = exports.cuxial_domino:GetPlayerTable(source)| Parámetro | Tipo | Descripción |
|---|---|---|
source | number | Id de servidor del jugador. |
Devuelve: el id de la mesa y el número de asiento (de 1 a 4), o nil si el jugador no está sentado.
local tableId, seat = exports.cuxial_domino:GetPlayerTable(source)
if tableId then print(('Sentado en la mesa %d, asiento %d'):format(tableId, seat)) endIsSeated
Indica si un jugador está sentado en una mesa.
local seated = exports.cuxial_domino:IsSeated(source)Devuelve: boolean.
if exports.cuxial_domino:IsSeated(source) then return endon
Registra una función para uno de los eventos listados más abajo.
local handle = exports.cuxial_domino:on(event, fn)| Parámetro | Tipo | Descripción |
|---|---|---|
event | string | Nombre del evento sin prefijo, por ejemplo 'matchFinished'. |
fn | function | Recibe los datos del evento. |
Devuelve: un identificador numérico, o nil si los argumentos no son válidos.
local handle = exports.cuxial_domino:on('matchFinished', function(payload)
print(('Mesa %d: gana el asiento %s'):format(payload.tableId, tostring(payload.winnerSeat)))
end)off
Quita una función registrada con on.
local removed = exports.cuxial_domino:off(handle)Devuelve: boolean.
exports.cuxial_domino:off(handle)Eventos de servidor
Cada evento se dispara también como evento local de servidor con el nombre cuxial_domino:<evento>. Es la forma más sencilla de escuchar:
AddEventHandler('cuxial_domino:betPaid', function(payload)
print(('La mesa %d pagó un bote de $%d'):format(payload.tableId, payload.total))
end)| Evento | Datos | Cuándo |
|---|---|---|
tableCreated | { id, table, by } | Se crea una mesa. table es su resumen. by es el id de servidor del miembro del staff, o nil si se creó por export. |
tableRemoved | { id, by } | Se borra una mesa. |
playerSeated | { tableId, seat, source } | Un jugador se sienta. |
playerLeft | { tableId, seat, source, reason } | Un jugador deja la mesa. |
roundStarted | { tableId, seats, scoreMode } | Empieza una ronda. seats es la lista de asientos que juegan, IA incluida. |
tilePlayed | { tableId, seat, tile, side } | Se coloca una ficha, por un jugador o por la IA. tile es { a, b }. |
bonus | { tableId, seat, points, kind } | Se anota un bono de partida clásica. |
roundEnded | { tableId, winnerSeat, reason } | Termina una ronda. winnerSeat puede ser nil. |
matchFinished | { tableId, winnerSeat, scores } | Termina una partida. scores asocia cada asiento con sus puntos. |
betPaid | { tableId, winnerSeat, total } | Se paga el bote al ganador. total es el bote completo. |
Valores
| Campo | Valores |
|---|---|
playerLeft.reason | 'left' (por decisión propia), 'disconnected', 'inactive' (turnos agotados) |
tilePlayed.side | 'start', 'left', 'right'; en All Fives también 'top' y 'bottom' |
bonus.kind | 'round_pass', 'opening_pass', 'capicua' |
roundEnded.reason | 'domino' (un jugador se quedó sin fichas), 'blocked', 'fives_target' y 'bonus_target' (objetivo alcanzado durante la ronda), 'player_left' (ronda cancelada), 'last_standing', 'solo_left', 'no_players' |
Los asientos se numeran de 1 a 4. Las mesas de 2 jugadores usan los asientos 1 y 3. En las mesas de 1 jugador el jugador es el asiento 1 y la IA el 2. En las mesas por parejas, los asientos 1 y 3 juegan contra el 2 y el 4.
Cliente
Cuxial Domino no tiene exports de cliente ni eventos públicos de cliente.
