В общем в некоторых профессиях есть вещи, которые можно наложить на итем и получать бонусы, а потом просто отменить профессию и иметь бонус от этих вещей
Код:
void WorldSession::HandleUnlearnSkillOpcode(WorldPacket & recv_data)
{
uint32 skill_id;
recv_data >> skill_id;
GetPlayer()->SetSkill(skill_id, 0, 0);
}
далее
Код:
...
// clear skill fields
SetUInt32Value(PLAYER_SKILL_INDEX(itr->second.pos),0);
SetUInt32Value(PLAYER_SKILL_VALUE_INDEX(itr->second.pos),0);
SetUInt32Value(PLAYER_SKILL_BONUS_INDEX(itr->second.pos),0);
// mark as deleted or simply remove from map if not saved yet
if(itr->second.uState != SKILL_NEW)
itr->second.uState = SKILL_DELETED;
else
mSkillStatus.erase(itr);
// remove all spells that related to this skill
for (uint32 j=0; j<sSkillLineAbilityStore.GetNumRows(); ++j)
if(SkillLineAbilityEntry const *pAbility = sSkillLineAbilityStore.LookupEntry(j))
if (pAbility->skillId==id)
removeSpell(sSpellMgr.GetFirstSpellInChain(pAbility->spellId));
...
считаю что необходимо при удалении профы делать
Код:
_RemoveAllItemMods();
_ApplyAllItemMods();
+ считаю необходимым сделать обработку
Код:
struct SpellItemEnchantmentEntry
{
.....
//uint32 requiredSkill; // 35 m_requiredSkillID
//uint32 requiredSkillValue; // 36 m_requiredSkillRank
....
};
также сделал чтобы энчанты требовали Skill и Value и Level персонажа.
также добавил sSkillLineAbilityStore с ключем skill_id для более удобного доступа к скилам вместо просмотра всего дбц.