Here is a copy of my stun. I have borrowed enough code from the snippet
page that I might as well donate some back
-Ryan
ACMD(do_stun)
{
struct char_data *vict;
struct affected_type af;
int diff_lev, percent, prob;
int chance;
one_argument(argument, arg);
log ("do_stun\r\n");
if (!GET_SKILL(ch, SKILL_STUN) ) {
send_to_char("You do not know this skill.\r\n", ch);
} else if (!*arg) {
send_to_char("Stun who?\r\n", ch);
} else if (!(vict = get_char_room_vis(ch, arg))) {
send_to_char("They don't seem to be here.\r\n", ch);
} else if ( ! IS_NPC(vict) ){
send_to_char("You can not attack another PC.\r\n", ch);
} else if (vict == ch) {
send_to_char("You Stun yourself...OUCH!.\r\n", ch);
act("$n tries to stun $mself, and says OUCH!", FALSE, ch, 0, vict, TO_ROOM);
} else if (IS_AFFECTED(ch, AFF_CHARM) && (ch->master == vict)) {
act("$N is just such a good friend, you simply can't stun $M.", FALSE, ch,
0,
vict, TO_CHAR);
} else if (ROOM_FLAGGED(ch->in_room, ROOM_PEACEFUL)) {
send_to_char("This room just has such a peaceful, easy feeling...\r\n", ch);
} else if ( ! (GET_MOVE(ch) >= 10) ) {
send_to_char("I am sorry, but you seem to tired to try to do that.\r\n",
ch);
} else {
percent = number(1, 101); /* 101% is a complete failure */
prob = GET_SKILL(ch, SKILL_STUN);
if (MOB_FLAGGED(vict, MOB_NOSTUN))
percent = 101;
if ( percent < prob ) {
GET_MOVE(ch) -= 10;
diff_lev = GET_LEVEL(vict) - GET_LEVEL(ch);
chance = 33 - (diff_lev ) ;
if (chance > 100)
chance = 100;
chance -= GET_DEX(vict);
percent = number(1, 101);
if ( chance > percent ) {
af.bitvector = AFF_STUN;
af.duration = 0;
affect_to_char(vict, &af);
stop_fighting(vict);
GET_POS(vict) = POS_STUNNED;
act("You stun $N.", FALSE, ch, 0, vict, TO_CHAR);
act("$n stuns $N.", TRUE, ch, 0, vict, TO_NOTVICT);
act("$n stuns you.", TRUE, ch, 0, ch->master, TO_VICT);
} else {
send_to_char("You Fail to stun.\r\n", ch);
if ( number(1,101) <= 1) {
if (GET_LEVEL(ch) < LVL_IMMORT) {
send_to_char("Oops, You stuned your self.\r\n", ch);
af.bitvector = AFF_STUN;
af.duration = 0;
affect_to_char(ch, &af);
GET_POS(ch) = POS_STUNNED;
}
}
}
} else {
send_to_char("You Fail to stun him.\r\n", ch);
if ( number(1,101) <= 1) {
if (GET_LEVEL(ch) < LVL_IMMORT) {
send_to_char("Oops, You stuned your self.\r\n", ch);
af.bitvector = AFF_STUN;
af.duration = 0;
affect_to_char(ch, &af);
GET_POS(ch) = POS_STUNNED;
}
}
}
hit(ch, vict, TYPE_UNDEFINED);
WAIT_STATE(ch, PULSE_VIOLENCE * 4);
}
}
On 05-Jun-98 Anthony Rye wrote:
> ACMD (do_stun)
---------------------------------------------------------------
- Ryan Stapleton | raal@penn.com -
- 225 West Main Street | ryans@cis.clarion.edu -
- Reynoldsville, Pa | ryan@flower.aud.temple.edu -
- 15851 | -
- Amateur Radio Call: KA3WUT | http://users.penn.com/~raal -
---------------------------------------------------------------
+------------------------------------------------------------+
| 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