Locate devmode code largely in the trait, reduce exploitability.

This commit is contained in:
alzeih
2010-07-26 14:58:23 +12:00
parent 10c7674433
commit 30241ddccc
7 changed files with 85 additions and 74 deletions

View File

@@ -20,13 +20,12 @@ namespace OpenRA.GameRules
public class UserSettings public class UserSettings
{ {
// Debug settings // Debug settings
public bool UnitDebug = false;
public bool PathDebug = false;
public bool PerfDebug = false; public bool PerfDebug = false;
public bool IndexDebug = false;
public bool RecordSyncReports = true; public bool RecordSyncReports = true;
public bool ShowGameTimer = true; public bool ShowGameTimer = true;
public bool DeveloperMode = false; public bool DeveloperMode = false;
public bool UnitDebug = false;
public bool IndexDebug = false;
// Window settings // Window settings
public WindowMode WindowMode = WindowMode.PseudoFullscreen; public WindowMode WindowMode = WindowMode.PseudoFullscreen;

View File

@@ -172,7 +172,7 @@ namespace OpenRA.Graphics
Game.Renderer.LineRenderer.DrawLine(xY, xY + new float2(0, -4), c, c); Game.Renderer.LineRenderer.DrawLine(xY, xY + new float2(0, -4), c, c);
Game.Renderer.LineRenderer.DrawLine(XY, XY + new float2(-4, 0), c, c); Game.Renderer.LineRenderer.DrawLine(XY, XY + new float2(-4, 0), c, c);
Game.Renderer.LineRenderer.DrawLine(XY, XY + new float2(0, -4), c, c); Game.Renderer.LineRenderer.DrawLine(XY, XY + new float2(0, -4), c, c);
} }
public void DrawLocus(Color c, int2[] cells) public void DrawLocus(Color c, int2[] cells)
{ {

View File

@@ -16,6 +16,8 @@ namespace OpenRA.Traits
public int Cash = 20000; public int Cash = 20000;
public bool FastBuild = false; public bool FastBuild = false;
public bool FastCharge = false; public bool FastCharge = false;
public bool DisableShroud = false;
public bool PathDebug = false;
public object Create (ActorInitializer init) { return new DeveloperMode(this); } public object Create (ActorInitializer init) { return new DeveloperMode(this); }
} }
@@ -26,31 +28,76 @@ namespace OpenRA.Traits
[Sync] [Sync]
public bool FastCharge; public bool FastCharge;
public bool FastBuild; public bool FastBuild;
public bool DisableShroud;
public bool PathDebug;
public DeveloperMode(DeveloperModeInfo info) public DeveloperMode(DeveloperModeInfo info)
{ {
Info = info; Info = info;
FastBuild = Info.FastBuild; FastBuild = Info.FastBuild;
FastCharge = Info.FastCharge; FastCharge = Info.FastCharge;
DisableShroud = Info.DisableShroud;
PathDebug = Info.PathDebug;
} }
public void ResolveOrder (Actor self, Order order) public void ResolveOrder (Actor self, Order order)
{ {
if (!Game.LobbyInfo.GlobalSettings.AllowCheats) return;
switch(order.OrderString) switch(order.OrderString)
{ {
case "DevModeFastCharge": case "DevFastCharge":
{ {
FastCharge ^= true; FastCharge ^= true;
break; IssueNotification(FastCharge);
} break;
case "DevModeFastBuild": }
{ case "DevFastBuild":
FastBuild ^= true; {
break; FastBuild ^= true;
} IssueNotification(FastBuild);
break;
}
case "DevGiveCash":
{
self.traits.Get<PlayerResources>().GiveCash(Info.Cash);
IssueNotification(true);
break;
}
case "DevShroud":
{
DisableShroud ^= true;
Game.world.LocalPlayer.Shroud.Disabled = DisableShroud;
IssueNotification(DisableShroud);
break;
}
case "DevPathDebug":
{
PathDebug ^= true;
IssueNotification(PathDebug);
break;
}
case "DevIndexDebug":
{
Game.Settings.IndexDebug ^= true;
IssueNotification(Game.Settings.IndexDebug);
break;
}
case "DevUnitDebug":
{
Game.Settings.UnitDebug ^= true;
IssueNotification(Game.Settings.UnitDebug);
break;
}
} }
} }
void IssueNotification(bool enabled)
{
if (enabled)
Game.IssueOrder(Order.Chat("I used a devmode option"));
}
} }
} }

