EmberMUD/
EmberMUD/clan/
EmberMUD/classes/
EmberMUD/doc/design/
EmberMUD/gods/
EmberMUD/log/
EmberMUD/notes/
EmberMUD/player/
EmberMUD/player/temp/
EmberMUD/src/MSVC/
EmberMUD/src/Sleep/
EmberMUD/src/StartMUD/
EmberMUD/src/Win32Common/
#ifndef _OLC_H_
#define _OLC_H_

/***************************************************************************
 *  File: olc.h                                                            *
 *                                                                         *
 *  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.                                                  *
 *                                                                         *
 *  This code was freely distributed with the The Isles 1.1 source code,   *
 *  and has been used here for OLC - OLC would not be what it is without   *
 *  all the previous coders who released their source code.                *
 *                                                                         *
 ***************************************************************************/

/*
 * This is a header file for all the OLC files.  Feel free to copy it into
 * merc.h if you wish.  Many of these routines may be handy elsewhere in
 * the code.  -Jason Dinkel
 */

/**************************************************************************
 * Mudprogram's (Mobprogram, Objprogram and Roomprogram) originaly        *
 * by the SMAUG development team                                          *
 * Ported to EmberMUD by Thanatos and Tyrluk of ToED                      *
 * (Temple of Eternal Death)                                              *
 * Tyrluk   - morn@telmaron.com or dajy@mindspring.com                    *
 * Thanatos - morn@telmaron.com or jonathan_w._rose@ffic.com              * 
 * Heavily modified by Zane (zane@supernova.org)                          *
 **************************************************************************/

/*
 * The version info.  Please use this info when reporting bugs.
 * It is displayed in the game by typing 'version' while editing.
 * Do not remove these from the code - by request of Jason Dinkel
 */

#define VERSION	"ILAB Online Creation [Beta 1.3]"
#define AUTHOR	"     By Jason(jdinkel@mines.colorado.edu)\n\r" \
                "     Modified for use with ROM 2.3\n\r"        \
                "     By Hans Birkeland (hansbi@ifi.uio.no)"
#define DATE	"     (Apr. 7, 1995 - ROM mod, Apr 16, 1995)"
#define CREDITS "     Original by Surreality(cxw197@psu.edu) and Locke(locke@lm.com)"
#define ADDONS  "     Mudprogram's (Mobprogram, Objprogram and Roomprogram) originaly\n\r" \
		"     by the SMAUG development team\n\r" \
		"     Ported to EmberMUD by Thanatos and Tyrluk of ToED\n\r"  \
		"     (Temple of Eternal Death)\n\r"  \
		"     Tyrluk   - morn@telmaron.com or dajy@mindspring.com\n\r" \
		"     Thanatos - morn@telmaron.com or jonathan_w._rose@ffic.com\n\r" \
		"     Heavily modified by Zane (zane@supernova.org) "

/*
 * New typedefs.
 */
typedef bool OLC_FUN args( ( CHAR_DATA * ch, char *argument ) );
#define DECLARE_OLC_FUN( fun )	OLC_FUN    fun

/*
 * Structure for an OLC editor command.
 */
struct olc_cmd_type {
    char *name;
    OLC_FUN *olc_fun;
};

DECLARE_DO_FUN( do_helpedit );
DECLARE_DO_FUN( do_todoedit );
extern const struct olc_cmd_type helpsedit_table[];
extern const struct olc_cmd_type todoedit_table[];

/* Function prototypes */
void helpsedit args( ( CHAR_DATA * ch, char *argument ) );
HELP_DATA *new_help args( ( void ) );
HELP_DATA *get_help args( ( char *argument ) );
bool helpsedit_show args( ( CHAR_DATA * ch, char *argument ) );
bool helpsedit_keyword args( ( CHAR_DATA * ch, char *argument ) );
bool helpsedit_level args( ( CHAR_DATA * ch, char *argument ) );
bool helpsedit_text args( ( CHAR_DATA * ch, char *argument ) );
bool helpsedit_create args( ( CHAR_DATA * ch, char *argument ) );

void todoedit args( ( CHAR_DATA * ch, char *argument ) );
HELP_DATA *new_help args( ( void ) );
HELP_DATA *get_help args( ( char *argument ) );
bool todoedit_show args( ( CHAR_DATA * ch, char *argument ) );
bool todoedit_keyword args( ( CHAR_DATA * ch, char *argument ) );
bool todoedit_level args( ( CHAR_DATA * ch, char *argument ) );
bool todoedit_text args( ( CHAR_DATA * ch, char *argument ) );
bool todoedit_create args( ( CHAR_DATA * ch, char *argument ) );

