/************************************************************************** ... **************************************************************************/ void handle_diplomacy_init(struct player *pplayer, struct packet_diplomacy_info *packet) { struct packet_diplomacy_info pa; struct player *plr0, *plr1; plr0=&game.players[packet->plrno0]; plr1=&game.players[packet->plrno1]; if(!find_treaty(plr0, plr1)) { if(player_has_embassy(plr0, plr1) && plr0->is_connected && plr0->is_alive && plr1->is_connected && plr1->is_alive) { struct Treaty *ptreaty; ptreaty=(struct Treaty *)malloc(sizeof(struct Treaty)); init_treaty(ptreaty, plr0, plr1); genlist_insert(&treaties, ptreaty, 0); pa.plrno0=plr0->player_no; pa.plrno1=plr1->player_no; send_packet_diplomacy_info(plr0->conn, PACKET_DIPLOMACY_INIT_MEETING, &pa); pa.plrno0=plr1->player_no; pa.plrno1=plr0->player_no; send_packet_diplomacy_info(plr1->conn, PACKET_DIPLOMACY_INIT_MEETING, &pa); } } }
/************************************************************************** Is an evalutaion of the requirement accurate when pow_player evaluates it? Note: Assumed to use pow_player's data. TODO: Move the data to a data file. That will - let non programmers help complete it and/or fix what is wrong - let clients not written in C use the data **************************************************************************/ static bool is_req_knowable(const struct player *pow_player, const struct player *target_player, const struct player *other_player, const struct city *target_city, const struct impr_type *target_building, const struct tile *target_tile, const struct unit_type *target_unittype, const struct output_type *target_output, const struct specialist *target_specialist, const struct requirement *req) { fc_assert_ret_val_msg(NULL != pow_player, false, "No point of view"); if ((req->source.kind == VUT_UTFLAG || req->source.kind == VUT_UTYPE) && target_unittype != NULL) { return TRUE; } if (req->source.kind == VUT_DIPLREL && pow_player == target_player && (req->range == REQ_RANGE_LOCAL || req->range == REQ_RANGE_PLAYER)) { return TRUE; } if (req->source.kind == VUT_MINSIZE && target_city != NULL) { enum known_type vision = tile_get_known(city_tile(target_city), pow_player); if (vision == TILE_KNOWN_SEEN || city_owner(target_city) == pow_player) { return TRUE; } } if (req->source.kind == VUT_CITYTILE && req->range == REQ_RANGE_LOCAL) { enum known_type vision = tile_get_known(target_tile, pow_player); if (vision == TILE_KNOWN_SEEN || (target_city && city_owner(target_city) == pow_player)) { return TRUE; } } if (req->source.kind == VUT_NATION) { return TRUE; } if (req->source.kind == VUT_ADVANCE || req->source.kind == VUT_TECHFLAG) { if (req->range == REQ_RANGE_PLAYER && (pow_player == target_player || player_has_embassy(pow_player, target_player))) { return TRUE; } } if (req->source.kind == VUT_GOVERNMENT) { if (req->range == REQ_RANGE_PLAYER && (pow_player == target_player || could_intel_with_player(pow_player, target_player))) { return TRUE; } } /* Uncertain or no support added yet. */ return FALSE; }
static bool have_diplomat_info_about(struct player *pPlayer) { return (pPlayer == client.conn.playing || (pPlayer != client.conn.playing && player_has_embassy(client.conn.playing, pPlayer))); }
/************************************************************************** Slot for selecting player/nation **************************************************************************/ void plr_widget::nation_selected(const QItemSelection &sl, const QItemSelection &ds) { QModelIndex index; QVariant qvar; QModelIndexList indexes = sl.indexes(); struct city *pcity; const struct player_diplstate *state; struct player_research *research; char tbuf[256]; QString res; QString sp = " "; QString nl = "<br>"; struct player *pplayer; int a , b; bool added; bool entry_exist = false; struct player *me; Tech_type_id tech_id; other_player = NULL; intel_str.clear(); tech_str.clear(); ally_str.clear(); if (indexes.isEmpty()) { plr->update_report(); return; } index = indexes.at(0); qvar = index.data(Qt::UserRole); pplayer = reinterpret_cast<player *>(qvar.value<void *>()); other_player = pplayer; if (pplayer->is_alive == false) { plr->update_report(); return; } pcity = player_capital(pplayer); research = player_research_get(pplayer); switch (research->researching) { case A_UNKNOWN: res = _("(Unknown)"); break; case A_UNSET: res = _("(none)"); break; default: res = QString(advance_name_researching(pplayer)) + sp + "(" + QString::number(research->bulbs_researched) + "/" + QString::number(total_bulbs_required(pplayer)) + ")"; break; } /** Formatting rich text */ intel_str = QString("<table><tr><td><b>") + _("Nation") + QString("</b></td><td>") + QString(nation_adjective_for_player(pplayer)) + QString("</td><tr><td><b>") + N_("Ruler:") + QString("</b></td><td>") + QString(ruler_title_for_player(pplayer, tbuf, sizeof(tbuf))) + QString("</td></tr><tr><td><b>") + N_("Government:") + QString("</b></td><td>") + QString(government_name_for_player(pplayer)) + QString("</td></tr><tr><td><b>") + N_("Capital:") + QString("</b></td><td>") + QString(((!pcity) ? _("(unknown)") : city_name(pcity))) + QString("</td></tr><tr><td><b>") + N_("Gold:") + QString("</b></td><td>") + QString::number(pplayer->economic.gold) + QString("</td></tr><tr><td><b>") + N_("Tax:") + QString("</b></td><td>") + QString::number(pplayer->economic.tax) + QString("%</td></tr><tr><td><b>") + N_("Science:") + QString("</b></td><td>") + QString::number(pplayer->economic.science) + QString("%</td></tr><tr><td><b>") + N_("Luxury:") + QString("</b></td><td>") + QString::number(pplayer->economic.luxury) + QString("%</td></tr><tr><td><b>") + N_("Researching:") + QString("</b></td><td>") + res + QString("</td></table>"); for (int i = 0; i < static_cast<int>(DS_LAST); i++) { added = false; if (entry_exist) { ally_str += "<br>"; } entry_exist = false; players_iterate_alive(other) { if (other == pplayer) { continue; } state = player_diplstate_get(pplayer, other); if (static_cast<int>(state->type) == i) { if (added == false) { ally_str = ally_str + QString("<b>") + QString(diplstate_type_translated_name( static_cast<diplstate_type>(i))) + ": " + QString("</b>") + nl; added = true; } ally_str = ally_str + nation_plural_for_player(other) + ", "; entry_exist = true; } } players_iterate_alive_end; if (entry_exist) { ally_str.replace(ally_str.lastIndexOf(","), 1, "."); } } me = client_player(); if ((player_has_embassy(me, pplayer) || client_is_global_observer()) && me != pplayer) { a = 0; b = 0; techs_known = QString("<b>") + _("Techs unknown by") + sp + QString(nation_adjective_for_player(pplayer)) + sp + QString(_("nation")) + QString("</b> :"); techs_unknown = QString("<b>") + _("Techs unkown by you") + sp + QString("</b> :"); advance_iterate(A_FIRST, padvance) { tech_id = advance_number(padvance); if (player_invention_state(me, tech_id) == TECH_KNOWN && (player_invention_state(pplayer, tech_id) == TECH_UNKNOWN)) { a++; techs_known = techs_known + QString("<i>") + advance_name_for_player(pplayer, tech_id) + "," + QString("</i>") + sp; } if (player_invention_state(me, tech_id) == TECH_UNKNOWN && (player_invention_state(pplayer, tech_id) == TECH_KNOWN)) { b++; techs_unknown = techs_unknown + QString("<i>") + advance_name_for_player(pplayer, tech_id) + "," + QString("</i>") + sp; } } advance_iterate_end;