Re: Precache models
Quote:
Originally Posted by Natsheh
(Post 2613404)
Check my jailbreak mod (jailbreak_main.sma) or any other Models plugin.
Here is a stock for file reading with a format.
PHP Code:
stock get_file_keyvalue(const file[], const cata[], const key[], value[], len) { static sFile[128], fp; formatex(sFile, charsmax(sFile), "%s/%s", CONFIGS_DIR, file); fp = fopen(sFile, "a+"); if(!fp) { set_fail_state("Error opening the file!") return 0; } static sBuffer[256], szCata[64], szKey[64], key_found, cata_found, line, bool:key_update; key_found = -1; cata_found = -1; line = -1; key_update = false; while(!feof(fp)) { line ++; fgets(fp, sBuffer, charsmax(sBuffer)); trim(sBuffer); if(!sBuffer[0] || strlen(sBuffer) <= 3 || sBuffer[0] == ';' || (sBuffer[0] == '/' && sBuffer[1] == '/')) continue; if(sBuffer[0] == '[' && cata_found == -1 && contain(sBuffer[1], "]") > -1) { copyc(szCata, charsmax(szCata), sBuffer[1], ']'); if(equali(szCata, cata)) { cata_found = line; } continue; } if(cata_found > -1 && key_found == -1) { strtok(sBuffer, szKey, charsmax(szKey), sBuffer, charsmax(sBuffer), '=') trim(szKey); trim(sBuffer); remove_quotes(szKey); remove_quotes(sBuffer); if(equali(szKey, key)) { key_found = line; if(!sBuffer[0]) { key_update = true; break; } copy(value, len, sBuffer) break; } } } if(cata_found == -1) { formatex(szCata, charsmax(szCata), "[%s]", cata) fputc(fp, '^n'); fputs(fp, szCata); fputc(fp, '^n'); formatex(sBuffer, charsmax(sBuffer), "%s = ^"%s^"", key, value) fputs(fp, sBuffer); fputc(fp, '^n'); } if((key_found == -1 && cata_found > -1) || key_update == true) { static sFile2[128], fp2; formatex(sFile2, charsmax(sFile2), "%s/2_%s", CONFIGS_DIR, file); fp2 = fopen(sFile2, "wt"); if(!fp2) { set_fail_state("Error opening the file!") return 0; } line = -1; fseek(fp, 0, SEEK_SET); while((fgets(fp, sBuffer, charsmax(sBuffer)) > 0)) { line ++; trim(sBuffer); if(key_update == true) { if(key_found == line) { formatex(sBuffer, charsmax(sBuffer), "%s = ^"%s^"", key, value) } } else if(cata_found == line) { formatex(szCata, charsmax(szCata), "[%s]", cata) fputs(fp2, szCata); fputc(fp2, '^n'); formatex(sBuffer, charsmax(sBuffer), "%s = ^"%s^"", key, value) } fputs(fp2, sBuffer); fputc(fp2, '^n'); } fclose(fp); fclose(fp2); delete_file(sFile); if(!rename_file(sFile2, sFile,1)) delete_file(sFile2); return 1; } fclose(fp); return 1; }
Example getting class model, class name is rabbit which its the category.
PHP Code:
new def_model[32] = "terror";
public plugin_precache() {
get_file_keyvalue("classes.ini", "RABBIT", "CLASS_MODEL", def_model, charsmax(def_model)) // i didnt make def_model array constant because it will be overwritten if the key value has a value in the file.
new szString[64]; formatex(szString, charsmax(szString), "models/player/%s/%s.mdl", def_model, def_model) precache_model(szString); }
Example i wrote doesnt support models with T file.
|
Default code of jbe engine are this:
Code:
jbe_player_models_read_file(szCfgFile[])
{
new szBuffer[128], iLine, iLen, i;
while(read_file(szCfgFile, iLine++, szBuffer, charsmax(szBuffer), iLen))
{
if(!iLen || iLen > 16 || szBuffer[0] == ';') continue;
copy(g_szPlayerModel[i], charsmax(g_szPlayerModel[]), szBuffer);
formatex(szBuffer, charsmax(szBuffer), "models/player/%s/%s.mdl", g_szPlayerModel[i], g_szPlayerModel[i]);
engfunc(EngFunc_PrecacheModel, szBuffer);
if(++i >= sizeof(g_szPlayerModel)) break;
}
}
Code:
files_precache()
{
new szCfgDir[64], szCfgFile[128];
get_localinfo("amxx_configsdir", szCfgDir, charsmax(szCfgDir));
formatex(szCfgFile, charsmax(szCfgFile), "%s/jb_engine/player_models.ini", szCfgDir);
switch(file_exists(szCfgFile))
{
case 0: log_to_file("%s/jb_engine/log_error.log", "File ^"%s^" not found!", szCfgDir, szCfgFile);
case 1: jbe_player_models_read_file(szCfgFile);
}
}
Ini file:
Code:
; prisoner
jbe_prisoner
; guard
sas
; chief
jbe_chief
; footballer
jbe_footballer
And i just make code little for me easy :) But it's gonna make error. I make this way for sounds too(but they work perfect).
|