Код:
/*
* http://games.qwerty.ru
*
* AmxModX
* Vampire plugin
* by Shalfey
*
* CVars
* amx_vampire_hp - hp add for kill
* amx_vampire_hp_hs - hp add for kill in head
* amx_vampire_max_hp - max player hp
*
* Players gets HP for kills.
*/
#define UL_MONEY_SUPPORT
#include <amxmodx>
#include <fun>
#if defined UL_MONEY_SUPPORT
#include <money_ul>
#endif
//#include <cstrike>
#include <hamsandwich>
#include <fakemeta>
#include <amxmisc>
#define PLUGIN_VERSION "1.0"
#define VIP_ACCESS ADMIN_LEVEL_H
#define VIP_ACCESS2 ADMIN_LEVEL_G
#define MAX_PLAYERS 32
new MenuGuns[MAX_PLAYERS] = {0,...}
new health_add
new health_hs_add
new health_max
new nKiller
new nKiller_hp
new nHp_add
new nHp_max
new vip_access_bool
//*****************ULMoney
#if !defined UL_MONEY_SUPPORT
new g_msgMoney
#endif
#define OFFSET_TEAM 114
#define OFFSET_MONEY 115
#define OFFSET_DEATH 444
#define cs_get_user_team(%1) CsTeams:get_offset_value(%1,OFFSET_TEAM)
#define cs_get_user_deaths(%1) get_offset_value(%1,OFFSET_DEATH)
#define cs_get_user_money(%1) get_offset_value(%1,OFFSET_MONEY)
#define cs_set_user_money(%1,%2) set_offset_value(%1,OFFSET_MONEY,%2)
enum CsTeams {
CS_TEAM_UNASSIGNED = 0,
CS_TEAM_T = 1,
CS_TEAM_CT = 2,
CS_TEAM_SPECTATOR = 3
};
get_offset_value(id, type)
{
new key = -1;
switch(type)
{
case OFFSET_TEAM: key = OFFSET_TEAM;
case OFFSET_MONEY:
{
#if defined UL_MONEY_SUPPORT
return cs_get_user_money_ul(id);
#else
key = OFFSET_MONEY;
#endif
}
case OFFSET_DEATH: key = OFFSET_DEATH;
}
if(key != -1)
{
if(is_amd64_server()) key += 25;
return get_pdata_int(id, key);
}
return -1;
}
// Sets offset data
set_offset_value(id, type, value)
{
new key = -1;
switch(type)
{
case OFFSET_TEAM: key = OFFSET_TEAM;
case OFFSET_MONEY:
{
#if defined UL_MONEY_SUPPORT
return cs_set_user_money_ul(id, value);
#else
key = OFFSET_MONEY;
// Send Money message to update player's HUD
message_begin(MSG_ONE_UNRELIABLE, g_msgMoney, {0,0,0}, id);
write_long(value);
write_byte(1); // Flash (difference between new and old money)
message_end();
#endif
}
case OFFSET_DEATH: key = OFFSET_DEATH;
}
if(key != -1)
{
if(is_amd64_server()) key += 25;
set_pdata_int(id, key, value);
}
return PLUGIN_CONTINUE;
}
//*****************ULMoney
public plugin_init()
{
register_plugin("Vip HLDM", PLUGIN_VERSION, "denesik")
// register_event("ResetHUD", "ResetHUD", "be")
register_clcmd("vip_showmenu","ReloadMenu",ADMIN_LEVEL_H,"show vip menu")
health_add = register_cvar("amx_vampire_hp", "10")
health_hs_add = register_cvar("amx_vampire_hp_hs", "15")
health_max = register_cvar("amx_vampire_max_hp", "250")
vip_access_bool = register_cvar("vip_access", "1")
RegisterHam(Ham_Spawn,"player","player_respawn",1)
register_event("DeathMsg", "hook_death", "a", "1>0")
}
public hook_death()
{
// Killer id
nKiller = read_data(1)
if(get_pcvar_num (vip_access_bool))
{
if(!(get_user_flags(nKiller) & VIP_ACCESS || get_user_flags(nKiller) & VIP_ACCESS2))
return PLUGIN_CONTINUE
}
if ( (read_data(3) == 1) && (read_data(5) == 0) )
{
nHp_add = get_pcvar_num (health_hs_add)
}
else
nHp_add = get_pcvar_num (health_add)
nHp_max = get_pcvar_num (health_max)
// Updating Killer HP
nKiller_hp = get_user_health(nKiller)
nKiller_hp += nHp_add
// Maximum HP check
if (nKiller_hp > nHp_max)
{
nKiller_hp = nHp_max
}
set_user_health(nKiller, nKiller_hp)
return PLUGIN_CONTINUE
}
//******************************************************//
public ReloadMenu(id)
{
MenuGuns[id]=0;
}
public Give_Weapon_vip(player)
{
switch(MenuGuns[player])
{
case 0:
{
give_item(player, "weapon_usp")
give_item(player, "ammo_45acp")
give_item(player, "ammo_45acp")
give_item(player, "ammo_45acp")
My_Menu(player)
}
case 1:
{
give_item(player, "weapon_usp")
give_item(player, "ammo_45acp")
give_item(player, "ammo_45acp")
give_item(player, "ammo_45acp")
}
case 2:
{
give_item(player, "weapon_glock18")
give_item(player, "ammo_9mm")
give_item(player, "ammo_9mm")
give_item(player, "ammo_9mm")
}
case 3:
{
give_item(player, "weapon_deagle")
give_item(player, "ammo_50ae")
give_item(player, "ammo_50ae")
give_item(player, "ammo_50ae")
}
case 4:
{
give_item(player, "weapon_p228")
give_item(player, "ammo_357sig")
give_item(player, "ammo_357sig")
give_item(player, "ammo_357sig")
}
case 5:
{
give_item(player, "weapon_elite")
give_item(player, "ammo_9mm")
give_item(player, "ammo_9mm")
give_item(player, "ammo_9mm")
}
case 6:
{
give_item(player, "weapon_fiveseven")
give_item(player, "ammo_57mm")
give_item(player, "ammo_57mm")
give_item(player, "ammo_57mm")
}
}
}
public player_respawn(id)
{
if (!is_user_alive(id))
return
new CsTeams:team = cs_get_user_team(id)
if(get_pcvar_num (vip_access_bool))
{
if(!(get_user_flags(id) & VIP_ACCESS || get_user_flags(nKiller) & VIP_ACCESS2))
{
return
}
}
message_begin(MSG_ALL, get_user_msgid("ScoreAttrib"))
write_byte(id)
write_byte(4)
message_end()
if (team == CS_TEAM_T)
{
if (user_has_weapon(id,CSW_GLOCK18))
engclient_cmd(id, "drop", "weapon_glock18")
if (user_has_weapon(id,CSW_USP))
engclient_cmd(id, "drop", "weapon_usp")
} else if (team == CS_TEAM_CT)
{
if (user_has_weapon(id,CSW_USP))
engclient_cmd(id, "drop", "weapon_usp")
}
Give_Weapon_vip(id)
give_item(id,"weapon_hegrenade")
give_item(id,"weapon_hegrenade")
give_item(id,"weapon_flashbang")
give_item(id,"weapon_smokegrenade")
give_item(id,"item_assaultsuit")
}
// Создадим функцию, которая будет формировать меню
public My_Menu(id)
{
// Сперва необходимо создать переменную для меню, с которой мы будем взаимодействовать в дальнейшем
new i_Menu = menu_create("\rМеню оружий:", "menu_handler")
// Теперь добавим некоторые опции для меню
menu_additem(i_Menu, "\wВзять Usp", "1", 0)
menu_additem(i_Menu, "\wВзять Glock", "2", 0)
menu_additem(i_Menu, "\wВзять Deagle", "3", 0)
menu_additem(i_Menu, "\wВзять P228", "4", 0)
menu_additem(i_Menu, "\wВзять Elite", "5", 0)
menu_additem(i_Menu, "\wВзять Fiveseven", "6", 0)
// Устанавливаем свойства меню
menu_setprop(i_Menu, MPROP_EXITNAME, "Выход")
menu_setprop(i_Menu, MPROP_EXIT, MEXIT_ALL)
// Отображение меню игроку
menu_display(id, i_Menu, 0)
}
// Создадим теперь функцию обработки действий меню
public menu_handler(id, menu, item)
{
// Если игрок нажал выход из меню
if (item == MENU_EXIT)
{
// Уничтожение меню
menu_destroy(menu)
return PLUGIN_HANDLED
}
// Теперь создадим переменные, необходимые для получения информации о меню и нажатой опции
new s_Data[6], s_Name[64], i_Access, i_Callback
// Получаем информацию об опции
menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
// Если посмотреть раньше на использовании menu_additem, то можно увидеть, что мы посылали некоторую информацию
// В данном случае вся информация - целочисленная
new i_Key = str_to_num(s_Data)
// Теперь найдем, какая именно опция была использована
MenuGuns[id]=i_Key;
if (user_has_weapon(id,CSW_USP))
engclient_cmd(id, "drop", "weapon_usp")
Give_Weapon_vip(id)
// Уничтожение меню
menu_destroy(menu)
return PLUGIN_HANDLED
}