From 64daef95dfdf44a76de7dad78b70e25a591f25f4 Mon Sep 17 00:00:00 2001 From: Ykkrosh Date: Sat, 14 Aug 2010 19:45:22 +0000 Subject: [PATCH] Fix chat to use GUID instead of host ID. Fix randomly incorrect player names. Fix script errors when connecting to an invalid IP address. Adjust the server/client disconnection messages to be a bit more accurate. This was SVN commit r7946. --- .../mods/public/gui/gamesetup/gamesetup.js | 26 ++++++++++++------- .../mods/public/gui/gamesetup/gamesetup_mp.js | 5 ++++ .../public/gui/gamesetup/gamesetup_mp.xml | 16 +++++++----- .../data/mods/public/gui/loading/loading.js | 11 ++------ .../mods/public/gui/session_new/messages.js | 12 ++++----- .../gui/session_new/utility_functions.js | 7 ++--- source/network/NetServer.cpp | 2 +- 7 files changed, 43 insertions(+), 36 deletions(-) diff --git a/binaries/data/mods/public/gui/gamesetup/gamesetup.js b/binaries/data/mods/public/gui/gamesetup/gamesetup.js index 3cd96fb5f0..a49d80fd3f 100644 --- a/binaries/data/mods/public/gui/gamesetup/gamesetup.js +++ b/binaries/data/mods/public/gui/gamesetup/gamesetup.js @@ -125,20 +125,22 @@ function handleNetMessage(message) addChatMessage({ "type": "connect", "username": message.hosts[host].name }); for (var host in g_PlayerAssignments) if (! message.hosts[host]) - addChatMessage({ "type": "disconnect", "username": g_PlayerAssignments[host].name }); + addChatMessage({ "type": "disconnect", "guid": host }); // Update the player list g_PlayerAssignments = message.hosts; updatePlayerList(); break; case "start": - Engine.SwitchGuiPage("page_loading.xml", { "attribs": g_GameAttributes, - "isNetworked" : g_IsNetworked, - "playerAssignments": g_PlayerAssignments} ); + Engine.SwitchGuiPage("page_loading.xml", { + "attribs": g_GameAttributes, + "isNetworked" : g_IsNetworked, + "playerAssignments": g_PlayerAssignments + }); break; case "chat": - addChatMessage({ "type": "message", "username": message.username, "text": message.text }); + addChatMessage({ "type": "message", "guid": message.guid, "text": message.text }); break; default: @@ -276,7 +278,11 @@ function launchGame() playerID = i+1; } Engine.StartGame(g_GameAttributes, playerID); - Engine.PushGuiPage("page_loading.xml", { "attribs": g_GameAttributes }); + Engine.SwitchGuiPage("page_loading.xml", { + "attribs": g_GameAttributes, + "isNetworked" : g_IsNetworked, + "playerAssignments": g_PlayerAssignments + }); } } @@ -360,19 +366,21 @@ function addChatMessage(msg) // TODO: we ought to escape all values before displaying them, // to prevent people inserting colours and newlines etc + var username = (msg.username || g_PlayerAssignments[msg.guid].name); + var formatted; switch (msg.type) { case "connect": - formatted = '[font="serif-bold-13"][color="255 0 0"]' + msg.username + '[/color][/font] [color="64 64 64"]has joined[/color]'; + formatted = '[font="serif-bold-13"][color="255 0 0"]' + username + '[/color][/font] [color="64 64 64"]has joined[/color]'; break; case "disconnect": - formatted = '[font="serif-bold-13"][color="255 0 0"]' + msg.username + '[/color][/font] [color="64 64 64"]has left[/color]'; + formatted = '[font="serif-bold-13"][color="255 0 0"]' + username + '[/color][/font] [color="64 64 64"]has left[/color]'; break; case "message": - formatted = '[font="serif-bold-13"]<[color="255 0 0"]' + msg.username + '[/color]>[/font] ' + msg.text; + formatted = '[font="serif-bold-13"]<[color="255 0 0"]' + username + '[/color]>[/font] ' + msg.text; break; default: diff --git a/binaries/data/mods/public/gui/gamesetup/gamesetup_mp.js b/binaries/data/mods/public/gui/gamesetup/gamesetup_mp.js index 47ef46d9f0..eb2b4de4e7 100644 --- a/binaries/data/mods/public/gui/gamesetup/gamesetup_mp.js +++ b/binaries/data/mods/public/gui/gamesetup/gamesetup_mp.js @@ -81,10 +81,13 @@ function startHost(playername, servername) messageBox(400, 200, "Cannot host game: " + e.message + ".", "Error", 2); + return false; } startConnectionStatus("server"); // TODO: ought to do something(?) with servername + + return true; } function startJoin(playername, ip) @@ -99,7 +102,9 @@ function startJoin(playername, ip) messageBox(400, 200, "Cannot join game: " + e.message + ".", "Error", 2); + return false; } startConnectionStatus("client"); + return true; } diff --git a/binaries/data/mods/public/gui/gamesetup/gamesetup_mp.xml b/binaries/data/mods/public/gui/gamesetup/gamesetup_mp.xml index cd59a5ca4b..c4202eace3 100644 --- a/binaries/data/mods/public/gui/gamesetup/gamesetup_mp.xml +++ b/binaries/data/mods/public/gui/gamesetup/gamesetup_mp.xml @@ -80,10 +80,12 @@ Continue @@ -123,10 +125,12 @@ Continue diff --git a/binaries/data/mods/public/gui/loading/loading.js b/binaries/data/mods/public/gui/loading/loading.js index 752f6b60e1..14147d3fd7 100644 --- a/binaries/data/mods/public/gui/loading/loading.js +++ b/binaries/data/mods/public/gui/loading/loading.js @@ -6,15 +6,8 @@ function init(data) if (data && data.attribs) mapName = data.attribs.map; - - - - if (data) - g_Data = data; - - - - + g_Data = data; + // Set to "hourglass" cursor. setCursor("cursor-wait"); diff --git a/binaries/data/mods/public/gui/session_new/messages.js b/binaries/data/mods/public/gui/session_new/messages.js index 002d422895..5d692137f0 100644 --- a/binaries/data/mods/public/gui/session_new/messages.js +++ b/binaries/data/mods/public/gui/session_new/messages.js @@ -57,7 +57,7 @@ function handleNetMessage(message) switch (message.status) { case "waiting_for_players": - obj.caption = "Waiting for other players to connect"; + obj.caption = "Waiting for other players to connect..."; obj.hidden = false; break; case "active": @@ -65,7 +65,7 @@ function handleNetMessage(message) obj.hidden = true; break; case "disconnected": - obj.caption = "Connection to the server has been lost"; + obj.caption = "Connection to the server has been lost.\n\nThe game has ended."; obj.hidden = false; getGUIObjectByName("disconnectedExitButton").hidden = false; break; @@ -81,7 +81,7 @@ function handleNetMessage(message) if (! message.hosts[host]) { var obj = getGUIObjectByName("netStatus"); - obj.caption = g_PlayerAssignments[host].name + " has left\n\nConnection to the server has been lost"; + obj.caption = g_PlayerAssignments[host].name + " has disconnected.\n\nThe game has ended."; obj.hidden = false; getGUIObjectByName("disconnectedExitButton").hidden = false; } @@ -104,7 +104,7 @@ function submitChatInput() if (g_IsNetworked) Engine.SendNetworkChat(text); else - addChatMessage({ "type": "message", "guid": 1, "text": text }); + addChatMessage({ "type": "message", "guid": "local", "text": text }); input.caption = ""; // Clear chat input input.blur(); // Remove focus @@ -118,8 +118,8 @@ function addChatMessage(msg) // TODO: we ought to escape all values before displaying them, // to prevent people inserting colours and newlines etc - var n = msg.guid; - var username = g_Players[n].name; + var n = g_PlayerAssignments[msg.guid].player; + var username = g_PlayerAssignments[msg.guid].name; var playerColor = g_Players[n].color.r + " " + g_Players[n].color.g + " " + g_Players[n].color.b; var formatted; diff --git a/binaries/data/mods/public/gui/session_new/utility_functions.js b/binaries/data/mods/public/gui/session_new/utility_functions.js index 9aa14dde21..18e36262cc 100644 --- a/binaries/data/mods/public/gui/session_new/utility_functions.js +++ b/binaries/data/mods/public/gui/session_new/utility_functions.js @@ -21,8 +21,6 @@ function getPlayerData(playerAssignments) for (var i = 0; i < simState.players.length; i++) { var playerState = simState.players[i]; - if (!playerState) - continue; var name = playerState.name; var civ = playerState.civ; @@ -36,13 +34,12 @@ function getPlayerData(playerAssignments) players.push(player); } - var i = 1; if (playerAssignments) { for each (var playerAssignment in playerAssignments) { - players[i].name = playerAssignment.name; - i++; + if (players[playerAssignment.player]) + players[playerAssignment.player].name = playerAssignment.name; } } diff --git a/source/network/NetServer.cpp b/source/network/NetServer.cpp index 7b685c6476..a8cdef29da 100644 --- a/source/network/NetServer.cpp +++ b/source/network/NetServer.cpp @@ -484,7 +484,7 @@ bool CNetServer::OnChat(void* context, CFsmEvent* event) CChatMessage* message = (CChatMessage*)event->GetParamRef(); - message->m_GUID = session->GetHostID(); + message->m_GUID = session->GetGUID(); server.Broadcast(message);