From: "S. Mead" With Additions From: Andy Hubbard and George Greer Subject: SKILL_RETREAT 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- ACMD(do_retreat) { int prob, percent, dir = 0; int retreat_type; 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; } retreat_type = search_block(argument + 1, dirs, FALSE); if (retreat_type < 0 || !EXIT(ch, retreat_type) || EXIT(ch, retreat_type)->to_room == NOWHERE) { send_to_char("Retreat where?\r\n", ch); return; } 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; } }