1
1
mirror of https://github.com/tstellar/bygfoot.git synced 2025-01-28 14:39:22 +01:00

"Commentary improvements etc."

This commit is contained in:
gyboth 2005-07-05 18:37:26 +00:00
parent 405d248f86
commit fcacd51742
19 changed files with 307 additions and 143 deletions

File diff suppressed because one or more lines are too long

View File

@ -1402,6 +1402,23 @@
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button_contract_cancel">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-cancel</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_button_contract_cancel_clicked" last_modification_time="Tue, 05 Jul 2005 13:09:45 GMT"/>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2005-07-03 12:53+0200\n"
"POT-Creation-Date: 2005-07-05 20:34+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -133,11 +133,11 @@ msgid ""
"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).\n"
"him). You may only abort BEFORE making the first offer.\n"
"Your scout's recommendations are preset:"
msgstr ""
#: src/callback_func.c:616
#: src/callback_func.c:620
#, c-format
msgid ""
"You want to fire %s. Since his contract expires in %.1f years, he demands a "
@ -244,37 +244,37 @@ msgstr ""
msgid "Contracts are disabled in this country definition."
msgstr ""
#: src/cup.c:790
#: src/cup.c:799
msgid " -- Second leg"
msgstr ""
#: src/cup.c:792
#: src/cup.c:801
msgid " -- First leg"
msgstr ""
#: src/cup.c:795
#: src/cup.c:804
msgid " -- Replay matches"
msgstr ""
#: src/cup.c:807
#: src/cup.c:816
msgid "Round robin"
msgstr ""
#. A cup stage, e.g. Last 32 when there are only 32 teams left.
#: src/cup.c:815
#: src/cup.c:824
#, c-format
msgid "Last %d"
msgstr ""
#: src/cup.c:818
#: src/cup.c:827
msgid "Final"
msgstr ""
#: src/cup.c:821
#: src/cup.c:830
msgid "Semi-final"
msgstr ""
#: src/cup.c:824
#: src/cup.c:833
msgid "Quarter-final"
msgstr ""
@ -626,15 +626,15 @@ msgstr ""
msgid "_Help"
msgstr ""
#: src/interface.c:806 src/misc2_interface.c:1027
#: src/interface.c:806 src/misc2_interface.c:1036
msgid "About"
msgstr ""
#: src/interface.c:814 src/misc2_interface.c:1041
#: src/interface.c:814 src/misc2_interface.c:1050
msgid "Contributors"
msgstr ""
#: src/interface.c:822 src/misc2_interface.c:1067
#: src/interface.c:822 src/misc2_interface.c:1076
msgid "Help"
msgstr ""
@ -733,38 +733,38 @@ msgstr ""
msgid "Next (W)"
msgstr ""
#: src/lg_commentary.c:522 src/team.c:500
#: src/lg_commentary.c:499 src/team.c:500
msgid "ALL OUT DEFEND"
msgstr ""
#: src/lg_commentary.c:525 src/team.c:502
#: src/lg_commentary.c:502 src/team.c:502
msgid "DEFEND"
msgstr ""
#: src/lg_commentary.c:528 src/team.c:504
#: src/lg_commentary.c:505 src/team.c:504
msgid "BALANCED"
msgstr ""
#: src/lg_commentary.c:531 src/team.c:506
#: src/lg_commentary.c:508 src/team.c:506
msgid "ATTACK"
msgstr ""
#: src/lg_commentary.c:534 src/team.c:508
#: src/lg_commentary.c:511 src/team.c:508
msgid "ALL OUT ATTACK"
msgstr ""
#. Boost value.
#: src/lg_commentary.c:537 src/team.c:516
#: src/lg_commentary.c:514 src/team.c:516
msgid "ANTI"
msgstr ""
#. Boost value.
#: src/lg_commentary.c:540 src/team.c:519
#: src/lg_commentary.c:517 src/team.c:519
msgid "OFF"
msgstr ""
#. Boost value.
#: src/lg_commentary.c:543 src/team.c:522
#: src/lg_commentary.c:520 src/team.c:522
msgid "ON"
msgstr ""
@ -859,17 +859,17 @@ msgstr ""
msgid "The structure value %d is invalid."
msgstr ""
#: src/misc2_callback_func.c:154
#: src/misc2_callback_func.c:156
#, c-format
msgid "%s accepts your offer."
msgstr ""
#: src/misc2_callback_func.c:163
#: src/misc2_callback_func.c:165
#, c-format
msgid "%s rejects your offer. You may still make %d offers."
msgstr ""
#: src/misc2_callback_func.c:170
#: src/misc2_callback_func.c:172
#, c-format
msgid ""
"%s rejects your offer and won't negotiate with you anymore. You should sell "
@ -884,11 +884,11 @@ msgstr ""
msgid "Your offer will be considered next week."
msgstr ""
#: src/misc2_callbacks.c:269
#: src/misc2_callbacks.c:280
msgid "You can't play Bygfoot without users!"
msgstr ""
#: src/misc2_callbacks.c:274
#: src/misc2_callbacks.c:285
#, c-format
msgid "Remove user %s from the game?"
msgstr ""
@ -937,63 +937,63 @@ msgid "OK"
msgstr ""
#: src/misc2_interface.c:434 src/misc2_interface.c:521
#: src/misc2_interface.c:1074 src/misc2_interface.c:1169
#: src/misc2_interface.c:1083 src/misc2_interface.c:1178
#: src/misc_interface.c:263 src/misc_interface.c:1018
#: src/options_interface.c:978
msgid "Esc"
msgstr ""
#: src/misc2_interface.c:603
#: src/misc2_interface.c:604
msgid "1 year"
msgstr ""
#: src/misc2_interface.c:611
#: src/misc2_interface.c:612
msgid "3 years"
msgstr ""
#: src/misc2_interface.c:619
#: src/misc2_interface.c:620
msgid "4 years"
msgstr ""
#: src/misc2_interface.c:627
#: src/misc2_interface.c:628
msgid "2 years"
msgstr ""
#: src/misc2_interface.c:690
#: src/misc2_interface.c:691
msgid "Make offer"
msgstr ""
#: src/misc2_interface.c:777
#: src/misc2_interface.c:786
msgid "Users -- click to remove"
msgstr ""
#: src/misc2_interface.c:792
#: src/misc2_interface.c:801
msgid "Click on a user to remove him from the game."
msgstr ""
#: src/misc2_interface.c:798
#: src/misc2_interface.c:807
msgid "Available teams"
msgstr ""
#: src/misc2_interface.c:834 src/misc_interface.c:190
#: src/misc2_interface.c:843 src/misc_interface.c:190
msgid "Add user"
msgstr ""
#: src/misc2_interface.c:910
#: src/misc2_interface.c:919
msgid "Debug"
msgstr ""
#: src/misc2_interface.c:917
#: src/misc2_interface.c:926
msgid ""
"Bygfoot debug window. If you got here by accident, CLOSE IMMEDIATELY "
"(otherwise your CPU will be destroyed by overheating)."
msgstr ""
#: src/misc2_interface.c:1157 src/misc_interface.c:994
#: src/misc2_interface.c:1166 src/misc_interface.c:994
msgid "Return"
msgstr ""
#: src/misc2_interface.c:1186
#: src/misc2_interface.c:1195
msgid "Decide later"
msgstr ""

