aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Spells/SpellEffects.cpp14
-rw-r--r--src/server/game/Spells/SpellInfo.cpp10
-rw-r--r--src/server/game/Spells/SpellInfo.h1
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;