mirror of https://github.com/tstellar/bygfoot.git
Add support for specifying cups in choose_team_sid tag for generated teams
This makes it possible to include national cup winners in international cups.
This commit is contained in:
parent
347d74a3c4
commit
8a3100a28c
44
src/cup.c
44
src/cup.c
|
@ -537,6 +537,43 @@ cup_load_choose_team_from_league(Cup *cup, const League *league,
|
||||||
number_of_teams, cup->group);
|
number_of_teams, cup->group);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** This function is used when a CupChooseTeam object references a cup
|
||||||
|
* that is outside of the users's league. It returns a list of teamas
|
||||||
|
* that would participate in this cup. This is a best effort
|
||||||
|
* function and the goal is to just get enough teams to satisfy the
|
||||||
|
* requirements of the CupChooseTeam object, so it may omit some
|
||||||
|
* teams especially if the cup definition is complex.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
cup_generate_team_list(const Cup *cup, GArray *teams, gboolean league_talents)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
const League *top_league = NULL;
|
||||||
|
for (i = 0; i < cup->rounds->len; i++) {
|
||||||
|
const CupRound *round = &g_array_index(cup->rounds, CupRound, i);
|
||||||
|
int j;
|
||||||
|
for (j = 0; j < round->choose_teams->len; j++) {
|
||||||
|
const CupChooseTeam *ct = &g_array_index(round->choose_teams, CupChooseTeam, j);
|
||||||
|
const League *league = bygfoot_get_league_sid(ct->sid);
|
||||||
|
if (!league)
|
||||||
|
continue;
|
||||||
|
if (!top_league || (league->layer < top_league->layer))
|
||||||
|
top_league = league;
|
||||||
|
if (league->layer == 1)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!top_league)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = 0; i < top_league->teams->len; i++) {
|
||||||
|
Team *team = &g_array_index(top_league->teams, Team, i);
|
||||||
|
if (league_talents)
|
||||||
|
team->average_talent = top_league->average_talent;
|
||||||
|
g_ptr_array_add(teams, team);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Load the teams specified in the chooseteam from a non-country league. */
|
/** Load the teams specified in the chooseteam from a non-country league. */
|
||||||
void
|
void
|
||||||
cup_load_choose_team_generate(Cup *cup, CupRound *cup_round, const CupChooseTeam *ct)
|
cup_load_choose_team_generate(Cup *cup, CupRound *cup_round, const CupChooseTeam *ct)
|
||||||
|
@ -560,6 +597,13 @@ cup_load_choose_team_generate(Cup *cup, CupRound *cup_round, const CupChooseTeam
|
||||||
for(j=0;j<sids->len;j++)
|
for(j=0;j<sids->len;j++)
|
||||||
{
|
{
|
||||||
const gchar *sid = g_ptr_array_index(sids, j);
|
const gchar *sid = g_ptr_array_index(sids, j);
|
||||||
|
Cup *generate_cup = bygfoot_get_cup_sid(sid);
|
||||||
|
if (generate_cup) {
|
||||||
|
cup_generate_team_list(generate_cup, teams_local,
|
||||||
|
query_league_cup_has_property(cup->id, "league_talents"));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if(!query_cup_choose_team_is_league(sid))
|
if(!query_cup_choose_team_is_league(sid))
|
||||||
{
|
{
|
||||||
const League *league = bygfoot_get_league_sid(sid);
|
const League *league = bygfoot_get_league_sid(sid);
|
||||||
|
|
17
src/league.c
17
src/league.c
|
@ -442,6 +442,23 @@ country_get_cup_sid(const Country *country, const gchar *sid)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get the cup with \p sid from the list of all countries.
|
||||||
|
* @returns A pointer to a Cup object or NULL if the cup is not found.
|
||||||
|
*/
|
||||||
|
Cup *
|
||||||
|
bygfoot_get_cup_sid(const gchar *sid)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < country_list->len; i++) {
|
||||||
|
Country *country = g_ptr_array_index(country_list, i);
|
||||||
|
Cup *cup = country_get_cup_sid(country, sid);
|
||||||
|
if (cup)
|
||||||
|
return cup;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** @return A League object if the league with \p sid belongs to \p country.
|
/** @return A League object if the league with \p sid belongs to \p country.
|
||||||
* NULL otherwise.
|
* NULL otherwise.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -106,6 +106,9 @@ country_has_league_sid(const Country *country, const gchar *sid);
|
||||||
Cup *
|
Cup *
|
||||||
country_get_cup_sid(const Country *country, const gchar *sid);
|
country_get_cup_sid(const Country *country, const gchar *sid);
|
||||||
|
|
||||||
|
Cup *
|
||||||
|
bygfoot_get_cup_sid(const gchar *sid);
|
||||||
|
|
||||||
League *
|
League *
|
||||||
country_get_league_sid(Country *country, const gchar *sid);
|
country_get_league_sid(Country *country, const gchar *sid);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue