Changeset - r19366:08e6508de827
[Not reviewed]
master
0 5 0
frosch - 12 years ago 2012-05-26 14:15:46
frosch@openttd.org
(svn r24281) -Cleanup: Merge all company news subtypes into a single one; they all behave the same.
5 files changed with 9 insertions and 18 deletions:
0 comments (0 inline, 0 general)
src/company_cmd.cpp
Show inline comments
 
@@ -366,25 +366,25 @@ set_name:;
 
		c->name_1 = str;
 
		c->name_2 = strp;
 

	
 
		MarkWholeScreenDirty();
 

	
 
		if (c->is_ai) {
 
			CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
 
			cni->FillData(c);
 
			SetDParam(0, STR_NEWS_COMPANY_LAUNCH_TITLE);
 
			SetDParam(1, STR_NEWS_COMPANY_LAUNCH_DESCRIPTION);
 
			SetDParamStr(2, cni->company_name);
 
			SetDParam(3, t->index);
 
			AddNewsItem(STR_MESSAGE_NEWS_FORMAT, NS_COMPANY_NEW, NR_TILE, c->last_build_coordinate, NR_NONE, UINT32_MAX, cni);
 
			AddNewsItem(STR_MESSAGE_NEWS_FORMAT, NS_COMPANY_INFO, NR_TILE, c->last_build_coordinate, NR_NONE, UINT32_MAX, cni);
 
		}
 
		return;
 
	}
 
