mirror of
https://github.com/tstellar/bygfoot.git
synced 2025-01-31 16:04:48 +01:00
League stats done.
This commit is contained in:
parent
681c112236
commit
fdcba17f18
@ -52,6 +52,7 @@ bygfoot_SOURCES = \
|
||||
xml_loadsave_cup.c cup.h file.h misc.h table.h team.h xml.h xml_loadsave_cup.h xml_loadsave_fixtures.h xml_loadsave_table.h xml_loadsave_teams.h \
|
||||
xml_loadsave_fixtures.c file.h fixture.h misc.h team.h xml.h xml_loadsave_fixtures.h \
|
||||
xml_loadsave_league.c file.h league.h misc.h xml.h xml_loadsave_fixtures.h xml_loadsave_league.h xml_loadsave_table.h xml_loadsave_teams.h \
|
||||
xml_loadsave_league_stat.c file.h misc.h stat.h team.h xml_loadsave_league_stat.h xml.h \
|
||||
xml_loadsave_live_game.c cup.h file.h fixture.h league.h live_game.h misc.h variables.h xml.h xml_loadsave_live_game.h \
|
||||
xml_loadsave_table.c file.h misc.h team.h xml.h xml_loadsave_table.h \
|
||||
xml_loadsave_teams.c file.h misc.h player.h team.h xml.h xml_loadsave_teams.h \
|
||||
|
@ -45,11 +45,7 @@ league_new(gboolean new_id)
|
||||
new.first_week = new.week_gap = 1;
|
||||
new.yellow_red = 1000;
|
||||
|
||||
new.stats.clid = new.id;
|
||||
new.stats.teams_off = g_array_new(FALSE, FALSE, sizeof(Stat));
|
||||
new.stats.teams_def = g_array_new(FALSE, FALSE, sizeof(Stat));
|
||||
new.stats.player_scorers = g_array_new(FALSE, FALSE, sizeof(Stat));
|
||||
new.stats.player_goalies = g_array_new(FALSE, FALSE, sizeof(Stat));
|
||||
new.stats = stat_league_new(new.id);
|
||||
|
||||
return new;
|
||||
}
|
||||
|
@ -937,10 +937,7 @@ live_game_event_duel(void)
|
||||
const_float("float_live_game_score_team_exponent"));
|
||||
|
||||
if(new.time != LIVE_GAME_UNIT_TIME_PENALTIES)
|
||||
{
|
||||
player_games_goals_set(attacker, match->fix->clid, PLAYER_VALUE_SHOTS, 1, TRUE);
|
||||
player_games_goals_set(goalie, match->fix->clid, PLAYER_VALUE_SHOTS, 1, TRUE);
|
||||
}
|
||||
|
||||
if(rndom < scoring_prob)
|
||||
{
|
||||
@ -957,6 +954,11 @@ live_game_event_duel(void)
|
||||
else
|
||||
new.event.type = math_gauss_disti(LIVE_GAME_EVENT_POST, LIVE_GAME_EVENT_CROSS_BAR);
|
||||
|
||||
if(new.time != LIVE_GAME_UNIT_TIME_PENALTIES &&
|
||||
(new.event.type == LIVE_GAME_EVENT_SAVE ||
|
||||
new.event.type == LIVE_GAME_EVENT_GOAL))
|
||||
player_games_goals_set(goalie, match->fix->clid, PLAYER_VALUE_SHOTS, 1, TRUE);
|
||||
|
||||
g_array_append_val(unis, new);
|
||||
|
||||
live_game_finish_unit();
|
||||
|
15
src/stat.c
15
src/stat.c
@ -6,6 +6,21 @@
|
||||
#include "team.h"
|
||||
#include "variables.h"
|
||||
|
||||
/** Return a newly allocated league stat with given clid. */
|
||||
LeagueStat
|
||||
stat_league_new(gint clid)
|
||||
{
|
||||
LeagueStat new;
|
||||
|
||||
new.clid = clid;
|
||||
new.teams_off = g_array_new(FALSE, FALSE, sizeof(Stat));
|
||||
new.teams_def = g_array_new(FALSE, FALSE, sizeof(Stat));
|
||||
new.player_scorers = g_array_new(FALSE, FALSE, sizeof(Stat));
|
||||
new.player_goalies = g_array_new(FALSE, FALSE, sizeof(Stat));
|
||||
|
||||
return new;
|
||||
}
|
||||
|
||||
/** Update the league stats. */
|
||||
void
|
||||
stat_update_leagues(void)
|
||||
|
@ -2,8 +2,12 @@
|
||||
#define STAT_H
|
||||
|
||||
#include "bygfoot.h"
|
||||
#include "league_struct.h"
|
||||
#include "stat_struct.h"
|
||||
|
||||
LeagueStat
|
||||
stat_league_new(gint clid);
|
||||
|
||||
GArray*
|
||||
stat_update_league_teams(const GArray *teams, gint compare_type);
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "xml_loadsave_cup.h"
|
||||
#include "xml_loadsave_fixtures.h"
|
||||
#include "xml_loadsave_league.h"
|
||||
#include "xml_loadsave_league_stat.h"
|
||||
#include "xml_loadsave_live_game.h"
|
||||
#include "xml_loadsave_table.h"
|
||||
#include "xml_loadsave_teams.h"
|
||||
@ -65,6 +66,7 @@ xml_load_leagues(const gchar *dirname, const gchar *basename)
|
||||
if(!g_str_has_suffix(((GString*)g_ptr_array_index(dir_contents, i))->str, "_table.xml") &&
|
||||
!g_str_has_suffix(((GString*)g_ptr_array_index(dir_contents, i))->str, "_fixtures.xml") &&
|
||||
!g_str_has_suffix(((GString*)g_ptr_array_index(dir_contents, i))->str, "_teams.xml") &&
|
||||
!g_str_has_suffix(((GString*)g_ptr_array_index(dir_contents, i))->str, "_stat.xml") &&
|
||||
!query_misc_string_contains(((GString*)g_ptr_array_index(dir_contents, i))->str, "_promcup"))
|
||||
xml_load_league(dirname, ((GString*)g_ptr_array_index(dir_contents, i))->str,
|
||||
dir_contents);
|
||||
@ -100,6 +102,9 @@ xml_load_league(const gchar *dirname, const gchar *basename, const GPtrArray *di
|
||||
sprintf(buf, "%s/%s_table.xml", dirname, prefix);
|
||||
xml_loadsave_table_read(buf, &lig(ligs->len - 1).table);
|
||||
|
||||
sprintf(buf, "%s/%s_stat.xml", dirname, prefix);
|
||||
xml_loadsave_league_stat_read(buf, &lig(ligs->len - 1).stats);
|
||||
|
||||
if(league_has_prom_games((&lig(ligs->len - 1))))
|
||||
{
|
||||
lig(ligs->len - 1).prom_rel.prom_games_cup = cup_new(FALSE);
|
||||
|
@ -39,6 +39,7 @@ enum XmlTags
|
||||
#define TAG_START_USERS 7000
|
||||
#define TAG_START_LIVE_GAME 8000
|
||||
#define TAG_START_TRANSFERS 9000
|
||||
#define TAG_START_LEAGUE_STAT 10000
|
||||
|
||||
#define xml_write_string(fil, string, tag, indent) fprintf(fil, "%s<_%d>%s</_%d>\n", indent, tag, string, tag)
|
||||
#define xml_write_g_string(fil, gstring, tag, indent) xml_write_string(fil, (gstring)->str, tag, indent)
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include "xml_loadsave_cup.h"
|
||||
#include "xml_loadsave_fixtures.h"
|
||||
#include "xml_loadsave_league.h"
|
||||
#include "xml_loadsave_league_stat.h"
|
||||
#include "xml_loadsave_table.h"
|
||||
#include "xml_loadsave_teams.h"
|
||||
|
||||
@ -208,6 +209,9 @@ xml_loadsave_league_write(const gchar *prefix, const League *league)
|
||||
sprintf(buf, "%s___league_%d_fixtures.xml", prefix, league->id);
|
||||
xml_loadsave_fixtures_write(buf, league->fixtures);
|
||||
|
||||
sprintf(buf, "%s___league_%d_stat.xml", prefix, league->id);
|
||||
xml_loadsave_league_stat_write(buf, &league->stats);
|
||||
|
||||
sprintf(buf, "%s___league_%d.xml", prefix, league->id);
|
||||
file_my_fopen(buf, "w", &fil, TRUE);
|
||||
|
||||
|
232
src/xml_loadsave_league_stat.c
Normal file
232
src/xml_loadsave_league_stat.c
Normal file
@ -0,0 +1,232 @@
|
||||
#include "file.h"
|
||||
#include "stat.h"
|
||||
#include "misc.h"
|
||||
#include "team.h"
|
||||
#include "xml.h"
|
||||
#include "xml_loadsave_league_stat.h"
|
||||
|
||||
enum
|
||||
{
|
||||
TAG_LEAGUE_STAT = TAG_START_LEAGUE_STAT,
|
||||
TAG_STAT_TEAMS_OFF,
|
||||
TAG_STAT_TEAMS_DEF,
|
||||
TAG_STAT_PLAYER_SCORERS,
|
||||
TAG_STAT_PLAYER_GOALIES,
|
||||
TAG_STAT,
|
||||
TAG_STAT_VALUE,
|
||||
TAG_STAT_VALUE_STRING,
|
||||
TAG_END
|
||||
};
|
||||
|
||||
gint state, in_state, valueidx;
|
||||
Stat new_stat;
|
||||
LeagueStat *lstat;
|
||||
|
||||
void
|
||||
xml_loadsave_league_stat_start_element (GMarkupParseContext *context,
|
||||
const gchar *element_name,
|
||||
const gchar **attribute_names,
|
||||
const gchar **attribute_values,
|
||||
gpointer user_data,
|
||||
GError **error)
|
||||
{
|
||||
gint i;
|
||||
gint tag = xml_get_tag_from_name(element_name);
|
||||
gboolean valid_tag = FALSE;
|
||||
|
||||
for(i=TAG_LEAGUE_STAT;i<TAG_END;i++)
|
||||
if(tag == i)
|
||||
{
|
||||
state = i;
|
||||
valid_tag = TRUE;
|
||||
}
|
||||
|
||||
for(i=TAG_NAME;i<=TAG_ROUND;i++)
|
||||
if(tag == i)
|
||||
{
|
||||
state = i;
|
||||
valid_tag = TRUE;
|
||||
}
|
||||
|
||||
if(tag == TAG_STAT)
|
||||
valueidx = 0;
|
||||
else if(tag == TAG_STAT_TEAMS_OFF ||
|
||||
tag == TAG_STAT_TEAMS_DEF ||
|
||||
tag == TAG_STAT_PLAYER_SCORERS ||
|
||||
tag == TAG_STAT_PLAYER_GOALIES)
|
||||
in_state = tag;
|
||||
|
||||
if(!valid_tag)
|
||||
g_warning("xml_loadsave_league_stat_start_element: unknown tag: %s; I'm in state %d\n",
|
||||
element_name, state);
|
||||
}
|
||||
|
||||
void
|
||||
xml_loadsave_league_stat_end_element (GMarkupParseContext *context,
|
||||
const gchar *element_name,
|
||||
gpointer user_data,
|
||||
GError **error)
|
||||
{
|
||||
GArray *stat_array = NULL;
|
||||
gint tag = xml_get_tag_from_name(element_name);
|
||||
|
||||
if(tag == TAG_ID ||
|
||||
tag == TAG_STAT_TEAMS_OFF ||
|
||||
tag == TAG_STAT_TEAMS_DEF ||
|
||||
tag == TAG_STAT_PLAYER_SCORERS ||
|
||||
tag == TAG_STAT_PLAYER_GOALIES)
|
||||
state = TAG_LEAGUE_STAT;
|
||||
else if(tag == TAG_STAT)
|
||||
{
|
||||
state = in_state;
|
||||
if(in_state == TAG_STAT_TEAMS_OFF)
|
||||
stat_array = lstat->teams_off;
|
||||
else if(in_state == TAG_STAT_TEAMS_DEF)
|
||||
stat_array = lstat->teams_def;
|
||||
else if(in_state == TAG_STAT_PLAYER_SCORERS)
|
||||
stat_array = lstat->player_scorers;
|
||||
else if(in_state == TAG_STAT_PLAYER_GOALIES)
|
||||
stat_array = lstat->player_goalies;
|
||||
else
|
||||
g_warning("xml_loadsave_league_stat_end_element: unknown in_state %d \n",
|
||||
in_state);
|
||||
g_array_append_val(stat_array, new_stat);
|
||||
}
|
||||
else if(tag == TAG_STAT_VALUE_STRING ||
|
||||
tag == TAG_STAT_VALUE ||
|
||||
tag == TAG_STAT_VALUE_STRING ||
|
||||
tag == TAG_TEAM_ID)
|
||||
{
|
||||
state = TAG_STAT;
|
||||
if(tag == TAG_STAT_VALUE)
|
||||
valueidx++;
|
||||
}
|
||||
else if(tag != TAG_LEAGUE_STAT)
|
||||
g_warning("xml_loadsave_league_stat_end_element: unknown tag: %s; I'm in state %d\n",
|
||||
element_name, state);
|
||||
}
|
||||
|
||||
void
|
||||
xml_loadsave_league_stat_text (GMarkupParseContext *context,
|
||||
const gchar *text,
|
||||
gsize text_len,
|
||||
gpointer user_data,
|
||||
GError **error)
|
||||
{
|
||||
gchar buf[SMALL];
|
||||
gint int_value = -1;
|
||||
|
||||
strncpy(buf, text, text_len);
|
||||
buf[text_len] = '\0';
|
||||
|
||||
int_value = (gint)g_ascii_strtod(buf, NULL);
|
||||
|
||||
if(state == TAG_ID)
|
||||
lstat->clid = int_value;
|
||||
else if(state == TAG_TEAM_ID)
|
||||
{
|
||||
new_stat.team_id = int_value;
|
||||
new_stat.tm = team_of_id(int_value);
|
||||
}
|
||||
else if(state == TAG_STAT_VALUE)
|
||||
{
|
||||
if(valueidx == 0)
|
||||
new_stat.value1 = int_value;
|
||||
else if(valueidx == 1)
|
||||
new_stat.value2 = int_value;
|
||||
else
|
||||
new_stat.value3 = int_value;
|
||||
}
|
||||
else if(state == TAG_STAT_VALUE_STRING)
|
||||
new_stat.value_string = g_string_new(buf);
|
||||
}
|
||||
|
||||
void
|
||||
xml_loadsave_league_stat_read(const gchar *filename, LeagueStat *league_stat)
|
||||
{
|
||||
GMarkupParser parser = {xml_loadsave_league_stat_start_element,
|
||||
xml_loadsave_league_stat_end_element,
|
||||
xml_loadsave_league_stat_text, NULL, NULL};
|
||||
GMarkupParseContext *context;
|
||||
gchar *file_contents;
|
||||
guint length;
|
||||
GError *error = NULL;
|
||||
|
||||
context =
|
||||
g_markup_parse_context_new(&parser, 0, NULL, NULL);
|
||||
|
||||
if(!g_file_get_contents(filename, &file_contents, &length, &error))
|
||||
{
|
||||
g_warning("xml_loadsave_league_stat_read: error reading file %s\n", filename);
|
||||
misc_print_error(&error, TRUE);
|
||||
}
|
||||
|
||||
lstat = league_stat;
|
||||
|
||||
if(g_markup_parse_context_parse(context, file_contents, length, &error))
|
||||
{
|
||||
g_markup_parse_context_end_parse(context, NULL);
|
||||
g_markup_parse_context_free(context);
|
||||
g_free(file_contents);
|
||||
}
|
||||
else
|
||||
{
|
||||
g_warning("xml_loadsave_league_stat_read: error parsing file %s\n", filename);
|
||||
misc_print_error(&error, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
xml_loadsave_league_stat_write(const gchar *filename, const LeagueStat *league_stat)
|
||||
{
|
||||
gint i;
|
||||
FILE *fil = NULL;
|
||||
|
||||
file_my_fopen(filename, "w", &fil, TRUE);
|
||||
|
||||
fprintf(fil, "<_%d>\n", TAG_LEAGUE_STAT);
|
||||
|
||||
xml_write_int(fil, league_stat->clid, TAG_ID, I0);
|
||||
|
||||
fprintf(fil, "<_%d>\n", TAG_STAT_TEAMS_OFF);
|
||||
for(i=0;i<league_stat->teams_off->len;i++)
|
||||
xml_loadsave_league_stat_write_stat(
|
||||
fil, &g_array_index(league_stat->teams_off, Stat, i));
|
||||
fprintf(fil, "</_%d>\n", TAG_STAT_TEAMS_OFF);
|
||||
|
||||
fprintf(fil, "<_%d>\n", TAG_STAT_TEAMS_DEF);
|
||||
for(i=0;i<league_stat->teams_def->len;i++)
|
||||
xml_loadsave_league_stat_write_stat(
|
||||
fil, &g_array_index(league_stat->teams_def, Stat, i));
|
||||
fprintf(fil, "</_%d>\n", TAG_STAT_TEAMS_DEF);
|
||||
|
||||
fprintf(fil, "<_%d>\n", TAG_STAT_PLAYER_SCORERS);
|
||||
for(i=0;i<league_stat->player_scorers->len;i++)
|
||||
xml_loadsave_league_stat_write_stat(
|
||||
fil, &g_array_index(league_stat->player_scorers, Stat, i));
|
||||
fprintf(fil, "</_%d>\n", TAG_STAT_PLAYER_SCORERS);
|
||||
|
||||
fprintf(fil, "<_%d>\n", TAG_STAT_PLAYER_GOALIES);
|
||||
for(i=0;i<league_stat->player_goalies->len;i++)
|
||||
xml_loadsave_league_stat_write_stat(
|
||||
fil, &g_array_index(league_stat->player_goalies, Stat, i));
|
||||
fprintf(fil, "</_%d>\n", TAG_STAT_PLAYER_GOALIES);
|
||||
|
||||
fprintf(fil, "</_%d>\n", TAG_LEAGUE_STAT);
|
||||
|
||||
fclose(fil);
|
||||
}
|
||||
|
||||
void
|
||||
xml_loadsave_league_stat_write_stat(FILE *fil, const Stat *stat)
|
||||
{
|
||||
fprintf(fil, "%s<_%d>\n", I1, TAG_STAT);
|
||||
|
||||
xml_write_int(fil, stat->team_id, TAG_TEAM_ID, I1);
|
||||
xml_write_int(fil, stat->value1, TAG_STAT_VALUE, I1);
|
||||
xml_write_int(fil, stat->value2, TAG_STAT_VALUE, I1);
|
||||
xml_write_int(fil, stat->value3, TAG_STAT_VALUE, I1);
|
||||
xml_write_g_string(fil, stat->value_string, TAG_STAT_VALUE_STRING, I1);
|
||||
|
||||
fprintf(fil, "%s</_%d>\n", I1, TAG_STAT);
|
||||
}
|
34
src/xml_loadsave_league_stat.h
Normal file
34
src/xml_loadsave_league_stat.h
Normal file
@ -0,0 +1,34 @@
|
||||
#ifndef XML_LOADSAVE_LEAGUE_STAT_H
|
||||
#define XML_LOADSAVE_LEAGUE_STAT_H
|
||||
|
||||
#include "bygfoot.h"
|
||||
#include "stat_struct.h"
|
||||
|
||||
void
|
||||
xml_loadsave_league_stat_write(const gchar *filename, const LeagueStat *league_stat);
|
||||
|
||||
void
|
||||
xml_loadsave_league_stat_write_stat(FILE *fil, const Stat *stat);
|
||||
|
||||
void
|
||||
xml_loadsave_league_stat_start_element (GMarkupParseContext *context,
|
||||
const gchar *element_name,
|
||||
const gchar **attribute_names,
|
||||
const gchar **attribute_values,
|
||||
gpointer user_data,
|
||||
GError **error);
|
||||
void
|
||||
xml_loadsave_league_stat_end_element (GMarkupParseContext *context,
|
||||
const gchar *element_name,
|
||||
gpointer user_data,
|
||||
GError **error);
|
||||
void
|
||||
xml_loadsave_league_stat_text (GMarkupParseContext *context,
|
||||
const gchar *text,
|
||||
gsize text_len,
|
||||
gpointer user_data,
|
||||
GError **error);
|
||||
void
|
||||
xml_loadsave_league_stat_read(const gchar *filename, LeagueStat *league_stat);
|
||||
|
||||
#endif
|
Loading…
x
Reference in New Issue
Block a user