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

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

Как искать это

C++:
Expand Collapse Copy
virtual IActor* GetActor(EntityId entityId);
 
Код:
Expand Collapse Copy
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
                }
            }
        }
    }

Код:
Expand Collapse Copy
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);
    }
};
 
Код:
Expand Collapse Copy
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
                }
            }
        }
    }

Код:
Expand Collapse Copy
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);
    }
};


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

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

Ща попробую сделать так же
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Всё равно не нашел
Что бы было проще:
Пожалуйста, авторизуйтесь для просмотра ссылки.

Код:
Expand Collapse Copy
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
WQY99dwi.png


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


Так как обе функции +\- одинаковые по строению алгоритма то увидим такое:
Код:
Expand Collapse Copy
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))();
}

просто сопоставив код(длгика и наблюдение) получаем:
x3aYrOUc.png

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

все остальное примерно по такому же принципу
 
Да я уже нашел, он на 15 как был 4 года назад так и остался, ну спасибо за разъяснение)
Кстати GetRawID это и есть GetID в общем если вдруг кому интересно)
 
Назад
Сверху Снизу