Всем привет.
В общем хочу сделать так, чтобы при
cs_get_user_money(id) в меню была функция которая будет игрока доступна, я потом в
case допишу, чтобы выводилось сообщение в чат, и когда игрок насобирал нужную сумму и он может купить нож, то он его покупает опять же из
cs_get_user_money(id), а вот когда уже игрок купил этот нож, чтобы перешло на
KnifeId[id], и чтобы игрок уже не мог нажать на этот пункт, а то стоит так, что игрок купил нож, и при повтором нажатии ему пишет что недостаточно денег чтобы купить этот нож, так стоит не на всех пунктах а только на втором пункте.
Код:
// [DR] Knifes By BiZoN
// Спасибо Eriurias за качественную регенерацию
// Плагин менее затратен в плане нагрузки, в отличие от своих аналогов, использующих CurWeapon вместо Ham_Item_deploy
// Снята затрата двойного прыжка в плане использования события прыжка, а не форвардов, вызывающихся по десятку раз каждую секунду
// Способности работают только тогда, когда в руках нож
// Ну и многое другое, что вы можете увидеть во время работы плагина
// Огромная просьба: если найдете баги или недочеты, пишите, пожалуйста, мне в скайп: vitya12345629 или в ВК: vk.com/6u3oh
// [DR] Knifes By BiZoN
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <fun>
#include <colorchat>
#include <cstrike>
#define PLUGIN "[DR] Knifes"
#define VERSION "1.0"
#define AUTHOR "BiZoN"
#define ADMIN_FLAG ADMIN_BAN // Флаг Админа
#define REGENERATION_DELAY 2.0 // Время до регенерации
#define REGENERATION_STEP 1 // Насколько увеличивать HP
#define REGENERATION_MAX 100 // Максимальное кол-во HP
new keys = 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_0
new szTwoJump[33]
new szTwoJumpNum[33]
new szDoTwoJump[33]
new KnifeId[33]
public plugin_precache()
{
precache_model("models/v_knife.mdl")
precache_model("models/knifes/v_ferrane.mdl")
precache_model("models/knifes/v_terari.mdl")
precache_model("models/knifes/v_ibuki.mdl")
precache_model("models/knifes/v_katana.mdl")
precache_model("models/knifes/v_blink.mdl")
precache_model("models/p_knife.mdl")
precache_model("models/knifes/p_ferrane.mdl")
precache_model("models/knifes/p_terari.mdl")
precache_model("models/knifes/p_ibuki.mdl")
precache_model("models/knifes/p_katana.mdl")
precache_model("models/knifes/p_blink.mdl")
precache_sound("knifes/health.wav")
precache_sound("knifes/blink_hitwall1.wav")
precache_sound("knifes/katana_hitwall1.wav")
precache_sound("knifes/ibuki_hitwall1.wav")
precache_sound("knifes/ibuki_slash1.wav")
precache_sound("knifes/ibuki_deploy1.wav")
precache_sound("knifes/terari_hitwall1.wav")
precache_sound("knifes/ferrane_hitwall1.wav")
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_menu("Menu 1", keys, "menu_knife")
register_clcmd("say /knife", "knife_menu")
register_clcmd("say_team /knife", "knife_menu")
register_clcmd("knife", "knife_menu")
register_clcmd("knifes", "knife_menu")
RegisterHam(Ham_Item_Deploy, "weapon_knife", "SetKnife", 1)
register_event("CurWeapon", "SetKnife" ,"be" ,"1=1")
RegisterHam(Ham_Item_Holster, "weapon_knife", "KnifeSet", 1)
RegisterHam(Ham_TakeDamage, "player", "EventDamage", 0)
RegisterHam(Ham_TakeDamage, "player", "TakeDamage", .Post = true)
RegisterHam(Ham_Killed, "player", "KilledPost", .Post = true)
RegisterHam(Ham_Player_Jump, "player", "PreTwoJump")
register_forward(FM_EmitSound, "EmitSound")
}
public client_connect(id)
{
KnifeId[id] = 1
}
public client_disconnect(nClientIndex)
{
remove_task(nClientIndex)
}
public knife_menu(id)
{
static menu[2014], iLen
iLen = 0
iLen = formatex(menu[iLen], charsmax(menu) - iLen, "\r[\yKnifeMenu\r] \wВыберите нож^n^n")
if(!is_user_connected(id))
return PLUGIN_CONTINUE
if(KnifeId[id] == 1)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r1. \dСтандартный^n")
keys &= ~MENU_KEY_1
} else {
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r1. \wСтандартный^n")
keys |= MENU_KEY_1
}
if(cs_get_user_money(id) > 9000)
{
if(KnifeId[id] == 2)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r2. \dКатана \d(\rДвойной прыжок\d)^n")
keys |= MENU_KEY_2
} else {
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r2. \wКатана \d(\rДвойной прыжок\d)^n")
keys |= MENU_KEY_2
}
} else {
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r2. \dКатана \d(\rДвойной прыжок\d)^n")
keys |= MENU_KEY_2
}
if(cs_get_user_money(id) > 15000)
{
if(KnifeId[id] == 3)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r3. \dСильный \d(\rБольшой урон\d)^n")
keys &= ~MENU_KEY_3
} else {
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r3. \wСильный \d(\rБольшой урон\d)^n")
keys |= MENU_KEY_3
}
} else {
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r3. \dСильный \d(\rБольшой урон\d)^n")
keys |= MENU_KEY_3
}
if(cs_get_user_money(id) > 10000)
{
if(KnifeId[id] == 4)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r4. \dСтронг \d(\rСкорость\d)^n")
keys &= ~MENU_KEY_4
} else {
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r4. \wСтронг \d(\rСкорость\d)^n")
keys |= MENU_KEY_4
}
} else {
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r4. \dСтронг \d(\rСкорость\d)^n")
keys |= MENU_KEY_4
}
if(cs_get_user_money(id) > 5000)
{
if(KnifeId[id] == 5)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r5. \dАптечка \d(\rВосстановление здоровья\d)^n")
keys &= ~MENU_KEY_5
} else {
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r5. \wАптечка \d(\rВосстановление здоровья\d)^n")
keys |= MENU_KEY_5
}
} else {
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r5. \dАптечка \d(\rВосстановление здоровья\d)^n")
keys |= MENU_KEY_5
}
if(cs_get_user_money(id) > 10000)
{
if(KnifeId[id] == 6)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r6. \dКомбат \d(\rГравитация\d)^n")
keys &= ~MENU_KEY_6
} else {
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r6. \wКомбат \d(\rГравитация\d)^n")
keys |= MENU_KEY_6
}
} else {
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r6. \dКомбат \d(\rГравитация\d)^n")
keys |= MENU_KEY_6
}
if(cs_get_user_money(id) > 20000)
{
if(KnifeId[id] == 7)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r7. \dДарк \d(\rНевидимость\d)^n^n")
keys &= ~MENU_KEY_7
} else {
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r7. \wДарк \d(\rНевидимость\d)^n^n")
keys |= MENU_KEY_7
}
} else {
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r7. \dДарк \d(\rНевидимость\d)^n^n")
keys |= MENU_KEY_7
}
if(KnifeId[id] == 0 && get_user_flags(id) & ADMIN_ADMIN)
{
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r8. \dАдминский нож \d(\rВсё включено\d)^n^n")
keys &= ~MENU_KEY_8
} else {
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r8. \wАдминский нож \d(\rВсё включено\d)^n^n")
keys |= MENU_KEY_8
}
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r0. \wВыход^n")
keys |= MENU_KEY_0
show_menu(id, keys, menu, -1, "Menu 1")
return PLUGIN_HANDLED
}
public menu_knife(id, key)
{
switch(key)
{
case 0:
{
KnifeId[id] = 1
SetKnife(id)
}
case 1:
{
if(cs_get_user_money(id) < 9000)
{
ColorChat(id, NORMAL, "^1[^4Knife^1] ^3Требуемая сумма этого ножа:^4 10000$")
return PLUGIN_HANDLED;
} else {
cs_set_user_money(id, cs_get_user_money(id) - 9000)
KnifeId[id] = 2
SetKnife(id)
}
}
case 2:
{
if(cs_get_user_money(id) < 15000)
{
ColorChat(id, NORMAL, "^1[^4Knife^1] У Вас недостаточно денег чтобы купить этот нож!")
return PLUGIN_HANDLED;
} else {
cs_set_user_money(id, cs_get_user_money(id) - 15000)
KnifeId[id] = 3
SetKnife(id)
}
}
case 3:
{
if(cs_get_user_money(id) < 10000)
{
ColorChat(id, NORMAL, "^1[^4Knife^1] У Вас недостаточно денег чтобы купить этот нож!")
return PLUGIN_HANDLED;
} else {
cs_set_user_money(id, cs_get_user_money(id) - 10000)
KnifeId[id] = 4
SetKnife(id)
}
}
case 4:
{
if(cs_get_user_money(id) < 5000)
{
ColorChat(id, NORMAL, "^1[^4Knife^1] У Вас недостаточно денег чтобы купить этот нож!")
return PLUGIN_HANDLED;
} else {
cs_set_user_money(id, cs_get_user_money(id) - 5000)
KnifeId[id] = 5
SetKnife(id)
}
}
case 5:
{
if(cs_get_user_money(id) < 10000)
{
ColorChat(id, NORMAL, "^1[^4Knife^1] У Вас недостаточно денег чтобы купить этот нож!")
return PLUGIN_HANDLED;
} else {
cs_set_user_money(id, cs_get_user_money(id) - 10000)
KnifeId[id] = 6
SetKnife(id)
}
}
case 6:
{
if(cs_get_user_money(id) < 20000)
{
ColorChat(id, NORMAL, "^1[^4Knife^1] У Вас недостаточно денег чтобы купить этот нож!")
return PLUGIN_HANDLED;
} else {
cs_set_user_money(id, cs_get_user_money(id) - 20000)
KnifeId[id] = 7
SetKnife(id)
}
}
case 7:
{
if(get_user_flags(id) & ADMIN_FLAG)
{
KnifeId[id] = 0
SetKnife(id)
}
}
}
return PLUGIN_HANDLED
}
public SetKnife(id)
{
if(!is_user_connected(id))
return PLUGIN_CONTINUE
if(KnifeId[id] == 1)
{
set_pev(id, pev_viewmodel2, "models/v_knife.mdl")
set_pev(id, pev_weaponmodel2, "models/p_knife.mdl")
set_pev(id, pev_maxspeed, 250.0)
set_pev(id, pev_gravity, 1.0)
szTwoJump[id] = false
}
if(KnifeId[id] == 2)
{
set_pev(id, pev_viewmodel2, "models/knifes/v_katana.mdl")
set_pev(id, pev_weaponmodel2, "models/knifes/p_katana.mdl")
set_pev(id, pev_maxspeed, 250.0)
set_pev(id, pev_gravity, 1.0)
szTwoJump[id] = true
}
if(KnifeId[id] == 3)
{
set_pev(id, pev_viewmodel2, "models/knifes/v_ibuki.mdl")
set_pev(id, pev_weaponmodel2, "models/knifes/p_ibuki.mdl")
set_pev(id, pev_maxspeed, 220.0)
set_pev(id, pev_gravity, 1.0)
szTwoJump[id] = false
}
if(KnifeId[id] == 4)
{
set_pev(id, pev_viewmodel2, "models/knifes/v_terari.mdl")
set_pev(id, pev_weaponmodel2, "models/knifes/p_terari.mdl")
set_pev(id, pev_maxspeed, 320.0)
set_pev(id, pev_gravity, 1.0)
szTwoJump[id] = false
}
if(KnifeId[id] == 5)
{
set_pev(id, pev_viewmodel2, "models/v_knife.mdl")
set_pev(id, pev_weaponmodel2, "models/p_knife.mdl")
set_pev(id, pev_maxspeed, 250.0)
set_pev(id, pev_gravity, 1.0)
szTwoJump[id] = false
}
if(KnifeId[id] == 6)
{
set_pev(id, pev_viewmodel2, "models/knifes/v_ferrane.mdl")
set_pev(id, pev_weaponmodel2, "models/knifes/p_ferrane.mdl")
set_pev(id, pev_maxspeed, 250.0)
set_pev(id, pev_gravity, 0.6)
szTwoJump[id] = false
}
if(KnifeId[id] == 7)
{
set_pev(id, pev_viewmodel2, "models/v_knife.mdl")
set_pev(id, pev_weaponmodel2, "models/p_knife.mdl")
set_pev(id, pev_maxspeed, 250.0)
set_pev(id, pev_gravity, 1.0)
set_user_rendering(id,kRenderFxGlowShell,0,0,0,kRenderTransAlpha,20)
szTwoJump[id] = false
}
if(KnifeId[id] == 0)
{
set_pev(id, pev_viewmodel2, "models/knifes/v_blink.mdl")
set_pev(id, pev_weaponmodel2, "models/knifes/p_blink.mdl")
set_pev(id, pev_maxspeed, 320.0)
set_pev(id, pev_gravity, 0.6)
set_user_rendering(id,kRenderFxGlowShell,0,0,0,kRenderTransAlpha,20)
szTwoJump[id] = true
}
return PLUGIN_HANDLED
}
public KnifeSet(ent)
{
set_pev(get_pdata_cbase(ent, 41, 4), pev_gravity, 1.0)
}
public TakeDamage(nClientIndex)
{
if(is_user_alive(nClientIndex))
{
if (!task_exists(nClientIndex))
set_task(REGENERATION_DELAY, "StartRegeneration" , nClientIndex, _, _, "b")
}
}
public KilledPost(nClientIndex)
{
remove_task(nClientIndex)
}
public StartRegeneration(nClientIndex)
{
static Float:g_iHealthPoint; pev(nClientIndex, pev_health, g_iHealthPoint);
if (g_iHealthPoint >= REGENERATION_MAX)
{
remove_task(nClientIndex);
return PLUGIN_HANDLED;
}
if(get_user_weapon(nClientIndex) == CSW_KNIFE && (KnifeId[nClientIndex] == 0 || KnifeId[nClientIndex] == 5))
{
set_pev(nClientIndex, pev_health, g_iHealthPoint + REGENERATION_STEP);
}
return PLUGIN_CONTINUE;
}
public EventDamage(victim, inflicator, attacker, Float:damage)
{
if(!is_user_connected(attacker))
return PLUGIN_HANDLED;
if(victim == attacker || !victim)
return PLUGIN_HANDLED;
if(get_user_team(attacker) != get_user_team (victim) && attacker != victim && get_user_weapon(attacker) == CSW_KNIFE && (KnifeId[attacker] == 0 || KnifeId[attacker] == 2))
SetHamParamFloat(4, damage * 2.0)
return PLUGIN_HANDLED;
}
public PreTwoJump(id)
{
if(szTwoJump[id] && get_user_weapon(id) == CSW_KNIFE)
{
new szButton = pev(id, pev_button)
new szOldButton = pev(id, pev_oldbuttons)
if((szButton & IN_JUMP) && !(pev(id, pev_flags) & FL_ONGROUND) && !(szOldButton & IN_JUMP))
{
if(szTwoJumpNum[id] < 1)
{
szDoTwoJump[id] = true
szTwoJumpNum[id]++
PostTwoJump(id)
return PLUGIN_CONTINUE
}
}
if((szButton & IN_JUMP) && (pev(id, pev_flags) & FL_ONGROUND))
{
szTwoJumpNum[id] = 0
}
}
return PLUGIN_CONTINUE
}
public PostTwoJump(id)
{
if(szTwoJump[id])
{
if(!is_user_alive(id))
return PLUGIN_CONTINUE
if(szDoTwoJump[id])
{
new Float:szVelocity[3]
pev(id, pev_velocity, szVelocity)
szVelocity[2] = random_float(295.0,305.0)
set_pev(id, pev_velocity, szVelocity)
szDoTwoJump[id] = false
return PLUGIN_CONTINUE
}
}
return PLUGIN_CONTINUE
}
public EmitSound(id, channel, const sound[])
{
if(equal(sound, "weapons/knife_hitwall1.wav"))
{
if(KnifeId[id] == 0)
{
emit_sound(id, channel, "knifes/blink_hitwall1.wav", 1.0, 1.0, 0, 100)
return FMRES_SUPERCEDE
}
else if(KnifeId[id] == 2)
{
emit_sound(id, channel, "knifes/ibuki_hitwall1.wav", 1.0, 1.0, 0, 100)
return FMRES_SUPERCEDE
}
else if(KnifeId[id] == 3)
{
emit_sound(id, channel, "knifes/terari_hitwall1.wav", 1.0, 1.0, 0, 100)
return FMRES_SUPERCEDE
}
else if(KnifeId[id] == 4)
{
emit_sound(id, channel, "knifes/ferrane_hitwall1.wav", 1.0, 1.0, 0, 100)
return FMRES_SUPERCEDE
}else{
return HAM_IGNORED
}
}
if(equal(sound, "weapons/knife_slash1.wav") || equal(sound, "weapons/knife_slash2.wav"))
{
if(KnifeId[id] == 1)
{
emit_sound(id, channel, "weapons/knife_slash1.wav", 1.0, 1.0, 0, 100)
return FMRES_SUPERCEDE
}else{
return HAM_IGNORED
}
}
if(equal(sound, "weapons/knife_slash1.wav") || equal(sound, "weapons/knife_slash2.wav"))
{
if(KnifeId[id] == 2)
{
emit_sound(id, channel, "knifes/ibuki_slash1.wav", 1.0, 1.0, 0, 100)
return FMRES_SUPERCEDE
}else{
return HAM_IGNORED
}
}
if(equal(sound, "weapons/knife_deploy1.wav"))
{
if(KnifeId[id] == 2)
{
emit_sound(id, channel, "knifes/ibuki_deploy1.wav", 1.0, 1.0, 0, 100)
return FMRES_SUPERCEDE
}else{
return HAM_IGNORED
}
}
return HAM_IGNORED
}
Отредактировал: default67, - 18.11.2015, 19:03