diff --git a/src/bygfoot.h b/src/bygfoot.h
index 8a471c17..22bd0d6d 100644
--- a/src/bygfoot.h
+++ b/src/bygfoot.h
@@ -40,7 +40,7 @@
/**
* Program version number and year (copyright).
*/
-#define VERS "2.3.0"
+#define VERS "2.3.1"
#define YEAR "2005 - 2008"
/** Home dir name */
diff --git a/src/news.c b/src/news.c
index 319892fb..55cf1fd8 100644
--- a/src/news.c
+++ b/src/news.c
@@ -109,6 +109,7 @@ news_select(const GArray *news_array, gchar *title, gchar *subtitle,
gint i;
const NewsArticle *article;
gint order_articles[news_array->len];
+ gint to_check;
news_articles_get_order(news_array, order_articles);
@@ -136,13 +137,31 @@ news_select(const GArray *news_array, gchar *title, gchar *subtitle,
news_titles_get_order(article->titles, order_titles);
news_titles_get_order(article->subtitles, order_subtitles);
- *title_id = news_get_title(article->titles, title, order_titles, TRUE, FALSE);
+ *title_id = news_get_title(article->titles, title, order_titles, TRUE, FALSE,
+ const_int("int_news_repetition_max_check_number"));
if(*title_id == -1)
- *title_id = news_get_title(article->titles, title, order_titles, TRUE, TRUE);
+ for(to_check = const_int("int_news_repetition_max_check_number") - 1;
+ to_check >= const_int("int_news_repetition_min_check_number");
+ to_check--)
+ {
+ *title_id = news_get_title(article->titles, title, order_titles, TRUE,
+ (to_check == const_int("int_news_repetition_min_check_number")), to_check);
+ if(*title_id == -1)
+ break;
+ }
- *subtitle_id = news_get_title(article->subtitles, subtitle, order_subtitles, FALSE, FALSE);
+ *subtitle_id = news_get_title(article->subtitles, subtitle, order_subtitles, FALSE, FALSE,
+ const_int("int_news_repetition_max_check_number"));
if(*subtitle_id == -1)
- *subtitle_id = news_get_title(article->subtitles, subtitle, order_subtitles, FALSE, TRUE);
+ for(to_check = const_int("int_news_repetition_max_check_number") - 1;
+ to_check >= const_int("int_news_repetition_min_check_number");
+ to_check--)
+ {
+ *subtitle_id = news_get_title(article->subtitles, subtitle, order_subtitles, FALSE,
+ (to_check == const_int("int_news_repetition_min_check_number")), to_check);
+ if(*subtitle_id == -1)
+ break;
+ }
return;
}
@@ -150,7 +169,7 @@ news_select(const GArray *news_array, gchar *title, gchar *subtitle,
/** Try to find a news article title with valid tokens. */
gint
news_get_title(const GArray *titles, gchar *title, gint *order,
- gboolean is_title, gboolean ignore_repetition)
+ gboolean is_title, gboolean ignore_repetition, gint to_check)
{
#ifdef DEBUG
printf("news_get_title\n");
@@ -165,8 +184,8 @@ news_get_title(const GArray *titles, gchar *title, gint *order,
misc_string_replace_all_tokens(token_rep_news, g_array_index(titles, NewsText, order[i]).text, title))
{
result = g_array_index(titles, NewsText, order[i]).id;
- if(ignore_repetition || !news_check_title_for_repetition(result, is_title))
- return result;
+ if(ignore_repetition || !news_check_title_for_repetition(result, is_title, to_check))
+ return result;
else
continue;
}
@@ -177,7 +196,7 @@ news_get_title(const GArray *titles, gchar *title, gint *order,
/** Check whether a news article text has occurred in the paper recently. */
gboolean
-news_check_title_for_repetition(gint id, gboolean is_title)
+news_check_title_for_repetition(gint id, gboolean is_title, gint to_check)
{
#ifdef DEBUG
printf("news_check_title_for_repetition\n");
@@ -186,8 +205,8 @@ news_check_title_for_repetition(gint id, gboolean is_title)
gint i;
gint end;
- end = (newspaper.articles->len < const_int("int_news_repetition_check_number")) ?
- 0 : newspaper.articles->len - const_int("int_news_repetition_check_number");
+ end = (newspaper.articles->len < to_check) ?
+ 0 : newspaper.articles->len - to_check;
for(i = newspaper.articles->len - 1; i >= end; i--)
if((is_title && g_array_index(newspaper.articles, NewsPaperArticle, i).title_id == id) ||
@@ -208,8 +227,8 @@ news_check_article_for_repetition(gint id)
gint i;
gint end;
- end = (newspaper.articles->len < const_int("int_news_repetition_check_number")) ?
- 0 : newspaper.articles->len - const_int("int_news_repetition_check_number");
+ end = (newspaper.articles->len < const_int("int_news_repetition_max_check_number")) ?
+ 0 : newspaper.articles->len - const_int("int_news_repetition_max_check_number");
for(i = newspaper.articles->len - 1; i >= end; i--)
if(g_array_index(newspaper.articles, NewsPaperArticle, i).id == id)
@@ -614,7 +633,7 @@ news_set_fixture_tokens(const Fixture *fix)
option_int("string_token_result", &tokens),
g_strdup(buf));
- misc_print_grouped_int(fix->attendance, buf);
+ misc_print_grouped_int(math_round_integer(fix->attendance, 2), buf);
misc_token_add(token_rep_news,
option_int("string_token_attendance", &tokens),
g_strdup(buf));
diff --git a/src/news.h b/src/news.h
index cc6415e2..2c293c74 100644
--- a/src/news.h
+++ b/src/news.h
@@ -44,13 +44,13 @@ news_select(const GArray *news_array, gchar *title, gchar *subtitle,
gint
news_get_title(const GArray *titles, gchar *title, gint *order,
- gboolean is_title, gboolean ignore_repetition);
+ gboolean is_title, gboolean ignore_repetition, gint to_check);
gboolean
news_check_article_for_repetition(gint id);
gboolean
-news_check_title_for_repetition(gint id, gboolean is_title);
+news_check_title_for_repetition(gint id, gboolean is_title, gint to_check);
void
news_load_news_file_from_option(void);
diff --git a/support_files/bygfoot_constants b/support_files/bygfoot_constants
index 8b7e9149..4287641c 100644
--- a/support_files/bygfoot_constants
+++ b/support_files/bygfoot_constants
@@ -1000,4 +1000,5 @@ int_training_camps_week 2
# how many news articles to check backwards
# to avoid news repetitions
-int_news_repetition_check_number 10
+int_news_repetition_min_check_number 3
+int_news_repetition_max_check_number 10
diff --git a/support_files/news/news_de.xml b/support_files/news/news_de.xml
index 7c67b25c..4ca927ff 100644
--- a/support_files/news/news_de.xml
+++ b/support_files/news/news_de.xml
@@ -2,25 +2,83 @@
match
_LAYERDIFF_ = 0 and _GD_ G 3
- _TL_ chancenlos gegen _TW_
+ _TL_ ohne Chance bei _TW_
+ _TL_ völlig chancenlos gegen _TW_
Kantersieg für _TW_
- _TL_ unterliegt _TW_ eindeutig
_TW_ beherrscht _TL_ nach Belieben
[Glanzvorstellung|Galavorstellung|Glanzleistung] von _TW_
_TW_ besiegt _TL_ mit [Glanzvorstellung|Galavorstellung|Glanzleistung]
Torreigen bei _T0_ gegen _T1_
+ _TW_ dominiert auswärts
+ _TL_ wird durch die gnadenlose Tormaschine von _TW_ zerstört.
+ _TW_ fertigt _TL_ zuhause _RE_ ab.
+ _TL_ kommt bei _TW_ unter die Räder.
+ _TW_ siegt _RE_ im Auswärtsspiel.
+ In einem torreichen Spiel behält _TW_ die Oberhand.
+ _TL_ zeigt sich sowohl in der Offensive als auch in der Defensive hoffnungslos schwach.
+ _TL_ unterliegt in einem Spiel der Offensivabteilungen.
+ _SCORERS_TWN__ erzielen die Tore beim haushohen Heimsieg.
+ _TL_ wird durch Tore von _SCORERS_TWN__ regelrecht auseinandergenommen.
+ _TL_ kommt durch Tore von _SCORERS_TWN__ unter die Räder.
+ _HIGHSCORER_TWN__ erzielt _HIGHGOALS_TWN__ Tore bei sensationellem Sieg.
+ _HIGHSCORER_TWN__ erzielt Hattrick in unterhaltsamem Spiel.
+ _HIGHGOALS_TLN__ Tore von _HIGHSCORER_TLN__ können die Niederlage von _TL_ nicht verhindern.
+ Tore von _SCORERS_TLN__ sind nicht genug für _TL_ bei der _RE_ Niederlage.
+
+
+
+ match
+ _LAYERDIFF_ = 0 and _GD_ G 2
+ _TL_ chancenlos gegen _TW_
+ Klarer Sieg für _TW_
+ Klarer Heimsieg für _TW_
+ _TL_ unterliegt _TW_ [klar|eindeutig]
+ _TL_ unterliegt auswärts [klar|eindeutig]
+ _TW_ dominiert _TL_
+ _TW_ dominiert bei _TL_
+ _TW_ dominiert auswärts
_TW_ siegt trotz _GOALS_TLN__ Gegentoren
_GOALS_TWL__ nicht genug für _TL_
- _TW_ dominiert bei _TL_
+ _TW_ beherrscht _TL_ deutlich beim _RE_ Sieg.
_TW_ fertigt _TL_ zuhause _RE_ ab.
In einem torreichen Spiel behält _TW_ die Oberhand.
_TL_ unterliegt in einem Spiel der Offensivabteilungen.
_SCORERS_TWN__ treffen beim hohen Sieg von _TW_.
- _SCORERS_TWN__ erzielen die Tore beim überlegenen Heimsieg.
- _TL_ wird durch Tore von _SCORERS_TWN__ regelrecht auseinandergenommen.
+ _SCORERS_TWN__ erzielen die Tore beim ungefährdeten Heimsieg von _TW_.
+ _SCORERS_TWN__ erzielen die Tore beim ungefährdeten Auswärtssieg von _TW_.
_HIGHSCORER_TWN__ erzielt _HIGHGOALS_TWN__ Tore beim überlegenen Sieg.
+ _HIGHSCORER_TWN__ trifft _HIGHGOALS_TWN__-mal.
_HIGHSCORER_TWN__ erzielt Hattrick in unterhaltsamem Spiel.
+ Hattrick von _HIGHSCORER_TWN__ lässt _TL_ ohne Chance.
_HIGHGOALS_TLN__ Tore von _HIGHSCORER_TLN__ können die Niederlage von _TL_ nicht verhindern.
- Tore von _SCORERS_TLN__ sind nicht genug bei der _RE_ Niederlage.
+ _HIGHGOALS_TLN__ Tore von _HIGHSCORER_TLN__ können die Niederlage von _TL_ nicht abwenden.
+ _TL_ verliert trotz _HIGHGOALS_TLN__ Treffer von _HIGHSCORER_TLN__.
+ Tore von _SCORERS_TLN__ sind nicht genug für _TL_ bei der _RE_ Niederlage.
+
+
+
+ match
+ _LAYERDIFF_ = 0 and _GOALS0_ != _GOALS1_
+ _TW_ besiegt _TL_ mit _RE_
+ _TL_ unterliegt _TW_ _RE_
+ _TW_ siegt zuhause gegen _TL_
+ Heimsieg von _TW_
+ _TW_ zuhause erfolgreich
+ _TW_ siegt bei _TL_
+ Auswärtssieg von _TW_
+ _TW_ auswärts erfolgreich
+ _WON_TWN__-ter Sieg in Folge für _TW_
+ _LOST_TLN__-te Niederlage in Folge für _TL_
+ _TW_ seit _UNBEATEN_TWN__ Spielen ungeschlagen
+ _SCORERS_TWN__ erzielen die Tore gegen _TL_.
+ _SCORERS_TWN__ treffen gegen _TL_.
+ _TW_ behält die Oberhand dank Toren von _SCORERS_TWN__.
+ _SCORERS_TWN__ erzielen die Tore in _TL_.
+ _SCORERS_TWN__ sichert Sieg gegen _TL_.
+ _SCORERS_TWN__ alleiniger Torschütze gegen _TL_.
+ _SCORERS_TWN__ besiegt _TL_ im Alleingang.
+ _GOALS_TLN__ Treffer reichen nicht zum Sieg für _TL_.
+ _TW_ siegt dank Toren von _SCORERS_TWN__ in unterhaltsamem Spiel.
+ _TL_ unterliegt in torreichem Spiel gegen _TW_.