Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <fakemeta>
#include <engine>
#include <hamsandwich>
#include <fakemeta_util>
#define VIP_ACCESS ADMIN_LEVEL_H
#define DAMAGE_RECIEVED
#define PLUGIN "V.I.P"
#define VERSION "0.1"
#define AUTHOR "O.Kornienko"
new vip_damage;
new pistols[5] = {CSW_P228, CSW_ELITE, CSW_FIVESEVEN, CSW_USP, CSW_GLOCK18}
new g_HudSync
new g_roundCount
new g_HudSync2
new OnOffDamage[33]
new bool:Damage[33]
new bool:use_vin[32]
new const maps[][] = {
"aim_",
"fy_",
"35hp_",
"awp_"
};
new bool:g_PluginEnable = true;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("ResetHUD", "ResetHUD", "be")
register_clcmd( "vipmenu", "Menu" );
register_clcmd( "damage", "ClCmdDamage" );
register_clcmd("say /vipka","vipka")
register_clcmd("say /adminka","adminka")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_event( "Damage", "eventDamage", "b", "2!0", "3=0", "4!0" );
register_logevent("round_end", 2, "1=Round_End");
vip_damage = register_cvar( "vip_damage", "1" );
g_HudSync = CreateHudSyncObj()
#if defined DAMAGE_RECIEVED
g_HudSync2 = CreateHudSyncObj()
#endif
}
public plugin_precache()
{
new szMap[32];
get_mapname(szMap, charsmax(szMap))
for(new i, mapsNum = sizeof maps; i < mapsNum; i++)
{
if(containi(szMap, maps[i]))
{
g_PluginEnable = false;
}
}
}
public event_round_start()
{
arrayset(use_vin, false, 32)
}
public Event_GameRestart()
{
g_roundCount = 1
}
public round_end()
{
g_roundCount++
}
public client_putinserver(id)
{
OnOffDamage[id] = true
}
public ResetHUD(id)
{
set_task(0.5, "VIP", id + 6910)
}
public VIP(TaskID)
{
new id = TaskID - 6910
if (get_user_flags(id) & VIP_ACCESS && is_user_connected(id) && is_user_alive(id))
{
for (new i = 0; i < 5; i++)
{
if (fm_strip_user_gun(id, pistols[i]))
{
break;
}
message_begin(MSG_ALL, get_user_msgid("ScoreAttrib"))
write_byte(id)
write_byte(4)
message_end()
if( g_PluginEnable )
{
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" )
give_item( id, "item_thighpack" )
give_item( id, "weapon_deagle")
give_item( id, "ammo_50ae" )
give_item( id, "ammo_50ae" )
give_item( id, "ammo_50ae" )
give_item( id, "ammo_50ae" )
give_item( id, "ammo_50ae" )
}
}
}
return PLUGIN_HANDLED;
}
public eventDamage(id)
{
if(get_pcvar_num(vip_damage))
{
if(OnOffDamage[id])
{
new attacker = get_user_attacker(id)
new damage = read_data(2)
if (is_user_connected(attacker) && get_user_flags(attacker) & VIP_ACCESS)
{
set_hudmessage(0, 255, 0, -1.0, 0.55, 2, 0.1, 4.0, 0.1, 0.1, -1)
ShowSyncHudMsg(attacker, g_HudSync, "%i", damage)
}
else if (is_user_connected(attacker) && get_user_flags(id) & VIP_ACCESS)
{
set_hudmessage(255, 0, 0, 0.45, 0.50, 2, 0.1, 4.0, 0.02, 0.02, -1)
ShowSyncHudMsg(id, g_HudSync2, "%i", damage)
}
}
}
}
public Menu( id )
{
if( !g_PluginEnable )
{
nChatPrint(id,"^1[^3Сервер^1] Запрещено на данной карте!")
return PLUGIN_HANDLED;
}
if( ~get_user_flags(id) & VIP_ACCESS )
{
nChatPrint(id,"^1[^3Сервер^1] Вы не имеете соответствующие права!")
return PLUGIN_HANDLED;
}
new msg[222], name[32]
get_user_name(id, name, 31)
formatex(msg, charsmax(msg), "\r[\y VipMenu \r]\w Имя игрока: \d%s", name)
new menu = menu_create(msg, "menu_handler")
menu_additem( menu, "\wВзять \r[\y FaMas \r]", "1", 0);
menu_additem( menu, "\wВзять \r[\y AK-47 \r]", "2", 0);
menu_additem( menu, "\wВзять \r[\y M4a1 \r]", "3", 0);
menu_additem( menu, "\wВзять \r[\y AWP \r]^n", "4", 0);
if(Damage[id] == true)
{
menu_additem( menu,"\wДамагер: \r[\d Выключен \r]", "5", 0);
}
else
{
menu_additem(menu,"\wДамагер: \r[\y Включен \r]", "5", 0);
}
menu_setprop( menu, MPROP_NEXTNAME, "Дальше")
menu_setprop( menu, MPROP_BACKNAME, "Назад")
menu_setprop( menu, MPROP_EXITNAME, "Выход" );
menu_display( id, menu, 0 );
return PLUGIN_HANDLED;
}
public menu_handler( id, menu, item )
{
if( item == MENU_EXIT )
{
menu_destroy( menu );
return PLUGIN_HANDLED;
}
new data[6], iName[64], name[32];
new access, callback;
get_user_name(id, name, 31)
menu_item_getinfo( menu, item, access, data,5, iName, 63, callback );
new key = str_to_num( data );
switch( key )
{
case 1:
{
if ( ! is_user_alive ( id ) )
{
nChatPrint(id,"^1[^3Сервер^1] Вы^3 [Мертвый]")
return PLUGIN_HANDLED;
}
if(use_vin[id])
{
nChatPrint(id,"^1[^3Сервер^1] Вы уже использовали.Подождите...")
return PLUGIN_HANDLED;
}
if (g_roundCount < 2){
nChatPrint(id,"^1[^3Сервер^1] Это оружие доступно с ^4 2 ^1 раунда")
return PLUGIN_HANDLED
}
give_item( id, "weapon_famas" )
cs_set_user_bpammo( id , CSW_FAMAS, 90 )
use_vin[id] = true;
}
case 2:
{
if ( ! is_user_alive ( id ) )
{
nChatPrint(id,"^1[^3Сервер^1] Вы^3 [Мертвый]")
return PLUGIN_HANDLED;
}
if(use_vin[id])
{
nChatPrint(id,"^1[^3Сервер^1] Вы уже использовали.Подождите...")
return PLUGIN_HANDLED;
}
if (g_roundCount < 2){
nChatPrint(id,"^1[^3Сервер^1] Это оружие доступно с ^4 2 ^1 раунда")
return PLUGIN_HANDLED
}
give_item(id,"weapon_ak47")
cs_set_user_bpammo( id, CSW_AK47, 90 );
use_vin[id] = true;
}
case 3:
{
if ( ! is_user_alive ( id ) )
{
nChatPrint(id,"^1[^3Сервер^1] Вы^3 [Мертвый]")
return PLUGIN_HANDLED;
}
if(use_vin[id])
{
nChatPrint(id,"^1[^3Сервер^1] Вы уже использовали.Подождите...")
return PLUGIN_HANDLED;
}
if (g_roundCount < 2){
nChatPrint(id,"^1[^3Сервер^1] Это оружие доступно с ^4 2 ^1 раунда")
return PLUGIN_HANDLED
}
give_item(id,"weapon_m4a1")
cs_set_user_bpammo( id, CSW_M4A1, 90 );
use_vin[id] = true;
}
case 4:
{
if ( ! is_user_alive ( id ) )
{
nChatPrint(id,"^1[^3Сервер^1] Вы^3 [Мертвый]")
return PLUGIN_HANDLED;
}
if(use_vin[id])
{
nChatPrint(id,"^1[^3Сервер^1] Вы уже использовали.Подождите...")
return PLUGIN_HANDLED;
}
if (g_roundCount < 3){
nChatPrint(id,"^1[^3Сервер^1] Это оружие доступно с ^4 3 ^1 раунда")
return PLUGIN_HANDLED
}
give_item(id,"weapon_awp")
cs_set_user_bpammo( id, CSW_AWP, 30 );
use_vin[id] = true;
}
case 5:
{
if ( ! is_user_alive ( id ) )
{
nChatPrint(id,"^1[^3Сервер^1] Вы^3 [Мертвый]")
return PLUGIN_HANDLED;
}
switch(Damage[id])
{
case true:
{
client_cmd(id, "damage")
Damage[id] = false
Menu(id)
}
case false:
{
client_cmd(id, "damage")
Damage[id] = true
Menu(id)
}
}
}
}
return PLUGIN_HANDLED;
}
stock nChatPrint(const id, const input[], any:...)
{
new nCount = 1, nNum[32]
static nMsgs[191]
vformat(nMsgs, 190, input, 3)
replace_all(nMsgs, 190, "!g", "^4")
replace_all(nMsgs, 190, "!n", "^1")
replace_all(nMsgs, 190, "!t", "^3")
if(id) nNum[0] = id; else get_players(nNum, nCount, "ch")
{
for(new i = 0; i < nCount; i++)
{
if(is_user_connected(nNum[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, nNum[i])
write_byte(nNum[i])
write_string(nMsgs)
message_end()
}
}
}
}
public vipka(id)
{
show_motd( id, "vip.txt", "Покупка - V.I.P!" )
}
public adminka(id)
{
show_motd( id, "admin.txt", "Покупка - Админки!" )
}
public ClCmdDamage(id)
{
if(get_user_flags(id) & VIP_ACCESS)
{
if(OnOffDamage[id])
{
OnOffDamage[id] = false
}
else
{
OnOffDamage[id] = true
}
}
return 0
}
Сам не проверял.