/pm problems
#1

I have this as my /pm command. It compiles without error. However in game, when i try to send a /pm, it always tells me Usage: /pm (id) (message). Can someone help me out in finding what is going wrong?

pawn Код:
if(strcmp(cmd,"/pm", true)==0)
    {
        new pName[256];
        new iName[256];
        new gMessage[256];
        new Message[256];
        #define strrest

    tmp = strtok(cmdtext,idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,0xFF0000FF,"USAGE: /PM (id) (message)");
    new id = strval(tmp);
    gMessage[5] = strrest(cmdtext,idx);
    if(!strlen(gMessage)) return SendClientMessage(playerid,0xFF0000FF,"Usage: /pm (id) (message)");
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid,0xFF0000FF,"/pm :Invalid ID");
    GetPlayerName(id,iName,sizeof(iName));
    GetPlayerName(playerid,pName,sizeof(pName));
    format(Message,sizeof(Message),">> %s(%i): %s",iName,id,gMessage);
    SendClientMessage(playerid,0xFFD720FF,Message);
    format(Message,sizeof(Message),"** %s(%i): %s",pName,playerid,gMessage);
    SendClientMessage(id,0xFFD720FF,Message);
    PlayerPlaySound(id,1085,0.0,0.0,0.0);
    return 1;
    }
Reply
#2

pawn Код:
#define strrest
What? you must have the strrest function, not just define it like that.
Reply
#3

This should work

pawn Код:
if(!strcmp(cmdtext[1],"pm",true,2))
    {
    if(!cmdtext[3]||!cmdtext[4])return SendClientMessage(playerid,0xF8DA07FF,"USAGE: /pm [playerid] [text]");
    new receiverid = strval(cmdtext[4]);
    if(!IsPlayerConnected(receiverid))return SendClientMessage(playerid,0xF8DA07FF,"Invalid Player ID!");
    new begintext = strfind(cmdtext[4]," ")+1;
    if(!strlen(cmdtext[begintext]))return SendClientMessage(playerid,0xF8DA07FF,"USAGE: /pm [playerid] [text]");
    OnPlayerPrivmsg(playerid, receiverid, cmdtext[begintext]);
    return 1;
    }
Reply
#4

Код:
stock strrest(const string[], &index)
{
	new length = strlen(string);
	while ((index < length) && (string[index] <= ' '))
	{
		index++;
	}
	new offset = index;
	new result[128];
	while ((index < length) && ((index - offset) < (sizeof(result) - 1)))
	{
		result[index - offset] = string[index];
		index++;
	}
	result[index - offset] = EOS;
	return result;
}
Reply
#5

Quote:
Originally Posted by jamesb93
This should work

pawn Код:
if(!strcmp(cmdtext[1],"pm",true,2))
    {
    if(!cmdtext[3]||!cmdtext[4])return SendClientMessage(playerid,0xF8DA07FF,"USAGE: /pm [playerid] [text]");
    new receiverid = strval(cmdtext[4]);
    if(!IsPlayerConnected(receiverid))return SendClientMessage(playerid,0xF8DA07FF,"Invalid Player ID!");
    new begintext = strfind(cmdtext[4]," ")+1;
    if(!strlen(cmdtext[begintext]))return SendClientMessage(playerid,0xF8DA07FF,"USAGE: /pm [playerid] [text]");
    OnPlayerPrivmsg(playerid, receiverid, cmdtext[begintext]);
    return 1;
    }
error 017: undefined symbol "OnPlayerPrivmsg"

0.3a doesn't have the OnPlayerPrivmsg Callback.

Reply
#6

pawn Код:
forward OnPlayerPrivmsg( playerid, recieverid, text[] );
:P
Reply
#7

Ah lol, didn't think of that.

Is there anything I need to add under the:

pawn Код:
public OnPlayerPrivmsg(playerid, recieverid, text[])
Reply
#8

Not unless you want it to do anything else.
Reply
#9

Okay, I have it set to also let the receiver know that they can turn off pms with a command. However, when I pm myself on a test server, I only receive that message, not the pm that I initially typed. Any thoughts?
Reply
#10

Sorry for the Double Post, Just bumping for an answer.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)