diff options
author | frosch <frosch@openttd.org> | 2009-05-24 16:52:42 +0000 |
---|---|---|
committer | frosch <frosch@openttd.org> | 2009-05-24 16:52:42 +0000 |
commit | a4557c7da4329188e3561d9404891c0346f8f70e (patch) | |
tree | 96e7ba45ee42e5b0d0c8ca2867b081a56ebef645 /src/subsidy.cpp | |
parent | b7d065ce99886e2cf86883469a077f653428e5b8 (diff) | |
download | openttd-a4557c7da4329188e3561d9404891c0346f8f70e.tar.xz |
(svn r16416) -Fix [FS#2912]: Rework deleting of news when referenced vehicles/stations/industries are deleted.
Diffstat (limited to 'src/subsidy.cpp')
-rw-r--r-- | src/subsidy.cpp | 45 |
1 files changed, 21 insertions, 24 deletions
diff --git a/src/subsidy.cpp b/src/subsidy.cpp index 12fc73682..4b6fc22dd 100644 --- a/src/subsidy.cpp +++ b/src/subsidy.cpp @@ -21,9 +21,8 @@ Subsidy _subsidies[MAX_COMPANIES]; Pair SetupSubsidyDecodeParam(const Subsidy *s, bool mode) { - TileIndex tile; - TileIndex tile2; - Pair tp; + NewsReferenceType reftype1 = NR_NONE; + NewsReferenceType reftype2 = NR_NONE; /* if mode is false, use the singular form */ const CargoSpec *cs = GetCargo(s->cargo_type); @@ -33,38 +32,38 @@ Pair SetupSubsidyDecodeParam(const Subsidy *s, bool mode) if (cs->town_effect != TE_PASSENGERS && cs->town_effect != TE_MAIL) { SetDParam(1, STR_INDUSTRY); SetDParam(2, s->from); - tile = Industry::Get(s->from)->xy; + reftype1 = NR_INDUSTRY; if (cs->town_effect != TE_GOODS && cs->town_effect != TE_FOOD) { SetDParam(4, STR_INDUSTRY); SetDParam(5, s->to); - tile2 = Industry::Get(s->to)->xy; + reftype2 = NR_INDUSTRY; } else { SetDParam(4, STR_TOWN); SetDParam(5, s->to); - tile2 = Town::Get(s->to)->xy; + reftype2 = NR_TOWN; } } else { SetDParam(1, STR_TOWN); SetDParam(2, s->from); - tile = Town::Get(s->from)->xy; + reftype1 = NR_TOWN; SetDParam(4, STR_TOWN); SetDParam(5, s->to); - tile2 = Town::Get(s->to)->xy; + reftype2 = NR_TOWN; } } else { SetDParam(1, s->from); - tile = Station::Get(s->from)->xy; + reftype1 = NR_STATION; SetDParam(2, s->to); - tile2 = Station::Get(s->to)->xy; + reftype2 = NR_STATION; } - tp.a = tile; - tp.b = tile2; - - return tp; + Pair p; + p.a = reftype1; + p.b = reftype2; + return p; } void DeleteSubsidyWithTown(TownID index) @@ -214,7 +213,6 @@ static bool CheckSubsidyDuplicate(Subsidy *s) void SubsidyMonthlyLoop() { Subsidy *s; - Pair pair; Station *st; uint n; FoundRoute fr; @@ -224,16 +222,16 @@ void SubsidyMonthlyLoop() if (s->cargo_type == CT_INVALID) continue; if (s->age == 12 - 1) { - pair = SetupSubsidyDecodeParam(s, 1); - AddNewsItem(STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED, NS_SUBSIDIES, pair.a, pair.b); + Pair reftype = SetupSubsidyDecodeParam(s, 1); + AddNewsItem(STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED, NS_SUBSIDIES, (NewsReferenceType)reftype.a, s->from, (NewsReferenceType)reftype.b, s->to); s->cargo_type = CT_INVALID; modified = true; AI::BroadcastNewEvent(new AIEventSubsidyOfferExpired(s - _subsidies)); } else if (s->age == 2 * 12 - 1) { st = Station::Get(s->to); if (st->owner == _local_company) { - pair = SetupSubsidyDecodeParam(s, 1); - AddNewsItem(STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE, NS_SUBSIDIES, pair.a, pair.b); + Pair reftype = SetupSubsidyDecodeParam(s, 1); + AddNewsItem(STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE, NS_SUBSIDIES, (NewsReferenceType)reftype.a, s->from, (NewsReferenceType)reftype.b, s->to); } s->cargo_type = CT_INVALID; modified = true; @@ -272,8 +270,8 @@ void SubsidyMonthlyLoop() add_subsidy: if (!CheckSubsidyDuplicate(s)) { s->age = 0; - pair = SetupSubsidyDecodeParam(s, 0); - AddNewsItem(STR_NEWS_SERVICE_SUBSIDY_OFFERED, NS_SUBSIDIES, pair.a, pair.b); + Pair reftype = SetupSubsidyDecodeParam(s, 0); + AddNewsItem(STR_NEWS_SERVICE_SUBSIDY_OFFERED, NS_SUBSIDIES, (NewsReferenceType)reftype.a, s->from, (NewsReferenceType)reftype.b, s->to); AI::BroadcastNewEvent(new AIEventSubsidyOffer(s - _subsidies)); modified = true; break; @@ -290,7 +288,6 @@ bool CheckSubsidised(const Station *from, const Station *to, CargoID cargo_type) { Subsidy *s; TileIndex xy; - Pair pair; /* check if there is an already existing subsidy that applies to us */ for (s = _subsidies; s != endof(_subsidies); s++) { @@ -335,14 +332,14 @@ bool CheckSubsidised(const Station *from, const Station *to, CargoID cargo_type) s->to = to->index; /* Add a news item */ - pair = SetupSubsidyDecodeParam(s, 0); + Pair reftype = SetupSubsidyDecodeParam(s, 0); InjectDParam(1); SetDParam(0, _current_company); AddNewsItem( STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF + _settings_game.difficulty.subsidy_multiplier, NS_SUBSIDIES, - pair.a, pair.b + (NewsReferenceType)reftype.a, s->from, (NewsReferenceType)reftype.b, s->to ); AI::BroadcastNewEvent(new AIEventSubsidyAwarded(s - _subsidies)); |