0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Автоматизация рутины в DotA 2 или читы

Автоматизация рутины в DotA 2 или читы?

Привет, в этой статье будут рассматриваться легальные способы получить преимущество перед противником с помощью таких простых средств, как NodeJS, Electron и React, при этом обходя бан стороной. На эксперименты меня вдохновила другая статья Визуализация времени возрождения Рошана и желание автоматизировать часть рутины. Стоит заметить что сейчас будут рассматриваться инструменты не модифицирующие каким либо нечестным способом игру — все API открыты, данные получены честным путём, никакого вмешательства в процесс игры не происходит. Под катом будет несколько картинок и немного кода.

Пример использования в демо режиме игры

Весь исходный код расположен на Github, с ним можно ознакомится, лайкнуть, форкнуть, предложить изменения. Писал его левой пяткой правой ноги, прямо во время игры, поэтому просьба не ругаться сильно за стилистику.

Если честно, то я ничего нового не придумал, уже всё до меня придумали и даже есть готовые приложения, которые примерно тоже самое умеют.

Дальнейшими знаниями можно пользоваться, как во имя добра — делать инструменты для студий аналитики, киберспорта, стримов Twitch, тренировок команд и т.д., так и во имя зла — написания читов, выбор за вами.

Disclaimer: Автор не несёт ответственности за применение вами знаний полученных в данной статье или ущерб в результате их использования. Вся информация здесь изложена только в познавательных целях. Особенно для компаний разрабатывающих MOBA, чтобы помочь им бороться с читерами. И, естественно, автор статьи ботовод, читер и всегда им был.

В итоге созданные инструменты умеют:

Отслеживать игровое время

Воспроизводить звуки до начала важных событий

Отображать текущие показатели золота (GPM)

Отображать статистику по герою из открытого источника OpenDota.com

Отслеживать время возрождения рошана

Собирать данные о любимых героях противника

Какие ещё можно сделать улучшения:

Отображать историю средних показателей противника

Добавить ретроспективный анализ игры по её окончанию

Добавить больше звуковых/визуальных уведомлений

Дать возможность отслеживать «ультимейты»

Добавить больше визуальных данных во время просмотра киберспортивных игр

Добавить подробнейшие руководства прямо во время игры

С чего всё начиналось

У Dota 2 неожиданно есть GSI (Game State Integration), который придумали для интеграции сторонних приложений / оверлеев (наложение картинки поверх игры) и синхронизации этих самых оверлеев с игрой в реальном времени. Это говорит о том, что можно получать состояние игры и дальше что — то с ним делать. Для интеграции с NodeJS есть готовое решение в виде библиотеки. Для работы GSI сервера, в первую очередь, нужно создать файл конфигурации в «Steamsteamappscommondota 2 betagamedotacfg», в этом файле прописываются настройки, например, такие:

Статья в тему:  Что значит слово антидот

После перезапуска игры, подтягиваются новые настройки и запускается сервер GSI, который будет отправлять данные по HTTP на localhost:3001, на котором и поднимается NodeJS сервер:

Собственно, после запускается код слушателя, который как раз и позаимствован из сторонней библиотеки NodeJS

Сервер получения данных об игровом мире готов.

Данные, которые не дают преимущества

Во время рейтингового матча в Dota 2, GSI отдаёт обрезанные данные, из полезного доступно

Прошедшее количество секунд с начала игры

Игровое время в секундах

Пример данных (в игре запущена карта с демо режимом)

Если просматривать реплей или чужую игру, то доступно гораздо больше информации — вся она описана тут. Что-ж, самая важная информация нам уже доступна — GPM, игровое время, Id героя.

После получения информации мы должны с ней что — то поделать, например, отрисовать или предупредить о наступившем моменте в игре.

UI, Оповещения, Electron

Для UI решено было использовать Electron и внутри этого электрона запускать React. Идея заключается в том, чтобы рисовать Electron приложение поверх игры (оверлей). Исходник оверлея можно найти тут, немного задержимся на нём — есть пару особенностей.

Для начала нужно настроить окно, в котором будет всё отображаться:

Сначала у меня не получалось поверх доты что — то вывести, пока не наткнулся на настройку в файле machine_convars.vcfg (Dota 2) под названием «dota_mouse_window_lock», которую нужно выставить в «0», а в самой игре (либо в тех же файлах конфигурации) настроить режим отображения в окне без рамки.

