Crossfire Server, Trunk
time.c File Reference
#include "global.h"
#include <assert.h>
#include <math.h>
#include "tod.h"
#include <stdio.h>
#include <sys/types.h>
#include <sys/time.h>
+ Include dependency graph for time.c:

Go to the source code of this file.

Macros

#define PBUFLEN   100
 

Functions

const char * get_month_name (const int index)
 
const char * get_periodofday (const int index)
 
const char * get_season_name (const int index)
 
long get_sleep_remaining ()
 
void get_tod (timeofday_t *tod)
 
const char * get_weekday (const int index)
 
void jump_time ()
 
static void log_time (uint32_t process_utime)
 
static void print_tod (object *op)
 
void reset_sleep (void)
 
long seconds (void)
 
void set_tick_duration (long t)
 
void tick_game_time ()
 
unsigned int tick_length (float seconds)
 
const char * time_format_time (const timeofday_t *tod, char *buf, size_t bufsize)
 
void time_info (object *op)
 
static void timespec_add (struct timespec *time, long usec)
 
long timespec_diff (struct timespec *end, struct timespec *start)
 

Variables

static struct timespec game_time
 
static const char *const month_name [MONTHS_PER_YEAR]
 
static const char *const periodsofday [PERIODS_PER_DAY]
 
static uint32_t process_max_utime = 0
 
static uint32_t process_min_utime = 999999999
 
static uint32_t process_tot_mtime
 
static uint32_t process_utime_long_count
 
static uint32_t process_utime_save [PBUFLEN]
 
static uint32_t psaveind
 
uint32_t pticks
 
static const char *const season_name [SEASONS_PER_YEAR+1]
 
uint32_t tick_duration = MAX_TIME
 
unsigned long todtick
 
static const char *const weekdays [DAYS_PER_WEEK]
 

Detailed Description

In-game time functions.

Definition in file time.c.

Macro Definition Documentation

◆ PBUFLEN

#define PBUFLEN   100

Size of history buffer.

Definition at line 41 of file time.c.

Function Documentation

◆ get_month_name()

const char* get_month_name ( const int  index)

give access to month names

Definition at line 111 of file time.c.

References npc_dialog::index, month_name, and MONTHS_PER_YEAR.

Referenced by cfapi_get_month_name(), and START_TEST().

+ Here is the caller graph for this function:

◆ get_periodofday()

const char* get_periodofday ( const int  index)

give access to weekday names

Definition at line 104 of file time.c.

References npc_dialog::index, PERIODS_PER_DAY, and periodsofday.

Referenced by cfapi_get_periodofday_name().

+ Here is the caller graph for this function:

◆ get_season_name()

const char* get_season_name ( const int  index)

give access to season names

Definition at line 125 of file time.c.

References npc_dialog::index, season_name, and SEASONS_PER_YEAR.

Referenced by cfapi_get_season_name(), and START_TEST().

+ Here is the caller graph for this function:

◆ get_sleep_remaining()

long get_sleep_remaining ( )

Definition at line 186 of file time.c.

References game_time, log_time(), tick_duration, and timespec_diff().

Referenced by do_server().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_tod()

void get_tod ( timeofday_t tod)

◆ get_weekday()

const char* get_weekday ( const int  index)

give access to weekday names

Definition at line 118 of file time.c.

References DAYS_PER_WEEK, npc_dialog::index, and weekdays.

Referenced by cfapi_get_weekday_name(), and START_TEST().

+ Here is the caller graph for this function:

◆ jump_time()

void jump_time ( )

Definition at line 194 of file time.c.

References game_time, and process_utime_long_count.

Referenced by do_server().

+ Here is the caller graph for this function:

◆ log_time()

static void log_time ( uint32_t  process_utime)
static

Adds time to our history list.

Definition at line 149 of file time.c.

References PBUFLEN, process_max_utime, process_min_utime, process_tot_mtime, process_utime_save, and psaveind.

Referenced by get_sleep_remaining().

+ Here is the caller graph for this function:

◆ print_tod()

static void print_tod ( object op)
static

Prints the time.

Parameters
opplayer who requested time.

Definition at line 258 of file time.c.

References _timeofday::day, _timeofday::dayofweek, draw_ext_info_format(), get_tod(), _timeofday::month, month_name, MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_INFO, NDI_UNIQUE, give::op, _timeofday::season, season_name, time_format_time(), weekdays, and _timeofday::year.

Referenced by time_info().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ reset_sleep()

void reset_sleep ( void  )

Initialise all variables used in the timing routines.

Definition at line 132 of file time.c.

References game_time, PBUFLEN, process_max_utime, process_min_utime, process_tot_mtime, process_utime_save, psaveind, and pticks.

Referenced by block_until_new_connection(), command_speed(), init(), and setup().

+ Here is the caller graph for this function:

◆ seconds()

long seconds ( void  )

Return wall clock time in seconds.

Definition at line 344 of file time.c.

Referenced by cftimer_create(), cftimer_process_timers(), command_statistics(), flush_old_maps(), generate_random_map(), map_info(), read_map_log(), ready_map_name(), set_map_reset_time(), START_TEST(), swap_map(), and tick_length().

+ Here is the caller graph for this function:

◆ set_tick_duration()

void set_tick_duration ( long  t)

Sets the tick duration. Can be called by a DM through the speed command.

Parameters
tnew duration.

Definition at line 205 of file time.c.

References Floor::t, and tick_duration.

Referenced by command_speed().

+ Here is the caller graph for this function:

