prox detector help.
#1

Hello, im developing a gamemode and and im going pretty good with.

I mean like for a starter its amazing i guess :P

So i have the prox detector for chat but when i spectate someone i want to see their chats too.

Anybody can help?

Код:
stock ProxDetector(Float:radi, playerid, string[],color)
{
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
        if(IsPlayerInRangeOfPoint(i,radi,x,y,z) || IsPlayerInRangeOfPoint(GetPlayerCameraPos(i),radi,x,y,z))
        {
            SendClientMessage(i,color,string);
        }
    }
}
I know its a wrong use of getplayercamerapos but what can i use this like?
Reply
#2

Try this, this is multicolor proxy, you can set your own colors for distances.

Код:
forward ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5);
public ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5)
{
	new Float:posx, Float:posy, Float:posz, Float:oldposx, Float:oldposy, Float:oldposz, Float:tempposx, Float:tempposy, Float:tempposz;
	GetPlayerPos(playerid, oldposx, oldposy, oldposz);
	foreach( Player, i )
	{
		if(PlayerConnected[ i ] == 1)
		{
			GetPlayerPos(i, posx, posy, posz);
			tempposx = (oldposx -posx);
			tempposy = (oldposy -posy);
			tempposz = (oldposz -posz);
			if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
			{
				SCM(i, col1, string);
			}
			else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
			{
				SCM(i, col2, string);
			}
			else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
			{
				SCM(i, col3, string);
			}
			else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
			{
				SCM(i, col4, string);
			}
			else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
			{
				SCM(i, col5, string);
			}
		}
	}
}
Reply
#3

Thats not what i wanted i know it already. What I want is, When I use /spectate, It will bring my camera to there. Its easy to make but as my characcter is not there and, only came sees everything. I cant see chats.
Reply
#4

Then try this.
Код:
stock ProxDetector(Float:radi, playerid, string[],color)
{
    new Float:x,Float:y,Float:z,Float:xs, Float:ys, Float:zs;
    GetPlayerPos(playerid,x,y,z);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
        GetPlayerCameraPos(i, xs, ys, zs);
        if(IsPlayerInRangeOfPoint(i,radi,x,y,z)  || PlayerNearCamera(playerid, xs, ys, zs))
        {
            SendClientMessage(i,color,string);
        }
    }
}
Код:
stock PlayerNearCamera(playerid, camx, camy, camz, Float: range = 20.0) {
	new Float: tempdist = GetPlayerDistanceFromPoint(playerid, camx, camy, camz);
    if(tempdist <= range) {
        return true;
    }
    return false;
}
Im not sure that will work, but try.
Reply
#5

If u have a spectate system u should have a Timer and a var who get the playerid of spectated player by an admin.

Ex:

Код:
new SpectateID[MAX_PLAYER]; //-> This remember the playerid of your player you want to spectate.
Now u need to change a little ur function, and maybe your /spectate, /spectateoff and your Timer.

Код:
forward ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5);
public ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5)
{
	new Float:posx, Float:posy, Float:posz, Float:oldposx, Float:oldposy, Float:oldposz, Float:tempposx, Float:tempposy, Float:tempposz;
	GetPlayerPos(playerid, oldposx, oldposy, oldposz);
	foreach( Player, i )
	{
		if(PlayerConnected[ i ] == 1)
		{
                       if(SpectateID[i] == playerid)
                       {
                              SCM(i, col1, string);
                       }
                       else
                       {
                               GetPlayerPos(i, posx, posy, posz);
			       tempposx = (oldposx -posx);
			       tempposy = (oldposy -posy);
			       tempposz = (oldposz -posz);
			       if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
			       {
				       SCM(i, col1, string);
			       }
			       else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
			       {
				       SCM(i, col2, string);
			       }
			       else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
			       {
				       SCM(i, col3, string);
			       }
			       else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
			       {
				       SCM(i, col4, string);
			       }
			       else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
			       {
				       SCM(i, col5, string);
			       }
                       }
		}
	}
}
Reply
#6

Quote:
Originally Posted by kingmk
Посмотреть сообщение
If u have a spectate system u should have a timer and a var who get the playerid of spectated player by an admin.

Ex:

Код:
new SpectateID[MAX_PLAYER]; //-> This remember the playerid of your player you want to spectate.
Now u need to change a little ur function.

Код:
forward ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5);
public ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5)
{
	new Float:posx, Float:posy, Float:posz, Float:oldposx, Float:oldposy, Float:oldposz, Float:tempposx, Float:tempposy, Float:tempposz;
	GetPlayerPos(playerid, oldposx, oldposy, oldposz);
	foreach( Player, i )
	{
		if(PlayerConnected[ i ] == 1)
		{
                       if(SpectateID[i] == playerid)
                       {
                              SCM(i, col1, string);
                       }
                       else
                       {
                               GetPlayerPos(i, posx, posy, posz);
			       tempposx = (oldposx -posx);
			       tempposy = (oldposy -posy);
			       tempposz = (oldposz -posz);
			       if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
			       {
				       SCM(i, col1, string);
			       }
			       else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
			       {
				       SCM(i, col2, string);
			       }
			       else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
			       {
				       SCM(i, col3, string);
			       }
			       else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
			       {
				       SCM(i, col4, string);
			       }
			       else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
			       {
				       SCM(i, col5, string);
			       }
                       }
		}
	}
}
That will write the chat just of that player you spectate, not local.
Reply
#7

Quote:
Originally Posted by Danisoni
Посмотреть сообщение
That will write the chat just of that player you spectate, not local.
I don't think so, cuz we have a loop, a Foreach, who will check for all players, and i don't see there a return or break to stop the loop.
Reply
#8

thank you all for answers + reps given. i applied some changes to what kingmk have given and it works now
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)