1
1
mirror of https://github.com/tstellar/bygfoot.git synced 2025-01-27 14:09:24 +01:00

"-m Player name files, first and last names."

This commit is contained in:
gyboth 2005-06-01 18:19:02 +00:00
parent 65e0e9e338
commit d8c8eee3c1
32 changed files with 11788 additions and 31620 deletions

File diff suppressed because one or more lines are too long

View File

@ -34,12 +34,13 @@ bygfoot_SOURCES = \
misc2_callbacks.c callbacks.h callback_func.h debug.h finance.h game_gui.h load_save.h main.h misc2_callbacks.h misc2_callback_func.h misc2_interface.h player.h support.h transfer.h treeview.h user.h window.h \
misc2_callback_func.c callbacks.h file.h finance.h game_gui.h maths.h misc2_callback_func.h option.h player.h support.h team.h treeview.h transfer.h user.h window.h \
misc2_interface.c misc2_interface.h misc2_callbacks.h support.h \
name.c name.h option.h variables.h xml_name.h \
option.c option.h variables.h \
option_gui.c file.h game_gui.h callbacks.h option_gui.h option.h support.h user.h variables.h \
options_callbacks.c file.h options_callbacks.h options_interface.h option_gui.h support.h user.h variables.h window.h \
options_interface.c options_interface.h options_callbacks.h support.h \
player.c cup.h fixture.h free.h game_gui.h league.h maths.h misc.h option.h player.h team.h user.h \
start_end.c cup.h file.h finance.h fixture.h free.h game_gui.h gui.h league.h load_save.h live_game.h main.h maths.h misc.h option.h start_end.h stat.h table.h team.h transfer.h user.h variables.h xml_name.h \
player.c cup.h fixture.h free.h game_gui.h league.h maths.h misc.h name.h option.h player.h team.h user.h \
start_end.c cup.h file.h finance.h fixture.h free.h game_gui.h gui.h league.h load_save.h live_game.h main.h maths.h misc.h name.h option.h start_end.h stat.h table.h team.h transfer.h user.h variables.h xml_name.h \
stat.c cup.h free.h league.h option.h player.h stat.h table_struct.h team.h variables.h \
support.c support.h \
table.c cup.h league.h table.h variables.h \

View File

@ -54,16 +54,13 @@
/** Convenience abbreviation. */
#define acp(i) ((Cup*)g_ptr_array_index(country.allcups, i))
/** Convenience abbreviation. */
#define player_name(i) ((GString*)g_ptr_array_index(player_names, i))->str;
/** Convenience abbrevs. */
#define stat0 status[0]
#define stat1 status[1]
#define stat2 status[2]
#define stat3 status[3]
#define stat4 status[4]
#define old_stat status[5]
#define stat5 status[5]
#define debug opt_int("int_opt_debug")

View File

@ -100,6 +100,7 @@ enum Status0Value
STATUS_QUERY_UNFIT,
STATUS_QUERY_QUIT,
STATUS_QUERY_USER_NO_TURN,
STATUS_GENERATE_TEAMS,
STATUS_END
};

View File

