Как отучить халфу вылетать при ненайденой модели
Как всем известно, халфа обожает вылетать, если вдруг она не нашла какой-либо модели.
Мало того, что она вылетает, так при этом еще ехидно заявляет, что модель не найдена - нажмите ок.
Я конечно понимаю, что 98 год и все такое, но даже первый квейк не отличался столь мерзким нравом. Меня давно мучил вопрос, как бы отучить халфу от подобного поведения, в результате чего и появился на свет данный тутор :)
Откройте util.h и где-нибудь в конце добавьте вот эти строчки
void UTIL_SetModel( edict_t *e, const char *model ); int UTIL_PrecacheModel( char* s );
Теперь откройте util.cpp и тоже куда-нить в конец добавьте вот эти функции
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.
Моделька ошибки в аттаче. Наслаждайтесь :)
g-cont copyright 2004 Shambler Team |