Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <dhudmessage>
#define PLUGIN "Vip Armament by Syava"
#define VERSION "3.0"
#define AUTHOR "Syava"
#define vip_flag ADMIN_LEVEL_H // флаг доступа
#define MAX_TEXT_LENGTH 200
#define MAX_NAME_LENGTH 40
#define ICON_SHOW 1
#define ICON_HIDE 0
new kill_num[33]
new gMsgID
new g_Round, g_Weapon[33], g_vip
new PlayerBomb[33] = false
new cvar_prefix
new cvar_round, cvar_open, cvar_show, cvar_chat, cvar_pistols, cvar_funk, cvar_tab
new cvar_health, cvar_health_head, cvar_health_max
new cvar_money, cvar_money_head
new cvar_music
new cvar_connect, cvar_red, cvar_green, cvar_blue, cvar_x, cvar_y
new cvar_damage, cvar_bluescreen
new vip_opened[33]
new vip_score
new maxplayers = 0
new SayText
new pistols[6] = {CSW_USP, CSW_GLOCK18, CSW_ELITE, CSW_FIVESEVEN, CSW_P228, CSW_DEAGLE}
new bool: g_chosen[33] = false;
new bool: gl_not_map
new string[32]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_dictionary("vip_armament.txt")
maxplayers = get_maxplayers();
register_event("HLTV", "round_start", "a", "1=0", "2=0")
register_event("TextMsg", "round_restart", "a", "2=#Game_will_restart_in","2=#Game_Commencing");
register_event("DeathMsg", "hook_death", "a", "1>0" )
vip_score = get_user_msgid("ScoreAttrib");
RegisterHam(Ham_Spawn, "player", "FwdHamPlayerSpawn", 1 );
RegisterHam(Ham_TakeDamage,"player","damager",0 )
RegisterHam(Ham_Killed, "player", "ham_PlayerKilled")
RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawned_Post", 1);
gMsgID = get_user_msgid("StatusIcon")
RegisterHam(Ham_Spawn, "player", "player_spawn", 1)
RegisterHam(Ham_Killed, "player", "player_killed", 1)
register_clcmd("say /vipmenu", "main_menu")
register_clcmd("say_team /vipmenu", "main_menu")
register_clcmd("say /vip_menu", "main_menu")
register_clcmd("say_team /vip_menu", "main_menu")
register_clcmd("vipmenu", "main_menu")
register_clcmd("say /vips", "vip_online")
register_clcmd("say_team /vips", "vip_online")
register_clcmd("say /adminka", "admin_motd")
register_clcmd("say_team /adminka", "admin_motd")
register_clcmd("say /vipka", "vip_motd")
register_clcmd("say_team /vipka", "vip_motd")
cvar_round = register_cvar("amx_vipround", "3")
cvar_open = register_cvar("amx_vipzaround", "1")
cvar_show = register_cvar("amx_vipshow","0")
cvar_chat = register_cvar("amx_chatshow", "0")
cvar_pistols = register_cvar("amx_vipautopistols", "1")
cvar_funk = register_cvar("amx_vipautoset", "1")
cvar_prefix = register_cvar("amx_vip_prefix", "!y[!gVIP ARMAMENT!y]")
cvar_tab = register_cvar("amx_viptab", "1")
cvar_health = register_cvar("amx_viphealth", "30")
cvar_health_head = register_cvar("amx_viphealth_head", "60")
cvar_health_max = register_cvar("amx_viphealth_max", "100")
cvar_money = register_cvar("amx_vipmoney", "500")
cvar_money_head = register_cvar("amx_vipmoney_head", "1000")
cvar_music = register_cvar("amx_vipmusic", "1")
cvar_connect = register_cvar("amx_showconnect", "1")
cvar_damage = register_cvar("amx_vipdamager", "1")
cvar_bluescreen = register_cvar("amx_vipscreen", "1")
cvar_x = register_cvar("amx_vipXcoord", "-1.0")
cvar_y = register_cvar("amx_vipYcoord", "0.6")
get_pcvar_string(cvar_prefix, string, charsmax(string))
SayText = get_user_msgid("SayText")
if(check_map())
{
gl_not_map = true
return;
}
}
public plugin_cfg()
{
new fPath[256]
get_configsdir(fPath,255)
server_cmd("exec %s/vip_armament.cfg",fPath)
server_exec()
}
check_map()
{
new got_line, line_num, len
new cfgdir[MAX_TEXT_LENGTH]
new cfgpath[MAX_TEXT_LENGTH]
new mapname[MAX_NAME_LENGTH]
new txt[MAX_TEXT_LENGTH]
get_localinfo("amxx_configsdir", cfgdir, charsmax(cfgdir))
get_mapname(mapname, MAX_NAME_LENGTH-1)
format(cfgpath, MAX_TEXT_LENGTH, "%s/vip_block_maps.ini", cfgdir)
if (file_exists(cfgpath))
{
got_line = read_file(cfgpath, line_num, txt, MAX_TEXT_LENGTH-1, len)
while (got_line>0)
{
if (equali(txt, mapname)) return 1
line_num++
got_line = read_file(cfgpath, line_num, txt, MAX_TEXT_LENGTH-1, len)
}
}
return 0
}
public plugin_precache()
{
precache_sound("vip_armament/vip_armament.wav")
}
public admin_motd(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return PLUGIN_CONTINUE;
show_motd(id, "adminka.txt", "Как купить админку")
return PLUGIN_CONTINUE;
}
public vip_motd(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return PLUGIN_CONTINUE;
show_motd(id, "vipka.txt", "Как купить випку")
return PLUGIN_CONTINUE;
}
public client_putinserver(id)
{
g_Weapon[id] = 0;
if((get_user_flags(id) & vip_flag))
set_task(0.5, "vip_connect", id + 132)
}
public client_disconnect(id)
{
g_Weapon[id] = 0;
g_chosen[id] = false;
}
public round_start()
g_Round++
public round_restart()
g_Round = 0
public player_spawn(Player)
{
PlayerBomb[Player] = false
vip_opened[Player] = 0;
if(is_user_cool(Player))
{
if(g_Round == 0)
first_menu(Player)
if(is_user_alive(Player))
{
if(get_pcvar_num(cvar_funk) == 1)
task_funk(Player, false);
if(get_pcvar_num(cvar_show) == 1 && g_Round >= get_pcvar_num(cvar_round))
main_menu(Player);
}
}
}
public FwdHamPlayerSpawn( id )
{
if((get_user_flags(id) & vip_flag & get_pcvar_num(cvar_tab)))
fm_set_user_scoreattrib(id, 4);
}
stock fm_set_user_scoreattrib(id, attrib=4)
{
message_begin(MSG_ALL, vip_score);
write_byte(id);
write_byte(attrib);
message_end();
}
public vip_online(id)
{
g_vip = 0;
new Len, message[512], name[32]
new Player
for(Player = 1; Player <= maxplayers; Player++)
{
if(!is_user_cool(Player))
continue;
g_vip++
get_user_name(Player, name, charsmax(name))
if(g_vip == 1)
Len += format(message[Len], 511 - Len, "%s", name)
else
Len += format(message[Len], 511 - Len, " , %s", name)
}
if(g_vip < 1)
chat_color(id, "%L", id, "VIP_ONLINE", string)
else
chat_color(id, "%s: !t%s", string, message)
}
public task_funk(id, bool:bMenuItem)
{
give_item(id, "weapon_knife")
give_item(id, "item_thighpack")
give_item(id, "weapon_hegrenade")
give_item(id, "weapon_flashbang")
give_item(id, "weapon_flashbang")
give_item(id, "weapon_smokegrenade")
give_item(id, "item_assaultsuit")
if(PlayerBomb[id])
{
fm_give_item(id, "weapon_c4");
cs_set_user_plant(id);
PlayerBomb[id] = false;
}
if(get_pcvar_num(cvar_pistols) || bMenuItem)
{
for(new i = 0; i < 6; i++)
fm_strip_user_gun(id, pistols[i])
switch(g_Weapon[id])
{
case 0:
{
first_menu(id);
}
case 1:
{
give_item(id, "weapon_deagle");
cs_set_user_bpammo(id, CSW_DEAGLE, 35)
}
case 2:
{
give_item(id, "weapon_usp");
cs_set_user_bpammo(id, CSW_USP, 100)
}
case 3:
{
give_item(id, "weapon_glock18");
cs_set_user_bpammo(id, CSW_GLOCK18, 120)
}
}
}
}
public main_menu(id)
{
if(is_user_cool(id))
{
if(is_user_alive(id))
{
if(vip_opened[id] < get_pcvar_num(cvar_open) || get_pcvar_num(cvar_open) == 0)
{
if(g_Round >= get_pcvar_num(cvar_round))
{
new s_Title[64], s_Name[32], s_Pistol[32], szMenuMulti[64]
get_user_name(id, s_Name, charsmax(s_Name))
switch(g_Weapon[id])
{
case 0: s_Pistol = "NONE";
case 1: s_Pistol = "Deagle";
case 2: s_Pistol = "Glock";
case 3: s_Pistol = "Usp";
}
formatex(s_Title, charsmax(s_Title), "%L", id, "VIP_MENU", s_Name)
new i_Menu = menu_create(s_Title, "main_handler", 1);
formatex(szMenuMulti, charsmax(szMenuMulti), "%L", id, "ITEM_MENU1", s_Pistol)
menu_additem(i_Menu, szMenuMulti, "1", 0)
formatex(szMenuMulti, charsmax(szMenuMulti), "%L", id, "ITEM_MENU2", s_Pistol)
menu_additem(i_Menu, szMenuMulti, "2", 0)
formatex(szMenuMulti, charsmax(szMenuMulti), "%L", id, "ITEM_MENU3", s_Pistol)
menu_additem(i_Menu, szMenuMulti, "3", 0)
formatex(szMenuMulti, charsmax(szMenuMulti), "%L", id, "ITEM_MENU4", s_Pistol)
menu_additem(i_Menu, szMenuMulti, "4", 0)
formatex(szMenuMulti, charsmax(szMenuMulti), "%L", id, "ITEM_MENU5", s_Pistol)
menu_additem(i_Menu, szMenuMulti, "5", 0)
menu_addblank(i_Menu, 0);
formatex(szMenuMulti, charsmax(szMenuMulti), "%L", id, "ITEM_MENU6")
menu_additem(i_Menu, szMenuMulti, "6", 0)
menu_addblank(i_Menu, 1);
menu_setprop(i_Menu, MPROP_EXITNAME, "Выход")
menu_display(id, i_Menu, 0)
}
else
{
if(get_pcvar_num(cvar_round) == 2)
{
chat_color(id, "%L", id, "VIP_WARNING5", string, get_pcvar_num(cvar_round))
return PLUGIN_HANDLED;
}
else
{
chat_color(id, "%L", id, "VIP_WARNING1", string, get_pcvar_num(cvar_round))
return PLUGIN_HANDLED;
}
}
}
else
chat_color(id, "%L", id, "VIP_WARNING2", string)
}
else
chat_color(id, "%L", id, "VIP_WARNING3", string)
}
else
chat_color(id, "%L", id, "VIP_WARNING4", string)
return PLUGIN_HANDLED;
}
public main_handler(id, menu, item)
{
if(item == MENU_EXIT) return menu_destroy(menu);
new s_Data[6], s_Name[60], i_Access, i_Callback
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
new name[32]
get_user_name(id, name, charsmax(name))
switch(str_to_num(s_Data))
{
case 1:
{
vip_opened[id]++
if(user_has_weapon(id, CSW_C4))
PlayerBomb[id] = true
strip_user_weapons(id)
task_funk(id, true)
give_item(id, "weapon_m4a1")
cs_set_user_bpammo(id, CSW_M4A1, 90)
if(get_pcvar_num(cvar_chat) == 1)
chat_color(0, "%L", id, "VIP_M4A1", string, name)
}
case 2:
{
vip_opened[id]++
if(user_has_weapon(id, CSW_C4))
PlayerBomb[id] = true
strip_user_weapons(id)
task_funk(id, true)
give_item(id, "weapon_ak47")
cs_set_user_bpammo(id, CSW_AK47, 90)
if(get_pcvar_num(cvar_chat) == 1)
chat_color(0, "%L", id, "VIP_AK47", string, name)
}
case 3:
{
vip_opened[id]++
if(user_has_weapon(id, CSW_C4))
PlayerBomb[id] = true
strip_user_weapons(id)
task_funk(id, true)
give_item(id, "weapon_awp")
cs_set_user_bpammo(id, CSW_AWP, 30)
if(get_pcvar_num(cvar_chat) == 1)
chat_color(0, "%L", id, "VIP_AWP", string, name)
}
case 4:
{
vip_opened[id]++
if(user_has_weapon(id, CSW_C4))
PlayerBomb[id] = true
strip_user_weapons(id)
task_funk(id, true)
give_item(id, "weapon_famas")
cs_set_user_bpammo(id, CSW_FAMAS, 90)
if(get_pcvar_num(cvar_chat) == 1)
chat_color(0, "%L", id, "VIP_FAMAS", string, name)
}
case 5:
{
vip_opened[id]++
if(user_has_weapon(id, CSW_C4))
PlayerBomb[id] = true
strip_user_weapons(id)
task_funk(id, true)
give_item(id, "weapon_scout")
cs_set_user_bpammo(id, CSW_SCOUT, 90)
if(get_pcvar_num(cvar_chat) == 1)
chat_color(0, "%L", id, "VIP_SCOUT", string, name)
}
case 6:
{
first_menu(id);
}
}
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
public first_menu(id)
{
if(!is_user_connected(id))
return;
new i_Menu = menu_create("\rЧто вы предпочитаете?", "first_menu_handler")
menu_additem(i_Menu, "\yDeagle", "1", 0)
menu_additem(i_Menu, "\yGlock", "2", 0)
menu_additem(i_Menu, "\rUsp", "3", 0)
menu_setprop(i_Menu, MPROP_EXITNAME, "Выход")
menu_display(id, i_Menu, 0)
}
public first_menu_handler(id, menu, item)
{
if(item == MENU_EXIT) return menu_destroy(menu);
new s_Data[6], s_Name[60], i_Access, i_Callback
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
for(new i = 0; i < 6; i++)
fm_strip_user_gun(id, pistols[i])
switch(str_to_num(s_Data))
{
case 1:
{
g_chosen[id] = true;
g_Weapon[id] = 1;
give_item(id, "weapon_deagle")
cs_set_user_bpammo(id, CSW_DEAGLE, 35)
}
case 2:
{
g_chosen[id] = true;
g_Weapon[id] = 3;
give_item(id, "weapon_glock18")
cs_set_user_bpammo(id, CSW_GLOCK18, 120)
}
case 3:
{
g_chosen[id] = true;
g_Weapon[id] = 2;
give_item(id, "weapon_usp")
cs_set_user_bpammo(id, CSW_USP, 100)
}
}
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
stock bool: is_user_cool(const id)
{
if(gl_not_map)
return false;
if(!is_user_connected(id))
return false;
if((get_user_flags(id) & vip_flag))
return true;
return false;
}
public player_killed(victim, killer, corpse)
{
static const m_LastHitGroup = 75
if(is_user_cool(victim))
if(!g_chosen[victim])
set_task(1.0, "first_menu", victim)
if(is_user_cool(killer))
{
if(is_user_alive(killer))
{
if( get_pdata_int( victim, m_LastHitGroup ) == HIT_HEAD)
{
set_user_health(killer, get_user_health(killer) + get_pcvar_num(cvar_health_head))
if(get_user_health(killer) > get_pcvar_num(cvar_health_max))
set_user_health(killer, get_pcvar_num(cvar_health_max))
cs_set_user_money(killer, cs_get_user_money(killer) + get_pcvar_num(cvar_money_head))
}
else
{
set_user_health(killer, get_user_health(killer) + get_pcvar_num(cvar_health))
if(get_user_health(killer) > get_pcvar_num(cvar_health_max))
set_user_health(killer, get_pcvar_num(cvar_health_max))
cs_set_user_money(killer, cs_get_user_money(killer) + get_pcvar_num(cvar_money))
}
}
}
}
public vip_connect(TASKID)
{
new id = TASKID - 132;
if(get_pcvar_num(cvar_music))
client_cmd(0, "spk vip_armament/vip_armament.wav");
new name[32];
get_user_name(id, name, charsmax(name));
switch(get_pcvar_num(cvar_connect))
{
case 1:
{
chat_color(0, "%L", id, "VIP_CONNECT", string, name)
}
case 2:
{
set_hudmessage(get_pcvar_num(cvar_red), get_pcvar_num(cvar_green), get_pcvar_num(cvar_blue), get_pcvar_float(cvar_x), get_pcvar_float(cvar_y), 0, 0.0, 5.0, 0.0, 0.0, -1)
show_hudmessage(0, "%L", id, "VIP_CONNECT1", name)
}
case 3:
{
set_dhudmessage(get_pcvar_num(cvar_red), get_pcvar_num(cvar_green), get_pcvar_num(cvar_blue), get_pcvar_float(cvar_x), get_pcvar_float(cvar_y), 0, 0.0, 5.0, 0.0, 0.0, false)
show_dhudmessage(0, "%L", id, "VIP_CONNECT1", name)
}
case 4:
{
chat_color(0, "%L", id, "VIP_CONNECT", string, name)
set_hudmessage(get_pcvar_num(cvar_red), get_pcvar_num(cvar_green), get_pcvar_num(cvar_blue), get_pcvar_float(cvar_x), get_pcvar_float(cvar_y), 0, 0.0, 5.0, 0.0, 0.0, -1)
show_hudmessage(0, "%L", id, "VIP_CONNECT1", name)
}
case 5:
{
chat_color(0, "%L", id, "VIP_CONNECT", string, name)
set_dhudmessage(get_pcvar_num(cvar_red), get_pcvar_num(cvar_green), get_pcvar_num(cvar_blue), get_pcvar_float(cvar_x), get_pcvar_float(cvar_y), 0, 0.0, 5.0, 0.0, 0.0, false)
show_dhudmessage(0, "%L", id, "VIP_CONNECT1", name)
}
}
}
public ham_PlayerSpawned_Post(id)
{
if (is_user_alive(id))
{
ammo_hud(id, 0)
kill_num[id] = 0
ammo_hud(id, 1)
}
}
public ham_PlayerKilled(victim, attacker)
{
static selfkill;
selfkill = (victim == attacker || !is_user_connected(attacker)) ? true : false;
if(!selfkill)
{
ammo_hud(attacker, 0)
kill_num[attacker] += 1
ammo_hud(attacker, 1)
}
}
ammo_hud(id, sw)
{
if(is_user_bot(id) || !is_user_alive(id))
return
new s_sprite[33]
format(s_sprite, 32, "number_%d", kill_num[id])
if(sw && is_user_alive(id))
{
message_begin( MSG_ONE, gMsgID, {0,0,0}, id )
write_byte( ICON_SHOW )
write_string( s_sprite )
write_byte( 30 )
write_byte( 144 )
write_byte( 255 )
message_end()
}
else
{
message_begin( MSG_ONE, gMsgID, {0,0,0}, id )
write_byte( ICON_HIDE )
write_string( s_sprite )
write_byte( 30 )
write_byte( 144 )
write_byte( 255 )
message_end()
}
if(kill_num[id] <= 0 && is_user_alive(id))
{
message_begin( MSG_ONE, gMsgID, {0,0,0}, id )
write_byte( ICON_HIDE )
write_string( s_sprite )
write_byte( 30 )
write_byte( 144 )
write_byte( 255 )
message_end()
}
}
public hook_death()
{
new iKiller = read_data(1)
new iVictim = read_data(2)
if(!get_pcvar_num(cvar_bluescreen))
return
if(is_user_alive(iKiller) & get_user_flags(iKiller) && vip_flag)
{
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, iKiller)
write_short(1<<10)
write_short(1<<10)
write_short(0x0000)
write_byte( 30 )
write_byte( 144 )
write_byte( 255 )
write_byte(75)
message_end()
}
new s_sprite[33]
format(s_sprite, 32, "number_%d", kill_num[iVictim])
message_begin( MSG_ONE, gMsgID, {0,0,0}, iVictim )
write_byte( ICON_HIDE )
write_string( s_sprite )
write_byte( 30 )
write_byte( 144 )
write_byte( 255 )
message_end()
}
public damager(victim, inflictor, attacker, Float:damage)
{
if(!get_pcvar_num(cvar_damage))
return
if(!is_user_connected(attacker))
return
if(victim == attacker || !victim)
return
if(is_user_alive(attacker))
{
if(damage > 0)
{
if(cs_get_user_team(attacker) == cs_get_user_team(victim))
return
if(get_user_flags(attacker) & vip_flag)
{
set_hudmessage(30, 144, 255, -0.49, -0.56, 0, 0.01, 0.01)
show_dhudmessage(attacker, "")
show_hudmessage(attacker, "")
show_hudmessage(attacker, "%d", floatround(damage))
}
}
}
}
stock chat_color(const id, const input[], any:...)
{
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, "!g", "^4"); // Green Color
replace_all(msg, 190, "!y", "^1"); // Default Color
replace_all(msg, 190, "!t", "^3"); // Team Color
if (id) players[0] = id; else get_players(players, count, "ch");
{
for ( new i = 0; i < count; i++ )
{
if ( is_user_connected(players[i]) )
{
message_begin(MSG_ONE_UNRELIABLE, SayText, _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}