/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* Much time and thought has gone into this software and you are *
* benefitting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************/
/***************************************************************************
* *
* Rotains Builder System *
* *
***************************************************************************/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "build.h"
const struct builder_cmd_type builder_command_table [] =
{
{ "redit", do_redit, 4 },
{ "oedit", do_oedit, 4 },
{ "medit", do_medit, 4 },
{ "aedit", do_aedit, 4 },
/*
* Dummy Line (End Of Array Marker)
*/
{ "", 0, 0 }
};
const struct builder_cmd_type oedit_command_table [] =
{
{ ".", oedit_show, 4 },
{ "load", oedit_load_object, 4 },
{ "show", oedit_show, 4 },
{ "end", builder_mode_end, 4 },
{ "create", oedit_create_object, 4 },
{ "edit", oedit_select, 4 },
/*
* Stuff
*/
{ "weight", oedit_weight, 4 },
{ "timmer", oedit_timmer, 4 },
{ "affects", oedit_affects, 4 },
/*
* Dummy Line (End Of Array Marker)
*/
{ "", 0, 0 }
};
bool builder_interpret( CHAR_DATA *ch, char *argument )
{
char command[MAX_INPUT_LENGTH];
int cmd;
int trust;
bool located;
/*
* Builders Only
*/
if (ch->level < 4)
return( FALSE );
/*
* Strip leading spaces.
*/
while ( isspace(*argument) )
argument++;
if ( argument[0] == '\0' )
return( FALSE );
/*
* Implement freeze command.
*/
if ( !IS_NPC(ch) && IS_SET(ch->act, PLR_FREEZE) )
{
send_to_char( "You're totally frozen!\n\r", ch );
return( FALSE );
}
/*
* Grab the command word.
* Special parsing so ' can be a command,
* also no spaces needed after punctuation.
*/
if ( !isalpha(argument[0]) && !isdigit(argument[0]) )
{
command[0] = argument[0];
command[1] = '\0';
argument++;
while ( isspace(*argument) )
argument++;
}
else
{
argument = one_argument( argument, command );
}
located = FALSE;
trust = get_trust( ch );
for ( cmd = 0; builder_command_table[cmd].name[0] != '\0'; cmd++ )
{
if ( command[0] == builder_command_table[cmd].name[0]
&& !str_prefix( command, builder_command_table[cmd].name )
&& builder_command_table[cmd].level <= trust )
{
located = TRUE;
break;
}
}
if ( located == FALSE )
{
return( FALSE );
}
else
{
/*
* Execute Command
*/
(*builder_command_table[cmd].do_fun) ( ch, argument );
return( TRUE );
}
}
void do_redit( CHAR_DATA *ch, char *argument )
{
send_to_char("redit works\n\r", ch);
return;
};
void do_aedit( CHAR_DATA *ch, char *argument )
{
send_to_char("aedit works\n\r", ch);
return;
};
void do_medit( CHAR_DATA *ch, char *argument )
{
send_to_char("medit works\n\r", ch);
return;
};
void do_oedit( CHAR_DATA *ch, char *argument )
{
char command[MAX_INPUT_LENGTH];
int cmd;
int trust;
bool located;
argument = one_argument( argument, command );
located = FALSE;
trust = get_trust( ch );
for ( cmd = 0; oedit_command_table[cmd].name[0] != '\0'; cmd++ )
{
if ( command[0] == oedit_command_table[cmd].name[0]
&& !str_prefix( command, oedit_command_table[cmd].name )
&& oedit_command_table[cmd].level <= trust )
{
located = TRUE;
break;
}
}
if ( located == TRUE )
{
/*
* Execute Command
*/
(*oedit_command_table[cmd].do_fun) ( ch, argument );
return;
}
else
{
do_help( ch, "oedit" );
return;
}
};
void builder_mode_end( CHAR_DATA *ch, char *argument )
{
if ( ch->builder_mode == MODE_REDIT )
{
send_to_char("Room Editor Mode Finished.\n\r", ch);
ch->builder_mode = MODE_NONE;
ch->builder_vnum = MODE_NONE;
return;
};
if ( ch->builder_mode == MODE_MEDIT )
{
send_to_char("Mobile Editor Mode Finished.\n\r", ch);
ch->builder_mode = MODE_NONE;
ch->builder_vnum = MODE_NONE;
return;
};
if ( ch->builder_mode == MODE_OEDIT )
{
send_to_char("Object Editor Mode Finished.\n\r", ch);
ch->builder_mode = MODE_NONE;
ch->builder_vnum = MODE_NONE;
return;
};
if ( ch->builder_mode == MODE_AEDIT )
{
send_to_char("Room Editor Mode Finished.\n\r", ch);
ch->builder_mode = MODE_NONE;
ch->builder_vnum = MODE_NONE;
return;
};
if ( ch->builder_mode >= MODE_MAX )
{
send_to_char("WARNING: Your builder mode could not been determind!\n\r", ch);
send_to_char("WARNING: Now resting you builder information to default!\n\r", ch);
ch->builder_mode = MODE_NONE;
ch->builder_vnum = MODE_NONE;
return;
}
send_to_char("You are not in a builder mode!\n\r", ch);
return;
};
/*
* Find an obj in the world.
*/
OBJ_DATA *get_obj_vnum( CHAR_DATA *ch, int argument )
{
OBJ_DATA *obj;
for ( obj = object_list; obj != NULL; obj = obj->next )
if ( can_see_obj( ch, obj ) && argument == obj->pIndexData->vnum )
return obj;
return NULL;
}