diff options
author | Stijn Buys <ingar@osirion.org> | 2011-07-11 19:33:27 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2011-07-11 19:33:27 +0000 |
commit | 83c9d657773fa4f829b533791697ed07e0d9d962 (patch) | |
tree | 0c53d6a6d71c14894ac51124933ae31b66164217 /src/core/gameserver.cc | |
parent | 99bd770a6030805ecd2cb22671e8f29d32fd59db (diff) |
Initial support for saving player data in multiplayer games,
have ships remember their docks and spawns.
Diffstat (limited to 'src/core/gameserver.cc')
-rw-r--r-- | src/core/gameserver.cc | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/core/gameserver.cc b/src/core/gameserver.cc index a1102bd..96dd51e 100644 --- a/src/core/gameserver.cc +++ b/src/core/gameserver.cc @@ -152,11 +152,17 @@ GameServer::GameServer() : GameInterface() server_previoustime = 0; server_maxplayerid = 1; + if (Cvar::sv_dedicated->value() || Cvar::sv_private->value()) { + server_mode = MultiPlayer; + } else { + server_mode = SinglePlayer; + } + // create the default infotype for entities Entity::set_infotype(new InfoType("entity")); Physics::init(); - + server_module = Loader::init(); if (!server_module) { @@ -173,9 +179,12 @@ GameServer::GameServer() : GameInterface() set_interactive(server_module->interactive()); + if (interactive()) { //FIXME interferes with command line because of cmd.exec load_config(); + } else { + server_mode = SinglePlayer; } // set the name of the game @@ -184,7 +193,7 @@ GameServer::GameServer() : GameInterface() con_print << " module '^B" << server_module->name() << "^N'\n"; - if (interactive() && (Cvar::sv_dedicated->value() || Cvar::sv_private->value())) { + if (mode() == MultiPlayer) { server_network = new NetServer(Cvar::net_host->str(), (unsigned int) Cvar::net_port->value()); if (!server_network->valid()) { delete server_network; @@ -194,13 +203,14 @@ GameServer::GameServer() : GameInterface() return; } } else { - con_print << " network server disabled.\n"; server_network = 0; } Func *func = 0; /* -- admin functions -- */ + // FIXME these have to become shared functions and check the player's admin level + func = Func::add("mute", func_mute); func->set_info("[player] mute a player"); @@ -527,6 +537,10 @@ void GameServer::player_connect(Player *player) void GameServer::player_disconnect(Player *player) { + // notify the game module + server_module->player_disconnect(player); + + // print a message std::string message("^B"); message.append(player->name()); message.append("^B disconnects."); @@ -535,9 +549,6 @@ void GameServer::player_disconnect(Player *player) // clear all player assets player->clear_assets(); - // notify the game module - server_module->player_disconnect(player); - // manage player list std::list<Player *>:: iterator it = game_players.begin(); while ((it != game_players.end()) && ((*it)->id() != player->id())) { |