Fraktions Gehalt 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
  • Hallo, Community.


    Ich verbessere derzeit mein Payday System und bin dabei auf die Idee gekommen, dass jeder Leader die Gehälter seiner Ränge speziell ändern kann, und selbst aufpassen muss, dass die Fraktion nicht Bankrott geht, etc.


    Jetzt hänge ich aber derzeit ein Bisschen..
    Ich weiß nicht genau wie ich da anfangen soll..
    Ich muss das ja auch speichern etc.. (Wie speichern unter Dini geht weiß ich nur nicht wie ich das in diesem falle machen soll)
    Ich hänge bei der Tatsache, dass der Befehl so aussehen soll:
    /setfgehalt [Rang] [Gehalt]
    Und ich nicht genau weiß wie ich das speichern soll für jeden Rang und auch für die die offline sind..
    Alle Speicherungen:
    Member:
    PlayerInfo[playerid][pMember]
    Leader:
    PlayerInfo[playerid][pLeader]
    Ränge:
    PlayerInfo[playerid][pRank]


    Könnt ihr mir bitte einen denkanstoss geben ?

  • ocmd:setfgehalt(playerid,params[])
    {
    new rang, gehalt, pfad[20], ret;
    if(PlayerInfo[playerid][pLeader] == 0) return SCM(playerid, color,"Kein Leader!");
    if(sscanf("ii",rang, gehalt)) return SCM(playerid, color, "Benutzung: /setfgehalt [Rang] [Gehalt]");
    format(pfad, 20, "/gehalt/%i.ini",PlayerInfo[playerid][pLeader]);
    if(!fexist(pfad)) dini_Create(pfad);
    dini_IntSet(pfad, rang, gehalt);
    format(ret, 60,"Du hast für deine Fraktion (%i) den Gehalt für den Rang %i auf %i geändert!", PlayerInfo[playerid][pLeader],rang,gehalt);
    return SCM(playerid, color, ret);
    }


    Bei Unklarheiten oder Fehlern kannst du dich bei mir melden ;)

  • Erstmal danke, eine Frage habe ich jedoch:
    Wie kann ich dann Abfragen wie viel das gehalt ist ?


    Ich hab den befehl jetzt so :
    ocmd:setfgehalt(playerid,params[])
    {
    new rang, gehalt, pfad[20], str[128];
    if(PlayerInfo[playerid][pLeader] >= 1 || PlayerInfo[playerid][pAdmin] == 0) return SendClientMessage(playerid, knallrot,"Du bist kein Leader oder Admin!!");
    if(sscanf(params,"ii",rang, gehalt)) return SendClientMessage(playerid, gelb, "Benutzung: /setfgehalt [Rang] [Gehalt]");
    switch(PlayerInfo[playerid][pLeader])
    {
    case 1:format(pfad, 20, "/gehalt/LSPD.ini");
    case 2:format(pfad, 20, "/gehalt/ADAC.ini");
    case 3:format(pfad, 20, "/gehalt/ARMY.ini");
    case 4:format(pfad, 20, "/gehalt/RETTUNGSIENST.ini");
    case 5:format(pfad, 20, "/gehalt/LCN.ini");
    case 6:format(pfad, 20, "/gehalt/YAKUZA.ini");
    case 7:format(pfad, 20, "/gehalt/REGIERUNG.ini");
    case 8:format(pfad, 20, "/gehalt/HITMAN.ini");
    case 9:format(pfad, 20, "/gehalt/CNN.ini");
    case 10:format(pfad, 20, "/gehalt/TAXI.ini");
    case 11:format(pfad, 20, "/gehalt/FAHRSCHULE.ini");
    case 12:format(pfad, 20, "/gehalt/GROVESTREET.ini");
    case 13:format(pfad, 20, "/gehalt/BALLAS.ini");
    case 14:format(pfad, 20, "/gehalt/BIKER.ini");
    case 15:format(pfad, 20, "/gehalt/AZTECAS.ini");
    case 16:format(pfad, 20, "/gehalt/TERROR.ini");
    }
    if(!fexist(pfad)) dini_Create(pfad);
    dini_IntSet(pfad, rang, gehalt);
    format(str,sizeof(str),"Du hast das Gehalt deiner Fraktion für den Rang '%i' auf '%i' geändert",rang,gehalt);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,str);
    return 1;
    }


    Jedoch bekomme ich den Fehler:
    Zeile (47251) : Falscher Variablentyp als Parameter (Parameter #2)


    Ich hab das mit der Case abfrage da PlayerInfo[playerid][pLeader] eine Zahl ist und ich die Dateien gerne mit dem Namen hätte, aber das hat nichts damit zu tun..
    Ich hoffe es kann mir jemand helfen :(

    Einmal editiert, zuletzt von [MVS]Simon ()

  • new rang,
    Zu
    new rang[5],


    Und vor
    dini_IntSet(pfad, rang, gehalt);
    Das einfügen:
    format(rang, sizeof(rang), "%d", PlayerInfo[playerid][pRang]);


    Eben die entsprechende variable nutzen.
    Der zweite parameter von dini muss auf jeden Fall ein string sein.

  • Erstmal danke für die Antwort, aber ich hab bei dem format son problem..
    PlayerInfo[playerid][pRank] gibt doch den Rang desjenigen wieder der den Command ausführt oder ?
    Die Variable Rang sein soll ja angeben welchen Rang der Leader beim Befehl /setfgehalt [Rank] [Gehalt] angegeben hat...
    Oder verstehe ich das falsch ?


    Außerdem ist %d nicht ein Integer ?




    /* Edit


    Es funktioniert jetzt.
    Das ganze sieht so aus:
    new rang[5];


    und das format:


    format(rang,sizeof(rang),"%d",rang);


    Also danke @heyhoo
    Nun zu meiner letzten Frage, wie ich das ganze verwenden kann. Also sein Gehalt ausgeben kann?
    Die entsprechende Variable, das ist mir klar, jedoch bin ich mir nicht sicher wie ich diese aus Dini auslese.. Hab es in Google grade nicht gefunden.. Ich schreibe das gehalt ja hinein aber ich lese es nicht aus.. Oder liege ich falsch ?


    Und Jeffry trotzdem danke für deine Antwort.

    2 Mal editiert, zuletzt von [MVS]Simon ()

  • Ach ja, natürlich. Das habe ich am Handy übersehen, dass du den rang ja eingibst.



    Du könntest es so auslesen:
    new Gehalt[MAX_FRAKS][MAX_RANGS];



    for(new f = 0; f < MAX_FRAKS; f++)
    {
    for(new r = 0; r < MAX_RANGS; r++)
    {
    //Hier die zwei Variablen erstellen und setzen, wie oben.
    Gehalt[f][r] = dini_GetInt(pfad, stringvomrang);
    }
    }


    pfad und stringvomrang musst eben noch erstellen, aber das hast ja schon.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Ich habe probiert das so ab zu rufen.. würde das nicht eigentlich auch gehen ?
    Bei mir kommen 2 Errors bei den return 1;
    Und zwar, dass es eine unbekannte Funktion ist..



    stock GetPlayerRank(playerid)
    {
    switch(PlayerInfo[playerid][pRank])
    {
    case 1: return 1
    case 2: return 2
    case 3: return 3
    case 4: return 4
    case 5: return 5
    case 6: return 6
    case 7: return 7
    case 8: return 8
    return 1;
    }
    return 1; //Hier
    }
    stock FGehalt(playerid)
    {
    new pfad[20],rank[20];
    format(rank,sizeof(rank),"%d",GetPlayerRank(playerid);
    switch(PlayerInfo[playerid][pMember])
    {
    case 1: return format(pfad,sizeof(pfad),"/gehalt/LSPD.ini");
    case 2: return format(pfad,sizeof(pfad),"/gehalt/ADAC.ini");
    return 1;
    }
    dini_GetInt(pfad,rank);
    return 1; //Hier
    }


    Das wäre jetzt ein Beispiel für die erste Fraktion, LSPD

  • stock GetPlayerRank(playerid)
    {
    switch(PlayerInfo[playerid][pRank])
    {
    case 1: return 1
    case 2: return 2
    case 3: return 3
    case 4: return 4
    case 5: return 5
    case 6: return 6
    case 7: return 7
    case 8: return 8
    return 1;
    }
    return 1; //Hier
    }


    zu:
    #define GetPlayerRank(%0) PlayerInfo[%0][pRank]



    stock FGehalt(playerid)
    {
    new pfad[20],rank[20];
    format(rank,sizeof(rank),"%d",GetPlayerRank(playerid));
    switch(PlayerInfo[playerid][pMember])
    {
    case 1: format(pfad,sizeof(pfad),"/gehalt/LSPD.ini");
    case 2: format(pfad,sizeof(pfad),"/gehalt/ADAC.ini");
    }
    return dini_GetInt(pfad,rank);
    }

  • Erstmal danke, ihr habt mir alle sehr geholfen!
    Eine letzte Frage habe ich, die gehört nicht ganz dazu aber dazu will ich keinen neuen Thread aufmachen.
    Ich speichere die Anzahl der gespielten Minuten, damit man beim neuen loggin nicht von 60 starten muss.
    Unter OnPlayerLogin habe ich das:


    new str[10];
    format(str,sizeof(str),"%i",PlayerInfo[playerid][pPDTime]);
    SetTimerEx("PayDay",str,1,"i",playerid);


    Beim Loggout wird "PlayerInfo[playerid][pPDTime]" gespeichert.. angenommen die ist in dem falle 32 000
    Dann will ich eben, dass dann steht: "SetTimerEx("PayDay",32000,1,"i",playerid);
    Jetzt wollte ich den string so formatieren, dass mir nur diese 32000 ausgegeben werden..


    Ich bekomme jedoch den Error, dass der zweite Parameter falsch ist, eben "str".


    Habe ich etwas falsch gemacht oder wie könnte ich das lösen?


    danke an alle!

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Du gibst einen String (also Zeichenkette) als Zahl an....
    Das kann ja nur falsch sein. Du kannst die Array dort direkt angeben.


    SetTimerEx("PayDay",PlayerInfo[playerid][pPDTime],1,"i",playerid);


    //edit: Jetzt mal ehrlich du brauchst doch keinen Timer der 1ms läuft oder?
    //edit2: Weiß auch nicht was mit mir los war, ist ja nen boolean ^^


    L.G.

    Einmal editiert, zuletzt von heyhooo ()

  • Ah, ok danke :)
    Falsch ist es dann aber trotzdem, dass das 1ms sein soll...


    Danke an alle! hat mir sehr geholfen!


    meine letzte frage, für die ich keinen Thread aufmachen will, ist, dass ich das jetzt gelernte auf ein Steuer System umlegen wollte, dass der Präsident die Steuern ändern kann.
    Ich habe das so gemacht: (Befehl und Steuer abfrage)
    Jedoch bekomme ich einen Error (Zeile ist markiert)
    ocmd:setsteuern(playerid,params[])
    {
    if(PlayerInfo[playerid][pLeader] == 7 || PlayerInfo[playerid][pLeader] == 4)
    {
    new pfad[20],str[128],steuern[20],was[20];
    if(sscanf(params,"i",steuern)) return SendClientMessage(playerid,COLOR_LIGHTBLUE,"Benutzung: /setsteuern [Steuern in %]");
    format(pfad,20,"/Steuern.ini");
    if(!fexist(pfad)) return dini_Create(pfad);
    format(steuern,sizeof(steuern),"%d",steuern);
    format(was,sizeof(was),"1");
    dini_IntSet(pfad,was,steuern);//Falscher Variablentyp als Parameter (Parameter #3)
    format(str,sizeof(str),"Du hast die Steuern auf %d% gestellt");
    SendClientMessage(playerid,COLOR_LIGHTBLUE,str);
    }
    return 1;
    }


    stock Steuern(playerid)
    {
    return dini_GetInt("/Steuern.ini",was);
    }

    Einmal editiert, zuletzt von [MVS]Simon ()

  • ocmd:setsteuern(playerid,params[])
    {
    if(PlayerInfo[playerid][pLeader] == 7 || PlayerInfo[playerid][pLeader] == 4)
    {
    new pfad[20],str[128],steuern,was[20];
    if(sscanf(params,"i",steuern)) return SendClientMessage(playerid,COLOR_LIGHTBLUE,"Benutzung: /setsteuern [Steuern in %]");
    format(pfad,20,"/Steuern.ini");
    if(!fexist(pfad)) return dini_Create(pfad);
    format(was,sizeof(was),"1");
    dini_IntSet(pfad,was,steuern);
    format(str,sizeof(str),"Du hast die Steuern auf %d%% gestellt"); //%% Gibt % aus.
    SendClientMessage(playerid,COLOR_LIGHTBLUE,str);
    }
    return 1;
    }

  • Ok, danke jetzt hab ich plötzlich eine komische Error Meldung.. Bzw 3..
    Er zeigt mir jetzt bei allen dini_GetInt, dass es eine Unbekannte Variable ist..


    stock FGehalt(playerid)
    {
    new pfad[20],rank[20];
    format(rank,sizeof(rank),"%d",GetPlayerRank(playerid));
    switch(PlayerInfo[playerid][pMember])
    {
    case 1: return format(pfad, 20, "/Gehalt/LSPD.ini");
    case 2: return format(pfad, 20, "/Gehalt/ADAC.ini");
    case 3: return format(pfad, 20, "/Gehalt/ARMY.ini");
    case 4: return format(pfad, 20, "/Gehalt/RETTUNGSIENST.ini");
    case 5: return format(pfad, 20, "/Gehalt/LCN.ini");
    case 6: return format(pfad, 20, "/Gehalt/YAKUZA.ini");
    case 7: return format(pfad, 20, "/Gehalt/REGIERUNG.ini");
    case 8: return format(pfad, 20, "/Gehalt/HITMAN.ini");
    case 9: return format(pfad, 20, "/Gehalt/CNN.ini");
    case 10: return format(pfad, 20, "/Gehalt/TAXI.ini");
    case 11: return format(pfad, 20, "/Gehalt/FAHRSCHULE.ini");
    case 12: return format(pfad, 20, "/Gehalt/GROVESTREET.ini");
    case 13: return format(pfad, 20, "/Gehalt/BALLAS.ini");
    case 14: return format(pfad, 20, "/Gehalt/BIKER.ini");
    case 15: return format(pfad, 20, "/Gehalt/AZTECAS.ini");
    case 16: return format(pfad, 20, "/Gehalt/TERROR.ini");
    }
    return dini_GetInt(pfad,rank);
    }


    ocmd:setfgehalt(playerid,params[])
    {
    new rang[5], gehalt, pfad[20], str[128];
    if(PlayerInfo[playerid][pLeader] < 1 || PlayerInfo[playerid][pAdmin] < 4) return SendClientMessage(playerid, knallrot,"Du bist kein Leader oder Admin!");
    if(sscanf(params,"ii",rang, gehalt)) return SendClientMessage(playerid, COLOR_LIGHTBLUE, "Benutzung: /setfgehalt [Rang] [Gehalt]");
    switch(PlayerInfo[playerid][pLeader])
    {
    case 1: return format(pfad, 20, "/Gehalt/LSPD.ini");
    case 2: return format(pfad, 20, "/Gehalt/ADAC.ini");
    case 3: return format(pfad, 20, "/Gehalt/ARMY.ini");
    case 4: return format(pfad, 20, "/Gehalt/RETTUNGSIENST.ini");
    case 5: return format(pfad, 20, "/Gehalt/LCN.ini");
    case 6: return format(pfad, 20, "/Gehalt/YAKUZA.ini");
    case 7: return format(pfad, 20, "/Gehalt/REGIERUNG.ini");
    case 8: return format(pfad, 20, "/Gehalt/HITMAN.ini");
    case 9: return format(pfad, 20, "/Gehalt/CNN.ini");
    case 10: return format(pfad, 20, "/Gehalt/TAXI.ini");
    case 11: return format(pfad, 20, "/Gehalt/FAHRSCHULE.ini");
    case 12: return format(pfad, 20, "/Gehalt/GROVESTREET.ini");
    case 13: return format(pfad, 20, "/Gehalt/BALLAS.ini");
    case 14: return format(pfad, 20, "/Gehalt/BIKER.ini");
    case 15: return format(pfad, 20, "/Gehalt/AZTECAS.ini");
    case 16: return format(pfad, 20, "/Gehalt/TERROR.ini");
    }
    if(!fexist(pfad)) return dini_Create(pfad);
    format(rang,sizeof(rang),"%d",rang);
    dini_IntSet(pfad, rang, gehalt);
    format(str,sizeof(str),"Du hast das Gehalt deiner Fraktion für den Rang '%i' auf '%i' geändert",rang,gehalt);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,str);
    return 1;
    }


    ocmd:setsteuern(playerid,params[])
    {
    if(PlayerInfo[playerid][pLeader] == 7 || PlayerInfo[playerid][pLeader] == 4)
    {
    new pfad[20],str[128],steuern;
    if(sscanf(params,"i",steuern)) return SendClientMessage(playerid,COLOR_LIGHTBLUE,"Benutzung: /setsteuern [Steuern in %]");
    format(pfad,20,"/Steuern.ini");
    if(!fexist(pfad)) return dini_Create(pfad);
    format(steuer,sizeof(steuer),"1");
    dini_IntSet(pfad,steuer,steuern);
    format(str,sizeof(str),"Du hast die Steuern auf %d%% gestellt");
    SendClientMessage(playerid,COLOR_LIGHTBLUE,str);
    }
    return 1;
    }


    stock Steuern(playerid)
    {
    if(PlayerInfo[playerid][pDonateRank] == 1)
    {
    dini_GetInt("/Steuern.ini",steuer);
    }
    else
    {
    dini_GetInt("/Steuern.ini",steuer);
    }
    return 1;
    }
    public PayDay(playerid)
    {
    if(ObdachlosenSpawn[playerid] == 1)
    {
    PlayerInfo[playerid][pAccount]=- 200;
    }
    earn[playerid] = FGehalt(playerid)*Steuern(playerid);
    PlayerInfo[playerid][pAccount]+= earn[playerid];
    return 1;
    }



    Das ist alles für mein Payday und Gehalt, Steuer System...

  • ocmd:setsteuern(playerid,params[])
    {
    if(PlayerInfo[playerid][pLeader] == 7 || PlayerInfo[playerid][pLeader] == 4)
    {
    new pfad[20],str[128],steuern, steuer[20];
    if(sscanf(params,"i",steuern)) return SendClientMessage(playerid,COLOR_LIGHTBLUE,"Benutzung: /setsteuern [Steuern in %]");
    format(pfad,20,"/Steuern.ini");
    if(!fexist(pfad)) return dini_Create(pfad);
    format(steuer,sizeof(steuer),"1");
    dini_IntSet(pfad,steuer,steuern);
    format(str,sizeof(str),"Du hast die Steuern auf %d%% gestellt");
    SendClientMessage(playerid,COLOR_LIGHTBLUE,str);
    }
    return 1;
    }


    stock Steuern(playerid)
    {
    new steuer[20];


    if(PlayerInfo[playerid][pDonateRank] == 1)
    {
    format(steuer,sizeof(steuer),"1");
    dini_GetInt("/Steuern.ini",steuer);
    }
    else
    {
    format(steuer,sizeof(steuer),"2"); // 2?
    dini_GetInt("/Steuern.ini",steuer);
    }
    return 1;
    }


    "steuer" war nicht deklariert.



    Edit:
    Das nächste mal poste bitte die Errors die kommen und markiere die Zeilen.

  • Sry, hatte vergessen die deklinationen zu posten ^^
    ich hab ganz oben im script:
    new steuer[MAX_PLAYERS];
    new earn[MAX_PLAYERS];


    Das sind die Errors, wenn ich deine Version nehme die du gerade geschrieben hast aber ich hab dein "new steuer[20]" raus genommen:
    Zeile (46976) : Unbekannte Variable : "dini_GetInt"
    Zeile (47032) : Unbekannte Variable : "dini_GetInt"
    Zeile (47037) : Unbekannte Variable : "dini_GetInt"


    Hier sind die markierten Zeilen:


    stock FGehalt(playerid)
    {
    new pfad[20],rank[20];
    format(rank,sizeof(rank),"%d",GetPlayerRank(playerid));
    switch(PlayerInfo[playerid][pMember])
    {
    case 1: return format(pfad, 20, "/Gehalt/LSPD.ini");
    case 2: return format(pfad, 20, "/Gehalt/ADAC.ini");
    case 3: return format(pfad, 20, "/Gehalt/ARMY.ini");
    case 4: return format(pfad, 20, "/Gehalt/RETTUNGSIENST.ini");
    case 5: return format(pfad, 20, "/Gehalt/LCN.ini");
    case 6: return format(pfad, 20, "/Gehalt/YAKUZA.ini");
    case 7: return format(pfad, 20, "/Gehalt/REGIERUNG.ini");
    case 8: return format(pfad, 20, "/Gehalt/HITMAN.ini");
    case 9: return format(pfad, 20, "/Gehalt/CNN.ini");
    case 10: return format(pfad, 20, "/Gehalt/TAXI.ini");
    case 11: return format(pfad, 20, "/Gehalt/FAHRSCHULE.ini");
    case 12: return format(pfad, 20, "/Gehalt/GROVESTREET.ini");
    case 13: return format(pfad, 20, "/Gehalt/BALLAS.ini");
    case 14: return format(pfad, 20, "/Gehalt/BIKER.ini");
    case 15: return format(pfad, 20, "/Gehalt/AZTECAS.ini");
    case 16: return format(pfad, 20, "/Gehalt/TERROR.ini");
    }
    return dini_GetInt(pfad,rank); // Erster Error
    }stock Steuern(playerid)
    {
    if(PlayerInfo[playerid][pDonateRank] == 1)
    {
    format(steuer,sizeof(steuer),"1");
    dini_GetInt("/Steuern.ini",steuer); //zweiter Error
    }
    else
    {
    format(steuer,sizeof(steuer),"2"); // 2?
    dini_GetInt("/Steuern.ini",steuer); //dritter Error
    }
    return 1;
    }

  • stock FGehalt(playerid)
    {
    new pfad[20],rank[20];
    format(rank,sizeof(rank),"%d",GetPlayerRank(playerid));
    switch(PlayerInfo[playerid][pMember])
    {
    case 1: return format(pfad, 20, "/Gehalt/LSPD.ini");
    case 2: return format(pfad, 20, "/Gehalt/ADAC.ini");
    case 3: return format(pfad, 20, "/Gehalt/ARMY.ini");
    case 4: return format(pfad, 20, "/Gehalt/RETTUNGSIENST.ini");
    case 5: return format(pfad, 20, "/Gehalt/LCN.ini");
    case 6: return format(pfad, 20, "/Gehalt/YAKUZA.ini");
    case 7: return format(pfad, 20, "/Gehalt/REGIERUNG.ini");
    case 8: return format(pfad, 20, "/Gehalt/HITMAN.ini");
    case 9: return format(pfad, 20, "/Gehalt/CNN.ini");
    case 10: return format(pfad, 20, "/Gehalt/TAXI.ini");
    case 11: return format(pfad, 20, "/Gehalt/FAHRSCHULE.ini");
    case 12: return format(pfad, 20, "/Gehalt/GROVESTREET.ini");
    case 13: return format(pfad, 20, "/Gehalt/BALLAS.ini");
    case 14: return format(pfad, 20, "/Gehalt/BIKER.ini");
    case 15: return format(pfad, 20, "/Gehalt/AZTECAS.ini");
    case 16: return format(pfad, 20, "/Gehalt/TERROR.ini");
    }
    return dini_Get(pfad,rank); // Erster Error
    }stock Steuern(playerid)
    {
    if(PlayerInfo[playerid][pDonateRank] == 1)
    {
    format(steuer,sizeof(steuer),"1");
    dini_Get("/Steuern.ini",steuer); //zweiter Error
    }
    else
    {
    format(steuer,sizeof(steuer),"2"); // 2?
    dini_Get("/Steuern.ini",steuer); //dritter Error
    }
    return 1;
    }

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