UI написан с использованием React, поэтому решено его было загружать прямо с dev сервера разработки (да, я ленивый):

Если dev сервер не успел загрузиться, то мы попробуем ещё разок через 3 секунды, вот для этого и нужен setTimeout.

Всё, с overlay закончили, теперь UI часть.

Styled-Components, Typescript, Хуки, — стильно, модно, молодёжно

В UI был выбран мой любимый стек: TS, CRA (Styled только для одного/двух классов использовался — рисовать то особо нечего). После того, как GSI Dota2 отправил данные на express сервер, их нужно передать на фронт. Пишется простая GET ручка для отдачи данных. Затем на фронте пишется хук, который раз в секунду запрашивает эти данные и дальше они попадают сразу во все остальные хуки. То есть в приложении каждую секунду запускаются все хуки — это важный факт, ведь иногда понадобится хранить время запуска хука, чтобы случайно его не запустить несколько раз (если этого не делать, то у вас произойдёт в лучшем случае два оповещения подряд, в худшем случае взрыв из оповещений). Логика получения данных:

Статья в тему:  Vikings war of clans плитки что это

Теперь, когда есть все данные на фронте, можно написать хук для звуковых оповещений, что пора бы пойти (за 30 секунд до начала оповещает) забрать руны богатства, появляющиеся на каждой минуте кратной пяти (5, 10, 15, 20 минута):

Запись о последнем воспроизведении (setLastIntervalPlay) нужна чтобы не повторить оповещение случайно дважды.

И вот уже в игре одно преимущество, может быть оно несущественное, но как мне кажется неплохо управляет вниманием команды. Что — ж можно пойти дальше и сделать такую же кнопку возрождения рошана, как из прошлой статьи:

Хук useRoshanSpawn для кнопки

С рошаном всё немного запутаннее, чем с рунами — он может возрождаться в интервале от 9 до 12 минут. То есть у него есть состояния:

Точно мёртв (прошло до 9 минут с момента смерти)

Он жив или мёртв (прошло от 9 до 12 минут с момента смерти)

Он точно жив (прошло свыше 12 минут с момента смерти или это начало игры)

Поэтому у таймера есть три визуальных состояния:

Кнопка — для запуска таймера

Таймер тикает и сообщает о том что роша точно мёртв

Таймер тикает и сообщает о том что роша возможно жив, а возможно мёртв

И одно звуковое оповещение: Рошан будет в состоянии Шредингера через 30 секунд (то есть, и жив, и мёртв одновременно — пока не проверишь, не узнаешь). Также есть возможность сбросить таймер, ведь если мы проверили и узнали, что он жив — то таймер больше не нужен, а нужна кнопка о том чтобы сообщить о новой смерти рошана. Из минусов — иногда забываешь запускать таймер, было бы здорово в будущем это тоже автоматизировать.

Обогащаем данные

Ещё есть информация о том, на каком герое мы играем, поэтому пускай клиент запрашивает бенчмарки с сайта OpenDota.com и отображаем их, чтобы было понятно, на сколько мы отстаём от ритма игры. Я взял перцентиль 99%, то есть мне интересно, с какими показателями отыгрывается 1% лучших игр на том или ином герое.

Бенчмарки на героя Abaddon

Вся логика описана в хуке useBenchmark:

Узнаём предпочтения игрока

Было бы здорово получать информацию о том, на каких героях вероятнее всего будет играть противник, чтобы забанить, отобрать, законтрить их у него. Для этого нужно считывать память файл игры: «server_log.txt» и дальше распарсить его регуляркой, найти там ID ваших оппонентов, затем запросить историю игр в OpenDota или Dotabuff. У этого способа есть минусы — если оппоненты сделал свой игровой профиль скрытым в Dota 2, то никакой информации о нём вы не получите. Есть ещё один момент, который я забыл учесть — данные могут быть устаревшими, но в коде это легко исправляется добавлением фильтра по времени.

Статья в тему:  Какая сейчас онлайн игра самая популярная

Attention: код по ссылке может совершить BSoD ваших глаз.

После, будет здорово это тоже вывести, поэтому решено было сделать отдельное React приложение на localhost:3002. Без дизайна выглядит оно совсем по страшному, но это уже был просто спортивный интерес и вообще я им не пользуюсь. В нём есть информация о прошлых десяти играх. Кнопочка «Ban this id», чтобы убирать друзей, с которыми играешь, из этой статистики и ссылка на Dotabuff профиль, если вдруг хочется подробностей.

