104 lines
2.8 KiB
C++
104 lines
2.8 KiB
C++
|
|
#include "StdAfx.h"
|
|||
|
|
#include "DNNpcObject.h"
|
|||
|
|
#include "DNQuest.h"
|
|||
|
|
#include "DNQuestManager.h"
|
|||
|
|
#include "DNUserSession.h"
|
|||
|
|
#include "DNUserSessionManager.h"
|
|||
|
|
#include "VarArg.h"
|
|||
|
|
|
|||
|
|
CDNNpcObject::CDNNpcObject(void)
|
|||
|
|
{
|
|||
|
|
m_NpcType = ActorNpc;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
CDNNpcObject::~CDNNpcObject(void)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CDNNpcObject::EnterWorld()
|
|||
|
|
{
|
|||
|
|
return CDNBaseObject::EnterWorld();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CDNNpcObject::LeaveWorld()
|
|||
|
|
{
|
|||
|
|
return CDNBaseObject::LeaveWorld();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CDNNpcObject::InitObject(WCHAR *pName, UINT nUID, int nChannelID, int nMapIndex, TPosition *pCurPos)
|
|||
|
|
{
|
|||
|
|
return CDNBaseObject::InitObject(pName, nUID, nChannelID, nMapIndex, pCurPos);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CDNNpcObject::FinalObject()
|
|||
|
|
{
|
|||
|
|
return CDNBaseObject::FinalObject();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int CDNNpcObject::FieldProcess(CDNBaseObject *pSender, USHORT wMsg, TBaseData *pSenderData, TParamData *pParamData)
|
|||
|
|
{
|
|||
|
|
return CDNBaseObject::FieldProcess(pSender, wMsg, pSenderData, pParamData);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void CDNNpcObject::DoUpdate(DWORD CurTick)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CDNNpcObject::CreateNpc(TNpcData *pNpcData, char *pName, UINT nUID, int nChannelID, int nMapIndex, TPosition *pCurPos, float fRotate)
|
|||
|
|
{
|
|||
|
|
memset(&m_NpcData, 0, sizeof(TNpcData));
|
|||
|
|
memcpy(&m_NpcData, pNpcData, sizeof(TNpcData));
|
|||
|
|
|
|||
|
|
InitObject(NULL, nUID, nChannelID, nMapIndex, pCurPos);
|
|||
|
|
|
|||
|
|
MultiByteToWideChar(CP_ACP, 0, pName, -1, m_BaseData.wszName, NAMELENMAX);
|
|||
|
|
|
|||
|
|
m_BaseData.fRotate = fRotate;
|
|||
|
|
|
|||
|
|
CDnNpc::Create(pNpcData);
|
|||
|
|
|
|||
|
|
EnterWorld();
|
|||
|
|
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool CDNNpcObject::Talk(CDNUserBase* pUserBase, UINT nNpcUniqueID, IN std::wstring& wszIndex, IN std::wstring& wszTarget)
|
|||
|
|
{
|
|||
|
|
CDNUserSession* pUserSession = static_cast<CDNUserSession*>(pUserBase);
|
|||
|
|
|
|||
|
|
std::transform(wszTarget.begin(), wszTarget.end(), wszTarget.begin(), towlower);
|
|||
|
|
TALK_MAP_IT iter = m_TalkMap.find(wszTarget);
|
|||
|
|
|
|||
|
|
// npc <20><>ũ<EFBFBD><C5A9> <20>ƴ϶<C6B4><CFB6><EFBFBD>
|
|||
|
|
if ( iter == m_TalkMap.end() )
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20>ѹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
|||
|
|
CDNQuest* pQuest = g_pQuestManager->GetQuest(wszTarget);
|
|||
|
|
|
|||
|
|
if ( !pQuest )
|
|||
|
|
{
|
|||
|
|
g_Log.Log(LogType::_ERROR, pUserSession, L"[CS_NPCTALK] (5-2) UID:%d, PAK:%d/%s/%s\n", pUserSession->GetObjectID(), nNpcUniqueID, wszIndex.c_str(), wszIndex.c_str());
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
pUserSession->SetCalledNpcResponse(false, false);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ ontalk <20><><EFBFBD><EFBFBD>
|
|||
|
|
return pQuest->OnTalk(pUserSession->GetObjectID(), m_BaseData.nObjectID, wszIndex, wszTarget);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
pUserSession->SetCalledNpcResponse(false, false);
|
|||
|
|
|
|||
|
|
TALK_MAP_IT aIt = m_TalkMap.find(wszTarget);
|
|||
|
|
if (m_TalkMap.end() == aIt) {
|
|||
|
|
USES_CONVERSION;
|
|||
|
|
DN_ASSERT(0, CVarArgA<128>("Invalid! -> m_TalkMap.end() == aIt : NpcUniqueID(%d), wszIndex(%s), wszTarget(%s)", nNpcUniqueID, CW2CT(wszIndex.c_str()), CW2CT(wszTarget.c_str())));
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
CDNTalk* pTalk = aIt->second;
|
|||
|
|
DN_ASSERT(NULL != pTalk, CVarArgA<128>("Invalid! -> NULL == pTalk"));
|
|||
|
|
|
|||
|
|
return pTalk->OnTalk(pUserSession->GetObjectID(), m_BaseData.nObjectID, wszIndex, wszTarget);
|
|||
|
|
}
|