forked from mirrors/0ad
@@ -1,7 +1,7 @@
|
|||||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Constants
|
// Constants
|
||||||
const DEFAULT_NETWORKED_MAP = "Oasis XI";
|
const DEFAULT_NETWORKED_MAP = "Oasis XI";
|
||||||
const DEFAULT_OFFLINE_MAP = "Punjab III";
|
const DEFAULT_OFFLINE_MAP = "Punjab 3";
|
||||||
|
|
||||||
// TODO: Move these somewhere like simulation\data\game_types.json, Atlas needs them too
|
// TODO: Move these somewhere like simulation\data\game_types.json, Atlas needs them too
|
||||||
const VICTORY_TEXT = ["Conquest", "None"];
|
const VICTORY_TEXT = ["Conquest", "None"];
|
||||||
@@ -179,6 +179,16 @@ function initMain()
|
|||||||
updateGameAttributes();
|
updateGameAttributes();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
getGUIObjectByName("enableCheats").onPress = function()
|
||||||
|
{ // Update attributes so other players can see change
|
||||||
|
g_GameAttributes.settings.CheatsEnabled = this.checked;
|
||||||
|
|
||||||
|
if (!g_IsInGuiUpdate)
|
||||||
|
{
|
||||||
|
updateGameAttributes();
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -207,13 +217,27 @@ function initMain()
|
|||||||
getGUIObjectByName("startGame").enabled = false;
|
getGUIObjectByName("startGame").enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up offline-only bits:
|
// Set up multiplayer/singleplayer bits:
|
||||||
if (!g_IsNetworked)
|
if (!g_IsNetworked)
|
||||||
{
|
{
|
||||||
getGUIObjectByName("chatPanel").hidden = true;
|
getGUIObjectByName("chatPanel").hidden = true;
|
||||||
|
getGUIObjectByName("enableCheats").checked = true;
|
||||||
|
g_GameAttributes.settings.CheatsEnabled = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getGUIObjectByName("enableCheatsDesc").hidden = false;
|
||||||
|
getGUIObjectByName("enableCheats").checked = false;
|
||||||
|
g_GameAttributes.settings.CheatsEnabled = false;
|
||||||
|
if (g_IsController)
|
||||||
|
{
|
||||||
|
getGUIObjectByName("enableCheats").hidden = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getGUIObjectByName("enableCheatsText").hidden = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Settings for all possible player slots
|
// Settings for all possible player slots
|
||||||
var boxSpacing = 32;
|
var boxSpacing = 32;
|
||||||
for (var i = 0; i < MAX_PLAYERS; ++i)
|
for (var i = 0; i < MAX_PLAYERS; ++i)
|
||||||
@@ -245,12 +269,13 @@ function initMain()
|
|||||||
updateGameAttributes();
|
updateGameAttributes();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// Set events
|
// Set events
|
||||||
var civ = getGUIObjectByName("playerCiv["+i+"]");
|
var civ = getGUIObjectByName("playerCiv["+i+"]");
|
||||||
civ.onSelectionChange = function()
|
civ.onSelectionChange = function()
|
||||||
{ // Update civ
|
{ // Update civ
|
||||||
if (this.selected != -1)
|
if ((this.selected != -1)&&(g_GameAttributes.mapType !== "scenario"))
|
||||||
{
|
{
|
||||||
g_GameAttributes.settings.PlayerData[playerSlot].Civ = this.list_data[this.selected];
|
g_GameAttributes.settings.PlayerData[playerSlot].Civ = this.list_data[this.selected];
|
||||||
}
|
}
|
||||||
@@ -617,7 +642,8 @@ function selectMapType(type)
|
|||||||
g_GameAttributes.mapPath = "maps/random/";
|
g_GameAttributes.mapPath = "maps/random/";
|
||||||
g_GameAttributes.settings = {
|
g_GameAttributes.settings = {
|
||||||
PlayerData: g_DefaultPlayerData.slice(0, 4),
|
PlayerData: g_DefaultPlayerData.slice(0, 4),
|
||||||
Seed: Math.floor(Math.random() * 65536)
|
Seed: Math.floor(Math.random() * 65536),
|
||||||
|
CheatsEnabled: g_GameAttributes.settings.CheatsEnabled
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -801,16 +827,19 @@ function onGameAttributesChange()
|
|||||||
var victoryCondition = getGUIObjectByName("victoryCondition");
|
var victoryCondition = getGUIObjectByName("victoryCondition");
|
||||||
var lockTeams = getGUIObjectByName("lockTeams");
|
var lockTeams = getGUIObjectByName("lockTeams");
|
||||||
var mapSize = getGUIObjectByName("mapSize");
|
var mapSize = getGUIObjectByName("mapSize");
|
||||||
|
var enableCheats = getGUIObjectByName("enableCheats");
|
||||||
|
|
||||||
var numPlayersText= getGUIObjectByName("numPlayersText");
|
var numPlayersText= getGUIObjectByName("numPlayersText");
|
||||||
var mapSizeText = getGUIObjectByName("mapSizeText");
|
var mapSizeText = getGUIObjectByName("mapSizeText");
|
||||||
var revealMapText = getGUIObjectByName("revealMapText");
|
var revealMapText = getGUIObjectByName("revealMapText");
|
||||||
var victoryConditionText = getGUIObjectByName("victoryConditionText");
|
var victoryConditionText = getGUIObjectByName("victoryConditionText");
|
||||||
var lockTeamsText = getGUIObjectByName("lockTeamsText");
|
var lockTeamsText = getGUIObjectByName("lockTeamsText");
|
||||||
|
var enableCheatsText = getGUIObjectByName("enableCheatsText");
|
||||||
|
|
||||||
var sizeIdx = (g_MapSizes.tiles.indexOf(mapSettings.Size) != -1 ? g_MapSizes.tiles.indexOf(mapSettings.Size) : g_MapSizes.default);
|
var sizeIdx = (g_MapSizes.tiles.indexOf(mapSettings.Size) != -1 ? g_MapSizes.tiles.indexOf(mapSettings.Size) : g_MapSizes.default);
|
||||||
var victoryIdx = (VICTORY_DATA.indexOf(mapSettings.GameType) != -1 ? VICTORY_DATA.indexOf(mapSettings.GameType) : VICTORY_DEFAULTIDX);
|
var victoryIdx = (VICTORY_DATA.indexOf(mapSettings.GameType) != -1 ? VICTORY_DATA.indexOf(mapSettings.GameType) : VICTORY_DEFAULTIDX);
|
||||||
|
enableCheats.checked = (g_GameAttributes.settings.CheatsEnabled === undefined || !g_GameAttributes.settings.CheatsEnabled ? false : true)
|
||||||
|
enableCheatsText.caption = (enableCheats.checked ? "Yes" : "No");
|
||||||
// Handle map type specific logic
|
// Handle map type specific logic
|
||||||
switch (g_GameAttributes.mapType)
|
switch (g_GameAttributes.mapType)
|
||||||
{
|
{
|
||||||
@@ -915,7 +944,7 @@ function onGameAttributesChange()
|
|||||||
var pTeam = getGUIObjectByName("playerTeam["+i+"]");
|
var pTeam = getGUIObjectByName("playerTeam["+i+"]");
|
||||||
var pTeamText = getGUIObjectByName("playerTeamText["+i+"]");
|
var pTeamText = getGUIObjectByName("playerTeamText["+i+"]");
|
||||||
var pColor = getGUIObjectByName("playerColour["+i+"]");
|
var pColor = getGUIObjectByName("playerColour["+i+"]");
|
||||||
|
|
||||||
// Player data / defaults
|
// Player data / defaults
|
||||||
var pData = mapSettings.PlayerData ? mapSettings.PlayerData[i] : {};
|
var pData = mapSettings.PlayerData ? mapSettings.PlayerData[i] : {};
|
||||||
var pDefs = g_DefaultPlayerData ? g_DefaultPlayerData[i] : {};
|
var pDefs = g_DefaultPlayerData ? g_DefaultPlayerData[i] : {};
|
||||||
@@ -927,7 +956,7 @@ function onGameAttributesChange()
|
|||||||
|
|
||||||
var team = getSetting(pData, pDefs, "Team");
|
var team = getSetting(pData, pDefs, "Team");
|
||||||
var civ = getSetting(pData, pDefs, "Civ");
|
var civ = getSetting(pData, pDefs, "Civ");
|
||||||
|
|
||||||
// For clients or scenarios, hide some player dropdowns
|
// For clients or scenarios, hide some player dropdowns
|
||||||
if (!g_IsController || g_GameAttributes.mapType == "scenario")
|
if (!g_IsController || g_GameAttributes.mapType == "scenario")
|
||||||
{
|
{
|
||||||
@@ -935,7 +964,6 @@ function onGameAttributesChange()
|
|||||||
pCiv.hidden = true;
|
pCiv.hidden = true;
|
||||||
pTeamText.hidden = false;
|
pTeamText.hidden = false;
|
||||||
pTeam.hidden = true;
|
pTeam.hidden = true;
|
||||||
|
|
||||||
// Set text values
|
// Set text values
|
||||||
if (civ == "random")
|
if (civ == "random")
|
||||||
{
|
{
|
||||||
@@ -953,7 +981,6 @@ function onGameAttributesChange()
|
|||||||
pCiv.hidden = false;
|
pCiv.hidden = false;
|
||||||
pTeamText.hidden = true;
|
pTeamText.hidden = true;
|
||||||
pTeam.hidden = false;
|
pTeam.hidden = false;
|
||||||
|
|
||||||
// Set dropdown values
|
// Set dropdown values
|
||||||
pCiv.selected = (civ ? pCiv.list_data.indexOf(civ) : 0);
|
pCiv.selected = (civ ? pCiv.list_data.indexOf(civ) : 0);
|
||||||
pTeam.selected = (team !== undefined && team >= 0) ? team+1 : 0;
|
pTeam.selected = (team !== undefined && team >= 0) ? team+1 : 0;
|
||||||
|
|||||||
@@ -120,6 +120,19 @@
|
|||||||
|
|
||||||
</object>
|
</object>
|
||||||
|
|
||||||
|
<object size="20 463.8 11% 615" name="enableCheatsDesc" hidden="true">
|
||||||
|
<object size="0 0 100% 32">
|
||||||
|
<object size="0 0 100% 100%" type="text" style="RightLabelText">Cheats:</object>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
|
||||||
|
<object size="10.9% 463.8 28% 615">
|
||||||
|
<object size="0 0 100% 32">
|
||||||
|
<object name="enableCheatsText" size="0 0 100% 100%" type="text" style="LeftLabelText" hidden="true"/>
|
||||||
|
<object name="enableCheats" size="0 50%-8 16 50%+8" type="checkbox" style="StoneCrossBox" hidden="true" tooltip_style="onscreenToolTip" tooltip="Toggle the usability of cheats."/>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
|
||||||
<!-- Map Preview -->
|
<!-- Map Preview -->
|
||||||
<object type="image" sprite="BackgroundIndentFillDark" name="gamePreviewBox" size="100%-425 58 100%-25 358">
|
<object type="image" sprite="BackgroundIndentFillDark" name="gamePreviewBox" size="100%-425 58 100%-25 358">
|
||||||
<object type="image" sprite="snMapPreview" size="1 1 399 299" name="mapPreview"/>
|
<object type="image" sprite="snMapPreview" size="1 1 399 299" name="mapPreview"/>
|
||||||
@@ -143,8 +156,9 @@
|
|||||||
<object size="0 60 100% 88">
|
<object size="0 60 100% 88">
|
||||||
<object size="0 0 100% 100%" type="text" style="RightLabelText">Victory condition:</object>
|
<object size="0 0 100% 100%" type="text" style="RightLabelText">Victory condition:</object>
|
||||||
</object>
|
</object>
|
||||||
|
|
||||||
</object>
|
</object>
|
||||||
|
|
||||||
<!-- Second Column -->
|
<!-- Second Column -->
|
||||||
<object size="41% 0 94% 50%">
|
<object size="41% 0 94% 50%">
|
||||||
|
|
||||||
@@ -173,6 +187,7 @@
|
|||||||
</object>
|
</object>
|
||||||
|
|
||||||
<!-- Third Column -->
|
<!-- Third Column -->
|
||||||
|
|
||||||
<object size="0 40% 42.3% 100%">
|
<object size="0 40% 42.3% 100%">
|
||||||
<object size="0 0 100% 32">
|
<object size="0 0 100% 32">
|
||||||
<object size="0 0 100% 100%" type="text" style="RightLabelText">Reveal map:</object>
|
<object size="0 0 100% 100%" type="text" style="RightLabelText">Reveal map:</object>
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ const NOTIFICATION_TIMEOUT = 10000;
|
|||||||
const MAX_NUM_NOTIFICATION_LINES = 3;
|
const MAX_NUM_NOTIFICATION_LINES = 3;
|
||||||
var notifications = [];
|
var notifications = [];
|
||||||
var notificationsTimers = [];
|
var notificationsTimers = [];
|
||||||
|
var cheatList = parseJSONData("simulation/data/cheats.json").Cheats;
|
||||||
|
|
||||||
// Notifications
|
// Notifications
|
||||||
function handleNotifications()
|
function handleNotifications()
|
||||||
@@ -174,13 +175,37 @@ function submitChatInput()
|
|||||||
{
|
{
|
||||||
var input = getGUIObjectByName("chatInput");
|
var input = getGUIObjectByName("chatInput");
|
||||||
var text = input.caption;
|
var text = input.caption;
|
||||||
|
var isCheat = false;
|
||||||
if (text.length)
|
if (text.length)
|
||||||
{
|
{
|
||||||
if (g_IsNetworked)
|
var n = g_PlayerAssignments["local"].player;
|
||||||
Engine.SendNetworkChat(text);
|
for (var i = 0; i < cheatList.length; i++)
|
||||||
else
|
{
|
||||||
addChatMessage({ "type": "message", "guid": "local", "text": text });
|
if (text.indexOf(cheatList[i].Name)>-1)
|
||||||
|
{
|
||||||
|
if (cheatList[i].IsNumeric)
|
||||||
|
{
|
||||||
|
var number = text.substr(cheatList[i].Name.length+1, text.length-1).valueOf();
|
||||||
|
if (!(number > 0))
|
||||||
|
number=cheatList[i].DefaultNumber;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var number = undefined;
|
||||||
|
}
|
||||||
|
Engine.PostNetworkCommand({"type": "cheat", "action": cheatList[i].Action, "number": number , "selected": g_Selection.toList(), "templates": cheatList[i].Templates, "player": n});
|
||||||
|
isCheat = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isCheat)
|
||||||
|
{
|
||||||
|
if (g_IsNetworked)
|
||||||
|
Engine.SendNetworkChat(text);
|
||||||
|
else
|
||||||
|
addChatMessage({ "type": "message", "guid": "local", "text": text });
|
||||||
|
}
|
||||||
input.caption = ""; // Clear chat input
|
input.caption = ""; // Clear chat input
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,9 +241,9 @@ function addChatMessage(msg, playerAssignments)
|
|||||||
}
|
}
|
||||||
|
|
||||||
var message = escapeText(msg.text);
|
var message = escapeText(msg.text);
|
||||||
|
|
||||||
var formatted;
|
var formatted;
|
||||||
|
|
||||||
switch (msg.type)
|
switch (msg.type)
|
||||||
{
|
{
|
||||||
case "connect":
|
case "connect":
|
||||||
|
|||||||
@@ -49,7 +49,8 @@ Cost.prototype.GetPopBonus = function()
|
|||||||
|
|
||||||
Cost.prototype.GetBuildTime = function()
|
Cost.prototype.GetBuildTime = function()
|
||||||
{
|
{
|
||||||
var buildTime = +this.template.BuildTime;
|
var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player);
|
||||||
|
var buildTime = (+this.template.BuildTime) * cmpPlayer.cheatTimeMultiplier;
|
||||||
var cmpTechnologyManager = QueryOwnerInterface(this.entity, IID_TechnologyManager);
|
var cmpTechnologyManager = QueryOwnerInterface(this.entity, IID_TechnologyManager);
|
||||||
if (cmpTechnologyManager)
|
if (cmpTechnologyManager)
|
||||||
buildTime = cmpTechnologyManager.ApplyModifications("Cost/BuildTime", buildTime, this.entity);
|
buildTime = cmpTechnologyManager.ApplyModifications("Cost/BuildTime", buildTime, this.entity);
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ Player.prototype.Init = function()
|
|||||||
this.startCam = undefined;
|
this.startCam = undefined;
|
||||||
this.controlAllUnits = false;
|
this.controlAllUnits = false;
|
||||||
this.isAI = false;
|
this.isAI = false;
|
||||||
|
this.cheatsEnabled = true;
|
||||||
|
this.cheatTimeMultiplier = 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
Player.prototype.SetPlayerID = function(id)
|
Player.prototype.SetPlayerID = function(id)
|
||||||
@@ -405,4 +407,15 @@ Player.prototype.OnPlayerDefeated = function()
|
|||||||
cmpGUIInterface.PushNotification(notification);
|
cmpGUIInterface.PushNotification(notification);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Player.prototype.SetCheatEnabled = function(flag)
|
||||||
|
{
|
||||||
|
this.cheatsEnabled = flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player.prototype.GetCheatEnabled = function(flag)
|
||||||
|
{
|
||||||
|
return this.cheatsEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
Engine.RegisterComponentType(IID_Player, "Player", Player);
|
Engine.RegisterComponentType(IID_Player, "Player", Player);
|
||||||
|
|||||||
@@ -185,7 +185,7 @@ ProductionQueue.prototype.AddBatch = function(templateName, type, count, metadat
|
|||||||
|
|
||||||
// Apply a time discount to larger batches.
|
// Apply a time discount to larger batches.
|
||||||
// TODO: work out what equation we should use here.
|
// TODO: work out what equation we should use here.
|
||||||
var timeMult = Math.pow(count, 0.7);
|
var timeMult = Math.pow(count, 0.7) * cmpPlayer.cheatTimeMultiplier;
|
||||||
|
|
||||||
// We need the costs after tech modifications
|
// We need the costs after tech modifications
|
||||||
// Obviously we don't have the entities yet, so we must use template data
|
// Obviously we don't have the entities yet, so we must use template data
|
||||||
@@ -233,7 +233,7 @@ ProductionQueue.prototype.AddBatch = function(templateName, type, count, metadat
|
|||||||
if (!template)
|
if (!template)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var time = template.researchTime;
|
var time = template.researchTime * CheatTimeMultiplier();
|
||||||
|
|
||||||
var cost = {};
|
var cost = {};
|
||||||
for each (var r in ["food", "wood", "stone", "metal"])
|
for each (var r in ["food", "wood", "stone", "metal"])
|
||||||
|
|||||||
@@ -245,6 +245,8 @@ ResourceGatherer.prototype.PerformGather = function(target)
|
|||||||
*/
|
*/
|
||||||
ResourceGatherer.prototype.GetTargetGatherRate = function(target)
|
ResourceGatherer.prototype.GetTargetGatherRate = function(target)
|
||||||
{
|
{
|
||||||
|
var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player);
|
||||||
|
|
||||||
var cmpResourceSupply = Engine.QueryInterface(target, IID_ResourceSupply);
|
var cmpResourceSupply = Engine.QueryInterface(target, IID_ResourceSupply);
|
||||||
if (!cmpResourceSupply)
|
if (!cmpResourceSupply)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -255,9 +257,9 @@ ResourceGatherer.prototype.GetTargetGatherRate = function(target)
|
|||||||
|
|
||||||
var rate;
|
var rate;
|
||||||
if (type.specific && rates[type.generic+"."+type.specific])
|
if (type.specific && rates[type.generic+"."+type.specific])
|
||||||
rate = rates[type.generic+"."+type.specific];
|
rate = rates[type.generic+"."+type.specific] / cmpPlayer.cheatTimeMultiplier;
|
||||||
else
|
else
|
||||||
rate = rates[type.generic];
|
rate = rates[type.generic] / cmpPlayer.cheatTimeMultiplier;
|
||||||
|
|
||||||
return (rate || 0);
|
return (rate || 0);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
{
|
||||||
|
"Cheats":
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"Name": "i want pizza",
|
||||||
|
"Action": "addfood",
|
||||||
|
"IsNumeric": true,
|
||||||
|
"DefaultNumber": 1000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "bring me my axe",
|
||||||
|
"Action": "addwood",
|
||||||
|
"IsNumeric": true,
|
||||||
|
"DefaultNumber": 1000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "your money or your life",
|
||||||
|
"Action": "addmetal",
|
||||||
|
"IsNumeric": true,
|
||||||
|
"DefaultNumber": 1000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "i see a mountain here",
|
||||||
|
"Action": "addstone",
|
||||||
|
"IsNumeric": true,
|
||||||
|
"DefaultNumber": 1000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "jame jam",
|
||||||
|
"Action": "revealmap",
|
||||||
|
"IsNumeric": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "the hive master",
|
||||||
|
"Action": "maxpopulation",
|
||||||
|
"IsNumeric": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "TARDIS",
|
||||||
|
"Action": "changemaxpopulation",
|
||||||
|
"IsNumeric": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "iwanttopwnthem",
|
||||||
|
"Action": "createunits",
|
||||||
|
"IsNumeric": true,
|
||||||
|
"DefaultNumber": 1,
|
||||||
|
"Templates": ["units/cart_hero_hamilcar", "units/cart_hero_hannibal", "units/cart_hero_maharbal", "units/rome_hero_marcellus", "units/rome_hero_maximus", "units/rome_hero_scipio", "units/pers_hero_cyrus", "units/pers_hero_darius", "units/pers_hero_xerxes"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "wololo",
|
||||||
|
"Action": "convertunit",
|
||||||
|
"IsNumeric": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "black death",
|
||||||
|
"Action": "killunits",
|
||||||
|
"IsNumeric": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "exodia",
|
||||||
|
"Action": "defeatplayer",
|
||||||
|
"IsNumeric": true,
|
||||||
|
"DefaultNumber": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "i am too busy",
|
||||||
|
"Action": "fastactions",
|
||||||
|
"IsNumeric": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "how do you turn this on?",
|
||||||
|
"Action": "createunits",
|
||||||
|
"IsNumeric": true,
|
||||||
|
"DefaultNumber": 1,
|
||||||
|
"Templates": ["other/plane"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
|
||||||
|
|
||||||
|
function Cheat(input)
|
||||||
|
{
|
||||||
|
//computing the neccessary components
|
||||||
|
var cmpPlayerMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager);
|
||||||
|
if (!cmpPlayerMan || input.player < 0)
|
||||||
|
return;
|
||||||
|
var playerEnt = cmpPlayerMan.GetPlayerByID(input.player);
|
||||||
|
if (playerEnt == INVALID_ENTITY)
|
||||||
|
return;
|
||||||
|
var cmpPlayer = Engine.QueryInterface(playerEnt, IID_Player);
|
||||||
|
if (!cmpPlayer)
|
||||||
|
return;
|
||||||
|
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"});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Engine.RegisterGlobal("Cheat", Cheat);
|
||||||
@@ -31,12 +31,16 @@ function ProcessCommand(player, cmd)
|
|||||||
case "debug-print":
|
case "debug-print":
|
||||||
print(cmd.message);
|
print(cmd.message);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "chat":
|
case "chat":
|
||||||
var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|
var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|
||||||
cmpGuiInterface.PushNotification({"type": "chat", "player": player, "message": cmd.message});
|
cmpGuiInterface.PushNotification({"type": "chat", "player": player, "message": cmd.message});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "cheat":
|
||||||
|
Cheat(cmd);
|
||||||
|
break;
|
||||||
|
|
||||||
case "quit":
|
case "quit":
|
||||||
// Let the AI exit the game for testing purposes
|
// Let the AI exit the game for testing purposes
|
||||||
var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|
var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
|
||||||
|
|||||||
@@ -13,11 +13,14 @@ function InitGame(settings)
|
|||||||
var cmpAIManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_AIManager);
|
var cmpAIManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_AIManager);
|
||||||
for (var i = 0; i < settings.PlayerData.length; ++i)
|
for (var i = 0; i < settings.PlayerData.length; ++i)
|
||||||
{
|
{
|
||||||
|
var cmpPlayer = Engine.QueryInterface(cmpPlayerManager.GetPlayerByID(i+1), IID_Player);
|
||||||
|
if (!settings.CheatsEnabled)
|
||||||
|
cmpPlayer.SetCheatStatus(false);
|
||||||
if (settings.PlayerData[i] && settings.PlayerData[i].AI && settings.PlayerData[i].AI != "")
|
if (settings.PlayerData[i] && settings.PlayerData[i].AI && settings.PlayerData[i].AI != "")
|
||||||
{
|
{
|
||||||
cmpAIManager.AddPlayer(settings.PlayerData[i].AI, i+1);
|
cmpAIManager.AddPlayer(settings.PlayerData[i].AI, i+1);
|
||||||
var cmpPlayer = Engine.QueryInterface(cmpPlayerManager.GetPlayerByID(i+1), IID_Player);
|
|
||||||
cmpPlayer.SetAI(true);
|
cmpPlayer.SetAI(true);
|
||||||
|
cmpPlayer.SetCheatEnabled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user