Это приложение тоже можно было бы красиво оформить в виде Electron оверлея и запускать его на стадии выбора героев, но кажется я слишком много играю в игры и мало уделяю времени действительно полезным вещам 🙂

Что ещё пробовалось:

Пробовался DLL Injection из прошлой статьи и чтение памяти с помощью Rust, но там был большой изъян в том, что все найденные указатели на структуры данных жили до обновления игры, поэтому эта идея была заброшена.

Попытка создать сервис подбора героев на основе ML обучения по выгрузке игр из OpenDota.com или с тех же серверов Valve (провал — хотя мне кажется я просто не сумел правильно приготовить ML часть)

Парсинг Dota 2 реплеев — там не сложно, используется Protobuff и все структуры легко находятся на гитхабе. Вот только что дальше с этим огромным объёмом данных делать?

Вывод: интегрироваться с Dota2 не вызывает труда, можно делать быстрый анализ прямо во время игры, при просмотре киберспортивных игр можно сделать огромное количество красивого оверлея для Twitch стрима, также можно развивать эту тему в сторону ретроспективного анализа из реплеев, что скорее всего будет полезно профессионалам.

Надеюсь вам было интересно почитать про то, как я собрал на коленке читы (на самом деле хороший вопрос — читы это или нет?), да ещё и на JS, если есть орфографические или лексические ошибки, то пишите пожалуйста в ЛС, спасибо за внимание.

Skill build (раскачка)

  1. Если вы любите играть на инициаторах, наводить кипишь на карте, быть первым всегда и везде, вам подойдет данный вариация прокачки скилов.
  2. Если вы любите играть на оффлейнерах, максимально уплотнять своего персонажа и на 15 минуте бегать с более 2500 здоровья вам подойдет данная вариация прокачки скилов.
  3. Если вы любите помогать своему оффлейнеру, доминировать в начале игры, набивать большое количество киллов и ассистов, вам подойдет данная вариация прокачки скилов.
Статья в тему:  Как взломать игру наруто онлайн

Не всегда нужно инициировать хуком

На четвертой минуте, на топе начинается тимфайт. Zai делает ТП и приближается к врагам.

Большинство игроков на Пудже в файте против Сенд Кинга и Войда первым делом бы использовали ульт, от которого они бы легко ушли с помощью своего стана и блинка. Раки бы даже начали обвинять своих тиммейтов за то, что они стояли между Пуджем и СК и мешали кинуть хук. На самом деле, инициировать с помощью хука — плохая затея в данном случае. Скиллы Time Walk Войда и Burrowstrike Сенд Кинга, особенно на ранних уровнях, имеют гораздо меньшую дальность, чем Meat Hook.

Если Пудж сначала кинет хук, а враг уйдет от него с помощью блинка или стана, то Пудж не сможет достать его с помощью Rot, и просто напросто упустит свою жертву.

Что же делает Zai?

Он даже не собирался инициировать хуком в Сенд Кинга, даже когда имел 100% шанс попасть. Да, Сенд Кинг использует Burrowstrike и отходит от Пуджа, но, когда Сенд Кинг начинает убегать и заходит в узкий проход, Zai просто обрекает его на смерть без эскейпа и заканчивает битву с помощью хука. Без стана у Сенд Кинга просто не остается никакой возможность убежать от Пуджа.

И далее этот прием повторяется. Zai спокойно ждет в кустах, пока Сенд Кинг влетает в его союзников с помощью стана. Как только СК использовал Burrowstrike, Zai хукает его к себе и врубает Rot. Без стана у скорпиона нет ни малейшего шанса, особенно учитывая, как эффективно Zai использует автоатаку на ходу.

Союзники:

Хил в тиме всегда полезен. В то время как вы будете обедать очередным врагом омник пополнит вам и здоровье и нанесет урон врагу.

Поставит мины в лесу, а пудж притянит врага на них.

Пока враг в ульте, то урса его убьеи 100%.

