Author: sveinung Date: Thu Nov 10 01:22:46 2016 New Revision: 34463 URL: http://svn.gna.org/viewcvs/freeciv?rev=34463&view=rev Log: A nation contradicts its group's absence.
See patch #7962 Modified: trunk/common/requirements.c Modified: trunk/common/requirements.c URL: http://svn.gna.org/viewcvs/freeciv/trunk/common/requirements.c?rev=34463&r1=34462&r2=34463&view=diff ============================================================================== --- trunk/common/requirements.c (original) +++ trunk/common/requirements.c Thu Nov 10 01:22:46 2016 @@ -1017,6 +1017,32 @@ } /************************************************************************** + Returns TRUE if the specified nation requirement contradicts the + specified nation group requirement. +**************************************************************************/ +static bool nation_contra_group(const struct requirement *nation_req, + const struct requirement *group_req) +{ + /* The input is sane. */ + fc_assert_ret_val(nation_req->source.kind == VUT_NATION, FALSE); + fc_assert_ret_val(group_req->source.kind == VUT_NATIONGROUP, FALSE); + + if (nation_req->range == REQ_RANGE_PLAYER + && group_req->range == REQ_RANGE_PLAYER) { + /* Applies to the same target building. */ + + if (nation_req->present && !group_req->present) { + /* The target nation can't be in the group. */ + return nation_is_in_group(nation_req->source.value.nation, + group_req->source.value.nationgroup); + } + } + + /* No special knowledge. */ + return FALSE; +} + +/************************************************************************** Returns TRUE if req1 and req2 contradicts each other. TODO: If information about what entity each requirement type will be @@ -1087,6 +1113,22 @@ return req1->source.value.minmoves <= req2->source.value.minmoves; } } + break; + case VUT_NATION: + if (req2->source.kind == VUT_NATIONGROUP) { + return nation_contra_group(req1, req2); + } + + /* No special knowledge. */ + return FALSE; + break; + case VUT_NATIONGROUP: + if (req2->source.kind == VUT_NATION) { + return nation_contra_group(req2, req1); + } + + /* No special knowledge. */ + return FALSE; break; default: /* No special knowledge exists. The requirements aren't the exact _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits