Гайд Виртуализация функций.

alive forever
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2017
Сообщения
663
Реакции[?]
400
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
XVTT Lessons

Итак,виртуализация функций - очень удобная и практичная вещь,которая поможет нам немного усложнить жизнь реверсерам,ваку и т.д. ,но это не все плюсы данной фитчи.


Рассматривать виртуализацию функций я буду лишь в теории и на примере большинства читов,где есть Rage\Legit bot'ы.

Итак,приступим.

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

Так вот ,давайте создадим класс и пропишем там общие функции,которые есть в Rage и Legit ботах:
Код:
class AimBot
{
public:
    virtual void EntityIsValid(int i);
    virtual void DropTarget();
    virtual float GetPlayerFOV(Vector& viewangles, const Vector& vSrc, const Vector& vEnd);
    virtual void FindTarget(IClientEntity* mePlayer, IVEngineClient* pEngineClient);
    virtual void DoAimBot(IClientEntity* mePlayer, IVEngineClient* pEngineClient, CUserCmd* cmd);
};
Так вот,все эти функции в большинстве случаев используются в наших "аимботах".

Помним то,что нам нужно указать в дочерних классах ссылку на наш класс AimBot
Код:
class RageBot : public AimbBot
{
};
Код:
class LegitBot: public AimbBot
{
};

Главное не забыть объявить указатель на главный класс и выделить под него память.

Код:
AimBot* AB = new AimBot();
ну а дальше мы можем играться как хотим.

Код:
Legit* LA= new Legit();
Rage* RA= new Rage();

AimBot* AMb[2];
AMb[0] = LA;
AMb[1] = RA;
for (int i = 0; i < 2; i++)
  AMb[i]->DoAimBot(mePlayer, pEngine, cmd);

Главное это то,что такие методы реализаций очень сильно упрощают работу с большими проектами,где есть очень много одинаковых функций,но работающих немного по-другому.

И,естественно,аимы взяты лишь для примера и демонстрации.

В общем-то,это все.Спасибо за внимание.​
 
alive forever
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2017
Сообщения
663
Реакции[?]
400
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2016
Сообщения
140
Реакции[?]
60
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
аутизм метод
 
alive forever
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2017
Сообщения
663
Реакции[?]
400
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Начинающий
Статус
Оффлайн
Регистрация
8 Май 2017
Сообщения
102
Реакции[?]
6
Поинты[?]
0
alive forever
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2017
Сообщения
663
Реакции[?]
400
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2016
Сообщения
140
Реакции[?]
60
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
alive forever
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2017
Сообщения
663
Реакции[?]
400
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Нет, но способ аутизм
У тебя своя точка зрения,у меня своя.
Я считаю,что лучше держать общий абстрактный класс виртуализированных функций ,где будут объявлены методы и функции,которые я использую в разных классах и файлах,нежели чем делать по 500 строк объявлений.
 
              ru p2cs > all                      
Разработчик
Статус
Оффлайн
Регистрация
19 Авг 2016
Сообщения
1,580
Реакции[?]
1,963
Поинты[?]
134K
XVTT Lessons

Итак,виртуализация функций - очень удобная и практичная вещь,которая поможет нам немного усложнить жизнь реверсерам,ваку и т.д. ,но это не все плюсы данной фитчи.


Рассматривать виртуализацию функций я буду лишь в теории и на примере большинства читов,где есть Rage\Legit bot'ы.

Итак,приступим.

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

Так вот ,давайте создадим класс и пропишем там общие функции,которые есть в Rage и Legit ботах:
Код:
class AimBot
{
public:
    virtual void EntityIsValid(int i);
    virtual void DropTarget();
    virtual float GetPlayerFOV(Vector& viewangles, const Vector& vSrc, const Vector& vEnd);
    virtual void FindTarget(IClientEntity* mePlayer, IVEngineClient* pEngineClient);
    virtual void DoAimBot(IClientEntity* mePlayer, IVEngineClient* pEngineClient, CUserCmd* cmd);
};
Так вот,все эти функции в большинстве случаев используются в наших "аимботах".

Помним то,что нам нужно указать в дочерних классах ссылку на наш класс AimBot
Код:
class RageBot : public AimbBot
{
};
Код:
class LegitBot: public AimbBot
{
};

Главное не забыть объявить указатель на главный класс и выделить под него память.

Код:
AimBot* AB = new AimBot();
ну а дальше мы можем играться как хотим.

