119 lines
3.0 KiB
C++
119 lines
3.0 KiB
C++
#include "StdAfx.h"
|
|
#include "./TriggerInfoManager.h"
|
|
#include "TriggerGroupInfo.h"
|
|
|
|
TriggerInfoManager::TriggerInfoManager()
|
|
{
|
|
}
|
|
|
|
TriggerInfoManager::~TriggerInfoManager()
|
|
{
|
|
Release();
|
|
}
|
|
|
|
void TriggerInfoManager::Release()
|
|
{
|
|
FOREACH_CONTAINER(const TRIGGER_GROUPINFO_MAP::value_type& group_node,
|
|
trigger_group_info_table_, TRIGGER_GROUPINFO_MAP)
|
|
{
|
|
TriggerGroupInfo* trigger_group_info = group_node.second;
|
|
if (trigger_group_info != NULL) {
|
|
TAllocDelete(TriggerGroupInfo, trigger_group_info);
|
|
};
|
|
}
|
|
|
|
trigger_group_info_table_.clear();
|
|
}
|
|
|
|
BOOL TriggerInfoManager::InsertTriggerGroupInfo(TriggerGroupInfo* trigger_group_info)
|
|
{
|
|
if (trigger_group_info == NULL) {
|
|
return false;
|
|
};
|
|
const TCHAR* group_name = trigger_group_info->GroupName();
|
|
if (group_name == NULL || this->FindTriggerGruopInfo(group_name)) {
|
|
return false;
|
|
};
|
|
trigger_group_info_table_.insert(\
|
|
TRIGGER_GROUPINFO_MAP::value_type(group_name, trigger_group_info));
|
|
return true;
|
|
}
|
|
|
|
TriggerGroupInfo*
|
|
TriggerInfoManager::FindTriggerGruopInfo(const TCHAR* group_name) const
|
|
{
|
|
if (group_name == NULL) {
|
|
return NULL;
|
|
};
|
|
TRIGGER_GROUPINFO_MAP::const_iterator it = trigger_group_info_table_.find(group_name);
|
|
if (it != trigger_group_info_table_.end())
|
|
{
|
|
TriggerGroupInfo* trigger_group_info = it->second;
|
|
return trigger_group_info;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void TriggerInfoManager::LoadGroupInfos(CWzArchive& IN archive,
|
|
IEventRegisterForNpcKillByTrigger* event_register)
|
|
{
|
|
__TOUCHED(event_register);
|
|
this->CheckChunk(archive);
|
|
|
|
// ±×·ìÀÇ °³¼ö
|
|
WORD wNumberOfGroups = 0;
|
|
archive >> wNumberOfGroups;
|
|
//#ifndef __WAVERIX_UPDATE_ENGINE__
|
|
INT iLastIDGroupIndex = 0;
|
|
if (159 < archive.GetVersion())
|
|
{
|
|
archive >> iLastIDGroupIndex;
|
|
}
|
|
|
|
#if defined(_SERVER)
|
|
event_register_ = event_register;
|
|
for (WORD idx = 0; idx < wNumberOfGroups; ++idx)
|
|
{
|
|
TriggerGroupInfo* trigger_group_info = TAllocNew(TriggerGroupInfo);
|
|
trigger_group_info->Load(archive, this);
|
|
if (InsertTriggerGroupInfo(trigger_group_info) == false) {
|
|
TAllocDelete(TriggerGroupInfo, trigger_group_info);
|
|
};
|
|
}
|
|
event_register_ = NULL;
|
|
#else
|
|
for (WORD idx = 0; idx < wNumberOfGroups; ++idx)
|
|
{
|
|
TriggerGroupInfo* trigger_group_info = TAllocNew(TriggerGroupInfo);
|
|
trigger_group_info->Load(archive);
|
|
if (InsertTriggerGroupInfo(trigger_group_info) == false) {
|
|
TAllocDelete(TriggerGroupInfo, trigger_group_info);
|
|
};
|
|
}
|
|
#endif
|
|
}
|
|
|
|
|
|
void
|
|
TriggerInfoManager::CheckChunk(CWzArchive& IN archive)
|
|
{
|
|
St_ChunkInfo chunk_info;
|
|
if (archive.GetVersion() < 145) {
|
|
return;
|
|
};
|
|
|
|
BOOL bTriggerChunk = false;
|
|
while(true)
|
|
{
|
|
chunk_info = archive.ReadChunk();
|
|
if (chunk_info.m_nID == 0x1786)
|
|
{
|
|
bTriggerChunk = true;
|
|
break;
|
|
}
|
|
archive.SkipCurrentChunk(chunk_info);
|
|
}
|
|
ASSERT(bTriggerChunk);
|
|
}
|
|
|