diff --git a/common/ruletypes.h b/common/ruletypes.h index 6b5626feb..97b428fce 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -599,6 +599,8 @@ RULE_INT(Combat, ClassicTripleAttackChanceMonk, 100, "Innate Chance for Monk to RULE_INT(Combat, ClassicTripleAttackChanceBerserker, 100, "Innate Chance for Berserker to Triple Attack after a Double Attack (200 = 20%). DEFAULT: 100") RULE_INT(Combat, ClassicTripleAttackChanceRanger, 100, "Innate Chance for Ranger to Triple Attack after a Double Attack (200 = 20%). DEFAULT: 100") RULE_INT(Combat, StunChance, 12, "Percent chance that client will be stunned when mob is behind player. DEFAULT: 12") +RULE_INT(Combat, StunDuration, 2000, "Duration of stuns in ms. DEFAULT: 2000") +RULE_BOOL(Combat, ClientStunMessage, false, "Client stunning NPC produces message. DEFAULT false") RULE_BOOL(Combat, BashTwoHanderUseShoulderAC, false, "Enable to use shoulder AC for bash calculations when two hander is equipped. Unproven if accurate DEFAULT: false") RULE_REAL(Combat, BashACBonusDivisor, 25.0, "this divides the AC value contribution to bash damage, lower to increase damage") RULE_CATEGORY_END() diff --git a/zone/attack.cpp b/zone/attack.cpp index 8cc7013c2..520e6226e 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -4379,7 +4379,15 @@ void Mob::CommonDamage(Mob* attacker, int64 &damage, const uint16 spell_id, cons if (zone->random.Int(0, 100) >= stun_resist) { // did stun // nothing else to check! - Stun(2000); // straight 2 seconds every time + Stun(RuleI(Combat, StunDuration)); + if (RuleB(Combat, ClientStunMessage) && attacker->IsClient()) { + if (attacker) { + entity_list.MessageClose(this, true, 500, Chat::Emote, "%s is stunned after being bashed by %s.", GetCleanName(), attacker->GetCleanName()); + } + else { + entity_list.MessageClose(this, true, 500, Chat::Emote, "%s is stunned by a bash to the head.", GetCleanName()); + } + } } else { // stun resist passed! @@ -5463,7 +5471,7 @@ void Mob::TryCriticalHit(Mob *defender, DamageHitInfo &hit, ExtraAttackOptions * // staggers message. if (defender->GetLevel() <= 55 && !defender->GetSpecialAbility(UNSTUNABLE)) { defender->Emote("staggers."); - defender->Stun(2000); + defender->Stun(RuleI(Combat, StunDuration)); } return; }