Задняя сторона VimeWorld
680 subscribers
26 photos
5 videos
12 links
Какие-то ваймовские инсайды от разрабов для разрабов.
Канал с новостями: @vimeworldcom
Download Telegram
В API из метода /online/staff была убрана текущая игра модератора, а также в методах session у модераторов будет показываться только статус онлайн, без текущей игры.
👍2
Немного забыл про этот канал, давно ничего не постилось. Некоторые могли сегодня заметить ошибки с авторизацией, это был момент перехода на новое хранилище для кодов двухэтапной аутентификации, который из-за невнимательности растянулся с 3-х секунд до 10 минут.
Это неплохой бонус к безопасности ваших аккаунтов, который был необходим после того как стало известно об утечке кодов двухэтапной аутентификации в 2018 году. Если вы не меняли двухэтапку с того времени, то самое время ее обновить.

Скоро в нашей группе вк мы выложим пост про возможные способы взлома аккаунтов, что мы делаем для предотвращения этого и как вам самим не стать жертвой взлома. Эти же способы одинаково работают на любых сайтах или в любых приложениях в интернете. Ну а пока что можете сходить в магазин за хеллоуинскими масками.
Media is too big
VIEW IN TELEGRAM
Повторно показываем вам видосик с одной из наших будущих карт.
На клиенте было значительно оптимизировано потребление памяти. В итоге FPS увеличился, а частота и количество фризов уменьшилось.
Готовится наш теперь ежегодный ивент на день рождения - Pixel Battle, можно начинать придумывать арты и собирать людей. https://vime.one/pb

В этот раз вместо шерсти для цветных блоков будет использоваться сухой бетон, он ярче и красивее.
Почему бы не рассказать о том какие у нас есть самопальные внутренние сервисы и для чего они служат:
- Core (Java) - наш центральный сервис на MiniGames, который отвечает за загрузку всей информации в игре, за лс, за баны, муты, репорты, очереди, отслеживание запущенных игр, игроков онлайн, стримов, гильдий, друзей, пати и другие вещи в онлайне.
- Api (Java) - логично, отвечает за api.vimeworld.ru.
- SkinService (Java) - генерирует всевозможные аватарки из скинов игроков skin.vimeworld.ru.
- SessionServer (Go) - отвечает за авторизацию в лаунчере и в игре sessionserver.vimeworld.ru.
- VimeCDN (Java) - хранит и отдает все файлы для лаунчера (клиент игры, обновления лаунчера, наш вариант Java с античитом) cdn.vimeworld.ru.
- golish (Go) - сокращатель ссылок для vime.one.
- BungeeBalancer (Go, был на Java) - помогает балансировать нагрузку между BungeeCord, при подключении к серверу он говорит клиенту к какому именно BungeeCord подключаться, чтобы на всех был одинаковый онлайн.
- bwp (Go) - позволяет выполнять http запросы в фоновом режиме, на нем работает Webhook API, разнообразные запросы к Cloudflare для очистки кеша и прочее.
- Acamar (Java) - собирает текущий онлайн с наших серверов для вывода на сайте и в лаунчере.
- throttler (Go) - занимается ограничением на количество авторизаций, восстановление пароля, и для других действий.
- go2fa (Go) - отвечает за двухэтапную аутентификацию, она вынесена в отдельный сервис для большей безопасности.
- uatu (Go) - собирает статистику по нашим сервисам, потом по ней строятся разные графики.
- vk-group-graphs (Go) - собирает статистику сообщений группы (технической поддержки).
- matches-db (Go) - хранилище для истории матчей.
- go-baas (Go) - распределенный сервис для проверки и генерации паролей bcrypt.
- map-config-parser (Go) - собирает информацию обо всех картах на MiniGames и предоставляет эту информацию для API, фильтров игр, приватных игр.
Завтра на Pixel Battle уже нельзя будет перекрашивать точки в такой же цвет, это поможет держаться в топе создателям артов.
Смешная ситуация сегодня утром была, кто-то пытался сделать DDoS атаку на Pixel Battle, но не учел что на сайте у нас нет ничего, кроме маленькой html странички.
Благодаря Pixel Battle, в Texteria была найден баг - если элемент в мире был вне зоны видимости, то он не удалялся после окончания времени жизни. Удаление происходило только когда он снова попадал в зону видимости. На визуал это никак не влияло, но когда число элементов доходило до десятков тысяч, то фпс уже начинал проседать.
Элементы текстерии в мире это в основном голограммы с именем тега на Pixel Battle.
Карта горячих точек на поле Pixel Battle за первый день
Интересно ли вам будет узнать подробности реализации Pixel Battle? Как работает сайт и как во всех лобби игра работает одновременно?
Pixel Battle разделен на 3 части:
1. Плагин на лобби
2. Расширение для Core (центрального сервера)
3. Отображение на сайте

