[Echtzeit]Erst nach 3 Stunden Perso 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
  • Wie mache ich das wen ich jetzt einen Perso beantrage, und ich ihn erst nach 3 stunden abholen kann?, könnt ihr mir das bitte sagen, wäre sehr nett.
    Vielen dank vorträglich



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • hab ich jetzt mit settimerex gemacht, aber wird der timer nur fertig sein wen der player on is? oder läuft der auch wen er off ist..
    hier 3 stunden SetTimerEx("Abholtime", 10800000, 0, "i", playerid);


    oder könnt ihr mir sagen wie es besser is



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

  • Hast du einen SetTimer mit Repeating true und einem niedrigen Invtervall (z.B. 1000er)?

  • häh mach doch einfach unter command oder wo du das haben willst


    if (/perso)
    {
    Settimer (Perso, 10800000)
    }



    public Perso
    {
    give perso
    }


    ps: Diente nur zu veranschaulichung


    _____________________________________________________________________________________________________________________________________________
    Die Anwort auf ALLES
    x = 9 * 6
    x = 3 * 3 * 2 * 3 = 42 (heißt auch das eigentlich alles 42 "returnt" [return 42;])
    Definitionsmenge = [0;42]
    ==> Lösungsmenge = {}


    Daraus Folgt: Das Leben macht keinen Sinn .
    Details siehe Reiseführer "Per Anhalter durch die Galaxis".


  • ne das wäre doof ;) ... mach es mit einer timestamp funktion , dafür brauchst du eine neue variable


    hier:


    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);
    }


    //z.B mit einem dialog ;)


    if(dialogid==20)
    {
    if(response==0) return 0;
    SetPVarInt(playerid,"abholtermin",Now()+10800);//10800 sind die 3 stunden
    SendClientMessage(playerid,COLOR,"Du kannst deinen Perso in 3 stunden abholen");
    }


    if (strcmp("/perso", cmdtext, true, 4) == 0)
    {
    if(GetPVarInt(playerid,"abholtermin")>Now()) return SendClientMessage(playerid,COLOR,"Du kannst den Perso erst 3 stunden nach der beantragung abholen");
    GivePerso(playerid);
    DeletePVar(playerid,"abholtermin");
    }


    // damit er es speichert musst du den wert GetPVarInt(playerid,"abholtermin") bei onplayerdisconnect in die datei speichern und beim connecten den wert wiedersetzen


    edit: verbessert

  • Unter Gamemodeinit
    SetTimer("AllgemeinerTimer", 1000, true);


    new ATimer[3];
    forward AllgemeinerTimer();
    public AllgemeinerTimer()
    {
    for(new s; s<(sizeof(ATimer); s++) ATimer[s]++;
    if(ATimer[0] == 60) { ATimer[0] = 0; }//1 Minute
    if(ATimer[1] == 30) { ATimer[1] = 0; }//30 Sekunden
    if(ATimer[2] == 3600) { ATimer[2] = 0; }//1 Stunde
    return 1;
    }


    Da kannst du auch eine for Schleife einbauen und eine Variable ++; en und wenn die 60 o.ä. erreicht kann man Perso kaufen oder so



    Edit: Zabus´ Methode finde ich persönlich besser und schonender ;)

  • wow ich wollt mal drauf hinweisen ich bin noch anfänger :D
    aber danke für die schnelle hilfe aber ich versteh nur bahnhof sorry
    //edit habs nun verstanden und richtig durchgelesen, habs eingebaut 2 errors und die gefixxt weil die ";" gefehlt haben^^..
    dankeschön ich close mal, fals was buggt öffne ich nochma



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()