1 /* 2 * Copyright (C) 1999 Rob Crittenden (rcrit@greyoak.com) 3 * Copyright (C) 1999,2000 Ross Combs (rocombs@cs.nmsu.edu) 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License 7 * as published by the Free Software Foundation; either version 2 8 * of the License, or (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 */ 19 #ifndef INCLUDED_LADDER_TYPES 20 #define INCLUDED_LADDER_TYPES 21 22 #ifdef LADDER_INTERNAL_ACCESS 23 24 #ifdef JUST_NEED_TYPES 25 # include "account.h" 26 # include "ladder_binary.h" 27 # include "common/tag.h" 28 #else 29 # define JUST_NEED_TYPES 30 # include "account.h" 31 # include "ladder_binary.h" 32 # include "common/tag.h" 33 # undef JUST_NEED_TYPES 34 #endif 35 36 #endif 37 38 #define W3_XPCALC_MAXLEVEL 50 39 40 41 typedef enum 42 { 43 ladder_sort_highestrated, 44 ladder_sort_mostwins, 45 ladder_sort_mostgames 46 } t_ladder_sort; 47 48 typedef enum 49 { 50 ladder_time_active, 51 ladder_time_current 52 } t_ladder_time; 53 54 typedef enum 55 { 56 ladder_id_none=0, 57 ladder_id_normal=1, 58 ladder_id_ironman=3, 59 ladder_id_solo=5, 60 ladder_id_team=6, 61 ladder_id_ffa=7 62 } t_ladder_id; 63 64 extern char * ladder_id_str[]; 65 66 typedef enum 67 { 68 ladder_option_none=0, 69 ladder_option_disconnectisloss=1 70 } t_ladder_option; 71 72 typedef struct ladder_internal 73 #ifdef LADDER_INTERNAL_ACCESS 74 { 75 int uid; 76 int xp; 77 int level; 78 unsigned int teamcount; /* needed for AT ladder */ 79 t_account *account; 80 struct ladder_internal *prev; /* user with less XP */ 81 struct ladder_internal *next; /* user with more XP */ 82 } 83 #endif 84 t_ladder_internal; 85 86 typedef struct ladder 87 #ifdef LADDER_INTERNAL_ACCESS 88 { 89 t_ladder_internal *first; 90 t_ladder_internal *last; 91 int dirty; /* 0==no changes, 1==something changed */ 92 t_binary_ladder_types type; 93 t_clienttag clienttag; 94 t_ladder_id ladder_id; 95 } 96 #endif 97 t_ladder; 98 99 #ifdef LADDER_INTERNAL_ACCESS 100 101 typedef struct 102 { 103 int startxp, neededxp, lossfactor, mingames; 104 } t_xplevel_entry; 105 106 typedef struct 107 { 108 int higher_winxp, higher_lossxp, lower_winxp, lower_lossxp; 109 } t_xpcalc_entry; 110 #endif 111 112 #endif 113 114 /*****/ 115 #ifndef JUST_NEED_TYPES 116 #ifndef INCLUDED_LADDER_PROTOS 117 #define INCLUDED_LADDER_PROTOS 118 119 #define JUST_NEED_TYPES 120 #include "account.h" 121 #include "game.h" 122 #include "ladder_calc.h" 123 #include "ladder_binary.h" 124 #include "common/tag.h" 125 #undef JUST_NEED_TYPES 126 127 extern int ladder_init_account(t_account * account, t_clienttag clienttag, t_ladder_id id); 128 extern int ladder_check_map(char const * mapname, t_game_maptype maptype, t_clienttag clienttag); 129 130 extern t_account * ladder_get_account_by_rank(unsigned int rank, t_ladder_sort lsort, t_ladder_time ltime, t_clienttag clienttag, t_ladder_id id); 131 extern unsigned int ladder_get_rank_by_account(t_account * account, t_ladder_sort lsort, t_ladder_time ltime, t_clienttag clienttag, t_ladder_id id); 132 133 extern int ladder_update(t_clienttag clienttag, t_ladder_id id, unsigned int count, t_account * * players, t_game_result * results, t_ladder_info * info, t_ladder_option opns); 134 135 extern int ladderlist_make_all_active(void); 136 137 extern int ladder_createxptable(const char *xplevelfile, const char *xpcalcfile); 138 extern void ladder_destroyxptable(void); 139 140 extern int ladder_war3_xpdiff(unsigned int winnerlevel, unsigned int looserlevel, int *, int *); 141 extern int ladder_war3_updatelevel(unsigned int oldlevel, int xp); 142 extern int ladder_war3_get_min_xp(unsigned int level); 143 extern int war3_get_maxleveldiff(void); 144 145 146 extern int war3_ladder_add(t_ladder *ladder, int uid, int xp, int level, t_account *account, unsigned int teamcount,t_clienttag clienttag); 147 /* this function adds a user to the ladder and keeps the ladder sorted 148 * returns 0 if everything is fine and -1 when error occured */ 149 150 extern int war3_ladder_update(t_ladder *ladder, int uid, int xp, int level, t_account *account, unsigned int teamcount); 151 /* this functions increases the xp of user with UID uid and corrects ranking 152 * returns 0 if everything is fine 153 * if user is not yet in ladder, he gets added automatically */ 154 155 extern int ladder_get_rank(t_ladder *ladder, int uid, unsigned int teamcount, t_clienttag clienttag); 156 /* this function returns the rank of a user with a given uid 157 * returns 0 if no such user is found */ 158 159 extern int ladder_update_all_accounts(void); 160 /* write the correct ranking information to all user accounts 161 * and cut down ladder size to given limit */ 162 163 extern int ladders_write_to_file(void); 164 /* outputs the ladders into files - for the guys that wanna make ladder pages */ 165 166 extern void ladders_init(void); 167 /* initialize the ladders */ 168 169 extern void ladders_destroy(void); 170 /* remove all ladder data from memory */ 171 172 extern void ladders_load_accounts_to_ladderlists(void); 173 /* enters all accounts from accountlist into the ladders */ 174 175 extern void ladder_reload_conf(void); 176 /* reloads relevant parameters from bnetd.conf (xml/std mode for ladder) */ 177 178 extern t_account * ladder_get_account(t_ladder *ladder,int rank, unsigned int * teamcount, t_clienttag clienttag); 179 /* returns the account that is on specified rank in specified ladder. also return teamcount for AT ladder 180 * returns NULL if this rank is still vacant */ 181 182 extern t_ladder * solo_ladder(t_clienttag clienttag); 183 extern t_ladder * team_ladder(t_clienttag clienttag); 184 extern t_ladder * ffa_ladder(t_clienttag clienttag); 185 extern t_ladder * at_ladder(t_clienttag clienttag); 186 extern t_ladder * ladder_ar(t_clienttag clienttag, t_ladder_id ladder_id); 187 extern t_ladder * ladder_aw(t_clienttag clienttag, t_ladder_id ladder_id); 188 extern t_ladder * ladder_ag(t_clienttag clienttag, t_ladder_id ladder_id); 189 extern t_ladder * ladder_cr(t_clienttag clienttag, t_ladder_id ladder_id); 190 extern t_ladder * ladder_cw(t_clienttag clienttag, t_ladder_id ladder_id); 191 extern t_ladder * ladder_cg(t_clienttag clienttag, t_ladder_id ladder_id); 192 193 /* for external clienttag specific reference of the ladders */ 194 195 extern int ladder_get_from_ladder(t_binary_ladder_types type, int rank, int * results); 196 extern int ladder_put_into_ladder(t_binary_ladder_types type, int * values); 197 198 #endif 199 #endif 200 201 extern char * create_filename(const char * path, const char * filename, const char * ending); 202