#include "ctype.h" #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include "define.h" #include "struct.h" /* * ACT */ void act( char_data* to, const char* text, visible_data* ch, visible_data* obj, const char* string1, const char* string2 ) { char tmp [ 3*MAX_STRING_LENGTH ]; char buf [ 3*MAX_STRING_LENGTH ]; if( to == NULL || to->link == NULL || *text == '\0' ) return; act_print( buf, text, ch, NULL, obj, NULL, string1, string2, to ); convert_to_ansi( to, buf, tmp ); send( to, tmp ); } void act( char_data* to, const char* text, visible_data* ch, visible_data* victim, visible_data* obj1, visible_data* obj2 ) { char tmp [ 3*MAX_STRING_LENGTH ]; char buf [ 3*MAX_STRING_LENGTH ]; if( to == NULL || to->link == NULL || *text == '\0' ) return; act_print( buf, text, ch, victim, obj1, obj2, NULL, NULL, to ); convert_to_ansi( to, buf, tmp ); send( to, tmp ); } /* * ACT_AREA */ void act_area( const char* text, char_data* ch, char_data* victim, visible_data* obj ) { room_data* room; char_data* rch; if( ( room = Room( ch->array->where ) ) == NULL ) return; for( room = room->area->room_first; room != NULL; room = room->next ) if( room != ch->array->where ) for( int i = 0; i < room->contents; i++ ) if( ( rch = character( room->contents[i] ) ) != NULL && rch->position > POS_SLEEPING ) act( rch, text, ch, victim, obj ); } /* * ACT_NOTCHAR */ void act_notchar( const char* text, char_data* ch, visible_data* obj1, visible_data* obj2 ) { char_data* rch; for( int i = 0; i < *ch->array; i++ ) if( ( rch = character( ch->array->list[i] ) ) != NULL && rch != ch && rch->position > POS_SLEEPING && rch->Accept_Msg( ch ) ) act( rch, text, ch, obj1, obj2 ); } void act_notchar( const char* text, char_data* ch, const char* string1, const char* string2 ) { char_data* rch; for( int i = 0; i < *ch->array; i++ ) if( ( rch = character( ch->array->list[i] ) ) != NULL && rch != ch && rch->position > POS_SLEEPING && rch->Accept_Msg( ch ) ) act( rch, text, ch, NULL, string1, string2 ); } void act_notchar( const char* text, char_data* ch, visible_data* obj, const char* string1, const char* string2 ) { char_data* rch; for( int i = 0; i < *ch->array; i++ ) if( ( rch = character( ch->array->list[i] ) ) != NULL && rch != ch && rch->position > POS_SLEEPING && rch->Accept_Msg( ch ) ) act( rch, text, ch, obj, string1, string2 ); } /* * ACT_ROOM */ void act_room( room_data* room, const char* text, const char* string1, const char* string2 ) { char_data* rch; for( int i = 0; i < room->contents; i++ ) if( ( rch = character( room->contents[i] ) ) != NULL && rch->position > POS_SLEEPING ) act( rch, text, NULL, NULL, string1, string2 ); } void act_room( room_data* room, const char* text, visible_data* obj1, visible_data* obj2 ) { char_data* rch; for( int i = 0; i < room->contents; i++ ) if( ( rch = character( room->contents[i] ) ) != NULL && rch->position > POS_SLEEPING ) act( rch, text, obj1, obj2 ); } /* * ACT_NEITHER */ void act_neither( const char* text, char_data* ch, char_data* victim, visible_data* obj1, visible_data* obj2 ) { char_data* rch; for( int i = 0; i < *ch->array; i++ ) if( ( rch = character( ch->array->list[i] ) ) != NULL && rch != ch && rch != victim && rch->position > POS_SLEEPING && rch->Accept_Msg( ch ) ) act( rch, text, ch, victim, obj1, obj2 ); } /* * MAIN PRINT ROUTINE FOR ACT */ void act_print( char* out, const char* in, visible_data* ch, visible_data* victim, visible_data* obj1, visible_data* obj2, const char* string1, const char* string2, char_data* to ) { char_data* pers; visible_data* obj3; const char* sub; char* start; start = out; for( ; ; ) { if( *in != '$' ) { *out++ = *in; } else { pers = character( islower( *(++in) ) ? ch : victim ); switch( toupper( *in ) ) { default: sub = "[BUG]"; break; case '$': sub = "$"; break; case '1': sub = ( ch == NULL ? "[BUG]" : ch->Name( to, ch->selected ) ); break; case '2': sub = ( victim == NULL ? "[BUG]" : victim->Name( to, victim->selected ) ); break; case '3': sub = ( obj1 == NULL ? "[BUG]" : obj1->Name( to, obj1->selected ) ); break; case 'P': obj3 = ( *in == 'p' ? obj1 : obj2 ); sub = ( obj3 == NULL ? "[BUG]" : obj3->Name( to, obj3->selected ) ); break; case 'D' : case 'T' : sub = ( *in == 't' ? string1 : string2 ); if( sub == NULL ) sub = "[BUG]"; break; case 'N': sub = ( pers == NULL ? "[BUG]" : pers->Name( to ) ); break; case 'E': sub = ( pers == NULL ? "[BUG]" : pers->He_She( to ) ); break; case 'M': sub = ( pers == NULL ? "[BUG]" : pers->Him_Her( to ) ); break; case 'S': sub = ( pers == NULL ? "[BUG]" : pers->His_Her( to ) ); break; } strcpy( out, sub ); out += strlen( sub ); } if( *in++ == '\0' ) break; } *start = toupper( *start ); out--; if( out != start ) { if( *(out-1) == '\r' ) return; } strcpy( out, "\n\r" ); }