92 lines
2.1 KiB
C++
92 lines
2.1 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "AIMgr.h"
|
|||
|
|
#include "../base/Container.hpp"
|
|||
|
|
//AI管理器,用于创建各种AI实体
|
|||
|
|
|
|||
|
|
CAnimalAI * CAiMgr::CreateAi(INT_PTR nAiId,CAnimal * pAnimal)
|
|||
|
|
{
|
|||
|
|
if (pAnimal ==NULL) return NULL;
|
|||
|
|
AICONFIG * pConfig= GetLogicServer()->GetDataProvider()->GetAiConfig().GetAiData(nAiId);
|
|||
|
|
if(pConfig ==NULL) return NULL;
|
|||
|
|
INT_PTR nAiType = pConfig->nAIType;
|
|||
|
|
CAnimalAI * pAI= NULL;
|
|||
|
|
AiIndex handle;
|
|||
|
|
switch(nAiType)
|
|||
|
|
{
|
|||
|
|
case atAiTypePassive:
|
|||
|
|
pAI= m_passiveAiMgr.Acquire(handle);
|
|||
|
|
break;
|
|||
|
|
case atAiTypeAggressor:
|
|||
|
|
pAI= m_aggressorAiMgr.Acquire(handle);
|
|||
|
|
break;
|
|||
|
|
case atAiTypeRandomFlee:
|
|||
|
|
pAI = m_randomFleeAiMgr.Acquire(handle);
|
|||
|
|
break;
|
|||
|
|
case atAiTypeNeutrally:
|
|||
|
|
pAI = m_neutralAiMgr.Acquire(handle);
|
|||
|
|
break;
|
|||
|
|
case atAiTypeNPC:
|
|||
|
|
pAI = m_NPCAIMgr.Acquire(handle);
|
|||
|
|
break;
|
|||
|
|
case atAiTypePet:
|
|||
|
|
pAI =m_petAiMgr.Acquire(handle);
|
|||
|
|
break;
|
|||
|
|
case atAiTypeHero:
|
|||
|
|
pAI =m_heroAiMgr.Acquire(handle);
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
if(pAI ==NULL) return NULL;
|
|||
|
|
pAI->m_btAiType = (BYTE)nAiType;
|
|||
|
|
pAI->m_handle = handle;
|
|||
|
|
pAI->m_wID = (WORD)nAiId;
|
|||
|
|
pAI->m_pSelf = pAnimal;
|
|||
|
|
pAI->initialize(pConfig);
|
|||
|
|
|
|||
|
|
// 设置怪物AI属性:被攻击改变目标的概率
|
|||
|
|
// if(pAnimal->IsMonster())
|
|||
|
|
// {
|
|||
|
|
// unsigned int nID = pAnimal->GetId();
|
|||
|
|
// PMONSTERCONFIG pMonsterConfig = GetLogicServer()->GetDataProvider()->GetMonsterConfig().GetMonsterData(nID);
|
|||
|
|
// if (pMonsterConfig)
|
|||
|
|
// pAI->SetReSelTargetRate(pMonsterConfig->wReSelTargetRate);
|
|||
|
|
// }
|
|||
|
|
return pAI;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CAiMgr::DestroyAi(CAnimalAI * pAi)
|
|||
|
|
{
|
|||
|
|
if(pAi ==NULL) return;
|
|||
|
|
switch(pAi->m_btAiType )
|
|||
|
|
{
|
|||
|
|
case atAiTypePassive:
|
|||
|
|
m_passiveAiMgr.Release(pAi->m_handle);
|
|||
|
|
break;
|
|||
|
|
case atAiTypeAggressor:
|
|||
|
|
m_aggressorAiMgr.Release(pAi->m_handle);
|
|||
|
|
break;
|
|||
|
|
case atAiTypeRandomFlee:
|
|||
|
|
m_randomFleeAiMgr.Release(pAi->m_handle);
|
|||
|
|
break;
|
|||
|
|
case atAiTypeNeutrally:
|
|||
|
|
m_neutralAiMgr.Release(pAi->m_handle);
|
|||
|
|
break;
|
|||
|
|
case atAiTypeNPC:
|
|||
|
|
m_NPCAIMgr.Release(pAi->m_handle);
|
|||
|
|
break;
|
|||
|
|
case atAiTypePet:
|
|||
|
|
m_petAiMgr.Release(pAi->m_handle);
|
|||
|
|
break;
|
|||
|
|
case atAiTypeHero:
|
|||
|
|
m_heroAiMgr.Release(pAi->m_handle);
|
|||
|
|
break;
|
|||
|
|
case atAiTypeSpecial:
|
|||
|
|
m_SpecialAiMgr.Release(pAi->m_handle);
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|