SSCANF help. -
PaulDinam - 24.06.2013
I'm trying to make a report cmd like this:
the player can do
/report [text] or /report [playerid] [report text]
I made this:
pawn Код:
CMD:report(playerid, params[])
{
new id, text[128];
if(!sscanf(params, "s[128]", text) && sscanf(params, "us[128]", id, text))
{
Reported{playerid} = true;
format(ReportText[playerid], 128, "%s", params);
ReportPlayer[playerid] = INVALID_PLAYER_ID;
SCMEx(playerid, COLOR_CYAN, "You have sent a report: %s", params);
format(mstr, sizeof(mstr), "The player %s[ID:%d] has reported: %s.", GetNameEx(playerid), playerid, params);
AdminsMSG(COLOR_LIGHTRED, mstr);
}
else if(!sscanf(params, "us[128]", id, text))
{
Reported{playerid} = true;
format(ReportText[playerid], 128, "%s", params);
ReportPlayer[playerid] = id;
SCMEx(playerid, COLOR_CYAN, "You have reported %s[ID:%d]: %s", GetNameEx(id), id, params);
format(mstr, sizeof(mstr), "> %s[ID:%d] reported %s[ID:%d]: %s.", GetNameEx(playerid), playerid, GetNameEx(id), id, params);
AdminsMSG(COLOR_LIGHTRED, mstr);
}
else return SyntaxMSG(playerid, "/report (Optional[playerid]) [report text]");
return 1;
}
But it's kinda buggy .. can anyone help me or tell me what's wrong?
Respuesta: SSCANF help. -
JustBored - 24.06.2013
pawn Код:
CMD:report(playerid, params[])
{
if(!sscanf(params, "Us[128]", params[0], params[1]))
{
if(!params[0])
{
Reported{playerid} = true;
format(ReportText[playerid], 128, "%s", params[1]);
ReportPlayer[playerid] = INVALID_PLAYER_ID;
SCMEx(playerid, COLOR_CYAN, "You have sent a report: %s", params[1]);
format(mstr, sizeof(mstr), "The player %s[ID:%d] has reported: %s.", GetNameEx(playerid), playerid, params[1]);
AdminsMSG(COLOR_LIGHTRED, mstr);
}
else if(params[0])
{
Reported{playerid} = true;
format(ReportText[playerid], 128, "%s", params[1]);
ReportPlayer[playerid] = id;
SCMEx(playerid, COLOR_CYAN, "You have reported %s[ID:%d]: %s", GetNameEx(id), params[0], params[1]);
format(mstr, sizeof(mstr), "> %s[ID:%d] reported %s[ID:%d]: %s.", GetNameEx(playerid), playerid, GetNameEx(params[0]), params[0], params[1]);
AdminsMSG(COLOR_LIGHTRED, mstr);
}
else return SyntaxMSG(playerid, "/report (Optional[playerid]) [report text]");
return 1;
}
I think that should work. Also check this:
https://sampforum.blast.hk/showthread.php?tid=120356
The part of optional specifiers.
Re: SSCANF help. -
Pottus - 24.06.2013
Try it like this, I can't really test it but I'm pretty sure it should work.
pawn Код:
CMD:report(playerid, params[])
{
new id, text[128];
if(!isnull(params))
{
sscanf(params, "us[128]", id, text);
if(id != INVALID_PLAYER_ID)
{
Reported{playerid} = true;
format(ReportText[playerid], 128, "%s", params);
ReportPlayer[playerid] = INVALID_PLAYER_ID;
SCMEx(playerid, COLOR_CYAN, "You have sent a report: %s", params);
format(mstr, sizeof(mstr), "The player %s[ID:%d] has reported: %s.", GetNameEx(playerid), playerid, params);
AdminsMSG(COLOR_LIGHTRED, mstr);
}
else
{
if(!isnull(text))
{
Reported{playerid} = true;
format(ReportText[playerid], 128, "%s", params);
ReportPlayer[playerid] = id;
SCMEx(playerid, COLOR_CYAN, "You have reported %s[ID:%d]: %s", GetNameEx(id), id, params);
format(mstr, sizeof(mstr), "> %s[ID:%d] reported %s[ID:%d]: %s.", GetNameEx(playerid), playerid, GetNameEx(id), id, params);
AdminsMSG(COLOR_LIGHTRED, mstr);
}
else SyntaxMSG(playerid, "/report (Optional[playerid]) [report text]");
}
}
else SyntaxMSG(playerid, "/report (Optional[playerid]) [report text]");
return 1;
}