Files
Sun1602/Server/Common/MonsterSummonParser.h
2022-10-26 12:25:11 +08:00

70 lines
2.4 KiB
C++

//-------------------------------------------------------------------------------------------------
// 2007. 01. 12
// 김창현 - shogen@webzen.co.kr
// 유료화 아이템 '몬스터 소환' 을 위한 스크립트 파서
//-------------------------------------------------------------------------------------------------
#pragma once
#include <SolarHashTable.h>
#include <Singleton.h>
#include <ServerStruct.h>
#include <SolarFileReader.h>
#include <ReliableRatioRandomizer.h>
#define MAX_MONSTER_SUMMON_IN_GROUP 30
struct MONSTER_SUMMON_INFO
{
CODETYPE MonsterCode;
double dSeed;
};
//-------------------------------------------------------------------------------------------------
// 몬스터 소환 정보
//-------------------------------------------------------------------------------------------------
struct MonsterSummonScriptInfo
{
WORD m_wMonsterGroupCode;
WORD m_wMonsterNum;
double m_dMaxRatio;
DWORD m_LiveTime;
BYTE m_LimitedLV;
MONSTER_SUMMON_INFO m_pMonster[MAX_MONSTER_SUMMON_IN_GROUP];
};
//-------------------------------------------------------------------------------------------------
// 몬스터 소환 Parser
//-------------------------------------------------------------------------------------------------
typedef util::SolarHashTable<MonsterSummonScriptInfo *> MONSTER_SUMMON_HASH;
typedef MONSTER_SUMMON_HASH::iterator MONSTER_SUMMON_ITER;
typedef util::SolarHashTable<ReliableRatioRandomizer<MAX_MONSTER_SUMMON_IN_GROUP> *> SUMMON_RATIO_HASH;
typedef SUMMON_RATIO_HASH::iterator SUMMON_RATIO_ITER;
class MonsterSummonParser : public util::Singleton<MonsterSummonParser>, public IParser
{
public:
MonsterSummonParser();
~MonsterSummonParser();
VOID Init( DWORD dwPoolSize );
VOID Release();
VOID Unload();
CODETYPE GetRandomMonsterCode( WORD GroupCode );
WORD GetMonsterSummonNum( WORD GroupCode );
DWORD GetMonsterLiveTime( WORD GroupCode ) const;
const MonsterSummonScriptInfo* GetMonsterSummonScriptInfo(WORD GroupCode) const;
private:
BOOL CheckValidity( MonsterSummonScriptInfo *pMonsterSummonInfo, double dAccumulation );
virtual BOOL _Load(BOOL bReload);
virtual BOOL LoadScript(eSCRIPT_CODE ScriptCode, BOOL bReload);
private:
MONSTER_SUMMON_HASH* m_pMonsterSummonHash;
char m_pszFileName[MAX_PATH];
SUMMON_RATIO_HASH* m_pRatioSelectHash; //< 최대 입력할 비율 개수 = MAX_MONSTER_SUMMON_IN_GROUP
};