diff options
author | megamage <none@none> | 2009-03-25 21:32:34 -0600 |
---|---|---|
committer | megamage <none@none> | 2009-03-25 21:32:34 -0600 |
commit | 1c2eab41105ab48670228c6cd1630ee6eab15815 (patch) | |
tree | e2ef0969ed3db851881c8db524695dd249ddaf5f /src/game/TemporarySummon.cpp | |
parent | ebf53a4820de1978a9ad8a6743255d72ae7592e0 (diff) |
*Fix a crash caused by pet.
*Make pet class derived from guardian class.
--HG--
branch : trunk
Diffstat (limited to 'src/game/TemporarySummon.cpp')
-rw-r--r-- | src/game/TemporarySummon.cpp | 43 |
1 files changed, 7 insertions, 36 deletions
diff --git a/src/game/TemporarySummon.cpp b/src/game/TemporarySummon.cpp index 8f3988994fb..06dfea5a25a 100644 --- a/src/game/TemporarySummon.cpp +++ b/src/game/TemporarySummon.cpp @@ -18,11 +18,11 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "TemporarySummon.h" #include "Log.h" #include "ObjectAccessor.h" #include "CreatureAI.h" #include "ObjectMgr.h" +#include "TemporarySummon.h" TempSummon::TempSummon(SummonPropertiesEntry const *properties, Unit *owner) : Creature(), m_type(TEMPSUMMON_MANUAL_DESPAWN), m_timer(0), m_lifetime(0) @@ -32,6 +32,11 @@ Creature(), m_type(TEMPSUMMON_MANUAL_DESPAWN), m_timer(0), m_lifetime(0) m_summonMask |= SUMMON_MASK_SUMMON; } +Unit* TempSummon::GetSummoner() const +{ + return m_summonerGUID ? ObjectAccessor::GetUnit(*this, m_summonerGUID) : NULL; +} + void TempSummon::Update( uint32 diff ) { if (m_deathState == DEAD) @@ -234,7 +239,7 @@ void TempSummon::SaveToDB() } Guardian::Guardian(SummonPropertiesEntry const *properties, Unit *owner) : TempSummon(properties, owner) -, m_owner(owner) +, m_owner(owner), m_bonusdamage(0) { m_summonMask |= SUMMON_MASK_GUARDIAN; InitCharmInfo(); @@ -257,40 +262,6 @@ void Guardian::InitSummon(uint32 duration) } } -void Guardian::InitStatsForLevel(uint32 petlevel) -{ - SetLevel(petlevel); - switch(GetEntry()) - { - case 1964: //force of nature - SetCreateHealth(30 + 30*petlevel); - SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel * 2.5f - (petlevel / 2))); - SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel * 2.5f + (petlevel / 2))); - break; - case 15352: //earth elemental 36213 - SetCreateHealth(100 + 120*petlevel); - SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4))); - SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4))); - break; - case 15438: //fire elemental - SetCreateHealth(40*petlevel); - SetCreateMana(28 + 10*petlevel); - SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel * 4 - petlevel)); - SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel * 4 + petlevel)); - break; - default: - SetCreateMana(28 + 10*petlevel); - SetCreateHealth(28 + 30*petlevel); - // FIXME: this is wrong formula, possible each guardian pet have own damage formula - //these formula may not be correct; however, it is designed to be close to what it should be - //this makes dps 0.5 of pets level - SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4))); - //damage range is then petlevel / 2 - SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, float(petlevel + (petlevel / 4))); - break; - } -} - void Guardian::RemoveFromWorld() { if(!IsInWorld()) |