/* ========================================================================== * ÆÄ ÀÏ : NpcScript.h * ¸ñ Àû : * ÀÛ ¼º ÀÚ : ¹Ú°æÈñ * ÀÛ ¼º ÀÏ : 2007-04-25 * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "Lexer.h" struct sNPCList; struct sNPCRegen; struct sNpcFuncData; ////////////////////////////////////////////////////// /// Npc ÅäÅ« ŸÀÔ enum { /// Npc ´ëÈ­ eTOKEN_NPC_TELLING = 100, /// ±â´É eTOKEN_NPC_STORE, eTOKEN_NPC_WAREHOUSE, eTOKEN_NPC_DISJOINT, eTOKEN_NPC_GUILD, eTOKEN_NPC_FORTUNETAROT, eTOKEN_NPC_DEAL, eTOKEN_NPC_TAROT, eTOKEN_NPC_FORTUNESPREAD, eTOKEN_NPC_SPREAD, eTOKEN_NPC_THEME, eTOKEN_NPC_SKILLPREVIEW, eTOKEN_NPC_TEXT, eTOKEN_NPC_PAGE, /// ±âº» ´ë»ç eTOKEN_NPC_DEFAULT, /// Äù½ºÆ® eTOKEN_NPC_QUEST, eTOKEN_NPC_NEW, eTOKEN_NPC_PLAY, eTOKEN_NPC_COMPLETE, eTOKEN_NPC_ANSWER, eTOKEN_NPC_SOUND, eTOKEN_NPC_SCENE, eTOKEN_NPC_NEXT, eTOKEN_NPC_EVENTYES, eTOKEN_NPC_EVENTREWARD, eTOKEN_NPC_EVENTCOMPLETE, eTOKEN_NPC_MAX, }; /// Npc ¾îÈÖ ºÐ¼®±â class cNpcLexer : public cLexer { public: cNpcLexer( const char* buffer, unsigned int size ); }; class cParser; class cNPCScript { public: static cNPCScript* mpNPCScript; public: cNPCScript(); virtual ~cNPCScript(); bool Init(); bool StageInit( unsigned short mapNumber, unsigned char levelMode ); void Release(); /*--------------- NPC ¸®½ºÆ® ---------------*/ /// ½ºÅ©¸³Æ® ·Îµå bool LoadNPCList(); /// Á¤º¸ Á¶È¸ sNPCList* GetNPCList( unsigned long idx ); /// Á¤º¸ Á¦°Å void ReleaseNPCList(); /// ÇØ½¬¸Ê Æ÷ÀÎÅ͸¦ ³Ñ±è const tPointerHashMap* GetNPCListMap() { return (tPointerHashMap*)mpNPCListMap; } /*--------------- NPC ¸®Á¨ ¸®½ºÆ® ---------------*/ /// ½ºÅ©¸³Æ® ·Îµå bool LoadNPCRegen( unsigned short mapNumber, unsigned char levelMode, tPointerHashMap* pNPCRegenMap ); /// Á¤º¸ Á¶È¸ sNPCRegen* GetNPCRegen( unsigned char levelMode, unsigned long idx ); /// NPC ¸®Á¨ »ç¿ë ¸Þ¸ð¸® Á¦°Å void ReleaseNPCRegen(); /// ¸®Á¨ ¸®½ºÆ® ÇØ½¬¸Ê Æ÷ÀÎÅ͸¦ ³Ñ±è const tPointerHashMap* GetNPCRegenMap( unsigned char levelMode ) { return (tPointerHashMap*)mpNPCRegenMap->GetAt( levelMode ); } /*--------------- ¸ðµ¨ Á¤º¸ ---------------*/ /// ¸ðµ¨ Á¤º¸ tHashSet* GetNpcModelNumber( unsigned long map ) { return (tHashSet*)mpModelNumberMap->GetAt( map ); } /// ¸ðµ¨ Á¤º¸ Á¦°Å void ReleaseModelNumber(); /*--------------- »óÁ¡ Á¤º¸ ---------------*/ /// ½ºÅ©¸³Æ® ·Îµå bool LoadNPCStore(); /// ½ºÅ©¸³Æ® ¼¼ºÎÇ׸ñ ·Îµå bool LoadNpcStoreDetail( cParser& parser, sNpcFuncData* data ); /// Á¤º¸ Á¶È¸ bool IsHaveNpcFunc( unsigned long classIdx, unsigned int func ); sNpcFuncData* GetNpcFuncData( unsigned long classIdx ); private: typedef tPointerHashMap cPointHashMap; /// ¸ðµ¨ ¸®½ºÆ® typedef tPointerHashSet cHashSet; /// NPC ¸®½ºÆ® //typedef tPointerHashMap cNPCListMap; cPointHashMap* mpNPCListMap; /// NPC ¸®½ºÆ® //typedef tPointerHashMap cNPCRegenMap; cPointHashMap* mpNPCRegenMap; /// ¸Êº° ¸ðµ¨ ³Ñ¹ö ÇØ½¬¸Ê // typedef tPointerHashMap cModelNumberMap; cPointHashMap* mpModelNumberMap; /// npc Á¾·ùº° ±â´É(»óÁ¡,â°í...)eNpcFunc //typedef tHashMap cHashMap; //cHashMap* mpNpcStore; /// npc Á¾·ùº° ±â´É(»óÁ¡,â°í...) (sNpcFuncData) typedef tPointerHashMap cNpcFuncMap; cNpcFuncMap* mpNpcFuncMap; }; #define NPCSCRIPT cNPCScript::mpNPCScript