Fichier de configuration
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
}
🔧 Intégration Plug & Play
-
Transforme les accessoires de table de hockey sur air existants en tables de jeu
-
Commandes fluides et réactives pour les deux joueurs
-
Idéal pour les salles d'arcade, les bars, les casinos, les salons ou les intérieurs personnalisés.
🎮 Matchs personnalisables
Configurez les matchs comme vous le souhaitez :
-
3 options de vitesse de rondelle (lent, moyen, rapide)
-
Nombre maximal de manches configurable pour des duels courts ou des batailles plus longues
-
Configuration facile adaptée au rythme et à l'économie de votre serveur
👀 Spectateur en direct
-
Les joueurs à proximité peuvent regarder les matchs en cours en temps réel
-
Transforme n'importe quelle table de hockey sur air en un lieu de rencontre convivial.
-
Idéal pour les événements communautaires, les tournois ou les rivalités amicales.
📊 Statistiques détaillées du match
À la fin de chaque partie, les joueurs voient un récapitulatif complet :
-
Objectifs
-
Sauvegardes
-
Tirs au but
-
distance parcourue par le palet
-
distance parcourue par la pagaie
Idéal pour se vanter, établir des classements ou participer à des événements basés sur les statistiques.
🧤 Jeu basé sur les compétences : Sauvez ce palet
-
Les réactions rapides et le bon positionnement sont récompensés.
-
Défendre ses buts procure autant de satisfaction que de marquer.
-
Le niveau de maîtrise est suffisamment élevé pour maintenir l'intérêt des joueurs réguliers.
💸 Système de paris (facultatif)
Faites monter la température avec les paris en direct :
-
Les joueurs peuvent parier sur eux-mêmes avant un match
-
Le gagnant remporte la mise, en fonction de la configuration de votre serveur.
-
Ajoute du risque, de la récompense et une tension supplémentaire à chaque tour
-
Augmentations fidélisation des joueurs avec une activité annexe amusante
-
Encourage interaction sociale et la compétition amicale
-
S'intègre naturellement aux serveurs RP, occasionnels et axés sur l'économie



