[CODE] SKILL_RETREAT

From: S. Mead (meadsh@ECE.ORST.EDU)
Date: 02/11/98


    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;
  }
}


     +------------------------------------------------------------+
     | 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