コード例 #1
0
ファイル: olc_mpcode.c プロジェクト: MUDOmnibus/QuickMUD
void mpedit (CHAR_DATA * ch, char *argument)
{
    MPROG_CODE *pMcode;
    char arg[MAX_INPUT_LENGTH];
    char command[MAX_INPUT_LENGTH];
    int cmd;
    AREA_DATA *ad;

    smash_tilde (argument);
    strcpy (arg, argument);
    argument = one_argument (argument, command);

    EDIT_MPCODE (ch, pMcode);

    if (pMcode)
    {
        ad = get_vnum_area (pMcode->vnum);

        if (ad == NULL)
        {                        /* ??? */
            edit_done (ch);
            return;
        }

        if (!IS_BUILDER (ch, ad))
        {
            send_to_char ("MPEdit: Insufficient security to modify code.\n\r",
                          ch);
            edit_done (ch);
            return;
        }
    }

    if (command[0] == '\0')
    {
        mpedit_show (ch, argument);
        return;
    }

    if (!str_cmp (command, "done"))
    {
        edit_done (ch);
        return;
    }

    for (cmd = 0; mpedit_table[cmd].name != NULL; cmd++)
    {
        if (!str_prefix (command, mpedit_table[cmd].name))
        {
            if ((*mpedit_table[cmd].olc_fun) (ch, argument) && pMcode)
                if ((ad = get_vnum_area (pMcode->vnum)) != NULL)
                    SET_BIT (ad->area_flags, AREA_CHANGED);
            return;
        }
    }

    interpret (ch, arg);

    return;
}
コード例 #2
0
ファイル: olc.c プロジェクト: MUDOmnibus/TinyROM
/* Area Interpreter, called by do_aedit. */
void aedit (CHAR_DATA * ch, char *argument)
{
    AREA_DATA *pArea;
    char command[MAX_INPUT_LENGTH];
    char arg[MAX_INPUT_LENGTH];
    int cmd;
    int value;

    EDIT_AREA (ch, pArea);
    smash_tilde (argument);
    strcpy (arg, argument);
    argument = one_argument (argument, command);

    if (!IS_BUILDER (ch, pArea))
    {
        send_to_char ("AEdit:  Insufficient security to modify area.\n\r",
                      ch);
        edit_done (ch);
        return;
    }

    if (!str_cmp (command, "done"))
    {
        edit_done (ch);
        return;
    }

    if (command[0] == '\0')
    {
        aedit_show (ch, argument);
        return;
    }

    if ((value = flag_value (area_flags, command)) != NO_FLAG)
    {
        TOGGLE_BIT (pArea->area_flags, value);

        send_to_char ("Flag toggled.\n\r", ch);
        return;
    }

    /* Search Table and Dispatch Command. */
    for (cmd = 0; aedit_table[cmd].name != NULL; cmd++)
    {
        if (!str_prefix (command, aedit_table[cmd].name))
        {
            if ((*aedit_table[cmd].olc_fun) (ch, argument))
            {
                SET_BIT (pArea->area_flags, AREA_CHANGED);
                return;
            }
            else
                return;
        }
    }

    /* Default to Standard Interpreter. */
    interpret (ch, arg);
    return;
}
コード例 #3
0
ファイル: olc_bonus_set.c プロジェクト: KillerMud/Source
void bsedit( CHAR_DATA *ch, char *argument )
{
	BONUS_INDEX_DATA * pBonus;
	char arg[ MAX_INPUT_LENGTH ];
	char command[ MAX_INPUT_LENGTH ];
	int cmd;
	AREA_DATA *ad;

	smash_tilde( argument );
	strcpy( arg, argument );
	argument = one_argument( argument, command );

	EDIT_BSDATA( ch, pBonus );

	if ( pBonus )
	{
		ad = get_vnum_area( pBonus->vnum );

		if ( ad == NULL )
		{
			edit_done( ch );
			return ;
		}

		if ( !IS_BUILDER( ch, ad ) )
		{
			send_to_char( "BSEdit: Masz niewystarczaj±ce security.\n\r", ch );
			edit_done( ch );
			return ;
		}
	}

	if ( command[ 0 ] == '\0' )
	{
		bsedit_show( ch, argument );
		return ;
	}

	if ( !str_cmp( command, "done" ) )
	{
		edit_done( ch );
		return ;
	}

	for ( cmd = 0; bsedit_table[ cmd ].name != NULL; cmd++ )
	{
		if ( !str_prefix( command, bsedit_table[ cmd ].name ) )
		{
			if ( ( *bsedit_table[ cmd ].olc_fun ) ( ch, argument ) && pBonus )
				if ( ( ad = get_vnum_area( pBonus->vnum ) ) != NULL )
					SET_BIT( ad->area_flags, AREA_CHANGED );
			return ;
		}
	}

	interpret( ch, arg );
	return ;
}
コード例 #4
0
ファイル: olc_descdata.c プロジェクト: Tener/KillerMUD
void rdedit( CHAR_DATA *ch, char *argument)
{
    RAND_DESC_DATA *pDdata;
    char arg[MAX_INPUT_LENGTH];
    char command[MAX_INPUT_LENGTH];
    int cmd;
    AREA_DATA *ad;

    smash_tilde(argument);
    strcpy(arg, argument);
    argument = one_argument( argument, command);

    EDIT_RDESCDATA(ch, pDdata);

    if (pDdata)
    {
        ad = get_vnum_area( pDdata->vnum );

        if ( ad == NULL )
        {
            edit_done(ch);
            return;
        }

        if ( !IS_BUILDER(ch, ad) )
        {
            send_to_char("DescEdit: Brak praw dostêpu.\n\r", ch);
            edit_done(ch);
            return;
        }
    }

    if (command[0] == '\0')
    {
        rdedit_show(ch, argument);
        return;
    }

    if (!str_cmp(command, "done") )
    {
        edit_done(ch);
        return;
    }

    for (cmd = 0; rdedit_table[cmd].name != NULL; cmd++)
    {
        if (!str_prefix(command, rdedit_table[cmd].name) )
        {
            if ((*rdedit_table[cmd].olc_fun) (ch, argument) && pDdata)
                if ((ad = get_vnum_area(pDdata->vnum)) != NULL)
                    SET_BIT(ad->area_flags, AREA_CHANGED);
            return;
        }
    }

    interpret(ch, arg);
    return;
}
コード例 #5
0
ファイル: olc_descdata.c プロジェクト: Tener/KillerMUD
void do_rdedit(CHAR_DATA *ch, char *argument)
{
    RAND_DESC_DATA *pDdata;
    char command[MAX_INPUT_LENGTH];

    argument = one_argument(argument, command);

    if( is_number(command) )
    {
        unsigned int vnum = atoi(command);

        AREA_DATA *ad;

        if ( (pDdata = get_rdesc_index(vnum)) == NULL )
        {
            send_to_char("RDEdit: Nie istnieje taki opis.\n\r",ch);
            return;
        }

        ad = get_vnum_area(vnum);

        if ( ad == NULL )
        {
            send_to_char( "RDEdit: Nie ma przypisanej krainy.\n\r", ch );
            return;
        }

        if ( !IS_BUILDER(ch, ad) )
        {
            send_to_char("RDEdit: Masz niewystarczaj±ce security.\n\r", ch );
            return;
        }

        ch->desc->pEdit		= (void *)pDdata;
        ch->desc->editor	= ED_RDESCDATA;

        return;
    }

    if ( !str_cmp(command, "create") )
    {
        if (argument[0] == '\0')
        {
            send_to_char( "RDEdit: Sk³adnia: rdedit create [vnum]\n\r", ch );
            return;
        }

        rdedit_create(ch, argument);
        return;
    }

    send_to_char( "RDEdit: Sk³adnia:   rdedit [vnum]\n\r", ch );
    send_to_char( "                    rdedit create [vnum]\n\r", ch );

    return;
}
コード例 #6
0
ファイル: olc_mpcode.c プロジェクト: MUDOmnibus/QuickMUD
void do_mpedit (CHAR_DATA * ch, char *argument)
{
    MPROG_CODE *pMcode;
    char command[MAX_INPUT_LENGTH];

    argument = one_argument (argument, command);

    if (is_number (command))
    {
        int vnum = atoi (command);
        AREA_DATA *ad;

        if ((pMcode = get_mprog_index (vnum)) == NULL)
        {
            send_to_char ("MPEdit : That vnum does not exist.\n\r", ch);
            return;
        }

        ad = get_vnum_area (vnum);

        if (ad == NULL)
        {
            send_to_char ("MPEdit : VNUM no asignado a ningun area.\n\r", ch);
            return;
        }

        if (!IS_BUILDER (ch, ad))
        {
            send_to_char
                ("MPEdit : Insuficiente seguridad para editar area.\n\r", ch);
            return;
        }

        ch->desc->pEdit = (void *) pMcode;
        ch->desc->editor = ED_MPCODE;

        return;
    }

    if (!str_cmp (command, "create"))
    {
        if (argument[0] == '\0')
        {
            send_to_char ("Sintaxis : mpedit create [vnum]\n\r", ch);
            return;
        }

        mpedit_create (ch, argument);
        return;
    }

    send_to_char ("Sintaxis : mpedit [vnum]\n\r", ch);
    send_to_char ("           mpedit create [vnum]\n\r", ch);

    return;
}
コード例 #7
0
ファイル: olc_bonus_set.c プロジェクト: KillerMud/Source
void do_bsedit( CHAR_DATA *ch, char *argument )
{
	BONUS_INDEX_DATA * pBonus;
	char command[ MAX_INPUT_LENGTH ];

	argument = one_argument( argument, command );

	if ( is_number( command ) )
	{
		ush_int vnum = atoi( command );

		AREA_DATA *ad;

		if ( ( pBonus = get_bonus_index( vnum ) ) == NULL )
		{
			send_to_char( "BSEdit: Nie istnieje taki bonus set.\n\r", ch );
			return ;
		}

		ad = get_vnum_area( vnum );

		if ( ad == NULL )
		{
			send_to_char( "BSEdit: Nie ma przypisanej krainy.\n\r", ch );
			return ;
		}

		if ( !IS_BUILDER( ch, ad ) )
		{
			send_to_char( "BSEdit: Masz niewystarczaj±ce security.\n\r", ch );
			return ;
		}

		ch->desc->pEdit	= ( void * ) pBonus;
		ch->desc->editor	= ED_BSDATA;

		return ;
	}

	if ( !str_cmp( command, "create" ) )
	{
		if ( argument[ 0 ] == '\0' )
		{
			send_to_char( "BSEdit: Sk³adnia: bsedit create [vnum]\n\r", ch );
			return ;
		}

		bsedit_create( ch, argument );
		return ;
	}

	send_to_char( "BSEdit: SK³adnia: bsedit [vnum]\n\r", ch );
	send_to_char( "                  bsedit create [vnum]\n\r", ch );

	return ;
}
コード例 #8
0
void do_mpedit(CHAR_DATA *ch, char *argument)
{
    MPROG_CODE *pMcode;
    char command[MAX_INPUT_LENGTH]={'\0'};

    argument = one_argument(argument, command);

    if( is_number(command) )
    {
	int vnum = atoi(command);
	AREA_DATA *ad;

	if ( (pMcode = get_mprog_index(vnum)) == NULL )
	{
		send_to_char("MPEdit : That vnum does not exist.\n\r",ch);
		return;
	}

	ad = get_vnum_area(vnum);

	if ( ad == NULL )
	{
		send_to_char( "MPEdit : That vnum has not been assigned to an area.\n\r", ch );
		return;
	}

	if ( !IS_BUILDER(ch, ad) )
	{
		send_to_char("MPEdit : You do not have access to that area.\n\r", ch );
		return;
	}

	ch->desc->pEdit		= (void *)pMcode;
	ch->desc->editor	= ED_MPCODE;

	return;
    }

    if ( !str_cmp(command, "create") )
    {
	if (IS_NULLSTR(argument))
	{
		send_to_char( "Syntax : mpedit create [vnum]\n\r", ch );
		return;
	}

	mpedit_create(ch, argument);
	return;
    }

    send_to_char( "Syntax : mpedit [vnum]\n\r", ch );
    send_to_char( "         mpedit create [vnum]\n\r", ch );

    return;
}
コード例 #9
0
ファイル: olc_mpcode.c プロジェクト: verias/SRMud
void do_rpedit(CHAR_DATA *ch, char *argument)
{
    PROG_CODE *pRcode;
    char command[MAX_INPUT_LENGTH];

    argument = one_argument(argument, command);

    if( is_number(command) )
    {
	int vnum = atoi(command);
	AREA_DATA *ad;

	if ( (pRcode = get_prog_index(vnum,PRG_RPROG)) == NULL )
	{
		send_to_char("RPEdit : That vnum does not exist.\n\r",ch);
		return;
	}

	ad = get_vnum_area(vnum);

	if ( ad == NULL )
	{
		send_to_char( "RPEdit : Vnum is not assigned an area.\n\r", ch );
		return;
	}

	if ( !IS_BUILDER(ch, ad) )
	{
		send_to_char("RPEdit : Insufficient security to modify area.\n\r", ch );
		return;
	}

	ch->desc->pEdit		= (void *)pRcode;
	ch->desc->editor	= ED_RPCODE;

	return;
    }

    if ( !str_cmp(command, "create") )
    {
	if (argument[0] == '\0')
	{
		send_to_char( "Syntax : rpedit create [vnum]\n\r", ch );
		return;
	}

	rpedit_create(ch, argument);
	return;
    }

    send_to_char( "Syntax : rpedit [vnum]\n\r", ch );
    send_to_char( "         rpedit create [vnum]\n\r", ch );

    return;
}
コード例 #10
0
ファイル: olc.c プロジェクト: MUDOmnibus/TinyROM
/* Room Interpreter, called by do_redit. */
void redit (CHAR_DATA * ch, char *argument)
{
    AREA_DATA *pArea;
    ROOM_INDEX_DATA *pRoom;
    char arg[MAX_STRING_LENGTH];
    char command[MAX_INPUT_LENGTH];
    int cmd;

    EDIT_ROOM (ch, pRoom);
    pArea = pRoom->area;

    smash_tilde (argument);
    strcpy (arg, argument);
    argument = one_argument (argument, command);

    if (!IS_BUILDER (ch, pArea))
    {
        send_to_char ("REdit:  Insufficient security to modify room.\n\r",
                      ch);
        edit_done (ch);
        return;
    }

    if (!str_cmp (command, "done"))
    {
        edit_done (ch);
        return;
    }

    if (command[0] == '\0')
    {
        redit_show (ch, argument);
        return;
    }

    /* Search Table and Dispatch Command. */
    for (cmd = 0; redit_table[cmd].name != NULL; cmd++)
    {
        if (!str_prefix (command, redit_table[cmd].name))
        {
            if ((*redit_table[cmd].olc_fun) (ch, argument))
            {
                SET_BIT (pArea->area_flags, AREA_CHANGED);
                return;
            }
            else
                return;
        }
    }

    /* Default to Standard Interpreter. */
    interpret (ch, arg);
    return;
}
コード例 #11
0
ファイル: olc.c プロジェクト: codernator/creepy-garbanzo
/*****************************************************************************
 *	do_medit
 *
 *	mobile editing interpreter
 *****************************************************************************/
