Вопросы по поиску функций.

Чит на Warface ProjectX, подробности в ЛС!
Пользователь
Статус
Оффлайн
Регистрация
30 Ноя 2017
Сообщения
215
Реакции[?]
38
Поинты[?]
0
Как искать и можно ли использовать getrawid заместо этого?
C++:
int GetID() { return *(int*)((DWORD)this + 0x14); }
Как искать это

C++:
virtual IActor* GetActor(EntityId entityId);
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
999
Реакции[?]
1,209
Поинты[?]
3K
выводишь оба значения и если они сходятся, то можно использовать.
GetID из какого класса вызывается?
 
Чит на Warface ProjectX, подробности в ЛС!
Пользователь
Статус
Оффлайн
Регистрация
30 Ноя 2017
Сообщения
215
Реакции[?]
38
Поинты[?]
0
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
999
Реакции[?]
1,209
Поинты[?]
3K
Код:
if (IGameFramework* pIGameFramework = SSystemGlobalEnvironment::Singleton()->pGame()->GetIGameFramework())
    {
        IActor*  LocalActor;
        if (pIGameFramework->GetClientActor(&LocalActor))
        {
        if (IActorSystem* pActorSystem = pIGameFramework->GetIActorSystem())
            {
                IActorIterator * pIActorIterator = nullptr;
                pActorSystem->CreateActorIterator(&pIActorIterator);
                if (!pIActorIterator)
                    return;
        
                for (; IActor* pActor = pIActorIterator->Next();)
                {
                    if (!pActor)
                        continue;
                    if(pActor == LocalActor)   
                        continue;
                    //todo
                }
            }
        }
    }
Код:
class IGameFramework
{
public:
    bool                GetClientActor(IActor** pActor) {
        return vCall<bool(__thiscall*)(PVOID, IActor**)>(this, 568/4)(this, pActor);
    }
    class IActorSystem* GetIActorSystem() {
        return  *(IActorSystem**)((DWORD)this + 0x4B0);
    }
};
class IActorIterator
{
public:
    //sv_requireinputdevice
    //for ( i = (*(int (**)(void))(*(_DWORD *)a3 + Next))(); i; i = (*(int (**)(void))(*(_DWORD *)a3 + Next))())
    virtual void    Function0();
    virtual IActor* Next();
    virtual void    IncreaseIndex();
    virtual int     Count();
};
class IActorSystem
{
public:
    IActor* GetActor(unsigned int entityId) {
        return vCall<IActor* (__thiscall*)(PVOID, unsigned int)>(this, 15)(this, entityId);
    }
    void    CreateActorIterator(IActorIterator** ActorIterator) {
        return vCall<void(__thiscall*)(PVOID, IActorIterator**)>(this, 18)(this, ActorIterator);
    }
};
 
Чит на Warface ProjectX, подробности в ЛС!
Пользователь
Статус
Оффлайн
Регистрация
30 Ноя 2017
Сообщения
215
Реакции[?]
38
Поинты[?]
0
Код:
if (IGameFramework* pIGameFramework = SSystemGlobalEnvironment::Singleton()->pGame()->GetIGameFramework())
    {
        IActor*  LocalActor;
        if (pIGameFramework->GetClientActor(&LocalActor))
        {
        if (IActorSystem* pActorSystem = pIGameFramework->GetIActorSystem())
            {
                IActorIterator * pIActorIterator = nullptr;
                pActorSystem->CreateActorIterator(&pIActorIterator);
                if (!pIActorIterator)
                    return;
      
                for (; IActor* pActor = pIActorIterator->Next();)
                {
                    if (!pActor)
                        continue;
                    if(pActor == LocalActor) 
                        continue;
                    //todo
                }
            }
        }
    }
