SA-MP Forums Archive
I can see text from a player in a different Virtual World - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: I can see text from a player in a different Virtual World (/showthread.php?tid=481861)



I can see text from a player in a different Virtual World - Phil_Cutcliffe - 17.12.2013

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?


Re: I can see text from a player in a different Virtual World - BlackWolf120 - 17.12.2013

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);
    }
}



Re: I can see text from a player in a different Virtual World - Phil_Cutcliffe - 17.12.2013

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?


Re: I can see text from a player in a different Virtual World - BlackWolf120 - 17.12.2013

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.


Re: I can see text from a player in a different Virtual World - Phil_Cutcliffe - 17.12.2013

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.


Re: I can see text from a player in a different Virtual World - Phil_Cutcliffe - 17.12.2013

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;
}



Re: I can see text from a player in a different Virtual World - Phil_Cutcliffe - 17.12.2013

EDIT: Sorry for double post, edited above post.