Плагин в лобби при запуске загружает из Core текущее состояние поля для покраски мира и для каждого подключившегося игрока грузит его статистику. Топ также загружается раз в 20 секунд.
Как только игрок закрашивает любой пиксель - таймер задержки и отправляется событие на Core о закраске пикселя. На Core еще раз проверяется таймер задержки для синхронизации и по всем подключенным лобби рассылает событие изменения цвета и добавляет к нему активный тег игрока. Внутри каждого лобби есть очередь изменений, куда записываются все изменения поля за последний тик (события приходят асинхронно) и затем каждый тик все эти события применяются на поле с голограммой тега. Весь этот процесс настолько быстрый, что кажется что изменение произошло сразу в лобби.

Хранение состояния и статистики в Core организовано следующим образом:
- Информация об игроках (тег, количество закрасок, время следующей закраски) хранится в памяти и раз в 10 минут сохраняется на диск. Никаких хитростей тут нет.
- Информация о поле хранится точно так же в памяти и раз в 10 минут сохраняется на диск. Для каждого пикселя хранится цвет, поставивший игрок и тег, под которым он его поставил. Теги для генерации топа в памяти представлены такой структорой: https://paste.xtrafrancyz.net/uXeBcMi.java. Так как топ по тегам должен генерироваться часто и это затратная операция, то сгенерированный топ кешируется на 20 секунд. Все счетчики тегов и пикселей обновляются при обработке события установки пикселя https://paste.xtrafrancyz.net/PRNgvPV.java.
Вся эта информация в памяти занимает всего несколько мегабайт, поэтому не нужно придумывать никаких сложных систем. На диск записывается в кастомном бинарном формате со сжатием zlib.

Сайт из себя представляет обычную html страничку, meta.json файл с топом и ссылкой на картинку с текущим состоянием поля и тысячи картинок с состоянием поля каждые 15 секунд. Каждые 15 секунд в фоновом режиме (cron) генерируется новая картинка и создается файл meta.json. Скрипт в html страничке просто напросто каждые 30 секунд скачивает meta.json и обновляет картинку на экране.

Генерация картинки происходит через внутреннее API на Core и весь этот процесс очень прост:
1. Создается картинка 256х256
2. Проходимся циклом по x и y, где для каждого пикселя:
3. Берем из поля цвет (это мета цемента от 0 до 15) и сопоставляем его с заранее заготовленными RGB цветами
4. Сохраняем картинку в png и отправляем
При создании начального рисунка на поле мы наоборот превращаем RGB цвет в картинке в meta цемента и сохраняем.
👍2
Добавлено ограничение на количество "диалогов" лс для предотвращения флуда.
В вебхук guild_disband добавлено имя, тег и уровень гильдии.
За все время существования VimeWorld:
- заработано 460,255,540,748 коинов (не учитывая донат)
- заработано 54,822,736,928 опыта
- выбито 43,300,503,044 коинов из сокровищниц
- куплено 3,811,672 мистических сундука на 63,387,036,000 коинов
- потрачено 119,032,355,677 коинов на персонализацию
- сделано 6,216,098 реконнектов на BW/CP
- сыграно 39,399,034 игр в SW
- сыграно 14,901,926 игр на BW
- выполнено 18,612,004 ежедневных заданий
- собрано 81,499,704 золота на Murder Mustery
- сделано 976,963 банов
- активирован 161,701 промокод
Забываю постить про изменения, ну ничего страшного, ведь правда?
- В Texteria анимация вне зоны видимости не будет ломать свои тайминги, а будет сохранять состояние и проигрываться дальше.
- Добавлена новая проверка против ускорения времени системы
- Увеличен размер буфера Stencil с 1 до 8 битов (видеокартам так проще)
- Исправлена утечка 16мб оперативной памяти
- В API теперь добавляется заголовок CORS при ошибочных запросах
- Для ресурсов Texteria на клиенте было добавлено новое хранилище, которое само подчищает старые и неиспользуемые ресурсы
- На ClashPoint нельзя ломать точку ресурсов, пока находишься внутри нее
👍1
Также с завтрашнего дня на Prison будет включен еще один экспериментальный уровень защиты от спидхака.
Осталось 10 минут