#include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "emlen.h" /* sucksville searching and sorting demo it seems. maybe I shoulda taken a coding class first */ void check_topten (CHAR_DATA * ch) { int k; int slotnum; int tk; bool in_topten_already; if (IS_MOB (ch)) return; slotnum = -1; for (k = 0; k < 10; k++) { if (ch->pcdata->warpoints > topten.topten_warpoints[k] && str_cmp (capitalize (NAME (ch)), topten.topten_name[k])) { slotnum = k; break; } if (!str_cmp (capitalize (NAME (ch)), topten.topten_name[k])) topten.topten_warpoints[k] = ch->pcdata->warpoints; } if (slotnum == -1) return; in_topten_already = FALSE; /*Scan if already somewhere ELSE in topten */ for (tk = 0; tk < 10; tk++) { if (!str_cmp (capitalize (NAME (ch)), topten.topten_name[tk])) { /*move everyone after that slot down on the list */ for (k = tk; k < 9; k++) { if (k > 8) break; strcpy (topten.topten_name[k], topten.topten_name[k + 1]); topten.topten_warpoints[k] = topten.topten_warpoints[k + 1]; topten.topten_good[k] = topten.topten_good[k + 1]; } break; } } /*Move everyone after that slot down on the list */ for (k = 9; k > slotnum; k--) { strcpy (topten.topten_name[k], topten.topten_name[k - 1]); topten.topten_warpoints[k] = topten.topten_warpoints[k - 1]; topten.topten_good[k] = topten.topten_good[k - 1]; } topten.topten_warpoints[slotnum] = ch->pcdata->warpoints; strcpy (topten.topten_name[slotnum], capitalize (NAME (ch))); if (IS_EVIL (ch)) topten.topten_good[slotnum] = FALSE; else topten.topten_good[slotnum] = TRUE; save_topten (); return; } void check_rating (CHAR_DATA * ch) { int k; int slotnum; int tk; bool in_topten_already; int ratng; if (IS_MOB (ch) || LEVEL (ch) > 99) return; ratng = rating (ch); slotnum = -1; for (k = 0; k < 10; k++) { if (ratng > ratingd.rating_rating[k] && str_cmp (capitalize (NAME (ch)), ratingd.rating_name[k])) { slotnum = k; break; } if (!str_cmp (capitalize (NAME (ch)), ratingd.rating_name[k])) ratingd.rating_rating[k] = ratng; } if (slotnum == -1) return; in_topten_already = FALSE; /*Scan if already somewhere ELSE in topten */ for (tk = 0; tk < 10; tk++) { if (!str_cmp (capitalize (NAME (ch)), ratingd.rating_name[tk])) { /*move everyone after that slot down on the list */ for (k = tk; k < 9; k++) { if (k > 8) break; strcpy (ratingd.rating_name[k], ratingd.rating_name[k + 1]); ratingd.rating_rating[k] = ratingd.rating_rating[k + 1]; ratingd.rating_good[k] = ratingd.rating_good[k + 1]; } break; } } /*Move everyone after that slot down on the list */ for (k = 9; k > slotnum; k--) { strcpy (ratingd.rating_name[k], ratingd.rating_name[k - 1]); ratingd.rating_rating[k] = ratingd.rating_rating[k - 1]; ratingd.rating_good[k] = ratingd.rating_good[k - 1]; } ratingd.rating_rating[slotnum] = ratng; strcpy (ratingd.rating_name[slotnum], capitalize (NAME (ch))); if (IS_EVIL (ch)) ratingd.rating_good[slotnum] = FALSE; else ratingd.rating_good[slotnum] = TRUE; if (number_range (1, 5) == 3) save_rating (); return; } void do_trophy (CHAR_DATA * ch, char *argy) { bool foundy; char buffy[500]; int used[15]; int itt; int i; int curlevel; int ittt; int tempslot; int iHash; DEFINE_COMMAND ("trophy", do_trophy, POSITION_SLEEPING, 0, LOG_NORMAL, "Shows your mob or pkill trophy.") if (IS_MOB (ch)) return; #ifdef NEW_WORLD if (argy[0] != 'm' && argy[0] != 'M' && argy[0] != 'p' && argy[0] != 'P') { send_to_char ("Please specify trophy [M]obs or trophy [P]layers.\n\r", ch); return; } if (argy[0] == 'm' || argy[0] == 'M') { MOB_PROTOTYPE *mid; hugebuf_o[0] = '\0'; for (iHash = 0; iHash < HASH_MAX; iHash++) { for (mid = mob_index_hash[iHash]; mid != NULL; mid = mid->next) { if (mid->vnum >= MAX_MOB_TRO) continue; if (ch->pcdata->killed_mobs[mid->vnum] == 0) continue; i = mid->vnum; if (ch->pcdata->killed_mobs[i] > 999) ch->pcdata->killed_mobs[i] = 999; sprintf (hugebuf_o + strlen (hugebuf_o), "[%3d] %s\n\r", ch->pcdata->killed_mobs[i], mid->short_descr); if (strlen (hugebuf_o) > 29800) { hugebuf_o[29800] = '\0'; goto eld; } } } eld: page_to_char (hugebuf_o, ch); return; } #endif for (i = 0; i < 15; i++) used[i] = 0; foundy = FALSE; send_to_char (" \x1B[34;1m[\x1B[30mTrophy of Kills\x1B[34m]\x1B[37;1m\n\r\n\r", ch); sprintf (buffy, "%5s %6s %5s\n\r", "\x1B[30;1m[\x1B[32mLvl\x1B[30m]", "\x1B[31;1m[\x1B[37mName\x1B[31m]", "\x1B[36;1m[\x1B[35mTimes\x1B[36m]"); send_to_char (buffy, ch); /*Sort Code */ curlevel = 1000; for (ittt = 0; ittt < 15; ittt++) { tempslot = -1; for (i = 0; i < 15; i++) { bool gotone; gotone = FALSE; /*Find highest level trophy entry */ if (ch->pcdata->trophy_level[i] < 1 || ch->pcdata->trophy_name[i][0] == '\0') continue; if (ch->pcdata->trophy_level[i] <= curlevel) if (used[i] == 0) { bool flagr; flagr = FALSE; for (itt = 0; itt < 15; itt++) { if (used[itt] == 1) continue; if (ch->pcdata->trophy_level[itt] > ch->pcdata->trophy_level[i]) flagr = TRUE; } if (!flagr) { curlevel = ch->pcdata->trophy_level[i]; tempslot = i; used[i] = 1; gotone = TRUE; } } if (gotone) break; } if (tempslot != -1) { foundy = TRUE; sprintf (buffy, "\x1B[37;0m[\x1B[34;1m%3d\x1B[37;0m] %-23s \x1B[37;1m*%-4d\n\r", ch->pcdata->trophy_level[tempslot], ch->pcdata->trophy_name[tempslot], ch->pcdata->trophy_times[tempslot]); send_to_char (buffy, ch); tempslot = -1; } } if (!foundy) { send_to_char ("\n\rNone.\n\r", ch); } send_to_char ("\x1B[37;0m", ch); return; } void do_topten (CHAR_DATA * ch, char *argy) { bool foundy; char buffy[500]; int used[10]; int itt; int position; int i; int curlevel; int ittt; int tempslot; char ttt[200]; DEFINE_COMMAND ("topten", do_topten, POSITION_SLEEPING, 0, LOG_NORMAL, "Shows the top 10 PKillers.") if (IS_MOB (ch)) return; position = ch->position; ch->position = POSITION_STANDING; for (i = 0; i < 10; i++) used[i] = 0; foundy = FALSE; sprintf (ttt, "$B$0[$4Top Ten List of PKillers (%s/%s and %s/%s)$0]", good, evil, evil, good); act (ttt, ch, NULL, ch, TO_CHAR); send_to_char ("\n\r", ch); /*Sort Code */ curlevel = 999000; for (ittt = 0; ittt < 10; ittt++) { tempslot = -1; for (i = 0; i < 10; i++) { bool gotone; gotone = FALSE; /*Find highest level trophy entry */ if (topten.topten_warpoints[i] <= curlevel) if (used[i] == 0) { bool flagr; flagr = FALSE; for (itt = 0; itt < 10; itt++) { if (used[itt] == 1) continue; if (topten.topten_warpoints[itt] > topten.topten_warpoints[i]) flagr = TRUE; } if (!flagr) { curlevel = topten.topten_warpoints[i]; tempslot = i; used[i] = 1; gotone = TRUE; } } if (gotone) break; } if (tempslot != -1) { foundy = TRUE; sprintf (buffy, "%s $B$7#%-2d $1%-35s $3-->$2 %-6d$3 warpoints", (topten.topten_good[tempslot] ? "\x1B[34;1m*" : "\x1B[31;1m*"), ittt + 1, topten.topten_name[tempslot], topten.topten_warpoints[tempslot]); act (buffy, ch, NULL, ch, TO_CHAR); tempslot = -1; } } if (!foundy) { send_to_char ("\n\rNone.\n\r", ch); } send_to_char ("\x1B[37;0m", ch); ch->position = position; return; } void do_rating (CHAR_DATA * ch, char *argy) { bool foundy; char buffy[500]; int used[10]; int itt; int position; int i; int curlevel; int ittt; int tempslot; DEFINE_COMMAND ("rating", do_rating, POSITION_SLEEPING, 0, LOG_NORMAL, "Shows you your current rating.") if (IS_MOB (ch)) return; if (!pow.old_creation_method && LEVEL (ch) < 8) { send_to_char ("You can't see your rating until level 8.\n\r", ch); return; } if (LEVEL (ch) < 100) check_rating (ch); position = ch->position; ch->position = POSITION_STANDING; for (i = 0; i < 10; i++) used[i] = 0; foundy = FALSE; act ("$B$0[$4Top Ten Rated Players$0]", ch, NULL, ch, TO_CHAR); send_to_char ("\n\r", ch); /*Sort Code */ curlevel = 999000; for (ittt = 0; ittt < 10; ittt++) { tempslot = -1; for (i = 0; i < 10; i++) { bool gotone; gotone = FALSE; /*Find highest level trophy entry */ if (ratingd.rating_rating[i] <= curlevel) if (used[i] == 0) { bool flagr; flagr = FALSE; for (itt = 0; itt < 10; itt++) { if (used[itt] == 1) continue; if (ratingd.rating_rating[itt] > ratingd.rating_rating[i]) flagr = TRUE; } if (!flagr) { curlevel = ratingd.rating_rating[i]; tempslot = i; used[i] = 1; gotone = TRUE; } } if (gotone) break; } if (tempslot != -1) { foundy = TRUE; sprintf (buffy, "%s $B$7#%-2d $1%-35s $3-->$2 %-6d$3 **Rating**", (ratingd.rating_good[tempslot] ? "\x1B[34;1m*" : "\x1B[31;1m*"), ittt + 1, ratingd.rating_name[tempslot], ratingd.rating_rating[tempslot]); act (buffy, ch, NULL, ch, TO_CHAR); tempslot = -1; } } if (!foundy) { send_to_char ("\n\rNone.\n\r", ch); } sprintf (buffy, "\n\r\x1B[37;0mYour current rating: \x1B[37;1m%d\x1B[37;0m\n\r", rating (ch)); send_to_char (buffy, ch); ch->position = position; return; } int free_trophy_slot (CHAR_DATA * ch, CHAR_DATA * victim) { int i; int templev; int tempnum; if (IS_MOB (ch)) return -1; for (i = 0; i < 15; i++) { if (ch->pcdata->trophy_name[i][0] == '\0') return i; } /*Okay, no free slots, replace lowest level */ templev = 100; tempnum = -1; for (i = 0; i < 15; i++) { if (ch->pcdata->trophy_level[i] < templev) { tempnum = i; templev = ch->pcdata->trophy_level[i]; } } if (ch->pcdata->trophy_level[tempnum] <= LEVEL (victim)) return tempnum; else return -1; } void check_add_trophy (CHAR_DATA * ch, CHAR_DATA * victim) { int i; int nummy; if (IS_MOB (ch) || IS_MOB (victim)) return; /*Handle warpoints */ if (LEVEL (victim) > 7) ch->pcdata->warpoints += ((1 + (LEVEL (victim) / 3)) / rchars_in_group (ch)); if (LEVEL (victim) > 20) ch->pcdata->warpoints += 1; if (LEVEL (victim) > 35) ch->pcdata->warpoints += 2; if (LEVEL (victim) > 45) ch->pcdata->warpoints += 2; check_topten (ch); /*End Handle warpoints */ for (i = 0; i < 15; i++) { if (ch->pcdata->trophy_name[i][0] == '\0') continue; if (!str_cmp (RNAME (victim), ch->pcdata->trophy_name[i])) { ch->pcdata->trophy_times[i]++; ch->pcdata->trophy_level[i] = LEVEL (victim); return; } } nummy = free_trophy_slot (ch, victim); if (nummy == -1) return; strcpy (ch->pcdata->trophy_name[nummy], RNAME (victim)); ch->pcdata->trophy_times[nummy] = 1; ch->pcdata->trophy_level[nummy] = LEVEL (victim); return; }