#include <amxmodx>
new Trie:wpn_loaded, Trie:wpn_names
public plugin_precache()
{
new g_mdl_Name[64], g_mdl_Dir[32]
new i_Dir
formatex(g_mdl_Dir, charsmax(g_mdl_Dir), "models/weapons")
//директория с нашими моделями "models/weapons"
i_Dir = open_dir(g_mdl_Dir, g_mdl_Name, charsmax(g_mdl_Name))
if(i_Dir)
{
wpn_loaded = TrieCreate() //все найденные и загруженные имена моделей и путь до них
wpn_names = TrieCreate() //алисас оружия и его полное название
do
{
if (g_mdl_Name[0] == '.')
continue
if (containi(g_mdl_Name, ".mdl") != -1)
{
static wpn_short_Name[3][32], wpn_full_Name[32]
ExplodeString(wpn_short_Name, 3, 64, g_mdl_Name, '_')
strtok(wpn_short_Name[2], wpn_short_Name[0], charsmax(wpn_short_Name[]), wpn_short_Name[1], charsmax(wpn_short_Name[]), '.')
formatex(wpn_full_Name, charsmax(wpn_full_Name), "weapon_%s", wpn_short_Name[0])
static models_path[64]
formatex(models_path, charsmax(models_path), "%s/%s", g_mdl_Dir, g_mdl_Name)
precache_model(models_path)
TrieSetString(wpn_loaded, g_mdl_Name, models_path)
// все загруженные модели в формате:
//const key[]= gold_p_awp.mdl, const any:buffer[]= models/weapons/gold_p_awp.mdl
if(!TrieKeyExists(wpn_names, wpn_short_Name[0]))
//проверяем, нет ли уже такого оружия.. нам, ведь, не нужно создавать десяток Ham_Item_Deploy для каждого скина)))
{
//на выходе имеем:
//параметр: g_mdl_Name wpn_short_Name[0] wpn_full_Name models_path
//результат: gold_p_awp.mdl awp weapon_awp models/weapons/gold_p_awp.mdl
RegisterHam(Ham_Item_Deploy, wpn_full_Name, "deploy_weapon", 1) // пример использования
TrieSetString(wpn_names, wpn_short_Name[0], wpn_full_Name)
//имена моделей в формате const key[]= awp, const any:buffer[]= weapon_awp
}
}
}
while (next_file(i_Dir, g_mdl_Name, charsmax(g_mdl_Name)))
}
}
// благодарность за сток https://forums.alliedmods.net/showpost.php?p=538853&postcount=9
stock ExplodeString( Output[][], Max, Size, Input[], Delimiter )
{
new Idx, l = strlen(Input), Len
do Len += (1 + copyc( Output[Idx], Size, Input[Len], Delimiter))
while( (Len < l) && (++Idx < Max))
return Idx
}