A corrida 3D movida pelos presentes da sua LIVE. Cada presente acelera um carro. Quem receber mais apoio cruza a linha de chegada primeiro.
Conectando…
Presentes recebidos de quem não está na lista criam um carro novo automaticamente (até 20).
A pontuação é proporcional ao valor em moedas. Ajuste o fator e aplique, ou edite cada presente. "Turbo" ativa o nitro com animação especial. "Freq." controla quantas vezes o simulador envia cada presente.
| Presente | Moedas | Pontos | Turbo | Freq. | Categoria |
|---|
O jogo recebe presentes por um único canal: eventos gravados na tabela GiftEvent. O simulador, os botões manuais e o relay da LIVE usam exatamente o mesmo formato, então trocar o simulador pelos presentes reais não muda nada no jogo.
https://wish4.com/api/projects/2335/data/GiftEvent
{
"room": "K7QXP", // código da sala
"event_id": "tt-7312...", // ID único → anti-duplicado
"sender": "@usuario", // quem enviou
"target": "", // opcional: carro que recebe (modo torcida)
"gift_name": "Rose", // casa com a tabela (PT ou EN)
"coins": 1, "repeat": 1, // valor total em moedas
"points": 0, // 0 = calcular pela tabela
"source": "tiktok", "ts": 1718000000000
}// npm i tiktok-live-connector@1 | node relay-tiktok.js usuario_da_live CODIGO
const { WebcastPushConnection } = require('tiktok-live-connector');
const [,, USER, ROOM] = process.argv;
const API = 'https://wish4.com/api/projects/2335/data/GiftEvent';
const sent = new Set();
const live = new WebcastPushConnection(USER);
live.connect().then(s => console.log('Conectado', s.roomId));
live.on('gift', d => {
if (d.giftType === 1 && !d.repeatEnd) return; // combo em andamento
const id = 'tt-' + (d.msgId || `${d.userId}-${d.giftId}-${d.createTime}`);
if (sent.has(id)) return; sent.add(id); // anti-duplicado
const repeat = d.repeatCount || 1;
fetch(API, { method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ room: ROOM, event_id: id, sender: '@' + d.uniqueId,
gift_id: String(d.giftId), gift_name: d.giftName, emoji: '🎁',
coins: (d.diamondCount || 1) * repeat, repeat, points: 0,
source: 'tiktok', ts: Date.now() }) });
});
Proteção dupla contra duplicados: o relay ignora IDs repetidos e o jogo bloqueia qualquer event_id já processado (contador 🛡️ no ranking). Se você tiver acesso à API oficial de parceiros do TikTok LIVE, ou usar TikFinity / Streamer.bot, basta enviar o mesmo JSON.
| # | Jogador | Pista | Presentes | Moedas | Pontos |
|---|