summaryrefslogtreecommitdiff
path: root/src/server.cpp
diff options
context:
space:
mode:
authorLoic Blot <loic.blot@unix-experience.fr>2016-10-08 10:38:04 +0200
committerNer'zhul <nerzhul@users.noreply.github.com>2016-10-08 11:36:28 +0200
commit8bcd10b872bc88c6f474913d6efb8d53c50c5ae1 (patch)
tree39a8af0048ed642eddc43c74ab9f736558663e9d /src/server.cpp
parent0264e38bff12a3c6b81231ac1f6cd281179df744 (diff)
downloadminetest-8bcd10b872bc88c6f474913d6efb8d53c50c5ae1.tar.gz
minetest-8bcd10b872bc88c6f474913d6efb8d53c50c5ae1.tar.bz2
minetest-8bcd10b872bc88c6f474913d6efb8d53c50c5ae1.zip
Player/LocalPlayer/RemotePlayer inheritance cleanup (part 1 on X)
* LocalPlayer take ownership of maxHudId as it's the only caller * RemotePlayer take ownership of day night ratio as it's the only user * Pass getPlayerControl as const reference to prevent object copy on each call (perf improvement in ObjectRef::l_get_player_control call) * getPlayerSAO is now only RemotePlayer call * get/setHotbarItemCount is now RemotePlayer owned * Server: Use RemotePlayer instead of Player object on concerned call to properly fix the object type * PlayerSAO now uses RemotePlayer instead of Player because it's only server side * ObjectRef::getplayer also returns RemotePlayer as it's linked with PlayerSAO
Diffstat (limited to 'src/server.cpp')
-rw-r--r--src/server.cpp52
1 files changed, 24 insertions, 28 deletions
diff --git a/src/server.cpp b/src/server.cpp
index 2dd070b1a..11ffba343 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -1256,7 +1256,7 @@ Inventory* Server::getInventory(const InventoryLocation &loc)
break;
case InventoryLocation::PLAYER:
{
- Player *player = m_env->getPlayer(loc.name.c_str());
+ RemotePlayer *player = dynamic_cast<RemotePlayer *>(m_env->getPlayer(loc.name.c_str()));
if(!player)
return NULL;
PlayerSAO *playersao = player->getPlayerSAO();
@@ -1296,9 +1296,12 @@ void Server::setInventoryModified(const InventoryLocation &loc, bool playerSend)
if (!playerSend)
return;
- Player *player = m_env->getPlayer(loc.name.c_str());
- if(!player)
+ RemotePlayer *player =
+ dynamic_cast<RemotePlayer *>(m_env->getPlayer(loc.name.c_str()));
+
+ if (!player)
return;
+
PlayerSAO *playersao = player->getPlayerSAO();
if(!playersao)
return;
@@ -2637,19 +2640,16 @@ void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason)
++i;
}
- Player *player = m_env->getPlayer(peer_id);
+ RemotePlayer *player = dynamic_cast<RemotePlayer *>(m_env->getPlayer(peer_id));
/* Run scripts and remove from environment */
- {
- if(player != NULL)
- {
- PlayerSAO *playersao = player->getPlayerSAO();
- assert(playersao);
+ if(player != NULL) {
+ PlayerSAO *playersao = player->getPlayerSAO();
+ assert(playersao);
- m_script->on_leaveplayer(playersao, reason == CDR_TIMEOUT);
+ m_script->on_leaveplayer(playersao, reason == CDR_TIMEOUT);
- playersao->disconnected();
- }
+ playersao->disconnected();
}
/*
@@ -2691,7 +2691,7 @@ void Server::DeleteClient(u16 peer_id, ClientDeletionReason reason)
SendChatMessage(PEER_ID_INEXISTENT,message);
}
-void Server::UpdateCrafting(Player* player)
+void Server::UpdateCrafting(RemotePlayer* player)
{
DSTACK(FUNCTION_NAME);
@@ -2701,7 +2701,8 @@ void Server::UpdateCrafting(Player* player)
loc.setPlayer(player->getName());
std::vector<ItemStack> output_replacements;
getCraftingResult(&player->inventory, preview, output_replacements, false, this);
- m_env->getScriptIface()->item_CraftPredict(preview, player->getPlayerSAO(), (&player->inventory)->getList("craft"), loc);
+ m_env->getScriptIface()->item_CraftPredict(preview, player->getPlayerSAO(),
+ (&player->inventory)->getList("craft"), loc);
// Put the new preview in
InventoryList *plist = player->inventory.getList("craftpreview");
@@ -2851,8 +2852,8 @@ std::string Server::getPlayerName(u16 peer_id)
PlayerSAO* Server::getPlayerSAO(u16 peer_id)
{
- Player *player = m_env->getPlayer(peer_id);
- if(player == NULL)
+ RemotePlayer *player = dynamic_cast<RemotePlayer *>(m_env->getPlayer(peer_id));
+ if (player == NULL)
return NULL;
return player->getPlayerSAO();
}
@@ -2917,8 +2918,9 @@ void Server::reportPrivsModified(const std::string &name)
reportPrivsModified(player->getName());
}
} else {
- Player *player = m_env->getPlayer(name.c_str());
- if(!player)
+ RemotePlayer *player =
+ dynamic_cast<RemotePlayer *>(m_env->getPlayer(name.c_str()));
+ if (!player)
return;
SendPlayerPrivileges(player->peer_id);
PlayerSAO *sao = player->getPlayerSAO();
@@ -3025,7 +3027,7 @@ bool Server::hudChange(Player *player, u32 id, HudElementStat stat, void *data)
return true;
}
-bool Server::hudSetFlags(Player *player, u32 flags, u32 mask)
+bool Server::hudSetFlags(RemotePlayer *player, u32 flags, u32 mask)
{
if (!player)
return false;
@@ -3043,10 +3045,11 @@ bool Server::hudSetFlags(Player *player, u32 flags, u32 mask)
return true;
}
-bool Server::hudSetHotbarItemcount(Player *player, s32 hotbar_itemcount)
+bool Server::hudSetHotbarItemcount(RemotePlayer *player, s32 hotbar_itemcount)
{
if (!player)
return false;
+
if (hotbar_itemcount <= 0 || hotbar_itemcount > HUD_HOTBAR_ITEMCOUNT_MAX)
return false;
@@ -3057,13 +3060,6 @@ bool Server::hudSetHotbarItemcount(Player *player, s32 hotbar_itemcount)
return true;
}
-s32 Server::hudGetHotbarItemcount(Player *player)
-{
- if (!player)
- return 0;
- return player->getHotbarItemcount();
-}
-
void Server::hudSetHotbarImage(Player *player, std::string name)
{
if (!player)
@@ -3130,7 +3126,7 @@ bool Server::setSky(Player *player, const video::SColor &bgcolor,
return true;
}
-bool Server::overrideDayNightRatio(Player *player, bool do_override,
+bool Server::overrideDayNightRatio(RemotePlayer *player, bool do_override,
float ratio)
{
if (!player)