From c7c03ad7a60b77040d0dfc360a79f065e0c2c971 Mon Sep 17 00:00:00 2001 From: Loic Blot Date: Thu, 8 Mar 2018 22:19:25 +0100 Subject: [PATCH] Cleanup & bugfix * ObjectRef::set_local_animation: fix wrong lua return (should push a boolean, currently returns nil) * ObjectRef::set_eye_offset: fix wrong lua return (should push a boolean, currently returns nil) * Fix various Server functions which depends on RemotePlayer objet and return true/false when player object is nil whereas it's a caller implementation error. Change those bool functions to void and add sanitize_check call instead. Current callers are always checking player object validity * Optimize Server::setClouds : use CloudParams object ref instead of attribute deserialization from structure & perform RemotePlayer::setCloudParams directly in server class like many other calls * Optimize Server::SendCloudParams: use CloudParams object ref instead of deserialized attributes --- src/script/lua_api/l_object.cpp | 25 ++++------------- src/server.cpp | 50 +++++++++------------------------ src/server.h | 21 ++++---------- 3 files changed, 25 insertions(+), 71 deletions(-) diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index 03bd84d52..f72a81d32 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -493,11 +493,9 @@ int ObjectRef::l_set_local_animation(lua_State *L) if (!lua_isnil(L, 6)) frame_speed = lua_tonumber(L, 6); - if (!getServer(L)->setLocalPlayerAnimations(player, frames, frame_speed)) - return 0; - + getServer(L)->setLocalPlayerAnimations(player, frames, frame_speed); lua_pushboolean(L, true); - return 0; + return 1; } // get_local_animation(self) @@ -544,11 +542,9 @@ int ObjectRef::l_set_eye_offset(lua_State *L) /* TODO: if possible: improve the camera colision detetion to allow Y <= -1.5) */ offset_third.Y = rangelim(offset_third.Y,-10,15); //1.5*BS - if (!getServer(L)->setPlayerEyeOffset(player, offset_first, offset_third)) - return 0; - + getServer(L)->setPlayerEyeOffset(player, offset_first, offset_third); lua_pushboolean(L, true); - return 0; + return 1; } // get_eye_offset(self) @@ -1559,9 +1555,7 @@ int ObjectRef::l_set_sky(lua_State *L) if (lua_isboolean(L, 5)) clouds = lua_toboolean(L, 5); - if (!getServer(L)->setSky(player, bgcolor, type, params, clouds)) - return 0; - + getServer(L)->setSky(player, bgcolor, type, params, clouds); lua_pushboolean(L, true); return 1; } @@ -1631,14 +1625,7 @@ int ObjectRef::l_set_clouds(lua_State *L) } lua_pop(L, 1); - if (!getServer(L)->setClouds(player, cloud_params.density, - cloud_params.color_bright, cloud_params.color_ambient, - cloud_params.height, cloud_params.thickness, - cloud_params.speed)) - return 0; - - player->setCloudParams(cloud_params); - + getServer(L)->setClouds(player, cloud_params); lua_pushboolean(L, true); return 1; } diff --git a/src/server.cpp b/src/server.cpp index 75547c60b..9e1db6c61 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -1775,17 +1775,11 @@ void Server::SendSetSky(session_t peer_id, const video::SColor &bgcolor, Send(&pkt); } -void Server::SendCloudParams(session_t peer_id, float density, - const video::SColor &color_bright, - const video::SColor &color_ambient, - float height, - float thickness, - const v2f &speed) +void Server::SendCloudParams(session_t peer_id, const CloudParams ¶ms) { NetworkPacket pkt(TOCLIENT_CLOUD_PARAMS, 0, peer_id); - pkt << density << color_bright << color_ambient - << height << thickness << speed; - + pkt << params.density << params.color_bright << params.color_ambient + << params.height << params.thickness << params.speed; Send(&pkt); } @@ -3113,54 +3107,36 @@ Address Server::getPeerAddress(session_t peer_id) return m_con->GetPeerAddress(peer_id); } -bool Server::setLocalPlayerAnimations(RemotePlayer *player, +void Server::setLocalPlayerAnimations(RemotePlayer *player, v2s32 animation_frames[4], f32 frame_speed) { - if (!player) - return false; - + sanity_check(player); player->setLocalAnimations(animation_frames, frame_speed); SendLocalPlayerAnimations(player->getPeerId(), animation_frames, frame_speed); - return true; } -bool Server::setPlayerEyeOffset(RemotePlayer *player, v3f first, v3f third) +void Server::setPlayerEyeOffset(RemotePlayer *player, const v3f &first, const v3f &third) { - if (!player) - return false; - + sanity_check(player); player->eye_offset_first = first; player->eye_offset_third = third; SendEyeOffset(player->getPeerId(), first, third); - return true; } -bool Server::setSky(RemotePlayer *player, const video::SColor &bgcolor, +void Server::setSky(RemotePlayer *player, const video::SColor &bgcolor, const std::string &type, const std::vector ¶ms, bool &clouds) { - if (!player) - return false; - + sanity_check(player); player->setSky(bgcolor, type, params, clouds); SendSetSky(player->getPeerId(), bgcolor, type, params, clouds); - return true; } -bool Server::setClouds(RemotePlayer *player, float density, - const video::SColor &color_bright, - const video::SColor &color_ambient, - float height, - float thickness, - const v2f &speed) +void Server::setClouds(RemotePlayer *player, const CloudParams ¶ms) { - if (!player) - return false; - - SendCloudParams(player->getPeerId(), density, - color_bright, color_ambient, height, - thickness, speed); - return true; + sanity_check(player); + player->setCloudParams(params); + SendCloudParams(player->getPeerId(), params); } bool Server::overrideDayNightRatio(RemotePlayer *player, bool do_override, diff --git a/src/server.h b/src/server.h index 3b9b72021..8d5cd6da4 100644 --- a/src/server.h +++ b/src/server.h @@ -59,6 +59,7 @@ class EmergeManager; class ServerScripting; class ServerEnvironment; struct SimpleSoundSpec; +struct CloudParams; class ServerThread; enum ClientDeletionReason { @@ -295,19 +296,14 @@ public: Address getPeerAddress(session_t peer_id); - bool setLocalPlayerAnimations(RemotePlayer *player, v2s32 animation_frames[4], + void setLocalPlayerAnimations(RemotePlayer *player, v2s32 animation_frames[4], f32 frame_speed); - bool setPlayerEyeOffset(RemotePlayer *player, v3f first, v3f third); + void setPlayerEyeOffset(RemotePlayer *player, const v3f &first, const v3f &third); - bool setSky(RemotePlayer *player, const video::SColor &bgcolor, + void setSky(RemotePlayer *player, const video::SColor &bgcolor, const std::string &type, const std::vector ¶ms, bool &clouds); - bool setClouds(RemotePlayer *player, float density, - const video::SColor &color_bright, - const video::SColor &color_ambient, - float height, - float thickness, - const v2f &speed); + void setClouds(RemotePlayer *player, const CloudParams ¶ms); bool overrideDayNightRatio(RemotePlayer *player, bool do_override, float brightness); @@ -389,12 +385,7 @@ private: void SendSetSky(session_t peer_id, const video::SColor &bgcolor, const std::string &type, const std::vector ¶ms, bool &clouds); - void SendCloudParams(session_t peer_id, float density, - const video::SColor &color_bright, - const video::SColor &color_ambient, - float height, - float thickness, - const v2f &speed); + void SendCloudParams(session_t peer_id, const CloudParams ¶ms); void SendOverrideDayNightRatio(session_t peer_id, bool do_override, float ratio); void broadcastModChannelMessage(const std::string &channel, const std::string &message, session_t from_peer); -- 2.25.1