/* Command procedures needed ROM OLC */
DECLARE_DO_FUN( do_help );
DECLARE_SPELL_FUN( spell_null );

/*
 * Connected states for editor.
 */
#define ED_AREA 	1
#define ED_ROOM 	2
#define ED_OBJECT 	3
#define ED_MOBILE 	4
#define ED_TODO 	5
#define ED_HELP 	6
#define ED_MPROG	7
#define ED_MPGROUP	8
#define ED_CLAN		9
#define ED_FACTION  10
#define ED_HELPOLC  11
#define ED_SOCIAL  12
#define ED_TODOOLC 13

/*
 * Interpreter Prototypes
 */
void aedit args( ( CHAR_DATA * ch, char *argument ) );
void redit args( ( CHAR_DATA * ch, char *argument ) );
void medit args( ( CHAR_DATA * ch, char *argument ) );
void oedit args( ( CHAR_DATA * ch, char *argument ) );
void tedit args( ( CHAR_DATA * ch, char *argument ) );
void hedit args( ( CHAR_DATA * ch, char *argument ) );
void mpedit args( ( CHAR_DATA * ch, char *argument ) );
void mpgedit args( ( CHAR_DATA * ch, char *argument ) );
void cedit args( ( CHAR_DATA * ch, char *argument ) );
void save_clans args( ( void ) );
void save_area_list args( ( void ) );
void save_area args( ( AREA_DATA * pArea ) );
void save_todo args( ( void ) );
void save_helps args( ( void ) );
void save_mudprogs args( ( void ) );
char *fix_string args( ( const char *str ) );

/*
 * OLC Constants
 */
#define MAX_MOB	1               /* Default maximum number for resetting mobs */

/*
 * Structure for an OLC editor startup command.
 */
struct editor_cmd_type {
    char *name;
    DO_FUN *do_fun;
};

/*
 * This structure is used in bit.c to lookup flags and stats.
 */
struct flag_type {
    char *name;
    int bit;
    bool settable;
};

/*
 * Utils.
 */
AREA_DATA *get_vnum_area args( ( int vnum ) );
AREA_DATA *get_area_data args( ( int vnum ) );
int flag_value args( ( const struct flag_type * flag_table, char *argument ) );
char *flag_string args( ( const struct flag_type * flag_table, int bits ) );
void add_reset args( ( ROOM_INDEX_DATA * room,
                       RESET_DATA * pReset, int index ) );

/*
 * Interpreter Table Prototypes
 */
extern const struct olc_cmd_type aedit_table[];
extern const struct olc_cmd_type redit_table[];
extern const struct olc_cmd_type oedit_table[];
extern const struct olc_cmd_type medit_table[];
extern const struct olc_cmd_type mpedit_table[];
extern const struct olc_cmd_type mpgedit_table[];
extern const struct olc_cmd_type cedit_table[];

/*
 * Editor Commands.
 */
DECLARE_DO_FUN( do_aedit );
DECLARE_DO_FUN( do_redit );
DECLARE_DO_FUN( do_oedit );
DECLARE_DO_FUN( do_medit );
DECLARE_DO_FUN( do_mpedit );
DECLARE_DO_FUN( do_mpgedit );
DECLARE_DO_FUN( do_cedit );

/*
 * General Functions
 */
bool show_commands args( ( CHAR_DATA * ch, char *argument ) );
bool show_help args( ( CHAR_DATA * ch, char *argument ) );
bool edit_done args( ( CHAR_DATA * ch ) );
bool show_version args( ( CHAR_DATA * ch, char *argument ) );

/*
 * Area Editor Prototypes
 */
DECLARE_OLC_FUN( aedit_show );
DECLARE_OLC_FUN( aedit_create );
DECLARE_OLC_FUN( aedit_change );
DECLARE_OLC_FUN( aedit_name );
DECLARE_OLC_FUN( aedit_file );
DECLARE_OLC_FUN( aedit_age );
/* DECLARE_OLC_FUN( aedit_recall	);       ROM OLC */
DECLARE_OLC_FUN( aedit_reset );
DECLARE_OLC_FUN( aedit_security );
DECLARE_OLC_FUN( aedit_builder );
DECLARE_OLC_FUN( aedit_vnum );
DECLARE_OLC_FUN( aedit_lvnum );
DECLARE_OLC_FUN( aedit_uvnum );

