Ticket #1555: cheats.5.patch
File cheats.5.patch, 15.3 KB (added by , 12 years ago) |
---|
-
gui/gamesetup/gamesetup.js
179 179 updateGameAttributes(); 180 180 } 181 181 }; 182 183 getGUIObjectByName("enableCheats").onPress = function() 184 { // Update attributes so other players can see change 185 g_GameAttributes.settings.CheatsEnabled = this.checked; 186 187 if (!g_IsInGuiUpdate) 188 { 189 updateGameAttributes(); 190 } 191 }; 182 192 } 183 193 else 184 194 { … … 207 217 getGUIObjectByName("startGame").enabled = false; 208 218 } 209 219 210 // Set up offline-onlybits:220 // Set up multiplayer/singleplayer bits: 211 221 if (!g_IsNetworked) 212 222 { 213 223 getGUIObjectByName("chatPanel").hidden = true; 224 getGUIObjectByName("enableCheats").checked = true; 225 g_GameAttributes.settings.CheatsEnabled = true; 214 226 } 215 216 227 else 228 { 229 getGUIObjectByName("enableCheatsDesc").hidden = false; 230 getGUIObjectByName("enableCheats").checked = false; 231 g_GameAttributes.settings.CheatsEnabled = false; 232 if (g_IsController) 233 { 234 getGUIObjectByName("enableCheats").hidden = false; 235 } 236 else 237 { 238 getGUIObjectByName("enableCheatsText").hidden = false; 239 } 240 } 217 241 // Settings for all possible player slots 218 242 var boxSpacing = 32; 219 243 for (var i = 0; i < MAX_PLAYERS; ++i) … … 801 825 var victoryCondition = getGUIObjectByName("victoryCondition"); 802 826 var lockTeams = getGUIObjectByName("lockTeams"); 803 827 var mapSize = getGUIObjectByName("mapSize"); 828 var enableCheats = getGUIObjectByName("enableCheats"); 804 829 805 830 var numPlayersText= getGUIObjectByName("numPlayersText"); 806 831 var mapSizeText = getGUIObjectByName("mapSizeText"); 807 832 var revealMapText = getGUIObjectByName("revealMapText"); 808 833 var victoryConditionText = getGUIObjectByName("victoryConditionText"); 809 834 var lockTeamsText = getGUIObjectByName("lockTeamsText"); 810 835 var enableCheatsText = getGUIObjectByName("enableCheatsText"); 836 811 837 var sizeIdx = (g_MapSizes.tiles.indexOf(mapSettings.Size) != -1 ? g_MapSizes.tiles.indexOf(mapSettings.Size) : g_MapSizes.default); 812 838 var victoryIdx = (VICTORY_DATA.indexOf(mapSettings.GameType) != -1 ? VICTORY_DATA.indexOf(mapSettings.GameType) : VICTORY_DEFAULTIDX); 813 839 enableCheats.checked = (g_GameAttributes.settings.CheatsEnabled === undefined || !g_GameAttributes.settings.CheatsEnabled ? false : true) 840 enableCheatsText.caption = (enableCheats.checked ? "Yes" : "No"); 814 841 // Handle map type specific logic 815 842 switch (g_GameAttributes.mapType) 816 843 { … … 842 869 victoryCondition.selected = victoryIdx; 843 870 lockTeamsText.caption = "Teams locked:"; 844 871 lockTeams.checked = (mapSettings.LockTeams === undefined || mapSettings.LockTeams ? true : false); 872 845 873 } 846 874 else 847 875 { -
gui/gamesetup/gamesetup.xml
120 120 121 121 </object> 122 122 123 <object size="20 463.8 11% 615" name="enableCheatsDesc" hidden="true"> 124 <object size="0 0 100% 32"> 125 <object size="0 0 100% 100%" type="text" style="RightLabelText">Cheats:</object> 126 </object> 127 </object> 128 129 <object size="10.9% 463.8 28% 615"> 130 <object size="0 0 100% 32"> 131 <object name="enableCheatsText" size="0 0 100% 100%" type="text" style="LeftLabelText" hidden="true"/> 132 <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."/> 133 </object> 134 </object> 135 123 136 <!-- Map Preview --> 124 137 <object type="image" sprite="BackgroundIndentFillDark" name="gamePreviewBox" size="100%-425 58 100%-25 358"> 125 138 <object type="image" sprite="snMapPreview" size="1 1 399 299" name="mapPreview"/> … … 143 156 <object size="0 60 100% 88"> 144 157 <object size="0 0 100% 100%" type="text" style="RightLabelText">Victory condition:</object> 145 158 </object> 159 146 160 </object> 147 161 148 162 <!-- Second Column --> 149 163 <object size="41% 0 94% 50%"> 150 164 … … 173 187 </object> 174 188 175 189 <!-- Third Column --> 190 176 191 <object size="0 40% 42.3% 100%"> 177 192 <object size="0 0 100% 32"> 178 193 <object size="0 0 100% 100%" type="text" style="RightLabelText">Reveal map:</object> -
gui/session/messages.js
9 9 const MAX_NUM_NOTIFICATION_LINES = 3; 10 10 var notifications = []; 11 11 var notificationsTimers = []; 12 var cheatList = parseJSONData("simulation/data/cheats.json").Cheats; 12 13 13 14 // Notifications 14 15 function handleNotifications() … … 159 160 { 160 161 var input = getGUIObjectByName("chatInput"); 161 162 var text = input.caption; 163 var isCheat = false; 162 164 if (text.length) 163 165 { 164 if (g_IsNetworked) 165 Engine.SendNetworkChat(text); 166 else 167 addChatMessage({ "type": "message", "guid": "local", "text": text }); 166 var n = g_PlayerAssignments["local"].player; 167 for (var i = 0; i < cheatList.length; i++) 168 { 169 if (text.indexOf(cheatList[i].Name)>-1) 170 { 171 if (cheatList[i].IsNumberic) 172 { 173 var number = text.substr(cheatList[i].Name.length+1, text.length-1).valueOf(); 174 if (!(number > 0)) 175 number=cheatList[i].DefaultNumber; 176 } 177 else 178 { 179 var number = undefined; 180 } 181 Engine.PostNetworkCommand({"type": "cheat", "action": cheatList[i].Action, "number": number , "selected": g_Selection.toList(), "templates": cheatList[i].Templates, "player": n}); 182 isCheat = true; 183 break; 184 } 185 } 168 186 187 if (!isCheat) 188 { 189 if (g_IsNetworked) 190 Engine.SendNetworkChat(text); 191 else 192 addChatMessage({ "type": "message", "guid": "local", "text": text }); 193 } 169 194 input.caption = ""; // Clear chat input 170 195 } 171 196 … … 195 220 } 196 221 197 222 var message = escapeText(msg.text); 198 223 199 224 var formatted; 200 225 201 226 switch (msg.type) 202 227 { 203 228 case "connect": -
simulation/components/Cost.js
49 49 50 50 Cost.prototype.GetBuildTime = function() 51 51 { 52 var buildTime = +this.template.BuildTime;52 var buildTime = (+this.template.BuildTime) * CheatTimeMultiplier(); 53 53 var cmpTechnologyManager = QueryOwnerInterface(this.entity, IID_TechnologyManager); 54 54 if (cmpTechnologyManager) 55 55 buildTime = cmpTechnologyManager.ApplyModifications("Cost/BuildTime", buildTime, this.entity); -
simulation/components/Player.js
29 29 this.startCam = undefined; 30 30 this.controlAllUnits = false; 31 31 this.isAI = false; 32 this.cheatsEnabled = true; 32 33 }; 33 34 34 35 Player.prototype.SetPlayerID = function(id) … … 397 398 } 398 399 }; 399 400 401 402 Player.prototype.SetCheatStatus = function(flag) 403 { 404 this.cheatsEnabled = flag; 405 } 406 407 Player.prototype.GetCheatStatus = function() 408 { 409 return this.cheatsEnabled; 410 } 411 400 412 Engine.RegisterComponentType(IID_Player, "Player", Player); -
simulation/components/ProductionQueue.js
185 185 186 186 // Apply a time discount to larger batches. 187 187 // TODO: work out what equation we should use here. 188 var timeMult = Math.pow(count, 0.7) ;188 var timeMult = Math.pow(count, 0.7) * CheatTimeMultiplier(); 189 189 190 190 // We need the costs after tech modifications 191 191 // Obviously we don't have the entities yet, so we must use template data … … 233 233 if (!template) 234 234 return; 235 235 236 var time = template.researchTime ;236 var time = template.researchTime * CheatTimeMultiplier(); 237 237 238 238 var cost = {}; 239 239 for each (var r in ["food", "wood", "stone", "metal"]) -
simulation/components/ResourceGatherer.js
255 255 256 256 var rate; 257 257 if (type.specific && rates[type.generic+"."+type.specific]) 258 rate = rates[type.generic+"."+type.specific] ;258 rate = rates[type.generic+"."+type.specific] / CheatTimeMultiplier(); 259 259 else 260 rate = rates[type.generic] ;260 rate = rates[type.generic] / CheatTimeMultiplier(); 261 261 262 262 return (rate || 0); 263 263 }; -
simulation/data/cheats.json
1 { 2 "Cheats": 3 [ 4 { 5 "Name": "i want pizza", 6 "Action": "addfood", 7 "IsNumberic": true, 8 "DefaultNumber": 1000 9 }, 10 { 11 "Name": "bring me my axe", 12 "Action": "addwood", 13 "IsNumberic": true, 14 "DefaultNumber": 1000 15 }, 16 { 17 "Name": "your money or your life", 18 "Action": "addmetal", 19 "IsNumberic": true, 20 "DefaultNumber": 1000 21 }, 22 { 23 "Name": "isee a mountain here", 24 "Action": "addstone", 25 "IsNumberic": true, 26 "DefaultNumber": 1000 27 }, 28 { 29 "Name": "jame jam", 30 "Action": "revealmap", 31 "IsNumberic": false 32 }, 33 { 34 "Name": "the hive master", 35 "Action": "maxpopulation", 36 "IsNumberic": false 37 }, 38 { 39 "Name": "TARDIS", 40 "Action": "changemaxpopulation", 41 "IsNumberic": false 42 }, 43 { 44 "Name": "iwanttopwnthem", 45 "Action": "createunits", 46 "IsNumberic": true, 47 "DefaultNumber": 1, 48 "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"] 49 }, 50 { 51 "Name": "wololo", 52 "Action": "convertunit", 53 "IsNumberic": false 54 }, 55 { 56 "Name": "black death", 57 "Action": "killunits", 58 "IsNumberic": false 59 }, 60 { 61 "Name": "hehehehehehehehe", 62 "Action": "defeatplayer", 63 "IsNumberic": true, 64 "DefaultNumber": 2 65 }, 66 { 67 "Name": "pandoras box", 68 "Action": "controlallunits", 69 "IsNumberic": false 70 }, 71 { 72 "Name": "i am too busy", 73 "Action": "fastactions", 74 "IsNumberic": false 75 }, 76 { 77 "Name": "how do you turn this on?", 78 "Action": "createunits", 79 "IsNumberic": true, 80 "DefaultNumber": 1, 81 "Templates": ["other/plane"] 82 } 83 ] 84 } -
simulation/helpers/Cheat.js
1 var cTimeMiltuplier = 1; 2 3 function Cheat(input) 4 { 5 var cmpPlayerMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); 6 if (!cmpPlayerMan || input.player < 0) 7 return; 8 var playerEnt = cmpPlayerMan.GetPlayerByID(input.player); 9 if (playerEnt == INVALID_ENTITY) 10 return; 11 var cmpPlayer = Engine.QueryInterface(playerEnt, IID_Player); 12 if (!cmpPlayer) 13 return; 14 if (cmpPlayer.GetCheatStatus()) 15 { 16 if (input.action == "addfood") 17 { 18 cmpPlayer.AddResource("food", input.number); 19 } 20 else if (input.action == "addwood") 21 { 22 cmpPlayer.AddResource("wood", input.number); 23 } 24 else if (input.action == "addmetal") 25 { 26 cmpPlayer.AddResource("metal", input.number); 27 } 28 else if (input.action == "addstone") 29 { 30 cmpPlayer.AddResource("stone", input.number); 31 } 32 else if (input.action == "revealmap") 33 { 34 var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); 35 cmpRangeManager.SetLosRevealAll(-1, true); 36 } 37 else if (input.action == "maxpopulation") 38 { 39 cmpPlayer.popBonuses += 500; 40 } 41 else if (input.action == "changemaxpopulation") 42 { 43 cmpPlayer.maxPop = 500; 44 } 45 else if (input.action == "controlallunits") 46 { 47 cmpPlayer.SetControlAllUnits(true); 48 } 49 else if (input.action == "convertunit") 50 { 51 for each (var ent in input.selected) 52 { 53 var cmpOwnership = Engine.QueryInterface(ent, IID_Ownership); 54 cmpOwnership.SetOwner(cmpPlayer.playerID); 55 } 56 } 57 else if (input.action == "killunits") 58 { 59 for each (var ent in input.selected) 60 { 61 var cmpHealth = Engine.QueryInterface(ent, IID_Health); 62 if (cmpHealth) 63 cmpHealth.Kill(); 64 else 65 Engine.DestroyEntity(ent); 66 } 67 } 68 else if (input.action == "defeatplayer") 69 { 70 var cmpPlayerMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); 71 if (!cmpPlayerMan) 72 return; 73 var playerEnt = cmpPlayerMan.GetPlayerByID(input.number); 74 if (playerEnt == INVALID_ENTITY) 75 return; 76 Engine.PostMessage(playerEnt, MT_PlayerDefeated, { "playerId": input.number } ); 77 } 78 else if (input.action == "createunits") 79 { 80 var spawn = Engine.QueryInterface(input.selected[0], IID_TrainingQueue); 81 if (!spawn) 82 return; 83 for (var i = 0; i < input.number; i++) 84 { 85 spawn.SpawnUnits (input.templates[i%(input.templates.length)],1, null); 86 } 87 } 88 else if (input.action == "fastactions") 89 { 90 if (cTimeMiltuplier == 1) 91 { 92 cTimeMiltuplier = 0.01; 93 } 94 else 95 { 96 cTimeMiltuplier = 1; 97 } 98 } 99 if (cmpPlayer.name.indexOf(" the Cheater")==-1) 100 cmpPlayer.name = cmpPlayer.name + " the Cheater"; 101 } 102 else 103 { 104 var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface); 105 cmpGuiInterface.PushNotification({"type": "chat", "player": input.player, "message": "Cheats are disbaled in this match"}); 106 } 107 } 108 109 function CheatTimeMultiplier() 110 { 111 return cTimeMiltuplier; 112 } 113 114 Engine.RegisterGlobal("Cheat", Cheat); 115 Engine.RegisterGlobal("CheatTimeMultiplier", CheatTimeMultiplier); 116 No newline at end of file -
simulation/helpers/Commands.js
31 31 case "debug-print": 32 32 print(cmd.message); 33 33 break; 34 34 35 35 case "chat": 36 36 var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface); 37 37 cmpGuiInterface.PushNotification({"type": "chat", "player": player, "message": cmd.message}); 38 38 break; 39 39 40 case "cheat": 41 Cheat(cmd); 42 break; 43 40 44 case "quit": 41 45 // Let the AI exit the game for testing purposes 42 46 var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface); -
simulation/helpers/InitGame.js
13 13 var cmpAIManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_AIManager); 14 14 for (var i = 0; i < settings.PlayerData.length; ++i) 15 15 { 16 var cmpPlayer = Engine.QueryInterface(cmpPlayerManager.GetPlayerByID(i+1), IID_Player); 17 if (!settings.CheatsEnabled) 18 cmpPlayer.SetCheatStatus(false); 16 19 if (settings.PlayerData[i] && settings.PlayerData[i].AI && settings.PlayerData[i].AI != "") 17 20 { 18 21 cmpAIManager.AddPlayer(settings.PlayerData[i].AI, i+1); 19 var cmpPlayer = Engine.QueryInterface(cmpPlayerManager.GetPlayerByID(i+1), IID_Player);20 22 cmpPlayer.SetAI(true); 23 cmpPlayer.SetCheatStatus(true); 21 24 } 22 25 } 23 26 }