View File

@ -37,6 +37,7 @@
#define cup_id_new (counters[COUNT_CUP_ID]++)
#define league_id_new (counters[COUNT_LEAGUE_ID]++)
#define fixture_id_new (counters[COUNT_FIX_ID]++)
#define lg_commentary_id_new (counters[COUNT_LG_COMM_ID]++)
/** Convenience abbreviation. */
#define ligs country.leagues

View File

@ -492,7 +492,7 @@ callback_offer_new_contract(gint idx)
window_create(WINDOW_CONTRACT);
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).\nYour scout's recommendations are preset:"), pl->name->str,
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.\nYour scout's recommendations are preset:"), pl->name->str,
const_int("int_contract_max_offers"));
gtk_label_set_text(GTK_LABEL(lookup_widget(window.contract, "label_contract")), buf);
@ -591,9 +591,13 @@ callback_show_player_list(gint type)
break;
case SHOW_NEXT_LEAGUE:
stat1 = league_cup_get_next_clid(stat1);
while(stat1 >= ID_CUP_START && cup_from_clid(stat1)->teams->len == 0)
stat1 = league_cup_get_next_clid(stat1);
break;
case SHOW_PREVIOUS_LEAGUE:
stat1 = league_cup_get_previous_clid(stat1);
while(stat1 >= ID_CUP_START && cup_from_clid(stat1)->teams->len == 0)
stat1 = league_cup_get_previous_clid(stat1);
break;
}

View File

