Einmal am Tag Geld bekommen

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.
    Da ich das Timerzeugs noch nicht so drauf habe, möchte ich euch jetzt was fragen :
    Also...ein Premium-User gibt /pgetmoney ein und erhält zum Beispiel 10000$. Das kann er aber nur einmal am Tag machen.
    Wenn er einen Tag nicht online kommt, bekommt er das Geld von dem Tag halt nicht. Wie geht das ?


    MfG
    DarthXela


    //Edit : Geht das überhaupt ? o.O.

    Einmal editiert, zuletzt von DarthXela ()

  • also da gibt es die eine möglichkeit:



    if(strcmp(strget(cmdtext, 0),"/pgetmoney", true) == 0)
    {
    if(hier musst du abfragen ob er ein premium user ist)
    {
    if(in seiner Spielerdatei steht drinn dass er heute noch kein geld erhalten hat)
    {
    GivePlayerMoney(playerid, 12000);
    }
    }
    }



    zur erklärung:
    wie du abfrägst ob der spieler vip ist dürfte denkichmal klar sein das kommt halt drauf an wie du das deffinierst also wenn du z.b. es in seine Spieler datei schreiben lässt dann musst du halt abfragen ob da drin 1 oder 0 steht


    zu dem zweiten an deiner stelle würde ich es so machen:
    schreib in seine Spielerdatei folgendes rein:
    dini_IntSet(hier halt dein pfad,"VIP_Money_Erhalten", 0);
    wenn er sein geld geholt hat dann setzte diesen Wert auf 1 also:
    dini_IntSet(hier halt dein pfad, "VIP_Money_Erhalten", 1);
    und bei public OnGameModeExit kannst du den Wert ja wieder auf 0 setzten (im normalfall kannst du auf deinem Server einstellen dass er immer um 0 Uhr einen gmx macht und dann kannst du sicher gehen dass er das geld nur einmal am tag bekommt)


    ich hoffe ich konnte dir helfen
    wenn du fragen dazu hast frag einfach...


    mfg The_OTTO

  • Hallo,


    mach es doch einfach so das er nur jede 24 Stunden Geld hohlen kann ;)



    Siehe Unten:


    new NextGeld[MAX_PLAYERS];


    if(strcmp(cmd, "/deinbefehl", true) ==0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(Deine Premium ac abfrage(playerid))
    {
    if(Now()<NextGeld[playerid]) return SendClientMessage(playerid,COLOR_RED,"Du kannst nur alle 24 Stunden Geld ziehen!");//jetzt überprüfen wir ob NextKill größer als der der Aktuelle Zeitstempel ist , wenn ja sind die 60 minuten noch nicht um
    NextGeld[playerid]=Now()+60;// Zeit in Sic. also 60 Sec = 1 Minute
    GivePlayerMoney(playerid, 12000);
    }
    }
    }


    stock mktime(hour,minute,second,day,month,year)
    {
    new timestamp2;


    timestamp2 = second + (minute * 60) + (hour * 3600);


    new days_of_month[12];


    if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) {
    days_of_month = {31,29,31,30,31,30,31,31,30,31,30,31}; // Schaltjahr
    } else {
    days_of_month = {31,28,31,30,31,30,31,31,30,31,30,31}; // keins
    }
    new days_this_year = 0;
    days_this_year = day;
    if(month > 1) { // No January Calculation, because its always the 0 past months
    for(new i=0; i<month-1;i++) {
    days_this_year += days_of_month[i];
    }
    }
    timestamp2 += days_this_year * 86400;


    for(new j=1970;j<year;j++) {
    timestamp2 += 31536000;
    if ( ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0) ) timestamp2 += 86400; // Schaltjahr + 1 Tag
    }


    return timestamp2;
    }


    stock Now()
    {
    new hour,minute,second,year,month,day;
    gettime(hour, minute, second);
    getdate(year, month, day);
    return mktime(hour,minute,second,day,month,year);
    }


    [ SCRIPTING ] Benützung TimeStamp



    Bin mir nicht Sicher ob die Zeit nach Relog zurpck gesetzt wird...


    Liebe Grüße


    //edit: was hinz..

    Einmal editiert, zuletzt von DJ_Iceclub ()

  • Erstmal, danke für eure Antworten. Ich habe ein Problem. Also da mit den TimeStamps gibt 3 Errors bei mir. Also meine Frage zur anderen Möglichkeit : Wie kann man den Gamemode oder oder noch besser das Filterscript genau um Mitternacht automatisch restarten bzw. reloaden lassen ?


    MfG
    DarthXela - Antwort wäre echt nett ;)

  • Es gäbe natürlich eine bessere Variante vielleicht, aber diese hier sollte die einfachste sein..


    new gCurrentTime[3];


    forward CheckHour();
    public CheckHour()
    {
    gettime(gCurrentTime[0],gCurrentTime[1],gCurrentTime[2]);
    if(gCurrentTime[0]!=0||gCurrentTime[1]!=59)
    {
    SetTimer("CheckHour", 30000, false); //Überprüft alle 30Sekunden...
    return false;
    }
    GameModeExit();
    return true;
    }


    public OnFilterScriptInit()
    {
    SetTimer("CheckHour", 120000, false); //Startet zum überprüfen erst in 2min...
    return true;
    }

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Beim Laden vom Filterscript wird das Public in 2min gestartet.. Um kleine Bugs zu vermeiden


    Danach überprüft das public, ob es 0:59Uhr ist (Könntest auch statt dem 0 eine 23 machen ^^) und wenn es nicht so spät ist, dann startet er die Überprüfung in 30 Sekunden neu. Sollte es dann 0:59 Uhr sein, macht er einen GMX und startet Server neu..



    Mir fällt jedoch gerade was besseres ein.. ^^


    #define RESTART_STUNDE (23)
    #define RESTART_MINUTE (59)


    new gCurrentTime[3];


    forward CheckHour();
    public CheckHour()
    {
    GameModeExit();
    return true;
    }


    public OnFilterScriptInit()
    {
    gettime(gCurrentTime[0],gCurrentTime[1],gCurrentTime[2]);
    gCurrentTime[2] += (RESTART_STUNDE-gCurrentTime[0])*3600; //Wandle restliche Stunden in Sekunden um und füge sie den Sekunden hinzu..
    gCurrentTime[2] += (RESTART_MINUTE-gCurrentTime[1])*60; //Wandle restliche Minuten in Sekunden um und füge sie den Sekunden hinzu...
    SetTimer("CheckHour", gCurrentTime[2]*1000, false); //Startet zum überprüfen erst in 2min...
    return true;
    }

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Bei deiner neuen Methode (die versteh ich ülbrigens ;)) hab ich leider auch Errors :( :
    Admin.pwn(74 ) : error 021: symbol already defined: "gettime"
    Admin.pwn(78 ) : error 010: invalid function or declaration
    Admin.pwn(744 ) : warning 203: symbol is never used: "gCurrentTime"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Errors.


    Zeile 74 : gettime(gCurrentTime[0],gCurrentTime[1],gCurrentTime[2]);
    Zeile 78 : return true;
    Zeile 744 : } xD
    Also Reihe 744 ist in public CheckHour()
    {
    GameModeExit();
    return true;
    }
    und ist gaaaanz am Ende vom Filterscript ;)


    //Edit : Zeilen hinzugefügt
    //Edit 2 : geschrieben, dass ich im letzten Edit die Zeilen hinzugefügt habe ^^
    //Edit 3 : Ich hatte nur 'ne Klammer falsch gesetzt xD. Aber ein Warning bleibt :
    Admin.pwn(73) : warning 225: unreachable code
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Warning.
    gettime(gCurrentTime[0],gCurrentTime[1],gCurrentTime[2]);

    Einmal editiert, zuletzt von DarthXela ()

  • Kleiner Tipp
    Mach keine 24h mach das mann alle 15h einmal Geld holen kann.
    Weill wenn du dann einma abends holst musst du entweder ein Tag weglassen oder immer abends und das ist sch..
    Keienr zockt 15h am stück das perfekt


    Bewerte mich und meine Transaktionen als Mittelsmann

  • Lösch das return vor dem gettime

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!