Demond De Inosantos wrote:
>
> I want to add the dig command to my mud I'm running OasisOlc and
> have only made one bug fix(the zedit new one) and want to add do_dig to
> my commands to cut down the building new rooms time. If you can help
> please let me know I'd realy like to know how to fix the do_dig on Oasis
>
> Thanx,
> Demond
here is my (slightly modded) rdig function (same thing just that I
also have the dig and bury stuff, so renamed it)
ACMD(do_rdig)
{
/* Only works if you have Oasis OLC */
extern void redit_save_internally(struct descriptor_data *d);
extern void olc_add_to_save_list(int zone, byte type);
extern const int rev_dir[];
int real_zone(int number);
char buf2[10];
char buf3[10];
char buf[80];
int iroom = 0, rroom = 0;
int dir = 0;
int new = 0;
/* struct room_data *room; */
two_arguments(argument, buf2, buf3);
/* buf2 is the direction, buf3 is the room */
iroom = atoi(buf3);
rroom = real_room(iroom);
if (!*buf2) {
send_to_char("Format: rdig <dir> <room number>\r\n", ch);
return;
} else if (!*buf3) {
send_to_char("Format: rdig <dir> <room number>\r\n", ch);
return;
} else if (!isdigit(*buf3)) {
send_to_char("Format: rdig <dir> <room number>\r\n", ch);
return;
}
if (real_zone(iroom) == -1) {
send_to_char("There is no zone for that number!\r\n", ch);
return;
}
CREATE(ch->desc->olc, struct olc_data, 1);
if (rroom <= 0) {
CREATE(OLC_ROOM(ch->desc), struct room_data, 1);
OLC_ROOM(ch->desc)->name = strdup("An unfinished room");
OLC_ROOM(ch->desc)->description = strdup("An unfinished room\n");
OLC_NUM(ch->desc) = iroom;
new = 1;
}
/* Main stuff */
switch (*buf2) {
case 'n':
case 'N':
dir = NORTH;
break;
case 'e':
case 'E':
dir = EAST;
break;
case 's':
case 'S':
dir = SOUTH;
break;
case 'w':
case 'W':
dir = WEST;
break;
case 'u':
case 'U':
dir = UP;
break;
case 'd':
case 'D':
dir = DOWN;
break;
}
if (world[ch->in_room].dir_option[dir])
free(world[ch->in_room].dir_option[dir]);
CREATE(world[ch->in_room].dir_option[dir], struct
room_direction_data,1);
world[ch->in_room].dir_option[dir]->general_description = NULL;
world[ch->in_room].dir_option[dir]->keyword = NULL;
world[ch->in_room].dir_option[dir]->to_room = iroom;
if (!new) {
OLC_ZNUM(ch->desc) = world[rroom].zone;
if (world[rroom].dir_option[rev_dir[dir]])
free (world[rroom].dir_option[rev_dir[dir]]);
CREATE(world[rroom].dir_option[rev_dir[dir]], struct
room_direction_data,1);
world[rroom].dir_option[rev_dir[dir]]->general_description = NULL;
world[rroom].dir_option[rev_dir[dir]]->keyword = NULL;
world[rroom].dir_option[rev_dir[dir]]->to_room = ch->in_room;
} else {
OLC_ZNUM(ch->desc) = real_zone(iroom);
CREATE(OLC_ROOM(ch->desc)->dir_option[rev_dir[dir]], struct
room_direction_data, 1);
OLC_ROOM(ch->desc)->dir_option[rev_dir[dir]]->general_description =
NULL;
OLC_ROOM(ch->desc)->dir_option[rev_dir[dir]]->keyword = NULL;
OLC_ROOM(ch->desc)->dir_option[rev_dir[dir]]->to_room = ch->in_room;
}
/* Only works if you have Oasis OLC */
if (new)
redit_save_internally(ch->desc);
world[ch->in_room].dir_option[dir]->to_room = real_room(iroom);
/* save world data for destination room */
olc_add_to_save_list((iroom/100), OLC_SAVE_ROOM);
/* save world data for starting room */
olc_add_to_save_list(( world[ch->in_room].number)/100 , OLC_SAVE_ROOM);
free(OLC_ROOM(ch->desc));
free(ch->desc->olc);
sprintf(buf, "You make an exit %s from room %d to room %d.\r\n", buf2,
world[ch->in_room].number, iroom);
send_to_char(buf, ch);
}
RS
+------------------------------------------------------------+
| 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