Vroshik
ENUK
VRoshik, маленький кам'яний дракончик із крилами, сидить на купі золотих монет у темному сховищі

Рушій гейміфікації для Discord-спільнот

Vroshik перетворює щоденну активність на прогрес: рівні й щоденні серії, колекційний кам'яний дракончик, сезонний батлпас, аркадні міні-ігри на віртуальних кредитах і внутрішні лобі матчів — один Discord-бот плюс вебпанель.

186
слеш-команд
38
модулів бота
316
маршрутів вебпанелі
27
перемикачів функцій

Пораховано за вихідним кодом.

Учасники заробляють монети й досвід за те, що приходять, грають і допомагають, — і витрачають їх на компаньйона, косметику та події. Кожне число на екрані — від сервера.

Що він уміє

Дванадцять систем, які живлять одна одну. Ризиковіші з них мають власний перемикач у панелі власника.

  • Рівні й рейтинги

    Досвід за повідомлення, хвилини в голосі, матчі, квести й щоденний дарунок; рейтинги сервера й глобальні.

    level = ⌊√(XP / 100)⌋
  • Щоденний дарунок і серії

    Безкоштовна скриня щодня й більша — за кожну 7-денну серію, з 48-годинною пільгою, тож один пропущений вечір пробачається.

    скриня 7-денної серії
  • Економіка двох валют

    Монети заробляються активністю й витрачаються в грі; кристали — преміальна валюта для косметики й статусу. Перекази мають невеликий податок.

    монети + кристали
  • Компаньйон і лігво

    Збирайте, годуйте й прокачуйте компаньйонів VRoshik; лігво росте разом із найсильнішим.

    44 дизайни · 7 рідкостей
  • Скрині з відкритими шансами

    Кожна скриня показує точні шанси; лічильник гарантії забезпечує епічні й легендарні дропи; тижневі ліміти.

    епічний гарантовано до 15 000
  • Сезонний батлпас

    Безкоштовна й преміальна доріжки із сезонними квестами; досвід пропуску йде від тих самих дій, що й звичайний.

    сезони + квести
  • Аркадні міні-ігри

    Монетка, Crash, Mines і дві гри з каскадними барабанами — на віртуальні монети з опублікованими рівнями виплат.

    лише віртуальні кредити
  • Pick'em і прогнози

    Розклад про-матчів Dota 2 з PandaScore та OpenDota; учасники прогнозують результати на віртуальні монети; кожен матч розраховується рівно один раз.

    ідемпотентний розрахунок
  • Внутрішні лобі матчів

    Черга однією командою, капітани набирають команди, Steam-бот створює справжнє лобі Dota 2; кожне зігране лобі платить монети й досвід.

    30 команд лобі
  • Турніри

    Набір на Battle Cup із лімітом слотів для великих вечорів, а також турніри спільноти на сайті.

    Battle Cup
  • Кімнати й спілкування

    Приватні голосові кімнати «зайди — створи», кімнати в оренду, пари й міжсерверний чат, з'єднаний із сайтом.

    голосові кімнати
  • Косметика й статус

    Фони профілю, титули, кастомні ролі й профільні картки, що рендеряться на сервері; Зала легенд для давніх прихильників.

    картки з сервера

Компаньйон, якого хочеться збирати

VRoshik — маленький кам'яний дракончик, який живе в лігві кожного учасника. Щоденні дарунки, серії та зароблені скрині приносять нові образи — 44 дизайни у 7 рідкостях, кожен із рідкісним сяйливим (shiny) варіантом.

  • Лігво у трьох рівнях — годуйте й прокачуйте компаньйонів; що сильніший найкращий із них, то більше лігво: печера, сховище, тронна зала.
  • Дублікати мають сенс — вони перетворюються на пил для крафту, а достатньо копій зливаються в shiny-варіант.
  • Чесно за задумом — шанси опубліковано, лічильник гарантії забезпечує рідкісні дропи, тижневі ліміти лишають це хобі.
Лігво третього рівня: тронна зала з прапорами, золотом і руничними постаментами
Лігво, рівень 3 — тронна зала
VRoshikБазовий
ІменинникЗвичайний
ГеймерЗвичайний
МорозкоНезвичайний
ШахтарНезвичайний
Магмовий пілотРідкісний
ЧародійРідкісний · Shiny
ГромовержецьРідкісний
ЛавовийЕпічний
Аметистовий магЕпічний
Хранитель АегісаЛегендарний
Золотий ідолЛегендарний
Темний корольЛегендарний
ЗорянийМіфічний

Шанси, висічені в камені

Шанси скринь — не таємниця: ті самі числа, з якими кидає сервер, бачить кожен гравець. Таблицю нижче згенеровано з робочого конфігу.

Шанси скринь за рідкістю
СкриняЗвичайнийНезвичайнийРідкіснийЕпічнийЛегендарнийМіфічнийЦіна · ліміт
Скриня 7-денної серії 64 %28 %8 %——— Безкоштовно · за кожну 7-денну серію; перша — щонайменше рідкісна
Кам'яна скриня 70 %27 %3 %——— 500 монет · 3 / тиждень
Мідна скриня 24 %45 %26 %5 %—— 1 500 монет · 2 / тиждень · Епічний — з 8-го дня
Самоцвітна скриня ——42,2 %45 %12 %0,8 % 3 000 монет · 1 / тиждень · з 8-го дня
Скарбниця ———60 %36 %4 % 10 000 монет · 1 / 28 днів · з 29-го дня
15 000монет, витрачених без епічного, гарантують наступний епічний або кращий дроп
60 000монет, витрачених без легендарного, гарантують легендарний або кращий дроп
0,5 %шанс, що будь-який дроп буде shiny-варіантом

Платні скрині відкриваються лише за монети, зароблені активністю, — ніколи за кристали чи реальні гроші. Версія конфігу: vroshik-econ-v2. Відкрити скриню в демо

Зіграйте просто тут

Чотири фронтенд-модулі з робочого продукту працюють у вашому браузері на локальних рушіях із робочою математикою. Нікуди нічого не надсилається.

VRosh Camp під час фріспинів: табір горить, на полі вайлд VRoshik

VRosh Camp

Каскадні барабани 6 × 5. Чотири Егіди будять дракона: 8-секундне відео перетворення, палаючий табір і фріспини з наростальним множником. Раунди заздалегідь зіграв робочий рушій.

  • Canvas 2D
  • відеоцеремонія
  • звук у такт музиці
  • рівень виплат 94,8 %
Демо — віртуальні кредити, без реальних грошей

Економіка, захищена від зловживань і без виведення в гроші

Гравці ставляться до віртуальних монет як до грошей, тож рушій теж: кожне правило нижче виконується на сервері й покрите тестами.

  • try_charge · tx()

    Атомарний облік

    Кожен рух монет — одне умовне оновлення в транзакції: списання відбувається повністю або не відбувається зовсім, тож паралельні запити не можуть увести баланс у мінус.

  • ключі операцій

    Ідемпотентність за замовчуванням

    Відкриття скрині має ключ операції, матч розраховується один раз, оплата зараховується один раз — повтор ніколи не заплатить двічі.

  • RNG на сервері

    Сервер вирішує, екран анімує

    Результат кидається на сервері ще до анімації — скрині криптографічним генератором, раунди барабанів зі збереженим seed; сцени лише приїжджають до отриманого результату.

  • 429 · Retry-After

    Ліміти частоти

    Паузи й ліміти за хвилину для кожного гравця; автогра чекає на сервер, а не падає з помилкою.

  • без виходу в гроші

    Жодного виведення

    Монети й кристали не можна вивести чи продати. Платні скрині беруть лише монети, зароблені активністю, а вимикач запуску закриває обмін кристалів на монети.

  • 18+ · caps

    Захист покупок

    Пакети кристалів (Telegram Stars чи крипта) можна закрити підтвердженням 18+, місячним лімітом витрат і мінімальним віком акаунта Discord — усе перевіряє сервер.

98 %МонеткаТочно: чесні 50/50 із виплатою ×1.96.
98 %CrashАналітично: P(вибух ≥ m) = 0,98 / m для будь-якої точки виходу.
94,8 %VRosh CampЗвичайні раунди; бонусні — 96,2 %. Виміряно Монте-Карло на робочому рушії, 2 мільйони раундів на режим.

Змагання, які працюють самі

Події — це те, що оживляє спільноту. Vroshik сам веде запис, лобі й результати, тож модератори теж можуть грати.

  • Внутрішні лобі

    Запис, драфт капітанів, заміни й бани — слеш-командами; міст Steam створює лобі Dota 2, а бот платить кожному гравцеві.

  • Battle Cup

    Великі набори з лімітом слотів для турнірних вечорів.

  • Pick'em

    Прогнози на про-матчі за віртуальні монети; результати розраховуються автоматично й рівно один раз.

  • Сезони батлпасу

    Сезонні квести перетворюють щоденну активність на нагороди.

  • Рейтинги

    Рейтинги сервера й глобальні тримають змагання на виду.

