X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fremoteplayer.cpp;h=925ad001b987de64d8e633972a4baf7757b6fc49;hb=a049e8267fabd101cb5c6528b3270214cb0647f0;hp=18bfa1030894fd2dd6e98a83b69f1281d6a23e7c;hpb=52ba1f867e5edb579a59a44fbb8286d4f1e54931;p=dragonfireclient.git diff --git a/src/remoteplayer.cpp b/src/remoteplayer.cpp index 18bfa1030..925ad001b 100644 --- a/src/remoteplayer.cpp +++ b/src/remoteplayer.cpp @@ -19,12 +19,14 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "remoteplayer.h" -#include "content_sao.h" +#include #include "filesys.h" #include "gamedef.h" #include "porting.h" // strlcpy +#include "server.h" #include "settings.h" - +#include "convert_json.h" +#include "server/player_sao.h" /* RemotePlayer @@ -35,15 +37,7 @@ float RemotePlayer::m_setting_chat_message_limit_per_10sec = 0.0f; u16 RemotePlayer::m_setting_chat_message_limit_trigger_kick = 0; RemotePlayer::RemotePlayer(const char *name, IItemDefManager *idef): - Player(name, idef), - protocol_version(0), - m_sao(NULL), - m_dirty(false), - m_last_chat_message_sent(time(NULL)), - m_chat_message_allowance(5.0f), - m_message_rate_overhead(0), - hud_hotbar_image(""), - hud_hotbar_selected_image("") + Player(name, idef) { if (!RemotePlayer::m_setting_cache_loaded) { RemotePlayer::m_setting_chat_message_limit_per_10sec = @@ -64,133 +58,31 @@ RemotePlayer::RemotePlayer(const char *name, IItemDefManager *idef): movement_liquid_fluidity_smooth = g_settings->getFloat("movement_liquid_fluidity_smooth") * BS; movement_liquid_sink = g_settings->getFloat("movement_liquid_sink") * BS; movement_gravity = g_settings->getFloat("movement_gravity") * BS; -} - -void RemotePlayer::save(std::string savedir, IGameDef *gamedef) -{ - /* - * We have to open all possible player files in the players directory - * and check their player names because some file systems are not - * case-sensitive and player names are case-sensitive. - */ - - // A player to deserialize files into to check their names - RemotePlayer testplayer("", gamedef->idef()); - - savedir += DIR_DELIM; - std::string path = savedir + m_name; - for (u32 i = 0; i < PLAYER_FILE_ALTERNATE_TRIES; i++) { - if (!fs::PathExists(path)) { - // Open file and serialize - std::ostringstream ss(std::ios_base::binary); - serialize(ss); - if (!fs::safeWriteToFile(path, ss.str())) { - infostream << "Failed to write " << path << std::endl; - } - setModified(false); - return; - } - // Open file and deserialize - std::ifstream is(path.c_str(), std::ios_base::binary); - if (!is.good()) { - infostream << "Failed to open " << path << std::endl; - return; - } - testplayer.deSerialize(is, path, NULL); - is.close(); - if (strcmp(testplayer.getName(), m_name) == 0) { - // Open file and serialize - std::ostringstream ss(std::ios_base::binary); - serialize(ss); - if (!fs::safeWriteToFile(path, ss.str())) { - infostream << "Failed to write " << path << std::endl; - } - setModified(false); - return; - } - path = savedir + m_name + itos(i); - } - - infostream << "Didn't find free file for player " << m_name << std::endl; - return; -} - -void RemotePlayer::deSerialize(std::istream &is, const std::string &playername, - PlayerSAO *sao) -{ - Settings args; - - if (!args.parseConfigLines(is, "PlayerArgsEnd")) { - throw SerializationError("PlayerArgsEnd of player " + playername + " not found!"); - } - - m_dirty = true; - //args.getS32("version"); // Version field value not used - std::string name = args.get("name"); - strlcpy(m_name, name.c_str(), PLAYERNAME_SIZE); - if (sao) { - try { - sao->setHPRaw(args.getS32("hp")); - } catch(SettingNotFoundException &e) { - sao->setHPRaw(PLAYER_MAX_HP); - } - - try { - sao->setBasePosition(args.getV3F("position")); - } catch (SettingNotFoundException &e) {} + // copy defaults + m_cloud_params.density = 0.4f; + m_cloud_params.color_bright = video::SColor(229, 240, 240, 255); + m_cloud_params.color_ambient = video::SColor(255, 0, 0, 0); + m_cloud_params.height = 120.0f; + m_cloud_params.thickness = 16.0f; + m_cloud_params.speed = v2f(0.0f, -2.0f); - try { - sao->setPitch(args.getFloat("pitch")); - } catch (SettingNotFoundException &e) {} - try { - sao->setYaw(args.getFloat("yaw")); - } catch (SettingNotFoundException &e) {} - - try { - sao->setBreath(args.getS32("breath"), false); - } catch (SettingNotFoundException &e) {} - } + // Skybox defaults: - inventory.deSerialize(is); + SkyboxDefaults sky_defaults; - if (inventory.getList("craftpreview") == NULL) { - // Convert players without craftpreview - inventory.addList("craftpreview", 1); + m_skybox_params.sky_color = sky_defaults.getSkyColorDefaults(); + m_skybox_params.type = "regular"; + m_skybox_params.clouds = true; + m_skybox_params.fog_sun_tint = video::SColor(255, 244, 125, 29); + m_skybox_params.fog_moon_tint = video::SColorf(0.5, 0.6, 0.8, 1).toSColor(); + m_skybox_params.fog_tint_type = "default"; - bool craftresult_is_preview = true; - if(args.exists("craftresult_is_preview")) - craftresult_is_preview = args.getBool("craftresult_is_preview"); - if(craftresult_is_preview) - { - // Clear craftresult - inventory.getList("craftresult")->changeItem(0, ItemStack()); - } - } + m_sun_params = sky_defaults.getSunDefaults(); + m_moon_params = sky_defaults.getMoonDefaults(); + m_star_params = sky_defaults.getStarDefaults(); } -void RemotePlayer::serialize(std::ostream &os) -{ - // Utilize a Settings object for storing values - Settings args; - args.setS32("version", 1); - args.set("name", m_name); - //args.set("password", m_password); - - // This should not happen - assert(m_sao); - args.setS32("hp", m_sao->getHP()); - args.setV3F("position", m_sao->getBasePosition()); - args.setFloat("pitch", m_sao->getPitch()); - args.setFloat("yaw", m_sao->getYaw()); - args.setS32("breath", m_sao->getBreath()); - - args.writeLines(os); - - os<<"PlayerArgsEnd\n"; - - inventory.serialize(os); -} const RemotePlayerChatResult RemotePlayer::canSendChatMessage() { @@ -230,3 +122,10 @@ const RemotePlayerChatResult RemotePlayer::canSendChatMessage() m_chat_message_allowance -= 1.0f; return RPLAYER_CHATRESULT_OK; } + +void RemotePlayer::onSuccessfulSave() +{ + setModified(false); + if (m_sao) + m_sao->getMeta().setModified(false); +}