Befehl auf Zeit brauche Hilfe

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
  • Du erstellst eine globale Variable (eine Variable irgendwo oben, aufjedenfall in keinem Stock/Public/Befehl etc.), z.B. new aondgeg[MAX_PLAYERS];.

    Dann bei /aond setzt du die Variable auf 1 und startest einen Timer, der nach 10 Minuten ausläuft (= SetTimerEx("aondgeg", 600000, 0, "i", playerid); ).

    In diesem Timer setzt du die Variable wieder auf 0 zurück. Bei /aond musst du dann nurnoch abfragen, ob die Variable aondgeg[playerid] == 1 ist.


    Mfg,

    UncleSub

  • Das hatte ich auch geht aber nicht z.b hier

    if(MuellmannZeit[playerid] == 0)
    {
    SendClientMessage(playerid,COLOR_DUNKELROT,"> Du kannst nur alle 10 Minuten in Dienst gehen !");
    }
    else
    {
    MuellmannDuty[playerid] = 1;
    MuellmannZeit[playerid] = 1;
    SetTimerEx("MuellmannZeit", 10000,0,"i",playerid);
    SendClientMessage(playerid,COLOR_HELLGRÜN,"Du bist als Müllabfuhr in Dienst gegangen.");
    }


    Und hier


    public MuellmannZeitTimer(playerid)
    {
    if(SpielerInfo[playerid][pJob] == 1)
    {
    MuellmannZeit[playerid] = 0;
    SendClientMessage(playerid,COLOR_HELLGRÜN,"> Du kannst nun wieder als Müllabfuhr in Dienst gehen.");
    }
    return 1;
    }


    Geht aber nicht wieso ^^?

  • Machst eine Vari
    new vari;
    Dann unter OngameModeInit
    vari = 0;
    Dann gehste zu deinen Befehl machst da über eine If abfrage.
    if(vari == 0)
    Fragst ab ob die Vari auf 0 ist dann machst du am besten vor deinen return 1; oder irgendwo in deinen Command musst gucken wo es am Sinnvollsten ist ein
    vari = 1;
    Dann Fragst du Ab wie schon gesagt. Mit vari 0 , wenn die vari auf eins ist soll der Befehl abgebrochen werden.
    Dann darfst du aber den Timer aber nicht vergesse setzt einen Timer der die Vari wenn der Timer abläuft wieder auf 0 setzt.
    vari = 0;
    Dann kann man es noch erweitern mit einer
    SendClientMessage(playerid,color,"Du kannst nun wieder /offduty gehen");

  • Jetzt gehts :D ich habe den Timer falsch benannt xD. Eine Frage wenn ich das mit den Variablen so machen würde wie du. Würde es auch nur für den Spieler sein oder für alle?. Danke im voraus!

  • Das ist Ressourcen Fressend :D


    Mach es einfach so wie ich immer:


    Mit nem Timestamp
    der nimmt die zeit in Sekunden



    Beispiel:
    new LastDuty = GetPVarInt(playerid, "LastHolzDuty");
    if ( Get_Time()-LastDuty < 600 )
    {
    new NextFarmIn = floatround(((600-(Get_Time()-LastDuty))/60));
    SendInfoMsg(playerid, sprintf("Du kannst erst in %i Minuten (%i Sekunden) wieder als Holzfäller arbeiten!",NextFarmIn, 600-(Get_Time()-LastDuty)));
    return 1;
    }
    SetPVarInt(playerid, "LastHolzDuty", Get_Time());


    Dazu noch Get_Time von FoxBan ^^
    stock Get_Time()
    {
    new fxban_int_hour,fxban_int_minute,fxban_int_second,fxban_int_year,fxban_int_month,fxban_int_day;
    gettime(fxban_int_hour, fxban_int_minute, fxban_int_second);
    getdate(fxban_int_year, fxban_int_month, fxban_int_day);
    return FB_mktime(fxban_int_hour,fxban_int_minute,fxban_int_second,fxban_int_day,fxban_int_month,fxban_int_year);
    }


    stock FB_mktime(hour1,minute1,second1,day1,month1,year1) {
    new timestamp2;
    timestamp2 = second1 + (minute1 * 60) + (hour1 * 3600);
    new days_of_month[12];


    if ( ((year1 % 4 == 0) && (year1 % 100 != 0)) || (year1 % 400 == 0) ) { days_of_month = {31,29,31,30,31,30,31,31,30,31,30,31}; }
    else { days_of_month = {31,28,31,30,31,30,31,31,30,31,30,31}; }
    new days_this_year = 0; days_this_year = day1;
    if(month1 > 1) {
    for(new i=0; i<month1-1;i++) {
    days_this_year += days_of_month[i];
    }
    }
    timestamp2 += days_this_year * 86400;
    for(new j=1970;j<year1;j++) {
    timestamp2 += 31536000;
    if ( ((year1 % 4 == 0) && (year1 % 100 != 0)) || (year1 % 400 == 0) ) timestamp2 += 86400;
    }
    return timestamp2;
    }


    Gruß

    ik bin der vito c: