getclosestplayer problem
#1

here if i do /tk it returns this and there is someone near me with a wanted lvl..

pawn Код:
if(closest == -1 || GetDistanceBetweenPlayers(playerid,closest) > 10) return SendClientMessage(playerid,COLOR_RED,"There are no players closes enough to issue a ticket");
whole cmd

pawn Код:
CMD:ticket(playerid,cmdtext[])
{
    new string[128],tmp[256],idx,giveplayerid;
    if(IsSpawned[playerid] == 0) return SendClientMessage(playerid, COLOR_RED,OnlyAlive);
    if(gTeam[playerid] != 1 && gTeam[playerid] != 2) return SendClientMessage(playerid, COLOR_RED,NoUseWSkill);
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
        new closest = GetClosestTicketable(playerid);
        if(closest == -1 || GetDistanceBetweenPlayers(playerid,closest) > 10) return SendClientMessage(playerid,COLOR_RED,"There are no players closes enough to issue a ticket");

        new officer[30], suspect[30], skill[20];
        GetPlayerName(playerid,officer,30);
        GetPlayerName(closest,suspect,30);

        if(gTeam[playerid] == 1) {
        format(skill,sizeof(skill),"SA Army Officer");
        }
        else if(gTeam[playerid] == 2) {
        format(skill,sizeof(skill),"Police Officer");
        }

        // Officer Stuff
        format(string,sizeof(string),"You have issued a ticket to suspect %s(%d). Wait around to see if they pay",suspect,closest);
        SendClientMessage(playerid,PURPLE,string);
        // Suspect Stuff
        format(string,sizeof(string),"%s %s(%d) Has issued a ticket to you! Type /pay or your wanted level might increase",skill,officer,playerid);
        SendClientMessage(closest,PURPLE,string);

        TicketPlayer(closest);
        PlayerInfo[playerid][Tickets]++;
        return 1;
    }

    new stringLength = strlen(tmp);
    if(stringLength >= 49) return 0;
    if(IsNumeric(tmp))
    {
        giveplayerid = strval(tmp);
    }
    else
    if(!IsNumeric(tmp))
    {
        giveplayerid = ReturnPlayer(tmp);
    }

    if(giveplayerid == playerid) return SendClientMessage(playerid,COLOR_RED,NotOnYourself);
    if(giveplayerid == -1) return SendClientMessage(playerid,COLOR_RED,"Multiple players found or none atall. Please narrow your search.");
    if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid,COLOR_RED,NoActive);
    if(IsPlayerNPC(giveplayerid)) return SendClientMessage(playerid,COLOR_RED,NotOnANPC);
    if(GetDistanceBetweenPlayers(giveplayerid,playerid) > 10) return SendClientMessage(playerid, COLOR_RED,PlayerToFarAway);
    if(gTeam[giveplayerid] <= 2) return SendClientMessage(playerid, COLOR_RED,"You cannot issue tickets to Police Officers, Medics, Casino Security or Army Officers");
    if(IsSpawned[giveplayerid] == 0) return SendClientMessage(playerid, COLOR_RED,POnlyAlive);
    if(GetPlayerWantedLevel(giveplayerid) <= 0) return SendClientMessage(playerid, COLOR_RED,"You cannot issue a ticket to that player. That player is innocent (Type /pc)");
    if(GetPlayerWantedLevel(giveplayerid) >= 4) return SendClientMessage(playerid, COLOR_RED,"You cannot issue a ticket to that player. That player's wanted level is too high! Use /arrest (id/name) instead");
    if(PlayerHasReceivedATicket[playerid] != 0) return SendClientMessage(playerid, COLOR_RED,"That player has an outstanding ticket to pay. Stay nearby to see if he pays the ticket");

    new officer[30], suspect[30], skill[20];
    GetPlayerName(playerid,officer,30);
    GetPlayerName(giveplayerid,suspect,30);
    if(gTeam[playerid] == 1) {
    format(skill,sizeof(skill),"SA Army Officer");
    }
    else if(gTeam[playerid] == 2) {
    format(skill,sizeof(skill),"Police Officer");
    }
    // Officer Stuff
    format(string,sizeof(string),"You have issued a ticket to suspect %s(%d). Wait around to see if they pay",suspect,giveplayerid);
    SendClientMessage(playerid,PURPLE,string);
    // Suspect Stuff
    format(string,sizeof(string),"%s %s(%d) Has issued a ticket to you! Type /pay or your wanted level might increase",skill,officer,playerid);
    SendClientMessage(giveplayerid,PURPLE,string);
    TicketPlayer(giveplayerid);
    PlayerInfo[playerid][Tickets] ++;
    return 1;
}
Reply
#2

anyone...
Reply
#3

Hi Kar. You could try a different way of approaching it. Take a look at this function I quickly made up..


Код:
public GetClosestPlayer(playerid,Float:maxdis)
{
	new minid = -1;
	new Float:mindis;
	new Float:X, Float:Y, Float:Z;
	for(new i=0; i<MAX_PLAYERS; i++)
	{
	
	    if(IsPlayerConnected(i) && !IsPlayerNPC(i))
	    {
	    
			GetPlayerPos(i,X,Y,Z);
			if(IsPlayerInRangeOfPoint(playerid,maxdis,X,Y,Z))
			{
			
			    if(minid == -1) { minid = i; mindis = GetDistanceBetweenPlayers(playerid,i); }
			    else if(GetDistanceBetweenPlayers(playerid,i) < mindis) { minid = i; mindis = GetDistanceBetweenPlayers(playerid,i); }
			
			}
	    
	    }
	
	}
	return minid;
}
maxdis = The maximum possible distance between the players. If the function returns -1 there is noone within range. Give it a try.

Cheers,

TJ
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)