Система которая считывает с ини файла:
"weapon_knife" "models/bla/bla.mdl"
weapon_knife может быть любым други, ak47 и т.д.
и каждую строку делает как индекс по которому в дальнейшем игрокам выдаются скины:
g_iHasWeapon[3][id] = true/false
Данная система работает корректно, но есть одно но, в ини файле есть много одинаковых класснеймов, тобишь weapon_knife 3 штуки, weapon_ak47 3 штуки и т.д, то система работает не корректно, и вот допустим, мне нужно отключить 2 остальных ножа и включить 3й.
g_iHasWeapon[2][id] = false
g_iHasWeapon[9][id] = false
g_iHasWeapon[20][id] = true
он включится, но если включить какой либо другой нож, тобишь:
g_iHasWeapon[20][id] = false
g_iHasWeapon[9][id] = false
g_iHasWeapon[2][id] = true
то он уже не включится, и заменится на обычный нож из кс, система не обрабатывает одинаковые класснеймы, как это пофиксить хз. Облазил весь инет, решения не нашёл.
- Код: Выделить всё
#include <amxmodx>
#include <hamsandwich>
#define FILE_NAME "/csgo/skins.ini"
new Trie:g_check
new bool:g_iHasWeapon[64][32]
new Trie:g_gun
new iIndex
public plugin_precache()
{
g_check = TrieCreate()
g_gun = TrieCreate()
new file_path[128]; get_localinfo("amxx_configsdir", file_path, charsmax(file_path));
format(file_path, charsmax(file_path), "%s/%s", file_path, FILE_NAME);
new file = fopen(file_path, "rt");
new buffer[256]
new szModel[64]
new szWeapon[32]
while(!feof(file))
{
fgets(file, buffer, charsmax(buffer));
if(!buffer[0] || buffer[0] == ';') continue;
parse(buffer, szWeapon, charsmax(szWeapon), szModel, charsmax(szModel));
TrieSetCell(Trie:g_check, szWeapon, engfunc(EngFunc_AllocString, szModel));
RegisterHam(Ham_Item_Deploy, szWeapon, "Item_Deploy_Post", 1);
TrieSetCell(Trie:g_gun, szWeapon, iIndex++);
precache_model(szModel);
}
}
public Item_Deploy_Post(iEnt) {
new szWeaponname[64]
new id = get_pdata_cbase(iEnt, 41, 4)
pev(iEnt, pev_classname, szWeaponname, charsmax(szWeaponname))
new pPointer
if(TrieGetCell(g_gun, szWeaponname, iIndex) && g_iHasWeapon[iIndex][id])
{
TrieGetCell(g_check, szWeaponname, pPointer);
set_pev_string(get_pdata_cbase(iEnt, 41, 4), pev_viewmodel2, pPointer);
}
}
- Код: Выделить всё
"weapon_ak47" "models/deksaze/red/v_ak47.mdl"
"weapon_m4a1" "models/deksaze/red/v_m4a1.mdl"
"weapon_p90" "models/deksaze/red/v_p90.mdl"
"weapon_m3" "models/deksaze/red/v_m3.mdl"
"weapon_knife" "models/deksaze/red/v_knife.mdl"
"weapon_scout" "models/deksaze/red/v_scout.mdl"
"weapon_glock18" "models/deksaze/red/v_glock18.mdl"
"weapon_famas" "models/deksaze/red/v_famas.mdl"
"weapon_usp" "models/deksaze/green/v_usp.mdl"
"weapon_deagle" "models/deksaze/green/v_deagle.mdl"
"weapon_ak47" "models/deksaze/green/v_ak47.mdl"
"weapon_awp" "models/deksaze/green/v_awp.mdl"
"weapon_ump45" "models/deksaze/green/v_ump45.mdl"
"weapon_aug" "models/deksaze/green/v_aug.mdl"
"weapon_fiveseven" "models/deksaze/green/v_fiveseven.mdl"
"weapon_knife" "models/deksaze/green/v_knife.mdl"
"weapon_elite" "models/deksaze/yellow/v_elite.mdl"
"weapon_galil" "models/deksaze/yellow/v_galil.mdl"
"weapon_knife" "models/deksaze/yellow/v_knife.mdl"
"weapon_sg550" "models/deksaze/yellow/v_sg552.mdl"
"weapon_m4a1" "models/deksaze/yellow/v_m4a1.mdl"
"weapon_mac10" "models/deksaze/yellow/v_mac10.mdl"
"weapon_tmp" "models/deksaze/yellow/v_tmp.mdl"
"weapon_ak47" "models/deksaze/yellow/v_ak47.mdl"