Files
MSCO/Commands.cs
T

85 lines
3.2 KiB
C#

using System;
namespace MSCO
{
/// <summary>
/// Alle MSCO-Befehle an einer Stelle - genutzt von der eigenen F8-Konsole (ohne "mp" davor)
/// und von der MSCLoader-Konsole ("mp ...").
/// </summary>
public static class Commands
{
public const string Help =
"connect <host[:port]> - join a dedicated server\n" +
"disconnect - leave the server / game\n" +
"host [port] / join <ip> [port] - direct LAN game (no Steam)\n" +
"save - save the game (host / singleplayer)\n" +
"/admin - admin menu (kick / ban / teleport / cheats)\n" +
"vehicles | rig - debug info about vehicles / player models\n" +
"debug - toggle sync debug output\n" +
"clear - clear this console";
public static void Execute(string[] args, Action<string> print)
{
var mp = MultiplayerManager.Instance;
if (mp == null) { print("Not ready yet"); return; }
if (args.Length == 0) { print(Help); return; }
int port = MultiplayerManager.DefaultPort;
switch (args[0].ToLower())
{
case "help":
case "?":
print(Help);
break;
case "host":
if (args.Length > 1) int.TryParse(args[1], out port);
mp.Host(port);
break;
case "join":
if (args.Length < 2) { print("join <ip> [port]"); return; }
if (args.Length > 2) int.TryParse(args[2], out port);
mp.Join(args[1], port);
break;
case "stop":
case "disconnect":
case "quit":
mp.Disconnect();
print("Disconnected.");
break;
case "connect":
{
string host;
int serverPort;
if (args.Length < 2 || !ServerBrowser.TryParseAddress(args[1], out host, out serverPort))
{
print("connect <host[:port]>");
return;
}
mp.JoinServer(host, serverPort);
break;
}
case "save":
mp.SaveGame();
break;
case "admin":
case "/admin":
mp.OpenAdminMenu();
break;
case "rig":
foreach (string line in mp.DescribeRigs()) print(line);
break;
case "vehicles":
foreach (string line in mp.DescribeVehicles()) print(line);
break;
case "debug":
FsmSync.Debug = !FsmSync.Debug;
print("Sync debug output " + (FsmSync.Debug ? "ON" : "OFF"));
break;
default:
print("Unknown command '" + args[0] + "' - type 'help'");
break;
}
}
}
}