| 
					
				 | 
			
			
				@@ -147,58 +147,58 @@ public void OnClientThinkPost(int author) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 * Iterate through all queued messages from OnSayText2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (g_QueuedMessages[author].Size > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		StringMapSnapshot messages = g_QueuedMessages[author].Snapshot(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (g_QueuedMessages[author].Size == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	StringMapSnapshot messages = g_QueuedMessages[author].Snapshot(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for (int m = 0; m < messages.Length; m++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		char packedMessage[192], localizationToken[32], message[128]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		messages.GetKey(m, packedMessage, sizeof(packedMessage)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for (int m = 0; m < messages.Length; m++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			char packedMessage[192], localizationToken[32], message[128]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			messages.GetKey(m, packedMessage, sizeof(packedMessage)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			ArrayList clientList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			g_QueuedMessages[author].GetValue(packedMessage, clientList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// unpack localization and message from key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			int d = SplitString(packedMessage, PACKED_TOKEN_DELIMITER, localizationToken, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					sizeof(localizationToken)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			strcopy(message, sizeof(message), packedMessage[d]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			char name[MAX_NAME_LENGTH + 1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			GetClientName(author, name, sizeof(name)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// Prepare chat message flags. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			g_ChatFlags = ParseChatMessageFlags(localizationToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// Forward call. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Action forwardResult = ForwardOnChatMessage(author, clientList, name, sizeof(name), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					message, sizeof(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// Proceed to display message on continue or changed, else drop message. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (forwardResult < Plugin_Handled) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// convert ArrayList to client array 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				int clients[MAXPLAYERS + 1], nClients; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				for (int i = 0; i < clientList.Length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					int recipient = clientList.Get(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					// display to author and players that did not mute the author 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if (recipient == author 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							|| !IsClientMuted(recipient, author)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						clients[nClients++] = recipient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				SayText(author, clients, nClients, localizationToken, name, message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		ArrayList clientList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		g_QueuedMessages[author].GetValue(packedMessage, clientList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// unpack localization and message from key 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		int d = SplitString(packedMessage, PACKED_TOKEN_DELIMITER, localizationToken, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				sizeof(localizationToken)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		strcopy(message, sizeof(message), packedMessage[d]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		char name[MAX_NAME_LENGTH + 1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		GetClientName(author, name, sizeof(name)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// Prepare chat message flags. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		g_ChatFlags = ParseChatMessageFlags(localizationToken); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// Forward call. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Action forwardResult = ForwardOnChatMessage(author, clientList, name, sizeof(name), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				message, sizeof(message)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// Proceed to display message on continue or changed, else drop message. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (forwardResult < Plugin_Handled) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// convert ArrayList to client array 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			int clients[MAXPLAYERS + 1], nClients; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for (int i = 0; i < clientList.Length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				int recipient = clientList.Get(i); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				ForwardOnChatMessagePost(author, clientList, name, message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// display to author and players that did not mute the author 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (ShouldTransmitMessage(author, recipient)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					clients[nClients++] = recipient; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			delete clientList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			g_ChatFlags = CHATFLAGS_INVALID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			SayText(author, clients, nClients, localizationToken, name, message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			ForwardOnChatMessagePost(author, clientList, name, message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		delete messages; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		delete clientList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		g_QueuedMessages[author].Clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		g_ChatFlags = CHATFLAGS_INVALID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	delete messages; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	g_QueuedMessages[author].Clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Action ForwardOnChatMessage(int &author, ArrayList clientList, char[] name, int nameLength, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -221,6 +221,10 @@ Action ForwardOnChatMessage(int &author, ArrayList clientList, char[] name, int 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return forwardResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+bool ShouldTransmitMessage(int author, int recipient) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return recipient == author || !IsClientMuted(recipient, author); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void ForwardOnChatMessagePost(int author, ArrayList clientList, const char[] name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		const char[] message) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	Call_StartForward(g_fwdOnChatMessagePost); 
			 |