Zastanowiłem się nad tym i szczerze mówiąc nie ma potrzeby sprawdzania dwa razy odległości od gracza, bo get_user_aiming też ją zwraca.
Można więc zrobić to o wiele prościej. Wykorzystałem PreThink, bo przy nim get_user_aiming działa dokładniej.
Dodałem sobie dla testu HUD, żeby sprawdzić, czy broń jest wyrzucana w odpowiednim momencie. Kod działa, bo sprawdziłem go na swoim serwerze.
#include <amxmodx>
#include <fakemeta>
public plugin_init()
{
register_plugin("Weapon Drop", "1.0", "Test")
register_forward(FM_PlayerPreThink, "FW_PreThink");
}
public FW_PreThink(id)
{
new Target, Cialo;
new Float:Distance = get_user_aiming(id, Target, Cialo);
if(Target != 0 && is_user_alive(id) && is_user_alive(Target))
{
if(Distance <= 100.0)
{
if(get_user_weapon(Target) != CSW_KNIFE)
{
set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 0.1, 0.1);
show_hudmessage(id, "Dystans: %.2f unitow", Distance);
engclient_cmd(Target, "drop");
}
}
}
return FMRES_IGNORED;
}