From john@ulantris.csci.unt.edu Date: Thu, 31 Aug 1995 13:51:32 -0500 (CDT) From: "John A. Booth" <john@ulantris.csci.unt.edu> To: Alexanter T Fader <afader@janus.saturn.net> Cc: merc-l@webnexus.com Subject: Re: Aggr_update() (was: Re: Exits) > One problem with the Descriptor Loop: > A bug in Rom2.3: victim selection doesn't work. > (my fix, common routine CHAR_DATA * target_harm ( ch ); creates a table What? The descriptor loop isn't even used for victim selection in 2.3. Here's are aggr routine on EOD it's called from do_enter, doesn't have to be called periodically--doesn't get used more than needed. Just checks people in the room and not the whole char list. /* aggressive routine */ void move_aggr(CHAR_DATA *ch) { CHAR_DATA *fch; CHAR_DATA *fch_next; CHAR_DATA *vch; CHAR_DATA *vch_next; CHAR_DATA *victim; for ( fch = ch->in_room->people; fch != NULL; fch = fch_next ) { int count; fch_next = fch->next_in_room; if ( !IS_NPC(fch) || !EXTENDED_IS_SET(fch->act, ACT_AGGRESSIVE) || IS_SET(fch->in_room->room_flags,ROOM_LAW) || IS_SET(fch->in_room->room_flags,ROOM_SAFE) || IS_AFFECTED(fch,AFF_CALM) || fch->fighting != NULL || IS_AFFECTED(fch, AFF_CHARM) || !IS_AWAKE(fch) || ( EXTENDED_IS_SET(fch->act, ACT_WIMPY) && IS_AWAKE(ch) ) || !can_see( fch, ch ) || number_bits(1) == 0) continue; /* * Ok we have a 'ch' player character and a 'fch' npc aggressor. * Now make the aggressor fight a RANDOM pc victim in the room, * giving each 'vch' an equal chance of selection. */ count = 0; victim = NULL; for ( vch = ch->in_room->people; vch != NULL; vch = vch_next ) { vch_next = vch->next_in_room; if( vch->level < LEVEL_IMMORTAL && fch->hit*1.2 >= vch->hit && ( !EXTENDED_IS_SET(fch->act, ACT_WIMPY) || !IS_AWAKE(vch) ) && can_see( fch, vch ) && !IS_NPC(vch) ) { if ( number_range( 0, count ) == 0 ) victim = vch; count++; } } if ( victim == NULL ) continue; if (RIDDEN(fch)) { if (!mount_success(RIDDEN(fch), fch, FALSE)) { send_to_char("Your mount escapes your control!\n\r", RIDDEN(fch)); multi_hit( fch, victim, TYPE_UNDEFINED ); } else { send_to_char("You manage to keep your mount under control.\n\r", RIDDEN(fch)); } } else multi_hit( fch, victim, TYPE_UNDEFINED ); } /* aggressive routine end */ } ============================================================================= / ______ _______ ____ _____ ___ __ _ ______ ____ ____ _____ / \ | ____|__ __| _ \ / ____\ / _ \| \ / | ____| / __ \| _ \ / ____\ \ / | |__ | | | |_| | | | |_| | |\/| | |___ | | | | |_| | | / / | ___| | | | ___/| | __| _ | | | | ____| | | | | __/| | ___ \ \ | | | | | | | |___| | | | | | | | |____ | |__| | |\ \| |___| | / / |_| |_| |_| o \_____/|_| |_|_| |_|______|o \____/|_| \_|\_____/ \ \ / ============================================================================ ------------------------------------------------------------------------------ ftp://ftp.game.org/pub/mud FTP.GAME.ORG http://www.game.org/ftpsite/ ------------------------------------------------------------------------------ This archive came from FTP.GAME.ORG, the ultimate source for MUD resources. ------------------------------------------------------------------------------