#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#define PLUGIN "Long Jump"
#define VERSION "1.0"
#define AUTHOR "MayroN"
new g_msgStatusIcon;
new g_jumps[33];
new g_showJumpMessage[33];
new g_lastJumpTime[33];
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
RegisterHam(Ham_Player_PreThink, "player", "Player_Jump");
RegisterHam(Ham_Killed, "player", "Hook_Icon");
register_forward(FM_CmdStart, "Show_Icon");
g_msgStatusIcon = get_user_msgid("StatusIcon");
}
public Show_Icon(id, uc_handle, seed)
{
if (!is_user_alive(id))
return FMRES_IGNORED;
if (g_jumps[id] < 3) // Проверка дали играчът има още скокове
{
if (get_user_weapon(id) == CSW_KNIFE) // Проверка дали играчът държи нож
{
StatusIcon(id, 1);
if (g_showJumpMessage[id])
{
client_print(id, print_center, "You have the Long Jump ability (Jumps Left: %d/3)", 3 - g_jumps[id]);
g_showJumpMessage[id] = false; // Скриване на надписа веднага след изписването
}
}
else
{
StatusIcon(id, 0);
g_showJumpMessage[id] = true; // Показване на надписа следващия път при скок с нож
}
}
else
{
StatusIcon(id, 0); // Изчезване на иконката след трите скока
if (g_lastJumpTime[id] > 0.0 && get_gametime() - g_lastJumpTime[id] < 2.0) // Проверка за времето след последния скок
{
client_print(id, print_center, "You have used all long jumps");
g_lastJumpTime[id] = 0.0; // Нулиране на времето на последния скок
g_showJumpMessage[id] = false; // Скриване на надписа за последния скок
}
}
return FMRES_IGNORED;
}
public Player_Jump(id)
{
static buttons, oldbuttons;
buttons = pev(id, pev_button);
oldbuttons = pev(id, pev_oldbuttons);
if (buttons & IN_DUCK && buttons & IN_JUMP && !(oldbuttons & IN_JUMP) && (pev(id, pev_flags) & FL_ONGROUND))
{
if (g_jumps[id] < 3 && get_user_weapon(id) == CSW_KNIFE) // Добавена проверка за броя на скоковете
{
g_jumps[id]++;
set_speed(id, 500.0);
static Float:velocity[3];
pev(id, pev_velocity, velocity);
velocity[2] = 800 / 3.0;
if ((pev(id, pev_button) & (IN_LEFT | IN_RIGHT)))
{
velocity[0] *= -1;
velocity[1] *= -1;
}
set_pev(id, pev_velocity, velocity);
if (g_jumps[id] >= 3)
{
StatusIcon(id, 0); // Изчезване на иконката след трите скока
g_showJumpMessage[id] = true; // Показване на надписа за последния скок
}
else
{
g_showJumpMessage[id] = true; // Показване на надписа при следващ скок с нож
}
g_lastJumpTime[id] = get_gametime(); // Запазване на времето на последния скок
}
}
else if (g_lastJumpTime[id] > 0.0 && get_gametime() - g_lastJumpTime[id] > 2.0) // Проверка за изминало време
{
g_lastJumpTime[id] = 0.0; // Нулиране на времето на последния скок
g_showJumpMessage[id] = false; // Скриване на надписа за последния скок
}
}
stock set_speed(ent, Float:speed)
{
if(!pev_valid(ent))
return;
static Float:vangle[3], Float:new_velo[3], Float:y, Float:x;
if(ent<=get_maxplayers())
{
pev(ent,pev_v_angle,vangle);
}
pev(ent,pev_velocity,new_velo);
y = new_velo[0]*new_velo[0] + new_velo[1]*new_velo[1];
if(y) x = floatsqroot(speed*speed / y);
new_velo[0] *= x;
new_velo[1] *= x;
if(speed<0.0)
{
new_velo[0] *= -1;
new_velo[1] *= -1;
}
set_pev(ent,pev_velocity,new_velo);
}
StatusIcon(id, run)
{
if(!is_user_connected(id))
return;
message_begin(MSG_ONE, g_msgStatusIcon, {0,0,0}, id);
write_byte(run);
write_string("item_longjump");
write_byte(0);
write_byte(220);
write_byte(220);
message_end();
}
public Hook_Icon(id)
{
StatusIcon(id, 0);
g_jumps[id] = 0;
g_lastJumpTime[id] = 0.0;
g_showJumpMessage[id] = false;
}