Individuellen Payday

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
  • Ich zeige euch hier wie ihr einen Individuellen Payday scriptet der für jeden Spieler einzeln läuft.


    Als erstes erstellen wir den Public oben bei den Forwards und den Timer.



    forward pimer(playerid);
    new pimerday[MAX_PLAYERS]; // MAX_PLAYERS ist die Anzahl da für jeden eines erstellt wird.
    pSincePayday[MAX_PLAYERS];
    new pPlaytime[MAX_PLAYERS];


    dann starten wir den Timer am besten unter "Onplayerconnect "oder bei Godfather empfehlenswert bei "Onplayerlogin".



    pimerday[playerid] = SetTimerEx("pimer",60000,1,"i",playerid);


    // pimerday[playerid] ist der Timername
    // pimer der Public er am Ende des Timers ausgelöst wird
    // 60000 die ZEit in Millisekunden bis der Public ausgelöst wird.
    // die "1" ob der TImer wiederholt werden soll
    // "i" steht für Integer eine Zahl ohne Komma ist entscheinend für Playerid da das die VAriable ist die übergeben wird.


    danach killen wir den Timer bei OnPlayerDisconnect

    KillTimer(pimerday[playerid]);



    dann fehlt natürlich nur noch der Public



    public pimer(playerid)
    {
    pPlaytime[playerid]++; // ++ ist wie +1 also wird es alle 60000 milliskunden um 1 erhöht soll die Spielzeit sein
    if(pSincePayday[playerid] >= 60) // wenn Zeitseitpayday 60 oder über 6o ist wird das in der Klammer ausgelöst
    {
    pSincePayday[playerid] = 0; // ZeitseitPayday wird wieder auf 0 gesetzt da er den Payday hatte.
    GivePlayerMoney(playerid, 2000); // der ID "Playerid" werden 2000$ gegeben
    }
    else
    {
    pSincePayday[playerid]++; // ZEit seit Payday wird um 1 erhöht
    }
    return 1;
    }



    EDIT:


    So jetzt speichern wir das noc hdass er zwischendurch auch OFfline gehen kann ich verwende dazu Dini.


    bei "OnplayerConnect "kommt das hier rein:

    new playername[16],string[32];
    GetPlayerName(playerid,playername,sizeof(playername));
    format(string,sizeof(string),"%s.ini",playername); // %s steht für einen String. In unserem Fall playername also dem NAmen vom SPieler also würde der STring bei mir heiße Tirus.ini
    if(dini_Exists(string)) // Fragt ab ob die Datei string existiert string ist in unserem FAll : "[namevomspieler].ini"
    {
    new paydayzeit = dini_Int(string, "zeitseitpayday"); // Lädt in der Datei des Spielers das was unter zeitseitpayday gespeichert ist und speichert es in der Variable paydayzeit.
    new spielzeitinsgesamt = dini_Int(string, "spielzeit"); // Lädt in der Datei des Spielers das was unter spielzeit gespeichert ist und speichert es in der Variable spielzeitinsgesamt.


    pSincePayday[playerid] = paydayzeit; // ändert die pSincePAyday variable um zu dem was wir gespeichert haben (bzw. erst noch kommt im Tut)
    pPlaytime[playerid] = spielzeitinsgesamt; // Das gleiche wie darüber nur mit anderen Variablen


    }
    else // die Datei existiert nicht
    {
    dini_Create(string);// Erstellt die Datei mit dem Namen "[namevomspieler].ini"
    }


    Da wir natürlich nichts laden können was nicht erstellt wurde müssen wir es beim Verlassen des Spielers vom Server noch hinzufügen also bei "Onplayerdisconnect"

    new playername[16],string[32];
    GetPlayerName(playerid,playername,sizeof(playername));// Das gleiche wie oben wir müssen erstmal den Namen des SPielers herausfinden um die Richtige Ini zu finden
    format(string,sizeof(string),"%s.ini",playername);


    dini_IntSet(string, "zeitseitpayday", pSincePayday[playerid]);// setzt in der Datei des Spielers zeitseitpayday auf das gleiche wie pSincePayday.
    dini_IntSet(string, "spielzeit", pPlaytime[playerid]);// setzt in der Datei des Spielers Spielzeit auf das gleiche wie pPlaytime.


    Die Spieler sollten das natürlich auch i-wie abrufen können dazu erstelle ich einen Command unter "OnPlayerCommandtext"



    if (strcmp("/payday", cmdtext, true, 10) == 0)
    {
    new string[128];
    new zeitrechnen = pSincePayday[playerid]-60;
    format(string, sizeof(string), "Zeit seit Payday: %d Spielzeit insgesamt:%d ",pSincePayday[playerid],pPlaytime[playerid] );
    SendClientMessage(playerid, 0xFFFFFFAA,string);// sendet Playerid in der Farbe Weiß String das ist das was wir eine ZEile obendrüber definiert haben.
    return 1;
    }

    3 Mal editiert, zuletzt von Tirus ()

  • Nicht wirklich gut das Tutorial.


    Wo ist die enum struktur für die speicherung usw.?
    falls man es im selfmade gm verwenden will..

  • Kann mir Pls einer sagen wo


    public pimer(playerid)
    {
    pPlaytime[playerid]++; // ++ ist wie +1 also wird es alle 60000 milliskunden um 1 erhöht soll die Spielzeit sein
    if(pSincePayday[playerid]) >= 60) // wenn Zeitseitpayday 60 oder über 6o ist wird das in der Klammer ausgelöst
    {
    pSincePayday[playerid] = 0; // ZeitseitPayday wird wieder auf 0 gesetzt da er den Payday hatte.
    GivePlayerMoney(playerid, 2000); // der ID "Playerid" werden 2000$ gegeben
    }


    hin kommt?
    Pls
    Danke im Vorraus

  • in deim script ganz runter


    ps: bist du von Liberty-Reallife @ OutKast ?

  • Hi Danke für deine Antwort :D


    Ne,aber des is mein Onkel :P



    €= Habn neues Prob.


    C:\Dokumente und Einstellungen\----\Desktop\Server\gamemodes\gf.pwn(835) : error 001: expected token: "}", but found ";"
    C:\Dokumente und Einstellungen\-----\Desktop\Server\gamemodes\gf.pwn(837) : error 054: unmatched closing brace ("}")
    C:\Dokumente und Einstellungen\----\Desktop\Server\gamemodes\gf.pwn(837) : error 010: invalid function or declaration


    Oder hab ich es falsch hingesetzt??
    Wo muss ich den das hinsetzen??

    Einmal editiert, zuletzt von Outkast ()

  • Sorry, dass ich son alten Thread auskramen tu aber ich hab ne Frage!


    Wo muss
    pSincePayday[MAX_PLAYERS];

    hingetan werden, weil wenn ich dass in die forwards Reinklatsche kommt
    .pwn(134) : error 010: invalid function or declaration


    Bitte um schnelle Hilfe


    lol ich habs ^^ musste nur "new" davor setzen ^^ man bin ich blind ^^

    Rundenrekord des Pagani Zonda R um 1,1 Sec. geschlagen.
    Und das mit einem 50 PS schwächeren Auto, dem BMW 320w 1 E90



    Einmal editiert, zuletzt von =[MW]= KillerTier ()

  • Ich entschuldige mich einfach mal dafür das ich den Threath mal wieder rauskrame aber da ich ja bekanntlich GodFather benutze hab ich eine frage:
    Wenn ich die $2000 gehalt beim Timer mit der GF Funktion
    PayDay()
    ersetze, dann würde das ja für alle Spieler gelten.
    Und was ist wenn ich das so machen würde?:
    PayDay(playerid)
    Würde das dann so funzen?




    MfG Firer

  • Das ganze geht sehr viel weniger umständlich, wie du es uns hier zeigst.
    Aber naja, 4/10 von mir.

  • Bekomme diese Errors:


    C:\Users\Ramin\Desktop\Neuer Ordner\Los Angeles Reallife v4.6\gamemodes\LosAngelesReallife.pwn(3354) : error 017: undefined symbol "dini_Exists"
    C:\Users\Ramin\Desktop\Neuer Ordner\Los Angeles Reallife v4.6\gamemodes\LosAngelesReallife.pwn(3356) : error 017: undefined symbol "dini_Int"
    C:\Users\Ramin\Desktop\Neuer Ordner\Los Angeles Reallife v4.6\gamemodes\LosAngelesReallife.pwn(3357) : error 017: undefined symbol "dini_Int"
    C:\Users\Ramin\Desktop\Neuer Ordner\Los Angeles Reallife v4.6\gamemodes\LosAngelesReallife.pwn(3365) : error 017: undefined symbol "dini_Create"
    C:\Users\Ramin\Desktop\Neuer Ordner\Los Angeles Reallife v4.6\gamemodes\LosAngelesReallife.pwn(3404) : error 021: symbol already defined: "string"
    C:\Users\Ramin\Desktop\Neuer Ordner\Los Angeles Reallife v4.6\gamemodes\LosAngelesReallife.pwn(3845) : error 017: undefined symbol "dini_IntSet"
    C:\Users\Ramin\Desktop\Neuer Ordner\Los Angeles Reallife v4.6\gamemodes\LosAngelesReallife.pwn(3846) : error 017: undefined symbol "dini_IntSet"
    C:\Users\Ramin\Desktop\Neuer Ordner\Los Angeles Reallife v4.6\gamemodes\LosAngelesReallife.pwn(3848) : error 021: symbol already defined: "string"
    C:\Users\Ramin\Desktop\Neuer Ordner\Los Angeles Reallife v4.6\gamemodes\LosAngelesReallife.pwn(12624) : error 004: function "PayDay" is not implemented
    C:\Users\Ramin\Desktop\Neuer Ordner\Los Angeles Reallife v4.6\gamemodes\LosAngelesReallife.pwn(13663) : warning 219: local variable "string" shadows a variable at a preceding level
    C:\Users\Ramin\Desktop\Neuer Ordner\Los Angeles Reallife v4.6\gamemodes\LosAngelesReallife.pwn(13664) : warning 204: symbol is assigned a value that is never used: "zeitrechnen"
    C:\Users\Ramin\Desktop\Neuer Ordner\Los Angeles Reallife v4.6\gamemodes\LosAngelesReallife.pwn(13611) : warning 204: symbol is assigned a value that is never used: "plname"
    C:\Users\Ramin\Desktop\Neuer Ordner\Los Angeles Reallife v4.6\gamemodes\LosAngelesReallife.pwn(35446) : warning 203: symbol is never used: "intrate"


    EDIT: Habs geschafft, hatte vergessen die dini.inc oben einzrutragen ^^

  • hmm:


    ...\Selfmade.pwn(239) : error 017: undefined symbol "string"
    ...\Selfmade.pwn(240) : error 017: undefined symbol "string"
    ...\Selfmade.pwn(266) : error 017: undefined symbol "string"
    ...\Selfmade.pwn(267) : error 017: undefined symbol "string"
    ...\Selfmade.pwn(445) : warning 204: symbol is assigned a value that is never used: "zeitrechnen"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.

  • Ich weiß das das en verdammt altes Thema ist aber ich hab en Problem. Ich wollte gerade den PayDay eifügen aber als ich dan auf F5 gefrückt habe bekamm ich fogelde fehler :
    C:\GTASA\Server (self mad)\gamemodes\Self_Mad.pwn(48) : error 012: invalid function call, not a valid address
    C:\GTASA\Server (self mad)\gamemodes\Self_Mad.pwn(48) : warning 215: expression has no effect
    C:\GTASA\Server (self mad)\gamemodes\Self_Mad.pwn(48) : error 001: expected token: ";", but found ")"
    C:\GTASA\Server (self mad)\gamemodes\Self_Mad.pwn(48) : error 029: invalid expression, assumed zero
    C:\GTASA\Server (self mad)\gamemodes\Self_Mad.pwn(48) : fatal error 107: too many error messages on one line


    und hier die Ausschnitte:
    forward pimer(playerid);
    new pimerday[MAX_PLAYERS]; // MAX_PLAYERS ist die Anzahl da für jeden eines erstellt wird.
    new pSincePayday[MAX_PLAYERS];
    new pPlaytime[MAX_PLAYERS];


    public OnPlayerConnect(playerid)
    {
    new dini_Exists;
    new dini_Int;
    new dini_Create;
    new playername[16],string[32];
    GetPlayerName(playerid,playername,sizeof(playername));
    format(string,sizeof(string),"%s.ini",playername); // %s steht für einen String. In unserem Fall playername also dem NAmen vom SPieler also würde der STring bei mir heiße Tirus.ini
    if(dini_Exists(string)) // Fragt ab ob die Datei string existiert string ist in unserem FAll : "[namevomspieler].ini"
    {
    new paydayzeit = dini_Int(string, "zeitseitpayday"); // Lädt in der Datei des Spielers das was unter zeitseitpayday gespeichert ist und speichert es in der Variable paydayzeit.
    new spielzeitinsgesamt = dini_Int(string, "spielzeit"); // Lädt in der Datei des Spielers das was unter spielzeit gespeichert ist und speichert es in der Variable spielzeitinsgesamt.


    pSincePayday[playerid] = paydayzeit; // ändert die pSincePAyday variable um zu dem was wir gespeichert haben (bzw. erst noch kommt im Tut)
    pPlaytime[playerid] = spielzeitinsgesamt; // Das gleiche wie darüber nur mit anderen Variablen


    }
    else // die Datei existiert nicht
    {
    dini_Create(string);// Erstellt die Datei mit dem Namen "[namevomspieler].ini"
    }
    pimerday[playerid] = SetTimerEx("pimer",60000,1,"i",playerid);
    // pimerday[playerid] ist der Timername
    // pimer der Public er am Ende des Timers ausgelöst wird
    // 60000 die ZEit in Millisekunden bis der Public ausgelöst wird.
    // die "1" ob der TImer wiederholt werden soll
    // "i" steht für Integer eine Zahl ohne Komma ist entscheinend für Playerid da das die VAriable ist die übergeben wird.
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    KillTimer(pimerday[playerid]);
    return 1;
    }
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/payday", cmdtext, true, 10) == 0)
    {
    new string[128];
    new zeitrechnen = pSincePayday[playerid]-60;
    format(string, sizeof(string), "Zeit seit Payday: %d Spielzeit insgesamt:%d ",pSincePayday[playerid],pPlaytime[playerid] );
    SendClientMessage(playerid, 0xFFFFFFAA,string);// sendet Playerid in der Farbe Weiß String das ist das was wir eine ZEile obendrüber definiert haben.
    return 1;
    }
    return 0;
    }

  • Hay erstmal!
    Um Fehler zu vermeiden muss man das:


    forward pimer(playerid);
    new pimerday[MAX_PLAYERS]; // MAX_PLAYERS ist die Anzahl da für jeden eines erstellt wird.
    pSincePayday[MAX_PLAYERS];
    new pPlaytime[MAX_PLAYERS];


    In das umwandeln:
    forward pimer(playerid);
    new pimerday[MAX_PLAYERS]; // MAX_PLAYERS ist die Anzahl da für jeden eines erstellt wird.
    new pSincePayday[MAX_PLAYERS]; //new vor das pSincePayday)
    new pPlaytime[MAX_PLAYERS];