Freeciv-3.1
|
#include "fc_prehdrs.h"
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "lua.h"
#include "astring.h"
#include "bitvector.h"
#include "bugs.h"
#include "capability.h"
#include "fc_cmdline.h"
#include "fciconv.h"
#include "fcintl.h"
#include "log.h"
#include "mem.h"
#include "netintf.h"
#include "rand.h"
#include "randseed.h"
#include "registry.h"
#include "support.h"
#include "timing.h"
#include "citymap.h"
#include "achievements.h"
#include "calendar.h"
#include "capstr.h"
#include "city.h"
#include "culture.h"
#include "dataio.h"
#include "effects.h"
#include "events.h"
#include "fc_interface.h"
#include "government.h"
#include "map.h"
#include "mapimg.h"
#include "nation.h"
#include "packets.h"
#include "player.h"
#include "research.h"
#include "tech.h"
#include "unitlist.h"
#include "version.h"
#include "victory.h"
#include "aiiface.h"
#include "animals.h"
#include "auth.h"
#include "barbarian.h"
#include "cityhand.h"
#include "citytools.h"
#include "cityturn.h"
#include "connecthand.h"
#include "console.h"
#include "fcdb.h"
#include "diplhand.h"
#include "edithand.h"
#include "gamehand.h"
#include "handchat.h"
#include "maphand.h"
#include "meta.h"
#include "notify.h"
#include "plrhand.h"
#include "report.h"
#include "ruleset.h"
#include "sanitycheck.h"
#include "score.h"
#include "sernet.h"
#include "settings.h"
#include "spacerace.h"
#include "srv_log.h"
#include "stdinhand.h"
#include "techtools.h"
#include "unithand.h"
#include "unittools.h"
#include "voting.h"
#include "advdata.h"
#include "autosettlers.h"
#include "advbuilding.h"
#include "advspace.h"
#include "infracache.h"
#include "savemain.h"
#include "script_server.h"
#include "luascript_types.h"
#include "mapgen.h"
#include "mapgen_utils.h"
#include "aitraits.h"
#include "difficulty.h"
#include "srv_main.h"
#include "spechash.h"
Go to the source code of this file.
Macros | |
#define | SPECHASH_TAG startpos |
#define | SPECHASH_IKEY_TYPE struct startpos * |
#define | SPECHASH_INT_DATA_TYPE |
#define | startpos_hash_iterate(hash, psp, c) TYPED_HASH_ITERATE(struct startpos *, intptr_t, hash, psp, c) |
#define | startpos_hash_iterate_end HASH_ITERATE_END |
Functions | |
static void | end_turn (void) |
static void | announce_player (struct player *pplayer) |
static void | fc_interface_init_server (void) |
static enum known_type | mapimg_server_tile_known (const struct tile *ptile, const struct player *pplayer, bool knowledge) |
static struct terrain * | mapimg_server_tile_terrain (const struct tile *ptile, const struct player *pplayer, bool knowledge) |
static struct player * | mapimg_server_tile_owner (const struct tile *ptile, const struct player *pplayer, bool knowledge) |
static struct player * | mapimg_server_tile_city (const struct tile *ptile, const struct player *pplayer, bool knowledge) |
static struct player * | mapimg_server_tile_unit (const struct tile *ptile, const struct player *pplayer, bool knowledge) |
static int | mapimg_server_plrcolor_count (void) |
static struct rgbcolor * | mapimg_server_plrcolor_get (int i) |
static void | handle_observer_ready (struct connection *pconn) |
void | init_game_seed (void) |
void | srv_init (void) |
void | handle_client_info (struct connection *pc, enum gui_type gui, int emerg_version, const char *distribution) |
enum server_states | server_state (void) |
void | set_server_state (enum server_states newstate) |
bool | game_was_started (void) |
bool | check_for_game_over (void) |
void | send_all_info (struct conn_list *dest) |
static void | do_reveal_effects (void) |
static void | do_have_contacts_effect (void) |
static void | do_border_vision_effect (void) |
static void | update_environmental_upset (enum environment_upset_type type, int *current, int *accum, int *level, int percent, void(*upset_action_fn)(int)) |
static void | notify_illegal_armistice_units (struct player *phost, struct player *pguest, int turns_left) |
static void | remove_illegal_armistice_units (struct player *plr1, struct player *plr2) |
static void | update_diplomatics (void) |
static void | kill_dying_players (void) |
static void | ai_start_phase (void) |
static void | begin_turn (bool is_new_turn) |
static void | begin_phase (bool is_new_phase) |
static void | end_phase (void) |
void | save_game_auto (const char *save_reason, enum autosave_type type) |
void | start_game (void) |
void | server_quit (void) |
void | handle_report_req (struct connection *pconn, enum report_type type) |
void | identity_number_release (int id) |
void | identity_number_reserve (int id) |
static bool | identity_number_is_used (int id) |
static int | increment_identity_number (void) |
int | identity_number (void) |
static bool | is_client_edit_packet (int type) |
bool | server_packet_input (struct connection *pconn, void *packet, int type) |
void | check_for_full_turn_done (void) |
void | update_nations_with_startpos (void) |
void | handle_nation_select_req (struct connection *pc, int player_no, Nation_type_id nation_no, bool is_male, const char *name, int style) |
void | handle_player_ready (struct player *requestor, int player_no, bool is_ready) |
const char * | aifill (int amount) |
static void | player_set_nation_full (struct player *pplayer, struct nation_type *pnation) |
void | player_nation_defaults (struct player *pplayer, struct nation_type *pnation, bool set_name) |
static void | generate_players (void) |
const char * | pick_random_player_name (const struct nation_type *pnation) |
static void | srv_running (void) |
static void | srv_prepare (void) |
static void | srv_scores (void) |
static void | final_ruleset_adjustments (void) |
static void | srv_ready (void) |
void | server_game_init (bool keep_ruleset_value) |
void | server_game_free (void) |
void | srv_main (void) |
static void | server_gui_color_free (struct color *pcolor) |
static int | server_plr_tile_city_id_get (const struct tile *ptile, const struct player *pplayer) |
server_setting_id | server_ss_by_name (const char *name) |
const char * | server_ss_name_get (server_setting_id id) |
enum sset_type | server_ss_type_get (server_setting_id id) |
bool | server_ss_val_bool_get (server_setting_id id) |
int | server_ss_val_int_get (server_setting_id id) |
unsigned int | server_ss_val_bitwise_get (server_setting_id id) |
Variables | |
struct server_arguments | srvarg |
struct civserver | server |
static enum server_states | civserver_state = S_S_INITIAL |
bool | force_end_of_sniff |
bv_id | identity_numbers_used |
static bool | has_been_srv_init = FALSE |
static struct timer * | eot_timer = NULL |
static struct timer * | between_turns = NULL |
#define SPECHASH_IKEY_TYPE struct startpos * |
Definition at line 2490 of file srv_main.c.
#define SPECHASH_INT_DATA_TYPE |
Definition at line 2491 of file srv_main.c.
#define SPECHASH_TAG startpos |
Tool for generate_players().
Definition at line 2489 of file srv_main.c.
#define startpos_hash_iterate | ( | hash, | |
psp, | |||
c | |||
) | TYPED_HASH_ITERATE(struct startpos *, intptr_t, hash, psp, c) |
Definition at line 2493 of file srv_main.c.
#define startpos_hash_iterate_end HASH_ITERATE_END |
Definition at line 2495 of file srv_main.c.
|
static |
Called at the start of each (new) phase to do AI activities.
Definition at line 1074 of file srv_main.c.
Referenced by begin_phase().
const char * aifill | ( | int | amount | ) |
Fill or remove players to meet the given aifill. If return is non-NULL, points to a translated string explaining why the total number of players is less than 'amount'.
Definition at line 2395 of file srv_main.c.
Referenced by ai_fill_changed_by_server(), aifill_action(), connection_attach_real(), connection_detach(), create_command_newcomer(), create_command_pregame(), load_command(), load_rulesetdir(), nationset_action(), receive_packet_game_info_100(), remove_player_command(), pregame_options::set_aifill(), sg_load_savefile(), sg_load_scenario(), and srv_main().
|
static |
Announce what nation player rules to everyone.
Definition at line 2761 of file srv_main.c.
Referenced by generate_players().
|
static |
Begin a phase of movement. This handles all beginning-of-phase actions for one or more players.
Definition at line 1196 of file srv_main.c.
Referenced by srv_running().
|
static |
Handle the beginning of each turn. Note: This does not give "time" to any player; it is solely for updating turn-dependent data.
Definition at line 1089 of file srv_main.c.
Referenced by srv_running().
void check_for_full_turn_done | ( | void | ) |
Check if turn is really done. Returns nothing, but as a side effect sets force_end_of_sniff if no more input is expected this turn (i.e. turn done)
Definition at line 2145 of file srv_main.c.
Referenced by detach_command(), handle_player_phase_done(), lost_connection_to_client(), player_set_to_ai_mode(), and srv_running().
bool check_for_game_over | ( | void | ) |
Returns TRUE if any one game end condition is fulfilled, FALSE otherwise.
This function will notify players but will not set the server_state(). The caller must set the server state to S_S_OVER if the function returns TRUE.
Also send notifications about impending, predictable game end conditions.
Definition at line 353 of file srv_main.c.
Referenced by srv_running().
|
static |
Handle the vision granting effect EFT_BORDER_VISION
Definition at line 750 of file srv_main.c.
Referenced by end_phase().
|
static |
Give contact to players with the EFT_HAVE_CONTACTS effect (traditionally from Marco Polo's Embassy).
Definition at line 733 of file srv_main.c.
Referenced by end_phase().
|
static |
Give map information to players with EFT_REVEAL_CITIES or EFT_REVEAL_MAP effects (traditionally from the Apollo Program).
Definition at line 710 of file srv_main.c.
Referenced by end_phase().
|
static |
End a phase of movement. This handles all end-of-phase actions for one or more players.
Definition at line 1357 of file srv_main.c.
Referenced by srv_running().
|
static |
Handle the end of each turn.
Definition at line 1513 of file srv_main.c.
Referenced by srv_running().
|
static |
Initialize server specific functions.
Definition at line 3628 of file srv_main.c.
Referenced by srv_init().
|
static |
Apply some final adjustments from the ruleset on to the game state. We cannot do this during ruleset loading, since some players may be added later than that.
Definition at line 3092 of file srv_main.c.
Referenced by srv_ready().
bool game_was_started | ( | void | ) |
Returns iff the game was started once upon a time.
Definition at line 339 of file srv_main.c.
Referenced by aifill(), api_edit_create_player(), api_server_was_started(), connection_attach_real(), connection_detach(), create_barbarian_player(), create_command(), delegate_command(), establish_new_connection(), handle_edit_player_create(), is_allowed_to_take(), mapimg_command(), observe_command(), player_color_changeable(), playercolor_command(), playernation_command(), plrcol_action(), remove_player_command(), server_player_set_color(), set_rulesetdir(), sg_load_players(), sg_load_players(), sg_load_players_basic(), sg_load_players_basic(), sg_save_game(), sg_save_player_main(), sg_save_players(), split_player(), srv_main(), take_command(), team_command(), and update_nations_with_startpos().
|
static |
Assign random nations to players at game start. This includes human players, AI players created with "set aifill <X>", and players created with "create <PlayerName>".
If a player's name matches one of the leader names for some nation, and that nation is available, choose that nation, and set the leader sex appropriately. For example, when the Britons have not been chosen by anyone else, a player called Boudica whose nation has not been specified (for instance if they were created with "create Boudica") will become the Britons, and their sex will be female. Otherwise, the sex is chosen randomly, and the nation is chosen as below.
If this is a scenario and the scenario has specific start positions for some nations, try to pick those nations, favouring those with start positions which already-assigned players can't use. (Note that it's possible that we can't find enough nations with available start positions, depending on what nations players have already picked; in this case, it's OK to pick nations without start positions, as init_new_game() will fall back to mismatched start positions.)
Otherwise, pick available nations using pick_a_nation(), which tries to pick nations that look good with nations already in the game.
For 'aifill' players, the player name/sex is then reset to that of a random leader for the chosen nation.
Definition at line 2561 of file srv_main.c.
Referenced by srv_ready().
void handle_client_info | ( | struct connection * | pc, |
enum gui_type | gui, | ||
int | emerg_version, | ||
const char * | distribution | ||
) |
Handle client info packet
Definition at line 307 of file srv_main.c.
Referenced by server_handle_packet().
void handle_nation_select_req | ( | struct connection * | pc, |
int | player_no, | ||
Nation_type_id | nation_no, | ||
bool | is_male, | ||
const char * | name, | ||
int | style | ||
) |
Handles a pick-nation packet from the client. These packets are handled by connection because ctrl users may edit anyone's nation in pregame, and editing is possible during a running game.
Definition at line 2259 of file srv_main.c.
Referenced by server_handle_packet().
|
static |
Handle a player-ready packet from global observer.
Definition at line 2325 of file srv_main.c.
Referenced by server_packet_input().
Handle a player-ready packet.
Definition at line 2341 of file srv_main.c.
Referenced by server_handle_packet(), and start_command().
void handle_report_req | ( | struct connection * | pconn, |
enum report_type | type | ||
) |
Handle request asking report to be sent to client.
Definition at line 1882 of file srv_main.c.
Referenced by server_handle_packet().
int identity_number | ( | void | ) |
Identity ids wrap at IDENTITY_NUMBER_SIZE, skipping IDENTITY_NUMBER_ZERO Setup in server_game_init()
Definition at line 1952 of file srv_main.c.
Referenced by create_city(), and place_unit().
|
static |
Check whether identity number is currently allocated.
Definition at line 1934 of file srv_main.c.
Referenced by identity_number().
void identity_number_release | ( | int | id | ) |
void identity_number_reserve | ( | int | id | ) |
Mark identity number allocated.
Definition at line 1926 of file srv_main.c.
Referenced by identity_number(), server_game_init(), sg_load_player_cities(), sg_load_player_cities(), sg_load_player_units(), sg_load_player_units(), sg_load_player_vision(), and sg_load_player_vision().
|
static |
Increment identity_number and return result.
Definition at line 1942 of file srv_main.c.
Referenced by identity_number().
void init_game_seed | ( | void | ) |
Initialize the game seed. This may safely be called multiple times.
Definition at line 200 of file srv_main.c.
Referenced by sg_load_random(), sg_load_random(), and srv_ready().
|
static |
Returns TRUE if the packet type is an edit packet sent by the client.
NB: The first and last client edit packets here must match those defined in common/networking/packets.def.
Definition at line 1974 of file srv_main.c.
Referenced by server_packet_input().
|
static |
Check all players to see whether they are dying.
WARNING: do not call this while doing any handling of players, units, etc. If a player dies, all their units will be wiped and other data will be overwritten.
Definition at line 1048 of file srv_main.c.
Referenced by ai_start_phase(), end_phase(), and server_packet_input().
|
static |
Helper function for the mapimg module - number of player colors.
Definition at line 3745 of file srv_main.c.
Referenced by srv_prepare().
|
static |
Helper function for the mapimg module - one player color.
Definition at line 3753 of file srv_main.c.
Referenced by srv_prepare().
|
static |
Helper function for the mapimg module - city owner.
Definition at line 3698 of file srv_main.c.
Referenced by srv_prepare().
|
static |
Helper function for the mapimg module - tile knowledge.
Definition at line 3653 of file srv_main.c.
Referenced by srv_prepare().
|
static |
Helper function for the mapimg module - tile owner.
Definition at line 3682 of file srv_main.c.
Referenced by srv_prepare().
|
static |
Helper function for the mapimg module - tile terrain.
Definition at line 3668 of file srv_main.c.
Referenced by srv_prepare().
|
static |
Helper function for the mapimg module - unit owner.
Definition at line 3724 of file srv_main.c.
Referenced by srv_prepare().
|
static |
Notify about units at risk of disband due to armistice.
Definition at line 815 of file srv_main.c.
Referenced by update_diplomatics().
const char * pick_random_player_name | ( | const struct nation_type * | pnation | ) |
Returns a random ruler name picked from given nation's ruler names that is not already in use. May return NULL if no unique name is available.
Definition at line 2733 of file srv_main.c.
Referenced by create_barbarian_player(), and player_nation_defaults().
void player_nation_defaults | ( | struct player * | pplayer, |
struct nation_type * | pnation, | ||
bool | set_name | ||
) |
Set nation for player with nation default values.
Definition at line 2510 of file srv_main.c.
Referenced by create_animals(), create_barbarian_player(), create_command_newcomer(), handle_edit_player_create(), player_set_nation_full(), and split_player().
|
static |
Tool for generate_players().
Definition at line 2500 of file srv_main.c.
Referenced by generate_players().
Remove illegal units when armistice turns into peace treaty.
Definition at line 854 of file srv_main.c.
Referenced by update_diplomatics().
void save_game_auto | ( | const char * | save_reason, |
enum autosave_type | type | ||
) |
Save game with autosave filename
Definition at line 1732 of file srv_main.c.
Referenced by server_sniff_all_input(), srv_running(), and srv_scores().
void send_all_info | ( | struct conn_list * | dest | ) |
Send all information for when game starts or client reconnects. Initial packets should have been sent before calling this function. See comment in connecthand.c::establish_new_connection().
Definition at line 682 of file srv_main.c.
Referenced by connection_attach_real(), and srv_ready().
void server_game_free | ( | void | ) |
Free game data that we reinitialize as part of a server soft restart. Bear in mind that this function is called when the 'load' command is used, for instance.
Definition at line 3406 of file srv_main.c.
Referenced by load_command(), savegame2_load(), savegame3_load(), server_quit(), and srv_main().
void server_game_init | ( | bool | keep_ruleset_value | ) |
Initialize game data for the server (corresponds to server_game_free).
Definition at line 3382 of file srv_main.c.
Referenced by load_command(), savegame2_load(), savegame3_load(), srv_main(), and srv_prepare().
|
inlinestatic |
Definition at line 3515 of file srv_main.c.
Referenced by fc_interface_init_server().
bool server_packet_input | ( | struct connection * | pconn, |
void * | packet, | ||
int | type | ||
) |
Returns FALSE if connection should be closed (because the clients was rejected). Returns TRUE else.
Definition at line 1983 of file srv_main.c.
Referenced by incoming_client_packets().
|
static |
Returns the id of the city the player map of 'pplayer' has at 'ptile' or IDENTITY_NUMBER_ZERO if the player map don't have a city there.
Definition at line 3526 of file srv_main.c.
Referenced by fc_interface_init_server().
void server_quit | ( | void | ) |
Quit the server and exit.
Definition at line 1810 of file srv_main.c.
Referenced by quit_game(), server_sniff_all_input(), and srv_main().
server_setting_id server_ss_by_name | ( | const char * | name | ) |
Returns the id of the server setting with the specified name.
Definition at line 3538 of file srv_main.c.
Referenced by fc_interface_init_server(), and fc_interface_init_tool().
const char * server_ss_name_get | ( | server_setting_id | id | ) |
Returns the name of the server setting with the specified id.
Definition at line 3553 of file srv_main.c.
Referenced by fc_interface_init_server(), and fc_interface_init_tool().
enum sset_type server_ss_type_get | ( | server_setting_id | id | ) |
Returns the type of the server setting with the specified id.
Definition at line 3568 of file srv_main.c.
Referenced by fc_interface_init_server(), and fc_interface_init_tool().
unsigned int server_ss_val_bitwise_get | ( | server_setting_id | id | ) |
Returns the value of the bitwise server setting with the specified id.
Definition at line 3613 of file srv_main.c.
Referenced by fc_interface_init_server(), and fc_interface_init_tool().
bool server_ss_val_bool_get | ( | server_setting_id | id | ) |
Returns the value of the boolean server setting with the specified id.
Definition at line 3583 of file srv_main.c.
Referenced by fc_interface_init_server(), and fc_interface_init_tool().
int server_ss_val_int_get | ( | server_setting_id | id | ) |
Returns the value of the integer server setting with the specified id.
Definition at line 3598 of file srv_main.c.
Referenced by fc_interface_init_server(), and fc_interface_init_tool().
enum server_states server_state | ( | void | ) |
Return current server state.
Definition at line 323 of file srv_main.c.
Referenced by api_edit_tile_set_label(), autosaves_callback(), check_for_full_turn_done(), connection_attach_real(), dai_assess_danger_player(), end_command(), establish_new_connection(), event_cache_add_for_all(), event_cache_add_for_global_observers(), event_cache_add_for_player(), event_cache_add_for_players(), event_cache_match(), first_timeout_action(), game_was_started(), give_shared_vision(), handle_player_rates(), handle_player_ready(), handle_report_req(), load_command(), map_claim_border_ownership(), maxplayers_callback(), notify_conn_packet(), player_info_level(), player_set_to_ai_mode(), remove_shared_vision(), reset_all_start_commands(), reset_command(), send_city_info(), send_lanserver_response(), server_packet_input(), server_quit(), server_sniff_all_input(), setting_is_free_to_change(), sg_save_game(), show_players(), srv_main(), srv_running(), start_command(), start_game(), surrender_command(), timeout_action(), and update_tile_knowledge().
void set_server_state | ( | enum server_states | newstate | ) |
Set current server state.
Definition at line 331 of file srv_main.c.
Referenced by end_command(), server_quit(), server_sniff_all_input(), srv_main(), srv_ready(), and srv_running().
void srv_init | ( | void | ) |
Initialize freeciv server.
Definition at line 224 of file srv_main.c.
Referenced by main(), and srv_prepare().
void srv_main | ( | void | ) |
|
static |
|
static |
|
static |
Play the game! Returns when S_S_RUNNING != server_state().
Definition at line 2779 of file srv_main.c.
Referenced by srv_main().
|
static |
void start_game | ( | void | ) |
Start actual game. Everything has been set up already.
Definition at line 1773 of file srv_main.c.
Referenced by start_command().
|
static |
Check for cease-fires and armistices running out; update cancelling reasons and contact information.
Definition at line 886 of file srv_main.c.
Referenced by end_turn().
|
static |
Handle environmental upsets, meaning currently pollution or fallout.
Definition at line 777 of file srv_main.c.
Referenced by end_turn().
void update_nations_with_startpos | ( | void | ) |
Update information about which nations have start positions on the map.
Call this on server start, or when loading a scenario.
Definition at line 2200 of file srv_main.c.
Referenced by load_rulesetdir(), sg_load_map_startpos(), and sg_load_map_startpos().
|
static |
Definition at line 195 of file srv_main.c.
Referenced by server_quit(), and srv_running().
|
static |
Definition at line 179 of file srv_main.c.
Referenced by server_state(), and set_server_state().
|
static |
Definition at line 193 of file srv_main.c.
Referenced by server_quit(), srv_prepare(), and srv_running().
bool force_end_of_sniff |
Definition at line 185 of file srv_main.c.
Referenced by check_for_full_turn_done(), end_command(), server_sniff_all_input(), srv_running(), and start_game().
Definition at line 190 of file srv_main.c.
Referenced by srv_init(), and srv_prepare().
bv_id identity_numbers_used |
Definition at line 187 of file srv_main.c.
Referenced by identity_number_is_used(), identity_number_release(), identity_number_reserve(), and server_game_init().
Definition at line 176 of file srv_main.c.
struct server_arguments srvarg |
Definition at line 173 of file srv_main.c.
Referenced by auth_user(), close_connections_and_socket(), delegate_command(), establish_new_connection(), fcdb_command(), get_challenge_filename(), get_lanserver_announcement(), handle_login_request(), is_allowed_to_take(), load_command(), main(), main(), mapimg_command(), meta_addr_port(), metaserver_command(), rank_users(), reset_command(), save_game(), send_lanserver_response(), server_open_socket(), server_quit(), server_sniff_all_input(), sg_load_game(), sg_load_game(), sg_save_game(), show_serverid(), srv_init(), srv_main(), srv_prepare(), srv_running(), srv_scores(), and write_init_script().