Нічний табір в ущелині, охоплений вогнем, — бонусна сцена VRosh Camp
Камінь
Бронза
Золото
Лава

Статус, який видно: давні прихильники отримують статую в Залі легенд — камінь, бронза, золото й нарешті лава.

Кожна функція має вимикач

У панелі власника 27 перемикачів функцій — від цілих модулів до окремих ризикованих опцій. Бот і сайт читають ті самі перемикачі наживо, тож до гравців ніщо не потрапляє без «так» власника.

  • 12 ролей, одне джерело правди — ранги зіставлено з можливостями в одному модулі, яким користуються і бот, і сайт.
  • Один журнал дій — дії персоналу з Discord і з вебу потрапляють в один журнал.
  • Безпечна відмова — якщо перемикач не прочитався, діє типове значення — для всього ризикованого це «вимкнено».
Перемикачі функційтипові значення · перегляд
  • Модуль міні-ігорУвімк.
  • Pick'em і прогнозиУвімк.
  • Ядро компаньйона й лігвоВимк.
  • Скрині компаньйона (лише зароблені монети)Вимк.
  • VRosh Camp: запускВимк.
  • VRosh Camp: дракон-вайлд у фріспинахВимк.
  • Міжсерверний глобальний чатВимк.
  • Оренда кімнат на сайтіУвімк.
  • Оплата через Telegram StarsВимк.
  • Перевірка 18+ і місячний ліміт витратВимк.
  • Вимикач запуску: закрити обмін кристалів на монетиВимк.
  • Дозволити ролям сервера керувати економікоюВимк.

Архітектура

Три сервіси навколо однієї бази даних. Бот і вебпанель імпортують ту саму економіку, шанси й математику ігор, тож правило змінюється рівно в одному місці; міст лобі спілкується з вебпанеллю через API з авторизацією.

28тестових наборів: рушії, гроші, права, оплати, сторінки
8наборів гоночних тестів, що б'ють паралельними запитами по всіх грошових шляхах
160+таблиць бази за одним двомовним шаром даних (SQLite / Postgres)
Seedтести рушіїв фіксують виплати за seed, тож візуальна правка ніколи не зрушить математику

Технології

Бекенд

  • Python 3
  • discord.py 2
  • Flask 3
  • Jinja2
  • gunicorn
  • aiosqlite

Дані

  • SQLite · WAL
  • діалект PostgreSQL
  • версійований JSON-конфіг

Фронтенд

  • Vanilla JS · ES-модулі
  • Canvas 2D
  • WebGL 1
  • Web Audio API
  • CSS-змінні

Медіа

  • картки через Pillow
  • процедурна 3D-монета
  • аудіоспрайти · синхронізація з бітом

Інтеграції

  • Discord API · OAuth
  • Steam · node-dota2
  • Telegram Bot API · Stars
  • Crypto Pay
  • PandaScore
  • OpenDota
  • Twitch

Інфраструктура й якість

  • Linux · systemd
  • Caddy
  • Cloudflare
  • офсайт-бекапи
  • юніт- і гоночні тести
  • калібрування Монте-Карло

179 команд в 11 модулях

Згенеровано з вихідного коду бота: кожна слеш-команда з параметрами й тим, хто може її використати. 70 — для всіх учасників, 21 — для модераторів, 88 — для адміністраторів.

Кілька команд
КомандаЩо робитьХто
/profileКартка профілю: рівень, статистика й колекція
userучасник
Усі
/balanceПоказати баланс монет
userучасник
Усі
/dailyОтримати щоденні монети (раз на 24 год)Усі
/topГлобальні рейтинги гравців
categoryвибір
Усі
/arcade crashМножник росте — забери виграш до обвалу
amountчисло
Усі
/close pickВибір капітана: взяти гравця в драфт за номером
numberчисло
Усі
/payПереказати монети іншому гравцеві
userучасникamountчисло
Усі

Повний довідник команд

Заглушка фото автора: емблема Vroshik

Створив Олег Макух

Продукт, бекенд, фронтенд і арт-дирекція — від і до

Я спроєктував економіку й прогресію, написав бота й вебпанель, зібрав ігрові фронтенди реального часу та міст лобі Steam і підтримую все це в продакшні. Vroshik виріс усередині живої ігрової спільноти; ця сторінка показує його як самостійний продукт.