On Wed, 11 Feb 1998, S. Mead wrote:
> This retreat skill allows a character to flee from battle in a
> direction of his choosing and without loss of exp. The main
> disadvantage this skill has over FLEE is that it has a WAIT_STATE, so
> you can't go ape with it like you can flee.
> One of the things I would like some help on is getting from the
> direction argument to the interger direction... the way I do it
> here(with a switch) is pure slop... is there a more efficent way? Also,
> if anyone has some helpful suggestions for cleaning this code up, please
> teach me.
>
> -Shaw-
> <Sometimes my toilet has floating errors too...>
>
>
> ACMD(do_retreat)
> {
> int prob, percent, dir = 0;
> one_argument(argument, arg);
>
> if (!FIGHTING(ch)) {
> send_to_char("You are not fighting!", ch);
> return;}
> if (!*arg){
> send_to_char("Retreat where?!?", ch);
> return;}
>
>
> switch (*arg) { /* This is sloppy... */
> case 'n': /* Should have checks for: */
> dir = 0; /* neswud and NESWUD and */
> break; /* north, east.... and */
> case 'e': /* NORTH, EAST.... and */
> dir = 1; /* North, East.... ect. */
> break; /* I'm sure there is an easier way. */
> case 's':
> dir = 2;
> break;
> case 'w':
> dir = 3;
> break;
> case 'u':
> dir = 4;
> break;
> case 'd':
> dir = 5;
> break;
> default:
> send_to_char("Retreat where?!?", ch);
> return;
> break;}
>
> percent = GET_SKILL(ch, SKILL_RETREAT);
> prob = number(0, 101);
>
> if (prob <= percent){
> if (CAN_GO(ch, dir) && !IS_SET(ROOM_FLAGS(EXIT(ch,dir)->to_room),
> ROOM_DEATH))
> {
> act("$n skillfully retreats from combat.", TRUE, ch, 0, 0,
> TO_ROOM);
> send_to_char("You skillfully retreat from combat.\r\n", ch);
> WAIT_STATE(ch, PULSE_VIOLENCE);
> improve_skill(ch, SKILL_RETREAT, 2);
> do_simple_move(ch, dir, TRUE);
> if (FIGHTING(FIGHTING(ch)) == ch)
> stop_fighting(FIGHTING(ch));
> stop_fighting(ch);
> } else {
> act("$n tries to retreat from combat but has no where to go!", TRUE,
> ch,
> 0, 0, TO_ROOM);
> send_to_char("You cannot retreat in that direction!", ch);
> return;
> }
> } else {
> send_to_char("You fail your attempt to retreat!\r\n", ch);
> WAIT_STATE(ch, PULSE_VIOLENCE);
> return;
> }
> }
If you're so worried about the slop, why not just add that stuff to
do_move, add a wait state under the clause of if fighting...that's just
off the top of my head, but it seems as though it should work, and be alot
less work.
+------------------------------------------------------------+
| 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