ladder.h
上传用户:tany51
上传日期:2013-06-12
资源大小:1397k
文件大小:6k
源码类别:

MySQL数据库

开发平台:

Visual C++

  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. #ifdef LADDER_INTERNAL_ACCESS
  22. #ifdef JUST_NEED_TYPES
  23. # include "account.h"
  24. # include "ladder_binary.h"
  25. #else
  26. # define JUST_NEED_TYPES
  27. # include "account.h"
  28. # include "ladder_binary.h"
  29. # undef JUST_NEED_TYPES
  30. #endif
  31. #endif
  32. #define W3_XPCALC_MAXLEVEL 50
  33. typedef enum
  34. {
  35.     ladder_sort_highestrated,
  36.     ladder_sort_mostwins,
  37.     ladder_sort_mostgames
  38. } t_ladder_sort;
  39. typedef enum
  40. {
  41.     ladder_time_active,
  42.     ladder_time_current
  43. } t_ladder_time;
  44. typedef enum
  45. {
  46.     ladder_id_none=0,
  47.     ladder_id_normal=1,
  48.     ladder_id_ironman=3,
  49. } t_ladder_id;
  50. typedef enum
  51. {
  52.     ladder_option_none=0,
  53.     ladder_option_disconnectisloss=1
  54. } t_ladder_option;
  55. typedef struct ladder_internal
  56. #ifdef LADDER_INTERNAL_ACCESS
  57.  {
  58.    int uid;
  59.    int xp;
  60.    int level;
  61.    unsigned int teamcount;            // needed for AT ladder
  62.    t_account *account;
  63.    struct ladder_internal *prev; // user with less XP
  64.    struct ladder_internal *next; // user with more XP
  65.  }
  66. #endif
  67.  t_ladder_internal;
  68.  typedef struct ladder
  69. #ifdef LADDER_INTERNAL_ACCESS
  70.  {
  71.     t_ladder_internal *first;
  72.     t_ladder_internal *last;
  73.     int dirty;                        // 0==no changes, 1==something changed
  74.     t_binary_ladder_types type;
  75. char const * clienttag;
  76.     t_ladder_id  ladder_id;
  77.  }
  78. #endif
  79.  t_ladder;
  80. #ifdef LADDER_INTERNAL_ACCESS
  81. typedef struct
  82. {
  83.     int startxp, neededxp, lossfactor, mingames;
  84. } t_xplevel_entry;
  85. typedef struct
  86. {
  87.     int higher_winxp, higher_lossxp, lower_winxp, lower_lossxp;
  88. } t_xpcalc_entry;
  89. #endif
  90. #endif
  91. /*****/
  92. #ifndef JUST_NEED_TYPES
  93. #ifndef INCLUDED_LADDER_PROTOS
  94. #define INCLUDED_LADDER_PROTOS
  95. #define JUST_NEED_TYPES
  96. #include "account.h"
  97. #include "game.h"
  98. #include "ladder_calc.h"
  99. #include "ladder_binary.h"
  100. #undef JUST_NEED_TYPES
  101. extern int ladder_init_account(t_account * account, char const * clienttag, t_ladder_id id);
  102. extern int ladder_check_map(char const * mapname, t_game_maptype maptype, char const * clienttag);
  103. extern t_account * ladder_get_account_by_rank(unsigned int rank, t_ladder_sort lsort, t_ladder_time ltime, char const * clienttag, t_ladder_id id);
  104. extern unsigned int ladder_get_rank_by_account(t_account * account, t_ladder_sort lsort, t_ladder_time ltime, char const * clienttag, t_ladder_id id);
  105. extern int ladder_update(char const * clienttag, t_ladder_id id, unsigned int count, t_account * * players, t_game_result * results, t_ladder_info * info, t_ladder_option opns);
  106. extern int ladderlist_make_all_active(void);
  107. extern int  ladder_createxptable(const char *xplevelfile, const char *xpcalcfile);
  108. extern void ladder_destroyxptable(void);
  109. extern int ladder_war3_xpdiff(unsigned int winnerlevel, unsigned int looserlevel, int *, int *);
  110. extern int ladder_war3_updatelevel(unsigned int oldlevel, int xp);
  111. extern int ladder_war3_get_min_xp(unsigned int level);
  112. extern int war3_get_maxleveldiff(void);
  113.  extern int war3_ladder_add(t_ladder *ladder, int uid, int xp, int level, t_account *account, unsigned int teamcount,char const * clienttag);
  114.  // this function adds a user to the ladder and keeps the ladder sorted
  115.  // returns 0 if everything is fine and -1 when error occured
  116.  extern int war3_ladder_update(t_ladder *ladder, int uid, int xp, int level, t_account *account, unsigned int teamcount);
  117.  // this functions increases the xp of user with UID uid and corrects ranking
  118.  // returns 0 if everything is fine
  119.  // if user is not yet in ladder, he gets added automatically
  120.  extern int ladder_get_rank(t_ladder *ladder, int uid, unsigned int teamcount, char const * clienttag);
  121.  // this function returns the rank of a user with a given uid
  122.  // returns 0 if no such user is found
  123.  
  124.  extern int ladder_update_all_accounts(void);
  125.  // write the correct ranking information to all user accounts
  126.  // and cut down ladder size to given limit
  127.  
  128.  extern int ladders_write_to_file(void);
  129.  // outputs the ladders into  files - for the guys that wanna make ladder pages
  130.  
  131.  extern void ladders_init(void);
  132.  // initialize the ladders
  133.  extern void ladders_destroy(void);
  134.  // remove all ladder data from memory
  135.  
  136.  extern void ladders_load_accounts_to_ladderlists(void);
  137.  // enters all accounts from accountlist into the ladders
  138.  
  139.  extern void ladder_reload_conf(void);
  140.  // reloads relevant parameters from bnetd.conf (xml/std mode for ladder)
  141.  
  142.  extern t_account * ladder_get_account(t_ladder *ladder,int rank, unsigned int * teamcount, char const * clienttag);
  143.  // returns the account that is on specified rank in specified ladder. also return teamcount for AT ladder
  144.  // returns NULL if this rank is still vacant
  145.  
  146.  extern t_ladder * solo_ladder(char const * clienttag);
  147.  extern t_ladder * team_ladder(char const * clienttag);
  148.  extern t_ladder * ffa_ladder(char const * clienttag);
  149.  extern t_ladder * at_ladder(char const * clienttag);
  150.  extern t_ladder * ladder_ar(char const * clienttag, t_ladder_id ladder_id);
  151.  extern t_ladder * ladder_aw(char const * clienttag, t_ladder_id ladder_id);
  152.  extern t_ladder * ladder_ag(char const * clienttag, t_ladder_id ladder_id);
  153.  extern t_ladder * ladder_cr(char const * clienttag, t_ladder_id ladder_id);
  154.  extern t_ladder * ladder_cw(char const * clienttag, t_ladder_id ladder_id);
  155.  extern t_ladder * ladder_cg(char const * clienttag, t_ladder_id ladder_id);
  156.  // for external clienttag specific reference of the ladders
  157.  extern int ladder_get_from_ladder(t_binary_ladder_types type, int rank, int * results);
  158.  extern int ladder_put_into_ladder(t_binary_ladder_types type, int * values);
  159. #endif
  160. #endif
  161.  extern char * create_filename(const char * path, const char * filename, const char * ending);
  162.  // Add by DJP for output.c