I think this should do it...
Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>
new aiming_good[33];
public plugin_init() {
register_plugin("i aim good","0.13","Avalanche");
register_forward(FM_TraceLine,"fw_traceline");
register_concmd("i_aim_good","cmd_setaim",ADMIN_BAN,"<user|^"@all^"> <0|1> - makes user aim good");
}
public client_putinserver(id) {
aiming_good[id] = 0;
}
public cmd_setaim(id,level,cid) {
if(!cmd_access(id,level,cid,3))
return PLUGIN_HANDLED;
new arg1[32], arg2[32];
read_argv(1,arg1,31);
read_argv(2,arg2,31);
if(equali(arg1, "@all"))
{
for(new i = 0; i < get_maxplayers(); i++)
{
if(is_user_connected(i))
{
if(str_to_num(arg2))
aiming_good[i] = 1;
else
aiming_good[i] = 0;
}
}
console_print(id,"* All players %s aim good",(str_to_num(arg2)) ? "now" : "no longer");
return PLUGIN_HANDLED;
}
new player = cmd_target(id,arg1,10);
if(!player)
return PLUGIN_HANDLED;
if(str_to_num(arg2))
aiming_good[player] = 1;
else
aiming_good[player] = 0;
new playername[32];
get_user_name(player,playername,31);
console_print(id,"* %s %s aims good",playername,(str_to_num(arg2)) ? "now" : "no longer");
return PLUGIN_HANDLED;
}
public fw_traceline(Float:v1[3],Float:v2[3],noMonsters,id) {
if(!is_user_alive(id))
return FMRES_IGNORED;
if(!aiming_good[id])
return FMRES_IGNORED;
// get crosshair aim
new MyAim[3], Float:flMyAim[3];
get_user_origin(id,MyAim,3);
IVecFVec(MyAim,flMyAim);
// set crosshair aim
set_tr(TR_vecEndPos,flMyAim);
// get ent looking at
new ent, body;
get_user_aiming(id,ent,body);
// if looking at something
if(is_valid_ent(ent)) {
set_tr(TR_flFraction,0.1); // 1.0 == no hit, < 1.0 == hit
set_tr(TR_pHit,ent); // entity hit
set_tr(TR_iHitgroup,body); // bodypart hit
}
return FMRES_IGNORED;
}