Ticket #1555: cheats.3.patch
File cheats.3.patch, 11.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()}); 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 393 Player.prototype.Cheat = function(input) 394 { 395 if (this.cheatsEnabled) 396 { 397 if (input.action == "addfood") 398 { 399 this.AddResource("food", input.number); 400 } 401 else if (input.action == "addwood") 402 { 403 this.AddResource("wood", input.number); 404 } 405 else if (input.action == "addmetal") 406 { 407 this.AddResource("metal", input.number); 408 } 409 else if (input.action == "addstone") 410 { 411 this.AddResource("stone", input.number); 412 } 413 else if (input.action == "revealmap") 414 { 415 var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); 416 cmpRangeManager.SetLosRevealAll(-1, true); 417 } 418 else if (input.action == "maxpopulation") 419 { 420 this.popBonuses += 500; 421 } 422 else if (input.action == "changemaxpopulation") 423 { 424 this.maxPop = 500; 425 } 426 else if (input.action == "controlallunits") 427 { 428 this.SetControlAllUnits(true); 429 } 430 else if (input.action == "convertunit") 431 { 432 for each (var ent in input.selected) 433 { 434 var cmpOwnership = Engine.QueryInterface(ent, IID_Ownership); 435 cmpOwnership.SetOwner(this.playerID); 436 } 437 } 438 else if (input.action == "killunits") 439 { 440 for each (var ent in input.selected) 441 { 442 var cmpHealth = Engine.QueryInterface(ent, IID_Health); 443 if (cmpHealth) 444 cmpHealth.Kill(); 445 else 446 Engine.DestroyEntity(ent); 447 } 448 } 449 else if (input.action == "defeatplayer") 450 { 451 var cmpPlayerMan = Engine.QueryInterface(SYSTEM_ENTITY, IID_PlayerManager); 452 if (!cmpPlayerMan) 453 return; 454 var playerEnt = cmpPlayerMan.GetPlayerByID(input.number); 455 if (playerEnt == INVALID_ENTITY) 456 return; 457 Engine.PostMessage(playerEnt, MT_PlayerDefeated, { "playerId": input.number } ); 458 } 459 else if (input.action == "heroes") 460 { 461 var spawn = Engine.QueryInterface(input.selected[0], IID_ProductionQueue); 462 if (!spawn) 463 return; 464 for (var i = 0; i < input.number; i++) 465 { 466 var templates = ["units/cart_hero_hamilcar", "units/cart_hero_hannibal", "units/cart_hero_maharbal", 467 "units/rome_hero_marcellus", "units/rome_hero_maximus", "units/rome_hero_scipio", 468 "units/pers_hero_cyrus", "units/pers_hero_darius", "units/pers_hero_xerxes"]; 469 spawn.SpawnUnits (templates[i%9],1, null); 470 } 471 } 472 if (this.name.indexOf(" the Cheater")==-1) 473 this.name = this.name + " the Cheater"; 474 } 475 }; 476 385 477 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": "heroes", 46 "IsNumbered": true, 47 "DefaultNumber": 1 48 }, 49 { 50 "Name": "wololo", 51 "Action": "convertunit", 52 "IsNumbered": false 53 }, 54 { 55 "Name": "black death", 56 "Action": "killunits", 57 "IsNumbered": false 58 }, 59 { 60 "Name": "hehehehehehehehe", 61 "Action": "defeatplayer", 62 "IsNumbered": true, 63 "DefaultNumber": 2 64 }, 65 { 66 "Name": "pandoras box", 67 "Action": "controlallunits", 68 "IsNumbered": false 69 } 70 ] 71 } -
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 cmpPlayer.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 }