Может вас похилить в любое время. И если вы играете в месте по скайпу, то можно провернуть такую махинацию: вы притягиваете к себе вражеского героя, а чен во время хука телепортирует вас на базу и враг тоже прилетит к вам под фонтан, ну а там вы 100% его убьете. У меня был такой случай: играл как то за хускара, счет был примерно 15 к 0 (ну чет подобное), я уже значительно собрался, по сравнению с врагами и тут мне пришла мысль собрать рапиру, как только я ее купил мы в 5-ом пошли пушить мид, а как потом я понял пудж стоял за деревьями, только наношу первый удар по вышки тут меня притягивает пудж и его телепортирует чен под фонтан, там они меня и убили, затем берут рапиру и пропушили мид нам, но игру мы кое как вытащили =). Вывод: одним грамотным действием они смогли отдефать мид и снести его нам.

Статья в тему:  Как посмотреть реплей в доте 2

В этом гайде мы рассмотрим самого популярного героя Dota 2. Pudge – это персонаж ближнего боя, основной характеристикой которого является Сила. Это очень веселый герой, который требует определённого скилла, чтобы быть полезным своей команде.

p, blockquote 1,0,0,0,0 —>

p, blockquote 2,0,0,0,0 —>

Способности Пуджа

p, blockquote 3,0,0,0,0 —>

  1. Meat Hook – это главная причина, из-за которой все пикают Пуджа. Очень хороший скил для ганка, или для сейва союзника. Однако, чтобы научиться правильно использовать эту способность, придётся отыграть немалое количество игр. Помните, что хук притягивает и союзных юнитов тоже: крипы, катапульты. Это значительно усложняет использование данной способности. Крюком вы также можете притягивать руны. Если у вас получится попасть крюком по руне, то потраченная мана вернётся обратно.
  2. Rot – Нажимайте эту способность после того, как противник окажется рядом с вами. Вражеский герой будет замедлен и ему будет наноситься постепенный магический урон. Будьте внимательны: этой способностью вы можете совершить суицид, что может быть полезно в некоторых случаях. При успешном суициде враги не получат за вас золота и опыта.
  3. Flesh Heap – пассивная способность, которая даёт большой прирост силы и определенный процент защиты от магического урона за каждый стак. Количество стаков способности зависит от убитых рядом с вами вражеских героев. Рекомендуем прокачивать эту способность после полной прокачки двух первых способностей. Flesh Heap начинает накапливать стаки с самого начала игры, а все бонусы вы получите только после её прокачки хотя бы на один уровень.
  4. Dismember – Ультимативная способность, которая станит врага на 3 секунды и восстанавливает вам здоровье. Количество восполняемого здоровья зависит от очков силы, поэтому крайне важно принимать активное участие во всех стычках на карте.

Примечание: обездвиживание работает через Black King Bar.

Основной скилл билд

Пудж – это один из тех героев, скилл билд которого не меняется уже многие годы. Выбор скила на первом уровне зависит от ситуации, но в большинстве случаев берётся Rot для замедления и лучшего добивания крипов. Пассивку начинаем качать только после полной прокачки первых двух способностей.

p, blockquote 5,0,0,0,0 —>

p, blockquote 6,0,0,0,0 —>

Таланты

Выбирать таланты на 10 уровне следует по ситуации. Если вы очень сильно отстаёте от остальных по уровню персонажа, то выбирайте +30% к опыту. Во всех остальных случаях выбирайте талант на +35 к урону Rot. На 15 уровне берите +13% к вампиризму от заклинаний.

Статья в тему:  Как прокачать игру танки онлайн

p, blockquote 7,0,0,0,0 —>

На 20 уровне выбирайте +15% к скорости перезарядки способностей. Если вы нуждаетесь в дополнительном золоте, то выбирайте талант на +180 золота в минуту. Выбор последнего тира талантов также зависит от ситуации. Если в вашей команде не хватает дизейблов, то берите +3 секунды к длительности Dismember, а если дизейблов достаточно, то +2 силы за стак Flesh Heap.

p, blockquote 8,0,1,0,0 —>

p, blockquote 9,0,0,0,0 —>

Наши союзники

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

p, blockquote 10,0,0,0,0 —>

  • Трипла с Witch Doctor и Crystal Maiden. Противостоять такой связке будет очень трудно. Стан WD + колба CM + вонь Пуджа = килл любого героя. Только не вздумайте стоять такой триплой в миде.
  • Bloodseeker. Очень хорошая связка ввиду огромного урона по одной цели. Стараемся не забирать у Сикера крипов, так как большую часть золота мы должны получать за килы. Стоим с Сикером до 3-4 уровня – затем начинаем помогать команде.
  • Venomancer. На ранней стадии игры, вы способны убить любого героя начиная с 1 уровня. Сильное замедление от Веника поможет вам попасть хуком по противнику. После хука включаем вонь и добиваем врага.

