Fix: Don't try to rename OWNER_DEITY signs in-game (#9716)

This commit is contained in:
Tyler Trahan 2021-11-28 07:16:42 -07:00 committed by GitHub
parent 6953df7b5e
commit 802ca4e722
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 18 additions and 1 deletions

View File

@ -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;
}

View File

@ -79,7 +79,7 @@ CommandCost CmdRenameSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
{
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()) {

View File

@ -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);

View File

@ -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);
}