/*
 * Room Editor Prototypes
 */
DECLARE_OLC_FUN( redit_show );
DECLARE_OLC_FUN( redit_create );
DECLARE_OLC_FUN( redit_name );
DECLARE_OLC_FUN( redit_desc );
DECLARE_OLC_FUN( redit_ed );
DECLARE_OLC_FUN( redit_format );
DECLARE_OLC_FUN( redit_north );
DECLARE_OLC_FUN( redit_south );
DECLARE_OLC_FUN( redit_east );
DECLARE_OLC_FUN( redit_west );
DECLARE_OLC_FUN( redit_up );
DECLARE_OLC_FUN( redit_down );
DECLARE_OLC_FUN( redit_mreset );
DECLARE_OLC_FUN( redit_oreset );
DECLARE_OLC_FUN( redit_mfreevnums );
DECLARE_OLC_FUN( redit_rfreevnums );
DECLARE_OLC_FUN( redit_ofreevnums );
DECLARE_OLC_FUN( redit_mlist );
DECLARE_OLC_FUN( redit_olist );
DECLARE_OLC_FUN( redit_mshow );
DECLARE_OLC_FUN( redit_oshow );

/*
 * Object Editor Prototypes
 */
DECLARE_OLC_FUN( oedit_show );
DECLARE_OLC_FUN( oedit_create );
DECLARE_OLC_FUN( oedit_name );
DECLARE_OLC_FUN( oedit_short );
DECLARE_OLC_FUN( oedit_long );
DECLARE_OLC_FUN( oedit_addaffect );
DECLARE_OLC_FUN( oedit_delaffect );
DECLARE_OLC_FUN( oedit_value0 );
DECLARE_OLC_FUN( oedit_value1 );
DECLARE_OLC_FUN( oedit_value2 );
DECLARE_OLC_FUN( oedit_value3 );
DECLARE_OLC_FUN( oedit_value4 );    /* ROM */
DECLARE_OLC_FUN( oedit_weight );
DECLARE_OLC_FUN( oedit_cost );
DECLARE_OLC_FUN( oedit_ed );
DECLARE_OLC_FUN( oedit_clan );
DECLARE_OLC_FUN( oedit_extra ); /* ROM */
DECLARE_OLC_FUN( oedit_wear );  /* ROM */
DECLARE_OLC_FUN( oedit_type );  /* ROM */
DECLARE_OLC_FUN( oedit_affect );    /* ROM */
DECLARE_OLC_FUN( oedit_material );  /* ROM */
DECLARE_OLC_FUN( oedit_level ); /* ROM */
DECLARE_OLC_FUN( oedit_condition ); /* ROM */

/*
 * Mobile Editor Prototypes
 */
DECLARE_OLC_FUN( medit_show );
DECLARE_OLC_FUN( medit_create );
DECLARE_OLC_FUN( medit_name );
DECLARE_OLC_FUN( medit_short );
DECLARE_OLC_FUN( medit_long );
DECLARE_OLC_FUN( medit_shop );
DECLARE_OLC_FUN( medit_desc );
DECLARE_OLC_FUN( medit_level );
DECLARE_OLC_FUN( medit_align );
DECLARE_OLC_FUN( medit_sex );   /* ROM */
DECLARE_OLC_FUN( medit_ac );    /* ROM */
DECLARE_OLC_FUN( medit_act );   /* ROM */
DECLARE_OLC_FUN( medit_affect );    /* ROM */
DECLARE_OLC_FUN( medit_form );  /* ROM */
DECLARE_OLC_FUN( medit_part );  /* ROM */
DECLARE_OLC_FUN( medit_imm );   /* ROM */
DECLARE_OLC_FUN( medit_res );   /* ROM */
DECLARE_OLC_FUN( medit_vuln );  /* ROM */
DECLARE_OLC_FUN( medit_material );  /* ROM */
DECLARE_OLC_FUN( medit_off );   /* ROM */
DECLARE_OLC_FUN( medit_size );  /* ROM */
DECLARE_OLC_FUN( medit_hitdice );   /* ROM */
DECLARE_OLC_FUN( medit_manadice );  /* ROM */
DECLARE_OLC_FUN( medit_damdice );   /* ROM */
DECLARE_OLC_FUN( medit_damtype );   /* ROM */
DECLARE_OLC_FUN( medit_race );  /* ROM */
DECLARE_OLC_FUN( medit_position );  /* ROM */
DECLARE_OLC_FUN( medit_gold );  /* ROM */
DECLARE_OLC_FUN( medit_hitroll );   /* ROM */
DECLARE_OLC_FUN( medit_bdamage );
DECLARE_OLC_FUN( medit_randtype );  /* ROM */
DECLARE_OLC_FUN( medit_randnum );   /* ROM */
DECLARE_OLC_FUN( medit_randpct );   /* ROM */
/*
 * MudProgs Editor Prototypes
 */
