From 495c26f6ea1cdba1ffb07fef72015a7152a786a0 Mon Sep 17 00:00:00 2001 From: Dino Date: Sun, 14 Jun 2026 00:28:45 -0400 Subject: [PATCH] improve reporting of obsolete wonder RM #2052 --- server/techtools.c | 48 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/server/techtools.c b/server/techtools.c index 88886569e0..1611bb130b 100644 --- a/server/techtools.c +++ b/server/techtools.c @@ -373,17 +373,49 @@ void found_new_tech(struct research *presearch, Tech_type_id tech_found, /* Alert the owners of any wonders that have been made obsolete */ improvement_iterate(pimprove) { requirement_vector_iterate(&pimprove->obsolete_by, pobs) { + bool is_range_ok = FALSE; + struct player *city_owner = nullptr; + struct player *new_tech_player = + player_by_number(research_number(presearch)); + pcity = city_from_great_wonder(pimprove); + if (pcity) { + city_owner = city_owner(pcity); + } + switch (pobs->range) { + case REQ_RANGE_PLAYER: + if (city_owner + && (new_tech_player == city_owner)) { + is_range_ok = TRUE; + } + break; + case REQ_RANGE_TEAM: + if (city_owner + && players_on_same_team(new_tech_player, city_owner)) { + is_range_ok = TRUE; + } + break; + case REQ_RANGE_ALLIANCE: + if (city_owner + && pplayers_allied(new_tech_player, city_owner)) { + is_range_ok = TRUE; + } + break; + case REQ_RANGE_WORLD: + is_range_ok = TRUE; + break; + default: + break; + } if (pobs->source.kind == VUT_ADVANCE && pobs->source.value.advance == vap - && pobs->range >= REQ_RANGE_WORLD + && is_range_ok && pobs->present - && pobs->survives && is_great_wonder(pimprove) - && (pcity = city_from_great_wonder(pimprove))) { - notify_player(city_owner(pcity), NULL, E_WONDER_OBSOLETE, ftc_server, + && city_owner) { + notify_player(city_owner, nullptr, E_WONDER_OBSOLETE, ftc_server, _("Discovery of %s OBSOLETES %s in %s!"), research_advance_name_translation - (research_get(city_owner(pcity)), tech_found), + (research_get(city_owner), tech_found), improvement_name_translation(pimprove), city_link(pcity)); } @@ -1277,11 +1309,11 @@ Tech_type_id steal_a_tech(struct player *pplayer, struct player *victim, game.info.tech_steal_allow_holes) && research_invention_state(presearch, i) != TECH_KNOWN && research_invention_state(vresearch, i) == TECH_KNOWN) { - j--; + j--; } if (j == 0) { - stolen_tech = i; - break; + stolen_tech = i; + break; } } advance_index_iterate_max_end; fc_assert(stolen_tech != A_NONE); -- 2.31.0