Quest *Creature::getNextAvailableQuest(Player *pPlayer, Quest *prevQuest) { Quest *pQuest; if ( prevQuest->m_qNextQuest != 0 ) { pQuest = objmgr.GetQuest( prevQuest->m_qNextQuest ); if (pQuest) { if ( pQuest->CanBeTaken(pPlayer) ) return pQuest; } } return NULL; }
void Creature::prepareQuestMenu( Player *pPlayer ) { uint32 quest_id; uint32 status; Quest *pQuest; for( std::list<uint32>::iterator i = mQuestIds.begin( ); i != mQuestIds.end( ); ++ i ) { quest_id = *i; status = pPlayer->getQuestStatus(quest_id); pQuest = objmgr.GetQuest(quest_id); if ( status == QUEST_STATUS_INCOMPLETE ) pPlayer->PlayerTalkClass->GetQuestMenu()->QuestItem( quest_id, DIALOG_STATUS_INCOMPLETE, false ); if ( ( status == QUEST_STATUS_AVAILABLE ) && ( pQuest->CanBeTaken(pPlayer) ) ) pPlayer->PlayerTalkClass->GetQuestMenu()->QuestItem( quest_id, DIALOG_STATUS_AVAILABLE, true ); } for( std::list<uint32>::iterator i = mInvolvedQuestIds.begin( ); i != mInvolvedQuestIds.end( ); ++ i ) { quest_id = *i; status = pPlayer->getQuestStatus(quest_id); pQuest = objmgr.GetQuest(quest_id); if ( status == QUEST_STATUS_INCOMPLETE ) pPlayer->PlayerTalkClass->GetQuestMenu()->QuestItem( quest_id, DIALOG_STATUS_INCOMPLETE, false ); if ( status == QUEST_STATUS_INCOMPLETE ) pPlayer->PlayerTalkClass->GetQuestMenu()->QuestItem( quest_id, DIALOG_STATUS_REWARD, false ); } }