Исходник ChangeTime(Меняем время суток в варфейсе)

Начинающий
Статус
Оффлайн
Регистрация
26 Ноя 2018
Сообщения
57
Реакции[?]
18
Поинты[?]
0
Не знаю кому это надо но когда играеш прикольно.
1)Получаем указатель на обьект класса SSystemGlobalEnvironment.
Ищем - ai_CompatibilityMode, переходим по найденному, жмем x,переходим по первой перекрест ссылке.
Видим-
v28 = (*(__int64 (__fastcall **)(_QWORD, char *))(**(_QWORD **)(qword_141EAEF98 + 200) + 184i64))(
*(_QWORD *)(qword_141EAEF98 + 200), SSystemGlobalEnvironment = 0x141EAEF98;
aAiCompatibilit);
2)Получаем указатель на I3Dengine.
Ищем 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;
3)Получаем указатель на класс ITimeOfDay, в классе I3DEngine, с помощью вызова нужной функции - которая и вернет нам указатель на нужный класс.
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);
}
4)Ищем функция в классе ITimeOfDay, ITimeOfDay->SetTime(float fHour, bool bForceUpdate = false).
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);
}

И так - Под конец ваш код с восстановленными классами должен выглядеть примерно так:
Код:
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);
}
 
pidjan
Пользователь
Статус
Оффлайн
Регистрация
10 Ноя 2020
Сообщения
526
Реакции[?]
148
Поинты[?]
1K
автор реально постарался, определено лайк.
 
Продам прострел стен Warface 10к руб!
Забаненный
Статус
Оффлайн
Регистрация
7 Авг 2018
Сообщения
308
Реакции[?]
106
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ну а смысл от этой функции?
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
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); }
C++:
void TimeHack(float time,bool bForceUpdate)
{
    I3DEngine*     GetI3DEngine=SSystemGlobalEnvironment::Singleton()->GetI3DEngine();
    if(!GetI3DEngine)return;
    
    ITimeOfDay* GetITimeOfDay=GetI3DEngine->GetITimeOfDay();
    if(!GetITimeOfDay)return;
    
    GetITimeOfDay->SetTime(time, bForceUpdate);
}
 
Сверху Снизу