Premium auf Tage

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
  • Guten Abend liebe Com,


    Und zwar weiss ich jetzt nicht wie ich die Sekunden abziehe von dem Spieler der Premium hat.
    Ich habe vieles ausprobiert aber nichts ging ich habe wieder nur denn Befehl.


    Weiss einer vielleicht wie ich dies hinbekomme ?



    Code:


    CMD:givepremium(playerid, params[])
    {
    if(!IsLoggedIn(playerid))return 1;
    if(Spieler[playerid][pTutorial] > 0)return SendClientMessage(playerid, COLOR_GREY, "Du bist derzeit im Tutorial, und kannst keine Befehle benutzen.");
    new pID,entry[32],string[128];
    if(sscanf(params, "us[32]", pID, entry))
    {
    SendClientMessage(playerid, COLOR_GREY, "** Benutze /givepremium [SpielerID] [3Tage/7Tage/14Tage/LifeTime]");
    return 1;
    }
    if(IsPlayerNPC(pID))return 1;
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid, COLOR_GREY, ERROR_OFFLINE);
    if(!(Spieler[playerid][pAdmin] <= 3))return SendClientMessage(playerid, COLOR_GREY, "Du hast keine Berächtigung dazu.");
    if(strcmp(entry, "3Tage", true) == 0)
    {
    Spieler[pID][pPremium] = 1;
    Spieler[pID][pPremiumAblauf] = gettime()+(86400*3);
    format(string, sizeof(string),"Server: Du hast vom System einen 3 Tage Premium erhalten.");
    SendClientMessage(pID, COLOR_WHITE, string);
    format(string, sizeof(string),"Du hast %s einen 3 Tage Premium gegeben.", GetName(pID));
    SendClientMessage(playerid, COLOR_WHITE, string);
    return 1;
    }
    if(strcmp(entry, "7Tage", true) == 0)
    {
    Spieler[pID][pPremium] = 1;
    Spieler[pID][pPremiumAblauf] = gettime()+(86400*7);
    format(string, sizeof(string),"Server: Du hast vom System einen 7 Tage Premium erhalten.");
    SendClientMessage(pID, COLOR_WHITE, string);
    format(string, sizeof(string),"Du hast %s einen 7 Tage Premium gegeben.", GetName(pID));
    SendClientMessage(playerid, COLOR_WHITE, string);
    return 1;
    }
    if(strcmp(entry, "14Tage", true) == 0)
    {
    Spieler[pID][pPremium] = 1;
    Spieler[pID][pPremiumAblauf] = gettime()+(86400*14);
    format(string, sizeof(string),"Server: Du hast vom System einen 14 Tage Premium erhalten.");
    SendClientMessage(pID, COLOR_WHITE, string);
    format(string, sizeof(string),"Du hast %s einen 14 Tage Premium gegeben.", GetName(pID));
    SendClientMessage(playerid, COLOR_WHITE, string);
    return 1;
    }
    if(strcmp(entry, "LifeTime", true) == 0)
    {
    Spieler[pID][pPremium] = 2;
    Spieler[pID][pPremiumAblauf] = gettime()+(86400*3640);
    format(string, sizeof(string),"Server: Du hast vom System einen Premium (permanent) erhalten.");
    SendClientMessage(pID, COLOR_WHITE, string);
    format(string, sizeof(string),"Du hast %s einen Premium (permanent) gegeben.", GetName(pID));
    SendClientMessage(playerid, COLOR_WHITE, string);
    return 1;
    }
    return 1;
    }


    Jeffry

  • Erstelle einen globalen Timer, der jede Minute aufgerufen wird:
    SetTimer("CheckDonators", 60000, true);


    forward CheckDonators();
    public CheckDonators()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i) || Spieler[i][pPremium] == 0) continue;
    if(Spieler[i][pPremiumAblauf] < gettime())
    {
    Spieler[i][pPremiumAblauf] = 0;
    Spieler[i][pPremium] = 0;
    }
    }
    return 1;
    }



  • gehen die Sekunden von pPremiumAblauf automatisch auf 0 ?

  • Wenn die Zeit vorbei ist, ja.
    Steht ja hier:
    Spieler[i][pPremiumAblauf] = 0;


    Was du noch machen kannst:
    Bei LoginPlayer (dort wo die Spielerstatistiken geladen werden):
    CheckDonators();
    Damit es keine Verzögerungen gibt.



    PS: Zitiere bitte nicht ganze Posts mit Code, das macht den Thread unübersichtlich.

  • Ich habe noch eine Frage, wie mach ich das beim Spawn das diese Nachricht kommt.


    "Du hast Premium, (2 Tage, 12 Stunden, 47 Minuten)"


    if(Spieler[playerid][pPremium] == 1)
    {
    SendClientMessage(playerid,COLOR_WHITE,"Du hast {167317}Premium (permanent)");
    }

  • new t=Spieler[playerid][pPremiumAblauf]-gettime();
    new d=t/86400;
    t-=d*86400;
    new h=t/3600;
    t-=h*3600;
    new m=t/60;
    new str[145];
    format(str, sizeof(str), "Du hast noch %d Tage %d Stunden und %d Minuten.", d, h, m);
    SendClientMessage(playerid, Farbe, str);

  • Beitrag von CynaxTV ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Es ist relativ egal wie die Variable heißt, aber wenn du es so machen willst ja.
    Du musst es einfach wie zum Beispiel das Geld behandeln, speichern und laden. Die Zeit sollte dann ganz normal runterzählen.


    Wenn nicht, poste bitte den Code, wie du ihn dann hast.