Team Chat
#1

Can someone help me make a Team Chat system.

Thanks

(Command /tc)
Reply
#2

You're using gTeam[playerid] == ?
Reply
#3

Top of source

pawn Код:
forward SendTeamMessage(team, color, string[]);
Under OnPlayerCommandText

Don't forget to add:

pawn Код:
new cmd[256];
    new idx;
    cmd = strtok(cmdtext, idx);
or it won't work.

pawn Код:
if(strcmp(cmd, "/teamchat", true) == 0 || strcmp(cmd, "/tc", true) == 0)
    {
        if(IsPlayerConnected(playerid))
        {
            new sendername[MAX_PLAYER_NAME];
            GetPlayerName(playerid, sendername, sizeof(sendername));
            new length = strlen(cmdtext);
            while ((idx < length) && (cmdtext[idx] <= ' '))
            {
                idx++;
            }
            new offset = idx;
            new result[64];
            while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
            {
                result[idx - offset] = cmdtext[idx];
                idx++;
            }
            result[idx - offset] = EOS;
            if(!strlen(result))
            {
                SendClientMessage(playerid, COLOR_WHITE, "USAGE: (/t)eam©hat [message]");
                return 1;
            }
            new team = gTeam[playerid];
            new string[128];
            format(string, sizeof(string), "[TEAM]: %s: %s", sendername, result);
            SendTeamMessage(team, 0x7BDDA5AA, string);
            printf("%s", string);
        }
        return 1;
    }
The SendTeamMessage callback:

pawn Код:
public SendTeamMessage(team, color, string[])
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            if(gTeam[i] == team)
            {
                SendClientMessage(i, color, string);
            }
        }
    }
}
If you don't have strtok already:

pawn Код:
strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }

    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}
Reply
#4

Quote:
Originally Posted by Shadow™
Посмотреть сообщение
You're using gTeam[playerid] == ?
Yes, I'll try what you said above now, although I'm not 100 per cent sure where the last bit would go.
Reply
#5

I don't fully understand where it all goes.. can you tell me?
Reply
#6

"strtok" should be "stock strtok" and put it at the bottom of your script.
Reply
#7

... It doesn't have to be stock... Just place it at the bottom of your script.
Reply
#8

Sorry, I was shown that it should be stock.
Reply
#9

I've done everything but this:

pawn Код:
new cmd[256];
    new idx;
    cmd = strtok(cmdtext, idx);
Because even when I put it ontop of the command like this:

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[256];
new idx;
cmd = strtok(cmdtext, idx);
if(strcmp(cmd, "/teamchat", true) == 0 || strcmp(cmd, "/tc", true) == 0)
    {
        if(IsPlayerConnected(playerid))
        {
            new sendername[MAX_PLAYER_NAME];
            GetPlayerName(playerid, sendername, sizeof(sendername));
            new length = strlen(cmdtext);
            while ((idx < length) && (cmdtext[idx] <= ' '))
            {
                idx++;
            }
            new offset = idx;
            new result[64];
            while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
            {
                result[idx - offset] = cmdtext[idx];
                idx++;
            }
            result[idx - offset] = EOS;
            if(!strlen(result))
            {
                SendClientMessage(playerid, COLOR_WHITE, "USAGE: (/t)eam©hat [message]");
                return 1;
            }
            new team = gTeam[playerid];
            new string[128];
            format(string, sizeof(string), "[TEAM]: %s: %s", sendername, result);
            SendTeamMessage(team, 0x7BDDA5AA, string);
            printf("%s", string);
        }
        return 1;
    }
I still get 26 errors:

pawn Код:
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(277) : error 004: function "SetPlayerToTeamColor" is not implemented
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(375) : error 017: undefined symbol "strtok"
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(375) : error 033: array must be indexed (variable "cmd")
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(397) : error 017: undefined symbol "COLOR_WHITE"
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(398) : error 079: inconsistent return types (array & non-array)
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(403) : error 004: function "SendTeamMessage" is not implemented
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(406) : error 079: inconsistent return types (array & non-array)
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(409) : error 029: invalid expression, assumed zero
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(409) : error 004: function "SendTeamMessage" is not implemented
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(415) : error 017: undefined symbol "team"
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(417) : error 017: undefined symbol "color"
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(423) : error 029: invalid expression, assumed zero
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(423) : error 004: function "OnPlayerEnterVehicle" is not implemented
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(425) : error 079: inconsistent return types (array & non-array)
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(428) : warning 225: unreachable code
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(428) : error 029: invalid expression, assumed zero
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(428) : error 004: function "OnPlayerExitVehicle" is not implemented
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(430) : error 079: inconsistent return types (array & non-array)
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(433) : warning 225: unreachable code
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(433) : error 029: invalid expression, assumed zero
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(433) : error 004: function "OnPlayerStateChange" is not implemented
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(435) : error 079: inconsistent return types (array & non-array)
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(438) : warning 225: unreachable code
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(438) : error 029: invalid expression, assumed zero
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(438) : error 004: function "OnPlayerEnterCheckpoint" is not implemented
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(441) : error 079: inconsistent return types (array & non-array)
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(444) : warning 225: unreachable code
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(444) : error 029: invalid expression, assumed zero
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(444) : error 004: function "OnPlayerLeaveCheckpoint" is not implemented
C:\Users\Johnny\Desktop\Urban TDM\gamemodes\UTDM.pwn(446) : error 079: inconsistent return types (array & non-array)

Compilation aborted.Pawn compiler 3.2.3664          Copyright (c) 1997-2006, ITB CompuPhase


26 Errors.
So I'm not sure if I'm putting it in the right place.
Help.
Reply
#10

^.^ You forgot to return 0; on the OnPlayerCommandText:

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    new cmd[256];
    new idx;
    cmd = strtok(cmdtext, idx);
    if(strcmp(cmd, "/teamchat", true) == 0 || strcmp(cmd, "/tc", true) == 0)
    {
        if(IsPlayerConnected(playerid))
        {
            new sendername[MAX_PLAYER_NAME];
            GetPlayerName(playerid, sendername, sizeof(sendername));
            new length = strlen(cmdtext);

            while ((idx < length) && (cmdtext[idx] <= ' '))
            {
                idx++;
            }
            new offset = idx;
            new result[64];
            while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
            {
                result[idx - offset] = cmdtext[idx];
                idx++;
            }
            result[idx - offset] = EOS;
            if(!strlen(result))
            {
                SendClientMessage(playerid, COLOR_WHITE, "USAGE: (/t)eam©hat [message]");
                return 1;
            }
            new team = gTeam[playerid];
            new string[128];
            format(string, sizeof(string), "[TEAM]: %s: %s", sendername, result);
            SendTeamMessage(team, 0x7BDDA5AA, string);
            printf("%s", string);
        }
        return 1;
    }
    return 0;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)