Ban über Zeit

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
  • Hallo,
    nach einiger Zeit habe ich mal wieder mit dem Scripten angefangen und möchte mir nun ein kleines Adminscript schreiben. Doch da habe ich Probleme mit dem Ban-CMD.
    Ich nutze dini, dcmd + sscanf und möchte dann Ban immer mit 3 Parametern durchführen. Einmal die ID/Namen des zu bannenden Spielers, einen Grund und einen Zeitraum (in Tagen). Also /ban [ID] [Grund] [Tage].
    dcmd_ban(playerid, params[])
    {
    new id, reason[128], time;
    if(Spieler[playerid][alevel] < 2) SendClientMessage(playerid,COLOR_TOMATO,"Du erfüllst nicht die benötigten Berechtigungen.");
    else if (sscanf(params, "uzi", id, reason, time)) SendClientMessage(playerid,COLOR_TOMATO,"Nutze /ban [ID] [Grund] [Tage].");
    else if (id == INVALID_PLAYER_ID) SendClientMessage(playerid,COLOR_TOMATO,"Dieser Spieler ist nicht online.");
    else
    {
    new name[MAX_PLAYER_NAME], msg[128]/*, Jahr, Monat, Tag*/;
    GetPlayerName(playerid,name,sizeof(name));
    format(msg,sizeof(msg),"** %s hat dich für %i Tage vom Server verbannt (Grund: %z),",name,time,reason);
    SendClientMessage(id,COLOR_TOMATO,msg);
    // getdate(Jahr, Monat, Tag);
    GetPlayerName(id,name,sizeof(name));
    format(msg,sizeof(msg),"** Du hast %s erfolgreich gebannt.",name);
    SendClientMessage(playerid,COLOR_GREEN,msg);


    }
    return 1;
    }


    So sieht der Code bisher aus, hat aber noch nicht wirklich eine Wirkung. Da es die Funktion getdate(year, month, day) gibt, könnte ich das derzeitige Datum in eine .ini Datei speichern. Allerdings ist da ja das Problem, dass manche Monate weniger Tage als andere haben. Jetzt ist meine Frage, wie ich es zum Beispiel bewerkstelligen könnte, dass ein Spieler der am 28. März für 7 Tage gebannt wird nicht am 35. März wieder entbannt wird, sondern am 04. April.
    Ich würde das eigentlich so bewerkstelligen, dass ich jedem Monat eine bestimmte Zahl an Tagen zuweise und dann einfach "(Bantage+Heutiger Tag) > Tage des Monats" und wenn das so ist, zählt er den Monat um eins höher und gibt die Differenz der beiden Daten als Tag aus. Allerdings ist das ja eine etwas lange Lösung, deshalb wollte ich gerne wissen ob jemand weiß wie das einfacher zu lösen wäre.


    Mit freundlichen Grüßen
    Padarom

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

    Einmal editiert, zuletzt von Padarom ()