Код:
Код
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <hamsandwich>
new bool:canusehook[32]
new bool:ishooked[32]
new hookorigin[32][3]
new blockhook[33]
new Sbeam
public plugin_init()
{
register_plugin("Tok","1.1","HuKuTu4")
register_dictionary( "hook.txt" );
RegisterHam(Ham_Spawn, "player", "Spawn_player", 1)
register_clcmd("+hook","hook_on")
register_clcmd("-hook","hook_off")
}
public plugin_precache()
{
precache_sound("hook/hook.wav")
Sbeam = precache_model("sprites/hook/hook.spr")
}
public Spawn_player(id)
{
if(is_user_alive(id) && is_user_connected(id))
{
blockhook[id] = 0
}
}
public client_disconnect(id)
{
remove_hook(id)
}
public client_putinserver(id)
{
remove_hook(id)
}
public hook_on(id,level,cid)
{
if(get_user_flags(id) & ADMIN_LEVEL_G) // Флаг доступа для паутинки. ADMIN_LEVEL_G в users.ini флаг - s
{
if(!canusehook[id-1] && !cmd_access(id,level,cid,1))
{
return PLUGIN_HANDLED
}
if(blockhook[id]<15) //Ограничение
{
get_user_origin(id,hookorigin[id-1],3)
ishooked[id-1] = true
++blockhook[id]
emit_sound(id,CHAN_STATIC,"hook/hook.wav",1.0,ATTN_NORM,0,PITCH_NORM)
set_task(0.1,"hook_task",id,"",0,"ab")
hook_task(id)
ChatColor(id,"^1[^4Паутинка^1] Вы использовали %d раз из 15 !", blockhook[id])
}else{
ChatColor(id,"^1[^4Паутинка^1] Вы истратили свой лимит в этом раунде.")
return PLUGIN_HANDLED
}
}else{
ChatColor(id,"^1[^4Паутинка^1] !yУ !teamВас !yнету паутинки, !gчтобы купить стучи в !teamSKYPE: !g- !yстоимость !team50р/мес")
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public is_hooked(id)
{
return ishooked[id-1]
}
public hook_off(id)
{
if(get_user_flags(id) & ADMIN_LEVEL_F)
{
remove_hook(id)
}
else
{
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public hook_task(id)
{
if(!is_user_connected(id) || !is_user_alive(id))
{
remove_hook(id)
}
remove_beam(id)
draw_hook(id)
new origin[3], Float:velocity[3]
get_user_origin(id,origin)
new distance = get_distance(hookorigin[id-1],origin)
if(distance > 25)
{
velocity[0] = (hookorigin[id-1][0] - origin[0]) * (2.0 * 300 / distance)
velocity[1] = (hookorigin[id-1][1] - origin[1]) * (2.0 * 300 / distance)
velocity[2] = (hookorigin[id-1][2] - origin[2]) * (2.0 * 300 / distance)
entity_set_vector(id,EV_VEC_velocity,velocity)
}
else
{
entity_set_vector(id,EV_VEC_velocity,Float:{0.0,0.0,0.0})
remove_hook(id)
}
}
public draw_hook(id)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(1) // TE_BEAMENTPOINT
write_short(id) // entid
write_coord(hookorigin[id-1][0]) // origin
write_coord(hookorigin[id-1][1]) // origin
write_coord(hookorigin[id-1][2]) // origin
write_short(Sbeam) // sprite index
write_byte(0) // start frame
write_byte(0) // framerate
write_byte(100) // life
write_byte(41) // ширина спрайта
write_byte(0) // noise
if(get_user_team(id) == 1)
{
write_byte(192) //R //СЕРЫЙ ЦВЕТ (R, G, B)
write_byte(192) //G
write_byte(192) //B
}
else
{
write_byte(192) //R //СЕРЫЙ ЦВЕТ (R, G, B)
write_byte(192) //G
write_byte(192) //B
}
write_byte(250) // brightness
write_byte(5) // speed
message_end()
}
public remove_hook(id)
{
if(task_exists(id))
{
remove_task(id)
}
remove_beam(id)
ishooked[id-1] = false
}
public remove_beam(id)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(99)
write_short(id)
message_end()
}
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4") // Green Color
replace_all(msg, 190, "!y", "^1") // Default Color
replace_all(msg, 190, "!team", "^3") // Team Color
replace_all(msg, 190, "!team2", "^0") // Team2 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();
}
}
}
}