mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 09:31:30 +00:00
Update attack.cpp (#1892)
This commit is contained in:
parent
d460fb3db8
commit
898b1ea4d1
@ -5286,28 +5286,31 @@ bool Mob::TryRootFadeByDamage(int buffslot, Mob* attacker) {
|
|||||||
- Root break chance values obtained from live parses.
|
- Root break chance values obtained from live parses.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!attacker || !spellbonuses.Root[SBIndex::ROOT_EXISTS] || spellbonuses.Root[SBIndex::ROOT_BUFFSLOT] < 0)
|
if (!attacker || !spellbonuses.Root[SBIndex::ROOT_EXISTS] || spellbonuses.Root[SBIndex::ROOT_BUFFSLOT] < 0) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsDetrimentalSpell(buffs[spellbonuses.Root[SBIndex::ROOT_BUFFSLOT]].spellid) && spellbonuses.Root[SBIndex::ROOT_BUFFSLOT] != buffslot) {
|
||||||
|
|
||||||
if (IsDetrimentalSpell(spellbonuses.Root[SBIndex::ROOT_BUFFSLOT]) && spellbonuses.Root[SBIndex::ROOT_BUFFSLOT] != buffslot) {
|
|
||||||
int BreakChance = RuleI(Spells, RootBreakFromSpells);
|
int BreakChance = RuleI(Spells, RootBreakFromSpells);
|
||||||
|
|
||||||
BreakChance -= BreakChance * buffs[spellbonuses.Root[SBIndex::ROOT_BUFFSLOT]].RootBreakChance / 100;
|
BreakChance -= BreakChance * buffs[spellbonuses.Root[SBIndex::ROOT_BUFFSLOT]].RootBreakChance / 100;
|
||||||
int level_diff = attacker->GetLevel() - GetLevel();
|
int level_diff = attacker->GetLevel() - GetLevel();
|
||||||
|
|
||||||
//Use baseline if level difference <= 1 (ie. If target is (1) level less than you, or equal or greater level)
|
//Use baseline if level difference <= 1 (ie. If target is (1) level less than you, or equal or greater level)
|
||||||
|
|
||||||
if (level_diff == 2)
|
if (level_diff == 2) {
|
||||||
BreakChance = (BreakChance * 80) / 100; //Decrease by 20%;
|
BreakChance = (BreakChance * 80) / 100; //Decrease by 20%;
|
||||||
|
}
|
||||||
else if (level_diff >= 3 && level_diff <= 20)
|
else if (level_diff >= 3 && level_diff <= 20) {
|
||||||
BreakChance = (BreakChance * 60) / 100; //Decrease by 40%;
|
BreakChance = (BreakChance * 60) / 100; //Decrease by 40%;
|
||||||
|
}
|
||||||
else if (level_diff > 21)
|
else if (level_diff > 21) {
|
||||||
BreakChance = (BreakChance * 20) / 100; //Decrease by 80%;
|
BreakChance = (BreakChance * 20) / 100; //Decrease by 80%;
|
||||||
|
}
|
||||||
|
|
||||||
if (BreakChance < 1)
|
if (BreakChance < 1) {
|
||||||
BreakChance = 1;
|
BreakChance = 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (zone->random.Roll(BreakChance)) {
|
if (zone->random.Roll(BreakChance)) {
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user