Archivo de configuración
Config = {
-- send paddle position to your opponent every 33ms (30x/s)
-- lower the value for faster sync sync between paddles
PositionSendRate = 33,
-- maximum time the puck can stay on one side in ms
PenaltyTime = 10000,
-- block these while playing
RestrictedControls = {37, 157, 159, 160, 161, 162, 163, 164, 165, 158, 101, 337, 53, 54, 47, 140, 141, 263, 264,
142, 143, 24, 257, 44, 282, 283, 284, 285, 69, 70, 114, 99, 100, 102, 22, 74, 68, 25, 36, 345,
346, 347, 91, 92},
BounceStrength = 0.05, -- camera bounce effect
DrawTableScore = true, -- draw actual match score for viewers on top tables
Framework = 0, -- 0: Standalone (no bets), 1: ESX, 2: QBCore
EnableBets = true,
MinBet = 1000,
MaxBet = 10000,
BetType = 2, -- 1: Choose the lower stake for both (P1 choose 1k, P2 choose 2k, stake will be 1k for both), 2: both can set their own stakes
WinMultiplier = 2, -- winner gets 2x the stake
SpawnDistance = 30.0,
UIFontID = 0, -- fontId (used in menus)
UIFontName = nil, -- name of the font (used in scaleforms and notifications)
NotifySystem = 1, -- 1: native notify, 2: okokNotify, 3: esx_notify, 4: qb_notify, 5: ox_notify
-- Enable rcore_stats? (https://store.rcore.cz/package/6273968)
Rcore_Stats = GetResourceState("rcore_stats") ~= "missing"
}
Objects = {{
pos = vector3(-1635.939453, -1052.837891, 12.148856),
heading = 318.0
}, {
pos = vector3(-1634.047485, -1054.425537, 12.148856),
heading = 318.0
}}
Translation = {
MATCH_SETTINGS = "Match Settings",
SLOW = "Slow",
MEDIUM = "Medium",
FAST = "Fast",
PUCK_SPEED = "Puck Speed",
PUCK_SPEED_DESC = "The maximum speed of the puck.",
MAX_SCORE = "Max Score",
MAX_SCORE_DESC = "The match will end after someone reaches this amount of goals.",
START = "Start",
START_DESC = "Press this to save the rules & start the match.",
LATENCY_HIGH = "Looks like your latency (%s) is too high. Your gameplay won't be that great.",
LATENCY_NORMAL = "Your latency is %s",
END_WINNER = "winner.",
END_LOSER = "loser.",
END_STATS_SAVES = "%s saves",
END_STATS_SHOTS = "%s shots on goal",
END_STATS_GOALS = "%s goals",
END_STATS_PLAYER = "%s m player travel",
END_STATS_PUCK = "%s m puck travel",
END_STATS_TITLE = "Air Hockey",
TIMERBAR_PENALTY = "PENALTY",
WAITING_FOR_OP = "Waiting for opponent.",
TABLE_USED = "This Air Hockey table is being used by someone else.",
NOT_CLOSE_ENOGUH = "Seems like you're not close enough. Walk away and try again",
NOT_ENOUGH_PLAYERS = "To start Air Hockey, ask one more player to come closer to the table.",
WAITING_FOR_OP_TO_JOIN = "Waiting for your opponent to join the match.",
PRESS_TO_PLAY = "Press ~INPUT_CONTEXT~ to play Air Hockey.",
MATCH_CANCELLED = "Match Cancelled",
MATCH_CANCELLED_DESC = "One of you have disconnected, or cancelled the match",
STARTING = "Waiting for players...",
WAITING_FOR_HOST = "%s is changing the rules",
PRESS_TO_CONFIRM_BET = "Press Enter to confirm the bet %s on your win",
READY = "Ready",
READY_DESC = "Press Enter if you're ready to play.",
WAITING_FOR_OP_READY = "Please wait until your opponent confirm they're ready.",
BETTINGS_CAPT = "Bettings",
BETTINGS_INFOPANEL = "STAKE: %s",
BETTING_ACC = "Account",
BETTING_STAKE = "Stake",
BETTINGS_USE_ACC_DESC = "Use '%s' account to pay for the stake. Max: %s",
-- Update 1.1.0
PADDLE_SKIN = "Paddle Skin",
PADDLE_SKIN_DESC = "Choose the skin of your paddle.",
PUCK_SKIN = "Puck Skin",
PUCK_SKIN_DESC = "Choose the skin of the puck.",
COLOR_BLUE = "Blue",
COLOR_GREEN = "Green",
COLOR_RED = "Red",
COLOR_ORANGE = "Orange",
COLOR_GRAY = "Gray",
COLOR_PURPLE = "Purple",
COLOR_PINK = "Pink",
COLOR_BLACK = "Black",
Get = function(key)
return Translation[key] or "Missing Translation: " .. key
end
}
🔧 Integración Plug & Play
-
Convierte los props de mesas de hockey aéreo existentes en mesas jugables
-
Controles suaves y receptivos para ambos jugadores
-
Perfecto para arcades, bares, casinos, salones o interiores personalizados
🎮 Partidos personalizables
Configure los partidos como desee:
-
3 opciones de velocidad de puck (lento, medio, rápido)
-
Configurable max rounds para duelos cortos o batallas más largas
-
Configuración fácil para adaptarse al ritmo y la economía de tu servidor
👀 Espectadores en vivo
-
Los jugadores cercanos pueden ver partidos en curso en tiempo real
-
Convierte cualquier mesa de hockey aéreo en un punto de encuentro social
-
Excelente para eventos comunitarios, torneos o rivalidades amistosas
📊 Estadísticas detalladas del partido
Al final de cada juego, los jugadores ven un desglose completo:
-
Objetivos
-
Ahorros
-
Disparos a la red
-
Distancia de viaje del disco
-
Distancia de viaje de la pala
Perfecto para derechos de fanfarroneo, tablas de clasificación o eventos basados en estadísticas.
🧤 Juego basado en habilidades: Salva ese disco
-
Las reacciones rápidas y una buena posición son recompensadas
-
Defender tu objetivo se siente tan satisfactorio como anotar
-
Techo de habilidad lo suficientemente alto como para mantener a los jugadores regulares comprometidos
💸 Sistema de apuestas (Opcional)
Aumente la apuesta con apuestas en el juego:
-
Los jugadores pueden apuestan por sí mismos antes de un partido
-
El ganador se lleva el bote, dependiendo de la configuración de tu servidor
-
Añade riesgo, recompensa y tensión extra a cada ronda
-
Aumenta retención de jugadores con una actividad secundaria divertida
-
Fomenta interacción social y competencia amistosa
-
Se integra naturalmente en servidores RP, casuales y orientados a la economía




