Define ServerTraits in mod.yaml
This commit is contained in:
@@ -18,7 +18,7 @@ namespace OpenRA.FileFormats
|
||||
public class Manifest
|
||||
{
|
||||
public readonly string[]
|
||||
Mods, Folders, Packages, Rules,
|
||||
Mods, Folders, Packages, Rules, ServerTraits,
|
||||
Sequences, Cursors, Chrome, Assemblies, ChromeLayout,
|
||||
Weapons, Voices, Music, Movies, TileSets;
|
||||
public readonly string ShellmapUid, LoadScreen;
|
||||
@@ -35,6 +35,7 @@ namespace OpenRA.FileFormats
|
||||
Folders = YamlList(yaml, "Folders");
|
||||
Packages = YamlList(yaml, "Packages");
|
||||
Rules = YamlList(yaml, "Rules");
|
||||
ServerTraits = YamlList(yaml, "ServerTraits");
|
||||
Sequences = YamlList(yaml, "Sequences");
|
||||
Cursors = YamlList(yaml, "Cursors");
|
||||
Chrome = YamlList(yaml, "Chrome");
|
||||
|
||||
@@ -55,16 +55,14 @@ namespace OpenRA.Server
|
||||
{
|
||||
Log.AddChannel("server", "server.log");
|
||||
|
||||
ServerTraits.Add( new DebugServerTrait() );
|
||||
ServerTraits.Add( new PlayerCommands() );
|
||||
ServerTraits.Add( new LobbyCommands() );
|
||||
ServerTraits.Add( new MasterServerPinger() );
|
||||
|
||||
listener = new TcpListener(IPAddress.Any, settings.Server.ListenPort);
|
||||
Name = settings.Server.Name;
|
||||
randomSeed = (int)DateTime.Now.ToBinary();
|
||||
ModData = modData;
|
||||
|
||||
foreach (var trait in modData.Manifest.ServerTraits)
|
||||
ServerTraits.Add( modData.ObjectCreator.CreateObject<ServerTrait>(trait) );
|
||||
|
||||
lobbyInfo = new Session( settings.Game.Mods );
|
||||
lobbyInfo.GlobalSettings.RandomSeed = randomSeed;
|
||||
lobbyInfo.GlobalSettings.Map = map;
|
||||
|
||||
@@ -16,7 +16,7 @@ using OpenRA.FileFormats;
|
||||
|
||||
namespace OpenRA.Server.Traits
|
||||
{
|
||||
public class LobbyCommands : IInterpretCommand, INotifyServerStart, IClientJoined
|
||||
public class LobbyCommands : ServerTrait, IInterpretCommand, INotifyServerStart, IClientJoined
|
||||
{
|
||||
public static int MaxSpectators = 4; // How many spectators to allow // @todo Expose this as an option
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ using System.Net;
|
||||
|
||||
namespace OpenRA.Server.Traits
|
||||
{
|
||||
public class MasterServerPinger : ITick, INotifySyncLobbyInfo, IStartGame
|
||||
public class MasterServerPinger : ServerTrait, ITick, INotifySyncLobbyInfo, IStartGame
|
||||
{
|
||||
const int MasterPingInterval = 60 * 3; // 3 minutes. server has a 5 minute TTL for games, so give ourselves a bit
|
||||
// of leeway.
|
||||
|
||||
@@ -16,7 +16,7 @@ using OpenRA.Network;
|
||||
|
||||
namespace OpenRA.Server.Traits
|
||||
{
|
||||
public class PlayerCommands : IInterpretCommand
|
||||
public class PlayerCommands : ServerTrait, IInterpretCommand
|
||||
{
|
||||
public bool InterpretCommand(Connection conn, Session.Client client, string cmd)
|
||||
{
|
||||
|
||||
@@ -25,8 +25,9 @@ namespace OpenRA.Server.Traits
|
||||
int TickTimeout { get; }
|
||||
}
|
||||
|
||||
public abstract class ServerTrait {}
|
||||
|
||||
public class DebugServerTrait : IInterpretCommand, IStartGame, INotifySyncLobbyInfo, INotifyServerStart, INotifyServerShutdown
|
||||
public class DebugServerTrait : ServerTrait, IInterpretCommand, IStartGame, INotifySyncLobbyInfo, INotifyServerStart, INotifyServerShutdown
|
||||
{
|
||||
public bool InterpretCommand(Connection conn, Session.Client client, string cmd)
|
||||
{
|
||||
|
||||
@@ -83,3 +83,7 @@ TileSets:
|
||||
|
||||
LoadScreen: CncLoadScreen
|
||||
ShellmapUid:e7b9badb3b7d49ccc773a7aa086c0ff9a1136b77
|
||||
ServerTraits:
|
||||
PlayerCommands
|
||||
LobbyCommands
|
||||
MasterServerPinger
|
||||
|
||||
@@ -78,3 +78,7 @@ Movies:
|
||||
|
||||
LoadScreen: RALoadScreen
|
||||
ShellmapUid:f1e5ed95dccfa5ba9c61f1263adffe17635ec069
|
||||
ServerTraits:
|
||||
PlayerCommands
|
||||
LobbyCommands
|
||||
MasterServerPinger
|
||||
|
||||
Reference in New Issue
Block a user