0ad/binaries/data/mods/public/simulation/helpers/Cheat.js
leper f6e0c4c5a4 Split up cheats into multiple files. Patch by lsdh/ldsh. Fixes #2019.
Replace buggy hasAllies with the inlined check if we have a team at all.
Fix setting of starting resources (broken in 58fa0c7c58).

This was SVN commit r13620.
2013-07-31 22:22:12 +00:00

91 lines
2.7 KiB
JavaScript

function Cheat(input)
{
var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
if (!cmpPlayerManager || input.player < 0)
return;
var playerEnt = cmpPlayerManager.GetPlayerByID(input.player);
if (playerEnt == INVALID_ENTITY)
return;
var cmpPlayer = Engine.QueryInterface(playerEnt, IID_Player);
if (!cmpPlayer)
return;
var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
if (!cmpPlayer.GetCheatsEnabled())
{
cmpGuiInterface.PushNotification({"type": "chat", "player": input.player, "message": "Cheats are disbaled in this match"});
return;
}
switch(input.action)
{
case "addresource":
cmpPlayer.AddResource(input.text, input.number);
break;
case "revealmap":
var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
cmpRangeManager.SetLosRevealAll(-1, true);
break;
case "maxpopulation":
cmpPlayer.popBonuses += 500;
break;
case "changemaxpopulation":
cmpPlayer.maxPop = 500;
break;
case "convertunit":
for each (var ent in input.selected)
{
var cmpOwnership = Engine.QueryInterface(ent, IID_Ownership);
cmpOwnership.SetOwner(cmpPlayer.GetPlayerID());
}
break;
case "killunits":
for each (var ent in input.selected)
{
var cmpHealth = Engine.QueryInterface(ent, IID_Health);
if (cmpHealth)
cmpHealth.Kill();
else
Engine.DestroyEntity(ent);
}
break;
case "defeatplayer":
var playerEnt = cmpPlayerManager.GetPlayerByID(input.number);
if (playerEnt == INVALID_ENTITY)
return;
Engine.PostMessage(playerEnt, MT_PlayerDefeated, { "playerId": input.number } );
break;
case "createunits":
if (!input.selected[0])
{
cmpGuiInterface.PushNotification({"type": "notification", "player": input.player, "message": "You need to select a building that trains units."});
return;
}
var cmpProductionQueue = Engine.QueryInterface(input.selected[0], IID_ProductionQueue);
if (!cmpProductionQueue)
{
cmpGuiInterface.PushNotification({"type": "notification", "player": input.player, "message": "You need to select a building that trains units."});
return;
}
for (var i = 0; i < input.number; i++)
cmpProductionQueue.SpawnUnits (input.templates[i%(input.templates.length)],1, null);
break;
case "fastactions":
cmpPlayer.SetCheatTimeMultiplier((cmpPlayer.GetCheatTimeMultiplier() == 1) ? 0.01 : 1);
break;
case "changespeed":
cmpPlayer.SetCheatTimeMultiplier(input.number);
break;
default:
warn("Cheat '" + input.action + "' is not implemented");
break;
}
// Brand the player
if (cmpPlayer.name.indexOf(" the Cheater") == -1)
cmpPlayer.name = cmpPlayer.name + " the Cheater";
}
Engine.RegisterGlobal("Cheat", Cheat);