mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 01:05:48 +01:00 
			
		
		
		
	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
This commit is contained in:
		@@ -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;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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<std::string> ¶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,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								src/server.h
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								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<std::string> ¶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<std::string> ¶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);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user