db.c:setup_dir():
if (!get_line(fl, line))
{
fprintf(stderr, "Format error, %s\n", buf2);
exit(1);
}
if (sscanf(line, " %d %d %d ", t, t + 1, t + 2) != 3)
{
fprintf(stderr, "Format error, %s\n", buf2);
exit(1);
}
if (t[0] & EX_PICKPROOF)
SET_BIT(t[0],EX_ISDOOR);
if(t[0]&EX_LOCKED)
REMOVE_BIT(t[0],EX_LOCKED);
if(t[0]&EX_CLOSED)
REMOVE_BIT(t[0],EX_CLOSED);
structs.h:
#define EX_ISDOOR (1 << 0) /* Exit is a door */
#define EX_PICKPROOF (1 << 1) /* Lock can't be picked */
#define EX_CLOSED (1 << 2) /* The door is closed */
#define EX_LOCKED (1 << 3) /* The door is locked */
#define EX_SECRET (1 << 4) /* can't be seen at all */
redit.c:redit_save_to_disk {oasis olc}
/*. Figure out door flag .*/
temp_door_flag=room->dir_option[counter2]->exit_info;
if(temp_door_flag & EX_PICKPROOF)
SET_BIT(temp_door_flag,EX_ISDOOR);
if(temp_door_flag&EX_CLOSED)
REMOVE_BIT(temp_door_flag,EX_CLOSED);
if(temp_door_flag&EX_LOCKED)
REMOVE_BIT(temp_door_flag,EX_LOCKED);
redit.c:void redit_disp_exit_menu(struct descriptor_data * d)
{
char *buf=get_buffer(MAX_STRING_LENGTH);
char *buf2=get_buffer(MAX_STRING_LENGTH);
/* if exit doesn't exist, alloc/create it */
if(!OLC_EXIT(d))
CREATE(OLC_EXIT(d), struct room_direction_data, 1);
/* weird door handling! */
if (IS_SET(OLC_EXIT(d)->exit_info, EX_ISDOOR))
{
if (IS_SET(OLC_EXIT(d)->exit_info, EX_PICKPROOF))
strcpy(buf2, "Pickproof");
else
strcpy(buf2, "Is a door");
}
else
strcpy(buf2, "No door");
if (IS_SET(OLC_EXIT(d)->exit_info, EX_SECRET))
strcat(buf2," (secret)");
redit.c:redit_parse():
case REDIT_EXIT_DOORFLAGS:
vnumber = atoi(arg);
if ((vnumber < 0) || (vnumber > 3))
{
send_to_char("That's not a valid choice!\r\n",
d->character);
redit_disp_exit_flag_menu(d);
}
else
{
/* doors are a bit idiotic, don't you think? :) */
if (vnumber == 0)
OLC_EXIT(d)->exit_info = 0;
else if (vnumber == 1)
OLC_EXIT(d)->exit_info |= EX_ISDOOR;
else if (vnumber == 2)
OLC_EXIT(d)->exit_info |= EX_ISDOOR | EX_PICKPROOF;
else if(vnumber==3)
OLC_EXIT(d)->exit_info |= EX_SECRET;
/* jump out to menu */
redit_disp_exit_menu(d);
}
release_buffer(buf);
return;
these changes should do it. I am leaving it up to you to figure out
what got changed where, shouldn't be too hard. you will also need to
add the code for EX_SECRET to autoexit, do_simple_move(?), and do_look
so that the exit doesn't actually show up. (i would also suggest
showing non-secret door in autoexit as [east] just so the secret ones
slip by more easily)
--Angus
______________________________ Reply Separator _________________________________
Subject: Re: suggestion for the next patch level
Author: INTERNET:CIRCLE@post.queensu.ca at CSERVE
Date: 10/14/97 5:00 PM
>change the way exit flags work from being an int to a bit field. If you
>move EX_PICKPROOF to (1<<1) you will not have to change the world format
>at all. (pickproof will have to be coded so that it automatically inserts
>EX_ISADOOR for sanity's sake) I ran into this when adding a secret flag
>to the doors and was going to add a magic wall types that I wanted to have
>save to the doors. right now doors just work in a freaky way.
Already did that in my MUD, but I believe that is there for backwards Diku
compatibility. I would like to change it, if you can elaborate more on the
changes and they work fine with old and new formats, I'll make a change up
for it.
--
George Greer - Me@Null.net | Genius may have its limitations, but stupidity
http://www.van.ml.org/~greerga | is not thus handicapped. -- Elbert Hubbard
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/08/00 PST