Kleine frage
bei den code
if(!strcmp(cmd, "/say", true))
{
tmp = strtok(cmdtext, idx);
if(!tmp[0]) return ShowError(playerid,"/say [text]");
format(string,128,"*Admin: %s",tmp);
SendClientMessageToAll(cBlue,string);
return 1;
}
wenn ich jetzt /say ich bin da eingebe, dann steht da nur nach den Admin ich
Wie kann ich das machen, das er mir den satz ausgibt?
Alles anzeigen
das geht hier nicht so einfach da strok den string hier splittet.
Daher musst du den string so gesehen insgesamt auseinandernehmen und nochmal zusammensetzen
ich hab die variante , welche man vom gf kennt mal bissle um strukturiert.
EOS bedeutet End of String falls dich das zusätzlich interessiert,
if(!strcmp(cmd, "/say", true, 4))
{
if(strlen(cmd) > 6)return SendClientMessage(playerid,-1,"/say [text]2");
new length = strlen(cmdtext);
for(; idx < length; idx++)if(cmdtext[idx] <= ' ')break;
new offset = idx, result[64],string[128];
for(; (idx < length) && ((idx - offset) < (sizeof(result) - 1)); idx++)result[idx - offset] = cmdtext[idx];
result[idx - offset] = EOS;
format(string,128,"*Admin: %s",result);
SendClientMessageToAll(-1,string);
return 1;
}
die 4 habe ich extra stehen lassen das du da einen zusammenhang mit der 6 erkennen kannst.
du kannst das ganze auch mit sscanf machen.
if(!strcmp(cmdtext, "/say2", true, 5))
{
new tmp[128],string[144];
if(sscanf(cmdtext[6],"s[128]",tmp))return SendClientMessage(playerid,-1,"/say [text]");
format(string,144,"*Admin: %s",tmp);
SendClientMessageToAll(-1,string);
return 1;
}
aber letztendlich ist die beste Lösung sscanf und einen vernünftigen commandprozessor zu verwenden wie zcmd , ycmd oder was du hast bcmd.
Da man ja auch Ressourcen schonen möchte.