void medit(struct char_data *ch, const char *argument)
{
    struct area_data *pArea;
    struct mob_index_data *pMob;
    char command[MAX_INPUT_LENGTH];
    char arg[MAX_STRING_LENGTH];
    const char *parg;
    int cmd;

    strcpy(arg, argument);
    smash_tilde(arg);
    parg = one_argument(arg, command);

    EDIT_MOB(ch, pMob);
    pArea = pMob->area;

    if (!IS_BUILDER(ch, pArea)) {
        send_to_char("MEdit: Insufficient security to modify area.\n\r", ch);
        edit_done(ch);
        return;
    }

    if (!str_cmp(command, "done")) {
        edit_done(ch);
        return;
    }

    if (command[0] == '\0') {
        medit_show(ch, parg);
        return;
    }

    /* Search Table and Dispatch Command. */
    for (cmd = 0; medit_table[cmd].name != NULL; cmd++) {
        if (!str_prefix(command, medit_table[cmd].name)) {
            if ((*medit_table[cmd].olc_fn)(ch, parg)) {
                SET_BIT(pArea->area_flags, AREA_CHANGED);
                return;
            } else {
                return;
            }
        }
    }

    /* Default to Standard Interpreter. */
    interpret(ch, arg);
    return;
}
コード例 #12
0
void look_room(struct char_data *ch, struct room_index_data *in_room) {
    if (!validate_look(ch)) {
	return;
    }

    if (in_room == NULL) {
	send_to_char("NOWHERE.", ch);
	return;
    }

    if (room_is_dark(ch, in_room) && !IS_SET(ch->act, PLR_HOLYLIGHT)) {
	send_to_char("It is pitch ```8black...`` \n\r", ch);
	show_char_to_char(in_room->people, ch);
	return;
    }


    send_to_char(in_room->name, ch);
    if ((IS_IMMORTAL(ch) && (IS_NPC(ch) || IS_SET(ch->act, PLR_HOLYLIGHT))) || IS_BUILDER(ch, in_room->area)) {
	printf_to_char(ch, " [`1Room `!%d``]", in_room->vnum);
    }

    send_to_char("\n\r", ch);
    if ((!IS_NPC(ch) && !IS_SET(ch->comm, COMM_BRIEF))) {
	send_to_char("  ", ch);
	send_to_char(in_room->description, ch);
    }

    send_to_char("\n\r", ch);

    if ((is_affected(ch, gsp_detect_magic) || IS_SET(ch->act, PLR_HOLYLIGHT))) {
	struct affect_data *paf;
	for (paf = in_room->affected; paf != NULL; paf = paf->next) {
	    send_to_char(room_affect(paf), ch);
	}
	send_to_char("\n\r", ch);
    }

    if (!IS_NPC(ch) && IS_SET(ch->act, PLR_AUTOEXIT))
	do_exits(ch, "auto");

    if (is_affected_room(in_room, gsp_faerie_fog))
	send_to_char("There is a `Ppurple haze`` floating throughout the room.\n\r", ch);

    show_list_to_char(in_room->contents, ch, false, false);
    show_char_to_char(in_room->people, ch);
    return;
}
コード例 #13
0
ファイル: olc.c プロジェクト: MUDOmnibus/TinyROM
/* Entry point for editing area_data. */
void do_aedit (CHAR_DATA * ch, char *argument)
{
    AREA_DATA *pArea;
    int value;
    char arg[MAX_STRING_LENGTH];

    if (IS_NPC (ch))
        return;

    pArea = ch->in_room->area;

    argument = one_argument (argument, arg);

    if (is_number (arg))
    {
        value = atoi (arg);
        if (!(pArea = get_area_data (value)))
        {
            send_to_char ("That area vnum does not exist.\n\r", ch);
            return;
        }
    }
    else if (!str_cmp (arg, "create"))
    {
        if (ch->pcdata->security < 9)
        {
            send_to_char ("AEdit : Insufficient security to create area.\n\r",
                          ch);
            return;
        }

        aedit_create (ch, "");
        ch->desc->editor = ED_AREA;
        return;
    }

    if (!IS_BUILDER (ch, pArea))
    {
        send_to_char ("Insufficient security to edit areas.\n\r", ch);
        return;
    }

    ch->desc->pEdit = (void *) pArea;
    ch->desc->editor = ED_AREA;
    return;
}
コード例 #14
0
ファイル: olc_mpcode.c プロジェクト: KillerMud/Source
void do_mpedit( CHAR_DATA *ch, char *argument )
{
    PROG_CODE * pMcode;
    AREA_DATA *ad;
    char command[ MAX_INPUT_LENGTH ];

    argument = one_argument( argument, command );

    if ( command[0] == '\0' )
    {
        send_to_char( "MPEdit: Skladnia : mpedit [name]\n\r", ch );
        send_to_char( "                   mpedit create [name]\n\r", ch );
    }

    if ( !str_cmp( command, "create" ) )
    {
        if ( argument[ 0 ] == '\0' )
        {
            send_to_char( "RPEdit: Sk³adnia: mpedit create [name]\n\r", ch );
            return ;
        }

        mpedit_create( ch, argument );
        return ;
    }

    if ( ( pMcode = get_mprog_index( command ) ) == NULL )
    {
        print_char( ch, "MPEdit : Mobprog o nazwie '%s' nie istnieje.\n\r", command );
        return ;
    }

    ad = pMcode->area;

    if ( ad && !IS_BUILDER( ch, ad ) )
    {
        send_to_char( "MPEdit : Niewystarczaj±ce uprawnienia.\n\r", ch );
        return ;
    }

    ch->desc->pEdit	= ( void * ) pMcode;
    ch->desc->editor	= ED_MPCODE;

    return ;
}
コード例 #15
0
ファイル: olc_save.c プロジェクト: pfchrono/Anotherland_Mud
/*****************************************************************************
 Name:		do_asave
 Purpose:	Entry point for saving area data.
 Called by:	interpreter(interp.c)
 ****************************************************************************/
