/acp Script Fehler???

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
  • Guten Tag,


    ich hatte die Idee das ich ein /acp Befehl Scripte.
    Dieser Soll halt herausschreiben wie oft der oder die Person gebannt/gekickt oder gemutet wurde.




    Script Code: ocmd:acp(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,5)) return SendClientMessage(playerid,ROT,"Zugriff Verweigert");
    new string1[200],string2[200],string3[128],pID,rest[500];
    if(sscanf(params,"uis",pID))return SendClientMessage(playerid,BLAU,"/acp [playerid]");
    if(IsPlayerConnected(pID))
    {
    format(string1, sizeof string1, "Name: %s",SpielerName(pID));
    format(string2, sizeof string2, "Timeban: %s",GetPVarInt(playerid,"Banned?"));
    format(string3, sizeof string3, "");
    format(rest, sizeof rest, "%s\n%s\n%s\n", string1,string2,string3);
    if(!isPlayerAnAdmin(playerid,5)) return ShowPlayerDialog(playerid,DIALOG_ACP,DIALOG_STYLE_MSGBOX,"Admin Control Panel",rest,"Ok","");
    }
    SendClientMessage(playerid,ROT,"Spieler ist nicht Online");
    return 1;
    }
    Beispiel wo er es hochzählen soll
    ocmd:tban(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,2))return SendClientMessage(playerid,ROT,"Rang zu Niedrig.");
    new pID, time, grund[128];
    if(sscanf(params,"uis",pID,time,grund))return SendClientMessage(playerid,BLAU,"/tban [playerid] [zeit] [grund]");
    if(IsPlayerConnected(pID))
    {
    if(time>0&&time<1000)
    {
    new string[128];
    format(string,sizeof(string),"%s wurde von %s für %i Minuten gebannt. Grund: %s",SpielerName(pID),SpielerName(playerid),time,grund);
    SendClientMessageToAll(ROT,string);
    new wert;


    wert=gettime()+(60*time);


    SetPVarInt(pID,"timeban",wert);
    SetTimerEx("WarnTimer2", 250, false, "i", pID);
    SetPVarInt(playerid,"Banned?",++);//<- Da das ++ ist doch hochzählen oder?
    Kick(pID);
    return 1;
    }
    SendClientMessage(playerid,ROT,"Ungültige Zeit.");
    return 1;
    }
    SendClientMessage(playerid,ROT,"Spieler ist nicht online.");
    return 1;
    }


    Bitte helft mir. das ++ bedeutet doch das er was hochzählen soll?

  • " if(sscanf(params,"uis",pID))return SendClientMessage(playerid,BLAU,"/acp [playerid]");" da stimmt was nicht (u i s und nur pID).
    ++ ist an der stelle falsch.
    SetPVarInt(playerid,"Banned",GetPVarInt(playerid,"Banned")+1); wäre richtig


    Also es wird Banned auf x+1 gesetzt. x steht für den Banned-Wert.


  • Server geht an und aus wenn ich starte.



    Hab das mit ++ geändert das andere nicht weis nicht was du meinst.

  • ocmd:tban(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,2))return SendClientMessage(playerid,ROT,"Rang zu Niedrig.");
    new pID, time, grund[128];
    if(sscanf(params,"uis",pID,time,grund))return SendClientMessage(playerid,BLAU,"/tban [playerid] [zeit] [grund]");
    if(IsPlayerConnected(pID))
    {
    if(time>0&&time<1000)
    {
    new string[128];
    format(string,sizeof(string),"%s wurde von %s für %i Minuten gebannt. Grund: %s",SpielerName(pID),SpielerName(playerid),time,grund);
    SendClientMessageToAll(ROT,string);
    new wert;


    wert=gettime()+(60*time);


    SetPVarInt(pID,"timeban",wert);
    SetTimerEx("WarnTimer2", 250, false, "i", pID);
    SetPVarInt(playerid,"Banned?",GetPVarInt(playerid,"Banned?")+1);//Da
    Kick(pID);
    return 1;
    }
    SendClientMessage(playerid,ROT,"Ungültige Zeit.");
    return 1;
    }
    SendClientMessage(playerid,ROT,"Spieler ist nicht online.");
    return 1;
    }
    ErikSon:

  • Deshalb:
    if(sscanf(params,"uis/*i und s sind noch zwei parameter, die man eingeben muss, damit der Befehl läuft*/",pID))return SendClientMessage(playerid,BLAU,"/acp [playerid]");


    //Machs so:
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,BLAU,"/acp [playerid]");

  • ocmd:acp(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,5)) return SendClientMessage(playerid,ROT,"Zugriff Verweigert");
    new string1[200],string2[200],string3[128],pID,rest[500];
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,-1,"/acp [playerid]");
    if(IsPlayerConnected(pID))
    {
    format(string1, sizeof string1, "Name: %s",SpielerName(pID));
    format(string2, sizeof string2, "Timebans: %s",GetPVarInt(playerid,"Banned1"));
    format(string3, sizeof string3, "Kicks: %s",GetPVarInt(playerid,"Banned2"));
    format(rest, sizeof rest, "%s\n%s\n%s\n", string1,string2,string3);
    if(!isPlayerAnAdmin(playerid,5)) return ShowPlayerDialog(playerid,DIALOG_ACP,DIALOG_STYLE_MSGBOX,"Admin Control Panel",rest,"Ok","");
    }
    SendClientMessage(playerid,ROT,"Spieler ist nicht Online");
    return 1;
    }

  • Mach mal:
    ocmd:acp(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,5)) return SendClientMessage(playerid,ROT,"Zugriff Verweigert");
    new string1[200],string2[200],string3[128],pID,rest[500];
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,-1,"/acp [playerid]");
    if(IsPlayerConnected(pID))
    {
    format(string1, sizeof string1, "Name: %s",SpielerName(pID));
    format(string2, sizeof string2, "Timebans: %s",GetPVarInt(playerid,"Banned1"));
    format(string3, sizeof string3, "Kicks: %s",GetPVarInt(playerid,"Banned2"));
    format(rest, sizeof rest, "%s\n%s\n%s\n", string1,string2,string3);
    if(!isPlayerAnAdmin(playerid,5)) return ShowPlayerDialog(playerid,DIALOG_ACP,DIALOG_STYLE_MSGBOX,"Admin Control Panel",rest,"Ok","");
    }
    else return SendClientMessage(playerid,ROT,"Spieler ist nicht Online");
    return 1;
    }

  • Probiers mal so:
    ocmd:acp(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,5)) return SendClientMessage(playerid,ROT,"Zugriff Verweigert");
    new pID;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,-1,"/acp [playerid]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"Spieler ist nicht Online");
    new string[256],str[64];
    format(str, sizeof str, "Name: %s",SpielerName(pID)), strcat(string,str);
    format(str, sizeof str, "Timebans: %s",GetPVarInt(playerid,"Banned1")), strcat(string,str);
    format(str, sizeof str, "Kicks: %s",GetPVarInt(playerid,"Banned2")), strcat(string,str);
    return ShowPlayerDialog(playerid,DIALOG_ACP,DIALOG_STYLE_MSGBOX,"Admin Control Panel",string,"Ok","");
    }
    Könnte man eig noch ein wenig Ressourcensparender machen..




    Zu viele unnötige Strings und wozu 2x Adminabfrage? ;)


    //Edit: Außerdem ist die 2. Adminabfrage falsch.. Wenn er nicht min Admin Level 5 ist, dann wird ihm das Adminpanel angezeigt.. ?
    PS: Das return am Ende kannste dir sparen, da du den Code schon beendest..

  • Man braucht hier weder strcat noch sonstiges Zeugs. Außerdem war die string-Formatierung völlig daneben bei sämtlichen Posts oben.
    ocmd:acp(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,5)) return SendClientMessage(playerid,ROT,"Zugriff Verweigert");
    new pID;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,-1,"/acp [playerid]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"Spieler ist nicht Online");
    new string[256];
    format(string, sizeof(string), "Name: %s\n",SpielerName(pID));
    format(string, sizeof(string), "%sTimebans: %d\n",string,GetPVarInt(playerid,"Banned1"));
    format(string, sizeof(string), "%sKicks: %d\n",string,GetPVarInt(playerid,"Banned2"));
    return ShowPlayerDialog(playerid,DIALOG_ACP,DIALOG_STYLE_MSGBOX,"Admin Control Panel",string,"Ok","");
    }
    Sollte es dennoch nicht funktionieren, und dir weiter gesagt werden, dass der Spieler nicht online ist, dann hast du wahrscheinlich noch die sscanf Funktion im Code definiert, zu dem Plugin dazu. Diese musst du aus dem Code entfernen wenn du das Plugin nutzt. Und wenn es dann immer noch nicht geht, sag nochmal Bescheid, dann zeige ich dir wie man das mit strtok macht.


    Außerdem:
    SetPVarInt(playerid,"Banned?",++);//<- Da das ++ ist doch hochzählen oder?
    zu:
    SetPVarInt(playerid,"Banned?",GetPVarInt(playerid,"Banned?")+1);


    Irgendwo muss da ein oder mehrere returns fehlen.


    Die Warnung 225 hat rein gar nichts mit fehlenden return's zu tun, im Gegenteil! Unreachable Code heißt "Unereichbarer Code", somit wurden zu viele returns verbaut. Ein fehlendes return siehst du an der Warnung "does not return a value".
    Warnung 225 bekommst du hingegen bei sowas:
    stock Test()
    {
    print("Hallo");
    return 1;
    print("Welt"); //unreachable Code
    return 1; //unreachable Code
    }

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()