/* Do not remove the headers from this file! see /USAGE for more info. */
/********************************************************
* *
* uptime - reports how long the mud has been up. *
** * copied from ideaexchange where it was originally*
* created by beek@nightmare *
* copied by zifnab@zorkmud *
*
*********************************************************/
//:PLAYERCOMMAND
//$$ see: timezone
//USAGE time
//
//Displays the current local time (where the mud server is located),
//and the GMT conversion of that, and player's local time (if the
//GMT offset has been entered using the "timezone" command)
//together with time the mud was last rebooted (on mud local time),
//and how long it has been up.
#include <localtime.h>
inherit CMD;
#define MIN 60
#define HOUR (60 * MIN)
#define DAY (24 * HOUR)
#define WEEK (7 * DAY)
private void main(string notused)
{
int tm = uptime();
int tm1 = time();
string tm2 = ctime(tm1);
int tm3 = tm1 - uptime();
string tm4 = ctime(tm3);
int tm5;
string str;
mixed local = localtime(tm1);
int offset = local[LT_GMTOFF];
string gmt;
int x;
mixed my_offset;
my_offset = this_body()->query_tz();
if(intp(my_offset) || floatp(my_offset))
{
my_offset = to_int(3600.0*my_offset);
tm5 = tm1+my_offset;
}
gmt = ctime(tm1-offset);
outf("Local MUD time %s. \n", tm2);
outf("GMT %s.\n", gmt);
my_offset = this_body()->query_tz();
if(intp(my_offset) || floatp(my_offset))
{
my_offset = to_int(3600.0*my_offset);
tm5 = tm1+my_offset;
outf("Player time %s.\n", ctime(tm1+my_offset));
}
out(mud_name()+" restarted on " + tm4 +". \n \n");
str = mud_name()+ " has been up for ";
if (x = (tm / WEEK))
{
str += x + "w ";
tm -= x * WEEK;
}
if (x = (tm / DAY))
{
str += x + "d ";
tm -= x*DAY;
}
if (x = (tm / HOUR))
{
str += x + "h ";
tm -= x * HOUR;
}
if (x = (tm / MIN))
{
str += x + "m ";
tm -= x* MIN;
}
if (tm)
str += tm + "s ";
str = str[0..<2] + ".\n";
out(str);
}