2005-03-03 12:46:48 +00:00
# include "callback_func.h"
2005-03-19 20:04:08 +00:00
# include "callbacks.h"
2005-03-03 12:46:48 +00:00
# include "cup.h"
2005-03-17 20:26:01 +00:00
# include "finance.h"
2005-03-03 12:46:48 +00:00
# include "fixture.h"
# include "game_gui.h"
# include "league.h"
# include "live_game.h"
2005-03-25 10:54:54 +00:00
# include "maths.h"
2005-03-17 20:26:01 +00:00
# include "misc.h"
2005-03-03 12:46:48 +00:00
# include "option.h"
# include "player.h"
# include "start_end.h"
# include "team.h"
2005-03-19 20:04:08 +00:00
# include "transfer.h"
2005-03-03 12:46:48 +00:00
# include "treeview.h"
2005-04-16 07:46:04 +00:00
# include "treeview_helper.h"
2005-03-03 12:46:48 +00:00
# include "user.h"
# include "window.h"
/** Show the users' live games. */
void
callback_show_next_live_game ( void )
{
gint i , j ;
2005-05-30 15:54:20 +00:00
for ( i = 0 ; i < users - > len ; i + + )
usr ( i ) . counters [ COUNT_USER_TOOK_TURN ] = 0 ;
2005-04-25 19:39:43 +00:00
for ( i = 0 ; i < ligs - > len ; i + + )
for ( j = 0 ; j < lig ( i ) . fixtures - > len ; j + + )
if ( g_array_index ( lig ( i ) . fixtures , Fixture , j ) . week_number = = week & &
g_array_index ( lig ( i ) . fixtures , Fixture , j ) . week_round_number = = week_round & &
fixture_user_team_involved ( & g_array_index ( lig ( i ) . fixtures , Fixture , j ) ) ! = - 1 & &
g_array_index ( lig ( i ) . fixtures , Fixture , j ) . attendance = = - 1 & &
option_int ( " int_opt_user_show_live_game " ,
& usr ( fixture_user_team_involved ( & g_array_index ( lig ( i ) . fixtures , Fixture , j ) ) ) .
options ) )
{
live_game_calculate_fixture ( & g_array_index ( lig ( i ) . fixtures , Fixture , j ) ) ;
return ;
}
for ( i = 0 ; i < acps - > len ; i + + )
for ( j = 0 ; j < acp ( i ) - > fixtures - > len ; j + + )
if ( g_array_index ( acp ( i ) - > fixtures , Fixture , j ) . week_number = = week & &
g_array_index ( acp ( i ) - > fixtures , Fixture , j ) . week_round_number = = week_round & &
fixture_user_team_involved ( & g_array_index ( acp ( i ) - > fixtures , Fixture , j ) ) ! = - 1 & &
g_array_index ( acp ( i ) - > fixtures , Fixture , j ) . attendance = = - 1 & &
option_int ( " int_opt_user_show_live_game " ,
& usr ( fixture_user_team_involved ( & g_array_index ( acp ( i ) - > fixtures , Fixture , j ) ) ) .
options ) )
{
live_game_calculate_fixture ( & g_array_index ( acp ( i ) - > fixtures , Fixture , j ) ) ;
return ;
}
2005-03-03 12:46:48 +00:00
2005-03-08 08:25:46 +00:00
window_destroy ( & window . live , TRUE ) ;
2005-03-03 12:46:48 +00:00
/* no more user games to show: end round. */
end_week_round ( ) ;
2005-04-07 16:44:33 +00:00
setsav0 ;
2005-03-03 12:46:48 +00:00
}
/** Handle a click on the player list.
@ param idx The player number .
@ param event The type of button click . */
void
callback_player_clicked ( gint idx , GdkEventButton * event )
{
2005-03-20 20:49:55 +00:00
/* Only accept single-clicks right now. */
2005-03-03 12:46:48 +00:00
if ( event - > type ! = GDK_BUTTON_PRESS )
return ;
2005-06-23 21:53:57 +00:00
2005-03-03 12:46:48 +00:00
if ( event - > button = = 1 )
{
if ( selected_row [ 0 ] = = - 1 )
{
selected_row [ 0 ] = idx ;
return ;
}
2005-03-18 22:03:23 +00:00
player_swap ( current_user . tm , selected_row [ 0 ] ,
current_user . tm , idx ) ;
2005-03-13 15:46:15 +00:00
if ( opt_user_int ( " int_opt_user_swap_adapts " ) = = 1 & &
2005-03-18 22:03:23 +00:00
current_user . tm - > structure ! =
team_find_appropriate_structure ( current_user . tm ) )
2005-03-03 12:46:48 +00:00
{
2005-03-18 22:03:23 +00:00
team_change_structure ( current_user . tm ,
team_find_appropriate_structure ( current_user . tm ) ) ;
team_rearrange ( current_user . tm ) ;
2005-03-03 12:46:48 +00:00
}
2005-03-24 18:04:31 +00:00
2005-03-03 12:46:48 +00:00
game_gui_write_av_skills ( ) ;
selected_row [ 0 ] = - 1 ;
2005-03-24 20:22:44 +00:00
treeview_show_user_player_list ( ) ;
2005-03-27 17:59:57 +00:00
if ( stat0 = = STATUS_MAIN )
treeview_show_next_opponent ( ) ;
2005-03-03 12:46:48 +00:00
}
2005-03-20 20:49:55 +00:00
else if ( event - > button = = 3 )
{
if ( stat0 = = STATUS_SHOW_TRANSFER_LIST )
{
2005-06-15 16:44:53 +00:00
selected_row [ 0 ] = - 1 ;
2005-04-13 13:01:59 +00:00
transfer_add_remove_user_player ( player_of_idx_team ( current_user . tm , idx ) ) ;
2005-03-27 17:59:57 +00:00
}
else
{
window_show_menu_player ( ( GdkEvent * ) event ) ;
selected_row [ 0 ] = idx ;
2005-03-20 20:49:55 +00:00
}
}
2005-04-07 16:44:33 +00:00
setsav0 ;
2005-03-03 12:46:48 +00:00
}
2005-03-11 17:18:51 +00:00
2005-05-08 06:15:35 +00:00
/** Show the last match of the current user.
@ param start Whether we start the replay from the beginning or continue it . */
2005-03-11 17:18:51 +00:00
void
2005-05-08 06:15:35 +00:00
callback_show_last_match ( gboolean start )
2005-03-11 17:18:51 +00:00
{
gint i ;
2005-05-08 06:15:35 +00:00
stat4 = - 1 ;
2005-03-11 17:18:51 +00:00
2005-05-08 06:15:35 +00:00
if ( start )
{
stat2 = cur_user ;
2005-06-15 08:22:40 +00:00
statp = & current_user . live_game ;
2005-03-11 17:18:51 +00:00
2005-05-08 06:15:35 +00:00
window_create ( WINDOW_LIVE ) ;
2005-04-09 19:18:28 +00:00
2005-05-08 06:15:35 +00:00
current_user . live_game . fix =
2005-05-31 14:42:20 +00:00
fixture_from_id ( current_user . live_game . fix_id ) ;
2005-03-11 17:18:51 +00:00
2005-05-08 06:15:35 +00:00
treeview_show_game_stats ( GTK_TREE_VIEW ( lookup_widget ( window . live , " treeview_stats " ) ) ,
& current_user . live_game ) ;
live_game_set_match ( & current_user . live_game ) ;
}
else
{
gtk_widget_set_sensitive ( lookup_widget ( window . live , " button_pause " ) , TRUE ) ;
gtk_widget_set_sensitive ( lookup_widget ( window . live , " button_resume " ) , FALSE ) ;
}
for ( i = stat3 ; i < current_user . live_game . units - > len ; i + + )
{
2005-03-18 22:03:23 +00:00
game_gui_live_game_show_unit ( & g_array_index ( current_user . live_game . units , LiveGameUnit , i ) ) ;
2005-05-08 06:15:35 +00:00
if ( stat4 = = STATUS_SHOW_LAST_MATCH_PAUSE | |
stat4 = = STATUS_SHOW_LAST_MATCH_ABORT )
{
stat3 = i + 1 ;
break ;
}
}
if ( stat4 = = STATUS_SHOW_LAST_MATCH_PAUSE )
{
gtk_widget_set_sensitive ( lookup_widget ( window . live , " button_pause " ) , FALSE ) ;
gtk_widget_set_sensitive ( lookup_widget ( window . live , " button_resume " ) , TRUE ) ;
}
else if ( stat4 = = STATUS_SHOW_LAST_MATCH_ABORT )
{
window_destroy ( & window . live , TRUE ) ;
stat1 = stat2 = stat3 = stat4 = - 1 ;
}
else
stat3 = - 1 ;
2005-03-11 17:18:51 +00:00
}
2005-03-14 17:47:27 +00:00
2005-04-09 19:18:28 +00:00
/** Show the last match stats of the current user. */
void
callback_show_last_match_stats ( void )
{
current_user . live_game . fix =
2005-05-31 14:42:20 +00:00
fixture_from_id ( current_user . live_game . fix_id ) ;
2005-04-09 19:18:28 +00:00
treeview_show_game_stats ( GTK_TREE_VIEW ( lookup_widget ( window . main , " treeview_right " ) ) ,
& current_user . live_game ) ;
}
2005-05-31 14:42:20 +00:00
/** Show fixtures by week and round (as opposed to
competition - wise ) .
@ param type Whether to show current , next or previous weeks . */
void
callback_show_fixtures_week ( gint type )
{
switch ( type )
{
default :
g_warning ( " callback_show_fixtures_week: unknown type %d \n " , type ) ;
2005-06-17 12:57:05 +00:00
return ;
2005-05-31 14:42:20 +00:00
break ;
case SHOW_CURRENT :
if ( week = = 1 & & week_round = = 1 )
{
stat1 = week ;
stat2 = week_round ;
}
else if ( week_round = = 1 )
{
stat1 = week - 1 ;
stat2 = fixture_get_last_week_round ( week - 1 ) ;
}
else
{
stat1 = week ;
stat2 = week_round - 1 ;
}
break ;
case SHOW_NEXT :
fixture_get_next_week ( & stat1 , & stat2 ) ;
break ;
case SHOW_PREVIOUS :
fixture_get_previous_week ( & stat1 , & stat2 ) ;
break ;
}
treeview_show_fixtures_week ( stat1 , stat2 ) ;
}
2005-03-14 17:47:27 +00:00
/** Show some fixtures.
@ param type An integer telling us which league / cup and which
week and round to show . */
void
callback_show_fixtures ( gint type )
{
const Fixture * fix = fixture_get ( type , stat1 , stat2 , stat3 ,
2005-03-18 22:03:23 +00:00
current_user . tm ) ;
2005-03-14 17:47:27 +00:00
treeview_show_fixtures ( GTK_TREE_VIEW ( lookup_widget ( window . main , " treeview_right " ) ) ,
fix - > clid , fix - > week_number , fix - > week_round_number ) ;
stat1 = fix - > clid ;
stat2 = fix - > week_number ;
stat3 = fix - > week_round_number ;
}
2005-03-15 15:10:57 +00:00
/** Show tables.
@ type Integer telling us whether to show the current user ' s
tables or those of the previous / next league / cup . */
void
callback_show_tables ( gint type )
{
gint clid = - 1 ;
if ( type = = SHOW_CURRENT )
2005-03-18 22:03:23 +00:00
clid = current_user . tm - > clid ;
2005-03-15 15:10:57 +00:00
else if ( type = = SHOW_NEXT_LEAGUE )
{
clid = league_cup_get_next_clid ( stat1 ) ;
2005-04-22 15:17:39 +00:00
while ( clid > = ID_CUP_START & & cup_has_tables ( clid ) = = - 1 )
2005-03-15 15:10:57 +00:00
clid = league_cup_get_next_clid ( clid ) ;
}
else if ( type = = SHOW_PREVIOUS_LEAGUE )
{
clid = league_cup_get_previous_clid ( stat1 ) ;
2005-04-22 15:17:39 +00:00
while ( clid > = ID_CUP_START & & cup_has_tables ( clid ) = = - 1 )
2005-03-15 15:10:57 +00:00
clid = league_cup_get_previous_clid ( clid ) ;
}
2005-04-29 19:48:02 +00:00
else
2005-06-17 12:57:05 +00:00
{
2005-04-29 19:48:02 +00:00
g_warning ( " callback_show_tables: unknown type %d \n " , type ) ;
2005-06-17 12:57:05 +00:00
return ;
}
2005-03-15 15:10:57 +00:00
2005-04-13 13:01:59 +00:00
stat1 = clid ;
2005-03-15 15:10:57 +00:00
treeview_show_table ( GTK_TREE_VIEW ( lookup_widget ( window . main , " treeview_right " ) ) , clid ) ;
}
2005-03-17 20:26:01 +00:00
/** Open the digits window to get a loan. */
void
callback_get_loan ( void )
{
gchar buf [ SMALL ] , buf2 [ SMALL ] ;
gint max_loan =
2005-03-18 22:03:23 +00:00
finance_team_drawing_credit_loan ( current_user . tm , TRUE ) + current_user . debt ;
2005-03-17 20:26:01 +00:00
if ( max_loan < = 0 )
{
game_gui_print_message ( _ ( " The bank doesn't grant you more money. " ) ) ;
return ;
}
2005-04-06 10:19:43 +00:00
stat1 = STATUS_GET_LOAN ;
2005-07-01 20:51:46 +00:00
misc_print_grouped_int ( max_loan , buf2 ) ;
2005-03-17 20:26:01 +00:00
sprintf ( buf , _ ( " You can take out at most %s. " ) , buf2 ) ;
window_show_digits ( buf , _ ( " Loan " ) , max_loan , NULL , 0 ) ;
}
/** Open the digits window to pay back a loan. */
void
callback_pay_loan ( void )
{
gchar buf [ SMALL ] , buf2 [ SMALL ] ;
2005-03-18 22:03:23 +00:00
gint max_payback = MIN ( BUDGET ( cur_user ) , - current_user . debt ) ;
2005-03-17 20:26:01 +00:00
2005-03-18 22:03:23 +00:00
if ( current_user . debt = = 0 )
2005-03-17 20:26:01 +00:00
{
game_gui_print_message ( _ ( " You are not indebted. " ) ) ;
return ;
}
if ( max_payback < = 0 )
{
game_gui_print_message ( _ ( " You don't have enough money to pay back. " ) ) ;
return ;
}
2005-04-06 10:19:43 +00:00
stat1 = STATUS_PAY_LOAN ;
2005-07-01 20:51:46 +00:00
misc_print_grouped_int ( max_payback , buf2 ) ;
2005-03-17 20:26:01 +00:00
sprintf ( buf , _ ( " You can pay back at most %s " ) , buf2 ) ;
window_show_digits ( buf , _ ( " Payback " ) , max_payback , NULL , 0 ) ;
}
2005-03-19 20:04:08 +00:00
2005-05-27 18:48:36 +00:00
/** Manage a click on a player of the current team on the
transfer list .
@ param button The mouse button number .
2005-03-19 20:04:08 +00:00
@ param idx The index of the selected player in the transfer list . */
void
2005-05-27 18:48:36 +00:00
callback_transfer_list_user ( gint button , gint idx )
2005-03-19 20:04:08 +00:00
{
2005-05-27 18:48:36 +00:00
gchar buf [ SMALL ] ,
buf2 [ SMALL ] , buf3 [ SMALL ] ;
2005-03-19 20:04:08 +00:00
2005-05-27 18:48:36 +00:00
if ( button = = 3 )
2005-03-19 20:04:08 +00:00
{
transfer_remove_player ( idx ) ;
on_button_transfers_clicked ( NULL , NULL ) ;
2005-04-07 16:44:33 +00:00
setsav0 ;
2005-05-27 18:48:36 +00:00
}
else if ( button = = 1 )
{
if ( trans ( idx ) . offers - > len = = 0 )
2005-05-30 15:54:20 +00:00
game_gui_print_message ( _ ( " There are no offers for the player. " ) ) ;
else if ( trans ( idx ) . offers - > len > 0 & &
2005-06-19 11:24:25 +00:00
transoff ( idx , 0 ) . status ! = TRANSFER_OFFER_ACCEPTED )
game_gui_print_message ( _ ( " There are some offers for the player which you rejected or will see next week. " ) ) ;
2005-05-27 18:48:36 +00:00
else
{
2005-07-01 20:51:46 +00:00
misc_print_grouped_int ( transoff ( idx , 0 ) . fee , buf2 ) ;
2005-05-27 18:48:36 +00:00
misc_print_grouped_int ( ABS ( transoff ( idx , 0 ) . fee -
player_of_id_team ( current_user . tm ,
2005-07-01 20:51:46 +00:00
trans ( idx ) . id ) - > value ) , buf3 ) ;
2005-05-27 18:48:36 +00:00
if ( transoff ( idx , 0 ) . fee -
player_of_id_team ( current_user . tm , trans ( idx ) . id ) - > value > 0 )
strcat ( buf3 , _ ( " more " ) ) ;
else
strcat ( buf3 , _ ( " less " ) ) ;
sprintf ( buf , _ ( " %s would like to buy %s. They offer %s for him, which is %s than the player's value. Do you accept? " ) , transoff ( idx , 0 ) . tm - > name - > str ,
player_of_id_team ( current_user . tm , trans ( idx ) . id ) - > name - > str ,
buf2 , buf3 ) ;
stat1 = STATUS_TRANSFER_OFFER_USER ;
stat2 = idx ;
2005-05-30 15:54:20 +00:00
window_show_transfer_dialog ( buf ) ;
2005-05-27 18:48:36 +00:00
}
}
}
/** Handle a click on a cpu player for which the offer
got accepted . */
void
callback_transfer_list_cpu ( gint button , gint idx )
{
gchar buf [ SMALL ] , buf2 [ SMALL ] , buf3 [ SMALL ] ;
if ( button = = 2 )
return ;
if ( button = = 3 )
{
g_array_remove_index ( trans ( idx ) . offers , 0 ) ;
2005-05-30 15:54:20 +00:00
if ( trans ( idx ) . offers - > len > 0 )
transfer_offers_notify ( & trans ( idx ) , FALSE ) ;
2005-05-27 18:48:36 +00:00
game_gui_print_message ( _ ( " Your offer has been removed. " ) ) ;
2005-05-30 15:54:20 +00:00
on_button_transfers_clicked ( NULL , NULL ) ;
2005-03-19 20:04:08 +00:00
return ;
}
if ( current_user . tm - > players - > len = = const_int ( " int_team_max_players " ) )
{
game_gui_show_warning ( _ ( " Your roster is already full. You can't buy more players. " ) ) ;
return ;
}
2005-07-01 20:51:46 +00:00
misc_print_grouped_int ( transoff ( idx , 0 ) . fee , buf2 ) ;
misc_print_grouped_int ( transoff ( idx , 0 ) . wage , buf3 ) ;
2005-05-27 18:48:36 +00:00
sprintf ( buf , _ ( " You offered a transfer fee of %s and a wage of %s for %s. The owners and the player are satisfied with your offer. Do you still want to buy the player? " ) ,
buf2 , buf3 , player_of_id_team ( trans ( idx ) . tm , trans ( idx ) . id ) - > name - > str ) ;
stat1 = STATUS_TRANSFER_OFFER_CPU ;
stat2 = idx ;
2005-05-30 15:54:20 +00:00
window_show_transfer_dialog ( buf ) ;
2005-05-27 18:48:36 +00:00
}
/** Handle a click on the transfer list.
@ param button The mouse button number .
@ param idx The index of the selected player in the transfer list . */
void
callback_transfer_list_clicked ( gint button , gint idx )
{
gchar buf [ SMALL ] ;
Transfer * tr = & trans ( idx ) ;
2005-06-19 11:24:25 +00:00
gint old_fee , old_wage = - 1 ;
2005-05-27 18:48:36 +00:00
if ( tr - > tm = = current_user . tm )
{
callback_transfer_list_user ( button , idx ) ;
return ;
}
2005-05-30 15:54:20 +00:00
else if ( tr - > offers - > len > 0 & &
2005-06-19 11:24:25 +00:00
transoff ( idx , 0 ) . status = = TRANSFER_OFFER_ACCEPTED )
2005-05-27 18:48:36 +00:00
{
if ( transoff ( idx , 0 ) . tm = = current_user . tm )
{
if ( team_is_user ( tr - > tm ) ! = - 1 )
2005-05-30 15:54:20 +00:00
{
sprintf ( buf , _ ( " User %s didn't consider your offer yet. " ) ,
user_from_team ( tr - > tm ) - > name - > str ) ;
game_gui_print_message ( buf ) ;
}
2005-05-27 18:48:36 +00:00
else
callback_transfer_list_cpu ( button , idx ) ;
}
else
game_gui_print_message ( _ ( " The player is locked (the team owners are considering an offer currently). " ) ) ;
return ;
}
2005-07-01 20:51:46 +00:00
2005-07-06 15:48:02 +00:00
if ( week > = transfer_get_deadline ( ) )
{
game_gui_print_message ( _ ( " The transfer deadline is over. " ) ) ;
return ;
}
2005-04-06 10:19:43 +00:00
stat1 = STATUS_SHOW_TRANSFER_LIST ;
stat2 = idx ;
2005-06-19 11:24:25 +00:00
if ( tr - > offers - > len > 0 )
transfer_get_previous_offer ( tr , current_user . tm , & old_fee , & old_wage ) ;
2005-03-19 20:04:08 +00:00
2005-06-19 11:24:25 +00:00
if ( old_wage = = - 1 )
{
sprintf ( buf , _ ( " You are making an offer for %s. Your scout's recommendations for fee and wage are preset. " ) ,
player_of_id_team ( tr - > tm , tr - > id ) - > name - > str ) ;
window_show_digits ( buf , _ ( " Fee " ) , tr - > fee [ current_user . scout % 10 ] ,
_ ( " Wage " ) , tr - > wage [ current_user . scout % 10 ] ) ;
}
else
{
sprintf ( buf , _ ( " You are making an offer for %s again. Your previous values for fee and wage are preset. " ) ,
player_of_id_team ( tr - > tm , tr - > id ) - > name - > str ) ;
window_show_digits ( buf , _ ( " Fee " ) , old_fee , _ ( " Wage " ) , old_wage ) ;
}
2005-03-19 20:04:08 +00:00
}
2005-03-25 10:54:54 +00:00
/** Show the contract window for the player with the specified index. */
void
callback_offer_new_contract ( gint idx )
{
gint i ;
gchar buf [ SMALL ] ;
2005-04-13 13:01:59 +00:00
Player * pl = player_of_idx_team ( current_user . tm , idx ) ;
2005-03-25 10:54:54 +00:00
gfloat scout_dev = math_rnd ( - const_float ( " float_transfer_scout_deviance_wage " ) ,
const_float ( " float_transfer_scout_deviance_wage " ) ) *
( current_user . scout % 10 + 1 ) ;
GtkSpinButton * spinbuttons [ 4 ] ;
if ( pl - > contract > = 2 )
{
2005-04-10 09:19:38 +00:00
game_gui_show_warning ( _ ( " You can't offer a new contract if the old one is still above 2 years. " ) ) ;
2005-03-25 10:54:54 +00:00
return ;
}
2005-03-25 11:44:49 +00:00
else if ( pl - > offers = = const_int ( " int_contract_max_offers " ) )
{
2005-04-10 09:19:38 +00:00
game_gui_show_warning ( _ ( " The player won't negotiate with you anymore. " ) ) ;
2005-03-25 11:44:49 +00:00
return ;
}
2005-03-25 10:54:54 +00:00
stat1 = player_assign_wage ( pl ) ;
2005-03-25 11:44:49 +00:00
statp = ( gpointer ) pl ;
2005-03-25 10:54:54 +00:00
if ( pl - > age < pl - > peak_age )
stat1 = MAX ( stat1 , pl - > wage ) ;
else
stat1 = MIN ( stat1 , pl - > wage ) ;
window_create ( WINDOW_CONTRACT ) ;
2005-07-05 18:37:26 +00:00
sprintf ( buf , _ ( " You are negotiating with %s about a new contract. Pay attention to what you're doing; if you don't come to terms with him within %d offers, he's going to leave your team after his current contract expires (unless you sell him). You may only abort BEFORE making the first offer. \n Your scout's recommendations are preset: " ) , pl - > name - > str ,
2005-03-25 11:44:49 +00:00
const_int ( " int_contract_max_offers " ) ) ;
2005-03-25 10:54:54 +00:00
gtk_label_set_text ( GTK_LABEL ( lookup_widget ( window . contract , " label_contract " ) ) , buf ) ;
for ( i = 0 ; i < 4 ; i + + )
{
sprintf ( buf , " spinbutton_contract%d " , i + 1 ) ;
spinbuttons [ i ] = GTK_SPIN_BUTTON ( lookup_widget ( window . contract , buf ) ) ;
gtk_spin_button_set_value ( spinbuttons [ i ] ,
rint ( ( gfloat ) stat1 *
( 1 + ( i * const_float ( " float_contract_scale_factor " ) *
powf ( - 1 , ( pl - > age > pl - > peak_age ) ) ) ) *
( 1 + scout_dev ) ) ) ;
}
2005-04-07 16:44:33 +00:00
setsav0 ;
2005-03-25 10:54:54 +00:00
}
2005-03-25 20:18:35 +00:00
/** Show the player list of a team in the browse-teams mode. */
void
callback_show_team ( gint type )
{
GtkTreeView * treeview_right = GTK_TREE_VIEW ( lookup_widget ( window . main , " treeview_right " ) ) ;
const Team * tm ;
2005-05-08 17:56:26 +00:00
const GArray * teams = NULL ;
const GPtrArray * teamsp = NULL ;
gint len = - 1 ;
2005-03-25 20:18:35 +00:00
if ( type = = SHOW_CURRENT )
{
2005-04-16 07:46:04 +00:00
tm = ( const Team * ) treeview_helper_get_pointer ( treeview_right , 2 ) ;
2005-03-25 20:18:35 +00:00
stat1 = team_get_index ( tm ) ;
2005-05-08 17:56:26 +00:00
stat2 = tm - > clid ;
2005-03-25 20:18:35 +00:00
}
else
{
if ( type = = SHOW_NEXT_LEAGUE )
2005-04-30 07:37:36 +00:00
{
2005-03-25 20:18:35 +00:00
stat2 = league_cup_get_next_clid ( stat2 ) ;
2005-04-30 07:37:36 +00:00
while ( stat2 > = ID_CUP_START & & cup_from_clid ( stat2 ) - > teams - > len = = 0 )
stat2 = league_cup_get_next_clid ( stat2 ) ;
}
2005-05-08 17:56:26 +00:00
else if ( type = = SHOW_PREVIOUS_LEAGUE )
2005-04-30 07:37:36 +00:00
{
2005-03-25 20:18:35 +00:00
stat2 = league_cup_get_previous_clid ( stat2 ) ;
2005-04-30 07:37:36 +00:00
while ( stat2 > = ID_CUP_START & & cup_from_clid ( stat2 ) - > teams - > len = = 0 )
stat2 = league_cup_get_previous_clid ( stat2 ) ;
}
2005-03-25 20:18:35 +00:00
2005-05-08 17:56:26 +00:00
if ( stat2 < ID_CUP_START )
{
teams = ( GArray * ) league_cup_get_teams ( stat2 ) ;
len = teams - > len ;
}
else
{
teamsp = ( GPtrArray * ) league_cup_get_teams ( stat2 ) ;
len = teamsp - > len ;
}
2005-03-25 20:18:35 +00:00
2005-05-08 17:56:26 +00:00
if ( type = = SHOW_NEXT )
stat1 = ( stat1 = = len - 1 ) ? 0 : stat1 + 1 ;
else if ( type = = SHOW_PREVIOUS )
stat1 = ( stat1 = = 0 ) ? len - 1 : stat1 - 1 ;
else
stat1 = 0 ;
if ( stat2 < ID_CUP_START )
tm = & g_array_index ( teams , Team , stat1 ) ;
else
tm = ( Team * ) g_ptr_array_index ( teamsp , stat1 ) ;
2005-03-25 20:18:35 +00:00
}
stat0 = STATUS_BROWSE_TEAMS ;
if ( tm ! = current_user . tm )
treeview_show_player_list_team ( treeview_right , tm , current_user . scout % 10 ) ;
else
callback_show_team ( ( type = = SHOW_PREVIOUS ) ? SHOW_PREVIOUS : SHOW_NEXT ) ;
}
2005-03-27 17:59:57 +00:00
/** Show a sortable list of all players in a league or cup. */
void
callback_show_player_list ( gint type )
{
2005-05-19 16:45:29 +00:00
stat0 = STATUS_SHOW_PLAYER_LIST ;
2005-03-27 17:59:57 +00:00
switch ( type )
{
2005-04-29 19:48:02 +00:00
default :
g_warning ( " callback_show_player_list: unknown type %d \n " , type ) ;
2005-06-17 12:57:05 +00:00
return ;
2005-04-29 19:48:02 +00:00
break ;
2005-03-27 17:59:57 +00:00
case SHOW_CURRENT :
stat1 = current_user . tm - > clid ;
break ;
case SHOW_NEXT_LEAGUE :
stat1 = league_cup_get_next_clid ( stat1 ) ;
2005-07-05 18:37:26 +00:00
while ( stat1 > = ID_CUP_START & & cup_from_clid ( stat1 ) - > teams - > len = = 0 )
stat1 = league_cup_get_next_clid ( stat1 ) ;
2005-03-27 17:59:57 +00:00
break ;
case SHOW_PREVIOUS_LEAGUE :
stat1 = league_cup_get_previous_clid ( stat1 ) ;
2005-07-05 18:37:26 +00:00
while ( stat1 > = ID_CUP_START & & cup_from_clid ( stat1 ) - > teams - > len = = 0 )
stat1 = league_cup_get_previous_clid ( stat1 ) ;
2005-03-27 17:59:57 +00:00
break ;
}
2005-05-09 17:06:11 +00:00
treeview_show_all_players ( stat1 ) ;
2005-03-27 17:59:57 +00:00
}
/** Fire a player. */
void
callback_fire_player ( gint idx )
{
gchar buf [ SMALL ] , buf2 [ SMALL ] ;
2005-04-13 13:01:59 +00:00
Player * pl = player_of_idx_team ( current_user . tm , idx ) ;
2005-03-27 17:59:57 +00:00
2005-04-07 16:44:33 +00:00
stat1 = STATUS_FIRE_PLAYER ;
stat2 = idx ;
stat3 = ( gint ) rint ( pl - > wage * const_float ( " float_player_fire_wage_factor " ) * pl - > contract ) ;
2005-03-27 17:59:57 +00:00
2005-07-01 20:51:46 +00:00
misc_print_grouped_int ( stat3 , buf2 ) ;
2005-03-27 17:59:57 +00:00
sprintf ( buf , _ ( " You want to fire %s. Since his contract expires in %.1f years, he demands a compensation of %s. Do you accept? " ) , pl - > name - > str , pl - > contract , buf2 ) ;
2005-04-07 16:44:33 +00:00
window_show_yesno ( buf ) ;
2005-03-27 17:59:57 +00:00
}
2005-04-15 13:55:59 +00:00
2005-04-29 19:48:02 +00:00
/** Show a page with the information in the league stats
structure . */
void
callback_show_league_stats ( gint type )
{
switch ( type )
{
default :
g_warning ( " callback_show_league_stats: unknown type %d \n " , type ) ;
2005-06-17 12:57:05 +00:00
return ;
2005-04-29 19:48:02 +00:00
break ;
case SHOW_CURRENT :
stat1 = current_user . tm - > clid ;
break ;
case SHOW_NEXT_LEAGUE :
stat1 = league_cup_get_next_clid ( stat1 ) ;
while ( stat1 > = ID_CUP_START )
stat1 = league_cup_get_next_clid ( stat1 ) ;
break ;
case SHOW_PREVIOUS_LEAGUE :
stat1 = league_cup_get_previous_clid ( stat1 ) ;
while ( stat1 > = ID_CUP_START )
stat1 = league_cup_get_previous_clid ( stat1 ) ;
break ;
}
treeview_show_league_stats ( stat1 ) ;
}
2005-05-02 14:39:30 +00:00
/** Show the appropriate season history page in the right treeview. */
void
callback_show_season_history ( gint type )
{
switch ( type )
{
default :
g_warning ( " callback_show_season_history: unknown type %d \n " , type ) ;
2005-06-17 12:57:05 +00:00
return ;
2005-05-02 14:39:30 +00:00
break ;
case SHOW_CURRENT :
stat1 = - 1 ;
stat2 = season - 2 ;
break ;
case SHOW_NEXT_LEAGUE :
if ( stat1 = = - 1 )
stat1 = 0 ;
else if ( stat1 = = ligs - > len - 1 )
stat1 = - 1 ;
else
stat1 + + ;
break ;
case SHOW_PREVIOUS_LEAGUE :
if ( stat1 = = - 1 )
stat1 = ligs - > len - 1 ;
else if ( stat1 = = 0 )
stat1 = - 1 ;
else
stat1 - - ;
break ;
case SHOW_NEXT :
stat2 = ( stat2 + 1 ) % ( season - 1 ) ;
break ;
case SHOW_PREVIOUS :
stat2 = ( stat2 = = 0 ) ? season - 2 : stat2 - 1 ;
break ;
}
treeview_show_season_history ( stat1 , stat2 ) ;
}
2005-05-19 16:45:29 +00:00
/** Show the player list of the next opponent. */
void
callback_show_next_opponent ( void )
{
const Fixture * fix = team_get_fixture ( current_user . tm , FALSE ) ;
const Team * opp = ( fix = = NULL ) ? NULL :
fix - > teams [ fix - > teams [ 0 ] = = current_user . tm ] ;
GtkTreeView * treeview_right =
GTK_TREE_VIEW ( lookup_widget ( window . main , " treeview_right " ) ) ;
if ( opp = = NULL )
return ;
stat0 = STATUS_BROWSE_TEAMS ;
stat1 = team_get_index ( opp ) ;
stat2 = opp - > clid ;
treeview_show_player_list_team ( treeview_right , opp , current_user . scout % 10 ) ;
}
/** Show the player list after the user clicked on a player in
the browse players mode . */
void
callback_show_player_team ( void )
{
GtkTreeView * treeview_right =
GTK_TREE_VIEW ( lookup_widget ( window . main , " treeview_right " ) ) ;
const Player * pl =
( const Player * ) treeview_helper_get_pointer ( treeview_right , 2 ) ;
stat0 = STATUS_BROWSE_TEAMS ;
stat1 = team_get_index ( pl - > team ) ;
stat2 = pl - > team - > clid ;
treeview_show_player_list_team ( treeview_right , pl - > team , current_user . scout % 10 ) ;
}