X-Git-Url: http://git.megabrutal.com/?p=pmprecache.git;a=blobdiff_plain;f=dllapi.cpp;h=942fc91d11d03840fbe42b52dbcaaf11ffed954e;hp=0c8f15e6555bfdeda725239177fa02ac2ab9f7b0;hb=HEAD;hpb=12c0b4b1f55307e989392110588fb6bb04a0d866 diff --git a/dllapi.cpp b/dllapi.cpp index 0c8f15e..942fc91 100644 --- a/dllapi.cpp +++ b/dllapi.cpp @@ -32,8 +32,6 @@ * */ -#include - #include #include @@ -55,6 +53,7 @@ int gmsgSayText; typedef struct { char model[MAXLENGTH_MODELPATH]; char bmp[MAXLENGTH_MODELPATH]; + char tmdl[MAXLENGTH_MODELPATH]; } precache_paths; typedef struct { @@ -67,10 +66,8 @@ typedef struct { precache_entry precache_list[MAX_PRECACHE_COUNT]; unsigned short int precache_count = 0; -bool fileExists(const char* path) { - char fullpath[256]; - snprintf(fullpath, sizeof(fullpath), "%s/%s", &gGamedir[0], path); - return access(fullpath, R_OK) == 0; +bool fileExists(char* path) { + return g_engfuncs.pfnGetFileSize(path) != -1; } bool addPrecacheEntry(const char* playername, const char* model) { @@ -86,9 +83,21 @@ bool addPrecacheEntry(const char* playername, const char* model) { snprintf(precache_list[i].paths.model, MAXLENGTH_MODELPATH, "models/player/%s/%s.mdl", model, model); snprintf(precache_list[i].paths.bmp, MAXLENGTH_MODELPATH, "models/player/%s/%s.bmp", model, model); + snprintf(precache_list[i].paths.tmdl, MAXLENGTH_MODELPATH, "models/player/%s/%st.mdl", model, model); + + // Check if BMP exists + if (!fileExists(precache_list[i].paths.bmp)) + precache_list[i].paths.bmp[0] = 0; + + // Check if t.mdl exists, also try alternative path + if (!fileExists(precache_list[i].paths.tmdl)) { + snprintf(precache_list[i].paths.tmdl, MAXLENGTH_MODELPATH, "models/player/%s/%sT.mdl", model, model); + if (!fileExists(precache_list[i].paths.tmdl)) + precache_list[i].paths.tmdl[0] = 0; + } precache_count++; - LOG_MESSAGE(PLID, "Precache entry %d: playername=\"%s\" modelname=\"%s\" paths.model=\"%s\" paths.bmp=\"%s\"", i, precache_list[i].playername, precache_list[i].modelname, precache_list[i].paths.model, precache_list[i].paths.bmp); + LOG_MESSAGE(PLID, "Precache entry %d: playername=\"%s\" modelname=\"%s\" paths.model=\"%s\" paths.bmp=\"%s\" paths.tmdl=\"%s\"", i, precache_list[i].playername, precache_list[i].modelname, precache_list[i].paths.model, precache_list[i].paths.bmp, precache_list[i].paths.tmdl); return true; } else @@ -107,7 +116,7 @@ void ClientPutInServer( edict_t *pEntity ) { if (addPrecacheEntry( playername, modelname )) LOG_MESSAGE(PLID, "Added model %s to precache list", modelname); else - LOG_MESSAGE(PLID, "Model %s will not be precached - reduntant or precache list is full", modelname); + LOG_MESSAGE(PLID, "Model %s is not added - reduntant or precache list is full", modelname); } else { LOG_MESSAGE(PLID, "Unable to precache due to FILE MISSING: %s!", modelfile); @@ -117,17 +126,33 @@ void ClientPutInServer( edict_t *pEntity ) { } void ServerActivate(edict_t *pEdictList, int edictCount, int clientMax) { + bool hasBMP, hasTMDL; LOG_MESSAGE(PLID, "Precaching %d player models", precache_count); for (int i = 0; i < precache_count; i++) { - LOG_MESSAGE(PLID, "Precaching model: %s (contributed by %s)", precache_list[i].modelname, precache_list[i].playername); - g_engfuncs.pfnPrecacheModel( precache_list[i].paths.model ); - if (fileExists( precache_list[i].paths.bmp )) - { - LOG_MESSAGE(PLID, "Precaching bmp: %s", precache_list[i].paths.bmp); - g_engfuncs.pfnPrecacheGeneric( precache_list[i].paths.bmp ); - } + hasBMP = strlen(precache_list[i].paths.bmp) != 0; + hasTMDL = strlen(precache_list[i].paths.tmdl) != 0; + + const char* indicator; + if (hasBMP && hasTMDL) + indicator = "(with bmp+tmdl)"; + else if (hasBMP) + indicator = "(with bmp)"; + else if (hasTMDL) + indicator = "(with tmdl)"; else - LOG_MESSAGE(PLID, "File not found: %s", precache_list[i].paths.bmp); + indicator = "(without bmp)"; + + LOG_MESSAGE(PLID, "Precaching model %s: %s (contributed by %s)", + indicator, + precache_list[i].modelname, precache_list[i].playername); + + g_engfuncs.pfnPrecacheModel(precache_list[i].paths.model); + + if (hasBMP) + g_engfuncs.pfnPrecacheGeneric(precache_list[i].paths.bmp); + + if (hasTMDL) + g_engfuncs.pfnPrecacheGeneric(precache_list[i].paths.tmdl); } precache_count = 0; RETURN_META(MRES_HANDLED);