Создавайте игры и награды

Превратите подарок, сумму поддержки или команду чата в действие на трансляции.

Да, ваша игра может реагировать на подарки TikTok

Social Stream Ninja получает событие и отправляет его вашей странице. JavaScript решает, что произойдёт: ускорение ракеты, рост сада, появление врага или продвижение общей цели. Действие и порог задаются в игре. SSN не меняет цены подарков платформы.

Начните здесь: попробуйте три шаблона, затем выберите, что измеряет правило: единицы платформы, идентификатор подарка или оценочные USD.

Для звука, уведомления, действия OBS или webhook начните с Event Flow. Собственная HTML-страница подходит для игрового поля или собственного состояния игры. Готовые игры есть в галерее игр.

Три небольших редактируемых шаблона

В каждом предпросмотре есть кнопки примеров и просмотр последних полученных данных. Это вымышленные события, а не покупки. Предпросмотр не подключается к вашему живому сеансу.

  • Монетная ракета: 10 монет TikTok, 100 Bits Twitch или 100 звёзд Facebook дают одно ускорение. Остатки копятся отдельно по зрителям и платформам. Измените COST в HTML для настройки сумм.
  • Общая цель поддержки: объединяйте оценочную поддержку USD четырёх платформ для строительства лунной базы. Измените GOAL_USD или замените индикатор прогресса уроном, топливом либо таймером.
  • Сад подарков и событий: выбранный подарок TikTok добавляет цветы, полученное событие нового подписчика — дерево, а бесплатная команда !water в чате добавляет воду. Установите GIFT_ID в полученный ID, либо задайте GIFT_NAME равным точному имени. «Demo flower» — вымышленный пример.

Откройте HTML-код и найдите EDIT THIS RULE или EDIT THESE RULES. receive(data) — функция, в которой пример действия заменяется логикой игры. Помощники подключения и подсчёта находятся в starter.js; оформление находится в starter.css.

Подключите шаблон к трансляции

  1. Запустите SSN и подключите источник чата. Убедитесь, что чат и подарки/поддержка доходят до dock. Настройка TikTok: режимы подключения.
  2. Откройте шаблон без ?demo, с вашим ID сеанса SSN. Укажите пароль сеанса, если он задан.
  3. Проверьте страницу в браузере и добавьте тот же URL как источник «Браузер» в OBS, например 1000 × 800. Добавьте &clean , чтобы скрыть инспектор, состояние подключения и кнопки ведущего.
https://socialstream.ninja/games/templates/coin-rocket.html?session=YOUR_SESSION&password=YOUR_PASSWORD&clean

На сайте beta сохраните /beta/ перед games/. Если пароль не задан, пропустите его параметр. Не публикуйте ссылки сеанса.

По умолчанию используется тот же мост iframe, что у оверлеев SSN. Для размещённого WebSocket-канала захваченного чата включите в SSN Отправлять сообщения от расширения в док-панель через сервер и добавьте &server2. См. Руководство по WebSocket для локальной настройки; шаблоны также принимают &server2&localserver и &localserverport=3000. localserver сама по себе не включает канал. Старый server использует другой канал и может зависеть от публикующего в него dock.

Создайте собственную копию

Скачать исходники beta в ZIP и распакуйте. Редактируйте файлы в games/templates/, сохраняя структуру папок: шаблоны также загружают js/local-server-url.js, а цель поддержки загружает currency.js из корня репозитория.

Раздавайте распакованную папку через локальный веб-сервер. Если установлен Python, выполните в этой папке:

python -m http.server 8080 --bind 127.0.0.1

Затем используйте http://127.0.0.1:8080/games/templates/coin-rocket.html?session=YOUR_SESSION в браузере или OBS. При размещении в другом месте сохраняйте относительные пути. Сборка не требуется.

Как выбрать число монет для действия?

Прежде чем выбирать число, решите, что измерять:

ПравилоПрочитайтеПример
Единицы платформыTikTok meta.coinsPerGift × meta.tiktokGiftCount , если передано, либо явное значение hasDonation с подписью, например 10 coins, 100 bits, или 100 Stars.Каждые 10 монет дают ускорение.
Конкретный подарокTikTok meta.giftId или meta.giftName, и его количество.Каждый подходящий подарок добавляет цветок независимо от оценки в USD.
Сопоставимая ценность поддержкиgetDonationValueUSD(data) из currency.js.Каждый оценочный доллар добавляет 10 топлива; 25 долларов завершают цель.
Бесплатное действие или членствоФактическое значение источника в event, или команду чата.Подписка на обновления выращивает дерево; новая платная подписка запускает анимацию.

