Crossfire Server, Trunk
region.cpp File Reference
#include "global.h"
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <map>
#include <string>
+ Include dependency graph for region.cpp:

Go to the source code of this file.

Functions

objectget_jail_exit (object *op)
 
const char * get_name_of_region_for_map (const mapstruct *m)
 
regionget_region_by_map (mapstruct *m)
 
regionget_region_by_name (const char *region_name)
 
regionget_region_from_string (const char *name)
 
const char * get_region_longname (const region *r)
 
const char * get_region_msg (const region *r)
 
regionget_region_struct (void)
 
void init_regions (BufferReader *reader, const char *filename)
 
int region_is_child_of_region (const region *child, const region *r)
 

Detailed Description

Region management.

A region is a group of maps. It includes a "parent" region.

Definition in file region.cpp.

Function Documentation

◆ get_jail_exit()

object* get_jail_exit ( object op)

Returns an object which is an exit through which the player represented by op should be sent in order to be imprisoned. If there is no suitable place to which an exit can be constructed, then NULL will be returned. The caller is responsible for freeing the object created by this function.

Parameters
opObject we want to jail. Must be a player.
Returns
exit to jail, or NULL, in which case a message is LOG()ged .

Definition at line 253 of file region.cpp.

References add_string(), EXIT_PATH, EXIT_X, EXIT_Y, FLAG_DAMNED, get_region_by_map(), region::jailmap, region::jailx, region::jaily, llevDebug, llevError, LOG(), region::name, object_new(), give::op, region::parent, PLAYER, and SET_FLAG.

Referenced by player_arrest().

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

◆ get_name_of_region_for_map()

const char* get_name_of_region_for_map ( const mapstruct m)

Gets the name of a region for a map.

Since we won't assume all maps have a region set properly, we need an explicit check that it is, this is much nicer here than scattered throughout the map code.

Parameters
mmap
Returns
  • region's name if map has a region
  • if no region is set for the map, returns the first region with the 'fallback' property
  • if no fallback region, LOG()s an info message and returns "unknown".

Definition at line 90 of file region.cpp.

References all_regions, llevInfo, LOG(), and m.

Referenced by current_region_info(), get_region_by_map(), get_who_escape_code_value(), and pick_bg_music().

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

◆ get_region_by_map()

region* get_region_by_map ( mapstruct m)

Gets a region from a map.

Parameters
mmap we want the region of.
Returns
region.
Todo:
This might need optimising at some point.

Definition at line 72 of file region.cpp.

References get_name_of_region_for_map(), get_region_by_name(), and m.

Referenced by add_region_link(), cfapi_map_get_map_property(), command_whereabouts(), current_map_info(), enter_random_map(), enter_random_template_map(), get_jail_exit(), get_who_escape_code_value(), list_players(), process_map(), and ring_bell().

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

◆ get_region_by_name()

region* get_region_by_name ( const char *  region_name)

Gets a region by name.

Used by the map parsing code.

Parameters
region_namename of region.
Returns
  • matching region
  • if no match, returns the first region with the 'fallback' property set and LOG()s to debug.
  • if it can't find a matching name and a fallback region it LOG()s an info message and returns NULL.

Definition at line 46 of file region.cpp.

References all_regions, llevDebug, llevInfo, and LOG().

Referenced by current_region_info(), get_region_by_map(), init_regions(), load_map_header(), CREMainWindow::mapAdded(), and START_TEST().

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

◆ get_region_from_string()

region* get_region_from_string ( const char *  name)

Tries to find a region that 'name' corresponds to. It looks, in order, for:

  • an exact match to region name (case insensitive)
  • an exact match to longname (case insensitive)
  • a substring that matches to the longname (eg Kingdom)
  • a substring that matches to the region name (eg nav)
  • if it can find none of these it returns the first parentless region (there should be only one of these - the top level one) An empty region name returns the top level region
Parameters
nameregion we're searching.
Returns
matching region.

Definition at line 117 of file region.cpp.

References all_regions, region::longname, give::name, region::name, region::parent, and strcasecmp().

Referenced by command_who(), and START_TEST().

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

◆ get_region_longname()

const char* get_region_longname ( const region r)

Gets the longname of a region.

The longname of a region is not a required field, any given region may want to not set it and use the parent's one instead.

Parameters
rregion we're searching the longname.
Returns
  • if a longname is set return it.
  • if there is a parent, call the function against that
  • if all fails, return a obviously wrong string if we can't get a longname, this should never happen. We also LOG() a debug message.

Definition at line 210 of file region.cpp.

References get_region_longname(), llevDebug, LOG(), and ring_occidental_mages::r.

Referenced by command_whereabouts(), current_map_info(), current_region_info(), get_region_longname(), get_who_escape_code_value(), and RegionWrapper::longName().

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

◆ get_region_msg()

const char* get_region_msg ( const region r)

Gets a message for a region.

Parameters
rregion. Can't be NULL.
Returns
  • region's message if set
  • message of parent else
  • obviously wrong message if no parent, and we LOG() a debug message.

Definition at line 231 of file region.cpp.

References get_region_msg(), llevDebug, LOG(), and ring_occidental_mages::r.

Referenced by current_region_info(), get_region_msg(), and RegionWrapper::message().

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

◆ get_region_struct()

region* get_region_struct ( void  )

Allocates and zeros a region struct, this isn't free()'d anywhere, so might be a memory leak, but it shouldn't matter too much since it isn't called that often....

Returns
initialised region structure.
Note
will never fail, as a memory allocation error calls fatal().
Todo:
free those pointers someday? :)

Definition at line 294 of file region.cpp.

References fatal(), and OUT_OF_MEMORY.

Referenced by init_regions(), and main().

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

◆ init_regions()

void init_regions ( BufferReader reader,
const char *  filename 
)

Reads/parses the region file, and copies into a linked list of region structs.

Parameters
readerbuffer to read from.
filenamefile being read.
Todo:
support multiple region files

Definition at line 311 of file region.cpp.

References all_regions, buf, bufferreader_next_line(), region::fallback, fatal(), npc_dialog::filename, get_region_by_name(), get_region_struct(), HUGE_BUF, region::jailmap, region::jailx, region::jaily, llevError, LOG(), region::longname, MAX_BUF, region::msg, msgbuf, region::name, python_init::path, SEE_LAST_ERROR, strdup_local, autojail::value, diamondslots::x, and diamondslots::y.

Referenced by assets_collect().

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

◆ region_is_child_of_region()

int region_is_child_of_region ( const region child,
const region r 
)

Checks if a region is a child of another.

Parameters
childregion we want to test.
rpotential parent.
Returns
  • 1 if child has r as parent somewhere.
  • -1 if passed a NULL region
  • 0 else

Definition at line 183 of file region.cpp.

References region::name, region::parent, ring_occidental_mages::r, and region_is_child_of_region().

Referenced by list_players(), region_is_child_of_region(), and START_TEST().

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