[7740] More correct flags in trainer list data for profession ranks. Author: VladimirMangos
Note: this is not fix problem with gren show recently learned non-first rank of primary profession.
Thanks to Seizerkiller for help in reseach.
--HG--
branch : trunk
This commit is contained in:
+10
-7
@@ -157,6 +157,7 @@ void WorldSession::SendTrainerList( uint64 guid, const std::string& strTitle )
|
|||||||
|
|
||||||
// reputation discount
|
// reputation discount
|
||||||
float fDiscountMod = _player->GetReputationPriceDiscount(unit);
|
float fDiscountMod = _player->GetReputationPriceDiscount(unit);
|
||||||
|
bool can_learn_primary_prof = GetPlayer()->GetFreePrimaryProffesionPoints() > 0;
|
||||||
|
|
||||||
uint32 count = 0;
|
uint32 count = 0;
|
||||||
for(TrainerSpellMap::const_iterator itr = trainer_spells->spellList.begin(); itr != trainer_spells->spellList.end(); ++itr)
|
for(TrainerSpellMap::const_iterator itr = trainer_spells->spellList.begin(); itr != trainer_spells->spellList.end(); ++itr)
|
||||||
@@ -166,25 +167,27 @@ void WorldSession::SendTrainerList( uint64 guid, const std::string& strTitle )
|
|||||||
if(!_player->IsSpellFitByClassAndRace(tSpell->learnedSpell))
|
if(!_player->IsSpellFitByClassAndRace(tSpell->learnedSpell))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
++count;
|
|
||||||
|
|
||||||
bool primary_prof_first_rank = spellmgr.IsPrimaryProfessionFirstRankSpell(tSpell->learnedSpell);
|
bool primary_prof_first_rank = spellmgr.IsPrimaryProfessionFirstRankSpell(tSpell->learnedSpell);
|
||||||
|
|
||||||
SpellChainNode const* chain_node = spellmgr.GetSpellChainNode(tSpell->learnedSpell);
|
SpellChainNode const* chain_node = spellmgr.GetSpellChainNode(tSpell->learnedSpell);
|
||||||
uint32 req_spell = spellmgr.GetSpellRequired(tSpell->spell);
|
uint32 req_spell = spellmgr.GetSpellRequired(tSpell->spell);
|
||||||
|
TrainerSpellState state = _player->GetTrainerSpellState(tSpell);
|
||||||
|
|
||||||
data << uint32(tSpell->spell); // learned spell (or cast-spell in profession case)
|
data << uint32(tSpell->spell); // learned spell (or cast-spell in profession case)
|
||||||
data << uint8(_player->GetTrainerSpellState(tSpell));
|
data << uint8(state==TRAINER_SPELL_GREEN_DISABLED ? TRAINER_SPELL_GREEN : state);
|
||||||
data << uint32(floor(tSpell->spellCost * fDiscountMod));
|
data << uint32(floor(tSpell->spellCost * fDiscountMod));
|
||||||
|
|
||||||
data << uint32(primary_prof_first_rank ? 1 : 0); // primary prof. learn confirmation dialog
|
data << uint32(primary_prof_first_rank && can_learn_primary_prof ? 1 : 0);
|
||||||
|
// primary prof. learn confirmation dialog
|
||||||
data << uint32(primary_prof_first_rank ? 1 : 0); // must be equal prev. field to have learn button in enabled state
|
data << uint32(primary_prof_first_rank ? 1 : 0); // must be equal prev. field to have learn button in enabled state
|
||||||
data << uint8(tSpell->reqLevel);
|
data << uint8(tSpell->reqLevel);
|
||||||
data << uint32(tSpell->reqSkill);
|
data << uint32(tSpell->reqSkill);
|
||||||
data << uint32(tSpell->reqSkillValue);
|
data << uint32(tSpell->reqSkillValue);
|
||||||
data << uint32(chain_node && chain_node->prev ? chain_node->prev : req_spell);
|
//prev + req or req + 0
|
||||||
data << uint32(chain_node && chain_node->prev ? req_spell : 0);
|
data << uint32(!tSpell->IsCastable() && chain_node && chain_node->prev ? chain_node->prev : req_spell);
|
||||||
|
data << uint32(!tSpell->IsCastable() && chain_node && chain_node->prev ? req_spell : 0);
|
||||||
data << uint32(0);
|
data << uint32(0);
|
||||||
|
|
||||||
|
++count;
|
||||||
}
|
}
|
||||||
|
|
||||||
data << strTitle;
|
data << strTitle;
|
||||||
|
|||||||
+1
-1
@@ -3785,7 +3785,7 @@ TrainerSpellState Player::GetTrainerSpellState(TrainerSpell const* trainer_spell
|
|||||||
|
|
||||||
// check primary prof. limit
|
// check primary prof. limit
|
||||||
if(spellmgr.IsPrimaryProfessionFirstRankSpell(spell->Id) && GetFreePrimaryProffesionPoints() == 0)
|
if(spellmgr.IsPrimaryProfessionFirstRankSpell(spell->Id) && GetFreePrimaryProffesionPoints() == 0)
|
||||||
return TRAINER_SPELL_RED;
|
return TRAINER_SPELL_GREEN_DISABLED;
|
||||||
|
|
||||||
return TRAINER_SPELL_GREEN;
|
return TRAINER_SPELL_GREEN;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -122,7 +122,8 @@ enum TrainerSpellState
|
|||||||
{
|
{
|
||||||
TRAINER_SPELL_GREEN = 0,
|
TRAINER_SPELL_GREEN = 0,
|
||||||
TRAINER_SPELL_RED = 1,
|
TRAINER_SPELL_RED = 1,
|
||||||
TRAINER_SPELL_GRAY = 2
|
TRAINER_SPELL_GRAY = 2,
|
||||||
|
TRAINER_SPELL_GREEN_DISABLED = 10 // custom value, not send to client: formally green but learn not allowed
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ActionButtonUpdateState
|
enum ActionButtonUpdateState
|
||||||
|
|||||||
Reference in New Issue
Block a user