Save and remove player by pointer
authorLoic Blot <loic.blot@unix-experience.fr>
Wed, 23 Sep 2015 16:53:54 +0000 (18:53 +0200)
committerest31 <MTest31@outlook.com>
Wed, 23 Sep 2015 17:37:05 +0000 (19:37 +0200)
Why doing things simple ? Use pointer instead of strings to save players and remove them.
Saving players by name does a lookup to find pointer we already have ! Idem with removePlayer
Also remove unused removePlayer(peer_id), it's never called

src/content_sao.cpp
src/environment.cpp
src/environment.h

index add1726fce770700d85fd1b667ac7066303af220..fe46f3acb79dc2840ec4c3824cf8b0abf8f18de7 100644 (file)
@@ -821,8 +821,8 @@ void PlayerSAO::removingFromEnvironment()
        {
                m_player->setPlayerSAO(NULL);
                m_player->peer_id = 0;
-               m_env->savePlayer(m_player->getName());
-               m_env->removePlayer(m_player->getName());
+               m_env->savePlayer((RemotePlayer*)m_player);
+               m_env->removePlayer(m_player);
        }
 }
 
index 79540bccfd9029a412098126b4d0c499a3fc3bab..a29b0aab12f6093c7e2fcf8e831cd9cce2a772dc 100644 (file)
@@ -85,28 +85,11 @@ void Environment::addPlayer(Player *player)
        m_players.push_back(player);
 }
 
-void Environment::removePlayer(u16 peer_id)
-{
-       DSTACK(__FUNCTION_NAME);
-
-       for(std::vector<Player*>::iterator i = m_players.begin();
-                       i != m_players.end();)
-       {
-               Player *player = *i;
-               if(player->peer_id == peer_id) {
-                       delete player;
-                       i = m_players.erase(i);
-               } else {
-                       ++i;
-               }
-       }
-}
-
-void Environment::removePlayer(const char *name)
+void Environment::removePlayer(Player* player)
 {
        for (std::vector<Player*>::iterator it = m_players.begin();
                        it != m_players.end(); ++it) {
-               if (strcmp((*it)->getName(), name) == 0) {
+               if ((*it) == player) {
                        delete *it;
                        m_players.erase(it);
                        return;
@@ -453,15 +436,12 @@ void ServerEnvironment::saveLoadedPlayers()
        }
 }
 
-void ServerEnvironment::savePlayer(const std::string &playername)
+void ServerEnvironment::savePlayer(RemotePlayer *player)
 {
        std::string players_path = m_path_world + DIR_DELIM "players";
        fs::CreateDir(players_path);
 
-       RemotePlayer *player = static_cast<RemotePlayer*>(getPlayer(playername.c_str()));
-       if (player) {
-               player->save(players_path);
-       }
+       player->save(players_path);
 }
 
 Player *ServerEnvironment::loadPlayer(const std::string &playername)
index 41295abf29ec3b5aa0d6d1d85065078caef2b4f1..17d7ff19deecc447066590fcc1776ba4d6ab291d 100644 (file)
@@ -52,6 +52,7 @@ class ServerMap;
 class ClientMap;
 class GameScripting;
 class Player;
+class RemotePlayer;
 
 class Environment
 {
@@ -71,8 +72,7 @@ public:
        virtual Map & getMap() = 0;
 
        virtual void addPlayer(Player *player);
-       void removePlayer(u16 peer_id);
-       void removePlayer(const char *name);
+       void removePlayer(Player *player);
        Player * getPlayer(u16 peer_id);
        Player * getPlayer(const char *name);
        Player * getRandomConnectedPlayer();
@@ -226,7 +226,7 @@ public:
                const std::string &str_reason, bool reconnect);
        // Save players
        void saveLoadedPlayers();
-       void savePlayer(const std::string &playername);
+       void savePlayer(RemotePlayer *player);
        Player *loadPlayer(const std::string &playername);
 
        /*