View File

@@ -22,7 +22,7 @@ namespace OpenRA.Traits
public object Create(ActorInitializer init) { return new PlayerResources(init.self); } public object Create(ActorInitializer init) { return new PlayerResources(init.self); }
} }
public class PlayerResources : ITick, IResolveOrder public class PlayerResources : ITick
{ {
Player Owner; Player Owner;
int AdviceInterval; int AdviceInterval;
@@ -187,22 +187,5 @@ namespace OpenRA.Traits
TickPower(); TickPower();
TickOre(self); TickOre(self);
} }
public void ResolveOrder (Actor self, Order order)
{
switch (order.OrderString)
{
case "DevModeGiveCash":
{
if (!Game.LobbyInfo.GlobalSettings.AllowCheats) break;
self.World.AddFrameEndTask( w =>
{
var amt = order.Subject.Info.Traits.Get<DeveloperModeInfo>().Cash;
GiveCash(amt);
});
}
break;
}
}
} }
} }

View File

@@ -101,7 +101,7 @@ namespace OpenRA.Traits
if (unit == null || ! unit.Traits.Contains<BuildableInfo>()) if (unit == null || ! unit.Traits.Contains<BuildableInfo>())
return 0; return 0;
if (self.traits.Get<DeveloperMode>().FastBuild) return 0; if (Game.LobbyInfo.GlobalSettings.AllowCheats && self.traits.Get<DeveloperMode>().FastBuild) return 0;
var ui = unit.Traits.Get<BuildableInfo>(); var ui = unit.Traits.Get<BuildableInfo>();
var time = ui.Cost var time = ui.Cost
* self.Owner.PlayerActor.Info.Traits.Get<ProductionQueueInfo>().BuildSpeed /* todo: country-specific build speed bonus */ * self.Owner.PlayerActor.Info.Traits.Get<ProductionQueueInfo>().BuildSpeed /* todo: country-specific build speed bonus */

View File