p, blockquote 11,0,0,0,0 —>

Наши враги

А теперь о персонажах, против которых толстяка лучше не пикать. Самые противные персонажи для нас – это мобильные герои с хорошим уроном в соло таргет и другие танки (Morphling, Weaver, Anti-Mage, Queen of Pain, Phantom Assassin, Slark и другие). Все эти персонажи убивают нас без особых проблем.

p, blockquote 12,0,0,0,0 —>

Крайне не рекомендуется пикать Пуджа против Lifestealer и Clockwerk. Lifestealer (Гуля), за счёт своих способностей на лечение, очень легко убивает персонажей с большим запасом здоровья. А Clockwerk не даст вам ничего сделать благодаря своей первой способности.

p, blockquote 13,0,0,0,0 —>

p, blockquote 14,0,0,0,0 —>

Куда пойти?

Обычно, Pudge идёт на центральную линию, но если у вас в команде попадётся человек, который ни под каким предлогом не захочет отдавать вам мид, то вы можете отправиться и на сложную линию, а к уровню 4 начинать роумить по карте.

p, blockquote 15,0,0,0,0 —>

p, blockquote 16,1,0,0,0 —>

Предметы

Покупать итемы на Пуджа следует исходя из ситуации. Начнём с сапогов.

p, blockquote 17,0,0,0,0 —>

  • Phase Boots (Фэйзы) – даст доп. урон с руки (в начале пригодится), а также поможет догонять соперников и не застревать в крипах при погоне.
  • Arcane Boots (Арканы) – берите, если у вас и вашей команды острая нехватка маны, ибо саппорты могут собирать эти ботинки довольно долго.
  • Tranquil Boots (Транквилы) – повышает реген хп, а также даёт приличный бонус к скорости передвижения, которого у Пуджа маловато.
  • Travel Boots (Трэвэла) – очень хороший выбор, и дорогой. Очень сильно повышает мобильность Пуджа. Вы всегда сможете телепортироваться к своим союзникам, в случае начала тим файта.
Статья в тему:  Как можно заработать играя в онлайн игры

Рассмотрим основные предметы.

p, blockquote 18,0,0,0,0 —>

  • Force Staff (Форс) – дешёвый итем, легко собирается, даёт отличные статы и повышает нашу мобильность. Лучшим вариантом конечно будет Blink Dagger (Блинк).
  • Aether Lens (Линза) – увеличивает дальность полёта хука и ульты. Даст большую прибавку к максимальному запасу маны и её регену.
  • Blade Mail (Обратка) – хороший итем для любого танка. Пока ваши противники будут пытаться вас убить, скорее всего они убьют себя сами.
  • Aghanim’s Scepter (Аганим) – уменьшает перезарядку хука до пары секунд, а также увеличивает его урон.
  • Pipe of Insight (Пайп) – сопротивление от Пайпа стакается с нашей пассивкой.
  • Heart of Tarraque (Тараска) – отличный итем для конца игры. Даёт много силы, хп и реген хп.
  • Rod of Atos (Атос) – стал очень популярным предметом после переработки. Вы привязываете своего врага к месту, так что ваши шансы попасть хуком возрастут многократно.

p, blockquote 19,0,0,0,0 —>

Стартовый закуп и первые минуты игры

На старте рекомендуем покупать Щиток, Ласо и пачку Танго. Этот закуп проверен в большом количестве игр. Можно конечно купить вместо щитка Фласку, но куда лучше будет просто засуицидиться.

p, blockquote 20,0,0,0,0 —>

На первые наши накопления покупаем Транквилы: большая скорость бега и реген хп – что нужно в начале игры. Для регена маны и хп берём Ботл. С этим итемом мы проходим большую часть игры. Затем покупаем ещё одно Ласо.

p, blockquote 21,0,0,0,0 —>

По итогу, наш стартовый закуп будет выглядеть так: Щиток, Ласо, пачка Танго.

p, blockquote 22,0,0,0,0 —>

p, blockquote 23,0,0,0,0 —>

Середина игры

Первым делом начинаем копить деньги на Блинк. Благодаря ему вы и мобильность повысите, и сможете быстро подобраться к врагу вплотную. Если возникают проблемы с маной, покупаем Kaya. Помимо регена маны, вы ещё и урон от способностей повысите.

p, blockquote 24,0,0,1,0 —>

