[SAMMELTHREAD] Kleine Scripting Fragen

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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

  • Wow, danke funktioniert einwandfrei, ich musste nur RemovePlayerFromVehicle entfernen damit der anhält, danke :D

  • Ich hab nen Mega Bug bei meinem LoH Edit!
    Wen ich /money ID BETRAG mach dan kommt das geld und geht wd weg. dan Steht es in de Stats /stats aber nach ner Zeit geht das ganze Geld ins Minus -.-
    Bitte hilft mir.
    MfG xAdy

  • Hallo


    Ich habe irgendwie ein Problem mit dem Bespeichern eines Strings.


    Hier dein Auszug aus dem Enum:


    pEhepartner[30],


    Hier der Code:


    PlayerInfo[playerid][pEhepartner] = "Keiner";
    PlayerInfo[ehepartner][pEhepartner] = "Keiner";


    Hier die Fehlermeldung:


    C:\Users\X\Desktop\terra473.pwn(5375) : error 047: array sizes do not match, or destination array is too small
    C:\Users\X\Desktop\terra473.pwn(5376) : error 047: array sizes do not match, or destination array is too small


    Also ich weiss was die Fehlermeldung bedeutet, aber ich finde keinen Hinweis, wo der Fehler liegen könnte.



    MfG dUDA

  • Guten Abend,


    ich habe momentan ein kleines Scriptproblem.
    Ich habe mir einen /kick Befehl erstellt. Wenn ich in meinem Server /kick eingebe, ohne eine ID oder Name dahintert dann kicke ich mich selber.



    COMMAND:kick(playerid,params[]) {
    new pID;
    if(!IsPlayerAdmin(playerid)) {
    return SendClientMessage(playerid,COLOR_WHITE,"Du bist kein Administrator");
    }
    if(sscanf(params,"u",pID)) {
    SendClientMessage(playerid,COLOR_WHITE,"Benutze: /kick [Name | ID]");
    }
    if(!IsPlayerConnected(pID)) {
    SendClientMessage(playerid,COLOR_WHITE,"Spieler konnte nicht gefunden werden");
    }
    Kick(pID);
    SendClientMessage(playerid,COLOR_WHITE,"Spieler wurde vom Server gekickt!");
    return 1;
    }


    Wo liegt hierbei das Problem ?
    Oder kicke ich mich nur selber weil ich alleine auf dem Server bin ?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Das ist das normalste was ich bisher gelesen hab ^^
    Nachdem du checkst ob der Spieler einen PArameter angegeben hat oder nicht, beendest du die Funktion nicht. So würd's funktionieren:
    COMMAND:kick(playerid,params[]) {
    new pID;
    if(!IsPlayerAdmin(playerid)) {
    return SendClientMessage(playerid,COLOR_WHITE,"Du bist kein Administrator");
    }
    if(sscanf(params,"u",pID)) { //HIER hat FoxHound einen "return" eingefügt
    return SendClientMessage(playerid,COLOR_WHITE,"Benutze: /kick [Name | ID]");
    }
    if(!IsPlayerConnected(pID)) {
    SendClientMessage(playerid,COLOR_WHITE,"Spieler konnte nicht gefunden werden");
    }
    Kick(pID);
    SendClientMessage(playerid,COLOR_WHITE,"Spieler wurde vom Server gekickt!");
    return 1;
    }


  • Dann hättest aber auch gleich nach dem "!IsPlayerConnected" Check ein return einfügen können ;). Sonst wird die Nachricht trotzdem gesendet ohne das Jemand gekickt wurde ( Gekickt wird keiner , da pID entweder INVALID_PLAYER_ID ist oder eine SpielerID hat die zZt nicht belegt ist ).
    COMMAND:kick(playerid,params[]) {
    new pID;
    if(!IsPlayerAdmin(playerid)) {
    return SendClientMessage(playerid,COLOR_WHITE,"Du bist kein Administrator");
    }
    if(sscanf(params,"u",pID)) { //HIER hat FoxHound einen "return" eingefügt
    return SendClientMessage(playerid,COLOR_WHITE,"Benutze: /kick [Name | ID]");
    }
    if(!IsPlayerConnected(pID)) {
    return SendClientMessage(playerid,COLOR_WHITE,"Spieler konnte nicht gefunden werden");
    }
    Kick(pID);
    SendClientMessage(playerid,COLOR_WHITE,"Spieler wurde vom Server gekickt!");
    return 1;
    }



    //Edit:
    An Maddin,
    Dafür gibts einige Methoden.Die einfachste wäre:
    stock IstGerade( iZahl ) {
    new
    iRest;
    iRest = ( iZahl % 2 ); // Modulo ! Gibt den Rest einer Teilung an
    return !iRest;
    }

    //Edit2
    Geht auch so :
    stock IstGeradeEx( iZahl ) {
    return !( iZahl & 1 ); // Abfragen ob 1 als Bit gesetzt ist.
    }

  • Ich habe gerade mal ein echtes Problem xD.
    Ich kann zwar Scripten aber habe mich nie mit Parametern beschäftigt und wollte jetzt mal einen /makeadmin ohne level abfrage machen also das er ihn egal welches Admin Level macht habe strtok drinne und so.


    Hier mal der Code der bei OnPlayerCommandText ist:


    new idx;
    new cmd[128];
    cmd=strtok(cmdtext,idx);

    if(!strcmp(cmd,"/makeadmin",true,5))
    {
    if(SpielerInfo[playerid][Administrator] == 3)
    {
    new adminID[100];
    new adminLVL[3];
    new adminplayer;
    new adminplayerlvl;
    adminID = strtok(cmdtext, idx);
    if(!strlen(adminID))
    {
    return SendClientMessage(playerid,COLOR_WHITE,"Benutze: /makeadmin [playerid] [Level 1-3]!");
    }
    if(!strlen(adminLVL))
    {
    return SendClientMessage(playerid,COLOR_WHITE,"Benutze: /makeadmin [playerid] [Level 1-3]!");
    }
    if(!IsPlayerConnected(adminplayer))
    {
    return SendClientMessage(playerid,COLOR_WHITE,"Dieser Spieler ist nicht Online!");
    }
    SpielerInfo[adminplayer][Administrator] = adminplayerlvl;
    new string[100];
    format(string, sizeof(string),"Du wurdest von einem Administrator zum Admin Level: %d gemacht!",adminLVL);
    SendClientMessage(adminplayer,COLOR_GREEN, string);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_GRAD2,"Du bist kein Administrator!");
    return 1;
    }
    }


    Aber immer wenn ich /makeadmin 0 3 mache kommt die Meldung das ich /makeadmin [playerid].... machen soll aber ich hab es ja schon längst getan.


    Bitte um Hilfe.

  • Goldkiller
    stock IstGerade( iZahl ) {
    new
    iRest;
    iRest = ( iZahl % 2 ); // Modulo ! Gibt den Rest einer Teilung an
    return !iRest;
    }
    Wofür genau steht das % ? Also was macht es, gibts da ein Tutorial oder sowas zu?
    Und was genau passiert bei return !iRest; ? Wegen dem ! davor....


    Und danke für die Funktion :)

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Ist auch logisch.
    adminID = strtok(cmdtext, idx);

    Sowas müsstest du auch für adminLVL machen.Sonst wird die Stringlänge nämlich immer gleich 0 sein.


    Mach's lieber mit sscanf.


    //Edit:
    Modulo ( % )gibt dir den Rest eine Teilung mit Ganzen Zahlen.
    zB:
    17 : 5 = 3 ( Eigentlich 3.4 , aber wir wollen keinen Bruch sondern eine Ganze Zahl )
    17 % 5 = 2 // Ist der Rest bei der Ganzzahligen Teilung. Wir können zwar 17 : 5 teilen, aber wenn wir eine Ganze Zahl wollen,bleibt 2 übrig. So bekommen wir diese herraus ) .
    http://de.wikipedia.org/wiki/Division_mit_Rest


    Das ! ist nur eine Negation. Heisst,es dreht den Wert um.
    Aus true wird false, aus false wird true.Aus 0 wird 1, aus allem außer 1 wird 0 .

  • Okay ich versuchs mal mit sscanf aber vorweg noch wie würde es mit dem Admin Level den richtig sein weil wenn ich das selbe mit adminLVL mache wie mit admin ID kommt ein Error den ich verdammt nochmal nicht weg krieg ^^.

  • So jetzt habe ich oben wie in deinem Tutorial das mit dcmd rein gemacht für sscanf und unten dann halt das mit stock sscanf aber die alte version habe ich davon genommen da die neue nur das plugin ist.


    PWN Code von dcmd_makeadmin:


    dcmd_makeadmin(playerid,params[])
    {
    if(SpielerInfo[playerid][Administrator] == 3)
    {
    new adminlevel, pID;
    if(sscanf(params, "us",pID,adminlevel))
    {
    return SendClientMessage(playerid,COLOR_RED,"Benutze: /Makeadmin [playerid] [Adminlevel].");
    }
    if(!IsPlayerConnected(pID))
    {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }
    new string[256];
    new spielername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, spielername, sizeof(spielername));
    format(string, sizeof(string),"Du wurdest vom Administrator %s zum Administrator Level %d gemacht!",spielername, adminlevel);
    SendClientMessage(pID,COLOR_WHITE, string);
    SpielerInfo[pID][Administrator] = adminlevel;
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_GRAD2,"Du bist kein Administrator!");
    return 1;
    }
    }


    Bei OnPlayerCommandText habe ich das rein gemacht:


    dcmd(makeadmin, 4 , cmdtext);


    Aber wenn ich ingame /makeadmin mache kommt:
    SERVER: UNKNOWN COMMAND

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