Crossfire Server, Trunk
hiscore.c File Reference
#include "global.h"
#include <errno.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include "sproto.h"
#include "output_file.h"
+ Include dependency graph for hiscore.c:

Go to the source code of this file.

Data Structures

struct  score_table
 
struct  scr
 

Macros

#define _GNU_SOURCE
 

Typedefs

typedef struct scr score
 

Functions

static void add_score (score_table *table, score *new_score, score *old_score)
 
static char * draw_one_high_score (const score *sc, char *buf, size_t size)
 
static int get_score (char *bp, score *sc)
 
void hiscore_check (object *op, int quiet)
 
void hiscore_display (object *op, int max, const char *match)
 
void hiscore_init (void)
 
static void hiscore_load (score_table *table)
 
static void hiscore_save (const score_table *table)
 
static void put_score (const score *sc, char *buf, size_t size)
 

Variables

static score_table hiscore_tables [MAX_SKILLS+1]
 

Detailed Description

Hiscore handling functions.

Definition in file hiscore.c.

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 18 of file hiscore.c.

Typedef Documentation

◆ score

typedef struct scr score

The score structure is used when treating new high-scores.

Function Documentation

◆ add_score()

static void add_score ( score_table table,
score new_score,
score old_score 
)
static

Adds the given score-structure to the high-score list, but only if it was good enough to deserve a place.

Parameters
tablethe highscore table to add to.
new_scorescore to add.
old_scorereturns the old player score.

Definition at line 186 of file hiscore.c.

References score_table::entry, scr::exp, HIGHSCORE_LENGTH, hiscore_save(), scr::name, scr::position, and Ice::tmp.

Referenced by hiscore_check().

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

◆ draw_one_high_score()

static char* draw_one_high_score ( const score sc,
char *  buf,
size_t  size 
)
static

Formats one score to display to a player.

Parameters
scscore to format.
bufbuffer to write to. Will contain suitably formatted score.
sizelength of buf.
Returns
buf.

Definition at line 156 of file hiscore.c.

References buf, scr::exp, FMT64, scr::killer, scr::maplevel, scr::maxgrace, scr::maxhp, scr::maxsp, scr::name, scr::position, and scr::title.

Referenced by hiscore_check(), and hiscore_display().

+ Here is the caller graph for this function:

◆ get_score()

static int get_score ( char *  bp,
score sc 
)
static

The opposite of put_score(), get_score reads from the given buffer into a static score structure, and returns a pointer to it.

Parameters
bpstring to parse.
screturns the parsed score.
Returns
whether parsing was successful

Definition at line 111 of file hiscore.c.

References BIG_NAME, scr::exp, FMT64, scr::killer, scr::maplevel, scr::maxgrace, scr::maxhp, scr::maxsp, scr::name, split_string(), scr::title, and Ice::tmp.

Referenced by hiscore_load().

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

◆ hiscore_check()

void hiscore_check ( object op,
int  quiet 
)

Checks if player should enter the hiscore, and if so writes her into the list.

Parameters
opplayer to check.
quietIf set, don't print anything out - used for periodic updates during game play or when player unexpected quits - don't need to print anything in those cases

Definition at line 346 of file hiscore.c.

References add_score(), BIG_NAME, draw_ext_info(), draw_ext_info_format(), draw_one_high_score(), scr::exp, FLAG_WAS_WIZ, FMT64, FOR_INV_FINISH, FOR_INV_PREPARE, get_skill_client_code(), HIGHSCORE_LENGTH, hiscore_tables, make_face_from_files::int, scr::killer, llevDebug, LOG(), scr::maplevel, MAX_BUF, scr::maxgrace, scr::maxhp, scr::maxsp, diamondslots::message, MSG_TYPE_ADMIN, MSG_TYPE_ADMIN_HISCORE, MSG_TYPE_APPLY, MSG_TYPE_APPLY_ERROR, MSG_TYPE_COMMAND, MSG_TYPE_COMMAND_ERROR, scr::name, NDI_UNIQUE, give::op, player_get_title(), scr::position, PROFILE_BEGIN, PROFILE_END, QUERY_FLAG, SKILL, scr::title, and Ice::tmp.

Referenced by apply_savebed(), command_kick2(), emergency_save(), key_confirm_quit(), kill_player_permadeath(), leave(), and process_players1().

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

◆ hiscore_display()

void hiscore_display ( object op,
int  max,
const char *  match 
)

Displays the high score file.

Parameters
opplayer asking for the score file.
maxmaximum number of scores to display.
matchif non-empty, will only print players with name or title containing the string (non case-sensitive). Other options: -s:[name] – show the table for the skill 'name' instead of overall -s – show a short list for each skill

Definition at line 449 of file hiscore.c.

References draw_ext_info(), draw_ext_info_format(), draw_one_high_score(), score_table::entry, HIGHSCORE_LENGTH, hiscore_tables, llevDebug, LOG(), push::match, say::max, MAX_BUF, MAX_SKILLS, MSG_TYPE_ADMIN, MSG_TYPE_ADMIN_HISCORE, give::name, scr::name, NDI_UNIQUE, give::op, and strcasestr_local.

Referenced by command_hiscore().

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

◆ hiscore_init()

void hiscore_init ( void  )

Initializes the module.

Note
There is one table per skill, as well as the "Overall" table, each saved in a file in .../var/crossfire/hiscores/[skill_name] or as configured in config.h.

Definition at line 294 of file hiscore.c.

References c, get_skill_client_code(), HIGHSCORE_DIR, hiscore_load(), hiscore_tables, Settings::localdir, MAX_BUF, MAX_SKILLS, give::name, OLD_HIGHSCORE, settings, and skill_names.

Referenced by init().

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

◆ hiscore_load()

static void hiscore_load ( score_table table)
static

Loads the hiscore_table from the highscore file.

Parameters
tablethe highscore table to load.

Definition at line 248 of file hiscore.c.

References buf, score_table::entry, score_table::fname, get_score(), HIGHSCORE_LENGTH, llevDebug, llevError, LOG(), MAX_BUF, and scr::position.

Referenced by hiscore_init().

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

◆ hiscore_save()

static void hiscore_save ( const score_table table)
static

Saves the highscore_table into the highscore file.

Parameters
tablethe highscore table to save.

Definition at line 79 of file hiscore.c.

References buf, score_table::entry, score_table::fname, HIGHSCORE_LENGTH, MAX_BUF, scr::name, of_close(), of_open(), and put_score().

Referenced by add_score().

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

◆ put_score()

static void put_score ( const score sc,
char *  buf,
size_t  size 
)
static

Writes the given score structure to specified buffer.

Parameters
scscore to write.
bufbuffer to write to.
sizebuf's size.

Definition at line 69 of file hiscore.c.

References buf, scr::exp, FMT64, scr::killer, scr::maplevel, scr::maxgrace, scr::maxhp, scr::maxsp, scr::name, and scr::title.

Referenced by hiscore_save().

+ Here is the caller graph for this function:

Variable Documentation

◆ hiscore_tables

score_table hiscore_tables[MAX_SKILLS+1]
static

The highscore table. Unused entries are set to zero (except for position).

Definition at line 57 of file hiscore.c.

Referenced by hiscore_check(), hiscore_display(), and hiscore_init().