Hello all,
I was hoping that someone could help me out with something. I am
implementing fly on my mud. I have the spell put in, and have all the
movement stuff in. I decided the best option would be to make it so that
if a player doesn't have fly, he can't go up into a flying room. In
addition, if he doesn't have fly, and the room he is trying to enter
doesn't have a down exit, he can't enter(He can obviously tell that he is
walking off a cliff). Now if the char doesn't have fly, and the room he
is trying to enter does have a down exit, he will be able to enter, but
will then fall(this will allow builders to build fall traps into their
areas - I have removed deathtraps btw). I have everything implemented,
except I can't find the correct variable to imply whether the room the
character wishes to enter has a down exit or not.
Here is the function from bpl11 in do_simple_move(in
act.movement.c) that I am having the problem in:
if ( (SECT(EXIT(ch, dir)->to_room) == SECT_FLYING) &&
(!can_fly(ch)) ) {
if ( /* put check to see if there is a down exit in target room here */)
{
send_to_char("You need to be flying to go there.\r\n", ch);
return 0;
}
}
I know that the function works properly, but I just can't seem to
get right how to check to see if the target room(the room the player is
trying to enter) has a down exit. Things that I have tried are:
world[(EXIT(ch, dir)->to_room)].dir_option[DOWN]->to_room != -1
world[(EXIT(ch, dir)->to_room).dir_option[DOWN]->to_room].number != -1
world[(world[ch->in_room].dir_option[dir]->to_room)].dir_option[DOWN]->to_room
== -1
Every one of these crashes the mud as soon as a character(without
fly) enters the room. Flying characters work fine. If I replace the
check with a 1(for true), It won't let non-flying characters enter(as is
appropriate), and no problems. Can anyone help me on what exactly I am
looking for here is?
Going by other code in act.movement.c, I see;
char_to_room(ch, world[was_in].dir_option[dir]->to_room);
implying that world[roomnumber].dir_option[dir]->to_room will
give you the room number in the dir direction from roomnumber.
I also see that many examples of
EXIT(ch, dir)->to_room
giving the room number in the dir direction from chararacter, so I just
don't understand why I can't combine the two to form the first option I
tried above. Any help on this would be appreciated.
I am also wondering how other coders have implemented fly into
their mud. I see 4 possibilities:
1. No-flyers can't enter fly rooms period - this is the easy way out. It
doesn't allow for fall traps, but is player friendly.
2. non-flyers can enter fly rooms, but will fall if not flying. This is
very true to life, but forces coders to put a down exit in every fly room.
This could become very cumbersome.
3. non-flyers can enter fly room with down exits, but will fall(causing
some damage). non-flyers can't enter fly rooms without down exits. This
allows the builder to choose what he/she wants. It is a combination of
methods 1 and 2.
4. implement a new sector type that is flying-fall.
RECAP: How do I find if the room that a character is trying to enter has
a down exit?
Thanks in advance for any help,
Wicked
+------------------------------------------------------------+
| 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/15/00 PST