diff options
author | Ovahlord <dreadkiller@gmx.de> | 2024-01-29 10:04:03 +0100 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-01-29 10:35:51 +0100 |
commit | 3af5abffb7a10f2a4c88b6b382ba1f3639183bd2 (patch) | |
tree | b22ebc2941dc15eb605f9f2c92d1f1ddc2129d31 /src | |
parent | 693329aefc8b3b2a38a7fb1a18db47592f68daa5 (diff) |
Core/Spells: restore DieSides effect handling
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.h | 1 |
3 files changed, 18 insertions, 7 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index a36a12dbfa4..450bcfd7757 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -2286,7 +2286,7 @@ void Spell::EffectLearnSkill() if (!playerTarget) return; - if (damage < 0) + if (damage < 1) return; uint32 skillid = effectInfo->MiscValue; @@ -2299,12 +2299,12 @@ void Spell::EffectLearnSkill() return; uint16 skillval = std::max<uint16>(1, playerTarget->GetPureSkillValue(skillid)); - uint16 maxSkillVal = tier->GetValueForTierIndex(damage); + uint16 maxSkillVal = tier->GetValueForTierIndex(damage - 1); if (rcEntry->Flags & SKILL_FLAG_ALWAYS_MAX_VALUE) skillval = maxSkillVal; - playerTarget->SetSkill(skillid, (damage + 1), skillval, maxSkillVal); + playerTarget->SetSkill(skillid, damage, skillval, maxSkillVal); } void Spell::EffectPlayMovie() @@ -4550,11 +4550,11 @@ void Spell::EffectSkill() if (!playerTarget) return; - if (damage < 0) + if (damage < 1) return; uint32 skillid = effectInfo->MiscValue; - if (playerTarget->GetSkillStep(skillid) >= (damage + 1)) + if (playerTarget->GetSkillStep(skillid) >= damage) return; SkillRaceClassInfoEntry const* rcEntry = sDB2Manager.GetSkillRaceClassInfo(skillid, playerTarget->GetRace(), playerTarget->GetClass()); @@ -4566,12 +4566,12 @@ void Spell::EffectSkill() return; uint16 skillval = std::max<uint16>(1, playerTarget->GetPureSkillValue(skillid)); - uint16 maxSkillVal = tier->GetValueForTierIndex(damage); + uint16 maxSkillVal = tier->GetValueForTierIndex(damage - 1); if (rcEntry->Flags & SKILL_FLAG_ALWAYS_MAX_VALUE) skillval = maxSkillVal; - playerTarget->SetSkill(skillid, (damage + 1), skillval, maxSkillVal); + playerTarget->SetSkill(skillid, damage, skillval, maxSkillVal); } void Spell::EffectSpiritHeal() diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 45dba1d63e6..488e95d6a48 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -429,6 +429,7 @@ SpellEffectInfo::SpellEffectInfo(SpellInfo const* spellInfo, SpellEffectEntry co TargetARadiusEntry = sSpellRadiusStore.LookupEntry(_effect.EffectRadiusIndex[0]); TargetBRadiusEntry = sSpellRadiusStore.LookupEntry(_effect.EffectRadiusIndex[1]); ChainTargets = _effect.EffectChainTargets; + DieSides = _effect.EffectDieSides; ItemType = _effect.EffectItemType; TriggerSpell = _effect.EffectTriggerSpell; SpellClassMask = _effect.EffectSpellClassMask; @@ -513,6 +514,15 @@ int32 SpellEffectInfo::CalcValue(WorldObject const* caster /*= nullptr*/, int32 *variance = valueVariance; } + // roll in a range <1;EffectDieSides> as of patch 3.3.3 + if (DieSides) + { + if (DieSides == 1) + value += DieSides; + else + value += (DieSides >= 1) ? irand(1, DieSides) : irand(DieSides, 1); + } + // base amount modification based on spell lvl vs caster lvl if (Scaling.Coefficient != 0.0f) { diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index 1c968c94bc3..1e62b6d34b3 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -233,6 +233,7 @@ public: SpellRadiusEntry const* TargetARadiusEntry; SpellRadiusEntry const* TargetBRadiusEntry; int32 ChainTargets; + int32 DieSides; uint32 ItemType; uint32 TriggerSpell; flag128 SpellClassMask; |