Abend ,
ich habe mir grade ein /kick Command gemacht.
Aber der Grund erschein nicht ich habe schon ein Verdacht gehabt aber es hat nicht funktioniert deswegen frage ich euch
hier mal ein ausschnitt aus dem Command :
new Text[256];
new AdminName[MAX_PLAYER_NAME];
new SpielerName[MAX_PLAYER_NAME];
new Spieler = strval(strget(cmdtext, 1));
new Grund = strval(strget(cmdtext, 2));
if(!cmdtext[5])
{
SendClientMessage(playerid, COLOR_ROT, "Hilfe: /kick [SpielerID] [Grund]");
return 1;
}
GetPlayerName(Spieler, SpielerName, sizeof(SpielerName));
GetPlayerName(playerid, AdminName, sizeof(AdminName));
format(Text, sizeof(Text), "Info: %s wurde von %s gekickt. Grund: %s", SpielerName, AdminName, Grund);
SendClientMessageToAll(COLOR_PINK, Text);
//Kick(Spieler); fuer test erstmal nicht benötigt
mfg
beim /kick kommt der Grund nicht
- Micktor
- Geschlossen
- Erledigt
-
-
Womit splittest du den Text? womit arbeits du? dcmd? strtok? oder einfach nur if(strcmp("/kick", cmdtext, true) == 0) ??
-
if(!strcmp(cmdtext, "/kick", true, 5)) damit sorry das ichs vergssen habe
-
das kann schon mal garnicht funktionieren. du musst den text splitten. ich denke mal dcmd verstehst du jetzt auf der schnelle nicht, ich erkläre dir kurz das mit strtok.
Für das in deinem code ganz unten hinzu:
stock 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;
}stock split(const strsrc[], strdest[][], delimiter)
{
new i, li;
new aNum;
new len;
while(i <= strlen(strsrc)){
if(strsrc[i]==delimiter || i==strlen(strsrc)){
len = strmid(strdest[aNum], strsrc, li, i, 128);
strdest[aNum][len] = 0;
li = i+1;
aNum++;
}
i++;
}
return 1;
}stock strrest(const string[], index)
{
new length = strlen(string);
new offset = index;
new result[256];
while ((index < length) && ((index - offset) < (sizeof(result) - 1)) && (string[index] > '\r'))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}Danach funzt das so.
Public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[255], idx;
cmd = strtok(cmdtext, idx);if(strcmp(cmd, "/kick", tru) == 0)
{
new ID;
new Reason[256];
ID = strtok(cmdtext, idx);
Reason = strrest(cmdtext, idx);
new str[128];
format(str, sizeof(str), "Info: SpielerID: %i wurde gekickt, grund:%s", ID, Reason)
SendClientMessageToAll(COLOR_PINK, str);
Kick(ID);
return 1;
}
} -
if(!strcmp(cmdtext, "/kick", true, 5))
Mach daraus mal
if(strcmp(cmdtext, "/kick", true, 5)) -
muss ich das verstehen xD ich hatte das schon mal i-wie einfacher hinbekommen mal suchen in den alten scripts vielleicht finde ich was aber THX
-
strtok ist eins der leichtesten methoden, aber nicht der schnellsten
-
if(strcmp(cmdtext, "/kick", true, 5))
toller witz
Momo
Stimmt als ich das damals gemacht habe war das glaub auch mit strtok -
So sieht bei mir /kick aus:
if(strcmp(cmd, "/kick", true) == 0)
{
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "Benutzung: /kick [Playerid/TeilDesNamen] [Grund]");
return 1;
}
giveplayerid = ReturnUser(tmp);
if (PlayerInfo[playerid][pAdmin] >= 1)
{
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
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_GRAD2, "Benutzung: /kick [Playerid/TeilDesNamen] [reason]");
return 1;
}
if(PlayerInfo[giveplayerid][pServerBesitzer] == 1)
{
return 1;
}
new year, month,day;
getdate(year, month, day);
format(string, sizeof(string), "AdmCmd: %s wurde von %s gekickt, Grund: %s (%d-%d-%d)", giveplayer, sendername, (result),month,day,year);
KickLog(string);
format(string, sizeof(string), "AdmCmd: %s wurde von %s gekickt, Grund: %s", giveplayer, sendername, (result));
SendClientMessage(giveplayerid, COLOR_LIGHTRED,"Du wurdest gekickt!");
SendClientMessageToAll(COLOR_LIGHTRED, string);
Kick(giveplayerid);
return 1;
}
}
}
else
{
format(string, sizeof(string), " %d ist kein aktiver Spieler.", giveplayerid);
SendClientMessage(playerid, COLOR_GRAD1, string);
}
}
return 1;
} -
Alta wieso tut ihr euch das an ? Gibt dcmd + sscanf ne Chance
/edit hier mein dcmd kick :O
dcmd_kick(playerid,params[])
{
new
Reason[256],
pID;
if(Spieler[playerid][alvl] < 1){
return SendClientMessage(playerid,grau,"You are not a Moderator/Admin!");
}
if(sscanf(params,"us",pID,Reason)){
return SendClientMessage(playerid,grau,"USAGE: /kick [playerid] [reason]");
}
if(!IsPlayerConnected(pID)) {
return SendClientMessage(playerid,grau,"Nobody is connected with this ID!");
}
new
name[MAX_PLAYER_NAME],
string[256];
GetPlayerName(pID,name,sizeof(name));
new
Aname[MAX_PLAYER_NAME];
GetPlayerName(playerid,Aname,sizeof(Aname));
format(string,sizeof(string)," %s has kicked %s, Reason: %s",Aname,name,Reason);
SendClientMessageToAll(hellrot,string);
Kick(pID);
return 1;
} -
-
breadfish.de
Hat das Thema geschlossen.