Fraction can't be 1.0 because ray hits target head before end point.
You can check it:
Code:
#include <amxmodx>
#include <fakemeta>
public plugin_init() {
register_clcmd("say /checkvis", "OnClientCmdSayCheckVisReceive");
}
public OnClientCmdSayCheckVisReceive(player) {
new anotherPlayer = FindAnotherPlayer(player);
if (anotherPlayer != 0) {
new traceResult = create_tr2();
engfunc(
EngFunc_TraceLine,
GetPlayerEyePosition(player),
GetPlayerEyePosition(anotherPlayer),
DONT_IGNORE_MONSTERS,
player,
traceResult);
new Float:fraction;
get_tr2(traceResult, TR_flFraction, fraction);
client_print(
player,
print_chat,
"InOpen: %s, InWater: %s, Fraction: %.3f",
get_tr2(traceResult, TR_InOpen) != 0 ? "True" : "False",
get_tr2(traceResult, TR_InWater) != 0 ? "True" : "False",
fraction);
free_tr2(traceResult);
}
}
FindAnotherPlayer(currentPlayer) {
new bool:found = false;
new savedPlayer = 0;
for (new anotherPlayer = 1; anotherPlayer <= get_maxplayers(); anotherPlayer++) {
if (!is_user_alive(anotherPlayer)) {
continue;
}
if (anotherPlayer != currentPlayer) {
if (found) {
return 0;
}
savedPlayer = anotherPlayer;
found = true;
}
}
return savedPlayer;
}
Float:GetPlayerEyePosition(player) {
new Float:position[3];
pev(player, pev_origin, position);
new Float:eyeOffset[3];
pev(player, pev_view_ofs, eyeOffset);
position[0] += eyeOffset[0];
position[1] += eyeOffset[1];
position[2] += eyeOffset[2];
return position;
}
__________________