Horus | Date: Thursday, 24-12-2020, 8:34 PM | Message # 1 |
Generalissimo
Group: Administrators
Messages: 14
Status: Offline
| Автор: G-Cont
Както всички знаят, HL обича да бъгва, ако изведнъж не намери модел.Той не само се срива, но и саркастично заявява, че моделът не е намерен.
Разбира се, разбирам, че е от 98-ма година и всичко това, но дори първият Quake не се отличаваше с такова подло нещо. Отдавна съм измъчван от въпроса как да отуча HL от такова поведение, в резултат на което се роди този tutorial. Отворете util.h и добавете тези редове някъде в края:
Code void UTIL_SetModel( edict_t *e, const char *model ); int UTIL_PrecacheModel( char* s );
Сега отворете util.cpp и добавете и тези функции до края:
C++ Source Code:Code void UTIL_SetModel(edict_t *e, const char *model) { if (!model || !*model) //model not specified ??? { ALERT(at_console, "Error! Model not specified\n"); PRECACHE_MODEL("models/error.mdl"); SET_MODEL(e, "models/error.mdl"); return; }
int length; const char *pFile = (char*)LOAD_FILE_FOR_ME((char*)model, &length);
if (pFile && length) { FREE_FILE((char *)pFile); PRECACHE_MODEL((char*)model); SET_MODEL(e, model); } else //invalid path ? { FREE_FILE((char *)pFile); ALERT(at_console, "Error! Model %s not found\n", model); PRECACHE_MODEL("models/error.mdl"); SET_MODEL(e, "models/error.mdl"); return; } }
int UTIL_PrecacheModel(char* s) { if (FStringNull(MAKE_STRING(s))) //model not specified ??? return NULL; int length; int model; char *pFile = (char*)LOAD_FILE_FOR_ME((char*)s, &length); if (pFile && length) { FREE_FILE(pFile); model = PRECACHE_MODEL((char*)s); } else { FREE_FILE((char *)pFile); model = PRECACHE_MODEL("models/error.mdl"); } return model;
}
Тези функции изпълняват куп полезни неща наведнъж - първо, те ви позволяват да търсите файл, както в модната папка, така и в папката на valve и ако файлът (модел или спрайт) не бъде намерен, UTIL_SetModel просто ще продължи да зарежда картата.На второ място, параметрите на функциите съвпадат с параметрите SET_MODEL и PRECACHE_MODEL, така че за да свържете нови функции, просто трябва да замените всички думи SET_MODEL, намерени във вашия проект, с UTIL_SetModel, а всички PRECACHE_MODEL с UTIL_PrecacheModel.
https://u.to/_tKgGg
|
|
| |