Added ConsoleCommand, and an example to go with it
This commit is contained in:
@@ -77,7 +77,8 @@ namespace OpenRA.Traits
|
|||||||
}
|
}
|
||||||
case "DevGiveCash":
|
case "DevGiveCash":
|
||||||
{
|
{
|
||||||
self.Trait<PlayerResources>().GiveCash(Info.Cash);
|
var amount = order.ExtraData != 0 ? (int)order.ExtraData : Info.Cash;
|
||||||
|
self.Trait<PlayerResources>().GiveCash(amount);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "DevGrowResources":
|
case "DevGrowResources":
|
||||||
|
|||||||
56
OpenRA.Mods.RA/ChatCommands.cs
Normal file
56
OpenRA.Mods.RA/ChatCommands.cs
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation. For more information,
|
||||||
|
* see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using OpenRA.Traits;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.RA
|
||||||
|
{
|
||||||
|
public class ChatCommandsInfo : TraitInfo<ChatCommands> { }
|
||||||
|
|
||||||
|
public class ChatCommands : INotifyChat
|
||||||
|
{
|
||||||
|
public Dictionary<string, IChatCommand> Commands { get; private set; }
|
||||||
|
|
||||||
|
public ChatCommands()
|
||||||
|
{
|
||||||
|
Commands = new Dictionary<string, IChatCommand>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool OnChat(string playername, string message)
|
||||||
|
{
|
||||||
|
if (message.StartsWith("/"))
|
||||||
|
{
|
||||||
|
var name = message.Substring(1).Split(' ')[0].ToLower();
|
||||||
|
var command = Commands.FirstOrDefault(x => x.Key == name);
|
||||||
|
|
||||||
|
if (command.Value != null)
|
||||||
|
command.Value.InvokeCommand(name.ToLower(), message.Substring(1 + name.Length));
|
||||||
|
else
|
||||||
|
Game.Debug("{0} is not a valid command.", name);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RegisterCommand(string name, IChatCommand command)
|
||||||
|
{
|
||||||
|
Commands.Add(name.ToLower(), command);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IChatCommand
|
||||||
|
{
|
||||||
|
void InvokeCommand(string command, string arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
83
OpenRA.Mods.RA/DevCommands.cs
Normal file
83
OpenRA.Mods.RA/DevCommands.cs
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation. For more information,
|
||||||
|
* see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using OpenRA.Graphics;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.RA
|
||||||
|
{
|
||||||
|
public class DevCommandsInfo : TraitInfo<DevCommands> { }
|
||||||
|
|
||||||
|
public class DevCommands : IChatCommand, IWorldLoaded
|
||||||
|
{
|
||||||
|
World world;
|
||||||
|
|
||||||
|
public DevCommands() { }
|
||||||
|
|
||||||
|
public void WorldLoaded(World w, WorldRenderer wr)
|
||||||
|
{
|
||||||
|
world = w;
|
||||||
|
var console = world.WorldActor.Trait<ChatCommands>();
|
||||||
|
var help = world.WorldActor.Trait<HelpCommand>();
|
||||||
|
|
||||||
|
console.RegisterCommand("shroud", this);
|
||||||
|
console.RegisterCommand("give", this);
|
||||||
|
console.RegisterCommand("instabuild", this);
|
||||||
|
console.RegisterCommand("buildrange", this);
|
||||||
|
console.RegisterCommand("power", this);
|
||||||
|
console.RegisterCommand("tech", this);
|
||||||
|
|
||||||
|
help.RegisterHelp("shroud", "enables or disables shroud.");
|
||||||
|
help.RegisterHelp("give", "gives the default or specified amount of money.");
|
||||||
|
help.RegisterHelp("instabuild", "enables or disables instant building");
|
||||||
|
help.RegisterHelp("buildrange", "allows or disallows you to build out of your build-range");
|
||||||
|
help.RegisterHelp("power", "enables or disables infinite power");
|
||||||
|
help.RegisterHelp("tech", "gives or takes the ability to build everything");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void InvokeCommand(string name, string arg)
|
||||||
|
{
|
||||||
|
if (!world.LobbyInfo.GlobalSettings.AllowCheats)
|
||||||
|
{
|
||||||
|
Game.Debug("Cheats are disabled.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (name)
|
||||||
|
{
|
||||||
|
case "give":
|
||||||
|
var order = new Order("DevGiveCash", world.LocalPlayer.PlayerActor, false);
|
||||||
|
var cash = 0;
|
||||||
|
|
||||||
|
if (int.TryParse(arg, out cash))
|
||||||
|
order.ExtraData = (uint)cash;
|
||||||
|
|
||||||
|
Game.Debug("Giving {0} credits to player {1}.", (cash == 0 ? "cheat default" : cash.ToString()), world.LocalPlayer.PlayerName);
|
||||||
|
world.IssueOrder(order);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "shroud": IssueDevCommand(world, "DevShroudDisable"); break;
|
||||||
|
case "instabuild": IssueDevCommand(world, "DevFastBuild"); break;
|
||||||
|
case "buildrange": IssueDevCommand(world, "DevBuildAnywhere"); break;
|
||||||
|
case "power": IssueDevCommand(world, "DevUnlimitedPower"); break;
|
||||||
|
case "tech": IssueDevCommand(world, "DevEnableTech"); break;
|
||||||
|
case "support": IssueDevCommand(world, "DevFastCharge"); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void IssueDevCommand(World world, string command)
|
||||||
|
{
|
||||||
|
world.IssueOrder(new Order(command, world.LocalPlayer.PlayerActor, false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
59
OpenRA.Mods.RA/HelpCommand.cs
Normal file
59
OpenRA.Mods.RA/HelpCommand.cs
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation. For more information,
|
||||||
|
* see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using OpenRA.Graphics;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.RA
|
||||||
|
{
|
||||||
|
public class HelpCommandInfo : TraitInfo<HelpCommand> { }
|
||||||
|
|
||||||
|
public class HelpCommand : IChatCommand, IWorldLoaded
|
||||||
|
{
|
||||||
|
World world;
|
||||||
|
ChatCommands console;
|
||||||
|
Dictionary<string, string> helpDescriptions;
|
||||||
|
|
||||||
|
public HelpCommand()
|
||||||
|
{
|
||||||
|
helpDescriptions = new Dictionary<string, string>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void WorldLoaded(World w, WorldRenderer wr)
|
||||||
|
{
|
||||||
|
world = w;
|
||||||
|
console = world.WorldActor.Trait<ChatCommands>();
|
||||||
|
|
||||||
|
console.RegisterCommand("help", this);
|
||||||
|
RegisterHelp("help", "provides useful info about various commands");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void InvokeCommand(string name, string arg)
|
||||||
|
{
|
||||||
|
Game.Debug("Here are the available commands:");
|
||||||
|
|
||||||
|
foreach (var key in console.Commands.Keys)
|
||||||
|
{
|
||||||
|
var description = "";
|
||||||
|
if (!helpDescriptions.TryGetValue(key, out description))
|
||||||
|
description = "no description available.";
|
||||||
|
|
||||||
|
Game.Debug("{0}: {1}", key, description);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RegisterHelp(string name, string description)
|
||||||
|
{
|
||||||
|
helpDescriptions.Add(name, description);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -521,6 +521,9 @@
|
|||||||
<Compile Include="Scripting\Global\CameraGlobal.cs" />
|
<Compile Include="Scripting\Global\CameraGlobal.cs" />
|
||||||
<Compile Include="Scripting\Properties\ChronosphereProperties.cs" />
|
<Compile Include="Scripting\Properties\ChronosphereProperties.cs" />
|
||||||
<Compile Include="Scripting\ScriptInvulnerable.cs" />
|
<Compile Include="Scripting\ScriptInvulnerable.cs" />
|
||||||
|
<Compile Include="DevCommands.cs" />
|
||||||
|
<Compile Include="HelpCommand.cs" />
|
||||||
|
<Compile Include="ChatCommands.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj">
|
<ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj">
|
||||||
|
|||||||
@@ -48,4 +48,5 @@ namespace OpenRA.Mods.RA
|
|||||||
public interface INotifyTransform { void OnTransform(Actor self); }
|
public interface INotifyTransform { void OnTransform(Actor self); }
|
||||||
public interface INotifyTransformed { void OnTransformed(Actor toActor); }
|
public interface INotifyTransformed { void OnTransformed(Actor toActor); }
|
||||||
public interface INotifyAttack { void Attacking(Actor self, Target target, Armament a, Barrel barrel); }
|
public interface INotifyAttack { void Attacking(Actor self, Target target, Armament a, Barrel barrel); }
|
||||||
|
public interface INotifyChat { bool OnChat(string from, string message); }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#region Copyright & License Information
|
#region Copyright & License Information
|
||||||
/*
|
/*
|
||||||
* Copyright 2013 The OpenRA Developers (see AUTHORS)
|
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||||
* This file is part of OpenRA, which is free software. It is made
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
* available to you under the terms of the GNU General Public License
|
* available to you under the terms of the GNU General Public License
|
||||||
* as published by the Free Software Foundation. For more information,
|
* as published by the Free Software Foundation. For more information,
|
||||||
@@ -8,10 +8,13 @@
|
|||||||
*/
|
*/
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using OpenRA.Network;
|
using OpenRA.Network;
|
||||||
using OpenRA.Widgets;
|
using OpenRA.Widgets;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
using OpenRA.Graphics;
|
||||||
|
|
||||||
namespace OpenRA.Mods.RA.Widgets.Logic
|
namespace OpenRA.Mods.RA.Widgets.Logic
|
||||||
{
|
{
|
||||||
@@ -25,11 +28,15 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
readonly ContainerWidget chatTemplate;
|
readonly ContainerWidget chatTemplate;
|
||||||
readonly TextFieldWidget chatText;
|
readonly TextFieldWidget chatText;
|
||||||
|
|
||||||
|
readonly List<INotifyChat> chatTraits;
|
||||||
|
|
||||||
bool teamChat;
|
bool teamChat;
|
||||||
|
|
||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public IngameChatLogic(Widget widget, OrderManager orderManager, World world)
|
public IngameChatLogic(Widget widget, OrderManager orderManager, World world)
|
||||||
{
|
{
|
||||||
|
chatTraits = world.WorldActor.TraitsImplementing<INotifyChat>().ToList();
|
||||||
|
|
||||||
var players = world.Players.Where(p => p != world.LocalPlayer && !p.NonCombatant && !p.IsBot);
|
var players = world.Players.Where(p => p != world.LocalPlayer && !p.NonCombatant && !p.IsBot);
|
||||||
var disableTeamChat = world.LocalPlayer == null || world.LobbyInfo.IsSinglePlayer || !players.Any(p => p.IsAlliedWith(world.LocalPlayer));
|
var disableTeamChat = world.LocalPlayer == null || world.LobbyInfo.IsSinglePlayer || !players.Any(p => p.IsAlliedWith(world.LocalPlayer));
|
||||||
teamChat = !disableTeamChat;
|
teamChat = !disableTeamChat;
|
||||||
@@ -117,6 +124,9 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
|
|
||||||
public void AddChatLine(Color c, string from, string text)
|
public void AddChatLine(Color c, string from, string text)
|
||||||
{
|
{
|
||||||
|
if (chatTraits != null && !chatTraits.All(x => x.OnChat(from, text)))
|
||||||
|
return;
|
||||||
|
|
||||||
chatOverlayDisplay.AddLine(c, from, text);
|
chatOverlayDisplay.AddLine(c, from, text);
|
||||||
|
|
||||||
var template = chatTemplate.Clone();
|
var template = chatTemplate.Clone();
|
||||||
@@ -154,4 +164,4 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
Sound.PlayNotification(null, "Sounds", "ChatLine", null);
|
Sound.PlayNotification(null, "Sounds", "ChatLine", null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
World:
|
World:
|
||||||
|
GameConsole:
|
||||||
ScreenMap:
|
ScreenMap:
|
||||||
ActorMap:
|
ActorMap:
|
||||||
LoadWidgetAtGameStart:
|
LoadWidgetAtGameStart:
|
||||||
|
|||||||
Reference in New Issue
Block a user