Re: [CODE] SKILL_RETREAT

From: X Schiltz (joes@SKIPNET.COM)
Date: 02/11/98


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