Ticket #1555: cheats.4.patch

File cheats.4.patch, 12.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(), "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        }
    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
     392Player.prototype.GetCheatStatus = function(flag)
     393{
     394    return this.cheatsEnabled;
     395}
     396
    385397Engine.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

     
     1function 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
     91Engine.RegisterGlobal("Cheat", Cheat);
     92 No newline at end of file
  • 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        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}