Исходник Изменение материала на оружиях и тд и тп.

Начинающий
Статус
Оффлайн
Регистрация
26 Ноя 2018
Сообщения
57
Реакции[?]
18
Поинты[?]
0
Всем привет, хочу показать как менять материал на оружиях и тд и тп.
SPOILER- Дополняю материал(Поиск материалов).
Дополнил
CEntity::GetMaterial(...........);
IMaterial::GetName();

C++:
class SSystemGlobalEnvironment
{
public:
    I3DEngine* Get3DEngine() { return *(I3DEngine**)((uintptr_t)this + 0x100); }
    /*
    Ищем I3DEngine;
    1)Поиск SunShafts_Active;
    2)жмем x, переходим по 1 ссылке,нажимаем f5
    3)Поднимаемся в самый вверх функции и видим такое:
    4)
         v52 = *(_QWORD *)(SSystemGlobalEnvironment + 72);
         v63 = *(_QWORD *)(SSystemGlobalEnvironment + 256); 256 переводим в hex и получаем 256 to hex = 0x100;
    */
    static SSystemGlobalEnvironment* Singleton() { return *(SSystemGlobalEnvironment**)SystemGlobalEnvironment; }
};

class I3DEngine
{
public:
    IMaterialManager* GetMaterialManager()
    {
        return CallFunction<IMaterialManager* (__thiscall*)(PVOID)>(this, 0x450)(this);
    }
    /*
    Find->EntityLinks;
    One xref, 5f;
    205 string;
    code view->
    LABEL_53:
        v31 = v80;
        if ( v80 )
        {
          if ( *v80 )
          {
            v32 = (*(__int64 (__fastcall **)(_QWORD))(**(_QWORD **)(qword_141EF2480 + 0x100) + 0x450i64))(*(_QWORD *)(qword_141EF2480 + 0x100)); qword_141EF2480 + 256 + 1104 gEnv->I3DEngine->GetMaterialManager() <- 1104
            LOBYTE(v33) = 1;
            v34 = (*(__int64 (__fastcall **)(__int64, _BYTE *, __int64, _QWORD, _DWORD))(*(_QWORD *)v32 + 0x28i64))(
                    v32,
                    v31,
                    v33,
                    0i64,
                    0);
            if ( v34 )
              (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)v7 + 544i64))(v7, v34);
          }
        }
        v35 = a1[6];
        if ( v18 )
        {
    */
};


class IMaterialManager
{
public:
    IMaterial* LoadMaterial(const char* sMtName, bool bMakelfNotFound = true, bool bNonremovable = false, unsigned long nLoadingFlags = 0)
    {
        return CallFunction<IMaterial* (__thiscall*)(PVOID, const char*, bool, bool, unsigned long)>(this, 0x28)(this, sMtName, bMakelfNotFound, bNonremovable, nLoadingFlags);
    }
    /*
    Find->EntityLinks;
    One xref, 5f;
    205 string;
    code view->
    LABEL_53:
        v31 = v80;
        if ( v80 )
        {
          if ( *v80 )
          {
            v32 = (*(__int64 (__fastcall **)(_QWORD))(**(_QWORD **)(qword_141EF2480 + 0x100) + 0x450i64))(*(_QWORD *)(qword_141EF2480 + 0x100)); qword_141EF2480 + 256 + 1104
            LOBYTE(v33) = 1;
            v34 = (*(__int64 (__fastcall **)(__int64, _BYTE *, __int64, _QWORD, _DWORD))(*(_QWORD *)v32 + 0x28i64)) ----->( v32 + 40i) <---- 40 - LoadMaterial();
                    v32,
                    v31,
                    v33,
                    0i64,
                    0);
            if ( v34 )
              (*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)v7 + 544i64))(v7, v34);
          }
        }
        v35 = a1[6];
        if ( v18 )
        {
    */
};

class CEntity
{
public:
    void SetMaterial(IMaterial* pMaterial) { CallFunction<void(__fastcall*)(PVOID, IMaterial*)>(this, 0x220)(this, pMaterial); }
    IMaterial* GetMaterial() { return CallFunction<IMaterial* (__fastcall*)(PVOID64)>(this, 0x228)(this); } - Новое!!!
};
Теперь пишем код и всё работает.
CEntityIt * pEntIt = SSystemGlobalEnvironment::Singleton()->GetEntitySystem()->GetEntityIterator();
for (; CEntity * pEnt = pEntIt->Next();)
{
IMaterial* pMaterial = SSystemGlobalEnvironment::Singleton()->Get3DEngine()->GetMaterialManager()->LoadMaterial("Objects/effects/forcefield/materials/forcefield_act2_b.mtl");
if (pMaterial)
{
pEnt->SetMaterial(pMaterial);
}
}
};

class IMaterial
{
public:
const char* GetName() { return CallFunction<const char* (__fastcall*)(PVOID64)>(this, 0x30)(this); } -- Новое!
Find -> _can't_resolve_material_name_
one xref, 5f pseudocode
Видим такой код
________________________________________________________
else
{
v171 = *(_DWORD *)(v158 + 60);
v172 = aCanTResolveMat;
if ( v171 >= 0 && v171 < (int)((__int64)(a5[1] - *a5) >> 3) )
{
if ( v169 )
v172 = (char *)(*(__int64 (__fastcall **)(__int64))(*(_QWORD *)v169 + 48i64))(v169); <---------- 48 convert hex = 0x30;
else
v172 = &szAgent;
}
sub_1400D2DA0(aWarningRemoved, *(float *)(v158 + 36), *(float *)(v158 + 40), *(float *)(v158 + 44), v172);
(*(void (__fastcall **)(__int64))(*(_QWORD *)v163 + 88i64))(v163);
}
goto LABEL_221;
};

Можно менять и у других ентити материалы тоже так же,Хотите другой материал ищи его сами.
 
Последнее редактирование:
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Старая тема и кривой копипаст.
 
Начинающий
Статус
Оффлайн
Регистрация
26 Ноя 2018
Сообщения
57
Реакции[?]
18
Поинты[?]
0
Старая тема и кривой копипаст.
То что старая тема это да, но в сурсах warface я сам все вырыскивал и находил эти индексы функций так что не вижу сдесь копипаста вообще
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
То что старая тема это да, но в сурсах warface я сам все вырыскивал и находил эти индексы функций так что не вижу сдесь копипаста вообще
Сам находил - это хорошо.
Это было уже опубликовано.
 
Начинающий
Статус
Оффлайн
Регистрация
26 Ноя 2018
Сообщения
57
Реакции[?]
18
Поинты[?]
0
Сам находил - это хорошо.
Это было уже опубликовано.
Ну значит я слепой, ну да ладно все равно кому то будет полезно знать как находить это, если конечно этого нет
 
Energy Reload
Забаненный
Статус
Оффлайн
Регистрация
20 Авг 2017
Сообщения
1,206
Реакции[?]
330
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Начинающий
Статус
Оффлайн
Регистрация
26 Ноя 2018
Сообщения
57
Реакции[?]
18
Поинты[?]
0
Эксперт
Статус
Оффлайн
Регистрация
31 Авг 2018
Сообщения
1,792
Реакции[?]
1,073
Поинты[?]
29K
Стало интересно - есть ли в CryEngine что-то подобное MATERIAL_VAR_IGNOREZ из CS:GO для материалов?
 
Сверху Снизу