Код
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <engine>
#define PLUGIN "Hats shop"
#define VERSION "1.1"
#define AUTHOR "R-2"
native get_class_destroyer(id)
#define ypon 1.4 //На сколько умножать урон от атак. Если нанёс 50 то 50*1.4=70 урона
#define HATS1 800 //цена шапки Скорость
#define HATS2 800 //цена шапки Гравитация
#define HATS3 1600 //цена шапки скорость + грава
#define HATS4 3000 //цена шапки Дамаг
#define HATS5 5000 //VIP шапка Невидимость 50%
#define HATS6 7000 //Супер VIP шапка, все умелки
#define FLAG_VIP ADMIN_LEVEL_H //флаг доступа на покупку шапки 5 (вип)
#define FLAG_SVIP ADMIN_KICK //флаг доступа на покупку шапки 6 (Супер вип)
new Ent[33]
new OffSkill[33]
new g_speed[33]
new g_grava[33]
new g_damag[33]
new g_invis[33]
new const chebur[] = "models/ShopR2/cheburashka.mdl"
new const cow[] = "models/ShopR2/cow.mdl"
new const demon[] = "models/ShopR2/demon.mdl"
new const elf[] = "models/ShopR2/elf.mdl"
new const gena[] = "models/ShopR2/gena.mdl"
new const kotan[] = "models/ShopR2/kotan.mdl"
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Item_PreFrame, "player", "PreFrame_Post", 1)
RegisterHam(Ham_TakeDamage, "player", "Player_TakeDamage")
RegisterHam(Ham_Killed, "player", "fw_Killed")
register_clcmd("say /hats","hats_menu")
}
public plugin_precache()
{
precache_model(chebur)
precache_model(cow)
precache_model(demon)
precache_model(elf)
precache_model(gena)
precache_model(kotan)
}
public client_disconnected(id){
remove_hat(id)
g_speed[id] = false
g_invis[id] = false
g_damag[id] = false
g_grava[id] = false
}
public client_connect(id){
g_speed[id] = false
g_invis[id] = false
g_damag[id] = false
g_grava[id] = false
}
public fw_Killed(victim, attacker, corpse)
{
remove_hat(victim)
g_speed[victim] = false
g_invis[victim] = false
g_damag[victim] = false
g_grava[victim] = false
}
public hats_menu(id)
{
if(get_user_team(id) == 3) return PLUGIN_HANDLED
if(!is_user_alive(id)) return PLUGIN_HANDLED
if(Ent[id] > 0)
{
ChatColor(id, "!g[Магазин возможностей]!y В данный момент покупка запрещена!")
return PLUGIN_HANDLED
}
if(get_class_destroyer(id))
{
ChatColor(id, "!g[Магазин возможностей]!y В режиме охотника покупка запрещена!")
return PLUGIN_HANDLED
}
new szText[ 555 char ];
new money = cs_get_user_money(id)
formatex( szText, charsmax( szText ), "\yМагазин шапочек:^nВаш счёт: %d", money)
new i_Menuh = menu_create(szText, "menu_hats")
if(money >= HATS1 && is_user_alive(id))
formatex( szText, charsmax( szText ), "\yГена \d[\rСкорость\w+\d] \w| \y%d\r$", HATS1)
else if(money <= HATS1 && is_user_alive(id))
formatex( szText, charsmax( szText ), "\dГена | \y%d\r$", HATS1)
else if(!is_user_alive(id))
formatex( szText, charsmax( szText ), "\dГена \w[\rВы мертвы\w]")
menu_additem(i_Menuh, szText, "1", 0)
if(money >= HATS2 && is_user_alive(id))
formatex( szText, charsmax( szText ), "\yЧебурашка \d[\rГравитация\w+\d] \w| \y%d\r$", HATS2)
else if(money <= HATS2 && is_user_alive(id))
formatex( szText, charsmax( szText ), "\dЧебурашка | \y%d\r$", HATS2)
else if(!is_user_alive(id))
formatex( szText, charsmax( szText ), "\dЧебурашка \w[\rВы мертвы!\w]")
menu_additem(i_Menuh, szText, "2", 0)
if(money >= HATS3 && is_user_alive(id))
formatex( szText, charsmax( szText ), "\yКорова \d[\rСкор\w+ \rГрав\w+\d] \w| \y%d\r$", HATS3)
else if(money <= HATS3 && is_user_alive(id))
formatex( szText, charsmax( szText ), "\dКорова | \y%d\r$", HATS3)
else if(!is_user_alive(id))
formatex( szText, charsmax( szText ), "\dКорова \w[\rВы мертвы!\w]")
menu_additem(i_Menuh, szText, "3", 0)
if(money >= HATS4 && is_user_alive(id))
formatex( szText, charsmax( szText ), "\yДемон \d[\rУрон\w+\d] \w| \y%d\r$", HATS4)
else if(money <= HATS4 && is_user_alive(id))
formatex( szText, charsmax( szText ), "\dДемон | \y%d\r$", HATS4)
else if(!is_user_alive(id))
formatex( szText, charsmax( szText ), "\dДемон \w[\rВы мертвы!\w]")
menu_additem(i_Menuh, szText, "4", 0)
if(get_user_flags(id) & FLAG_VIP || get_user_flags(id) & FLAG_SVIP)
menu_addtext(i_Menuh,"^n\rVIP\w: ",0)
else
menu_addtext(i_Menuh,"^n\yVIP: \d[\rНет доступа\d]\w: ",0)
if(money >= HATS5 && is_user_alive(id) && get_user_flags(id) & FLAG_VIP)
formatex( szText, charsmax( szText ), "\yЭльф \d[\rНевидимость\d] \w| \y%d\r$", HATS5)
else if(!is_user_alive(id) && get_user_flags(id) & FLAG_VIP)
formatex( szText, charsmax( szText ), "\dЭльф \w[\rВы мертвы!\w]")
else if(money <= HATS5 && get_user_flags(id) & FLAG_VIP)
formatex( szText, charsmax( szText ), "\dЭльф \w| \y%d\r$", HATS5)
else if(!(get_user_flags(id) & FLAG_VIP))
formatex( szText, charsmax( szText ), "\dЭльф \w[\rНет доступа\w]")
menu_additem(i_Menuh, szText, "5", 0)
if(get_user_flags(id) & FLAG_VIP || get_user_flags(id) & FLAG_SVIP)
menu_addtext(i_Menuh,"^n\rАдмин\w: ",0)
else
menu_addtext(i_Menuh,"^n\yrАдмин\d[\rНет доступа\d]\w: ",0)
if(money >= HATS5 && is_user_alive(id) && get_user_flags(id) & FLAG_SVIP)
formatex( szText, charsmax( szText ), "\yКотан \d[\rВесь комплект\d] \w| \y%d\r$", HATS6)
else if(!is_user_alive(id) && get_user_flags(id) & FLAG_SVIP)
formatex( szText, charsmax( szText ), "\dКотан \w[\rВы мертвы!\w]")
else if(money <= HATS6 && get_user_flags(id) & FLAG_SVIP)
formatex( szText, charsmax( szText ), "\dКотан \w| \y%d\r$", HATS6)
else if(!(get_user_flags(id) & FLAG_SVIP))
formatex( szText, charsmax( szText ), "\dКотан \w[\rНет доступа\w]")
menu_additem(i_Menuh, szText, "6", 0)
menu_setprop(i_Menuh, MPROP_EXITNAME, "Выход")
menu_setprop(i_Menuh, MPROP_EXIT, MEXIT_ALL)
menu_display(id, i_Menuh, 0)
return PLUGIN_HANDLED
}
public menu_hats(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)
new i_Key = str_to_num(s_Data)
new money = cs_get_user_money(id)
switch(i_Key)
{
case 2:
{
if(get_class_destroyer(id)) return PLUGIN_HANDLED
if(get_user_team(id) == 3 || !is_user_alive(id))
{
ChatColor(id, "!g[Магазин возможностей]!y В данный момент покупка запрещена!")
return PLUGIN_HANDLED
}
if(money < HATS2)
{
ChatColor(id, "!g[Магазин возможностей]!y У вас не хватает денег!")
return PLUGIN_HANDLED
}
if(Ent[id] < 1) remove_hat(id)
Ent[id] = create_entity("info_target")
if(is_valid_ent(id))
{
OffSkill[id] = 2
entity_set_model(Ent[id] , chebur)
entity_set_int(Ent[id], EV_INT_movetype, MOVETYPE_FOLLOW)
entity_set_edict(Ent[id], EV_ENT_aiment, id)
set_user_gravity(id, 0.5)
g_grava[id] = true
cs_set_user_money(id, money - HATS2)
ChatColor(id, "!g[Магазин возможностей]!y Вы получили !tслабую гравитацию")
}
}
case 1:
{
if(get_class_destroyer(id)) return PLUGIN_HANDLED
if(get_user_team(id) == 3 || !is_user_alive(id))
{
ChatColor(id, "!g[Магазин возможностей]!y В данный момент покупка запрещена!")
return PLUGIN_HANDLED
}
if(money < HATS1)
{
ChatColor(id, "!g[Магазин возможностей]!y У вас не хватает денег!")
return PLUGIN_HANDLED
}
if(Ent[id] < 1) remove_hat(id)
Ent[id] = create_entity("info_target")
if(is_valid_ent(id))
{
OffSkill[id] = 2
entity_set_model(Ent[id] , gena)
entity_set_int(Ent[id], EV_INT_movetype, MOVETYPE_FOLLOW)
entity_set_edict(Ent[id], EV_ENT_aiment, id)
g_speed[id] = true
set_user_maxspeed(id, 360.0)
cs_set_user_money(id, money - HATS1)
ChatColor(id, "!g[Магазин возможностей]!y Вы получили !tбыстрый бег")
}
}
case 3:
{
if(get_class_destroyer(id)) return PLUGIN_HANDLED
if(get_user_team(id) == 3 || !is_user_alive(id))
{
ChatColor(id, "!g[Магазин возможностей]!y В данный момент покупка запрещена!")
return PLUGIN_HANDLED
}
if(money < HATS3)
{
ChatColor(id, "!g[Магазин возможностей]!y У вас не хватает денег!")
return PLUGIN_HANDLED
}
if(Ent[id] < 1) remove_hat(id)
Ent[id] = create_entity("info_target")
if(is_valid_ent(id))
{
OffSkill[id] = 2
entity_set_model(Ent[id] , cow)
entity_set_int(Ent[id], EV_INT_movetype, MOVETYPE_FOLLOW)
entity_set_edict(Ent[id], EV_ENT_aiment, id)
set_user_gravity(id, 0.5)
g_speed[id] = true
g_grava[id] = true
set_user_maxspeed(id, 360.0)
cs_set_user_money(id, money - HATS3)
ChatColor(id, "!g[Магазин возможностей]!y Вы получили !tслабую гравитацию и быстрый бег")
}
}
case 4:
{
if(get_class_destroyer(id)) return PLUGIN_HANDLED
if(get_user_team(id) == 3 || !is_user_alive(id))
{
ChatColor(id, "!g[Магазин возможностей]!y В данный момент покупка запрещена!")
return PLUGIN_HANDLED
}
if(money < HATS4)
{
ChatColor(id, "!g[Магазин возможностей]!y У вас не хватает денег!")
return PLUGIN_HANDLED
}
if(Ent[id] < 1) remove_hat(id)
Ent[id] = create_entity("info_target")
if(is_valid_ent(id))
{
OffSkill[id] = 2
entity_set_model(Ent[id] , demon)
entity_set_int(Ent[id], EV_INT_movetype, MOVETYPE_FOLLOW)
entity_set_edict(Ent[id], EV_ENT_aiment, id)
g_damag[id] = true
cs_set_user_money(id, money - HATS4)
ChatColor(id, "!g[Магазин возможностей]!y Вы получили !tдвойной урон")
}
}
case 5:
{
if(get_class_destroyer(id)) return PLUGIN_HANDLED
if(!(get_user_flags(id) & FLAG_VIP))
{
ChatColor(id, "!g[Магазин возможностей]!y У вас нет доступа на покупку данной шапки!")
return PLUGIN_HANDLED
}
if(get_user_team(id) == 3 || !is_user_alive(id))
{
ChatColor(id, "!g[Магазин возможностей]!y В данный момент покупка запрещена!")
return PLUGIN_HANDLED
}
if(money < HATS5)
{
ChatColor(id, "!g[Магазин возможностей]!y У вас не хватает денег!")
return PLUGIN_HANDLED
}
if(Ent[id] < 1) remove_hat(id)
Ent[id] = create_entity("info_target")
if(is_valid_ent(id))
{
OffSkill[id] = 4
entity_set_model(Ent[id] , elf)
entity_set_int(Ent[id], EV_INT_movetype, MOVETYPE_FOLLOW)
entity_set_edict(Ent[id], EV_ENT_aiment, id)
set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 50)
g_invis[id] = true
cs_set_user_money(id, money - HATS5)
ChatColor(id, "!g[Магазин возможностей]!y Вы получили !tневидимость (50%)")
}
}
case 6:
{
if(get_class_destroyer(id)) return PLUGIN_HANDLED
if(!(get_user_flags(id) & FLAG_SVIP))
{
ChatColor(id, "!g[Магазин возможностей]!y У вас нет доступа на покупку данной шапки!")
return PLUGIN_HANDLED
}
if(get_user_team(id) == 3 || !is_user_alive(id))
{
ChatColor(id, "!g[Магазин возможностей]!y В данный момент покупка запрещена!")
return PLUGIN_HANDLED
}
if(money < HATS6)
{
ChatColor(id, "!g[Магазин возможностей]!y У вас не хватает денег!")
return PLUGIN_HANDLED
}
if(Ent[id] < 1) remove_hat(id)
Ent[id] = create_entity("info_target")
if(is_valid_ent(id))
{
OffSkill[id] = 4
entity_set_model(Ent[id] , kotan)
entity_set_int(Ent[id], EV_INT_movetype, MOVETYPE_FOLLOW)
entity_set_edict(Ent[id], EV_ENT_aiment, id)
set_user_maxspeed(id, 360.0)
set_user_gravity(id, 0.5)
set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 50)
g_speed[id] = true
g_grava[id] = true
g_invis[id] = true
g_damag[id] = true
cs_set_user_money(id, money - HATS6)
ChatColor(id, "!g[Магазин возможностей]!y Вы получили !tполноценный комплект")
}
}
}
menu_destroy(menu)
return PLUGIN_HANDLED
}
public remove_hat(id)
{
if(Ent[id] > 0)
{
remove_entity(Ent[id])
Ent[id] = 0
}
}
public PreFrame_Post(id)
{
if(!is_user_connected(id) || !is_user_alive(id)) return
if((get_class_destroyer(id)) && Ent[id]) set_entity_visibility(Ent[id], 1)
if(!get_class_destroyer(id))
{
if(g_speed[id]) set_user_maxspeed(id, 360.0)
if(g_grava[id]) set_user_gravity(id, 0.5)
if(g_invis[id]) set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderTransAlpha, 50)
}
}
public Player_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if(!is_user_connected(victim) || !is_user_connected(attacker) || victim == attacker) return HAM_IGNORED
if(!g_damag[attacker]) return HAM_IGNORED
SetHamParamFloat(4, damage * ypon)
return HAM_IGNORED
}
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[192]
vformat(msg, 191, input, 3)
replace_all(msg, 191, "!g", "^4") // Green Color
replace_all(msg, 191, "!y", "^1") // Default Color
replace_all(msg, 191, "!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, get_user_msgid("SayText"), _, players[i])
write_byte(players[i])
write_string(msg)
message_end()
}
}
}
}