bad_town_name:;
 

	
 
	if (c->president_name_1 == SPECSTR_PRESIDENT_NAME) {
 
		str = SPECSTR_ANDCO_NAME;
 
		strp = c->president_name_2;
 
		goto set_name;
 
	} else {
 
		str = SPECSTR_ANDCO_NAME;
 
		strp = Random();
 
@@ -912,25 +912,25 @@ CommandCost CmdCompanyCtrl(TileIndex til
 

	
 
			if (!(flags & DC_EXEC)) return CommandCost();
 

	
 
			/* Delete any open window of the company */
 
			DeleteCompanyWindows(c->index);
 
			CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
 
			cni->FillData(c);
 

	
 
			/* Show the bankrupt news */
 
			SetDParam(0, STR_NEWS_COMPANY_BANKRUPT_TITLE);
 
			SetDParam(1, STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION);
 
			SetDParamStr(2, cni->company_name);
 
			AddCompanyNewsItem(STR_MESSAGE_NEWS_FORMAT, NS_COMPANY_BANKRUPT, cni);
 
			AddCompanyNewsItem(STR_MESSAGE_NEWS_FORMAT, cni);
 

	
 
			/* Remove the company */
 
			ChangeOwnershipOfCompanyItems(c->index, INVALID_OWNER);
 
			if (c->is_ai) AI::Stop(c->index);
 

	
 
			CompanyID c_index = c->index;
 
			delete c;
 
			AI::BroadcastNewEvent(new ScriptEventCompanyBankrupt(c_index));
 
			Game::NewEvent(new ScriptEventCompanyBankrupt(c_index));
 
			CompanyAdminRemove(c_index, (CompanyRemoveReason)reason);
 
			break;
 
		}
src/economy.cpp
Show inline comments
 
@@ -532,25 +532,25 @@ static void CompanyCheckBankrupt(Company
 

	
 
	switch (c->quarters_of_bankruptcy) {
 
		case 0:
 
		case 1:
 
			break;
 

	
 
		case 2: {
 
			CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
 
			cni->FillData(c);
 
			SetDParam(0, STR_NEWS_COMPANY_IN_TROUBLE_TITLE);
 
			SetDParam(1, STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION);
 
			SetDParamStr(2, cni->company_name);
 
			AddCompanyNewsItem(STR_MESSAGE_NEWS_FORMAT, NS_COMPANY_TROUBLE, cni);
 
			AddCompanyNewsItem(STR_MESSAGE_NEWS_FORMAT, cni);
 
			AI::BroadcastNewEvent(new ScriptEventCompanyInTrouble(c->index));
 
			Game::NewEvent(new ScriptEventCompanyInTrouble(c->index));
 
			break;
 
		}
 

	
 
		case 3: {
 
			/* Check if the company has any value.. if not, declare it bankrupt
 
			 *  right now */
 
			Money val = CalculateCompanyValue(c, false);
 
			if (val > 0) {
 
				c->bankrupt_value = val;
 
				c->bankrupt_asked = 1 << c->index; // Don't ask the owner
 
@@ -1641,25 +1641,25 @@ void CompaniesMonthlyLoop()
 
static void DoAcquireCompany(Company *c)
 
{
 
	CompanyID ci = c->index;
 

	
 
	CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
 
	cni->FillData(c, Company::Get(_current_company));
 

	
 
	SetDParam(0, STR_NEWS_COMPANY_MERGER_TITLE);
 
	SetDParam(1, c->bankrupt_value == 0 ? STR_NEWS_MERGER_TAKEOVER_TITLE : STR_NEWS_COMPANY_MERGER_DESCRIPTION);
 
	SetDParamStr(2, cni->company_name);
 
	SetDParamStr(3, cni->other_company_name);
 
	SetDParam(4, c->bankrupt_value);
 
	AddCompanyNewsItem(STR_MESSAGE_NEWS_FORMAT, NS_COMPANY_MERGER, cni);
 
	AddCompanyNewsItem(STR_MESSAGE_NEWS_FORMAT, cni);
 
	AI::BroadcastNewEvent(new ScriptEventCompanyMerger(ci, _current_company));
 
	Game::NewEvent(new ScriptEventCompanyMerger(ci, _current_company));
 

	
 
	ChangeOwnershipOfCompanyItems(ci, _current_company);
 

	
 
	if (c->bankrupt_value == 0) {
 
		Company *owner = Company::Get(_current_company);
 
		owner->current_loan += c->current_loan;
 
	}
 

	
 
	if (c->is_ai) AI::Stop(c->index);
 

	
src/news_func.h
Show inline comments
 
@@ -10,27 +10,27 @@
 
/** @file news_func.h Functions related to news. */
 

	
 
#ifndef NEWS_FUNC_H
 
#define NEWS_FUNC_H
 

	
 
#include "news_type.h"
 
#include "vehicle_type.h"
 
#include "station_type.h"
 
#include "industry_type.h"
 

	
 
void AddNewsItem(StringID string, NewsSubtype subtype, NewsReferenceType reftype1 = NR_NONE, uint32 ref1 = UINT32_MAX, NewsReferenceType reftype2 = NR_NONE, uint32 ref2 = UINT32_MAX, void *free_data = NULL);
 

	
 
static inline void AddCompanyNewsItem(StringID string, NewsSubtype subtype, CompanyNewsInformation *cni)
 
static inline void AddCompanyNewsItem(StringID string, CompanyNewsInformation *cni)
 
{
 
	AddNewsItem(string, subtype, NR_NONE, UINT32_MAX, NR_NONE, UINT32_MAX, cni);
 
	AddNewsItem(string, NS_COMPANY_INFO, NR_NONE, UINT32_MAX, NR_NONE, UINT32_MAX, cni);
 
}
 

	
 
/**
 
 * Adds a newsitem referencing a vehicle.
 
 *
 
 * @warning
 
 * Be careful!
 
 * Vehicles are a special case, as news are kept when vehicles are autoreplaced/renewed.
 
 * You have to make sure, #ChangeVehicleNews catches the DParams of your message.
 
 * This is NOT ensured by the references.
 
 */
 
static inline void AddVehicleNewsItem(StringID string, NewsSubtype subtype, VehicleID vehicle, StationID station = INVALID_STATION)
src/news_gui.cpp
Show inline comments
 
@@ -209,28 +209,25 @@ struct NewsSubtypeData {
 
	NewsFlag flags;         ///< Initial NewsFlags bits @see NewsFlag
 
	const WindowDesc *desc; ///< Window description for displaying this news.
 
};
 

	
 
/**
 
 * Data common to all news items of a given subtype (actual data)
 
 */
 
static const NewsSubtypeData _news_subtype_data[] = {
 
	/* type,               display_mode, flags,                         window description,            callback */
 
	{ NT_ARRIVAL_COMPANY,  (NF_NO_TRANSPARENT | NF_SHADE), &_thin_news_desc    }, ///< NS_ARRIVAL_COMPANY
 
	{ NT_ARRIVAL_OTHER,    (NF_NO_TRANSPARENT | NF_SHADE), &_thin_news_desc    }, ///< NS_ARRIVAL_OTHER
 
	{ NT_ACCIDENT,         (NF_NO_TRANSPARENT | NF_SHADE), &_thin_news_desc    }, ///< NS_ACCIDENT
 
	{ NT_COMPANY_INFO,     NF_NONE,                        &_company_news_desc }, ///< NS_COMPANY_TROUBLE
 
	{ NT_COMPANY_INFO,     NF_NONE,                        &_company_news_desc }, ///< NS_COMPANY_MERGER
 
	{ NT_COMPANY_INFO,     NF_NONE,                        &_company_news_desc }, ///< NS_COMPANY_BANKRUPT
 
	{ NT_COMPANY_INFO,     NF_NONE,                        &_company_news_desc }, ///< NS_COMPANY_NEW
 
	{ NT_COMPANY_INFO,     NF_NONE,                        &_company_news_desc }, ///< NS_COMPANY_INFO
 
	{ NT_INDUSTRY_OPEN,    (NF_NO_TRANSPARENT | NF_SHADE), &_thin_news_desc    }, ///< NS_INDUSTRY_OPEN
 
	{ NT_INDUSTRY_CLOSE,   (NF_NO_TRANSPARENT | NF_SHADE), &_thin_news_desc    }, ///< NS_INDUSTRY_CLOSE
 
	{ NT_ECONOMY,          NF_NONE,                        &_normal_news_desc  }, ///< NS_ECONOMY
 
	{ NT_INDUSTRY_COMPANY, (NF_NO_TRANSPARENT | NF_SHADE), &_thin_news_desc    }, ///< NS_INDUSTRY_COMPANY
 
	{ NT_INDUSTRY_OTHER,   (NF_NO_TRANSPARENT | NF_SHADE), &_thin_news_desc    }, ///< NS_INDUSTRY_OTHER
 
	{ NT_INDUSTRY_NOBODY,  (NF_NO_TRANSPARENT | NF_SHADE), &_thin_news_desc    }, ///< NS_INDUSTRY_NOBODY
 
	{ NT_ADVICE,           NF_INCOLOUR,                    &_small_news_desc   }, ///< NS_ADVICE
 
	{ NT_NEW_VEHICLES,     NF_NONE,                        &_vehicle_news_desc }, ///< NS_NEW_VEHICLES
 
	{ NT_ACCEPTANCE,       NF_INCOLOUR,                    &_small_news_desc   }, ///< NS_ACCEPTANCE
 
	{ NT_SUBSIDIES,        NF_NONE,                        &_normal_news_desc  }, ///< NS_SUBSIDIES
 
	{ NT_GENERAL,          NF_NONE,                        &_normal_news_desc  }, ///< NS_GENERAL
 
};
 
@@ -725,28 +722,25 @@ CommandCost CmdCustomNewsItem(TileIndex 
 
		default: return CMD_ERROR;
 
	}
 

	
 
	const WindowDesc *desc = _news_subtype_data[subtype].desc;
 
	for (int i = 0; i < desc->nwid_length; i++) {
 
		if (desc->nwid_parts[i].type == NWID_VIEWPORT && reftype1 != NR_VEHICLE && GetReferenceTile(reftype1, p2) == INVALID_TILE) {
 
			return CMD_ERROR;
 
		}
 
	}
 

	
 
	switch (subtype) {
 
		/* These sub types require more parameters that are never passed. */
 
		case NS_COMPANY_TROUBLE:
 
		case NS_COMPANY_MERGER:
 
		case NS_COMPANY_BANKRUPT:
 
		case NS_COMPANY_NEW:
 
		case NS_COMPANY_INFO:
 
			return CMD_ERROR;
 

	
 
		/* This one only accepts engines. */
 
		case NS_NEW_VEHICLES:
 
			if (reftype1 != NR_ENGINE) return CMD_ERROR;
 
			break;
 

	
 
		/* The rest, in theory, accepts everything. */
 
		default:
 
			break;
 
	}
 

	
src/news_type.h
Show inline comments
 
@@ -50,28 +50,25 @@ enum NewsType {
 
	NT_SUBSIDIES,       ///< News about subsidies (announcements, expirations, acceptance)
 
	NT_GENERAL,         ///< General news (from towns)
 
	NT_END,             ///< end-of-array marker
 
};
 

	
 
/**
 
 * News subtypes.
 
 */
 
enum NewsSubtype {
 
	NS_ARRIVAL_COMPANY,  ///< NT_ARRIVAL_COMPANY
 
	NS_ARRIVAL_OTHER,    ///< NT_ARRIVAL_OTHER
 
	NS_ACCIDENT,         ///< NT_ACCIDENT
 
	NS_COMPANY_TROUBLE,  ///< NT_COMPANY_INFO (trouble)
 
	NS_COMPANY_MERGER,   ///< NT_COMPANY_INFO (merger)
 
	NS_COMPANY_BANKRUPT, ///< NT_COMPANY_INFO (bankrupt)
 
	NS_COMPANY_NEW,      ///< NT_COMPANY_INFO (new company)
 
	NS_COMPANY_INFO,     ///< NT_COMPANY_INFO
 
	NS_INDUSTRY_OPEN,    ///< NT_INDUSTRY_OPEN
 
	NS_INDUSTRY_CLOSE,   ///< NT_INDUSTRY_CLOSE
 
	NS_ECONOMY,          ///< NT_ECONOMY
 
	NS_INDUSTRY_COMPANY, ///< NT_INDUSTRY_COMPANY
 
	NS_INDUSTRY_OTHER,   ///< NT_INDUSTRY_OTHER
 
	NS_INDUSTRY_NOBODY,  ///< NT_INDUSTRY_NOBODY
 
	NS_ADVICE,           ///< NT_ADVICE
 
	NS_NEW_VEHICLES,     ///< NT_NEW_VEHICLES
 
	NS_ACCEPTANCE,       ///< NT_ACCEPTANCE
 
	NS_SUBSIDIES,        ///< NT_SUBSIDIES
 
	NS_GENERAL,          ///< NT_GENERAL
 
	NS_END,              ///< end-of-array marker
0 comments (0 inline, 0 general)