@ -11,6 +11,7 @@ void
free_memory(void)
{
free_variables();
free_names(FALSE);
free_transfer_list();
free_country(FALSE);
free_users(FALSE);
@ -444,8 +445,6 @@ free_cup_choose_team(CupChooseTeam *cup_choose_team)
void
free_variables(void)
{
free_g_string_array(&player_names);
free_option_list(&options, FALSE);
free_option_list(&constants, FALSE);
free_option_list(&constants_app, FALSE);
@ -532,3 +531,54 @@ free_support_dirs(void)
g_list_free(support_directories);
support_directories = NULL;
}
/** Free a list of names. */
void
free_name_list(NameList *namelist, gboolean reset)
{
if(namelist->sid == NULL)
{
if(reset)
{
namelist->sid = g_string_new("");
namelist->first_names = g_ptr_array_new();
namelist->last_names = g_ptr_array_new();
}
return;
}
free_g_string(&namelist->sid);
free_g_ptr_array(&namelist->first_names);
free_g_ptr_array(&namelist->last_names);
if(reset)
{
namelist->sid = g_string_new("");
namelist->first_names = g_ptr_array_new();
namelist->last_names = g_ptr_array_new();
}
}
/** Free the array with the name lists. */
void
free_names(gboolean reset)
{
gint i;
if(name_lists == NULL)
{
if(reset)
name_lists = g_array_new(FALSE, FALSE, sizeof(NameList));
return;
}
for(i=0;i<name_lists->len;i++)
free_name_list(&g_array_index(name_lists, NameList, i), FALSE);
free_g_array(&name_lists);
if(reset)
name_lists = g_array_new(FALSE, FALSE, sizeof(NameList));
}

View File

@ -5,6 +5,7 @@
#include "cup_struct.h"
#include "league_struct.h"
#include "live_game_struct.h"
#include "name_struct.h"
#include "player_struct.h"
#include "team_struct.h"
#include "user_struct.h"
@ -87,4 +88,10 @@ free_season_stats(gboolean reset);
void
free_transfer_list(void);
void
free_name_list(NameList *namelist, gboolean reset);
void
free_names(gboolean reset);
#endif

View File

@ -21,6 +21,7 @@ league_new(gboolean new_id)
League new;
new.name = g_string_new("");
new.names_file = g_string_new(opt_str("string_opt_player_names_file"));
new.sid = g_string_new("");
new.short_name = g_string_new("");
new.symbol = g_string_new("");

View File

@ -61,6 +61,10 @@ typedef struct
{
/** Default value "" */
GString *name, *short_name, *sid, *symbol;
/** The sid of the player names file the
teams in the league take their names from.
Default: 'general', meaning the 'player_names_general.xml' file. */
GString *names_file;
/** @see PromRel */
PromRel prom_rel;
/** Numerical id, as opposed to the string id 'sid'. */

View File

@ -380,17 +380,17 @@ lg_commentary_get_player_name(const LiveGameUnit *unit, const Fixture *fix, gboo
if(unit->event.type == LIVE_GAME_EVENT_GENERAL)
return_value = (player2) ?
player_of_id_team(fix->teams[unit->possession],
unit->event.player2)->name->str :
player_of_id_team(fix->teams[unit->possession],
unit->event.player)->name->str;
player_get_last_name(player_of_id_team(fix->teams[unit->possession],
unit->event.player2)->name->str) :
player_get_last_name(player_of_id_team(fix->teams[unit->possession],
unit->event.player)->name->str);
else if(unit->event.type == LIVE_GAME_EVENT_LOST_POSSESSION)
{
return_value = (player2) ?
player_of_id_team(fix->teams[!unit->possession],
unit->event.player2)->name->str:
player_of_id_team(fix->teams[unit->possession],
unit->event.player)->name->str;
player_get_last_name(player_of_id_team(fix->teams[!unit->possession],
unit->event.player2)->name->str):
player_get_last_name(player_of_id_team(fix->teams[unit->possession],
unit->event.player)->name->str);
}
else if(unit->event.type == LIVE_GAME_EVENT_SCORING_CHANCE ||
unit->event.type == LIVE_GAME_EVENT_HEADER ||
@ -398,10 +398,10 @@ lg_commentary_get_player_name(const LiveGameUnit *unit, const Fixture *fix, gboo
unit->event.type == LIVE_GAME_EVENT_FREE_KICK)
{
return_value = (player2) ?
player_of_id_team(fix->teams[unit->possession],
unit->event.player2)->name->str :
player_of_id_team(fix->teams[unit->possession],
unit->event.player)->name->str;
player_get_last_name(player_of_id_team(fix->teams[unit->possession],
unit->event.player2)->name->str) :
player_get_last_name(player_of_id_team(fix->teams[unit->possession],
unit->event.player)->name->str);
}
else if(unit->event.type == LIVE_GAME_EVENT_GOAL ||
unit->event.type == LIVE_GAME_EVENT_MISSED ||
@ -410,35 +410,35 @@ lg_commentary_get_player_name(const LiveGameUnit *unit, const Fixture *fix, gboo
unit->event.type == LIVE_GAME_EVENT_CROSS_BAR)
{
return_value = (player2) ?
player_of_id_team(fix->teams[!unit->possession],
unit->event.player2)->name->str :
player_of_id_team(fix->teams[unit->possession],
unit->event.player)->name->str;
player_get_last_name(player_of_id_team(fix->teams[!unit->possession],
unit->event.player2)->name->str) :
player_get_last_name(player_of_id_team(fix->teams[unit->possession],
unit->event.player)->name->str);
}
else if(unit->event.type == LIVE_GAME_EVENT_OWN_GOAL)
return_value =
player_of_id_team(fix->teams[!unit->possession],
unit->event.player)->name->str;
player_get_last_name(player_of_id_team(fix->teams[!unit->possession],
unit->event.player)->name->str);
else if(unit->event.type == LIVE_GAME_EVENT_FOUL ||
unit->event.type == LIVE_GAME_EVENT_FOUL_RED ||
unit->event.type == LIVE_GAME_EVENT_FOUL_RED_INJURY ||
unit->event.type == LIVE_GAME_EVENT_FOUL_YELLOW)
{
return_value = (player2) ?
player_of_id_team(fix->teams[unit->event.team],
unit->event.player2)->name->str :
player_of_id_team(fix->teams[!unit->event.team],
unit->event.player)->name->str;
player_get_last_name(player_of_id_team(fix->teams[unit->event.team],
unit->event.player2)->name->str) :
player_get_last_name(player_of_id_team(fix->teams[!unit->event.team],
unit->event.player)->name->str);
}
else if(unit->event.type == LIVE_GAME_EVENT_SEND_OFF ||
unit->event.type == LIVE_GAME_EVENT_INJURY ||
unit->event.type == LIVE_GAME_EVENT_TEMP_INJURY ||
unit->event.type == LIVE_GAME_EVENT_SUBSTITUTION)
return_value = (player2) ?
player_of_id_team(fix->teams[unit->event.team],
unit->event.player2)->name->str :
player_of_id_team(fix->teams[unit->event.team],
unit->event.player)->name->str;
player_get_last_name(player_of_id_team(fix->teams[unit->event.team],
unit->event.player2)->name->str) :
player_get_last_name(player_of_id_team(fix->teams[unit->event.team],
unit->event.player)->name->str);
else
g_warning("lg_commentary_get_player_name: unknown event type %d\n",
unit->event.type);

View File

@ -15,9 +15,9 @@ enum LGTokens
LG_TOKEN_TEAM_LOSING,
LG_TOKEN_TEAM_WINNING,
LG_TOKEN_TEAM,
LG_TOKEN_ATTENDANCE,
LG_TOKEN_PLAYER1,
LG_TOKEN_PLAYER2,
LG_TOKEN_ATTENDANCE,
LG_TOKEN_RESULT,
LG_TOKEN_MINUTE,
LG_TOKEN_EXTRA,

View File

@ -10,6 +10,7 @@
#include "free.h"
#include "live_game.h"
#include "main.h"
#include "name_struct.h"
#include "transfer_struct.h"
#include "stat_struct.h"
#include "variables.h"
@ -26,7 +27,6 @@ main_init_variables(void)
ligs = cps = NULL;
acps = NULL;
country.name = country.symbol = country.sid = NULL;
player_names = NULL;
season = week = week_round = 1;
@ -47,6 +47,7 @@ main_init_variables(void)
users = g_array_new(FALSE, FALSE, sizeof(User));
transfer_list = g_array_new(FALSE, FALSE, sizeof(Transfer));
season_stats = g_array_new(FALSE, FALSE, sizeof(SeasonStat));
name_lists = g_array_new(FALSE, FALSE, sizeof(NameList));
save_file = g_string_new("");

View File

@ -40,7 +40,7 @@ misc_callback_start_game(void)
start_new_game();
for(i=0;i<users->len;i++)
for(i=0;i<users->len;i++)
user_set_up_team_new_game(&usr(i));
window_destroy(&window.startup, TRUE);
@ -237,6 +237,5 @@ misc_callback_startup_load(const gchar *filename)
{
window_destroy(&window.startup, TRUE);
window_create(WINDOW_MAIN);
xml_name_read(opt_str("string_opt_player_names_file"), 1000);
load_save_load_game(filename);
}

83
src/name.c Normal file
View File

@ -0,0 +1,83 @@
#include "name.h"
#include "option.h"
#include "variables.h"
#include "xml_name.h"
/** Get a random player name from the given
names list. If the names list is not found, create
it from file. If the file can't be found, either,
make some fuss and take one from the general names. */
GString*
name_get(const gchar *names_file)
{
gint i;
NameList new;
if(name_lists->len > 1 &&
math_rnd(0, 1) < const_float("float_name_random_list_prob"))
return name_get_from_random_list();
for(i=0;i<name_lists->len;i++)
if(strcmp(names_file, nli(i).sid->str) == 0)
return name_get_from_list(&nli(i));
/** Create new name list. */
new.sid = NULL;
new.first_names = new.last_names = NULL;
xml_name_read(names_file, &new);
if(new.sid == NULL)
{
g_warning("name_get_new: names file with sid %s not found, taking general names file.\n",
names_file);
return name_get(opt_str("string_opt_player_names_file"));
}
if(stat5 != STATUS_GENERATE_TEAMS)
name_shorten_list(&new);
g_array_append_val(name_lists, new);
return name_get_from_list(&nli(name_lists->len - 1));
}
/** Return a newly allocated GString with a randomly
picked combined name from the list. */
GString*
name_get_from_list(const NameList *namelist)
{
gchar buf[SMALL];
sprintf(buf, "%s %s", name_get_random_first_name(namelist),
name_get_random_last_name(namelist));
return g_string_new(buf);
}
/** Shorten a name list so that it doesn't occupy
too much memory. */
void
name_shorten_list(NameList *namelist)
{
gint idx;
while(namelist->first_names->len * namelist->last_names->len >
const_int("int_name_max_product"))
{
if((gfloat)(namelist->first_names->len) /
(gfloat)(namelist->last_names->len) >
const_float("float_name_first_last_ratio"))
{
idx = math_rndi(0, namelist->first_names->len - 1);
g_string_free((GString*)g_ptr_array_index(namelist->first_names, idx), TRUE);
g_ptr_array_remove_index_fast(namelist->first_names, idx);
}
else
{
idx = math_rndi(0, namelist->last_names->len - 1);
g_string_free((GString*)g_ptr_array_index(namelist->last_names, idx), TRUE);
g_ptr_array_remove_index_fast(namelist->last_names, idx);
}
}
}

24
src/name.h Normal file
View File

@ -0,0 +1,24 @@
#ifndef NAME_H
#define NAME_H
#include "bygfoot.h"
#include "name_struct.h"
#include "maths.h"
#define nli(i) g_array_index(name_lists, NameList, i)
#define name_get_random_first_name(namelist) ((GString*)g_ptr_array_index(namelist->first_names, math_rndi(0, namelist->first_names->len - 1)))->str
#define name_get_random_last_name(namelist) ((GString*)g_ptr_array_index(namelist->last_names, math_rndi(0, namelist->last_names->len - 1)))->str
/** Get a name from a randomly picked name list. */
#define name_get_from_random_list() name_get_from_list(&nli(math_rndi(0, name_lists->len - 1)))
void
name_shorten_list(NameList *namelist);
GString*
name_get(const gchar *names_file);
GString*
name_get_from_list(const NameList *namelist);
#endif

18
src/name_struct.h Normal file
View File

@ -0,0 +1,18 @@
#ifndef NAME_STRUCT_H
#define NAME_STRUCT_H
#include "bygfoot.h"
/** A list of first names and last names
from a file. */
typedef struct
{
/** The file id (the part between 'player_names_' and '.xml'). */
GString *sid;
/** Arrays of GStrings holding the names. */
GPtrArray *first_names,
*last_names;
} NameList;
#endif

View File

@ -5,6 +5,7 @@
#include "league.h"
#include "maths.h"
#include "misc.h"
#include "name.h"
#include "option.h"
#include "player.h"
#include "team.h"
@ -24,8 +25,8 @@ player_new(Team *tm, gfloat average_skill, gboolean new_id)
1 + const_float("float_player_average_skill_variance"));
Player new;
new.name =
g_string_new(((GString*)g_ptr_array_index(player_names, math_rndi(0, player_names->len - 1)))->str);
new.name = name_get(tm->names_file->str);
new.id = (new_id) ? player_id_new : -1;
new.pos = player_get_position_from_structure(tm->structure, tm->players->len);
new.cpos = new.pos;
@ -1141,3 +1142,36 @@ player_season_start(Player *pl, gfloat skill_change)
}
}
}
/** Return the last name of a player. */
gchar*
player_get_last_name(const gchar *name)
{
gint i;
gchar buf[SMALL];
gchar *rev_name = NULL;
const gchar *temp;
if(!g_utf8_validate(name, -1, NULL))
{
g_warning("player_get_last_name: invalid utf8-string: %s \n", name);
return NULL;
}
temp = name;
for(i=0;i<g_utf8_strlen(name, -1);i++)
{
temp = g_utf8_next_char(temp);
if(g_unichar_isspace(g_utf8_get_char(temp)))
break;
}
rev_name = g_utf8_strreverse(name, -1);
g_utf8_strncpy(buf, rev_name, g_utf8_strlen(name, -1) - i - 2);
g_free(rev_name);
rev_name = g_utf8_strreverse(buf, -1);
return rev_name;
}

View File

@ -127,4 +127,7 @@ player_id_team(gint player_id);
void
player_season_start(Player *pl, gfloat skill_change);
gchar*
player_get_last_name(const gchar *name);
#endif

View File

@ -11,6 +11,7 @@
#include "main.h"
#include "maths.h"
#include "misc.h"
#include "name.h"
#include "option.h"
#include "start_end.h"
#include "stat.h"
@ -49,11 +50,9 @@ WeekFunc end_week_funcs[] = {stat_update_leagues, end_week_hide_cups, NULL};
void
start_new_game(void)
{
xml_name_read(opt_str("string_opt_player_names_file"), -1);
start_write_variables();
start_generate_league_teams();
start_new_season();
xml_name_read(opt_str("string_opt_player_names_file"), 1000);
}
/** Make new fixtures, nullify things etc. */
@ -62,8 +61,6 @@ start_new_season(void)
{
gint i;
xml_name_read(opt_str("string_opt_player_names_file"), 1000);
week = week_round = 1;
if(season > 1)
@ -100,6 +97,8 @@ start_new_season(void)
for(i=0;i<ligs->len;i++)
fixture_write_league_fixtures(&lig(i));
free_names(TRUE);
stat5 = STATUS_GENERATE_TEAMS;
for(i=cps->len - 1; i >= 0; i--)
{
cup_reset(&cp(i));
@ -107,10 +106,14 @@ start_new_season(void)
if(cp(i).add_week == 0)
fixture_write_cup_fixtures(&cp(i));
}
stat5 = -1;
if(season > 1)
for(i=0;i<ligs->len;i++)
league_season_start(&lig(i));
for(i=0;i<name_lists->len;i++)
name_shorten_list(&nli(i));
}
/** Fill some global variables with default values at the
@ -133,6 +136,8 @@ start_generate_league_teams(void)
{
gint i, j;
stat5 = STATUS_GENERATE_TEAMS;
if(ligs->len == 0)
main_exit_program(EXIT_NO_LEAGUES,
"start_generate_league_teams: no leagues found. there must be at least one league in the game.\n");
@ -140,6 +145,8 @@ start_generate_league_teams(void)
for(i=0;i<ligs->len;i++)
for(j=0;j<lig(i).teams->len;j++)
team_generate_players_stadium(&g_array_index(lig(i).teams, Team, j));
stat5 = -1;
}
/** End a week round. */

View File

@ -23,6 +23,7 @@ team_new(gboolean new_id)
Team new;
new.name = g_string_new("");
new.names_file = g_string_new("");
new.symbol = g_string_new("");
new.clid = -1;

View File

@ -46,9 +46,11 @@ typedef struct
@see Player */
typedef struct
{
GString *name;
GString *symbol;
GString *name, *symbol;
/** File the team takes the
player names from. */
GString *names_file;
gint clid, /**< Numerical id of the league or cup the team belongs to. */
id, /**< Id of the team. */
structure, /**< Playing structure. @see team_assign_playing_structure() */

View File

@ -50,8 +50,8 @@ gpointer statp;
/** The currently selected rows in the treeviews. */
gint selected_row[2];
/** An array of player names that we keep in memory. */
GPtrArray *player_names;
/** An array of name lists. */
GArray *name_lists;
/** The struct containing the window pointers. */
Windows window;

View File

@ -26,6 +26,7 @@ enum XmlTags
TAG_WEEK_GAP,
TAG_YELLOW_RED,
TAG_TEAM_ID,
TAG_NAMES_FILE,
TAG_ROUND
};

View File

@ -23,6 +23,7 @@
#define TAG_ROUND_ROBINS "round_robins"
#define TAG_YELLOW_RED "yellow_red"
#define TAG_AVERAGE_SKILL "average_skill"
#define TAG_NAMES_FILE "names_file"
#define TAG_PROM_REL "prom_rel"
#define TAG_PROM_GAMES "prom_games"
#define TAG_PROM_GAMES_DEST_SID "prom_games_dest_sid"
@ -54,6 +55,7 @@ enum XmlLeagueStates
STATE_ROUND_ROBINS,
STATE_YELLOW_RED,
STATE_AVERAGE_SKILL,
STATE_NAMES_FILE,
STATE_PROM_REL,
STATE_PROM_GAMES,
STATE_PROM_GAMES_DEST_SID,
@ -121,6 +123,8 @@ xml_league_read_start_element (GMarkupParseContext *context,
state = STATE_YELLOW_RED;
else if(strcmp(element_name, TAG_AVERAGE_SKILL) == 0)
state = STATE_AVERAGE_SKILL;
else if(strcmp(element_name, TAG_NAMES_FILE) == 0)
state = STATE_NAMES_FILE;
else if(strcmp(element_name, TAG_PROM_REL) == 0)
state = STATE_PROM_REL;
else if(strcmp(element_name, TAG_PROM_GAMES) == 0)
@ -153,6 +157,7 @@ xml_league_read_start_element (GMarkupParseContext *context,
{
new_team = team_new(TRUE);
g_string_printf(new_team.symbol, "%s", new_league.symbol->str);
g_string_printf(new_team.names_file, "%s", new_league.names_file->str);
new_team.clid = new_league.id;
g_array_append_val(new_league.teams, new_team);
state = STATE_TEAM;
@ -186,6 +191,7 @@ xml_league_read_end_element (GMarkupParseContext *context,
strcmp(element_name, TAG_ROUND_ROBINS) == 0 ||
strcmp(element_name, TAG_YELLOW_RED) == 0 ||
strcmp(element_name, TAG_AVERAGE_SKILL) == 0 ||
strcmp(element_name, TAG_NAMES_FILE) == 0 ||
strcmp(element_name, TAG_PROM_REL) == 0 ||
strcmp(element_name, TAG_TEAMS) == 0)
state = STATE_LEAGUE;
@ -255,6 +261,8 @@ xml_league_read_text (GMarkupParseContext *context,
new_league.yellow_red = value;
else if(state == STATE_AVERAGE_SKILL)
new_league.average_skill = value;
else if(state == STATE_NAMES_FILE)
g_string_printf(new_league.names_file, "%s", buf);
else if(state == STATE_PROM_GAMES_DEST_SID)
g_string_printf(new_league.prom_rel.prom_games_dest_sid, "%s", buf);
else if(state == STATE_PROM_GAMES_LOSER_SID)

View File

@ -84,6 +84,7 @@ xml_loadsave_league_end_element (GMarkupParseContext *context,
tag == TAG_LEAGUE_AVERAGE_SKILL ||
tag == TAG_LEAGUE_ROUND_ROBINS ||
tag == TAG_NAME ||
tag == TAG_NAMES_FILE ||
tag == TAG_SHORT_NAME ||
tag == TAG_SYMBOL ||
tag == TAG_SID ||
@ -136,6 +137,8 @@ xml_loadsave_league_text (GMarkupParseContext *context,
g_string_printf(new_league->name, "%s", buf);
else if(state == TAG_SHORT_NAME)
g_string_printf(new_league->short_name, "%s", buf);
else if(state == TAG_NAMES_FILE)
g_string_printf(new_league->names_file, "%s", buf);
else if(state == TAG_SYMBOL)
g_string_printf(new_league->symbol, "%s", buf);
else if(state == TAG_SID)
@ -231,6 +234,7 @@ xml_loadsave_league_write(const gchar *prefix, const League *league)
xml_write_g_string(fil, league->name, TAG_NAME, I0);
xml_write_g_string(fil, league->short_name, TAG_SHORT_NAME, I0);
xml_write_g_string(fil, league->names_file, TAG_NAMES_FILE, I0);
xml_write_g_string(fil, league->sid, TAG_SID, I0);
xml_write_g_string(fil, league->symbol, TAG_SYMBOL, I0);

View File

@ -1,26 +1,26 @@
#include "file.h"
#include "free.h"
#include "maths.h"
#include "misc.h"
#include "name.h"
#include "variables.h"
#include "xml_name.h"
#define TAG_NAMES "player_names"
#define TAG_PLAYER_NAME "player_name"
#define TAG_PLAYER_NAME_NAME "name"
#define TAG_NAMES "names"
#define TAG_LAST_NAME "last_name"
#define TAG_FIRST_NAME "first_name"
enum XmlNameStates
{
STATE_NAMES = 0,
STATE_PLAYER_NAME,
STATE_PLAYER_NAME_NAME,
STATE_LAST_NAME,
STATE_FIRST_NAME,
STATE_END
};
/** Keep track of the state. */
gint state;
GPtrArray *temp_array;
GString *new_name;
/** The name list we read into. */
NameList *nlist;
/** @see xml_league_read_start_element */
void
@ -33,13 +33,10 @@ xml_name_read_start_element (GMarkupParseContext *context,
{
if(strcmp(element_name, TAG_NAMES) == 0)
state = STATE_NAMES;
else if(strcmp(element_name, TAG_PLAYER_NAME) == 0)
{
new_name = g_string_new("");
state = STATE_PLAYER_NAME;
}
else if(strcmp(element_name, TAG_PLAYER_NAME_NAME) == 0)
state = STATE_PLAYER_NAME_NAME;
else if(strcmp(element_name, TAG_FIRST_NAME) == 0)
state = STATE_FIRST_NAME;
else if(strcmp(element_name, TAG_LAST_NAME) == 0)
state = STATE_LAST_NAME;
else
g_warning("xml_name_read_start_element: unknown tag: %s; I'm in state %d\n",
element_name, state);
@ -52,10 +49,9 @@ xml_name_read_end_element (GMarkupParseContext *context,
gpointer user_data,
GError **error)
{
if(strcmp(element_name, TAG_PLAYER_NAME) == 0)
if(strcmp(element_name, TAG_FIRST_NAME) == 0 ||
strcmp(element_name, TAG_LAST_NAME) == 0)
state = STATE_NAMES;
else if(strcmp(element_name, TAG_PLAYER_NAME_NAME) == 0)
state = STATE_PLAYER_NAME;
else if(strcmp(element_name, TAG_NAMES) != 0)
g_warning("xml_name_end_start_element: unknown tag: %s; I'm in state %d\n",
element_name, state);
@ -70,28 +66,27 @@ xml_name_read_text (GMarkupParseContext *context,
GError **error)
{
gchar buf[text_len + 1];
GString *new_name = NULL;
strncpy(buf, text, text_len);
buf[text_len] = '\0';
if(state == STATE_PLAYER_NAME_NAME)
{
g_string_printf(new_name, "%s", buf);
g_ptr_array_add(temp_array, (gpointer)new_name);
}
new_name = g_string_new(buf);
if(state == STATE_FIRST_NAME)
g_ptr_array_add(nlist->first_names, new_name);
else if(state == STATE_LAST_NAME)
g_ptr_array_add(nlist->last_names, new_name);
}
/** Fill the player names array with names from the
player names file. Randomize the order and keep only
'number_of_names' of them.
@param names_file The file the names are read from.
@param number_of_names Number of player names we keep in memory.
If this is -1, we keep all of them. */
/** Fill the name list with names from the
given names file.
@param sid The sid of the names file we read.
@param namelist The name list we fill. */
void
xml_name_read(const gchar *names_file, gint number_of_names)
xml_name_read(const gchar *sid, NameList *namelist)
{
gint i;
gchar *file_name = file_find_support_file(names_file, FALSE);
gchar *file_name = NULL;
GMarkupParser parser = {xml_name_read_start_element,
xml_name_read_end_element,
xml_name_read_text, NULL, NULL};
@ -101,6 +96,9 @@ xml_name_read(const gchar *names_file, gint number_of_names)
GError *error = NULL;
gchar buf[SMALL];
sprintf(buf, "player_names_%s.xml", sid);
file_name = file_find_support_file(buf, TRUE);
context =
g_markup_parse_context_new(&parser, 0, NULL, NULL);
@ -110,12 +108,11 @@ xml_name_read(const gchar *names_file, gint number_of_names)
misc_print_error(&error, FALSE);
return;
}
state = STATE_NAMES;
strcpy(buf, file_name);
g_free(file_name);
free_g_string_array(&player_names);
temp_array = g_ptr_array_new();
free_name_list(namelist, TRUE);
g_string_assign(namelist->sid, sid);
nlist = namelist;
if(g_markup_parse_context_parse(context, file_contents, length, &error))
{
@ -129,21 +126,5 @@ xml_name_read(const gchar *names_file, gint number_of_names)
misc_print_error(&error, TRUE);
}
if(number_of_names == -1)
{
player_names = temp_array;
return;
}
gint int_array[temp_array->len];
math_generate_permutation(int_array, 0, temp_array->len - 1);
player_names = g_ptr_array_new();
for(i=0;i<number_of_names;i++)
{
new_name = g_string_new(((GString*)g_ptr_array_index(temp_array, int_array[i]))->str);
g_ptr_array_add(player_names, (gpointer)new_name);
}
free_g_string_array(&temp_array);
g_free(file_name);
}

View File

@ -2,6 +2,7 @@
#define XML_NAME_H
#include "bygfoot.h"
#include "name_struct.h"
void
xml_name_read_start_element (GMarkupParseContext *context,
@ -25,6 +26,6 @@ xml_name_read_text (GMarkupParseContext *context,
GError **error);
void
xml_name_read(const gchar *names_file, gint number_of_names);
xml_name_read(const gchar *sid, NameList *namelist);
#endif

View File

@ -4,8 +4,8 @@
# Most of these options are uncommented because their meaning
# is rather clear if you take a look at the options window in the game.
int_opt_confirm_quit 0
int_opt_confirm_unfit 0
int_opt_confirm_quit 1
int_opt_confirm_unfit 1
int_opt_save_will_overwrite 0
int_opt_maximize_main_window 1
int_opt_prefer_messages 0
@ -24,7 +24,8 @@ int_opt_live_game_player_list_refresh 48
# whether some debugging info's shown (in the console)
int_opt_debug 0
string_opt_player_names_file player_names.xml
# some default files
string_opt_player_names_file general
string_opt_constants_file bygfoot_constants
string_opt_appearance_file bygfoot_app
string_opt_default_user_conf_file bygfoot_user.conf

View File

@ -716,3 +716,16 @@ float_contract_scale_factor 300
# max. number of offers when a new contract is negotiated
int_contract_max_offers 3
# ratio we'd like to have between the number
# of first and last names in a player name list
# (ie. #first names /#last names)
float_name_first_last_ratio 5000
# maximum number of possibilities we want to have
# in a shortened name list (ie. #first * #last)
int_name_max_product 2000
# probability that a name is chosen from a random
# list instead of the specified one
float_name_random_list_prob 2000

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,384 @@
<names>
<last_name>Ackart</last_name>
<last_name>Ackerman</last_name>
<last_name>Ackers</last_name>
<last_name>Ackland</last_name>
<last_name>Acton</last_name>
<last_name>Ada</last_name>
<last_name>Adlam</last_name>
<last_name>Adolphus</last_name>
<last_name>Adolph</last_name>
<last_name>Ainsworth</last_name>
<last_name>Akeman</last_name>
<last_name>Ackman</last_name>
<last_name>Alden</last_name>
<last_name>Aldaine</last_name>
<last_name>Aldridge</last_name>
<last_name>Alford</last_name>
<last_name>Alvord</last_name>
<last_name>Alfred</last_name>
<last_name>Alice</last_name>
<last_name>Alverston</last_name>
<last_name>Alverton</last_name>
<last_name>Alvin</last_name>
<last_name>Alwin</last_name>
<last_name>Amherst</last_name>
<last_name>Andarton</last_name>
<last_name>Arthur</last_name>
<last_name>Arthur</last_name>
<last_name>Ashby</last_name>
<last_name>Ashford</last_name>
<last_name>Ashley</last_name>
<last_name>Askew</last_name>
<last_name>Astley</last_name>
<last_name>Aston</last_name>
<last_name>Atherton</last_name>
<last_name>Audley</last_name>
<last_name>Bagley</last_name>
<last_name>Baker</last_name>
<last_name>Banvard</last_name>
<last_name>Barclay</last_name>
<last_name>Barras</last_name>
<last_name>Barton</last_name>
<last_name>Bath</last_name>
<last_name>Bathurst</last_name>
<last_name>Belden</last_name>
<last_name>Berkeley</last_name>
<last_name>Bernard</last_name>
<last_name>Barnard</last_name>
<last_name>Bliss</last_name>
<last_name>Bodley</last_name>
<last_name>Bolster</last_name>
<last_name>Borland</last_name>
<last_name>Boscawen</last_name>
<last_name>Bostwick</last_name>
<last_name>Botolph</last_name>
<last_name>Bowne</last_name>
<last_name>Brendon</last_name>
<last_name>Brenin</last_name>
<last_name>Breton</last_name>
<last_name>Bristed</last_name>
<last_name>Bristow</last_name>
<last_name>Buckingham</last_name>
<last_name>Buckminster</last_name>
<last_name>Buckston</last_name>
<last_name>Buxton</last_name>
<last_name>Burby</last_name>
<last_name>Burr</last_name>
<last_name>Byington</last_name>
<last_name>Canning</last_name>
<last_name>Carwin</last_name>
<last_name>Channing</last_name>
<last_name>Chickering</last_name>
<last_name>Chittenden</last_name>
<last_name>Clapp</last_name>
<last_name>Cleaver</last_name>
<last_name>Clough</last_name>
<last_name>Clowes</last_name>
<last_name>Colburn</last_name>
<last_name>Conway</last_name>
<last_name>Coombs</last_name>
<last_name>Corwin</last_name>
<last_name>Craig</last_name>
<last_name>Crittenden</last_name>
<last_name>Cromwell</last_name>
<last_name>Cudney</last_name>
<last_name>Cutting</last_name>
<last_name>Denton</last_name>
<last_name>Dinton</last_name>
<last_name>Dering</last_name>
<last_name>Dillingham</last_name>
<last_name>Dixie</last_name>
<last_name>Dunlevy</last_name>
<last_name>Dunstan</last_name>
<last_name>Dunstan</last_name>
<last_name>Eaton</last_name>
<last_name>Edith</last_name>
<last_name>Edmund</last_name>
<last_name>Edward</last_name>
<last_name>Edwin</last_name>
<last_name>Eggleston</last_name>
<last_name>Emerson</last_name>
<last_name>Ethelbert</last_name>
<last_name>Ethelstan</last_name>
<last_name>Everard</last_name>
<last_name>Eytinge</last_name>
<last_name>Fagg</last_name>
<last_name>Falkland</last_name>
<last_name>Foss</last_name>
<last_name>Fry</last_name>
<last_name>Fulke</last_name>
<last_name>Garrah</last_name>
<last_name>Gifford</last_name>
<last_name>Giffard</last_name>
<last_name>Gilly</last_name>
<last_name>Glasgow</last_name>
<last_name>Godard</last_name>
<last_name>Godolphin</last_name>
<last_name>Golly</last_name>
<last_name>Gollah</last_name>
<last_name>Goodrich</last_name>
<last_name>Granger</last_name>
<last_name>Griffith</last_name>
<last_name>Gunn</last_name>
<last_name>Goon</last_name>
<last_name>Hainsworth</last_name>
<last_name>Haynsworth</last_name>
<last_name>Halifax</last_name>
<last_name>Hansel</last_name>
<last_name>Haw</last_name>
<last_name>Hawes</last_name>
<last_name>Hayman</last_name>
<last_name>Hazard</last_name>
<last_name>Heaton</last_name>
<last_name>Henry</last_name>
<last_name>Herbert</last_name>
<last_name>Herbert</last_name>
<last_name>Herman</last_name>
<last_name>Hogan</last_name>
<last_name>Holcombe</last_name>
<last_name>Holtcombe</last_name>
<last_name>Hoskins</last_name>
<last_name>Haskins</last_name>
<last_name>Howell</last_name>
<last_name>Huntington</last_name>
<last_name>Hurst</last_name>
<last_name>Keigwin</last_name>
<last_name>Kennicot</last_name>
<last_name>Kerr</last_name>
<last_name>Lamport</last_name>
<last_name>Landon</last_name>
<last_name>Lawley</last_name>
<last_name>McHard</last_name>
<last_name>McHarg</last_name>
<last_name>Morgan</last_name>
<last_name>Newbury</last_name>
<last_name>Ockley</last_name>
<last_name>Ogden</last_name>
<last_name>Osborn</last_name>
<last_name>Oswald</last_name>
<last_name>Paddock</last_name>
<last_name>Pillings</last_name>
<last_name>Pennant</last_name>
<last_name>Plympton</last_name>
<last_name>Ralph</last_name>
<last_name>Ralph</last_name>
<last_name>Ramsden</last_name>
<last_name>Randal</last_name>
<last_name>Randal</last_name>
<last_name>Randolph</last_name>
<last_name>Randulph</last_name>
<last_name>Redden</last_name>
<last_name>Rodden</last_name>
<last_name>Reed</last_name>
<last_name>Read</last_name>
<last_name>Reese</last_name>
<last_name>Rheese</last_name>
<last_name>Reinard</last_name>
<last_name>Reynard</last_name>
<last_name>Reynold</last_name>
<last_name>Reynolds</last_name>
<last_name>Richard</last_name>
<last_name>Richard</last_name>
<last_name>Ricard</last_name>
<last_name>Richmond</last_name>
<last_name>Robert</last_name>
<last_name>Roberts</last_name>
<last_name>Roderick</last_name>
<last_name>Roland</last_name>
<last_name>Rollin</last_name>
<last_name>Rodland</last_name>
<last_name>Rowena</last_name>
<last_name>Rowle</last_name>
<last_name>Rowley</last_name>
<last_name>Salisbury</last_name>
<last_name>Sarisbury</last_name>
<last_name>Scarborough</last_name>
<last_name>Schellden</last_name>
<last_name>Sears</last_name>
<last_name>Sellick</last_name>
<last_name>Sheldon</last_name>
<last_name>Sigismund</last_name>
<last_name>Skeffington</last_name>
<last_name>Skidmore</last_name>
<last_name>Scudmore</last_name>
<last_name>Stanwood</last_name>
<last_name>Stapleton</last_name>
<last_name>Stratton</last_name>
<last_name>Stretton</last_name>
<last_name>Swithin</last_name>
<last_name>Theobald</last_name>
<last_name>Theodoric</last_name>
<last_name>Trelawney</last_name>
<last_name>Tremaine</last_name>
<last_name>Trevelyan</last_name>
<last_name>Truax</last_name>
<last_name>Urran</last_name>
<last_name>Waldgrave</last_name>
<last_name>Walter</last_name>
<last_name>Weller</last_name>
<last_name>Whealdon</last_name>
<last_name>Whieldon</last_name>
<last_name>Whiting</last_name>
<last_name>Whitney</last_name>
<last_name>Wibert</last_name>
<last_name>Wickham</last_name>
<last_name>Wickliff</last_name>
<last_name>Wimund</last_name>
<last_name>Winchcombe</last_name>
<last_name>Worth</last_name>
<last_name>Yule</last_name>
<last_name>Abercrombie</last_name>
<last_name>Aberdeen</last_name>
<last_name>Aberdene</last_name>
<last_name>Abernethy</last_name>
<last_name>Adair</last_name>
<last_name>Affleck</last_name>
<last_name>Agar</last_name>
<last_name>Ardal</last_name>
<last_name>Ardgall</last_name>
<last_name>Athol</last_name>
<last_name>Bain</last_name>
<last_name>Baine</last_name>
<last_name>Ballard</last_name>
<last_name>Bard</last_name>
<last_name>Barr</last_name>
<last_name>Blair</last_name>
<last_name>Bunyan</last_name>
<last_name>Callaghan</last_name>
<last_name>Campbell</last_name>
<last_name>Connell</last_name>
<last_name>Connelly</last_name>
<last_name>Connor</last_name>
<last_name>Conor</last_name>
<last_name>Conway</last_name>
<last_name>Cormac</last_name>
<last_name>Dana</last_name>
<last_name>Donald</last_name>
<last_name>Donell</last_name>
<last_name>Donelly</last_name>
<last_name>Dougall</last_name>
<last_name>Driscol</last_name>
<last_name>Ennis</last_name>
<last_name>Ennes</last_name>
<last_name>Innis</last_name>
<last_name>Fergus</last_name>
<last_name>Flaherty</last_name>
<last_name>Hammel</last_name>
<last_name>Kavanagh</last_name>
<last_name>Kevin</last_name>
<last_name>Macauley</last_name>
<last_name>Macaula</last_name>
<last_name>McFadden</last_name>
<last_name>McGooken</last_name>
<last_name>McGucken</last_name>
<last_name>McGrath</last_name>
<last_name>McGraw</last_name>
<last_name>McKibben</last_name>
<last_name>McKie</last_name>
<last_name>McNamara</last_name>
<last_name>Mochrie</last_name>
<last_name>O'Callaghan</last_name>
<last_name>Owen</last_name>
<last_name>Sullivan</last_name>
<first_name>Jacob</first_name>
<first_name>Michael</first_name>
<first_name>Joshua</first_name>
<first_name>Matthew</first_name>
<first_name>Ethan</first_name>
<first_name>Joseph</first_name>
<first_name>Andrew</first_name>
<first_name>Christopher</first_name>
<first_name>Daniel</first_name>
<first_name>Nicholas</first_name>
<first_name>William</first_name>
<first_name>Anthony</first_name>
<first_name>David</first_name>
<first_name>Tyler</first_name>
<first_name>Alexander</first_name>
<first_name>Ryan</first_name>
<first_name>John</first_name>
<first_name>James</first_name>
<first_name>Zachary</first_name>
<first_name>Brandon</first_name>
<first_name>Jonathan</first_name>
<first_name>Justin</first_name>
<first_name>Christian</first_name>
<first_name>Dylan</first_name>
<first_name>Samuel</first_name>
<first_name>Austin</first_name>
<first_name>Jose</first_name>
<first_name>Benjamin</first_name>
<first_name>Nathan</first_name>
<first_name>Logan</first_name>
<first_name>Kevin</first_name>
<first_name>Gabriel</first_name>
<first_name>Robert</first_name>
<first_name>Noah</first_name>
<first_name>Caleb</first_name>
<first_name>Thomas</first_name>
<first_name>Jordan</first_name>
<first_name>Hunter</first_name>
<first_name>Cameron</first_name>
<first_name>Kyle</first_name>
<first_name>Elijah</first_name>
<first_name>Jason</first_name>
<first_name>Jack</first_name>
<first_name>Aaron</first_name>
<first_name>Isaiah</first_name>
<first_name>Angel</first_name>
<first_name>Luke</first_name>
<first_name>Connor</first_name>
<first_name>Luis</first_name>
<first_name>Jacob</first_name>
<first_name>Brian</first_name>
<first_name>Juan</first_name>
<first_name>Jackson</first_name>
<first_name>Eric</first_name>
<first_name>Mason</first_name>
<first_name>Adam</first_name>
<first_name>Evan</first_name>
<first_name>Carlos</first_name>
<first_name>Charles</first_name>
<first_name>Sean</first_name>
<first_name>Gavin</first_name>
<first_name>Alex</first_name>
<first_name>Aidan</first_name>
<first_name>Bryan</first_name>
<first_name>Nathaniel</first_name>
<first_name>Ian</first_name>
<first_name>Steven</first_name>
<first_name>Cole</first_name>
<first_name>Timothy</first_name>
<first_name>Cody</first_name>
<first_name>Adrian</first_name>
<first_name>Seth</first_name>
<first_name>Sebastian</first_name>
<first_name>Devin</first_name>
<first_name>Lucas</first_name>
<first_name>Richard</first_name>
<first_name>Blake</first_name>
<first_name>Julian</first_name>
<first_name>Patrick</first_name>
<first_name>Trevor</first_name>
<first_name>Jared</first_name>
<first_name>Miguel</first_name>
<first_name>Chase</first_name>
<first_name>Dominic</first_name>
<first_name>Antonio</first_name>
<first_name>Xavier</first_name>
<first_name>Jeremiah</first_name>
<first_name>Jaden</first_name>
<first_name>Alejandro</first_name>
<first_name>Jeremy</first_name>
<first_name>Jesse</first_name>
<first_name>Garrett</first_name>
<first_name>Diego</first_name>
<first_name>Mark</first_name>
<first_name>Owen</first_name>
<first_name>Hayden</first_name>
<first_name>Victor</first_name>
<first_name>Bryce</first_name>
<first_name>Riley</first_name>
</names>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,451 @@
<names>
<first_name>Lucas</first_name>
<first_name>Lukas</first_name>
<first_name>Nicklas</first_name>
<first_name>Niclas</first_name>
<first_name>Niklas</first_name>
<first_name>Tim</first_name>
<first_name>Philip</first_name>
<first_name>Philipp</first_name>
<first_name>Phillip</first_name>
<first_name>Jonas</first_name>
<first_name>Tom</first_name>
<first_name>Leon</first_name>
<first_name>Marvin</first_name>
<first_name>Maximilian</first_name>
<first_name>Florian</first_name>
<first_name>Daniel</first_name>
<first_name>Jannik</first_name>
<first_name>Yannick</first_name>
<first_name>Yannik</first_name>
<first_name>Nico</first_name>
<first_name>Niko</first_name>
<first_name>Felix</first_name>
<first_name>Finn</first_name>
<first_name>Fynn</first_name>
<first_name>Lennard</first_name>
<first_name>Lennart</first_name>
<first_name>Tobias</first_name>
<first_name>Alexander</first_name>
<first_name>Kevin</first_name>
<first_name>Moritz</first_name>
<first_name>Pascal</first_name>
<first_name>Jacob</first_name>
<first_name>Jakob</first_name>
<first_name>Jan</first_name>
<first_name>Ole</first_name>
<first_name>Dominik</first_name>
<first_name>Fabian</first_name>
<first_name>Luca</first_name>
<first_name>Luka</first_name>
<first_name>Simon</first_name>
<first_name>Julian</first_name>
<first_name>Justin</first_name>
<first_name>Marcel</first_name>
<first_name>Nicholas</first_name>
<first_name>Nicolas</first_name>
<first_name>Nikolas</first_name>
<first_name>David</first_name>
<first_name>Jonathan</first_name>
<first_name>Lasse</first_name>
<first_name>Malte</first_name>
<first_name>Timo</first_name>
<first_name>Eric</first_name>
<first_name>Erik</first_name>
<first_name>Max</first_name>
<first_name>Patrick</first_name>
<first_name>Paul</first_name>
<first_name>Nils</first_name>
<first_name>Robin</first_name>
<first_name>Sebastian</first_name>
<first_name>Maik</first_name>
<first_name>Mike</first_name>
<first_name>Vincent</first_name>
<first_name>Dennis</first_name>
<first_name>Johannes</first_name>
<first_name>Joshua</first_name>
<first_name>Christian</first_name>
<first_name>Julius</first_name>
<first_name>Laurin</first_name>
<first_name>Maurice</first_name>
<first_name>Oliver</first_name>
<first_name>Ben</first_name>
<first_name>Benjamin</first_name>
<first_name>Lars</first_name>
<first_name>Anton</first_name>
<first_name>Christoph</first_name>
<first_name>Fabio</first_name>
<first_name>Hannes</first_name>
<first_name>Linus</first_name>
<first_name>Luis</first_name>
<first_name>Marc</first_name>
<first_name>Mika</first_name>
<first_name>Nick</first_name>
<first_name>Till </first_name>
<first_name>Torben</first_name>
<first_name>Björn</first_name>
<first_name>Elias</first_name>
<first_name>Robert</first_name>
<first_name>Bastian</first_name>
<first_name>Leonard</first_name>
<first_name>Michel</first_name>
<first_name>Mirco</first_name>
<first_name>Mirko</first_name>
<first_name>Noah</first_name>
<first_name>Rene</first_name>
<first_name>Thorben</first_name>
<first_name>Timon</first_name>
<first_name>Valentin</first_name>
<first_name>Benedikt</first_name>
<first_name>Bjarne</first_name>
<first_name>Christopher</first_name>
<first_name>Constantin</first_name>
<first_name>Hendrik</first_name>
<first_name>Jason</first_name>
<first_name>Jasper</first_name>
<first_name>Jeremy</first_name>
<first_name>Konstantin </first_name>
<first_name>Marco</first_name>
<first_name>Martin </first_name>
<first_name>Phil</first_name>
<first_name>Richard</first_name>
<first_name>Sascha</first_name>
<first_name>Steven</first_name>
<first_name>Sven</first_name>
<first_name>Thore</first_name>
<first_name>Aaron</first_name>
<first_name>Andreas</first_name>
<first_name>Cedric</first_name>
<last_name>Müller</last_name>
<last_name>Albrecht</last_name>
<last_name>Schmidt</last_name>
<last_name>Bauer</last_name>
<last_name>Schneider</last_name>
<last_name>Baumann</last_name>
<last_name>Fischer</last_name>
<last_name>Beck</last_name>
<last_name>Meyer</last_name>
<last_name>Becker</last_name>
<last_name>Weber</last_name>
<last_name>Berger</last_name>
<last_name>Wagner</last_name>
<last_name>Bergmann</last_name>
<last_name>Becker</last_name>
<last_name>Böhm</last_name>
<last_name>Schulz</last_name>
<last_name>Brandt</last_name>
<last_name>Hoffmann</last_name>
<last_name>Braun</last_name>
<last_name>Schäfer</last_name>
<last_name>Busch</last_name>
<last_name>Koch</last_name>
<last_name>Dietrich</last_name>
<last_name>Bauer</last_name>
<last_name>Engel</last_name>
<last_name>Richter</last_name>
<last_name>Ernst</last_name>
<last_name>Klein</last_name>
<last_name>Fischer</last_name>
<last_name>Schröder</last_name>
<last_name>Frank</last_name>
<last_name>Wolf</last_name>
<last_name>Franke</last_name>
<last_name>Neumann</last_name>
<last_name>Friedrich</last_name>
<last_name>Schwarz</last_name>
<last_name>Fuchs</last_name>
<last_name>Zimmermann</last_name>
<last_name>Graf</last_name>
<last_name>Krüger</last_name>
<last_name>Groß</last_name>
<last_name>Braun</last_name>
<last_name>Günther</last_name>
<last_name>Hofmann</last_name>
<last_name>Haas</last_name>
<last_name>Schmitz</last_name>
<last_name>Hahn</last_name>
<last_name>Hartmann</last_name>
<last_name>Hartmann</last_name>
<last_name>Lange</last_name>
<last_name>Heinrich</last_name>
<last_name>Schmitt</last_name>
<last_name>Herrmann</last_name>
<last_name>Werner</last_name>
<last_name>Hoffmann</last_name>
<last_name>Krause</last_name>
<last_name>Hofmann</last_name>
<last_name>Meier</last_name>
<last_name>Horn</last_name>
<last_name>Schmid</last_name>
<last_name>Huber</last_name>
<last_name>Lehmann</last_name>
<last_name>Jäger</last_name>
<last_name>Schulze</last_name>
<last_name>Jung</last_name>
<last_name>Maier</last_name>
<last_name>Kaiser</last_name>
<last_name>Köhler</last_name>
<last_name>Keller</last_name>
<last_name>Herrmann</last_name>
<last_name>Klein</last_name>
<last_name>Walter</last_name>
<last_name>Koch</last_name>
<last_name>Körtig</last_name>
<last_name>Köhler</last_name>
<last_name>Mayer</last_name>
<last_name>Körtig</last_name>
<last_name>Huber</last_name>
<last_name>Krämer</last_name>
<last_name>Kaiser</last_name>
<last_name>Kraus</last_name>
<last_name>Fuchs</last_name>
<last_name>Krause</last_name>
<last_name>Peters</last_name>
<last_name>Krüger</last_name>
<last_name>Möller</last_name>
<last_name>Kuhn</last_name>
<last_name>Scholz</last_name>
<last_name>Kühn</last_name>
<last_name>Lang</last_name>
<last_name>Lang</last_name>
<last_name>Weiß</last_name>
<last_name>Lange</last_name>
<last_name>Jung</last_name>
<last_name>Lehmann</last_name>
<last_name>Hahn</last_name>
<last_name>Lorenz</last_name>
<last_name>Vogel</last_name>
<last_name>Ludwig</last_name>
<last_name>Friedrich</last_name>
<last_name>Maier</last_name>
<last_name>Günther</last_name>
<last_name>Martin</last_name>
<last_name>Keller</last_name>
<last_name>Mayer</last_name>
<last_name>Schubert</last_name>
<last_name>Meier</last_name>
<last_name>Berger</last_name>
<last_name>Meyer</last_name>
<last_name>Frank</last_name>
<last_name>Möller</last_name>
<last_name>Roth</last_name>
<last_name>Müller</last_name>
<last_name>Beck</last_name>
<last_name>Neumann</last_name>
<last_name>Winkler</last_name>
<last_name>Otto</last_name>
<last_name>Lorenz</last_name>
<last_name>Peters</last_name>
<last_name>Baumann</last_name>
<last_name>Pfeiffer</last_name>
<last_name>Albrecht</last_name>
<last_name>Pohl</last_name>
<last_name>Ludwig</last_name>
<last_name>Richter</last_name>
<last_name>Franke</last_name>
<last_name>Roth</last_name>
<last_name>Simon</last_name>
<last_name>Sauer</last_name>
<last_name>Böhm</last_name>
<last_name>Schäfer</last_name>
<last_name>Schuster</last_name>
<last_name>Schmid</last_name>
<last_name>Schumacher</last_name>
<last_name>Schmidt</last_name>
<last_name>Kraus</last_name>
<last_name>Schmitt</last_name>
<last_name>Winter</last_name>
<last_name>Schmitz</last_name>
<last_name>Otto</last_name>
<last_name>Schneider</last_name>
<last_name>Krämer</last_name>
<last_name>Scholz</last_name>
<last_name>Stein</last_name>
<last_name>Schreiber</last_name>
<last_name>Vogt</last_name>
<last_name>Schröder</last_name>
<last_name>Martin</last_name>
<last_name>Schubert</last_name>
<last_name>Jäger</last_name>
<last_name>Schulte</last_name>
<last_name>Groß</last_name>
<last_name>Schulz</last_name>
<last_name>Sommer</last_name>
<last_name>Schulze</last_name>
<last_name>Brandt</last_name>
<last_name>Schumacher</last_name>
<last_name>Haas</last_name>
<last_name>Schuster</last_name>
<last_name>Heinrich</last_name>
<last_name>Schwarz</last_name>
<last_name>Seidel</last_name>
<last_name>Seidel</last_name>
<last_name>Schreiber</last_name>
<last_name>Simon</last_name>
<last_name>Schulte</last_name>
<last_name>Sommer</last_name>
<last_name>Graf</last_name>
<last_name>Stein</last_name>
<last_name>Dietrich</last_name>
<last_name>Thomas</last_name>
<last_name>Ziegler</last_name>
<last_name>Vogel</last_name>
<last_name>Engel</last_name>
<last_name>Vogt</last_name>
<last_name>Kühn</last_name>
<last_name>Voigt</last_name>
<last_name>Kuhn</last_name>
<last_name>Wagner</last_name>
<last_name>Pohl</last_name>
<last_name>Walter</last_name>
<last_name>Horn</last_name>
<last_name>Weber</last_name>
<last_name>Thomas</last_name>
<last_name>Weiß</last_name>
<last_name>Busch</last_name>
<last_name>Werner</last_name>
<last_name>Wolff</last_name>
<last_name>Winkler</last_name>
<last_name>Sauer</last_name>
<last_name>Winter</last_name>
<last_name>Bergmann</last_name>
<last_name>Wolf</last_name>
<last_name>Pfeiffer</last_name>
<last_name>Wolff</last_name>
<last_name>Voigt</last_name>
<last_name>Ziegler</last_name>
<last_name>Ernst</last_name>
<last_name>Zimmermann</last_name>
<last_name>Aker</last_name>
<last_name>Anna</last_name>
<last_name>August</last_name>
<last_name>Aust</last_name>
<last_name>Bäuerle</last_name>
<last_name>Bäuerlein</last_name>
<last_name>Behnke</last_name>
<last_name>Bleeke</last_name>
<last_name>Bleeker</last_name>
<last_name>Blochwitz</last_name>
<last_name>Bohlmann</last_name>
<last_name>Bothe</last_name>
<last_name>Bretschneider</last_name>
<last_name>Brettschneider</last_name>
<last_name>Breyer</last_name>
<last_name>Buesing</last_name>
<last_name>Busch</last_name>
<last_name>Christmann</last_name>
<last_name>Diegelmann</last_name>
<last_name>Diener</last_name>
<last_name>Dietrich</last_name>
<last_name>Dittmar</last_name>
<last_name>Doering</last_name>
<last_name>Duehring</last_name>
<last_name>Engeldinger</last_name>
<last_name>Erb</last_name>
<last_name>Everding</last_name>
<last_name>Falger</last_name>
<last_name>Fettkenheuer</last_name>
<last_name>Fischer</last_name>
<last_name>Fleischer</last_name>
<last_name>Fleischhauer</last_name>
<last_name>Fleischmann</last_name>
<last_name>Franke</last_name>
<last_name>Fuhr</last_name>
<last_name>Geisler</last_name>
<last_name>Geissler</last_name>
<last_name>Guschke</last_name>
<last_name>Haegler</last_name>
<last_name>Hagler</last_name>
<last_name>Hausmann</last_name>
<last_name>Haussmann</last_name>
<last_name>Hedtke</last_name>
<last_name>Hegler</last_name>
<last_name>Hengel</last_name>
<last_name>Heinitz</last_name>
<last_name>Herting</last_name>
<last_name>Herzberg</last_name>
<last_name>Herzog</last_name>
<last_name>Hesselbarth</last_name>
<last_name>Hesselschwerdt</last_name>
<last_name>Heusmann</last_name>
<last_name>Huesemann</last_name>
<last_name>Huesmann</last_name>
<last_name>Huismann</last_name>
<last_name>Husemann</last_name>
<last_name>Husmann</last_name>
<last_name>Hussmann</last_name>
<last_name>Jaeckel</last_name>
<last_name>Jansen</last_name>
<last_name>Jauernig</last_name>
<last_name>Jeckel</last_name>
<last_name>Juergen</last_name>
<last_name>Juergens</last_name>
<last_name>Kaehlert</last_name>
<last_name>Kaffenberger</last_name>
<last_name>Keil</last_name>
<last_name>Kies</last_name>
<last_name>Kirschenmann</last_name>
<last_name>Kliese</last_name>
<last_name>Knobloch</last_name>
<last_name>Kuhnle</last_name>
<last_name>Liebscher</last_name>
<last_name>Limbach</last_name>
<last_name>Limbacher</last_name>
<last_name>Linnemann</last_name>
<last_name>Linnenkohl</last_name>
<last_name>Lohmeier</last_name>
<last_name>Lohwasser</last_name>
<last_name>Luedke</last_name>
<last_name>Ludwig</last_name>
<last_name>Lüneburg</last_name>
<last_name>Lutz</last_name>
<last_name>Lux</last_name>
<last_name>Manthei</last_name>
<last_name>Manthey</last_name>
<last_name>Mauss - Mauß</last_name>
<last_name>Mausz</last_name>
<last_name>Metzger</last_name>
<last_name>Metzler</last_name>
<last_name>Metzner</last_name>
<last_name>Moosbrugger</last_name>
<last_name>Mühlberg</last_name>
<last_name>Mühlberger</last_name>
<last_name>Muff</last_name>
<last_name>Musolff</last_name>
<last_name>Nerger</last_name>
<last_name>Neusel</last_name>
<last_name>Ney</last_name>
<last_name>Nitz</last_name>
<last_name>Nolte</last_name>
<last_name>Pappe</last_name>
<last_name>Petersen</last_name>
<last_name>Sacher</last_name>
<last_name>Schlachter</last_name>
<last_name>Schmarbeck</last_name>
<last_name>Schmidkonz</last_name>
<last_name>Schmidt</last_name>
<last_name>Seifert</last_name>
<last_name>Sell</last_name>
<last_name>Sendner</last_name>
<last_name>Speidel</last_name>
<last_name>Stierle</last_name>
<last_name>Stumpf</last_name>
<last_name>Sulzer</last_name>
<last_name>Tönjes</last_name>
<last_name>Tönnies</last_name>
<last_name>Treiber</last_name>
<last_name>Vesper</last_name>
<last_name>Volk</last_name>
<last_name>Wacker</last_name>
<last_name>Weber</last_name>
<last_name>Wedemann</last_name>
<last_name>Weiland</last_name>
<last_name>Witzel</last_name>
<last_name>Wolff</last_name>
<last_name>Wolgast</last_name>
<last_name>Wurster</last_name>
<last_name>Zieren</last_name>
<last_name>Zinn</last_name>
<last_name>Zwilling</last_name>
</names>