Wanted System funktioniert nicht ganz.

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
  • Hey :) , folgendes Problem. ich habe mein Wanted System so gebaut, dass es bei 10 wanted punkten einen wanted stern gibt, bei 20 zwei sterne und dann bis 60 punkten mit sechs sternen. Aber das problem ist, das die sterne oben rechts ingame nicht angezeigt werden und auch nicht in der datei gespeichert werden. woran liegt das?


    dcmd_su(playerid,params[])
    {
    if(SpielerInfo[playerid][Fraktion] == 1 || SpielerInfo[playerid][Fraktion] == 2)
    {
    new pID,wanteds,grund[128],string[128],spieler[MAX_PLAYER_NAME];
    if(sscanf(params,"uds",pID,wanteds,grund)) return SendClientMessage(playerid,weiß,"Verwendung: /su [playerid] [Wanteds] [Grund]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,weiß,"Dieser Spieler ist nicht online.");
    if(PDuty[playerid] == 1)
    {
    if(wanteds < 1 || wanteds > 60) return SendClientMessage(playerid,weiß,"Du kannst nur zwischen 1 & 60 Wantedpunkten vergeben.");
    SpielerInfo[pID][Wanteds] += wanteds;
    if(SpielerInfo[pID][Wanteds] >= 1) { SetPlayerWantedLevel(pID,0); }
    else if(SpielerInfo[pID][Wanteds] >= 10) { SetPlayerWantedLevel(pID,1); }
    else if(SpielerInfo[pID][Wanteds] >= 20) { SetPlayerWantedLevel(pID,2); }
    else if(SpielerInfo[pID][Wanteds] >= 30) { SetPlayerWantedLevel(pID,3); }
    else if(SpielerInfo[pID][Wanteds] >= 30) { SetPlayerWantedLevel(pID,4); }
    else if(SpielerInfo[pID][Wanteds] >= 30) { SetPlayerWantedLevel(pID,5); }
    else if(SpielerInfo[pID][Wanteds] >= 30) { SetPlayerWantedLevel(pID,6); }
    GetPlayerName(playerid,spieler,sizeof spieler);
    format(string,sizeof string,"** Du hast %d Wantedpunkte erhalten.**",wanteds);
    SendClientMessage(pID,hellblau,string);
    format(string,sizeof string,"** Erhalten von: %s, Grund: %s.",spieler,grund);
    SendClientMessage(pID,hellblau,string);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(SpielerInfo[i][Fraktion] == 1 || SpielerInfo[i][Fraktion] == 2)
    {
    SendClientMessage(i,hellblau,"** !! Es wurden Wantedpunkte vergeben. !! **");
    }
    }
    }
    }
    }
    else { return SendClientMessage(playerid,weiß,"Du bist nicht befugt diesen Befehl auszuführen."); }
    return 1;
    }


    laden lasse ich sie eigentlich so:
    SpielerInfo[playerid][Wanteds]=dini_Int(Spielerdateien,"Wanteds");


    speichern so:
    dini_IntSet(Spielerdateien,"Wanteds",GetPlayerWantedLevel(playerid));


    und bei onplayerspawn lasse ich sie halt nocheinmal geladen.

    | Green Day - Nickelback - Rise Against - 3 Doors Down | \m/

  • Du liest einen Namen aus, keine ID.
    if(sscanf(params,"uds",pID,wanteds,grund)) return SendClientMessage(playerid,weiß,"Verwendung: /su [playerid] [Wanteds] [Grund]");


    Siehe den Part mit "uds"
    pID ist aber ein Integer, also --> "dds"



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )

  • Du liest einen Namen aus, keine ID.
    if(sscanf(params,"uds",pID,wanteds,grund)) return SendClientMessage(playerid,weiß,"Verwendung: /su [playerid] [Wanteds] [Grund]");


    Siehe den Part mit "uds"
    pID ist aber ein Integer, also --> "dds"


    Face das ist nicht ganz richtig mit u kannst du die spielerid und den namen als parameter nehmen


    //edit ahja beim speichern


    dini_IntSet(Spielerdateien,"Wanteds",GetPlayerWantedLevel(playerid));


    würde ich die anzahl welche du bei SpielerInfo[pID][Wanteds] temporär abspeichern

  • Ok, ich machs halt eben...

    dcmd_su(playerid,params[])
    {
    if((SpielerInfo[playerid][Fraktion] == 1 || SpielerInfo[playerid][Fraktion] == 2) && PDuty[playerid]==1)
    {


    new pID,wanteds,grund[42],string1[128],strin2[128],spieler[MAX_PLAYER_NAME];
    if(sscanf(params,"dds",pID,wanteds,grund)) return SendClientMessage(playerid,weiß,"Verwendung: /su [playerid] [Wanteds] [Grund]");

    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,weiß,"Dieser Spieler ist nicht online.");
    if(wanteds < 1 || wanteds > 60) return SendClientMessage(playerid,weiß,"Du kannst nur zwischen 1 & 60 Wantedpunkten vergeben.");


    //Bis hierhin sollte erstmal alles reibungslos funktionieren..


    SpielerInfo[pID][Wanteds] += wanteds;
    if(SpielerInfo[pID][Wanteds]<10) { SetPlayerWantedLevel(pID,0); }
    else if(SpielerInfo[pID][Wanteds]<20) { SetPlayerWantedLevel(pID,1); }
    else if(SpielerInfo[pID][Wanteds]<30) { SetPlayerWantedLevel(pID,2); }
    else if(SpielerInfo[pID][Wanteds]<40) { SetPlayerWantedLevel(pID,3); }
    else if(SpielerInfo[pID][Wanteds]<50) { SetPlayerWantedLevel(pID,4); }
    else if(SpielerInfo[pID][Wanteds]<60) { SetPlayerWantedLevel(pID,5); }
    else if(SpielerInfo[pID][Wanteds]>=60) { SetPlayerWantedLevel(pID,6); }


    GetPlayerName(playerid,spieler,sizeof spieler);
    format(string1,sizeof string1,"** Du hast %d Wantedpunkte erhalten.**",wanteds);
    SendClientMessage(pID,hellblau,string1);
    format(string2,sizeof string2,"** Erhalten von: %s, Grund: %s.",spieler,grund);
    SendClientMessage(pID,hellblau,string2);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!(IsPlayerConnected(i))){ continue;}
    if(SpielerInfo[i][Fraktion] == 1 || SpielerInfo[i][Fraktion] == 2)
    {
    SendClientMessage(i,hellblau,"** !! Es wurden Wantedpunkte vergeben. !! **");
    }
    }



    } else {SendClientMessage(playerid,weiß,"Du bist nicht befugt diesen Befehl auszuführen."); }
    return 1;
    }


    Beachte jedoch, dass mehr als 60 Wanted möglich ist. Es wird nur geprüft, dass nicht mehr als 60 hinzugegeben werden können. Hat der Spieler zum Beispiel
    schon 40 Wanteds und es werden 50 hinzugegeben, klappt das reibungslos und er hat am Ende halt 90..


    (Wie immer rein ausm Kopf hier im Schnell-Antwort Editor geschrieben, also keine Garantie. Soll ja auch kein Vorkauen sein, sondern eine Hilfestellung ;) )



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )

  • Du liest einen Namen aus, keine ID.
    if(sscanf(params,"uds",pID,wanteds,grund)) return SendClientMessage(playerid,weiß,"Verwendung: /su [playerid] [Wanteds] [Grund]");


    Siehe den Part mit "uds"
    pID ist aber ein Integer, also --> "dds"

    Der u Specifier liefert dir einen Integer und keinen String zurück, kannst ja ansonsten das sscanf Plugin mal anschauen, dort sieht man es schön.

  • Code
    c - A character.
    	d, i - An integer.
    	h, x - A hex number (e.g. a colour).
    	f - A float.
    	s - A string.
    	z - An optional string.
    	pX - An additional delimiter where X is another character.
    	'' - Encloses a litteral string to locate.
    	u - User, takes a name, part of a name or an id and returns the id if they're connected.


    Letzte Zeile besagt, dass dies auch einen Namen oder einen Teil Namen auslesen kann.
    Ich habe dies nunmal als potentielle Fehlerquelle angesehen.
    (Arbeite im Übrigen auch nicht besonders gerne mit sscanf ^^ )


    Nicht böse gemeint, aber inwiefern bringt jetzt dein Beitrag das Thema weiter??
    Der annähernd gleiche Inhalt wurde bereits weiter oben schon dargebracht..

    Zitat

    Face das ist nicht ganz richtig mit u kannst du die spielerid und den namen als parameter nehmen



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )

  • Guten Tag.
    Ich habe Ihnen mal einen "Bug-Freien" Befehl geschickt per PN
    Ausserdem kann Mann mit "uds" einen Namen / Ein Teil des Names Auslesen.
    Dies sollte Man eigentlich lernen, Wenn mans ich Mit sscanf Bisschen befasst hat ^^


    MFG
    Smoker2012

  • Jetzt reitet noch alle drauf rum :D
    (Ich mag halt kein sscanf. )


    Anbei noch ein Fehler der mir aufgefallen ist.. (für alle anderen Leser.)

    ...
    else if(SpielerInfo[pID][Wanteds] >= 30) { SetPlayerWantedLevel(pID,3); }
    else if(SpielerInfo[pID][Wanteds] >= 30) { SetPlayerWantedLevel(pID,4); }
    else if(SpielerInfo[pID][Wanteds] >= 30) { SetPlayerWantedLevel(pID,5); }
    else if(SpielerInfo[pID][Wanteds] >= 30) { SetPlayerWantedLevel(pID,6); }
    ..
    //Da soll sich das Programm mal entscheiden, was es nun geben will =)



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )

  • Es funktioniert jetzt einwandfrei! Danke! :)


    aber um mich noch einmal schlau zu machen, - es bringt ja nichts wenn ich es einfach einfüge, aber den eigentlichen Sinn immer noch nicht verstanden habe. Heißt es bei SpielerInfo[playerid][Wanteds] >= 10" nicht, dass wenn der Spieler ab 10 Wantedpunkte einen Wantedstern gekommt?

    | Green Day - Nickelback - Rise Against - 3 Doors Down | \m/

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