Над дальнейшими итемами придётся думать. Если против вас герои с высоким таргетным уроном, берём Обратку. Затем Тараску. Если вам повезло, и в противоположной команде много тонких героев – Аганим и Эзэреал.

p, blockquote 25,0,0,0,0 —>

p, blockquote 26,0,0,0,0 —>

Конец игры

К концу игры, ваш закуп должен выглядеть следующим образом: Транквилы/Трэвэла, Кая, Блинк, Обратка, Тараска.

Статья в тему:  Сколько людей играет в доту 2 в день

p, blockquote 27,0,0,0,0 —>

Все остальные предметы строго по ситуации.

p, blockquote 29,0,0,0,0 —>

Как играть?

Особой тактики игры за этого героя нет. Большинство новичков, кидают хуки куда попало, надеясь, что рано или поздно они попадут. Это неправильная тактика. Даже опытные игроки за Пуджа, могут часто промахиваться. Тут многое зависит не только от самого игрока, но и от везения.

p, blockquote 30,0,0,0,0 —>

И конечно, главное – это командная игра. Ваша задача – вовремя застанить вражеского героя своим ультимейтом, вытянуть сопартийца из передряги или пожертвовать собой в случае необходимости.

p, blockquote 31,0,0,0,0 —>

Тактика ведения боя за Пуджа довольно простая: включаете Blade Mail, прыгаете на врага с помощью Блинка, начинаете жрать его ультой и включаете вонь. Если цель не умерла за время действия ульты, бьём с руки и воняем.

p, blockquote 32,0,0,0,0 —> p, blockquote 33,0,0,0,1 —>

Новичкам не рекомендуется брать этого героя в рейтинговых играх, дабы не портить рейтинг своим сопартийцам. Порой достаточно одного неудачного хука, чтобы проиграть. Надеемся этот гайд поможет вам разобраться в этом герое.

Фишки и советы по игре на Пудже

  • Не забывайте про то, что можно байтить соперника анимацией использования хука. Для этого нажмите Q и почти сразу S. Герой начнет «замахиваться» хуком и сразу отменит анимацию, но соперник уже может начать уворачиваться от мнимого хука. Тут-то и можно бросить настоящий хук.
  • Хук действует не только на героев и крипов, но и на руны. Полезно на любой стадии игры, чтобы безопасно забрать руну самому или приберечь ее для союзника в более удобном месте.
  • Хук это не только способ инициации, но и хороший сейв союзников. Помните об этом и спасайте важных героев из непростых ситуаций вместо того, чтобы контринициировать неудачные драки.
  • На всякий случай напоминаем: Пудж больше не может заденаиться способностью Rot. Но урон по себе по-прежнему полезен, если драка идет около нейтральных крипов – можно заденаиться через них.
  • Часто Пуджи используют ультимейт на Рошана, не осознавая, что могут выдать свою позицию. Дело в том, что звук срабатывания Dismember действует на всю карту и слышен соперникам.
  • Dismember работает на крипах в два раза дольше, чем на героях. Может быть полезно против героя с Доминатором или просто для хорошего подхиливания в лесу. Но лучше всего подхиливаться с катапульты.
  • Ради всего на свете, нажимайте Rot сразу после хука (и ульты), если играете против Рубика.

React предоставляет три основных хука, которые позволяют решить основные задачи по реализации жизненного цикла в компоненте класса:

Хук состояния useState

Этот хук возвращает значение с сохраненным состоянием и функцию, необходимую для его обновления:

Статья в тему:  Где и на что ловить в игре русская рыбалка 3.9 онлайн усач валецкого

Начальное состояние – это параметр, переданный в useState, в данном случае 0, и это будет состояние, доступное во время начального рендеринга и до вызова функции setCount с новым значением. В данном случае, например, setCount(count + 1) увеличит значение count на единицу, которая станет 1 при следующем рендеринге. Также можно использовать значение предыдущего состояния в самой функции установки состояния, поэтому вышеописанное также можно записать как setCount(count => count + 1).

Хук эффекта useEffect

Этот хук позволяет нам добавлять дополнительные эффекты к заданному функциональному компоненту, то есть позволяет вносить изменения в нашу логику после выполнения рендеринга, аналогично методам жизненного цикла componentDidMount, componentDidUpdate и componentWillUnmount в компонентах класса.

