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

92 lines
3.3 KiB
C++

#ifndef _SOLARTRIGGER_TRIGGERINFOMANAGER_H
#define _SOLARTRIGGER_TRIGGERINFOMANAGER_H
#pragma once
/************************************************************************/
/* */
/* TriggerGroupInfo를 관리하는 클래스 */
/* */
/* */
/* */
/* */
/* */
/* */
/************************************************************************/
#include <chunk_stl.h>
#include <ProgramCommon/wzarchive.h>
//==================================================================================================
class TriggerGroupInfo;
#if defined(_SERVER)
class UnitRegenInfoManager;
class IEventRegisterForNpcKillByTrigger // 좀더 일반화 시켜야 하는데...
{
public:
virtual ~IEventRegisterForNpcKillByTrigger() {}
virtual BOOL RegisterNpcKillInfo(const MONSTERCODE npc_code) = 0;
virtual BOOL RegisterUnitKillInfo(const REGENID unit_id) = 0;
// Unit ID 등록은 WUT, WMO 분리 상의 문제로 임시공간이 요구되므로 이에 대한 초기화 작업이 요구된다.
virtual void PrepareRegistering() = 0;
//add spec. by __NA001277_090205_NAVI_SYSTEM_SUPPORT__
virtual void BuildRegisterInfo(MAPCODE mapCode, FIELDCODE fieldCode,
UnitRegenInfoManager* const pUnitRegenInfoManager) = 0;
};
#else
class IEventRegisterForNpcKillByTrigger;
#endif
//==================================================================================================
//==================================================================================================
class TriggerInfoManager
{
public:
typedef STLX_MAP<STLX_STRING, TriggerGroupInfo*> TRIGGER_GROUPINFO_MAP;
TriggerInfoManager();
~TriggerInfoManager();
BOOL InsertTriggerGroupInfo(TriggerGroupInfo* pGroupInfo);
TriggerGroupInfo* FindTriggerGruopInfo(const TCHAR* pszGroupName) const;
void Release();
void LoadGroupInfos(CWzArchive& IN archive,
IEventRegisterForNpcKillByTrigger* event_register = NULL);
#if defined(_SERVER)
bool NotifyTriggerRegisterNpcKill(const MONSTERCODE npc_code);
bool NotifyTriggerRegisterUnitKill(const REGENID unit_id);
#endif
private:
void CheckChunk(CWzArchive& IN archive);
TRIGGER_GROUPINFO_MAP trigger_group_info_table_;
#if defined(_SERVER)
IEventRegisterForNpcKillByTrigger* event_register_;
#endif
__DISABLE_COPY(TriggerInfoManager);
};
#if defined(_SERVER)
inline bool TriggerInfoManager::NotifyTriggerRegisterNpcKill(const MONSTERCODE npc_code)
{
if (event_register_) {
return (event_register_->RegisterNpcKillInfo(npc_code) != false);
};
return true;
}
inline bool TriggerInfoManager::NotifyTriggerRegisterUnitKill(const REGENID unit_id)
{
if (event_register_) {
return (event_register_->RegisterUnitKillInfo(unit_id) != false);
};
return true;
}
#endif
#endif //_SOLARTRIGGER_TRIGGERINFOMANAGER_H