I can see text from a player in a different Virtual World
#1

Hi I've been developping my gamemode for over 2 years now and when I started I was using proxdetector. I can see chat from players in another virtual world in a shop for example using the same interior. Here's a little example of my code of some one talking. This is an RP server.

pawn Код:
if(PLogged[playerid] == 1)
    {
        if(WearingMask[playerid] == 0)
        {
            if(AccentOn[playerid] == 1)
            {
                format(string, sizeof(string), "%s says (%s accent): %s", GetPlayerNameEx(playerid), Accent[playerid],text);
                ProxDetector(20.0, playerid, string, COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE);
            }
            else
            {
                format(string, sizeof(string), "%s says: %s", GetPlayerNameEx(playerid),text);
                ProxDetector(20.0, playerid, string, COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE);
            }
        }
        else
        {
            if(AccentOn[playerid] == 1)
            {
                format(string, sizeof(string), "Masked person says (%s accent): %s", Accent[playerid], text);
                ProxDetector(20.0, playerid, string, COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE);
            }
            else
            {
                format(string, sizeof(string), "Masked person says: %s", text);
                ProxDetector(20.0, playerid, string, COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE);
            }
        }
    }
    return 0;
}
I was thinking of doing a check for all players to see if they were in the same world or something along the lines of that.

Maybe something like..

if(GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(i)
{
blah blah

Would this work alright?
Reply
#2

should work yes.


pawn Код:
new vWorld,
    string[128];
vWorld=GetPlayerVirtualWorld(playerid);
format(string,sizeof(qqv),/*...*/);
foreach (Player, i)
{
    if(GetPlayerVirtualWorld(i)==vWorld)
    {
        SendClientMessage(i, 0xFF66FFAA, string);
    }
}
Reply
#3

Quote:
Originally Posted by BlackWolf120
Посмотреть сообщение
should work yes.


pawn Код:
new vWorld,
    string[128];
vWorld=GetPlayerVirtualWorld(playerid);
format(string,sizeof(qqv),/*...*/);
foreach (Player, i)
{
    if(GetPlayerVirtualWorld(i)==vWorld)
    {
        SendClientMessage(i, 0xFF66FFAA, string);
    }
}
I was thinking more like this..

pawn Код:
if(PLogged[playerid] == 1)
    {
        new vworld = GetPlayerVirtualWorld(playerid);
        for(new i; i<GetMaxPlayers(); i++)
        {
            if(GetPlayerVirtualWorld(i) == vworld)
            {
                if(WearingMask[playerid] == 0)
                {
                    if(AccentOn[playerid] == 1)
                    {
                        format(string, sizeof(string), "%s says (%s accent): %s", GetPlayerNameEx(playerid), Accent[playerid],text);
                        ProxDetector(20.0, playerid, string, COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE);
                    }
                    else
                    {
                        format(string, sizeof(string), "%s says: %s", GetPlayerNameEx(playerid),text);
                        ProxDetector(20.0, playerid, string, COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE);
                    }
                }
                else
                {
                    if(AccentOn[playerid] == 1)
                    {
                        format(string, sizeof(string), "Masked person says (%s accent): %s", Accent[playerid], text);
                        ProxDetector(20.0, playerid, string, COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE);
                    }
                    else
                    {
                        format(string, sizeof(string), "Masked person says: %s", text);
                        ProxDetector(20.0, playerid, string, COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE);
                    }
                }
            }
        }
    }
    return 0;
}
Edit: Obviously need to change the playerid's in there and what not but that would work right?
Reply
#4

Your thinking is right, basically its the same thing
And yes, as you already said, you have to change the "playerid" to "i" so your loop will be implemented and take effect.
Right now it will work only for the PlayerID 0 as you do not loop though any other players.
Reply
#5

Quote:
Originally Posted by BlackWolf120
Посмотреть сообщение
Your thinking is right, basically its the same thing
And yes, as you already said, you have to change the "playerid" to "i" so your loop will be implemented and take effect.
Right now it will work only for the PlayerID 0 as you do not loop though any other players.
Yeah awesome that's what I thought. Just trying it out now with a few players. Cheers pal.
Reply
#6

Got a problem with this.. It doesn't seem to be working..

pawn Код:
if(PLogged[playerid] == 1)
    {
        new vworld = GetPlayerVirtualWorld(playerid);
        for(new i; i<GetMaxPlayers(); i++)
        {
            if(GetPlayerVirtualWorld(i) == vworld)
            {
                if(WearingMask[playerid] == 0)
                {
                    if(AccentOn[playerid] == 1)
                    {
                        format(string, sizeof(string), "%s says (%s accent): %s", GetPlayerNameEx(playerid), Accent[playerid],text);
                        ProxDetector(20.0, i, string, COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE);
                    }
                    else
                    {
                        format(string, sizeof(string), "%s says: %s", GetPlayerNameEx(playerid),text);
                        ProxDetector(20.0, i, string, COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE);
                    }
                }
                else
                {
                    if(AccentOn[playerid] == 1)
                    {
                        format(string, sizeof(string), "Masked person says (%s accent): %s", Accent[playerid], text);
                        ProxDetector(20.0, i, string, COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE);
                    }
                    else
                    {
                        format(string, sizeof(string), "Masked person says: %s", text);
                        ProxDetector(20.0, i, string, COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE,COLOR_WHITE);
                    }
                }
            }
        }
    }
    return 0;
}
FIXED:

I edited the ProxDetector public function

pawn Код:
forward ProxDetector(Float:radi, playerid, str[], col1, col2, col3, col4, col5);

public ProxDetector(Float:radi, playerid, str[],col1,col2,col3,col4,col5)
{
    if(IsPlayerConnected(playerid))
    {
        new Float:posx, Float:posy, Float:posz;
        new Float:oldposx, Float:oldposy, Float:oldposz;
        new Float:tempposx, Float:tempposy, Float:tempposz;
        new vworld = GetPlayerVirtualWorld(playerid);
        GetPlayerPos(playerid, oldposx, oldposy, oldposz);
        //radi = 2.0; //Trigger Radius
        for(new i = 0; i < MAX_PLAYERS; i++)
        {
            if(IsPlayerConnected(i))
            {
                if(GetPlayerVirtualWorld(i) == vworld)
                {
                    GetPlayerPos(i, posx, posy, posz);
                    tempposx = (oldposx -posx);
                    tempposy = (oldposy -posy);
                    tempposz = (oldposz -posz);
                    //printf("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
                    if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
                    {
                    SendClientMessage(i, col1, str);
                    }
                    else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
                    {
                    SendClientMessage(i, col2, str);
                    }
                    else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
                    {
                    SendClientMessage(i, col3, str);
                    }
                    else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
                    {
                    SendClientMessage(i, col4, str);
                    }
                    else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
                    {
                    SendClientMessage(i, col5, str);
                    }
                }
            }
        }
    }//not connected
    return 1;
}
Reply
#7

EDIT: Sorry for double post, edited above post.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)