diff options
author | megamage <none@none> | 2008-10-30 11:32:10 -0500 |
---|---|---|
committer | megamage <none@none> | 2008-10-30 11:32:10 -0500 |
commit | daec9868d96501b69cdcc6d37e4900874ae96cd7 (patch) | |
tree | d3872ba78e27fdd078f78d9b96cc5ec0a6e8b92e /src | |
parent | f2f73ff19f0a3eba028cf1b0a615988ef3218b3b (diff) |
[svn] Enable linked spells: cast spells/remove auras when spells casted/spells hitting/auras removed. Add new table "spell_linked_spell". Some illustrations provided in sql.
Let trigger creature cast AOE spells when summoned. Illustration provided in sql.
Let active creatures always visible if possible. (seems does not work for now, need to find out why)
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Object.cpp | 3 | ||||
-rw-r--r-- | src/game/Spell.cpp | 2 | ||||
-rw-r--r-- | src/game/Unit.cpp | 5 | ||||
-rw-r--r-- | src/game/World.cpp | 3 |
4 files changed, 11 insertions, 2 deletions
diff --git a/src/game/Object.cpp b/src/game/Object.cpp index 834c958e662..5a4d5d126f4 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -1482,6 +1482,9 @@ Creature* WorldObject::SummonCreature(uint32 id, float x, float y, float z, floa if(GetTypeId()==TYPEID_UNIT && ((Creature*)this)->AI()) ((Creature*)this)->AI()->JustSummoned(pCreature); + if(pCreature->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER && pCreature->m_spells[0]) + pCreature->CastSpell(pCreature, pCreature->m_spells[0], true, 0, 0, GetGUID()); + //return the creature therewith the summoner has access to it return pCreature; } diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 41d79e5203c..512c5533885 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -926,7 +926,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target) if(int32 spell_triggered = spellmgr.GetSpellLinked(m_spellInfo->Id, 1)) { if(spell_triggered > 0) - m_caster->CastSpell(unit, spell_triggered, true); + unit->CastSpell(unit, spell_triggered, true/*, 0, 0, m_caster->GetGUID()*/); else unit->RemoveAurasDueToSpell(-spell_triggered); } diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 2dae05b5411..3fed7edc22e 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -8571,7 +8571,10 @@ bool Unit::isVisibleForOrDetect(Unit const* u, bool detect, bool inVisibleList) else { // Units far than max visible distance for creature or not in our map are not visible too - if (!IsWithinDistInMap(u,World::GetMaxVisibleDistanceForCreature()+(inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f))) + // Active unit should always be visibile + if (!IsWithinDistInMap(u, u->isActive() + ? (MAX_VISIBILITY_DISTANCE - (inVisibleList ? 0.0f : World::GetVisibleUnitGreyDistance())) + : (World::GetMaxVisibleDistanceForCreature() + (inVisibleList ? World::GetVisibleUnitGreyDistance() : 0.0f)))) return false; } } diff --git a/src/game/World.cpp b/src/game/World.cpp index 45070615f4d..6a0da7fc90a 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -1096,6 +1096,9 @@ void World::SetInitialWorldSettings() sLog.outString( "Loading spell extra attributes...(TODO)" ); spellmgr.LoadSpellExtraAttr(); + sLog.outString( "Loading linked spells..." ); + spellmgr.LoadSpellLinked(); + sLog.outString( "Loading player Create Info & Level Stats..." ); objmgr.LoadPlayerInfo(); |