mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
Implemented ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS
Use correct locale in SMSG_RESURRECT_REQUEST
This commit is contained in:
parent
427fca695e
commit
e69e5d8336
3 changed files with 30 additions and 3 deletions
|
|
@ -26,6 +26,7 @@
|
||||||
#include "Database/DatabaseEnv.h"
|
#include "Database/DatabaseEnv.h"
|
||||||
#include "GameEvent.h"
|
#include "GameEvent.h"
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
|
#include "SpellMgr.h"
|
||||||
|
|
||||||
const CriteriaCastSpellRequirement AchievementMgr::criteriaCastSpellRequirements[CRITERIA_CAST_SPELL_REQ_COUNT] =
|
const CriteriaCastSpellRequirement AchievementMgr::criteriaCastSpellRequirements[CRITERIA_CAST_SPELL_REQ_COUNT] =
|
||||||
{
|
{
|
||||||
|
|
@ -396,6 +397,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
||||||
SetCriteriaProgress(achievementCriteria, 1, true);
|
SetCriteriaProgress(achievementCriteria, 1, true);
|
||||||
break;
|
break;
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2:
|
case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2:
|
||||||
|
{
|
||||||
if (!miscvalue1 || miscvalue1 != achievementCriteria->cast_spell.spellID)
|
if (!miscvalue1 || miscvalue1 != achievementCriteria->cast_spell.spellID)
|
||||||
continue;
|
continue;
|
||||||
// those requirements couldn't be found in the dbc
|
// those requirements couldn't be found in the dbc
|
||||||
|
|
@ -426,6 +428,26 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui
|
||||||
}
|
}
|
||||||
SetCriteriaProgress(achievementCriteria, 1, true);
|
SetCriteriaProgress(achievementCriteria, 1, true);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS:
|
||||||
|
{
|
||||||
|
uint32 spellCount = 0;
|
||||||
|
for (PlayerSpellMap::const_iterator spellIter = GetPlayer()->GetSpellMap().begin();
|
||||||
|
spellIter != GetPlayer()->GetSpellMap().end();
|
||||||
|
spellIter++)
|
||||||
|
{
|
||||||
|
for(SkillLineAbilityMap::const_iterator skillIter = spellmgr.GetBeginSkillLineAbilityMap(spellIter->first);
|
||||||
|
skillIter != spellmgr.GetEndSkillLineAbilityMap(spellIter->first);
|
||||||
|
skillIter++)
|
||||||
|
{
|
||||||
|
if(skillIter->second->skillId == achievementCriteria->learn_skilline_spell.skillLine)
|
||||||
|
spellCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SetCriteriaProgress(achievementCriteria, spellCount);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if(IsCompletedCriteria(achievementCriteria))
|
if(IsCompletedCriteria(achievementCriteria))
|
||||||
CompletedCriteria(achievementCriteria);
|
CompletedCriteria(achievementCriteria);
|
||||||
|
|
@ -511,6 +533,8 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL:
|
case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL:
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2:
|
case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2:
|
||||||
return progress->counter >= achievementCriteria->cast_spell.castCount;
|
return progress->counter >= achievementCriteria->cast_spell.castCount;
|
||||||
|
case ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS:
|
||||||
|
return progress->counter >= achievementCriteria->learn_skilline_spell.spellCount;
|
||||||
|
|
||||||
// handle all statistic-only criteria here
|
// handle all statistic-only criteria here
|
||||||
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND:
|
case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND:
|
||||||
|
|
|
||||||
|
|
@ -2782,7 +2782,10 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading,
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!loading)
|
if(!loading)
|
||||||
|
{
|
||||||
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL);
|
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL);
|
||||||
|
GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS);
|
||||||
|
}
|
||||||
|
|
||||||
// return true (for send learn packet) only if spell active (in case ranked spells) and not replace old spell
|
// return true (for send learn packet) only if spell active (in case ranked spells) and not replace old spell
|
||||||
return active && !disabled && !superceded_old;
|
return active && !disabled && !superceded_old;
|
||||||
|
|
|
||||||
|
|
@ -3009,16 +3009,16 @@ void Spell::SendResurrectRequest(Player* target)
|
||||||
// Both players and NPCs can resurrect using spells - have a look at creature 28487 for example
|
// Both players and NPCs can resurrect using spells - have a look at creature 28487 for example
|
||||||
// However, the packet structure differs slightly
|
// However, the packet structure differs slightly
|
||||||
|
|
||||||
const char* sentName = m_caster->GetTypeId()==TYPEID_PLAYER ?"":m_caster->GetName();
|
const char* sentName = m_caster->GetTypeId()==TYPEID_PLAYER ?"":m_caster->GetNameForLocaleIdx(target->GetSession()->GetSessionDbLocaleIndex());
|
||||||
|
|
||||||
WorldPacket data(SMSG_RESURRECT_REQUEST, (8+4+strlen(sentName)+1+1+4));
|
WorldPacket data(SMSG_RESURRECT_REQUEST, (8+4+strlen(sentName)+1+1+1));
|
||||||
data << uint64(m_caster->GetGUID());
|
data << uint64(m_caster->GetGUID());
|
||||||
data << uint32(strlen(sentName)+1);
|
data << uint32(strlen(sentName)+1);
|
||||||
|
|
||||||
data << sentName;
|
data << sentName;
|
||||||
data << uint8(0);
|
data << uint8(0);
|
||||||
|
|
||||||
data << uint32(m_caster->GetTypeId()==TYPEID_PLAYER ?0:1);
|
data << uint8(m_caster->GetTypeId()==TYPEID_PLAYER ?0:1);
|
||||||
target->GetSession()->SendPacket(&data);
|
target->GetSession()->SendPacket(&data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue