# HG changeset patch # User Tyler Trahan # Date 2021-11-28 14:16:42 # Node ID ed4b80b7fdde0b6ad79ccaf02c7771ce61cf702b # Parent fc26d0fee20decf913b464e6d6b4e273460589bd Fix: Don't try to rename OWNER_DEITY signs in-game (#9716) diff --git a/src/signs.cpp b/src/signs.cpp --- a/src/signs.cpp +++ b/src/signs.cpp @@ -9,6 +9,7 @@ #include "stdafx.h" #include "landscape.h" +#include "company_func.h" #include "signs_base.h" #include "signs_func.h" #include "strings_func.h" @@ -61,3 +62,14 @@ void UpdateAllSignVirtCoords() si->UpdateVirtCoord(); } } + +/** + * Check if the current company can rename a given sign. + * @param *si The sign in question. + * @return true if the sign can be renamed, else false. + */ +bool CompanyCanRenameSign(const Sign *si) +{ + if (si->owner == OWNER_DEITY && _current_company != OWNER_DEITY && _game_mode != GM_EDITOR) return false; + return true; +} diff --git a/src/signs_cmd.cpp b/src/signs_cmd.cpp --- a/src/signs_cmd.cpp +++ b/src/signs_cmd.cpp @@ -79,7 +79,7 @@ CommandCost CmdRenameSign(TileIndex tile { Sign *si = Sign::GetIfValid(p1); if (si == nullptr) return CMD_ERROR; - if (si->owner == OWNER_DEITY && _current_company != OWNER_DEITY && _game_mode != GM_EDITOR) return CMD_ERROR; + if (!CompanyCanRenameSign(si)) return CMD_ERROR; /* Rename the signs when empty, otherwise remove it */ if (!text.empty()) { diff --git a/src/signs_func.h b/src/signs_func.h --- a/src/signs_func.h +++ b/src/signs_func.h @@ -18,6 +18,7 @@ extern SignID _new_sign_id; void UpdateAllSignVirtCoords(); void PlaceProc_Sign(TileIndex tile); +bool CompanyCanRenameSign(const Sign *si); /* signs_gui.cpp */ void ShowRenameSignWindow(const Sign *si); diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -565,10 +565,14 @@ static WindowDesc _query_sign_edit_desc( */ void HandleClickOnSign(const Sign *si) { + /* If we can't rename the sign, don't even open the rename GUI. */ + if (!CompanyCanRenameSign(si)) return; + if (_ctrl_pressed && (si->owner == _local_company || (si->owner == OWNER_DEITY && _game_mode == GM_EDITOR))) { RenameSign(si->index, ""); return; } + ShowRenameSignWindow(si); }