*Try to fix some bugs about pet spells and talents.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-05-08 17:15:19 -05:00
parent 2007bbbd95
commit 80bec6788c
3 changed files with 16 additions and 20 deletions

View File

@@ -1800,6 +1800,7 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy
pet->SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, 1000);
pet->SetHealth(pet->GetMaxHealth());
pet->SetPower(POWER_MANA, pet->GetMaxPower(POWER_MANA));
pet->SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, time(NULL));
break;
}
@@ -1812,6 +1813,7 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy
break;
case SUMMON_PET:
pet->InitPetCreateSpells();
pet->InitTalentForLevel();
pet->SavePetToDB(PET_SAVE_AS_CURRENT);
PetSpellInitialize();
break;

View File

@@ -248,8 +248,7 @@ bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool
SetCanModifyStats(true);
InitStatsForLevel(petlevel);
uint32 savedhealth = fields[11].GetUInt32();
uint32 savedmana = fields[12].GetUInt32();
if(getPetType() == SUMMON_PET && !current) //all (?) summon pets come with full health when called, but not when they are current
{
SetHealth(GetMaxHealth());
@@ -257,6 +256,8 @@ bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool
}
else
{
uint32 savedhealth = fields[11].GetUInt32();
uint32 savedmana = fields[12].GetUInt32();
SetHealth(savedhealth > GetMaxHealth() ? GetMaxHealth() : savedhealth);
SetPower(POWER_MANA, savedmana > GetMaxPower(POWER_MANA) ? GetMaxPower(POWER_MANA) : savedmana);
}
@@ -266,7 +267,13 @@ bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool
m_resetTalentsCost = fields[17].GetUInt32();
m_resetTalentsTime = fields[18].GetUInt64();
InitTalentForLevel();
uint32 timediff = (time(NULL) - fields[16].GetUInt32());
_LoadAuras(timediff);
uint8 loadFlags = fields[21].GetUInt8();
owner->SetPetAtLoginFlag(loadFlags);
if (loadFlags & AT_LOAD_RESET_SPELLS)
{
CharacterDatabase.PExecute("UPDATE character_pet SET load_flags = load_flags & ~ %u WHERE id = '%u'",uint32(AT_LOAD_RESET_SPELLS),pet_number);
@@ -274,14 +281,14 @@ bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool
CharacterDatabase.PExecute("DELETE FROM pet_spell WHERE guid = '%u'",pet_number);
InitPetCreateSpells();
resetTalents(true);
learnLevelupSpells();
}
else
{
learnLevelupSpells();
LearnPetPassives();
_LoadSpells();
_LoadSpellCooldowns();
LearnPetPassives();
learnLevelupSpells();
CastPetAuras(current);
// Load action bar data
if (!is_temporary_summoned)
@@ -330,14 +337,6 @@ bool Pet::LoadPetFromDB( Player* owner, uint32 petentry, uint32 petnumber, bool
}
}
}
owner->SetPetAtLoginFlag(loadFlags);
//load spells/cooldowns/auras
// Spells should be loaded after pet is added to map, because in CheckCast is check on it
// since last save (in seconds)
uint32 timediff = (time(NULL) - fields[16].GetUInt32());
_LoadAuras(timediff);
CastPetAuras(current);
delete result;
sLog.outDebug("New Pet has guid %u", GetGUIDLow());
@@ -749,6 +748,7 @@ void Pet::GivePetLevel(uint32 level)
InitStatsForLevel(level);
InitTalentForLevel();
learnLevelupSpells();
}
bool Pet::CreateBaseAtCreature(Creature* creature)
@@ -1479,6 +1479,7 @@ void Pet::InitPetCreateSpells()
}
LearnPetPassives();
learnLevelupSpells();
CastPetAuras(false);
}

View File

@@ -4050,13 +4050,6 @@ void Spell::EffectSummonPet(uint32 i)
pet->SetUInt32Value(UNIT_CREATED_BY_SPELL, m_spellInfo->Id);
// this enables popup window (pet dismiss, cancel), hunter pet additional flags set later
if(m_caster->GetTypeId() == TYPEID_PLAYER)
pet->SetUInt32Value(UNIT_FIELD_FLAGS,UNIT_FLAG_PVP_ATTACKABLE);
pet->SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, time(NULL));
pet->InitTalentForLevel();
// generate new name for summon pet
std::string new_name=objmgr.GeneratePetName(petentry);
if(!new_name.empty())