#pragma once #include #include #include #include "ServerCommonDef.h" #include #define MAX_REGEN_DESC_LEN 32 #define MAX_GROUP_NUM 3 #define MAX_REGEN_MONSTER_KIND 7 struct REGEN_INFO { DWORD dwNum; // ¹øÈ£ MAPCODE MapCode; // ¸ÊÄÚµå DWORD dwFieldIndex; // Çʵå À妽º DWORD dwLocationID; // ¿µ¿ª ID WORD wMonsterType; // ¸ó½ºÅÍ Å¸ÀÔ BOOL bAllRegen; // ¸ðµÎ ¸®Á¨ BYTE byMoveAttitude; // À̵¿ ¼ºÇâ(ÆÐÆ®·Ñ, ½ºÆù Á¤ÁöÇü, ¿ÏÀü Á¤ÁöÇü...) DWORD dwRegenTime; // ¸®Á¨ ½Ã°£ float fRegenRate; // ¸®Á¨ È®·ü WORD wGroupID[MAX_GROUP_NUM]; // ±×·ì ID DWORD dwMonCode[MAX_REGEN_MONSTER_KIND]; // ¸ó½ºÅÍ ÄÚµå DWORD dwMaxNum[MAX_REGEN_MONSTER_KIND]; // ÃÖ´ë ¸ó½ºÅͼö BOOL bPosType; // À§Ä¡ Ãâ·Â Çü½Ä : 0=¹Ù¿îµå¹Ú½º¹æ½Ä, 1=x,y,z ¹æ½Ä WzVector pvPos; // À§Ä¡ BYTE bDistance; // °Å¸® BYTE bPattern; // ¸®Á¨ ÆÐÅÏ char szDesc[MAX_REGEN_DESC_LEN+1]; // ¼³¸í }; //DWORD64 ۰¡ ºÒÇÊ¿ä typedef STLX_HASH_MAP REGENINFO_HASH; typedef REGENINFO_HASH::iterator REGENINFO_HASH_ITR; class RegenParser : public util::Singleton, public IParser { public: RegenParser(); ~RegenParser(); VOID Init( DWORD dwPoolSize ); VOID Release(); VOID Reload(); inline REGENINFO_HASH_ITR BeginRegen() { return m_RegenHashTable.begin(); } inline REGENINFO_HASH_ITR EndRegen() { return m_RegenHashTable.end(); } template VOID ForeachRegen( _FN _func, _OBJ& _left ) { for_each( m_RegenHashTable.begin(), m_RegenHashTable.end(), bind1st(mem_fun(_func), _left) ); } VOID Unload(); virtual BOOL LoadScript( eSCRIPT_CODE ScriptCode, BOOL bReload ); BOOL _LoadPos( BOOL bReload ); BOOL _LoadRegen( BOOL bReload ); private: BOOL CheckValidity( REGEN_INFO* pRegenInfo ); REGENINFO_HASH m_RegenHashTable; TCHAR m_pszFileName[MAX_PATH]; ////////////////////////////////////////////////////////////////////////// // UNUSED_SECTION public: BOOL AddMonster(REGEN_INFO* pInfo, DWORD dwID); BOOL DelMonster(REGEN_INFO* pInfo, DWORD dwID); INT GetHashSize() { return (INT)m_RegenHashTable.size(); }; ////////////////////////////////////////////////////////////////////////// };