@ -162,12 +162,14 @@ cup_get_choose_team_league_cup(const CupChooseTeam *ct,
else
{
for(i=0;i<ligs->len;i++)
{
if(strcmp(lig(i).sid->str, ct->sid->str) == 0)
{
*league = &lig(i);
*cup = NULL;
break;
}
}
for(i=0;i<cps->len;i++)
{
@ -179,6 +181,13 @@ cup_get_choose_team_league_cup(const CupChooseTeam *ct,
}
}
}
if(*league == NULL && *cup == NULL)
{
g_warning("cup_get_choose_team_league_cup: no league nor cup found for chooseteam %s",
ct->sid->str);
main_exit_program(EXIT_CHOOSE_TEAM_ERROR, NULL);
}
}
/** Return the pointers to the teams participating in the

View File

@ -11,6 +11,7 @@ enum Counters
COUNT_CUP_ID,
COUNT_LEAGUE_ID,
COUNT_FIX_ID,
COUNT_LG_COMM_ID,
COUNT_SHOW_DEBUG,
COUNT_END
};
@ -89,7 +90,6 @@ enum Status0Value
STATUS_SHOW_LEAGUE_RESULTS,
STATUS_SHOW_LEAGUE_STATS,
STATUS_SHOW_SEASON_HISTORY,
STATUS_CONTRACT_OFFER,
STATUS_SHOW_PLAYER_LIST,
STATUS_FIRE_PLAYER,
STATUS_USER_MANAGEMENT,

View File

@ -17,65 +17,8 @@
/** The replacement strings for the live game commentary tokens. */
gchar **token_rep;
/** Allocate memory for the token array and fill some tokens
at the beginning of the live game that don't change later. */
void
lg_commentary_initialize(const Fixture *fix)
{
gint i;
gchar buf[SMALL];
token_rep = (gchar**)g_malloc(sizeof(gchar*) * lg_tokens.list->len);
for(i=0;i<lg_tokens.list->len;i++)
token_rep[i] = NULL;
token_rep[option_int("string_lg_commentary_token_team_home", &lg_tokens)] =
g_strdup(fix->teams[0]->name->str);
token_rep[option_int("string_lg_commentary_token_team_away", &lg_tokens)] =
g_strdup(fix->teams[1]->name->str);
if(fix->teams[0]->clid < ID_CUP_START)
token_rep[option_int("string_lg_commentary_token_team_layer0", &lg_tokens)] =
misc_int_to_char(league_from_clid(fix->teams[0]->clid)->layer);
if(fix->teams[1]->clid < ID_CUP_START)
token_rep[option_int("string_lg_commentary_token_team_layer1", &lg_tokens)] =
misc_int_to_char(league_from_clid(fix->teams[1]->clid)->layer);
token_rep[option_int("string_lg_commentary_token_league_cup_name", &lg_tokens)] =
g_strdup(league_cup_get_name_string(fix->clid));
if(fix->clid >= ID_CUP_START)
{
cup_get_round_name(cup_from_clid(fix->clid), fix->round, buf);
token_rep[option_int("string_lg_commentary_token_cup_round_name", &lg_tokens)] =
g_strdup(buf);
}
misc_print_grouped_int(fix->attendance, buf);
token_rep[option_int("string_lg_commentary_token_attendance", &lg_tokens)] =
g_strdup(buf);
token_rep[option_int("string_lg_commentary_token_yellow_limit", &lg_tokens)] =
misc_int_to_char(league_cup_get_yellow_red(fix->clid));
}
/** Free the memory occupied by the tokens array and the permanent tokens. */
void
lg_commentary_post_match(void)
{
g_free(token_rep[option_int("string_lg_commentary_token_team_home", &lg_tokens)]);
g_free(token_rep[option_int("string_lg_commentary_token_team_away", &lg_tokens)]);
g_free(token_rep[option_int("string_lg_commentary_token_attendance", &lg_tokens)]);
g_free(token_rep[option_int("string_lg_commentary_token_league_cup_name", &lg_tokens)]);
g_free(token_rep[option_int("string_lg_commentary_token_cup_round_name", &lg_tokens)]);
g_free(token_rep[option_int("string_lg_commentary_token_yellow_limit", &lg_tokens)]);
g_free(token_rep[option_int("string_lg_commentary_token_team_layer0", &lg_tokens)]);
g_free(token_rep[option_int("string_lg_commentary_token_team_layer1", &lg_tokens)]);
g_free(token_rep);
}
/** Whether there was a commentary repetition rejection. */
gboolean repetition;
/** Generate commentary for the live game event in the unit.
@param unit The unit we comment.
@ -108,10 +51,18 @@ lg_commentary_generate(const LiveGame *live_game, LiveGameUnit *unit)
gint order[(*commentaries)->len];
lg_commentary_get_order(*commentaries, order);
repetition = FALSE;
for(i=0;i<(*commentaries)->len;i++)
{
if(lg_commentary_check_commentary(&g_array_index(*commentaries, LGCommentary, order[i]), buf))
break;
if(i == (*commentaries)->len)
{
repetition = TRUE;
for(i=0;i<(*commentaries)->len;i++)
if(lg_commentary_check_commentary(&g_array_index(*commentaries, LGCommentary, order[i]), buf))
break;
}
if(i == (*commentaries)->len)
@ -122,6 +73,8 @@ lg_commentary_generate(const LiveGame *live_game, LiveGameUnit *unit)
}
unit->event.commentary = g_string_new(buf);
unit->event.commentary_id = (i == (*commentaries)->len) ?
-1 : g_array_index(*commentaries, LGCommentary, order[i]).id;
for(i=0;i<lg_tokens.list->len;i++)
if(i != option_int("string_lg_commentary_token_team_home", &lg_tokens) &&
@ -143,23 +96,41 @@ lg_commentary_generate(const LiveGame *live_game, LiveGameUnit *unit)
gboolean
lg_commentary_check_commentary(const LGCommentary *commentary, gchar *dest)
{
if(commentary->condition != NULL &&
!lg_commentary_parse_condition(commentary->condition->str))
if((commentary->condition != NULL &&
!lg_commentary_parse_condition(commentary->condition->str)) ||
(repetition == FALSE && query_lg_commentary_is_repetition(commentary->id)))
return FALSE;
strcpy(dest, commentary->text->str);
if(lg_commentary_replace_tokens(dest))
{
lg_commentary_replace_expressions(dest);
if(lg_commentary_replace_tokens(dest))
return TRUE;
}
{
lg_commentary_replace_expressions(dest);
if(lg_commentary_replace_tokens(dest))
return TRUE;
}
return FALSE;
}
/** Check whether a commentary with given id has been used in the last
few commentaries. Return TRUE if so and FALSE otherwise. */
gboolean
query_lg_commentary_is_repetition(gint id)
{
const GArray *units = ((LiveGame*)statp)->units;
gint units_min = units->len - const_int("int_lg_commentary_check_backwards") - 1;
gint i, min = MAX(units_min, 0);
for(i=units->len - 2; i>= min; i--)
if(g_array_index(units, LiveGameUnit, i).event.commentary_id == id)
return TRUE;
return FALSE;
}
/** Replace simple arithmetic expressions like "1 + 2"
and comparisons like "3 < 4" with the appropriate result. */
void
@ -188,7 +159,9 @@ lg_commentary_replace_expressions(gchar *commentary_text)
if(query_misc_string_contains(buf2, "<") ||
query_misc_string_contains(buf2, ">") ||
query_misc_string_contains(buf2, "="))
query_misc_string_contains(buf2, "=") ||
query_misc_string_contains(buf2, " G ") ||
query_misc_string_contains(buf2, " L "))
misc_parse(buf2, &value);
else
misc_parse_expression(buf2, &value);
@ -312,7 +285,9 @@ lg_commentary_set_stats_tokens(const LiveGameStats *stats)
token_rep[option_int("string_lg_commentary_token_stat_shot_per0", &lg_tokens)] =
misc_int_to_char(stats->values[0][LIVE_GAME_STAT_VALUE_SHOT_PERCENTAGE]);
token_rep[option_int("string_lg_commentary_token_stat_poss0", &lg_tokens)] =
misc_int_to_char(stats->values[0][LIVE_GAME_STAT_VALUE_POSSESSION]);
misc_int_to_char((gint)rint(100 * ((gfloat)stats->values[0][LIVE_GAME_STAT_VALUE_POSSESSION] /
((gfloat)stats->values[0][LIVE_GAME_STAT_VALUE_POSSESSION] +
(gfloat)stats->values[1][LIVE_GAME_STAT_VALUE_POSSESSION]))));
token_rep[option_int("string_lg_commentary_token_stat_pen0", &lg_tokens)] =
misc_int_to_char(stats->values[0][LIVE_GAME_STAT_VALUE_PENALTIES]);
token_rep[option_int("string_lg_commentary_token_stat_fouls0", &lg_tokens)] =
@ -329,7 +304,9 @@ lg_commentary_set_stats_tokens(const LiveGameStats *stats)
token_rep[option_int("string_lg_commentary_token_stat_shot_per1", &lg_tokens)] =
misc_int_to_char(stats->values[1][LIVE_GAME_STAT_VALUE_SHOT_PERCENTAGE]);
token_rep[option_int("string_lg_commentary_token_stat_poss1", &lg_tokens)] =
misc_int_to_char(stats->values[1][LIVE_GAME_STAT_VALUE_POSSESSION]);
misc_int_to_char((gint)rint(100 * ((gfloat)stats->values[1][LIVE_GAME_STAT_VALUE_POSSESSION] /
((gfloat)stats->values[0][LIVE_GAME_STAT_VALUE_POSSESSION] +
(gfloat)stats->values[1][LIVE_GAME_STAT_VALUE_POSSESSION]))));
token_rep[option_int("string_lg_commentary_token_stat_pen1", &lg_tokens)] =
misc_int_to_char(stats->values[1][LIVE_GAME_STAT_VALUE_PENALTIES]);
token_rep[option_int("string_lg_commentary_token_stat_fouls1", &lg_tokens)] =
@ -547,6 +524,65 @@ lg_commentary_get_extra_data(const LiveGameUnit *unit, const Fixture *fix)
return g_strdup(buf);
}
/** Allocate memory for the token array and fill some tokens
at the beginning of the live game that don't change later. */
void
lg_commentary_initialize(const Fixture *fix)
{
gint i;
gchar buf[SMALL];
token_rep = (gchar**)g_malloc(sizeof(gchar*) * lg_tokens.list->len);
for(i=0;i<lg_tokens.list->len;i++)
token_rep[i] = NULL;
token_rep[option_int("string_lg_commentary_token_team_home", &lg_tokens)] =
g_strdup(fix->teams[0]->name->str);
token_rep[option_int("string_lg_commentary_token_team_away", &lg_tokens)] =
g_strdup(fix->teams[1]->name->str);
if(fix->teams[0]->clid < ID_CUP_START)
token_rep[option_int("string_lg_commentary_token_team_layer0", &lg_tokens)] =
misc_int_to_char(league_from_clid(fix->teams[0]->clid)->layer);
if(fix->teams[1]->clid < ID_CUP_START)
token_rep[option_int("string_lg_commentary_token_team_layer1", &lg_tokens)] =
misc_int_to_char(league_from_clid(fix->teams[1]->clid)->layer);
token_rep[option_int("string_lg_commentary_token_league_cup_name", &lg_tokens)] =
g_strdup(league_cup_get_name_string(fix->clid));
if(fix->clid >= ID_CUP_START)
{
cup_get_round_name(cup_from_clid(fix->clid), fix->round, buf);
token_rep[option_int("string_lg_commentary_token_cup_round_name", &lg_tokens)] =
g_strdup(buf);
}
misc_print_grouped_int(fix->attendance, buf);
token_rep[option_int("string_lg_commentary_token_attendance", &lg_tokens)] =
g_strdup(buf);
token_rep[option_int("string_lg_commentary_token_yellow_limit", &lg_tokens)] =
misc_int_to_char(league_cup_get_yellow_red(fix->clid));
}
/** Free the memory occupied by the tokens array and the permanent tokens. */
void
lg_commentary_post_match(void)
{
g_free(token_rep[option_int("string_lg_commentary_token_team_home", &lg_tokens)]);
g_free(token_rep[option_int("string_lg_commentary_token_team_away", &lg_tokens)]);
g_free(token_rep[option_int("string_lg_commentary_token_attendance", &lg_tokens)]);
g_free(token_rep[option_int("string_lg_commentary_token_league_cup_name", &lg_tokens)]);
g_free(token_rep[option_int("string_lg_commentary_token_cup_round_name", &lg_tokens)]);
g_free(token_rep[option_int("string_lg_commentary_token_yellow_limit", &lg_tokens)]);
g_free(token_rep[option_int("string_lg_commentary_token_team_layer0", &lg_tokens)]);
g_free(token_rep[option_int("string_lg_commentary_token_team_layer1", &lg_tokens)]);
g_free(token_rep);
}
/** Load the appropriate commentary file by evaluating
the language option. */
void

