bygfoot/src/misc2_callback_func.c

137 lines
4.1 KiB
C
Raw Normal View History

2005-03-21 12:52:41 +01:00
#include "finance.h"
#include "game_gui.h"
#include "maths.h"
#include "misc2_callback_func.h"
#include "option.h"
#include "player.h"
2005-03-25 21:18:35 +01:00
#include "support.h"
2005-03-21 12:52:41 +01:00
#include "team.h"
#include "treeview.h"
#include "transfer.h"
#include "user.h"
2005-03-25 21:18:35 +01:00
#include "window.h"
2005-03-21 12:52:41 +01:00
/** Transfer a user player. */
void
misc2_callback_transfer_user_player(void)
{
Team *new_team = transoff(stat1, 0).tm;
gchar buf[SMALL];
if(team_is_user(new_team) != -1)
{
if(new_team->players->len < const_int("int_team_max_players") &&
BUDGET(user_get_index(user_from_team(new_team))) > transoff(stat1, 0).fee)
{
current_user.money += transoff(stat1, 0).fee;
current_user.money_in[1][MON_IN_TRANSFERS] += transoff(stat1, 0).fee;
user_from_team(new_team)->money -= transoff(stat1, 0).fee;
user_from_team(new_team)->money_out[1][MON_OUT_TRANSFERS] -=
transoff(stat1, 0).fee;
player_copy(player_of_id(trans(stat1).tm, trans(stat1).id),
new_team, new_team->players->len);
player_of(new_team, new_team->players->len - 1)->contract =
(gfloat)math_rndi(const_int("int_transfer_contract_lower"),
const_int("int_transfer_contract_upper"));
g_array_remove_index(current_user.tm->players,
player_id_index(current_user.tm, trans(stat1).id));
transfer_remove_player(stat1);
}
else
{
sprintf(buf, _("%s couldn't afford to buy %s or his roster was full."),
user_from_team(new_team)->name->str,
player_of_id(trans(stat1).tm, trans(stat1).id)->name->str);
game_gui_show_warning(buf);
sprintf(buf, _("You didn't have enough money to buy %s or your roster was full."),
player_of_id(trans(stat1).tm, trans(stat1).id)->name->str);
user_event_add(user_from_team(new_team), EVENT_TYPE_WARNING, -1, -1, NULL, buf);
g_array_remove_index(trans(stat1).offers, 0);
}
}
else
{
current_user.money += transoff(stat1, 0).fee;
current_user.money_in[1][MON_IN_TRANSFERS] += transoff(stat1, 0).fee;
player_remove_from_team(current_user.tm,
player_id_index(current_user.tm, trans(stat1).id));
transfer_remove_player(stat1);
}
2005-03-24 21:22:44 +01:00
treeview_show_user_player_list();
2005-03-21 12:52:41 +01:00
game_gui_set_main_window_header();
}
2005-03-24 19:04:31 +01:00
/** Change the user team's structure to a value he's specified. */
void
misc2_callback_change_structure(gint structure)
{
gchar buf[SMALL];
if(math_get_place(structure, 1) + math_get_place(structure, 2) +
math_get_place(structure, 3) != 10)
{
sprintf(buf, _("The structure value %d is invalid."), structure);
game_gui_print_message(buf);
return;
}
team_change_structure(current_user.tm, structure);
2005-03-24 21:22:44 +01:00
treeview_show_user_player_list();
2005-03-24 19:04:31 +01:00
}
2005-03-25 21:18:35 +01:00
/** Handle a click on the contract offer button. */
void
misc2_callback_contract_offer(void)
{
gint i;
gchar buf[SMALL];
GtkSpinButton *spinbutton;
gint value = 0;
Player *pl = (Player*)statp;
for(i=0;i<4;i++)
{
sprintf(buf, "radiobutton_contract%d", i + 1);
if(gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(lookup_widget(window.contract, buf))))
{
sprintf(buf, "spinbutton_contract%d", i + 1);
spinbutton = GTK_SPIN_BUTTON(lookup_widget(window.contract, buf));
value = gtk_spin_button_get_value_as_int(spinbutton);
if(value >= (gint)rint((gfloat)stat1 *
(1 + (i * const_float("float_contract_scale_factor") *
powf(-1, (pl->age > pl->peak_age))))))
{
pl->contract += (i + 1);
pl->wage = value;
sprintf(buf, _("%s has accepted your offer."), pl->name->str);
game_gui_print_message(buf);
window_destroy(&window.contract, FALSE);
}
else
{
pl->offers++;
if(pl->offers < const_int("int_contract_max_offers"))
{
sprintf(buf, _("%s rejects your offer. You may still make %d offers."),
pl->name->str,
const_int("int_contract_max_offers") - pl->offers);
game_gui_show_warning(buf);
}
else
{
sprintf(buf, _("%s rejects your offer and won't negotiate with you anymore. You should sell him before his contract expires (he'll simply leave your team otherwise)."),
pl->name->str);
game_gui_show_warning(buf);
window_destroy(&window.contract, FALSE);
}
}
break;
}
}
}