/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ /*************************************************************************** * God Wars Mud copyright (C) 1994, 1995, 1996 by Richard Woolcock * * * * Legend of Chrystancia copyright (C) 1999, 2000, 2001 by Matthew Little * * This mud is NOT to be copied in whole or in part, or to be run without * * the permission of Matthew Little. Nobody else has permission to * * authorise the use of this code. * ***************************************************************************/ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <ctype.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <assert.h> #include <unistd.h> #include <stdarg.h> #include <limits.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include "merc.h" char *current_date () { static char buf[128]; struct tm *t; time_t nowtime; nowtime = time (¤t_time); // t = asctime(gmtime( (&nowtime))); t = localtime (&nowtime); strftime (buf, 100, "%-d-%b-%Y", t); return buf; } char *ncurrent_time () { static char buf[128]; struct tm *t; time_t nowtime; nowtime = time (¤t_time); t = localtime (&nowtime); // t = asctime(gmtime( (&nowtime))); strftime (buf, 100, "%-d-%b-%Y %T", t); return buf; } char *new_date( time_t time ) { static char buf[20]; char *date; if ( time < 0 ) { bugf( "Invalid integer time: (%d)", time ); time = current_time; } date = asctime(gmtime( &time )); //date = ctime( &time ); if ( date[8] == ' ' ) buf[0] = '0'; else buf[0] = date[8]; buf[1] = date[9]; buf[2] = '-'; buf[3] = date[4]; buf[4] = date[5]; buf[5] = date[6]; buf[6] = '-'; buf[7] = date[20]; buf[8] = date[21]; buf[9] = date[22]; buf[10] = date[23]; buf[11] = ' '; buf[12] = date[11]; buf[13] = date[12]; buf[14] = date[13]; buf[15] = date[14]; buf[16] = date[15]; buf[17] = date[16]; buf[18] = date[17]; buf[19] = date[18]; buf[20] = '\0'; return buf; } char *timestring( char *time ) { static char buf[20]; buf[0] = time[11]; buf[1] = time[12]; buf[2] = time[13]; buf[3] = time[14]; buf[4] = time[15]; buf[5] = time[16]; buf[6] = time[17]; buf[7] = time[18]; buf[8] = '\0'; return buf; } char *datestring( char *date) { static char buf[20]; if ( date[8] == ' ' ) buf[0] = '0'; else buf[0] = date[8]; buf[1] = date[9]; buf[2] = '-'; buf[3] = date[4]; buf[4] = date[5]; buf[5] = date[6]; buf[6] = '-'; buf[7] = date[20]; buf[8] = date[21]; buf[9] = date[22]; buf[10] = date[23]; buf[11] = ' '; buf[12] = date[11]; buf[13] = date[12]; buf[14] = date[13]; buf[15] = date[14]; buf[16] = date[15]; buf[17] = date[16]; buf[18] = date[17]; buf[19] = date[18]; buf[20] = '\0'; return buf; } char *compdate( char *date) { /* Apr 8 2004 09:13:35 12345678901234567890 01234567890123456789 */ static char buf[20]; if ( date[4] == ' ' ) buf[0] = '0'; else buf[0] = date[4]; buf[1] = date[5]; buf[2] = '-'; buf[3] = date[0]; buf[4] = date[1]; buf[5] = date[2]; buf[6] = '-'; buf[7] = date[7]; buf[8] = date[8]; buf[9] = date[9]; buf[10] = date[10]; buf[11] = date[11]; buf[12] = date[12]; buf[13] = date[13]; buf[14] = date[14]; buf[15] = date[15]; buf[16] = date[16]; buf[17] = date[17]; buf[18] = date[18]; buf[19] = date[19]; //buf[20] = date[19]; buf[20] = '\0'; return buf; } /* New Improved EMAIL/AIM/MSN/ICQ Contact info Command */ void do_contact(CHAR_DATA *ch, char *argument) { char arg[MIL]; char buf[MSL]; argument = one_argument(argument,arg); if (IS_NPC(ch) ) return; if (arg[0] == '\0') { sprintf(buf,"Your current contact information:\n\r"); if (strlen(ch->pcdata->email) > 2) sprintf(buf + strlen(buf),"Email: %s%s\n\r",ch->pcdata->email,IS_CINVIS(ch,INVIS_EMAIL) ? " (Invis)" : ""); if (strlen(ch->pcdata->aim) > 2) sprintf(buf + strlen(buf),"AIM : %s%s\n\r",ch->pcdata->aim,IS_CINVIS(ch,INVIS_AIM) ? " (Invis)" : ""); if (ch->pcdata->icq > 0) sprintf(buf + strlen(buf),"ICQ : %d%s\n\r",ch->pcdata->icq,IS_CINVIS(ch,INVIS_ICQ) ? " (Invis)" : ""); if (strlen(ch->pcdata->msn) > 2) sprintf(buf + strlen(buf),"MSN : %s%s\n\r",ch->pcdata->msn,IS_CINVIS(ch,INVIS_MSN) ? " (Invis)" : ""); sprintf(buf + strlen(buf),"\n\rSyntax: contact <EMAIL/ICQ/AIM/MSN> <INFO/INVIS>\n\rYou may clear a contact by leaving it blank\n\r"); stc(buf,ch); return; } if (str_cmp(arg,"email") && str_cmp(arg,"aim") && str_cmp(arg,"icq") && str_cmp(arg, "msn")) { send_to_char("Email, AIM, MSN and ICQ are the only ones supported at the moment.\n\r",ch); return; } if (!str_cmp(argument,"invis")) { int invis; if (!str_cmp(arg,"email")) invis = INVIS_EMAIL; else if (!str_cmp(arg,"aim")) invis = INVIS_AIM; else if (!str_cmp(arg,"icq")) invis = INVIS_ICQ; else if (!str_cmp(arg,"msn")) invis = INVIS_MSN; else return; if (IS_CINVIS(ch,invis)) REMOVE_BIT(ch->pcdata->cinvis,invis); else SET_BIT(ch->pcdata->cinvis,invis); stc("Done.\n\r",ch); return; } else if (!str_cmp(arg,"email")) { if (ch->registerred > 0) { send_to_char("You are unable to change your email once you have registered!\n\r", ch); return; } free_string(ch->pcdata->email); if (argument[0] == '\0') { stc("Email information cleared.\n\r",ch); ch->pcdata->email = str_dup(""); return; } if (!(strstr (argument, "@") && strstr (argument, "."))) { stc ("Enter in a proper address!\n\r", ch); return; } ch->pcdata->email = str_dup(argument); stc("Email information set.\n\r",ch); return; } else if (!str_cmp(arg,"aim")) { free_string(ch->pcdata->aim); if (argument[0] == '\0') { stc("AIM information cleared.\n\r",ch); ch->pcdata->aim = str_dup(""); return; } ch->pcdata->aim = str_dup(argument); stc("AIM information set.\n\r",ch); return; } else if (!str_cmp(arg,"msn")) { free_string(ch->pcdata->msn); if (argument[0] == '\0') { stc("MSN information cleared.\n\r",ch); ch->pcdata->msn = str_dup(""); return; } if (!(strstr (argument, "@") && strstr (argument, "."))) { stc ("Enter in a proper address!\n\r", ch); return; } ch->pcdata->msn = str_dup(argument); stc("MSN information set.\n\r",ch); return; } else if (!str_cmp(arg,"icq")) { int num; if (argument[0] == '\0') { stc("ICQ information cleared.\n\r",ch); ch->pcdata->icq = 0; return; } if (!is_number(argument)) { stc("ICQ contact info must be a number.\n\r",ch); return; } num = atoi(argument); ch->pcdata->icq = num; stc("ICQ information set.\n\r",ch); return; } do_contact(ch,""); return; } /* Time Zone Setting code OOooOO */ #define MAX_TZONE 25 struct tzone_type { const char *name; /* Name of the time zone */ const char *zone; /* Cities or Zones in zone crossing */ int gmt_offset; /* Difference in hours from Greenwich Mean Time */ int dst_offset; /* Day Light Savings Time offset, Not used but left it in anyway */ }; const struct tzone_type tzone_table[MAX_TZONE] = { {"GMT-12", "Eniwetok", -12, 0}, {"GMT-11", "Samoa", -11, 0}, {"GMT-10", "Hawaii", -10, 0}, {"GMT-9", "Alaska", -9, 0}, {"PST", "Pacific US", -8, -7}, {"MST", "Mountain US", -7, -6}, {"CST", "Central US", -6, -5}, {"EST", "Eastern US", -5, -4}, {"GMT-4", "Atlantic, Canada", -4, 0}, {"GMT-3", "Brazilia, Buenos Aries", -3, 0}, {"GMT-2", "Mid-Atlantic", -2, 0}, {"GMT-1", "Cape Verdes", -1, 0}, {"GMT", "Greenwich Mean Time, Greenwich", 0, 0}, {"GMT+1", "Berlin, Rome", 1, 0}, {"GMT+2", "Israel, Cairo", 2, 0}, {"GMT+3", "Moscow, Kuwait", 3, 0}, {"GMT+4", "Abu Dhabi, Muscat", 4, 0}, {"GMT+5", "Islamabad, Karachi", 5, 0}, {"GMT+6", "Almaty, Dhaka", 6, 0}, {"GMT+7", "Bangkok, Jakarta", 7, 0}, {"GMT+8", "Hong Kong, Beijing", 8, 0}, {"GMT+9", "Tokyo, Osaka", 9, 0}, {"GMT+10", "Sydney, Melbourne, Guam", 10, 0}, {"GMT+11", "Magadan, Soloman Is.", 11, 0}, {"GMT+12", "Fiji, Wellington, Auckland", 12, 0}, }; int tzone_lookup(const char *arg) { int i; for(i = 0; i < MAX_TZONE; i++) { if(!str_cmp(arg, tzone_table[i].name)) return i; } for(i = 0; i < MAX_TZONE; i++) { if(!str_cmp(arg, tzone_table[i].zone)) return i; } return -1; } /* Some examples: str_time(current_time, ch->pcdata->timezone, "%I:%M:%S"); str_time(-1, -1, NULL); */ char *str_time(time_t timet, int tz, const char *format) { static char buf_new[5][100]; static int i; char *result; // rotate buffers i++; i %= 5; result = buf_new[i]; if (timet <= 0) { timet = current_time; } if(tz > -1 && tz < MAX_TZONE) { timet += (time_t) timezone; /* timezone external variable in time.h holds the difference in seconds to GMT. */ timet += (60 * 60 * tzone_table[tz].gmt_offset); /* Add the offset hours */ } strftime(result, 100, format != NULL ? format : "%d-%b-%Y %T", localtime(&timet)); return result; } void do_timezone(CHAR_DATA *ch, char *argument) { int i; char buf[MAX_STRING_LENGTH]; if(IS_NPC(ch)) return; if(argument[0] == '\0') { sprintf(buf, "#w%-6s %-30s (%s)\n\r", "Name", "City/Zone Crosses", "Time"); send_to_char(buf, ch); send_to_char("#r-------------------------------------------------------------------------\n\r", ch); for(i = 0; i < MAX_TZONE; i++) { sprintf(buf, "#w%-6s #c%-30s (#r%s#w)\n\r", tzone_table[i].name, tzone_table[i].zone, str_time(current_time, i, NULL)); send_to_char(buf, ch); } send_to_char("#r-------------------------------------------------------------------------\n\r", ch); return; } i = tzone_lookup(argument); if(i == -1) { send_to_char("That time zone does not exists.\n\r", ch); return; } ch->pcdata->timezone = i; sprintf(buf, "Your time zone is now %s %s (%s)\n\r", tzone_table[i].name, tzone_table[i].zone, str_time(current_time, i, NULL)); send_to_char(buf, ch); } /* Justifiaction code.... By Cirin */ char *new_format(char *argument, char *arg_first, int width) { char cEnd; int end = strlen(argument), start = 0, protect=0; if (width< 10 || width> 80){ bug("New_format: bad width %d", width); return ""; } cEnd = ' '; for (;;) { if (start< width){ if (start == end){ argument[0] = '\0'; break; } *arg_first = *argument; arg_first++; argument++; start++; } else{ if (*argument != cEnd){ argument--; arg_first--; } else break; } if (protect++ == 10000) break; } *arg_first = '\0'; while (isspace(*argument)) argument++; return argument; } void cent_format(CHAR_DATA *ch, char *text, int width) { char buf[MSL]; for (;;) { if (strlen(text)< width){ cent_to_char(text, ch); break; } text = new_format(text, buf, width); cent_to_char(buf, ch); } } void do_popular( CHAR_DATA *ch, char * argument ) { CHAR_DATA *most_popular[10]; CHAR_DATA *stat; CHAR_DATA *stat_next; char out_buf[ 30000 ]; int highest[10]; int vnum[10]; int temp = 0; int killed = 0; bool SHOWN_ANY = FALSE; for ( temp = 0; temp <= 10; temp++ ) { highest[temp] = -1; most_popular[temp] = ch; vnum[temp] = -1; } for ( stat = char_list; stat != NULL; stat = stat_next ) { stat_next = stat->next; if ( !IS_NPC( stat ) ) continue; // Players don't get counted. killed = stat->pIndexData->killed; if ( killed > 0 ) { if ( stat->pIndexData->vnum == vnum[0] ) continue; // Already been polled if ( stat->pIndexData->vnum == vnum[1] ) continue; // Already been polled if ( stat->pIndexData->vnum == vnum[2] ) continue; // Already been polled if ( stat->pIndexData->vnum == vnum[3] ) continue; // Already been polled if ( stat->pIndexData->vnum == vnum[4] ) continue; // Already been polled if ( stat->pIndexData->vnum == vnum[5] ) continue; // Already been polled if ( stat->pIndexData->vnum == vnum[6] ) continue; // Already been polled if ( stat->pIndexData->vnum == vnum[7] ) continue; // Already been polled if ( stat->pIndexData->vnum == vnum[8] ) continue; // Already been polled if ( stat->pIndexData->vnum == vnum[9] ) continue; // Already been polled if ( stat->pIndexData->vnum == vnum[10] ) continue; // Already been polled if ( killed >= highest[0] ) { // 10 gets moved to 11 and therefore vanishes.... highest[10] = highest[9]; most_popular[10] = most_popular[9]; vnum[10] = vnum[9]; // Move #9 into #10 highest[9] = highest[8]; most_popular[9] = most_popular[8]; vnum[9] = vnum[8]; // Move #8 into #9 highest[8] = highest[7]; most_popular[8] = most_popular[7]; vnum[8] = vnum[7]; // Move #7 into #8 highest[7] = highest[6]; most_popular[7] = most_popular[6]; vnum[7] = vnum[6]; // Move #6 into #7 highest[6] = highest[5]; most_popular[6] = most_popular[5]; vnum[6] = vnum[5]; // Move #5 into #6 highest[5] = highest[4]; most_popular[5] = most_popular[4]; vnum[5] = vnum[4]; // Move #4 into #5 highest[4] = highest[3]; most_popular[4] = most_popular[3]; vnum[4] = vnum[3]; // Move #3 into #4 highest[3] = highest[2]; most_popular[3] = most_popular[2]; vnum[3] = vnum[2]; // Move #2 into #3 highest[2] = highest[1]; most_popular[2] = most_popular[1]; vnum[2] = vnum[1]; // Move #1 into #2 highest[1] = highest[0]; most_popular[1] = most_popular[0]; vnum[1] = vnum[0]; // Move #0 into #1 highest[0] = killed; most_popular[0] = stat; vnum[0] = stat->pIndexData->vnum; // Move Stat into #0 continue; } else if ( killed >= highest[1] ) { // 10 gets moved to 11 and therefore vanishes.... highest[10] = highest[9]; most_popular[10] = most_popular[9]; vnum[10] = vnum[9]; // Move #9 into #10 highest[9] = highest[8]; most_popular[9] = most_popular[8]; vnum[9] = vnum[8]; // Move #8 into #9 highest[8] = highest[7]; most_popular[8] = most_popular[7]; vnum[8] = vnum[7]; // Move #7 into #8 highest[7] = highest[6]; most_popular[7] = most_popular[6]; vnum[7] = vnum[6]; // Move #6 into #7 highest[6] = highest[5]; most_popular[6] = most_popular[5]; vnum[6] = vnum[5]; // Move #5 into #6 highest[5] = highest[4]; most_popular[5] = most_popular[4]; vnum[5] = vnum[4]; // Move #4 into #5 highest[4] = highest[3]; most_popular[4] = most_popular[3]; vnum[4] = vnum[3]; // Move #3 into #4 highest[3] = highest[2]; most_popular[3] = most_popular[2]; vnum[3] = vnum[2]; // Move #2 into #3 highest[2] = highest[1]; most_popular[2] = most_popular[1]; vnum[2] = vnum[1]; // Move #1 into #2 highest[1] = killed; most_popular[1] = stat; vnum[1] = stat->pIndexData->vnum; // Move Stat into #1 continue; } else if ( killed >= highest[2] ) { // 10 gets moved to 11 and therefore vanishes.... highest[10] = highest[9]; most_popular[10] = most_popular[9]; vnum[10] = vnum[9]; // Move #9 into #10 highest[9] = highest[8]; most_popular[9] = most_popular[8]; vnum[9] = vnum[8]; // Move #8 into #9 highest[8] = highest[7]; most_popular[8] = most_popular[7]; vnum[8] = vnum[7]; // Move #7 into #8 highest[7] = highest[6]; most_popular[7] = most_popular[6]; vnum[7] = vnum[6]; // Move #6 into #7 highest[6] = highest[5]; most_popular[6] = most_popular[5]; vnum[6] = vnum[5]; // Move #5 into #6 highest[5] = highest[4]; most_popular[5] = most_popular[4]; vnum[5] = vnum[4]; // Move #4 into #5 highest[4] = highest[3]; most_popular[4] = most_popular[3]; vnum[4] = vnum[3]; // Move #3 into #4 highest[3] = highest[2]; most_popular[3] = most_popular[2]; vnum[3] = vnum[2]; // Move #2 into #3 highest[2] = killed; most_popular[2] = stat; vnum[2] = stat->pIndexData->vnum; // Move Stat into #2 continue; } else if ( killed >= highest[3] ) { // 10 gets moved to 11 and therefore vanishes.... highest[10] = highest[9]; most_popular[10] = most_popular[9]; vnum[10] = vnum[9]; // Move #9 into #10 highest[9] = highest[8]; most_popular[9] = most_popular[8]; vnum[9] = vnum[8]; // Move #8 into #9 highest[8] = highest[7]; most_popular[8] = most_popular[7]; vnum[8] = vnum[7]; // Move #7 into #8 highest[7] = highest[6]; most_popular[7] = most_popular[6]; vnum[7] = vnum[6]; // Move #6 into #7 highest[6] = highest[5]; most_popular[6] = most_popular[5]; vnum[6] = vnum[5]; // Move #5 into #6 highest[5] = highest[4]; most_popular[5] = most_popular[4]; vnum[5] = vnum[4]; // Move #4 into #5 highest[4] = highest[3]; most_popular[4] = most_popular[3]; vnum[4] = vnum[3]; // Move #3 into #4 highest[3] = killed; most_popular[3] = stat; vnum[3] = stat->pIndexData->vnum; // Move Stat into #3 continue; } else if ( killed >= highest[4] ) { // 10 gets moved to 11 and therefore vanishes.... highest[10] = highest[9]; most_popular[10] = most_popular[9]; vnum[10] = vnum[9]; // Move #9 into #10 highest[9] = highest[8]; most_popular[9] = most_popular[8]; vnum[9] = vnum[8]; // Move #8 into #9 highest[8] = highest[7]; most_popular[8] = most_popular[7]; vnum[8] = vnum[7]; // Move #7 into #8 highest[7] = highest[6]; most_popular[7] = most_popular[6]; vnum[7] = vnum[6]; // Move #6 into #7 highest[6] = highest[5]; most_popular[6] = most_popular[5]; vnum[6] = vnum[5]; // Move #5 into #6 highest[5] = highest[4]; most_popular[5] = most_popular[4]; vnum[5] = vnum[4]; // Move #4 into #5 highest[4] = killed; most_popular[4] = stat; vnum[4] = stat->pIndexData->vnum; // Move Stat into #4 continue; } else if ( killed >= highest[5] ) { // 10 gets moved to 11 and therefore vanishes.... highest[10] = highest[9]; most_popular[10] = most_popular[9]; vnum[10] = vnum[9]; // Move #9 into #10 highest[9] = highest[8]; most_popular[9] = most_popular[8]; vnum[9] = vnum[8]; // Move #8 into #9 highest[8] = highest[7]; most_popular[8] = most_popular[7]; vnum[8] = vnum[7]; // Move #7 into #8 highest[7] = highest[6]; most_popular[7] = most_popular[6]; vnum[7] = vnum[6]; // Move #6 into #7 highest[6] = highest[5]; most_popular[6] = most_popular[5]; vnum[6] = vnum[5]; // Move #5 into #6 highest[5] = killed; most_popular[5] = stat; vnum[5] = stat->pIndexData->vnum; // Move Stat into #5 continue; } else if ( killed >= highest[6] ) { // 10 gets moved to 11 and therefore vanishes.... highest[10] = highest[9]; most_popular[10] = most_popular[9]; vnum[10] = vnum[9]; // Move #9 into #10 highest[9] = highest[8]; most_popular[9] = most_popular[8]; vnum[9] = vnum[8]; // Move #8 into #9 highest[8] = highest[7]; most_popular[8] = most_popular[7]; vnum[8] = vnum[7]; // Move #7 into #8 highest[7] = highest[6]; most_popular[7] = most_popular[6]; vnum[7] = vnum[6]; // Move #6 into #7 highest[6] = killed; most_popular[6] = stat; vnum[6] = stat->pIndexData->vnum; // Move Stat into #6 continue; } else if ( killed >= highest[7] ) { // 10 gets moved to 11 and therefore vanishes.... highest[10] = highest[9]; most_popular[10] = most_popular[9]; vnum[10] = vnum[9]; // Move #9 into #10 highest[9] = highest[8]; most_popular[9] = most_popular[8]; vnum[9] = vnum[8]; // Move #8 into #9 highest[8] = highest[7]; most_popular[8] = most_popular[7]; vnum[8] = vnum[7]; // Move #7 into #8 highest[7] = killed; most_popular[7] = stat; vnum[7] = stat->pIndexData->vnum; // Move Stat into #7 continue; } else if ( killed >= highest[8] ) { // 10 gets moved to 11 and therefore vanishes.... highest[10] = highest[9]; most_popular[10] = most_popular[9]; vnum[10] = vnum[9]; // Move #9 into #10 highest[9] = highest[8]; most_popular[9] = most_popular[8]; vnum[9] = vnum[8]; // Move #8 into #9 highest[8] = killed; most_popular[8] = stat; vnum[8] = stat->pIndexData->vnum; // Move Stat into #8 continue; } else if ( killed >= highest[9] ) { // 10 gets moved to 11 and therefore vanishes.... highest[10] = highest[9]; most_popular[10] = most_popular[9]; vnum[10] = vnum[9]; // Move #9 into #10 highest[9] = killed; most_popular[9] = stat; vnum[9] = stat->pIndexData->vnum; // Move Stat into #9 continue; } else if ( killed >= highest[10] ) { highest[10] = killed; most_popular[10] = stat; vnum[10] = stat->pIndexData->vnum; // Move Stat into #10 continue; } else { continue; } } // If Killed > 0 else { continue; } } // End For // We Don't Display Highest[10] sprintf( out_buf, "#wHere are the most popular of the #r%lli #wmobs that have been killed#n\n\r", mobs_killed ); send_to_char( out_buf, ch ); if ( most_popular[0] != ch ) { sprintf( out_buf, "#rMOST POPULAR -> #y%s #whas been killed #r%d #wtimes.\n\r", most_popular[0]->short_descr, highest[0] ); send_to_char( out_buf, ch ); SHOWN_ANY = TRUE; } if ( most_popular[1] != ch ) { sprintf( out_buf, " #r2 -> #y%s #whas been killed #r%d #wtimes.\n\r", most_popular[1]->short_descr, highest[1] ); send_to_char( out_buf, ch ); SHOWN_ANY = TRUE; } if ( most_popular[2] != ch ) { sprintf( out_buf, " #r3 -> #y%s #whas been killed #r%d #wtimes.\n\r", most_popular[2]->short_descr, highest[2] ); send_to_char( out_buf, ch ); SHOWN_ANY = TRUE; } if ( most_popular[3] != ch ) { sprintf( out_buf, " #r4 -> #y%s #whas been killed #r%d #wtimes.\n\r", most_popular[3]->short_descr, highest[3] ); send_to_char( out_buf, ch ); SHOWN_ANY = TRUE; } if ( most_popular[4] != ch ) { sprintf( out_buf, " #r5 -> #y%s #whas been killed #r%d #wtimes.\n\r", most_popular[4]->short_descr, highest[4] ); send_to_char( out_buf, ch ); SHOWN_ANY = TRUE; } if ( most_popular[5] != ch ) { sprintf( out_buf, " #r6 -> #y%s #whas been killed #r%d #wtimes.\n\r", most_popular[5]->short_descr, highest[5] ); send_to_char( out_buf, ch ); SHOWN_ANY = TRUE; } if ( most_popular[6] != ch ) { sprintf( out_buf, " #r7 -> #y%s #whas been killed #r%d #wtimes.\n\r", most_popular[6]->short_descr, highest[6] ); send_to_char( out_buf, ch ); SHOWN_ANY = TRUE; } if ( most_popular[7] != ch ) { sprintf( out_buf, " #r8 -> #y%s #whas been killed #r%d #wtimes.\n\r", most_popular[7]->short_descr, highest[7] ); send_to_char( out_buf, ch ); SHOWN_ANY = TRUE; } if ( most_popular[8] != ch ) { sprintf( out_buf, " #r9 -> #y%s #whas been killed #r%d #wtimes.\n\r", most_popular[8]->short_descr, highest[8] ); send_to_char( out_buf, ch ); SHOWN_ANY = TRUE; } if ( most_popular[9] != ch ) { sprintf( out_buf, " #r10 -> #y%s #whas been killed #r%d #wtimes.\n\r", most_popular[9]->short_descr, highest[9] ); send_to_char( out_buf, ch ); SHOWN_ANY = TRUE; } if (!SHOWN_ANY) { stc("No Mobiles have been killed yet!\n\r", ch); return; } return; } // End Function //mdonate - give qps to decrease the modtimer 60 qps / min (C) Malstar void do_mdonate(CHAR_DATA *ch, char *argument) { sh_int value; long qps = 0; char buf[MSL]; if(IS_NPC(ch)) return; if(argument[0] == '\0') { stc("How many minutes do you wish to lower the multiplier timer?\n\r",ch); stc("Rate: 5000 qps / minute.\n\r",ch); return; } value = atoi(argument); qps = value * 5000; if( ch->pcdata->quest < qps ) { stc("You do not have that amount of quest points!\n\r",ch); return; } if( ( WizConfig->modtimer - 2 ) < value ) { value = WizConfig->modtimer - 2; qps = value * 5000; } if ( WizConfig->xpbonus > 1 ) { if ( ( WizConfig->xptimer ) < value ) { value -= WizConfig->xptimer - 1; qps = value * 5000; } if ( ( WizConfig->modtimer - ( WizConfig->xptimer + value ) ) < 1 ) { stc("You greedy jerk... No!\n\r",ch); return; } } if ( WizConfig->qpbonus > 1 ) { if ( ( WizConfig->qptimer ) < value ) { value -= WizConfig->qptimer - 1; qps = value * 5000; } if ( ( WizConfig->modtimer - ( WizConfig->qptimer + value ) ) < 1 ) { stc("You greedy jerk... No!\n\r",ch); return; } } if(value < 1) { stc("What was that again?\n\r",ch); return; } ch->pcdata->quest -= qps; ch->pcdata->login_timer += value * 6; WizConfig->modtimer -= value; save_wizconfig(); sprintf(buf, "%s has lowered the time to exp/qp mod by %d minutes!", ch->name, value); do_info(ch, buf); return; }