[NON GF] /wantedlist System

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

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


    if (strcmp(cmd, "/givewanteds", true) == 0){
    if(pAdminLevel[playerid]<=1){
    new tmp[128];
    tmp = strtok(cmdtext, idx);
    new playerid, amount;
    playerid = strval(strtok(cmdtext, idx));
    amount = strval(strtok(cmdtext, idx));
    if(amount == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /givewanteds [playeridid] [amount]");
    SetPlayerWanteds(playerid, GetPlayerWanteds(playerid)+amount);
    dini_IntSet(Datei(playerid),"Wanteds",GetPlayerWantedLevel(playerid));
    }
    return 1;
    }

    dann musst du nur noch strtok einfügen


    Mit freundlichen Grüßen


    Darkiii

  • Das was Darkiii da erzählt ist (sorry) schwachsinn. Du machst es nur unnötig umständlich. Wozu aus der Spieler datei auslesen?
    So wäre es richtig.
    if (strcmp(cmd, "/wantedlist", true) == 0)
    {
    if(Deine abfrage ob der Spieler ein Cop ist)
    {
    new string[64],
    spielername[MAX_PLAYER_NAME];
    SendClientMessage(playerid, 0xBFC0C2FF,"-----Wanteds-------");
    for(new i = 0; i < MAX_PLAYERS; i++)//eine schleife die durch alle spieler (MAX_PLAYERS) loopt
    {
    if(!IsPlayerConnected(i)) continue; //Wenn der Spieler mit der id "i" nicht online ist, wird hier übersprungen

    if(GetPlayerWantedLevel(i) >=1)//musst du natürlich auf die variable ändern in der du die wanteds des Spielers speicherst
    {
    GetPlayerName(i, spielername, MAX_PLAYER_NAME);
    format(string, sizeof(string), "%s - %d Wanteds", spielername, GetPlayerWantedLevel(i));
    SendClientMessage(playerid, 0xBFC0C2FF,string);
    }
    }
    }
    else return SendClientMessage(playerid, 0xBFC0C2FF,"Du bist kein Cop");
    return 1;
    }

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

  • GetPlayerWanteds liest bestimmt die ini aus ?
    ich hab nur keinen umweg genommen ... ich programmiergrade asm desshalb versuch ich so wenig instructions zu erhalten.


    Mit freundlichen Grüßen


    Darkiii

  • Mein post bezog sich hier rauf:


    Und nein, GetPlayerWanteds liest nicht die ini aus. Und das du betrunken bist ist wirklich schön für dich, aber kein grund doppelposts zu machen :)

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

  • Aber es funktioniert, frisst das unnötig Server Kapazität oder wie? Hab dann halt nurnoch eben meine Befehle umgeschrieben das er die Wanteds direkt Abspeichert, und so ist die Wantedlist auf immer auf dem neusten Stand.


    Zu dem Strok, ganz unten mit einfügen?

  • ja das alles :

    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;
    }
    ///Strtok ist nich von mir !

    unten ins script


    Mit freundlichen Grüßen


    Darkiii

  • Im Idealfall öffnest du die Spieler datei beim Login, und speicherst alles in variablen. Im Script selbst arbeitest du dann nur mit den variablen und veränderst sie etc. Und bei logout/disconnect speicherst du die geänderten variablen wieder in der datei.


    Natürlich kannst du auch immer direkt aus der datei lesen, aber das frisst unnötig ressourcen. Zumal das bei ner Spieler anzahl >100 auch verzögerungen und laggs verursachen wird.

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

  • @ Darkii


    Also wenn ich das so mache, unten dein Strok zu den andern, und den Befehl halt bei OnPlayerCommandText, schmiert mein Pawn ab.
    Was könnte falsch sein?


    Ich muss ja meine befehle auch so schreiben


    if(!strcmp(strget(cmdtext,0),"/givewanteds"))


    anstatt


    if (strcmp(cmd, "/givewanteds", true) == 0)


    hab es zwar umgeändert, doch leider schmiert Pawn immernoch ab


    kannst du mir da weiterhelfen?

  • hast du :

    forward strtok(const string[], &index);
    ganz oben im script
    und
    new cmd[128], idx;
    cmd = strtok(cmdtext, idx);

    ganz oben im OnPlayerCommandText


    Mit freundlichen Grüßen


    Darkiii

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


    So ich hab mir meinen Befehl nun so erstellt, nur eine sache fehlt mir, wie mache ich das der Spieler der die Wanteds bekommt, angezeigt kriegt welches Wantedlevel er hat. Wie hier im Beispiel :)


    if(!strcmp(strget(cmdtext, 0), "/givewanteds"))
    {
    if(gTeam[playerid] == TEAM_COP)
    {
    new spielerid = strval(strget(cmdtext, 1)); // die id welche der spieler hat definieren
    new wanteds = strval(strget(cmdtext, 2)); // das geld welches der spieler bekommen soll definieren
    SetPlayerWantedLevel(playerid, wanteds);
    SendClientMessage(spielerid, COLOR_YELLOW, "Aktuelles Wantedlevel: "WANTEDLEVEL");
    dini_IntSet(Datei(spielerid),"Wanteds",GetPlayerWantedLevel(spielerid));
    // spielerid = Die ID von dem Spieler der das geld bekommen soll
    // geld = Die summe an geld welche der Spieler bekommen soll
    return 1;
    }
    }


    Muss ich da irgendwas in dem Command definieren?

    Einmal editiert, zuletzt von BoB :) ()

  • Ich hab vielmals zu danken :)


    So nun sind meine Probleme weg fürs erste^^ widme ich mich dem nächsten Ziel.


    Ich denke auch das Thema kann einigen weiterhelfen die bei solchen sachen Probleme haben :)


    Danke an alle die mir geholfen haben.