From 27a1de387946f20dd54032837061d59204affba2 Mon Sep 17 00:00:00 2001
From: Pelish <pelish@gmail.com>
Date: Sun, 11 Apr 2010 09:58:05 +0000
Subject: [PATCH] Fix for bug introduced in multilingual motd's. Should fix Bug
 #16451 and #17054. Thank goes to pandaemonium for is help/fix of that issue.

---
 pvpgn/IGNOREME                 |  2 +-
 pvpgn/src/bnetd/connection.cpp |  3 +--
 pvpgn/src/bnetd/handle_wol.cpp | 11 +++++++----
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/pvpgn/IGNOREME b/pvpgn/IGNOREME
index 1afbe93..a24de5d 100644
--- a/pvpgn/IGNOREME
+++ b/pvpgn/IGNOREME
@@ -39,6 +39,7 @@ Westwood Online games:
 - Nox Quest v1.02b
 - Emperor: Battle for Dune v1.09
 - Renegade v1.037
+- Lands of Lore 3 (autoupdate only)
 
 -----
 
@@ -56,7 +57,6 @@ anyone who can contribute to our project in any way.
 Project homepages/distribution sites:
 - project home and main distribution site: http://pvpgn.berlios.de
 - alternate project home: http://www.pvpgn.org
-- alternate distribution site: http://www.pvpgn.de
 
 Support channels:
 
diff --git a/pvpgn/src/bnetd/connection.cpp b/pvpgn/src/bnetd/connection.cpp
index a7c3bb3..b4652f9 100644
--- a/pvpgn/src/bnetd/connection.cpp
+++ b/pvpgn/src/bnetd/connection.cpp
@@ -136,14 +136,13 @@ static void conn_send_welcome(t_connection * c)
         def_langtag = std::strrchr(tempmotdfile,'-');
         if (!def_langtag) {
             extention = std::strrchr(tempmotdfile,'.');
-            lang_filename = (char*)xmalloc(std::strlen(tempmotdfile)+7);
         }
         else {
             *def_langtag = '\0';
             def_langtag++;
             extention = std::strrchr(def_langtag,'.');
-            lang_filename = (char*)xmalloc(std::strlen(tempmotdfile));
         }
+        lang_filename = (char*)xmalloc(std::strlen(tempmotdfile)+1+std::strlen(lang_str)+1+std::strlen(extention)+1);
         
         if (extention) {
             *extention = '\0';
diff --git a/pvpgn/src/bnetd/handle_wol.cpp b/pvpgn/src/bnetd/handle_wol.cpp
index 7fa05cf..319dd4f 100644
--- a/pvpgn/src/bnetd/handle_wol.cpp
+++ b/pvpgn/src/bnetd/handle_wol.cpp
@@ -1018,7 +1018,8 @@ static int _handle_joingame_command(t_connection * conn, int numparams, char **
 	   	 	gametype = game_get_type(game);
 
 			if ((conn_set_game(conn, gamename, gamepass, "", gametype, 0))<0) {
-				irc_send(conn,ERR_NOSUCHCHANNEL,":JOINGAME failed");
+    		    snprintf(_temp, sizeof(_temp), "%s :JOINGAME failed",e[0]);
+			    irc_send(conn,ERR_GAMEHASCLOSED,_temp);
 			}
 			else {
                 /*conn_set_channel()*/
@@ -1054,7 +1055,8 @@ static int _handle_joingame_command(t_connection * conn, int numparams, char **
   					irc_send_rpl_namreply(conn,channel);
 				}
 				else {
-				    irc_send(conn,ERR_NOSUCHCHANNEL,":JOINGAME failed");
+    		        snprintf(_temp, sizeof(_temp), "%s :JOINGAME failed", e[0]);
+			        irc_send(conn,ERR_GAMEHASCLOSED,_temp);
 				}
 			}
 		}
@@ -1743,11 +1745,12 @@ static int _handle_rungsearch_command(t_connection * conn, int numparams, char *
     if ((numparams>=4) && (params[0]) && (params[1]) && (params[3])) {
         cl_tag = tag_sku_to_uint(std::atoi(params[3]));
 
-        if ((cl_tag != CLIENTTAG_TIBERNSUN_UINT) && (cl_tag != CLIENTTAG_REDALERT2_UINT)) {
+        if ((cl_tag != CLIENTTAG_TIBERNSUN_UINT) && (cl_tag != CLIENTTAG_TIBSUNXP_UINT)
+             && (cl_tag != CLIENTTAG_REDALERT2_UINT)  && (cl_tag != CLIENTTAG_YURISREV_UINT)) {
             // PELISH: We are not supporting ladders for all WOL clients yet
             std::strcat(data,"\r\n");
             _ladder_send(conn,data);
-            DEBUG1("Wants rung search for SKU %s", params[0]);
+            DEBUG1("Wants rung search for SKU %s", params[3]);
 	        return 0;
         }