这篇教程C++ HasFollowState函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中HasFollowState函数的典型用法代码示例。如果您正苦于以下问题:C++ HasFollowState函数的具体用法?C++ HasFollowState怎么用?C++ HasFollowState使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了HasFollowState函数的21个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: MoveInLineOfSight void MoveInLineOfSight(Unit* who) override { FollowerAI::MoveInLineOfSight(who); if (!me->GetVictim() && !HasFollowState(STATE_FOLLOW_COMPLETE) && who->GetEntry() == NPC_LILADRIS) { if (me->IsWithinDistInMap(who, INTERACTION_DISTANCE*5)) { if (Player* player = GetLeaderForFollower()) { if (player->GetQuestStatus(QUEST_SLEEPER_AWAKENED) == QUEST_STATUS_INCOMPLETE) player->GroupEventHappens(QUEST_SLEEPER_AWAKENED, me); Talk(SAY_KER_END); } SetFollowComplete(); } } }
开发者ID:HevdavDEV,项目名称:DeathCore_3.3.5a,代码行数:21,
示例2: AddFollowStatevoid FollowerAI::SetFollowComplete(bool bWithEndEvent){ if (me->HasUnitState(UNIT_STAT_FOLLOW)) { me->ClearUnitState(UNIT_STAT_FOLLOW); me->StopMoving(); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveIdle(); } if (bWithEndEvent) AddFollowState(STATE_FOLLOW_POSTEVENT); else { if (HasFollowState(STATE_FOLLOW_POSTEVENT)) RemoveFollowState(STATE_FOLLOW_POSTEVENT); } AddFollowState(STATE_FOLLOW_COMPLETE);}
开发者ID:Zakamurite,项目名称:TrilliumEMU,代码行数:21,
示例3: UpdateFollowerAI void UpdateFollowerAI(const uint32 uiDiff) { if (!UpdateVictim()) { if (HasFollowState(STATE_FOLLOW_POSTEVENT)) { if (m_uiPostEventTimer <= uiDiff) { m_uiPostEventTimer = 3000; Unit *pArynia = Unit::GetUnit(*me, AryniaGUID); if (!pArynia || !pArynia->isAlive()) { SetFollowComplete(); return; } switch(m_uiPhasePostEvent) { case 0: DoScriptText(SAY_AT_HOME, pArynia); break; case 1: DoScriptText(EMOTE_AT_HOME, me, 0, true); me->GetMotionMaster()->MovePoint(POINT_ID_TO_FOREST, m_afToForestLoc[0], m_afToForestLoc[1], m_afToForestLoc[2]); break; } ++m_uiPhasePostEvent; } else m_uiPostEventTimer -= uiDiff; } return; } DoMeleeAttackIfReady(); }
开发者ID:Dolmero,项目名称:L4G_Core,代码行数:39,
示例4: StartFollowvoid FollowerAI::StartFollow(Player* player, uint32 factionForFollower, const Quest* quest){ if (me->getVictim()) { sLog->outDebug(LOG_FILTER_TSCR, "FollowerAI attempt to StartFollow while in combat."); return; } if (HasFollowState(STATE_FOLLOW_INPROGRESS)) { sLog->outError(LOG_FILTER_TSCR, "FollowerAI attempt to StartFollow while already following."); return; } //set variables m_uiLeaderGUID = player->GetGUID(); if (factionForFollower) me->setFaction(factionForFollower); m_pQuestForFollow = quest; if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == WAYPOINT_MOTION_TYPE) { me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveIdle(); sLog->outDebug(LOG_FILTER_TSCR, "FollowerAI start with WAYPOINT_MOTION_TYPE, set to MoveIdle."); } me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); me->SetUInt32Value(UNIT_NPC_FLAGS + 1, UNIT_NPC_FLAG2_NONE); AddFollowState(STATE_FOLLOW_INPROGRESS); me->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); sLog->outDebug(LOG_FILTER_TSCR, "FollowerAI start follow %s (GUID " UI64FMTD ")", player->GetName(), m_uiLeaderGUID);}
开发者ID:Cailiaock,项目名称:5.4.7-Wow-source,代码行数:38,
示例5: StartFollowvoid FollowerAI::StartFollow(Player* pLeader, uint32 uiFactionForFollower, const Quest* pQuest, float followDist){ if (m_creature->getVictim()) { sLog.outDebug("FollowerAI attempt to StartFollow while in combat."); return; } if (HasFollowState(STATE_FOLLOW_INPROGRESS)) { sLog.outError("FollowerAI attempt to StartFollow while already following."); return; } //set variables m_uiLeaderGUID = pLeader->GetGUID(); m_uiFollowDistance = followDist; if (uiFactionForFollower) m_creature->setFaction(uiFactionForFollower); m_pQuestForFollow = pQuest; if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == WAYPOINT_MOTION_TYPE) { m_creature->GetMotionMaster()->Clear(); m_creature->GetMotionMaster()->MoveIdle(); sLog.outDebug("FollowerAI start with WAYPOINT_MOTION_TYPE, set to MoveIdle."); } m_creature->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); AddFollowState(STATE_FOLLOW_INPROGRESS); m_creature->GetMotionMaster()->MoveFollow(pLeader, followDist, PET_FOLLOW_ANGLE); sLog.outDebug("FollowerAI start follow %s (GUID %u)", pLeader->GetName(), m_uiLeaderGUID);}
开发者ID:Maduse,项目名称:server,代码行数:38,
示例6: JustDiedvoid FollowerAI::JustDied(Unit*){ if (!HasFollowState(STATE_FOLLOW_INPROGRESS) || !m_leaderGuid || !m_pQuestForFollow) return; //TODO: need a better check for quests with time limit. if (Player* pPlayer = GetLeaderForFollower()) { if (Group* pGroup = pPlayer->GetGroup()) { for(GroupReference* pRef = pGroup->GetFirstMember(); pRef != NULL; pRef = pRef->next()) { if (Player* pMember = pRef->getSource()) { if (pMember->GetQuestStatus(m_pQuestForFollow->GetQuestId()) == QUEST_STATUS_INCOMPLETE) pMember->FailQuest(m_pQuestForFollow->GetQuestId()); } } } else if (pPlayer->GetQuestStatus(m_pQuestForFollow->GetQuestId()) == QUEST_STATUS_INCOMPLETE) pPlayer->FailQuest(m_pQuestForFollow->GetQuestId()); }}
开发者ID:yyhhrr,项目名称:mangospriv,代码行数:23,
示例7: debug_logvoid FollowerAI::StartFollow(Player* leader, uint32 factionForFollower, const Quest* quest){ if (m_creature->getVictim()) { debug_log("SD2: FollowerAI attempt to StartFollow while in combat."); return; } if (HasFollowState(STATE_FOLLOW_INPROGRESS)) { script_error_log("FollowerAI attempt to StartFollow while already following."); return; } // set variables m_leaderGuid = leader->GetObjectGuid(); if (factionForFollower) m_creature->SetFactionTemporary(factionForFollower, TEMPFACTION_RESTORE_RESPAWN); m_questForFollow = quest; if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == WAYPOINT_MOTION_TYPE) { m_creature->GetMotionMaster()->Clear(); m_creature->GetMotionMaster()->MoveIdle(); debug_log("SD2: FollowerAI start with WAYPOINT_MOTION_TYPE, set to MoveIdle."); } m_creature->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); AddFollowState(STATE_FOLLOW_INPROGRESS); m_creature->GetMotionMaster()->MoveFollow(leader, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); debug_log("SD2: FollowerAI start follow %s (Guid %s)", leader->GetName(), m_leaderGuid.GetString().c_str());}
开发者ID:krullgor,项目名称:mangos-wotlk,代码行数:37,
示例8: TC_LOG_DEBUGvoid FollowerAI::StartFollow(Player* player, uint32 factionForFollower, const Quest* quest){ if (me->GetVictim()) { TC_LOG_DEBUG("scripts", "FollowerAI attempt to StartFollow while in combat."); return; } if (HasFollowState(STATE_FOLLOW_INPROGRESS)) { TC_LOG_ERROR("scripts", "FollowerAI attempt to StartFollow while already following."); return; } //set variables m_uiLeaderGUID = player->GetGUID(); if (factionForFollower) me->setFaction(factionForFollower); m_pQuestForFollow = quest; if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == WAYPOINT_MOTION_TYPE) { me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveIdle(); TC_LOG_DEBUG("scripts", "FollowerAI start with WAYPOINT_MOTION_TYPE, set to MoveIdle."); } me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); AddFollowState(STATE_FOLLOW_INPROGRESS); me->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); TC_LOG_DEBUG("scripts", "FollowerAI start follow %s (%s)", player->GetName().c_str(), m_uiLeaderGUID.ToString().c_str());}
开发者ID:FixCore,项目名称:335source,代码行数:37,
示例9: EnterEvadeModevoid FollowerAI::EnterEvadeMode(){ me->RemoveAllAuras(); me->DeleteThreatList(); me->CombatStop(true); me->SetLootRecipient(NULL); if (HasFollowState(STATE_FOLLOW_INPROGRESS)) { if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE) { float fPosX, fPosY, fPosZ; me->GetPosition(fPosX, fPosY, fPosZ); me->GetMotionMaster()->MovePoint(POINT_COMBAT_START, fPosX, fPosY, fPosZ); } } else { if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE) me->GetMotionMaster()->MoveTargetedHome(); } Reset();}
开发者ID:Cailiaock,项目名称:5.4.7-Wow-source,代码行数:24,
示例10: UpdateFollowerAI void UpdateFollowerAI(const uint32 uiDiff) { if (!UpdateVictim()) { if (HasFollowState(STATE_FOLLOW_POSTEVENT)) { if (m_uiEndEventTimer <= uiDiff) { Unit* pKernobee = Unit::GetUnit(*me, KernobeeGUID); if (!pKernobee || !pKernobee->IsAlive()) { SetFollowComplete(); return; } switch (m_uiEndEventProgress) { case 1: DoScriptText(SAY_KERNOBEE_END, me); m_uiEndEventTimer = 3000; break; case 2: SetFollowComplete(); break; } ++m_uiEndEventProgress; } else m_uiEndEventTimer -= uiDiff; } return; } DoMeleeAttackIfReady(); }
开发者ID:Phentora,项目名称:OregonCore,代码行数:36,
示例11: debug_logvoid FollowerAI::UpdateAI(const uint32 uiDiff){ if (HasFollowState(STATE_FOLLOW_INPROGRESS) && !m_creature->getVictim()) { if (m_uiUpdateFollowTimer < uiDiff) { if (HasFollowState(STATE_FOLLOW_COMPLETE) && !HasFollowState(STATE_FOLLOW_POSTEVENT)) { debug_log("SD2: FollowerAI is set completed, despawns."); m_creature->ForcedDespawn(); return; } bool bIsMaxRangeExceeded = true; if (Player* pPlayer = GetLeaderForFollower()) { if (HasFollowState(STATE_FOLLOW_RETURNING)) { debug_log("SD2: FollowerAI is returning to leader."); RemoveFollowState(STATE_FOLLOW_RETURNING); m_creature->GetMotionMaster()->MoveFollow(pPlayer, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); return; } if (Group* pGroup = pPlayer->GetGroup()) { for(GroupReference* pRef = pGroup->GetFirstMember(); pRef != NULL; pRef = pRef->next()) { Player* pMember = pRef->getSource(); if (pMember && m_creature->IsWithinDistInMap(pMember, MAX_PLAYER_DISTANCE)) { bIsMaxRangeExceeded = false; break; } } } else { if (m_creature->IsWithinDistInMap(pPlayer, MAX_PLAYER_DISTANCE)) bIsMaxRangeExceeded = false; } } if (bIsMaxRangeExceeded) { debug_log("SD2: FollowerAI failed because player/group was to far away or not found"); m_creature->ForcedDespawn(); return; } m_uiUpdateFollowTimer = 1000; } else m_uiUpdateFollowTimer -= uiDiff; } UpdateFollowerAI(uiDiff);}
开发者ID:sd0,项目名称:scriptdevzero,代码行数:61,
示例12: UpdateFollowerAI void UpdateFollowerAI(uint32 Diff) override { if (!UpdateVictim()) { if (HasFollowState(STATE_FOLLOW_POSTEVENT)) { if (EndEventTimer <= Diff) { Creature* spraggle = ObjectAccessor::GetCreature(*me, SpraggleGUID); if (!spraggle || !spraggle->IsAlive()) { SetFollowComplete(); return; } switch (EndEventProgress) { case 1: Talk(SAY_RIN_END_1); EndEventTimer = 3000; break; case 2: spraggle->AI()->Talk(SAY_SPR_END_2); EndEventTimer = 5000; break; case 3: Talk(SAY_RIN_END_3); EndEventTimer = 1000; break; case 4: Talk(EMOTE_RIN_END_4); SetFaint(); EndEventTimer = 9000; break; case 5: Talk(EMOTE_RIN_END_5); ClearFaint(); EndEventTimer = 1000; break; case 6: Talk(SAY_RIN_END_6); EndEventTimer = 3000; break; case 7: spraggle->AI()->Talk(SAY_SPR_END_7); EndEventTimer = 10000; break; case 8: Talk(EMOTE_RIN_END_8); EndEventTimer = 5000; break; case 9: SetFollowComplete(); break; } ++EndEventProgress; } else EndEventTimer -= Diff; } else if (HasFollowState(STATE_FOLLOW_INPROGRESS) && !HasFollowState(STATE_FOLLOW_PAUSED)) { if (FaintTimer <= Diff) { SetFaint(); FaintTimer = urand(60000, 120000); } else FaintTimer -= Diff; } return; } DoMeleeAttackIfReady(); }
开发者ID:AwkwardDev,项目名称:RE,代码行数:77,
示例13: MoveInLineOfSight void MoveInLineOfSight(Unit* pWho) override { // should not have npcflag by default, so set when expected if (!m_creature->getVictim() && !m_creature->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP) && HasFollowState(STATE_FOLLOW_INPROGRESS) && pWho->GetEntry() == NPC_WINNA) { if (m_creature->IsWithinDistInMap(pWho, INTERACTION_DISTANCE)) m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); } }
开发者ID:520lly,项目名称:mangos-classic,代码行数:9,
示例14: SpellHit void SpellHit(Unit* /*pCaster*/, const SpellInfo* pSpell) { if (HasFollowState(STATE_FOLLOW_INPROGRESS | STATE_FOLLOW_PAUSED) && pSpell->Id == SPELL_AWAKEN) ClearSleeping(); }
开发者ID:Bulbucan,项目名称:TrinityCore,代码行数:5,
示例15: UpdateFollowerAI void UpdateFollowerAI(const uint32 uiDiff) { if (!m_creature->SelectHostileTarget() || !m_creature->getVictim()) { //we are doing the post-event, or... if (HasFollowState(STATE_FOLLOW_POSTEVENT)) { if (m_uiPostEventTimer < uiDiff) { m_uiPostEventTimer = 5000; if (!pTorta || !pTorta->isAlive()) { //something happened, so just complete SetFollowComplete(); return; } switch(m_uiPhasePostEvent) { case 1: DoScriptText(SAY_TOOG_POST_1, m_creature); break; case 2: DoScriptText(SAY_TORT_POST_2, pTorta); break; case 3: DoScriptText(SAY_TOOG_POST_3, m_creature); break; case 4: DoScriptText(SAY_TORT_POST_4, pTorta); break; case 5: DoScriptText(SAY_TOOG_POST_5, m_creature); break; case 6: DoScriptText(SAY_TORT_POST_6, pTorta); m_creature->GetMotionMaster()->MovePoint(POINT_ID_TO_WATER, m_afToWaterLoc[0], m_afToWaterLoc[1], m_afToWaterLoc[2]); break; } ++m_uiPhasePostEvent; } else m_uiPostEventTimer -= uiDiff; } //...we are doing regular speech check else if (HasFollowState(STATE_FOLLOW_INPROGRESS)) { if (m_uiCheckSpeechTimer < uiDiff) { m_uiCheckSpeechTimer = 5000; switch(urand(0, 50)) { case 10: DoScriptText(SAY_TOOG_THIRST, m_creature); break; case 25: DoScriptText(SAY_TOOG_WORRIED, m_creature); break; } } else m_uiCheckSpeechTimer -= uiDiff; } return; } DoMeleeAttackIfReady(); }
开发者ID:eviljared,项目名称:diamondcore,代码行数:72,
示例16: UpdateFollowerAI void UpdateFollowerAI(const uint32 diff) { if(!UpdateVictim()) { //we are doing the post-event, or... if(HasFollowState(STATE_FOLLOW_POSTEVENT)) { if(m_uiPostEventTimer <= diff) { m_uiPostEventTimer = 5000; Unit* pTorta = Unit::GetUnit(*me, TortaGUID); if(!pTorta || !pTorta->isAlive()) { //something happened, so just complete SetFollowComplete(); return; } switch(m_uiPhasePostEvent) { case 1: DoScriptText(SAY_TOOG_POST_1, me); break; case 2: DoScriptText(SAY_TORT_POST_2, pTorta); break; case 3: DoScriptText(SAY_TOOG_POST_3, me); break; case 4: DoScriptText(SAY_TORT_POST_4, pTorta); break; case 5: DoScriptText(SAY_TOOG_POST_5, me); break; case 6: DoScriptText(SAY_TORT_POST_6, pTorta); me->GetMotionMaster()->MovePoint(POINT_ID_TO_WATER, m_afToWaterLoc[0], m_afToWaterLoc[1], m_afToWaterLoc[2]); break; } ++m_uiPhasePostEvent; } else m_uiPostEventTimer -= diff; } //...we are doing regular speech check else if(HasFollowState(STATE_FOLLOW_INPROGRESS)) { if(m_uiCheckSpeechTimer <= diff) { m_uiCheckSpeechTimer = 5000; if(urand(0, 9) > 8) DoScriptText(RAND(SAY_TOOG_THIRST, SAY_TOOG_WORRIED), me); } else m_uiCheckSpeechTimer -= diff; } return; } DoMeleeAttackIfReady(); }
开发者ID:Naios,项目名称:MythCore,代码行数:66,
示例17: UpdateFollowerAI void UpdateFollowerAI(uint32 Diff) { if (!UpdateVictim()) { //we are doing the post-event, or... if (HasFollowState(STATE_FOLLOW_POSTEVENT)) { if (PostEventTimer <= Diff) { PostEventTimer = 5000; Creature* torta = Creature::GetCreature(*me, TortaGUID); if (!torta || !torta->isAlive()) { //something happened, so just complete SetFollowComplete(); return; } switch (PhasePostEvent) { case 1: Talk(SAY_TOOG_POST_1); break; case 2: torta->AI()->Talk(SAY_TORT_POST_2); break; case 3: Talk(SAY_TOOG_POST_3); break; case 4: torta->AI()->Talk(SAY_TORT_POST_4); break; case 5: Talk(SAY_TOOG_POST_5); break; case 6: torta->AI()->Talk(SAY_TORT_POST_6); me->GetMotionMaster()->MovePoint(POINT_ID_TO_WATER, ToWaterLoc); break; } ++PhasePostEvent; } else PostEventTimer -= Diff; } //...we are doing regular speech check else if (HasFollowState(STATE_FOLLOW_INPROGRESS)) { if (CheckSpeechTimer <= Diff) { CheckSpeechTimer = 5000; if (urand(0, 9) > 8) Talk(SAY_TOOG_WORRIED); } else CheckSpeechTimer -= Diff; } return; } DoMeleeAttackIfReady(); }
开发者ID:CrazyMeal,项目名称:Serval_Core,代码行数:66,
示例18: TC_LOG_DEBUGvoid FollowerAI::UpdateAI(uint32 uiDiff){ if (HasFollowState(STATE_FOLLOW_INPROGRESS) && !me->GetVictim()) { if (m_uiUpdateFollowTimer <= uiDiff) { if (HasFollowState(STATE_FOLLOW_COMPLETE) && !HasFollowState(STATE_FOLLOW_POSTEVENT)) { TC_LOG_DEBUG("scripts", "FollowerAI is set completed, despawns."); me->DespawnOrUnsummon(); return; } bool bIsMaxRangeExceeded = true; if (Player* player = GetLeaderForFollower()) { if (HasFollowState(STATE_FOLLOW_RETURNING)) { TC_LOG_DEBUG("scripts", "FollowerAI is returning to leader."); RemoveFollowState(STATE_FOLLOW_RETURNING); me->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); return; } if (Group* group = player->GetGroup()) { for (GroupReference* groupRef = group->GetFirstMember(); groupRef != NULL; groupRef = groupRef->next()) { Player* member = groupRef->GetSource(); if (member && me->IsWithinDistInMap(member, MAX_PLAYER_DISTANCE)) { bIsMaxRangeExceeded = false; break; } } } else { if (me->IsWithinDistInMap(player, MAX_PLAYER_DISTANCE)) bIsMaxRangeExceeded = false; } } if (bIsMaxRangeExceeded) { TC_LOG_DEBUG("scripts", "FollowerAI failed because player/group was to far away or not found"); me->DespawnOrUnsummon(); return; } m_uiUpdateFollowTimer = 1000; } else m_uiUpdateFollowTimer -= uiDiff; } UpdateFollowerAI(uiDiff);}
开发者ID:AriDEV,项目名称:SkyFire.548,代码行数:61,
示例19: SpellHit void SpellHit(Unit* /*pCaster*/, const SpellInfo* pSpell) { if (HasFollowState(STATE_FOLLOW_INPROGRESS | STATE_FOLLOW_PAUSED) && pSpell->Id == SPELL_REVIVE_RINGO) ClearFaint(); }
开发者ID:Sharkss,项目名称:DiamondCore3,代码行数:5,
示例20: UpdateFollowerAI void UpdateFollowerAI(const uint32 uiDiff) { if (!UpdateVictim()) { if (HasFollowState(STATE_FOLLOW_POSTEVENT)) { if (m_uiEndEventTimer <= uiDiff) { Unit* pSpraggle = Unit::GetUnit(*me, SpraggleGUID); if (!pSpraggle || !pSpraggle->isAlive()) { SetFollowComplete(); return; } switch (m_uiEndEventProgress) { case 1: DoScriptText(SAY_RIN_END_1, me); m_uiEndEventTimer = 3000; break; case 2: DoScriptText(SAY_SPR_END_2, pSpraggle); m_uiEndEventTimer = 5000; break; case 3: DoScriptText(SAY_RIN_END_3, me); m_uiEndEventTimer = 1000; break; case 4: DoScriptText(EMOTE_RIN_END_4, me); SetFaint(); m_uiEndEventTimer = 9000; break; case 5: DoScriptText(EMOTE_RIN_END_5, me); ClearFaint(); m_uiEndEventTimer = 1000; break; case 6: DoScriptText(SAY_RIN_END_6, me); m_uiEndEventTimer = 3000; break; case 7: DoScriptText(SAY_SPR_END_7, pSpraggle); m_uiEndEventTimer = 10000; break; case 8: DoScriptText(EMOTE_RIN_END_8, me); m_uiEndEventTimer = 5000; break; case 9: SetFollowComplete(); break; } ++m_uiEndEventProgress; } else m_uiEndEventTimer -= uiDiff; } else if (HasFollowState(STATE_FOLLOW_INPROGRESS)) { if (!HasFollowState(STATE_FOLLOW_PAUSED)) { if (m_uiFaintTimer <= uiDiff) { SetFaint(); m_uiFaintTimer = urand(60000, 120000); } else m_uiFaintTimer -= uiDiff; } } return; } DoMeleeAttackIfReady(); }
开发者ID:Sharkss,项目名称:DiamondCore3,代码行数:80,
示例21: RemoveFollowStatevoid FollowerAI::UpdateAI(const uint32 uiDiff){ if (HasFollowState(STATE_FOLLOW_INPROGRESS) && !m_creature->getVictim()) { if (m_uiUpdateFollowTimer < uiDiff) { if (HasFollowState(STATE_FOLLOW_COMPLETE) && !HasFollowState(STATE_FOLLOW_POSTEVENT)) { sLog.outDebug("FollowerAI is set completed, despawns."); m_creature->DisappearAndDie(); return; } bool bIsMaxRangeExceeded = true; if (Player* pPlayer = GetLeaderForFollower()) { if (HasFollowState(STATE_FOLLOW_RETURNING)) { sLog.outDebug("FollowerAI is returning to leader."); RemoveFollowState(STATE_FOLLOW_RETURNING); m_creature->GetMotionMaster()->MoveFollow(pPlayer, m_uiFollowDistance, PET_FOLLOW_ANGLE); return; } if (Group* pGroup = pPlayer->GetGroup()) { for(GroupReference* pRef = pGroup->GetFirstMember(); pRef != nullptr; pRef = pRef->next()) { Player* pMember = pRef->getSource(); if (pMember && m_creature->IsWithinDistInMap(pMember, MAX_PLAYER_DISTANCE)) { bIsMaxRangeExceeded = false; break; } } } else { if (m_creature->IsWithinDistInMap(pPlayer, MAX_PLAYER_DISTANCE)) bIsMaxRangeExceeded = false; } // allow postEvent to happen even if quest credit is already handled /*if (HasFollowState(STATE_FOLLOW_COMPLETE | STATE_FOLLOW_POSTEVENT)) bIsMaxRangeExceeded = false;*/ } if (bIsMaxRangeExceeded) { sLog.outDebug("FollowerAI failed because player/group was to far away or not found"); SetFollowPaused(false); m_creature->DisappearAndDie(); return; } m_uiUpdateFollowTimer = 300; } else m_uiUpdateFollowTimer -= uiDiff; } UpdateFollowerAI(uiDiff);}
开发者ID:Maduse,项目名称:server,代码行数:66,
注:本文中的HasFollowState函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ HasGeneratedLoot函数代码示例 C++ HasFocus函数代码示例 |