/* ========================================================================== * ÆÄ ÀÏ : SkillScript.h * ¸ñ Àû : * ÀÛ ¼º ÀÚ : ¹Ú°æÈñ * ÀÛ ¼º ÀÏ : 2007-06-07 * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "./common/Skill_Common.h" #include "Lexer.h" #include "Parser.h" class cSkillTree { public: cSkillTree() { mIconCount = 0; mIconList = 0; } ~cSkillTree() { SAFE_DELETE_ARRAY(mIconList); } struct sTreeIcon { unsigned int skillIdx; unsigned int uiPosX; unsigned int uiPosY; }; cString mImageName; unsigned int mIconCount; sTreeIcon* mIconList; }; class cSkillTreeLexer : public cLexer { public: cSkillTreeLexer( const char* buffer, unsigned int size ); enum { /// ±ÛÀÚ»ö eTOKEN_SKILLTREE = 100, eTOKEN_IMAGEFILE, eTOKEN_JOBIDX, eTOKEN_SKILLPOS, }; }; typedef tPointerHashMap cSkillHashMap; class cSkillScript { public: static cSkillScript* mpSkillScript; public: /// »ý¼º ¼Ò¸ê cSkillScript(void); ~cSkillScript(void){} /// ÃʱâÈ­ bool Init(); /// Àüü »ç¿ë ¸Þ¸ð¸® Á¦°Å void Release(); /// ½ºÅ³ Á¤º¸¸¦ ¾Ë·ÁÁÜ sPlayerSkillBaseInfo* GetPlayerSkillInfo( unsigned long skillNumber ); sMonsterSkillScript* GetMonsterSkillInfo( unsigned long monsterClassIdx, eMONSTERATTACK_TYPE attackType ); cSkillHashMap* GetMonsterSkillTotalMap(); void* GetMonsterBaseSkillArr( unsigned long monsterClassIdx ); /// È¿°ú Á¤º¸¸¦ ¾Ë·ÁÁÜ sInfluenceScript* GetInfluenceInfo( unsigned long influenceClassIdx ); /// ¹ßµ¿ È¿°ú Á¤º¸ sActInfluenceScript* GetActInfluenceInfo( unsigned long actIdx ); bool IsCastSkill( unsigned long skillIdx, unsigned char skillStep ); /// Á÷¾÷index¿Í Ç÷¹À̾î Á÷¾÷À¸·Î »ç¿ë °¡´ÉÇÑÁö üũ bool IsPlayerSkillJob( unsigned long skillJobIdx, unsigned long playerJob ); tArray* GetFreeSkill( unsigned long jobstep ) { return (tArray*)mFreeSkillMap.GetAt(jobstep); } tPointerHashMap* GetPlayerSkillInfoMap() { return &mPlayerSkillInfoMap; } /// ½ºÅ³À» »ç¿ëÇÒ¼ö ÀÖ´Â Á÷¾÷ ¹è¿­À» ¾ò¾î¿È tArray* GetPlayerSkillJob( unsigned long jobIdx ); /// È¿°ú ·Îµå bool InfluenceLoad(); bool ActInfluenctLoad(); cSkillTree* GetSkillTree( unsigned long jobIdx ); private: /// ½ºÅ³ Á¤º¸ ·Îµå. bool PlayerSkillScriptLoad(); bool MonsterSkillScriptLoad(); /// ½ºÅ³ ´Ü°è ·Îµå. bool PlayerSkillStepLoad(); /// ½ºÅ³ ½Àµæ/»ç¿ë Á÷¾÷ÄÚµå ·Îµå bool PlayerSkillJobScriptLoad(); void PlayerFreeSkillList(); /// ½ºÅ³ ½Àµæ npc Á¤º¸ bool LoadSkillTree( const cString& pathName ); bool LoadTree( cParser& parser, cSkillTree* pTree ); private: typedef tArray cArray; ///Ç÷¹À̾ųÁ¤º¸Å×À̺í <½ºÅ©¸³Æ® »óÀÇ ½ºÅ³ Index, ½ºÅ³ Á¤º¸> ///typedef tPointerHashMap cPlayerSkillInfoMap; cSkillHashMap mPlayerSkillInfoMap; ///¸ó½ºÅͽºÅ³Á¤º¸Å×À̺í <½ºÅ©¸³Æ® »óÀÇ ½ºÅ³ Index, ½ºÅ³ Á¤º¸> ///typedef tPointerHashMap> cMonsterSkillInfoMap; // cSkillHashMap mMonsterSkillInfoMap; cSkillHashMap mMonsterBaseSkillMap; cSkillHashMap mMonsterSkillTotalMap; /// ½ºÅ³ ½Àµæ/»ç¿ë Á÷¾÷ÄÚµå ///typedef tPointerHashMap*> cSkillJobMap; cSkillHashMap mSkillJobMap; /// Ç÷¹À̾î È¿°ú Á¤º¸ ///typedef tPointerHashMap cPlayerInfluenceMap; cSkillHashMap mInfluenceMap; ///typedef tPointerHashMap cPlayerActInfluenceMap; cSkillHashMap mActInfluenceMap; cSkillHashMap mFreeSkillMap; typedef tPointerHashMap cSkillTreeMap; cSkillTreeMap mSkillTreeMap; }; inline cSkillTree* cSkillScript::GetSkillTree( unsigned long jobIdx ) { return (cSkillTree*)mSkillTreeMap.GetAt( jobIdx ); } #define SKILLSCRIPT cSkillScript::mpSkillScript