@@ -69,7 +69,7 @@ namespace OpenRA.Traits
if (IsAvailable && (!Info.RequiresPower || IsPowered())) if (IsAvailable && (!Info.RequiresPower || IsPowered()))
{ {
if (self.traits.Get<DeveloperMode>().FastCharge) RemainingTime = 0; if (Game.LobbyInfo.GlobalSettings.AllowCheats && self.traits.Get<DeveloperMode>().FastCharge) RemainingTime = 0;
if (RemainingTime > 0) --RemainingTime; if (RemainingTime > 0) --RemainingTime;
if (!notifiedCharging) if (!notifiedCharging)
{ {

View File

@@ -41,78 +41,60 @@ namespace OpenRA.Widgets.Delegates
}; };
devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_CHECKBOX_SHROUD").Checked = devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_CHECKBOX_SHROUD").Checked =
() => Game.world.LocalPlayer.Shroud.Disabled; () => Game.world.LocalPlayer.PlayerActor.traits.Get<DeveloperMode>().DisableShroud;
devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_CHECKBOX_SHROUD").OnMouseDown = mi => devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_CHECKBOX_SHROUD").OnMouseDown = mi =>
{ {
if (!Game.LobbyInfo.GlobalSettings.AllowCheats) return true; Game.IssueOrder(new Order("DevShroud", Game.world.LocalPlayer.PlayerActor));
Game.world.LocalPlayer.Shroud.Disabled ^= true;
TriggerCheatingMessage();
return true; return true;
}; };
devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_CHECKBOX_UNITDEBUG").Checked = devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_CHECKBOX_UNITDEBUG").Checked =
() => {return Game.Settings.UnitDebug;}; () => Game.Settings.UnitDebug;
devmodeBG.GetWidget("SETTINGS_CHECKBOX_UNITDEBUG").OnMouseDown = mi => devmodeBG.GetWidget("SETTINGS_CHECKBOX_UNITDEBUG").OnMouseDown = mi =>
{ {
if (!Game.LobbyInfo.GlobalSettings.AllowCheats) return true; Game.IssueOrder(new Order("DevUnitDebug", Game.world.LocalPlayer.PlayerActor));
Game.Settings.UnitDebug ^= true;
TriggerCheatingMessage();
return true; return true;
}; };
devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_CHECKBOX_PATHDEBUG").Checked = devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_CHECKBOX_PATHDEBUG").Checked =
() => {return Game.Settings.PathDebug;}; () => Game.world.LocalPlayer.PlayerActor.traits.Get<DeveloperMode>().PathDebug;
devmodeBG.GetWidget("SETTINGS_CHECKBOX_PATHDEBUG").OnMouseDown = mi => devmodeBG.GetWidget("SETTINGS_CHECKBOX_PATHDEBUG").OnMouseDown = mi =>
{ {
if (!Game.LobbyInfo.GlobalSettings.AllowCheats) return true; Game.IssueOrder(new Order("DevPathDebug", Game.world.LocalPlayer.PlayerActor));
Game.Settings.PathDebug ^= true;
TriggerCheatingMessage();
return true; return true;
}; };
devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_CHECKBOX_INDEXDEBUG").Checked = devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_CHECKBOX_INDEXDEBUG").Checked =
() => {return Game.Settings.IndexDebug;}; () => Game.Settings.IndexDebug;
devmodeBG.GetWidget("SETTINGS_CHECKBOX_INDEXDEBUG").OnMouseDown = mi => devmodeBG.GetWidget("SETTINGS_CHECKBOX_INDEXDEBUG").OnMouseDown = mi =>
{ {
if (!Game.LobbyInfo.GlobalSettings.AllowCheats) return true; Game.IssueOrder(new Order("DevIndexDebug", Game.world.LocalPlayer.PlayerActor));
Game.Settings.IndexDebug ^= true;
TriggerCheatingMessage();
return true; return true;
}; };
devmodeBG.GetWidget<ButtonWidget>("SETTINGS_GIVE_CASH").OnMouseUp = mi => devmodeBG.GetWidget<ButtonWidget>("SETTINGS_GIVE_CASH").OnMouseUp = mi =>
{ {
Game.IssueOrder(new Order("DevModeGiveCash", Game.world.LocalPlayer.PlayerActor)); Game.IssueOrder(new Order("DevGiveCash", Game.world.LocalPlayer.PlayerActor));
TriggerCheatingMessage();
return true; return true;
}; };
devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_BUILD_SPEED").OnMouseDown = mi =>
{
Game.IssueOrder(new Order("DevModeFastBuild", Game.world.LocalPlayer.PlayerActor));
TriggerCheatingMessage();
return true;
};
devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_BUILD_SPEED").Checked = devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_BUILD_SPEED").Checked =
() => Game.world.LocalPlayer.PlayerActor.traits.Get<DeveloperMode>().FastBuild; () => Game.world.LocalPlayer.PlayerActor.traits.Get<DeveloperMode>().FastBuild;
devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_BUILD_SPEED").OnMouseDown = mi =>
devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_CHARGE_TIME").OnMouseDown = mi =>
{ {
TriggerCheatingMessage(); Game.IssueOrder(new Order("DevFastBuild", Game.world.LocalPlayer.PlayerActor));
Game.IssueOrder(new Order("DevModeFastCharge", Game.world.LocalPlayer.PlayerActor));
return true; return true;
}; };
devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_CHARGE_TIME").Checked = devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_CHARGE_TIME").Checked =
() => Game.world.LocalPlayer.PlayerActor.traits.Get<DeveloperMode>().FastCharge; () => Game.world.LocalPlayer.PlayerActor.traits.Get<DeveloperMode>().FastCharge;
devmodeBG.GetWidget<CheckboxWidget>("SETTINGS_CHARGE_TIME").OnMouseDown = mi =>
{
Game.IssueOrder(new Order("DevFastCharge", Game.world.LocalPlayer.PlayerActor));
return true;
};
devModeButton.IsVisible = () => { return Game.LobbyInfo.GlobalSettings.AllowCheats; };
devModeButton.IsVisible = () => { return Game.Settings.DeveloperMode; };
}
void TriggerCheatingMessage()
{
var order = Order.Chat("I used a developer mode option");
Game.IssueOrder(order);
} }
} }
} }