Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
native get_user_points(id)
native set_user_points(id, money, flash = 1)
#define COST_HP 5
#define COST_AP 10
#define COST_SPEED 15
#define COST_GRAVITY 15
#define COST_KNOCKBACK 20
#define COST_DAMAGE 20
#define get_cost(%1,%2) (%2*%1+%2)
new g_speed[33],
g_gravity[33],
g_knockback[33],
g_damage[33],
g_hp[33],
g_ap[33]
const KEYSMENU = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MEN
U_KEY_8|MENU_KEY_9|MENU_KEY_0
new g_HudSync
public plugin_init()
{
register_menu("Level up Menu", KEYSMENU, "menu_lvlup")
register_menu("Where my gold Menu", KEYSMENU, "menu_gold")
register_clcmd("say /lvl", "clcmd_showlevelmenu")
register_clcmd("say /gold", "clcmd_gold")
RegisterHam(Ham_TakeDamage, "player", "ham_takedamage")
g_HudSync = CreateHudSyncObj()
}
public plugin_natives()
{
register_native("zp_level_menu", "native_show_menu")
register_native("zp_hplvl_get", "native_hplevel_get")
register_native("zp_aplvl_get", "native_aplevel_get")
register_native("zp_speedlvl_get", "native_speedlevel_get")
register_native("zp_gravitylvl_get", "native_gravitylevel_get")
register_native("zp_knockbacklvl_get", "native_knockbacklevel_get")
register_native("zp_damagelvl_get", "native_damagelevel_get")
register_native("zp_hplvl_set", "native_hplevel_set")
register_native("zp_aplvl_set", "native_aplevel_set")
register_native("zp_speedlvl_set", "native_speedlevel_set")
register_native("zp_gravitylvl_set", "native_gravitylevel_set")
register_native("zp_knockbacklvl_set", "native_knockbacklevel_set")
register_native("zp_damagelvl_set", "native_damagelevel_set")
}
public native_show_menu(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_alive(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return;
}
show_menu_level(id)
}
public native_hplevel_get(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_alive(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return false;
}
return g_hp[id];
}
public native_aplevel_get(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_alive(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return false;
}
return g_ap[id];
}
public native_speedlevel_get(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_alive(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return false;
}
return g_speed[id];
}
public native_gravitylevel_get(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_alive(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return false;
}
return g_gravity[id];
}
public native_knockbacklevel_get(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_alive(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return false;
}
return g_knockback[id];
}
public native_damagelevel_get(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_alive(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return false;
}
return g_damage[id];
}
public native_hplevel_set(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_alive(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return;
}
g_hp[id] =get_param(2)
}
public native_aplevel_set(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_alive(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return;
}
g_ap[id]=get_param(2)
}
public native_speedlevel_set(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_alive(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return;
}
g_speed[id]=get_param(2)
}
public native_gravitylevel_set(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_alive(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return;
}
g_gravity[id]=get_param(2)
}
public native_knockbacklevel_set(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_alive(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return;
}
g_knockback[id]=get_param(2)
}
public native_damagelevel_set(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_alive(id))
{
log_error(AMX_ERR_NATIVE, "[ZP] Invalid Player (%d)", id)
return;
}
g_damage[id]=get_param(2)
}
public clcmd_showlevelmenu(id) show_menu_level(id)
public clcmd_gold(id) set_user_points(id,5000)
show_menu_level(id)
{
static menu[512]
new len
new current_gold=get_user_points(id)
// Title
len += formatex(menu[len], charsmax(menu) - len, "\yМеню прокачки:^n[ У вас \r%d\y Gold ]^n^n", current_gold)
if(g_hp[id]>9)
len += formatex(menu[len], charsmax(menu) - len, "\r1. \dЗдоровье \y[MAX]^n")
else if(current_gold<get_cost(g_hp[id], COST_HP))
len += formatex(menu[len], charsmax(menu) - len, "\r1. \dЗдоровье \r[ %d/10 ] \y[ %d Gold ]^n",g_hp[id], get_cost(g_hp[id], COST_HP))
else len += formatex(menu[len], charsmax(menu) - len, "\r1. \wЗдоровье \r[ %d/10 ] \y[ %d Gold ]^n",g_hp[id], get_cost(g_hp[id], COST_HP))
if(g_ap[id]>9)
len += formatex(menu[len], charsmax(menu) - len, "\r2. \dБроня \y[MAX]^n")
else if(current_gold<get_cost(g_ap[id], COST_AP))
len += formatex(menu[len], charsmax(menu) - len, "\r2. \dБроня \r[ %d/10 ] \y[ %d Gold ]^n",g_ap[id], get_cost(g_ap[id], COST_AP))
else len += formatex(menu[len], charsmax(menu) - len, "\r2. \wБроня \r[ %d/10 ] \y[ %d Gold ]^n",g_ap[id], get_cost(g_ap[id], COST_AP))
if(g_speed[id]>9)
len += formatex(menu[len], charsmax(menu) - len, "\r3. \dСкорость бега \y[MAX]^n")
else if(current_gold<get_cost(g_speed[id], COST_SPEED))
len += formatex(menu[len], charsmax(menu) - len, "\r3. \dСкорость бега \r[ %d/10 ] \y[ %d Gold ]^n",g_speed[id], get_cost(g_speed[id], COST_SPEED))
else len += formatex(menu[len], charsmax(menu) - len, "\r3. \wСкорость бега \r[ %d/10 ] \y[ %d Gold ]^n",g_speed[id], get_cost(g_speed[id], COST_SPEED))
if(g_gravity[id]>9)
len += formatex(menu[len], charsmax(menu) - len, "\r4. \dГравитация \y[MAX]^n")
else if(current_gold<get_cost(g_gravity[id], COST_GRAVITY))
len += formatex(menu[len], charsmax(menu) - len, "\r4. \dГравитация \r[ %d/10 ] \y[ %d Gold ]^n",g_gravity[id], get_cost(g_gravity[id], COST_GRAVITY))
else len += formatex(menu[len], charsmax(menu) - len, "\r4. \wГравитация \r[ %d/10 ] \y[ %d Gold ]^n",g_gravity[id], get_cost(g_gravity[id], COST_GRAVITY))
if(g_knockback[id]>9)
len += formatex(menu[len], charsmax(menu) - len, "\r5. \dОтброс зомби \y[MAX]^n")
else if(current_gold<get_cost(g_knockback[id], COST_KNOCKBACK))
len += formatex(menu[len], charsmax(menu) - len, "\r5. \dОтброс зомби \r[ %d/10 ] \y[ %d Gold ]^n",g_knockback[id], get_cost(g_knockback[id], COST_KNOCKBACK))
else len += formatex(menu[len], charsmax(menu) - len, "\r5. \wОтброс зомби \r[ %d/10 ] \y[ %d Gold ]^n",g_knockback[id], get_cost(g_knockback[id], COST_KNOCKBACK))
if(g_damage[id]>9)
len += formatex(menu[len], charsmax(menu) - len, "\r6. \dУрон \y[MAX]^n")
else if(current_gold<get_cost(g_damage[id], COST_DAMAGE))
len += formatex(menu[len], charsmax(menu) - len, "\r6. \dУрон \r[ %d/10 ] \y[ %d Gold ]^n",g_damage[id], get_cost(g_damage[id], COST_DAMAGE))
else len += formatex(menu[len], charsmax(menu) - len, "\r6. \wУрон \r[ %d/10 ] \y[ %d Gold ]^n",g_damage[id], get_cost(g_damage[id], COST_DAMAGE))
len += formatex(menu[len], charsmax(menu) - len, "^n\r7. \w[ Где получить \yGold\w? ]^n")
len += formatex(menu[len], charsmax(menu) - len, "^n\r0.\w Выход")
set_pdata_int(id, 205, 0)
show_menu(id, KEYSMENU, menu, -1, "Level up Menu")
}
public menu_lvlup(id, key)
{
// Player disconnected?
if (!is_user_connected(id))
return PLUGIN_HANDLED;
new current_gold=get_user_points(id)
switch (key)
{
case 0:
{
if(g_hp[id]>=10)
{
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Здоровье прокачано на максимум")
show_menu_level(id)
return PLUGIN_HANDLED
}
if(current_gold<get_cost(g_hp[id], COST_HP))
{
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Недостаточно золота (%d нехватает)", get_cost(g_hp[id], COST_HP)-current_gold)
show_menu_level(id)
return PLUGIN_HANDLED
}
set_user_points(id, current_gold-get_cost(g_hp[id], COST_HP))
g_hp[id]++
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Вы прокачали здоровье до %d", g_hp[id])
show_menu_level(id)
}
case 1:
{
if(g_ap[id]>=10)
{
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Броня прокачана на максимум")
show_menu_level(id)
return PLUGIN_HANDLED
}
if(current_gold<get_cost(g_ap[id], COST_AP))
{
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Недостаточно золота (%d нехватает)", get_cost(g_ap[id], COST_AP)-current_gold)
show_menu_level(id)
return PLUGIN_HANDLED
}
set_user_points(id, current_gold-get_cost(g_ap[id], COST_AP))
g_ap[id]++
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Вы прокачали броню до %d", g_ap[id])
show_menu_level(id)
}
case 2:
{
if(g_speed[id]>=10)
{
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Скорость бега прокачана на максимум")
show_menu_level(id)
return PLUGIN_HANDLED
}
if(current_gold<get_cost(g_speed[id], COST_SPEED))
{
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Недостаточно золота (%d нехватает)", get_cost(g_speed[id], COST_SPEED)-current_gold)
show_menu_level(id)
return PLUGIN_HANDLED
}
set_user_points(id, current_gold-get_cost(g_speed[id], COST_SPEED))
g_speed[id]++
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Вы прокачали скорость бега до %d", g_speed[id])
show_menu_level(id)
}
case 3:
{
if(g_gravity[id]>=10)
{
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Гравитация прокачана на максимум")
show_menu_level(id)
return PLUGIN_HANDLED
}
if(current_gold<get_cost(g_gravity[id], COST_GRAVITY))
{
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Недостаточно золота (%d нехватает)", get_cost(g_gravity[id], COST_GRAVITY)-current_gold)
show_menu_level(id)
return PLUGIN_HANDLED
}
set_user_points(id, current_gold-get_cost(g_gravity[id], COST_GRAVITY))
g_gravity[id]++
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Вы прокачали гравитацию до %d", g_gravity[id])
show_menu_level(id)
}
case 4:
{
if(g_knockback[id]>=10)
{
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Отброс зомби прокачан на максимум")
show_menu_level(id)
return PLUGIN_HANDLED
}
if(current_gold<get_cost(g_knockback[id], COST_KNOCKBACK))
{
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Недостаточно золота (%d нехватает)", get_cost(g_knockback[id], COST_KNOCKBACK)-current_gold)
show_menu_level(id)
return PLUGIN_HANDLED
}
set_user_points(id, current_gold-get_cost(g_knockback[id], COST_KNOCKBACK))
g_knockback[id]++
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Вы прокачали отброс зомби до %d", g_knockback[id])
show_menu_level(id)
}
case 5:
{
if(g_damage[id]>=10)
{
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Урон прокачан на максимум")
show_menu_level(id)
return PLUGIN_HANDLED
}
if(current_gold<get_cost(g_damage[id], COST_DAMAGE))
{
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Недостаточно золота (%d нехватает)", get_cost(g_damage[id], COST_DAMAGE)-current_gold)
show_menu_level(id)
return PLUGIN_HANDLED
}
set_user_points(id, current_gold-get_cost(g_damage[id], COST_DAMAGE))
g_damage[id]++
ClearSyncHud(id, g_HudSync)
set_hudmessage(255, 255, 0, -1.0, 0.6, 0, 0.1, 2.0, 0.5, 1.0, -1)
ShowSyncHudMsg(id, g_HudSync, "Вы прокачали урон до %d", g_damage[id])
show_menu_level(id)
}
case 6: show_menu_gold(id)
}
return PLUGIN_HANDLED;
}
show_menu_gold(id)
{
static menu[512]
new len
len += formatex(menu[len], charsmax(menu) - len, "\y Получить золото \w[\yбесплатно\w]\y вы можете^n")
len += formatex(menu[len], charsmax(menu) - len, "\w Убивая зомби и поднимая свой \rуровень^n^n")
len += formatex(menu[len], charsmax(menu) - len, "\y Так же, вы всегда можете \w[\yкупить\w]\y золото у админа^n")
len += formatex(menu[len], charsmax(menu) - len, "\y (100 золота - 100 рублей)^n^n")
len += formatex(menu[len], charsmax(menu) - len, "\w [Skype] di_4ever_")
set_pdata_int(id, 205, 0)
show_menu(id, KEYSMENU, menu, -1, "Where my gold Menu")
}
public menu_gold(id, key)
{
return PLUGIN_HANDLED;
}
public ham_takedamage(victim,inflictor,attacker,Float:damage,damage_type){
if(!is_user_connected(attacker)||attacker==victim||!(damage_type&DMG_BULLET)||!g_damage[attacker])return
new Float:updmg=(damage/100.0)*(5.0*float(g_damage[attacker]))
SetHamParamFloat(4,damage+updmg)
}