mirror of
https://github.com/tstellar/bygfoot.git
synced 2025-03-09 15:20:08 +01:00
"Betting bugfix."
This commit is contained in:
parent
b1c539abe0
commit
54132543c4
@ -3,6 +3,8 @@
|
||||
- added strategies for CPU teams
|
||||
- added option to randomise teams in cups in the startup window
|
||||
(relevant for the World Cup definition, mainly)
|
||||
- added betting
|
||||
- minor bugfixes
|
||||
|
||||
|
||||
10/16/2005: v1.9.2
|
||||
|
File diff suppressed because one or more lines are too long
@ -151,14 +151,25 @@
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkTreeView" id="treeview_bets">
|
||||
<widget class="GtkScrolledWindow" id="scrolledwindow1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="headers_visible">True</property>
|
||||
<property name="rules_hint">False</property>
|
||||
<property name="reorderable">False</property>
|
||||
<property name="enable_search">True</property>
|
||||
<signal name="button_press_event" handler="on_treeview_bets_button_press_event" last_modification_time="Thu, 27 Oct 2005 19:43:51 GMT"/>
|
||||
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="shadow_type">GTK_SHADOW_IN</property>
|
||||
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkTreeView" id="treeview_bets">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="headers_visible">True</property>
|
||||
<property name="rules_hint">False</property>
|
||||
<property name="reorderable">False</property>
|
||||
<property name="enable_search">True</property>
|
||||
<signal name="button_press_event" handler="on_treeview_bets_button_press_event" last_modification_time="Thu, 27 Oct 2005 19:43:51 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
36
src/bet.c
36
src/bet.c
@ -51,19 +51,18 @@ bet_round_odd(gfloat odd)
|
||||
|
||||
/** Find the bet containing the fixture. */
|
||||
BetMatch*
|
||||
bet_from_fixture(const Fixture *fix)
|
||||
bet_from_fixture(gint fix_id)
|
||||
{
|
||||
gint i, j;
|
||||
|
||||
for(i=1;i>=0;i--)
|
||||
for(j=0;j<bets[i]->len;j++)
|
||||
if(g_array_index(bets[i], BetMatch, j).fix == fix)
|
||||
if(g_array_index(bets[i], BetMatch, j).fix_id == fix_id)
|
||||
return &g_array_index(bets[i], BetMatch, j);
|
||||
|
||||
main_exit_program(EXIT_BET_ERROR,
|
||||
"bet_from_fixture: bet going with fixture %s %s - %s not found",
|
||||
league_cup_get_name_string(fix->clid),
|
||||
fix->teams[0]->name, fix->teams[0]->name);
|
||||
"bet_from_fixture: bet going with fixture %d not found",
|
||||
fix_id);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@ -73,7 +72,8 @@ void
|
||||
bet_update_user_bets(void)
|
||||
{
|
||||
gint i, j, outcome;
|
||||
const BetMatch *bet;
|
||||
const BetMatch *bet = NULL;
|
||||
const Fixture *fix = NULL;
|
||||
|
||||
for(i=0;i<users->len;i++)
|
||||
{
|
||||
@ -82,12 +82,13 @@ bet_update_user_bets(void)
|
||||
|
||||
for(j=0;j<usr(i).bets[1]->len;j++)
|
||||
{
|
||||
bet = bet_from_fixture(g_array_index(usr(i).bets[1], BetUser, j).fix);
|
||||
bet = bet_from_fixture(g_array_index(usr(i).bets[1], BetUser, j).fix_id);
|
||||
fix = fixture_from_id(g_array_index(usr(i).bets[1], BetUser, j).fix_id);
|
||||
|
||||
if(bet->fix->result[0][0] < bet->fix->result[1][0])
|
||||
if(fix->result[0][0] < fix->result[1][0])
|
||||
outcome = 2;
|
||||
else
|
||||
outcome = (bet->fix->result[0][0] == bet->fix->result[1][0]);
|
||||
outcome = (fix->result[0][0] == fix->result[1][0]);
|
||||
|
||||
if(outcome == g_array_index(usr(i).bets[1], BetUser, j).outcome)
|
||||
{
|
||||
@ -123,7 +124,8 @@ bet_update_user_bets(void)
|
||||
void
|
||||
bet_get_odds(BetMatch *bet)
|
||||
{
|
||||
gfloat home_advantage = (bet->fix->home_advantage) ?
|
||||
const Fixture *fix = fixture_from_id(bet->fix_id);
|
||||
gfloat home_advantage = (fix->home_advantage) ?
|
||||
(const_float("float_game_home_advantage_lower") +
|
||||
const_float("float_game_home_advantage_upper")) / 2 : 0;
|
||||
gfloat av_skill[2] = {0, 0}, skilldiff;
|
||||
@ -133,7 +135,7 @@ bet_get_odds(BetMatch *bet)
|
||||
{
|
||||
for(j=0;j<11;j++)
|
||||
av_skill[i] +=
|
||||
player_get_game_skill(player_of_idx_team(bet->fix->teams[i], j),
|
||||
player_get_game_skill(player_of_idx_team(fix->teams[i], j),
|
||||
FALSE, TRUE);
|
||||
|
||||
av_skill[i] /= 11;
|
||||
@ -189,7 +191,7 @@ bet_update(void)
|
||||
for(i=0;i<fixtures->len;i++)
|
||||
if(fixture_user_team_involved((Fixture*)g_ptr_array_index(fixtures, i)) == -1)
|
||||
{
|
||||
new_bet.fix = (Fixture*)g_ptr_array_index(fixtures, i);
|
||||
new_bet.fix_id = ((Fixture*)g_ptr_array_index(fixtures, i))->id;
|
||||
bet_get_odds(&new_bet);
|
||||
g_array_append_val(bets[1], new_bet);
|
||||
}
|
||||
@ -205,7 +207,7 @@ bet_is_user(const BetMatch *bet)
|
||||
|
||||
for(i=1;i>=0;i--)
|
||||
for(j=0;j<current_user.bets[i]->len;j++)
|
||||
if(bet->fix == g_array_index(current_user.bets[i], BetUser, j).fix)
|
||||
if(bet->fix_id == g_array_index(current_user.bets[i], BetUser, j).fix_id)
|
||||
return &g_array_index(current_user.bets[i], BetUser, j);
|
||||
|
||||
return NULL;
|
||||
@ -213,7 +215,7 @@ bet_is_user(const BetMatch *bet)
|
||||
|
||||
/** Place a new bet. */
|
||||
void
|
||||
bet_place(const Fixture *fix, gint outcome, gint wager)
|
||||
bet_place(gint fix_id, gint outcome, gint wager)
|
||||
{
|
||||
gfloat max_wager = finance_wage_unit(current_user.tm) *
|
||||
const_float("float_bet_wager_limit_factor");
|
||||
@ -236,7 +238,7 @@ bet_place(const Fixture *fix, gint outcome, gint wager)
|
||||
return;
|
||||
}
|
||||
|
||||
new_bet.fix = fix;
|
||||
new_bet.fix_id = fix_id;
|
||||
new_bet.outcome = outcome;
|
||||
new_bet.wager = wager;
|
||||
|
||||
@ -248,12 +250,12 @@ bet_place(const Fixture *fix, gint outcome, gint wager)
|
||||
|
||||
/** Remove the bet on the given fixture. */
|
||||
void
|
||||
bet_remove(const Fixture *fix)
|
||||
bet_remove(gint fix_id)
|
||||
{
|
||||
gint i;
|
||||
|
||||
for(i=0;i<current_user.bets[1]->len;i++)
|
||||
if(g_array_index(current_user.bets[1], BetUser, i).fix == fix)
|
||||
if(g_array_index(current_user.bets[1], BetUser, i).fix_id == fix_id)
|
||||
{
|
||||
g_array_remove_index(current_user.bets[1], i);
|
||||
return;
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include "fixture_struct.h"
|
||||
|
||||
BetMatch*
|
||||
bet_from_fixture(const Fixture *fix);
|
||||
bet_from_fixture(gint fix_id);
|
||||
|
||||
void
|
||||
bet_update_user_bets(void);
|
||||
@ -47,9 +47,9 @@ BetUser*
|
||||
bet_is_user(const BetMatch *bet);
|
||||
|
||||
void
|
||||
bet_place(const Fixture *fix, gint outcome, gint wager);
|
||||
bet_place(gint fix_id, gint outcome, gint wager);
|
||||
|
||||
void
|
||||
bet_remove(const Fixture *fix);
|
||||
bet_remove(gint fix_id);
|
||||
|
||||
#endif
|
||||
|
@ -31,7 +31,7 @@
|
||||
typedef struct
|
||||
{
|
||||
/** The match the bet is about. */
|
||||
const Fixture *fix;
|
||||
gint fix_id;
|
||||
/** The odds for a win, draw or loss of the first team. */
|
||||
gfloat odds[3];
|
||||
|
||||
@ -41,7 +41,7 @@ typedef struct
|
||||
typedef struct
|
||||
{
|
||||
/** Match the user betted on. */
|
||||
const Fixture *fix;
|
||||
gint fix_id;
|
||||
/** Which outcome he picked. */
|
||||
gint outcome;
|
||||
/** How much he wagered. */
|
||||
|
@ -42,6 +42,8 @@
|
||||
#include "user.h"
|
||||
#include "window.h"
|
||||
|
||||
#include "bet.h"
|
||||
|
||||
/** Show the users' live games. */
|
||||
void
|
||||
callback_show_next_live_game(void)
|
||||
|
@ -166,7 +166,8 @@ query_cup_choose_team_is_league(const gchar *sid)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/** Write the cup or league of the chooseteam into the appropriate pointer. */
|
||||
/** Write the cup or league of the chooseteam into the appropriate pointer
|
||||
and return TRUE; return FALSE if no cup/league is found. */
|
||||
void
|
||||
cup_get_choose_team_league_cup(const CupChooseTeam *ct,
|
||||
const League **league, const Cup **cup)
|
||||
@ -179,12 +180,12 @@ cup_get_choose_team_league_cup(const CupChooseTeam *ct,
|
||||
|
||||
sscanf(ct->sid, "%[^0-9]%d", trash, &idx);
|
||||
|
||||
if(g_str_has_prefix(ct->sid, "LEAGUE"))
|
||||
if(g_str_has_prefix(ct->sid, "LEAGUE") && idx >=0 && idx <= ligs->len)
|
||||
{
|
||||
*league = &lig(idx - 1);
|
||||
*cup = NULL;
|
||||
}
|
||||
else if(g_str_has_prefix(ct->sid, "CUP"))
|
||||
else if(g_str_has_prefix(ct->sid, "CUP") && idx >=0 && idx <= cps->len)
|
||||
{
|
||||
*cup = &cp(idx - 1);
|
||||
*league = NULL;
|
||||
|
@ -1335,3 +1335,9 @@ fixture_get_goals_to_win(const Fixture *fix, const Team *tm)
|
||||
|
||||
return return_value;
|
||||
}
|
||||
|
||||
gint
|
||||
fixture_get_goals_to_draw(const Fixture *fix, const Team *tm)
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -399,9 +399,6 @@ league_season_start(League *league)
|
||||
player_season_start(
|
||||
&g_array_index(g_array_index(league->teams, Team, i).players, Player, j), team_change_factor);
|
||||
|
||||
if(team_is_user(&g_array_index(league->teams, Team, i)) == -1)
|
||||
team_update_cpu_structure(&g_array_index(league->teams, Team, i));
|
||||
|
||||
g_array_index(league->teams, Team, i).stadium.average_attendance =
|
||||
g_array_index(league->teams, Team, i).stadium.games =
|
||||
g_array_index(league->teams, Team, i).stadium.possible_attendance = 0;
|
||||
|
@ -74,7 +74,7 @@ lg_commentary_generate(const LiveGame *live_game, LiveGameUnit *unit,
|
||||
lg_commentary_set_player_tokens(unit, live_game->fix);
|
||||
lg_commentary_set_stats_tokens(&live_game->stats);
|
||||
}
|
||||
|
||||
|
||||
if(event_type == LIVE_GAME_EVENT_STYLE_CHANGE_ALL_OUT_DEFEND ||
|
||||
event_type == LIVE_GAME_EVENT_STYLE_CHANGE_DEFEND ||
|
||||
event_type == LIVE_GAME_EVENT_STYLE_CHANGE_BALANCED ||
|
||||
|
@ -74,7 +74,7 @@ live_game_calculate_fixture(Fixture *fix)
|
||||
game_get_values(match->fix, match->team_values,
|
||||
match->home_advantage);
|
||||
|
||||
if((debug > 80 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 80 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\n\nlive_game_calculate_fixture\n%04d %s %s %04d\n\n",
|
||||
tm0->id, tm0->name, tm1->name, tm1->id);
|
||||
@ -90,7 +90,7 @@ live_game_calculate_fixture(Fixture *fix)
|
||||
|
||||
if(last_unit.event.type == LIVE_GAME_EVENT_END_MATCH)
|
||||
{
|
||||
if(fixture_user_team_involved(match->fix) != -1 || stat5 < -1000)
|
||||
if(stat2 != -1 || stat5 < -1000)
|
||||
lg_commentary_free_tokens();
|
||||
game_post_match(fix);
|
||||
}
|
||||
@ -102,14 +102,14 @@ live_game_calculate_fixture(Fixture *fix)
|
||||
void
|
||||
live_game_initialize(Fixture *fix)
|
||||
{
|
||||
statp= (fixture_user_team_involved(fix) != -1) ?
|
||||
&usr(fixture_user_team_involved(fix)).live_game : &live_game_temp;
|
||||
show = (fixture_user_team_involved(fix) != -1 &&
|
||||
option_int("int_opt_user_show_live_game",
|
||||
&usr(fixture_user_team_involved(fix)).options));
|
||||
|
||||
stat2 = fixture_user_team_involved(fix);
|
||||
|
||||
statp= (stat2 != -1) ?
|
||||
&usr(stat2).live_game : &live_game_temp;
|
||||
show = (stat2 != -1 &&
|
||||
option_int("int_opt_user_show_live_game",
|
||||
&usr(stat2).options));
|
||||
|
||||
live_game_reset(match, fix, TRUE);
|
||||
|
||||
if(show)
|
||||
@ -128,7 +128,7 @@ live_game_initialize(Fixture *fix)
|
||||
|
||||
game_initialize(fix);
|
||||
|
||||
if(fixture_user_team_involved(fix) != -1 || stat5 < -1000)
|
||||
if(stat2 != -1 || stat5 < -1000)
|
||||
lg_commentary_initialize(fix);
|
||||
}
|
||||
|
||||
@ -139,7 +139,7 @@ live_game_create_unit(void)
|
||||
{
|
||||
LiveGameUnit new;
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_create_unit\n");
|
||||
|
||||
@ -199,7 +199,7 @@ live_game_fill_new_unit(LiveGameUnit *new)
|
||||
gfloat possession_change, scoring_chance = 0,
|
||||
injury_event_prob, foul_event_prob;
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_fill_new_unit\n");
|
||||
|
||||
@ -259,7 +259,7 @@ live_game_create_start_unit(void)
|
||||
{
|
||||
LiveGameUnit new;
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_create_start_unit\n");
|
||||
new.event.player =
|
||||
@ -288,7 +288,7 @@ live_game_evaluate_unit(LiveGameUnit *unit)
|
||||
{
|
||||
gint type = unit->event.type;
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_evaluate_unit\n");
|
||||
if(type == LIVE_GAME_EVENT_FOUL)
|
||||
@ -314,7 +314,7 @@ live_game_evaluate_unit(LiveGameUnit *unit)
|
||||
{
|
||||
live_game_finish_unit();
|
||||
if(type != LIVE_GAME_EVENT_END_MATCH && show &&
|
||||
option_int("int_opt_user_pause_break", &usr(fixture_user_team_involved(match->fix)).options))
|
||||
option_int("int_opt_user_pause_break", &usr(stat2).options))
|
||||
misc_callback_pause_live_game();
|
||||
}
|
||||
else if(type != LIVE_GAME_EVENT_END_MATCH)
|
||||
@ -329,7 +329,7 @@ live_game_event_foul(void)
|
||||
gfloat rndom = math_rnd(0, 1);
|
||||
gint type, fouled_player, foul_player, foul_team;
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_event_foul\n");
|
||||
if(math_rnd(0, 1) > const_float("float_live_game_foul_by_possession") *
|
||||
@ -408,7 +408,7 @@ live_game_event_foul(void)
|
||||
void
|
||||
live_game_event_lost_possession(void)
|
||||
{
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_event_lost_possession\n");
|
||||
last_unit.event.player =
|
||||
@ -439,8 +439,9 @@ live_game_event_injury(gint team, gint player, gboolean create_new)
|
||||
{
|
||||
LiveGameUnit new;
|
||||
gint old_structure = -1, sub_in = -1;
|
||||
gint usr_idx = -1;
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_event_injury\n");
|
||||
if(create_new)
|
||||
@ -455,6 +456,8 @@ live_game_event_injury(gint team, gint player, gboolean create_new)
|
||||
}
|
||||
else
|
||||
live_game_injury_get_player();
|
||||
|
||||
usr_idx = team_is_user(tm[last_unit.event.team]);
|
||||
|
||||
last_unit.minute = -1;
|
||||
last_unit.event.type = LIVE_GAME_EVENT_INJURY;
|
||||
@ -464,7 +467,7 @@ live_game_event_injury(gint team, gint player, gboolean create_new)
|
||||
last_unit.event.type = LIVE_GAME_EVENT_TEMP_INJURY;
|
||||
|
||||
if(debug < 50 ||
|
||||
team_is_user(tm[last_unit.event.team]) == -1)
|
||||
usr_idx == -1)
|
||||
player_of_id_team(tm[last_unit.event.team],
|
||||
last_unit.event.player)->fitness =
|
||||
MAX(0, player_of_id_team(tm[last_unit.event.team],
|
||||
@ -476,7 +479,7 @@ live_game_event_injury(gint team, gint player, gboolean create_new)
|
||||
live_game_finish_unit();
|
||||
|
||||
if(debug >= 50 &&
|
||||
team_is_user(tm[last_unit.event.team]) != -1)
|
||||
usr_idx != -1)
|
||||
return;
|
||||
|
||||
if(last_unit.event.type == LIVE_GAME_EVENT_INJURY)
|
||||
@ -487,11 +490,11 @@ live_game_event_injury(gint team, gint player, gboolean create_new)
|
||||
if(match->subs_left[last_unit.event.team] > 0)
|
||||
{
|
||||
if(show &&
|
||||
team_is_user(tm[last_unit.event.team]) != -1 &&
|
||||
usr_idx != -1 &&
|
||||
((option_int("int_opt_user_pause_injury",
|
||||
&usr(team_is_user(tm[last_unit.event.team])).options) &&
|
||||
&usr(usr_idx).options) &&
|
||||
!option_int("int_opt_user_auto_sub",
|
||||
&usr(team_is_user(tm[last_unit.event.team])).options)) ||
|
||||
&usr(usr_idx).options)) ||
|
||||
tm[last_unit.event.team]->players->len == 11))
|
||||
misc_callback_pause_live_game();
|
||||
else if(tm[last_unit.event.team]->players->len > 11)
|
||||
@ -532,7 +535,7 @@ live_game_event_stadium(void)
|
||||
for(i=1;i<3;i++)
|
||||
probs[i] += probs[i - 1];
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_event_stadium\n");
|
||||
if(rndom <= probs[0])
|
||||
@ -563,7 +566,7 @@ live_game_event_scoring_chance(void)
|
||||
else
|
||||
res_idx = 0;
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_event_scoring_chance\n");
|
||||
|
||||
@ -633,7 +636,7 @@ live_game_event_penalty(void)
|
||||
{
|
||||
LiveGameUnit new;
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_event_penalty\n");
|
||||
|
||||
@ -699,7 +702,7 @@ live_game_event_general(gboolean create_new)
|
||||
{
|
||||
LiveGameUnit new;
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_event_general\n");
|
||||
|
||||
@ -789,7 +792,7 @@ live_game_event_general_get_players(void)
|
||||
uni(unis->len - 2).event.player;
|
||||
gint type = uni(unis->len - 2).event.type;
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_event_general_get_players\n");
|
||||
*pl1 = *pl2 = -1;
|
||||
@ -823,7 +826,7 @@ live_game_event_free_kick(void)
|
||||
{
|
||||
LiveGameUnit new = last_unit;
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_event_free_kick\n");
|
||||
new.event.player =
|
||||
@ -856,8 +859,9 @@ live_game_event_send_off(gint team, gint player, gboolean second_yellow)
|
||||
{
|
||||
LiveGameUnit new = last_unit;
|
||||
gint substitute = -1, to_substitute = -1;
|
||||
gint usr_idx = team_is_user(tm[team]);
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_event_send_off\n");
|
||||
new.event.player =
|
||||
@ -874,7 +878,7 @@ live_game_event_send_off(gint team, gint player, gboolean second_yellow)
|
||||
|
||||
live_game_finish_unit();
|
||||
|
||||
if(debug >= 50 && team_is_user(tm[team]) != -1)
|
||||
if(debug >= 50 && usr_idx != -1)
|
||||
return;
|
||||
|
||||
player_streak_add_to_prob(
|
||||
@ -895,7 +899,7 @@ live_game_event_send_off(gint team, gint player, gboolean second_yellow)
|
||||
|
||||
player_of_id_team(tm[team], player)->career[PLAYER_VALUE_CARD_RED]++;
|
||||
|
||||
if(team_is_user(tm[team]) != -1)
|
||||
if(usr_idx != -1)
|
||||
{
|
||||
tm[team]->structure = team_find_appropriate_structure(tm[team]);
|
||||
team_rearrange(tm[team]);
|
||||
@ -904,11 +908,11 @@ live_game_event_send_off(gint team, gint player, gboolean second_yellow)
|
||||
|
||||
if(match->subs_left[team] > 0)
|
||||
{
|
||||
if(show && team_is_user(tm[team]) != -1 &&
|
||||
if(show && usr_idx != -1 &&
|
||||
((option_int("int_opt_user_pause_red",
|
||||
&usr(team_is_user(tm[team])).options) &&
|
||||
&usr(usr_idx).options) &&
|
||||
!option_int("int_opt_user_auto_sub",
|
||||
&usr(team_is_user(tm[team])).options)) ||
|
||||
&usr(usr_idx).options)) ||
|
||||
tm[team]->players->len == 1))
|
||||
misc_callback_pause_live_game();
|
||||
else if(tm[team]->players->len > 11)
|
||||
@ -927,7 +931,7 @@ live_game_event_send_off(gint team, gint player, gboolean second_yellow)
|
||||
live_game_event_team_change(team, LIVE_GAME_EVENT_STRUCTURE_CHANGE);
|
||||
}
|
||||
}
|
||||
else if(team_is_user(tm[team]) == -1)
|
||||
else if(usr_idx == -1)
|
||||
{
|
||||
tm[team]->structure = team_find_appropriate_structure(tm[team]);
|
||||
team_rearrange(tm[team]);
|
||||
@ -1018,7 +1022,7 @@ live_game_event_duel(void)
|
||||
Player *attacker, *goalie, *assistant;
|
||||
gint res_idx1, res_idx2;
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_event_duel\n");
|
||||
|
||||
@ -1399,11 +1403,11 @@ live_game_finish_unit(void)
|
||||
{
|
||||
LiveGameUnit *unit = &last_unit;
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("\t\tlive_game_finish_unit\n");
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("OOOO1 idx %d min %d type %d poss %d team %d pl %d %d\n", unis->len - 1,
|
||||
unit->minute,
|
||||
@ -1416,13 +1420,13 @@ live_game_finish_unit(void)
|
||||
game_decrease_fitness(match->fix);
|
||||
game_get_values(match->fix, match->team_values,
|
||||
match->home_advantage);
|
||||
if(fixture_user_team_involved(match->fix) != -1 &&
|
||||
if(stat2 != -1 &&
|
||||
stat2 == cur_user && show &&
|
||||
unit->minute % opt_int("int_opt_live_game_player_list_refresh") == 0)
|
||||
treeview_show_user_player_list();
|
||||
}
|
||||
|
||||
if(fixture_user_team_involved(match->fix) != -1 || stat5 < -1000)
|
||||
if(stat2 != -1 || stat5 < -1000)
|
||||
{
|
||||
if(unit->time != LIVE_GAME_UNIT_TIME_PENALTIES)
|
||||
{
|
||||
@ -1457,7 +1461,7 @@ live_game_finish_unit(void)
|
||||
if(show)
|
||||
game_gui_live_game_show_unit(unit);
|
||||
|
||||
if((debug > 100 && fixture_user_team_involved(match->fix) != -1) ||
|
||||
if((debug > 100 && stat2 != -1) ||
|
||||
debug > 130)
|
||||
printf("OOOO idx %d type %d poss %d team %d pl %d %d\n", unis->len - 1,
|
||||
unit->event.type, unit->possession, unit->event.team,
|
||||
|
@ -118,8 +118,6 @@ main_parse_cl_arguments(gint *argc, gchar ***argv)
|
||||
option_add(&options, "int_opt_calodds_skilldiffmax", skilldiffmax, NULL);
|
||||
option_add(&options, "int_opt_calodds_matches", num_matches, NULL);
|
||||
}
|
||||
else
|
||||
option_add(&options, "int_opt_calodds", 0, NULL);
|
||||
|
||||
if(testcom)
|
||||
{
|
||||
@ -156,7 +154,7 @@ main_init_variables(void)
|
||||
country.name = NULL;
|
||||
country.symbol = NULL;
|
||||
country.sid = NULL;;
|
||||
|
||||
|
||||
season = week = week_round = 1;
|
||||
|
||||
for(i=0;i<COUNT_END;i++)
|
||||
@ -203,6 +201,8 @@ main_init_variables(void)
|
||||
|
||||
language_set(language_get_code_index(opt_str("string_opt_language_code")) + 1);
|
||||
|
||||
option_add(&options, "int_opt_calodds", 0, NULL);
|
||||
|
||||
/** Some of these (or all) are disabled (set to 1) in supernational
|
||||
country defs. */
|
||||
option_add(&settings, "int_opt_disable_finances", 0, NULL);
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include "bygfoot.h"
|
||||
|
||||
/**
|
||||
Macros for random number generation (#rnd for float, #rndi and #gauss_disti for integer).
|
||||
Macros for random number generation.
|
||||
*/
|
||||
#define math_rnd(lower,upper) g_rand_double_range(rand_generator, lower, upper)
|
||||
#define math_rndi(lower,upper) g_rand_int_range(rand_generator, lower, upper + 1)
|
||||
|
208
src/misc.c
208
src/misc.c
@ -135,6 +135,24 @@ misc_randomise_g_pointer_array(GPtrArray *array)
|
||||
return new;
|
||||
}
|
||||
|
||||
/** Return a freshly allocated copy of the array. */
|
||||
GPtrArray*
|
||||
misc_copy_ptr_array(const GPtrArray *array)
|
||||
{
|
||||
gint i;
|
||||
GPtrArray *copy = NULL;
|
||||
|
||||
if(array != NULL)
|
||||
copy = g_ptr_array_new();
|
||||
else
|
||||
return NULL;
|
||||
|
||||
for(i=0;i<array->len;i++)
|
||||
g_ptr_array_add(copy, g_ptr_array_index(array, i));
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
/** Print a thousands-grouped output of 'number' into 'buf',
|
||||
like 2 234 345 instead of 2234345.
|
||||
@param number The number to print.
|
||||
@ -248,30 +266,6 @@ query_misc_string_in_array(const gchar *string, GPtrArray *array)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/** Replace a token in a string by another string.
|
||||
The replacement should NOT CONTAIN THE TOKEN otherwise
|
||||
we end up in an infinite loop. */
|
||||
void
|
||||
misc_string_replace_token(gchar *string, const gchar *token, const gchar *replacement)
|
||||
{
|
||||
gchar buf[SMALL], buf2[SMALL];
|
||||
gchar *occurrence = NULL;
|
||||
|
||||
if(strlen(string) < strlen(token))
|
||||
return;
|
||||
|
||||
occurrence = g_strrstr(string, token);
|
||||
|
||||
if(occurrence != NULL)
|
||||
{
|
||||
strncpy(buf, string, strlen(string) - strlen(occurrence));
|
||||
buf[strlen(string) - strlen(occurrence)] = '\0';
|
||||
strcpy(buf2, occurrence + strlen(token));
|
||||
sprintf(string, "%s%s%s", buf, replacement, buf2);
|
||||
misc_string_replace_token(string, token, replacement);
|
||||
}
|
||||
}
|
||||
|
||||
/** Replace sums of the form [1 + 2 - 3] in the string. */
|
||||
void
|
||||
misc_replace_sums(gchar *string)
|
||||
@ -280,21 +274,21 @@ misc_replace_sums(gchar *string)
|
||||
gchar buf[SMALL], buf2[SMALL];
|
||||
const gchar *buf_return = NULL;
|
||||
|
||||
strcpy(buf, string);
|
||||
|
||||
for(i=0;i<strlen(buf);i++)
|
||||
if(buf[i] == '[')
|
||||
{
|
||||
strncpy(buf2, buf, i);
|
||||
buf2[i] = '\0';
|
||||
buf_return = misc_parse_expression(buf + i + 1, &result);
|
||||
sprintf(string, "%s%d%s", buf2, result, buf_return + 1);
|
||||
|
||||
misc_replace_sums(string);
|
||||
}
|
||||
while(g_strrstr(string, "["))
|
||||
{
|
||||
strcpy(buf, string);
|
||||
|
||||
for(i=0;i<strlen(buf);i++)
|
||||
if(buf[i] == '[')
|
||||
{
|
||||
strncpy(buf2, buf, i);
|
||||
buf2[i] = '\0';
|
||||
buf_return = misc_parse_expression(buf + i + 1, &result);
|
||||
sprintf(string, "%s%d%s", buf2, result, buf_return + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** Get a float representation of someone's age
|
||||
based on his birth year and month. */
|
||||
gfloat
|
||||
@ -458,24 +452,6 @@ misc_parse(const gchar *s, gint *result)
|
||||
return s;
|
||||
}
|
||||
|
||||
/** Return a freshly allocated copy of the array. */
|
||||
GPtrArray*
|
||||
misc_copy_ptr_array(const GPtrArray *array)
|
||||
{
|
||||
gint i;
|
||||
GPtrArray *copy = NULL;
|
||||
|
||||
if(array != NULL)
|
||||
copy = g_ptr_array_new();
|
||||
else
|
||||
return NULL;
|
||||
|
||||
for(i=0;i<array->len;i++)
|
||||
g_ptr_array_add(copy, g_ptr_array_index(array, i));
|
||||
|
||||
return copy;
|
||||
}
|
||||
|
||||
/** Free the string if it's non-NULL and assign the contents to it. */
|
||||
void
|
||||
misc_string_assign(gchar **string, const gchar *contents)
|
||||
@ -519,6 +495,30 @@ misc_string_choose_random(gchar *string)
|
||||
strcpy(string, start);
|
||||
}
|
||||
|
||||
/** Replace a token in a string by another string.
|
||||
The replacement should NOT CONTAIN THE TOKEN otherwise
|
||||
we end up in an infinite loop. */
|
||||
void
|
||||
misc_string_replace_token(gchar *string, const gchar *token, const gchar *replacement)
|
||||
{
|
||||
gchar buf[SMALL], buf2[SMALL];
|
||||
gchar *occurrence = NULL;
|
||||
|
||||
occurrence = g_strrstr(string, token);
|
||||
|
||||
if(occurrence == NULL || strlen(string) < strlen(token))
|
||||
return;
|
||||
|
||||
while(occurrence != NULL)
|
||||
{
|
||||
strncpy(buf, string, strlen(string) - strlen(occurrence));
|
||||
buf[strlen(string) - strlen(occurrence)] = '\0';
|
||||
strcpy(buf2, occurrence + strlen(token));
|
||||
sprintf(string, "%s%s%s", buf, replacement, buf2);
|
||||
occurrence = g_strrstr(string, token);
|
||||
}
|
||||
}
|
||||
|
||||
/** Replace simple arithmetic expressions like "1 + 2"
|
||||
and comparisons like "3 < 4" with the appropriate result. */
|
||||
void
|
||||
@ -527,63 +527,64 @@ misc_string_replace_expressions(gchar *string)
|
||||
gint i, j, last_idx = 0;
|
||||
gint value = -1;
|
||||
gchar buf[SMALL], buf2[SMALL];
|
||||
gchar *occurrence = NULL,
|
||||
*occurrence2 = NULL;
|
||||
|
||||
if(debug > 100)
|
||||
printf("misc_string_replace_expressions: #%s#\n",
|
||||
string);
|
||||
|
||||
if(g_strrstr(string, "[") == NULL)
|
||||
return;
|
||||
while(g_strrstr(string, "[") != NULL)
|
||||
{
|
||||
strcpy(buf, string);
|
||||
strcpy(string, "");
|
||||
|
||||
strcpy(buf, string);
|
||||
strcpy(string, "");
|
||||
occurrence = g_strrstr(buf, "[");
|
||||
i = strlen(buf) - strlen(occurrence);
|
||||
|
||||
for(i=strlen(buf) - 1; i>=0; i--)
|
||||
if(buf[i] == '[')
|
||||
strncpy(buf2, buf, i);
|
||||
buf2[i] = '\0';
|
||||
strcat(string, buf2);
|
||||
|
||||
occurrence2 = g_strstr_len(occurrence, strlen(occurrence), "]");
|
||||
|
||||
if(occurrence2 == NULL)
|
||||
{
|
||||
strncpy(buf2, buf, i);
|
||||
buf2[i] = '\0';
|
||||
strcat(string, buf2);
|
||||
|
||||
for(j=i + 1;j<strlen(buf);j++)
|
||||
{
|
||||
if(buf[j] == ']')
|
||||
{
|
||||
strncpy(buf2, buf + i + 1, j - i - 1);
|
||||
buf2[j - i - 1] = '\0';
|
||||
if (g_strrstr(buf2, "|"))
|
||||
misc_string_choose_random(buf2);
|
||||
else
|
||||
{
|
||||
if(g_strrstr(buf2, "<") ||
|
||||
g_strrstr(buf2, ">") ||
|
||||
g_strrstr(buf2, "=") ||
|
||||
g_strrstr(buf2, " G ") ||
|
||||
g_strrstr(buf2, " L ") ||
|
||||
g_strrstr(buf2, " GE ") ||
|
||||
g_strrstr(buf2, " LE "))
|
||||
misc_parse(buf2, &value);
|
||||
else
|
||||
misc_parse_expression(buf2, &value);
|
||||
sprintf(buf2, "%d", value);
|
||||
}
|
||||
strcat(string, buf2);
|
||||
value = -1;
|
||||
|
||||
last_idx = j + 1;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
g_warning("misc_string_replace_expressions: no matching ] found.");
|
||||
return;
|
||||
}
|
||||
|
||||
if(last_idx < strlen(buf))
|
||||
{
|
||||
strncpy(buf2, buf + last_idx, strlen(buf) - last_idx);
|
||||
buf2[strlen(buf) - last_idx] = '\0';
|
||||
j = strlen(buf) - strlen(occurrence2);
|
||||
|
||||
strncpy(buf2, buf + i + 1, j - i - 1);
|
||||
buf2[j - i - 1] = '\0';
|
||||
if (g_strrstr(buf2, "|"))
|
||||
misc_string_choose_random(buf2);
|
||||
else
|
||||
{
|
||||
if(g_strrstr(buf2, "<") ||
|
||||
g_strrstr(buf2, ">") ||
|
||||
g_strrstr(buf2, "=") ||
|
||||
g_strrstr(buf2, " G ") ||
|
||||
g_strrstr(buf2, " L ") ||
|
||||
g_strrstr(buf2, " GE ") ||
|
||||
g_strrstr(buf2, " LE "))
|
||||
misc_parse(buf2, &value);
|
||||
else
|
||||
misc_parse_expression(buf2, &value);
|
||||
sprintf(buf2, "%d", value);
|
||||
}
|
||||
strcat(string, buf2);
|
||||
value = -1;
|
||||
|
||||
last_idx = j + 1;
|
||||
|
||||
if(last_idx < strlen(buf))
|
||||
{
|
||||
strncpy(buf2, buf + last_idx, strlen(buf) - last_idx);
|
||||
buf2[strlen(buf) - last_idx] = '\0';
|
||||
strcat(string, buf2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -628,8 +629,6 @@ misc_string_get_parenthesised(const gchar *string, gchar *dest)
|
||||
|
||||
strncpy(dest, openpar + 1, len);
|
||||
dest[len] = '\0';
|
||||
|
||||
printf("getpar %s\n", dest);
|
||||
}
|
||||
|
||||
/** Find out whether the conditions in the string are fulfilled. */
|
||||
@ -639,9 +638,6 @@ misc_parse_condition(const gchar *condition, GPtrArray **token_rep)
|
||||
gboolean return_value = FALSE;
|
||||
gchar buf[SMALL], buf2[SMALL];
|
||||
|
||||
if(condition == NULL)
|
||||
return TRUE;
|
||||
|
||||
strcpy(buf, condition);
|
||||
|
||||
while(g_strrstr(buf, "("))
|
||||
|
@ -57,6 +57,11 @@ misc2_callback_transfer_user_player(void)
|
||||
user_from_team(new_team)->money -= transoff(stat2, 0).fee;
|
||||
user_from_team(new_team)->money_out[1][MON_OUT_TRANSFERS] -=
|
||||
transoff(stat2, 0).fee;
|
||||
|
||||
if(player_of_id_team(trans(stat2).tm, trans(stat2).id)->id ==
|
||||
opt_user_int("int_opt_user_penalty_shooter"))
|
||||
opt_user_set_int("int_opt_user_penalty_shooter", -1);
|
||||
|
||||
player_copy(player_of_id_team(trans(stat2).tm, trans(stat2).id),
|
||||
new_team, new_team->players->len);
|
||||
player_of_idx_team(new_team, new_team->players->len - 1)->contract =
|
||||
|
@ -148,7 +148,7 @@ on_button_digits_ok_clicked (GtkButton *button,
|
||||
current_user.youth_academy.percentage = values[1];
|
||||
break;
|
||||
case STATUS_PLACE_BET:
|
||||
bet_place((Fixture*)statp, stat2, values[0]);
|
||||
bet_place(stat2, stat3, values[0]);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
*/
|
||||
|
||||
#include "bet.h"
|
||||
#include "fixture.h"
|
||||
#include "misc3_callbacks.h"
|
||||
#include "misc3_interface.h"
|
||||
#include "option.h"
|
||||
@ -112,12 +113,12 @@ on_treeview_bets_button_press_event (GtkWidget *widget,
|
||||
|
||||
gtk_tree_model_get(model, &iter, col_num, &bet, -1);
|
||||
|
||||
if(bet == NULL || bet->fix->attendance != -1)
|
||||
if(bet == NULL || fixture_from_id(bet->fix_id)->attendance != -1)
|
||||
return TRUE;
|
||||
|
||||
if(bet_is_user(bet))
|
||||
{
|
||||
bet_remove(bet->fix);
|
||||
bet_remove(bet->fix_id);
|
||||
treeview2_show_bets();
|
||||
return FALSE;
|
||||
}
|
||||
@ -125,9 +126,9 @@ on_treeview_bets_button_press_event (GtkWidget *widget,
|
||||
sprintf(buf, _("You bet on outcome %d with an odd of %.2f. How much do you wager?"),
|
||||
col_num - 1, bet->odds[col_num - 1]);
|
||||
|
||||
statp = (gpointer)bet->fix;
|
||||
stat1 = STATUS_PLACE_BET;
|
||||
stat2 = col_num - 1;
|
||||
stat2 = bet->fix_id;
|
||||
stat3 = col_num - 1;
|
||||
|
||||
window_show_digits(buf, _("Wager"), 0, NULL, -1);
|
||||
spin_wager = GTK_SPIN_BUTTON(lookup_widget(window.digits, "spinbutton1"));
|
||||
@ -153,4 +154,3 @@ on_checkbutton_bet_user_recent_button_press_event
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -38,6 +38,7 @@ create_window_bets (void)
|
||||
GtkWidget *checkbutton_bet_cups;
|
||||
GtkWidget *checkbutton_bet_user_recent;
|
||||
GtkWidget *hseparator2;
|
||||
GtkWidget *scrolledwindow1;
|
||||
GtkWidget *treeview_bets;
|
||||
GtkWidget *button_bet_close;
|
||||
GtkAccelGroup *accel_group;
|
||||
@ -90,9 +91,15 @@ create_window_bets (void)
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), hseparator2, FALSE, FALSE, 0);
|
||||
gtk_widget_set_size_request (hseparator2, 1, 10);
|
||||
|
||||
scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_widget_show (scrolledwindow1);
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), scrolledwindow1, TRUE, TRUE, 0);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
|
||||
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow1), GTK_SHADOW_IN);
|
||||
|
||||
treeview_bets = gtk_tree_view_new ();
|
||||
gtk_widget_show (treeview_bets);
|
||||
gtk_box_pack_start (GTK_BOX (vbox1), treeview_bets, TRUE, TRUE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (scrolledwindow1), treeview_bets);
|
||||
|
||||
button_bet_close = gtk_button_new_from_stock ("gtk-close");
|
||||
gtk_widget_show (button_bet_close);
|
||||
@ -131,6 +138,7 @@ create_window_bets (void)
|
||||
GLADE_HOOKUP_OBJECT (window_bets, checkbutton_bet_cups, "checkbutton_bet_cups");
|
||||
GLADE_HOOKUP_OBJECT (window_bets, checkbutton_bet_user_recent, "checkbutton_bet_user_recent");
|
||||
GLADE_HOOKUP_OBJECT (window_bets, hseparator2, "hseparator2");
|
||||
GLADE_HOOKUP_OBJECT (window_bets, scrolledwindow1, "scrolledwindow1");
|
||||
GLADE_HOOKUP_OBJECT (window_bets, treeview_bets, "treeview_bets");
|
||||
GLADE_HOOKUP_OBJECT (window_bets, button_bet_close, "button_bet_close");
|
||||
GLADE_HOOKUP_OBJECT_NO_REF (window_bets, tooltips, "tooltips");
|
||||
|
14
src/player.c
14
src/player.c
@ -65,12 +65,13 @@ player_new(Team *tm, gfloat average_talent, gboolean new_id)
|
||||
(new.pos == PLAYER_POS_GOALIE) *
|
||||
const_float("float_player_peak_age_goalie_addition"));//30;
|
||||
|
||||
new.peak_region =
|
||||
new.peak_region =
|
||||
math_gauss_dist(const_float("float_player_peak_region_lower"),
|
||||
const_float("float_player_peak_region_upper"));//2;
|
||||
|
||||
new.talent = CLAMP(average_talent * skill_factor, 0,
|
||||
const_float("float_player_max_skill"));//85;
|
||||
new.talent =
|
||||
CLAMP(average_talent * skill_factor, 0,
|
||||
const_float("float_player_max_skill"));//85;
|
||||
|
||||
new.skill = player_skill_from_talent(&new);
|
||||
new.cskill = new.skill;
|
||||
@ -1131,6 +1132,13 @@ player_remove_contract(Player *pl)
|
||||
void
|
||||
player_remove_from_team(Team *tm, gint idx)
|
||||
{
|
||||
gint usr_idx = team_is_user(tm);
|
||||
|
||||
if(usr_idx != -1 &&
|
||||
player_of_idx_team(tm, idx)->id ==
|
||||
option_int("int_opt_user_penalty_shooter", &usr(usr_idx).options))
|
||||
option_set_int("int_opt_user_penalty_shooter", &usr(usr_idx).options, -1);
|
||||
|
||||
transfer_remove_player_ptr(player_of_idx_team(tm, idx));
|
||||
free_player(player_of_idx_team(tm, idx));
|
||||
g_array_remove_index(tm->players, idx);
|
||||
|
@ -273,7 +273,8 @@ strategy_update_team_pre_match(Team *tm)
|
||||
strategy_set_tokens(tm, NULL);
|
||||
|
||||
for(i=prematches->len - 1; i >= 0; i--)
|
||||
if(misc_parse_condition(g_array_index(prematches, StrategyPrematch, i).condition,
|
||||
if(g_array_index(prematches, StrategyPrematch, i).condition == NULL ||
|
||||
misc_parse_condition(g_array_index(prematches, StrategyPrematch, i).condition,
|
||||
token_strat))
|
||||
{
|
||||
strategy_apply_prematch(tm, &g_array_index(prematches, StrategyPrematch, i));
|
||||
@ -565,7 +566,8 @@ strategy_live_game_apply_action(LiveGame *match, gint team_idx,
|
||||
}
|
||||
|
||||
if(action->sub_in_pos != -1 && match->subs_left[team_idx] > 0 &&
|
||||
misc_parse_condition(action->sub_condition, token_strat))
|
||||
(action->sub_condition == NULL ||
|
||||
misc_parse_condition(action->sub_condition, token_strat)))
|
||||
{
|
||||
sub_in_id = strategy_get_sub(tm, action->sub_in_pos,
|
||||
action->sub_in_prop, TRUE);
|
||||
@ -608,9 +610,10 @@ strategy_live_game_check(LiveGame *match, gint team_idx)
|
||||
!query_misc_integer_is_in_g_array(
|
||||
g_array_index(strat->match_action, StrategyMatchAction, i).id,
|
||||
match->action_ids[team_idx]) &&
|
||||
misc_parse_condition(
|
||||
g_array_index(strat->match_action, StrategyMatchAction, i).condition,
|
||||
token_strat))
|
||||
(g_array_index(strat->match_action, StrategyMatchAction, i).condition == NULL ||
|
||||
misc_parse_condition(
|
||||
g_array_index(strat->match_action, StrategyMatchAction, i).condition,
|
||||
token_strat)))
|
||||
{
|
||||
strategy_live_game_apply_action(
|
||||
match, team_idx,
|
||||
|
163
src/team.c
163
src/team.c
@ -55,8 +55,8 @@ team_new(gboolean new_id)
|
||||
|
||||
new.clid = -1;
|
||||
new.id = (new_id) ? team_id_new : -1;
|
||||
new.structure = 442; ///*dteam_assign_playing_structure();
|
||||
new.style = 0; ///*dteam_assign_playing_style();
|
||||
new.structure = 442;
|
||||
new.style = 0;
|
||||
new.boost = 0;
|
||||
new.average_talent = 0;
|
||||
|
||||
@ -65,54 +65,6 @@ team_new(gboolean new_id)
|
||||
return new;
|
||||
}
|
||||
|
||||
/**
|
||||
Return a random playing style.
|
||||
@see The #TeamPlayingStyle enumeration.
|
||||
*/
|
||||
gint
|
||||
team_assign_playing_style(void)
|
||||
{
|
||||
gfloat rndom;
|
||||
|
||||
rndom = math_rnd(0,1);
|
||||
|
||||
/* all out defend */
|
||||
if(rndom < const_float("float_team_playing_style_prob1"))
|
||||
return -2;
|
||||
/* defend */
|
||||
else if(rndom < const_float("float_team_playing_style_prob2"))
|
||||
return -1;
|
||||
/* balanced */
|
||||
else if(rndom < const_float("float_team_playing_style_prob3"))
|
||||
return 0;
|
||||
/* attack */
|
||||
else if(rndom < const_float("float_team_playing_style_prob4"))
|
||||
return 1;
|
||||
|
||||
/* all out attack */
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
Return a random playing structure.
|
||||
*/
|
||||
gint
|
||||
team_assign_playing_structure(void)
|
||||
{
|
||||
gfloat rndom = math_rnd(0,1);
|
||||
|
||||
if(rndom < const_float("float_team_playing_structure_prob1"))
|
||||
return 532;
|
||||
else if(rndom < const_float("float_team_playing_structure_prob2"))
|
||||
return 442;
|
||||
else if(rndom < const_float("float_team_playing_structure_prob3"))
|
||||
return 352;
|
||||
else if(rndom < const_float("float_team_playing_structure_prob4"))
|
||||
return 433;
|
||||
|
||||
return 343;
|
||||
}
|
||||
|
||||
/* Fill the players array of the team and the stadium.
|
||||
@param tm The team that gets filled. */
|
||||
void
|
||||
@ -600,96 +552,6 @@ team_change_attribute_with_message(Team *tm, gint attribute, gint new_value)
|
||||
}
|
||||
}
|
||||
|
||||
/*d remove*/
|
||||
/** Make cpu players healthy etc.
|
||||
@param tm The cpu team.
|
||||
@param reset_fitness Whether to reset the fitness values of playes. */
|
||||
void
|
||||
team_update_cpu_corrections(Team *tm, gboolean reset_fitness)
|
||||
{
|
||||
gint i, j;
|
||||
Player *pl;
|
||||
|
||||
for(i=0;i<tm->players->len;i++)
|
||||
{
|
||||
pl = player_of_idx_team(tm, i);
|
||||
|
||||
for(j=0;j<pl->cards->len;j++)
|
||||
g_array_index(pl->cards, PlayerCard, j).red = 0;
|
||||
|
||||
if(pl->cskill == 0)
|
||||
{
|
||||
pl->health = pl->recovery = 0;
|
||||
pl->cskill = player_get_cskill(pl, pl->cpos, FALSE);
|
||||
|
||||
pl->fitness = math_rnd(const_float("float_player_fitness_lower"),
|
||||
const_float("float_player_fitness_upper"));
|
||||
}
|
||||
|
||||
if(pl->pos != pl->cpos)
|
||||
{
|
||||
pl->pos = pl->cpos;
|
||||
pl->cskill = player_get_cskill(pl, pl->cpos, FALSE);
|
||||
}
|
||||
|
||||
if(reset_fitness)
|
||||
pl->fitness = math_rnd(const_float("float_player_fitness_lower"),
|
||||
const_float("float_player_fitness_upper"));
|
||||
}
|
||||
|
||||
team_rearrange(tm);
|
||||
|
||||
tm->structure = team_find_appropriate_structure(tm);
|
||||
|
||||
if(!player_substitution_good_structure(tm->structure, PLAYER_POS_DEFENDER, PLAYER_POS_DEFENDER))
|
||||
{
|
||||
tm->structure = team_assign_playing_structure();
|
||||
for(i=0;i<tm->players->len;i++)
|
||||
{
|
||||
pl = player_of_idx_team(tm, i);
|
||||
pl->pos = pl->cpos = player_get_position_from_structure(tm->structure, i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*d remove*/
|
||||
/** Make some random substitutions in the cpu team. */
|
||||
void
|
||||
team_update_cpu_subs(Team *tm)
|
||||
{
|
||||
gint i;
|
||||
gint number_of_subs = math_rndi(const_int("int_team_subs_lower"),
|
||||
const_int("int_team_subs_upper"));
|
||||
gint player_numbers[11];
|
||||
|
||||
math_generate_permutation(player_numbers, 0, 10);
|
||||
|
||||
for(i=0;i<number_of_subs;i++)
|
||||
game_substitute_player(tm, player_numbers[i]);
|
||||
|
||||
if(player_get_game_skill(player_of_idx_team(tm, 0), FALSE, TRUE) <
|
||||
player_get_game_skill(player_of_idx_team(tm, 10), FALSE, TRUE) &&
|
||||
math_rnd(0, 1) < const_float("float_team_replace_worse_goalie"))
|
||||
game_substitute_player(tm, 0);
|
||||
}
|
||||
|
||||
/*d remove*/
|
||||
/** Change a cpu team's structure. */
|
||||
void
|
||||
team_update_cpu_structure(Team *tm)
|
||||
{
|
||||
gint i;
|
||||
Player *pl = NULL;
|
||||
|
||||
tm->structure = team_assign_playing_structure();
|
||||
|
||||
for(i=0;i<tm->players->len;i++)
|
||||
{
|
||||
pl = &g_array_index(tm->players, Player, i);
|
||||
pl->pos = pl->cpos = player_get_position_from_structure(tm->structure, i);
|
||||
}
|
||||
}
|
||||
|
||||
/** Replace some players by new ones in a team. */
|
||||
void
|
||||
team_update_cpu_new_players(Team *tm)
|
||||
@ -708,27 +570,6 @@ team_update_cpu_new_players(Team *tm)
|
||||
}
|
||||
}
|
||||
|
||||
/*d remove*/
|
||||
/** Heal players, re-set fitnesses, make some random subs
|
||||
and replace some players with new ones.
|
||||
@param tm The team we examine.
|
||||
@param reset_fitness Whether to reset the fitness values of players. */
|
||||
void
|
||||
team_update_cpu_team(Team *tm, gboolean reset_fitness)
|
||||
{
|
||||
team_update_cpu_corrections(tm, reset_fitness);
|
||||
team_update_cpu_subs(tm);
|
||||
|
||||
if(math_rnd(0, 1) < const_float("float_team_new_player_probability"))
|
||||
team_update_cpu_new_players(tm);
|
||||
|
||||
if(math_rnd(0, 1) < const_float("float_team_new_style"))
|
||||
tm->style = team_assign_playing_style();
|
||||
|
||||
if(math_rnd(0, 1) < const_float("float_team_new_structure"))
|
||||
team_update_cpu_structure(tm);
|
||||
}
|
||||
|
||||
/** Increase player ages etc.
|
||||
@param tm The user team we examine. */
|
||||
void
|
||||
|
18
src/team.h
18
src/team.h
@ -44,12 +44,6 @@ enum TeamCompare
|
||||
Team
|
||||
team_new(gboolean new_id);
|
||||
|
||||
gint
|
||||
team_assign_playing_structure(void);
|
||||
|
||||
gint
|
||||
team_assign_playing_style(void);
|
||||
|
||||
gboolean
|
||||
query_is_my_team(const Team *tm);
|
||||
|
||||
@ -104,21 +98,9 @@ team_change_attribute_with_message(Team * tm, gint attribute, gint new_value);
|
||||
void
|
||||
team_update_team_weekly(Team *tm);
|
||||
|
||||
void
|
||||
team_update_cpu_team(Team *tm, gboolean reset_fitness);
|
||||
|
||||
void
|
||||
team_update_post_match(Team *tm, const Fixture *fix);
|
||||
|
||||
void
|
||||
team_update_cpu_corrections(Team *tm, gboolean reset_fitness);
|
||||
|
||||
void
|
||||
team_update_cpu_subs(Team *tm);
|
||||
|
||||
void
|
||||
team_update_cpu_structure(Team *tm);
|
||||
|
||||
void
|
||||
team_update_cpu_new_players(Team *tm);
|
||||
|
||||
|
@ -256,6 +256,7 @@ treeview2_create_bets(GtkListStore *ls)
|
||||
team_names[2][SMALL];
|
||||
const BetMatch *bet = NULL;
|
||||
const BetUser *bet_user = NULL;
|
||||
const Fixture *fix = NULL;
|
||||
|
||||
for(k=1;k>=0;k--)
|
||||
{
|
||||
@ -271,11 +272,11 @@ treeview2_create_bets(GtkListStore *ls)
|
||||
|
||||
for(i=0;i<bets[k]->len;i++)
|
||||
{
|
||||
if(g_array_index(bets[k], BetMatch, i).fix->clid ==
|
||||
current_user.tm->clid ||
|
||||
(g_array_index(bets[k], BetMatch, i).fix->clid >= ID_CUP_START &&
|
||||
fix = fixture_from_id(g_array_index(bets[k], BetMatch, i).fix_id);
|
||||
if(fix->clid == current_user.tm->clid ||
|
||||
(fix->clid >= ID_CUP_START &&
|
||||
opt_user_int("int_opt_user_bet_show_cups")) ||
|
||||
(g_array_index(bets[k], BetMatch, i).fix->clid < ID_CUP_START &&
|
||||
(fix->clid < ID_CUP_START &&
|
||||
opt_user_int("int_opt_user_bet_show_all_leagues")))
|
||||
{
|
||||
bet = &g_array_index(bets[k], BetMatch, i);
|
||||
@ -286,8 +287,8 @@ treeview2_create_bets(GtkListStore *ls)
|
||||
(bet_user != NULL ||
|
||||
!opt_user_int("int_opt_user_bet_show_my_recent"))))
|
||||
{
|
||||
if(i == 0 || bet->fix->clid !=
|
||||
g_array_index(bets[k], BetMatch, i - 1).fix->clid)
|
||||
if(i == 0 || fix->clid !=
|
||||
fixture_from_id(g_array_index(bets[k], BetMatch, i - 1).fix_id)->clid)
|
||||
{
|
||||
if(i > 0)
|
||||
{
|
||||
@ -298,7 +299,7 @@ treeview2_create_bets(GtkListStore *ls)
|
||||
|
||||
gtk_list_store_append(ls, &iter);
|
||||
gtk_list_store_set(ls, &iter,
|
||||
0, league_cup_get_name_string(bet->fix->clid),
|
||||
0, league_cup_get_name_string(fix->clid),
|
||||
1, NULL, 2, NULL, 3, NULL, 4, "", 5, "", -1);
|
||||
}
|
||||
|
||||
@ -314,24 +315,24 @@ treeview2_create_bets(GtkListStore *ls)
|
||||
}
|
||||
|
||||
for(j=0;j<2;j++)
|
||||
if(query_fixture_has_tables(bet->fix))
|
||||
if(query_fixture_has_tables(fix))
|
||||
{
|
||||
if(bet->fix->clid < ID_CUP_START)
|
||||
rank = team_get_league_rank(bet->fix->teams[j]);
|
||||
if(fix->clid < ID_CUP_START)
|
||||
rank = team_get_league_rank(fix->teams[j]);
|
||||
else
|
||||
rank = team_get_cup_rank(bet->fix->teams[j],
|
||||
cup_get_last_tables_round(bet->fix->clid), TRUE);
|
||||
rank = team_get_cup_rank(fix->teams[j],
|
||||
cup_get_last_tables_round(fix->clid), TRUE);
|
||||
|
||||
sprintf(team_names[j], "%s [%d]",
|
||||
bet->fix->teams[j]->name, rank);
|
||||
fix->teams[j]->name, rank);
|
||||
}
|
||||
else if(bet->fix->clid >= ID_CUP_START &&
|
||||
query_cup_is_national(bet->fix->clid))
|
||||
else if(fix->clid >= ID_CUP_START &&
|
||||
query_cup_is_national(fix->clid))
|
||||
sprintf(team_names[j], "%s (%d)",
|
||||
bet->fix->teams[j]->name,
|
||||
league_from_clid(bet->fix->teams[j]->clid)->layer);
|
||||
fix->teams[j]->name,
|
||||
league_from_clid(fix->teams[j]->clid)->layer);
|
||||
else
|
||||
strcpy(team_names[j], bet->fix->teams[j]->name);
|
||||
strcpy(team_names[j], fix->teams[j]->name);
|
||||
|
||||
gtk_list_store_append(ls, &iter);
|
||||
gtk_list_store_set(ls, &iter, 0, team_names[0],
|
||||
|
@ -1603,6 +1603,7 @@ treeview_helper_bet_odds(GtkTreeViewColumn *col,
|
||||
{
|
||||
gint column = treeview_helper_get_col_number_column(col);
|
||||
gchar buf[SMALL];
|
||||
const Fixture *fix = NULL;
|
||||
const BetMatch *bet = NULL;
|
||||
const BetUser *bet_user = NULL;
|
||||
|
||||
@ -1619,14 +1620,15 @@ treeview_helper_bet_odds(GtkTreeViewColumn *col,
|
||||
|
||||
strcpy(buf, "");
|
||||
bet_user = bet_is_user(bet);
|
||||
fix = fixture_from_id(bet->fix_id);
|
||||
|
||||
if(bet->fix->attendance == -1)
|
||||
if(fix->attendance == -1)
|
||||
sprintf(buf, "%.2f", bet->odds[column - 1]);
|
||||
else if(column == 2)
|
||||
sprintf(buf, "%d - %d", bet->fix->result[0][0],
|
||||
bet->fix->result[1][0]);
|
||||
sprintf(buf, "%d - %d", fix->result[0][0],
|
||||
fix->result[1][0]);
|
||||
|
||||
if(bet->fix->attendance == -1 &&
|
||||
if(fix->attendance == -1 &&
|
||||
bet_user != NULL &&
|
||||
bet_user->outcome == column - 1)
|
||||
g_object_set(renderer, "background",
|
||||
|
@ -166,7 +166,7 @@ xml_loadsave_misc_text (GMarkupParseContext *context,
|
||||
else if(state == TAG_MISC_BET_ODD)
|
||||
new_bet.odds[oddidx] = float_value;
|
||||
else if(state == TAG_MISC_BET_FIX_ID)
|
||||
new_bet.fix = fixture_from_id(int_value);
|
||||
new_bet.fix_id = int_value;
|
||||
}
|
||||
|
||||
|
||||
@ -255,7 +255,7 @@ xml_loadsave_misc_write_bets(FILE *fil)
|
||||
for(j=0;j<bets[i]->len;j++)
|
||||
{
|
||||
fprintf(fil, "%s<_%d>\n", I0, (i == 0) ? TAG_MISC_BET0 : TAG_MISC_BET1);
|
||||
xml_write_int(fil, g_array_index(bets[i], BetMatch, j).fix->id,
|
||||
xml_write_int(fil, g_array_index(bets[i], BetMatch, j).fix_id,
|
||||
TAG_MISC_BET_FIX_ID, I1);
|
||||
for(k=0;k<3;k++)
|
||||
xml_write_float(fil, g_array_index(bets[i], BetMatch, j).odds[k],
|
||||
|
@ -315,7 +315,7 @@ xml_loadsave_users_text (GMarkupParseContext *context,
|
||||
else if(state == TAG_USER_BET_OUTCOME)
|
||||
new_bet.outcome = int_value;
|
||||
else if(state == TAG_USER_BET_FIX_ID)
|
||||
new_bet.fix = fixture_from_id(int_value);
|
||||
new_bet.fix_id = int_value;
|
||||
else if(state >= TAG_START_PLAYERS && state <= TAG_END_PLAYERS)
|
||||
xml_loadsave_players_text(buf);
|
||||
}
|
||||
@ -500,7 +500,7 @@ xml_user_write_bets(FILE *fil, GArray **bets)
|
||||
TAG_USER_BET_WAGER, I2);
|
||||
xml_write_int(fil, g_array_index(bets[i], BetUser, j).outcome,
|
||||
TAG_USER_BET_OUTCOME, I2);
|
||||
xml_write_int(fil, g_array_index(bets[i], BetUser, j).fix->id,
|
||||
xml_write_int(fil, g_array_index(bets[i], BetUser, j).fix_id,
|
||||
TAG_USER_BET_FIX_ID, I2);
|
||||
fprintf(fil, "%s</_%d>\n", I1,
|
||||
(i == 0) ? TAG_USER_BET0 : TAG_USER_BET1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user