no, i have level, rank and exp saved into the player_table. And it doesn't recheck everyone's rank when someone gains exp. Let me put the main functions here. extern struct player_index_element *player_table; extern int top_of_p_table; /*I know this is a big dirty function but it only runs when the mud boots and with the "resetrank" command*/ void reset_rankings(void) { int i, j, k, r = 1; for (i = (LVL_IMMORTAL - 1); i > 0; i--) { for (j = level_exp(0, i+1); j > level_exp(0, i); j -= 100) { for (k = 0; k <= top_of_p_table; k++) { if (player_table[k].level == i) { if (player_table[k].exp > j) { player_table[k].rank = r; r++; } } } } } return; } int get_rank(struct char_data *ch) { int i, j; for (i = 0; i <= top_of_p_table; i++) if (!strcmp(player_table[i].name, GET_NAME(ch))) return (player_table[i].rank); return(0); } /*This is what we run to change rankings within the game, rather than run everyone's. We check one player against the ranking higher than her/him.*/ void check_rank(struct char_data *ch) { int i, j; for (i = 0; i <= top_of_p_table; i++) if (!strcmp(player_table[i].name, GET_NAME(ch))) for (j = 0; j <= top_of_p_table; j++) if ((player_table[i].rank + 1) == player_table[j].rank) break; if (!i || !j) return; if (player_table[i].level > player_table[j].level) { player_table[i].rank++; player_table[j].rank--; check_rank(ch); } else if (player_table[i].level == player_table[j].level) { if (player_table[i].exp > player_table[j].exp) { player_table[i].rank++; player_table[j].rank--; check_rank(ch); } } } This probably explains it better. Subliminal ________________________________________________________________________ Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 04/10/01 PDT