#include <sys/types.h> #include <stdio.h> #include "stdlib.h" #include "define.h" #include "struct.h" const char* oprog_trigger[ MAX_OPROG_TRIGGER ] = { "put", "get", "timer", "hit", "none", "to_room", "entering", "wear", "consume", "sit", "random", "disarm", "use", "unlock", "lock" }; void display_oprog ( char_data*, oprog_data* ); const char** oprog_msgs [ MAX_OPROG_TRIGGER ] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, unlock_msg, lock_msg }; /* * DISPLAY ROUTINE */ void oprog_data :: display( char_data* ch ) { send( ch, "%10s ?? %s\n\r", "Oprog", "Null Object" ); } /* * EDITING ROUTINES */ void do_opedit( char_data* ch, char *argument ) { char arg [ MAX_STRING_LENGTH ]; obj_clss_data* obj_clss; oprog_data* oprog; wizard_data* wizard; int i; wizard = (wizard_data*) ch; if( ( obj_clss = wizard->obj_edit ) == NULL ) { send( "You aren't editing any object - use oedit <obj>.\n\r", ch ); return; } if( *argument == '\0' ) { display_oprog( ch, obj_clss->oprog ); return; } argument = one_argument( argument, arg ); if( is_number( arg ) ) { i = atoi( arg ); for( oprog = obj_clss->oprog; oprog != NULL && i != 1; oprog = oprog->next, i-- ); if( oprog == NULL ) { send( ch, "No oprog by that number.\n\r" ); return; } wizard->oprog_edit = oprog; wizard->opdata_edit = NULL; send( ch, "You now edit that oprog.\n\r" ); return; } if( !ch->can_edit( obj_clss ) ) return; if( !strcasecmp( arg, "new" ) ) { oprog = new oprog_data; wizard->oprog_edit = oprog; wizard->opdata_edit = NULL; append( obj_clss->oprog, oprog ); send( ch, "Oprog added.\n\r" ); return; } if( !strcasecmp( arg, "delete" ) ) { if( ( oprog = wizard->oprog_edit ) == NULL ) { send( ch, "You aren't editing any oprog.\n\r" ); return; } remove( obj_clss->oprog, oprog ); extract( wizard, offset( &wizard->oprog_edit, wizard ), "oprog" ); delete oprog; send( ch, "Oprog deleted.\n\r" ); return; } send( ch, "Illegal syntax.\n" ); } void display_oprog( char_data* ch, oprog_data *oprog ) { char tmp [ MAX_INPUT_LENGTH ]; int i; if( oprog == NULL ) { send( ch, "This object has no programs.\n\r" ); return; } for( i = 0; oprog != NULL; oprog = oprog->next ) { switch( oprog->trigger ) { case OPROG_TRIGGER_NONE : sprintf( tmp, "%20s %s", oprog->command, oprog->target ); break; default : sprintf( tmp, "%20s", oprog_trigger[oprog->trigger] ); break; } send( ch, "[%2d] %s\n\r", ++i, tmp ); } } void do_opcode( char_data* ch, char* argument ) { obj_clss_data* obj_clss; oprog_data* oprog; wizard_data* wizard; wizard = (wizard_data*) ch; if( ( obj_clss = wizard->obj_edit ) == NULL ) { send( ch, "You aren't editing any object.\n\r" ); return; } if( ( oprog = wizard->oprog_edit ) == NULL ) { send( ch, "You aren't editing any oprog.\n\r" ); return; } if( *argument != '\0' && !ch->can_edit( obj_clss ) ) return; var_ch = ch; oprog->code = edit_string( ch, argument, oprog->code, MEM_OPROG ); compile( oprog ); } void do_opdata( char_data* ch, char* argument ) { obj_clss_data* obj_clss; oprog_data* oprog; wizard_data* wizard; wizard = (wizard_data*) ch; if( ( obj_clss = wizard->obj_edit ) == NULL ) { send( ch, "You aren't editing any object.\n\r" ); return; } if( ( oprog = wizard->oprog_edit ) == NULL ) { send( ch, "You aren't editing any oprog.\n\r" ); return; } if( *argument != '\0' && !ch->can_edit( obj_clss ) ) return; if( wizard->opdata_edit != NULL ) { if( !strcasecmp( argument, "exit" ) ) { wizard->opdata_edit = NULL; send( ch, "Opdata now operates on the data list.\n\r" ); return; } wizard->opdata_edit->text = edit_string( ch, argument, wizard->opdata_edit->text, MEM_EXTRA ); return; } if( *argument == '\0' ) show_defaults( ch, oprog->trigger, oprog_msgs ); edit_extra( oprog->data, wizard, offset( &wizard->opdata_edit, wizard ), argument, "opdata" ); var_ch = ch; compile( oprog ); } void do_opstat( char_data* ch, char* ) { char buf [ 3*MAX_STRING_LENGTH ]; oprog_data* oprog; wizard_data* wizard; wizard = (wizard_data*) ch; if( wizard->obj_edit == NULL ) { send( ch, "You aren't editing any object.\n\r" ); return; } if( ( oprog = wizard->oprog_edit ) == NULL ) { send( ch, "You aren't editing any oprog.\n\r" ); return; } page( ch, "%10s : %s\n\r", "Trigger", oprog_trigger[ oprog->trigger ] ); page( ch, "%10s : %s\n\r", "Obj_Act", oprog->obj_act == NULL ? "none" : oprog->obj_act->Name( ) ); page( ch, "%10s : %s\n\r", "Command", oprog->command ); page( ch, "%10s : %s\n\r", "Target", oprog->target ); page( ch, "%10s : %d\n\r\n\r", "Rand_Value", oprog->value ); sprintf( buf, "[Code]\n\r%s\n\r", oprog->code ); page( ch, buf ); show_extras( ch, oprog->data ); } void do_opset( char_data* ch, char *argument ) { char buf [ MAX_STRING_LENGTH ]; obj_data* obj; oprog_data* oprog; wizard_data* wizard; wizard = (wizard_data*) ch; if( ( oprog = wizard->oprog_edit ) == NULL ) { send( ch, "You aren't editing any oprog.\n\r" ); return; } if( *argument == '\0' ) { do_opstat( ch, "" ); return; } #define ot( i ) oprog_trigger[i] class type_field type_list[] = { { "trigger", MAX_OPROG_TRIGGER, &ot(0), &ot(1), &oprog->trigger }, { "", 0, NULL, NULL, NULL } }; #undef ot if( process( type_list, ch, "oprog", argument ) ) return; if( matches( argument, "obj_act" ) ) { if( ( obj = one_object( ch, argument, "oprog", &ch->contents ) ) != NULL ) oprog->obj_act = obj->pIndexData; else oprog->obj_act = NULL; send( ch, "Obj_act set to %s.\n\r", oprog->obj_act == NULL ? "none" : oprog->obj_act->Name( ) ); return; } if( matches( argument, "command" ) ) { free_string( oprog->command, MEM_OPROG ); oprog->command = alloc_string( argument, MEM_OPROG ); sprintf( buf, "Command set to %s.\n\r", argument ); send( buf, ch ); return; } if( matches( argument, "target" ) ) { free_string( oprog->target, MEM_OPROG ); oprog->target = alloc_string( argument, MEM_OPROG ); sprintf( buf, "Target set to %s.\n\r", argument ); send( buf, ch ); return; } send( ch, "Syntax: opset <field> <value>\n\r" ); } void oset_obj( obj_data *obj, char *argument ) { char *word[] = { "value0", "value1", "value2", "value3" }; int *pInt[] = { &obj->value[0], &obj->value[1], &obj->value[2], &obj->value[3] }; char arg [ MAX_INPUT_LENGTH ]; int i, j, length; argument = one_argument( argument, arg ); length = strlen( arg ); for( i = 0; i < 4; i++ ) if( !strncasecmp( word[i], arg, length ) ) { j = atoi( argument ); *pInt[i] = j; return; } bug( "Oset_obj: unknown field." ); }