Feature #2052 » 2052_Main.patch
| server/techtools.c | ||
|---|---|---|
|
/* Assign 'advance_name' before we increase the future tech counter. */
|
||
|
advance_name = research_advance_name_translation(presearch, tech_found);
|
||
|
if (was_first && vap) {
|
||
|
if (vap) {
|
||
|
/* Alert the owners of any wonders that have been made obsolete */
|
||
|
improvement_iterate(pimprove) {
|
||
|
requirement_vector_iterate(&pimprove->obsolete_by, pobs) {
|
||
|
if (pobs->source.kind == VUT_ADVANCE
|
||
|
struct player *city_owner_player = NULL;
|
||
|
bool is_obsolete = TRUE;
|
||
|
pcity = city_from_great_wonder(pimprove);
|
||
|
if (pcity) {
|
||
|
city_owner_player = city_owner(pcity);
|
||
|
is_obsolete = improvement_obsolete(city_owner_player,
|
||
|
pimprove, pcity);
|
||
|
}
|
||
|
if (! is_obsolete
|
||
|
&& pobs->source.kind == VUT_ADVANCE
|
||
|
&& pobs->source.value.advance == vap
|
||
|
&& pobs->range >= REQ_RANGE_WORLD
|
||
|
&& 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,
|
||
|
_("Discovery of %s OBSOLETES %s in %s!"),
|
||
|
research_advance_name_translation
|
||
|
(research_get(city_owner(pcity)), tech_found),
|
||
|
improvement_name_translation(pimprove),
|
||
|
city_link(pcity));
|
||
|
&& is_great_wonder(pimprove)) {
|
||
|
bool is_range_ok = FALSE;
|
||
|
struct player *tech_player =
|
||
|
player_by_number(research_number(presearch));
|
||
|
struct team *tech_team = NULL;
|
||
|
/* research owner is a team if shared research is enabled */
|
||
|
if (game.info.team_pooled_research) {
|
||
|
tech_team = team_by_number(research_number(presearch));
|
||
|
}
|
||
|
switch (pobs->range) {
|
||
|
case REQ_RANGE_LOCAL:
|
||
|
case REQ_RANGE_TILE:
|
||
|
case REQ_RANGE_CADJACENT:
|
||
|
case REQ_RANGE_ADJACENT:
|
||
|
case REQ_RANGE_CITY:
|
||
|
case REQ_RANGE_TRADE_ROUTE:
|
||
|
case REQ_RANGE_CONTINENT:
|
||
|
/* these ranges not supported for req type "Tech" */
|
||
|
break;
|
||
|
case REQ_RANGE_PLAYER:
|
||
|
if (tech_player == city_owner_player) {
|
||
|
is_range_ok = TRUE;
|
||
|
}
|
||
|
break;
|
||
|
case REQ_RANGE_TEAM:
|
||
|
if (game.info.team_pooled_research) {
|
||
|
if (tech_team == city_owner_player->team) {
|
||
|
is_range_ok = TRUE;
|
||
|
}
|
||
|
} else {
|
||
|
if (players_on_same_team(tech_player, city_owner_player)) {
|
||
|
is_range_ok = TRUE;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case REQ_RANGE_ALLIANCE:
|
||
|
if (game.info.team_pooled_research) {
|
||
|
player_list_iterate(team_members(tech_team), teammate) {
|
||
|
if (pplayers_allied(teammate, city_owner_player)) {
|
||
|
is_range_ok = TRUE;
|
||
|
}
|
||
|
} player_list_iterate_end;
|
||
|
} else {
|
||
|
if (pplayers_allied(tech_player, city_owner_player)) {
|
||
|
is_range_ok = TRUE;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case REQ_RANGE_WORLD:
|
||
|
is_range_ok = TRUE;
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
if (is_range_ok) {
|
||
|
notify_player(city_owner_player, NULL, E_WONDER_OBSOLETE,
|
||
|
ftc_server,
|
||
|
_("Discovery of %s OBSOLETES %s in %s!"),
|
||
|
research_advance_name_translation
|
||
|
(research_get(city_owner_player), tech_found),
|
||
|
improvement_name_translation(pimprove),
|
||
|
city_link(pcity));
|
||
|
}
|
||
|
}
|
||
|
} requirement_vector_iterate_end;
|
||
|
} improvement_iterate_end;
|
||
| ... | ... | |
|
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);
|
||