void do_asave( CHAR_DATA *ch, char *argument )
{
    char arg1 [MAX_INPUT_LENGTH];
    AREA_DATA *pArea;
    int value;

    if ( !ch )                                              /* Do an autosave */
    {
        save_area_list();
        for( pArea = area_first; pArea; pArea = pArea->next )
        {
            save_area( pArea );
            REMOVE_BIT( pArea->area_flags, AREA_CHANGED | AREA_ADDED );
        }
        return;
    }
    if (IS_NPC(ch)) return;

    if (ch->pcdata->security < 1)
    {
        send_to_char("Huh?\n\r", ch );
        return;
    }

    argument = one_argument( argument, arg1 );

    if ( arg1[0] == '\0' )
    {
        send_to_char( "Syntax:\n\r", ch );
        send_to_char( "  asave <vnum>    - saves a particular area\n\r",     ch );
        send_to_char( "  asave list      - saves the area.lst file\n\r",     ch );
        send_to_char( "  asave helps    - saves the help file\n\r", ch );
        send_to_char( "  asave area      - saves the area being edited\n\r", ch );
        send_to_char( "  asave changed   - saves all changed zones\n\r",     ch );
        send_to_char( "  asave world     - saves the world! (db dump)\n\r",  ch );
        send_to_char( "  asave ^ verbose - saves in verbose mode\n\r", ch );
        send_to_char( "\n\r", ch );
        return;
    }

    /* Snarf the value (which need not be numeric). */
    value = atoi( arg1 );

    /* Save the area of given vnum. */
    /* ---------------------------- */

    if ( !( pArea = get_area_data( value ) ) && is_number( arg1 ) )
    {
        send_to_char( "That area does not exist.\n\r", ch );
        return;
    }

    if ( is_number( arg1 ) )
    {
        if ( !IS_BUILDER( ch, pArea ) )
        {
            send_to_char( "You are not a builder for this area.\n\r", ch );
            return;
        }

        save_area_list();
        if ( !str_cmp( "verbose", argument ) )
            SET_BIT( pArea->area_flags, AREA_VERBOSE );
        save_area( pArea );
        REMOVE_BIT( pArea->area_flags, AREA_VERBOSE );
        return;
    }

    /* Save the world, only authorized areas. */
    /* -------------------------------------- */

    if ( !str_cmp( "world", arg1 ) )
    {
        save_area_list();
        for( pArea = area_first; pArea; pArea = pArea->next )
        {
            /* Builder must be assigned this area. */
            if ( !IS_BUILDER( ch, pArea ) )
                continue;

            if ( !str_cmp( "verbose", argument ) )
                SET_BIT( pArea->area_flags, AREA_VERBOSE );
            save_area( pArea );
            REMOVE_BIT( pArea->area_flags, AREA_CHANGED | AREA_ADDED | AREA_VERBOSE );
        }
        send_to_char( "You saved the world.\n\r", ch );
        return;
    }

    if (!str_cmp(arg1, "helps"))
    {

        if (ch->level > 6)
        {
            save_help();
            send_to_char(" Helps saved.\n\r", ch);
        }
        return;
    }

    /* Save changed areas, only authorized areas. */
    /* ------------------------------------------ */

    if ( !str_cmp( "changed", arg1 ) )
    {
        char buf[MAX_INPUT_LENGTH];

        save_area_list();

        send_to_char( "Saved zones:\n\r", ch );
        sprintf( buf, "None.\n\r" );

        for( pArea = area_first; pArea; pArea = pArea->next )
        {
            /* Builder must be assigned this area. */
            if ( !IS_BUILDER( ch, pArea ) )
                continue;

            /* Save changed areas. */
            if ( IS_SET(pArea->area_flags, AREA_CHANGED)
                || IS_SET(pArea->area_flags, AREA_ADDED) )
            {
                if ( !str_cmp( "verbose", argument ) )
                    SET_BIT( pArea->area_flags, AREA_VERBOSE );
                save_area( pArea );
                REMOVE_BIT( pArea->area_flags, AREA_CHANGED | AREA_ADDED | AREA_VERBOSE );
                sprintf( buf, "%24s - '%s'\n\r", pArea->name, pArea->filename );
                send_to_char( buf, ch );
            }
        }
        if ( !str_cmp( buf, "None.\n\r" ) )
            send_to_char( buf, ch );
        return;
    }

    /* Save the area.lst file. */
    /* ----------------------- */
    if ( !str_cmp( arg1, "list" ) )
    {
        save_area_list();
        return;
    }

    /* Save area being edited, if authorized. */
    /* -------------------------------------- */
    if ( !str_cmp( arg1, "area" ) )
    {
        /* Find the area to save. */
        switch (ch->desc->editor)
        {
            case ED_AREA:
                pArea = (AREA_DATA *)ch->desc->pEdit;
                break;
            case ED_ROOM:
                pArea = ch->in_room->area;
                break;
            case ED_OBJECT:
                pArea = ( (OBJ_INDEX_DATA *)ch->desc->pEdit )->area;
                break;
            case ED_MOBILE:
                pArea = ( (MOB_INDEX_DATA *)ch->desc->pEdit )->area;
                break;
            default:
                pArea = ch->in_room->area;
                break;
        }

        if ( !IS_BUILDER( ch, pArea ) )
        {
            send_to_char( "You are not a builder for this area.\n\r", ch );
            return;
        }

        save_area_list();
        if ( !str_cmp( "verbose", argument ) )
            SET_BIT( pArea->area_flags, AREA_VERBOSE );
        save_area( pArea );
        REMOVE_BIT( pArea->area_flags, AREA_CHANGED | AREA_ADDED | AREA_VERBOSE );
        send_to_char( "Area saved.\n\r", ch );
        return;
    }

    /* Show correct syntax. */
    /* -------------------- */
    do_asave( ch, "" );
    return;
}
コード例 #16
0
ファイル: olc.c プロジェクト: MUDOmnibus/TinyROM
/* Entry point for editing room_index_data. */
void do_redit (CHAR_DATA * ch, char *argument)
{
    ROOM_INDEX_DATA *pRoom;
    char arg1[MAX_STRING_LENGTH];

    if (IS_NPC (ch))
        return;

    argument = one_argument (argument, arg1);

    pRoom = ch->in_room;

    if (!str_cmp (arg1, "reset"))
    {                            /* redit reset */
        if (!IS_BUILDER (ch, pRoom->area))
        {
            send_to_char ("Insufficient security to modify room.\n\r", ch);
            return;
        }

        reset_room (pRoom);
        send_to_char ("Room reset.\n\r", ch);

        return;
    }
    else if (!str_cmp (arg1, "create"))
    {                            /* redit create <vnum> */
        if (argument[0] == '\0' || atoi (argument) == 0)
        {
            send_to_char ("Syntax:  edit room create [vnum]\n\r", ch);
            return;
        }

        if (redit_create (ch, argument))
        {                        /* pEdit == nuevo cuarto */
            ch->desc->editor = ED_ROOM;
            char_from_room (ch);
            char_to_room (ch, ch->desc->pEdit);
            SET_BIT (((ROOM_INDEX_DATA *) ch->desc->pEdit)->area->area_flags,
                     AREA_CHANGED);
        }

        return;
    }
    else if (!IS_NULLSTR (arg1))
    {                            /* redit <vnum> */
        pRoom = get_room_index (atoi (arg1));

        if (!pRoom)
        {
            send_to_char ("REdit : Nonexistant room.\n\r", ch);
            return;
        }

        if (!IS_BUILDER (ch, pRoom->area))
        {
            send_to_char ("REdit : Insufficient security to modify room.\n\r",
                          ch);
            return;
        }

        char_from_room (ch);
        char_to_room (ch, pRoom);
    }

    if (!IS_BUILDER (ch, pRoom->area))
    {
        send_to_char ("REdit : Insufficient security to modify room.\n\r",
                      ch);
        return;
    }

    ch->desc->pEdit = (void *) pRoom;
    ch->desc->editor = ED_ROOM;

    return;
}
コード例 #17
0
/***************************************************************************
 *	change_exit
 *
 *	change the values of an exit
 ***************************************************************************/
static bool change_exit(struct char_data *ch, const char *argument, int door)
{
    struct room_index_data *room;
    char command[MAX_INPUT_LENGTH];
    char arg[MAX_INPUT_LENGTH];
    int value;

    EDIT_ROOM(ch, room);

    /* set the exit flags - needs full argument */
    if ((value = flag_value(exit_flags, argument)) != NO_FLAG) {
        struct room_index_data *pToRoom;
        int rev;

        if (!room->exit[door]) {
            send_to_char("Exit does not exist.\n\r", ch);
            return false;
        }

        /* this room */
        TOGGLE_BIT(room->exit[door]->rs_flags, value);
        room->exit[door]->exit_info = room->exit[door]->rs_flags;

        /* connected room */
        pToRoom = room->exit[door]->u1.to_room;
        rev = rev_dir[door];

        if (pToRoom->exit[rev] != NULL) {
            pToRoom->exit[rev]->rs_flags = room->exit[door]->rs_flags;
            pToRoom->exit[rev]->exit_info = room->exit[door]->exit_info;
        }

        send_to_char("Exit flag toggled.\n\r", ch);
        return true;
    }

    /* parse the arguments */
    argument = one_argument(argument, command);
    one_argument(argument, arg);

    if (command[0] == '\0' && argument[0] == '\0') {
        move_char(ch, door, true);
        return false;
    }

    if (command[0] == '?') {
        show_help(ch->desc, "OLC_EXIT", NULL);
        return false;
    }

    if (!str_cmp(command, "delete")) {
        struct room_index_data *pToRoom;
        int rev;

        if (!room->exit[door]) {
            send_to_char("REdit:  Cannot delete a null exit.\n\r", ch);
            return false;
        }

        /* remove ToRoom exit */
        rev = rev_dir[door];
        pToRoom = room->exit[door]->u1.to_room;

        if (pToRoom->exit[rev]) {
            free_exit(pToRoom->exit[rev]);
            pToRoom->exit[rev] = NULL;
        }

        /* remove this exit */
        free_exit(room->exit[door]);
        room->exit[door] = NULL;

        send_to_char("Exit unlinked.\n\r", ch);
        return true;
    }

    if (!str_cmp(command, "link")) {
        struct exit_data *pExit;
        struct room_index_data *toRoom;

        if (arg[0] == '\0' || !is_number(arg)) {
            send_to_char("Syntax:  [direction] link [vnum]\n\r", ch);
            return false;
        }

        value = parse_int(arg);

        if (!(toRoom = get_room_index(value))) {
            send_to_char("REdit:  Cannot link to non-existant room.\n\r", ch);
            return false;
        }

        if (!IS_BUILDER(ch, toRoom->area)) {
            send_to_char("REdit:  Cannot link to that area.\n\r", ch);
            return false;
        }

        if (toRoom->exit[rev_dir[door]]) {
            send_to_char("REdit:  Remote side's exit already exists.\n\r", ch);
            return false;
        }

        if (!room->exit[door])
            room->exit[door] = new_exit();

        room->exit[door]->u1.to_room = toRoom;
        room->exit[door]->orig_door = door;

        door = rev_dir[door];
        pExit = new_exit();
        pExit->u1.to_room = room;
        pExit->orig_door = door;
        toRoom->exit[door] = pExit;

        send_to_char("Two-way link established.\n\r", ch);
        return true;
    }

    if (!str_cmp(command, "dig")) {
        char buf[MAX_STRING_LENGTH];

        if (arg[0] == '\0' || !is_number(arg)) {
            send_to_char("Syntax: [direction] dig <vnum>\n\r", ch);
            return false;
        }

        redit_create(ch, arg);
        sprintf(buf, "link %s", arg);
        change_exit(ch, buf, door);
        return true;
    }

    if (!str_cmp(command, "room")) {
        struct room_index_data *toRoom;

        if (arg[0] == '\0' || !is_number(arg)) {
            send_to_char("Syntax:  [direction] room [vnum]\n\r", ch);
            return false;
        }
        value = parse_int(arg);

        if (!(toRoom = get_room_index(value))) {
            send_to_char("REdit:  Cannot link to non-existant room.\n\r", ch);
            return false;
        }

        if (!room->exit[door])
            room->exit[door] = new_exit();

        room->exit[door]->u1.to_room = toRoom;
        room->exit[door]->orig_door = door;

        send_to_char("One-way link established.\n\r", ch);
        return true;
    }

    if (!str_cmp(command, "key")) {
        struct objectprototype *key;

        if (arg[0] == '\0' || !is_number(arg)) {
            send_to_char("Syntax:  [direction] key [vnum]\n\r", ch);
            return false;
        }

        if (!room->exit[door]) {
            send_to_char("Exit does not exist.\n\r", ch);
            return false;
        }

        value = parse_int(arg);

        if (!(key = objectprototype_getbyvnum(value))) {
            send_to_char("REdit:  Key doesn't exist.\n\r", ch);
            return false;
        }

        if (key->item_type != ITEM_KEY) {
            send_to_char("REdit:  Object is not a key.\n\r", ch);
            return false;
        }

        room->exit[door]->key = value;

        send_to_char("Exit key set.\n\r", ch);
        return true;
    }

    if (!str_cmp(command, "name")) {
        if (arg[0] == '\0') {
            send_to_char("Syntax:  [direction] name [string]\n\r", ch);
            send_to_char("         [direction] name none\n\r", ch);
            return false;
        }

        if (!room->exit[door]) {
            send_to_char("Exit does not exist.\n\r", ch);
            return false;
        }

        free_string(room->exit[door]->keyword);

        if (str_cmp(arg, "none"))
            room->exit[door]->keyword = str_dup(arg);
        else
            room->exit[door]->keyword = str_dup("");

        send_to_char("Exit name set.\n\r", ch);
        return true;
    }

    if (!str_prefix(command, "description")) {
        if (arg[0] == '\0') {
            if (!room->exit[door]) {
                send_to_char("Exit does not exist.\n\r", ch);
                return false;
            }

            string_append(ch, &room->exit[door]->description);
            return true;
        }

        send_to_char("Syntax:  [direction] desc\n\r", ch);
        return false;
    }

    return false;
}
コード例 #18
0
/*****************************************************************************
 *	do_redit
 *
 *	entry level function into the room editor
 *****************************************************************************/
