Начинающий
-
Автор темы
- #1
Не знаю кому это надо но когда играеш прикольно.
1)Получаем указатель на обьект класса SSystemGlobalEnvironment.
2)Получаем указатель на I3Dengine.
3)Получаем указатель на класс ITimeOfDay, в классе I3DEngine, с помощью вызова нужной функции - которая и вернет нам указатель на нужный класс.
4)Ищем функция в классе ITimeOfDay, ITimeOfDay->SetTime(float fHour, bool bForceUpdate = false).
И так - Под конец ваш код с восстановленными классами должен выглядеть примерно так:
1)Получаем указатель на обьект класса SSystemGlobalEnvironment.
Ищем - ai_CompatibilityMode, переходим по найденному, жмем x,переходим по первой перекрест ссылке.
Видим-
v28 = (*(__int64 (__fastcall **)(_QWORD, char *))(**(_QWORD **)(qword_141EAEF98 + 200) + 184i64))(
*(_QWORD *)(qword_141EAEF98 + 200), SSystemGlobalEnvironment = 0x141EAEF98;
aAiCompatibilit);
Видим-
v28 = (*(__int64 (__fastcall **)(_QWORD, char *))(**(_QWORD **)(qword_141EAEF98 + 200) + 184i64))(
*(_QWORD *)(qword_141EAEF98 + 200), SSystemGlobalEnvironment = 0x141EAEF98;
aAiCompatibilit);
Ищем I3DEngine;
1)Поиск SunShafts_Active;
2)жмем x, переходим по 1 ссылке,нажимаем f5
3)Поднимаемся в самый вверх функции и видим такое:
4)
v4 = (__m128)LODWORD(dword_141A8B988);
v5 = *(_QWORD *)(SSystemGlobalEnvironment + 72);
v6 = *(_QWORD *)(SSystemGlobalEnvironment + 256); 256 переводим в hex и получаем 256 to hex = 0x100;
1)Поиск SunShafts_Active;
2)жмем x, переходим по 1 ссылке,нажимаем f5
3)Поднимаемся в самый вверх функции и видим такое:
4)
v4 = (__m128)LODWORD(dword_141A8B988);
v5 = *(_QWORD *)(SSystemGlobalEnvironment + 72);
v6 = *(_QWORD *)(SSystemGlobalEnvironment + 256); 256 переводим в hex и получаем 256 to hex = 0x100;
1)Find -> e_TimeOfDaySpeed;
2)
if ( v39 > (float)(v40 + dword_141A8D130) || v39 < (float)(v40 - dword_141A8D130) )
{
v41 = (_QWORD *)(*(__int64 (__fastcall **)(_QWORD))(**(_QWORD **)(SSGE + 0x100) + 1528i64))(*(_QWORD *)(SSGE + 0x100)); ----->1528 / 8 = 191 индекс функции
LOBYTE(v42) = 1;
(*(void (__fastcall **)(_QWORD *, _QWORD, __int64))(*v41 + 48i64))(v41, *v41, v42);
v43 = (*(__int64 (__fastcall **)(_QWORD, char *))(**(_QWORD **)(SSGE + 200) + 184i64))(
*(_QWORD *)(SSGE + 200),
aETimeofdayspee);
if ( v43 )
(*(void (__fastcall **)(__int64))(*(_QWORD *)v43 + 56i64))(v43);
}
2)
if ( v39 > (float)(v40 + dword_141A8D130) || v39 < (float)(v40 - dword_141A8D130) )
{
v41 = (_QWORD *)(*(__int64 (__fastcall **)(_QWORD))(**(_QWORD **)(SSGE + 0x100) + 1528i64))(*(_QWORD *)(SSGE + 0x100)); ----->1528 / 8 = 191 индекс функции
LOBYTE(v42) = 1;
(*(void (__fastcall **)(_QWORD *, _QWORD, __int64))(*v41 + 48i64))(v41, *v41, v42);
v43 = (*(__int64 (__fastcall **)(_QWORD, char *))(**(_QWORD **)(SSGE + 200) + 184i64))(
*(_QWORD *)(SSGE + 200),
aETimeofdayspee);
if ( v43 )
(*(void (__fastcall **)(__int64))(*(_QWORD *)v43 + 56i64))(v43);
}
1)Find -> e_TimeOfDaySpeed;
2)
if ( v39 > (float)(v40 + dword_141A8D130) || v39 < (float)(v40 - dword_141A8D130) )
{
v41 = (_QWORD *)(*(__int64 (__fastcall **)(_QWORD))(**(_QWORD **)(SSGE + 0x100) + 1528i64))(*(_QWORD *)(SSGE + 0x100)); ----->1528 / 8 = 191
LOBYTE(v42) = 1;
(*(void (__fastcall **)(_QWORD *, _QWORD, __int64))(*v41 + 48i64))(v41, *v41, v42); -----> 48 / 8 = 6;
v43 = (*(__int64 (__fastcall **)(_QWORD, char *))(**(_QWORD **)(SSGE + 200) + 184i64))(
*(_QWORD *)(SSGE + 200),
aETimeofdayspee);
if ( v43 )
(*(void (__fastcall **)(__int64))(*(_QWORD *)v43 + 56i64))(v43);
}
2)
if ( v39 > (float)(v40 + dword_141A8D130) || v39 < (float)(v40 - dword_141A8D130) )
{
v41 = (_QWORD *)(*(__int64 (__fastcall **)(_QWORD))(**(_QWORD **)(SSGE + 0x100) + 1528i64))(*(_QWORD *)(SSGE + 0x100)); ----->1528 / 8 = 191
LOBYTE(v42) = 1;
(*(void (__fastcall **)(_QWORD *, _QWORD, __int64))(*v41 + 48i64))(v41, *v41, v42); -----> 48 / 8 = 6;
v43 = (*(__int64 (__fastcall **)(_QWORD, char *))(**(_QWORD **)(SSGE + 200) + 184i64))(
*(_QWORD *)(SSGE + 200),
aETimeofdayspee);
if ( v43 )
(*(void (__fastcall **)(__int64))(*(_QWORD *)v43 + 56i64))(v43);
}
И так - Под конец ваш код с восстановленными классами должен выглядеть примерно так:
Код:
class SSystemGlobalEnvironment;
class I3DEngine;
class ITimeOfDay;
class SSystemGlobalEnvironment
{
public:
I3DEngine* GetI3DEngine() { return *(I3DEngine**)((DWORD64)this + 0x100); }
static SSystemGlobalEnvironment* Singleton()
{
return *(SSystemGlobalEnvironment**)0x141EAEF98;
}
};
class I3DEngine
{
public:
ITimeOfDay* GetITimeOfDay()
{
return VIRTUAL<ITimeOfDay* (__thiscall*)(PVOID)>(this, 191)(this);
}
}
class ITimeOfDay
{
public:
void SetTime(float fHour, bool bForceUpdate = false)
{
return VIRTUAL<void(__thiscall*)(PVOID, float, bool)>(this, 6)(this, fHour, bForceUpdate);
}
};
void TimeHack(float time,bool bForceUpdate)
{
if (!SSystemGlobalEnvironment::Singleton()) return 0;
if (!SSystemGlobalEnvironment::Singleton()->GetI3DEngine()) return 0;
if (!SSystemGlobalEnvironment::Singleton()->GetI3DEngine()->GetITimeOfDay()) return 0;
SSystemGlobalEnvironment::Singleton()->GetI3DEngine()->GetITimeOfDay()->SetTime(time, bForceUpdate);
}