DECLARE_OLC_FUN( mpedit_assign );
DECLARE_OLC_FUN( mpedit_create );
DECLARE_OLC_FUN( mpedit_delete );
DECLARE_OLC_FUN( mpedit_description );
DECLARE_OLC_FUN( mpedit_edit );
DECLARE_OLC_FUN( mpedit_groups );
DECLARE_OLC_FUN( mpedit_name );
DECLARE_OLC_FUN( mpedit_progtype );
DECLARE_OLC_FUN( mpedit_unassign );
DECLARE_OLC_FUN( mpedit_show );
DECLARE_OLC_FUN( mpedit_trigger );
DECLARE_OLC_FUN( mpedit_triggertype );

DECLARE_OLC_FUN( mpgedit_add );
DECLARE_OLC_FUN( mpgedit_create );
DECLARE_OLC_FUN( mpgedit_delete );
DECLARE_OLC_FUN( mpgedit_description );
DECLARE_OLC_FUN( mpgedit_name );
DECLARE_OLC_FUN( mpgedit_remove );
DECLARE_OLC_FUN( mpgedit_show );

/*
 * Clan stuff!
 */
DECLARE_OLC_FUN( cedit_show );
DECLARE_OLC_FUN( cedit_create );
DECLARE_OLC_FUN( cedit_name );
DECLARE_OLC_FUN( cedit_whoname );
DECLARE_OLC_FUN( cedit_rank );
DECLARE_OLC_FUN( cedit_cost );
DECLARE_OLC_FUN( cedit_members );
DECLARE_OLC_FUN( cedit_minlevel );
DECLARE_OLC_FUN( cedit_recall );
DECLARE_OLC_FUN( cedit_leader );
DECLARE_OLC_FUN( cedit_sponsor );
DECLARE_OLC_FUN( cedit_joinflags );
DECLARE_OLC_FUN( cedit_clanflags );

/*
 * Macros
 */

#define IS_SWITCHED( ch )       ( ch->desc->original )  /* ROM OLC */

#define IS_BUILDER(ch, Area)	( ( ch->pcdata->security >= Area->security  \
				|| strstr( Area->builders, ch->name )	    \
				|| strstr( Area->builders, "All" ) )	    \
				&& !IS_SWITCHED( ch ) )

#define TOGGLE_BIT(var, bit)    ((var) ^= (bit))

/* Return pointers to what is being edited. */
#define EDIT_MOB(Ch, Mob)	( Mob   = ( MOB_INDEX_DATA *)Ch->desc->pEdit 	  )
#define EDIT_OBJ(Ch, Obj)	( Obj   = ( OBJ_INDEX_DATA *)Ch->desc->pEdit 	  )
#define EDIT_ROOM(Ch, Room)	( Room  = ( ROOM_INDEX_DATA *)Ch->in_room    	  )
#define EDIT_AREA(Ch, Area)	( Area  = ( AREA_DATA *)Ch->desc->pEdit     	  )
#define EDIT_MPROG(Ch, Mprog)	( Mprog = ( MPROG_DATA *)Ch->desc->pEdit 	  )
#define EDIT_MPGROUP(Ch, Mpgroup) ( Mpgroup = ( MPROG_GROUP *)Ch->desc->pEdit )
#define EDIT_CLAN(Ch, Clan)	( Clan  = ( CLAN_DATA *)Ch->desc->pEdit			  )

/*
 * Prototypes
 */
