- 387
- 135
как создать коллбек на событие в игре?
ну, как "хуки" сетевые, только на внутриигровые события (любое действие, совершённое/спровоцированное игроком)
Последнее редактирование:
как создать коллбек на событие в игре?
ну, как "хуки" сетевые, только на внутриигровые события (любое действие, совершённое/спровоцированное игроком)
— Как обжарить хлеб в тостере?найти его адресс и поставить на него хук. Плагин SDK в помощь.
Нужно обработать попадание пули в конкретный объект. Здесь таких событий нет.так оно и есть. Ты сказал что ты хочешь игровое событие словить, а их херовая туча и хорошо они описаны в плагин SDK
Хук на DoBulletImpact и сравнение объектов приходящих в эту функциюНужно обработать попадание пули в конкретный объект. Здесь таких событий нет.
=)Хук на DoBulletImpact и сравнение объектов приходящих в эту функцию
Немного уточни этот момент)=)
А как получить объекты, которые приходят в эту функцию?
Всё ещё не разобрался с Вашим предложением. Можете объяснить подробнее как реализовать тело такого хука? У меня вообще крайне мало опыта работы с хуками.Хук на DoBulletImpact и сравнение объектов приходящих в эту функцию
#include "urmem.hpp"
urmem::hook hook;//Определение обьекта нашего хука(вроде правильно сказал по терминологии)
//Определяем тело нашей функции куда мы хотим чтобы шли данные с хука
void DoBulletImpact(void *_this,CEntity* owner, CEntity* victim, CVector* startPoint, CVector* endPoint, CColPoint* colPoint, int arg5) {
hook.call<urmem::calling_convention::thiscall,void *, CEntity*, CEntity*, CVector *, CVector *, CColPoint *, int>
(_this, owner, victim, startPoint, endPoint, colPoint, arg5);
//Вызываем оригинальную функцию.
}
//В иницилизацию плагина
hook.install(0x73B550, urmem::get_func_addr(&DoBulletImpact));
//Первый параметр метода - это куда мы ставим хук.
//Второй - это адресс нашего метода или функции. Если это метод класса, то он должен быть статичным.
//В выгрызку плагина
hook.disable();
Вторым аргументом будет void* edxМогу тебе кинуть пример хука на urmem DoBulletImpact. По логике вещей должен код работать, но 100 процентной гарантии не даю ибо пишу не со своего компа и пишу без компилятора. Скажу сам, я сам до сих пор не особо в хуках разбираюсь.
Ссылка на urmemC++:#include "urmem.hpp" urmem::hook hook;//Определение обьекта нашего хука(вроде правильно сказал по терминологии) //Определяем тело нашей функции куда мы хотим чтобы шли данные с хука void DoBulletImpact(void *_this,CEntity* owner, CEntity* victim, CVector* startPoint, CVector* endPoint, CColPoint* colPoint, int arg5) { hook.call<urmem::calling_convention::thiscall,void *, CEntity*, CEntity*, CVector *, CVector *, CColPoint *, int> (_this, owner, victim, startPoint, endPoint, colPoint, arg5); //Вызываем оригинальную функцию. } //В иницилизацию плагина hook.install(0x73B550, urmem::get_func_addr(&DoBulletImpact)); //Первый параметр метода - это куда мы ставим хук. //Второй - это адресс нашего метода или функции. Если это метод класса, то он должен быть статичным. //В выгрызку плагина hook.disable();
Ссылка на опредление метода DoBulletImpact и его адресс
Скажу от себя еще. Этой либой я лично не ставил хуки на thiscall и все делал исключительно на свой глаз и код может быть не рабочим.
— Как обжарить хлеб в тостере?
— Покупаешь хлеб и жаришь. Сварочный аппарат в помощь.
Жалуется на неправильные аргументы в 5-6 строчках. В шаблоне типов больше, чем аргументов в сигнатуре функции.Могу тебе кинуть пример хука на urmem DoBulletImpact. По логике вещей должен код работать, но 100 процентной гарантии не даю ибо пишу не со своего компа и пишу без компилятора. Скажу сам, я сам до сих пор не особо в хуках разбираюсь.
Ссылка на urmemC++:#include "urmem.hpp" urmem::hook hook;//Определение обьекта нашего хука(вроде правильно сказал по терминологии) //Определяем тело нашей функции куда мы хотим чтобы шли данные с хука void DoBulletImpact(void *_this,CEntity* owner, CEntity* victim, CVector* startPoint, CVector* endPoint, CColPoint* colPoint, int arg5) { hook.call<urmem::calling_convention::thiscall,void *, CEntity*, CEntity*, CVector *, CVector *, CColPoint *, int> (_this, owner, victim, startPoint, endPoint, colPoint, arg5); //Вызываем оригинальную функцию. } //В иницилизацию плагина hook.install(0x73B550, urmem::get_func_addr(&DoBulletImpact)); //Первый параметр метода - это куда мы ставим хук. //Второй - это адресс нашего метода или функции. Если это метод класса, то он должен быть статичным. //В выгрызку плагина hook.disable();
Ссылка на опредление метода DoBulletImpact и его адресс
Скажу от себя еще. Этой либой я лично не ставил хуки на thiscall и все делал исключительно на свой глаз и код может быть не рабочим.
Спасибо за ссылку! Правильно ли я понимаю, что функции из библиотеки SF и PSDK (в частности DoBulletImpact()) использует не только программист, но и игра? Т.е. этот хук действительно будет срабатывать на игровые события или только если эта функция будет вызвана из плагина?Вторым аргументом будет void* edx
Исходник - Гайд - Мини-гайд по хукам. [Теория + Практика]
Всем привет. В последнее время я стал замечать, что абсолютное большинство использует всякие готовые библиотеки для хуков, и даже не заморачиваются о строении функций, типах хуков и прочим. Как таковых гайдов очень мало, а если и есть - на английском языке. В этой теме я расскажу обо всем просто...www.blast.hk
Вечером попробую разобратся. Как говорил писал методом научного тыка.Жалуется на неправильные аргументы в 5-6 строчках. В шаблоне типов больше, чем аргументов в сигнатуре функции.
Будет, но нужно будет вызвать функцию, которая была до тебя, для того, чтобы не сломать цепочку вызовов.Т.е. этот хук действительно будет срабатывать на игровые события или только если эта функция будет вызвана из плагина?
Жалуется на неправильные аргументы в 5-6 строчках. В шаблоне типов больше, чем аргументов в сигнатуре функции.
void DoBulletImpact(void* _this, void* edx, CEntity* owner, CEntity* victim, CVector* startPoint, CVector* endPoint, CColPoint* colPoint, int arg5)
{
/* Твой код */
// вызов той функции, что была до нас, DoBulletImpact ничего не возвращает, поэтому указываем только соглашение о вызове __thiscall
hook.call<urmem::calling_convention::thiscall>(_this, owner, victim, startPoint, endPoint, colPoint, arg5);
}