void do_redit(struct char_data *ch, const char *argument)
{
    struct room_index_data *room;
    char arg[MAX_STRING_LENGTH];

    if (IS_NPC(ch))
        return;

    argument = one_argument(argument, arg);
    room = ch->in_room;

    if (!str_cmp(arg, "reset")) { /* redit reset */
        if (!IS_BUILDER(ch, room->area)) {
            send_to_char("Insufficient security to edit rooms.\n\r", ch);
            return;
        }

        reset_room(room);
        send_to_char("Room reset.\n\r", ch);

        return;
    } else {
        if (!str_cmp(arg, "create")) {   /* redit create <vnum> */
            if (argument[0] == '\0' || parse_int(argument) == 0) {
                send_to_char("Syntax:  edit room create [vnum]\n\r", ch);
                return;
            }

            if (redit_create(ch, argument)) {
                ch->desc->editor = ED_ROOM;
                char_from_room(ch);
                char_to_room(ch, ch->desc->ed_data);
                SET_BIT(((struct room_index_data *)ch->desc->ed_data)->area->area_flags, AREA_CHANGED);
            }

            return;
        } else if (!str_cmp(arg, "clone")) {
            if (argument[0] == '\0') {
                send_to_char("Syntax:  edit room clone [new vnum] [existing vnum]\n\r", ch);
                return;
            }

            if (redit_create(ch, argument)) {
                argument = one_argument(argument, arg);
                ch->desc->editor = ED_ROOM;

                char_from_room(ch);
                char_to_room(ch, ch->desc->ed_data);

                SET_BIT(((struct room_index_data *)ch->desc->ed_data)->area->area_flags, AREA_CHANGED);
                redit_clone(ch, argument);
            }

            return;
        } else if (!IS_NULLSTR(arg)) {  /* redit <vnum> */
            room = get_room_index(parse_int(arg));

            if (!room) {
                send_to_char("REdit : room does not exist.\n\r", ch);
                return;
            }

            if (!IS_BUILDER(ch, room->area)) {
                send_to_char("REdit : insufficient security to edit rooms.\n\r", ch);
                return;
            }

            char_from_room(ch);
            char_to_room(ch, room);
        }
    }

    if (!IS_BUILDER(ch, room->area)) {
        send_to_char("REdit : Insufficient security to edit rooms.\n\r", ch);
        return;
    }

    ch->desc->ed_data = (void *)room;
    ch->desc->editor = ED_ROOM;

    return;
}
コード例 #19
0
ファイル: olc.c プロジェクト: MUDOmnibus/TinyROM
/* Entry point for editing obj_index_data. */
void do_oedit (CHAR_DATA * ch, char *argument)
{
    OBJ_INDEX_DATA *pObj;
    AREA_DATA *pArea;
    char arg1[MAX_STRING_LENGTH];
    int value;

    if (IS_NPC (ch))
        return;

    argument = one_argument (argument, arg1);

    if (is_number (arg1))
    {
        value = atoi (arg1);
        if (!(pObj = get_obj_index (value)))
        {
            send_to_char ("OEdit:  That vnum does not exist.\n\r", ch);
            return;
        }

        if (!IS_BUILDER (ch, pObj->area))
        {
            send_to_char ("Insufficient security to modify objects.\n\r", ch);
            return;
        }

        ch->desc->pEdit = (void *) pObj;
        ch->desc->editor = ED_OBJECT;
        return;
    }
    else
    {
        if (!str_cmp (arg1, "create"))
        {
            value = atoi (argument);
            if (argument[0] == '\0' || value == 0)
            {
                send_to_char ("Syntax:  edit object create [vnum]\n\r", ch);
                return;
            }

            pArea = get_vnum_area (value);

            if (!pArea)
            {
                send_to_char
                    ("OEdit:  That vnum is not assigned an area.\n\r", ch);
                return;
            }

            if (!IS_BUILDER (ch, pArea))
            {
                send_to_char ("Insufficient security to modify objects.\n\r",
                              ch);
                return;
            }

            if (oedit_create (ch, argument))
            {
                SET_BIT (pArea->area_flags, AREA_CHANGED);
                ch->desc->editor = ED_OBJECT;
            }
            return;
        }
    }

    send_to_char ("OEdit:  There is no default object to edit.\n\r", ch);
    return;
}
コード例 #20
0
ファイル: olc_mpcode.c プロジェクト: KillerMud/Source
void mpedit( CHAR_DATA *ch, char *argument )
{
    PROG_CODE * pMcode;
    char arg[ MAX_INPUT_LENGTH ];
    char command[ MAX_INPUT_LENGTH ];
    char log_buf[ MAX_STRING_LENGTH ];
    int cmd;
    AREA_DATA *ad;

    smash_tilde( argument );
    strcpy( arg, argument );
    argument = one_argument( argument, command );

    EDIT_MPCODE( ch, pMcode );

    if ( pMcode )
    {
        ad = pMcode->area;

        if ( ad == NULL )  /* ? */
        {
            edit_done( ch );
            return ;
        }

        if ( !IS_BUILDER( ch, ad ) )
        {
            send_to_char( "MPEdit: Insufficient security to modify code.\n\r", ch );
            edit_done( ch );
            return ;
        }
    }

    if ( command[ 0 ] == '\0' )
    {
        mpedit_show( ch, argument );
        return ;
    }

    if ( !str_cmp( command, "done" ) )
    {
        edit_done( ch );
        return ;
    }

    for ( cmd = 0; mpedit_table[ cmd ].name != NULL; cmd++ )
    {
        if ( !str_prefix( command, mpedit_table[ cmd ].name ) )
        {
            if ( ( *mpedit_table[ cmd ].olc_fun ) ( ch, argument ) && pMcode )
            {
                if ( ( ad = pMcode->area ) != NULL )
                {
                    SET_BIT( ad->area_flags, AREA_CHANGED );
                }
                append_file_format_daily( ch, BUILD_LOG_FILE, "-> mpedit %s: %s", pMcode ? pMcode->name: "0", arg );
            }
            return ;
        }
    }

    interpret( ch, arg );

    return ;
}
コード例 #21
0
ファイル: olc.c プロジェクト: MUDOmnibus/TinyROM
/* Entry point for editing mob_index_data. */
void do_medit (CHAR_DATA * ch, char *argument)
{
    MOB_INDEX_DATA *pMob;
    AREA_DATA *pArea;
    int value;
    char arg1[MAX_STRING_LENGTH];

    argument = one_argument (argument, arg1);

    if (IS_NPC (ch))
        return;

    if (is_number (arg1))
    {
        value = atoi (arg1);
        if (!(pMob = get_mob_index (value)))
        {
            send_to_char ("MEdit:  That vnum does not exist.\n\r", ch);
            return;
        }

        if (!IS_BUILDER (ch, pMob->area))
        {
            send_to_char ("Insufficient security to modify mobs.\n\r", ch);
            return;
        }

        ch->desc->pEdit = (void *) pMob;
        ch->desc->editor = ED_MOBILE;
        return;
    }
    else
    {
        if (!str_cmp (arg1, "create"))
        {
            value = atoi (argument);
            if (arg1[0] == '\0' || value == 0)
            {
                send_to_char ("Syntax:  edit mobile create [vnum]\n\r", ch);
                return;
            }

            pArea = get_vnum_area (value);

            if (!pArea)
            {
                send_to_char
                    ("OEdit:  That vnum is not assigned an area.\n\r", ch);
                return;
            }

            if (!IS_BUILDER (ch, pArea))
            {
                send_to_char ("Insufficient security to modify mobs.\n\r",
                              ch);
                return;
            }

            if (medit_create (ch, argument))
            {
                SET_BIT (pArea->area_flags, AREA_CHANGED);
                ch->desc->editor = ED_MOBILE;
            }
            return;
        }
    }

    send_to_char ("MEdit:  There is no default mobile to edit.\n\r", ch);
    return;
}