CMD:ff(playerid, params)
{
if(playerVariables[playerid][pAdminLevel] > 0)
{
new Float:fPX, Float:fPY, Float:fVX, Float:fVY, Float:object_x, Float:object_y, Float:player_x, Float:player_y, Float:player_z;
const Float:fScale = 20.0;
GetPlayerCameraPos(playerid, fPX, fPY, player_z); //Ignore player_z here
GetPlayerCameraFrontVector(playerid, fVX, fVY, player_z); //Ignore player_z here
object_x = fPX + floatmul(fVX, fScale);
object_y = fPY + floatmul(fVY, fScale);
GetPlayerPos(playerid, player_x, player_y, player_z);
SetPlayerPosEx(playerid, object_x, object_y, player_z);
}
else return SendClientMessage(playerid, -1, AdminOnly);
return 1;
}
|
Because GetPlayerCameraPos are only updated once a second for every client, that's your issue?
|
CMD:ff(playerid, params)
{
if(playerVariables[playerid][pAdminLevel] > 0)
{
if(!GetPVarInt(playerid, "SendCmd")) return SetPVarInt(playerid, "SendCmd", true);
else DeletePVar(playerid, "SendCmd");
}
else return SendClientMessage(playerid, -1, AdminOnly);
return 1;
}
public OnPlayerUpdate(playerid)
{
if(GetPVarInt(playerid, "SendCmd"))
{
new Float:fPX, Float:fPY, Float:fVX, Float:fVY, Float:object_x, Float:object_y, Float:player_x, Float:player_y, Float:player_z;
const Float:fScale = 20.0;
GetPlayerCameraPos(playerid, fPX, fPY, player_z); //Ignore player_z here
GetPlayerCameraFrontVector(playerid, fVX, fVY, player_z); //Ignore player_z here
object_x = fPX + floatmul(fVX, fScale);
object_y = fPY + floatmul(fVY, fScale);
GetPlayerPos(playerid, player_x, player_y, player_z);
SetPlayerPosEx(playerid, object_x, object_y, player_z);
DeletePVar(playerid, "SendCmd");
}
return 1;
}
|
Why are you using the player's camera position to update the player's on-foot position? Why not use GetPlayerPos instead?
|