/* * Here is a littl more complex checking for a Critical Strike, but it checks for misses * due to code placement and the such. Also allows for improvement and ability. * * Valnir - Legend of the Nobles * * telnet://play.legendofthenobles.com: 5400 * http://www.legendofthenobles.com * * Please feel free to contact me with questions, I will help where I can. * valnir@legendofthenobles.com * */ /* * Add in fight.c in 'bool damage' just above the call to dam_message. */ /* check for critical hit */ if ( dam >= 10 /* make sure it's a hit worth a critical */ && dam_type <= 3 /* NOT a backstab */ && dt >= TYPE_HIT ) /* only non-spell damage */ { if ( check_critical(ch,victim) ) dam *= 2; } /* * Put this in fight.c and declare it at the top. * bool check_critical args( ( CHAR_DATA *ch, CHAR_DATA *victim ) ); * * throw_damage is a fight.c local boolean used in our mud. Please remove the throw check * or modify to fit your mud. * */ bool check_critical(CHAR_DATA *ch, CHAR_DATA *victim) { OBJ_DATA *obj = NULL; int chance; /* check for damage from hand-held weapons */ if ( !throw_damage ) { obj = get_eq_char(ch,WEAR_WIELD); if ( ( ( obj == NULL && get_skill(ch,gsn_hand_to_hand) != 100 ) || ( obj != NULL && get_weapon_skill(ch,get_weapon_sn(ch)) < 90 ) ) ) return FALSE; } else { if ( get_skill(ch,gsn_throw) < 90 ) return FALSE; } /* mob even get a 1% chance of landing a Critical Hit */ if ( IS_NPC( ch ) ) chance = 1; else { if ( obj == NULL ) /* no weapon? 2% chance for hand to hand */ chance = 2; else /* increased chance when weapon skill is >= 90% */ chance = 10 - ( 100 - get_weapon_skill( ch, get_weapon_sn( ch ) ) ); if ( IS_IMMORTAL( ch ) ) /* Immortals?? 50% chance, just cause you rock */ chance = 50; } if ( number_range(0,100) > chance ) return FALSE; /* check to see if it was your lucky day */ /* Now, if it passed all the tests... */ if ( obj == NULL ) /* you personally strike */ { act("$n ^cCRITICALLY STRIKES^0 $N!",ch,NULL,victim,TO_NOTVICT); act("You ^cCRITICALLY STRIKE^0 $N!",ch,NULL,victim,TO_CHAR); } else /* your weapon strikes */ act("$p ^cCRITICALLY STRIKES^0 $n!",victim,obj,NULL,TO_NOTVICT); /* let the victim know they just got a beat down */ act("^cCRITICAL STRIKE!^0",ch,NULL,victim,TO_VICT); return TRUE; }