Определите, означает ли сумма точное совпадение (coins === 10), минимум за событие (coins >= 10), или накопленный баланс. Ракета накапливает остаток: 25 монет дают два ускорения и оставляют пять монет. Правило «ровно 10» пропустит 25 монет. Если событие выбирает одно из нескольких действий, сначала проверяйте самый высокий порог, чтобы не сработали все нижние уровни.

В TikTok зрители покупают монеты и тратят их на подарки с указанной ценой. Выберите доступные в вашем LIVE подарки и проверьте захват до публикации правила. Название подарка, количество подарков, монеты и алмазы — разные меры. Не вычисляйте «точные монеты» делением оценки USD и не приравнивайте алмазы к монетам. Объяснение монет и подарков TikTok.

Если источник даёт только название/количество подарков или алмазы, монетный шаблон пропускает событие без явных метаданных монет. Используйте правило конкретного подарка или шаблон оценочных USD. Метаданные могут происходить и из таблицы подарков SSN; когда важна точная цена, сверяйтесь с текущим меню подарков LIVE. Каталоги и способы захвата различаются; общего поля монет, гарантированного в каждом сообщении TikTok, нет.

Что отправляет каждая платформа

type обозначает источник; event обозначает действие, если присутствует. Доступность зависит от режима захвата, настроек и данных платформы. Примеры описывают текущий код SSN, не гарантируя все события каждому аккаунту.

ПлатформаДанные поддержки и событийРазличайте
TikToktype: "tiktok", event: "gift". Захват пожертвований может передавать hasDonation и donoValue. Метаданные могут содержать ID, название, количество, монеты или алмазы за подарок и идентификатор серии.Монеты покупают подарки; алмазы — награды авторов. Захват WebSocket в SSApp завершает серии перед передачей; браузер может отправлять накопительные обновления. Отключение захвата пожертвований TikTok может оставить подарки без денежных полей.
TwitchCheers используют Bits, например hasDonation: "100 bits". Захват через API может использовать event: "cheer" и donoValue: 1; захват отображаемого чата может не содержать метки события.Подписки, подарочные подписки, рейды и баллы канала — отдельные действия. Значок подписчика у обычного сообщения не означает новую подписку. Прямые Cheers и Bits в расширениях Twitch — разные интеграции.
FacebookВидимые строки звёзд Live Chat содержат, например, hasDonation: "100 Stars" и donoValue: 1, без event .API комментариев не выводит звёзды из текста чата. Захват DOM требует видимую строку звёзд; обычные комментарии и реакции не подтверждают оплату.
YouTubesuperchat и supersticker передают сумму в исходной валюте в hasDonation. Подарки используют jeweldonation с N Jewels, или 1 YouTube Gift , когда сумма скрыта.Зрители тратят Jewels на подарки, авторы получают Rubies. Спонсорство и подаренное спонсорство — отдельные события, не Jewels. Super Thanks — отдельный продукт без гарантии события пожертвования в живом чате.

Материалы платформ: Алмазы TikTok; Bits и подписки Twitch; Обзор звёзд Meta; YouTube Super Chat и Super Stickers; YouTube Jewels, Gifts и Rubies. Термины проверены 29 сентября 2026 года; актуальные условия и доступность смотрите на сайтах платформ.

Другие источники могут сообщать чаевые, подарки, членства или покупки. Изучите справочник событий перед добавлением в фильтр шаблона isSupport . Продажа товара или подарочная подписка не обязательно чаевые. Например, YouTube различает покупку подарка и уведомление о получении; подсчёт обоих дважды вознаградит один подарок.

Правильно используйте donoValue и currency.js

hasDonation — исходная отображаемая подпись, например €5.00 или 100 bits. donoValue — необязательная числовая сумма USD от источника. Учитывайте корректное заданное значение, включая ноль, до оценки по подписи. Сохраните исходную подпись для отображения.

<script src="../../currency.js"></script>
<script>
// From games/templates/: use the existing helper, including its zero handling.
var usd = getDonationValueUSD(data);
// Use usd for your rule; display data.hasDonation for the original amount/unit.
</script>

