From ab4c9581ad608e1efc288a06dfa5db447e497129 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Tue, 18 Feb 2014 18:22:19 -0500 Subject: [PATCH] Fix NPC rampage to be more in-line with live New rules: RuleI: Combat, DefaultRampageTargets Set to 1 If the specatk db entry has no extra param it will use this RuleB: Combat, RampageHitsTargets Defaults to false If true, if number hit is still less than RampageTargets, try tank If you want the old behavior still set DefaultRampageTargets to 3 and RampageHitsTargets to true --- common/ruletypes.h | 2 ++ zone/MobAI.cpp | 7 +++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/common/ruletypes.h b/common/ruletypes.h index 26acc7434..7ca940722 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -333,6 +333,8 @@ RULE_REAL ( Combat, ArcheryBaseDamageBonus, 1) // % Modifier to Base Archery Dam RULE_REAL ( Combat, ArcheryNPCMultiplier, 1.0) // this is multiplied by the regular dmg to get the archery dmg RULE_BOOL ( Combat, AssistNoTargetSelf, true) //when assisting a target that does not have a target: true = target self, false = leave target as was before assist (false = live like) RULE_INT ( Combat, MaxRampageTargets, 3) //max number of people hit with rampage +RULE_INT ( Combat, DefaultRampageTargets, 1) // default number of people to hit with rampage +RULE_BOOL ( Combat, RampageHitsTarget, false) // rampage will hit the target if it still has targets left RULE_INT ( Combat, MaxFlurryHits, 2) //max number of extra hits from flurry RULE_INT ( Combat, MonkDamageTableBonus, 5) //% bonus monks get to their damage table calcs RULE_INT ( Combat, FlyingKickBonus, 25) //% Modifier that this skill gets to str and skill bonuses diff --git a/zone/MobAI.cpp b/zone/MobAI.cpp index dedd49f79..e65e357ad 100644 --- a/zone/MobAI.cpp +++ b/zone/MobAI.cpp @@ -2015,7 +2015,10 @@ bool Mob::Rampage(ExtraAttackOptions *opts) entity_list.MessageClose_StringID(this, true, 200, MT_PetFlurry, NPC_RAMPAGE, GetCleanName()); int rampage_targets = GetSpecialAbilityParam(SPECATK_RAMPAGE, 1); - rampage_targets = rampage_targets > 0 ? rampage_targets : RuleI(Combat, MaxRampageTargets); + if (rampage_targets == 0) // if set to 0 or not set in the DB + rampage_targets = RuleI(Combat, DefaultRampageTargets); + if (rampage_targets > RuleI(Combat, MaxRampageTargets)) + rampage_targets = RuleI(Combat, MaxRampageTargets); for (int i = 0; i < RampageArray.size(); i++) { if (index_hit >= rampage_targets) break; @@ -2031,7 +2034,7 @@ bool Mob::Rampage(ExtraAttackOptions *opts) } } - if (index_hit < rampage_targets) + if (RuleB(Combat, RampageHitsTarget) && index_hit < rampage_targets) Attack(GetTarget(), 13, false, false, false, opts); return true;