summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorfrosch <frosch@openttd.org>2010-04-23 21:47:03 +0000
committerfrosch <frosch@openttd.org>2010-04-23 21:47:03 +0000
commitca9a015984fa7c0c49ddb587635cd65b594c723a (patch)
tree66ef604573811953ed924662d2d2ce13653b8c4c /src
parent7a56196d98656a2080f5918699d37773ba294d69 (diff)
downloadopenttd-ca9a015984fa7c0c49ddb587635cd65b594c723a.tar.xz
(svn r19701) -Fix [FS#3787]: Check for industry availability more thoroughly and cancel object placement when selecting not available industries.
Diffstat (limited to 'src')
-rw-r--r--src/ai/api/ai_industrytype.cpp5
-rw-r--r--src/industry_cmd.cpp4
-rw-r--r--src/industry_gui.cpp6
3 files changed, 13 insertions, 2 deletions
diff --git a/src/ai/api/ai_industrytype.cpp b/src/ai/api/ai_industrytype.cpp
index 993a88993..8973d7688 100644
--- a/src/ai/api/ai_industrytype.cpp
+++ b/src/ai/api/ai_industrytype.cpp
@@ -14,6 +14,7 @@
#include "../../command_type.h"
#include "../../strings_func.h"
#include "../../industry.h"
+#include "../../newgrf_industries.h"
#include "../../core/random_func.hpp"
/* static */ bool AIIndustryType::IsValidIndustryType(IndustryType industry_type)
@@ -88,6 +89,8 @@
/* static */ bool AIIndustryType::CanBuildIndustry(IndustryType industry_type)
{
if (!IsValidIndustryType(industry_type)) return false;
+
+ if (!::CheckIfCallBackAllowsAvailability(industry_type, IACT_USERCREATION)) return false;
if (!::GetIndustrySpec(industry_type)->IsRawIndustry()) return true;
/* raw_industry_construction == 1 means "Build as other industries" */
@@ -97,7 +100,9 @@
/* static */ bool AIIndustryType::CanProspectIndustry(IndustryType industry_type)
{
if (!IsValidIndustryType(industry_type)) return false;
+
if (!::GetIndustrySpec(industry_type)->IsRawIndustry()) return false;
+ if (!::CheckIfCallBackAllowsAvailability(industry_type, IACT_USERCREATION)) return false;
/* raw_industry_construction == 2 means "prospect" */
return _settings_game.construction.raw_industry_construction == 2;
diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp
index 24d279170..35a5fe49c 100644
--- a/src/industry_cmd.cpp
+++ b/src/industry_cmd.cpp
@@ -1764,6 +1764,10 @@ CommandCost CmdBuildIndustry(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
return CMD_ERROR;
}
+ if (_game_mode != GM_EDITOR && !CheckIfCallBackAllowsAvailability(it, IACT_USERCREATION)) {
+ return CMD_ERROR;
+ }
+
Industry *ind = NULL;
if (_game_mode != GM_EDITOR && _settings_game.construction.raw_industry_construction == 2 && indspec->IsRawIndustry()) {
if (flags & DC_EXEC) {
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp
index 9b8433059..d9fc30eb7 100644
--- a/src/industry_gui.cpp
+++ b/src/industry_gui.cpp
@@ -463,8 +463,10 @@ public:
this->SetDirty();
- if ((_game_mode != GM_EDITOR && _settings_game.construction.raw_industry_construction == 2 && indsp != NULL && indsp->IsRawIndustry()) ||
- this->selected_type == INVALID_INDUSTRYTYPE) {
+ if (GetCallbackWnd() == this &&
+ ((_game_mode != GM_EDITOR && _settings_game.construction.raw_industry_construction == 2 && indsp != NULL && indsp->IsRawIndustry()) ||
+ this->selected_type == INVALID_INDUSTRYTYPE ||
+ !this->enabled[this->selected_index])) {
/* Reset the button state if going to prospecting or "build many industries" */
this->RaiseButtons();
ResetObjectToPlace();