tgindex
данянул <3

данянул <3

Статистика

Блог (щитпостинг) разработчика Null's Brawl и других проектов. Мои подписчики лучшие. Основной канал по NB: @nulls_ru

Последний пост
11 июл.
Последнее чтение
10:16
Постов за неделю
0
Всего постов
20
Тип
открытый
Язык
русский
Категория
Технологии
В каталоге с
13 авг.
Подписчики
9 285
−11 за 3 дн.
Сутки
−8
−0,09%
Неделя
 
Месяц
 
Просмотров на пост
24,2 тыс
20 постов
Вовлечённость
260,2%
к подписчикам
Постов в день
0,0
всего 20
Упоминаний
1
каналов
Охват размещения
оценка
1/24сутки в ленте
1/48двое суток
1/72трое суток

Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.

Посты

  • 11 июл.7 67027443

    В Brawl Stars опять насрано. Как же так? Но начнем издалека. В этой игре есть такая сущность, как трейт (trait), которая описывает те или иные модификаторы поведения какого-либо объекта. Каждый игровой объект (а их всего 4 класса: AoE, characters, items и projectiles) имеет список своих трейтов. Впервые в игре они появились в мае 2025 для ивента с васаби, и именно с их помощью были сделаны особые способности персонажей. С тех пор их продолжают активно использовать, в том числе с их помощью работают некоторые пассивки, баффи и прочие механики механики. И даже новые нано-силы... Каждый трейт описывается объектом TraitData, и все трейты описаны в таблице traits.csv. На данный момент они не могут создаваться динамически. У каждого трейта есть свой тип (enum TraitType), а также произвольные значения. Интерпретация этих значений, а также само по себе поведение трейта, как раз таки определяются его типом. В коде логики боев это сделано примерно так: public void handleTraitsOnCauseDamage(...) { TraitData trait = this.findTraitByType(TraitType.SpawnCharacterOnGetHurt); if (trait != null) { /* Handle required behavior */ } } Вы можете спросить, а что, это сильно плохо? Вообще, нет, плохо здесь кое-что другое🐱 Плохо здесь то, что разработчиков иногда настигает невероятная деменция и они добавляют новые TraitType для того, что спокойно можно было описать старыми. Окей, у нас есть например вот такие: • OverrideMaxSpawns и AddMaxSpawns • OverrideNumSpawns и AddNumSpawns • OverrideBasicAttackCastingRange и AddCastingRangeNormalAttack • OverrideUltiCastingRange и AddCastingRangeSuper И это еще можно понять. А вот например "OverrideAreaEffectStatusEffectEnemy" и "OverrideEnemyStatusEffectToAreaEffect" чем отличаются? Если вам кажется, что абсолютно ничем, то так оно и есть! А код обработки этого превращается в что-то такое: public StatusEffectData getEnemyStatusEffect(...) { TraitData trait = findTraitByType(TraitType.OverrideAreaEffectStatusEffectEnemy); if (trait != null) { return trait.statusEffect; } TraitData trait2 = findTraitByType(TraitType.OverrideEnemyStatusEffectToAreaEffect); if (trait2 != null) { return trait2.statusEffect; } /* ... */ } Понятное дело, что этот код я могу переписать, добавить findTraitByAnyOfTypes(...) или что-то такое. Но какого черта вообще? Сейчас в игре 394 различных типа трейтов. Из них спокойно можно было бы выкинуть почти половину, немного подправить таблицу traits.csv и стало бы только лучше! Ах да, и при всем этом разнообразии (и постоянных повторениях одинакового кода) у них же еще есть "классические" способности, которые определялись с помощью CardData (cards.csv). Там тоже хватает подобного безобразия, например "ulti_leach_health" и "heal_ulti". И еще забавный прикол, раз уж пост решил написать: в скомпилированном нативном коде TraitType представлен в виде int32. При чтении traits.csv игра берет значение клетки Type (это строка) и преобразует в этот численный ID, и оказывается есть небольшой прикол: есть такие TraitType, у которых аж два названия. Это: • OverrideProjectileSupe и OverrideProjectileSuper (ID = 306) • AddProjectileDmgPercentageOverDistance и AddProjectileDmgPercentageEndDistance (ID = 313) По сути, это алиасы. Почему? Наверное, разработчик логики не смог договориться с человеком, который .csv таблицы заполняет🙂 Уж лучше бы они те одинаковые трейты с "enemy status effect" сделали алиасами, блинб(

  • 5 июл.10 тыс50

    видео или голосовое, без подписи

  • 5 июл.9 83014851

    claude fix our insfrastructure make no mistakes Если вам кажется, что серверам Brawl Stars после обновления стало плохо — нет, вам не кажется😑 Это заметно даже по графикам мониторинга нашего Null’s Proxy. Многие из них теперь выглядят довольно аномально. Во время большого онлайна трафик к серверам Supercell скачет туда-сюда, а количество реконнектов на каждого игрока выросло почти в два раза по сравнению с тем, что было до обновления. На первом графике отражен текущий трафик (MiB/s), а на втором новые коннекты в секунду (conns/s). При этом общее количество игроков онлайн практически не изменилось, а в некоторые дни (например, вчера) оно было даже немногим меньше, чем до обновления. Вы можете задать закономерный вопрос: а нормально ли оценивать состояние серверов Supercell исходя из этой статистики? И да, и нет. Я делаю выводы о том, что проблема на их стороне, в основном исходя из большого количества жалоб даже от тех, кто не использует Null’s Proxy...

  • 25 июн.11,3 тыс35743

    С понедельника программы вконтакте не будет ее полностью удаляют! Нам сидеть вконтакте осталось совсем чуть-чуть!

  • 21 мая18,3 тыс30142

    Помните о Mo.co? Новая игра Supercell, которая вышла в прошлом году. Они ее очень долго не обновляли, однако на днях произошел невероятный завоз контента, а именно: 1. Техперерыв на 24 часа. Я не шучу! Очевидно, ни один деплой не может длиться так долго и его растянули искусственно — но зачем? 2. Я зашел в игру и сразу же заметил, что моего собственного персонажа заменили на инвалида с темной кожей и кривым лицом. Какого черта вообще? У них совсем крыша на инклюзивности поехала или мне просто не повезло? 3. Раньше мыльным был только геймплей, а теперь еще и половина интерфейса. 4. Чат в игре лагает и дергается так, как будто бы сделан на Flutter или в WebView. Хотя внутрь я не смотрел еще и надеюсь, что это не так. 5. Каждый раз когда хочется свернуть приложение на iOS, оно пишет мне про дисконнект из-за неактивности. Даже если я был просто в главном меню... И ладно бы мелкие баги, но со второго пункта меня вообще разнесло. Даже в Squad Busters разработчики себе такого не позволяли!

  • 10 мая19,3 тыс17577

    Помните про опросы по картам? Давненько их не было, да... в общем, вот, думаю вы разберетесь: dnull.xyz/polls.html (механизм немножко поменялся, но суть всё та же)

  • 24 апр.24,7 тыс543131

    Интересные факты о будущем Brawl Stars: 1. Кодовое имя одного из персонажей следующего (v68) обновления: KatanaKid. Его логика частично присутствует уже в текущей версии. 2. Кажется разработчики воодушевились нашим режимом на 50 игроков и добавили в игру скрытый режим "LargeShowdown". При этом глобальный лимит на количество команд повышен до 31 (было: 15), а на количество игроков аж до 63 (было: 15), но лимиты на размер карты (63x63) не увеличивались. Если хотите, могу еще что-нибудь рассказать... может быть о новой физике мяча в v67?

  • 12 февр.87 тыс59065

    блять а прикиньте они накрутку устраивают с аккаунтов тех, кто скачал их клиент... если честно это даже крипово...

  • 12 февр.32,6 тыс45659

    ладно знаете в чем еще ебанина? они еще и ПОДПИСЧИКОВ накручивают пидарасы а что если сделать платную подписку на канал...

  • 12 февр.26,5 тыс50,6 тыс176

    кстати если че напоминаю если вдруг вы скачали это приложение Telega то удалите немедленно!! их сервера получают ключи для расшифровки всех ваших сообщений (если очень упрощенно)

  • 12 февр.24 тыс2 43840

    ладно давайте смотрет сколько наберется

  • 12 февр.23,1 тыс35,1 тыс67

    КУХАХВХАЫХВАХВАЗЫВХА блять представьте ебальнички людей которые такие "нам нужен БЮДЖЕТ на накрутку дизлацков"

  • 12 февр.22,3 тыс61,3 тыс199

    Блокировка накрутка Роскомнадзор. Обход VPN блокировка РКН — накрутка накрутка, VPN Дуров Телега. Обход Дуров обход Дуров VPN, Роскомнадзор РКН. Дуров обход, Роскомнадзор ВПН Роскомнадзор Телеграм. Vpn Телеграм прокси Дуров. Телеграм Телега накрутка обход ВПН, Телега РКН РКН Роскомнадзор Роскомнадзор. Накрутка VPN накрутка Роскомнадзор, Телеграм ВПН блокировка блокировка блокировка. Прокси ВПН. Телега Даль. Даль Даль Телега VK Group.

  • 10 февр.18,1 тыс260194

    Как вы там, замедлили вам Telegram? Надеюсь, здесь никому не надо объяснять, как обходить подобные блокировки. Однако бывает так, что по какой-то причине делать это невозможно — и тогда приходится рассматривать альтернативные решения. Но не спешите переходить в СКАМ, ведь есть решения получше! И одним из таких решений я периодически пользовался в течение последних трех месяцев, встречайте — Element и протокол Matrix. У этого протокола есть несколько заметных преимуществ, которые могут быть актуальны при всей сложившейся ситуации: 1. Децентрализованность: в Matrix нет единого сервера, который можно заблокировать. Вы создаете аккаунт на любом сервере по вашему выбору, и затем можете общаться с людьми с других серверов в одной общей сети. Amazing! 2. Адекватное E2E-шифрование: в отличие от Telegram, здесь им можно пользоваться, и в ЛС, и в групповых чатах. И в отличие от WhatsApp, у вас есть больше контроля над ключами и возможность использовать несколько устройств. 3. Как мне показалось, спецификация протокола выглядит довольно хорошо, в неё даже приятно погружаться и вникать. Это вам не Telegram Bots API какой-нибудь, здесь все продумано! Также существует несколько разных клиентов на выбор: Element, Nheko, FluffyChat, много их разных и всяких. Фактически "дефолтным" клиентом сейчас стал Element, поскольку он наиболее feature-complete с протоколом Matrix, а также полностью поддерживает звонки. Тем не менее, к сожалению, он не идеален: не самый лучший интерфейс (но в целом выглядит приемлемо) и нет некоторых привычных функций (например, обрезания картинок при отправке). Так, и что дальше? В целом, просто хотел рассказать об этом интересном мессенджере (точнее даже о протоколе), чтобы вы знали о его существовании. Лично я сейчас не пользуюсь им, как основным. И вам не очень советую переходить в него полностью. Но время от времени он оказывается довольно полезен, в нем даже сидят некоторые участники моего чата. А еще я там созваниваюсь с родственниками без VPN😑 Если вы хотите попробовать, учтите, что стандартный сервер (matrix.org) уже давно заблокирован. Но помните про децентрализацию? Вы можете поднять свой сервер, либо воспользоваться моим (dnull.xyz), чтобы иметь возможность общаться (и даже созваниваться) без ограничений. Вот так вот. А так, пиздец, до чего же мы докатились...

  • 21 янв.21 тыс52791

    А представьте, что игроки Brawl Stars могли бы создавать не только свои карты, но и свои собственные режимы? У меня была интересная идея на этот счет: интегрировать систему кастомных скриптов в игру. Для этих скриптов было бы какое-то документированное API…

  • 31 дек.25 тыс1 47215

    У меня новый год наступил еще 4 часа назад, капец... успел не только напиться, но и протрезветь, так сказать. Из забавного: в 2025 году я провел в России чуть больше 4 месяцев. Хорошо это или плохо? Сказать сложно😑 Итоги года есть в большом канале, добавить особо, кажется, и нечего( А так... поздравляю с новым годом, что ли? Тех, у кого он наступил, и тех, у кого только наступает. Желаю вам как обычно — чтоб было веселее и лучше в новом году. Чтобы точно скучно не было, вот вам елка из Тайланда (да, там нет снега и вообще она странная)

  • 25 дек.23 тыс39145

    Внимание: сейчас я потратил почти 3 часа чтобы понять, что вторая пассивка Кольта не увеличивает скорость его снарядов, но только если у Кольта есть скин. Я в шоке... всё это время искал проблему у себя, а всё оказалось как обычно!

  • 8 нояб.31,1 тыс1 91767

    Supercell как обычно: попробуйте создать карту в режиме Награда за поимку в редакторе карт😑 (спойлер: игра просто вылетит) Просто смотрите: 1. При входе в редактор карт, игра пытается заспавнить синюю звезду в центре карты 2. Тем самым, она создает новую сущность класса Item 3. Начиная с версии 64.226, при создании сущности этого класса пытается проверить способность AddBulletSizePercent у текущего игрового персонажа (бравлера) 4. В редакторе карт не просто нет "текущего персонажа", в нём даже никакого состояния боя нет — и игра успешно падает с попытках разыменовать нулевой указатель, полученный от функции BattleMode.getInstance() Выводы? Их редактор карт это просто идеальный пример, как очень хорошую идею можно реализовать очень плохо. Я в шоке. Опять придется фиксить это за них.

  • 17 окт. 2025 г.26,9 тыс275118

    Сегодня в Clash Royale случился МЕМ ДНЯ: какой-то человек попробовал повыпускать карты на поле за 0 эликсира и у него... получилось! Я серьезно, вот видео: https://x.com/sk__555/status/1979011746590339076. Я разобрался почему возникла такая ошибка и теперь готов рассказать и вам. tl;dr: в последней версии игры ребята начали в запросе клиента передавать стоимость карты, а сервер использовать это значение без должной валидации. Начнем с того, что бои в Clash Royale полностью эмулируются на стороне сервера. В начале боя и на сервере, и на клиентах создается одинаковый экземпляр LogicGameMode. Любое действие в бою — это та или иная команда (LogicCommand). Сначала она отправляется на сервер, который пытается ее выполнить в рамках локального LogicGameMode, после чего уже сервер рассылает её всем клиентам, которые выполнят команду в тот же самый момент времени (тик). Таким образом между всеми клиентами и сервером достигается одинаковое состояние в каждый момент времени. Можно ли выполнить так любую команду? Едва ли. Зачастую внутри каждой команды код выглядит следующим образом: /* LogicDoSpellCommand.execute */ int execute(LogicGameMode mode) { /* ... */ LogicSummoner summoner = mode.getSummoner(this.playerId); LogicSpell spell = summoner.getSpell(this.spellIndex); int cost = spell.getElixirCost(); if (summoner.getElixirPoints() < cost) { /* Возвращаем ошибку и ничего не делаем больше */ return -13; } /* ... */ summoner.useElixir(cost); summoner.castSpell(spell, this.x, this.y); return 0; } LogicSummoner здесь представляет короля (игрока), а LogicSpell — конкретную карту в его колоде. Это каноничные названия, так уж сложилось. Код выше — упрощенный пример. Каждая команда при её выполнении проверяет свою корректность, и выполняется только в том случае, если игрок действительно мог сделать соответствующее действие. Даже если каким-то образом убедить свой локальный клиент в том, что выпустить "Рыцаря за 0 эликсира" — можно, то остальные клиенты и сервер такую команду не выполнят. А затем, после сверки чексуммы, сервер еще и заставит такого игрока-"читера" загрузить настоящиее состояние. Визуальный "Рыцарь за 0 эликсира" пропадет спустя полсекунды. Чтож, это была предыстория, рассказывающая, почему читерить в боях в Clash Royale нельзя. Но у кого-то получилось, автор, ты что, нас обманываешь??7🙂 Нет-нет, что вы... вы еще не забыли пример кода, который я скинул выше? Это был реальный отрывок кода, только вот в последней версии его решили отрефакторить и переписать. Раньше LogicDoSpellCommand содержала в себе координаты (x, y), порядковый номер карты (spellIndex) и всё такое. А вот начиная с последней версии (12.169) ситуация поменялась: вместо старого-доброго spellIndex пришел новый 32-битный Int32, в который запаковали сразу несколько полей: 22 lower bits: unknown purpose 6 bits: spell index (от 0 до 31) 4 bits: elixir cost (от 0 до 15) Давайте назовем этот волшебный Int32 — SpellReference. Хотя доподлинно неизвестно, как эта структура называется на самом деле. И как вы можете догадаться — да, стоимость карты (эликсир) теперь берется из этой структуры. Которая в свою очередь формируется клиентом. Очень умно, блинкласс!👍 Из забавного — они пытаются проверять эту структуру на корректность. То есть сначала они берут, достают spellIndex, по нему получают Spell, из Spell получают SpellReference. Только вот код сверки выглядит примерно так: return ((command.reference ^ spell.reference) & 0x39FF8F) == 0; Да, это какое-то безумие. Комментарии излишни.

  • 7 окт. 2025 г.21,4 тыс16611

    видео или голосовое, без подписи