Код:
Legit* LA= new Legit();
Rage* RA= new Rage();

AimBot* AMb[2];
AMb[0] = LA;
AMb[1] = RA;
for (int i = 0; i < 2; i++)
  AMb[i]->DoAimBot(mePlayer, pEngine, cmd);

Главное это то,что такие методы реализаций очень сильно упрощают работу с большими проектами,где есть очень много одинаковых функций,но работающих немного по-другому.

И,естественно,аимы взяты лишь для примера и демонстрации.

В общем-то,это все.Спасибо за внимание.​
неплохая идея. надо будет тоже такое запилить.
 
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2016
Сообщения
140
Реакции[?]
60
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
У тебя своя точка зрения,у меня своя.
Я считаю,что лучше держать общий абстрактный класс виртуализированных функций ,где будут объявлены методы и функции,которые я использую в разных классах и файлах,нежели чем делать по 500 строк объявлений.
можно же так
Код:
class LegitBot : public CAIM : public Singleton<LegitBot>
{
friend class Singleton<LegitBot>;
LegitBot ();
~LegitBot ();
}
 
GDPR_Anonymous
Пользователь
Статус
Оффлайн
Регистрация
17 Фев 2017
Сообщения
362
Реакции[?]
133
Поинты[?]
0
Последнее редактирование:
alive forever
Забаненный
Статус
Оффлайн
Регистрация
21 Июн 2017
Сообщения
663
Реакции[?]
400
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
можно же так
Код:
class LegitBot : public CAIM : public Singleton<LegitBot>
{
friend class Singleton<LegitBot>;
LegitBot ();
~LegitBot ();
}
льзя,но я сделал так,как сделал
 
вот это напрягает, а так, действительно хоть что-то новое.
Определять можешь как хочешь,я показал пример использования
 
Я лучше тебя
Участник
Статус
Оффлайн
Регистрация
31 Июл 2017
Сообщения
383
Реакции[?]
448
Поинты[?]
1K
можно же так
Код:
class LegitBot : public CAIM : public Singleton<LegitBot>
{
friend class Singleton<LegitBot>;
LegitBot ();
~LegitBot ();
}
я не могу понять, зачем под каждую функцию отдельный класс/синглтон делать? какой инвалид такую моду задал?
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
991
Реакции[?]
1,209
Поинты[?]
3K
я не могу понять, зачем под каждую функцию отдельный класс/синглтон делать? какой инвалид такую моду задал?
конкретно по теме игры: это глупо, так как синглтон дает нам только связность экземпляров.
По другим решениям.... я тут не видел еще проектов или кода, где синглтон действительно пригодился бы...
ЗЫ: самое реальное использование данной конструкции я вижу только в легировании ошибок проекта, либо в хранении и работе конфигураций программы, что реализовать пользователи данного портала неспособны еще(без обид и не переходя на личности).
 
midnight.im
Администратор
Статус
Оффлайн
Регистрация
1 Июл 2015
Сообщения
1,648
Реакции[?]
2,172
Поинты[?]
162K
мммм, красиво мутишь фраерок. а delete кто делать будет? или утечка памяти тебя не беспокоит?
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
991
Реакции[?]
1,209
Поинты[?]
3K
мммм, красиво мутишь фраерок. а delete кто делать будет? или утечка памяти тебя не беспокоит?
думаю тут создаются глобальные указатели, а при таком утечки не будет. единственное если на выходе не освободить память будет просто занятый участок, хотя операции new поддерживают автоматическое очищение памяти при вызове деструктора(если он нормально описан)
 
midnight.im
Администратор
Статус
Оффлайн
Регистрация
1 Июл 2015
Сообщения
1,648
Реакции[?]
2,172
Поинты[?]
162K
думаю тут создаются глобальные указатели, а при таком утечки не будет. единственное если на выходе не освободить память будет просто занятый участок, хотя операции new поддерживают автоматическое очищение памяти при вызове деструктора(если он нормально описан)
Если это глобально тогда да. Но если это например в хуке, так еще и нет правильного деструктора то ничего хорошего не сулит
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
991
Реакции[?]
1,209
Поинты[?]
3K
Если это глобально тогда да. Но если это например в хуке, так еще и нет правильного деструктора то ничего хорошего не сулит
если это в хуке(что по сути в высокоинтерационном цикле ), то это финиш))
даже учитывая, что объект будет создаваться на входе и очищаться на выходе итерации все равно дичь получается.
 
Сверху Снизу