-
Автор темы
- #1
Всем привет, с вами Ve4niySooN.
Немного пореверсил дотку, мб кому пригодится, чтоб не мучатся, как мне.
Принцип такой-же как везде, только нет никакой документации и исходников, по этому если вы школьник или очередной пастер - можете смело выходить, неосилите. Можете репостить с указанием автора (меня).
В краце, находим указатель на CBaseEntity[..], к каждой сущности применимо (в т.ч. для крипов, спеллов и пр.):
Пример использования:
Одно из самых полезностей, что может вам пригодится, это функция ClientCmd_Unrestricted. С помощью неё можно вызывать любую консольную команду заблокированную в мультиплеере, пусть это и не безопасно. Например, с помощью неё можно написать спам в чат или изменить отдаление камеры (камера хак) или всё, что можно сделать через консоль. Вот её описание и как её найти:
Что с этим можно сделать:
Небольшие факты:
1) Большинство скилов в доте представлены в виде энтити и имеют ownerid и target origin, что делает получение их позиции, хозяина и место на которое они направлены - получаемыми, данные есть в структуре CBaseNPC.
2) Спеллы с задержкой, такие как торрент кунки или санстрайк инвокера отображаются даже в тумане войны.
3) Руна, рошан, все строения в т.ч. потайные лавки и лавки торговцев, фонтан - так-же являются энтити.
4) Рошан в тумане войны не обновляет информацию о себе, как и нейтральные крипы, однако, следующая пачка нейтралов, которые будут заспавнены появляется в списке энтити, и можно получить имя нейтралов и их позицию. Мёртвые нейтралы пропадают со списка, а это даёт нам право определить, в каком лесу и каких крипов зафармили или стакнули даже в тумане войны.
5) m_hReplicatingOtherHeroModel возвращает $FFFFFFFF только если герой НЕ иллюзия, во всех остальных случаях принимает id скопированного героя.
6) Если изменить кол-во регенерации хп в секунду и задать ей значение high(Single) то сервер крашнется. Особо забавно, что краш происходит если изменить простое значение на стороне клиента в его структуре, и вместо краша клиента игры выходит краш сервера.
7) Документация вальве - годится только если распечатать её и ипользовать вместо сортирки. Пока-что самое полное из всех, что может реально пригодится, это:
8) Брошенный хук пуджа это одна из немногих анимаций модели игрока, а не сущность, к которой не применимо то, о чём сказано выше.
9) Руны имеют здоровье О.О
Немного пореверсил дотку, мб кому пригодится, чтоб не мучатся, как мне.
Принцип такой-же как везде, только нет никакой документации и исходников, по этому если вы школьник или очередной пастер - можете смело выходить, неосилите. Можете репостить с указанием автора (меня).
В краце, находим указатель на CBaseEntity[..], к каждой сущности применимо (в т.ч. для крипов, спеллов и пр.):
Код:
_Origin = $1C8; // Origin Vector
_Items = $10; // Items Pointer
_ItemsIdent = $58; // Items Ident Pointer
_CurCD = $3C0; // Spells CoolDown
_LvlCD = $3B8; // Spells Level
_MaxCD = $3C8; // Spells Max CoolDown
_MaxHP = $1A8; // Max Health
_MaxMP = $938; // Max Mana
_CurHP = $1AC; // Currect Health
_CurMP = $934; // Current Mana
_Damage = $a48; // Damage
// Damage + $0 = Min damage
// Damage + $4 = Max damage
// Damage + $8 = Add damage
_ModelName = $9C0; // Pointer to AnsiString
_ModelPath = $9C8; // Pointer to AnsiString
_Team = $233; // Cardinal!!! 2 = Radiant, 3 = Dire
Код:
try
LocalEntity := UINT64(CBaseNPC.GetLocalPlayer)^;
LocalNPC.Base := UINT64(LocalEntity);
LocalNPC.Team := PCardinal( UINT64(LocalEntity) + _Team)^;
LocalNPC.CurHealth := PInteger( UINT64(LocalEntity) + _CurHP)^;
LocalNPC.MaxHealth := PInteger( UINT64(LocalEntity) + _MaxHP)^;
LocalNPC.CurMana := PSingle( UINT64(LocalEntity) + _CurMP)^;
LocalNPC.MaxMana := PSingle( UINT64(LocalEntity) + _MaxMP)^;
except
WriteLn('Exception.');
Exit;
end;
Одно из самых полезностей, что может вам пригодится, это функция ClientCmd_Unrestricted. С помощью неё можно вызывать любую консольную команду заблокированную в мультиплеере, пусть это и не безопасно. Например, с помощью неё можно написать спам в чат или изменить отдаление камеры (камера хак) или всё, что можно сделать через консоль. Вот её описание и как её найти:
Код:
function(Command: PAnsiChar): Longint;
Код:
@eCreateInterface := GetProcAddress(GetModuleHandle('engine2.dll'), 'CreateInterface');
PEngineTable := eCreateInterface('Source2EngineToClient001', nil);
nUnrestrictedClientCMD будет находится VTable(PEngineTable, 37)
Что с этим можно сделать:
Небольшие факты:
1) Большинство скилов в доте представлены в виде энтити и имеют ownerid и target origin, что делает получение их позиции, хозяина и место на которое они направлены - получаемыми, данные есть в структуре CBaseNPC.
2) Спеллы с задержкой, такие как торрент кунки или санстрайк инвокера отображаются даже в тумане войны.
3) Руна, рошан, все строения в т.ч. потайные лавки и лавки торговцев, фонтан - так-же являются энтити.
4) Рошан в тумане войны не обновляет информацию о себе, как и нейтральные крипы, однако, следующая пачка нейтралов, которые будут заспавнены появляется в списке энтити, и можно получить имя нейтралов и их позицию. Мёртвые нейтралы пропадают со списка, а это даёт нам право определить, в каком лесу и каких крипов зафармили или стакнули даже в тумане войны.
5) m_hReplicatingOtherHeroModel возвращает $FFFFFFFF только если герой НЕ иллюзия, во всех остальных случаях принимает id скопированного героя.
6) Если изменить кол-во регенерации хп в секунду и задать ей значение high(Single) то сервер крашнется. Особо забавно, что краш происходит если изменить простое значение на стороне клиента в его структуре, и вместо краша клиента игры выходит краш сервера.
7) Документация вальве - годится только если распечатать её и ипользовать вместо сортирки. Пока-что самое полное из всех, что может реально пригодится, это:
Пожалуйста, авторизуйтесь для просмотра ссылки.
8) Брошенный хук пуджа это одна из немногих анимаций модели игрока, а не сущность, к которой не применимо то, о чём сказано выше.
9) Руны имеют здоровье О.О
Последнее редактирование: