 |
Crossfire Server, Trunk
1.75.0
|
Go to the documentation of this file.
48 static const int shutdown_warn_times[] = {120, 90, 60, 45, 30, 15, 10, 5, 4, 3, 2, 1};
51 static const char *
days[] = {
"Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat"};
70 static char const*
crypt_string(
char const *str,
char const* salt) {
75 #if (defined(__FreeBSD__))
87 static const char *
const c =
88 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./";
115 if (getenv(
"CF_DEBUG_BYPASS_LOGIN")) {
120 if (strlen(crypted) == 0) {
121 return strlen(typed) == 0 ? true :
false;
124 const char *typed_hashed =
crypt_string(typed, crypted);
125 if (typed_hashed != NULL) {
126 return strcmp(typed_hashed, crypted) == 0;
128 LOG(
llevError,
"Could not check password with stored hash %s\n", crypted);
158 LOG(
llevDebug,
"Player %s savebed location %s is invalid - going to emergency location (%s)\n",
189 if (x < 0 && y >= 0) x=0;
190 if (y < 0 && x >= 0) y=0;
193 if (x != -1 || y != -1) {
194 LOG(
llevError,
"enter_map: supplied coordinates are not within the map! (%s: %d, %d)\n", newmap->
path, x, y);
206 "The exit is closed");
230 LOG(
llevInfo,
"enter_map: Could not find free spot for player - will dump on top of object (%s: %d, %d)\n", newmap->
path, x, y);
275 if (oldmap != newmap) {
284 if (oldmap != NULL) {
322 static char *
clean_path(
const char *file,
char *newpath,
int size) {
326 for (cp = newpath; *cp !=
'\0'; cp++) {
353 cp =
const_cast<char *
>(strrchr(src,
'/'));
359 for (cp = newpath; *cp !=
'\0'; cp++) {
378 static int reference_number = 0;
381 memset(&rp, 0,
sizeof(
RMParms));
406 while (isdigit(
buf[strlen(
buf)-1]))
411 snprintf(newmap_name,
sizeof(newmap_name),
"/random/%s%04d", cp+1, reference_number++);
459 sourcemap = strchr(exitpath,
'!');
465 LOG(
llevError,
"enter_fixed_template_map: Exit %s (%d,%d) on map %s has no source template.\n", exit_ob->
name, exit_ob->
x, exit_ob->
y, exit_ob->
map->
path);
476 sourcemap = sourcemap_buf;
482 snprintf(tmpnum,
sizeof(tmpnum),
"%d", exit_ob->
x);
483 replace(exitpath,
"%x", tmpnum, resultname,
sizeof(resultname));
485 snprintf(tmpnum,
sizeof(tmpnum),
"%d", exit_ob->
y);
486 strlcpy(tmpstring, resultname,
sizeof(tmpstring));
487 replace(tmpstring,
"%y", tmpnum, resultname,
sizeof(resultname));
489 strlcpy(tmpstring, resultname,
sizeof(tmpstring));
490 replace(tmpstring,
"%n", exit_ob->
map->
name, resultname,
sizeof(resultname));
514 "Template exit in '%s' (%d, %d) does not reference a valid "
515 "template. Make sure a template exists at '%s'.\n",
548 snprintf(tmpnum,
sizeof(tmpnum),
"%d", exit_ob->
x);
549 replace(
EXIT_PATH(exit_ob)+3,
"%x", tmpnum, resultname,
sizeof(resultname));
551 snprintf(tmpnum,
sizeof(tmpnum),
"%d", exit_ob->
y);
552 strlcpy(tmpstring, resultname,
sizeof(tmpstring));
553 replace(tmpstring,
"%y", tmpnum, resultname,
sizeof(resultname));
555 strlcpy(tmpstring, resultname,
sizeof(tmpstring));
556 replace(tmpstring,
"%n", exit_ob->
map->
name, resultname,
sizeof(resultname));
569 memset(&rp, 0,
sizeof(
RMParms));
626 char* src = strdup(op->
map->
path);
627 char* slash = strrchr(src,
'/');
638 if ((cp = strrchr(tmpc,
'_')) != NULL)
678 LOG(
llevDebug,
"enter_unique_map: Exit %s (%d,%d) on map %s is leads no where.\n", exit_ob->
name, exit_ob->
x, exit_ob->
y, exit_ob->
map->
path);
684 int flags = 0, x = op->
x, y = op->
y;
696 LOG(
llevError,
"Fatal: Could not load emergency map!\n");
701 "You find yourself somewhere unexpected...");
706 if (x == -1 && y == -1) {
728 #define PORTAL_DESTINATION_NAME "Town portal destination"
736 assert(exit_ob != NULL);
742 object *item = op->
inv;
749 "You feel a force fizzling away. You feel a vibration from: %s",
buf);
794 if (!newmap && !strncmp(
EXIT_PATH(exit_ob),
"/random/", 8)) {
838 if (x == -1 && y == -1) {
871 exit_copy->
speed = 0;
873 exit_copy->
map = exit_ob->
map;
886 static int move_towards(
object *ob,
object *towards,
unsigned int mindist) {
902 int sx, sy, sx2, sy2;
904 return (ob->
x >= x+sx2) && (ob->
x <= x+sx) && (ob->
y >= y+sy2) && (ob->
y <= y+sy);
913 if (followed && followed->
ob && followed->
ob->
map) {
961 for (flag = 1; flag != 0; ) {
1003 pl->last_save_tick += 100;
1006 pl->last_save_tick =
pticks;
1077 return op->
env != NULL && strcmp(op->
env->
arch->
name,
"icecube") == 0;
1090 memset(&marker, 0,
sizeof(
object));
1120 LOG(
llevError,
"BUG: process_events(): Free object on list\n");
1143 LOG(
llevError,
"BUG: process_events(): Removed object on list\n");
1154 LOG(
llevError,
"BUG: process_events(): Object %s has no speed, but is on active list\n", op->
arch->
name);
1163 LOG(
llevError,
"BUG: process_events(): Object without map or inventory is on active list: %s (%d)\n", op->
name, op->
count);
1334 "%s has left. You are now the captain of %s",
1353 "%s left the game.",
1365 #if !defined(_IBMR2) && !defined(___IBMR2) && defined(PERM_FILE)
1370 int i, start, stop, forbit = 0;
1373 tm = (
struct tm *)localtime(&clock);
1376 if ((fp = fopen(
buf,
"r")) == NULL)
1379 while (fgets(
buf,
sizeof(
buf), fp)) {
1382 if (!strncmp(
buf,
"msg", 3)) {
1384 while (fgets(
buf,
sizeof(
buf), fp))
1387 }
else if (sscanf(
buf,
"%s %d%*c%d\n", day, &start, &stop) != 3) {
1388 LOG(
llevDebug,
"Warning: Incomplete line in permission file ignored.\n");
1392 for (i = 0; i < 7; i++) {
1394 && (tm->tm_wday == i)
1395 && (tm->tm_hour >= start)
1396 && (tm->tm_hour < stop))
1433 LOG(
llevInfo,
"Received SIGINT; shutting down...\n");
1450 LOG(
llevInfo,
"No active players in the last %ld seconds, shutting down...\n", diff);
1478 if (time_left <= 0) {
1496 "This server will shut down when all players leave.");
1506 "This server will shut down in %lu minutes.", time_left / 60);
1587 if (getuid() == 0 || geteuid() == 0) {
1589 "Running crossfire-server as root is a bad idea; aborting!\n"
1590 "Please run it again as a normal, unprivileged user.\n");
1595 #ifdef DEBUG_MALLOC_LEVEL
1596 malloc_debug(DEBUG_MALLOC_LEVEL);
1602 PROFILE_END(diff,
LOG(
llevInfo,
"Initialization complete (%ld ms). Waiting for connections.\n", diff/1000));
void write_book_archive(void)
Write out the updated book archive to bookarch file.
#define object_was_destroyed(op, old_tag)
Checks if an object still exists.
uint8_t casting_time
It takes awhile to cast a spell.
void fix_weight(void)
Check recursively the weight of all players, and fix what needs to be fixed.
static bool check_shutdown(void)
Check if we're ready to shut the server down.
int handle_newcs_player(object *op)
Handles commands the player can send us, and various checks on invisibility, golem and such.
int16_t bed_y
x,y - coordinates of respawn (savebed).
float weapon_speed_left
How much speed is left to spend this round.
player * next
Pointer to next player, NULL if this is last.
#define FREE_OBJ_NO_DESTROY_CALLBACK
Do not run the destroy callback.
void i18n_free(void)
Clears all i18n-related data.
player * first_player
First player.
void clean_tmp_files(void)
Save unique maps and clean up temporary map files unless recycling temporary maps.
struct Settings settings
Server settings.
#define INS_NO_WALK_ON
Don't call check_walk_on against the originator.
void tick_the_clock(void)
This performs the basic function of advancing the clock one tick forward.
void remove_friendly_object(object *op)
Removes the specified object from the linked list of friendly objects.
void pets_terminate_all(object *owner)
Removes all pets someone owns.
void enter_player_savebed(object *op)
This is a basic little function to put the player back to his savebed.
#define ST_GET_PASSWORD
Name entered, now for password.
void send_delayed_buffers(player *pl)
Send all delayed buffers for a player.
@ MONSTER
A real, living creature.
uint8_t recycle_tmp_maps
Re-use tmp maps.
uint16_t emergency_y
Coordinates to use on that map.
@ llevError
Error, serious thing.
char origin_map[RM_SIZE]
Path to the map this random map is generated from, to make an exit back.
#define FABS(x)
Decstations have trouble with fabs()...
#define MSG_TYPE_ADMIN_PLAYER
Player coming/going/death.
void LOG(LogLevel logLevel, const char *format,...)
Logs a message to stderr, or to file.
#define PTICKS_PER_CLOCK
Number of ticks per in-game hour.
void free_all_readable(void)
Free all readable-related information.
void object_free_all_data(void)
Destroys all allocated objects.
object * inv
Pointer to the first object in the inventory.
uint32_t golem_count
To track the golem.
static void enter_map(object *op, mapstruct *newmap, int x, int y)
Moves the player and pets from current map (if any) to new map.
mapstruct * ready_map_name(const char *name, int flags)
Makes sure the given map is loaded and swapped in.
#define QUERY_FLAG(xyz, p)
void flush_old_maps(void)
Reset maps that need to, remove their swap file.
#define ST_GET_NAME
Player just connected.
void set_map_timeout(mapstruct *oldmap)
Enable swapping for the given map.
uint8_t crypt_mode
0 for legacy behavior, 1 for always Traditional
static event_registration c
struct archetype * arch
Pointer to archetype.
StringBuffer * stringbuffer_new(void)
Create a new string buffer.
int16_t players
How many players are on this level right now.
float speed
Frequency of object 'moves' relative to server tick rate.
void object_set_enemy(object *op, object *enemy)
Sets the enemy of an object.
#define FLAG_UNIQUE
Item is really unique (UNIQUE_ITEMS)
void accounts_save(void)
Save all the account information.
object * ob
The object representing the player.
void do_server(void)
This checks the sockets for input and exceptions, does the right thing.
static void do_follow(player *pl)
Called from process_players1() to move a player who is following someone.
object * transport
Transport the player is in.
float speed_left
How much speed is left to spend this round.
struct mapstruct * map
Pointer to the map in which this object is present.
int set_random_map_variable(RMParms *rp, const char *buf)
static void enter_random_map(object *pl, object *exit_ob)
The player is trying to enter a randomly generated map.
non standard information is not specified or uptime this means how long since the executable has been started A particular host may have been running a server for quite a long time
void draw_ext_info_format(int flags, int pri, const object *pl, uint8_t type, uint8_t subtype, const char *format,...) PRINTF_ARGS(6
int move_player(object *op, int dir)
Move player in the given direction.
void free_all_newserver(void)
Free's all the memory that ericserver allocates.
int8_t direction
Means the object is moving that way.
tag_t count
Unique object number for this object.
static const flag_definition flags[]
Flag mapping.
int16_t last_grace
As last_sp, except for grace.
void object_copy(const object *src_ob, object *dest_ob)
Copy object first frees everything allocated by the second object, and then copies the contents of th...
#define MAP_PLAYER_UNIQUE
This map is player-specific.
char savebed_map[MAX_BUF]
Map where player will respawn after death.
#define PROFILE_BEGIN(expr)
void free_knowledge(void)
Free all knowledge data.
uint32_t hidden
If True, player (DM) is hidden from view.
mapstruct * generate_random_map(const char *OutFileName, RMParms *RP, char **use_layout, sstring reset_group)
Main random map routine.
void cleanupPlugins(void)
Call the crossfire_plugin::closefunc on the various plugins, used at server shutdown.
uint32_t is_template
If set, this is a template map.
@ range_golem
Control golem.
void enter_player_maplevel(object *op)
Move a player to its stored map level.
char path[HUGE_BUF]
Filename of the map.
#define MSG_TYPE_MISC
Messages that don't go elsewhere.
void party_obsolete_parties(void)
Remove unused parties (no players).
void free_all_maps(void)
Frees all allocated maps.
uint32_t pticks
Number of ticks since time reset.
object * active_objects
List of active objects that need to be processed.
void initPlugins(void)
Plugins initialization.
void hiscore_check(object *op, int quiet)
Checks if player should enter the hiscore, and if so writes her into the list.
#define HUGE_BUF
Used for messages - some can be quite long.
static int query_flag(const object *op, int flag)
#define MSG_TYPE_COMMAND
Responses to commands, eg, who.
static int move_towards(object *ob, object *towards, unsigned int mindist)
Move 'ob' in the direction of 'towards' (without any pathfinding) if the two objects are farther than...
Plugin animator file specs[Config] name
#define MSG_TYPE_ADMIN_DM
DM related admin actions.
void free_loader(void)
Frees all memory allocated by the loader.
#define PROFILE_END(var, expr)
int16_t y
Position in the map for this object.
static event_registration m
#define MAP_IN_MEMORY
Map is fully loaded.
char * stringbuffer_finish(StringBuffer *sb)
Deallocate the string buffer instance and return the string.
void apply_auto_fix(mapstruct *m)
Go through the entire map (only the first time when an original map is loaded) and performs special a...
void login_check_shutdown(object *const op)
Warn op if a server shutdown is scheduled.
void object_free_drop_inventory(object *ob)
Frees everything allocated by an object, removes it from the list of used objects,...
time_t time
When using SHUTDOWN_TIME, time of shutdown.
struct player * contr
Pointer to the player which control this object.
int forbid_play(void)
Checks if server should be started.
uint8_t temp_anim_speed
Ticks between temporary animation-frames.
#define MAP_MINTIMEOUT
At least that many ticks before swapout.
void write_todclock(void)
Write out the current time to the file so time does not reset every time the server reboots.
void final_free_player(player *pl)
Sends the 'goodbye' command to the player, and closes connection.
char killer[BIG_NAME]
Who killed this player.
int32_t last_heal
Last healed.
uint8_t subtype
Subtype of object.
#define EVENT_CLOCK
Global time event.
short freearr_y[SIZEOFFREE]
Y offset when searching around a spot.
uint8_t anim_speed
Ticks between animation-frames.
static char * clean_path(const char *file, char *newpath, int size)
Takes a path and replaces all / with _ We do a strcpy so that we do not change the original string.
void query_name(const object *op, char *buf, size_t size)
Describes an item.
float weapon_speed
The overall speed of this object.
sstring followed_player
Player the DM is following.
object * ranges[range_size]
Object for each range.
char * path_combine_and_normalize(const char *src, const char *dst, char *path, size_t size)
Combines the 2 paths.
void free_all_artifacts(void)
Free all artifact-related information.
void clean_friendly_list(void)
It traverses the friendly list removing objects that should not be here (ie, do not have friendly fla...
char final_map[RM_SIZE]
If not empty, the path of the final map this whole maze leads to.
void object_dump(const object *op, StringBuffer *sb)
Dumps an object.
void party_leave(object *op)
Makes a player leave his party.
sstring add_string(const char *str)
This will add 'str' to the hash table.
#define EVENT_MAPENTER
A player entered a map.
mapstruct * first_map
First map.
#define FOR_OB_AND_BELOW_FINISH()
Finishes FOR_OB_AND_BELOW_PREPARE().
void object_get_multi_size(const object *ob, int *sx, int *sy, int *hx, int *hy)
Computes the size of a multitile object.
void clean_tmp_map(mapstruct *m)
Removse the temporary file used by the map.
void free_quest(void)
Free all quest status structures.
int16_t casting_time
Time left before spell goes off.
void process_events(void)
Process all active objects.
#define FLAG_FREED
Object is in the list of free objects.
void server_main(int argc, char *argv[])
Server main function.
int out_of_map(mapstruct *m, int x, int y)
Return 1 if coordinates X and Y are out of the map M, taking into account tiling.
char * host
Which host it is connected from (ip address).
static void do_specials(void)
Collection of functions to call from time to time.
#define PORTAL_DESTINATION_NAME
int32_t last_eat
How long since we last ate.
long nroferrors
If it exceeds MAX_ERRORS, call fatal()
char * ob_describe(const object *op, const object *observer, int use_media_tags, char *buf, size_t size)
Returns the description of an object, as seen by the given observer.
void object_update_speed(object *op)
Updates the speed of an object.
uint8_t last_anim
Last sequence used to draw face.
static bool object_on_exit(object *ob, object *exit)
Return true if the player object is on the given exit.
uint8_t type
PLAYER, BULLET, etc.
void enter_exit(object *op, object *exit_ob)
Tries to move 'op' to exit_ob.
char const * newhash(char const *password)
#define FLAG_DAMNED
The object is very cursed.
int16_t dam
How much damage this object does when hitting.
object * active_prev
Previous object in the 'active list This is used in process_events so that the entire object list doe...
void object_free(object *ob, int flags)
Frees everything allocated by an object, removes it from the list of used objects,...
pluglist shows those as well as a short text describing each the list will simply appear empty The keyword for the Python plugin is Python plugout< keyword > Unloads a given identified by its _keyword_ So if you want to unload the Python you need to do plugout Python plugin< libname > Loads a given whose _filename_ is libname So in the case of you d have to do a plugin cfpython so Note that all filenames are relative to the default plugin it tries to load all available files in the SHARE plugins directory as plugin libraries It first displays the Initializing the plugin has the opportunity to signal itself by a message on the console Then the server displays an informative message containing both the plugin content and its keyword For the Python the standard load process thus GreenGoblin When a plugin has been it can request to be warned whenever a global event and are named freely by the developer If the directory doesn t nothing will happen< event name > can be init
uint32_t tag_t
Object tag, unique during the whole game.
sstring reset_group
For reset purpose, all maps in the same group reset at the same time.
const char * confdir
Configuration files.
FILE * logfile
Used by server/daemon.c.
#define FOR_OB_AND_BELOW_PREPARE(op_)
Constructs a loop iterating over an object and all objects below it in the same pile.
static void process_players1(void)
Do all player-related stuff before objects have been updated.
#define MSG_TYPE_SPELL
Spell related info.
void cftimer_process_timers(void)
Processes all timers.
static bool object_in_icecube(object *op)
int8_t facing
Object is oriented/facing that way.
char maplevel[MAX_BUF]
On which level is the player?
int ob_blocked(const object *ob, mapstruct *m, int16_t x, int16_t y)
Returns true if the given object can't fit in the given spot.
object * object_insert_in_map_at(object *op, mapstruct *m, object *originator, int flag, int x, int y)
Same as object_insert_in_map() except it handle separate coordinates and do a clean job preparing mul...
#define MAP_WIDTH(m)
Map width.
void create_template_pathname(const char *name, char *buf, size_t size)
same as create_pathname(), but for the template maps.
volatile sig_atomic_t shutdown_flag
#define MAX_BUF
Used for all kinds of things.
void free_all_recipes(void)
Frees all memory allocated to recipes and recipes lists.
size_t strlcpy(char *dst, const char *src, size_t size)
Portable implementation of strlcpy(3).
object * object_new(void)
Grabs an object from the list of unused objects, makes sure it is initialised, and returns it.
void free_all_god(void)
Frees all god information.
pluglist shows those as well as a short text describing each the list will simply appear empty The keyword for the Python plugin is Python plugout< keyword > Unloads a given identified by its _keyword_ So if you want to unload the Python you need to do plugout Python plugin< libname > Loads a given whose _filename_ is libname So in the case of you d have to do a plugin cfpython so Note that all filenames are relative to the default plugin path(SHARE/plugins). Console messages. ----------------- When Crossfire starts
#define PERM_FILE
You can restrict playing in certain times by creating a PERMIT_FILE in CONFDIR.
void free_string(sstring str)
This will reduce the refcount, and if it has reached 0, str will be freed.
#define SAVE_MODE_NORMAL
No special handling.
void metaserver2_exit()
Stop metaserver updates.
A buffer that will be expanded as content is added to it.
#define FREE_AND_CLEAR_STR(xyz)
Release the shared string, and set it to NULL.
void free_quest_definitions(void)
static void enter_unique_map(object *op, object *exit_ob)
Player is entering a unique map.
#define MSG_TYPE_COMMAND_FAILURE
Failed result from command.
bool can_follow(object *, player *)
int8_t sounds_this_tick
Number of sounds sent this tick.
void player_map_change_common(object *op, mapstruct *const oldmap, mapstruct *const newmap)
#define ST_PLAYING
Usual state.
int find_dir_2(int x, int y)
Computes a direction which you should travel to move of x and y.
void pets_attempt_follow(object *for_owner, int force)
Check pets so they try to follow their master around the world.
void replace(const char *src, const char *key, const char *replacement, char *result, size_t resultsize)
Replace in string src all occurrences of key by replacement.
#define FLAG_REMOVED
Object is not in any map or invenory.
object * object_find_by_type_and_slaying(const object *who, int type, const char *slaying)
Find object in inventory by type and slaying.
#define FLAG_WIZ
Object has special privilegies.
int swap_map(mapstruct *map)
Swaps a map to disk.
char * emergency_mapname
Map to return players to in emergency.
#define NDI_UNIQUE
Print immediately, don't buffer.
sstring name
The name of the object, obviously...
uint32_t has_hit
If set, weapon_sp instead of speed will count.
#define MSG_TYPE_SPELL_FAILURE
Spell failure messages.
void free_style_maps(void)
Frees cached style maps.
bool check_password(const char *typed, const char *crypted)
Hash a password and compare it to the stored version.
static const int shutdown_warn_times[]
How many minutes before a shutdown to warn players, in reverse order.
#define ST_CONFIRM_PASSWORD
New character, confirm password.
void metaserver_update(void)
Updates our info in the metaserver Note that this is used for both metaserver1 and metaserver2 - for ...
int get_map_flags(mapstruct *oldmap, mapstruct **newmap, int16_t x, int16_t y, int16_t *nx, int16_t *ny)
This rolls up wall, blocks_magic, blocks_view, etc, all into one function that just returns a P_.
static void save_and_kick_all_players(void)
object * env
Pointer to the object which is the environment.
char * create_pathname(const char *name, char *buf, size_t size)
Get the full path to a map file.
void write_cs_stats(void)
int32_t last_sp
As last_heal, but for spell points.
#define NDI_ALL
Inform all players of this message.
void animate_object(object *op, int dir)
Updates the face-variable of an object.
void update_players(void)
Send updates to players.
uint8_t state
Input state of the player (name, password, etc).
char * name
Name of map as given by its creator.
int object_find_free_spot(const object *ob, mapstruct *m, int x, int y, int start, int stop)
object_find_free_spot(object, map, x, y, start, stop) will search for a spot at the given map and coo...
uint32_t in_memory
Combination of IN_MEMORY_xxx flags.
#define EVENT_MAPLEAVE
A player left a map.
static void enter_random_template_map(object *pl, object *exit_ob)
The player is trying to enter a randomly generated template map.
sstring msg
If this is a book/sign/magic mouth/etc.
This is used by get_rangevector to determine where the other creature is.
int hit_player(object *op, int dam, object *hitter, uint32_t type, int full_hit)
Object is attacked by something.
void free_globals(void)
Cleans all memory allocated for global variables.
bool map_path_unique(const char *path)
Return true if the given map path leads to a unique map.
void free_server(void)
Frees all memory allocated around here:
method_ret ob_apply(object *op, object *applier, int aflags)
Apply an object by running an event hook or an object method.
int32_t timeout
Swapout is set to this.
#define MAP_HEIGHT(m)
Map height.
#define MAP_ENTER_Y(m)
Default Y coordinate for map enter.
#define NDI_DK_ORANGE
DarkOrange2.
player * find_player_partial_name(const char *plname)
Find a player by a partial name.
void map_newmap_cmd(socket_struct *ns)
Sound related function.
int get_rangevector(object *op1, const object *op2, rv_vector *retval, int flags)
From map.c This is used by get_player to determine where the other creature is.
uint32_t count
Any numbers typed before a command.
region * get_region_by_map(mapstruct *m)
Gets a region from a map.
int save_player(object *op, int flag)
Saves a player to disk.
#define MAP_ENTER_X(m)
Default X coordinate for map enter.
void process_object(object *op)
Main object move function.
object * active_next
Next object in the 'active' list This is used in process_events so that the entire object list does n...
void object_remove(object *op)
This function removes the object op from the linked list of objects which it is currently tied to.
struct shutdown_s shutdown_state
void cleanup(void)
Clean up everything and exit.
void leave(player *pl, int draw_exit)
Player logs out, or was disconnected.
#define FLAG_UNPAID
Object hasn't been paid for yet.
void do_some_living(object *op)
Regenerate hp/sp/gr, decreases food.
#define P_NO_CLERIC
No clerical spells cast here.
uint8_t state
How the object was last drawn (animation)
uint32_t unique
If set, this is a per player unique map.
int save_map(mapstruct *m, int flag)
Saves a map to file.
sstring name
More definite name, like "generate_kobold".
socket_struct * socket
Socket information for this player.
void fix_luck(void)
Fixes luck of players, slowly move it towards 0.
void check_active_maps(void)
Finds maps in memory to swap.
living stats
Str, Con, Dex, etc.
void commands_clear()
Clear all registered commands.
#define AP_UNAPPLY
Item is to be remvoed.
void close_modules()
Clean up all modules which are not disabled.
short freearr_x[SIZEOFFREE]
X offset when searching around a spot.
object * last_exit
Last exit used by player or NULL.
static const char * days[]
Ingame days.
static void do_shutdown(void)
mapstruct * mapfile_load(const char *map, int flags)
Opens the file "filename" and reads information about the map from the given file,...
uint32_t attacktype
Bitmask of attacks this object does.
int direction
General direction to the targer.
const Animations * temp_animation
A temporary animation.
unsigned int distance
Distance, in squares.
static void enter_fixed_template_map(object *pl, object *exit_ob)
The player is trying to enter a non-randomly generated template map.
void knowledge_process_incremental(void)
Incrementally send knowledge information to players, and remove information for players who left.
uint32_t ticks_played
How many ticks this player has played.
void events_execute_global_event(int eventcode,...)
Execute a global event.
bool link_source_map
Whether to set the reset group (if not already defined) of the source map for this random map.
@ llevDebug
Only for debugging purposes.
#define SP_WORD_OF_RECALL
static void process_players2(void)
Do all player-related stuff after objects have been updated.
#define AUTOSAVE
How often (in seconds) the player is saved if he drops things.
void player_update_bg_music(object *player)
static char * unclean_path(const char *src, char *newpath, int size)
Takes a path and replaces all _ with / This basically undoes clean_path().
static char const * crypt_string(char const *str, char const *salt)
Encrypt a string.