Cómo funciona una partida#
Todas las partidas siguen el mismo ciclo, sea contra el bot o contra otro jugador.
Momento | Qué pasa |
|---|---|
En la mesa | A menos de 2,5 m de una mesa, el aviso [E] - Ping Pong flota sobre ella. |
Ajustes | Elige el modo, la velocidad de la pelota, la puntuación que hay que alcanzar, la dificultad del bot (contra el bot) y la apuesta, y pulsa Ready. |
Ocupar tu lugar | La vista pasa a una cámara detrás de tu lado de la mesa. Tu personaje se oculta y queda inmóvil, el HUD y el minimapa desaparecen, y tu raqueta aparece sobre la mesa. Tu rival ocupa el extremo opuesto con una raqueta en la mano. |
Saque | La pelota se lanza hacia arriba en el lado de quien saca. Lleva la raqueta hacia ella para ponerla en juego. El saque se alterna en cada punto, empezando por ti, o por quien desafió en un duelo. |
Peloteo | Devuelve la pelota cada vez que llegue a tu lado. Un anillo en la mesa muestra dónde caerá cada golpe: verde en tu mitad, azul en la de tu rival. |
Puntos | Cuando la pelota sale de la mesa se decide el punto, el marcador se actualiza, una notificación muestra el resultado y el siguiente punto empieza dos segundos después. |
El final | Gana el primero que llega al límite de puntos. Un mensaje y un sonido de victoria o derrota, la apuesta liquidada, y tu personaje y tu cámara de vuelta. Un duelo también actualiza la clasificación. |
En un duelo, una sola partida lo decide todo. La partida de quien desafía controla la pelota y cada punto; la raqueta del otro jugador se le envía cada 16 ms y su pelota sigue a la de quien desafía, así que ambos ven el mismo peloteo y el mismo marcador. Los espectadores reciben la misma partida varias veces por segundo.
Colocar mesas#
Las mesas se colocan en el juego con el creador y se guardan en la base de datos. Cada una solo aparece para un jugador a menos de 30 m (Config.StreamDistance), así que un servidor puede tener todas las que quiera.
El creador#
/pingpongcreator abre el Ping Pong Table Creator: todas las mesas del servidor a la izquierda, con un cuadro de búsqueda, y el formulario de la mesa seleccionada a la derecha. + crea una mesa nueva.
Sección | Qué configuras ahí |
|---|---|
Table Info | El nombre de la mesa. Obligatorio. |
Pricing | Un precio y un método de pago: Cash Money o Bank Transfer. |
Game Modes | Un interruptor para cada uno de los cinco modos. |
Placement / Location | Dónde está la mesa. Una mesa nueva tiene Select; una guardada muestra su X, Y, Z y orientación, con Reposition. |
Save Table necesita un nombre y una ubicación. Una mesa existente se guarda con Save Changes o se elimina con Delete, tras una confirmación. El botón de teletransporte junto a cada mesa de la lista te lleva a ella. ESC cierra el creador.
Colocar una mesa en el mundo#
Select (o Reposition) cierra la ventana y te da un modo de colocación. Una mesa transparente sigue el punto al que apunta la cámara, hasta 50 m de distancia, con un marcador rojo y una línea hasta tu personaje. La orientación y el desplazamiento de altura se muestran en la parte superior de la pantalla.
Tecla | Hace |
|---|---|
| Apunta la cámara al lugar: el suelo o la parte superior de un prop. |
| Colócala aquí. Solo funciona mientras se apunta a una superficie. |
| Gírala mientras mantengas pulsada la tecla, a 80° por segundo ( |
| Arriba la sube, abajo la baja, 5 cm por paso ( |
| Cancela y vuelve al creador. |
El creador se vuelve a abrir con la ubicación rellenada. Siempre coloca Config.Creator.model — prop_table_tennis, la mesa azul — y cada cambio llega a todos los jugadores al instante.
Deja espacio en ambos extremos. Cada jugador se sitúa a 1,5 m del centro de la mesa a lo largo. El ID de una mesa depende de dónde está, así que moverla le da uno nuevo, y dos mesas en el mismo cuadrado de 10 cm cuentan como una.
Empezar una partida#
Acércate a una mesa (el aviso aparece a menos de 2,5 m de su centro) y pulsa E.
Play vs Bot → elige los ajustes → Ready. Si pusiste una apuesta, se cobra ahora; sin dinero suficiente, la partida no empieza. El bot ocupa el extremo opuesto como un personaje aleatorio de Config.BotModels, y tú sacas primero.
Dificultad | Reacción | Falla una pelota alcanzable | Error de puntería |
|---|---|---|---|
Easy | 600 ms | 25 % | 0.35 |
Normal | 400 ms | 10 % | 0.18 |
Hard | 200 ms | 3 % | 0.08 |
Los tres están en Config.BotDifficulty. Las partidas contra el bot nunca puntúan en la clasificación.
Play vs Player muestra a todos los jugadores a menos de 15 m de la mesa (Config.NearbyPlayerRadius), del más cercano al más lejano. Elige uno, configura los ajustes y pulsa Ready.
Recibe una invitación con tu nombre, el modo, la velocidad, el límite de puntos y la apuesta, y tiene 30 segundos para Accept o Decline. Cuando acepta, se cobran ambas apuestas y la partida empieza al instante, y tú sacas primero.
Cada jugador puede tener un desafío enviado y uno pendiente a la vez. Una mesa con un duelo en curso rechaza nuevos desafíos. Un desafío rechazado, caducado o cancelado se notifica al jugador que lo envió.
Ajustes de la partida#
Ajuste | Opciones |
|---|---|
Game Mode | Todos los modos de |
Speed | Slow, Normal o Fast. Contra el bot, cada uno muestra su multiplicador de recompensa. |
Score Limit | 3, 5, 7, 11 o 15 en Classic, Accelerated y Walls. Billiard y Target Practice tienen un único límite, así que la opción se oculta. |
Bot Difficulty | Easy, Normal o Hard, cada uno con su multiplicador de recompensa. Solo contra el bot. |
Bet Amount | Un control deslizante desde No Bet hasta |
Golpear la pelota#
Tu raqueta sigue al mouse sobre tu mitad de la mesa: izquierda y derecha la mueven de lado a lado, arriba y abajo la acercan a la red o la traen hacia ti. No hay que pulsar ningún botón; la pelota solo tiene que encontrarse con la raqueta.
Ponte detrás de la pelota
Observa el anillo de caída y lleva la raqueta hacia donde va la pelota. La raqueta se ve tenue mientras no puede golpear: durante medio segundo al inicio de cada punto, y hasta que la apartes de la pelota.
Acompaña el golpe
Mueve el mouse hacia delante al encontrar la pelota. Cuanto más rápido el movimiento, más rápida la devolución; una flecha amarilla sobre la raqueta indica un golpe en curso y un destello blanco marca el impacto.
Dirígela
Barrer el mouse de lado al golpear envía la pelota a la izquierda o a la derecha. Las devoluciones se mantienen dentro del ancho de la mesa, salvo en Walls, donde los lados la devuelven.
Cada devolución se mantiene entre una velocidad mínima y una máxima según la velocidad de pelota elegida, y su arco se baja hasta que cae sobre la mesa en lugar de pasar el extremo opuesto. Solo puedes golpear cuando la pelota viene hacia ti, y una vez cada 350 ms (Config.Physics.hitCooldown).
Velocidad de la pelota#
Velocidad | Las devoluciones viajan a | Fila en Config.Ball.speeds |
|---|---|---|
Slow | 1.6 – 4.0 m/s |
|
Normal | 2.0 – 5.0 m/s |
|
Fast | 2.6 – 6.5 m/s |
|
Cada fila de Config.Ball.speeds define el bote, la resistencia, la elevación y el rango de velocidad de la pelota en ese nivel; Config.SpeedIndex asocia cada nombre de velocidad a su fila.
Puntuación#
Un punto termina cuando la pelota cae fuera de la mesa. Quién lo gana depende del último golpe y de dónde botó:
Tu golpe… | Punto para |
|---|---|
bota en la mitad de tu rival y no se devuelve | Ti |
sale de la mesa sin botar en la mitad de tu rival, largo o abierto | Tu rival |
Cada punto vale uno, en todos los modos. El primer jugador que alcanza el límite de puntos gana la partida; no hace falta una ventaja de dos puntos.
Modos de juego#
Modo | Límite de puntos | Cómo se juega |
|---|---|---|
Classic | 3, 5, 7, 11, 15 | Peloteos normales. |
Accelerated | 3, 5, 7, 11, 15 | Cada golpe de raqueta en un peloteo es un 5 % más rápido que el anterior, hasta el doble de velocidad; las devoluciones del bot mantienen su ritmo. Cada punto nuevo empieza de cero. |
Walls | 3, 5, 7, 11, 15 | Los lados largos de la mesa funcionan como paredes: una pelota que se va abierta rebota hacia dentro, así que los puntos terminan en golpes largos y fallos. Los golpes se pueden cruzar tanto como quieras. |
Billiard | 61 | Peloteos normales en una partida larga a 61. |
Target Practice | 100 | Peloteos normales, el primero a 100: una sesión de resistencia. |
Cada modo es una línea de Config.Modes con su lista de límites de puntos. Cambia la lista para ofrecer otros límites, o quita una línea para ocultar ese modo. Los cinco valores id son fijos: uno nuevo no tiene reglas detrás.
Config.Modes = {
{ id = 'classic', label = 'Classic', scoreLimits = { 3, 5, 7, 11, 15 } },
{ id = 'accelerated', label = 'Accelerated', scoreLimits = { 3, 5, 7, 11, 15 } },
{ id = 'walls', label = 'Walls', scoreLimits = { 3, 5, 7, 11, 15 } },
{ id = 'billiard', label = 'Billiard', scoreLimits = { 61 } },
{ id = 'target', label = 'Target Practice', scoreLimits = { 100 } },
}La pantalla durante una partida#
Dónde | Qué hay |
|---|---|
Arriba | El marcador: ambos nombres y puntuaciones, con el modo y la apuesta (o VS si no hay apuesta) entre ellos. |
Abajo a la derecha | Las teclas: |
Sobre la mesa | El anillo de caída que parpadea, la flecha amarilla del golpe y un destello blanco donde se golpea la pelota. |
Notificaciones | Partida iniciada, cada punto con el marcador actual, la indicación de saque cuando te toca sacar y el resultado con lo que pagó la apuesta. |
Todo lo demás queda bloqueado mientras juegas: no puedes caminar, sacar un arma ni abrir otros menús. Las posiciones de la cámara están en Config.Camera, y los colores del anillo, la flecha y el destello en Config.Render.
Apuestas#
Contra el bot#
La apuesta se cobra cuando empieza la partida y debe estar entre Config.Betting.min y Config.Betting.max. Si ganas, la recuperas con una ganancia de apuesta × multiplicador de dificultad × multiplicador de velocidad; si pierdes o sales, se pierde. La ventana de ajustes muestra la ganancia posible antes de pulsar Ready. Lo que devuelve una apuesta de $1,000 al ganar:
Dificultad | Slow ×1.0 | Normal ×1.25 | Fast ×1.5 |
|---|---|---|---|
Easy ×1.0 | $2,000 | $2,250 | $2,500 |
Normal ×1.5 | $2,500 | $2,875 | $3,250 |
Hard ×2.5 | $3,500 | $4,125 | $4,750 |
Los multiplicadores están en Config.BotRewards:
Config.BotRewards = {
difficulty = { easy = 1.0, normal = 1.5, hard = 2.5 },
speed = { slow = 1.0, normal = 1.25, fast = 1.5 },
}Entre jugadores#
Quien desafía elige la apuesta y la invitación la muestra. Ambos jugadores deben tenerla cuando se envía el desafío y de nuevo cuando se acepta; ambas apuestas se cobran al empezar la partida.
Cómo terminó el duelo | El bote |
|---|---|
Un jugador alcanzó el límite de puntos | El ganador se lleva ambas apuestas. |
Un jugador salió con | El jugador que se quedó se lleva ambas apuestas. |
Un jugador se desconectó | El jugador que se quedó se lleva ambas apuestas. |
Las apuestas son en efectivo: la cuenta money de ESX, y cash en QBCore y Qbox. En standalone, el control deslizante se sigue mostrando pero no se mueve dinero. Para usar el banco o tu propia moneda, consulta Integraciones. Pon Config.Betting.enabled = false para quitar el control deslizante y todas las apuestas.
La clasificación#
Leaderboard en el menú de la mesa muestra los 20 mejores jugadores por rating (Config.Leaderboard.topCount) con su ELO, victorias y derrotas y su mejor racha, y muestra tu propio puesto y rating encima de la lista.
Solo puntúan los duelos entre jugadores, y solo los que terminan con un ganador después de al menos 15 segundos (Config.Leaderboard.minMatchDuration). Un duelo que alguien abandona no puntúa, ni tampoco una partida contra el bot.
Todos empiezan con 1200 (Config.ELO.base). Después de un duelo, ambos ratings cambian según la fórmula ELO estándar con un factor K de 32 (Config.ELO.k): vencer a un jugador más fuerte da más que vencer a uno más débil, y un rating nunca baja de 0. Dos jugadores con 1200 terminan con 1216 y 1184. Una victoria suma uno a la racha del ganador; una derrota la pone a cero.
Los jugadores se identifican por su identificador de ESX, el citizenid de su personaje en QBCore y Qbox, o su licencia de Rockstar en standalone. Config.Leaderboard.enabled = false deja de puntuar los duelos; la clasificación se sigue abriendo con lo que ya tiene. Para empezarla de nuevo, consulta Comandos y controles.
Salir de una partida#
Forma | Resultado |
|---|---|
| Sale de la partida. Contra el bot cuenta como derrota y se pierde la apuesta; en un duelo se avisa a tu rival de que saliste y se lleva el bote. El diálogo te avisa cuando hay una apuesta en juego. |
| Vuelve a la partida. |
Desconectarse | Lo mismo que salir, y se cancela cualquier desafío que hayas enviado o que estuvieras por responder. |
Se elimina la mesa | La partida termina al instante para los jugadores que están en ella. |
Espectadores#
Ping Pong está hecho para verse. Todos los que estén a menos de 15 m de una mesa (Config.SpectateDistance) cuando empieza una partida, o que entren en ese rango mientras se juega, la ven desarrollarse: ambos jugadores en sus extremos con sus raquetas, sacando, golpeando y reaccionando a cada punto, y la pelota en vuelo. Las partidas contra el bot se ven de la misma forma.
Los espectadores mantienen el control total de su personaje, y salir del rango detiene la visualización. Cuando el personaje de un jugador no está cargado para un espectador, lo sustituye un personaje de Config.BotModels que juega en su lugar.



