Ticket #1555: cheats.4.patch
File cheats.4.patch, 12.3 KB (added by , 12 years ago) |
---|
-
gui/gamesetup/gamesetup.js
207 207 getGUIObjectByName("startGame").enabled = false; 208 208 } 209 209 210 // Set up offline-onlybits:210 // Set up multiplayer/singleplayer bits: 211 211 if (!g_IsNetworked) 212 212 { 213 213 getGUIObjectByName("chatPanel").hidden = true; 214 getGUIObjectByName("enableCheats").checked = true; 214 215 } 215 216 216 else 217 { 218 getGUIObjectByName("enableCheatsDesc").hidden = false; 219 getGUIObjectByName("enableCheats").checked = false; 220 if (g_IsController) 221 { 222 getGUIObjectByName("enableCheats").hidden = false; 223 } 224 else 225 { 226 getGUIObjectByName("enableCheatsText").hidden = false; 227 } 228 } 217 229 // Settings for all possible player slots 218 230 var boxSpacing = 32; 219 231 for (var i = 0; i < MAX_PLAYERS; ++i) … … 731 743 } 732 744 733 745 var numPlayers = g_GameAttributes.settings.PlayerData.length; 746 g_GameAttributes.settings.CheatsEnabled = getGUIObjectByName("enableCheats").checked; 734 747 // Assign random civilizations to players with that choice 735 748 // (this is synchronized because we're the host) 736 749 var civs = [ civ.Code for each (civ in g_CivData) if (civ.SelectableInGameSetup !== false) ]; … … 801 814 var victoryCondition = getGUIObjectByName("victoryCondition"); 802 815 var lockTeams = getGUIObjectByName("lockTeams"); 803 816 var mapSize = getGUIObjectByName("mapSize"); 817 var enableCheats = getGUIObjectByName("enableCheats"); 804 818 805 819 var numPlayersText= getGUIObjectByName("numPlayersText"); 806 820 var mapSizeText = getGUIObjectByName("mapSizeText"); 807 821 var revealMapText = getGUIObjectByName("revealMapText"); 808 822 var victoryConditionText = getGUIObjectByName("victoryConditionText"); 809 823 var lockTeamsText = getGUIObjectByName("lockTeamsText"); 810 824 var enableCheatsText = getGUIObjectByName("enableCheatsText"); 825 811 826 var sizeIdx = (g_MapSizes.tiles.indexOf(mapSettings.Size) != -1 ? g_MapSizes.tiles.indexOf(mapSettings.Size) : g_MapSizes.default); 812 827 var victoryIdx = (VICTORY_DATA.indexOf(mapSettings.GameType) != -1 ? VICTORY_DATA.indexOf(mapSettings.GameType) : VICTORY_DEFAULTIDX); 813 828 829 enableCheatsText.caption = (enableCheats.checked ? "Yes" : "No"); 814 830 // Handle map type specific logic 815 831 switch (g_GameAttributes.mapType) 816 832 { -
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() … … 195 196 } 196 197 197 198 var message = escapeText(msg.text); 198 199 199 200 var formatted; 200 201 202 var isCheat = false; 203 201 204 switch (msg.type) 202 205 { 203 206 case "connect": … … 207 210 formatted = "[color=\"" + playerColor + "\"]" + username + "[/color] has left the game."; 208 211 break; 209 212 case "message": 210 console.write("<" + username + "> " + message); 211 formatted = "<[color=\"" + playerColor + "\"]" + username + "[/color]> " + message; 213 for (var i = 0; i < cheatList.length; i++) 214 { 215 if (message.indexOf(cheatList[i].Name)>-1) 216 { 217 if (cheatList[i].IsNumbered) 218 { 219 var number = message.substr(cheatList[i].Name.length+1, message.length-1).valueOf(); 220 if (!(number > 0)) 221 number=cheatList[i].DefaultNumber; 222 } 223 else 224 { 225 var number = undefined; 226 } 227 Engine.PostNetworkCommand({"type": "cheat", "action": cheatList[i].Action, "number": number , "selected": g_Selection.toList(), "templates": cheatList[i].Templates, "player": n}); 228 isCheat = true; 229 } 230 } 231 232 if (!isCheat) 233 { 234 console.write("<" + username + "> " + message); 235 formatted = "<[color=\"" + playerColor + "\"]" + username + "[/color]> " + message; 236 } 212 237 break; 213 238 default: 214 239 error("Invalid chat message '" + uneval(msg) + "'"); -
simulation/components/Player.js
28 28 this.startCam = undefined; 29 29 this.controlAllUnits = false; 30 30 this.isAI = false; 31 this.cheatsEnabled = true; 31 32 }; 32 33 33 34 Player.prototype.SetPlayerID = function(id) … … 382 383 } 383 384 }; 384 385 386 387 Player.prototype.SetCheatStatus = function(flag) 388 { 389 this.cheatsEnabled = flag; 390 } 391 392 Player.prototype.GetCheatStatus = function(flag) 393 { 394 return this.cheatsEnabled; 395 } 396 385 397 Engine.RegisterComponentType(IID_Player, "Player", Player); -
simulation/data/cheats.json
1 { 2 "Cheats": 3 [ 4 { 5 "Name": "i want pizza", 6 "Action": "addfood", 7 "IsNumbered": true, 8 "DefaultNumber": 1000 9 }, 10 { 11 "Name": "bring me my axe", 12 "Action": "addwood", 13 "IsNumbered": true, 14 "DefaultNumber": 1000 15 }, 16 { 17 "Name": "your money or your life", 18 "Action": "addmetal", 19 "IsNumbered": true, 20 "DefaultNumber": 1000 21 }, 22 { 23 "Name": "isee a mountain here", 24 "Action": "addstone", 25 "IsNumbered": true, 26 "DefaultNumber": 1000 27 }, 28 { 29 "Name": "jame jam", 30 "Action": "revealmap", 31 "IsNumbered": false 32 }, 33 { 34 "Name": "the hive master", 35 "Action": "maxpopulation", 36 "IsNumbered": false 37 }, 38 { 39 "Name": "TARDIS", 40 "Action": "changemaxpopulation", 41 "IsNumbered": false 42 }, 43 { 44 "Name": "iwanttopwnthem", 45 "Action": "createunits", 46 "IsNumbered": 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 "IsNumbered": false 54 }, 55 { 56 "Name": "black death", 57 "Action": "killunits", 58 "IsNumbered": false 59 }, 60 { 61 "Name": "hehehehehehehehe", 62 "Action": "defeatplayer", 63 "IsNumbered": true, 64 "DefaultNumber": 2 65 }, 66 { 67 "Name": "pandoras box", 68 "Action": "controlallunits", 69 "IsNumbered": false 70 }, 71 { 72 "Name": "how do you turn this on?", 73 "Action": "createunits", 74 "IsNumbered": true, 75 "DefaultNumber": 1, 76 "Templates": ["other/plane"] 77 } 78 ] 79 } -
simulation/helpers/Cheat.js
1 function Cheat(input) 2 { 3 var cmpPlayerMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); 4 if (!cmpPlayerMan || input.player < 0) 5 return; 6 var playerEnt = cmpPlayerMan.GetPlayerByID(input.player); 7 if (playerEnt == INVALID_ENTITY) 8 return; 9 var cmpPlayer = Engine.QueryInterface(playerEnt, IID_Player); 10 if (!cmpPlayer) 11 return; 12 if (cmpPlayer.GetCheatStatus()) 13 { 14 if (input.action == "addfood") 15 { 16 cmpPlayer.AddResource("food", input.number); 17 } 18 else if (input.action == "addwood") 19 { 20 cmpPlayer.AddResource("wood", input.number); 21 } 22 else if (input.action == "addmetal") 23 { 24 cmpPlayer.AddResource("metal", input.number); 25 } 26 else if (input.action == "addstone") 27 { 28 cmpPlayer.AddResource("stone", input.number); 29 } 30 else if (input.action == "revealmap") 31 { 32 var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); 33 cmpRangeManager.SetLosRevealAll(-1, true); 34 } 35 else if (input.action == "maxpopulation") 36 { 37 cmpPlayer.popBonuses += 500; 38 } 39 else if (input.action == "changemaxpopulation") 40 { 41 cmpPlayer.maxPop = 500; 42 } 43 else if (input.action == "controlallunits") 44 { 45 cmpPlayer.SetControlAllUnits(true); 46 } 47 else if (input.action == "convertunit") 48 { 49 for each (var ent in input.selected) 50 { 51 var cmpOwnership = Engine.QueryInterface(ent, IID_Ownership); 52 cmpOwnership.SetOwner(cmpPlayer.playerID); 53 } 54 } 55 else if (input.action == "killunits") 56 { 57 for each (var ent in input.selected) 58 { 59 var cmpHealth = Engine.QueryInterface(ent, IID_Health); 60 if (cmpHealth) 61 cmpHealth.Kill(); 62 else 63 Engine.DestroyEntity(ent); 64 } 65 } 66 else if (input.action == "defeatplayer") 67 { 68 var cmpPlayerMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); 69 if (!cmpPlayerMan) 70 return; 71 var playerEnt = cmpPlayerMan.GetPlayerByID(input.number); 72 if (playerEnt == INVALID_ENTITY) 73 return; 74 Engine.PostMessage(playerEnt, MT_PlayerDefeated, { "playerId": input.number } ); 75 } 76 else if (input.action == "createunits") 77 { 78 var spawn = Engine.QueryInterface(input.selected[0], IID_ProductionQueue); 79 if (!spawn) 80 return; 81 for (var i = 0; i < input.number; i++) 82 { 83 spawn.SpawnUnits (input.templates[i%(input.templates.length)],1, null); 84 } 85 } 86 if (cmpPlayer.name.indexOf(" the Cheater")==-1) 87 cmpPlayer.name = cmpPlayer.name + " the Cheater"; 88 } 89 } 90 91 Engine.RegisterGlobal("Cheat", Cheat); 92 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 }