diff -Pp -C4 3.1.10/src/README 3.1.11/src/README *** 3.1.10/src/README Wed Mar 19 21:33:16 1997 --- 3.1.11/src/README Sat May 17 15:59:50 1997 *************** *** 1,5 **** ! Mythran Mud release 3.1.10 Wed Mar 19, 1997 === The src directory --- 1,5 ---- ! Mythran Mud release 3.1.11 Wed Mar 19, 1997 === The src directory diff -Pp -C4 3.1.10/src/WHATSNEW.TXT 3.1.11/src/WHATSNEW.TXT *** 3.1.10/src/WHATSNEW.TXT Sat May 17 15:57:49 1997 --- 3.1.11/src/WHATSNEW.TXT Fri Jun 27 21:36:25 1997 *************** Somewhere here: Fixed a bug in saving of *** 304,307 **** --- 304,315 ---- 17-mar-1997: Clan who and clan where are now in to help find clan members. Wiznet levels has been activated. Made sepparate clan donate. Reboot and shutdown now execute an asave changed. + + 07-jun-1997: Fixed various small bugs. + Wiznet DEATHS implemented. + + 16-jun-1997: Various WIZNETs implemented + Added birthdays + + 27-jun-1997: Added creator name for socials. Need to do deletor still. diff -Pp -C4 3.1.10/src/act_comm.c 3.1.11/src/act_comm.c *** 3.1.10/src/act_comm.c Sun Mar 16 15:14:47 1997 --- 3.1.11/src/act_comm.c Sun Jun 15 15:01:00 1997 *************** void do_delete( CHAR_DATA *ch, char *arg *** 68,83 **** if (argument[0] != '\0') { send_to_char("Delete status removed.\n\r",ch); ch->pcdata->confirm_delete = FALSE; ! sprintf (buf, "%s has decided not to self-delete.\n\r", ch->name ); ! wiznet(ch, WIZ_LOGINS, 0, buf); return; } else { ! sprintf (buf, "%s has been turned into line noise.\n\r", ch->name ); ! wiznet(ch, WIZ_LOGINS, 0, buf); #if !defined( macintosh ) && !defined( MSDOS ) sprintf( strsave, "%s%s%s%s", PLAYER_DIR, initial( ch->name ), "/", capitalize( ch->name ) ); --- 68,86 ---- if (argument[0] != '\0') { send_to_char("Delete status removed.\n\r",ch); ch->pcdata->confirm_delete = FALSE; ! sprintf (buf, "%s has decided not to self-delete.", ! ch->name ); ! wiznet(ch, WIZ_LOGINS, get_trust( ch ), buf); return; } else { ! sprintf (buf, "%s has been turned into line noise.", ! ch->name ); ! wiznet(ch, WIZ_LOGINS, get_trust( ch ), buf); ! log_string( buf ); #if !defined( macintosh ) && !defined( MSDOS ) sprintf( strsave, "%s%s%s%s", PLAYER_DIR, initial( ch->name ), "/", capitalize( ch->name ) ); *************** void do_delete( CHAR_DATA *ch, char *arg *** 102,111 **** send_to_char("WARNING: this command is irreversible.\n\r",ch); send_to_char("Typing delete with an argument will undo.\n\r", ch); ch->pcdata->confirm_delete = TRUE; ! sprintf (buf, "%s is contemplating deletion.\n\r", ch->name ); ! wiznet(ch, WIZ_LOGINS, 0, buf); } bool is_note_to( CHAR_DATA *ch, NOTE_DATA *pnote ) { --- 105,114 ---- send_to_char("WARNING: this command is irreversible.\n\r",ch); send_to_char("Typing delete with an argument will undo.\n\r", ch); ch->pcdata->confirm_delete = TRUE; ! sprintf (buf, "%s is contemplating deletion.", ch->name ); ! wiznet(ch, WIZ_LOGINS, get_trust( ch ), buf); } bool is_note_to( CHAR_DATA *ch, NOTE_DATA *pnote ) { *************** void do_quit( CHAR_DATA *ch, char *argum *** 1371,1379 **** act( "$n has left the game.", ch, NULL, NULL, TO_ROOM ); sprintf( log_buf, "%s has quit.", ch->name ); log_string( log_buf ); ! wiznet (ch, WIZ_LOGINS, 0, log_buf ); /* * After extract_char the ch is no longer valid! */ --- 1374,1382 ---- act( "$n has left the game.", ch, NULL, NULL, TO_ROOM ); sprintf( log_buf, "%s has quit.", ch->name ); log_string( log_buf ); ! wiznet (ch, WIZ_LOGINS, get_trust( ch ), log_buf ); /* * After extract_char the ch is no longer valid! */ diff -Pp -C4 3.1.10/src/act_info.c 3.1.11/src/act_info.c *** 3.1.10/src/act_info.c Mon Mar 17 21:21:35 1997 --- 3.1.11/src/act_info.c Sat Jun 28 15:41:31 1997 *************** void do_look( CHAR_DATA *ch, char *argum *** 472,479 **** --- 472,480 ---- OBJ_DATA *obj; CHAR_DATA *victim; EXIT_DATA *pexit; ROOM_INDEX_DATA *original; + char flag [ MAX_STRING_LENGTH ]; char buf [ MAX_STRING_LENGTH ]; char arg1 [ MAX_INPUT_LENGTH ]; char arg2 [ MAX_INPUT_LENGTH ]; char *pdesc; *************** void do_look( CHAR_DATA *ch, char *argum *** 520,527 **** --- 521,547 ---- if ( !IS_NPC( ch ) && IS_SET( ch->act, PLR_AUTOEXIT ) ) do_exits( ch, "auto" ); send_to_char( "{x", ch ); + if ( IS_IMMORTAL( ch ) ) + { + sprintf( flag, "( %s%s%s%s%s%s%s%s%s%s%s%s ) [ %s ]\n\r", + ch->in_room->sector_type == SECT_INSIDE ? "Inside" : "", + ch->in_room->sector_type == SECT_CITY ? "City" : "", + ch->in_room->sector_type == SECT_FIELD ? "Field" : "", + ch->in_room->sector_type == SECT_FOREST ? "Forest" : "", + ch->in_room->sector_type == SECT_HILLS ? "Hills" : "", + ch->in_room->sector_type == SECT_MOUNTAIN ? "Mountain" : "", + ch->in_room->sector_type == SECT_WATER_SWIM ? "Water-swim" : "", + ch->in_room->sector_type == SECT_WATER_NOSWIM ? "Water-noswim" : "", + ch->in_room->sector_type == SECT_UNDERWATER ? "Underwater" : "", + ch->in_room->sector_type == SECT_AIR ? "Air" : "", + ch->in_room->sector_type == SECT_DESERT ? "Desert" : "", + ch->in_room->sector_type == SECT_MAX ? "Max" : "", + room_flags_name( ch->in_room->room_flags ) ); + send_to_char( flag, ch ); + } + send_to_char( "{y", ch ); if ( arg1[0] == '\0' || ( !IS_NPC( ch ) && !IS_SET( ch->act, PLR_BRIEF ) ) ) send_to_char( ch->in_room->description, ch ); *************** void do_who( CHAR_DATA *ch, char *argume *** 1343,1351 **** IS_SET( wch->act, PLR_KILLER ) ? "({BKILLER{x) " : "", IS_SET( wch->act, PLR_THIEF ) ? "({BTHIEF{x) " : "", IS_SET( wch->act, PLR_REGISTER ) ? "({BPK{x) " : "", IS_SET( wch->act, PLR_AFK ) ? "({YAFK{x) " : "", ! (wch->pcdata->spouse != NULL ) ? "({YMARRIED{x)" : "", wch->name, wch->pcdata->title, buf3 ); /* No who-text */ --- 1363,1371 ---- IS_SET( wch->act, PLR_KILLER ) ? "({BKILLER{x) " : "", IS_SET( wch->act, PLR_THIEF ) ? "({BTHIEF{x) " : "", IS_SET( wch->act, PLR_REGISTER ) ? "({BPK{x) " : "", IS_SET( wch->act, PLR_AFK ) ? "({YAFK{x) " : "", ! (wch->pcdata->spouse != NULL ) ? "({YMARRIED{x) " : "", wch->name, wch->pcdata->title, buf3 ); /* No who-text */ *************** void do_whois( CHAR_DATA *ch, char *argu *** 1463,1471 **** IS_SET( wch->act, PLR_KILLER ) ? "({BKILLER{x) " : "", IS_SET( wch->act, PLR_THIEF ) ? "({BTHIEF{x) " : "", IS_SET( wch->act, PLR_REGISTER ) ? "({BPK{x) " : "", IS_SET( wch->act, PLR_AFK ) ? "({YAFK{x) " : "", ! (wch->pcdata->spouse != NULL) ? "({YMARRIED{x)" : "", wch->name, wch->pcdata->title ); if ( !str_cmp ( wch->pcdata->who_text, "@" ) || !str_cmp ( wch->pcdata->who_text, "" ) ) --- 1483,1491 ---- IS_SET( wch->act, PLR_KILLER ) ? "({BKILLER{x) " : "", IS_SET( wch->act, PLR_THIEF ) ? "({BTHIEF{x) " : "", IS_SET( wch->act, PLR_REGISTER ) ? "({BPK{x) " : "", IS_SET( wch->act, PLR_AFK ) ? "({YAFK{x) " : "", ! (wch->pcdata->spouse != NULL) ? "({YMARRIED{x) " : "", wch->name, wch->pcdata->title ); if ( !str_cmp ( wch->pcdata->who_text, "@" ) || !str_cmp ( wch->pcdata->who_text, "" ) ) *************** void do_pagelen ( CHAR_DATA *ch, char *a *** 2740,2755 **** if ( lines < 19 ) { send_to_char( "Less than 19 lines of paged text is not allowed", ch ); ! return; } if ( lines > 60 ) { ! send_to_char( ! "I don't know of a screen that is larger than 60 lines!\n\r", ! ch ); lines = 60; } ch->pcdata->pagelen = lines; --- 2760,2774 ---- if ( lines < 19 ) { send_to_char( "Less than 19 lines of paged text is not allowed", ch ); ! lines = 19; } if ( lines > 60 ) { ! send_to_char( "I don't know of a screen that is larger than 60 lines!\n\r", ! ch ); lines = 60; } ch->pcdata->pagelen = lines; *************** void do_remort( CHAR_DATA *ch, char *arg *** 2904,2908 **** --- 2923,2978 ---- if (ch->max_mana < 200) ch->max_mana = 200; return; + } + + + /* + * Birthdays by Canth (canth@xs4all.nl) + * This gives a random b-day gift to a player. + * Player ages approx. 1 year per 17.5 hours on-line + */ + void birthday( CHAR_DATA *ch ) + { + OBJ_DATA *obj = NULL; + char buf [ MAX_STRING_LENGTH ]; + + if ( IS_NPC( ch ) ) + { + send_to_char( "Happy birthday!", ch ); + return; + } + + /* Inform everyone of the birthday */ + /* Need to check for invis still */ + sprintf( buf, "[NEWS] %s has aged a year and is now a respectfull %d years old!\n\r", + ch->name, get_age( ch ) ); + send_to_all_char( buf ); + + switch( number_range( 1, 5 ) ) + { + case 1: + obj = create_object( get_obj_index( OBJ_VNUM_BDAY_1 ), ch->level ); + break; + case 2: + obj = create_object( get_obj_index( OBJ_VNUM_BDAY_2 ), ch->level ); + break; + case 3: + obj = create_object( get_obj_index( OBJ_VNUM_BDAY_3 ), ch->level ); + break; + case 4: + obj = create_object( get_obj_index( OBJ_VNUM_BDAY_4 ), ch->level ); + break; + case 5: + obj = create_object( get_obj_index( OBJ_VNUM_BDAY_5 ), ch->level ); + break; + } + + sprintf( buf, "Heppy birthday! The gods give you a %s for your birthday.\n\r", + obj->short_descr ); + send_to_char( buf, ch ); + + obj_to_char( obj, ch ); + return; + } diff -Pp -C4 3.1.10/src/act_obj.c 3.1.11/src/act_obj.c *** 3.1.10/src/act_obj.c Sun Mar 16 16:37:48 1997 --- 3.1.11/src/act_obj.c Mon Jun 23 19:42:05 1997 *************** void do_sacrifice( CHAR_DATA *ch, char * *** 1493,1559 **** #if defined (SAC_VAR_REWARD) /* Idea by Bram (Unicorn Mud) Mythran Code by Maniac */ switch(number_range(1, 50)) ! { default: ! sprintf( arg, "%s gives you %d gold coin%s for your sacrifice.\n\r", godname, gain, ((gain == 1) ? "" : "s") ); ch->gold += gain; break; case 1: ! sprintf( arg, "%s gives you 1 permanent move point for your sacrifice!\n\r", godname ); ch->max_move += 1; break; case 2: ! sprintf( arg, "%s gives you 1 permanent hit point for your sacrifice!\n\r", godname ); ch->max_hit += 1; break; case 3: ! sprintf( arg, "%s gives you 1 permanent mana point for your sacrifice!\n\r", godname ); ch->max_mana += 1; break; case 4: case 5: case 6: ! sprintf(arg, "%s gives you %d move points for yor sacrifice.\n\r", godname, gain ); ch->move += gain; break; case 7: case 8: case 9: ! sprintf( arg, "%s gives you %d hit points for your sacrifice.\n\r", godname, gain ); ! ch->move += gain; break; case 10: case 11: case 12: ! sprintf( arg, "%s gives you %d mana points for your sacrifice.\n\r", godname, gain ); ch->mana +=gain; break; case 13: case 14: case 15: if (IS_NPC(ch)) { ! sprintf(arg, "%s gives you 1 gp for your sacrifice.\n\r", godname); ch->gold += 1; } else { ! sprintf(arg, "%s gives you 1 learning session for your sacrifice.\n\r", godname); ch->pcdata->learn += 1; } break; case 16: case 17: case 18: ! sprintf(arg, "%s gives you %d experience point%s for your sacrifice.\n\r", godname, gain, (gain == 1) ? "" : "s"); ch->exp += gain; break; case 19: case 20: case 21: ! sprintf( arg, "%s gives you 1 practice session for your sacrifice.\n\r", godname ); ch->practice += 1; break; } #else --- 1493,1570 ---- #if defined (SAC_VAR_REWARD) /* Idea by Bram (Unicorn Mud) Mythran Code by Maniac */ switch(number_range(1, 50)) ! { /* Approx. 42% chance at something special.. 6% at something real good */ default: ! sprintf( arg, "%s gives you %d gold coin%s for your sacrifice.\n\r", ! godname, gain, ((gain == 1) ? "" : "s") ); ch->gold += gain; break; case 1: ! sprintf( arg, "%s gives you 1 permanent move point for your sacrifice!\n\r", ! godname ); ch->max_move += 1; break; case 2: ! sprintf( arg, "%s gives you 1 permanent hit point for your sacrifice!\n\r", ! godname ); ch->max_hit += 1; break; case 3: ! sprintf( arg, "%s gives you 1 permanent mana point for your sacrifice!\n\r", ! godname ); ch->max_mana += 1; break; case 4: case 5: case 6: ! sprintf(arg, "%s gives you %d move points for yor sacrifice.\n\r", ! godname, gain ); ch->move += gain; break; case 7: case 8: case 9: ! sprintf( arg, "%s gives you %d hit points for your sacrifice.\n\r", ! godname, gain ); ! ch->hit += gain; break; case 10: case 11: case 12: ! sprintf( arg, "%s gives you %d mana points for your sacrifice.\n\r", ! godname, gain ); ch->mana +=gain; break; case 13: case 14: case 15: if (IS_NPC(ch)) { ! sprintf(arg, "%s gives you 1 gp for your sacrifice.\n\r", ! godname); ch->gold += 1; } else { ! sprintf(arg, "%s gives you 1 learning session for your sacrifice.\n\r", ! godname); ch->pcdata->learn += 1; } break; case 16: case 17: case 18: ! sprintf(arg, "%s gives you %d experience point%s for your sacrifice.\n\r", ! godname, gain, (gain == 1) ? "" : "s"); ch->exp += gain; break; case 19: case 20: case 21: ! sprintf( arg, "%s gives you 1 practice session for your sacrifice.\n\r", ! godname ); ch->practice += 1; break; } #else *************** void do_sacrifice( CHAR_DATA *ch, char * *** 1561,1572 **** ch->gold += 1; #endif send_to_char(arg, ch); ! sprintf (arg, "%s: %s(%d).\n\r", ch->name, obj->short_descr, obj->pIndexData->vnum ); act( "$n sacrifices $p to God.", ch, obj, NULL, TO_ROOM ); ! wiznet (ch, WIZ_SACCING, get_trust(ch) + 1, arg ); extract_obj( obj ); return; } --- 1572,1583 ---- ch->gold += 1; #endif send_to_char(arg, ch); ! sprintf (arg, "%s: %s(%d).", ch->name, obj->short_descr, obj->pIndexData->vnum ); act( "$n sacrifices $p to God.", ch, obj, NULL, TO_ROOM ); ! wiznet (ch, WIZ_SACCING, get_trust(ch), arg ); extract_obj( obj ); return; } *************** void do_steal( CHAR_DATA *ch, char *argu *** 2194,2203 **** { SET_BIT( ch->act, PLR_THIEF ); send_to_char( "*** You are now a THIEF!! ***\n\r", ch ); save_char_obj( ch ); ! sprintf( buf, "[NEWS] %s is a THIEF", ch->name ); ! send_to_all_char( buf ); } } } return; --- 2205,2215 ---- { SET_BIT( ch->act, PLR_THIEF ); send_to_char( "*** You are now a THIEF!! ***\n\r", ch ); save_char_obj( ch ); ! sprintf( buf, "%s became a THIEF by stealing from %s", ! ch->name, victim->name ); ! wiznet( ch, WIZ_FLAGS, get_trust( ch ), buf ); } } } return; *************** void do_register( CHAR_DATA *ch, char *a *** 3154,3161 **** --- 3166,3176 ---- ch->gold -= cost; SET_BIT( ch->act, PLR_REGISTER ); + + sprintf( buf, "%s just registered to PK at %s", ch->name, mob->short_descr ); + wiznet( ch, WIZ_FLAGS, get_trust( ch ), buf ); return; } diff -Pp -C4 3.1.10/src/act_wiz.c 3.1.11/src/act_wiz.c *** 3.1.10/src/act_wiz.c Wed Mar 19 21:32:39 1997 --- 3.1.11/src/act_wiz.c Sat Jun 28 16:58:13 1997 *************** void do_disconnect( CHAR_DATA *ch, char *** 218,227 **** void do_pardon( CHAR_DATA *ch, char *argument ) { CHAR_DATA *rch; CHAR_DATA *victim; ! char arg1 [ MAX_INPUT_LENGTH ]; ! char arg2 [ MAX_INPUT_LENGTH ]; rch = get_char( ch ); if ( !authorized( rch, "pardon" ) ) --- 218,228 ---- void do_pardon( CHAR_DATA *ch, char *argument ) { CHAR_DATA *rch; CHAR_DATA *victim; ! char arg1 [ MAX_INPUT_LENGTH ]; ! char arg2 [ MAX_INPUT_LENGTH ]; ! char buf [ MAX_STRING_LENGTH ]; rch = get_char( ch ); if ( !authorized( rch, "pardon" ) ) *************** void do_pardon( CHAR_DATA *ch, char *arg *** 254,325 **** { REMOVE_BIT( victim->act, PLR_KILLER ); send_to_char( "Killer flag removed.\n\r", ch ); send_to_char( "You are no longer a killer.\n\r", victim ); } if ( IS_SET( victim->act, PLR_THIEF ) ) { REMOVE_BIT( victim->act, PLR_THIEF ); send_to_char( "Thief flag removed.\n\r", ch ); send_to_char( "You are no longer a thief.\n\r", victim ); } if ( IS_SET( victim->act, PLR_REGISTER ) ) { REMOVE_BIT( victim->act, PLR_REGISTER ); send_to_char( "PK flag removed.\n\r", ch ); send_to_char( "You can no longer PK.\n\r", victim ); } return; } ! if ( !str_prefix( arg2, "killer" ) ) { ! if ( IS_SET( victim->act, PLR_KILLER ) ) ! { ! REMOVE_BIT( victim->act, PLR_KILLER ); ! send_to_char( "Killer flag removed.\n\r", ch ); ! send_to_char( "You are no longer a KILLER.\n\r", victim ); ! } ! else ! { ! SET_BIT( victim->act, PLR_KILLER ); ! send_to_char( "Killer flag set.\n\r", ch ); ! send_to_char( "You are now a KILLER!\n\r", victim ); ! } return; } ! if ( !str_prefix( arg2, "thief" ) ) { ! if ( IS_SET( victim->act, PLR_THIEF ) ) ! { ! REMOVE_BIT( victim->act, PLR_THIEF ); ! send_to_char( "Thief flag removed.\n\r", ch ); ! send_to_char( "You are no longer a THIEF.\n\r", victim ); ! } ! else ! { ! SET_BIT( victim->act, PLR_THIEF ); ! send_to_char( "Thief flag set.\n\r", ch ); ! send_to_char( "You are now a THIEF!\n\r", victim ); ! } return; } ! if ( !str_prefix( arg2, "pk" ) ) { ! if ( IS_SET( victim->act, PLR_REGISTER ) ) ! { ! REMOVE_BIT( victim->act, PLR_REGISTER ); ! send_to_char( "PK flag removed.\n\r", ch ); ! send_to_char( "You can no longer PK.\n\r", victim ); ! } ! else ! { ! SET_BIT( victim->act, PLR_REGISTER ); ! send_to_char( "PK flag set.\n\r", ch ); ! send_to_char( "You can now PK.\n\r", victim ); ! } return; } do_pardon( ch, "" ); --- 255,320 ---- { REMOVE_BIT( victim->act, PLR_KILLER ); send_to_char( "Killer flag removed.\n\r", ch ); send_to_char( "You are no longer a killer.\n\r", victim ); + sprintf( buf, "%s was pardonned for KILLER by %s", victim->name, + ch->name ); + wiznet( ch, WIZ_FLAGS, get_trust( ch ), buf ); } if ( IS_SET( victim->act, PLR_THIEF ) ) { REMOVE_BIT( victim->act, PLR_THIEF ); send_to_char( "Thief flag removed.\n\r", ch ); send_to_char( "You are no longer a thief.\n\r", victim ); + sprintf( buf, "%s was pardonned for THIEF by %s", victim->name, + ch->name ); + wiznet( ch, WIZ_FLAGS, get_trust( ch ), buf ); } if ( IS_SET( victim->act, PLR_REGISTER ) ) { REMOVE_BIT( victim->act, PLR_REGISTER ); send_to_char( "PK flag removed.\n\r", ch ); send_to_char( "You can no longer PK.\n\r", victim ); + sprintf( buf, "%s was pardonned for PK by %s", victim->name, + ch->name ); + wiznet( ch, WIZ_FLAGS, get_trust( ch ), buf ); } return; } ! if ( ( !str_prefix( arg2, "killer" ) ) ! && ( IS_SET( victim->act, PLR_KILLER ) ) ) { ! REMOVE_BIT( victim->act, PLR_KILLER ); ! send_to_char( "Killer flag removed.\n\r", ch ); ! send_to_char( "You are no longer a KILLER.\n\r", victim ); ! sprintf( buf, "%s was pardonned for KILLER by %s", victim->name, ! ch->name ); ! wiznet( ch, WIZ_FLAGS, get_trust( ch ), buf ); return; } ! if ( ( !str_prefix( arg2, "thief" ) ) ! && ( IS_SET( victim->act, PLR_THIEF ) ) ) { ! REMOVE_BIT( victim->act, PLR_THIEF ); ! send_to_char( "Thief flag removed.\n\r", ch ); ! send_to_char( "You are no longer a THIEF.\n\r", victim ); ! sprintf( buf, "%s was pardonned for THIEF by %s", victim->name, ! ch->name ); ! wiznet( ch, WIZ_FLAGS, get_trust( ch ), buf ); return; } ! if ( ( !str_prefix( arg2, "pk" ) ) ! && ( IS_SET( victim->act, PLR_REGISTER ) ) ) { ! REMOVE_BIT( victim->act, PLR_REGISTER ); ! send_to_char( "PK flag removed.\n\r", ch ); ! send_to_char( "You can no longer PK.\n\r", victim ); ! sprintf( buf, "%s was pardonned for PK by %s", victim->name, ! ch->name ); ! wiznet( ch, WIZ_FLAGS, get_trust( ch ), buf ); return; } do_pardon( ch, "" ); *************** void do_mstat( CHAR_DATA *ch, char *argu *** 942,950 **** strcat( buf1, buf ); } else { ! sprintf (buf, "\n\rGold: %d. Balance: %d. Shares: %d. Securety: %d\n\r", victim->gold, victim->pcdata->balance, victim->pcdata->shares, victim->pcdata->security ); strcat( buf1, buf ); } --- 937,945 ---- strcat( buf1, buf ); } else { ! sprintf (buf, "\n\rGold: %d. Balance: %d. Shares: %d. Security: %d\n\r", victim->gold, victim->pcdata->balance, victim->pcdata->shares, victim->pcdata->security ); strcat( buf1, buf ); } *************** void do_snoop( CHAR_DATA *ch, char *argu *** 1314,1322 **** { CHAR_DATA *rch; CHAR_DATA *victim; DESCRIPTOR_DATA *d; ! char arg [ MAX_INPUT_LENGTH ]; rch = get_char( ch ); if ( !authorized( rch, "snoop" ) ) --- 1309,1318 ---- { CHAR_DATA *rch; CHAR_DATA *victim; DESCRIPTOR_DATA *d; ! char arg [ MAX_INPUT_LENGTH ]; ! char buf [ MAX_STRING_LENGTH ]; rch = get_char( ch ); if ( !authorized( rch, "snoop" ) ) *************** void do_snoop( CHAR_DATA *ch, char *argu *** 1378,1385 **** --- 1374,1383 ---- } victim->desc->snoop_by = ch->desc; send_to_char( "Ok.\n\r", ch ); + sprintf( buf, "%s is snooping %s", ch->name, victim->name ); + wiznet( ch, WIZ_SNOOPS, get_trust( ch ), buf ); return; } *************** void do_snoop( CHAR_DATA *ch, char *argu *** 1387,1395 **** void do_switch( CHAR_DATA *ch, char *argument ) { CHAR_DATA *rch; CHAR_DATA *victim; ! char arg [ MAX_INPUT_LENGTH ]; rch = get_char( ch ); if ( !authorized( rch, "switch" ) ) --- 1385,1394 ---- void do_switch( CHAR_DATA *ch, char *argument ) { CHAR_DATA *rch; CHAR_DATA *victim; ! char arg [ MAX_INPUT_LENGTH ]; ! char buf [ MAX_STRING_LENGTH ]; rch = get_char( ch ); if ( !authorized( rch, "switch" ) ) *************** void do_switch( CHAR_DATA *ch, char *arg *** 1444,1458 **** --- 1443,1462 ---- ch->desc->original = ch; victim->desc = ch->desc; ch->desc = NULL; send_to_char( "Ok.\n\r", victim ); + sprintf( buf, "%s switched into %s", ch->desc->original->name, + ch->desc->character->short_descr ); + wiznet( ch, WIZ_SWITCHES, get_trust( ch->desc->original ), buf ); return; } void do_return( CHAR_DATA *ch, char *argument ) { + char buf [ MAX_STRING_LENGTH ]; + if ( !ch->desc ) return; if ( !ch->desc->original ) *************** void do_return( CHAR_DATA *ch, char *arg *** 1471,1478 **** --- 1475,1485 ---- ch->desc->character = ch->desc->original; ch->desc->original = NULL; ch->desc->character->desc = ch->desc; ch->desc = NULL; + + sprintf( buf, "%s returnes to his original body", ch->name ); + wiznet( ch, WIZ_SWITCHES, get_trust( ch ), buf ); return; } *************** void do_mload( CHAR_DATA *ch, char *argu *** 1481,1489 **** { CHAR_DATA *rch; CHAR_DATA *victim; MOB_INDEX_DATA *pMobIndex; ! char arg [ MAX_INPUT_LENGTH ]; rch = get_char( ch ); if ( !authorized( rch, "mload" ) ) --- 1488,1497 ---- { CHAR_DATA *rch; CHAR_DATA *victim; MOB_INDEX_DATA *pMobIndex; ! char arg [ MAX_INPUT_LENGTH ]; ! char buf [ MAX_STRING_LENGTH ]; rch = get_char( ch ); if ( !authorized( rch, "mload" ) ) *************** void do_mload( CHAR_DATA *ch, char *argu *** 1508,1515 **** --- 1516,1526 ---- victim->game_fun = pMobIndex->game_fun; /* Add game function */ char_to_room( victim, ch->in_room ); send_to_char( "Ok.\n\r", ch ); act( "$n has created $N!", ch, NULL, victim, TO_ROOM ); + sprintf( buf, "%s has loaded %s at %s [%d]", ch->name, victim->short_descr, + ch->in_room->name, ch->in_room->vnum ); + wiznet( ch, WIZ_LOAD, get_trust( ch ), buf ); return; } *************** void do_oload( CHAR_DATA *ch, char *argu *** 1518,1527 **** { OBJ_DATA *obj; CHAR_DATA *rch; OBJ_INDEX_DATA *pObjIndex; ! char arg1 [ MAX_INPUT_LENGTH ]; ! char arg2 [ MAX_INPUT_LENGTH ]; int level; rch = get_char( ch ); --- 1529,1539 ---- { OBJ_DATA *obj; CHAR_DATA *rch; OBJ_INDEX_DATA *pObjIndex; ! char arg1 [ MAX_INPUT_LENGTH ]; ! char arg2 [ MAX_INPUT_LENGTH ]; ! char buf [ MAX_STRING_LENGTH ]; int level; rch = get_char( ch ); *************** void do_oload( CHAR_DATA *ch, char *argu *** 1575,1582 **** --- 1587,1597 ---- obj_to_room( obj, ch->in_room ); act( "$n has created $p!", ch, obj, NULL, TO_ROOM ); } send_to_char( "Ok.\n\r", ch ); + sprintf( buf, "%s has loaded %s at %s [%d]", ch->name, obj->short_descr, + ch->in_room->name, ch->in_room->vnum ); + wiznet( ch, WIZ_LOAD, get_trust( ch ), buf ); return; } *************** void do_advance( CHAR_DATA *ch, char *ar *** 1725,1741 **** victim->practice = 0; victim->hit = victim->max_hit; victim->mana = victim->max_mana; victim->move = victim->max_move; ! sprintf( buf, "%s has been demoted by %s", victim->name, ch->name ); wiznet( victim, WIZ_LEVELS, get_trust( ch ), buf ); advance_level( victim ); } else { send_to_char( "Raising a player's level!\n\r", ch ); send_to_char( "**** OOOOHHHHHHHHHH YYYYEEEESSS ****\n\r", victim ); ! sprintf( buf, "%s has been advanced by %s", victim->name, ch->name ); wiznet( victim, WIZ_LEVELS, get_trust( ch ), buf ); } for ( iLevel = victim->level ; iLevel < level; iLevel++ ) --- 1740,1759 ---- victim->practice = 0; victim->hit = victim->max_hit; victim->mana = victim->max_mana; victim->move = victim->max_move; ! victim->pcdata->learn = 0; ! sprintf( buf, "%s has been demoted to level %d by %s", victim->name, ! level, ch->name ); wiznet( victim, WIZ_LEVELS, get_trust( ch ), buf ); advance_level( victim ); } else { send_to_char( "Raising a player's level!\n\r", ch ); send_to_char( "**** OOOOHHHHHHHHHH YYYYEEEESSS ****\n\r", victim ); ! sprintf( buf, "%s has been advanced to level %d by %s", victim->name, ! level, ch->name ); wiznet( victim, WIZ_LEVELS, get_trust( ch ), buf ); } for ( iLevel = victim->level ; iLevel < level; iLevel++ ) *************** void do_advance( CHAR_DATA *ch, char *ar *** 1754,1763 **** void do_trust( CHAR_DATA *ch, char *argument ) { CHAR_DATA *rch; CHAR_DATA *victim; ! char arg1 [ MAX_INPUT_LENGTH ]; ! char arg2 [ MAX_INPUT_LENGTH ]; int level; rch = get_char( ch ); --- 1772,1782 ---- void do_trust( CHAR_DATA *ch, char *argument ) { CHAR_DATA *rch; CHAR_DATA *victim; ! char arg1 [ MAX_INPUT_LENGTH ]; ! char arg2 [ MAX_INPUT_LENGTH ]; ! char buf [ MAX_STRING_LENGTH ]; int level; rch = get_char( ch ); *************** void do_trust( CHAR_DATA *ch, char *argu *** 1795,1812 **** send_to_char( "Limited to your trust.\n\r", ch ); return; } ! /* ! * Little extra check by Canth (canth@xs4all.nl) ! * This works seeing as I'm trusted 55 ;-) ! */ ! if ( get_trust(ch) <= get_trust(victim) ) { ! send_to_char( "You cannot trust your peer nor your superior.\n\r", ch ); return; } victim->trust = level; return; } --- 1814,1831 ---- send_to_char( "Limited to your trust.\n\r", ch ); return; } ! if ( get_trust(ch) < get_trust(victim) ) { ! send_to_char( "You cannot trust your superior.\n\r", ch ); return; } + sprintf( buf, "%s has been trusted at level %d by %s", victim->name, + level, ch->name ); + wiznet( ch, WIZ_LEVELS, get_trust( ch ), buf ); + victim->trust = level; return; } *************** void do_restore( CHAR_DATA *ch, char *ar *** 1871,1879 **** victim->move = victim->max_move; update_pos( victim ); act( "$n has restored you.", ch, NULL, victim, TO_VICT ); } ! sprintf( buf, "%s has restored the whole mud.\n\r", ch->name ); wiznet (ch, WIZ_RESTORE, get_trust( ch ), buf ); send_to_char( "Aww...how sweet :)...Done.\n\r", ch ); } else --- 1890,1898 ---- victim->move = victim->max_move; update_pos( victim ); act( "$n has restored you.", ch, NULL, victim, TO_VICT ); } ! sprintf( buf, "%s has restored the whole mud.", ch->name ); wiznet (ch, WIZ_RESTORE, get_trust( ch ), buf ); send_to_char( "Aww...how sweet :)...Done.\n\r", ch ); } else *************** void do_restore( CHAR_DATA *ch, char *ar *** 1894,1902 **** victim->mana = victim->max_mana; victim->move = victim->max_move; update_pos( victim ); act( "$n has restored you.", ch, NULL, victim, TO_VICT ); ! sprintf( buf, "%s has restored %s.\n\r", ch->name, victim->name ); wiznet (ch, WIZ_RESTORE, get_trust( ch ), buf ); send_to_char( "Ok.\n\r", ch ); } --- 1913,1921 ---- victim->mana = victim->max_mana; victim->move = victim->max_move; update_pos( victim ); act( "$n has restored you.", ch, NULL, victim, TO_VICT ); ! sprintf( buf, "%s has restored %s.", ch->name, victim->name ); wiznet (ch, WIZ_RESTORE, get_trust( ch ), buf ); send_to_char( "Ok.\n\r", ch ); } *************** BAN_DATA * ban_list; *** 2243,2252 **** void do_ban( CHAR_DATA *ch, char *argument ) { BAN_DATA *pban; CHAR_DATA *rch; ! char buf [ MAX_STRING_LENGTH ]; ! char arg [ MAX_INPUT_LENGTH ]; if ( IS_NPC( ch ) ) return; --- 2262,2273 ---- void do_ban( CHAR_DATA *ch, char *argument ) { BAN_DATA *pban; CHAR_DATA *rch; ! char buf [ MAX_STRING_LENGTH ]; ! char arg [ MAX_INPUT_LENGTH ]; ! char arg2 [ MAX_STRING_LENGTH ]; ! int level; if ( IS_NPC( ch ) ) return; *************** void do_ban( CHAR_DATA *ch, char *argume *** 2254,2272 **** if ( !authorized( rch, "ban" ) ) return; ! one_argument( argument, arg ); if ( arg[0] == '\0' ) { strcpy( buf, "Banned sites:\n\r" ); for ( pban = ban_list; pban; pban = pban->next ) { ! strcat( buf, pban->name ); ! strcat( buf, "\n\r" ); } - send_to_char( buf, ch ); return; } for ( pban = ban_list; pban; pban = pban->next ) --- 2275,2293 ---- if ( !authorized( rch, "ban" ) ) return; ! argument = one_argument( argument, arg ); ! one_argument( argument, arg2 ); if ( arg[0] == '\0' ) { strcpy( buf, "Banned sites:\n\r" ); for ( pban = ban_list; pban; pban = pban->next ) { ! sprintf( buf, "%50s level: %d\n\r", pban->name, pban->level ); ! send_to_char( buf, ch ); } return; } for ( pban = ban_list; pban; pban = pban->next ) *************** void do_ban( CHAR_DATA *ch, char *argume *** 2277,2284 **** --- 2298,2307 ---- return; } } + level = URANGE( 1, atoi( arg2 ), MAX_LEVEL ); + if ( !ban_free ) { pban = alloc_perm( sizeof( *pban ) ); } *************** void do_ban( CHAR_DATA *ch, char *argume *** 2288,2295 **** --- 2311,2319 ---- ban_free = ban_free->next; } pban->name = str_dup( arg ); + pban->level = level; pban->next = ban_list; ban_list = pban; send_to_char( "Ok.\n\r", ch ); ban_update( ); diff -Pp -C4 3.1.10/src/act_wiz2.c 3.1.11/src/act_wiz2.c *** 3.1.10/src/act_wiz2.c Fri Mar 14 19:37:46 1997 --- 3.1.11/src/act_wiz2.c Sun Jun 15 14:50:52 1997 *************** void do_dog( CHAR_DATA *ch, char *argume *** 332,339 **** --- 332,340 ---- ROOM_INDEX_DATA *location; MOB_INDEX_DATA *pMobIndex; CHAR_DATA *mob; CHAR_DATA *victim; + char buf [ MAX_STRING_LENGTH ]; if ( !authorized( ch, "dog" ) ) return; *************** void do_dog( CHAR_DATA *ch, char *argume *** 389,396 **** --- 390,400 ---- act( "$n is suddenly turned into a small doggy!!", victim, NULL, NULL, TO_ROOM ); send_to_char( "You suddenly turn into a small doggy!", victim ); send_to_char( "Ok.\n\r", ch ); + sprintf( buf, "%s was turned into a little doggy by %s", + victim->desc->original->name, ch->name ); + wiznet( ch, WIZ_SWITCHES, get_trust( ch ), buf ); return; } /* Idea from Talen of Vego's do_where command */ *************** void do_imtlset( CHAR_DATA *ch, char *ar *** 693,703 **** send_to_char( "Not on NPC's.\n\r", ch ); return; } ! if ( get_trust(rch) <= get_trust(victim) && rch != victim ) { ! send_to_char( "You may not imtlset your peer nor your superior.\n\r", ch ); return; } --- 697,707 ---- send_to_char( "Not on NPC's.\n\r", ch ); return; } ! if ( get_trust(rch) < get_trust(victim) && rch != victim ) { ! send_to_char( "You may not imtlset your superior.\n\r", ch ); return; } *************** void do_string( CHAR_DATA *ch, char *arg *** 1397,1406 **** void do_setkill( CHAR_DATA *ch, char *argument ) { CHAR_DATA *rch; CHAR_DATA *victim; ! char arg1 [ MAX_INPUT_LENGTH ]; ! char arg2 [ MAX_INPUT_LENGTH ]; rch = get_char( ch ); if ( !authorized( rch, "setkill" ) ) --- 1401,1411 ---- void do_setkill( CHAR_DATA *ch, char *argument ) { CHAR_DATA *rch; CHAR_DATA *victim; ! char arg1 [ MAX_INPUT_LENGTH ]; ! char arg2 [ MAX_INPUT_LENGTH ]; ! char buf [ MAX_STRING_LENGTH ]; rch = get_char( ch ); if ( !authorized( rch, "setkill" ) ) *************** void do_setkill( CHAR_DATA *ch, char *ar *** 1410,1418 **** argument = one_argument( argument, arg2 ); if ( arg1[0] == '\0' || arg2[0] == '\0' ) { ! send_to_char( "Syntax: setkill <character> <killer|thief>.\n\r", ch ); return; } if ( !( victim = get_char_world( ch, arg1 ) ) ) --- 1415,1423 ---- argument = one_argument( argument, arg2 ); if ( arg1[0] == '\0' || arg2[0] == '\0' ) { ! send_to_char( "Syntax: setkill <character> <killer|thief|PK>.\n\r", ch ); return; } if ( !( victim = get_char_world( ch, arg1 ) ) ) *************** void do_setkill( CHAR_DATA *ch, char *ar *** 1431,1456 **** { if (!IS_SET( victim->act, PLR_KILLER ) ) { SET_BIT( victim->act, PLR_KILLER ); ! send_to_char( "Killer flag set.\n\r", ch ); send_to_char( "You are a KILLER.\n\r", victim ); } return; } if ( !str_cmp( arg2, "thief" ) ) { ! if (!IS_SET( victim->act, PLR_THIEF ) ) { ! SET_BIT( victim->act, PLR_THIEF ); ! send_to_char( "Thief flag set.\n\r", ch ); send_to_char( "You are a THIEF.\n\r", victim ); } return; } ! send_to_char( "Syntax: setkill <character> <killer|thief>.\n\r", ch ); return; } void do_pwhere( CHAR_DATA *ch, char *argument ) --- 1436,1478 ---- { if (!IS_SET( victim->act, PLR_KILLER ) ) { SET_BIT( victim->act, PLR_KILLER ); ! send_to_char( "Killer flag set.\n\r", ch ); send_to_char( "You are a KILLER.\n\r", victim ); + sprintf( buf, "%s was set KILLER by %s", victim->name, ch->name ); + wiznet( ch, WIZ_FLAGS, get_trust( ch ), buf ); } return; } if ( !str_cmp( arg2, "thief" ) ) { ! if (!IS_SET( victim->act, PLR_THIEF ) ) { ! SET_BIT( victim->act, PLR_THIEF ); ! send_to_char( "Thief flag set.\n\r", ch ); send_to_char( "You are a THIEF.\n\r", victim ); + sprintf( buf, "%s was set THIEF by %s", victim->name, ch->name ); + wiznet( ch, WIZ_FLAGS, get_trust( ch ), buf ); } return; } ! if ( !str_cmp( arg2, "pk" ) ) ! { ! if (!IS_SET( victim->act, PLR_REGISTER ) ) ! { ! SET_BIT( victim->act, PLR_REGISTER ); ! send_to_char( "PK flag set.\n\r", ch ); ! send_to_char( "You are a PK.\n\r", victim ); ! sprintf( buf, "%s was set PK by %s", victim->name, ch->name ); ! wiznet( ch, WIZ_FLAGS, get_trust( ch ), buf ); ! } ! return; ! } ! ! do_setkill( ch, "" ); return; } void do_pwhere( CHAR_DATA *ch, char *argument ) *************** void do_rings ( CHAR_DATA *ch, char *arg *** 1957,1965 **** char buf [ MAX_STRING_LENGTH ]; OBJ_DATA * ring; EXTRA_DESCR_DATA * ed; ! if ( !authorized( ch, "rings" ) ) return; /* Don't be scared off by the humoungous code... It's not all that tricky... Honest */ --- 1979,1987 ---- char buf [ MAX_STRING_LENGTH ]; OBJ_DATA * ring; EXTRA_DESCR_DATA * ed; ! if ( !authorized( ch, "newring" ) ) return; /* Don't be scared off by the humoungous code... It's not all that tricky... Honest */ *************** void do_marry( CHAR_DATA *ch, char *argu *** 2166,2174 **** /* Ok, they _are_ married to each other... Now let's divorce them finally */ spouse1->pcdata->spouse = NULL; /* Fix by Maniac */ spouse2->pcdata->spouse = NULL; /* Fix by Maniac */ /* Let's inform everyone of this sad event now */ ! sprintf( buf, "%s and %s just divorced each other\n\r", spouse1->name, spouse2->name ); send_to_all_char( buf ); return; } --- 2188,2196 ---- /* Ok, they _are_ married to each other... Now let's divorce them finally */ spouse1->pcdata->spouse = NULL; /* Fix by Maniac */ spouse2->pcdata->spouse = NULL; /* Fix by Maniac */ /* Let's inform everyone of this sad event now */ ! sprintf( buf, "%s and %s just divorced each other.\n\r", spouse1->name, spouse2->name ); send_to_all_char( buf ); return; } *************** void do_marry( CHAR_DATA *ch, char *argu *** 2197,2205 **** do_rings( ch, spouse1->name ); do_rings( ch, spouse2->name ); /* Let's inform everyone of this happy event now */ ! sprintf( buf, "%s and %s have just married each other\n\r", spouse1->name, spouse2->name ); send_to_all_char( buf ); return; /* That's all folks! */ --- 2219,2227 ---- do_rings( ch, spouse1->name ); do_rings( ch, spouse2->name ); /* Let's inform everyone of this happy event now */ ! sprintf( buf, "%s and %s have just married each other.\n\r", spouse1->name, spouse2->name ); send_to_all_char( buf ); return; /* That's all folks! */ *************** void do_marry( CHAR_DATA *ch, char *argu *** 2210,2228 **** * divorce function... Just calls marry with undo added * This is part of the marriage code by Canth (canth@xs4all.nl) * of Mythran */ void do_divorce ( CHAR_DATA *ch, char *argument ) { char * buf; ! /* This seems pretty much like the "proper" way to do it... */ ! buf = str_dup ( argument ); buf = strcat( buf, " undo" ); do_marry( ch, buf ); return; } ! /* Recursive cloning. To ensure cloning items in bags in backpacks in ... */ void recursive_clone( CHAR_DATA *ch, OBJ_DATA *obj, OBJ_DATA *clone ) { --- 2232,2252 ---- * divorce function... Just calls marry with undo added * This is part of the marriage code by Canth (canth@xs4all.nl) * of Mythran */ + /* This function disabled.. marry <char> <char> undo works.. + * Calling it using the divorce function crashes the mud. + * (str_dup crash in ssm.c) - Canth 7/6/97 void do_divorce ( CHAR_DATA *ch, char *argument ) { char * buf; ! strcpy ( buf, argument ); buf = strcat( buf, " undo" ); do_marry( ch, buf ); return; } ! */ /* Recursive cloning. To ensure cloning items in bags in backpacks in ... */ void recursive_clone( CHAR_DATA *ch, OBJ_DATA *obj, OBJ_DATA *clone ) { *************** void do_clone ( CHAR_DATA *ch, char *arg *** 2248,2255 **** --- 2272,2282 ---- char arg [ MAX_INPUT_LENGTH ]; char *arg2; CHAR_DATA *mob = NULL; OBJ_DATA *obj = NULL; + + if( !authorized( ch, "clone" ) ) + return; arg2 = one_argument( argument, arg ); if ( arg[0] == '\0' ) diff -Pp -C4 3.1.10/src/comm.c 3.1.11/src/comm.c *** 3.1.10/src/comm.c Sun Mar 16 21:27:48 1997 --- 3.1.11/src/comm.c Mon Jun 23 20:18:47 1997 *************** void game_loop_unix( int control ) *** 873,881 **** #if defined( unix ) void new_descriptor( int control ) { - BAN_DATA *pban; static DESCRIPTOR_DATA d_zero; DESCRIPTOR_DATA *dnew; struct sockaddr_in sock; struct hostent *from; --- 873,880 ---- *************** void new_descriptor( int control ) *** 953,984 **** log_string( log_buf ); from = gethostbyaddr( (char *) &sock.sin_addr, sizeof(sock.sin_addr), AF_INET ); dnew->host = str_dup( from ? from->h_name : buf ); } - /* - * Swiftest: I added the following to ban sites. I don't - * endorse banning of sites, but Copper has few descriptors now - * and some people from certain sites keep abusing access by - * using automated 'autodialers' and leaving connections hanging. - * - * Furey: added suffix check by request of Nickel of HiddenWorlds. - */ - for ( pban = ban_list; pban; pban = pban->next ) - { - if ( !str_suffix( pban->name, dnew->host ) ) - { - write_to_descriptor( desc, - "Your site has been banned from this Mud.\n\r", 0 ); - close( desc ); - free_string( dnew->host ); - free_mem( dnew->outbuf, dnew->outsize ); - dnew->next = descriptor_free; - descriptor_free = dnew; - return; - } - } /* * Init descriptor data. */ --- 952,963 ---- log_string( log_buf ); from = gethostbyaddr( (char *) &sock.sin_addr, sizeof(sock.sin_addr), AF_INET ); dnew->host = str_dup( from ? from->h_name : buf ); + sprintf( log_buf, "New connection: %s (%s)", dnew->host, buf ); + wiznet ( NULL, WIZ_LOGINS, L_DIR, log_buf ); } /* * Init descriptor data. */ *************** void read_from_buffer( DESCRIPTOR_DATA * *** 1217,1224 **** --- 1196,1204 ---- if ( ++d->repeat >= 20 ) { sprintf( log_buf, "%s input spamming!", d->host ); log_string( log_buf ); + wiznet( NULL, WIZ_SPAM, 0, log_buf ); write_to_descriptor( d->descriptor, "\n\r*** PUT A LID ON IT!!! ***\n\r", 0 ); strcpy( d->incomm, "quit" ); } *************** bool write_to_descriptor( int desc, char *** 1552,1559 **** --- 1532,1540 ---- * Deal with sockets that haven't logged in yet. */ void nanny( DESCRIPTOR_DATA *d, char *argument ) { + BAN_DATA *pban; CHAR_DATA *ch; NOTE_DATA *pnote; char *pwdnew; char *classname; *************** void nanny( DESCRIPTOR_DATA *d, char *ar *** 1605,1612 **** --- 1586,1616 ---- close_socket( d ); return; } + /* + * Swiftest: I added the following to ban sites. I don't + * endorse banning of sites, but Copper has few descriptors now + * and some people from certain sites keep abusing access by + * using automated 'autodialers' and leaving connections hanging. + * + * Furey: added suffix check by request of Nickel of HiddenWorlds. + * + * Bell: Added level check to allow cool players from banned sites + * to log on after all :) + */ + for ( pban = ban_list; pban; pban = pban->next ) + { + if ( ( !str_suffix( pban->name, d->host ) ) + && ( ch->level < pban->level ) ) + { + write_to_buffer( d, + "Your site has been banned from this Mud.\n\r", 0 ); + close_socket( d ); + return; + } + } + if ( ( ch->current_age > ch->death_age ) && ( ch->death_age > 0) && ( get_trust( ch ) <= LEVEL_HERO ) ) { sprintf( log_buf, "%s tried to get out of its grave.", ch->name ); *************** void nanny( DESCRIPTOR_DATA *d, char *ar *** 1974,1989 **** #endif ch->pcdata->clan = CLAN_NONE; ch->pcdata->clanlevel = CLAN_NOLEVEL; #if defined (START_AGE_SYSTEM) ! ch->current_age = 428400 * ( race_table[ch->race].start_age + dice(race_table[ch->race].start_age_mod[0], race_table[ch->race].start_age_mod[1]) ); #else ch->current_age = -1; #endif #if defined (DEATH_AGE_SYSTEM) ! ch->death_age = 428400 * ( race_table[ch->race].death_age + dice(race_table[ch->race].death_age_mod[0], race_table[ch->race].death_age_mod[1]) ); #else ch->death_age = -1; /* Immortality (No death of old age) */ --- 1978,1993 ---- #endif ch->pcdata->clan = CLAN_NONE; ch->pcdata->clanlevel = CLAN_NOLEVEL; #if defined (START_AGE_SYSTEM) ! ch->current_age = MUD_YEAR * ( race_table[ch->race].start_age + dice(race_table[ch->race].start_age_mod[0], race_table[ch->race].start_age_mod[1]) ); #else ch->current_age = -1; #endif #if defined (DEATH_AGE_SYSTEM) ! ch->death_age = MUD_YEAR * ( race_table[ch->race].death_age + dice(race_table[ch->race].death_age_mod[0], race_table[ch->race].death_age_mod[1]) ); #else ch->death_age = -1; /* Immortality (No death of old age) */ *************** void nanny( DESCRIPTOR_DATA *d, char *ar *** 2039,2047 **** ch->gold -= (ch->gold - 250000) / 10; } #endif ! sprintf( log_buf, "%s has entered the game.\n\r", ch->name ); wiznet(ch, WIZ_LOGINS, get_trust( ch ), log_buf ); act( "$n has entered the game.", ch, NULL, NULL, TO_ROOM ); do_look( ch, "auto" ); --- 2043,2051 ---- ch->gold -= (ch->gold - 250000) / 10; } #endif ! sprintf( log_buf, "%s has entered the game.", ch->name ); wiznet(ch, WIZ_LOGINS, get_trust( ch ), log_buf ); act( "$n has entered the game.", ch, NULL, NULL, TO_ROOM ); do_look( ch, "auto" ); diff -Pp -C4 3.1.10/src/config.h 3.1.11/src/config.h *** 3.1.10/src/config.h Sun Mar 16 20:41:51 1997 --- 3.1.11/src/config.h Sat May 17 15:59:32 1997 *************** *** 1,6 **** /* ! * Mythran Mud 3.1.1 * Mud Configuration file * * Various extra options to change the way the mud is run... * --- 1,6 ---- /* ! * Mythran Mud 3.1.11 * Mud Configuration file * * Various extra options to change the way the mud is run... * diff -Pp -C4 3.1.10/src/db.c 3.1.11/src/db.c *** 3.1.10/src/db.c Sun Mar 16 21:36:30 1997 --- 3.1.11/src/db.c Mon Jun 23 19:54:52 1997 *************** void boot_db( void ) *** 283,306 **** lhour = ( current_time - 650336715 ) / ( PULSE_TICK / PULSE_PER_SECOND ); ! time_info.hour = lhour % 24; ! lday = lhour / 24; ! time_info.day = lday % 35; ! lmonth = lday / 35; ! time_info.month = lmonth % 17; ! time_info.year = lmonth / 17; ! ! if ( time_info.hour < 5 ) weather_info.sunlight = SUN_DARK; ! else if ( time_info.hour < 6 ) weather_info.sunlight = SUN_RISE; ! else if ( time_info.hour < 19 ) weather_info.sunlight = SUN_LIGHT; ! else if ( time_info.hour < 20 ) weather_info.sunlight = SUN_SET; else weather_info.sunlight = SUN_DARK; weather_info.change = 0; weather_info.mmhg = 960; ! if ( time_info.month >= 7 && time_info.month <=12 ) weather_info.mmhg += number_range( 1, 50 ); else weather_info.mmhg += number_range( 1, 80 ); --- 283,308 ---- lhour = ( current_time - 650336715 ) / ( PULSE_TICK / PULSE_PER_SECOND ); ! /* Damn, check these new ones out.. Now no matter how many days/ ! week/month/year, it always works. Canth - 9-6-97 */ ! time_info.hour = lhour % HOUR_DAY; ! lday = lhour / HOUR_DAY; ! time_info.day = lday % DAY_MONTH; ! lmonth = lday / DAY_MONTH; ! time_info.month = lmonth % MONTH_YEAR; ! time_info.year = lmonth / MONTH_YEAR; ! ! if ( time_info.hour < ( HOUR_DAY / 5 ) ) weather_info.sunlight = SUN_DARK; ! else if ( time_info.hour < ( HOUR_DAY / 5 ) + 1 ) weather_info.sunlight = SUN_RISE; ! else if ( time_info.hour < ( HOUR_DAY * 4 / 5 ) ) weather_info.sunlight = SUN_LIGHT; ! else if ( time_info.hour < ( HOUR_DAY * 4 / 5 ) + 1 ) weather_info.sunlight = SUN_SET; else weather_info.sunlight = SUN_DARK; weather_info.change = 0; weather_info.mmhg = 960; ! if ( time_info.month >= (MONTH_YEAR / 5) && time_info.month <= MONTH_YEAR ) weather_info.mmhg += number_range( 1, 50 ); else weather_info.mmhg += number_range( 1, 80 ); *************** void load_ban( void ) *** 1672,1679 **** --- 1674,1682 ---- ban_free = ban_free->next; } pban->name = fread_string( fp ); + pban->level = fread_number( fp ); pban->next = ban_list; ban_list = pban; } diff -Pp -C4 3.1.10/src/fight.c 3.1.11/src/fight.c *** 3.1.10/src/fight.c Mon Mar 10 20:55:15 1997 --- 3.1.11/src/fight.c Sun Jun 15 14:35:12 1997 *************** void one_hit( CHAR_DATA *ch, CHAR_DATA * *** 389,396 **** --- 389,397 ---- */ void damage( CHAR_DATA *ch, CHAR_DATA *victim, int dam, int dt, int wpn ) { int sntemp; + char buf [ MAX_STRING_LENGTH ]; if ( victim->position == POS_DEAD ) return; *************** void damage( CHAR_DATA *ch, CHAR_DATA *v *** 590,597 **** --- 591,605 ---- case POS_DEAD: send_to_char( "You have been KILLED!!\n\r\n\r", victim ); act( "$n is DEAD!!", victim, NULL, NULL, TO_ROOM ); + if ( !IS_NPC( victim ) ) + { + sprintf( buf, "%s died at the hands of %s at %s [%d]", victim->name, + ( IS_NPC( ch ) ? ch->short_descr : ch->name ), + victim->in_room->name, victim->in_room->vnum); + wiznet ( ch, WIZ_DEATHS, get_trust( ch ), buf ); + } break; default: if ( dam > victim->max_hit / 4 ) *************** void check_killer( CHAR_DATA *ch, CHAR_D *** 881,888 **** --- 889,899 ---- send_to_char( "You are a KILLER! You lose 600 exps.\n\r", ch ); sprintf( buf, "Help! I'm being attacked by %s!", ch->name ); do_shout( victim, buf ); SET_BIT( ch->act, PLR_KILLER ); + sprintf( buf, "%s became a killer by attacking %s", ch->name, + victim->name ); + wiznet( ch, WIZ_FLAGS, get_trust( ch ), buf ); gain_exp( ch, -600 ); demote_level( ch ); for ( obj = ch->carrying; obj; obj = obj_next ) diff -Pp -C4 3.1.10/src/handler.c 3.1.11/src/handler.c *** 3.1.10/src/handler.c Sun Mar 16 21:31:05 1997 --- 3.1.11/src/handler.c Mon Jun 23 21:02:45 1997 *************** int get_trust( CHAR_DATA *ch ) *** 68,81 **** * Retrieve a character's age. */ int get_age( CHAR_DATA *ch ) { ! return ( ch->current_age / 428400 ); /* 428400 assumes 30 secs/mud hour * 24 hours/day * 35 days/month * 17 months/year - Kahn */ ! /* current_age at last login - Canth */ } --- 68,85 ---- * Retrieve a character's age. */ int get_age( CHAR_DATA *ch ) { ! return ( ( ch->current_age + current_time - ch->logon ) / MUD_YEAR ); ! ! /* MUD_YEAR defined in merc.h.. (252000) */ /* 428400 assumes 30 secs/mud hour * 24 hours/day * 35 days/month * 17 months/year - Kahn */ ! /* Changed to 252000, assuming 30 secs/mud hour * 24 hours/day * ! 7 days/week * 5 weeks/month * 10 months/year - Canth */ ! } diff -Pp -C4 3.1.10/src/interp.c 3.1.11/src/interp.c *** 3.1.10/src/interp.c Mon Mar 17 20:05:55 1997 --- 3.1.11/src/interp.c Sat Jun 7 14:48:02 1997 *************** const struct cmd_type cmd_table [ ] = *** 113,131 **** { "examine", do_examine, POS_RESTING, 0, LOG_NORMAL }, { "help", do_help, POS_DEAD, 0, LOG_NORMAL }, { "idea", do_idea, POS_DEAD, 0, LOG_NORMAL }, { "report", do_report, POS_DEAD, 0, LOG_NORMAL }, ! { "pagelength", do_pagelen, POS_DEAD, 0, LOG_NORMAL }, { "read", do_look, POS_RESTING, 0, LOG_NORMAL }, { "score", do_score, POS_DEAD, 0, LOG_NORMAL }, ! { "slist", do_slist, POS_DEAD, 0, LOG_NORMAL }, { "socials", do_socials, POS_DEAD, 0, LOG_NORMAL }, { "time", do_time, POS_DEAD, 0, LOG_NORMAL }, { "typo", do_typo, POS_DEAD, 0, LOG_NORMAL }, { "weather", do_weather, POS_RESTING, 0, LOG_NORMAL }, { "who", do_who, POS_DEAD, 0, LOG_NORMAL }, { "whois", do_whois, POS_DEAD, 0, LOG_NORMAL }, ! { "wizlist", do_wizlist, POS_DEAD, 0, LOG_NORMAL }, /* * Combat commands. */ --- 113,131 ---- { "examine", do_examine, POS_RESTING, 0, LOG_NORMAL }, { "help", do_help, POS_DEAD, 0, LOG_NORMAL }, { "idea", do_idea, POS_DEAD, 0, LOG_NORMAL }, { "report", do_report, POS_DEAD, 0, LOG_NORMAL }, ! { "pagelength", do_pagelen, POS_DEAD, 0, LOG_NORMAL }, { "read", do_look, POS_RESTING, 0, LOG_NORMAL }, { "score", do_score, POS_DEAD, 0, LOG_NORMAL }, ! { "slist", do_slist, POS_DEAD, 0, LOG_NORMAL }, { "socials", do_socials, POS_DEAD, 0, LOG_NORMAL }, { "time", do_time, POS_DEAD, 0, LOG_NORMAL }, { "typo", do_typo, POS_DEAD, 0, LOG_NORMAL }, { "weather", do_weather, POS_RESTING, 0, LOG_NORMAL }, { "who", do_who, POS_DEAD, 0, LOG_NORMAL }, { "whois", do_whois, POS_DEAD, 0, LOG_NORMAL }, ! { "wizlist", do_wizlist, POS_DEAD, 0, LOG_NORMAL }, /* * Combat commands. */ *************** const struct cmd_type cmd_table [ ] = *** 144,167 **** /* * Configuration commands. */ ! { "auto", do_auto, POS_DEAD, 0, LOG_NORMAL }, ! { "autoexit", do_autoexit, POS_DEAD, 0, LOG_NORMAL }, ! { "autogold", do_autogold, POS_DEAD, 0, LOG_NORMAL }, ! { "autoloot", do_autoloot, POS_DEAD, 0, LOG_NORMAL }, ! { "autosac", do_autosac, POS_DEAD, 0, LOG_NORMAL }, ! { "blank", do_blank, POS_DEAD, 0, LOG_NORMAL }, ! { "brief", do_brief, POS_DEAD, 0, LOG_NORMAL }, { "channels", do_channels, POS_DEAD, 0, LOG_NORMAL }, { "color", do_colour, POS_DEAD, 0, LOG_NORMAL }, { "colour", do_colour, POS_DEAD, 0, LOG_NORMAL }, ! { "combine", do_combine, POS_DEAD, 0, LOG_NORMAL }, { "config", do_config, POS_DEAD, 0, LOG_NORMAL }, { "description", do_description, POS_DEAD, 0, LOG_NORMAL }, { "password", do_password, POS_DEAD, 0, LOG_NEVER }, ! { "prompt", do_prompt, POS_DEAD, 0, LOG_NORMAL }, ! { "sedit", do_sedit, POS_DEAD, 3, LOG_ALWAYS }, { "title", do_title, POS_DEAD, 0, LOG_NORMAL }, { "wimpy", do_wimpy, POS_DEAD, 0, LOG_NORMAL }, /* --- 144,166 ---- /* * Configuration commands. */ ! { "auto", do_auto, POS_DEAD, 0, LOG_NORMAL }, ! { "autoexit", do_autoexit, POS_DEAD, 0, LOG_NORMAL }, ! { "autogold", do_autogold, POS_DEAD, 0, LOG_NORMAL }, ! { "autoloot", do_autoloot, POS_DEAD, 0, LOG_NORMAL }, ! { "autosac", do_autosac, POS_DEAD, 0, LOG_NORMAL }, ! { "blank", do_blank, POS_DEAD, 0, LOG_NORMAL }, ! { "brief", do_brief, POS_DEAD, 0, LOG_NORMAL }, { "channels", do_channels, POS_DEAD, 0, LOG_NORMAL }, { "color", do_colour, POS_DEAD, 0, LOG_NORMAL }, { "colour", do_colour, POS_DEAD, 0, LOG_NORMAL }, ! { "combine", do_combine, POS_DEAD, 0, LOG_NORMAL }, { "config", do_config, POS_DEAD, 0, LOG_NORMAL }, { "description", do_description, POS_DEAD, 0, LOG_NORMAL }, { "password", do_password, POS_DEAD, 0, LOG_NEVER }, ! { "prompt", do_prompt, POS_DEAD, 0, LOG_NORMAL }, { "title", do_title, POS_DEAD, 0, LOG_NORMAL }, { "wimpy", do_wimpy, POS_DEAD, 0, LOG_NORMAL }, /* *************** const struct cmd_type cmd_table [ ] = *** 193,201 **** { "brew", do_brew, POS_STANDING, 0, LOG_NORMAL }, { "brandish", do_brandish, POS_RESTING, 0, LOG_NORMAL }, { "close", do_close, POS_RESTING, 0, LOG_NORMAL }, { "cdonate", do_cdonate, POS_RESTING, 0, LOG_NORMAL }, ! { "donate", do_donate, POS_RESTING, 0, LOG_NORMAL }, { "drink", do_drink, POS_RESTING, 0, LOG_NORMAL }, { "drop", do_drop, POS_RESTING, 0, LOG_NORMAL }, { "eat", do_eat, POS_RESTING, 0, LOG_NORMAL }, { "fill", do_fill, POS_RESTING, 0, LOG_NORMAL }, --- 192,200 ---- { "brew", do_brew, POS_STANDING, 0, LOG_NORMAL }, { "brandish", do_brandish, POS_RESTING, 0, LOG_NORMAL }, { "close", do_close, POS_RESTING, 0, LOG_NORMAL }, { "cdonate", do_cdonate, POS_RESTING, 0, LOG_NORMAL }, ! { "donate", do_donate, POS_RESTING, 0, LOG_NORMAL }, { "drink", do_drink, POS_RESTING, 0, LOG_NORMAL }, { "drop", do_drop, POS_RESTING, 0, LOG_NORMAL }, { "eat", do_eat, POS_RESTING, 0, LOG_NORMAL }, { "fill", do_fill, POS_RESTING, 0, LOG_NORMAL }, *************** const struct cmd_type cmd_table [ ] = *** 223,244 **** /* * Miscellaneous commands. */ ! { "afk", do_afk, POS_SLEEPING, 0, LOG_NORMAL }, ! { "bash", do_bash, POS_STANDING, 0, LOG_NORMAL }, ! { "bet", do_bet, POS_STANDING, 0, LOG_NORMAL }, { "bladethirst", do_bladethirst, POS_STANDING, 0, LOG_NORMAL }, { "bring", do_getspouse, POS_RESTING, 0, LOG_NORMAL }, { "delet", do_delet, POS_DEAD, 0, LOG_ALWAYS }, { "delete", do_delete, POS_DEAD, 0, LOG_ALWAYS }, ! { "wager", do_bet, POS_STANDING, 0, LOG_NORMAL }, ! { "chameleon power",do_chameleon, POS_STANDING, 0, LOG_NORMAL }, { "follow", do_follow, POS_RESTING, 0, LOG_NORMAL }, { "lose", do_lose, POS_RESTING, 0, LOG_NORMAL }, { "group", do_group, POS_SLEEPING, 0, LOG_NORMAL }, { "heal", do_heal, POS_RESTING, 0, LOG_NORMAL }, ! { "heighten senses",do_heighten, POS_STANDING, 0, LOG_NORMAL }, { "hide", do_hide, POS_RESTING, 0, LOG_NORMAL }, { "hunt", do_hunt, POS_STANDING, 0, LOG_NORMAL }, { "join", do_gospouse, POS_RESTING, 0, LOG_NORMAL }, { "learn", do_learn, POS_SLEEPING, 0, LOG_ALWAYS }, --- 222,243 ---- /* * Miscellaneous commands. */ ! { "afk", do_afk, POS_SLEEPING, 0, LOG_NORMAL }, ! { "bash", do_bash, POS_STANDING, 0, LOG_NORMAL }, ! { "bet", do_bet, POS_STANDING, 0, LOG_NORMAL }, { "bladethirst", do_bladethirst, POS_STANDING, 0, LOG_NORMAL }, { "bring", do_getspouse, POS_RESTING, 0, LOG_NORMAL }, { "delet", do_delet, POS_DEAD, 0, LOG_ALWAYS }, { "delete", do_delete, POS_DEAD, 0, LOG_ALWAYS }, ! { "wager", do_bet, POS_STANDING, 0, LOG_NORMAL }, ! { "chameleon power",do_chameleon, POS_STANDING, 0, LOG_NORMAL }, { "follow", do_follow, POS_RESTING, 0, LOG_NORMAL }, { "lose", do_lose, POS_RESTING, 0, LOG_NORMAL }, { "group", do_group, POS_SLEEPING, 0, LOG_NORMAL }, { "heal", do_heal, POS_RESTING, 0, LOG_NORMAL }, ! { "heighten senses",do_heighten, POS_STANDING, 0, LOG_NORMAL }, { "hide", do_hide, POS_RESTING, 0, LOG_NORMAL }, { "hunt", do_hunt, POS_STANDING, 0, LOG_NORMAL }, { "join", do_gospouse, POS_RESTING, 0, LOG_NORMAL }, { "learn", do_learn, POS_SLEEPING, 0, LOG_ALWAYS }, *************** const struct cmd_type cmd_table [ ] = *** 251,281 **** { "/", do_recall, POS_FIGHTING, 0, LOG_NORMAL }, { "register", do_register, POS_STANDING, 0, LOG_NORMAL }, { "rent", do_rent, POS_DEAD, 0, LOG_NORMAL }, { "save", do_save, POS_DEAD, 0, LOG_NORMAL }, ! { "shadow form", do_shadow, POS_STANDING, 0, LOG_NORMAL }, { "sleep", do_sleep, POS_SLEEPING, 0, LOG_NORMAL }, { "snare", do_snare, POS_FIGHTING, 0, LOG_NORMAL }, { "sneak", do_sneak, POS_STANDING, 0, LOG_NORMAL }, ! { "spells", do_spells, POS_SLEEPING, 0, LOG_NORMAL }, { "split", do_split, POS_RESTING, 0, LOG_NORMAL }, { "steal", do_steal, POS_STANDING, 0, LOG_NORMAL }, { "study", do_study, POS_STANDING, 0, LOG_NORMAL }, { "train", do_train, POS_RESTING, 0, LOG_NORMAL }, { "untangle", do_untangle, POS_FIGHTING, 0, LOG_NORMAL }, { "visible", do_visible, POS_SLEEPING, 0, LOG_NORMAL }, { "wake", do_wake, POS_SLEEPING, 0, LOG_NORMAL }, ! { "wed", do_wed, POS_DEAD, 0, LOG_NORMAL }, { "where", do_where, POS_RESTING, 0, LOG_NORMAL }, /* * Immortal commands. */ { "advance", do_advance, POS_DEAD, L_DIR, LOG_ALWAYS }, ! { "divorce", do_divorce, POS_STANDING,L_DIR, LOG_ALWAYS }, { "imtlset", do_imtlset, POS_DEAD, L_DIR, LOG_ALWAYS }, /* { "objlist", do_objlist, POS_DEAD, L_DIR, LOG_ALWAYS }, */ ! { "marry", do_marry, POS_STANDING,L_DIR, LOG_ALWAYS }, { "newring", do_rings, POS_STANDING,L_DIR, LOG_ALWAYS }, { "rename", do_rename, POS_DEAD, L_DIR, LOG_ALWAYS }, { "sstime", do_sstime, POS_DEAD, L_DIR, LOG_ALWAYS }, { "trust", do_trust, POS_DEAD, L_DIR, LOG_ALWAYS }, --- 250,280 ---- { "/", do_recall, POS_FIGHTING, 0, LOG_NORMAL }, { "register", do_register, POS_STANDING, 0, LOG_NORMAL }, { "rent", do_rent, POS_DEAD, 0, LOG_NORMAL }, { "save", do_save, POS_DEAD, 0, LOG_NORMAL }, ! { "shadow form", do_shadow, POS_STANDING, 0, LOG_NORMAL }, { "sleep", do_sleep, POS_SLEEPING, 0, LOG_NORMAL }, { "snare", do_snare, POS_FIGHTING, 0, LOG_NORMAL }, { "sneak", do_sneak, POS_STANDING, 0, LOG_NORMAL }, ! { "spells", do_spells, POS_SLEEPING, 0, LOG_NORMAL }, { "split", do_split, POS_RESTING, 0, LOG_NORMAL }, { "steal", do_steal, POS_STANDING, 0, LOG_NORMAL }, { "study", do_study, POS_STANDING, 0, LOG_NORMAL }, { "train", do_train, POS_RESTING, 0, LOG_NORMAL }, { "untangle", do_untangle, POS_FIGHTING, 0, LOG_NORMAL }, { "visible", do_visible, POS_SLEEPING, 0, LOG_NORMAL }, { "wake", do_wake, POS_SLEEPING, 0, LOG_NORMAL }, ! { "wed", do_wed, POS_DEAD, 0, LOG_NEVER }, { "where", do_where, POS_RESTING, 0, LOG_NORMAL }, /* * Immortal commands. */ { "advance", do_advance, POS_DEAD, L_DIR, LOG_ALWAYS }, ! /* { "divorce", do_divorce, POS_STANDING,L_DIR, LOG_ALWAYS }, */ { "imtlset", do_imtlset, POS_DEAD, L_DIR, LOG_ALWAYS }, /* { "objlist", do_objlist, POS_DEAD, L_DIR, LOG_ALWAYS }, */ ! { "marry", do_marry, POS_STANDING,L_DIR, LOG_ALWAYS }, { "newring", do_rings, POS_STANDING,L_DIR, LOG_ALWAYS }, { "rename", do_rename, POS_DEAD, L_DIR, LOG_ALWAYS }, { "sstime", do_sstime, POS_DEAD, L_DIR, LOG_ALWAYS }, { "trust", do_trust, POS_DEAD, L_DIR, LOG_ALWAYS }, *************** const struct cmd_type cmd_table [ ] = *** 284,301 **** { "allow", do_allow, POS_DEAD, L_SEN, LOG_ALWAYS }, { "ban", do_ban, POS_DEAD, L_SEN, LOG_ALWAYS }, /* placed bank here, to make sure ban would still work... */ { "bank", do_bank, POS_STANDING, 0, LOG_NORMAL }, - { "clone", do_clone, POS_DEAD, L_SEN, LOG_ALWAYS }, { "deny", do_deny, POS_DEAD, L_SEN, LOG_ALWAYS }, { "disconnect", do_disconnect, POS_DEAD, L_SEN, LOG_ALWAYS }, ! { "dog", do_dog, POS_DEAD, L_SEN, LOG_ALWAYS }, { "for", do_for, POS_DEAD, L_SEN, LOG_ALWAYS }, { "force", do_force, POS_DEAD, L_SEN, LOG_ALWAYS }, { "freeze", do_freeze, POS_DEAD, L_SEN, LOG_ALWAYS }, { "log", do_log, POS_DEAD, L_SEN, LOG_ALWAYS }, { "lset", do_lset, POS_DEAD, L_SEN, LOG_ALWAYS }, { "lstat", do_lstat, POS_DEAD, L_SEN, LOG_NORMAL }, { "mset", do_mset, POS_DEAD, L_SEN, LOG_ALWAYS }, { "noemote", do_noemote, POS_DEAD, L_SEN, LOG_ALWAYS }, { "notell", do_notell, POS_DEAD, L_SEN, LOG_ALWAYS }, { "notestat", do_notestat, POS_DEAD, L_SEN, LOG_ALWAYS }, --- 283,301 ---- { "allow", do_allow, POS_DEAD, L_SEN, LOG_ALWAYS }, { "ban", do_ban, POS_DEAD, L_SEN, LOG_ALWAYS }, /* placed bank here, to make sure ban would still work... */ { "bank", do_bank, POS_STANDING, 0, LOG_NORMAL }, { "deny", do_deny, POS_DEAD, L_SEN, LOG_ALWAYS }, { "disconnect", do_disconnect, POS_DEAD, L_SEN, LOG_ALWAYS }, ! { "dog", do_dog, POS_DEAD, L_SEN, LOG_ALWAYS }, ! { "echo", do_echo, POS_DEAD, L_SEN, LOG_ALWAYS }, { "for", do_for, POS_DEAD, L_SEN, LOG_ALWAYS }, { "force", do_force, POS_DEAD, L_SEN, LOG_ALWAYS }, { "freeze", do_freeze, POS_DEAD, L_SEN, LOG_ALWAYS }, { "log", do_log, POS_DEAD, L_SEN, LOG_ALWAYS }, { "lset", do_lset, POS_DEAD, L_SEN, LOG_ALWAYS }, { "lstat", do_lstat, POS_DEAD, L_SEN, LOG_NORMAL }, + { "memory", do_memory, POS_DEAD, L_SEN, LOG_NORMAL }, { "mset", do_mset, POS_DEAD, L_SEN, LOG_ALWAYS }, { "noemote", do_noemote, POS_DEAD, L_SEN, LOG_ALWAYS }, { "notell", do_notell, POS_DEAD, L_SEN, LOG_ALWAYS }, { "notestat", do_notestat, POS_DEAD, L_SEN, LOG_ALWAYS }, *************** const struct cmd_type cmd_table [ ] = *** 314,338 **** { "setkill", do_setkill, POS_DEAD, L_SEN, LOG_ALWAYS }, { "sla", do_sla, POS_DEAD, L_SEN, LOG_NORMAL }, { "slay", do_slay, POS_DEAD, L_SEN, LOG_ALWAYS }, { "sset", do_sset, POS_DEAD, L_SEN, LOG_ALWAYS }, ! { "sstat", do_sstat, POS_DEAD, L_SEN, LOG_ALWAYS }, { "stat", do_stat, POS_DEAD, L_SEN, LOG_ALWAYS }, - { "string", do_string, POS_DEAD, L_SEN, LOG_ALWAYS }, { "transfer", do_transfer, POS_DEAD, L_SEN, LOG_ALWAYS }, { "update", do_update, POS_DEAD, L_SEN, LOG_ALWAYS }, { "users", do_users, POS_DEAD, L_SEN, LOG_NORMAL }, { "vnum", do_vnum, POS_DEAD, L_SEN, LOG_ALWAYS }, - { "wiznet", do_wiznet, POS_DEAD,LEVEL_HERO, LOG_NORMAL }, { "wizify", do_wizify, POS_DEAD, L_SEN, LOG_ALWAYS }, { "wizlock", do_wizlock, POS_DEAD, L_SEN, LOG_ALWAYS }, { "areacount", do_area_count, POS_DEAD, L_JUN, LOG_ALWAYS }, ! { "echo", do_echo, POS_DEAD, L_JUN, LOG_ALWAYS }, { "disable", do_disable, POS_DEAD, L_JUN, LOG_ALWAYS }, { "exlist", do_exlist, POS_DEAD, L_JUN, LOG_ALWAYS }, ! { "iscore", do_iscore, POS_DEAD, L_JUN, LOG_ALWAYS }, ! { "memory", do_memory, POS_DEAD, L_JUN, LOG_NORMAL }, { "mload", do_mload, POS_DEAD, L_JUN, LOG_ALWAYS }, { "mfind", do_mfind, POS_DEAD, L_JUN, LOG_NORMAL }, { "mstat", do_mstat, POS_DEAD, L_JUN, LOG_NORMAL }, { "mwhere", do_mwhere, POS_DEAD, L_JUN, LOG_NORMAL }, --- 314,335 ---- { "setkill", do_setkill, POS_DEAD, L_SEN, LOG_ALWAYS }, { "sla", do_sla, POS_DEAD, L_SEN, LOG_NORMAL }, { "slay", do_slay, POS_DEAD, L_SEN, LOG_ALWAYS }, { "sset", do_sset, POS_DEAD, L_SEN, LOG_ALWAYS }, ! { "sstat", do_sstat, POS_DEAD, L_SEN, LOG_ALWAYS }, { "stat", do_stat, POS_DEAD, L_SEN, LOG_ALWAYS }, { "transfer", do_transfer, POS_DEAD, L_SEN, LOG_ALWAYS }, { "update", do_update, POS_DEAD, L_SEN, LOG_ALWAYS }, { "users", do_users, POS_DEAD, L_SEN, LOG_NORMAL }, { "vnum", do_vnum, POS_DEAD, L_SEN, LOG_ALWAYS }, { "wizify", do_wizify, POS_DEAD, L_SEN, LOG_ALWAYS }, { "wizlock", do_wizlock, POS_DEAD, L_SEN, LOG_ALWAYS }, { "areacount", do_area_count, POS_DEAD, L_JUN, LOG_ALWAYS }, ! { "clone", do_clone, POS_DEAD, L_JUN, LOG_ALWAYS }, { "disable", do_disable, POS_DEAD, L_JUN, LOG_ALWAYS }, { "exlist", do_exlist, POS_DEAD, L_JUN, LOG_ALWAYS }, ! { "iscore", do_iscore, POS_DEAD, L_JUN, LOG_ALWAYS }, { "mload", do_mload, POS_DEAD, L_JUN, LOG_ALWAYS }, { "mfind", do_mfind, POS_DEAD, L_JUN, LOG_NORMAL }, { "mstat", do_mstat, POS_DEAD, L_JUN, LOG_NORMAL }, { "mwhere", do_mwhere, POS_DEAD, L_JUN, LOG_NORMAL }, *************** const struct cmd_type cmd_table [ ] = *** 341,367 **** { "ofind", do_ofind, POS_DEAD, L_JUN, LOG_NORMAL }, { "ostat", do_ostat, POS_DEAD, L_JUN, LOG_NORMAL }, { "owhere", do_owhere, POS_DEAD, L_JUN, LOG_NORMAL }, { "peace", do_peace, POS_DEAD, L_JUN, LOG_NORMAL }, ! { "pecho", do_pecho, POS_DEAD, L_JUN, LOG_ALWAYS }, { "recho", do_recho, POS_DEAD, L_JUN, LOG_ALWAYS }, { "return", do_return, POS_DEAD, L_JUN, LOG_NORMAL }, { "rset", do_rset, POS_DEAD, L_JUN, LOG_ALWAYS }, { "rstat", do_rstat, POS_DEAD, L_JUN, LOG_NORMAL }, { "slookup", do_slookup, POS_DEAD, L_JUN, LOG_NORMAL }, ! { "smite", do_smite, POS_DEAD, L_JUN, LOG_ALWAYS }, { "snoop", do_snoop, POS_DEAD, L_JUN, LOG_NORMAL }, { "switch", do_switch, POS_DEAD, L_JUN, LOG_ALWAYS }, - { "wizinvis", do_invis, POS_DEAD, L_JUN, LOG_NORMAL }, { "at", do_at, POS_DEAD, L_APP, LOG_NORMAL }, { "bamfin", do_bamfin, POS_DEAD, L_APP, LOG_NORMAL }, { "bamfout", do_bamfout, POS_DEAD, L_APP, LOG_NORMAL }, { "goto", do_goto, POS_DEAD, L_APP, LOG_NORMAL }, { "holylight", do_holylight, POS_DEAD, L_APP, LOG_NORMAL }, { ":", do_immtalk, POS_DEAD, L_HER, LOG_NORMAL }, ! { "scan", do_scan, POS_DEAD, L_HER, LOG_ALWAYS }, { "guild", do_guild, POS_DEAD, L_JUN, LOG_ALWAYS }, { "clan", do_clan, POS_DEAD, 1, LOG_NORMAL }, { ">", do_clantalk, POS_DEAD, 0, LOG_NORMAL }, --- 338,367 ---- { "ofind", do_ofind, POS_DEAD, L_JUN, LOG_NORMAL }, { "ostat", do_ostat, POS_DEAD, L_JUN, LOG_NORMAL }, { "owhere", do_owhere, POS_DEAD, L_JUN, LOG_NORMAL }, { "peace", do_peace, POS_DEAD, L_JUN, LOG_NORMAL }, ! { "pecho", do_pecho, POS_DEAD, L_JUN, LOG_ALWAYS }, { "recho", do_recho, POS_DEAD, L_JUN, LOG_ALWAYS }, { "return", do_return, POS_DEAD, L_JUN, LOG_NORMAL }, { "rset", do_rset, POS_DEAD, L_JUN, LOG_ALWAYS }, { "rstat", do_rstat, POS_DEAD, L_JUN, LOG_NORMAL }, { "slookup", do_slookup, POS_DEAD, L_JUN, LOG_NORMAL }, ! { "smite", do_smite, POS_DEAD, L_JUN, LOG_ALWAYS }, { "snoop", do_snoop, POS_DEAD, L_JUN, LOG_NORMAL }, + { "string", do_string, POS_DEAD, L_JUN, LOG_ALWAYS }, { "switch", do_switch, POS_DEAD, L_JUN, LOG_ALWAYS }, { "at", do_at, POS_DEAD, L_APP, LOG_NORMAL }, { "bamfin", do_bamfin, POS_DEAD, L_APP, LOG_NORMAL }, { "bamfout", do_bamfout, POS_DEAD, L_APP, LOG_NORMAL }, { "goto", do_goto, POS_DEAD, L_APP, LOG_NORMAL }, { "holylight", do_holylight, POS_DEAD, L_APP, LOG_NORMAL }, + { "sedit", do_sedit, POS_DEAD, L_APP, LOG_ALWAYS }, + { "wizinvis", do_invis, POS_DEAD, L_APP, LOG_NORMAL }, { ":", do_immtalk, POS_DEAD, L_HER, LOG_NORMAL }, ! { "scan", do_scan, POS_DEAD, L_HER, LOG_ALWAYS }, ! { "wiznet", do_wiznet, POS_DEAD, L_HER, LOG_NORMAL }, { "guild", do_guild, POS_DEAD, L_JUN, LOG_ALWAYS }, { "clan", do_clan, POS_DEAD, 1, LOG_NORMAL }, { ">", do_clantalk, POS_DEAD, 0, LOG_NORMAL }, *************** const struct cmd_type cmd_table [ ] = *** 370,385 **** /* * OLC 1.1b */ ! { "aedit", do_aedit, POS_DEAD, L_SEN, LOG_NORMAL }, ! { "redit", do_redit, POS_DEAD, L_SEN, LOG_NORMAL }, ! { "oedit", do_oedit, POS_DEAD, L_SEN, LOG_NORMAL }, ! { "medit", do_medit, POS_DEAD, L_SEN, LOG_NORMAL }, ! { "mpedit", do_mpedit, POS_DEAD, L_SEN, LOG_NORMAL }, ! { "asave", do_asave, POS_DEAD, L_SEN, LOG_NORMAL }, ! { "alist", do_alist, POS_DEAD, L_SEN, LOG_NORMAL }, ! { "resets", do_resets, POS_DEAD, L_SEN, LOG_NORMAL }, /* * Languages. */ --- 370,385 ---- /* * OLC 1.1b */ ! { "aedit", do_aedit, POS_DEAD, L_SEN, LOG_NORMAL }, ! { "redit", do_redit, POS_DEAD, L_SEN, LOG_NORMAL }, ! { "oedit", do_oedit, POS_DEAD, L_SEN, LOG_NORMAL }, ! { "medit", do_medit, POS_DEAD, L_SEN, LOG_NORMAL }, ! { "mpedit", do_mpedit, POS_DEAD, L_SEN, LOG_NORMAL }, ! { "asave", do_asave, POS_DEAD, L_SEN, LOG_NORMAL }, ! { "alist", do_alist, POS_DEAD, L_SEN, LOG_NORMAL }, ! { "resets", do_resets, POS_DEAD, L_SEN, LOG_NORMAL }, /* * Languages. */ *************** const struct cmd_type cmd_table [ ] = *** 399,420 **** /* * MOBprogram commands. */ ! { "mpstat", do_mpstat, POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpasound", do_mpasound, POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpjunk", do_mpjunk, POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpecho", do_mpecho, POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpechoat", do_mpechoat, POS_DEAD, L_DIR + 1, LOG_NORMAL }, { "mpechoaround", do_mpechoaround,POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpkill", do_mpkill ,POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpmload", do_mpmload ,POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpoload", do_mpoload ,POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mppurge", do_mppurge ,POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpgoto", do_mpgoto ,POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpat", do_mpat ,POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mptransfer", do_mptransfer ,POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpforce", do_mpforce ,POS_DEAD, L_DIR + 1, LOG_NORMAL }, /* * End of list. --- 399,420 ---- /* * MOBprogram commands. */ ! { "mpstat", do_mpstat, POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpasound", do_mpasound, POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpjunk", do_mpjunk, POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpecho", do_mpecho, POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpechoat", do_mpechoat, POS_DEAD, L_DIR + 1, LOG_NORMAL }, { "mpechoaround", do_mpechoaround,POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpkill", do_mpkill, POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpmload", do_mpmload, POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpoload", do_mpoload, POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mppurge", do_mppurge, POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpgoto", do_mpgoto, POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpat", do_mpat, POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mptransfer", do_mptransfer, POS_DEAD, L_DIR + 1, LOG_NORMAL }, ! { "mpforce", do_mpforce, POS_DEAD, L_DIR + 1, LOG_NORMAL }, /* * End of list. diff -Pp -C4 3.1.10/src/language.c 3.1.11/src/language.c *** 3.1.10/src/language.c Mon Mar 10 20:55:15 1997 --- 3.1.11/src/language.c Mon Jun 23 20:33:08 1997 *************** void do_language( CHAR_DATA *ch, char *a *** 435,442 **** --- 435,449 ---- int chance2; char *lan_str; char buf [ 256 ]; + if( IS_NPC( ch ) ) + { + send_to_char( "You can't speak any languages", ch ); + do_say( ch, argument ); + return; + } + lan_str = lang_table[language].name; buf[0] = '\0'; /* Now find out if we can speak it... */ *************** void do_language( CHAR_DATA *ch, char *a *** 460,469 **** if(number_percent( ) <= chance ) { buf[0] = '\0'; ! sprintf (buf,"In %s, you say '{c%s{x'\n\r", lan_str, argument); ! send_to_char(buf, ch); for(och = ch->in_room->people; och != NULL; och = och->next_in_room ) { if(!IS_NPC(och) && (och != ch)) { --- 467,476 ---- if(number_percent( ) <= chance ) { buf[0] = '\0'; ! sprintf ( buf, "In %s, you say '{c$T{x'", lan_str ); ! act( buf, ch, NULL, argument, TO_CHAR ); for(och = ch->in_room->people; och != NULL; och = och->next_in_room ) { if(!IS_NPC(och) && (och != ch)) { *************** void do_language( CHAR_DATA *ch, char *a *** 472,496 **** else if(number_percent( ) <= chance2) { buf[0] = '\0'; ! sprintf (buf, "In %s, %s says, '{c%s{x'\n\r", lan_str, ch->name, argument); ! send_to_char(buf, och); } else { buf[0] = '\0'; ! sprintf (buf, "In %s, %s says something you can't understand.\n\r", lan_str, ch->name); ! send_to_char(buf, och); } } } } else { buf[0] = '\0'; ! sprintf (buf, "In %s, you try to say '{c%s{x', but it doesn't sound correct.{x\n\r", lan_str, argument); ! send_to_char(buf, ch); for(och = ch->in_room->people; och != NULL; och = och->next_in_room ) { if(!IS_NPC(och) && (och != ch)) { --- 479,503 ---- else if(number_percent( ) <= chance2) { buf[0] = '\0'; ! sprintf (buf, "In %s, $n says, '{c%s{x'", lan_str, argument); ! act( buf, ch, NULL, och, TO_VICT ); } else { buf[0] = '\0'; ! sprintf (buf, "In %s, $n says something you can't understand.", lan_str ); ! act( buf, ch, NULL, och, TO_VICT ); } } } } else { buf[0] = '\0'; ! sprintf (buf, "In %s, you try to say '{c$T{x', but it doesn't sound correct.{x", lan_str ); ! act( buf, ch, NULL, argument, TO_CHAR ); for(och = ch->in_room->people; och != NULL; och = och->next_in_room ) { if(!IS_NPC(och) && (och != ch)) { *************** void do_language( CHAR_DATA *ch, char *a *** 499,514 **** else if(number_percent( ) <= chance2) { buf[0] = '\0'; ! sprintf (buf, "In a weird form of %s, %s says something uncomprehensible.\n\r", lan_str, ch->name); ! send_to_char(buf, och); } else { buf[0] = '\0'; ! sprintf (buf, "In %s, %s says something you can't understand.\n\r", lan_str, ch->name); ! send_to_char(buf, och); } } } } --- 506,521 ---- else if(number_percent( ) <= chance2) { buf[0] = '\0'; ! sprintf (buf, "In a weird form of %s, $n says something uncomprehensible.", lan_str ); ! act( buf, ch, NULL, och, TO_VICT ); } else { buf[0] = '\0'; ! sprintf (buf, "In %s, $n says something you can't understand.", lan_str ); ! act( buf, ch, NULL, och, TO_VICT ); } } } } diff -Pp -C4 3.1.10/src/merc.h 3.1.11/src/merc.h *** 3.1.10/src/merc.h Sun Mar 16 21:03:25 1997 --- 3.1.11/src/merc.h Sat Jun 28 17:09:20 1997 *************** typedef void GAME_FUN args( ( CHAR_DATA *** 155,172 **** * String and memory management parameters. */ #define MAX_KEY_HASH 1024 #define MAX_STRING_LENGTH 4096 ! #define MAX_INPUT_LENGTH 160 /* * Game parameters. * Increase the max'es if you add more of something. * Adjust the pulse numbers to suit yourself. */ ! #define MAX_CHUNKS 27 /* Used in ssm.c */ #define MAX_SKILL 166 #define MAX_CLASS 8 #define MAX_RACE 41 #define MAX_LEVEL 54 --- 155,172 ---- * String and memory management parameters. */ #define MAX_KEY_HASH 1024 #define MAX_STRING_LENGTH 4096 ! #define MAX_INPUT_LENGTH 180 /* * Game parameters. * Increase the max'es if you add more of something. * Adjust the pulse numbers to suit yourself. */ ! #define MAX_CHUNKS 29 /* Used in ssm.c */ #define MAX_SKILL 166 #define MAX_CLASS 8 #define MAX_RACE 41 #define MAX_LEVEL 54 *************** typedef void GAME_FUN args( ( CHAR_DATA *** 188,197 **** /* Save the database - OLC 1.1b */ #define PULSE_DB_DUMP (1800* PULSE_PER_SECOND ) /* 30 minutes */ #define MUD_HOUR ( PULSE_TICK / PULSE_PER_SECOND ) #define MUD_DAY ( 24 * MUD_HOUR ) ! #define MUD_MONTH ( 35 * MUD_DAY ) ! #define MUD_YEAR ( 17 * MUD_MONTH ) /* * Language stuff */ --- 188,216 ---- /* Save the database - OLC 1.1b */ #define PULSE_DB_DUMP (1800* PULSE_PER_SECOND ) /* 30 minutes */ #define MUD_HOUR ( PULSE_TICK / PULSE_PER_SECOND ) #define MUD_DAY ( 24 * MUD_HOUR ) ! #define MUD_WEEK ( 7 * MUD_DAY ) ! #define MUD_MONTH ( 5 * MUD_WEEK ) ! #define MUD_YEAR ( 10 * MUD_MONTH ) ! /* hours per day, days per week, weeks per month, etc */ ! #define HOUR_DAY ( MUD_DAY / MUD_HOUR ) ! #define DAY_WEEK ( MUD_WEEK / MUD_DAY ) ! #define WEEK_MONTH ( MUD_MONTH / MUD_WEEK ) ! #define MONTH_YEAR ( MUD_YEAR / MUD_MONTH ) ! #define DAY_MONTH ( DAY_WEEK * WEEK_MONTH ) ! /* (Used for time_info.day... to name the days of the month) */ ! /* MUD dates adjusted to make ppl age a little faster ! * MUD_HOUR = 7.5 seconds ! * MUD_DAY = 180 seconds (3 minutes) ! * MUD_WEEK = 1260 seconds (21 minutes) ! * MUD_MONTH = 6300 seconds (1 hour, 45 minutes) ! * MUD_YEAR = 63000 seconds (17 hours, 30 minutes) ! * So for every 17.5 hours a player spends on-line, he ages 1 year. ! * (Humans start at +- 20, die at +- 60, so approx 40 life years ! * this means they can be on-line for 29 days non-stop) ! * Canth - 7/6/97 ! */ /* * Language stuff */ *************** static char * const attack_table [ ] = *** 226,233 **** --- 245,253 ---- struct ban_data { BAN_DATA * next; char * name; + int level; }; /* * Drunk struct *************** struct disabled_data *** 268,275 **** --- 288,296 ---- struct time_info_data { int hour; int day; + int week; int month; int year; }; *************** struct kill_data *** 758,765 **** --- 779,792 ---- #define OBJ_VNUM_WEDDING_BAND 3372 /* Canth (canth@xs4all.nl) of Mythran */ #define OBJ_VNUM_PORTAL 62 /* Default portal for portal spell */ + #define OBJ_VNUM_BDAY_1 70 /* Birthday presents - Canth */ + #define OBJ_VNUM_BDAY_2 71 + #define OBJ_VNUM_BDAY_3 72 + #define OBJ_VNUM_BDAY_4 73 + #define OBJ_VNUM_BDAY_5 74 + /* * Item types. * Used in #OBJECTS. */ *************** struct pc_data *** 1288,1295 **** --- 1315,1323 ---- int learned [ MAX_SKILL ]; /* Maniac */ int language [ MAX_LANGUAGE ]; /* Maniac */ int speaking; /* Maniac */ int learn; /* Maniac */ + int last_age; /* Canth */ int balance; /* Maniac */ int shares; /* Maniac */ int security; /* OLC */ int clan; /* Maniac */ diff -Pp -C4 3.1.10/src/save.c 3.1.11/src/save.c *** 3.1.10/src/save.c Sun Mar 16 21:49:34 1997 --- 3.1.11/src/save.c Sat Jun 28 15:17:07 1997 *************** bool load_char_obj( DESCRIPTOR_DATA *d, *** 435,442 **** --- 435,444 ---- ch->pcdata->condition[COND_FULL] = 48; ch->pcdata->pagelen = 20; ch->pcdata->security = 0; ch->pcdata->oldclass = 0; /* Remort code -- Maniac */ + ch->pcdata->last_age = 999; /* So we don't have NEWBIE + * birthdays :) Canth */ ch->pcdata->switched = FALSE; found = FALSE; *************** bool load_char_obj( DESCRIPTOR_DATA *d, *** 509,517 **** if (race_table[ch->race].death_age < 0) ch->death_age = -1; else { ! ch->death_age = 428400 * ( race_table[ch->race].death_age + dice( race_table[ch->race].death_age_mod[0], race_table[ch->race].death_age_mod[1]) ); } #else --- 511,519 ---- if (race_table[ch->race].death_age < 0) ch->death_age = -1; else { ! ch->death_age = MUD_YEAR * ( race_table[ch->race].death_age + dice( race_table[ch->race].death_age_mod[0], race_table[ch->race].death_age_mod[1]) ); } #else *************** bool load_char_obj( DESCRIPTOR_DATA *d, *** 524,532 **** if ( race_table[ ch->race ].start_age < 0 ) ch->current_age = -1; else { ! ch->current_age = 428400 * ( race_table[ ch->race ].start_age + dice( race_table[ ch->race ].start_age_mod[ 0 ], race_table[ ch->race ].start_age_mod[ 1 ] ) ); } #else --- 526,534 ---- if ( race_table[ ch->race ].start_age < 0 ) ch->current_age = -1; else { ! ch->current_age = MUD_YEAR * ( race_table[ ch->race ].start_age + dice( race_table[ ch->race ].start_age_mod[ 0 ], race_table[ ch->race ].start_age_mod[ 1 ] ) ); } #else *************** void fread_char( CHAR_DATA *ch, FILE *fp *** 851,858 **** --- 853,863 ---- break; } break; } + + /* Assign this variable here as it is not necesary to save it */ + ch->pcdata->last_age = get_age ( ch ); /* Make sure old chars have this field - Kahn */ if ( !ch->pcdata->pagelen ) ch->pcdata->pagelen = 20; diff -Pp -C4 3.1.10/src/social-edit.c 3.1.11/src/social-edit.c *** 3.1.10/src/social-edit.c Mon Mar 10 20:55:15 1997 --- 3.1.11/src/social-edit.c Sat Jun 28 17:09:12 1997 *************** *** 33,45 **** #include "merc.h" #define SOCIAL_FILE "SOCIALS.TXT" /* or whatever fits you */ - /* #define CONST_SOCIAL */ /* remove this in Step 2 */ - int maxSocial; /* max number of socials */ - #ifndef CONST_SOCIAL struct social_type *social_table; /* and social table */ void load_social (FILE *fp, struct social_type *social) { --- 33,42 ---- *************** void load_social (FILE *fp, struct socia *** 56,177 **** void load_social_table () { FILE *fp; int i; ! ! fp = fopen (SOCIAL_FILE, "r"); ! if (!fp) { bug ("Could not open " SOCIAL_FILE " for reading.",0); exit(1); } ! fscanf (fp, "%d\n", &maxSocial); /* IMPORTANT to use malloc so we can realloc later on */ ! social_table = malloc (sizeof(struct social_type) * (maxSocial+1)); ! for (i = 0; i < maxSocial; i++) load_social (fp,&social_table[i]); /* For backwards compatibility */ ! social_table[maxSocial].name = str_dup(""); /* empty! */ ! fclose (fp); - - } ! #endif /* CONST_SOCIAL */ void save_social (const struct social_type *s, FILE *fp) { /* get rid of (null) */ fprintf (fp, "%s~\n%s~\n%s~\n%s~\n%s~\n%s~\n%s~\n%s~\n\n", ! s->name ? s->name : "" , ! s->char_no_arg ? s->char_no_arg : "" , ! s->others_no_arg ? s->others_no_arg : "" , ! s->char_found ? s->char_found : "" , ! s->others_found ? s->others_found : "" , ! s->vict_found ? s->vict_found : "" , ! s->char_auto ? s->char_auto : "" , ! s->others_auto ? s->others_auto : "" ! ); } void save_social_table() { FILE *fp; int i; ! fp = fopen (SOCIAL_FILE, "w"); ! if (!fp) { bug ("Could not open " SOCIAL_FILE " for writing.",0); return; } ! #ifdef CONST_SOCIAL /* If old table still in use, count socials first */ ! ! for (maxSocial = 0 ; social_table[maxSocial].name[0] ; maxSocial++) ! ; /* empty */ ! #endif ! ! fprintf (fp, "%d\n", maxSocial); ! for ( i = 0 ; i < maxSocial ; i++) save_social (&social_table[i], fp); ! fclose (fp); } /* Find a social based on name */ int social_lookup (const char *name) { int i; ! for (i = 0; i < maxSocial ; i++) if (!str_cmp(name, social_table[i].name)) return i; ! return -1; } /* * Social editting command */ - - #ifndef CONST_SOCIAL void do_sedit (CHAR_DATA *ch, char *argument) { ! char cmd[MAX_INPUT_LENGTH], social[MAX_INPUT_LENGTH]; ! char buf[MAX_STRING_LENGTH]; int iSocial; ! argument = one_argument (argument,cmd); argument = one_argument (argument,social); ! if (!cmd[0]) { send_to_char ("Huh? Type HELP SEDIT to see syntax.\n\r",ch); return; } ! if (!social[0]) { send_to_char ("What social do you want to operate on?\n\r",ch); return; } ! iSocial = social_lookup (social); ! if (str_cmp(cmd,"new") && (iSocial == -1)) { send_to_char ("No such social exists.\n\r",ch); return; --- 53,165 ---- void load_social_table () { FILE *fp; int i; ! ! fp = fopen (SOCIAL_FILE, "r"); ! if (!fp) { bug ("Could not open " SOCIAL_FILE " for reading.",0); exit(1); } ! fscanf (fp, "%d\n", &maxSocial); /* IMPORTANT to use malloc so we can realloc later on */ ! social_table = malloc (sizeof(struct social_type) * (maxSocial+1)); ! for (i = 0; i < maxSocial; i++) load_social (fp,&social_table[i]); /* For backwards compatibility */ ! social_table[maxSocial].name = str_dup(""); /* empty! */ ! fclose (fp); ! } void save_social (const struct social_type *s, FILE *fp) { /* get rid of (null) */ fprintf (fp, "%s~\n%s~\n%s~\n%s~\n%s~\n%s~\n%s~\n%s~\n\n", ! s->name ? s->name : "" , ! s->char_no_arg ? s->char_no_arg : "" , ! s->others_no_arg ? s->others_no_arg : "" , ! s->char_found ? s->char_found : "" , ! s->others_found ? s->others_found : "" , ! s->vict_found ? s->vict_found : "" , ! s->char_auto ? s->char_auto : "" , ! s->others_auto ? s->others_auto : "" ! ); } void save_social_table() { FILE *fp; int i; ! fp = fopen (SOCIAL_FILE, "w"); ! if (!fp) { bug ("Could not open " SOCIAL_FILE " for writing.",0); return; } ! fprintf (fp, "%d\n", maxSocial); ! for ( i = 0 ; i < maxSocial ; i++) save_social (&social_table[i], fp); ! fclose (fp); } /* Find a social based on name */ int social_lookup (const char *name) { int i; ! for (i = 0; i < maxSocial ; i++) if (!str_cmp(name, social_table[i].name)) return i; ! return -1; } /* * Social editting command */ void do_sedit (CHAR_DATA *ch, char *argument) { ! char cmd [ MAX_INPUT_LENGTH ]; ! char social [ MAX_INPUT_LENGTH ]; ! char buf [ MAX_STRING_LENGTH ]; int iSocial; ! argument = one_argument (argument,cmd); argument = one_argument (argument,social); ! if (!cmd[0]) { send_to_char ("Huh? Type HELP SEDIT to see syntax.\n\r",ch); return; } ! if (!social[0]) { send_to_char ("What social do you want to operate on?\n\r",ch); return; } ! iSocial = social_lookup (social); ! if (str_cmp(cmd,"new") && (iSocial == -1)) { send_to_char ("No such social exists.\n\r",ch); return; *************** void do_sedit (CHAR_DATA *ch, char *argu *** 180,250 **** if (!str_cmp(cmd, "delete")) /* Remove a social */ { int i,j; struct social_type *new_table = malloc (sizeof(struct social_type) * maxSocial); ! if (!new_table) { send_to_char ("Memory allocation failed. Brace for impact...\n\r",ch); return; } ! /* Copy all elements of old table into new table, except the deleted social */ for (i = 0, j = 0; i < maxSocial+1; i++) if (i != iSocial) /* copy, increase only if copied */ { new_table[j] = social_table[i]; j++; } ! free (social_table); social_table = new_table; ! maxSocial--; /* Important :() */ ! send_to_char ("That social is history now.\n\r",ch); ! } ! else if (!str_cmp(cmd, "new")) /* Create a new social */ { struct social_type *new_table; ! if (iSocial != -1) { send_to_char ("A social with that name already exists\n\r",ch); return; } ! /* reallocate the table */ /* Note that the table contains maxSocial socials PLUS one empty spot! */ ! maxSocial++; new_table = realloc (social_table, sizeof(struct social_type) * maxSocial + 1); ! if (!new_table) /* realloc failed */ { send_to_char ("Memory allocation failed. Brace for impact.\n\r",ch); return; } ! social_table = new_table; ! social_table[maxSocial-1].name = str_dup (social); social_table[maxSocial-1].char_no_arg = str_dup (""); social_table[maxSocial-1].others_no_arg = str_dup (""); social_table[maxSocial-1].char_found = str_dup (""); social_table[maxSocial-1].others_found = str_dup (""); social_table[maxSocial-1].vict_found = str_dup (""); social_table[maxSocial-1].char_auto = str_dup (""); social_table[maxSocial-1].others_auto = str_dup (""); ! social_table[maxSocial].name = str_dup (""); /* 'terminating' empty string */ ! send_to_char ("New social added.\n\r",ch); ! } ! else if (!str_cmp(cmd, "show")) /* Show a certain social */ { sprintf (buf, "Social: %s\n\r" "(cnoarg) No argument given, character sees:\n\r" --- 168,247 ---- if (!str_cmp(cmd, "delete")) /* Remove a social */ { int i,j; struct social_type *new_table = malloc (sizeof(struct social_type) * maxSocial); ! if (!new_table) { send_to_char ("Memory allocation failed. Brace for impact...\n\r",ch); return; } ! /* Copy all elements of old table into new table, except the deleted social */ for (i = 0, j = 0; i < maxSocial+1; i++) if (i != iSocial) /* copy, increase only if copied */ { new_table[j] = social_table[i]; j++; } ! free (social_table); social_table = new_table; ! maxSocial--; /* Important :() */ ! send_to_char ("That social is history now.\n\r",ch); ! ! sprintf( buf, "%s just deleted the %s social", ch->name, ! social ); ! log_string( buf ); ! wiznet( ch, WIZ_SECURE, get_trust( ch ), buf ); ! } ! else if (!str_cmp(cmd, "new")) /* Create a new social */ { struct social_type *new_table; ! if (iSocial != -1) { send_to_char ("A social with that name already exists\n\r",ch); return; } ! /* reallocate the table */ /* Note that the table contains maxSocial socials PLUS one empty spot! */ ! maxSocial++; new_table = realloc (social_table, sizeof(struct social_type) * maxSocial + 1); ! if (!new_table) /* realloc failed */ { send_to_char ("Memory allocation failed. Brace for impact.\n\r",ch); return; } ! social_table = new_table; ! social_table[maxSocial-1].name = str_dup (social); social_table[maxSocial-1].char_no_arg = str_dup (""); social_table[maxSocial-1].others_no_arg = str_dup (""); social_table[maxSocial-1].char_found = str_dup (""); social_table[maxSocial-1].others_found = str_dup (""); social_table[maxSocial-1].vict_found = str_dup (""); social_table[maxSocial-1].char_auto = str_dup (""); social_table[maxSocial-1].others_auto = str_dup (""); ! social_table[maxSocial].name = str_dup (""); /* 'terminating' empty string */ ! send_to_char ("New social added.\n\r",ch); ! ! sprintf( buf, "%s added the %s social", ch->name, social ); ! log_string( buf ); ! wiznet( ch, WIZ_SECURE, get_trust( ch ), buf ); ! } ! else if (!str_cmp(cmd, "show")) /* Show a certain social */ { sprintf (buf, "Social: %s\n\r" "(cnoarg) No argument given, character sees:\n\r" *************** void do_sedit (CHAR_DATA *ch, char *argu *** 260,268 **** "(cself) Target is character himself:\n\r" "%s\n\r\n\r" "(oself) Target is character himself, others see:\n\r" "%s\n\r", ! social_table[iSocial].name, social_table[iSocial].char_no_arg, social_table[iSocial].others_no_arg, social_table[iSocial].char_found, --- 257,265 ---- "(cself) Target is character himself:\n\r" "%s\n\r\n\r" "(oself) Target is character himself, others see:\n\r" "%s\n\r", ! social_table[iSocial].name, social_table[iSocial].char_no_arg, social_table[iSocial].others_no_arg, social_table[iSocial].char_found, *************** void do_sedit (CHAR_DATA *ch, char *argu *** 273,281 **** send_to_char (buf,ch); return; /* return right away, do not save the table */ } ! else if (!str_cmp(cmd, "cnoarg")) /* Set that argument */ { free_string (social_table[iSocial].char_no_arg); social_table[iSocial].char_no_arg = str_dup(argument); --- 270,278 ---- send_to_char (buf,ch); return; /* return right away, do not save the table */ } ! else if (!str_cmp(cmd, "cnoarg")) /* Set that argument */ { free_string (social_table[iSocial].char_no_arg); social_table[iSocial].char_no_arg = str_dup(argument); *************** void do_sedit (CHAR_DATA *ch, char *argu *** 284,292 **** send_to_char ("Character will now see nothing when this social is used without arguments.\n\r",ch); else act ( "New message is now:\n\r$T\n\r", ch, NULL, argument, TO_CHAR ); } ! else if (!str_cmp(cmd, "onoarg")) { free_string (social_table[iSocial].others_no_arg); social_table[iSocial].others_no_arg = str_dup(argument); --- 281,289 ---- send_to_char ("Character will now see nothing when this social is used without arguments.\n\r",ch); else act ( "New message is now:\n\r$T\n\r", ch, NULL, argument, TO_CHAR ); } ! else if (!str_cmp(cmd, "onoarg")) { free_string (social_table[iSocial].others_no_arg); social_table[iSocial].others_no_arg = str_dup(argument); *************** void do_sedit (CHAR_DATA *ch, char *argu *** 294,304 **** if (!argument[0]) send_to_char ("Others will now see nothing when this social is used without arguments.\n\r",ch); else act ( "New message is now:\n\r$T\n\r", ch, NULL, argument, TO_CHAR ); ! } ! else if (!str_cmp(cmd, "cfound")) { free_string (social_table[iSocial].char_found); social_table[iSocial].char_found = str_dup(argument); --- 291,301 ---- if (!argument[0]) send_to_char ("Others will now see nothing when this social is used without arguments.\n\r",ch); else act ( "New message is now:\n\r$T\n\r", ch, NULL, argument, TO_CHAR ); ! } ! else if (!str_cmp(cmd, "cfound")) { free_string (social_table[iSocial].char_found); social_table[iSocial].char_found = str_dup(argument); *************** void do_sedit (CHAR_DATA *ch, char *argu *** 306,316 **** if (!argument[0]) send_to_char ("The character will now see nothing when a target is found.\n\r",ch); else act ( "New message is now:\n\r$T\n\r", ch, NULL, argument, TO_CHAR ); ! } ! else if (!str_cmp(cmd, "ofound")) { free_string (social_table[iSocial].others_found); social_table[iSocial].others_found = str_dup(argument); --- 303,313 ---- if (!argument[0]) send_to_char ("The character will now see nothing when a target is found.\n\r",ch); else act ( "New message is now:\n\r$T\n\r", ch, NULL, argument, TO_CHAR ); ! } ! else if (!str_cmp(cmd, "ofound")) { free_string (social_table[iSocial].others_found); social_table[iSocial].others_found = str_dup(argument); *************** void do_sedit (CHAR_DATA *ch, char *argu *** 318,328 **** if (!argument[0]) send_to_char ("Others will now see nothing when a target is found.\n\r",ch); else act ( "New message is now:\n\r$T\n\r", ch, NULL, argument, TO_CHAR ); ! } ! else if (!str_cmp(cmd, "vfound")) { free_string (social_table[iSocial].vict_found); social_table[iSocial].vict_found = str_dup(argument); --- 315,325 ---- if (!argument[0]) send_to_char ("Others will now see nothing when a target is found.\n\r",ch); else act ( "New message is now:\n\r$T\n\r", ch, NULL, argument, TO_CHAR ); ! } ! else if (!str_cmp(cmd, "vfound")) { free_string (social_table[iSocial].vict_found); social_table[iSocial].vict_found = str_dup(argument); *************** void do_sedit (CHAR_DATA *ch, char *argu *** 331,339 **** send_to_char ("Victim will now see nothing when a target is found.\n\r",ch); else act ( "New message is now:\n\r$T\n\r", ch, NULL, argument, TO_CHAR ); } ! else if (!str_cmp(cmd, "cself")) { free_string (social_table[iSocial].char_auto); social_table[iSocial].char_auto = str_dup(argument); --- 328,336 ---- send_to_char ("Victim will now see nothing when a target is found.\n\r",ch); else act ( "New message is now:\n\r$T\n\r", ch, NULL, argument, TO_CHAR ); } ! else if (!str_cmp(cmd, "cself")) { free_string (social_table[iSocial].char_auto); social_table[iSocial].char_auto = str_dup(argument); *************** void do_sedit (CHAR_DATA *ch, char *argu *** 343,351 **** else act ( "New message is now:\n\r$T\n\r", ch, NULL, argument, TO_CHAR ); } ! else if (!str_cmp(cmd, "oself")) { free_string (social_table[iSocial].others_auto); social_table[iSocial].others_auto = str_dup(argument); --- 340,348 ---- else act ( "New message is now:\n\r$T\n\r", ch, NULL, argument, TO_CHAR ); } ! else if (!str_cmp(cmd, "oself")) { free_string (social_table[iSocial].others_auto); social_table[iSocial].others_auto = str_dup(argument); *************** void do_sedit (CHAR_DATA *ch, char *argu *** 354,369 **** send_to_char ("Others will now see nothing when character targets self.\n\r",ch); else act ( "New message is now:\n\r$T\n\r", ch, NULL, argument, TO_CHAR ); } ! else { send_to_char ("Huh? Try HELP SEDIT.\n\r",ch); return; } ! /* We have done something. update social table */ ! save_social_table(); } - #endif /* CONST_SOCIAL */ --- 351,365 ---- send_to_char ("Others will now see nothing when character targets self.\n\r",ch); else act ( "New message is now:\n\r$T\n\r", ch, NULL, argument, TO_CHAR ); } ! else { send_to_char ("Huh? Try HELP SEDIT.\n\r",ch); return; } ! /* We have done something. update social table */ ! save_social_table(); } diff -Pp -C4 3.1.10/src/update.c 3.1.11/src/update.c *** 3.1.10/src/update.c Sun Mar 16 21:56:06 1997 --- 3.1.11/src/update.c Mon Jun 23 21:24:41 1997 *************** void char_update args( ( void ) ); *** 57,64 **** --- 57,68 ---- void obj_update args( ( void ) ); void aggr_update args( ( void ) ); void quest_update args( ( void ) ); + /* + * External functions. + */ + void birthday args( ( CHAR_DATA *ch ) ); /* * Advancement stuff. *************** void gain_exp( CHAR_DATA *ch, int gain ) *** 180,188 **** { send_to_char( "You raise a level!! ", ch ); ch->level += 1; advance_level( ch ); ! sprintf( buf, "%s has levelled.\n\r", ch->name ); wiznet( ch, WIZ_LEVELS, get_trust( ch ), buf ); } return; --- 184,193 ---- { send_to_char( "You raise a level!! ", ch ); ch->level += 1; advance_level( ch ); ! sprintf( buf, "%s has levelled and is now level %d.", ch->name, ! ch->level ); wiznet( ch, WIZ_LEVELS, get_trust( ch ), buf ); } return; *************** void weather_update( void ) *** 534,583 **** buf[0] = '\0'; switch ( ++time_info.hour ) { ! case 6: weather_info.sunlight = SUN_RISE; strcat( buf, "The sun rises in the east.\n\r" ); break; ! case 7: weather_info.sunlight = SUN_LIGHT; strcat( buf, "The day has begun.\n\r" ); break; ! case 19: weather_info.sunlight = SUN_SET; strcat( buf, "The sun slowly disappears in the west.\n\r" ); break; ! case 20: weather_info.sunlight = SUN_DARK; strcat( buf, "The night has begun.\n\r" ); break; ! case 24: time_info.hour = 0; time_info.day++; break; } ! if ( time_info.day >= 35 ) { time_info.day = 0; time_info.month++; } ! if ( time_info.month >= 17 ) { time_info.month = 0; time_info.year++; } /* * Weather change. */ ! if ( time_info.month >= 9 && time_info.month <= 16 ) diff = weather_info.mmhg > 985 ? -2 : 2; else diff = weather_info.mmhg > 1015 ? -2 : 2; --- 539,588 ---- buf[0] = '\0'; switch ( ++time_info.hour ) { ! case (int) ( ( HOUR_DAY / 5 ) + 1 ): weather_info.sunlight = SUN_RISE; strcat( buf, "The sun rises in the east.\n\r" ); break; ! case (int) ( ( HOUR_DAY / 5 ) + 2 ): weather_info.sunlight = SUN_LIGHT; strcat( buf, "The day has begun.\n\r" ); break; ! case (int) ( HOUR_DAY * 4 / 5 ): weather_info.sunlight = SUN_SET; strcat( buf, "The sun slowly disappears in the west.\n\r" ); break; ! case (int) ( (HOUR_DAY * 4 / 5 ) + 1 ): weather_info.sunlight = SUN_DARK; strcat( buf, "The night has begun.\n\r" ); break; ! case HOUR_DAY: time_info.hour = 0; time_info.day++; break; } ! if ( time_info.day >= DAY_MONTH ) { time_info.day = 0; time_info.month++; } ! if ( time_info.month >= MONTH_YEAR ) { time_info.month = 0; time_info.year++; } /* * Weather change. */ ! if ( time_info.month >= ( MONTH_YEAR / 2 ) && time_info.month <= MONTH_YEAR ) diff = weather_info.mmhg > 985 ? -2 : 2; else diff = weather_info.mmhg > 1015 ? -2 : 2; *************** void bank_update(void) *** 677,685 **** value = number_range ( 0, 200); value -= 100; value /= 10; ! share_value += value; if ( !( fp = fopen ( BANK_FILE, "w" ) ) ) { bug( "bank_update: fopen of BANK_FILE failed", 0 ); --- 682,691 ---- value = number_range ( 0, 200); value -= 100; value /= 10; ! if ( ( share_value += value) < 0 ) ! share_value = 1; if ( !( fp = fopen ( BANK_FILE, "w" ) ) ) { bug( "bank_update: fopen of BANK_FILE failed", 0 ); *************** void char_update( void ) *** 714,728 **** if (IS_PC( ch ) ) { if ( ( ch->death_age > 0 ) && ( get_trust( ch ) <= LEVEL_HERO ) ) { ! if ( ( ch->current_age + (int) current_time - ch->logon ) ! >= ch->death_age ) /* Player dies (old age) */ { die_old_age( ch ); continue; } } } /* * Find dude with oldest save time. --- 720,740 ---- if (IS_PC( ch ) ) { if ( ( ch->death_age > 0 ) && ( get_trust( ch ) <= LEVEL_HERO ) ) { ! if ( get_age( ch ) >= ch->death_age ) /* Player dies (old age) */ { die_old_age( ch ); continue; } } + /* Check to see if a char ages here */ + if ( ch->pcdata->last_age < get_age( ch ) ) + { + ch->pcdata->last_age= get_age( ch ); + birthday( ch ); + } + } /* * Find dude with oldest save time. *************** void ban_update( void ) *** 1497,1505 **** return; } for ( pban = ban_list; pban; pban = pban->next ) ! fprintf( fp, "%s~\n", pban->name ); fclose( fp ); fpReserve = fopen( NULL_FILE, "r" ); --- 1509,1520 ---- return; } for ( pban = ban_list; pban; pban = pban->next ) ! { ! fprintf( fp, "%s~\n", pban->name ); ! fprintf( fp, "%d\n", pban->level ); ! } fclose( fp ); fpReserve = fopen( NULL_FILE, "r" ); diff -Pp -C4 3.1.10/src/wiznet.c 3.1.11/src/wiznet.c *** 3.1.10/src/wiznet.c Sun Mar 16 15:52:14 1997 --- 3.1.11/src/wiznet.c Sat Jun 7 13:03:47 1997 *************** void wiznet( CHAR_DATA *ch, int chan, in *** 241,256 **** strcat (buf, "\n\r" ); for ( d = descriptor_list; d != NULL; d = d->next ) { ! if (d->connected == CON_PLAYING /* Playing ??? */ && (!d->original) /* Fix ???? */ ! && (get_trust(d->character) >= level) /* Powerfull enuf */ && (d->character != ch ) /* Not the sender */ ! && (WCHAN(d->character, WIZ_ON ) ) /* Is wiznet on */ ! && (WCHAN(d->character, chan ) ) /* Is this chan on */ && (get_trust( d->character ) > L_HER ) /* Ex-imm's */ ! && (can_see( d->character, ch ) ) ) /* Can see each other */ { /* used bw to show {'s in the log instead of colour */ send_to_char_bw (buf, d->character ); } --- 241,257 ---- strcat (buf, "\n\r" ); for ( d = descriptor_list; d != NULL; d = d->next ) { ! if ( ( d->connected == CON_PLAYING ) /* Playing ??? */ && (!d->original) /* Fix ???? */ ! && (get_trust( d->character ) >= level) /* Powerfull enuf */ && (d->character != ch ) /* Not the sender */ ! && (WCHAN( d->character, WIZ_ON ) ) /* Is wiznet on */ ! && (WCHAN( d->character, chan ) ) /* Is this chan on */ && (get_trust( d->character ) > L_HER ) /* Ex-imm's */ ! && (ch ? can_see( d->character, ch ) : TRUE ) ) /* Can see each other */ ! /* Beware of NULL ch.. - Canth */ { /* used bw to show {'s in the log instead of colour */ send_to_char_bw (buf, d->character ); }