diff --git a/binaries/data/mods/public/gui/session/messages.js b/binaries/data/mods/public/gui/session/messages.js index 9831cba310..4311c55f54 100644 --- a/binaries/data/mods/public/gui/session/messages.js +++ b/binaries/data/mods/public/gui/session/messages.js @@ -317,14 +317,13 @@ function getCheatsData() /** * Reads userinput from the chat and sends a simulation command in case it is a known cheat. - * Hence cheats won't be sent as chat over network. * - * @param {string} text * @returns {boolean} - True if a cheat was executed. */ function executeCheat(text) { - if (g_IsObserver || !g_Players[Engine.GetPlayerID()].cheatsEnabled) + if (!controlsPlayer(Engine.GetPlayerID()) || + !g_Players[Engine.GetPlayerID()].cheatsEnabled) return false; // Find the cheat code that is a prefix of the user input diff --git a/binaries/data/mods/public/gui/session/session.js b/binaries/data/mods/public/gui/session/session.js index 93fbb167b6..d48204e5ff 100644 --- a/binaries/data/mods/public/gui/session/session.js +++ b/binaries/data/mods/public/gui/session/session.js @@ -402,7 +402,13 @@ function isPlayerObserver(playerID) */ function controlsPlayer(playerID) { - return Engine.GetPlayerID() == playerID && !g_IsObserver || g_DevSettings.controlAll; + if (Engine.GetPlayerID() != playerID) + return false; + + let playerState = GetSimState().players[playerID]; + + return playerState && ( + playerState.state != "defeated" || playerState.controlsAll); } /**