Код:
class IGameFramework
{
public:
    bool                GetClientActor(IActor** pActor) {
        return vCall<bool(__thiscall*)(PVOID, IActor**)>(this, 568/4)(this, pActor);
    }
    class IActorSystem* GetIActorSystem() {
        return  *(IActorSystem**)((DWORD)this + 0x4B0);
    }
};
class IActorIterator
{
public:
    //sv_requireinputdevice
    //for ( i = (*(int (**)(void))(*(_DWORD *)a3 + Next))(); i; i = (*(int (**)(void))(*(_DWORD *)a3 + Next))())
    virtual void    Function0();
    virtual IActor* Next();
    virtual void    IncreaseIndex();
    virtual int     Count();
};
class IActorSystem
{
public:
    IActor* GetActor(unsigned int entityId) {
        return vCall<IActor* (__thiscall*)(PVOID, unsigned int)>(this, 15)(this, entityId);
    }
    void    CreateActorIterator(IActorIterator** ActorIterator) {
        return vCall<void(__thiscall*)(PVOID, IActorIterator**)>(this, 18)(this, ActorIterator);
    }
};

Спасибо конечно, но у меня есть актуальные классы для ру, я делаю на пиратку и по этому мне интересно именно как искать эти две функции, потому что на них подвис)

Ща попробую сделать так же
 
Последнее редактирование:
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
999
Реакции[?]
1,209
Поинты[?]
3K
Спасибо конечно, но у меня есть актуальные классы для ру, я делаю на пиратку и по этому мне интересно именно как искать эти две функции, потому что на них подвис)

Ща попробую сделать так же
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Чит на Warface ProjectX, подробности в ЛС!
Пользователь
Статус
Оффлайн
Регистрация
30 Ноя 2017
Сообщения
215
Реакции[?]
38
Поинты[?]
0
Всё равно не нашел
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
999
Реакции[?]
1,209
Поинты[?]
3K
Всё равно не нашел
Что бы было проще:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Код:
int CScriptBind_ItemSystem::SetActorItem(IFunctionHandler* pH, ScriptHandle actorId, ScriptHandle itemId, bool keepHistory)
{
    IActor* pActor = m_pGameFramework->GetIActorSystem()->GetActor((EntityId)actorId.n);
    if (pActor)
        m_pItemSystem->SetActorItem(pActor, (EntityId)itemId.n, keepHistory);

    return pH->EndFunction();
}

//------------------------------------------------------------------------
int CScriptBind_ItemSystem::SetActorItemByName(IFunctionHandler* pH, ScriptHandle actorId, const char* name, bool keepHistory)
{
    IActor* pActor = m_pGameFramework->GetIActorSystem()->GetActor((EntityId)actorId.n);
    if (pActor)
        m_pItemSystem->SetActorItem(pActor, name, keepHistory);

    return pH->EndFunction();
}
Это две функции, в которых вызывается нужная тебе функция.
функции CScriptBind_* можно найти по имени как строковый литерал, что мы и делаем: тупо вбиваем имя: SetActorItem или SetActorItemByName


Жмем F5 и переходим по адресу согласования вызова:


Так как обе функции +\- одинаковые по строению алгоритма то увидим такое:
Код:
int __thiscall sub_768780(int this, int a2, int a3, int a4, int a5)
{
  int v5; // esi@1
  int v6; // eax@1
  int v7; // eax@1

  v5 = this;
  v6 = (*(int (**)(void))(**(_DWORD **)(this + 84) + 100))();
  v7 = (*(int (__thiscall **)(int, int))(*(_DWORD *)v6 + 60))(v6, a3);
  if ( v7 )
    (*(void (__thiscall **)(int, int, int, int))(*(_DWORD *)(*(_DWORD *)(v5 + 80) + 8) + 148))(
      *(_DWORD *)(v5 + 80) + 8,
      v7,
      a4,
      a5);
  return (*(int (**)(void))(*(_DWORD *)a2 + 44))();
}
просто сопоставив код(длгика и наблюдение) получаем:

GetActor находится на позиции 60/4 (на 4 делим из-за специфики размерности виртуальной таблицы)

все остальное примерно по такому же принципу
 
Чит на Warface ProjectX, подробности в ЛС!
Пользователь
Статус
Оффлайн
Регистрация
30 Ноя 2017
Сообщения
215
Реакции[?]
38
Поинты[?]
0
Да я уже нашел, он на 15 как был 4 года назад так и остался, ну спасибо за разъяснение)
Кстати GetRawID это и есть GetID в общем если вдруг кому интересно)
 
Сверху Снизу