Как отучить халфу вылетать при ненайденой модели
  
  
Как всем известно, халфа обожает вылетать, если вдруг она не нашла какой-либо модели.
  Мало того, что она вылетает, так при этом еще ехидно заявляет, что модель не найдена - нажмите ок.
  Я конечно понимаю, что 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     |