[FilterScript] Admin Check-in system
#12

Quote:
Originally Posted by Lucky™
Посмотреть сообщение
What if an admin got timedout/crashed while on-duty (while check-in is enable)?
pawn Код:
// [ DEVELOPMENT GAMEMODE ]

// INCLUDES

#include <a_samp>
#include <zcmd>
#include <sscanf2>

// DEFINES:

// GENERAL:

#define CHECKED_IN_PATH "checked_in.ini"

// FUNCTIONS:

#define function%0(%1) forward%0(%1); public%0(%1)
#define plural_singular(%0,%1,%2) ((%0) == 1)?((#%1)):((#%2))

// COLORS:

#define COLOR_WHITE 0xFFFFFFFF
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_ORED 0xFF0000FF

// PER-PLAYER VARAIBLES:

// STATES:

new bool:sCheckedIn[MAX_PLAYERS] = false;

// TIMESTAMPS:

new tsCheckedIn[MAX_PLAYERS];

// MAIN:

main()
{
    print("Development Mode: check_in.amx");
}

// CALLBACKS:

public OnGameModeInit()
{
    return 1;
}

public OnGameModeExit()
{
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    ResetPlayerVariables(playerid);
    return 1;
}

// COMMANDS:

CMD:checkin(playerid)
{
    if(IsPlayerAdmin(playerid)) return 0;
    if(IsPlayerCheckIn(playerid)) return SendClientMessage(playerid, COLOR_ORED, "You are already check in, you cannot use this command.");

    new string[144], hour, minute, second;
    gettime(hour, minute, second);

    format(string, sizeof(string), ">> %s has checked in (%02d:%02d:%02d).\r\n", PlayerName(playerid), hour, minute, second);
    AddNIString(CHECKED_IN_PATH, string);

    SendClientMessage(playerid, COLOR_YELLOW, "You have checked in, use /checkout when you had enough.");

    sCheckedIn[playerid] = true;
    tsCheckedIn[playerid] = gettime();
    return 1;
}

CMD:checkout(playerid, params[])
{
    if(IsPlayerAdmin(playerid)) return 0;
    if(!IsPlayerCheckIn(playerid)) return SendClientMessage(playerid, COLOR_ORED, "You aren't checked in, you cannot use this command.");

    new string[256], reason[128];
    if(sscanf(params, "s[128]", reason)) return SendClientMessage(playerid, COLOR_WHITE, "Usage: /checkout [reason].");

    format(string, sizeof(string),"You have checked out (Reason: %s).", reason);
    SendClientMessage(playerid, COLOR_YELLOW, string);

    new second = gettime() - tsCheckedIn[playerid], minute, hour, day, week, month, year;
    format(string, sizeof(string),">> %s has checked out after %s.\r\n", PlayerName(playerid), ConvertToTime(second, minute, hour, day, week, month, year));
    AddNIString(CHECKED_IN_PATH, string);
    return 1;
}

// FUNCTIONS:

stock ResetPlayerVariables(playerid)
{
    sCheckedIn[playerid] = false;
}

stock IsPlayerCheckIn(playerid)
{
    if(sCheckedIn[playerid]) return true;
    return false;
}

stock PlayerName(playerid)
{
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    return name;
}

function AddNIString(file[], string[])
{
    new File:inifile;
    inifile = fopen(file, io_append);

    if(!inifile)
    {
        printf("Fatal Error: Couldn't open \"%s\"!", file);
        return 0;
    }
   
    fwrite(inifile, string);
    fclose(inifile);
    return 0;
}

