diff --git a/Subsurface/Content/UI/style.xml b/Subsurface/Content/UI/style.xml
index 73b0c7357..5fb091a28 100644
--- a/Subsurface/Content/UI/style.xml
+++ b/Subsurface/Content/UI/style.xml
@@ -54,6 +54,13 @@
+
+
+
+
= endTime)
- {
- string endMessage = traitor.character.Info.Name + " was a traitor! ";
- endMessage += (traitor.character.Info.Gender == Gender.Male) ? "His" : "Her";
- endMessage += " task was to assassinate " + target.character.Info.Name + ". The task was unsuccesful.";
- End(endMessage);
- return;
- }
-
+
if (traitor==null || target ==null)
{
@@ -68,6 +59,35 @@ namespace Subsurface
endMessage += " task was to assassinate " + target.character.Info.Name + ". The task was succesful.";
End(endMessage);
}
+ else if (traitor.character.IsDead)
+ {
+ string endMessage = traitor.character.Info.Name + " was a traitor! ";
+ endMessage += (traitor.character.Info.Gender == Gender.Male) ? "His" : "Her";
+ endMessage += " task was to assassinate " + target.character.Info.Name + ". ";
+ endMessage += "The task was unsuccessful - the has submarine reached its destination.";
+ End(endMessage);
+ return;
+ }
+ else if (Level.Loaded.AtEndPosition)
+ {
+ string endMessage = traitor.character.Info.Name + " was a traitor! ";
+ endMessage += (traitor.character.Info.Gender == Gender.Male) ? "His" : "Her";
+ endMessage += " task was to assassinate " + target.character.Info.Name + ", but ";
+ endMessage += (traitor.character.Info.Gender == Gender.Male) ? "he" : "she";
+ endMessage += " got " + ((traitor.character.Info.Gender == Gender.Male) ? "himself" : "herself");
+ endMessage += " killed before completing it.";
+ End(endMessage);
+ return;
+ }
+ else if (DateTime.Now >= endTime)
+ {
+ string endMessage = traitor.character.Info.Name + " was a traitor! ";
+ endMessage += (traitor.character.Info.Gender == Gender.Male) ? "His" : "Her";
+ endMessage += " task was to assassinate " + target.character.Info.Name + ". The task was unsuccesful.";
+ End(endMessage);
+ return;
+ }
+
}
}
}
diff --git a/Subsurface/Source/Items/CharacterInventory.cs b/Subsurface/Source/Items/CharacterInventory.cs
index cab256dc1..25db5d641 100644
--- a/Subsurface/Source/Items/CharacterInventory.cs
+++ b/Subsurface/Source/Items/CharacterInventory.cs
@@ -144,11 +144,11 @@ namespace Subsurface
//PutItem(item, i, false, false);
combined = true;
}
- else if (items[i].Combine(item))
- {
- //PutItem(items[i], i, false, false);
- combined = true;
- }
+ //else if (items[i].Combine(item))
+ //{
+ // //PutItem(items[i], i, false, false);
+ // combined = true;
+ //}
if (!combined) return false;
diff --git a/Subsurface/Source/Items/Components/Projectile.cs b/Subsurface/Source/Items/Components/Projectile.cs
index 0e44f3468..122574f22 100644
--- a/Subsurface/Source/Items/Components/Projectile.cs
+++ b/Subsurface/Source/Items/Components/Projectile.cs
@@ -179,7 +179,7 @@ namespace Subsurface.Items.Components
foreach (Item contained in item.ContainedItems)
{
contained.Condition = 0.0f;
- if (contained.body!=null)
+ if (contained.body != null)
{
contained.body.SetTransform(item.SimPosition, contained.body.Rotation);
}
diff --git a/Subsurface/Source/Items/Item.cs b/Subsurface/Source/Items/Item.cs
index 608b7fc8d..a6b4e95be 100644
--- a/Subsurface/Source/Items/Item.cs
+++ b/Subsurface/Source/Items/Item.cs
@@ -178,7 +178,7 @@ namespace Subsurface
get
{
ItemContainer c = GetComponent();
- return (c == null) ? null : c.inventory.items;
+ return (c == null) ? null : Array.FindAll(c.inventory.items, i=>i!=null);
}
}
diff --git a/Subsurface/Source/Networking/GameClient.cs b/Subsurface/Source/Networking/GameClient.cs
index 42d4cf342..57a8dbd23 100644
--- a/Subsurface/Source/Networking/GameClient.cs
+++ b/Subsurface/Source/Networking/GameClient.cs
@@ -50,9 +50,8 @@ namespace Subsurface.Networking
}
- public void ConnectToServer(string hostIP)
+ public void ConnectToServer(string hostIP, string password = "")
{
-
string[] address = hostIP.Split(':');
if (address.Length==1)
{
@@ -65,7 +64,7 @@ namespace Subsurface.Networking
if (!int.TryParse(address[1], out Port))
{
- DebugConsole.ThrowError("Invalid port: address[1]!");
+ DebugConsole.ThrowError("Invalid port: "+address[1]+"!");
Port = DefaultPort;
}
}
@@ -85,6 +84,7 @@ namespace Subsurface.Networking
client.Start();
outmsg.Write((byte)PacketTypes.Login);
+ outmsg.Write(password);
outmsg.Write(Game1.Version.ToString());
outmsg.Write(Game1.SelectedPackage.Name);
outmsg.Write(Game1.SelectedPackage.MD5hash.Hash);
diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs
index d856f7694..a1d961eb4 100644
--- a/Subsurface/Source/Networking/GameServer.cs
+++ b/Subsurface/Source/Networking/GameServer.cs
@@ -22,17 +22,23 @@ namespace Subsurface.Networking
private TimeSpan refreshMasterInterval = new TimeSpan(0, 0, 40);
private DateTime refreshMasterTimer;
+ private bool masterServerResponded;
+
private bool registeredToMaster;
+ private string password;
+
private Client myClient;
- public GameServer(string name, int port)
+ public GameServer(string name, int port, bool isPublic = false, string password="")
{
var endRoundButton = new GUIButton(new Rectangle(Game1.GraphicsWidth - 290, 20, 150, 25), "End round", Alignment.TopLeft, GUI.style, inGameHUD);
endRoundButton.OnClicked = EndButtonHit;
this.name = name;
+ this.password = password;
+
config = new NetPeerConfiguration("subsurface");
//config.SimulatedLoss = 0.2f;
@@ -62,7 +68,11 @@ namespace Subsurface.Networking
DebugConsole.ThrowError("Couldn't start the server", e);
}
- RegisterToMasterServer();
+ if (isPublic)
+ {
+ RegisterToMasterServer();
+ }
+
updateInterval = new TimeSpan(0, 0, 0, 0, 30);
@@ -78,6 +88,7 @@ namespace Subsurface.Networking
request.AddParameter("servername", name);
request.AddParameter("serverport", Port);
request.AddParameter("playercount", PlayerCountToByte(connectedClients.Count, config.MaximumConnections));
+ request.AddParameter("password", string.IsNullOrWhiteSpace(password) ? 0 : 1);
// execute the request
RestResponse response = (RestResponse)client.Execute(request);
@@ -98,7 +109,7 @@ namespace Subsurface.Networking
refreshMasterTimer = DateTime.Now + refreshMasterInterval;
}
- private void RefreshMaster()
+ private IEnumerable