Core: Added trait 'SurrenderOnDisconnect' and the core changes required to make this work

This commit is contained in:
geckosoft
2010-10-25 17:19:48 +02:00
committed by Chris Forbes
parent e7c61fac5c
commit f5b8b18d86
8 changed files with 256 additions and 184 deletions

View File

@@ -21,20 +21,21 @@ namespace OpenRA.Network
public List<Slot> Slots = new List<Slot>();
public Global GlobalSettings = new Global();
public Client ClientWithIndex( int clientID )
public Client ClientWithIndex(int clientID)
{
return Clients.SingleOrDefault( c => c.Index == clientID );
return Clients.SingleOrDefault(c => c.Index == clientID);
}
public Client ClientInSlot( Slot slot )
public Client ClientInSlot(Slot slot)
{
return Clients.SingleOrDefault( c => c.Slot == slot.Index );
return Clients.SingleOrDefault(c => c.Slot == slot.Index);
}
public enum ClientState
{
NotReady,
Ready
Ready,
Disconnected = 1000
}
public class Client
@@ -55,7 +56,7 @@ namespace OpenRA.Network
public int Index;
public string Bot; // trait name of the bot to initialize in this slot, or null otherwise.
public bool Closed; // host has explicitly closed this slot.
public string MapPlayer; // playerReference to bind against.
public string MapPlayer; // playerReference to bind against.
public bool Spectator = false; // Spectating or not
// todo: more stuff?
}
@@ -71,7 +72,7 @@ namespace OpenRA.Network
public bool AllowCheats = false;
}
public Session( string[] mods )
public Session(string[] mods)
{
this.GlobalSettings.Mods = mods.ToArray();
}
@@ -80,27 +81,27 @@ namespace OpenRA.Network
{
var clientData = new List<MiniYamlNode>();
foreach( var client in Clients )
clientData.Add( new MiniYamlNode( "Client@{0}".F( client.Index ), FieldSaver.Save( client ) ) );
foreach (var client in Clients)
clientData.Add(new MiniYamlNode("Client@{0}".F(client.Index), FieldSaver.Save(client)));
foreach( var slot in Slots )
clientData.Add( new MiniYamlNode( "Slot@{0}".F( slot.Index ), FieldSaver.Save( slot ) ) );
foreach (var slot in Slots)
clientData.Add(new MiniYamlNode("Slot@{0}".F(slot.Index), FieldSaver.Save(slot)));
clientData.Add( new MiniYamlNode( "GlobalSettings", FieldSaver.Save( GlobalSettings ) ) );
clientData.Add(new MiniYamlNode("GlobalSettings", FieldSaver.Save(GlobalSettings)));
return clientData.WriteToString();
}
public static Session Deserialize(string data)
{
var session = new Session( Game.Settings.Game.Mods );
var session = new Session(Game.Settings.Game.Mods);
var ys = MiniYaml.FromString(data);
foreach (var y in ys)
{
var yy = y.Key.Split('@');
switch( yy[0] )
switch (yy[0])
{
case "GlobalSettings":
FieldLoader.Load(session.GlobalSettings, y.Value);
@@ -111,7 +112,7 @@ namespace OpenRA.Network
break;
case "Slot":
session.Slots.Add(FieldLoader.Load<Session.Slot>(y.Value ));
session.Slots.Add(FieldLoader.Load<Session.Slot>(y.Value));
break;
}
}