Ticket #1555: cheats.3.patch

File cheats.3.patch, 11.3 KB (added by O.Davoodi, 12 years ago)
  • gui/gamesetup/gamesetup.js

     
    207207        getGUIObjectByName("startGame").enabled = false;
    208208    }
    209209
    210     // Set up offline-only bits:
     210    // Set up multiplayer/singleplayer bits:
    211211    if (!g_IsNetworked)
    212212    {
    213213        getGUIObjectByName("chatPanel").hidden = true;
     214        getGUIObjectByName("enableCheats").checked = true;
    214215    }
    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    }
    217229    // Settings for all possible player slots
    218230    var boxSpacing = 32;
    219231    for (var i = 0; i < MAX_PLAYERS; ++i)
     
    731743    }
    732744   
    733745    var numPlayers = g_GameAttributes.settings.PlayerData.length;
     746    g_GameAttributes.settings.CheatsEnabled = getGUIObjectByName("enableCheats").checked;
    734747    // Assign random civilizations to players with that choice
    735748    //  (this is synchronized because we're the host)
    736749    var civs = [ civ.Code for each (civ in g_CivData) if (civ.SelectableInGameSetup !== false) ];
     
    801814    var victoryCondition = getGUIObjectByName("victoryCondition");
    802815    var lockTeams = getGUIObjectByName("lockTeams");
    803816    var mapSize = getGUIObjectByName("mapSize");
     817    var enableCheats = getGUIObjectByName("enableCheats");
    804818   
    805819    var numPlayersText= getGUIObjectByName("numPlayersText");
    806820    var mapSizeText = getGUIObjectByName("mapSizeText");
    807821    var revealMapText = getGUIObjectByName("revealMapText");
    808822    var victoryConditionText = getGUIObjectByName("victoryConditionText");
    809823    var lockTeamsText = getGUIObjectByName("lockTeamsText");
    810 
     824    var enableCheatsText = getGUIObjectByName("enableCheatsText");
     825   
    811826    var sizeIdx = (g_MapSizes.tiles.indexOf(mapSettings.Size) != -1 ? g_MapSizes.tiles.indexOf(mapSettings.Size) : g_MapSizes.default);
    812827    var victoryIdx = (VICTORY_DATA.indexOf(mapSettings.GameType) != -1 ? VICTORY_DATA.indexOf(mapSettings.GameType) : VICTORY_DEFAULTIDX);
    813828
     829    enableCheatsText.caption = (enableCheats.checked ? "Yes" : "No");
    814830    // Handle map type specific logic
    815831    switch (g_GameAttributes.mapType)
    816832    {
  • gui/gamesetup/gamesetup.xml

     
    120120
    121121        </object>
    122122       
     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       
    123136        <!-- Map Preview -->
    124137        <object  type="image" sprite="BackgroundIndentFillDark" name="gamePreviewBox" size="100%-425 58 100%-25 358">
    125138            <object type="image" sprite="snMapPreview" size="1 1 399 299" name="mapPreview"/>
     
    143156                <object size="0 60 100% 88">
    144157                    <object size="0 0 100% 100%" type="text" style="RightLabelText">Victory condition:</object>
    145158                </object>
     159               
    146160            </object>
    147 
     161           
    148162            <!-- Second Column -->
    149163            <object size="41% 0 94% 50%">
    150164
     
    173187            </object>
    174188
    175189            <!-- Third Column -->
     190           
    176191            <object size="0 40% 42.3% 100%">
    177192                <object size="0 0 100% 32">
    178193                    <object size="0 0 100% 100%" type="text" style="RightLabelText">Reveal map:</object>
  • gui/session/messages.js

     
    99const MAX_NUM_NOTIFICATION_LINES = 3;
    1010var notifications = [];
    1111var notificationsTimers = [];
     12var cheatList = parseJSONData("simulation/data/cheats.json").Cheats;
    1213
    1314// Notifications
    1415function handleNotifications()
     
    195196    }
    196197
    197198    var message = escapeText(msg.text);
    198 
     199   
    199200    var formatted;
    200201
     202    var isCheat = false;
     203   
    201204    switch (msg.type)
    202205    {
    203206    case "connect":
     
    207210        formatted = "[color=\"" + playerColor + "\"]" + username + "[/color] has left the game.";
    208211        break;
    209212    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        }
    212237        break;
    213238    default:
    214239        error("Invalid chat message '" + uneval(msg) + "'");
  • simulation/components/Player.js

     
    2828    this.startCam = undefined;
    2929    this.controlAllUnits = false;
    3030    this.isAI = false;
     31    this.cheatsEnabled = true;
    3132};
    3233
    3334Player.prototype.SetPlayerID = function(id)
     
    382383    }
    383384};
    384385
     386
     387Player.prototype.SetCheatStatus = function(flag)
     388{
     389    this.cheatsEnabled = flag;
     390}
     391
     392
     393Player.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
    385477Engine.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

     
    3131    case "debug-print":
    3232        print(cmd.message);
    3333        break;
    34 
     34   
    3535    case "chat":
    3636        var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
    3737        cmpGuiInterface.PushNotification({"type": "chat", "player": player, "message": cmd.message});
    3838        break;
    3939       
     40    case "cheat":
     41        cmpPlayer.Cheat(cmd);
     42        break;
     43       
    4044    case "quit":
    4145        // Let the AI exit the game for testing purposes
    4246        var cmpGuiInterface = Engine.QueryInterface(SYSTEM_ENTITY, IID_GuiInterface);
  • simulation/helpers/InitGame.js

     
    1313    var cmpAIManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_AIManager);
    1414    for (var i = 0; i < settings.PlayerData.length; ++i)
    1515    {
     16        var cmpPlayer = Engine.QueryInterface(cmpPlayerManager.GetPlayerByID(i+1), IID_Player);
     17        if (!settings.CheatsEnabled)
     18            cmpPlayer.SetCheatStatus(false);
    1619        if (settings.PlayerData[i] && settings.PlayerData[i].AI && settings.PlayerData[i].AI != "")
    1720        {
    1821            cmpAIManager.AddPlayer(settings.PlayerData[i].AI, i+1);
    19             var cmpPlayer = Engine.QueryInterface(cmpPlayerManager.GetPlayerByID(i+1), IID_Player);
    2022            cmpPlayer.SetAI(true);
     23            cmpPlayer.SetCheatStatus(true);
    2124        }
    2225    }
    2326}