#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta>
#include <fun>
#include <gamecms5>
new const szPluginInfo[][] = {"Throwing Knives", "1.0", "Autor + ApXuTekToR"};
enum _:KNIFE_MODEL {
MODELS_KNIFE = 1,
}
new g_szModel[KNIFE_MODEL][64];
new bool:knifeout[33];
new bool:roundfreeze;
new Float:tossdelay[33];
new knifeammo[33];
new holdammo[33];
public plugin_init()
{
register_event("ResetHUD","new_spawn","b");
register_event("CurWeapon","check_knife","b","1=1");
register_event("DeathMsg", "player_death", "a");
register_logevent("round_start", 2, "1=Round_Start");
register_logevent("round_end", 2, "1=Round_End");
register_clcmd("throw_knife","throw_knifes"); // Команда для ментания ножей
register_concmd("amx_tknives","admin_tknife"); // Вкл/Выкл для админа
register_clcmd("say /knifehelp", "knife_help"); // Помощь
register_clcmd("say","HandleSay");
register_cvar("amx_throwknives","1"); // включить/выключить плагин
register_cvar("amx_checkaccess", "1"); // Кому будут доступны метательные ножи?
// '0' - Всем.
// '1' - Только по флагу доступа
// '2' - Только по названию услуги
// '3' - По флагу или услуге
register_cvar("amx_checkflags", ""); // Если 'amx_checkaccess' = '1' или '3', то какой флаг должен быть у игрока?
register_cvar("amx_checkservice", "_throw_knife"); // Если 'amx_checkaccess' = '2' или '3', то какое название услуги должно быть?
// (Обязательно в начале услуги должен быть знак '_' - нижнее подчеркивание)
register_cvar("amx_flagaccess", "l"); // Флаг доступа для Включения/Выключения метательных ножей (по умолчанию - l)
register_cvar("amx_knifeammo", "5"); // количество ножей, которые будут даны при старте раунда (по умолчанию - 5)
register_cvar("amx_knifetossforce","1200"); // сила с которую брошен нож; 200 или выше (по умолчанию - 1200)
register_cvar("amx_maxknifeammo","10"); // максимальное количество ножей, которые игрок может носить (по умолчанию - 10)
register_cvar("amx_knifedmg","25"); // урон, наносимый брошенным ножом (по умолчанию - 25)
register_cvar("amx_dropknives","1"); // выбросить или нет ножи после смерти (по умолчанию - 1)
register_cvar("amx_knifeautoswitch","1"); // автоматический переключатель
register_cvar("amx_tknifelog","0"); // устанавливает вид сообщения в логе; 1-брошенным ножом, 0-ножом (по умолчанию - 0)
check_cvars();
}
public plugin_cfg()
{
if(is_plugin_loaded("GameCMS_API") == INVALID_PLUGIN_ID)
{
log_amx("WARNING: gamecms_api.amxx isn't loaded! Plugin Stopped.");
pause("a");
return;
}
}
public plugin_precache()
{
new szConfigsDir[256];
get_localinfo("amxx_configsdir", szConfigsDir, charsmax(szConfigsDir));
server_cmd("exec %s/SevCorp/ThrowingKnives.cfg", szConfigsDir);
server_exec();
register_plugin(szPluginInfo[0], szPluginInfo[1], szPluginInfo[2]);
precache_sound("weapons/knife_hitwall1.wav");
precache_sound("weapons/knife_hit4.wav");
precache_sound("weapons/knife_deploy1.wav");
precache_model("models/w_knifepack.mdl");
LOAD_CONFIGURATION();
}
public knife_help(id) {
static CheckAccess, AccessFlags[16], AccessService[32];
CheckAccess = get_cvar_num("amx_checkaccess");
get_cvar_string("amx_checkflags", AccessFlags, charsmax(AccessFlags));
get_cvar_string("amx_checkservice", AccessService, charsmax(AccessService));
static Array:Services;
Services = cmsapi_get_user_services(id, "", AccessService);
if(CheckAccess == 0) {
client_print_color(id, 0, "^3[^4Knife^3] ^1У вас есть метательные ножи. ^3Кол-во^1: ^4%d^1", knifeammo[id]);
client_print_color(id, 0, "^3[^4Knife^3] ^1Метать ножи, пишите в консоль: ^3bind ^1^"^4Кнопка^1^" ^1^"^4throw_knife^1^"");
} else if(CheckAccess == 1) {
if(checkAccess(id, AccessFlags)) {
client_print_color(id, 0, "^3[^4Knife^3] ^1У вас есть метательные ножи. ^3Кол-во^1: ^4%d^1", knifeammo[id]);
client_print_color(id, 0, "^3[^4Knife^3] ^1Метать ножи, пишите в консоль: ^3bind ^1^"^4Кнопка^1^" ^1^"^4throw_knife^1^"");
}
} else if(CheckAccess == 2) {
if(Services){
client_print_color(id, 0, "^3[^4Knife^3] ^1У вас есть метательные ножи. ^3Кол-во^1: ^4%d^1", knifeammo[id]);
client_print_color(id, 0, "^3[^4Knife^3] ^1Метать ножи, пишите в консоль: ^3bind ^1^"^4Кнопка^1^" ^1^"^4throw_knife^1^"");
}
} else if(CheckAccess == 3) {
if(checkAccess(id, AccessFlags) || Services) {
client_print_color(id, 0, "^3[^4Knife^3] ^1У вас есть метательные ножи. ^3Кол-во^1: ^4%d^1", knifeammo[id]);
client_print_color(id, 0, "^3[^4Knife^3] ^1Метать ножи, пишите в консоль: ^3bind ^1^"^4Кнопка^1^" ^1^"^4throw_knife^1^"");
}
}
}
public check_cvars() {
if (get_cvar_num("amx_knifeammo") > get_cvar_num("amx_maxknifeammo")) {
server_print("[AMXX] 'amx_knifeammo' не может быть больше, чем 'amx_maxknifeammo', устанавливаю 'amx_maxknifeammo' = 'amx_knifeammo'");
set_cvar_num("amx_maxknifeammo", get_cvar_num("amx_knifeammo"));
}
if (get_cvar_num("amx_knifedmg") < 1 ) {
server_print("[AMXX] 'amx_knifedmg' не может быть установлен ниже '1'.Устанавливаю 'amx_knifedmg' = '1'");
set_cvar_num("amx_knifedmg", 1);
}
if (get_cvar_num("amx_knifetossforce") < 200 ) {
server_print("[AMXX] 'amx_knifetossforce' не может быть установлен ниже, чем 200. Устанавливаю '200'");
set_cvar_num("amx_knifetossforce", 200);
}
}
public throw_knifes(id) {
static CheckAccess, AccessFlags[16], AccessService[32];
CheckAccess = get_cvar_num("amx_checkaccess");
get_cvar_string("amx_checkflags", AccessFlags, charsmax(AccessFlags));
get_cvar_string("amx_checkservice", AccessService, charsmax(AccessService));
static Array:Services;
Services = cmsapi_get_user_services(id, "", AccessService);
if(CheckAccess == 0) {
command_knife(id);
} else if(CheckAccess == 1) {
if(checkAccess(id, AccessFlags)) {
command_knife(id);
}
} else if(CheckAccess == 2) {
if(Services){
command_knife(id);
}
} else if(CheckAccess == 3) {
if(checkAccess(id, AccessFlags) || Services) {
command_knife(id);
}
}
}
public player_death() {
new id = read_data(2);
knife_drop(id);
}
public HandleSay(id) {
new Speech[192];
read_args(Speech,192);
remove_quotes(Speech);
if(!equal(Speech, "vote",4) && ((containi(Speech, "knife") != -1) || (containi(Speech, "knives") != -1))) {
if(get_cvar_num("amx_throwknives") == 1) {
client_print_color(id, 0, "^3[^4Knife^3] ^1Метательные ножи ^4Включены^3!");
}
else {
client_print_color(id, 0, "^3[^4Knife^3] ^1Метательные ножи ^4Выключены");
}
}
}
public knife_drop(id) {
if(!get_cvar_num("amx_dropknives") || knifeammo[id] <= 0 || !get_cvar_num("amx_throwknives")) return;
new Float:Origin[3], Float:Velocity[3];
entity_get_vector(id, EV_VEC_origin, Origin);
new knifedrop = create_entity("info_target");
if(!knifedrop) return;
entity_set_string(knifedrop, EV_SZ_classname, "knife_pickup");
entity_set_model(knifedrop, "models/w_knifepack.mdl");
new Float:MinBox[3] = {-1.0, -1.0, -1.0}
new Float:MaxBox[3] = {1.0, 1.0, 1.0}
entity_set_vector(knifedrop, EV_VEC_mins, MinBox);
entity_set_vector(knifedrop, EV_VEC_maxs, MaxBox);
entity_set_origin(knifedrop, Origin);
entity_set_int(knifedrop, EV_INT_effects, 32);
entity_set_int(knifedrop, EV_INT_solid, 1);
entity_set_int(knifedrop, EV_INT_movetype, 6);
entity_set_edict(knifedrop, EV_ENT_owner, id);
VelocityByAim(id, 400 , Velocity);
entity_set_vector(knifedrop, EV_VEC_velocity ,Velocity);
holdammo[id] = knifeammo[id];
knifeammo[id] = 0;
}
public check_knife(id) {
if(!get_cvar_num("amx_throwknives")) return;
new weapon = read_data(2);
static CheckAccess, AccessFlags[16], AccessService[32];
CheckAccess = get_cvar_num("amx_checkaccess");
get_cvar_string("amx_checkflags", AccessFlags, charsmax(AccessFlags));
get_cvar_string("amx_checkservice", AccessService, charsmax(AccessService));
static Array:Services;
Services = cmsapi_get_user_services(id, "", AccessService);
if(CheckAccess == 0) {
if(weapon == CSW_KNIFE) {
knifeout[id] = true;
client_print(id, print_center, "В наличии %d %s", knifeammo[id], knifeammo[id] == 1 ? "нож" : "ножей");
} else {
knifeout[id] = false;
}
} else if(CheckAccess == 1) {
if(checkAccess(id, AccessFlags)) {
if(weapon == CSW_KNIFE) {
knifeout[id] = true;
client_print(id, print_center, "В наличии %d %s", knifeammo[id], knifeammo[id] == 1 ? "нож" : "ножей");
} else {
knifeout[id] = false;
}
}
} else if(CheckAccess == 2) {
if(Services){
if(weapon == CSW_KNIFE) {
knifeout[id] = true;
client_print(id, print_center, "В наличии %d %s", knifeammo[id], knifeammo[id] == 1 ? "нож" : "ножей");
} else {
knifeout[id] = false;
}
}
} else if(CheckAccess == 3) {
if(checkAccess(id, AccessFlags) || Services) {
if(weapon == CSW_KNIFE) {
knifeout[id] = true;
client_print(id, print_center, "В наличии %d %s", knifeammo[id], knifeammo[id] == 1 ? "нож" : "ножей");
} else {
knifeout[id] = false;
}
}
}
}
public kill_all_entity(classname[]) {
new iEnt = find_ent_by_class(-1, classname);
new tEnt;
while(iEnt > 0) {
tEnt = iEnt;
iEnt = find_ent_by_class(iEnt, classname);
remove_entity(tEnt);
}
}
public new_spawn(id) {
static CheckAccess, AccessFlags[16], AccessService[32];
CheckAccess = get_cvar_num("amx_checkaccess");
get_cvar_string("amx_checkflags", AccessFlags, charsmax(AccessFlags));
get_cvar_string("amx_checkservice", AccessService, charsmax(AccessService));
static Array:Services;
Services = cmsapi_get_user_services(id, "", AccessService);
if(CheckAccess == 0) {
if(knifeammo[id] < get_cvar_num("amx_knifeammo")) knifeammo[id] = get_cvar_num("amx_knifeammo");
if(knifeammo[id] > get_cvar_num("amx_maxknifeammo")) knifeammo[id] = get_cvar_num("amx_maxknifeammo");
tossdelay[id] = 0.0;
} else if(CheckAccess == 1) {
if(checkAccess(id, AccessFlags)) {
if(knifeammo[id] < get_cvar_num("amx_knifeammo")) knifeammo[id] = get_cvar_num("amx_knifeammo");
if(knifeammo[id] > get_cvar_num("amx_maxknifeammo")) knifeammo[id] = get_cvar_num("amx_maxknifeammo");
tossdelay[id] = 0.0;
}
} else if(CheckAccess == 2) {
if(Services){
if(knifeammo[id] < get_cvar_num("amx_knifeammo")) knifeammo[id] = get_cvar_num("amx_knifeammo");
if(knifeammo[id] > get_cvar_num("amx_maxknifeammo")) knifeammo[id] = get_cvar_num("amx_maxknifeammo");
tossdelay[id] = 0.0;
}
} else if(CheckAccess == 3) {
if(checkAccess(id, AccessFlags) || Services) {
if(knifeammo[id] < get_cvar_num("amx_knifeammo")) knifeammo[id] = get_cvar_num("amx_knifeammo");
if(knifeammo[id] > get_cvar_num("amx_maxknifeammo")) knifeammo[id] = get_cvar_num("amx_maxknifeammo");
tossdelay[id] = 0.0;
}
}
}
public client_connect(id) {
static CheckAccess, AccessFlags[16], AccessService[32];
CheckAccess = get_cvar_num("amx_checkaccess");
get_cvar_string("amx_checkflags", AccessFlags, charsmax(AccessFlags));
get_cvar_string("amx_checkservice", AccessService, charsmax(AccessService));
static Array:Services;
Services = cmsapi_get_user_services(id, "", AccessService);
if(CheckAccess == 0) {
knifeammo[id] = get_cvar_num("amx_knifeammo");
holdammo[id] = 0;
tossdelay[id] = 0.0;
knifeout[id] = false;
} else if(CheckAccess == 1) {
if(checkAccess(id, AccessFlags)) {
knifeammo[id] = get_cvar_num("amx_knifeammo");
holdammo[id] = 0;
tossdelay[id] = 0.0;
knifeout[id] = false;
}
} else if(CheckAccess == 2) {
if(Services){
knifeammo[id] = get_cvar_num("amx_knifeammo");
holdammo[id] = 0;
tossdelay[id] = 0.0;
knifeout[id] = false;
}
} else if(CheckAccess == 3) {
if(checkAccess(id, AccessFlags) || Services) {
knifeammo[id] = get_cvar_num("amx_knifeammo");
holdammo[id] = 0;
tossdelay[id] = 0.0;
knifeout[id] = false;
}
}
}
public client_disconnected(id) {
knifeammo[id] = 0;
holdammo[id] = 0;
tossdelay[id] = 0.0;
knifeout[id] = false;
}
public round_start() {
roundfreeze = false;
}
public round_end() {
roundfreeze = true;
kill_all_entity("throwing_knife");
kill_all_entity("knife_pickup");
}
public vexd_pfntouch(pToucher, pTouched) {
if (!is_valid_ent(pToucher) || !get_cvar_num("amx_throwknives")) return;
new Classname[32];
entity_get_string(pToucher, EV_SZ_classname, Classname, 31);
new owner = entity_get_edict(pToucher, EV_ENT_owner);
new Float:kOrigin[3]
entity_get_vector(pToucher, EV_VEC_origin, kOrigin);
if(equal(Classname,"knife_pickup")) {
if ( !is_valid_ent(pTouched) ) return;
check_cvars();
new Class2[32];
entity_get_string(pTouched, EV_SZ_classname, Class2, 31);
if(!equal(Class2,"player") || knifeammo[pTouched] >= get_cvar_num("amx_maxknifeammo")) return;
if((knifeammo[pTouched] + holdammo[owner]) > get_cvar_num("amx_maxknifeammo")) {
holdammo[owner] -= get_cvar_num("amx_maxknifeammo") - knifeammo[pTouched];
knifeammo[pTouched] = get_cvar_num("amx_maxknifeammo");
emit_sound(pToucher, CHAN_ITEM, "weapons/knife_deploy1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
}
else {
knifeammo[pTouched] += holdammo[owner];
emit_sound(pToucher, CHAN_ITEM, "weapons/knife_deploy1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
remove_entity(pToucher);
}
client_print(pTouched, print_center, "В наличии: %i ножей",knifeammo[pTouched]);
}
else if(equal(Classname,"throwing_knife")) {
check_cvars();
if(is_user_alive(pTouched)) {
new movetype = entity_get_int(pToucher, EV_INT_movetype);
if(movetype == 0 && knifeammo[pTouched] < get_cvar_num("amx_maxknifeammo")) {
if(knifeammo[pTouched] < get_cvar_num("amx_maxknifeammo")) knifeammo[pTouched] += 1;
client_print(pTouched,print_center,"В наличии: %i ножей",knifeammo[pTouched]);
emit_sound(pToucher, CHAN_ITEM, "weapons/knife_deploy1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
remove_entity(pToucher);
}
else if (movetype != 0) {
if(owner == pTouched) return;
remove_entity(pToucher);
if(get_cvar_num("mp_friendlyfire") == 0 && get_user_team(pTouched) == get_user_team(owner)) return;
new pTdead[33];
entity_set_float(pTouched, EV_FL_dmg_take, get_cvar_num("amx_knifedmg") * 1.0);
if((get_user_health(pTouched) - get_cvar_num("amx_knifedmg")) <= 0) {
pTdead[pTouched] = 1;
}
else {
set_user_health(pTouched, get_user_health(pTouched) - get_cvar_num("amx_knifedmg"));
}
if(get_user_team(pTouched) == get_user_team(owner)) {
new name[33];
get_user_name(owner, name, charsmax(name));
client_print_color(0, 0, "^3[^4Knife^3] ^4%s ^1атаковал товарища^4! ^1Потому что ^3Гнида^1!", name);
}
emit_sound(pTouched, CHAN_ITEM, "weapons/knife_hit4.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
if(pTdead[pTouched]) {
if(get_user_team(pTouched) == get_user_team(owner)) {
set_user_frags(owner, get_user_frags(owner) - 1);
client_print(owner,print_center,"You killed a teammate");
}
else {
set_user_frags(owner, get_user_frags(owner) + 1);
}
new gmsgScoreInfo = get_user_msgid("ScoreInfo");
new gmsgDeathMsg = get_user_msgid("DeathMsg");
set_msg_block(gmsgDeathMsg,BLOCK_ONCE);
set_msg_block(gmsgScoreInfo,BLOCK_ONCE);
user_kill(pTouched,1);
message_begin(MSG_ALL,gmsgScoreInfo);
write_byte(owner);
write_short(get_user_frags(owner));
write_short(get_user_deaths(owner));
write_short(0);
write_short(get_user_team(owner));
message_end();
message_begin(MSG_ALL,gmsgScoreInfo);
write_byte(pTouched);
write_short(get_user_frags(pTouched));
write_short(get_user_deaths(pTouched));
write_short(0);
write_short(get_user_team(pTouched));
message_end();
message_begin(MSG_ALL,gmsgDeathMsg,{0,0,0},0);
write_byte(owner);
write_byte(pTouched);
write_byte(0);
write_string("knife");
message_end();
new tknifelog[16]
if (get_cvar_num("amx_tknifelog")) tknifelog = "throwing_knife";
else tknifelog = "knife";
new namea[32], authida[35], teama[32];
new namev[32], authidv[35], teamv[32];
get_user_name(owner, namea, charsmax(namea));
get_user_authid(owner, authida, charsmax(authida));
get_user_team(owner, teama, charsmax(teama));
get_user_name(pTouched, namev, charsmax(namev));
get_user_authid(pTouched, authidv, charsmax(authidv));
get_user_team(pTouched, teamv, charsmax(teamv));
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"", namea, get_user_userid(owner), authida, teama, namev, get_user_userid(pTouched), authidv, teamv, tknifelog);
}
}
}
else {
entity_set_int(pToucher, EV_INT_movetype, 0);
emit_sound(pToucher, CHAN_ITEM, "weapons/knife_hitwall1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM);
}
}
}
public command_knife(id) {
if(!is_user_alive(id) || !get_cvar_num("amx_throwknives") || roundfreeze) return PLUGIN_HANDLED;
if(get_cvar_num("amx_knifeautoswitch")) {
knifeout[id] = true;
client_cmd(id,"weapon_knife");
}
if(!knifeammo[id]) client_print(id,print_center,"У Вас закончились ножи", knifeammo[id]);
if(!knifeout[id] || !knifeammo[id]) return PLUGIN_HANDLED;
if(tossdelay[id] > get_gametime() - 0.5) return PLUGIN_HANDLED;
else tossdelay[id] = get_gametime();
knifeammo[id]--;
if (knifeammo[id] == 1) {
client_print(id, print_center, "В наличии: %i нож",knifeammo[id]);
}
else {
client_print(id, print_center, "В наличии: %i ножей",knifeammo[id]);
}
new Float: Origin[3], Float: Velocity[3], Float: vAngle[3], Ent;
entity_get_vector(id, EV_VEC_origin , Origin);
entity_get_vector(id, EV_VEC_v_angle, vAngle);
Ent = create_entity("info_target");
if (!Ent) return PLUGIN_HANDLED;
entity_set_string(Ent, EV_SZ_classname, "throwing_knife");
entity_set_model(Ent, g_szModel[MODELS_KNIFE]);
new Float:MinBox[3] = {-1.0, -7.0, -1.0};
new Float:MaxBox[3] = {1.0, 7.0, 1.0};
entity_set_vector(Ent, EV_VEC_mins, MinBox);
entity_set_vector(Ent, EV_VEC_maxs, MaxBox);
vAngle[0] -= 90;
entity_set_origin(Ent, Origin);
entity_set_vector(Ent, EV_VEC_angles, vAngle);
entity_set_int(Ent, EV_INT_effects, 2);
entity_set_int(Ent, EV_INT_solid, 1);
entity_set_int(Ent, EV_INT_movetype, 6);
entity_set_edict(Ent, EV_ENT_owner, id);
VelocityByAim(id, get_cvar_num("amx_knifetossforce") , Velocity);
entity_set_vector(Ent, EV_VEC_velocity ,Velocity);
return PLUGIN_HANDLED;
}
public admin_tknife(id,level,cid){
new Access[16];
get_cvar_string("amx_flagaccess", Access, charsmax(Access))
if(!(checkAccess(id, Access))) {
client_print_color(id, 0, "^3[^4Knife^3] ^3У Вас нет доступа к данной команде^4!");
return PLUGIN_HANDLED;
}
new authid[35],name[32];
get_user_authid(id,authid,34);
get_user_name(id,name,31);
if(get_cvar_num("amx_throwknives") == 0){
set_cvar_num("amx_throwknives", 1);
client_print_color(0, 0,"^3[^4Knife^3] ^1Администратор ^4Включил ^1метательные ножи");
console_print(id, "[Knife] Вы Включили метание ножей");
log_amx("Админ: ^"%s<%d><%s>^" Включил метательные ножи", name, get_user_userid(id), authid);
}
else {
set_cvar_num("amx_throwknives", 0);
client_print_color(0, 0,"^3[^4Knife^3] ^1Администратор ^4ВЫключил ^1метательные ножи");
console_print(id,"[Knife] Вы Выключили метание ножей");
log_amx("Админ: ^"%s<%d><%s>^" Выключил метательные ножи", name, get_user_userid(id), authid);
}
return PLUGIN_HANDLED;
}
LOAD_CONFIGURATION()
{
new szCfgDir[128], szCfgFile[128];
get_localinfo("amxx_configsdir", szCfgDir, charsmax(szCfgDir));
formatex(szCfgFile, charsmax(szCfgFile), "%s/SevCorp/ThrowingKnives.cfg", szCfgDir);
if(!file_exists(szCfgFile)) {
new szError[100];
formatex(szError, charsmax(szError), "Отсутсвтует: %s!", szCfgFile);
set_fail_state(szError);
return;
}
new szBuffer[128], szKey[64], szValue[960];
new iFile = fopen(szCfgFile, "rt");
while(iFile && !feof(iFile)) {
fgets(iFile, szBuffer, charsmax(szBuffer));
replace(szBuffer, charsmax(szBuffer), "^n", "");
if(!szBuffer[0] || szBuffer[0] == ';' || szBuffer[0] == '{' || szBuffer[0] == '}' || szBuffer[0] == '#' || szBuffer[0] == '[' || szBuffer[0] == ']') continue;
parse(szBuffer, szKey, charsmax(szKey), szValue, charsmax(szValue));
trim(szKey);
trim(szValue);
if(equal(szKey, "MODELS_KNIFE")) formatex(g_szModel[MODELS_KNIFE], charsmax(g_szModel[]), szValue);
}
fclose(iFile);
PRECACHE_MODELS();
}
PRECACHE_MODELS()
{
new i, szBuffer[64];
for(i = 0; i < sizeof(g_szModel); i++) {
formatex(szBuffer, charsmax(szBuffer), "%s", g_szModel[i]);
engfunc(EngFunc_PrecacheModel, szBuffer);
}
}
checkAccess(id, const flags[]) {
return (get_user_flags(id) & read_flags(flags));
}