Применение способностей aka PrepareUnitOrders

Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
324
Реакции[?]
24
Поинты[?]
12K
Здарова. Постараюсь изложить коротко и ясно на эту тему.

В доте, это не герой напрямую делает действия, а игрок(Player), тоесть ваши глаза(камера).

Хочу начать атаковать вражеского героя. В таком случае Игрок(ТЫ) внутри доты вызываешь функцию "PrepareUnitOrders"
И там передаюся определённые параметры.
(Source: мой какахоЧит который был сделан на базе других читов)

C++:
void PrepareUnitOrders (C_DOTAPlayer* player, DotaUnitOrder_t order, int entHandle, Vector movePosition, int abilityIndex, PlayerOrderIssuer_t orderIssuer, CBaseEntity* entity, bool queue, OrderQueueBehavior_t queueBehavior, bool showEffect);
Тут самое главное всё грамотно подставить и во время. Необходимо сделать себе итерацию сущностей, например как в гайдах от Liberalist . Можна также хукнуть OnAddEntity / OnRemoveEntity и просто добавлять сущностей себе в массив и гдето в своем цикле итерировать их( не забывайте что новосозданная сущность пустая, и потчи ничего не содержит. Поэтому както делайте задержку или делайте проверку, не пустая ли сущность на данный момент )

Раньше эта функция была в классе C_DOTAPlayer, но с недавнего времени её убрали и сделали типа глобальной(или как это называется). Ну в общем берете сигу на функу и вызываете её, подставля правильно параметры. Для х64 версии игры там будет конвенция _fastcall (rcx,rdx,r8,r9,...). Можете поставить брекпоинт на функцию в дебаггере(x64dbg) и посмотреть что за параметры передаются(Поставил брекпоинт и сделал какое-то действие: клик ПКМ, юз способки, чё угодно и игра запаузится и зайдешь в дебаггер и посмотришь, что там)

Вот один из способов, как находить PrepareUnitOrders. Может есть какие-то более легкие, но я только об этом знаю на данный момент. Можете сделать самим сигу вписовая байт по байту, либо скачать плагин в инете (например SwissArmyKnife, которым я лично пользуюсь (НЕ РЕКЛАМА,ССЫЛКУ НА СКАЧИВАНИЕ НЕ ДАЮ. ИЩИТЕ САМИ) )

И так:

1. Открываем дебаггер и Аттачимся к доте( жмешь ф9 если необходимо). не важно где мы, в гл меню или в катке(желательно в меню)

