distance -
Headshot1108 - 13.08.2011
can anyone give me a function to get the distance from a player to another player?
when a player killed another player, it should display the distance between the killer and the victim.
Re: distance -
Riddick94 - 13.08.2011
pawn Code:
stock GetDistanceBetweenPlayers(playerid, giveplayerid)
{
new Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2;
GetPlayerPos(playerid, x1, y1, z1);
GetPlayerPos(giveplayerid, x2, y2, z2);
return floatround(floatsqroot(floatpower(floatabs(floatsub(x2,x1)), 2) + floatpower(floatabs(floatsub(y2,y1)),2) + floatpower(floatabs(floatsub(z2,z1)) ,2)));
}
pawn Code:
public OnPlayerDeath(playerid, killerid, reason[])
{
new distance = GetDistanceBetweenPlayers(playerid, killerid);
new string[128];
format(string, sizeof(string), "* Distance between you and a killer is: %dm.", distance);
SendClientMessage(playerid, -1, string);
// Set here timer and change it to GameTextForPlayer or what ever you wan't.
return true;
}
Re: distance -
Headshot1108 - 13.08.2011
thanks it worked =)
Re: distance -
Headshot1108 - 13.08.2011
i tired it to add %.2f insted of %d and didn't worked.
so it showed 0.00m.
Re: distance -
[MG]Dimi - 13.08.2011
What should %.2f represent?
Re: distance -
Headshot1108 - 13.08.2011
the exact number of metres, like 30.32 meters
Re: distance -
[MG]Dimi - 13.08.2011
Nver heard of something like that.
PHP Code:
Format Strings
Placeholder Meaning
%b Inserts a number at this position in binary radix
%c Inserts a single character.
%d Inserts an integer (whole) number
%f Inserts a floating point number.
%i Inserts an integer.
%s Inserts a string.
%x Inserts a number in hexadecimal notation.
%% Inserts the literal '%'
You probably need %f not %.2f
Re: distance -
Headshot1108 - 13.08.2011
ah okay,the %.2f means that there are 2 numbers after the comma.
and also tried %f,result was 0.00000000...
Re: distance -
Vince - 13.08.2011
Quote:
Originally Posted by [MG]Dimi
Nver heard of something like that.
|
Inform yourself better.
As to the problem: That function GetDistanceBetweenPlayers (which is really awfully coded) returns an integer variable, not a float. In order to return a float from that function, you need to remove the floatround() in it. This function will return a float value and is coded a lot cleaner:
pawn Code:
stock Float:GetDistanceBetweenPlayers(p1, p2)
{
if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2))
return FLOAT_NAN;
new
Float:x1,
Float:y1,
Float:z1,
Float:x2,
Float:y2,
Float:z2;
GetPlayerPos(p1,x1,y1,z1);
GetPlayerPos(p2,x2,y2,z2);
return GetDistanceBetweenPoints(x1, y1, z1, x2, y2, z2);
}
stock Float:GetDistanceBetweenPoints(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
{
x1 -= x2;
y1 -= y2;
z1 -= z2;
return floatsqroot((x1 * x1) + (y1 * y1) + (z1 * z1));
}
Re: distance -
Headshot1108 - 13.08.2011
how the code could be done better?
Re: distance -
[MG]Dimi - 13.08.2011
Are you sure someone is actually killing you? coz
PHP код:
SetPlayerHealth(playerid,0);
won't work
Re: distance -
Headshot1108 - 13.08.2011
thanks for the code, but i got these errors:
warning 208: function with tag result used before definition, forcing reparse (line: 20456)
warning 208: function with tag result used before definition, forcing reparse (line: 20475)
error 017: undefined symbol "FLOAT_NAN" (line: 20459)
warning 213: tag mismatch (line: 20459)
my code:
pawn Код:
new Float:Distance;
Distance = GetDistanceBetweenPlayers(killerid,playerid);
format(string,sizeof(string),"Distance: %.2f",Distance);
pawn Код:
stock Float:GetDistanceBetweenPlayers(p1, p2) // line 20456
{
if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2))
return FLOAT_NAN; // line 20459
new
Float:x1,
Float:y1,
Float:z1,
Float:x2,
Float:y2,
Float:z2;
GetPlayerPos(p1,x1,y1,z1);
GetPlayerPos(p2,x2,y2,z2);
return GetDistanceBetweenPoints(x1, y1, z1, x2, y2, z2);
}
stock Float:GetDistanceBetweenPoints(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2) //line 20475
{
x1 -= x2;
y1 -= y2;
z1 -= z2;
return floatsqroot((x1 * x1) + (y1 * y1) + (z1 * z1));
}
Re: distance -
Vince - 13.08.2011
Put these things on top:
pawn Код:
#define FLOAT_NAN (Float:0xFFFFFFFF)
forward Float:GetDistanceBetweenPlayers(p1, p2);
forward Float:GetDistanceBetweenPoints(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2);
Re: distance -
Headshot1108 - 13.08.2011
ah thanks man works now! =)