Существующее поведение пересчёта: Сейчас SSN оценивает монету TikTok в 0,01 USD, алмаз в 0,005 USD, Bit Twitch или звезду Facebook в 0,01 USD, а Jewel YouTube в 0,005 USD. Подарок TikTok без цены по умолчанию считается одной монетой за штуку; подарок YouTube без числа Jewels имеет отдельную временную оценку 0,01 USD. Валюты тоже пересчитываются по внутренним приблизительным курсам, а не через сервис актуальных курсов.

Это сравнительные значения SSN, а не единое определение расходов зрителя, чистого дохода автора или доступного вывода. Разные способы захвата могут давать разные оценки. В частности, подстановка одной монеты для неизвестного подарка TikTok не доказывает его цену.

Не используйте donoValue || convertToUSD(...): это отбросит намеренно заданный ноль. Не извлекайте цифры из chatmessage для обнаружения оплаты и не требуйте метку event === "donation": у звёзд Facebook и некоторых Cheers нет метки события. Шаблон цели сначала выбирает виды поддержки, затем вызывает общий конвертер.

Исходник: currency.js и справочнике данных. Метаданные подарков необязательны; примеры не выдумывают отсутствующие поля.

Считайте серию подарков один раз

TikTok может сообщать накопительные значения 1, 2, 3 одной серии. Это три подарка, не шесть. Для суммирования запоминайте наибольшее полученное количество или сумму и применяйте только прирост. Завершающее обновление с тем же итогом ничего не добавляет.

// All three events refer to the same streak:
// incoming total: 1, 2, 3, 3
// added to game:  1, 1, 1, 0
var newCoins = RewardStarter.increment(data, RewardStarter.coins(data), 'coins');

Вспомогательная функция сначала использует доступные нативные ID группы/отправителя/подарка TikTok, затем meta.tiktokGiftStreakId или ID сообщений. Обычные ID тоже подавляют повторную доставку. Функция не ждёт repeatEnd , поскольку браузерный захват может никогда его не передать. Для единственного действия после завершения серии нужна отдельная логика завершения по полям, которые реально посылает соединение.

Учебные шаблоны хранят в памяти до 2000 идентификаторов. Сброс и перезагрузка стирают память и прогресс. Без стабильных ID нельзя надёжно убрать дубли; второй захват того же канала может использовать другие ID. Начните с одного пути захвата. Ракета группирует баланс по платформе и ID пользователя, а при его отсутствии — по отображаемому имени; одноимённые зрители могут делить баланс. Для постоянной игры добавьте сохранение состояния и обработку повторов, прежде чем полагаться на сохранность платных наград после перезапуска.

Награды без собственной игры

В разделе Event Flow, используйте Сравнить свойство с donoValue, больше или равно, и порог в USD, затем подключите звук, анимацию или управление OBS. Сравнение учитывает корректное значение источника и при необходимости использует существующий пересчёт валют.

Для конкретного подарка TikTok сравните meta.giftId или meta.giftName, и ограничьте поток событиями подарков TikTok. Числовые сравнения поля hasDonation также приводятся к USD; это не сравнение сырых монет. Для правил в монетах используйте нативные метаданные или свой код.

Порог для каждого сообщения отличается от накопленного баланса или счётчика серии. Не считайте, что порог Event Flow автоматически повторяет накопление и удаление дублей из шаблона. Используйте узлы состояния , когда потоку нужно состояние, или оставьте эту логику в игре.

Проверьте до подключения платного действия

  1. Нажмите кнопки примеров. Серия 1 → 2 → 3 должна добавить стоимость трёх подарков; явный ноль не должен добавлять USD; неизвестная цена не должна давать точное число монет.
  2. Подключите настоящий источник и изучите полученные данные. Проверьте название/ID подарка, сумму/единицу, количество и ожидаемое событие. Пример проверяет правило, а не живой захват платформы.
  3. Проверьте в сцене OBS повторы событий, переподключение и перезагрузку. Не отключайте и не обновляйте источник «Браузер», если нужно сохранить текущую игру в памяти.

Для игры без присмотра или AFK должны постоянно работать SSN, захват источника и страница игры. Сон компьютера, истёкший вход или разрыв связи прерывают действия; шаблоны не восстанавливают пропущенные события и не обрабатывают возвраты. Автоматические реакции не разрешают монетизацию трансляции без присмотра: проверьте текущие правила LIVE и монетизации для вашего формата.

Если ничего не приходит, проверьте dock SSN, затем сеанс/пароль и транспорт. Если чат приходит, а подарок не подходит, проверьте данные и фильтры пожертвований/событий. Доступность подписок и новых подписчиков зависит от источника; см. справочник событий. Подробнее о подключении: собственные оверлеи.