X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fserver%2Fnet.cpp;h=16aa1cb004733865337976e72c51c78da6382e87;hb=78dcbeb7a905c4c153cb1b20e23f5adc1efc6d7e;hp=8b4448e46d6b363051d755f8fe6f05c2d2c871ca;hpb=933ca0fe6c660e482edd45742d981f2de59a32df;p=blank.git diff --git a/src/server/net.cpp b/src/server/net.cpp index 8b4448e..16aa1cb 100644 --- a/src/server/net.cpp +++ b/src/server/net.cpp @@ -3,6 +3,7 @@ #include "Server.hpp" #include "../app/init.hpp" +#include "../io/WorldSave.hpp" #include "../model/CompositeModel.hpp" #include "../world/ChunkIndex.hpp" #include "../world/Entity.hpp" @@ -394,6 +395,11 @@ void ClientConnection::AttachPlayer(Player &player) { DetachPlayer(); input.reset(new DirectInput(server.GetWorld(), player, server)); PlayerEntity().Ref(); + if (server.GetWorldSave().Exists(player)) { + server.GetWorldSave().Read(player); + } else { + // TODO: spawn + } old_base = PlayerChunks().Base(); Chunk::Pos begin = PlayerChunks().CoordsBegin(); @@ -415,6 +421,7 @@ void ClientConnection::AttachPlayer(Player &player) { void ClientConnection::DetachPlayer() { if (!HasPlayer()) return; cout << "player \"" << input->GetPlayer().Name() << "\" left" << endl; + server.GetWorldSave().Write(input->GetPlayer()); PlayerEntity().Kill(); PlayerEntity().UnRef(); input.reset(); @@ -560,11 +567,12 @@ bool ClientConnection::ChunkInRange(const glm::ivec3 &pos) const noexcept { } -Server::Server(const Config::Network &conf, World &world) +Server::Server(const Config::Network &conf, World &world, const WorldSave &save) : serv_sock(nullptr) , serv_pack{ -1, nullptr, 0 } , clients() , world(world) +, save(save) , player_model(nullptr) { serv_sock = SDLNet_UDP_Open(conf.port); if (!serv_sock) {