2. В дебaггере ctrl+g ( client.entry )
1647819177265.png
3. ПКМ - Search For -> current module -> string referrences
1647819161828.png
4. Ждем несколько секунд. Когда завершит загружать строки, вписываем снизу PrepareUnitOrders и выбераем первое сверху
1647819295862.png
5.нас перекинуло куда то, и мы ниже видим что в rcx что-то загружается (По секрету и опыту скажу, что это функа(адрес, указатель не важно, главное что это связанно с нашей PrepareUnitOrders) кликаем ПКМ->Follow in Dissambler-> Constant
6. Нас снова кудась перекинуло и если покрутим чучуть ниже увидим, что-то похожее на аргументы функции
(Скрин не могу выложить поэтому ловите имгур
Пожалуйста, авторизуйтесь для просмотра ссылки.
)
7. Вызовы важных функций обычно лежат в самом низу, поэтому туда мы и летим(крутим пока не увидем какойто вызов)
(немного придется покрутить, но ничего. Рука от пастинга не ломается же , поэтому от мейкинга вам ничего не будет)
Пожалуйста, авторизуйтесь для просмотра ссылки.
8. кликаем пкм - follow in dissambler - constant
Пожалуйста, авторизуйтесь для просмотра ссылки.
9. Делаем сигу на начало функции ( либо ручками вписовать байтики, но в относительных адресах заменяйте байтики(относительные, тоесть которые меняются после перезапуска игры на знаки вопроса). Я же воспользуюсь плагином от SwissArmyKnife
Выделяю начавло (не очень много и не очень мало) плагинс. ( Режим IDA выберайте, хоть как кому удобно)
Пожалуйста, авторизуйтесь для просмотра ссылки.

И так сига готова, теперь в своем бест хак ин зе ворлд гдето поставьте себе это:

C++:
enum class DotaUnitOrder_t : int {
    DOTA_UNIT_ORDER_NONE = 0,
    DOTA_UNIT_ORDER_MOVE_TO_POSITION = 1,
    DOTA_UNIT_ORDER_MOVE_TO_TARGET = 2,
    DOTA_UNIT_ORDER_ATTACK_MOVE = 3,
    DOTA_UNIT_ORDER_ATTACK_TARGET = 4,
    DOTA_UNIT_ORDER_CAST_POSITION = 5,
    DOTA_UNIT_ORDER_CAST_TARGET = 6,
    DOTA_UNIT_ORDER_CAST_TARGET_TREE = 7,
    DOTA_UNIT_ORDER_CAST_NO_TARGET = 8,
    DOTA_UNIT_ORDER_CAST_TOGGLE = 9,
    DOTA_UNIT_ORDER_HOLD_POSITION = 10,
    DOTA_UNIT_ORDER_TRAIN_ABILITY = 11,
    DOTA_UNIT_ORDER_DROP_ITEM = 12,
    DOTA_UNIT_ORDER_GIVE_ITEM = 13,
    DOTA_UNIT_ORDER_PICKUP_ITEM = 14,
    DOTA_UNIT_ORDER_PICKUP_RUNE = 15,
    DOTA_UNIT_ORDER_PURCHASE_ITEM = 16,
    DOTA_UNIT_ORDER_SELL_ITEM = 17,
    DOTA_UNIT_ORDER_DISASSEMBLE_ITEM = 18,
    DOTA_UNIT_ORDER_MOVE_ITEM = 19,
    DOTA_UNIT_ORDER_CAST_TOGGLE_AUTO = 20,
    DOTA_UNIT_ORDER_STOP = 21,
    DOTA_UNIT_ORDER_TAUNT = 22,
    DOTA_UNIT_ORDER_BUYBACK = 23,
    DOTA_UNIT_ORDER_GLYPH = 24,
    DOTA_UNIT_ORDER_EJECT_ITEM_FROM_STASH = 25,
    DOTA_UNIT_ORDER_CAST_RUNE = 26,
    DOTA_UNIT_ORDER_PING_ABILITY = 27,
    DOTA_UNIT_ORDER_MOVE_TO_DIRECTION = 28,
    DOTA_UNIT_ORDER_PATROL = 29,
    DOTA_UNIT_ORDER_VECTOR_TARGET_POSITION = 30,
    DOTA_UNIT_ORDER_RADAR = 31,
    DOTA_UNIT_ORDER_SET_ITEM_COMBINE_LOCK = 32,
    DOTA_UNIT_ORDER_CONTINUE = 33,
    DOTA_UNIT_ORDER_VECTOR_TARGET_CANCELED = 34,
    DOTA_UNIT_ORDER_CAST_RIVER_PAINT = 35,
    DOTA_UNIT_ORDER_PREGAME_ADJUST_ITEM_ASSIGNMENT = 36,
};
enum PlayerOrderIssuer_t : int {
    DOTA_ORDER_ISSUER_SELECTED_UNITS = 0,
    DOTA_ORDER_ISSUER_CURRENT_UNIT_ONLY = 1,
    DOTA_ORDER_ISSUER_HERO_ONLY = 2,
    DOTA_ORDER_ISSUER_PASSED_UNIT_ONLY = 3
};
enum OrderQueueBehavior_t : int {
    DOTA_ORDER_QUEUE_DEFAULT = 0,
    DOTA_ORDER_QUEUE_NEVER = 1,
    DOTA_ORDER_QUEUE_ALWAYS = 2,
};

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

C++:
typedef void(_fastcall* _PrepareUnitOrders)(C_DOTAPlayer* player, DotaUnitOrder_t order, int entHandle, Vector movePosition, int abilityIndex, PlayerOrderIssuer_t orderIssuer, CBaseEntity* entity, bool queue, OrderQueueBehavior_t queueBehavior, bool showEffect);
_PrepareUnitOrders PrepareUnitOrders;

C_DOTAPlayer* player это просто Указатель на обьект класса C_DOTAPlayer на локального игрока. Как получить локального игрока? Смотри гайд от Liberalist
entHandle это индекс цели на которую что-то будет применено(ну например если мы дадим приказ Атаковать. Кого? Мы не вставим туда сущность врага, а только её индекс. Это может также быть предмет(Подобрать. Что? Индекс предмета)
movePosition это вектор координат(х,у,z) Обычно туда вставляемпустой вектор Vector empty = {0,0,0} если нам ненужно коорды. Ну тип посмотрите,
Атаковать героя вражеского. Для этого нам не ненадо координаты, а просто цель(Индекс сущности врага).
Бликнуться к врагу. Вот тут нам уже надо координаты. Vector MovePosition = Enemy->GetAbsOrigin(); и это будет чтото в этом роде
C++:
PrepareUnitOrders(localhero.pPlayer, DotaUnitOrder_t::DOTA_UNIT_ORDER_CAST_POSITION, 0, position, AbilityIndex, PlayerOrderIssuer_t::DOTA_ORDER_ISSUER_HERO_ONLY, this, order, OrderQueueBehavior_t::DOTA_ORDER_QUEUE_DEFAULT, 0);
   /// У меня эта функа лежит в классе CBaseEntity, поэтому я юзаю this
CBaseEntity* entity это указатель на обьект класса CBaseEntity на сущность, которая выполнит приказ(действие) тоесть мы туда поставим сущность нашего героя.

Из этой функи можна прикольные шняги сделать, вот вам примеры:
C++:
void SpellPointTarget(int AbilityIndex, Vector position, bool order)

    {

        if (localhero.pPlayer == nullptr) { localhero.pPlayer = localhero.pEnt->GetPlayer(); }

        PrepareUnitOrders(localhero.pPlayer, DotaUnitOrder_t::DOTA_UNIT_ORDER_CAST_POSITION, 0, position, AbilityIndex, PlayerOrderIssuer_t::DOTA_ORDER_ISSUER_HERO_ONLY, this, order, OrderQueueBehavior_t::DOTA_ORDER_QUEUE_DEFAULT, 0);

    }

    void PickupRune(CBaseEntity* ent)

    {

        Vector empty = { 0,0,0 };

        PrepareUnitOrders(localhero.pPlayer, DotaUnitOrder_t::DOTA_UNIT_ORDER_PICKUP_RUNE, ent->GetUnitIndex(), empty, 0, PlayerOrderIssuer_t::DOTA_ORDER_ISSUER_HERO_ONLY, this, 0, OrderQueueBehavior_t::DOTA_ORDER_QUEUE_DEFAULT, 0);

    }

    void PickupItem(CBaseEntity* ent) 

    {

        Vector empty = { 0,0,0 };

        PrepareUnitOrders(localhero.pPlayer, DotaUnitOrder_t::DOTA_UNIT_ORDER_PICKUP_ITEM, ent->GetUnitIndex(), empty, 0, PlayerOrderIssuer_t::DOTA_ORDER_ISSUER_HERO_ONLY, this, 0, OrderQueueBehavior_t::DOTA_ORDER_QUEUE_DEFAULT, 0);

    }

    void SpellNoTarget(int AbilityIndex,bool order)

    {

        Vector empty = { 0,0,0 };

        PrepareUnitOrders(localhero.pPlayer, DotaUnitOrder_t::DOTA_UNIT_ORDER_CAST_NO_TARGET, NULL, empty, AbilityIndex, PlayerOrderIssuer_t::DOTA_ORDER_ISSUER_HERO_ONLY, this, order, OrderQueueBehavior_t::DOTA_ORDER_QUEUE_DEFAULT, 0);

    }

    void SpellTarget(int AbilityIndex,CBaseEntity* target, bool order)

    {

        Vector empty = { 0,0,0 };

        PrepareUnitOrders(localhero.pPlayer, DotaUnitOrder_t::DOTA_UNIT_ORDER_CAST_TARGET, target->GetUnitIndex(), empty, AbilityIndex, PlayerOrderIssuer_t::DOTA_ORDER_ISSUER_HERO_ONLY, this, order, OrderQueueBehavior_t::DOTA_ORDER_QUEUE_DEFAULT, 0);

    }

    void Think() //// типа чтоб юнит прекратил юзать чтолибо и просто стал на месте

    {

        Vector empty = { 0,0,0 };

        PrepareUnitOrders(localhero.pPlayer, DotaUnitOrder_t::DOTA_UNIT_ORDER_STOP, NULL, empty, 0, PlayerOrderIssuer_t::DOTA_ORDER_ISSUER_HERO_ONLY, this, 0, OrderQueueBehavior_t::DOTA_ORDER_QUEUE_DEFAULT, 0);

    }


Только у меня проблема с PickupItem. Когда её вызываю на предмет( предмет это когда entity.name == dota_item_drop ну и еще я пробовал item_aegis), то пишет что должен быть физический предмет. Если решу проблему, обновлю текст(может я не понял как юзать эту функу, что должен быть подобрано.

Надеюсь, пригодится. Может быть немного лишнего мусора написал, но уверен что большинство по теме. Я не про хацкер, а обычный нуб. Учусь на ошибках.
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всё то же самое, но без лишних пуков-хрюков:
Функа ищется по хрефу "particles/ui_mouseactions/waypoint_flag.vpcf".
Тайпдеф:
C++:
typedef void(*Fn)(C_DOTAPlayer* player, DotaUnitOrder_t order, int entHandle, Vector movePosition, int abilityIndex, PlayerOrderIssuer_t orderIssuer, CBaseEntity* entity, bool queue, OrderQueueBehavior_t queueBehavior, bool showEffect);
(fastcall тут нахер не нужен)
Энумы:
DotaUnitOrder_t:
Пожалуйста, авторизуйтесь для просмотра ссылки.
PlayerOrderIssuer_t:
Пожалуйста, авторизуйтесь для просмотра ссылки.
OrderQueueBehavior_t:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Ну и вообще, об этом уже есть пост, где вся нужная инфа.
 
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
324
Реакции[?]
24
Поинты[?]
12K
Всё то же самое, но без лишних пуков-хрюков:
Функа ищется по хрефу "particles/ui_mouseactions/waypoint_flag.vpcf".
Тайпдеф:
C++:
typedef void(*Fn)(C_DOTAPlayer* player, DotaUnitOrder_t order, int entHandle, Vector movePosition, int abilityIndex, PlayerOrderIssuer_t orderIssuer, CBaseEntity* entity, bool queue, OrderQueueBehavior_t queueBehavior, bool showEffect);
(fastcall тут нахер не нужен)
Энумы:
DotaUnitOrder_t:
Пожалуйста, авторизуйтесь для просмотра ссылки.
PlayerOrderIssuer_t:
Пожалуйста, авторизуйтесь для просмотра ссылки.
OrderQueueBehavior_t:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Ну и вообще, об этом уже есть пост, где вся нужная инфа.
Не видел нигде гайда по динамичному поиску фукнции в дебаггере 😏
Я здесь больше старался уделить внимание дебаггеру, и как им пользоваться в случае, если надо найти функцию и сделать сигнатуру на неё, декларирование функции,а применение уже лежит на юзерах.
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
324
Реакции[?]
24
Поинты[?]
12K
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
779
Реакции[?]
331
Поинты[?]
63K
такие методы называются связанными невиртуальными(связанный - привязан к конкретной инстанции объекта, то есть есть this(указатель на инстанцию в rcx). невиртуальный потому что он не в вмт а сам по себе отдельной функцией). раньше функа была связанной виртуальной(ну любая виртуальная связанная)(в вмт лежала), щас просто связанная.(ну или другими словами, "виртуальный метод" и "невиртуальный метод"). есть еще статические методы(нету this)
Пожалуйста, авторизуйтесь для просмотра ссылки.
class test
{
void bound_method(){...}//связанный
virtual void bound_virtual_method(){...}//связанный виртуальный
static void static_method(){...}//статический, то есть в rcx нету this, там что-то другое(ну конкретно в данном примере так как тут 0 аргументов то в rcx ничего нет). this тут не нужен ибо функа не связана с конкретной инстанцией(и следовательно не может работать с членами инстанции, токо с другими статик членами и функами). то есть она не является связанным методом.
}

вот кстати про конвенцию на х64 винде(и про макос заодно)
а на х86 винде все норм с конвенциями(__thiscall для связанных методов, __cdecl для глобалов статиков и тд, __stdcall для винапи - основные)
 
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
324
Реакции[?]
24
Поинты[?]
12K
Давно не юзал PrepareUnitOrders, но сейчас крашит хотя параметры вроде смотрю много не изменились:

C++:
C_DOTAPlayerController*, //rcx
PlayerOrderDotaOrder_t OrderType, 
UINT32 targetHandle, 
VECTOR* Position, 
UINT32 abilityIndex, 
PlayerOrderIssuer_t OrderIssuerType,
C_BaseEntity* Issuer, 
bool queue ,
PlayerOrderOrderQueueBehavior_t behav, 
bool ShowEffects)
но крашит с каким-то чтением 0xFFFFFFFFFFFF, хотя параметры нормальные.

Вектор передаю туда как
C++:
VECTOR empty = {0,0,0}

PrepareUnitOrders(.....,&empty,....)
Параметры те же?
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ну так хукни её и понажимай кнопки в игре, посмотри, что там дота передает.
А вообще, на нетчан переходи. Минус сига, как минимум.
 
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
324
Реакции[?]
24
Поинты[?]
12K
Ну так хукни её и понажимай кнопки в игре, посмотри, что там дота передает.
А вообще, на нетчан переходи. Минус сига, как минимум.
Окей, там убрали один параметр

Сейчас там вызывается вот так:WqKW07M.png


Нашел путём БП на начало PrepareUnitOrders и посмотрел что её вызывает, и посмотрел что за парамерты туда передаются (на скрине)


У меня раньше было вот так:

C++:
void PrepareOrder(C_DOTAPlayerController* player, PlayerOrderDotaOrder_t OrderT,UINT32 targetIndex,VECTOR* position,UINT32 abilityIndex,PlayerOrderIssuer_t OrderIssuer, C_BaseEntity* Issuer, bool queue, PlayerOrderOrderQueueBehavior_t behavioru, bool ShowEffects)
Я посмотрел на функцию пореверсил и пришел к выводу, что там убран был PlayerOrderQueueBehaviour_t

Вызываю с такими параметрами и всё равно крашит, при чтении 0xFFFFFFFFFFFFF.


Параметры на скрине описаны 100% корректно я наводил мышкой на параметр и проверял то что написано (rsp+0xD0, C0, .....) и там совпадает всё с тем что я написал на скрине.
 
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
324
Реакции[?]
24
Поинты[?]
12K
Окей я решил проблему. Их было на самом деле две.
1) Был убран параметр, как я и говорил выше
2) Моя сига по неизвестной мне причине сожрала 1 байт в начале из-за чего оно не то начало брало функции( кароче новую сигу надо сделать и всё зароботало )
 
https://qweme.dev
Пользователь
Статус
Оффлайн
Регистрация
25 Май 2022
Сообщения
165
Реакции[?]
87
Поинты[?]
21K
Ну так хукни её и понажимай кнопки в игре, посмотри, что там дота передает.
А вообще, на нетчан переходи. Минус сига, как минимум.
сейчас бы хукать применение способностей в нетчане (что там было до нетчана никто не знает, может этот ордер в рот выебали, а ты его взял через 0.01сек, когда нетчан решил об этом оповестить сервак) . xd
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
сейчас бы хукать применение способностей в нетчане (что там было до нетчана никто не знает, может этот ордер в рот выебали, а ты его взял через 0.01сек, когда нетчан решил об этом оповестить сервак) . xd
Головой поехал? Ниче хукать не надо. SendNetMessage нужно вызывать, передавая ордер.
 
https://qweme.dev
Пользователь
Статус
Оффлайн
Регистрация
25 Май 2022
Сообщения
165
Реакции[?]
87
Поинты[?]
21K
Головой поехал? Ниче хукать не надо. SendNetMessage нужно вызывать, передавая ордер.
нет я имел ввиду сам хук (евента), типо птшку свичать и так далее, в нетчан инфа приходит с запозданием, там могут быть какие нибудь траблы с этим

как по мне лучше юзать оригинальную функцию игры, сигу на которую найти очень легко, игра не стоит свеч

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.

 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
нет я имел ввиду сам хук (евента), типо птшку свичать и так далее, в нетчан инфа приходит с запозданием, там могут быть какие нибудь траблы с этим

как по мне лучше юзать оригинальную функцию игры, сигу на которую найти очень легко, игра не стоит свеч
Не, хукать-то нужно функу (не хукать, а тупо бряху ставить). А с нетчаном -- если ты его уже юзаешь, не вижу смысла от лишней сиги\функции.
Проще вообще всё по возможности на нетчан перенести.

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.

 
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
324
Реакции[?]
24
Поинты[?]
12K
03.10.2022

"4C 89 4C ? ? 44 89 44 ? ? 89 54 24 ? 48 89 4C ? ? 55 53 41 55 41 56 41 57 48 8D 6C ? ? 48 81 EC ? ? ? ? 48 8B 15 ? ? ? ? 45 33 ED"
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
108
Поинты[?]
57K
Ничего не понимаю с паттерн сканером, не находит ни вышеуказанный паттерн, ни те которые SigMaker выдаёт, либо находит что-то вообще левое
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
663
Реакции[?]
104
Поинты[?]
67K
Ничего не понимаю с паттерн сканером, не находит ни вышеуказанный паттерн, ни те которые SigMaker выдаёт, либо находит что-то вообще левое
ну так конечно,паттерн мог успеть давно сменится
не уверен, но вроде я обновлял его с ласт апдейта:
C++:
//const auto aPrepareUnitOrders = util::find_pattern( global::client_module, "48 89 5C 24 08 48 89 6C 24 10 48 89 74 24 18 57 48 83 EC 50 48 8B FA 48 8B D9 BA FF FF FF FF", "PrepareUnitOrders" );
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
108
Поинты[?]
57K
ну так конечно,паттерн мог успеть давно сменится
не уверен, но вроде я обновлял его с ласт апдейта:
C++:
//const auto aPrepareUnitOrders = util::find_pattern( global::client_module, "48 89 5C 24 08 48 89 6C 24 10 48 89 74 24 18 57 48 83 EC 50 48 8B FA 48 8B D9 BA FF FF FF FF", "PrepareUnitOrders" );
Я не могу понять, что именно искать, xref того партикля waypoint_flag(и твоя сига) ведёт только к функции, которая показывает этот партикль
Или это я в глаза долблюсь?


Edit: ладно похуй, я взял SwissArmyKnife и сгенерил сигу как автор и сказал.
 
Последнее редактирование:
Сверху Снизу