void WorldSession::HandeSetTalentSpecialization(WorldPacket& recvData) { uint32 specializationTabId; recvData >> specializationTabId; if (specializationTabId > MAX_TALENT_TABS) return; if (_player->GetTalentSpecialization(_player->GetActiveSpec())) return; uint32 specializationId = GetClassSpecializations(_player->getClass())[specializationTabId]; _player->SetActiveSpecialization(specializationId); _player->SetTalentSpecialization(_player->GetActiveSpec(), specializationId); _player->SendTalentsInfoData(); std::list<uint32> learnList = GetSpellsForLevels(0, _player->getRaceMask(), _player->GetTalentSpecialization(_player->GetActiveSpec()), 0, _player->getLevel()); for (std::list<uint32>::const_iterator iter = learnList.begin(); iter != learnList.end(); iter++) { if (!_player->HasSpell(*iter)) _player->learnSpell(*iter, true); } _player->SaveToDB(); }
std::string CharacterBooster::_SetSpecialization(SQLTransaction& trans, uint8 const& classId) const { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_TALENT); stmt->setUInt32(0, m_charBoostInfo.lowGuid); if (PreparedQueryResult result = CharacterDatabase.Query(stmt)) { do { stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SPELL_BY_SPELL); stmt->setUInt32(0, (*result)[0].GetUInt32()); stmt->setUInt32(1, m_charBoostInfo.lowGuid); trans->Append(stmt); } while (result->NextRow()); } if (uint32 const* specs = GetClassSpecializations(classId)) { for (uint8 i = 0; i < MAX_SPECIALIZATIONS; i++) { if (std::vector<uint32> const* spells = GetSpecializationSpells(specs[i])) { for (std::vector<uint32>::const_iterator iter = spells->begin(); iter != spells->end(); iter++) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SPELL_BY_SPELL); stmt->setUInt32(0, *iter); stmt->setUInt32(1, m_charBoostInfo.lowGuid); trans->Append(stmt); } } } } stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_TALENT); stmt->setUInt32(0, m_charBoostInfo.lowGuid); trans->Append(stmt); std::ostringstream talentTree; talentTree << m_charBoostInfo.specialization << " 0 "; return talentTree.str(); }