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?
|