diff --git a/src/content_object.h b/src/content_object.h index f092b27..af86361 100644 --- a/src/content_object.h +++ b/src/content_object.h @@ -29,5 +29,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #define ACTIVEOBJECT_TYPE_LUAENTITY 7 +// Special type, not stored in active object lists +#define ACTIVEOBJECT_TYPE_PLAYER 100 + #endif diff --git a/src/player.cpp b/src/player.cpp index 7329118..396ce24 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -144,16 +144,12 @@ void Player::deSerialize(std::istream &is) args.parseConfigLine(line); } - //args.getS32("version"); + //args.getS32("version"); // Version field value not used std::string name = args.get("name"); updateName(name.c_str()); - /*std::string password = ""; - if(args.exists("password")) - password = args.get("password"); - updatePassword(password.c_str());*/ - m_pitch = args.getFloat("pitch"); - m_yaw = args.getFloat("yaw"); - m_position = args.getV3F("position"); + setPitch(args.getFloat("pitch")); + setYaw(args.getFloat("yaw")); + setPosition(args.getV3F("position")); try{ craftresult_is_preview = args.getBool("craftresult_is_preview"); }catch(SettingNotFoundException &e){ @@ -164,20 +160,6 @@ void Player::deSerialize(std::istream &is) }catch(SettingNotFoundException &e){ hp = 20; } - /*try{ - std::string sprivs = args.get("privs"); - if(sprivs == "all") - { - privs = PRIV_ALL; - } - else - { - std::istringstream ss(sprivs); - ss>>privs; - } - }catch(SettingNotFoundException &e){ - privs = PRIV_DEFAULT; - }*/ inventory.deSerialize(is); } diff --git a/src/player.h b/src/player.h index a352c1b..c3be078 100644 --- a/src/player.h +++ b/src/player.h @@ -179,12 +179,24 @@ public: Player on the server */ -class ServerRemotePlayer : public Player +#include "serverobject.h" +#include "content_object.h" // Object type IDs + +class ServerRemotePlayer : public Player, public ServerActiveObject { public: - ServerRemotePlayer() + ServerRemotePlayer(): + ServerActiveObject(NULL, v3f(0,0,0)) { } + ServerRemotePlayer(ServerEnvironment *env, v3f pos_, u16 peer_id_, + const char *name_): + ServerActiveObject(env, pos_) + { + setPosition(pos_); + peer_id = peer_id_; + updateName(name_); + } virtual ~ServerRemotePlayer() { } @@ -198,6 +210,17 @@ public: { } + virtual void setPosition(const v3f &position) + { + Player::setPosition(position); + ServerActiveObject::setBasePosition(position); + } + + /* + ServerActiveObject interface + */ + u8 getType() const + {return ACTIVEOBJECT_TYPE_PLAYER;} private: }; diff --git a/src/server.cpp b/src/server.cpp index fd9703b..330ce21 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -4279,11 +4279,7 @@ Player *Server::emergePlayer(const char *name, const char *password, u16 peer_id Create a new player */ { - player = new ServerRemotePlayer(); - //player->peer_id = c.peer_id; - //player->peer_id = PEER_ID_INEXISTENT; - player->peer_id = peer_id; - player->updateName(name); + // Add authentication stuff m_authmanager.add(name); m_authmanager.setPassword(name, password); m_authmanager.setPrivs(name, @@ -4294,11 +4290,11 @@ Player *Server::emergePlayer(const char *name, const char *password, u16 peer_id */ infostream<<"Server: Finding spawn place for player \"" - <getName()<<"\""<getServerMap()); - player->setPosition(pos); + player = new ServerRemotePlayer(m_env, pos, peer_id, name); /* Add player to environment diff --git a/src/serverobject.h b/src/serverobject.h index 6d616c7..66118cc 100644 --- a/src/serverobject.h +++ b/src/serverobject.h @@ -72,13 +72,14 @@ public: Some more dynamic interface */ virtual void setPos(v3f pos) - { setBasePosition(pos); } + { setBasePosition(pos); } // continuous: if true, object does not stop immediately at pos virtual void moveTo(v3f pos, bool continuous) - { setBasePosition(pos); } + { setBasePosition(pos); } // If object has moved less than this and data has not changed, // saving to disk may be omitted - virtual float getMinimumSavedMovement(){ return 2.0*BS; } + virtual float getMinimumSavedMovement() + { return 2.0*BS; } /* Step object in time.