Одним из больших преимуществ этого хука является то, что он упрощает жизненный цикл, так что три доступных метода класса могут быть выражены с помощью только этого хука. Например, компонента класса, который загружает данные из cookie при подключении и записывает их при отключении, мы могли бы написать следующим образом:

Это может быть сделано с помощью одного функционального компонента:

В этом случае, используя пустой массив зависимостей, мы говорим процессу запускаться только при подключении (например, componentDidMount). А возвратом функции является новая функция, которая вызывается только при отключении (например, componentWillUnmount).

Хук контекста useContext

Если вы уже использовали контекст React, это хук для вас. Контекст в React – это способ передачи данных между различными компонентами без необходимости ручного каскадирования props. Это полезно, например, когда мы хотим создать темы или локализации, которые должны быть глобальными для всего дерева компонентов.

В случае компонентов класса контекст передается через provider, который охватывает дерево компонентов. Эти компоненты должны содержать соответствующий контекст, так что компонент, имеющий локализацию и использующий контекст LocalContext, может быть написан следующим образом:

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

Пусть в компоненте, принадлежащем чату (приложению), отображается уведомление о нахождении пользователя «В сети»:

Давайте сделаем имена пользователей из списка контактов, которые находятся онлайн, зелеными.

Чтобы решить эту задачу, в компонент FriendListItem можно скопировать логику, которая приведена выше:

Конечно, этот способ совсем не простой и короткий.

Поделимся логикой с FriendStatus и FriendListItem . В React существует два способа разделения логики:

  • render props;
  • компоненты высшего порядка.

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

Разделить логику между двумя функциями JavaScript можно, если извлечь ее в еще одну, третью функцию.

Статья в тему:  Игры в которые играют менеджеры читать онлайн

Первый пользовательский хук — useFriendStatus() :

Этот хук подписывает нас на статус пользователя. friendID является здесь аргументом:

Наша изначальная цель — удалить повторяющуюся логику из FriendStatus и FriendListItem .

Когда логика извлечена из useFriendStatus , можно ее использовать:

Что здесь произошло? Мы извлекли код из двух функций и поместили в отдельную функцию.

Важно! Используйте use в начале каждого хука. Это нужно для автоматической проверки правил хуков.

Хуки, используемые в двух компонентах, не имеют одинакового состояния. Каждый вызов хука изолирован.

Как мы уже говорили, хуки — это те же функции. А потому можно передавать информацию между ними.

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

Идентификатор пользователя сохраняется в recipientID и обновляется в случае выбора в другого пользователя.

Хук useState() возвращает значение recipientID , а значит его можно передать в useFriendStatus в качестве аргумента:

Так можно узнать, находится ли пользователь в сети.

Пользовательские хуки гибкие, их можно использовать в связке друг с другом.

Команды для персонажей:

-gg ( Goblin’s Greed ) команду можно использовать лишь в том случае, если вы играете за Alchemist(Алхимика) . Показывает сколько золота было получено 3 способностью.

-invokelist данная команда покажет список всех заклинаний Инвокера и так же рядом с названием появятся комбинации определенного скилла.

-st или -stats данную команду можно использовать для таких героев как Pudge и Shadow Fiend(СФ) , в случае Пуджа вы узнаете сколько раз вы попали хуком, и сколько силы было получено за убийства. А в случае СФа , вы узнаете сколько душ было украдено.

-ms ( Move speed ) показывает скорость передвижения вашего героя.

-mines показывает количество установленных мин Минером. Если вы каждый раз считали и путались сколько мин вы установили, чтобы количество общих мин не превысило 15. Для тех кто не знает, играя за Минера можно установить максимум 15 мин .

-mcc ( Multi cast ) с помощью данной команды вы сможете посмотреть общее количество Мультикаста играя за Огра .

-int показывает количество украденного интеллекта, доступен когда играете за Silencer .

-disablehelp отключает возможность телепортирования вас на базу скиллом Test of Faith Чена . Если в вашей команде появился игрок который постоянно вас телепортирует на базу, данный скилл как раз таки будет полезен вам. -enablehelp включает возможность телепортирования.

-refresh обновляет анимацию Phantom Assasin , иногда бывает что модель героя размазывается и ничего не видно.

Вот и все команды и моды для Dota Allstars, если вдруг вы знаете какой-то дополнительный мод, который я не написал в этой статье, то можете написать его в комментариях. Мы обязательно рассмотрим и если это так, то добавим ваш мод в статью. Удачных игр.

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector