mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-10-31 07:25:22 +01:00 
			
		
		
		
	| @@ -380,56 +380,48 @@ void Server::handleCommand_ClientReady(NetworkPacket* pkt) | |||||||
| { | { | ||||||
| 	session_t peer_id = pkt->getPeerId(); | 	session_t peer_id = pkt->getPeerId(); | ||||||
| 
 | 
 | ||||||
| 	PlayerSAO* playersao = StageTwoClientInit(peer_id); | 	// decode all information first
 | ||||||
|  | 	u8 major_ver, minor_ver, patch_ver, reserved; | ||||||
|  | 	u16 formspec_ver = 1; // v1 for clients older than 5.1.0-dev
 | ||||||
|  | 	std::string full_ver; | ||||||
| 
 | 
 | ||||||
| 	if (playersao == NULL) { | 	*pkt >> major_ver >> minor_ver >> patch_ver >> reserved >> full_ver; | ||||||
| 		errorstream << "TOSERVER_CLIENT_READY stage 2 client init failed " | 	if (pkt->getRemainingBytes() >= 2) | ||||||
|  | 		*pkt >> formspec_ver; | ||||||
|  | 
 | ||||||
|  | 	m_clients.setClientVersion(peer_id, major_ver, minor_ver, patch_ver, | ||||||
|  | 		full_ver); | ||||||
|  | 
 | ||||||
|  | 	// Emerge player
 | ||||||
|  | 	PlayerSAO* playersao = StageTwoClientInit(peer_id); | ||||||
|  | 	if (!playersao) { | ||||||
|  | 		errorstream << "Server: stage 2 client init failed " | ||||||
| 			"peer_id=" << peer_id << std::endl; | 			"peer_id=" << peer_id << std::endl; | ||||||
| 		DisconnectPeer(peer_id); | 		DisconnectPeer(peer_id); | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	playersao->getPlayer()->formspec_version = formspec_ver; | ||||||
|  | 	m_clients.event(peer_id, CSE_SetClientReady); | ||||||
| 
 | 
 | ||||||
| 	if (pkt->getSize() < 8) { | 	// Send player list to this client
 | ||||||
| 		errorstream << "TOSERVER_CLIENT_READY client sent inconsistent data, " | 	{ | ||||||
| 			"disconnecting peer_id: " << peer_id << std::endl; |  | ||||||
| 		DisconnectPeer(peer_id); |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	u8 major_ver, minor_ver, patch_ver, reserved; |  | ||||||
| 	std::string full_ver; |  | ||||||
| 	*pkt >> major_ver >> minor_ver >> patch_ver >> reserved >> full_ver; |  | ||||||
| 
 |  | ||||||
| 	m_clients.setClientVersion(peer_id, major_ver, minor_ver, patch_ver, |  | ||||||
| 		full_ver); |  | ||||||
| 
 |  | ||||||
| 	if (pkt->getRemainingBytes() >= 2) |  | ||||||
| 		*pkt >> playersao->getPlayer()->formspec_version; |  | ||||||
| 
 |  | ||||||
| 		const std::vector<std::string> &players = m_clients.getPlayerNames(); | 		const std::vector<std::string> &players = m_clients.getPlayerNames(); | ||||||
| 		NetworkPacket list_pkt(TOCLIENT_UPDATE_PLAYER_LIST, 0, peer_id); | 		NetworkPacket list_pkt(TOCLIENT_UPDATE_PLAYER_LIST, 0, peer_id); | ||||||
| 		list_pkt << (u8) PLAYER_LIST_INIT << (u16) players.size(); | 		list_pkt << (u8) PLAYER_LIST_INIT << (u16) players.size(); | ||||||
| 	for (const std::string &player: players) { | 		for (const auto &player : players) | ||||||
| 			list_pkt << player; | 			list_pkt << player; | ||||||
|  | 		Send(peer_id, &list_pkt); | ||||||
| 	} | 	} | ||||||
| 	m_clients.send(peer_id, 0, &list_pkt, true); |  | ||||||
| 
 |  | ||||||
| 	NetworkPacket notice_pkt(TOCLIENT_UPDATE_PLAYER_LIST, 0, PEER_ID_INEXISTENT); |  | ||||||
| 	// (u16) 1 + std::string represents a pseudo vector serialization representation
 |  | ||||||
| 	notice_pkt << (u8) PLAYER_LIST_ADD << (u16) 1 << std::string(playersao->getPlayer()->getName()); |  | ||||||
| 	m_clients.sendToAll(¬ice_pkt); |  | ||||||
| 	m_clients.event(peer_id, CSE_SetClientReady); |  | ||||||
| 
 | 
 | ||||||
| 	s64 last_login; | 	s64 last_login; | ||||||
| 	m_script->getAuth(playersao->getPlayer()->getName(), nullptr, nullptr, &last_login); | 	m_script->getAuth(playersao->getPlayer()->getName(), nullptr, nullptr, &last_login); | ||||||
| 	m_script->on_joinplayer(playersao, last_login); | 	m_script->on_joinplayer(playersao, last_login); | ||||||
| 
 | 
 | ||||||
| 	// Send shutdown timer if shutdown has been scheduled
 | 	// Send shutdown timer if shutdown has been scheduled
 | ||||||
| 	if (m_shutdown_state.isTimerRunning()) { | 	if (m_shutdown_state.isTimerRunning()) | ||||||
| 		SendChatMessage(peer_id, m_shutdown_state.getShutdownTimerMessage()); | 		SendChatMessage(peer_id, m_shutdown_state.getShutdownTimerMessage()); | ||||||
| } | } | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| void Server::handleCommand_GotBlocks(NetworkPacket* pkt) | void Server::handleCommand_GotBlocks(NetworkPacket* pkt) | ||||||
| { | { | ||||||
|   | |||||||
| @@ -128,9 +128,7 @@ public: | |||||||
| 	void setDirty(bool dirty) { m_dirty = true; } | 	void setDirty(bool dirty) { m_dirty = true; } | ||||||
| 
 | 
 | ||||||
| 	u16 protocol_version = 0; | 	u16 protocol_version = 0; | ||||||
| 
 | 	u16 formspec_version = 0; | ||||||
| 	// v1 for clients older than 5.1.0-dev
 |  | ||||||
| 	u16 formspec_version = 1; |  | ||||||
| 
 | 
 | ||||||
| 	session_t getPeerId() const { return m_peer_id; } | 	session_t getPeerId() const { return m_peer_id; } | ||||||
| 
 | 
 | ||||||
|   | |||||||
| @@ -1106,19 +1106,20 @@ PlayerSAO* Server::StageTwoClientInit(session_t peer_id) | |||||||
| 	SendPlayerBreath(playersao); | 	SendPlayerBreath(playersao); | ||||||
| 
 | 
 | ||||||
| 	/*
 | 	/*
 | ||||||
| 		Print out action | 		Update player list and print action | ||||||
| 	*/ | 	*/ | ||||||
| 	{ | 	{ | ||||||
| 		Address addr = getPeerAddress(player->getPeerId()); | 		NetworkPacket notice_pkt(TOCLIENT_UPDATE_PLAYER_LIST, 0, PEER_ID_INEXISTENT); | ||||||
| 		std::string ip_str = addr.serializeString(); | 		notice_pkt << (u8) PLAYER_LIST_ADD << (u16) 1 << std::string(player->getName()); | ||||||
| 		const std::vector<std::string> &names = m_clients.getPlayerNames(); | 		m_clients.sendToAll(¬ice_pkt); | ||||||
|  | 	} | ||||||
|  | 	{ | ||||||
|  | 		std::string ip_str = getPeerAddress(player->getPeerId()).serializeString(); | ||||||
|  | 		const auto &names = m_clients.getPlayerNames(); | ||||||
| 
 | 
 | ||||||
| 		actionstream << player->getName() << " [" << ip_str << "] joins game. List of players: "; | 		actionstream << player->getName() << " [" << ip_str << "] joins game. List of players: "; | ||||||
| 
 | 		for (const std::string &name : names) | ||||||
| 		for (const std::string &name : names) { |  | ||||||
| 			actionstream << name << " "; | 			actionstream << name << " "; | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		actionstream << player->getName() << std::endl; | 		actionstream << player->getName() << std::endl; | ||||||
| 	} | 	} | ||||||
| 	return playersao; | 	return playersao; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user