mirror of
https://github.com/tstellar/bygfoot.git
synced 2025-02-26 08:17:37 +01:00
"Commentary improvements."
This commit is contained in:
parent
6d2d7e5fcb
commit
e75c763ed0
File diff suppressed because one or more lines are too long
131
po/bygfoot.pot
131
po/bygfoot.pot
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2005-06-26 13:39+0200\n"
|
||||
"POT-Creation-Date: 2005-06-28 04:05+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"
|
||||
@ -71,7 +71,7 @@ msgid ""
|
||||
"player's value. Do you accept?"
|
||||
msgstr ""
|
||||
|
||||
#: src/callback_func.c:383 src/callbacks.c:533
|
||||
#: src/callback_func.c:383 src/callbacks.c:538
|
||||
msgid "Your offer has been removed."
|
||||
msgstr ""
|
||||
|
||||
@ -148,94 +148,99 @@ msgstr ""
|
||||
msgid "The current game state is unsaved and will be lost. Continue?"
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:146 src/callbacks.c:397
|
||||
#: src/callbacks.c:148 src/callbacks.c:402
|
||||
msgid "Transfers are disabled in this country definition."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:150
|
||||
#: src/callbacks.c:152
|
||||
msgid "Left click to make an offer. Right click to remove offer."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:157
|
||||
#: src/callbacks.c:153
|
||||
#, c-format
|
||||
msgid "Transfer deadline is Week %d"
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:162
|
||||
msgid "The transfer deadline is over."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:166 src/callbacks.c:561 src/callbacks.c:578
|
||||
#: src/callbacks.c:171 src/callbacks.c:566 src/callbacks.c:583
|
||||
msgid "You still have some transfer business to manage."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:170
|
||||
#: src/callbacks.c:175
|
||||
msgid "At least one user didn't take his turn this week. Continue?"
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:176
|
||||
#: src/callbacks.c:181
|
||||
msgid "There are injured or banned players in one of the user teams. Continue?"
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:381
|
||||
#: src/callbacks.c:386
|
||||
msgid "This is your first season."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:399 src/callbacks.c:415 src/callbacks.c:431
|
||||
#: src/callbacks.c:449 src/callbacks.c:794 src/callbacks.c:810
|
||||
#: src/callbacks.c:404 src/callbacks.c:420 src/callbacks.c:436
|
||||
#: src/callbacks.c:454 src/callbacks.c:799 src/callbacks.c:815
|
||||
msgid "You haven't selected a player."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:401
|
||||
#: src/callbacks.c:406
|
||||
msgid "The player is already on the list."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:417
|
||||
#: src/callbacks.c:422
|
||||
msgid "The player is not on the list."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:433
|
||||
#: src/callbacks.c:438
|
||||
msgid "Your team can't have less than 11 players."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:454
|
||||
#: src/callbacks.c:459
|
||||
msgid "Penalty/free kick shooter deselected."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:460
|
||||
#: src/callbacks.c:465
|
||||
#, c-format
|
||||
msgid "%s will shoot penalties and free kicks when he plays."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:535
|
||||
#: src/callbacks.c:540
|
||||
msgid "You haven't made an offer for the player."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:594
|
||||
#: src/callbacks.c:599
|
||||
msgid "Enter a structure. The digits must sum up to 10."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:595
|
||||
#: src/callbacks.c:600
|
||||
msgid "Structure"
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:628 src/callbacks.c:644
|
||||
#: src/callbacks.c:633 src/callbacks.c:649
|
||||
msgid "No match stored."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:722 src/game_gui.c:309
|
||||
#: src/callbacks.c:727 src/game_gui.c:309
|
||||
msgid "Boost ON is disabled in this country definition."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:744
|
||||
#: src/callbacks.c:749
|
||||
msgid "Finances are disabled in this country definition."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:749
|
||||
#: src/callbacks.c:754
|
||||
msgid ""
|
||||
"Left-click: get loan; Right-click: pay back; Middle click: stadium window."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:763
|
||||
#: src/callbacks.c:768
|
||||
msgid "Stadium management is disabled in this country definition."
|
||||
msgstr ""
|
||||
|
||||
#: src/callbacks.c:788
|
||||
#: src/callbacks.c:793
|
||||
msgid "Contracts are disabled in this country definition."
|
||||
msgstr ""
|
||||
|
||||
@ -324,7 +329,7 @@ msgstr ""
|
||||
msgid "Next week you'll fire him and hire a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/game_gui.c:530
|
||||
#: src/game_gui.c:548
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The team owners have fired you because of financial mismanagement. Luckily, "
|
||||
@ -332,7 +337,7 @@ msgid ""
|
||||
"some information on %s:"
|
||||
msgstr ""
|
||||
|
||||
#: src/game_gui.c:533
|
||||
#: src/game_gui.c:551
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The team owners have fired you because of unsuccessfulness. Luckily, the "
|
||||
@ -340,49 +345,49 @@ msgid ""
|
||||
"information on %s:"
|
||||
msgstr ""
|
||||
|
||||
#: src/game_gui.c:536
|
||||
#: src/game_gui.c:554
|
||||
#, c-format
|
||||
msgid ""
|
||||
"The owners of %s are deeply impressed by your success with %s and would like "
|
||||
"to hire you. Here's some information on %s:"
|
||||
msgstr ""
|
||||
|
||||
#: src/game_gui.c:539
|
||||
#: src/game_gui.c:557
|
||||
msgid "Accept?"
|
||||
msgstr ""
|
||||
|
||||
#: src/game_gui.c:541
|
||||
#: src/game_gui.c:559
|
||||
msgid " (NOTE: If you don't, the game is over for you.)"
|
||||
msgstr ""
|
||||
|
||||
#: src/game_gui.c:592
|
||||
#: src/game_gui.c:610
|
||||
#, c-format
|
||||
msgid "Job offers set to %s."
|
||||
msgstr ""
|
||||
|
||||
#: src/game_gui.c:599
|
||||
#: src/game_gui.c:617
|
||||
#, c-format
|
||||
msgid "Live game set to %s."
|
||||
msgstr ""
|
||||
|
||||
#: src/game_gui.c:606
|
||||
#: src/game_gui.c:624
|
||||
#, c-format
|
||||
msgid "Overwrite set to %s."
|
||||
msgstr ""
|
||||
|
||||
#: src/game_gui.c:626
|
||||
#: src/game_gui.c:644
|
||||
msgid ""
|
||||
"Bygfoot is a very intuitive and simple game, so there isn't a full-grown "
|
||||
"documentation. However, if you have trouble, there are a few places to go.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/game_gui.c:628
|
||||
#: src/game_gui.c:646
|
||||
msgid ""
|
||||
"At the Bygfoot forums you can report bugs, ask for help and discuss the game "
|
||||
"(you don't have to register):\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/game_gui.c:630
|
||||
#: src/game_gui.c:648
|
||||
msgid ""
|
||||
"\n"
|
||||
"If you feel you've found out something about the game that has to be shared, "
|
||||
@ -728,38 +733,38 @@ msgstr ""
|
||||
msgid "Next (W)"
|
||||
msgstr ""
|
||||
|
||||
#: src/lg_commentary.c:237 src/team.c:500
|
||||
#: src/lg_commentary.c:331 src/team.c:500
|
||||
msgid "ALL OUT DEFEND"
|
||||
msgstr ""
|
||||
|
||||
#: src/lg_commentary.c:240 src/team.c:502
|
||||
#: src/lg_commentary.c:334 src/team.c:502
|
||||
msgid "DEFEND"
|
||||
msgstr ""
|
||||
|
||||
#: src/lg_commentary.c:243 src/team.c:504
|
||||
#: src/lg_commentary.c:337 src/team.c:504
|
||||
msgid "BALANCED"
|
||||
msgstr ""
|
||||
|
||||
#: src/lg_commentary.c:246 src/team.c:506
|
||||
#: src/lg_commentary.c:340 src/team.c:506
|
||||
msgid "ATTACK"
|
||||
msgstr ""
|
||||
|
||||
#: src/lg_commentary.c:249 src/team.c:508
|
||||
#: src/lg_commentary.c:343 src/team.c:508
|
||||
msgid "ALL OUT ATTACK"
|
||||
msgstr ""
|
||||
|
||||
#. Boost value.
|
||||
#: src/lg_commentary.c:252 src/team.c:516
|
||||
#: src/lg_commentary.c:346 src/team.c:516
|
||||
msgid "ANTI"
|
||||
msgstr ""
|
||||
|
||||
#. Boost value.
|
||||
#: src/lg_commentary.c:255 src/team.c:519
|
||||
#: src/lg_commentary.c:349 src/team.c:519
|
||||
msgid "OFF"
|
||||
msgstr ""
|
||||
|
||||
#. Boost value.
|
||||
#: src/lg_commentary.c:258 src/team.c:522
|
||||
#: src/lg_commentary.c:352 src/team.c:522
|
||||
msgid "ON"
|
||||
msgstr ""
|
||||
|
||||
@ -767,71 +772,71 @@ msgstr ""
|
||||
msgid "Saving options/constants..."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:59
|
||||
#: src/load_save.c:61
|
||||
msgid "Saving leagues..."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:70
|
||||
#: src/load_save.c:72
|
||||
msgid "Saving cups..."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:81
|
||||
#: src/load_save.c:83
|
||||
msgid "Saving users..."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:91
|
||||
#: src/load_save.c:93
|
||||
msgid "Saving transfer list..."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:101
|
||||
#: src/load_save.c:103
|
||||
msgid "Saving season stats..."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:111
|
||||
#: src/load_save.c:113
|
||||
msgid "Saving miscellaneous..."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:118
|
||||
#: src/load_save.c:120
|
||||
msgid "Compressing savegame..."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:126 src/load_save.c:257
|
||||
#: src/load_save.c:128 src/load_save.c:261
|
||||
msgid "Done."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:168
|
||||
#: src/load_save.c:170
|
||||
msgid "Last save file not found."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:176
|
||||
#: src/load_save.c:178
|
||||
msgid "Uncompressing savegame..."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:186
|
||||
#: src/load_save.c:188
|
||||
msgid "Loading options/constants..."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:200
|
||||
#: src/load_save.c:204
|
||||
msgid "Loading leagues..."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:210
|
||||
#: src/load_save.c:214
|
||||
msgid "Loading cups..."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:220
|
||||
#: src/load_save.c:224
|
||||
msgid "Loading users..."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:230
|
||||
#: src/load_save.c:234
|
||||
msgid "Loading transfer list..."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:240
|
||||
#: src/load_save.c:244
|
||||
msgid "Loading season stats..."
|
||||
msgstr ""
|
||||
|
||||
#: src/load_save.c:250
|
||||
#: src/load_save.c:254
|
||||
msgid "Loading miscellaneous..."
|
||||
msgstr ""
|
||||
|
||||
@ -2600,12 +2605,12 @@ msgstr ""
|
||||
msgid "Sponsorship offers"
|
||||
msgstr ""
|
||||
|
||||
#: src/xml.c:90
|
||||
#: src/xml.c:80
|
||||
#, c-format
|
||||
msgid "Loading league: %s"
|
||||
msgstr ""
|
||||
|
||||
#: src/xml.c:150
|
||||
#: src/xml.c:140
|
||||
#, c-format
|
||||
msgid "Loading cup: %s"
|
||||
msgstr ""
|
||||
|
@ -142,12 +142,17 @@ void
|
||||
on_button_transfers_clicked (GtkButton *button,
|
||||
gpointer user_data)
|
||||
{
|
||||
gchar buf[SMALL];
|
||||
|
||||
if(sett_int("int_opt_disable_transfers"))
|
||||
game_gui_print_message(_("Transfers are disabled in this country definition."));
|
||||
else if(week < transfer_get_deadline())
|
||||
{
|
||||
stat0 = STATUS_SHOW_TRANSFER_LIST;
|
||||
game_gui_print_message(_("Left click to make an offer. Right click to remove offer."));
|
||||
sprintf(buf, _("Transfer deadline is Week %d"), transfer_get_deadline());
|
||||
printf("buf %s \n", buf);
|
||||
game_gui_print_message_with_delay(buf);
|
||||
treeview_show_transfer_list(GTK_TREE_VIEW(lookup_widget(window.main, "treeview_right")));
|
||||
gtk_notebook_set_current_page(GTK_NOTEBOOK(lookup_widget(window.main, "notebook_player")), 1);
|
||||
|
||||
|
@ -282,7 +282,7 @@ cup_load_choose_team(Cup *cup, GPtrArray *teams, const CupChooseTeam *ct)
|
||||
if(ct->number_of_teams != -1 &&
|
||||
number_of_teams != ct->number_of_teams)
|
||||
{
|
||||
g_warning("cup_load_choose_team (+): not enough teams (that don't participate in international cups yet) found in chooseteam %s for cup %s (%d specified, %d found) cup group %d.\n ",
|
||||
g_warning("cup_load_choose_team (1): not enough teams (that don't participate in international cups yet) found in chooseteam %s for cup %s (%d specified, %d found) cup group %d.\n ",
|
||||
ct->sid->str, cup->name->str, ct->number_of_teams, number_of_teams, cup->group);
|
||||
main_exit_program(EXIT_CHOOSE_TEAM_ERROR, NULL);
|
||||
}
|
||||
@ -321,7 +321,7 @@ cup_load_choose_team(Cup *cup, GPtrArray *teams, const CupChooseTeam *ct)
|
||||
|
||||
if(number_of_teams != ct->number_of_teams)
|
||||
{
|
||||
g_warning("cup_load_choose_team (*): not enough teams found in league 0 for chooseteam %s (%d; required: %d) in cup %s (group %d)\n",
|
||||
g_warning("cup_load_choose_team (2): not enough teams found in league 0 for chooseteam %s (%d; required: %d) in cup %s (group %d)\n",
|
||||
ct->sid->str, number_of_teams, ct->number_of_teams, cup->name->str, cup->group);
|
||||
main_exit_program(EXIT_CHOOSE_TEAM_ERROR, NULL);
|
||||
}
|
||||
@ -360,7 +360,7 @@ cup_load_choose_team(Cup *cup, GPtrArray *teams, const CupChooseTeam *ct)
|
||||
if(ct->number_of_teams != -1 &&
|
||||
number_of_teams != ct->number_of_teams)
|
||||
{
|
||||
g_warning("cup_load_choose_team(*): not enough teams (that don't participate in international cups yet) found in chooseteam %s for cup %s (%d specified, %d found) cup group %d.\n ",
|
||||
g_warning("cup_load_choose_team(3): not enough teams (that don't participate in international cups yet) found in chooseteam %s for cup %s (%d specified, %d found) cup group %d.\n ",
|
||||
ct->sid->str, cup->name->str, ct->number_of_teams, number_of_teams, cup->group);
|
||||
main_exit_program(EXIT_CHOOSE_TEAM_ERROR, NULL);
|
||||
}
|
||||
|
@ -451,6 +451,7 @@ file_load_conf_files(void)
|
||||
|
||||
file_load_opt_file(opt_str("string_opt_constants_file"), &constants);
|
||||
file_load_opt_file(opt_str("string_opt_appearance_file"), &constants_app);
|
||||
file_load_opt_file("bygfoot_lg_tokens", &lg_tokens);
|
||||
}
|
||||
|
||||
/** Load a user-specific conf file.
|
||||
|
@ -456,6 +456,7 @@ free_variables(void)
|
||||
free_option_list(&settings, FALSE);
|
||||
free_option_list(&constants, FALSE);
|
||||
free_option_list(&constants_app, FALSE);
|
||||
free_option_list(&lg_tokens, FALSE);
|
||||
|
||||
for(i=0;i<LIVE_GAME_EVENT_END;i++)
|
||||
free_g_string_array(&lg_commentary[i]);
|
||||
|
@ -366,16 +366,34 @@ game_gui_show_main(void)
|
||||
}
|
||||
|
||||
/** Print a message into the main window entry. */
|
||||
void
|
||||
gboolean
|
||||
game_gui_print_message(gchar *text)
|
||||
{
|
||||
gtk_entry_set_text(GTK_ENTRY(lookup_widget(window.main, "entry_message")), text);
|
||||
|
||||
if(g_str_has_prefix(text, "___"))
|
||||
{
|
||||
gtk_entry_set_text(GTK_ENTRY(lookup_widget(window.main, "entry_message")), text + 3);
|
||||
g_free(text);
|
||||
}
|
||||
else
|
||||
gtk_entry_set_text(GTK_ENTRY(lookup_widget(window.main, "entry_message")), text);
|
||||
|
||||
if(timeout_id != -1)
|
||||
g_source_remove(timeout_id);
|
||||
|
||||
timeout_id = g_timeout_add(const_int("int_game_gui_message_duration") * 1000,
|
||||
(GSourceFunc)game_gui_clear_entry_message, NULL);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/** Print a message after some seconds of delay. */
|
||||
void
|
||||
game_gui_print_message_with_delay(gchar *text)
|
||||
{
|
||||
gchar *local_text = g_strdup_printf("___%s", text);
|
||||
|
||||
g_timeout_add(const_int("int_game_gui_message_delay") * 1000,
|
||||
(GSourceFunc)game_gui_print_message, local_text);
|
||||
}
|
||||
|
||||
/** Function that gets called from time to time. */
|
||||
|
@ -25,9 +25,12 @@ void
|
||||
game_gui_get_radio_items(GtkWidget **style, GtkWidget **scout,
|
||||
GtkWidget **physio, GtkWidget **boost);
|
||||
|
||||
void
|
||||
gboolean
|
||||
game_gui_print_message(gchar *text);
|
||||
|
||||
void
|
||||
game_gui_print_message_with_delay(gchar *text);
|
||||
|
||||
void
|
||||
game_gui_read_radio_items(GtkWidget *widget);
|
||||
|
||||
|
@ -17,13 +17,13 @@
|
||||
void
|
||||
lg_commentary_generate(LiveGameUnit *unit, const Fixture *fix)
|
||||
{
|
||||
gchar *strings[LG_TOKEN_END][2];
|
||||
gchar buf[SMALL];
|
||||
GPtrArray **commentaries = NULL;
|
||||
GPtrArray *strings = g_ptr_array_new();
|
||||
gint i;
|
||||
|
||||
lg_commentary_set_strings(strings, unit, fix);
|
||||
|
||||
|
||||
if(unit->event.type == LIVE_GAME_EVENT_STYLE_CHANGE_ALL_OUT_DEFEND ||
|
||||
unit->event.type == LIVE_GAME_EVENT_STYLE_CHANGE_DEFEND ||
|
||||
unit->event.type == LIVE_GAME_EVENT_STYLE_CHANGE_BALANCED ||
|
||||
@ -55,8 +55,10 @@ lg_commentary_generate(LiveGameUnit *unit, const Fixture *fix)
|
||||
|
||||
unit->event.commentary = g_string_new(buf);
|
||||
|
||||
for(i=LG_TOKEN_ATTENDANCE;i<LG_TOKEN_END;i++)
|
||||
g_free(strings[i][1]);
|
||||
for(i=0;i<lg_tokens.list->len;i++)
|
||||
g_free(g_ptr_array_index(strings, i));
|
||||
|
||||
g_ptr_array_free(strings, TRUE);
|
||||
}
|
||||
|
||||
/** Try to replace all special tokens in the string and write the result to dest.
|
||||
@ -65,79 +67,167 @@ lg_commentary_generate(LiveGameUnit *unit, const Fixture *fix)
|
||||
@param dest The destination string.
|
||||
@return TRUE if we could replace all tokens, FALSE otherwise. */
|
||||
gboolean
|
||||
lg_commentary_replace_tokens(const gchar *string, gchar *strings[][2], gchar *dest)
|
||||
lg_commentary_replace_tokens(const gchar *string, const GPtrArray *strings, gchar *dest)
|
||||
{
|
||||
gint i;
|
||||
gboolean condition;
|
||||
gchar buf[SMALL];
|
||||
const gchar *buf2 = NULL;
|
||||
|
||||
strcpy(buf, string);
|
||||
|
||||
strcpy(dest, string);
|
||||
|
||||
for(i=0;i<LG_TOKEN_END;i++)
|
||||
for(i=0;i<lg_tokens.list->len;i++)
|
||||
{
|
||||
if(query_misc_string_contains(dest, strings[i][0]))
|
||||
if(query_misc_string_contains(buf, g_array_index(lg_tokens.list, Option, i).string_value->str))
|
||||
{
|
||||
if(strings[i][1] == NULL)
|
||||
if(g_ptr_array_index(strings, i) == NULL)
|
||||
return FALSE;
|
||||
else
|
||||
misc_string_replace_token(dest, strings[i][0], strings[i][1]);
|
||||
misc_string_replace_token(buf,
|
||||
g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
(gchar*)g_ptr_array_index(strings, i));
|
||||
}
|
||||
}
|
||||
|
||||
misc_replace_sums(buf);
|
||||
|
||||
if(buf[0] == '#')
|
||||
{
|
||||
buf2 = misc_parse(buf + 1, &condition);
|
||||
strcpy(dest, buf2);
|
||||
|
||||
return condition;
|
||||
}
|
||||
else
|
||||
strcpy(dest, buf);
|
||||
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/** Get the strings corresponding to the commentary tokens. */
|
||||
void
|
||||
lg_commentary_set_strings(gchar *strings[][2], const LiveGameUnit *unit, const Fixture *fix)
|
||||
lg_commentary_set_strings(GPtrArray *strings, const LiveGameUnit *unit, const Fixture *fix)
|
||||
{
|
||||
gint i, tmp_int = 1;
|
||||
gchar buf[SMALL];
|
||||
|
||||
strings[LG_TOKEN_TEAM_HOME][0] = const_str("string_lg_commentary_token_team_home");
|
||||
strings[LG_TOKEN_TEAM_HOME][1] = fix->teams[0]->name->str;
|
||||
|
||||
strings[LG_TOKEN_TEAM_AWAY][0] = const_str("string_lg_commentary_token_team_away");
|
||||
strings[LG_TOKEN_TEAM_AWAY][1] = fix->teams[1]->name->str;
|
||||
|
||||
strings[LG_TOKEN_TEAM_IN_POSS][0] = const_str("string_lg_commentary_token_team_in_poss");
|
||||
strings[LG_TOKEN_TEAM_IN_POSS][1] = fix->teams[unit->possession]->name->str;
|
||||
|
||||
|
||||
strings[LG_TOKEN_TEAM_NOT_IN_POSS][0] = const_str("string_lg_commentary_token_team_not_in_poss");
|
||||
strings[LG_TOKEN_TEAM_NOT_IN_POSS][1] = fix->teams[!unit->possession]->name->str;
|
||||
|
||||
strings[LG_TOKEN_TEAM_LOSING][0] = const_str("string_lg_commentary_token_team_losing");
|
||||
strings[LG_TOKEN_TEAM_LOSING][1] = (unit->result[0] == unit->result[1]) ? NULL :
|
||||
fix->teams[(unit->result[0] > unit->result[1])]->name->str;
|
||||
|
||||
strings[LG_TOKEN_TEAM_WINNING][0] = const_str("string_lg_commentary_token_team_winning");
|
||||
strings[LG_TOKEN_TEAM_WINNING][1] = (unit->result[0] == unit->result[1]) ? NULL :
|
||||
fix->teams[(unit->result[0] < unit->result[1])]->name->str;
|
||||
|
||||
strings[LG_TOKEN_TEAM][0] = const_str("string_lg_commentary_token_team");
|
||||
strings[LG_TOKEN_TEAM][1] = (unit->event.team == -1) ?
|
||||
NULL : fix->teams[unit->event.team]->name->str;
|
||||
|
||||
strings[LG_TOKEN_PLAYER1][0] = const_str("string_lg_commentary_token_player1");
|
||||
strings[LG_TOKEN_PLAYER1][1] = (unit->event.player == -1) ?
|
||||
NULL : lg_commentary_get_player_name(unit, fix, FALSE);
|
||||
|
||||
strings[LG_TOKEN_PLAYER2][0] = const_str("string_lg_commentary_token_player2");
|
||||
strings[LG_TOKEN_PLAYER2][1] = (unit->event.player2 == -1) ?
|
||||
NULL : lg_commentary_get_player_name(unit, fix, TRUE);
|
||||
|
||||
strings[LG_TOKEN_ATTENDANCE][0] = const_str("string_lg_commentary_token_attendance");
|
||||
misc_print_grouped_int(fix->attendance, buf, FALSE);
|
||||
strings[LG_TOKEN_ATTENDANCE][1] = g_strdup(buf);
|
||||
|
||||
strings[LG_TOKEN_RESULT][0] = const_str("string_lg_commentary_token_result");
|
||||
sprintf(buf, "%d : %d", unit->result[0], unit->result[1]);
|
||||
strings[LG_TOKEN_RESULT][1] = g_strdup(buf);
|
||||
|
||||
strings[LG_TOKEN_MINUTE][0] = const_str("string_lg_commentary_token_minute");
|
||||
sprintf(buf, "%d", live_game_unit_get_minute(unit));
|
||||
strings[LG_TOKEN_MINUTE][1] = g_strdup(buf);
|
||||
|
||||
strings[LG_TOKEN_EXTRA][0] = const_str("string_lg_commentary_token_extra");
|
||||
strings[LG_TOKEN_EXTRA][1] = lg_commentary_get_extra_data(unit, fix);
|
||||
for(i=0;i<lg_tokens.list->len;i++)
|
||||
{
|
||||
if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_team_home")) == 0)
|
||||
g_ptr_array_add(strings, g_strdup(fix->teams[0]->name->str));
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_team_away")) == 0)
|
||||
g_ptr_array_add(strings, g_strdup(fix->teams[1]->name->str));
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_team_in_poss")) == 0)
|
||||
g_ptr_array_add(strings, g_strdup(fix->teams[unit->possession]->name->str));
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_team_not_in_poss")) == 0)
|
||||
g_ptr_array_add(strings, g_strdup(fix->teams[!unit->possession]->name->str));
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_team_losing")) == 0)
|
||||
{
|
||||
if(unit->result[0] == unit->result[1])
|
||||
g_ptr_array_add(strings, NULL);
|
||||
else
|
||||
g_ptr_array_add(strings, g_strdup(fix->teams[(unit->result[0] > unit->result[1])]->name->str));
|
||||
}
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_team_winning")) == 0)
|
||||
{
|
||||
if(unit->result[0] == unit->result[1])
|
||||
g_ptr_array_add(strings, NULL);
|
||||
else
|
||||
g_ptr_array_add(strings, g_strdup(fix->teams[(unit->result[0] < unit->result[1])]->name->str));
|
||||
}
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_team")) == 0)
|
||||
{
|
||||
if(unit->event.team == -1)
|
||||
g_ptr_array_add(strings, NULL);
|
||||
else
|
||||
g_ptr_array_add(strings, g_strdup(fix->teams[unit->event.team]->name->str));
|
||||
}
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_player1")) == 0)
|
||||
g_ptr_array_add(strings, lg_commentary_get_player_name(unit, fix, FALSE));
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_player2")) == 0)
|
||||
g_ptr_array_add(strings, lg_commentary_get_player_name(unit, fix, TRUE));
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_attendance")) == 0)
|
||||
{
|
||||
misc_print_grouped_int(fix->attendance, buf, FALSE);
|
||||
g_ptr_array_add(strings, g_strdup(buf));
|
||||
}
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_time")) == 0)
|
||||
{
|
||||
sprintf(buf, "%d", unit->time);
|
||||
g_ptr_array_add(strings, g_strdup(buf));
|
||||
}
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_minute")) == 0)
|
||||
{
|
||||
sprintf(buf, "%d", live_game_unit_get_minute(unit));
|
||||
g_ptr_array_add(strings, g_strdup(buf));
|
||||
}
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_minute_remaining")) == 0)
|
||||
{
|
||||
if(unit->time == LIVE_GAME_UNIT_TIME_EXTRA_TIME)
|
||||
tmp_int = 120 - live_game_unit_get_minute(unit);
|
||||
else if(unit->time == LIVE_GAME_UNIT_TIME_SECOND_HALF)
|
||||
tmp_int = 90 - live_game_unit_get_minute(unit);
|
||||
else if(unit->time == LIVE_GAME_UNIT_TIME_FIRST_HALF)
|
||||
tmp_int = 45 - live_game_unit_get_minute(unit);
|
||||
|
||||
if(unit->time == LIVE_GAME_UNIT_TIME_PENALTIES ||
|
||||
tmp_int <= 0)
|
||||
g_ptr_array_add(strings, NULL);
|
||||
else
|
||||
{
|
||||
sprintf(buf, "%d", tmp_int);
|
||||
g_ptr_array_add(strings, g_strdup(buf));
|
||||
}
|
||||
}
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_result")) == 0)
|
||||
{
|
||||
sprintf(buf, "%d : %d", unit->result[0], unit->result[1]);
|
||||
g_ptr_array_add(strings, g_strdup(buf));
|
||||
}
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_goals_home")) == 0)
|
||||
{
|
||||
sprintf(buf, "%d", unit->result[0]);
|
||||
g_ptr_array_add(strings, g_strdup(buf));
|
||||
}
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_goals_away")) == 0)
|
||||
{
|
||||
sprintf(buf, "%d", unit->result[1]);
|
||||
g_ptr_array_add(strings, g_strdup(buf));
|
||||
}
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_goal_diff")) == 0)
|
||||
{
|
||||
sprintf(buf, "%d", ABS(unit->result[0] - unit->result[1]));
|
||||
g_ptr_array_add(strings, strdup(buf));
|
||||
}
|
||||
else if(strcmp(g_array_index(lg_tokens.list, Option, i).string_value->str,
|
||||
lg_token("string_lg_commentary_token_extra")) == 0)
|
||||
g_ptr_array_add(strings, lg_commentary_get_extra_data(unit, fix));
|
||||
else
|
||||
{
|
||||
g_warning("lg_commentary_set_strings: no rule found for token %s.",
|
||||
g_array_index(lg_tokens.list, Option, i).string_value->str);
|
||||
main_exit_program(EXIT_GENERAL, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Return the name of a player involved in the unit (or NULL).
|
||||
@ -147,6 +237,10 @@ lg_commentary_get_player_name(const LiveGameUnit *unit, const Fixture *fix, gboo
|
||||
{
|
||||
gchar *return_value = NULL;
|
||||
|
||||
if((player2 && unit->event.player2 == -1) ||
|
||||
(!player2 && unit->event.player == -1))
|
||||
return NULL;
|
||||
|
||||
if(unit->event.type == LIVE_GAME_EVENT_GENERAL)
|
||||
return_value = (player2) ?
|
||||
player_get_last_name(player_of_id_team(fix->teams[unit->possession],
|
||||
|
@ -20,15 +20,23 @@ enum LGTokens
|
||||
LG_TOKEN_PLAYER2,
|
||||
LG_TOKEN_RESULT,
|
||||
LG_TOKEN_MINUTE,
|
||||
LG_TOKEN_GOALS_HOME,
|
||||
LG_TOKEN_GOALS_AWAY,
|
||||
LG_TOKEN_GOAL_DIFF,
|
||||
LG_TOKEN_EXTRA,
|
||||
LG_TOKEN_END
|
||||
};
|
||||
|
||||
#define lg_token(name) option_string(name, &lg_tokens)
|
||||
|
||||
gchar*
|
||||
lg_commentary_get_player_name(const LiveGameUnit *unit, const Fixture *fix, gint player);
|
||||
|
||||
gboolean
|
||||
lg_commentary_replace_tokens(const gchar *string, const GPtrArray *strings, gchar *dest);
|
||||
|
||||
void
|
||||
lg_commentary_set_strings(gchar *strings[][2], const LiveGameUnit *unit, const Fixture *fix);
|
||||
lg_commentary_set_strings(GPtrArray *strings, const LiveGameUnit *unit, const Fixture *fix);
|
||||
|
||||
void
|
||||
lg_commentary_generate(LiveGameUnit *unit, const Fixture *fix);
|
||||
@ -36,9 +44,6 @@ lg_commentary_generate(LiveGameUnit *unit, const Fixture *fix);
|
||||
gchar*
|
||||
lg_commentary_get_extra_data(const LiveGameUnit *unit, const Fixture *fix);
|
||||
|
||||
gboolean
|
||||
lg_commentary_replace_tokens(const gchar *string, gchar *strings[][2], gchar *dest);
|
||||
|
||||
void
|
||||
lg_commentary_load_commentary_file_from_option(void);
|
||||
|
||||
|
@ -49,6 +49,8 @@ load_save_save_game(const gchar *filename)
|
||||
file_save_opt_file(buf, &options);
|
||||
sprintf(buf, "%s___constants", prefix);
|
||||
file_save_opt_file(buf, &constants);
|
||||
sprintf(buf, "%s___settings", prefix);
|
||||
file_save_opt_file(buf, &settings);
|
||||
|
||||
if(debug > 60)
|
||||
printf("load_save_save leagues \n");
|
||||
@ -189,6 +191,8 @@ load_save_load_game(const gchar* filename)
|
||||
file_load_opt_file(buf, &options);
|
||||
sprintf(buf, "%s___constants", prefix);
|
||||
file_load_opt_file(buf, &constants);
|
||||
sprintf(buf, "%s___settings", prefix);
|
||||
file_load_opt_file(buf, &settings);
|
||||
language_set(language_get_code_index(opt_str("string_opt_language_code")) + 1);
|
||||
|
||||
if(debug > 60)
|
||||
|
@ -55,9 +55,9 @@ main_init_variables(void)
|
||||
save_file = g_string_new("");
|
||||
|
||||
constants_app.list = settings.list =
|
||||
constants.list = options.list = NULL;
|
||||
constants.list = options.list = lg_tokens.list = NULL;
|
||||
constants_app.datalist = settings.datalist =
|
||||
constants.datalist = options.datalist = NULL;
|
||||
constants.datalist = options.datalist = lg_tokens.datalist = NULL;
|
||||
|
||||
popups_active = 0;
|
||||
selected_row[0] = selected_row[1] = -1;
|
||||
|
213
src/misc.c
213
src/misc.c
@ -221,33 +221,11 @@ misc_float_compare(gfloat first, gfloat second)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Remove some of the first or last characters from src and copy
|
||||
the rest to dest; no error-checking is done. */
|
||||
void
|
||||
misc_truncate_string(const gchar *src, gchar *dest, gint number_of_chars)
|
||||
{
|
||||
gint i;
|
||||
gint num = ABS(number_of_chars);
|
||||
|
||||
if(number_of_chars >= 0)
|
||||
{
|
||||
strncpy(dest, src, strlen(src) - num);
|
||||
dest[strlen(src) - num] = '\0';
|
||||
return;
|
||||
}
|
||||
|
||||
for(i=0;i<strlen(src);i++)
|
||||
if(i >= num)
|
||||
dest[i - num] = src[i];
|
||||
|
||||
dest[i - num] = '\0';
|
||||
}
|
||||
|
||||
/** Find out whether the first string contains the second string. */
|
||||
gboolean
|
||||
query_misc_string_contains(const gchar *string, const gchar *text)
|
||||
{
|
||||
gint i, j;
|
||||
gint i;
|
||||
gint lens = strlen(string),
|
||||
lent = strlen(text);
|
||||
|
||||
@ -258,14 +236,8 @@ query_misc_string_contains(const gchar *string, const gchar *text)
|
||||
return (strcmp(text, string) == 0);
|
||||
|
||||
for(i=0;i<lens - lent + 1;i++)
|
||||
{
|
||||
for(j=0;j<lent;j++)
|
||||
if(string[i + j] != text[j])
|
||||
break;
|
||||
|
||||
if(j == lent)
|
||||
if(g_str_has_prefix(string + i, text))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@ -289,34 +261,49 @@ query_misc_string_in_array(const gchar *string, GPtrArray *array)
|
||||
void
|
||||
misc_string_replace_token(gchar *string, const gchar *token, const gchar *replacement)
|
||||
{
|
||||
gint i, j;
|
||||
gchar buf[SMALL], buf2[SMALL], rest[SMALL];
|
||||
|
||||
for(i=strlen(string); i >= strlen(token); i--)
|
||||
gint i;
|
||||
gchar buf[SMALL], buf2[SMALL];
|
||||
|
||||
if(strlen(string) < strlen(token))
|
||||
return;
|
||||
|
||||
for(i=0;i<strlen(string) - strlen(token) + 1;i++)
|
||||
{
|
||||
strcpy(buf, "");
|
||||
strcpy(buf2, "");
|
||||
strcpy(rest, "");
|
||||
|
||||
strncpy(buf, string, i);
|
||||
buf[i] = '\0';
|
||||
|
||||
for(j=i;j<strlen(string);j++)
|
||||
rest[j - i] = string[j];
|
||||
rest[j - i] = '\0';
|
||||
|
||||
if(g_str_has_suffix(buf, token))
|
||||
if(g_str_has_prefix(string + i, token))
|
||||
{
|
||||
strncpy(buf2, buf, strlen(buf) - strlen(token));
|
||||
buf2[strlen(buf) - strlen(token)] = '\0';
|
||||
strcat(buf2, replacement);
|
||||
|
||||
sprintf(string, "%s%s", buf2, rest);
|
||||
strcpy(buf2, string + i + strlen(token));
|
||||
strncpy(buf, string, i);
|
||||
buf[i] = '\0';
|
||||
sprintf(string, "%s%s%s", buf, replacement, buf2);
|
||||
misc_string_replace_token(string, token, replacement);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Replace sums of the form [1 + 2 - 3] in the string. */
|
||||
void
|
||||
misc_replace_sums(gchar *string)
|
||||
{
|
||||
gint i, result = -1;
|
||||
gchar buf[SMALL], buf2[SMALL];
|
||||
const gchar *buf_return = NULL;
|
||||
|
||||
strcpy(buf, string);
|
||||
|
||||
for(i=0;i<strlen(buf);i++)
|
||||
if(buf[i] == '[')
|
||||
{
|
||||
strncpy(buf2, buf, i);
|
||||
buf2[i] = '\0';
|
||||
buf_return = misc_parse_expression(buf + i + 1, &result);
|
||||
sprintf(string, "%s%d%s", buf2, result, buf_return + 1);
|
||||
|
||||
misc_replace_sums(string);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** Get a float representation of someone's age
|
||||
based on his birth year and month. */
|
||||
gfloat
|
||||
@ -330,3 +317,127 @@ misc_get_age_from_birth(gint birth_year, gint birth_month)
|
||||
|
||||
return (gfloat)g_date_days_between(birth_date, current_date) / 365.25;
|
||||
}
|
||||
|
||||
/* skip spaces */
|
||||
const gchar*
|
||||
misc_skip_spaces(const gchar* s)
|
||||
{
|
||||
while (g_ascii_isspace(*s)) s++;
|
||||
return s;
|
||||
}
|
||||
|
||||
/* read number, skip all leading and trailing spaces */
|
||||
const gchar*
|
||||
misc_parse_value(const gchar *s, gint *value)
|
||||
{
|
||||
s = misc_skip_spaces(s);
|
||||
*value = 0;
|
||||
while (g_ascii_isdigit(*s)) {
|
||||
*value = *value * 10 + (*s - '0');
|
||||
s++;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
/* parse numeric expression (supports + and -) */
|
||||
const gchar*
|
||||
misc_parse_expression(const gchar *s, gboolean *result)
|
||||
{
|
||||
gint value = 0;
|
||||
s = misc_parse_value(s, &value);
|
||||
*result = value;
|
||||
gint loop = 1;
|
||||
while (loop) {
|
||||
s = misc_skip_spaces(s);
|
||||
switch(*s) {
|
||||
case '+':
|
||||
s = misc_parse_value(s+1, &value);
|
||||
*result += value;
|
||||
break;
|
||||
case '-':
|
||||
s = misc_parse_value(s+1, &value);
|
||||
*result -= value;
|
||||
break;
|
||||
default:
|
||||
loop = 0;
|
||||
}
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
/* parse comparison (supports '<', '>' and '=') */
|
||||
const gchar*
|
||||
misc_parse_comparison(const gchar *s, gboolean *result)
|
||||
{
|
||||
gint value = 0;
|
||||
s = misc_parse_expression(s, result);
|
||||
s = misc_skip_spaces(s);
|
||||
switch(*s) {
|
||||
case '<':
|
||||
if (*(s+1) == '=')
|
||||
{
|
||||
s = misc_parse_expression(s+2, &value);
|
||||
*result = *result <= value;
|
||||
}
|
||||
else
|
||||
{
|
||||
s = misc_parse_expression(s+1, &value);
|
||||
*result = *result < value;
|
||||
}
|
||||
break;
|
||||
case '=':
|
||||
s = misc_parse_expression(s+1, &value);
|
||||
*result = *result == value;
|
||||
break;
|
||||
case '>':
|
||||
if (*(s+1) == '=')
|
||||
{
|
||||
s = misc_parse_expression(s+2, &value);
|
||||
*result = *result >= value;
|
||||
}
|
||||
else
|
||||
{
|
||||
s = misc_parse_expression(s+1, &value);
|
||||
*result = *result > value;
|
||||
}
|
||||
break;
|
||||
case '!':
|
||||
if(*(s + 1) == '=')
|
||||
{
|
||||
s = misc_parse_expression(s+2, &value);
|
||||
*result = *result != value;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
const gchar*
|
||||
misc_parse_and(const gchar *s, gboolean *result)
|
||||
{
|
||||
gint value = 0;
|
||||
s = misc_parse_comparison(s, result);
|
||||
s = misc_skip_spaces(s);
|
||||
while (*s == 'a' && *(s+1) == 'n' && *(s+2) == 'd') {
|
||||
s = misc_parse_comparison(s + 3, &value);
|
||||
*result = *result && value;
|
||||
s = misc_skip_spaces(s);
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
const gchar*
|
||||
misc_parse(const gchar *s, gboolean *result)
|
||||
{
|
||||
gint value = 0;
|
||||
s = misc_parse_and(s, result);
|
||||
s = misc_skip_spaces(s);
|
||||
while (*s == 'o' && *(s+1) == 'r') {
|
||||
s = misc_parse_and(s + 2, &value);
|
||||
*result = *result || value;
|
||||
s = misc_skip_spaces(s);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
|
21
src/misc.h
21
src/misc.h
@ -45,7 +45,28 @@ query_misc_integer_is_in_g_array(gint item, GArray *array);
|
||||
void
|
||||
misc_string_replace_token(gchar *string, const gchar *token, const gchar *replacement);
|
||||
|
||||
void
|
||||
misc_replace_sums(gchar *string);
|
||||
|
||||
gfloat
|
||||
misc_get_age_from_birth(gint birth_year, gint birth_month);
|
||||
|
||||
const gchar*
|
||||
misc_skip_spaces(const gchar* s);
|
||||
|
||||
const gchar*
|
||||
misc_parse_value(const gchar *s, gint *value);
|
||||
|
||||
const gchar*
|
||||
misc_parse_expression(const gchar *s, gboolean *result);
|
||||
|
||||
const gchar*
|
||||
misc_parse_comparison(const gchar *s, gboolean *result);
|
||||
|
||||
const gchar*
|
||||
misc_parse_and(const gchar *s, gboolean *result);
|
||||
|
||||
const gchar*
|
||||
misc_parse(const gchar *s, gboolean *result);
|
||||
|
||||
#endif
|
||||
|
@ -31,6 +31,8 @@ OptionList constants;
|
||||
OptionList constants_app;
|
||||
/** Array with internal settings. */
|
||||
OptionList settings;
|
||||
/* Array holding live game tokens. */
|
||||
OptionList lg_tokens;
|
||||
|
||||
/** The array containing the live game commentary strings. */
|
||||
GPtrArray *lg_commentary[LIVE_GAME_EVENT_END];
|
||||
|
10
src/xml.c
10
src/xml.c
@ -21,16 +21,6 @@
|
||||
#include "xml_loadsave_transfers.h"
|
||||
#include "xml_loadsave_users.h"
|
||||
|
||||
gint
|
||||
xml_get_tag_from_name(const gchar *element_name)
|
||||
{
|
||||
gchar buf[SMALL];
|
||||
|
||||
misc_truncate_string(element_name, buf, -1);
|
||||
|
||||
return (gint)g_ascii_strtod(buf, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
xml_load_users(const gchar *dirname, const gchar *basename)
|
||||
{
|
||||
|
@ -50,6 +50,8 @@ enum XmlTags
|
||||
|
||||
#define xml_write_float(fil, value, tag, indent) fprintf(fil, "%s<_%d>%d</_%d>\n", indent, tag, (gint)rint(value * 10000), tag)
|
||||
|
||||
#define xml_get_tag_from_name(name) (gint)g_ascii_strtod(name + 1, NULL)
|
||||
|
||||
void
|
||||
xml_load_users(const gchar *dirname, const gchar *basename);
|
||||
|
||||
@ -65,9 +67,6 @@ xml_load_cups(const gchar *dirname, const gchar *basename);
|
||||
void
|
||||
xml_load_cup(Cup *cup, const gchar *dirname, const gchar *basename, const GPtrArray *dir_contents);
|
||||
|
||||
gint
|
||||
xml_get_tag_from_name(const gchar *element_name);
|
||||
|
||||
void
|
||||
xml_load_transfers(const gchar *dirname, const gchar *basename);
|
||||
|
||||
|
@ -53,6 +53,7 @@ enum XmlLgCommentaryStates
|
||||
};
|
||||
|
||||
gint state, commentary_idx;
|
||||
gchar condition[SMALL];
|
||||
|
||||
/**
|
||||
* The function called by the parser when an opening tag is read.
|
||||
@ -73,7 +74,13 @@ xml_lg_commentary_read_start_element (GMarkupParseContext *context,
|
||||
else if(strcmp(element_name, TAG_EVENT_NAME) == 0)
|
||||
state = STATE_EVENT_NAME;
|
||||
else if(strcmp(element_name, TAG_EVENT_COMMENTARY) == 0)
|
||||
{
|
||||
state = STATE_EVENT_COMMENTARY;
|
||||
if(attribute_names[0] != NULL)
|
||||
sprintf(condition, "#%s", attribute_values[0]);
|
||||
else
|
||||
strcpy(condition, "");
|
||||
}
|
||||
else if(strcmp(element_name, TAG_LG_COMMENTARY) != 0)
|
||||
g_warning("xml_lg_commentary_read_start_element: unknown tag: %s; I'm in state %d\n",
|
||||
element_name, state);
|
||||
@ -114,14 +121,11 @@ xml_lg_commentary_read_text (GMarkupParseContext *context,
|
||||
GError **error)
|
||||
{
|
||||
gchar buf[text_len + 1];
|
||||
gint int_value;
|
||||
GString *commentary = NULL;
|
||||
|
||||
strncpy(buf, text, text_len);
|
||||
buf[text_len] = '\0';
|
||||
|
||||
int_value = (gint)g_ascii_strtod(buf, NULL);
|
||||
|
||||
if(state == STATE_EVENT_NAME)
|
||||
{
|
||||
if(strcmp(buf, EVENT_NAME_GENERAL) == 0)
|
||||
@ -191,7 +195,8 @@ xml_lg_commentary_read_text (GMarkupParseContext *context,
|
||||
}
|
||||
else if(state == STATE_EVENT_COMMENTARY)
|
||||
{
|
||||
commentary = g_string_new(buf);
|
||||
commentary = g_string_new("");
|
||||
g_string_printf(commentary, "%s%s", condition, buf);
|
||||
g_ptr_array_add(lg_commentary[commentary_idx], commentary);
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,8 @@ string_save_suffix .zip
|
||||
|
||||
# number of seconds until messages disappear
|
||||
int_game_gui_message_duration 5
|
||||
# number of seconds to delay for delayed messages
|
||||
int_game_gui_message_delay 3
|
||||
|
||||
# base values for stadium improvement: 500 seats and 5%
|
||||
int_stadium_improvement_base_seats 500
|
||||
@ -349,21 +351,6 @@ float_season_end_user_champ_addition 100
|
||||
int_team_new_bound_upper 10
|
||||
int_team_new_bound_lower 20
|
||||
|
||||
# tokens in the live game commentary
|
||||
string_lg_commentary_token_team_home _TH_
|
||||
string_lg_commentary_token_team_away _TA_
|
||||
string_lg_commentary_token_team_in_poss _TP_
|
||||
string_lg_commentary_token_team_not_in_poss _TN_
|
||||
string_lg_commentary_token_team_losing _TL_
|
||||
string_lg_commentary_token_team_winning _TW_
|
||||
string_lg_commentary_token_team _TT_
|
||||
string_lg_commentary_token_player1 _P1_
|
||||
string_lg_commentary_token_player2 _P2_
|
||||
string_lg_commentary_token_attendance _AT_
|
||||
string_lg_commentary_token_result _RE_
|
||||
string_lg_commentary_token_minute _MI_
|
||||
string_lg_commentary_token_extra _EX_
|
||||
_
|
||||
# base probability that the ball gets from defending area
|
||||
# to midfield area.
|
||||
float_live_game_area_def_mid 5000
|
||||
|
@ -5,7 +5,7 @@
|
||||
<symbol>flag_belgium.png</symbol>
|
||||
<first_week>1</first_week>
|
||||
<week_gap>1</week_gap>
|
||||
<average_skill>8000</average_skill>
|
||||
<average_skill>6500</average_skill>
|
||||
<yellow_red>3</yellow_red>
|
||||
<names_file>belgium</names_file>
|
||||
|
||||
@ -64,14 +64,14 @@
|
||||
<team>
|
||||
<team_name>Sint-Truiden</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Oostende</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Brussel</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Bergen</team_name>
|
||||
<team_name>Zulte-Waregem</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Roeselare</team_name>
|
||||
</team>
|
||||
</teams>
|
||||
</league>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<symbol>flag_belgium.png</symbol>
|
||||
<first_week>1</first_week>
|
||||
<week_gap>1</week_gap>
|
||||
<average_skill>7000</average_skill>
|
||||
<average_skill>5000</average_skill>
|
||||
<yellow_red>3</yellow_red>
|
||||
<names_file>belgium</names_file>
|
||||
|
||||
@ -32,7 +32,7 @@
|
||||
|
||||
<teams>
|
||||
<team>
|
||||
<team_name>Zulte Waregem</team_name>
|
||||
<team_name>Oostende</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Geel</team_name>
|
||||
@ -44,7 +44,7 @@
|
||||
<team_name>Ronse</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Roeselare</team_name>
|
||||
<team_name>Bergen</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Antwerpen</team_name>
|
||||
@ -65,7 +65,7 @@
|
||||
<team_name>Deinze</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Maasmechelen</team_name>
|
||||
<team_name>Overpelt-Lommel</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Hamme</team_name>
|
||||
@ -80,10 +80,10 @@
|
||||
<team_name>Eupen</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Aalst</team_name>
|
||||
<team_name>Leuven</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Wezet</team_name>
|
||||
<team_name>Mechelen</team_name>
|
||||
</team>
|
||||
</teams>
|
||||
</league>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<symbol>flag_belgium.png</symbol>
|
||||
<first_week>1</first_week>
|
||||
<week_gap>1</week_gap>
|
||||
<average_skill>6000</average_skill>
|
||||
<average_skill>4000</average_skill>
|
||||
<yellow_red>3</yellow_red>
|
||||
<layer>3</layer>
|
||||
<names_file>belgium</names_file>
|
||||
@ -32,10 +32,10 @@
|
||||
<team_name>Cappellen</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>K. Mechelen</team_name>
|
||||
<team_name>Boom</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Denderhoutem</team_name>
|
||||
<team_name>Willebroek</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Turnhout</team_name>
|
||||
@ -56,7 +56,7 @@
|
||||
<team_name>Wetteren</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Harelbeke</team_name>
|
||||
<team_name>Diegem</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Waregem</team_name>
|
||||
@ -68,13 +68,13 @@
|
||||
<team_name>Bornem</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Wevelgem</team_name>
|
||||
<team_name>Woluwe</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Lier II</team_name>
|
||||
<team_name>Aalst</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Evergem</team_name>
|
||||
<team_name>West</team_name>
|
||||
</team>
|
||||
</teams>
|
||||
</league>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<symbol>flag_belgium.png</symbol>
|
||||
<first_week>1</first_week>
|
||||
<week_gap>1</week_gap>
|
||||
<average_skill>6000</average_skill>
|
||||
<average_skill>4000</average_skill>
|
||||
<yellow_red>3</yellow_red>
|
||||
<layer>3</layer>
|
||||
<names_file>belgium</names_file>
|
||||
@ -29,10 +29,10 @@
|
||||
|
||||
<teams>
|
||||
<team>
|
||||
<team_name>Overpelt Lommel</team_name>
|
||||
<team_name>Couillet</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Leuven</team_name>
|
||||
<team_name>Doornik</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Tongeren</team_name>
|
||||
@ -41,13 +41,13 @@
|
||||
<team_name>Sprimont</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Woluwe</team_name>
|
||||
<team_name>Montegnée</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Walhain</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Diegem</team_name>
|
||||
<team_name>Verviers</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>La Calamine</team_name>
|
||||
@ -68,13 +68,13 @@
|
||||
<team_name>Namen</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Veldwezelt</team_name>
|
||||
<team_name>Wezet</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Seraing</team_name>
|
||||
<team_name>Leopoldsburg</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>F.B. boussu</team_name>
|
||||
<team_name>F.B. Boussu</team_name>
|
||||
</team>
|
||||
</teams>
|
||||
</league>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<symbol>flag_belgium.png</symbol>
|
||||
<first_week>1</first_week>
|
||||
<week_gap>1</week_gap>
|
||||
<average_skill>5000</average_skill>
|
||||
<average_skill>3500</average_skill>
|
||||
<yellow_red>3</yellow_red>
|
||||
<layer>4</layer>
|
||||
<names_file>belgium</names_file>
|
||||
@ -23,10 +23,10 @@
|
||||
|
||||
<teams>
|
||||
<team>
|
||||
<team_name>Doornik</team_name>
|
||||
<team_name>V. Oostende</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Gistel</team_name>
|
||||
<team_name>Eine</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Zottegem</team_name>
|
||||
@ -53,22 +53,22 @@
|
||||
<team_name>Lauwe</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>L. Aalst</team_name>
|
||||
<team_name>Evergem</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Sint-Eloois-Winkel</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Eernegem</team_name>
|
||||
<team_name>Oostnieuwkerke</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Wielsbeke</team_name>
|
||||
<team_name>Rumbeke</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Lovendegem</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Ursel</team_name>
|
||||
<team_name>Wevelgem</team_name>
|
||||
</team>
|
||||
</teams>
|
||||
</league>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<symbol>flag_belgium.png</symbol>
|
||||
<first_week>1</first_week>
|
||||
<week_gap>1</week_gap>
|
||||
<average_skill>5000</average_skill>
|
||||
<average_skill>3500</average_skill>
|
||||
<yellow_red>3</yellow_red>
|
||||
<layer>4</layer>
|
||||
<names_file>belgium</names_file>
|
||||
@ -22,53 +22,53 @@
|
||||
</prom_rel>
|
||||
|
||||
<teams>
|
||||
<team>
|
||||
<team_name>Willebroek</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Boom</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Londerzeel</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Lebbeke</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Hoogstraten</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Berchem</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Meldert</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Dilbeek</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Opstal</team_name>
|
||||
<team_name>Grimbergen</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Kampenhout</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Kontich</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Lebbeke</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>S. Lebeke</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Londerzeel</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Meldert</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Opstal</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Opwijk</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Verrewinkel</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Schoten</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Temse</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Vorst</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Wilrijk</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>ZL Rijkevorsel</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>S. Lebbeke</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Jette</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Hoboken</team_name>
|
||||
</team>
|
||||
</teams>
|
||||
</league>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<symbol>flag_belgium.png</symbol>
|
||||
<first_week>1</first_week>
|
||||
<week_gap>1</week_gap>
|
||||
<average_skill>5000</average_skill>
|
||||
<average_skill>3500</average_skill>
|
||||
<yellow_red>3</yellow_red>
|
||||
<layer>4</layer>
|
||||
<names_file>belgium</names_file>
|
||||
@ -23,7 +23,40 @@
|
||||
|
||||
<teams>
|
||||
<team>
|
||||
<team_name>Mol</team_name>
|
||||
<team_name>Aarschot</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Mol-Wezel</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>ZL Rijkevorsel</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Olen</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Meerhout</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Hoogstraten</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Bree</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Heist</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Maasmechelen</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Veltwezelt</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Tessenderlo</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Lichtaart</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Millen</team_name>
|
||||
@ -31,44 +64,11 @@
|
||||
<team>
|
||||
<team_name>Spouwen Mopertingen</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Heist</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Olen</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Leopoldsburg</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Bree</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Grimbergen</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Aarschot</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Kampenhout</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Meerhout</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Diest</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Overijse</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Vilvoorde</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Berkenbos</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>V. Maasmechelen</team_name>
|
||||
<team_name>Lier II</team_name>
|
||||
</team>
|
||||
</teams>
|
||||
</league>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<symbol>flag_belgium.png</symbol>
|
||||
<first_week>1</first_week>
|
||||
<week_gap>1</week_gap>
|
||||
<average_skill>5000</average_skill>
|
||||
<average_skill>3500</average_skill>
|
||||
<yellow_red>3</yellow_red>
|
||||
<layer>4</layer>
|
||||
<names_file>belgium</names_file>
|
||||
@ -23,52 +23,52 @@
|
||||
|
||||
<teams>
|
||||
<team>
|
||||
<team_name>Verviers</team_name>
|
||||
<team_name>Luik</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Montegnée</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Couillet</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Hoei</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Couvin</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Aarlen</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Seilles</team_name>
|
||||
<team_name>Seraing</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Spa</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Bas-Oha</team_name>
|
||||
<team_name>Huy</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Meux</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>C. Luik</team_name>
|
||||
<team_name>Malmundaria</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Hannuit</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Seilles</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Ciney</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Bas-Oha</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Hamoir</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Spy</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Bertrige</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Fleurus</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Arlon</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Bleid</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Bercheux</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Melen-Micheroux</team_name>
|
||||
</team>
|
||||
<team>
|
||||
<team_name>Tamines</team_name>
|
||||
<team_name>Couvin</team_name>
|
||||
</team>
|
||||
</teams>
|
||||
</league>
|
||||
|
@ -232,11 +232,14 @@
|
||||
<name>foul_red</name>
|
||||
<commentary>_P2_ für eine Blutgrätsche</commentary>
|
||||
<commentary>_P2_ für absichtliches Handspiel</commentary>
|
||||
<commentary>_P1_ wurde vom Platz gestellt</commentary>
|
||||
<commentary>_P2_ sieht die rote Karte</commentary>
|
||||
<commentary>_P2_ wird wegen wiederholtem Meckern vom Platz gestellt</commentary>
|
||||
<commentary>_P2_ wird nach einer Notbremse zum Duschen geschickt</commentary>
|
||||
</event>
|
||||
<event>
|
||||
<name>send_off</name>
|
||||
<commentary>_P1_ wurde vom Platz gestellt</commentary>
|
||||
</event>
|
||||
<event>
|
||||
<name>boost_change</name>
|
||||
<commentary>_TT_ hat den Boost auf _EX_ gestellt</commentary>
|
||||
|
Loading…
x
Reference in New Issue
Block a user