stock ConvertToTime(&second, &minute = -1, &hour = -1, &day = -1, &week = -1, &month = -1, &year = -1)
{
    #define seconds_in_year 31536000
    #define seconds_in_month 2628000
    #define seconds_in_week 604800
    #define seconds_in_day 86400
    #define seconds_in_hour 3600
    #define seconds_in_minute 60
    #define convert_seconds(%1) %1 = second / seconds_in_%1; second %= seconds_in_%1

    new string[128];
    if(year != -1 && (second / seconds_in_year))
    {
        convert_seconds(year); convert_seconds(month); convert_seconds(week); convert_seconds(day); convert_seconds(hour); convert_seconds(minute);
        format(string, sizeof(string), "%d %s, %d %s, %d %s, %d %s, %d %s, %d %s, and %d %s", year, plural_singular(year, "year", "years"), month, plural_singular(month, "month", "months"), \
        week, plural_singular(week, "week", "weeks"), day, plural_singular(day, "day", "days"), hour, plural_singular(hour, "hour", "hours"), minute, plural_singular(minute, "minute", "minutes"), \
        second, plural_singular(second, "second", "seconds"));
        return string;
    }

    if(month != -1 && (second / seconds_in_month))
    {
        year = 0; convert_seconds(month); convert_seconds(week); convert_seconds(day); convert_seconds(hour); convert_seconds(minute);
        format(string, sizeof(string), "%d %s, %d %s, %d %s, %d %s, %d %s, and %d %s", month, plural_singular(month, "month", "months"), week, plural_singular(week, "week", "weeks"), \
        day, plural_singular(day, "day", "days"), hour, plural_singular(hour, "hour", "hours"), minute, plural_singular(minute, "minute", "minutes"), second, plural_singular(second, "second", "seconds"));
        return string;
    }

    if(week != -1 && (second / seconds_in_week))
    {
        year = 0, month = 0; convert_seconds(week); convert_seconds(day); convert_seconds(hour); convert_seconds(minute);
        format(string, sizeof(string), "%d %s, %d %s, %d %s, %d %s, and %d %s", week, plural_singular(week, "week", "weeks"), day, plural_singular(day, "day", "days"), \
        hour, plural_singular(hour, "hour", "hours"), minute, plural_singular(minute, "minute", "minutes"), second, plural_singular(second, "second", "seconds"));
        return string;
    }

    if(day != -1 && (second / seconds_in_day))
    {
        year = 0, month = 0, week = 0; convert_seconds(day); convert_seconds(hour); convert_seconds(minute);
        format(string, sizeof(string), "%d %s, %d %s, %d %s, and %d %s", day, plural_singular(day, "day", "days"), hour, plural_singular(hour, "hour", "hours"), \
        minute, plural_singular(minute, "minute", "minutes"), second, plural_singular(second, "second", "seconds"));
        return string;
    }

    if(hour != -1 && (second / seconds_in_hour))
    {
        year = 0, month = 0, week = 0, day = 0; convert_seconds(hour); convert_seconds(minute);
        format(string, sizeof(string), "%d %s, %d %s, and %d %s", hour, plural_singular(hour, "hour", "hours"), minute, plural_singular(minute, "minute", "minutes"), \
        second, plural_singular(second, "second", "seconds"));
        return string;
    }
   
    if(minute != -1 && (second / seconds_in_minute))
    {
        year = 0, month = 0, week = 0, day = 0, hour = 0; convert_seconds(minute);
        format(string, sizeof(string), "%d %s, and %d %s", minute, plural_singular(minute, "minute", "minutes"), second, plural_singular(second, "second", "seconds"));
        return string;
    }

    year = 0, month = 0, week = 0, day = 0, hour = 0, minute = 0;
    format(string, sizeof(string), "%d %s", second, plural_singular(second, "second", "seconds"));
    return string;
}
There's no need to reset the timestamp.
Reply


Messages In This Thread
Admin Checkin System V1 - by Stev - 01.06.2015, 15:18
Re: Admin Check-in system - by Jakwob - 01.06.2015, 21:07
Re: Admin Check-in system - by Stev - 01.06.2015, 21:17
Re: Admin Check-in system - by Bingo - 01.06.2015, 22:07
Re: Admin Check-in system - by SickAttack - 01.06.2015, 23:09
Re: Admin Check-in system - by ZachKnoxx - 02.06.2015, 03:56
Re: Admin Check-in system - by Phaze - 02.06.2015, 04:51
Re: Admin Check-in system - by Uberanwar - 04.06.2015, 03:42
Respuesta: Admin Check-in system - by AndreLuiz - 04.06.2015, 04:54
Re: Admin Check-in system - by perfectboy - 04.06.2015, 12:55
Re: Admin Check-in system - by Lucky™ - 06.06.2015, 03:27
Re: Admin Check-in system - by SickAttack - 06.06.2015, 03:39
Re: Admin Check-in system - by justice96 - 06.06.2015, 03:46
Re: Admin Check-in system - by Stev - 06.06.2015, 03:49
Re: Admin Check-in system - by Dangjai - 06.06.2015, 06:31
Re: Admin Check-in system - by justice96 - 16.10.2015, 22:59

Forum Jump:


Users browsing this thread: 3 Guest(s)