/***************************************************************************

 *  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;

}