From bbce9e1f0a90e2192d7c3d9f39a596d6d4bacdfe Mon Sep 17 00:00:00 2001 From: gyboth Date: Fri, 19 Dec 2008 17:28:51 +0000 Subject: [PATCH] German news. --- bygfoot_misc3.glade | 2 +- src/free.c | 14 +- src/free.h | 4 + src/misc3_interface.c | 2 +- src/news.c | 1 + src/news_struct.h | 1 + src/start_end.c | 7 + src/treeview2.c | 39 ++- src/treeview_helper.c | 592 +++++++++++++++++--------------- src/treeview_helper.h | 7 + src/xml_loadsave_newspaper.c | 6 + support_files/bygfoot_app | 2 +- support_files/bygfoot_constants | 3 + support_files/bygfoot_tokens | 2 +- support_files/news/news_de.xml | 40 ++- 15 files changed, 420 insertions(+), 302 deletions(-) diff --git a/bygfoot_misc3.glade b/bygfoot_misc3.glade index 19ada78b..6e26a9a0 100644 --- a/bygfoot_misc3.glade +++ b/bygfoot_misc3.glade @@ -1626,7 +1626,7 @@ GTK_WINDOW_TOPLEVEL GTK_WIN_POS_CENTER False - 560 + 700 600 True False diff --git a/src/free.c b/src/free.c index d5e9ffbe..c5cdbd6d 100644 --- a/src/free.c +++ b/src/free.c @@ -770,11 +770,7 @@ free_newspaper(gboolean reset) gint i; for(i = 0; i < newspaper.articles->len; i++) - { - g_free(g_array_index(newspaper.articles, NewsPaperArticle, i).title_small); - g_free(g_array_index(newspaper.articles, NewsPaperArticle, i).title); - g_free(g_array_index(newspaper.articles, NewsPaperArticle, i).subtitle); - } + free_newspaper_article(&g_array_index(newspaper.articles, NewsPaperArticle, i)); g_array_free(newspaper.articles, TRUE); @@ -782,6 +778,14 @@ free_newspaper(gboolean reset) newspaper.articles = g_array_new(FALSE, FALSE, sizeof(NewsPaperArticle)); } +void +free_newspaper_article(NewsPaperArticle *article) +{ + g_free(article->title_small); + g_free(article->title); + g_free(article->subtitle); +} + /** Free a GPtrArray containing strings. @param array The array to be freed. diff --git a/src/free.h b/src/free.h index 62138d46..9bfb7ff9 100644 --- a/src/free.h +++ b/src/free.h @@ -32,6 +32,7 @@ #include "league_struct.h" #include "live_game_struct.h" #include "name_struct.h" +#include "news_struct.h" #include "player_struct.h" #include "team_struct.h" #include "user_struct.h" @@ -152,6 +153,9 @@ free_news(gboolean reset); void free_newspaper(gboolean reset); +void +free_newspaper_article(NewsPaperArticle *article); + void free_cup_round(CupRound *cup_round); diff --git a/src/misc3_interface.c b/src/misc3_interface.c index 42787a9b..2a07a123 100644 --- a/src/misc3_interface.c +++ b/src/misc3_interface.c @@ -789,7 +789,7 @@ create_window_news (void) window_news = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window_news), _("Bygfoot News")); gtk_window_set_position (GTK_WINDOW (window_news), GTK_WIN_POS_CENTER); - gtk_window_set_default_size (GTK_WINDOW (window_news), 560, 600); + gtk_window_set_default_size (GTK_WINDOW (window_news), 700, 600); vbox6 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox6); diff --git a/src/news.c b/src/news.c index f7566640..00410363 100644 --- a/src/news.c +++ b/src/news.c @@ -83,6 +83,7 @@ news_generate_match(const LiveGame *live_game) new_article.title_id = title_id; new_article.subtitle_id = subtitle_id; new_article.user_idx = fixture_user_team_involved(live_game->fix); + new_article.clid = live_game->fix->clid; if(counters[COUNT_NEW_NEWS] == 0) counters[COUNT_NEW_NEWS] = 2; diff --git a/src/news_struct.h b/src/news_struct.h index 76cb7d6c..f79cac13 100644 --- a/src/news_struct.h +++ b/src/news_struct.h @@ -78,6 +78,7 @@ typedef struct { gint week_number, week_round_number; gint title_id, subtitle_id; + gint clid; gchar *title_small, *title, *subtitle; gint id; gint user_idx; diff --git a/src/start_end.c b/src/start_end.c index 891ed153..34eb3a13 100644 --- a/src/start_end.c +++ b/src/start_end.c @@ -539,6 +539,13 @@ end_week_round_generate_news(void) for(i = 0; i < live_games->len; i++) if(news_check_match_relevant(&g_array_index(live_games, LiveGame, i))) news_generate_match(&g_array_index(live_games, LiveGame, i)); + + /* Get rid of older news. */ + while(newspaper.articles->len > const_int("int_news_history_length")) + { + free_newspaper_article(&g_array_index(newspaper.articles, NewsPaperArticle, 0)); + g_array_remove_index(newspaper.articles, 0); + } } /** Start a new week round. */ diff --git a/src/treeview2.c b/src/treeview2.c index 09270cda..ccd49c1c 100644 --- a/src/treeview2.c +++ b/src/treeview2.c @@ -590,6 +590,7 @@ treeview2_create_news(GtkListStore *ls) gint i; GtkTreeIter iter; gchar buf[SMALL], buf2[SMALL]; + gboolean second_column; if(newspaper.articles->len == 0) { @@ -603,6 +604,11 @@ treeview2_create_news(GtkListStore *ls) for(i = newspaper.articles->len - 1; i >= 0; i--) { + second_column = (i == newspaper.articles->len - 1 || + (i < newspaper.articles->len - 1 && + g_array_index(newspaper.articles, NewsPaperArticle, i).clid != + g_array_index(newspaper.articles, NewsPaperArticle, i + 1).clid)); + if(!opt_int("int_opt_news_show_recent") || g_array_index(newspaper.articles, NewsPaperArticle, i).week_number == week - 1) { @@ -614,7 +620,7 @@ treeview2_create_news(GtkListStore *ls) g_array_index(newspaper.articles, NewsPaperArticle, i + 1).week_round_number))) { gtk_list_store_append(ls, &iter); - gtk_list_store_set(ls, &iter, 0, "", 1, NULL, -1); + gtk_list_store_set(ls, &iter, 0, "", 1, NULL, 2, NULL, -1); gtk_list_store_append(ls, &iter); sprintf(buf2, _("Week %d Round %d"), @@ -623,13 +629,25 @@ treeview2_create_news(GtkListStore *ls) sprintf(buf, "%s\n\n", const_app("string_news_window_week_number_attribute"), buf2); - gtk_list_store_set(ls, &iter, 0, buf, 1, &g_array_index(newspaper.articles, NewsPaperArticle, i), -1); + + second_column = TRUE; } else { gtk_list_store_append(ls, &iter); - gtk_list_store_set(ls, &iter, 0, "", 1, &g_array_index(newspaper.articles, NewsPaperArticle, i), -1); + strcpy(buf, ""); } + + if(second_column) + gtk_list_store_set(ls, &iter, + 0, buf, + 1, &g_array_index(newspaper.articles, NewsPaperArticle, i), + 2, &g_array_index(newspaper.articles, NewsPaperArticle, i), -1); + else + gtk_list_store_set(ls, &iter, + 0, buf, + 1, &g_array_index(newspaper.articles, NewsPaperArticle, i), + 2, NULL, -1); } } } @@ -654,7 +672,7 @@ treeview2_set_up_news(GtkTreeView *treeview) renderer = treeview_helper_cell_renderer_text_new(); gtk_tree_view_column_pack_start(col, renderer, TRUE); gtk_tree_view_column_add_attribute(col, renderer, - "markup", 0); + "markup", 0); col = gtk_tree_view_column_new(); gtk_tree_view_append_column(treeview, col); renderer = treeview_helper_cell_renderer_text_new(); @@ -663,7 +681,16 @@ treeview2_set_up_news(GtkTreeView *treeview) gtk_tree_view_column_pack_start(col, renderer, TRUE); gtk_tree_view_column_set_cell_data_func(col, renderer, treeview_helper_news, - NULL, NULL); + NULL, NULL); + col = gtk_tree_view_column_new(); + gtk_tree_view_append_column(treeview, col); + renderer = treeview_helper_cell_renderer_text_new(); + g_object_set(renderer, "wrap-mode", PANGO_WRAP_WORD, NULL); + g_object_set(renderer, "wrap-width", 400, NULL); + gtk_tree_view_column_pack_start(col, renderer, TRUE); + gtk_tree_view_column_set_cell_data_func(col, renderer, + treeview_helper_news_additional, + NULL, NULL); } /** Show the news in the news treeview. */ @@ -677,7 +704,7 @@ treeview2_show_news(void) GtkTreeView *treeview = GTK_TREE_VIEW(lookup_widget(window.news, "treeview_news")); GtkListStore *model = - gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER); + gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER); treeview_helper_clear(treeview); diff --git a/src/treeview_helper.c b/src/treeview_helper.c index bc5454ed..1a486241 100644 --- a/src/treeview_helper.c +++ b/src/treeview_helper.c @@ -1,26 +1,26 @@ /* - treeview_helper.c + treeview_helper.c - Bygfoot Football Manager -- a small and simple GTK2-based - football management game. + Bygfoot Football Manager -- a small and simple GTK2-based + football management game. - http://bygfoot.sourceforge.net + http://bygfoot.sourceforge.net - Copyright (C) 2005 Gyözö Both (gyboth@bygfoot.com) + Copyright (C) 2005 Gyözö Both (gyboth@bygfoot.com) - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "bet.h" @@ -305,31 +305,31 @@ treeview_helper_get_user_history_icon(gint history_type) switch(history_type) { - default: - g_warning("treeview_helper_get_user_history_icon: unknown type %d.\n", history_type); - return NULL; - case USER_HISTORY_START_GAME: - return const_app("string_treeview_helper_user_history_symbol_start_game_icon"); - case USER_HISTORY_FIRE_FINANCE: - return const_app("string_treeview_helper_user_history_symbol_fire_finances_icon"); - case USER_HISTORY_FIRE_FAILURE: - return const_app("string_treeview_helper_user_history_symbol_fire_failure_icon"); - case USER_HISTORY_JOB_OFFER_ACCEPTED: - return const_app("string_treeview_helper_user_history_symbol_job_offer_accepted_icon"); - case USER_HISTORY_END_SEASON: - return const_app("string_treeview_helper_user_history_symbol_end_season_icon"); - case USER_HISTORY_WIN_FINAL: - return const_app("string_treeview_helper_user_history_symbol_win_final_icon"); - case USER_HISTORY_LOSE_FINAL: - return const_app("string_treeview_helper_user_history_symbol_lose_final_icon"); - case USER_HISTORY_PROMOTED: - return const_app("string_treeview_helper_user_history_symbol_promoted_icon"); - case USER_HISTORY_RELEGATED: - return const_app("string_treeview_helper_user_history_symbol_relegated_icon"); - case USER_HISTORY_REACH_CUP_ROUND: - return const_app("string_treeview_helper_user_history_symbol_reach_cup_round_icon"); - case USER_HISTORY_CHAMPION: - return const_app("string_treeview_helper_user_history_symbol_champion_icon"); + default: + g_warning("treeview_helper_get_user_history_icon: unknown type %d.\n", history_type); + return NULL; + case USER_HISTORY_START_GAME: + return const_app("string_treeview_helper_user_history_symbol_start_game_icon"); + case USER_HISTORY_FIRE_FINANCE: + return const_app("string_treeview_helper_user_history_symbol_fire_finances_icon"); + case USER_HISTORY_FIRE_FAILURE: + return const_app("string_treeview_helper_user_history_symbol_fire_failure_icon"); + case USER_HISTORY_JOB_OFFER_ACCEPTED: + return const_app("string_treeview_helper_user_history_symbol_job_offer_accepted_icon"); + case USER_HISTORY_END_SEASON: + return const_app("string_treeview_helper_user_history_symbol_end_season_icon"); + case USER_HISTORY_WIN_FINAL: + return const_app("string_treeview_helper_user_history_symbol_win_final_icon"); + case USER_HISTORY_LOSE_FINAL: + return const_app("string_treeview_helper_user_history_symbol_lose_final_icon"); + case USER_HISTORY_PROMOTED: + return const_app("string_treeview_helper_user_history_symbol_promoted_icon"); + case USER_HISTORY_RELEGATED: + return const_app("string_treeview_helper_user_history_symbol_relegated_icon"); + case USER_HISTORY_REACH_CUP_ROUND: + return const_app("string_treeview_helper_user_history_symbol_reach_cup_round_icon"); + case USER_HISTORY_CHAMPION: + return const_app("string_treeview_helper_user_history_symbol_champion_icon"); } return NULL; @@ -399,9 +399,9 @@ treeview_helper_insert_icon(GtkTreeModel *ls, GtkTreeIter *iter, gint column_nr, /** Function comparing two teams in a team list treeview. */ gint treeview_helper_team_compare(GtkTreeModel *model, - GtkTreeIter *a, - GtkTreeIter *b, - gpointer user_data) + GtkTreeIter *a, + GtkTreeIter *b, + gpointer user_data) { #ifdef DEBUG printf("treeview_helper_team_compare\n"); @@ -416,13 +416,13 @@ treeview_helper_team_compare(GtkTreeModel *model, switch(type) { - default: - g_warning("treeview_team_compare: unknown type %d.\n", type); - break; - case TEAM_COMPARE_AV_SKILL: - return_value = misc_float_compare(team_get_average_skill(tm1, FALSE), - team_get_average_skill(tm2, FALSE)); - break; + default: + g_warning("treeview_team_compare: unknown type %d.\n", type); + break; + case TEAM_COMPARE_AV_SKILL: + return_value = misc_float_compare(team_get_average_skill(tm1, FALSE), + team_get_average_skill(tm2, FALSE)); + break; } return return_value; @@ -456,46 +456,46 @@ treeview_helper_player_compare(GtkTreeModel *model, { switch(type) { - default: - g_warning("treeview_player_compare: unknown type %d.\n", type); - break; - case PLAYER_LIST_ATTRIBUTE_POS: - return_value = misc_int_compare(pl1->pos, pl2->pos); - break; - case PLAYER_LIST_ATTRIBUTE_GOALS: - if(pl1->pos == 0 && pl2->pos == 0) - return_value = misc_int_compare(player_games_goals_get(pl2, pl2->team->clid, PLAYER_VALUE_GOALS), - player_games_goals_get(pl1, pl1->team->clid, PLAYER_VALUE_GOALS)); - else if(pl1->pos == 0 || pl2->pos == 0) - return_value = (pl1->pos == 0) ? 1 : -1; - else - return_value = misc_int_compare(player_games_goals_get(pl1, pl1->team->clid, PLAYER_VALUE_GOALS), - player_games_goals_get(pl2, pl2->team->clid, PLAYER_VALUE_GOALS)); - break; - case PLAYER_LIST_ATTRIBUTE_SHOTS: - return_value = misc_int_compare(player_games_goals_get(pl1, pl1->team->clid, PLAYER_VALUE_SHOTS), - player_games_goals_get(pl2, pl2->team->clid, PLAYER_VALUE_SHOTS)); - break; - case PLAYER_LIST_ATTRIBUTE_GAMES: - return_value = misc_int_compare(player_games_goals_get(pl1, pl1->team->clid, PLAYER_VALUE_GAMES), - player_games_goals_get(pl2, pl2->team->clid, PLAYER_VALUE_GAMES)); - break; - case PLAYER_LIST_ATTRIBUTE_SKILL: - return_value = misc_float_compare(pl1->skill, pl2->skill); - break; - case PLAYER_LIST_ATTRIBUTE_AGE: - return_value = misc_float_compare(pl1->age, pl2->age); - break; - case PLAYER_LIST_ATTRIBUTE_ETAL: - return_value = misc_float_compare(pl1->etal[current_user.scout % 10], - pl2->etal[current_user.scout % 10]); - break; - case PLAYER_LIST_ATTRIBUTE_VALUE: - return_value = misc_int_compare(pl1->value, pl2->value); - break; - case PLAYER_LIST_ATTRIBUTE_WAGE: - return_value = misc_int_compare(pl1->wage, pl2->wage); - break; + default: + g_warning("treeview_player_compare: unknown type %d.\n", type); + break; + case PLAYER_LIST_ATTRIBUTE_POS: + return_value = misc_int_compare(pl1->pos, pl2->pos); + break; + case PLAYER_LIST_ATTRIBUTE_GOALS: + if(pl1->pos == 0 && pl2->pos == 0) + return_value = misc_int_compare(player_games_goals_get(pl2, pl2->team->clid, PLAYER_VALUE_GOALS), + player_games_goals_get(pl1, pl1->team->clid, PLAYER_VALUE_GOALS)); + else if(pl1->pos == 0 || pl2->pos == 0) + return_value = (pl1->pos == 0) ? 1 : -1; + else + return_value = misc_int_compare(player_games_goals_get(pl1, pl1->team->clid, PLAYER_VALUE_GOALS), + player_games_goals_get(pl2, pl2->team->clid, PLAYER_VALUE_GOALS)); + break; + case PLAYER_LIST_ATTRIBUTE_SHOTS: + return_value = misc_int_compare(player_games_goals_get(pl1, pl1->team->clid, PLAYER_VALUE_SHOTS), + player_games_goals_get(pl2, pl2->team->clid, PLAYER_VALUE_SHOTS)); + break; + case PLAYER_LIST_ATTRIBUTE_GAMES: + return_value = misc_int_compare(player_games_goals_get(pl1, pl1->team->clid, PLAYER_VALUE_GAMES), + player_games_goals_get(pl2, pl2->team->clid, PLAYER_VALUE_GAMES)); + break; + case PLAYER_LIST_ATTRIBUTE_SKILL: + return_value = misc_float_compare(pl1->skill, pl2->skill); + break; + case PLAYER_LIST_ATTRIBUTE_AGE: + return_value = misc_float_compare(pl1->age, pl2->age); + break; + case PLAYER_LIST_ATTRIBUTE_ETAL: + return_value = misc_float_compare(pl1->etal[current_user.scout % 10], + pl2->etal[current_user.scout % 10]); + break; + case PLAYER_LIST_ATTRIBUTE_VALUE: + return_value = misc_int_compare(pl1->value, pl2->value); + break; + case PLAYER_LIST_ATTRIBUTE_WAGE: + return_value = misc_int_compare(pl1->wage, pl2->wage); + break; } } @@ -532,9 +532,9 @@ treeview_helper_get_table_element_colour_cups(const League *league, gint table_i cup_round = &g_array_index(cp(i).rounds, CupRound, k); for(j=0;jchoose_teams->len;j++) if((strcmp(g_array_index(cup_round->choose_teams, - CupChooseTeam, j).sid, buf) == 0 || - strcmp(g_array_index(cup_round->choose_teams, - CupChooseTeam, j).sid, league->sid) == 0) && + CupChooseTeam, j).sid, buf) == 0 || + strcmp(g_array_index(cup_round->choose_teams, + CupChooseTeam, j).sid, league->sid) == 0) && g_array_index(cup_round->choose_teams, CupChooseTeam, j).from_table == table_index) { @@ -792,10 +792,10 @@ treeview_helper_team_selection(GtkTreeViewColumn *col, /** Render an integer. This is only so that we know when to draw nothing. */ void treeview_helper_int_to_cell(GtkTreeViewColumn *col, - GtkCellRenderer *renderer, - GtkTreeModel *model, - GtkTreeIter *iter, - gpointer user_data) + GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer user_data) { #ifdef DEBUG printf("treeview_helper_int_to_cell\n"); @@ -818,10 +818,10 @@ treeview_helper_int_to_cell(GtkTreeViewColumn *col, /** Render a cell in the player info view. */ void treeview_helper_player_ext_info_to_cell(GtkTreeViewColumn *col, - GtkCellRenderer *renderer, - GtkTreeModel *model, - GtkTreeIter *iter, - gpointer user_data) + GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer user_data) { #ifdef DEBUG printf("treeview_helper_player_ext_info_to_cell\n"); @@ -843,78 +843,78 @@ treeview_helper_player_ext_info_to_cell(GtkTreeViewColumn *col, switch(row_idx) { - default: - g_warning("treeview_helper_player_ext_info_to_cell: unknown row index %d\n", - row_idx); - break; - case PLAYER_INFO_ATTRIBUTE_NAME: - treeview_helper_player_to_cell(col, renderer, model, - iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_NAME)); - break; - case PLAYER_INFO_ATTRIBUTE_POS: - treeview_helper_player_to_cell(col, renderer, model, - iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_POS)); - break; - case PLAYER_INFO_ATTRIBUTE_CPOS: - treeview_helper_player_to_cell(col, renderer, model, - iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_CPOS)); - break; - case PLAYER_INFO_ATTRIBUTE_SKILL: - treeview_helper_player_to_cell(col, renderer, model, - iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_SKILL)); - break; - case PLAYER_INFO_ATTRIBUTE_CSKILL: - treeview_helper_player_to_cell(col, renderer, model, - iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_CSKILL)); - break; - case PLAYER_INFO_ATTRIBUTE_FITNESS: - treeview_helper_player_to_cell(col, renderer, model, - iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_FITNESS)); - break; - case PLAYER_INFO_ATTRIBUTE_ETAL: - treeview_helper_player_to_cell(col, renderer, model, - iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_ETAL)); - break; - case PLAYER_INFO_ATTRIBUTE_AGE: - treeview_helper_player_to_cell(col, renderer, model, - iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_AGE)); - break; - case PLAYER_INFO_ATTRIBUTE_VALUE: - treeview_helper_player_to_cell(col, renderer, model, - iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_VALUE)); - break; - case PLAYER_INFO_ATTRIBUTE_WAGE: - treeview_helper_player_to_cell(col, renderer, model, - iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_WAGE)); - break; - case PLAYER_INFO_ATTRIBUTE_CONTRACT: - treeview_helper_player_to_cell(col, renderer, model, - iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_CONTRACT)); - break; - case PLAYER_INFO_ATTRIBUTE_HEALTH: - treeview_helper_player_info_health_to_cell(renderer, pl); - break; - case PLAYER_INFO_ATTRIBUTE_GAMES_GOALS: - treeview_helper_player_info_games_goals_to_cell(renderer, pl->games_goals); - break; - case PLAYER_INFO_ATTRIBUTE_YELLOW_CARDS: - treeview_helper_player_info_yellow_to_cell(renderer, pl->cards); - break; - case PLAYER_INFO_ATTRIBUTE_BANNED: - treeview_helper_player_info_banned_to_cell(renderer, pl->cards); - break; - case PLAYER_INFO_ATTRIBUTE_STREAK: - treeview_helper_player_info_streak_to_cell(renderer, pl->streak); - break; - case PLAYER_INFO_ATTRIBUTE_CAREER: - treeview_helper_player_info_career_to_cell(renderer, pl); - break; - case PLAYER_INFO_ATTRIBUTE_OFFERS: - if(pl->offers > 0) - g_object_set(renderer, "text", _("Player doesn't negotiate anymore"), NULL); - else - g_object_set(renderer, "text", _("Player accepts new offers"), NULL); - break; + default: + g_warning("treeview_helper_player_ext_info_to_cell: unknown row index %d\n", + row_idx); + break; + case PLAYER_INFO_ATTRIBUTE_NAME: + treeview_helper_player_to_cell(col, renderer, model, + iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_NAME)); + break; + case PLAYER_INFO_ATTRIBUTE_POS: + treeview_helper_player_to_cell(col, renderer, model, + iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_POS)); + break; + case PLAYER_INFO_ATTRIBUTE_CPOS: + treeview_helper_player_to_cell(col, renderer, model, + iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_CPOS)); + break; + case PLAYER_INFO_ATTRIBUTE_SKILL: + treeview_helper_player_to_cell(col, renderer, model, + iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_SKILL)); + break; + case PLAYER_INFO_ATTRIBUTE_CSKILL: + treeview_helper_player_to_cell(col, renderer, model, + iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_CSKILL)); + break; + case PLAYER_INFO_ATTRIBUTE_FITNESS: + treeview_helper_player_to_cell(col, renderer, model, + iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_FITNESS)); + break; + case PLAYER_INFO_ATTRIBUTE_ETAL: + treeview_helper_player_to_cell(col, renderer, model, + iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_ETAL)); + break; + case PLAYER_INFO_ATTRIBUTE_AGE: + treeview_helper_player_to_cell(col, renderer, model, + iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_AGE)); + break; + case PLAYER_INFO_ATTRIBUTE_VALUE: + treeview_helper_player_to_cell(col, renderer, model, + iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_VALUE)); + break; + case PLAYER_INFO_ATTRIBUTE_WAGE: + treeview_helper_player_to_cell(col, renderer, model, + iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_WAGE)); + break; + case PLAYER_INFO_ATTRIBUTE_CONTRACT: + treeview_helper_player_to_cell(col, renderer, model, + iter, GINT_TO_POINTER(PLAYER_LIST_ATTRIBUTE_CONTRACT)); + break; + case PLAYER_INFO_ATTRIBUTE_HEALTH: + treeview_helper_player_info_health_to_cell(renderer, pl); + break; + case PLAYER_INFO_ATTRIBUTE_GAMES_GOALS: + treeview_helper_player_info_games_goals_to_cell(renderer, pl->games_goals); + break; + case PLAYER_INFO_ATTRIBUTE_YELLOW_CARDS: + treeview_helper_player_info_yellow_to_cell(renderer, pl->cards); + break; + case PLAYER_INFO_ATTRIBUTE_BANNED: + treeview_helper_player_info_banned_to_cell(renderer, pl->cards); + break; + case PLAYER_INFO_ATTRIBUTE_STREAK: + treeview_helper_player_info_streak_to_cell(renderer, pl->streak); + break; + case PLAYER_INFO_ATTRIBUTE_CAREER: + treeview_helper_player_info_career_to_cell(renderer, pl); + break; + case PLAYER_INFO_ATTRIBUTE_OFFERS: + if(pl->offers > 0) + g_object_set(renderer, "text", _("Player doesn't negotiate anymore"), NULL); + else + g_object_set(renderer, "text", _("Player accepts new offers"), NULL); + break; } } @@ -1127,73 +1127,73 @@ treeview_helper_player_to_cell(GtkTreeViewColumn *col, switch(attribute) { - default: - g_warning("treeview_helper_player_to_cell: unknown attribute %d.\n", attribute); - break; - case PLAYER_LIST_ATTRIBUTE_NAME: - treeview_helper_player_name_to_cell(renderer, buf, pl); - break; - case PLAYER_LIST_ATTRIBUTE_CPOS: - treeview_helper_player_pos_to_cell(renderer, buf, pl, - PLAYER_LIST_ATTRIBUTE_CPOS); - break; - case PLAYER_LIST_ATTRIBUTE_POS: - treeview_helper_player_pos_to_cell(renderer, buf, pl, - PLAYER_LIST_ATTRIBUTE_POS); - break; - case PLAYER_LIST_ATTRIBUTE_CSKILL: - treeview_helper_player_cskill_to_cell(renderer, buf, pl); - break; - case PLAYER_LIST_ATTRIBUTE_SKILL: - sprintf(buf, "%.*f", opt_int("int_opt_player_precision"), pl->skill); - break; - case PLAYER_LIST_ATTRIBUTE_FITNESS: - treeview_helper_player_fitness_to_cell(renderer, buf, pl->fitness); - break; - case PLAYER_LIST_ATTRIBUTE_GAMES: - treeview_helper_player_games_goals_to_cell(buf, pl, PLAYER_VALUE_GAMES); - break; - case PLAYER_LIST_ATTRIBUTE_GOALS: - treeview_helper_player_games_goals_to_cell(buf, pl, PLAYER_VALUE_GOALS); - break; - case PLAYER_LIST_ATTRIBUTE_SHOTS: - treeview_helper_player_games_goals_to_cell(buf, pl, PLAYER_VALUE_SHOTS); - break; - case PLAYER_LIST_ATTRIBUTE_STATUS: - treeview_helper_player_status_to_cell(NULL, renderer, - NULL, NULL, (gpointer)pl); - break; - case PLAYER_LIST_ATTRIBUTE_CARDS: - treeview_helper_player_cards_to_cell(buf, pl); - break; - case PLAYER_LIST_ATTRIBUTE_AGE: - sprintf(buf, "%.*f", opt_int("int_opt_player_precision"), pl->age); - break; - case PLAYER_LIST_ATTRIBUTE_ETAL: - sprintf(buf, "%.*f", opt_int("int_opt_player_precision"), - pl->etal[current_user.scout % 10]); - break; - case PLAYER_LIST_ATTRIBUTE_VALUE: - misc_print_grouped_int(pl->value, buf); - break; - case PLAYER_LIST_ATTRIBUTE_WAGE: - misc_print_grouped_int(pl->wage, buf); - break; - case PLAYER_LIST_ATTRIBUTE_CONTRACT: - treeview_helper_player_contract_to_cell(renderer, buf, pl->contract); - break; - case PLAYER_LIST_ATTRIBUTE_TEAM: - if(debug < 50) - sprintf(buf, "%s", pl->team->name); - else - sprintf(buf, "%s (%s)", pl->team->name, pl->team->strategy_sid); - break; - case PLAYER_LIST_ATTRIBUTE_LEAGUE_CUP: - idx = job_team_is_on_list(pl->team->id); - strcpy(buf, (idx == -1) ? - league_cup_get_name_string(pl->team->clid) : - g_array_index(jobs, Job, idx).league_name); - break; + default: + g_warning("treeview_helper_player_to_cell: unknown attribute %d.\n", attribute); + break; + case PLAYER_LIST_ATTRIBUTE_NAME: + treeview_helper_player_name_to_cell(renderer, buf, pl); + break; + case PLAYER_LIST_ATTRIBUTE_CPOS: + treeview_helper_player_pos_to_cell(renderer, buf, pl, + PLAYER_LIST_ATTRIBUTE_CPOS); + break; + case PLAYER_LIST_ATTRIBUTE_POS: + treeview_helper_player_pos_to_cell(renderer, buf, pl, + PLAYER_LIST_ATTRIBUTE_POS); + break; + case PLAYER_LIST_ATTRIBUTE_CSKILL: + treeview_helper_player_cskill_to_cell(renderer, buf, pl); + break; + case PLAYER_LIST_ATTRIBUTE_SKILL: + sprintf(buf, "%.*f", opt_int("int_opt_player_precision"), pl->skill); + break; + case PLAYER_LIST_ATTRIBUTE_FITNESS: + treeview_helper_player_fitness_to_cell(renderer, buf, pl->fitness); + break; + case PLAYER_LIST_ATTRIBUTE_GAMES: + treeview_helper_player_games_goals_to_cell(buf, pl, PLAYER_VALUE_GAMES); + break; + case PLAYER_LIST_ATTRIBUTE_GOALS: + treeview_helper_player_games_goals_to_cell(buf, pl, PLAYER_VALUE_GOALS); + break; + case PLAYER_LIST_ATTRIBUTE_SHOTS: + treeview_helper_player_games_goals_to_cell(buf, pl, PLAYER_VALUE_SHOTS); + break; + case PLAYER_LIST_ATTRIBUTE_STATUS: + treeview_helper_player_status_to_cell(NULL, renderer, + NULL, NULL, (gpointer)pl); + break; + case PLAYER_LIST_ATTRIBUTE_CARDS: + treeview_helper_player_cards_to_cell(buf, pl); + break; + case PLAYER_LIST_ATTRIBUTE_AGE: + sprintf(buf, "%.*f", opt_int("int_opt_player_precision"), pl->age); + break; + case PLAYER_LIST_ATTRIBUTE_ETAL: + sprintf(buf, "%.*f", opt_int("int_opt_player_precision"), + pl->etal[current_user.scout % 10]); + break; + case PLAYER_LIST_ATTRIBUTE_VALUE: + misc_print_grouped_int(pl->value, buf); + break; + case PLAYER_LIST_ATTRIBUTE_WAGE: + misc_print_grouped_int(pl->wage, buf); + break; + case PLAYER_LIST_ATTRIBUTE_CONTRACT: + treeview_helper_player_contract_to_cell(renderer, buf, pl->contract); + break; + case PLAYER_LIST_ATTRIBUTE_TEAM: + if(debug < 50) + sprintf(buf, "%s", pl->team->name); + else + sprintf(buf, "%s (%s)", pl->team->name, pl->team->strategy_sid); + break; + case PLAYER_LIST_ATTRIBUTE_LEAGUE_CUP: + idx = job_team_is_on_list(pl->team->id); + strcpy(buf, (idx == -1) ? + league_cup_get_name_string(pl->team->clid) : + g_array_index(jobs, Job, idx).league_name); + break; } if(attribute != PLAYER_LIST_ATTRIBUTE_STATUS) @@ -1238,8 +1238,8 @@ treeview_helper_player_name_to_cell(GtkCellRenderer *renderer, gchar *buf, const } else if(query_transfer_current_team_offer(pl)) { - colour_bg = const_app("string_treeview_helper_color_transfer_offer_bg"); - colour_fg = const_app("string_treeview_helper_color_transfer_offer_fg"); + colour_bg = const_app("string_treeview_helper_color_transfer_offer_bg"); + colour_fg = const_app("string_treeview_helper_color_transfer_offer_fg"); } g_object_set(renderer, "background", colour_bg, NULL); @@ -1494,38 +1494,38 @@ treeview_helper_player_pos_to_cell(GtkCellRenderer *renderer, gchar *buf, switch(pos) { - default: - /* Goalie */ - strcpy(buf, _("G")); - g_object_set(renderer, "background", - const_app("string_treeview_helper_color_player_pos_goalie_bg"), - "foreground", - const_app("string_treeview_helper_color_player_pos_goalie_fg"), NULL); - break; - case PLAYER_POS_DEFENDER: - /* Defender */ - strcpy(buf, _("D")); - g_object_set(renderer, "background", - const_app("string_treeview_helper_color_player_pos_defender_bg"), - "foreground", - const_app("string_treeview_helper_color_player_pos_defender_fg"), NULL); - break; - case PLAYER_POS_MIDFIELDER: - /* Midfielder */ - strcpy(buf, _("M")); - g_object_set(renderer, "background", - const_app("string_treeview_helper_color_player_pos_midfielder_bg"), - "foreground", - const_app("string_treeview_helper_color_player_pos_midfielder_fg"), NULL); - break; - case PLAYER_POS_FORWARD: - /* Forward */ - strcpy(buf, _("F")); - g_object_set(renderer, "background", - const_app("string_treeview_helper_color_player_pos_forward_bg"), - "foreground", - const_app("string_treeview_helper_color_player_pos_forward_fg"), NULL); - break; + default: + /* Goalie */ + strcpy(buf, _("G")); + g_object_set(renderer, "background", + const_app("string_treeview_helper_color_player_pos_goalie_bg"), + "foreground", + const_app("string_treeview_helper_color_player_pos_goalie_fg"), NULL); + break; + case PLAYER_POS_DEFENDER: + /* Defender */ + strcpy(buf, _("D")); + g_object_set(renderer, "background", + const_app("string_treeview_helper_color_player_pos_defender_bg"), + "foreground", + const_app("string_treeview_helper_color_player_pos_defender_fg"), NULL); + break; + case PLAYER_POS_MIDFIELDER: + /* Midfielder */ + strcpy(buf, _("M")); + g_object_set(renderer, "background", + const_app("string_treeview_helper_color_player_pos_midfielder_bg"), + "foreground", + const_app("string_treeview_helper_color_player_pos_midfielder_fg"), NULL); + break; + case PLAYER_POS_FORWARD: + /* Forward */ + strcpy(buf, _("F")); + g_object_set(renderer, "background", + const_app("string_treeview_helper_color_player_pos_forward_bg"), + "foreground", + const_app("string_treeview_helper_color_player_pos_forward_fg"), NULL); + break; } if(pl->cskill == 0) @@ -1838,12 +1838,44 @@ treeview_helper_search_equal(GtkTreeModel *model, return return_value; } +void +treeview_helper_news_additional(GtkTreeViewColumn *col, + GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer user_data) +{ + const NewsPaperArticle *article = NULL; + const gchar *colour_fg; + const gchar *colour_bg; + gchar buf[SMALL]; + + gtk_tree_model_get(model, iter, 2, &article, -1); + + colour_fg = const_app("string_treeview_helper_color_default_foreground"); + colour_bg = const_app("string_treeview_helper_color_default_background"); + + if(article == NULL) + { + g_object_set(renderer, "markup", "", + "background", colour_bg, "foreground", colour_fg, NULL); + return; + } + + sprintf(buf, "%s", + const_app("string_news_window_league_cup_attribute"), + league_cup_get_name_string(article->clid)); + + g_object_set(renderer, "markup", buf, + "background", colour_bg, "foreground", colour_fg, NULL); +} + void treeview_helper_news(GtkTreeViewColumn *col, - GtkCellRenderer *renderer, - GtkTreeModel *model, - GtkTreeIter *iter, - gpointer user_data) + GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer user_data) { const NewsPaperArticle *article = NULL; const gchar *colour_fg; @@ -1856,7 +1888,7 @@ treeview_helper_news(GtkTreeViewColumn *col, colour_fg = const_app("string_treeview_helper_color_default_foreground"); colour_bg = const_app("string_treeview_helper_color_default_background"); - if(article == NULL) + if(article == NULL) { g_object_set(renderer, "markup", "", "background", colour_bg, "foreground", colour_fg, NULL); diff --git a/src/treeview_helper.h b/src/treeview_helper.h index e9586e75..2332172b 100644 --- a/src/treeview_helper.h +++ b/src/treeview_helper.h @@ -236,4 +236,11 @@ treeview_helper_news(GtkTreeViewColumn *col, GtkTreeIter *iter, gpointer user_data); +void +treeview_helper_news_additional(GtkTreeViewColumn *col, + GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer user_data); + #endif diff --git a/src/xml_loadsave_newspaper.c b/src/xml_loadsave_newspaper.c index 549405ae..092a2850 100644 --- a/src/xml_loadsave_newspaper.c +++ b/src/xml_loadsave_newspaper.c @@ -44,6 +44,7 @@ enum TAG_NEWS_PAPER_ARTICLE_TITLE, TAG_NEWS_PAPER_ARTICLE_SUBTITLE, TAG_NEWS_PAPER_ARTICLE_USER_IDX, + TAG_NEWS_PAPER_ARTICLE_CLID, TAG_END }; @@ -105,6 +106,7 @@ xml_loadsave_newspaper_end_element (GMarkupParseContext *context, tag == TAG_NEWS_PAPER_ARTICLE_TITLE_ID || tag == TAG_NEWS_PAPER_ARTICLE_SUBTITLE || tag == TAG_NEWS_PAPER_ARTICLE_USER_IDX || + tag == TAG_NEWS_PAPER_ARTICLE_CLID || tag == TAG_NEWS_PAPER_ARTICLE_SUBTITLE_ID) { state = TAG_NEWS_PAPER_ARTICLE; @@ -151,6 +153,8 @@ xml_loadsave_newspaper_text (GMarkupParseContext *context, new_article.subtitle_id = int_value; else if(state == TAG_NEWS_PAPER_ARTICLE_USER_IDX) new_article.user_idx = int_value; + else if(state == TAG_NEWS_PAPER_ARTICLE_CLID) + new_article.clid = int_value; } void @@ -234,6 +238,8 @@ xml_loadsave_newspaper_write(const gchar *prefix) TAG_NEWS_PAPER_ARTICLE_SUBTITLE_ID, I1); xml_write_int(fil, g_array_index(newspaper.articles, NewsPaperArticle, i).user_idx, TAG_NEWS_PAPER_ARTICLE_USER_IDX, I1); + xml_write_int(fil, g_array_index(newspaper.articles, NewsPaperArticle, i).clid, + TAG_NEWS_PAPER_ARTICLE_CLID, I1); fprintf(fil, "%s\n", I0, TAG_NEWS_PAPER_ARTICLE); } diff --git a/support_files/bygfoot_app b/support_files/bygfoot_app index 4020cd77..45747ab0 100644 --- a/support_files/bygfoot_app +++ b/support_files/bygfoot_app @@ -240,4 +240,4 @@ string_news_window_week_number_attribute style='oblique' string_news_window_title_small_attribute size='small' string_news_window_title_attribute weight='bold' size='large' string_news_window_subtitle_attribute style='oblique' -string_news_window_alternate_background lightgrey +string_news_window_league_cup_attribute weight='bold' diff --git a/support_files/bygfoot_constants b/support_files/bygfoot_constants index 4287641c..fdf5da49 100644 --- a/support_files/bygfoot_constants +++ b/support_files/bygfoot_constants @@ -1002,3 +1002,6 @@ int_training_camps_week 2 # to avoid news repetitions int_news_repetition_min_check_number 3 int_news_repetition_max_check_number 10 + +# how many news articles to keep in memory +int_news_history_length 50 diff --git a/support_files/bygfoot_tokens b/support_files/bygfoot_tokens index 9a0b0452..59dd421c 100644 --- a/support_files/bygfoot_tokens +++ b/support_files/bygfoot_tokens @@ -35,7 +35,7 @@ string_token_team_losingn _TLN_ # also for news string_token_team _TT_ string_token_team_layer0 _TLAYER0_ # also for news string_token_team_layer1 _TLAYER1_ # also for news -string_token_team_layerdiff _LAYERDIFF_ # also for news +string_token_team_layerdiff _TLAYERDIFF_ # also for news string_token_team_avskill0 _TAVSKILL0_ # also for news string_token_team_avskill1 _TAVSKILL1_ # also for news string_token_team_avskilldiff _TAVSKILLDIFF_ # also for news diff --git a/support_files/news/news_de.xml b/support_files/news/news_de.xml index cf963a34..3a582eb5 100644 --- a/support_files/news/news_de.xml +++ b/support_files/news/news_de.xml @@ -134,13 +134,15 @@ Faire Punkteteilung nach ausgeglichenem Spiel. Das Remis hilft aber keinem der beiden Teams weiter. Weder _T0_ noch _T1_ können mit einem Unentschieden zufrieden sein. + Zahlreiche der _AT_ Zuschauer sterben an Langeweile während dieses unterirdischen Spiels. + Die beiden Teams liefern einen Grottenkick aus der Zeit des Catenaccio. _AT_ werden trotz Unentschieden beim _RE_ gut unterhalten. Trainer von [_T0_|_T1_] will sich in den nächsten Wochen auf die Defensive konzentrieren. Gute Offensivleistung von [_T0_|_T1_] wird durch Leichtsinnsfehler kaputtgemacht. [_T0_|_T1_] verschenkt durch Fehler in der Verteidigung den Sieg. Ein Fehler kostet [_T0_|_T1_] den Sieg. - Mangelhafte Chancenverwertung raubt _T0_ die Chance auf den Sieg. - Mangelhafte Chancenverwertung raubt _T1_ die Chance auf den Sieg. + Mangelhafte Chancenverwertung raubt _T0_ die Chance auf den Sieg. + Mangelhafte Chancenverwertung raubt _T1_ die Chance auf den Sieg. Ein verschenkter Elfmeter wird den Spielern von _T1_ noch lange den Schlaf rauben. Ein verschenkter Elfmeter wird den Spielern von _T0_ noch lange den Schlaf rauben. _T0_ holt nur Unentschieden, ist aber seit _UNBEATEN0_ Matches ungeschlagen. @@ -175,23 +177,47 @@ match - _LAYERDIFF_ = 0 and _GD_ != 0 and _TAVSKILLDIFF_ > 7 + _TLAYERDIFF_ = 0 and _GD_ != 0 and _TAVSKILLDIFF_ > 7 _TW_ [besiegt|gewinnt gegen|bezwingt|schlägt] _TL_ - Wie erwartet _TW_ [besiegt|bezwingt|schlägt] _TL_ + Wie erwartet [besiegt|bezwingt|schlägt] _TW_ _TL_ _TW_ erfüllt Erwartungen der Experten - _TW_ schlägt _TL_ erwartungsgemäß mit _RE_ + _TW_ schlägt _TL_ erwartungsgemäß mit _REW_ _TW_ trotzt den Wettquoten und besiegt _TL_ _TW_ schafft kleine Sensation gegen _TL_ _TL_ nominell überlegen, verliert aber _RE_ - Gegen _TW_ war nicht mehr drin für _TL_ + Gegen _TW_ war nicht mehr drin für _TL_. _TW_ war auf dem Papier besser als _TL_ - und auf dem Platz auch. _TW_ hatte die bessere Mannschaft und nutzte den Vorteil gnadenlos. _TW_ stellt die Fussballwelt auf den Kopf mit dem überraschenden Sieg. - _TW_ wurde schwächer eingeschätzt, macht die nominellen Nachteile aber mit Leidenschaft mehr als wett. + _TW_ wurde schwächer eingeschätzt, macht aber alle Nachteile mit Leidenschaft mehr als wett. Dank einer cleveren Taktik gewinnt _TW_ gegen einen höher eingeschätzten Gegner. _TL_ muss sich an den eigenen Kopf fassen nach einer unnötigen Niederlage gegen einen auf dem Papier wesentlich schwächeren Widersacher. _TW_ demonstriert eindrucksvoll, wie ein homogen agierendes Team einen Gegner mit den besseren Einzelspielern überwältigen kann. + + match + _TLAYERDIFF_ > 0 + _T[_TLAYER0_ L _TLAYER1_]_ schafft überraschendes Unentschieden + _T[_TLAYER0_ L _TLAYER1_]_ hält _T[_TLAYER0_ G _TLAYER1_]_ stand + _LEAGUECUPNAME_: _T[_TLAYER0_ L _TLAYER1_]_ erkämpft Remis + _T[_TLAYER0_ L _TLAYER1_]_ schlägt _T[_TLAYER0_ G _TLAYER1_]_ sensationell + _T[_TLAYER0_ L _TLAYER1_]_ schafft Sensation + _T[_TLAYER0_ L _TLAYER1_]_ siegt trotz Klassenunterschied + _T[_TLAYER0_ L _TLAYER1_]_ muss sich der Übermacht beugen + _T[_TLAYER0_ G _TLAYER1_]_ zu gut für _T[_TLAYER0_ L _TLAYER1_]_ + _T[_TLAYER0_ G _TLAYER1_]_ bezwingt tapferen Gegner + _T[_TLAYER0_ L _TLAYER1_]_ hält dem Druck des übermächtigen Gegners stand. + Keiner hätte ein solches Ergebnis erwartet - ausser die Spieler und der Trainer von _T[_TLAYER0_ L _TLAYER1_]_. + _T[_TLAYER0_ L _TLAYER1_]_ gelingt mit dem _RE_ ein Ergebnis, das kein Experte erwartet hatte. + _T[_TLAYER0_ L _TLAYER1_]_ gibt alles, _T[_TLAYER0_ G _TLAYER1_]_ erweist sich jedoch als zu stark. + _T[_TLAYER0_ G _TLAYER1_]_ erfüllt die Erwartungen und siegt vor _AT_ Zuschauern. + _T[_TLAYER0_ G _TLAYER1_]_ lässt dem unterklassigen Gegner keine Chance. + _T[_TLAYER0_ G _TLAYER1_]_ blamiert sich gegen den unterklassigen Gegner bis auf die Knochen. + Nach der überraschenden Niederlage nimmt die Polizei Ermittlungen wegen des Verdachts auf Manipulation auf. + _T[_TLAYER0_ L _TLAYER1_]_ fügt _T[_TLAYER0_ G _TLAYER1_]_ vor _AT_ Zuschauern eine demütigende Pokalniederlage zu. + _T[_TLAYER0_ L _TLAYER1_]_ lässt sich nicht durch den Klassenunterschied verunsichern und siegt _RE_. + +