void KAIBase::DoWait() { SetAIState(aisWait); OnWait(); }
void KAIBase::Activate(void) { KG_PROCESS_ERROR(m_pSelf); if (m_eAIType <= aitInvalid || m_eAIType >= aitTotal) return; if (g_pSO3World->m_nGameLoop < m_nNextActiveFrame) return; m_nNextActiveFrame = g_pSO3World->m_nGameLoop + m_nAIInterval; CheckAIEvent(); // Npc可能在脚本中被删除,所以调用脚本之后要判断下 KG_PROCESS_ERROR(m_pSelf->m_pScene && m_pSelf->m_pCell && m_pSelf->m_eMoveState != cmsOnDeath); if (IS_NPC(m_pSelf->m_dwID)) { if (m_pSelf->m_bFightState) { //战斗状态中 } else { //非战斗状态中 //触发NpcDialog的Idle事件 if (m_nNextIdleActionFrame < g_pSO3World->m_nGameLoop) { //-------- AI Event:Idle --------------------------------- KTarget rTarget; rTarget.ClearTarget(); g_pSO3World->m_Settings.m_SmartDialogList.FireEvent((KNpc*)m_pSelf, ntatIdle, rTarget); //-------------------------------------------------------- m_nNextIdleActionFrame = g_pSO3World->m_nGameLoop + g_pSO3World->m_Settings.m_ConstList.nNpcIdleActionInterval; } } } switch (m_eAIState) { case aisIdle: OnIdle(); break; case aisWander: OnWander(); break; case aisPatrol: OnPartol(); break; case aisAlert: OnAlert(); break; case aisFollow: OnFollow(); break; case aisPursuit: OnPursuit(); break; case aisKeepAway: OnKeepAway(); break; case aisEscape: OnEscape(); break; case aisReturn: OnReturn(); break; case aisWait: OnWait(); break; default: KGLOG_PROCESS_ERROR(FALSE); break; } return; Exit0: return; }
void CCallThread::DispatchCallerCmd(CallerCmd& callerCmd) { switch(callerCmd.GetCmdType()) { case cmdLogin: { OnLogin(callerCmd); } break; case cmdQuit: { OnQuit(callerCmd); } break; case cmdCall: { OnCall(callerCmd); } break; case cmdRecall: { OnRecall(callerCmd); } break; case cmdDiscard: { OnDiscard(callerCmd); } break; case cmdWait: { OnWait(callerCmd); } break; case cmdEvaReq: { OnEvaReq(callerCmd); } break; case cmdPause: { OnPause(callerCmd); } break; case cmdResume: { OnResume(callerCmd); } break; case cmdCallNum: { OnCallNum(callerCmd); } break; case cmdCallSec: { OnCallSec(callerCmd); } break; case cmdCallMana: { OnCallMana(callerCmd); } break; case cmdCallBusc: { OnCallBusc(callerCmd); } break; case cmdExChange: { OnExChange(callerCmd); } break; case callerCmdShowAdd: break; default: { return; } break; } ///处理完后返回 ReturnToCaller(callerCmd); }