本文整理汇总了C++中Quest::HasFlag方法的典型用法代码示例。如果您正苦于以下问题:C++ Quest::HasFlag方法的具体用法?C++ Quest::HasFlag怎么用?C++ Quest::HasFlag使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Quest
的用法示例。
在下文中一共展示了Quest::HasFlag方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getDialogStatus
uint32 Creature::getDialogStatus(Player *pPlayer, uint32 defstatus)
{
bool wasReward = false;
bool wasRewardRep = false;
bool wasAvail = false;
bool wasIncompl = false;
bool wasAnavail = false;
bool wasAvailShow = false;
bool wasUnavailShow = false;
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 ( pQuest == NULL ) continue;
if ( !pQuest->PreReqSatisfied( pPlayer ) ||
!pQuest->IsCompatible( pPlayer ) ||
pQuest->RewardIsTaken( pPlayer )
) continue;
if ( status == QUEST_STATUS_INCOMPLETE ) wasIncompl = true;
if ( status == QUEST_STATUS_COMPLETE )
{
if (pQuest->HasFlag( QUEST_SPECIAL_FLAGS_REPEATABLE ))
wasRewardRep = true; else
wasReward = true;
}
if ( status == QUEST_STATUS_AVAILABLE )
{
if ( pQuest->CanShowAvailable( pPlayer ) ) wasAvailShow = true;
wasAvail = true;
}
if ( status == QUEST_STATUS_UNAVAILABLE )
{
wasAnavail = true;
if ( pQuest->CanShowUnsatified( pPlayer ) ) wasUnavailShow = true;
}
if ( status == QUEST_STATUS_NONE )
{
if (!pQuest->LevelSatisfied( pPlayer ))
{
pPlayer->addNewQuest(quest_id, QUEST_STATUS_UNAVAILABLE );
if ( pQuest->CanShowUnsatified( pPlayer ) ) wasUnavailShow = true;
wasAnavail = true;
}
else
{
pPlayer->addNewQuest(quest_id, QUEST_STATUS_AVAILABLE );
if ( pQuest->CanShowAvailable( pPlayer ) ) wasAvailShow = true;
wasAvail = 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 )
{
if ( pQuest->HasFlag( QUEST_SPECIAL_FLAGS_SPEAKTO ) )
wasReward = true; else
wasIncompl = true;
}
}
if (wasReward) return DIALOG_STATUS_REWARD;
if (wasRewardRep) return DIALOG_STATUS_REWARD_REP;
if (wasAvail)
{
if (wasAvailShow)
return DIALOG_STATUS_AVAILABLE; else
return DIALOG_STATUS_CHAT;
}
if (wasIncompl) return DIALOG_STATUS_INCOMPLETE;
if ( defstatus != DIALOG_STATUS_NONE )
return defstatus;
//.........这里部分代码省略.........
示例2: HandleQuestGiverQueryQuestOpcode
void WorldSession::HandleQuestGiverQueryQuestOpcode(WorldPacket & recv_data)
{
CHECK_INWORLD_RETURN
LOG_DEBUG("WORLD: Received CMSG_QUESTGIVER_QUERY_QUEST.");
WorldPacket data;
uint64 guid;
uint32 quest_id;
uint32 status = 0;
uint8 unk;
recv_data >> guid;
recv_data >> quest_id;
recv_data >> unk;
Object* qst_giver = NULL;
bool bValid = false;
Quest* qst = QuestStorage.LookupEntry(quest_id);
if(!qst)
{
LOG_DEBUG("WORLD: Invalid quest ID.");
return;
}
uint32 guidtype = GET_TYPE_FROM_GUID(guid);
if(guidtype == HIGHGUID_TYPE_UNIT)
{
Creature* quest_giver = _player->GetMapMgr()->GetCreature(GET_LOWGUID_PART(guid));
if(quest_giver)
qst_giver = quest_giver;
else
return;
if(quest_giver->isQuestGiver())
{
bValid = true;
status = sQuestMgr.CalcQuestStatus(qst_giver, GetPlayer(), qst, (uint8)quest_giver->GetQuestRelation(qst->id), false);
}
}
else if(guidtype == HIGHGUID_TYPE_GAMEOBJECT)
{
GameObject* quest_giver = _player->GetMapMgr()->GetGameObject(GET_LOWGUID_PART(guid));
if(quest_giver)
qst_giver = quest_giver;
else
return;
bValid = quest_giver->isQuestGiver();
if(quest_giver->isQuestGiver())
{
bValid = true;
status = sQuestMgr.CalcQuestStatus(qst_giver, GetPlayer(), qst, (uint8)quest_giver->GetQuestRelation(qst->id), false);
}
}
else if(guidtype == HIGHGUID_TYPE_ITEM)
{
Item* quest_giver = GetPlayer()->GetItemInterface()->GetItemByGUID(guid);
//------cebernic: added it for script engine
if(!quest_giver) return;
ItemPrototype* itemProto = quest_giver->GetProto();
if(itemProto->Bonding != ITEM_BIND_ON_USE || quest_giver->IsSoulbound()) // SoulBind item will be used after SoulBind()
{
if(sScriptMgr.CallScriptedItem(quest_giver, GetPlayer()))
return;
}
if(itemProto->Bonding == ITEM_BIND_ON_USE)
quest_giver->SoulBind();
//---------------------------------------------
if(quest_giver)
qst_giver = quest_giver;
else
return;
bValid = true;
status = sQuestMgr.CalcQuestStatus(qst_giver, GetPlayer(), qst, 1, false);
}
if(!qst_giver)
{
LOG_DEBUG("WORLD: Invalid questgiver GUID.");
return;
}
if(!bValid)
{
LOG_DEBUG("WORLD: object is not a questgiver.");
return;
}
if((status == QMGR_QUEST_AVAILABLE) || (status == QMGR_QUEST_REPEATABLE) || (status == QMGR_QUEST_CHAT))
{
sQuestMgr.BuildQuestDetails(&data, qst, qst_giver, 1, language, _player); // 0 because we want goodbye to function
SendPacket(&data);
LOG_DEBUG("WORLD: Sent SMSG_QUESTGIVER_QUEST_DETAILS.");
if(qst->HasFlag(QUEST_FLAGS_AUTO_ACCEPT))
_player->AcceptQuest(qst_giver->GetGUID(), qst->id);
//.........这里部分代码省略.........