1
0
forked from 0ad/0ad

Clean up cheat handling a bit. Use setter and getter for cheatTimeMultiplier.

This was SVN commit r13526.
This commit is contained in:
leper 2013-07-01 23:46:03 +00:00
parent 78d4a24fba
commit 24b6fb7c3e
6 changed files with 108 additions and 110 deletions

View File

@ -238,7 +238,14 @@ function submitChatInput()
number = cheat.DefaultNumber;
}
Engine.PostNetworkCommand({"type": "cheat", "action": cheat.Action, "number": number, "selected": g_Selection.toList(), "templates": cheat.Templates, "player": Engine.GetPlayerID()});
Engine.PostNetworkCommand({
"type": "cheat",
"action": cheat.Action,
"number": number,
"text": cheat.Type,
"selected": g_Selection.toList(),
"templates": cheat.Templates,
"player": Engine.GetPlayerID()});
isCheat = true;
break;
}

View File

@ -555,11 +555,21 @@ Player.prototype.SetCheatEnabled = function(flag)
this.cheatsEnabled = flag;
};
Player.prototype.GetCheatEnabled = function(flag)
Player.prototype.GetCheatEnabled = function()
{
return this.cheatsEnabled;
};
Player.prototype.SetCheatTimeMultiplier = function(time)
{
this.cheatTimeMultiplier = time;
};
Player.prototype.GetCheatTimeMultiplier = function()
{
return this.cheatTimeMultiplier;
};
Player.prototype.TributeResource = function(player, amounts)
{
var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);

View File

@ -244,7 +244,7 @@ ProductionQueue.prototype.AddBatch = function(templateName, type, count, metadat
if (!template)
return;
var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player);
var time = template.researchTime * cmpPlayer.cheatTimeMultiplier;
var time = template.researchTime * cmpPlayer.GetCheatTimeMultiplier();
var cost = {};
for each (var r in ["food", "wood", "stone", "metal"])
@ -408,7 +408,7 @@ ProductionQueue.prototype.GetBatchTime = function(batchSize)
var batchTimeModifier = ApplyTechModificationsToEntity("ProductionQueue/BatchTimeModifier", +this.template.BatchTimeModifier, this.entity);
// TODO: work out what equation we should use here.
return Math.pow(batchSize, batchTimeModifier) * cmpPlayer.cheatTimeMultiplier;
return Math.pow(batchSize, batchTimeModifier) * cmpPlayer.GetCheatTimeMultiplier();
};
ProductionQueue.prototype.OnOwnershipChanged = function(msg)

View File

@ -250,11 +250,11 @@ ResourceGatherer.prototype.GetTargetGatherRate = function(target)
var rate;
if (type.specific && rates[type.generic+"."+type.specific])
{
rate = rates[type.generic+"."+type.specific] / cmpPlayer.cheatTimeMultiplier;
rate = rates[type.generic+"."+type.specific] / cmpPlayer.GetCheatTimeMultiplier();
}
else if (type.generic && rates[type.generic])
{
rate = rates[type.generic] / cmpPlayer.cheatTimeMultiplier;
rate = rates[type.generic] / cmpPlayer.GetCheatTimeMultiplier();
}
return (rate || 0);

View File

@ -3,25 +3,29 @@
[
{
"Name": "i want pizza",
"Action": "addfood",
"Action": "addresource",
"Type": "food",
"IsNumeric": true,
"DefaultNumber": 1000
},
{
"Name": "bring me my axe",
"Action": "addwood",
"Action": "addresource",
"Type": "wood",
"IsNumeric": true,
"DefaultNumber": 1000
},
{
"Name": "your money or your life",
"Action": "addmetal",
"Action": "addresource",
"Type": "metal",
"IsNumeric": true,
"DefaultNumber": 1000
},
{
"Name": "i see a mountain here",
"Action": "addstone",
"Action": "addresource",
"Type": "stone",
"IsNumeric": true,
"DefaultNumber": 1000
},

View File

@ -1,113 +1,90 @@
function Cheat(input)
{
//computing the neccessary components
var cmpPlayerMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
if (!cmpPlayerMan || input.player < 0)
var cmpPlayerManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
if (!cmpPlayerManager || input.player < 0)
return;
var playerEnt = cmpPlayerMan.GetPlayerByID(input.player);
var playerEnt = cmpPlayerManager.GetPlayerByID(input.player);
if (playerEnt == INVALID_ENTITY)
return;
var cmpPlayer = Engine.QueryInterface(playerEnt, IID_Player);
if (!cmpPlayer)
return;
if (cmpPlayer.GetCheatEnabled())
var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
if (!cmpPlayer.GetCheatEnabled())
{
if (input.action == "addfood")
{
cmpPlayer.AddResource("food", input.number);
}
else if (input.action == "addwood")
{
cmpPlayer.AddResource("wood", input.number);
}
else if (input.action == "addmetal")
{
cmpPlayer.AddResource("metal", input.number);
}
else if (input.action == "addstone")
{
cmpPlayer.AddResource("stone", input.number);
}
else if (input.action == "revealmap")
{
var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
cmpRangeManager.SetLosRevealAll(-1, true);
}
else if (input.action == "maxpopulation")
{
cmpPlayer.popBonuses += 500;
}
else if (input.action == "changemaxpopulation")
{
//this changes the max population limit
cmpPlayer.maxPop = 500;
}
else if (input.action == "convertunit")
{
for each (var ent in input.selected)
{
var cmpOwnership = Engine.QueryInterface(ent, IID_Ownership);
cmpOwnership.SetOwner(cmpPlayer.playerID);
}
}
else if (input.action == "killunits")
{
for each (var ent in input.selected)
{
var cmpHealth = Engine.QueryInterface(ent, IID_Health);
if (cmpHealth)
cmpHealth.Kill();
else
Engine.DestroyEntity(ent);
}
}
else if (input.action == "defeatplayer")
{
var cmpPlayerMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
if (!cmpPlayerMan)
return;
var playerEnt = cmpPlayerMan.GetPlayerByID(input.number);
if (playerEnt == INVALID_ENTITY)
return;
Engine.PostMessage(playerEnt, MT_PlayerDefeated, { "playerId": input.number } );
}
else if (input.action == "createunits")
{
//the player must select a building that can train units for this.
var cmpProductionQueue = Engine.QueryInterface(input.selected[0], IID_ProductionQueue);
if (!cmpProductionQueue)
return;
for (var i = 0; i < input.number; i++)
{
cmpProductionQueue.SpawnUnits (input.templates[i%(input.templates.length)],1, null);
}
}
else if (input.action == "fastactions")
{
if (cmpPlayer.cheatTimeMultiplier == 1)
{
cmpPlayer.cheatTimeMultiplier = 0.01;
}
else
{
cmpPlayer.cheatTimeMultiplier = 1;
}
}
//AI only
else if (input.action == "changespeed")
{
cmpPlayer.cheatTimeMultiplier = input.number;
}
if (cmpPlayer.name.indexOf(" the Cheater")==-1)
cmpPlayer.name = cmpPlayer.name + " the Cheater";
}
else
{
var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
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);
Engine.RegisterGlobal("Cheat", Cheat);