diff options
-rwxr-xr-x | src/server/game/DataStores/DBCStructure.h | 6 | ||||
-rwxr-xr-x | src/server/game/DataStores/DBCfmt.h | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/GameObject/GameObject.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 11 |
4 files changed, 13 insertions, 8 deletions
diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index 20eab098add..f57724fe58b 100755 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -1677,9 +1677,9 @@ struct SpellFocusObjectEntry struct SpellRadiusEntry { uint32 ID; - float radiusMin; - //uint32 Unk //always 0 - float radiusMax; + float RadiusMin; + float RadiusPerLevel; + float RadiusMax; }; struct SpellRangeEntry diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h index 0fe82ea3311..bb671d4dd72 100755 --- a/src/server/game/DataStores/DBCfmt.h +++ b/src/server/game/DataStores/DBCfmt.h @@ -106,7 +106,7 @@ const std::string CustomSpellEntryIndex = "Id"; char const SpellFocusObjectfmt[]="nxxxxxxxxxxxxxxxxx"; char const SpellItemEnchantmentfmt[]="nxiiiiiixxxiiissssssssssssssssxiiiiiii"; char const SpellItemEnchantmentConditionfmt[]="nbbbbbxxxxxbbbbbbbbbbiiiiiXXXXX"; -char const SpellRadiusfmt[]="nfxf"; +char const SpellRadiusfmt[]="nfff"; char const SpellRangefmt[]="nffffixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; char const SpellRuneCostfmt[]="niiii"; char const SpellShapeshiftfmt[]="nxxxxxxxxxxxxxxxxxxiixiiixxiiiiiiii"; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 214df2672cb..bf27015e8e3 100755 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1698,7 +1698,7 @@ void GameObject::CastSpell(Unit* target, uint32 spellId) { trigger->setFaction(owner->getFaction()); // needed for GO casts for proper target validation checks - trigger->SetUInt64Value(UNIT_FIELD_SUMMONEDBY, owner->GetGUID()); + trigger->SetOwnerGUID(owner->GetGUID()); trigger->CastSpell(target ? target : trigger, spellInfo, true, 0, 0, owner->GetGUID()); } else diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index be4c522956c..fcfa441455e 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -499,9 +499,14 @@ float SpellEffectInfo::CalcRadius(Unit* caster, Spell* spell) const if (!HasRadius()) return 0.0f; - float radius = RadiusEntry->radiusMax; - if (Player* modOwner = (caster ? caster->GetSpellModOwner() : NULL)) - modOwner->ApplySpellMod(_spellInfo->Id, SPELLMOD_RADIUS, radius, spell); + float radius = RadiusEntry->RadiusMin; + if (caster) + { + radius += RadiusEntry->RadiusPerLevel * caster->getLevel(); + radius = std::min(radius, RadiusEntry->RadiusMax); + if (Player* modOwner = caster->GetSpellModOwner()) + modOwner->ApplySpellMod(_spellInfo->Id, SPELLMOD_RADIUS, radius, spell); + } return radius; } |