I have to apologize ahead of time; I didn't test this before trying it out. Once I did, I found that Parry and Dodge were not working properly. Anyways, I put the skill checks in fight.c in the wrong spots; here is where they (hopefully) should go. I've tested this, and it seems to work just fine.
Code:
if (diceroll == 20 || !AWAKE(victim))
dam = TRUE;
else if (diceroll == 1)
dam = FALSE;
else
dam = (calc_thaco - diceroll <= victim_ac);
+ if (dam) {
+ if (!IS_NPC(victim) && GET_SKILL(victim, SKILL_PARRY) > 0) {
+ prob = rand_number(1, 101);
+ if (prob < GET_SKILL(victim, SKILL_PARRY)) {
+ chance = rand_number(1, 100);
+ if (chance <= 15) {
+ send_to_char(ch, "%s parries your blow!\r\n", GET_NAME(victim));
+ send_to_char(victim, "You parry %s's attack!\r\n", GET_NAME(ch));
+ dam = FALSE;
+ }
+ }
+ if (GET_SKILL(ch, SKILL_PARRY) > 0) chance = rand_number(1, 100); else chance = 0;
+ if ((chance <= 10) && (GET_SKILL(ch, SKILL_PARRY) < 80) && (GET_SKILL(ch, SKILL_PARRY) > 0)) {
+ send_to_char(ch, "\tGYour parrying skill has gone up!\tn\r\n");
+ GET_SKILL(ch, SKILL_PARRY) += 1;
+ }
+ }
+ else if (!IS_NPC(victim) && GET_SKILL(victim, SKILL_DODGE) > 0) {
+ prob = rand_number(1, 101);
+ if (prob < GET_SKILL(victim, SKILL_DODGE)) {
+ chance = rand_number(1, 100);
+ if (chance <= 15) {
+ send_to_char(ch, "%s dodges your attack!\r\n", GET_NAME(victim));
+ send_to_char(victim, "You dodge %s's attack!\r\n", GET_NAME(ch));
+ dam = FALSE;
+ }
+ }
+ if (GET_SKILL(ch, SKILL_DODGE) > 0) chance = rand_number(1, 100); else chance = 0;
+ if ((chance <= 10) && (GET_SKILL(ch, SKILL_DODGE) < 80) && (GET_SKILL(ch, SKILL_DODGE) > 0)) {
+ send_to_char(ch, "\tGYour dodging skill has gone up!\tn\r\n");
+ GET_SKILL(ch, SKILL_DODGE) += 1;
+ }
+ }
+ }
if (!dam)
/* the attacker missed the victim */
damage(ch, victim, 0, type == SKILL_BACKSTAB ? SKILL_BACKSTAB : w_type);
else {