Project

General

Profile

Feature #2429 ยป 0081-Qt-Add-simple_city_request-action-selection-callback.patch

Marko Lindqvist, 10/31/2026 03:12 AM

View differences:

client/gui-qt/dialogs.cpp
static void spy_steal_something(QVariant data1, QVariant data2, action_id act);
static void diplomat_steal(QVariant data1, QVariant data2, action_id act);
static void diplomat_steal_esc(QVariant data1, QVariant data2, action_id act);
static void spy_poison(QVariant data1, QVariant data2, action_id act);
static void spy_poison_esc(QVariant data1, QVariant data2, action_id act);
static void spy_spread_plague(QVariant data1, QVariant data2, action_id act);
static void spy_steal_gold(QVariant data1, QVariant data2, action_id act);
static void spy_steal_gold_esc(QVariant data1, QVariant data2, action_id act);
static void spy_steal_maps(QVariant data1, QVariant data2, action_id act);
static void spy_steal_maps_esc(QVariant data1, QVariant data2, action_id act);
static void spy_escape(QVariant data1, QVariant data2, action_id act);
static void spy_nuke_city(QVariant data1, QVariant data2, action_id act);
static void spy_nuke_city_esc(QVariant data1, QVariant data2, action_id act);
static void nuke_city(QVariant data1, QVariant data2, action_id act);
static void destroy_city(QVariant data1, QVariant data2, action_id act);
static void diplomat_embassy(QVariant data1, QVariant data2, action_id act);
static void spy_embassy(QVariant data1, QVariant data2, action_id act);
static void spy_sabotage_unit(QVariant data1, QVariant data2, action_id act);
static void spy_sabotage_unit_esc(QVariant data1, QVariant data2,
action_id act);
static void spy_investigate(QVariant data1, QVariant data2, action_id act);
static void diplomat_investigate(QVariant data1, QVariant data2, action_id act);
static void diplomat_sabotage(QVariant data1, QVariant data2, action_id act);
static void diplomat_sabotage_esc(QVariant data1, QVariant data2,
action_id act);
static void diplomat_bribe_unit(QVariant data1, QVariant data2, action_id act);
static void diplomat_bribe_stack(QVariant data1, QVariant data2, action_id act);
static void spy_attack(QVariant data1, QVariant data2, action_id act);
static void caravan_marketplace(QVariant data1, QVariant data2, action_id act);
static void caravan_establish_trade(QVariant data1, QVariant data2,
action_id act);
static void caravan_help_build(QVariant data1, QVariant data2, action_id act);
static void unit_disband_recover(QVariant data1, QVariant data2, action_id act);
static void simple_city_request(QVariant data1, QVariant data2, action_id act);
static void capture_units(QVariant data1, QVariant data2, action_id act);
static void nuke_units(QVariant data1, QVariant data2, action_id act);
static void collect_ransom(QVariant data1, QVariant data2, action_id act);
......
static void fortify2(QVariant data1, QVariant data2, action_id act);
static void disband_unit(QVariant data1, QVariant data2, action_id act);
static void homeless(QVariant data1, QVariant data2, action_id act);
static void unit_home_city(QVariant data1, QVariant data2, action_id act);
static void unit_upgrade(QVariant data1, QVariant data2, action_id act);
static void airlift(QVariant data1, QVariant data2, action_id act);
static void conquer_city_shrink(QVariant data1, QVariant data2, action_id act);
static void conquer_city_shrink2(QVariant data1, QVariant data2, action_id act);
static void conquer_city_shrink3(QVariant data1, QVariant data2, action_id act);
static void conquer_city_shrink4(QVariant data1, QVariant data2, action_id act);
static void conquer_extras(QVariant data1, QVariant data2, action_id act);
static void conquer_extras2(QVariant data1, QVariant data2, action_id act);
static void conquer_extras3(QVariant data1, QVariant data2, action_id act);
......
QHash<action_id, pfcn_void> action_function;
// Unit acting against a city target.
action_function[ACTION_ESTABLISH_EMBASSY] = spy_embassy;
action_function[ACTION_ESTABLISH_EMBASSY_STAY] = diplomat_embassy;
action_function[ACTION_SPY_INVESTIGATE_CITY] = spy_investigate;
action_function[ACTION_INV_CITY_SPEND] = diplomat_investigate;
action_function[ACTION_SPY_POISON] = spy_poison;
action_function[ACTION_SPY_POISON_ESC] = spy_poison_esc;
action_function[ACTION_SPY_SPREAD_PLAGUE] = spy_spread_plague;
action_function[ACTION_SPY_STEAL_GOLD] = spy_steal_gold;
action_function[ACTION_SPY_STEAL_GOLD_ESC] = spy_steal_gold_esc;
action_function[ACTION_ESTABLISH_EMBASSY] = simple_city_request;
action_function[ACTION_ESTABLISH_EMBASSY_STAY] = simple_city_request;
action_function[ACTION_SPY_INVESTIGATE_CITY] = simple_city_request;
action_function[ACTION_INV_CITY_SPEND] = simple_city_request;
action_function[ACTION_SPY_POISON] = simple_city_request;
action_function[ACTION_SPY_POISON_ESC] = simple_city_request;
action_function[ACTION_SPY_SPREAD_PLAGUE] = simple_city_request;
action_function[ACTION_SPY_STEAL_GOLD] = simple_city_request;
action_function[ACTION_SPY_STEAL_GOLD_ESC] = simple_city_request;
action_function[ACTION_SPY_SABOTAGE_CITY] = diplomat_sabotage;
action_function[ACTION_SPY_SABOTAGE_CITY_ESC] = diplomat_sabotage_esc;
action_function[ACTION_SPY_TARGETED_SABOTAGE_CITY] =
......
action_function[ACTION_SPY_TARGETED_STEAL_TECH_ESC] = spy_steal_esc;
action_function[ACTION_SPY_INCITE_CITY] = diplomat_incite;
action_function[ACTION_SPY_INCITE_CITY_ESC] = diplomat_incite_escape;
action_function[ACTION_TRADE_ROUTE] = caravan_establish_trade;
action_function[ACTION_MARKETPLACE] = caravan_marketplace;
action_function[ACTION_HELP_WONDER] = caravan_help_build;
action_function[ACTION_TRADE_ROUTE] = simple_city_request;
action_function[ACTION_MARKETPLACE] = simple_city_request;
action_function[ACTION_HELP_WONDER] = simple_city_request;
action_function[ACTION_JOIN_CITY] = simple_tile_request;
action_function[ACTION_STEAL_MAPS] = spy_steal_maps;
action_function[ACTION_STEAL_MAPS_ESC] = spy_steal_maps_esc;
action_function[ACTION_SPY_NUKE] = spy_nuke_city;
action_function[ACTION_SPY_NUKE_ESC] = spy_nuke_city_esc;
action_function[ACTION_SPY_ESCAPE] = spy_escape;
action_function[ACTION_DESTROY_CITY] = destroy_city;
action_function[ACTION_DISBAND_UNIT_RECOVER] = unit_disband_recover;
action_function[ACTION_HOME_CITY] = unit_home_city;
action_function[ACTION_STEAL_MAPS] = simple_city_request;
action_function[ACTION_STEAL_MAPS_ESC] = simple_city_request;
action_function[ACTION_SPY_NUKE] = simple_city_request;
action_function[ACTION_SPY_NUKE_ESC] = simple_city_request;
action_function[ACTION_SPY_ESCAPE] = simple_city_request;
action_function[ACTION_DESTROY_CITY] = simple_city_request;
action_function[ACTION_DISBAND_UNIT_RECOVER] = simple_city_request;
action_function[ACTION_HOME_CITY] = simple_city_request;
action_function[ACTION_UPGRADE_UNIT] = unit_upgrade;
action_function[ACTION_AIRLIFT] = airlift;
action_function[ACTION_CONQUER_CITY_SHRINK] = conquer_city_shrink;
action_function[ACTION_CONQUER_CITY_SHRINK2] = conquer_city_shrink2;
action_function[ACTION_CONQUER_CITY_SHRINK3] = conquer_city_shrink3;
action_function[ACTION_CONQUER_CITY_SHRINK4] = conquer_city_shrink4;
action_function[ACTION_AIRLIFT] = simple_city_request;
action_function[ACTION_CONQUER_CITY_SHRINK] = simple_city_request;
action_function[ACTION_CONQUER_CITY_SHRINK2] = simple_city_request;
action_function[ACTION_CONQUER_CITY_SHRINK3] = simple_city_request;
action_function[ACTION_CONQUER_CITY_SHRINK4] = simple_city_request;
action_function[ACTION_STRIKE_BUILDING] = spy_request_strike_bld_list;
action_function[ACTION_NUKE_CITY] = nuke_city;
action_function[ACTION_NUKE_CITY] = simple_city_request;
// Unit acting against a unit target.
action_function[ACTION_SPY_BRIBE_UNIT] = diplomat_bribe_unit;
......
/***********************************************************************//**
Action enter market place for choice dialog
***************************************************************************/
static void caravan_marketplace(QVariant data1, QVariant data2, action_id act)
static void simple_city_request(QVariant data1, QVariant data2, action_id act)
{
int actor_unit_id = data1.toInt();
int target_city_id = data2.toInt();
if (game_unit_by_number(actor_unit_id) != nullptr
&& game_city_by_number(target_city_id) != nullptr) {
request_do_action(ACTION_MARKETPLACE, actor_unit_id,
target_city_id, 0, "");
}
}
/***********************************************************************//**
Action establish trade for choice dialog
***************************************************************************/
static void caravan_establish_trade(QVariant data1, QVariant data2, action_id act)
{
int actor_unit_id = data1.toInt();
int target_city_id = data2.toInt();
if (game_unit_by_number(actor_unit_id) != nullptr
&& game_city_by_number(target_city_id) != nullptr) {
request_do_action(ACTION_TRADE_ROUTE, actor_unit_id,
target_city_id, 0, "");
}
}
/***********************************************************************//**
Action help build wonder for choice dialog
***************************************************************************/
static void caravan_help_build(QVariant data1, QVariant data2, action_id act)
{
int caravan_id = data1.toInt();
int caravan_target_id = data2.toInt();
if (game_unit_by_number(caravan_id) != nullptr
&& game_city_by_number(caravan_target_id) != nullptr) {
request_do_action(ACTION_HELP_WONDER,
caravan_id, caravan_target_id, 0, "");
}
}
/***********************************************************************//**
Action Disband Unit Recover for choice dialog
***************************************************************************/
static void unit_disband_recover(QVariant data1, QVariant data2, action_id act)
{
int actor_id = data1.toInt();
int tgt_city_id = data2.toInt();
if (game_unit_by_number(actor_id) != nullptr
&& game_city_by_number(tgt_city_id) != nullptr) {
request_do_action(ACTION_DISBAND_UNIT_RECOVER,
actor_id, tgt_city_id, 0, "");
}
}
/***********************************************************************//**
Action Home City for choice dialog
***************************************************************************/
static void unit_home_city(QVariant data1, QVariant data2, action_id act)
{
int actor_id = data1.toInt();
int tgt_city_id = data2.toInt();
if (game_unit_by_number(actor_id) != nullptr
&& game_city_by_number(tgt_city_id) != nullptr) {
request_do_action(ACTION_HOME_CITY,
actor_id, tgt_city_id, 0, "");
request_do_action(act, actor_unit_id, target_city_id, 0, "");
}
}
......
}
}
/***********************************************************************//**
Action "Airlift Unit" for choice dialog
***************************************************************************/
static void airlift(QVariant data1, QVariant data2, action_id act)
{
int actor_id = data1.toInt();
int tgt_city_id = data2.toInt();
if (game_unit_by_number(actor_id) != nullptr
&& game_city_by_number(tgt_city_id) != nullptr) {
request_do_action(ACTION_AIRLIFT,
actor_id, tgt_city_id, 0, "");
}
}
/***********************************************************************//**
Action "Conquer City Shrink" for choice dialog
***************************************************************************/
static void conquer_city_shrink(QVariant data1, QVariant data2, action_id act)
{
int actor_id = data1.toInt();
int tgt_city_id = data2.toInt();
if (game_unit_by_number(actor_id) != nullptr
&& game_city_by_number(tgt_city_id) != nullptr) {
request_do_action(ACTION_CONQUER_CITY_SHRINK,
actor_id, tgt_city_id, 0, "");
}
}
/***********************************************************************//**
Action "Conquer City Shrink 2" for choice dialog
***************************************************************************/
static void conquer_city_shrink2(QVariant data1, QVariant data2, action_id act)
{
int actor_id = data1.toInt();
int tgt_city_id = data2.toInt();
if (game_unit_by_number(actor_id) != nullptr
&& game_city_by_number(tgt_city_id) != nullptr) {
request_do_action(ACTION_CONQUER_CITY_SHRINK2,
actor_id, tgt_city_id, 0, "");
}
}
/***********************************************************************//**
Action "Conquer City Shrink 3" for choice dialog
***************************************************************************/
static void conquer_city_shrink3(QVariant data1, QVariant data2, action_id act)
{
int actor_id = data1.toInt();
int tgt_city_id = data2.toInt();
if (game_unit_by_number(actor_id) != nullptr
&& game_city_by_number(tgt_city_id) != nullptr) {
request_do_action(ACTION_CONQUER_CITY_SHRINK3,
actor_id, tgt_city_id, 0, "");
}
}
/***********************************************************************//**
Action "Conquer City Shrink 4" for choice dialog
***************************************************************************/
static void conquer_city_shrink4(QVariant data1, QVariant data2, action_id act)
{
int actor_id = data1.toInt();
int tgt_city_id = data2.toInt();
if (game_unit_by_number(actor_id) != nullptr
&& game_city_by_number(tgt_city_id) != nullptr) {
request_do_action(ACTION_CONQUER_CITY_SHRINK4,
actor_id, tgt_city_id, 0, "");
}
}
/***********************************************************************//**
Action "Conquer Extras" for choice dialog
***************************************************************************/
......
}
}
/***********************************************************************//**
Action Poison City for choice dialog
***************************************************************************/
static void spy_poison(QVariant data1, QVariant data2, action_id act)
{
int diplomat_id = data1.toInt();
int diplomat_target_id = data2.toInt();
if (game_unit_by_number(diplomat_id) != nullptr
&& game_city_by_number(diplomat_target_id) != nullptr) {
request_do_action(ACTION_SPY_POISON,
diplomat_id, diplomat_target_id, 0, "");
}
}
/***********************************************************************//**
Action Poison City Escape for choice dialog
***************************************************************************/
static void spy_poison_esc(QVariant data1, QVariant data2, action_id act)
{
int diplomat_id = data1.toInt();
int diplomat_target_id = data2.toInt();
if (game_unit_by_number(diplomat_id) != nullptr
&& game_city_by_number(diplomat_target_id) != nullptr) {
request_do_action(ACTION_SPY_POISON_ESC,
diplomat_id, diplomat_target_id, 0, "");
}
}
/***********************************************************************//**
Action Spread Plague for choice dialog
***************************************************************************/
static void spy_spread_plague(QVariant data1, QVariant data2, action_id act)
{
int diplomat_id = data1.toInt();
int diplomat_target_id = data2.toInt();
if (game_unit_by_number(diplomat_id) != nullptr
&& game_city_by_number(diplomat_target_id) != nullptr) {
request_do_action(ACTION_SPY_SPREAD_PLAGUE,
diplomat_id, diplomat_target_id, 0, "");
}
}
/***********************************************************************//**
Action suitcase nuke for choice dialog
***************************************************************************/
static void spy_nuke_city(QVariant data1, QVariant data2, action_id act)
{
int diplomat_id = data1.toInt();
int diplomat_target_id = data2.toInt();
if (game_unit_by_number(diplomat_id) != nullptr
&& game_city_by_number(diplomat_target_id) != nullptr) {
request_do_action(ACTION_SPY_NUKE,
diplomat_id, diplomat_target_id, 0, "");
}
}
/***********************************************************************//**
Action suitcase nuke escape for choice dialog
***************************************************************************/
static void spy_nuke_city_esc(QVariant data1, QVariant data2, action_id act)
{
int diplomat_id = data1.toInt();
int diplomat_target_id = data2.toInt();
if (game_unit_by_number(diplomat_id) != nullptr
&& game_city_by_number(diplomat_target_id) != nullptr) {
request_do_action(ACTION_SPY_NUKE_ESC,
diplomat_id, diplomat_target_id, 0, "");
}
}
/***********************************************************************//**
Action "Nuke City" for choice dialog
***************************************************************************/
static void nuke_city(QVariant data1, QVariant data2, action_id act)
{
int actor_id = data1.toInt();
int target_id = data2.toInt();
if (game_unit_by_number(actor_id) != nullptr
&& game_city_by_number(target_id) != nullptr) {
request_do_action(ACTION_NUKE_CITY,
actor_id, target_id, 0, "");
}
}
/***********************************************************************//**
Action destroy city for choice dialog
***************************************************************************/
static void destroy_city(QVariant data1, QVariant data2, action_id act)
{
int diplomat_id = data1.toInt();
int diplomat_target_id = data2.toInt();
if (game_unit_by_number(diplomat_id) != nullptr
&& game_city_by_number(diplomat_target_id) != nullptr) {
request_do_action(ACTION_DESTROY_CITY,
diplomat_id, diplomat_target_id, 0, "");
}
}
/***********************************************************************//**
Action steal gold for choice dialog
***************************************************************************/
static void spy_steal_gold(QVariant data1, QVariant data2, action_id act)
{
int diplomat_id = data1.toInt();
int diplomat_target_id = data2.toInt();
if (game_unit_by_number(diplomat_id) != nullptr
&& game_city_by_number(diplomat_target_id) != nullptr) {
request_do_action(ACTION_SPY_STEAL_GOLD,
diplomat_id, diplomat_target_id, 0, "");
}
}
/***********************************************************************//**
Action steal gold escape for choice dialog
***************************************************************************/
static void spy_steal_gold_esc(QVariant data1, QVariant data2, action_id act)
{
int diplomat_id = data1.toInt();
int diplomat_target_id = data2.toInt();
if (game_unit_by_number(diplomat_id) != nullptr
&& game_city_by_number(diplomat_target_id) != nullptr) {
request_do_action(ACTION_SPY_STEAL_GOLD_ESC,
diplomat_id, diplomat_target_id, 0, "");
}
}
/***********************************************************************//**
Action steal maps for choice dialog
***************************************************************************/
static void spy_steal_maps(QVariant data1, QVariant data2, action_id act)
{
int diplomat_id = data1.toInt();
int diplomat_target_id = data2.toInt();
if (game_unit_by_number(diplomat_id) != nullptr
&& game_city_by_number(diplomat_target_id) != nullptr) {
request_do_action(ACTION_STEAL_MAPS,
diplomat_id, diplomat_target_id, 0, "");
}
}
/***********************************************************************//**
Action steal maps escape for choice dialog
***************************************************************************/
static void spy_steal_maps_esc(QVariant data1, QVariant data2, action_id act)
{
int diplomat_id = data1.toInt();
int diplomat_target_id = data2.toInt();
if (game_unit_by_number(diplomat_id) != nullptr
&& game_city_by_number(diplomat_target_id) != nullptr) {
request_do_action(ACTION_STEAL_MAPS_ESC,
diplomat_id, diplomat_target_id, 0, "");
}
}
/***********************************************************************//**
Action Spy Escape for choice dialog
***************************************************************************/
static void spy_escape(QVariant data1, QVariant data2, action_id act)
{
int diplomat_id = data1.toInt();
int diplomat_target_id = data2.toInt();
if (game_unit_by_number(diplomat_id) != nullptr
&& game_city_by_number(diplomat_target_id) != nullptr) {
request_do_action(ACTION_SPY_ESCAPE,
diplomat_id, diplomat_target_id, 0, "");
}
}
/***********************************************************************//**
Action establish embassy for choice dialog
***************************************************************************/
static void spy_embassy(QVariant data1, QVariant data2, action_id act)
{
int diplomat_id = data1.toInt();
int diplomat_target_id = data2.toInt();
if (game_unit_by_number(diplomat_id) != nullptr
&& game_city_by_number(diplomat_target_id) != nullptr) {
request_do_action(ACTION_ESTABLISH_EMBASSY, diplomat_id,
diplomat_target_id, 0, "");
}
}
/***********************************************************************//**
Action establish embassy for choice dialog
***************************************************************************/
static void diplomat_embassy(QVariant data1, QVariant data2, action_id act)
{
int diplomat_id = data1.toInt();
int diplomat_target_id = data2.toInt();
if (game_unit_by_number(diplomat_id) != nullptr
&& game_city_by_number(diplomat_target_id) != nullptr) {
request_do_action(ACTION_ESTABLISH_EMBASSY_STAY, diplomat_id,
diplomat_target_id, 0, "");
}
}
/***********************************************************************//**
Action investigate city for choice dialog
***************************************************************************/
static void spy_investigate(QVariant data1, QVariant data2, action_id act)
{
int diplomat_id = data1.toInt();
int diplomat_target_id = data2.toInt();
if (game_city_by_number(diplomat_target_id) != nullptr
&& game_unit_by_number(diplomat_id) != nullptr) {
request_do_action(ACTION_SPY_INVESTIGATE_CITY, diplomat_id,
diplomat_target_id, 0, "");
}
}
/***********************************************************************//**
Action Investigate City Spend Unit for choice dialog
***************************************************************************/
static void diplomat_investigate(QVariant data1, QVariant data2, action_id act)
{
int diplomat_id = data1.toInt();
int diplomat_target_id = data2.toInt();
if (game_city_by_number(diplomat_target_id) != nullptr
&& game_unit_by_number(diplomat_id) != nullptr) {
request_do_action(ACTION_INV_CITY_SPEND, diplomat_id,
diplomat_target_id, 0, "");
}
}
/***********************************************************************//**
Action sabotage for choice dialog
***************************************************************************/
    (1-1/1)