/* mem.c - memory prototypes. */
#define ED	EXTRA_DESCR_DATA
RESET_DATA *new_reset_data args( ( void ) );
void free_reset_data args( ( RESET_DATA * pReset ) );
AREA_DATA *new_area args( ( void ) );
void free_area args( ( AREA_DATA * pArea ) );
EXIT_DATA *new_exit args( ( void ) );
void free_exit args( ( EXIT_DATA * pExit ) );
ED *new_extra_descr args( ( void ) );
void free_extra_descr args( ( ED * pExtra ) );
ROOM_INDEX_DATA *new_room_index args( ( void ) );
void free_room_index args( ( ROOM_INDEX_DATA * pRoom ) );
AFFECT_DATA *new_affect args( ( void ) );
NEWAFFECT_DATA *new_newaffect args( ( void ) );
void free_affect args( ( AFFECT_DATA * pAf ) );
SHOP_DATA *new_shop args( ( void ) );
void free_shop args( ( SHOP_DATA * pShop ) );
OBJ_INDEX_DATA *new_obj_index args( ( void ) );
void free_obj_index args( ( OBJ_INDEX_DATA * pObj ) );
MOB_INDEX_DATA *new_mob_index args( ( void ) );
void free_mob_index args( ( MOB_INDEX_DATA * pMob ) );
/* Olc.c */
int mprog_count args( ( MOB_INDEX_DATA * pMob ) );
MPROG_DATA *edit_mprog args( ( CHAR_DATA * ch, MOB_INDEX_DATA * pMobProg ) );
void delete_mprog args( ( CHAR_DATA * ch, int pnum ) );

int rprog_count args( ( ROOM_INDEX_DATA * pRoom ) );
MPROG_DATA *edit_rprog args( ( CHAR_DATA * ch, ROOM_INDEX_DATA * pRoomProg ) );
void delete_rprog args( ( CHAR_DATA * ch, int pnum ) );
void show_rprog args( ( CHAR_DATA * ch, MPROG_DATA * pRoomProg ) );
int oprog_count args( ( OBJ_INDEX_DATA * pObj ) );
MPROG_DATA *edit_oprog args( ( CHAR_DATA * ch, OBJ_INDEX_DATA * pObjProg ) );
void delete_oprog args( ( CHAR_DATA * ch, int pnum ) );
void show_oprog args( ( CHAR_DATA * ch, MPROG_DATA * pObjProg ) );
/* Clan.c */
CLAN_DATA *new_clan args( ( void ) );
CLAN_DATA *get_clan args( ( int clannum ) );
char *fwrite_flag args( ( long flags, char buf[] ) );
void clan_log args( ( CLAN_DATA * clan, char *str, ... ) );

DECLARE_DO_FUN( do_socialedit );
DECLARE_DO_FUN( do_socialfind );

typedef struct sociallist_data SOCIALLIST_DATA;

extern SOCIALLIST_DATA *social_first;
extern SOCIALLIST_DATA *social_last;

extern const struct olc_cmd_type socialedit_table[];

/* Struct for list of socials available in the MUD */
struct sociallist_data {
    sh_int vnum;
    char *name;
    char *char_no_arg;
    char *others_no_arg;
    char *char_found;
    char *others_found;
    char *vict_found;
    char *char_not_found;
    char *char_auto;
    char *others_auto;
    SOCIALLIST_DATA *next;
};

/* Function prototypes */
void load_socials args( ( FILE * fp ) );
void save_socials args( ( void ) );
void socialedit args( ( CHAR_DATA * ch, char *argument ) );
SOCIALLIST_DATA *new_social args( ( void ) );
SOCIALLIST_DATA *get_social_by_vnum args( ( sh_int vnum ) );
bool socialedit_show args( ( CHAR_DATA * ch, char *argument ) );
bool socialedit_create args( ( CHAR_DATA * ch, char *argument ) );
bool socialedit_name args( ( CHAR_DATA * ch, char *argument ) );
bool socialedit_chnoarg args( ( CHAR_DATA * ch, char *argument ) );
bool socialedit_othersnoarg args( ( CHAR_DATA * ch, char *argument ) );
bool socialedit_chfound args( ( CHAR_DATA * ch, char *argument ) );
bool socialedit_othersfound args( ( CHAR_DATA * ch, char *argument ) );
bool socialedit_victfound args( ( CHAR_DATA * ch, char *argument ) );
bool socialedit_chnotfound args( ( CHAR_DATA * ch, char *argument ) );
bool socialedit_chauto args( ( CHAR_DATA * ch, char *argument ) );
bool socialedit_othersauto args( ( CHAR_DATA * ch, char *argument ) );

#undef	ED

#endif