From cfd61aeb9ea379ffa11f624a3445b1a5a04e185a Mon Sep 17 00:00:00 2001 From: Dino Date: Sat, 15 Nov 2025 22:06:37 -0500 Subject: [PATCH] #1737 - improve reporting of appearing/disappearing extras --- server/srv_main.c | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/server/srv_main.c b/server/srv_main.c index 0ac7b51ec3..fbf40ea7f2 100644 --- a/server/srv_main.c +++ b/server/srv_main.c @@ -1751,14 +1751,14 @@ static void end_turn(void) if (tile_has_extra(ptile, pextra) && fc_rand(10000) < pextra->disappearance_chance && can_extra_disappear(pextra, ptile)) { - tile_extra_rm_apply(ptile, pextra); + struct player *tile_owner_player = tile_owner(ptile); + + tile_extra_rm_apply(ptile, pextra); update_tile_knowledge(ptile); - if (tile_owner(ptile) != nullptr) { - /* TODO: Should notify players nearby even when borders disabled, - * like in case of barbarian uprising */ - notify_player(tile_owner(ptile), ptile, + if (tile_owner_player != nullptr) { + notify_player(tile_owner_player, ptile, E_SPONTANEOUS_EXTRA, ftc_server, /* TRANS: Small Fish disappears from (32, 72). */ _("%s disappears from %s."), @@ -1766,6 +1766,17 @@ static void end_turn(void) tile_link(ptile)); } + players_iterate(aplayer) { + if (tile_is_seen(ptile, aplayer) && aplayer != tile_owner_player) { + notify_player(aplayer, ptile, + E_SPONTANEOUS_EXTRA, ftc_server, + /* TRANS: Small Fish disappears from (32, 72). */ + _("%s disappears from %s."), + extra_name_translation(pextra), + tile_link(ptile)); + } + } players_iterate_end; + /* Activities at the target tile and its neighbors may now * be illegal because of present reqs. */ tile_change_side_effects(ptile, FALSE); @@ -1779,14 +1790,13 @@ static void end_turn(void) && fc_rand(10000) < pextra->appearance_chance && can_extra_appear(pextra, ptile)) { - tile_extra_apply(ptile, pextra); + struct player *tile_owner_player = tile_owner(ptile); + tile_extra_apply(ptile, pextra); update_tile_knowledge(ptile); - if (tile_owner(ptile) != nullptr) { - /* TODO: Should notify players nearby even when borders disabled, - * like in case of barbarian uprising */ - notify_player(tile_owner(ptile), ptile, + if (tile_owner_player != nullptr) { + notify_player(tile_owner_player, ptile, E_SPONTANEOUS_EXTRA, ftc_server, /* TRANS: Small Fish appears to (32, 72). */ _("%s appears to %s."), @@ -1794,6 +1804,17 @@ static void end_turn(void) tile_link(ptile)); } + players_iterate(aplayer) { + if (tile_is_seen(ptile, aplayer) && aplayer != tile_owner_player) { + notify_player(aplayer, ptile, + E_SPONTANEOUS_EXTRA, ftc_server, + /* TRANS: Small Fish appears to (32, 72). */ + _("%s appears to %s."), + extra_name_translation(pextra), + tile_link(ptile)); + } + } players_iterate_end; + /* Activities at the target tile and its neighbors may now * be illegal because of !present reqs. */ tile_change_side_effects(ptile, FALSE); -- 2.31.0