Files
Sun1602/SolarTrigger/TriggerInfoManager.cpp
T
2022-10-26 12:25:11 +08:00

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);
}