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