22.08.2012, 07:23
That's obviously not what he's asking for...
If you're using a filterscript, OnFilterScriptInit, Gamemode, etc.
This code SHOULD work. Note: Untested.
Foreach include is RECOMMENDED.
If you're using a filterscript, OnFilterScriptInit, Gamemode, etc.
pawn Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
new PlayerTracking[MAX_PLAYERS];
public OnFilterScriptInit() //Or OnGameModeInit() if you're using a gamemode.
{
SetTimer("TrackPlayer", 2000, true);
return 1;
}
public OnPlayerConnect(playerid)
{
PlayerTracking[playerid] = -1; //-1 so it won't get mixed up with existant Player IDs.
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
for(new i = 0; i < MAX_PLAYERS; i++) //Alternatively, you can use foreach here, as it is more efficient.
{
if(IsPlayerConnected(i))
{
if(i != playerid)
{
if(PlayerTracking[i] == playerid)
{
SendClientMessage(i, 0xFF0000FF, "The Player You Were Tracking Has Disconnected From The Server.");
PlayerTracking[i] = -1;
}
}
}
}
return 1;
}
CMD:findp(playerid,params[])
{
new id;
if(sscanf(params,"u",playerid)) return SendClientMessage(playerid, 0xFF0000FF, "SYNTAX ERROR: {00FF00}/FINDP {FFFF00}<PlayerID>");
if(id == playerid) return SendClientMessage(playerid, 0xFF0000FF, "You Can't Track Yourself!");
if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xFF0000FF, "This Player Is Not Connected.");
if(PlayerTracking[playerid] == id) return SendClientMessage(playerid, 0xFF0000FF, "You Are Already Tracking This Player!");
new string[45];
new name[MAX_PLAYER_NAME];
GetPlayerName(id, name, MAX_PLAYER_NAME);
format(string,sizeof(string),"You Are Now Tracking %s (%d).",name, id);
PlayerTracking[playerid] = id;
return 1;
}
CMD:cancelfind(playerid,params[])
{
if(PlayerTracking[playerid] == -1) return SendClientMessage(playerid, 0xFF0000FF, "You Are Not Tracking Anyone!");
SendClientMessage(playerid, 0xFFFF00FF, "You Are No Longer Tracking A Player.");
PlayerTracking[playerid] = -1;
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
DisablePlayerCheckpoint(playerid);
SendClientMessage(playerid, 0xFFFF00FF, "You Have Reached Your Tracked Player's Location.");
PlayerTracking[playerid] = -1;
return 1;
}
forward TrackPlayer(playerid);
public TrackPlayer(playerid)
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerTracking[i] != -1)
{
new Float:X, Float:Y, Float:Z;
GetPlayerPos(PlayerTracking[i],X,Y,Z);
DisablePlayerCheckpoint(i);
SetPlayerCheckpoint(i, X, Y, Z, 5);
}
}
}
return 1;
}
Foreach include is RECOMMENDED.