◆ tick_game_time()

void tick_game_time ( )

Definition at line 181 of file time.c.

References game_time, pticks, tick_duration, and timespec_add().

Referenced by server_main().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ tick_length()

unsigned int tick_length ( float  seconds)

Calculate the number of ticks that correspond to real time.

Definition at line 378 of file time.c.

References seconds(), and tick_duration.

Referenced by connection_alive().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ time_format_time()

const char* time_format_time ( const timeofday_t tod,
char *  buf,
size_t  bufsize 
)

Formats a timestamp in Crossfire time.

Parameters
todthe timestamp to format
bufthe buffer to fill
bufsizethe size of buf in bytes
Returns
buf

Definition at line 365 of file time.c.

References buf, _timeofday::hour, and _timeofday::minute.

Referenced by clock_type_apply(), and print_tod().

+ Here is the caller graph for this function:

◆ time_info()

void time_info ( object op)

Players wants to know the time. Called through the 'time' command.

Parameters
opplayer who requested time.

Definition at line 294 of file time.c.

References draw_ext_info_format(), FLAG_WIZ, MIN, MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_DEBUG, NDI_UNIQUE, give::op, PBUFLEN, print_tod(), process_max_utime, process_min_utime, process_tot_mtime, process_utime_long_count, process_utime_save, pticks, QUERY_FLAG, and tick_duration.

Referenced by command_time().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ timespec_add()

static void timespec_add ( struct timespec *  time,
long  usec 
)
static

Add 'usec' microseconds to the given timespec.

Definition at line 172 of file time.c.

Referenced by tick_game_time().

+ Here is the caller graph for this function:

◆ timespec_diff()

long timespec_diff ( struct timespec *  end,
struct timespec *  start 
)

Return the difference between two timespec's in microseconds.

Definition at line 163 of file time.c.

Referenced by get_sleep_remaining().

+ Here is the caller graph for this function:

Variable Documentation

◆ game_time

struct timespec game_time
static

Definition at line 36 of file time.c.

Referenced by get_sleep_remaining(), jump_time(), reset_sleep(), and tick_game_time().

◆ month_name

const char* const month_name[MONTHS_PER_YEAR]
static
Initial value:
= {
"Month of Winter",
"Month of the Ice Dragon",
"Month of the Frost Giant",
"Month of Valriel",
"Month of Lythander",
"Month of the Harvest",
"Month of Gaea",
"Month of Futility",
"Month of the Dragon",
"Month of the Sun",
"Month of the Great Infernus",
"Month of Ruggilli",
"Month of the Dark Shades",
"Month of the Devourers",
"Month of Sorig",
"Month of the Ancient Darkness",
"Month of Gorokh"
}

Months.

Definition at line 72 of file time.c.

Referenced by get_month_name(), and print_tod().

◆ periodsofday

const char* const periodsofday[PERIODS_PER_DAY]
static
Initial value:
= {
"Night",
"Dawn",
"Morning",
"Noon",
"Evening",
"Dusk"
}

Definition at line 92 of file time.c.

Referenced by get_periodofday().

◆ process_max_utime

uint32_t process_max_utime = 0
static

Longest cycle time.

Definition at line 44 of file time.c.

Referenced by log_time(), reset_sleep(), and time_info().

◆ process_min_utime

uint32_t process_min_utime = 999999999
static

Shortest cycle time.

Definition at line 45 of file time.c.

Referenced by log_time(), reset_sleep(), and time_info().

◆ process_tot_mtime

uint32_t process_tot_mtime
static

?

Definition at line 46 of file time.c.

Referenced by log_time(), reset_sleep(), and time_info().

◆ process_utime_long_count

uint32_t process_utime_long_count
static

Number of times server couldn't keep up with game time (tried to sleep for a negative time)

Definition at line 48 of file time.c.

Referenced by jump_time(), and time_info().

◆ process_utime_save

uint32_t process_utime_save[PBUFLEN]
static

Historic data.

Definition at line 42 of file time.c.

Referenced by log_time(), reset_sleep(), and time_info().

◆ psaveind

uint32_t psaveind
static

Index in process_utime_save.

Definition at line 43 of file time.c.

Referenced by log_time(), and reset_sleep().

◆ pticks

uint32_t pticks

◆ season_name

const char* const season_name[SEASONS_PER_YEAR+1]
static
Initial value:
= {
"The Season of New Year",
"The Season of Growth",
"The Season of Harvest",
"The Season of Decay",
"The Season of the Blizzard",
"\n"
}

Ingame seasons.

Definition at line 51 of file time.c.

Referenced by get_season_name(), and print_tod().

◆ tick_duration

uint32_t tick_duration = MAX_TIME

Gloabal variables:

Definition at line 35 of file time.c.

Referenced by command_speed(), command_statistics(), get_sleep_remaining(), set_tick_duration(), tick_game_time(), tick_length(), and time_info().

◆ todtick

unsigned long todtick

Game world time, in in-game hours. See PTICKS_PER_CLOCK.

Definition at line 38 of file time.c.

Referenced by get_tod(), init_clocks(), tick_the_clock(), and write_todclock().

◆ weekdays

const char* const weekdays[DAYS_PER_WEEK]
static
Initial value:
= {
"the Day of the Moon",
"the Day of the Bull",
"the Day of the Deception",
"the Day of Thunder",
"the Day of Freedom",
"the Day of the Great Gods",
"the Day of the Sun"
}

Days of the week.

Definition at line 61 of file time.c.

Referenced by get_weekday(), and print_tod().