#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <engine>
/* Drag */
new g_Line
new drag_a[33]
new Float:tiempo_ultimo_drag[33]
new tiempo_drag[33]
new bool: en_drag[33]
new activated,cooldown,velocity,friendly_drag,max_duration
public plugin_init()
{
// Plugin Info
register_plugin("The drag mode","1.0","zeven~")
//CVARS
activated=register_cvar("sv_dragmode", "1" )
cooldown = register_cvar("drag_cooldown","3.0")
velocity = register_cvar("drag_velocity","200.0")
friendly_drag=register_cvar("drag_friendly","0")
max_duration=register_cvar("drag_max_duration","3")
//USER COMMANDS
register_clcmd("+drag","drag_on")
register_clcmd("-drag","drag_end")
}
public plugin_precache()
{
g_Line = precache_model("sprites/zbeam4.spr")
}
public client_connect(id)
{
en_drag[id]=false
}
public client_disconnect(id)
{
en_drag[id]=false
drag_end(id)
}
public drag_on(id)
{
if(get_pcvar_num(activated))
{
if(!is_user_alive(id))
{
client_print(id, print_chat, "[DragM] Neked élönek kell lenned húzóként")
return PLUGIN_HANDLED
}
else if(get_gametime()-tiempo_ultimo_drag[id]<get_pcvar_num(cooldown))
{
client_print(id, print_chat, "[DragM] Várj %.1f másodpercet hogy húzó legyél",get_pcvar_num(cooldown)-(get_gametime()-tiempo_ultimo_drag[id]))
return PLUGIN_HANDLED
}
else
{
new victima,cuerpo
get_user_aiming(id,victima,cuerpo)
if(victima==0)
{
client_print(id,print_chat,"[DragM] Sikertelen")
no_target(id)
tiempo_ultimo_drag[id]=get_gametime()
return PLUGIN_HANDLED
}
if(is_user_alive(victima))
{
drag_a[id]=victima
}
new parm[2]
parm[0] = id
parm[1] = victima
new nombre[30]
if((get_user_team(id)==1&&get_user_team(victima)==2)||(get_user_team(id)==2&&get_user_team(victima)==1)||get_pcvar_num(friendly_drag))
{
get_user_name(victima,nombre,29) //Obtener el nombre de la victima
tiempo_drag[id]=0
en_drag[id]=true
client_print(id,print_chat,"[DragM] Megragadod %s",nombre)
set_task(0.1, "drag_player", id, parm, 2, "b")
}
else
{
client_print(id,print_chat,"[DragM] Sikertelen")
no_target(id)
tiempo_ultimo_drag[id]=get_gametime()
return PLUGIN_HANDLED
}
}
}
else
{
client_print(id,print_chat,"[DragM] Ez a parancs nem elérhető")
}
return PLUGIN_HANDLED
}
public drag_end(id)
{
drag_a[id]=0
beam_remove(id)
remove_task(id)
tiempo_drag[id]=0
if(en_drag[id])
tiempo_ultimo_drag[id]=get_gametime()
en_drag[id]=false
}
public drag_player(parm[])
{
new id = parm[0]
new victim = parm[1]
harpoon_target(parm)
if(tiempo_drag[id]==(get_pcvar_num(max_duration)*10))
{
drag_end(id)
en_drag[id]=false
return
}
if (!drag_a[id] || !is_user_alive(victim))
{
drag_end(id)
en_drag[id]=false
return
}
new Float:fl_Velocity[3]
new idOrigin[3], vicOrigin[3]
get_user_origin(victim, vicOrigin)
get_user_origin(id, idOrigin)
new distance = get_distance(idOrigin, vicOrigin)
if (distance > 1)
{
fl_Velocity[0] = (idOrigin[0] - vicOrigin[0]) * get_pcvar_num(velocity)/100.0
fl_Velocity[1] = (idOrigin[1] - vicOrigin[1]) * get_pcvar_num(velocity)/100.0
fl_Velocity[2] = (idOrigin[2] - vicOrigin[2]) * get_pcvar_num(velocity)/100.0
} else {
fl_Velocity[0] = 0.0
fl_Velocity[1] = 0.0
fl_Velocity[2] = 0.0
}
tiempo_drag[id]++
entity_set_vector(victim, EV_VEC_velocity, fl_Velocity)
}
////// ANIMATION
public harpoon_target(parm[])
{
new id = parm[0]
new hooktarget = parm[1]
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(8)
write_short(id)
write_short(hooktarget)
write_short(g_Line)
write_byte(0)
write_byte(0)
write_byte(200)
write_byte(8)
write_byte(1)
write_byte(255)
write_byte(255)
write_byte(0)
write_byte(90)
write_byte(10)
message_end()
}
public no_target(id)
{
new endorigin[3]
get_user_origin(id, endorigin, 3)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte( TE_BEAMENTPOINT );
write_short(id)
write_coord(endorigin[0])
write_coord(endorigin[1])
write_coord(endorigin[2])
write_short(g_Line)
write_byte(0)
write_byte(0)
write_byte(10)
write_byte(8)
write_byte(1)
write_byte(255)
write_byte(255)
write_byte(0)
write_byte(75)
write_byte(0)
message_end()
}
public beam_remove(id)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(99)
write_short(id)
message_end()
}