diff --git a/src/misc2_callback_func.c b/src/misc2_callback_func.c new file mode 100644 index 00000000..64bb1248 --- /dev/null +++ b/src/misc2_callback_func.c @@ -0,0 +1,61 @@ +#include "finance.h" +#include "game_gui.h" +#include "maths.h" +#include "misc2_callback_func.h" +#include "option.h" +#include "player.h" +#include "team.h" +#include "treeview.h" +#include "transfer.h" +#include "user.h" + +/** 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); + } + + treeview_show_user_player_list(¤t_user); + game_gui_set_main_window_header(); +} diff --git a/src/misc2_callback_func.h b/src/misc2_callback_func.h new file mode 100644 index 00000000..f7d30b9b --- /dev/null +++ b/src/misc2_callback_func.h @@ -0,0 +1,10 @@ +#ifndef MISC2_CALLBACK_FUNC_H +#define MISC2_CALLBACK_FUNC_H + +#include "bygfoot.h" + +void +misc2_callback_transfer_user_player(void); + +#endif + diff --git a/src/transfer_struct.h b/src/transfer_struct.h new file mode 100644 index 00000000..ed689616 --- /dev/null +++ b/src/transfer_struct.h @@ -0,0 +1,33 @@ +#ifndef TRANSFER_STRUCT_H +#define TRANSFER_STRUCT_H + +#include "bygfoot.h" +#include "player_struct.h" +#include "team_struct.h" + +/** Structure representing a player on the transfer list. */ +typedef struct +{ + /** Team of the player. */ + Team *tm; + /** Id of player in the team. */ + gint id; + /** Time until player gets removed from the list. */ + gint time; + /** Estimated fees and wages for different scout qualities. */ + gint fee[QUALITY_END], wage[QUALITY_END]; + /** Offers for the player. */ + GArray *offers; + +} Transfer; + +typedef struct +{ + /** The team that makes the offer. */ + Team *tm; + /** Transfer fee and wage offer. */ + gint fee, wage; + +} TransferOffer; + +#endif