mirror of
https://github.com/araxiaonline/pandaria_5.4.8.git
synced 2026-06-13 03:22:21 -04:00
@@ -4083,6 +4083,7 @@ void Guild::GiveXP(uint32 xp, Player* source)
|
||||
|
||||
WorldPacket data(SMSG_GUILD_XP_GAIN, 8);
|
||||
data << uint64(xp);
|
||||
|
||||
if (source)
|
||||
source->GetSession()->SendPacket(&data);
|
||||
|
||||
@@ -4097,33 +4098,40 @@ void Guild::GiveXP(uint32 xp, Player* source)
|
||||
while (GetExperience() >= sGuildMgr->GetXPForGuildLevel(GetLevel()) && GetLevel() < sWorld->getIntConfig(CONFIG_GUILD_MAX_LEVEL))
|
||||
{
|
||||
_experience -= sGuildMgr->GetXPForGuildLevel(GetLevel());
|
||||
++_level;
|
||||
|
||||
// Find all guild perks to learn
|
||||
std::vector<uint32> perksToLearn;
|
||||
for (uint32 i = 0; i < sGuildPerkSpellsStore.GetNumRows(); ++i)
|
||||
if (GuildPerkSpellsEntry const* entry = sGuildPerkSpellsStore.LookupEntry(i))
|
||||
if (entry->Level > oldLevel && entry->Level <= GetLevel())
|
||||
perksToLearn.push_back(entry->SpellId);
|
||||
|
||||
// Notify all online players that guild level changed and learn perks
|
||||
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
|
||||
{
|
||||
if (Player* player = itr->second->FindPlayer())
|
||||
{
|
||||
player->SetGuildLevel(GetLevel());
|
||||
for (size_t i = 0; i < perksToLearn.size(); ++i)
|
||||
player->LearnSpell(perksToLearn[i], true);
|
||||
}
|
||||
}
|
||||
|
||||
AddGuildNews(GUILD_NEWS_LEVEL_UP, 0, 0, _level);
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_GUILD_LEVEL, GetLevel(), 0, 0, NULL, source);
|
||||
|
||||
++oldLevel;
|
||||
LevelUp(oldLevel, source);
|
||||
}
|
||||
}
|
||||
|
||||
void Guild::LevelUp(uint32 oldLevel, Player *source)
|
||||
{
|
||||
++_level;
|
||||
|
||||
// Find all guild perks to learn
|
||||
std::vector<uint32> perksToLearn;
|
||||
|
||||
for (uint32 i = 0; i < sGuildPerkSpellsStore.GetNumRows(); ++i)
|
||||
if (GuildPerkSpellsEntry const* entry = sGuildPerkSpellsStore.LookupEntry(i))
|
||||
if (entry->Level > oldLevel && entry->Level <= GetLevel())
|
||||
perksToLearn.push_back(entry->SpellId);
|
||||
|
||||
// Notify all online players that guild level changed and learn perks
|
||||
for (Members::const_iterator itr = m_members.begin(); itr != m_members.end(); ++itr)
|
||||
{
|
||||
if (Player* player = itr->second->FindPlayer())
|
||||
{
|
||||
player->SetGuildLevel(GetLevel());
|
||||
|
||||
for (size_t i = 0; i < perksToLearn.size(); ++i)
|
||||
player->LearnSpell(perksToLearn[i], true);
|
||||
}
|
||||
}
|
||||
|
||||
AddGuildNews(GUILD_NEWS_LEVEL_UP, 0, 0, _level);
|
||||
UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_REACH_GUILD_LEVEL, GetLevel(), 0, 0, NULL, source);
|
||||
|
||||
++oldLevel;
|
||||
}
|
||||
|
||||
void Guild::SendGuildXP(WorldSession* session /* = NULL */) const
|
||||
{
|
||||
Member const* member = GetMember(session->GetGuidLow());
|
||||
|
||||
@@ -930,6 +930,8 @@ public:
|
||||
|
||||
uint64 GetBankMoney() const { return m_bankMoney; }
|
||||
|
||||
void LevelUp(uint32 oldLevel, Player *source);
|
||||
|
||||
protected:
|
||||
uint32 m_id;
|
||||
std::string m_name;
|
||||
|
||||
Reference in New Issue
Block a user