View File

@ -15,6 +15,9 @@ lg_commentary_initialize(const Fixture *fix);
gboolean
lg_commentary_check_commentary(const LGCommentary *commentary, gchar *dest);
gboolean
query_lg_commentary_is_repetition(gint id);
gboolean
lg_commentary_replace_tokens(gchar *commentary_text);

View File

@ -15,6 +15,9 @@ typedef struct
The higher the priority the higher the
probability that the commentary gets picked. */
gint priority;
/** An id to keep track of already used commentaries in the
live game (so as not to use the same one too frequently). */
gint id;
} LGCommentary;
#endif

View File

@ -538,6 +538,8 @@ live_game_event_scoring_chance(void)
}
else
{
last_unit.event.team = last_unit.possession;
if(uni(unis->len - 2).event.player != -1 &&
math_rnd(0, 1) < const_float("float_live_game_player_in_poss_shoots") &&
query_player_id_in_team(uni(unis->len - 2).event.player,
@ -741,10 +743,10 @@ live_game_event_general_get_players(void)
if(type == LIVE_GAME_EVENT_LOST_POSSESSION)
{
*pl1 = game_get_player(tm[last_unit.possession],
last_unit.area, 0, *pl1,
TRUE);
*pl2 = old_pl1;
*pl1 = game_get_player(tm[last_unit.possession],
last_unit.area, 0, *pl2,
TRUE);
}
else if(type != LIVE_GAME_EVENT_GENERAL)
{

View File

@ -132,7 +132,8 @@ typedef struct
gint team, player, player2;
/** The commentary for the event. */
GString *commentary;
/** Id of the commentary. */
gint commentary_id;
} LiveGameEvent;
/** A struct representing a fraction of a live game. */

View File

@ -134,6 +134,8 @@ misc2_callback_contract_offer(void)
gint value = 0;
Player *pl = (Player*)statp;
gtk_widget_set_sensitive(lookup_widget(window.contract, "button_contract_cancel"), FALSE);
for(i=0;i<4;i++)
{
sprintf(buf, "radiobutton_contract%d", i + 1);

View File

@ -214,12 +214,23 @@ on_button_contract_offer_clicked (GtkButton *button,
misc2_callback_contract_offer();
}
void
on_button_contract_cancel_clicked (GtkButton *button,
gpointer user_data)
{
window_destroy(&window.contract, FALSE);
}
gboolean
on_window_contract_delete_event (GtkWidget *widget,
GdkEvent *event,
gpointer user_data)
{
if(GTK_WIDGET_IS_SENSITIVE(lookup_widget(window.contract, "button_contract_cancel")))
window_destroy(&window.contract, FALSE);
return TRUE;
}
@ -451,4 +462,3 @@ on_button_transfer_later_clicked (GtkButton *button,
{
window_destroy(&window.transfer_dialog, FALSE);
}

View File

@ -150,3 +150,7 @@ void
on_button_transfer_later_clicked (GtkButton *button,
gpointer user_data);
#endif
void
on_button_contract_cancel_clicked (GtkButton *button,
gpointer user_data);

View File

@ -576,6 +576,7 @@ create_window_contract (void)
GtkWidget *hbox20;
GtkWidget *image10;
GtkWidget *label44;
GtkWidget *button_contract_cancel;
window_contract = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_container_set_border_width (GTK_CONTAINER (window_contract), 5);
@ -691,12 +692,19 @@ create_window_contract (void)
gtk_widget_show (label44);
gtk_box_pack_start (GTK_BOX (hbox20), label44, FALSE, FALSE, 0);
button_contract_cancel = gtk_button_new_from_stock ("gtk-cancel");
gtk_widget_show (button_contract_cancel);
gtk_box_pack_start (GTK_BOX (hbox19), button_contract_cancel, FALSE, FALSE, 0);
g_signal_connect ((gpointer) window_contract, "delete_event",
G_CALLBACK (on_window_contract_delete_event),
NULL);
g_signal_connect ((gpointer) button_contract_offer, "clicked",
G_CALLBACK (on_button_contract_offer_clicked),
NULL);
g_signal_connect ((gpointer) button_contract_cancel, "clicked",
G_CALLBACK (on_button_contract_cancel_clicked),
NULL);
/* Store pointers to all widgets, for use by lookup_widget(). */
GLADE_HOOKUP_OBJECT_NO_REF (window_contract, window_contract, "window_contract");
@ -719,6 +727,7 @@ create_window_contract (void)
GLADE_HOOKUP_OBJECT (window_contract, hbox20, "hbox20");
GLADE_HOOKUP_OBJECT (window_contract, image10, "image10");
GLADE_HOOKUP_OBJECT (window_contract, label44, "label44");
GLADE_HOOKUP_OBJECT (window_contract, button_contract_cancel, "button_contract_cancel");
return window_contract;
}

View File

@ -213,6 +213,7 @@ xml_lg_commentary_read_text (GMarkupParseContext *context,
commentary.text = g_string_new(buf);
commentary.condition = condition;
commentary.priority = MAX(1, priority);
commentary.id = lg_commentary_id_new;
g_array_append_val(lg_commentary[commentary_idx], commentary);
}
}

View File

@ -767,3 +767,7 @@ int_sponsor_without_weeks_upper 6
# to continue engagement if the team is completely
# unsuccessful
float_sponsor_continue_prob 1000
# how many live game units we check backwards to avoid
# having the same commentary text too often
int_lg_commentary_check_backwards 12

View File

@ -21,10 +21,11 @@
<commentary>Schöner Pass von _P1_ eröffnet den Raum vor _P0_</commentary>
<commentary>Guter Querpass auf die rechte Seite</commentary>
<commentary>Ein weiterer Flankenlauf</commentary>
<commentary cond="_MI_ > 18 and _POSS0_ > 58 or _POSS1_ > 58 and _GOALS[_POSS1_ > _POSS0_]_ = 0">_T[_POSS1_ G _POSS0_]_ beherrscht das Spiel, zeigt aber bislang brotlose Kunst</commentary>
<commentary cond="_MI_ > 18 and _POSS0_ > 58 or _POSS1_ > 58 and _GOALS[_POSS1_ > _POSS0_]_ > _GOALS[_POSS1_ L _POSS0_]_">_T[_POSS1_ > _POSS0_]_ beherrscht das Spiel klar</commentary>
<commentary cond="_MI_ > 18 and _POSS0_ > 58 or _POSS1_ > 58 and _GOALS[_POSS1_ > _POSS0_]_ = 0">_T[_POSS1_ G _POSS0_]_ ist eindeutig unterlegen, das _RE_ ist schmeichelhaft</commentary>
<commentary cond="_MI_ > 18 and _POSS0_ > 58 or _POSS1_ > 58 and _GOALS[_POSS1_ > _POSS0_]_ > _GOALS[_POSS1_ L _POSS0_]_ and _GD_ < 3">_T[_POSS1_ L _POSS0_]_ kann mit dem _RE_ noch zufrieden sein</commentary>
<commentary cond="_MI_ > 18 and _POSS[_POSS1_ > _POSS0_]_ > 58 and _GOALS[_POSS1_ > _POSS0_]_ = 0">_T[_POSS1_ G _POSS0_]_ beherrscht das Spiel, zeigt aber bislang brotlose Kunst</commentary>
<commentary cond="_MI_ > 18 and _POSS[_POSS1_ > _POSS0_]_ > 58 and _GOALS[_POSS1_ > _POSS0_]_ > _GOALS[_POSS1_ L _POSS0_]_">_T[_POSS1_ G _POSS0_]_ beherrscht das Spiel klar</commentary>
<commentary cond="_MI_ > 18 and _POSS[_POSS1_ > _POSS0_]_ > 58 and _GOALS[_POSS1_ > _POSS0_]_ > _GOALS[_POSS1_ L _POSS0_]_">_T[_POSS1_ G _POSS0_]_ ist überlegen</commentary>
<commentary cond="_MI_ > 18 and _POSS[_POSS1_ > _POSS0_]_ > 58 and _GD_ < 2">_T[_POSS1_ L _POSS0_]_ ist eindeutig unterlegen, das _RE_ ist schmeichelhaft</commentary>
<commentary cond="_MI_ > 18 and _POSS[_POSS1_ > _POSS0_]_ > 58 and _GOALS[_POSS1_ > _POSS0_]_ > _GOALS[_POSS1_ L _POSS0_]_ and _GD_ < 3">_T[_POSS1_ L _POSS0_]_ kann mit dem _RE_ noch zufrieden sein</commentary>
<commentary cond="_MT_ + _MI_ > 100 and _TIME_ = 1 and _MR_ < 15">Die Verlängerung ist greifbar nahe</commentary>
<commentary cond="_GD_ > 0 and _GD_ < 3 and _MT_ < 20">_TL_ sollte sich jetzt langsam mal anstrengen </commentary>
<commentary cond="_GD_ > 0 and _GD_ < 3 and _MT_ < 20">_TL_ sollte einen Zahn zulegen</commentary>
@ -46,16 +47,18 @@
<commentary cond="_GD_ > 2">_TW_ beherrscht _TL_ nach Belieben</commentary>
<commentary cond="_GD_ > 2">Keine Chance für _TL_ in diesem Spiel</commentary>
<commentary cond="_GD_ > 2 and _MT_ < 30">Das wird wohl nix mehr für_TL_</commentary>
<commentary cond="_G0_ + _G1_ > 2 and _MI_ < 20">Das könnte ein sehr torreiches Spiel werden heute</commentary>
<commentary cond="_GOALS0_ + _GOALS1_ > 2 and _MI_ < 20">Das könnte ein sehr torreiches Spiel werden heute</commentary>
<commentary cond="_GD_ = 1 and _MT_ < 10">_TL_ kann den Ausgleich noch schaffen</commentary>
<commentary cond="_REDS0_ = _REDS1_ and _TAVSKILLDIFF_ > 7 and _G[_TAVSKILL1_ > _TAVSKILL0_]_ < _G[_TAVSKILL1_ < _TAVSKILL0_]_">Was für eine Überraschung, das vermeintlich unterlegene Team führt</commentary>
<commentary cond="_REDS0_ = _REDS1_ and _TAVSKILLDIFF_ > 5 and _G[_TAVSKILL1_ > _TAVSKILL0_]_ > _G[_TAVSKILL1_ < _TAVSKILL0_]_">Der Favorit führt; so ein Spielverlauf war zu erwarten</commentary>
<commentary cond="_G0_ + _G1_ = 0 and _MI_ > 40 and _MI_ < 60">Nach _MI_ Minuten ist immer noch kein Tor gefallen</commentary>
<commentary cond="_G0_ + _G1_ = 0 and _MI_ > 70">Was für ein enttäuschendes Spiel, immer noch _RE_</commentary>
<commentary cond="_GOALS0_ + _GOALS1_ = 0 and _MI_ > 40 and _MI_ < 60">Nach _MI_ Minuten ist immer noch kein Tor gefallen</commentary>
<commentary cond="_GOALS0_ + _GOALS1_ = 0 and _MI_ > 70">Was für ein enttäuschendes Spiel, immer noch _RE_</commentary>
<commentary cond="_REDS0_ = _REDS1_ and _TAVSKILLDIFF_ > 7 and _G[_TAVSKILL1_ > _TAVSKILL0_]_ < _G[_TAVSKILL1_ < _TAVSKILL0_]_ and _MT_ < 15">_TW_ ist nur noch _MT_ Minuten von einer faustdicken Überraschung entfernt</commentary>
<commentary cond="_G0_ + _G1_ = 0 and _MT_ < 10">Also wirklich, wollen uns die beiden Teams wirklich mit einem _RE_ abspeisen?</commentary>
<commentary cond="_G0_ + _G1_ = 0 and _MT_ < 15">Jetzt sollte aber wirklich mal ein Tor her</commentary>
<commentary cond="_G0_ + _G1_ = 0 and _MT_ < 5">Nein, bitte nicht wieder so ein _RE_</commentary>
<commentary cond="_GOALS0_ + _GOALS1_ = 0 and _MT_ < 10">Also wirklich, wollen uns die beiden Teams wirklich mit einem _RE_ abspeisen?</commentary>
<commentary cond="_GOALS0_ + _GOALS1_ = 0 and _MT_ < 15">Jetzt sollte aber wirklich mal ein Tor her</commentary>
<commentary cond="_GOALS0_ + _GOALS1_ = 0 and _MT_ < 5">Nein, bitte nicht wieder so ein _RE_</commentary>
<commentary cond="_GOALS0_ + _GOALS1_ = 0 and _MT_ < 30">_MI_ Minuten gespielt und immer noch _RE_</commentary>
<commentary cond="_GOALS0_ + _GOALS1_ = 0 and _MT_ < 50">Ein mageres _RE_ nach _MI_ Minuten</commentary>
</event>
<event>
@ -200,8 +203,8 @@
<commentary>Verlängerung: jetzt geht's um Willenskraft und Entschlossenheit</commentary>
<commentary>Es steht immer noch _RE_: Verlängerung</commentary>
<commentary>Jetzt geht's um alles, die Verlängerung beginnt</commentary>
<commentary pri="5" cond="_G0_ + _GA_ > 4">Nach torreichen _MI_ Minuten steht noch kein Sieger fest</commentary>
<commentary pri="5" cond="_G0_ + _GA_ < 3">Nach einem schwachen Spiel erwartet uns die Verlängerung</commentary>
<commentary pri="5" cond="_GOALS0_ + _GA_ > 4">Nach torreichen _MI_ Minuten steht noch kein Sieger fest</commentary>
<commentary pri="5" cond="_GOALS0_ + _GA_ < 3">Nach einem schwachen Spiel erwartet uns die Verlängerung</commentary>
<commentary pri="5" cond="_POSS0_ > 58 or _POSS1_ > 58">Trotz _POSS[_POSS1_ G _POSS0_]_% Ballbesitz konnte _T[_POSS1_ G _POSS0_]_ das Spiel nicht in _MI_ Minuten klarmachen</commentary>
<commentary pri="5" cond="_SHOTS0_ != _SHOTS1_">Trotz _SHOTS[_SHOTS1_ G _SHOTS0_]_ Schüssen konnte _T[_SHOTS1_ G _SHOTS0_]_ den Sack heute nicht zumachen</commentary>
<commentary pri="5" cond="_TLAYER0_ != _TLAYER1_">So eine Überraschung, jetzt kommt's zur Verlängerung</commentary>
@ -232,9 +235,10 @@
<commentary pri="5" cond="_REDS0_ = _REDS1_ and _TAVSKILLDIFF_ > 5 and _TWN_ = [_TAVSKILL1_ > _TAVSKILL0_]">_TW_ gewinnt erwartungsgemäß</commentary>
<commentary pri="10" cond="_GD_ > 3 and _TLAYER_TWN__ >= _TLAYER_TLN__">Oje, was für eine Blamage für _TL_</commentary>
<commentary pri="5" cond="_GD_ = 1">Ein knapper Sieg für _TW_</commentary>
<commentary pri="5" cond="_GD_ = 1">Das Spiel endet mit einem hauchdünnen _RE_</commentary>
<commentary cond="_GD_ > 1">Ein letztlich ungefährdeter Sieg für _TW_</commentary>
<commentary pri="10" cond="_POSS0_ > 56 or _POSS1_ > 56 and _TWN_ = [_POSS1_ > _POSS0_]">Mit _POSS[_POSS1_ G _POSS0_]_% Ballbesitz hat _TW_ dieses Spiel beherrscht und gewinnt verdient</commentary>
<commentary pri="10" cond="_POSS0_ > 56 or _POSS1_ > 56 and _TLN_ = [_POSS1_ > _POSS0_]">_POSS[_POSS1_ G _POSS0_]_% Ballbesitz haben _TL_ nicht geholfen, sie verlieren _RE_</commentary>
<commentary pri="10" cond="_POSS[_POSS1_ > _POSS0_]_ > 56 and _TWN_ = [_POSS1_ > _POSS0_]">Mit _POSS[_POSS1_ G _POSS0_]_% Ballbesitz hat _TW_ dieses Spiel beherrscht und gewinnt verdient</commentary>
<commentary pri="10" cond="_POSS[_POSS1_ > _POSS0_]_ and _TLN_ = [_POSS1_ > _POSS0_]">_POSS[_POSS1_ G _POSS0_]_% Ballbesitz haben _TL_ nicht geholfen, sie verlieren _RE_</commentary>
<commentary pri="5" cond="_SHOTS0_ != _SHOTS1_ and _TWN_ = [_SHOTS1_ > _SHOTS0_]">_TW_ hat sich einfach mehr Chancen herausgearbeitet heute</commentary>
<commentary pri="5" cond="_SHOTS0_ != _SHOTS1_ and _TLN_ = [_SHOTS1_ > _SHOTS0_]">_TL_ hatte mehr Chancen, aber die Abschlussschwäche hat einen Sieg verhindert</commentary>
<commentary pri="5" cond="_GOALS1_ > _GOALS0_">Ein schöner Auswärtssieg für _TW_</commentary>
@ -242,6 +246,10 @@
<commentary pri="5" cond="_GOALS1_ < _GOALS0_">Ein Heimsieg für _TW_</commentary>
<commentary pri="5" cond="_GOALS1_ > _GOALS0_">_TW_ gewinnt auswärts</commentary>
<commentary pri="5" cond="_GOALS1_ < _GOALS0_">_TL_ verliert das Auswärtsspiel</commentary>
<commentary pri="10" cond="_GOALS0_ + _GOALS1_ = 0">_RE_, wie ärgerlich</commentary>
<commentary pri="10" cond="_GOALS0_ + _GOALS1_ = 0">Nach so einem _RE_ will man am liebsten sein Geld zurück</commentary>
<commentary pri="10" cond="_GOALS0_ + _GOALS1_ = 0">Das Spiel endet mit einem mageren _RE_ </commentary>
<commentary pri="10" cond="_GOALS0_ + _GOALS1_ = 0">Die Zuschauer sind eher unzufrieden mit dem _RE_</commentary>
</event>
<event>
@ -258,12 +266,12 @@
<commentary cond="_GD_ > 2">_TL_ wurde regelrecht auseinandergenommen in der ersten Hälfte</commentary>
<commentary cond="_GOALS0_ + _GOALS1_ = 1">In der zweiten Hälfte können schon ein paar Törchen mehr kommen</commentary>
<commentary cond="_GD_ = 0 and _GOALS1_ > 0">Ein enges Spiel in der ersten Hälfte</commentary>
<commentary cond="_SHOTS0_ > _SHOTS1_ + 3 or _SHOTS1_ > _SHOTS0_ + 3 and _TWN_ = [_SHOTS1_ > _SHOTS0_]">_TW_ beherrscht das Spiel und führt verdient _RE_ zur Halbzeit</commentary>
<commentary cond="_SHOTS0_ > _SHOTS1_ + 3 or _SHOTS1_ > _SHOTS0_ + 3 and _GD_ = 0">_T[_SHOTS1_ > _SHOTS0_]_ beherrscht das Spiel, kann aber nur ein _RE_ vorweisen bislang</commentary>
<commentary cond="_SHOTS0_ > _SHOTS1_ + 3 or _SHOTS1_ > _SHOTS0_ + 3 and _TWN_ = [_SHOTS1_ < _SHOTS0_]">_T[_SHOTS1_ > _SHOTS0_]_ beherrscht das Spiel, aber _TW_ nutzt seine Chancen einfach besser</commentary>
<commentary cond="_POSS0_ > 58 or _POSS1_ > 58 and _GD_ = 0">_T[_POSS1_ G _POSS0_]_ beherrscht das Spiel mit _POSS[_POSS1_ > _POSS0_]_ % Ballbesitz, dennoch steht es _RE_</commentary>
<commentary cond="_POSS0_ > 58 or _POSS1_ > 58 and [_POSS1_ > _POSS0_] = _TWN_ ">_TW_ beherrscht das Spiel klar und führt _RE_</commentary>
<commentary cond="_POSS0_ > 58 or _POSS1_ > 58 and [_POSS1_ > _POSS0_] = _TLN_ ">_TL_ hat nur _POSS[_POSS1_ L _POSS0_]_ % Ballbesitz, führt aber _RE_ zur Halbzeit</commentary>
<commentary cond="_SHOTS[_SHOTS1_ > _SHOTS0_]_ > _SHOTS[_SHOTS1_ < _SHOTS0_]_ + 3 and _TWN_ = [_SHOTS1_ > _SHOTS0_]">_TW_ beherrscht das Spiel und führt verdient _RE_ zur Halbzeit</commentary>
<commentary cond="_SHOTS[_SHOTS1_ > _SHOTS0_]_ > _SHOTS[_SHOTS1_ < _SHOTS0_]_ + 3 and _GD_ = 0">_T[_SHOTS1_ > _SHOTS0_]_ beherrscht das Spiel, kann aber nur ein _RE_ vorweisen bislang</commentary>
<commentary cond="_SHOTS[_SHOTS1_ > _SHOTS0_]_ > _SHOTS[_SHOTS1_ < _SHOTS0_]_ + 3 and _TWN_ = [_SHOTS1_ < _SHOTS0_]">_T[_SHOTS1_ > _SHOTS0_]_ beherrscht das Spiel, aber _TW_ nutzt seine Chancen einfach besser</commentary>
<commentary cond="_POSS[_POSS1_ > _POSS0_]_ > 58 and _GD_ = 0">_T[_POSS1_ G _POSS0_]_ beherrscht das Spiel mit _POSS[_POSS1_ > _POSS0_]_ % Ballbesitz, dennoch steht es _RE_</commentary>
<commentary cond="_POSS[_POSS1_ > _POSS0_]_ > 58 and [_POSS1_ > _POSS0_] = _TWN_ ">_TW_ beherrscht das Spiel klar und führt _RE_</commentary>
<commentary cond="_POSS[_POSS1_ > _POSS0_]_ > 58 and [_POSS1_ > _POSS0_] = _TLN_ ">_TW_ hat nur _POSS[_POSS1_ L _POSS0_]_ % Ballbesitz, führt aber _RE_ zur Halbzeit</commentary>
</event>
<event>
@ -335,25 +343,38 @@
<commentary>Freistoß: _P0_ schießt aus großer Entfernung</commentary>
<commentary>Freistoß: _P0_ schlenzt den Ball über die Mauer</commentary>
</event>
<event>
<name>lost_possession</name>
<commentary>_P1_ ersprintet den Ball aber _P0_ grätscht sauber</commentary>
<commentary>_P1_ ersprintet den Ball, aber _P0_ grätscht sauber</commentary>
<commentary>_P0_ nimmt _P1_ den Ball mit einer sauberen Grätsche ab</commentary>
<commentary>_P1_ kontrolliert den Ball schlecht, _P0_ kann ihn erobern</commentary>
<commentary>_P0_ erobert mit gutem Körpereinsatz den Ball</commentary>
<commentary>_P0_ erobert den Ball</commentary>
<commentary>_P1_ rutscht der Ball über den Spann, _P0_ bekommt ihn</commentary>
<commentary>_P1_ springt der Ball weg</commentary>
<commentary>_P1_ stoppt den Ball unsauber, er landet bei _P0_</commentary>
</event>
<event>
<name>own_goal</name>
<commentary>Rückpass von _P0_... oh nein, der Torwart verfehlt ihn! Eigentor!</commentary>
<commentary>Dieses Mißverständnis wurde mit einem Tor bezahlt</commentary>
<commentary>Oh nein, der Ball springt gegen _P0_ und ins Netz</commentary>
<commentary>Eigentor durch _P0_, es steht damit _RE_</commentary>
<commentary>Ein Billiardball im 5-Meterraum trifft _P0_ und rollt über die Linie</commentary>
<commentary cond="_GOALS[1 - _TT_]_ = _GOALS_TT__ - 1">Eigentor! _T[1 - _TT_]_ geht in Führung!</commentary>
<commentary cond="_GOALS[1 - _TT_]_ = _GOALS_TT__ + 1">Durch ein Eigentor von _P0_ geht _T[1 - _TT_]_ in Führung!</commentary>
<commentary cond="_GOALS[1 - _TT_]_ = _GOALS_TT__ - 1">_P0_ schießt ein Eigentor, _T[1 - _TT_]_ ist wieder dran!</commentary>
<commentary cond="_GOALS[1 - _TT_]_ < _GOALS_TT__ - 1">_P0_ schießt ein Eigentor, aber ob das _T[1 - _TT_]_ noch hilft?</commentary>
<commentary cond="_GD_ = 0">Das Eigentor von _P0_ bringt _T[1 - _TT_]_ den Ausgleich</commentary>
</event>
<event>
<name>scoring_chance</name>
<commentary>_P0_ schießt ins lange Eck</commentary>
<commentary>_P0_ lässt zwei Verteiger stehen und versetzt den Torwart</commentary>
<commentary>_P0_ verspringt der Ball aber er sein Schuss fliegt Richtung Tor </commentary>
<commentary>_P0_ verspringt der Ball aber, sein Schuss fliegt Richtung Tor </commentary>
<commentary>_P0_ zieht zur Mitte und schießt</commentary>
<commentary>_P1_ versucht es einfach aus 25 Metern</commentary>
<commentary>_P0_ dribbelt im 16er, dreht sich und schießt</commentary>
@ -364,47 +385,84 @@
<commentary>_P0_ dreht sich um die eigene Achse und schießt</commentary>
<commentary>Fallrückzieher von _P0_!</commentary>
<commentary>_P0_ nimmt Fahrt auf und schießt!</commentary>
<commentary cond="_GD_ = 0">_P0_ hat die Chance zum Führungstreffer</commentary>
<commentary cond="_GD_ > 0 and _GD_ < 3 and _TT_ = _TWN_">_P0_ kann die Führung ausbauen</commentary>
<commentary cond="_GD_ > 0 and _TT_ = _TWN_">_P0_ kann auf [_GOALS_TT__ + 1] : _GOALS[1 - _TT_]_ erhöhen</commentary>
<commentary cond="_GD_ = 1 and _TT_ = _TLN_">_P0_ hat den Ausgleich auf dem Fuß</commentary>
<commentary cond="_GD_ = 2 and _TT_ = _TLN_">_P0_ kann den Anschlusstreffer erzielen</commentary>
<commentary cond="_MT_ < 5">_P0_ hat vielleicht die letzte Chance des Spiels</commentary>
</event>
<event>
<name>temp_injury</name>
<commentary>_P0_ ist leicht angeschlagen, kann aber weitermachen</commentary>
<commentary>_P0_ hat eine Platzwunde, aber sie wird getackert und er kann weiterspielen</commentary>
<commentary>_P0_ hat einen Krampf, spielt weiter</commentary>
<commentary>Leichte Blessur bei _P0_</commentary>
<commentary>_P0_ humpelt etwas, macht aber weiter</commentary>
<commentary>_P0_ hält sich den Rücken, aber nach einer kurzen Pause spielt er weiter</commentary>
</event>
<event>
<name>injury</name>
<commentary>_P0_ scheint eine schwere Verletzung davongetragen zu haben</commentary>
<commentary>_P0_ ist verletzt</commentary>
<commentary>_P0_ muss ausgewechselt werden</commentary>
<commentary>_P0_ kann nicht weiterspielen, muss raus</commentary>
<commentary>_P0_ muss mit einer Verletzung raus</commentary>
<commentary>_P0_ wird wohl das Feld verlassen müssen, scheint eine Knöchelverletzung zu sein</commentary>
</event>
<event>
<name>penalty</name>
<commentary>_P0_ hat schon mal einen Elfer verschossen, hoffentlich trifft er diesmal</commentary>
<commentary>_P0_ darf an den Elfmeterpunkt</commentary>
<commentary>_P0_ schießt den Elfer</commentary>
<commentary>_P0_ versucht sich aus 11 Metern</commentary>
<commentary>_P0_ schnappt sich den Ball und schießt den Elfer</commentary>
<commentary>_P0_ übernimmt die Verantwortung und tritt den Elfmeter</commentary>
</event>
<event>
<name>substitution</name>
<commentary>_P1_ verlässt unter großem Applaus das Spielfeld, _P0_ ersetzt ihn</commentary>
<commentary>_T_TT__ wechselt aus, _P0_ kommt für _P1_</commentary>
<commentary>_P1_ wird vom Platz gebuht und durch _P0_ ersetzt</commentary>
<commentary>_P0_ ersetzt _P1_</commentary>
<commentary>_P0_ kommt für _P1_</commentary>
<commentary>_P1_ geht raus, _P0_ darf ran</commentary>
<commentary cond="_GOALS_TT__ = 0 and _INJ_TT__ = 0">_P1_ wird vom Platz gebuht und durch _P0_ ersetzt</commentary>
</event>
<event>
<name>send_off</name>
<commentary>_P0_ wurde vom Platz gestellt</commentary>
<commentary>_P0_ wird vorzeitig zum Duschen geschickt</commentary>
<commentary>Der Referee schickt _P0_ zum Duschen</commentary>
<commentary>Das Spiel ist vorbei für _P0_</commentary>
<commentary>Das reicht dem Referee, _P0_ muss raus</commentary>
<commentary>_P0_ muss vom Platz</commentary>
</event>
<event>
<name>boost_change</name>
<commentary>_T_TT__ hat den Boost auf _EX_ gestellt</commentary>
<commentary>_T_TT__ versucht es mit Boost _EX_</commentary>
<commentary>Boost ist jetzt _EX_ für _T_TT__</commentary>
</event>
<event>
<name>structure_change</name>
<commentary>_T_TT__ hat das System auf _EX_ umgestellt</commentary>
<commentary>_T_TT__ stellt um auf _EX_</commentary>
<commentary>_T_TT__ spielt ab sofort _EX_</commentary>
</event>
<event>
<name>style_change</name>
<commentary>_T_TT__ hat den Spielstil auf _EX_ umgestellt</commentary>
<commentary>_T_TT__s Stil ist _EX_ jetzt</commentary>
<commentary>_T_TT__s stellt auf _EX_ um</commentary>
<commentary>_T_TT__s probiert es mit _EX_</commentary>
</event>
</lg_commentary>