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 @@
@@ -123,10 +125,12 @@
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);