Ticket #1555: cheats.5.patch

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

     
    179179                updateGameAttributes();
    180180            }
    181181        };
     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        };
    182192    }
    183193    else
    184194    {
     
    207217        getGUIObjectByName("startGame").enabled = false;
    208218    }
    209219
    210     // Set up offline-only bits:
     220    // Set up multiplayer/singleplayer bits:
    211221    if (!g_IsNetworked)
    212222    {
    213223        getGUIObjectByName("chatPanel").hidden = true;
     224        getGUIObjectByName("enableCheats").checked = true;
     225        g_GameAttributes.settings.CheatsEnabled = true;
    214226    }
    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    }
    217241    // Settings for all possible player slots
    218242    var boxSpacing = 32;
    219243    for (var i = 0; i < MAX_PLAYERS; ++i)
     
    801825    var victoryCondition = getGUIObjectByName("victoryCondition");
    802826    var lockTeams = getGUIObjectByName("lockTeams");
    803827    var mapSize = getGUIObjectByName("mapSize");
     828    var enableCheats = getGUIObjectByName("enableCheats");
    804829   
    805830    var numPlayersText= getGUIObjectByName("numPlayersText");
    806831    var mapSizeText = getGUIObjectByName("mapSizeText");
    807832    var revealMapText = getGUIObjectByName("revealMapText");
    808833    var victoryConditionText = getGUIObjectByName("victoryConditionText");
    809834    var lockTeamsText = getGUIObjectByName("lockTeamsText");
    810 
     835    var enableCheatsText = getGUIObjectByName("enableCheatsText");
     836   
    811837    var sizeIdx = (g_MapSizes.tiles.indexOf(mapSettings.Size) != -1 ? g_MapSizes.tiles.indexOf(mapSettings.Size) : g_MapSizes.default);
    812838    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");
    814841    // Handle map type specific logic
    815842    switch (g_GameAttributes.mapType)
    816843    {
     
    842869            victoryCondition.selected = victoryIdx;
    843870            lockTeamsText.caption = "Teams locked:";
    844871            lockTeams.checked =  (mapSettings.LockTeams === undefined || mapSettings.LockTeams ? true : false);
     872           
    845873        }
    846874        else
    847875        {
  • 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()
     
    159160{
    160161    var input = getGUIObjectByName("chatInput");
    161162    var text = input.caption;
     163    var isCheat = false;
    162164    if (text.length)
    163165    {
    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        }
    168186
     187        if (!isCheat)
     188        {
     189            if (g_IsNetworked)
     190                Engine.SendNetworkChat(text);
     191            else
     192                addChatMessage({ "type": "message", "guid": "local", "text": text });
     193        }
    169194        input.caption = ""; // Clear chat input
    170195    }
    171196
     
    195220    }
    196221
    197222    var message = escapeText(msg.text);
    198 
     223   
    199224    var formatted;
    200 
     225   
    201226    switch (msg.type)
    202227    {
    203228    case "connect":
  • simulation/components/Cost.js

     
    4949
    5050Cost.prototype.GetBuildTime = function()
    5151{
    52     var buildTime = +this.template.BuildTime;
     52    var buildTime = (+this.template.BuildTime) * CheatTimeMultiplier();
    5353    var cmpTechnologyManager = QueryOwnerInterface(this.entity, IID_TechnologyManager);
    5454    if (cmpTechnologyManager)
    5555        buildTime = cmpTechnologyManager.ApplyModifications("Cost/BuildTime", buildTime, this.entity);
  • simulation/components/Player.js

     
    2929    this.startCam = undefined;
    3030    this.controlAllUnits = false;
    3131    this.isAI = false;
     32    this.cheatsEnabled = true;
    3233};
    3334
    3435Player.prototype.SetPlayerID = function(id)
     
    397398    }
    398399};
    399400
     401
     402Player.prototype.SetCheatStatus = function(flag)
     403{
     404    this.cheatsEnabled = flag;
     405}
     406
     407Player.prototype.GetCheatStatus = function()
     408{
     409    return this.cheatsEnabled;
     410}
     411
    400412Engine.RegisterComponentType(IID_Player, "Player", Player);
  • simulation/components/ProductionQueue.js

     
    185185           
    186186            // Apply a time discount to larger batches.
    187187            // 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();
    189189           
    190190            // We need the costs after tech modifications
    191191            // Obviously we don't have the entities yet, so we must use template data
     
    233233            if (!template)
    234234                return;
    235235           
    236             var time = template.researchTime;
     236            var time = template.researchTime * CheatTimeMultiplier();
    237237
    238238            var cost = {};
    239239            for each (var r in ["food", "wood", "stone", "metal"])
  • simulation/components/ResourceGatherer.js

     
    255255
    256256    var rate;
    257257    if (type.specific && rates[type.generic+"."+type.specific])
    258         rate = rates[type.generic+"."+type.specific];
     258        rate = rates[type.generic+"."+type.specific] / CheatTimeMultiplier();
    259259    else
    260         rate = rates[type.generic];
     260        rate = rates[type.generic] / CheatTimeMultiplier();
    261261   
    262262    return (rate || 0);
    263263};
  • 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

     
     1var cTimeMiltuplier = 1;
     2
     3function 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
     109function CheatTimeMultiplier()
     110{
     111    return cTimeMiltuplier;
     112}
     113
     114Engine.RegisterGlobal("Cheat", Cheat);
     115Engine.RegisterGlobal("CheatTimeMultiplier", CheatTimeMultiplier);
     116 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}