mirror of
				https://github.com/vcmi/vcmi.git
				synced 2025-10-31 00:07:39 +02:00 
			
		
		
		
	use MetaString
This commit is contained in:
		| @@ -47,7 +47,9 @@ void GameChatHandler::sendMessageGameplay(const std::string & messageText) | ||||
| void GameChatHandler::sendMessageLobby(const std::string & senderName, const std::string & messageText) | ||||
| { | ||||
| 	LobbyChatMessage lcm; | ||||
| 	lcm.message = messageText; | ||||
| 	MetaString txt; | ||||
| 	txt.appendRawString(messageText); | ||||
| 	lcm.message = txt; | ||||
| 	lcm.playerName = senderName; | ||||
| 	CSH->sendLobbyPack(lcm); | ||||
| 	CSH->getGlobalLobby().sendMatchChatMessage(messageText); | ||||
| @@ -63,8 +65,6 @@ void GameChatHandler::onNewLobbyMessageReceived(const std::string & senderName, | ||||
|  | ||||
| 	auto * lobby = dynamic_cast<CLobbyScreen*>(SEL); | ||||
|  | ||||
| 	std::string messageTextReplaced = translationReplace(messageText); | ||||
|  | ||||
| 	// FIXME: when can this happen? | ||||
| 	assert(lobby); | ||||
| 	assert(lobby->card); | ||||
| @@ -74,14 +74,14 @@ void GameChatHandler::onNewLobbyMessageReceived(const std::string & senderName, | ||||
| 		MetaString formatted = MetaString::createFromRawString("[%s] %s: %s"); | ||||
| 		formatted.replaceRawString(TextOperations::getCurrentFormattedTimeLocal()); | ||||
| 		formatted.replaceRawString(senderName); | ||||
| 		formatted.replaceRawString(messageTextReplaced); | ||||
| 		formatted.replaceRawString(messageText); | ||||
|  | ||||
| 		lobby->card->chat->addNewMessage(formatted.toString()); | ||||
| 		if (!lobby->card->showChat) | ||||
| 				lobby->toggleChat(); | ||||
| 	} | ||||
|  | ||||
| 	chatHistory.push_back({senderName, messageTextReplaced, TextOperations::getCurrentFormattedTimeLocal()}); | ||||
| 	chatHistory.push_back({senderName, messageText, TextOperations::getCurrentFormattedTimeLocal()}); | ||||
| } | ||||
|  | ||||
| void GameChatHandler::onNewGameMessageReceived(PlayerColor sender, const std::string & messageText) | ||||
| @@ -90,43 +90,21 @@ void GameChatHandler::onNewGameMessageReceived(PlayerColor sender, const std::st | ||||
| 	std::string timeFormatted = TextOperations::getCurrentFormattedTimeLocal(); | ||||
| 	std::string playerName = "<UNKNOWN>"; | ||||
|  | ||||
| 	std::string messageTextReplaced = translationReplace(messageText); | ||||
|  | ||||
| 	if (sender.isValidPlayer()) | ||||
| 		playerName = LOCPLINT->cb->getStartInfo()->playerInfos.at(sender).name; | ||||
|  | ||||
| 	if (sender.isSpectator()) | ||||
| 		playerName = "Spectator"; // FIXME: translate? Provide nickname somewhere? | ||||
|  | ||||
| 	chatHistory.push_back({playerName, messageTextReplaced, timeFormatted}); | ||||
| 	chatHistory.push_back({playerName, messageText, timeFormatted}); | ||||
|  | ||||
| 	LOCPLINT->cingconsole->addMessage(timeFormatted, playerName, messageTextReplaced); | ||||
| 	LOCPLINT->cingconsole->addMessage(timeFormatted, playerName, messageText); | ||||
| } | ||||
|  | ||||
| void GameChatHandler::onNewSystemMessageReceived(const std::string & messageText) | ||||
| { | ||||
| 	std::string messageTextReplaced = translationReplace(messageText); | ||||
|  | ||||
| 	chatHistory.push_back({"System", messageTextReplaced, TextOperations::getCurrentFormattedTimeLocal()}); | ||||
| 	chatHistory.push_back({"System", messageText, TextOperations::getCurrentFormattedTimeLocal()}); | ||||
|  | ||||
| 	if(LOCPLINT && !settings["session"]["hideSystemMessages"].Bool()) | ||||
| 		LOCPLINT->cingconsole->addMessage(TextOperations::getCurrentFormattedTimeLocal(), "System", messageTextReplaced); | ||||
| } | ||||
|  | ||||
| std::string GameChatHandler::translationReplace(std::string txt) | ||||
| { | ||||
| 	std::regex expr("~~([\\w\\d\\.]+)~~"); | ||||
| 	std::string result = ""; | ||||
| 	std::string tmp_suffix = ""; | ||||
| 	std::smatch match; | ||||
| 	std::string::const_iterator searchStart( txt.cbegin() ); | ||||
| 	while(std::regex_search(searchStart, txt.cend(), match, expr) ) | ||||
| 	{ | ||||
| 		result += match.prefix(); | ||||
| 		result += VLC->generaltexth->translate(match.str(1)); | ||||
| 		 | ||||
| 		searchStart = match.suffix().first; | ||||
| 		tmp_suffix = match.suffix(); | ||||
| 	} | ||||
| 	return result.empty() ? txt : result + tmp_suffix; | ||||
| 		LOCPLINT->cingconsole->addMessage(TextOperations::getCurrentFormattedTimeLocal(), "System", messageText); | ||||
| } | ||||
|   | ||||
| @@ -23,8 +23,6 @@ struct GameChatMessage | ||||
| class GameChatHandler : boost::noncopyable | ||||
| { | ||||
| 	std::vector<GameChatMessage> chatHistory; | ||||
|  | ||||
| 	std::string translationReplace(std::string txt); | ||||
| public: | ||||
| 	/// Returns all message history for current match | ||||
| 	const std::vector<GameChatMessage> & getChatHistory() const; | ||||
|   | ||||
| @@ -915,9 +915,9 @@ void ApplyClientNetPackVisitor::visitPackageApplied(PackageApplied & pack) | ||||
| void ApplyClientNetPackVisitor::visitSystemMessage(SystemMessage & pack) | ||||
| { | ||||
| 	// usually used to receive error messages from server | ||||
| 	logNetwork->error("System message: %s", pack.text); | ||||
| 	logNetwork->error("System message: %s", pack.text.toString()); | ||||
|  | ||||
| 	CSH->getGameChat().onNewSystemMessageReceived(pack.text); | ||||
| 	CSH->getGameChat().onNewSystemMessageReceived(pack.text.toString()); | ||||
| } | ||||
|  | ||||
| void ApplyClientNetPackVisitor::visitPlayerBlocked(PlayerBlocked & pack) | ||||
|   | ||||
| @@ -99,7 +99,7 @@ void ApplyOnLobbyScreenNetPackVisitor::visitLobbyClientDisconnected(LobbyClientD | ||||
|  | ||||
| void ApplyOnLobbyScreenNetPackVisitor::visitLobbyChatMessage(LobbyChatMessage & pack) | ||||
| { | ||||
| 	handler.getGameChat().onNewLobbyMessageReceived(pack.playerName, pack.message); | ||||
| 	handler.getGameChat().onNewLobbyMessageReceived(pack.playerName, pack.message.toString()); | ||||
| } | ||||
|  | ||||
| void ApplyOnLobbyScreenNetPackVisitor::visitLobbyGuiAction(LobbyGuiAction & pack) | ||||
| @@ -220,5 +220,5 @@ void ApplyOnLobbyScreenNetPackVisitor::visitLobbyShowMessage(LobbyShowMessage & | ||||
| 		return; | ||||
| 	 | ||||
| 	lobby->buttonStart->block(false); | ||||
| 	handler.showServerError(pack.message); | ||||
| 	handler.showServerError(pack.message.toString()); | ||||
| } | ||||
|   | ||||
| @@ -73,7 +73,7 @@ struct DLL_LINKAGE PackageApplied : public CPackForClient | ||||
|  | ||||
| struct DLL_LINKAGE SystemMessage : public CPackForClient | ||||
| { | ||||
| 	explicit SystemMessage(std::string Text) | ||||
| 	explicit SystemMessage(MetaString Text) | ||||
| 		: text(std::move(Text)) | ||||
| 	{ | ||||
| 	} | ||||
| @@ -81,7 +81,7 @@ struct DLL_LINKAGE SystemMessage : public CPackForClient | ||||
|  | ||||
| 	void visitTyped(ICPackVisitor & visitor) override; | ||||
|  | ||||
| 	std::string text; | ||||
| 	MetaString text; | ||||
|  | ||||
| 	template <typename Handler> void serialize(Handler & h) | ||||
| 	{ | ||||
|   | ||||
| @@ -11,6 +11,7 @@ | ||||
|  | ||||
| #include "StartInfo.h" | ||||
| #include "NetPacksBase.h" | ||||
| #include "../MetaString.h" | ||||
|  | ||||
| class CServerHandler; | ||||
| class CVCMIServer; | ||||
| @@ -73,7 +74,7 @@ struct DLL_LINKAGE LobbyClientDisconnected : public CLobbyPackToPropagate | ||||
| struct DLL_LINKAGE LobbyChatMessage : public CLobbyPackToPropagate | ||||
| { | ||||
| 	std::string playerName; | ||||
| 	std::string message; | ||||
| 	MetaString message; | ||||
|  | ||||
| 	void visitTyped(ICPackVisitor & visitor) override; | ||||
|  | ||||
| @@ -333,7 +334,7 @@ struct DLL_LINKAGE LobbyForceSetPlayer : public CLobbyPackToServer | ||||
|  | ||||
| struct DLL_LINKAGE LobbyShowMessage : public CLobbyPackToPropagate | ||||
| { | ||||
| 	std::string message; | ||||
| 	MetaString message; | ||||
| 	 | ||||
| 	void visitTyped(ICPackVisitor & visitor) override; | ||||
| 	 | ||||
|   | ||||
| @@ -16,6 +16,7 @@ | ||||
| #include "processors/PlayerMessageProcessor.h" | ||||
|  | ||||
| #include "../lib/CHeroHandler.h" | ||||
| #include "../lib/MetaString.h" | ||||
| #include "../lib/registerTypes/RegisterTypesLobbyPacks.h" | ||||
| #include "../lib/serializer/CMemorySerializer.h" | ||||
| #include "../lib/serializer/Connection.h" | ||||
| @@ -378,21 +379,35 @@ void CVCMIServer::announcePack(std::unique_ptr<CPackForLobby> pack) | ||||
| 	applier->getApplier(CTypeList::getInstance().getTypeID(pack.get()))->applyOnServerAfter(this, pack.get()); | ||||
| } | ||||
|  | ||||
| void CVCMIServer::announceMessage(MetaString txt) | ||||
| { | ||||
| 	logNetwork->info("Show message: %s", txt.toString()); | ||||
| 	auto cm = std::make_unique<LobbyShowMessage>(); | ||||
| 	cm->message = txt; | ||||
| 	announcePack(std::move(cm)); | ||||
| } | ||||
|  | ||||
| void CVCMIServer::announceMessage(const std::string & txt) | ||||
| { | ||||
| 	logNetwork->info("Show message: %s", txt); | ||||
| 	auto cm = std::make_unique<LobbyShowMessage>(); | ||||
| 	MetaString str; | ||||
| 	str.appendRawString(txt); | ||||
| 	announceMessage(str); | ||||
| } | ||||
|  | ||||
| void CVCMIServer::announceTxt(MetaString txt, const std::string & playerName) | ||||
| { | ||||
| 	logNetwork->info("%s says: %s", playerName, txt.toString()); | ||||
| 	auto cm = std::make_unique<LobbyChatMessage>(); | ||||
| 	cm->playerName = playerName; | ||||
| 	cm->message = txt; | ||||
| 	announcePack(std::move(cm)); | ||||
| } | ||||
|  | ||||
| void CVCMIServer::announceTxt(const std::string & txt, const std::string & playerName) | ||||
| { | ||||
| 	logNetwork->info("%s says: %s", playerName, txt); | ||||
| 	auto cm = std::make_unique<LobbyChatMessage>(); | ||||
| 	cm->playerName = playerName; | ||||
| 	cm->message = txt; | ||||
| 	announcePack(std::move(cm)); | ||||
| 	MetaString str; | ||||
| 	str.appendRawString(txt); | ||||
| 	announceTxt(str, playerName); | ||||
| } | ||||
|  | ||||
| bool CVCMIServer::passHost(int toConnectionId) | ||||
|   | ||||
| @@ -23,6 +23,7 @@ struct StartInfo; | ||||
| struct LobbyInfo; | ||||
| struct PlayerSettings; | ||||
| class PlayerColor; | ||||
| class MetaString; | ||||
|  | ||||
| template<typename T> class CApplier; | ||||
|  | ||||
| @@ -89,6 +90,7 @@ public: | ||||
| 	void announcePack(std::unique_ptr<CPackForLobby> pack); | ||||
| 	bool passHost(int toConnectionId); | ||||
|  | ||||
| 	void announceTxt(MetaString txt, const std::string & playerName = "system"); | ||||
| 	void announceTxt(const std::string & txt, const std::string & playerName = "system"); | ||||
|  | ||||
| 	void setPlayerConnectedId(PlayerSettings & pset, ui8 player) const; | ||||
| @@ -98,6 +100,7 @@ public: | ||||
| 	void clientDisconnected(std::shared_ptr<CConnection> c); | ||||
| 	void reconnectPlayer(int connId); | ||||
|  | ||||
| 	void announceMessage(MetaString txt); | ||||
| 	void announceMessage(const std::string & txt); | ||||
|  | ||||
| 	void handleReceivedPack(std::unique_ptr<CPackForLobby> pack); | ||||
|   | ||||
| @@ -389,17 +389,33 @@ void ApplyOnServerNetPackVisitor::visitLobbyPvPAction(LobbyPvPAction & pack) | ||||
| 	std::vector<FactionID> randomFaction2; | ||||
| 	std::sample(allowedTowns.begin(), allowedTowns.end(), std::back_inserter(randomFaction2), 1, std::mt19937{std::random_device{}()}); | ||||
|  | ||||
| 	MetaString txt; | ||||
|  | ||||
| 	switch(pack.action) { | ||||
| 		case LobbyPvPAction::COIN: | ||||
| 			srv.announceTxt("~~vcmi.lobby.pvp.coin.hover~~ - " + std::to_string(std::rand()%2)); | ||||
| 			txt.appendTextID("vcmi.lobby.pvp.coin.hover"); | ||||
| 			txt.appendRawString(" - " + std::to_string(std::rand()%2)); | ||||
| 			srv.announceTxt(txt); | ||||
| 			break; | ||||
| 		case LobbyPvPAction::RANDOM_TOWN: | ||||
| 			if(allowedTowns.size()) | ||||
| 				srv.announceTxt("~~core.overview.3~~ - ~~" + VLC->townh->getById(randomFaction1[0])->getNameTextID() + "~~"); | ||||
| 			if(!allowedTowns.size()) | ||||
| 				break; | ||||
| 			txt.appendTextID("core.overview.3"); | ||||
| 			txt.appendRawString(" - "); | ||||
| 			txt.appendTextID(VLC->townh->getById(randomFaction1[0])->getNameTextID()); | ||||
| 			srv.announceTxt(txt); | ||||
| 			break; | ||||
| 		case LobbyPvPAction::RANDOM_TOWN_VS: | ||||
| 			if(allowedTowns.size()) | ||||
| 				srv.announceTxt("~~core.overview.3~~ - ~~" + VLC->townh->getById(randomFaction1[0])->getNameTextID() + "~~ ~~vcmi.lobby.pvp.versus~~ ~~" + VLC->townh->getById(randomFaction2[0])->getNameTextID() + "~~"); | ||||
| 			if(!allowedTowns.size()) | ||||
| 				break; | ||||
| 			txt.appendTextID("core.overview.3"); | ||||
| 			txt.appendRawString(" - "); | ||||
| 			txt.appendTextID(VLC->townh->getById(randomFaction1[0])->getNameTextID()); | ||||
| 			txt.appendRawString(" "); | ||||
| 			txt.appendTextID("vcmi.lobby.pvp.versus"); | ||||
| 			txt.appendRawString(" "); | ||||
| 			txt.appendTextID(VLC->townh->getById(randomFaction2[0])->getNameTextID()); | ||||
| 			srv.announceTxt(txt); | ||||
| 			break; | ||||
| 	} | ||||
| 	result = true; | ||||
|   | ||||
| @@ -42,7 +42,11 @@ void PlayerMessageProcessor::playerMessage(PlayerColor player, const std::string | ||||
| 	if (handleCheatCode(message, player, currObj)) | ||||
| 	{ | ||||
| 		if(!gameHandler->getPlayerSettings(player)->isControlledByAI()) | ||||
| 			broadcastSystemMessage("~~core.genrltxt.260~~"); | ||||
| 		{ | ||||
| 			MetaString txt; | ||||
| 			txt.appendLocalString(EMetaText::GENERAL_TXT, 260); | ||||
| 			broadcastSystemMessage(txt); | ||||
| 		}			 | ||||
|  | ||||
| 		if(!player.isSpectator()) | ||||
| 			gameHandler->checkVictoryLossConditionsForPlayer(player);//Player enter win code or got required art\creature | ||||
| @@ -614,20 +618,34 @@ void PlayerMessageProcessor::executeCheatCode(const std::string & cheatName, Pla | ||||
| 		callbacks.at(cheatName)(); | ||||
| } | ||||
|  | ||||
| void PlayerMessageProcessor::sendSystemMessage(std::shared_ptr<CConnection> connection, const std::string & message) | ||||
| void PlayerMessageProcessor::sendSystemMessage(std::shared_ptr<CConnection> connection, MetaString message) | ||||
| { | ||||
| 	SystemMessage sm; | ||||
| 	sm.text = message; | ||||
| 	connection->sendPack(&sm); | ||||
| } | ||||
|  | ||||
| void PlayerMessageProcessor::broadcastSystemMessage(const std::string & message) | ||||
| void PlayerMessageProcessor::sendSystemMessage(std::shared_ptr<CConnection> connection, const std::string & message) | ||||
| { | ||||
| 	MetaString str; | ||||
| 	str.appendRawString(message); | ||||
| 	sendSystemMessage(connection, str); | ||||
| } | ||||
|  | ||||
| void PlayerMessageProcessor::broadcastSystemMessage(MetaString message) | ||||
| { | ||||
| 	SystemMessage sm; | ||||
| 	sm.text = message; | ||||
| 	gameHandler->sendToAllClients(&sm); | ||||
| } | ||||
|  | ||||
| void PlayerMessageProcessor::broadcastSystemMessage(const std::string & message) | ||||
| { | ||||
| 	MetaString str; | ||||
| 	str.appendRawString(message); | ||||
| 	broadcastSystemMessage(str); | ||||
| } | ||||
|  | ||||
| void PlayerMessageProcessor::broadcastMessage(PlayerColor playerSender, const std::string & message) | ||||
| { | ||||
| 	PlayerMessageClient temp_message(playerSender, message); | ||||
|   | ||||
| @@ -15,6 +15,7 @@ VCMI_LIB_NAMESPACE_BEGIN | ||||
| class CGHeroInstance; | ||||
| class CGTownInstance; | ||||
| class CConnection; | ||||
| class MetaString; | ||||
| VCMI_LIB_NAMESPACE_END | ||||
|  | ||||
| class CGameHandler; | ||||
| @@ -51,9 +52,11 @@ public: | ||||
| 	void playerMessage(PlayerColor player, const std::string & message, ObjectInstanceID currObj); | ||||
|  | ||||
| 	/// Send message to specific client with "System" as sender | ||||
| 	void sendSystemMessage(std::shared_ptr<CConnection> connection, MetaString message); | ||||
| 	void sendSystemMessage(std::shared_ptr<CConnection> connection, const std::string & message); | ||||
|  | ||||
| 	/// Send message to all players with "System" as sender | ||||
| 	void broadcastSystemMessage(MetaString message); | ||||
| 	void broadcastSystemMessage(const std::string & message); | ||||
|  | ||||
| 	/// Send message from specific player to all other players | ||||
|   | ||||
		Reference in New Issue
	
	Block a user