diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -2123,9 +2123,10 @@ CommandCost CmdIndustrySetFlags(DoComman * @param ind_id IndustryID * @param prod_level Production level. * @param show_news Show a news message on production change. + * @param custom_news Custom news message text. * @return Empty cost or an error. */ -CommandCost CmdIndustrySetProduction(DoCommandFlag flags, IndustryID ind_id, byte prod_level, bool show_news) +CommandCost CmdIndustrySetProduction(DoCommandFlag flags, IndustryID ind_id, byte prod_level, bool show_news, const std::string &custom_news) { if (_current_company != OWNER_DEITY) return CMD_ERROR; if (prod_level < PRODLEVEL_MINIMUM || prod_level > PRODLEVEL_MAXIMUM) return CMD_ERROR; @@ -2140,6 +2141,7 @@ CommandCost CmdIndustrySetProduction(DoC } else if (prod_level < ind->prod_level) { str = GetIndustrySpec(ind->type)->production_down_text; } + if (prod_level != ind->prod_level && !custom_news.empty()) str = STR_NEWS_CUSTOM_ITEM; ind->ctlflags |= INDCTL_EXTERNAL_PROD_LEVEL; ind->prod_level = prod_level; @@ -2156,14 +2158,18 @@ CommandCost CmdIndustrySetProduction(DoC } /* Set parameters of news string */ - if (str > STR_LAST_STRINGID) { + NewsAllocatedData *data = nullptr; + if (str == STR_NEWS_CUSTOM_ITEM) { + NewsStringData *news = new NewsStringData(custom_news); + SetDParamStr(0, news->string); + } else if (str > STR_LAST_STRINGID) { SetDParam(0, STR_TOWN_NAME); SetDParam(1, ind->town->index); SetDParam(2, GetIndustrySpec(ind->type)->name); } else { SetDParam(0, ind->index); } - AddIndustryNewsItem(str, nt, ind->index); + AddIndustryNewsItem(str, nt, ind->index, data); } }