beim /kick kommt der Grund nicht

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • 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

  • 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;
    }
    }

  • 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;
    }

    GLOTZ MICH NICHT SO AN! ICH BIN AUCH NUR EINE SIGNATUR!!!

  • 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;
    }

    Einmal editiert, zuletzt von Hustlеr ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen