Saturday, 18-01-2025, 9:37 AM

Logged in as Guest | Group "Guests"Welcome Guest | RSS
 
[ New messages · Members · Forum rules · Search · RSS ]
  • Page 1 of 1
  • 1
[Кодиране] Run HL when - mdl not found
HorusDate: Thursday, 24-12-2020, 8:34 PM | Message # 1
Generalissimo
Group: Administrators
Messages: 14
Awards: 0
Reputation: 0
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


 
  • Page 1 of 1
  • 1
Search:

Copyright MyCorp © 2025 Powered by uCoz