#include "stdafx.h" #include "GameResourceManager.h" cGameFileLexer::cGameFileLexer( const char* pbuffer, unsigned int size ) : cLexer( pbuffer, size ) { BindKeyword( "jobinfo", eTOKEN_JOBINFO ); BindKeyword( "jobtree", eTOKEN_JOBTREE ); BindKeyword( "hair", eTOKEN_HAIR ); BindKeyword( "haircolor", eTOKEN_HAIRCOLOR ); } ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// cGameResourceManager* cGameResourceManager::mpSingleton = 0; cGameResourceManager::cGameResourceManager() { mpSingleton = this; } cGameResourceManager::~cGameResourceManager() { { sMonsterScript* pInfo = NULL; cPointerHashMap::cIterator i = mMonsterMap.Begin(); cPointerHashMap::cIterator end = mMonsterMap.End(); for( ; i != end; ++i ) { pInfo = (sMonsterScript*)((*i).mSecond); if( pInfo ) { /// ¸ó½ºÅÍ Á¤º¸ Á¦°Å delete pInfo; pInfo = NULL; } } mMonsterMap.Clear(); } cPointerHashMap::cIterator iter; if( mPlayerSkillInfoMap.IsEmpty() == false ) { for(iter = mPlayerSkillInfoMap.Begin() ; iter != mPlayerSkillInfoMap.End() ; ++iter) { delete (sPlayerSkillBaseInfo*)(*iter).mSecond; } mPlayerSkillInfoMap.Clear(); } if( mStageChangePosMap.IsEmpty() == false ) { for(iter = mStageChangePosMap.Begin(); iter != mStageChangePosMap.End(); ++iter) { delete (sStageChangePos*)(*iter).mSecond; } mStageChangePosMap.Clear(); } /// cPointerHashMap::cIterator i = mMapInfoMap.Begin(); cPointerHashMap::cIterator end = mMapInfoMap.End(); i = mMapInfoMap.Begin(); end = mMapInfoMap.End(); for( ; i != end; ++i ) { cPointerHashMap* pMap = (cPointerHashMap*)(*i).mSecond; if( pMap != NULL ) { cPointerHashMap::cIterator d; for( d = pMap->Begin() ; d != pMap->End() ; ++d ) { sMapInfo* p = (sMapInfo*)(*d).mSecond; SAFE_DELETE(p); } pMap->Clear(); SAFE_DELETE( pMap ); } } mMapInfoMap.Clear(); mpSingleton = 0; } bool cGameResourceManager::Init() { if( LoadMapInfo() == false ) return false; if( StageChangePosScriptLoad() == false ) return false; if( LoadCharacterBaseHairFileInfo() == false ) return false; if( LoadFaceEmotionInfo() == false ) return false; if( LoadMonsterList() == false ) return false; if( PlayerSkillScriptLoad() == false ) return false; if( PlayerSkillStepLoad() == false ) return false; return true; } bool cGameResourceManager::LoadMapInfo() { cFileLoader loader; cString pathName = "./Script/Resource/MapData.txt"; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load MapData.txt" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), " \t\r\n", pathName.Cstr() ); cString str; sMapInfo* pInfo = 0; while( tokenizer.IsEnd() == false ) { pInfo = new sMapInfo; // Map number if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pInfo->mapNum = str.ToInt(); if( pInfo->mapNum > 999 ) { goto ERR; } cPointerHashMap* pModeMap = (cPointerHashMap*)mMapInfoMap.GetAt( pInfo->mapNum ); if( pModeMap == NULL ) { pModeMap = new cPointerHashMap; mMapInfoMap.Insert( pInfo->mapNum, pModeMap ); } /// Map Æú´õ¹øÈ£ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pInfo->folderIdx = str.ToInt(); /// ÇѰ³ÀÇ ¸ÊŸÀÔ¿¡ ¸ðµåº°·Î ´Ù¸¥ ¸Êµ¥ÀÌÅ͸¦ Àоî¿À´Â°æ¿ì°¡ ÀÖ´Ù¸é /// °ü·ÃºÎºÐÀ» ´Ùó¸® ÇÑÈÄ¿¡ À̺κÐÀ» »©¾ßÇÑ´Ù. /// ¡Ø ¸ðµå°¡ ³ª´µ´Â°ÍÀº ¸®¼Ò½º¸¦ ÀçȰ¿ëÇÏ°í ¸®Á¨Á¤º¸¸¸ ¹Ù²Ù±â À§ÇÔÀÌ´Ù /// ÇöÀç´Â ¸ðµåº° ´Ù¸¥¸Ê ¼³Á¤µÈ°æ¿ì´Â ¿ÀŸÀÏ °¡´É¼ºÀÌ ³ô´Ù if( pModeMap->GetSize() != 0 ) { cPointerHashMap::cIterator b = pModeMap->Begin(); sMapInfo* pMapInfo = (sMapInfo*)(*b).mSecond; if( pMapInfo == NULL ) goto ERR; if( pMapInfo->folderIdx != pInfo->folderIdx ) goto ERR; } if( tokenizer.GetNext( &str ) == false ) { goto ERR; } if( tokenizer.GetNext( &str ) == false ) { goto ERR; } if( tokenizer.GetNext( &str ) == false ) { goto ERR; } if( tokenizer.GetNext( &str ) == false ) { goto ERR; } /// ³­À̵µ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pInfo->mapMode = (unsigned char)str.ToInt(); /// ÃÖ¼Ò·¹º§ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pInfo->minLevel = (unsigned char)str.ToInt(); /// ÃÖ´ë·¹º§ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pInfo->maxLevel = (unsigned char)str.ToInt(); /// ÃÖ´ëÀοø if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pInfo->maxPlayer = (unsigned char)str.ToInt(); /// ÇÊ¿ä¾ÆÀÌÅÛ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pInfo->itemIdx = str.ToInt(); if( pModeMap->Insert( pInfo->mapMode, pInfo ) == false ) { assert(0); goto ERR; } } return true; ERR: delete pInfo; return false; } bool cGameResourceManager::LoadCharacterBaseHairFileInfo() { mHairCnt = 0; mHairColorCnt = 0; /// ÆÄÀÏ ¿­±â cFileLoader loader; if( loader.Open( "./Script/Resource/CharacterHairFile.txt", true ) == false ) { return false; } cToken token; cGameFileLexer lexer( loader.GetBufferPtr(), loader.GetSize() ); cParser parser( &lexer, "./Script/Resource/CharacterHairFile.txt" ); while( lexer.IsEnd() == false ) { lexer.GetNextToken( &token ); switch( token.mType ) { case eTOKEN_ERROR: return false; case eTOKEN_NULL: continue; case eTOKEN_HAIR: { if( LoadHair(parser) == false ) { assert(0); return false; } } break; case eTOKEN_HAIRCOLOR: { mHairColorCnt = parser.ParseInt(); if( LoadHairColor(parser) == false ) { assert(0); return false; } } break; default: assert( 0 && "invalid token" ); return false; } } return true; } bool cGameResourceManager::LoadHair( cParser& parser ) { if( parser.ExpectTokenString( "{" ) == false ) { assert( 0 && "wrong script" ); return false; } cToken token; cLexer* lexer = parser.GetLexer(); unsigned int count = eRACE_MAX * eGENDER_MAX; while( lexer->GetNextToken( &token ) ) { if( token == "}" ) { break; } switch( token.mType ) { case eTOKEN_ERROR: return false; case eTOKEN_NULL: continue; case eTOKEN_INT: { token.ToInt(); for( unsigned int i=0; iGetNextToken( &token ) ) { if( token == "}" ) { break; } switch( token.mType ) { case eTOKEN_ERROR: return false; case eTOKEN_NULL: continue; case eTOKEN_INT: { // Ű »ý¼º token.ToInt(); parser.ParseInt(); for( unsigned int i=0; imPosIdx = str.ToInt(); /// if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pChangePos->mFileName = str; /// ¸Ê¹øÈ£ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pChangePos->mMapNumber = (unsigned char)str.ToInt(); /// ÁÂÇ¥X if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pChangePos->mPosX = str.ToFloat(); /// ÁÂÇ¥Y if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pChangePos->mPosY = str.ToFloat(); /// ¹üÀ§ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pChangePos->mRange = str.ToFloat(); /// ¸ñÀûÁö¸Êidx if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pChangePos->mTargetPosIdx = str.ToInt(); /// ȸÀü °¢µµ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pChangePos->mRotAngle = S_ToRadian( str.ToFloat() ); /// ÀÚµ¿»ý¼º À¯¹« if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pChangePos->mFirstRegen = str.ToInt() == 1; /// Æ÷Å»¸í Ãâ·Â ³ôÀ̰ª if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pChangePos->mNameHeight = str.ToFloat(); /// º¸°ü¼Ò ÀúÀå if( mStageChangePosMap.Insert( pChangePos->mPosIdx, pChangePos ) == false ) { assert(0); goto ERR; } } begin = mStageChangePosMap.Begin(); while( begin != mStageChangePosMap.End() ) { pChangePos = (sStageChangePos*)((*begin).mSecond); ++begin; if( pChangePos == 0 ) { assert(0); goto ERR; } pChangePos->mTargetInfo = (sStageChangePos*)mStageChangePosMap.GetAt( pChangePos->mTargetPosIdx ); if( pChangePos->mTargetInfo != NULL ) { /// ÅÚ·¹Æ÷Æ®Æ÷Å»·Î »ý¼ºµÇ´Âµ¥ ¸Ê¹øÈ£°¡Æ²¸®¸é À̵¿ÁÂÇ¥°¡ Ʋ¾îÁü if( pChangePos->mFirstRegen == false ) { if( pChangePos->mMapNumber != pChangePos->mTargetInfo->mMapNumber ) { assert(0); goto ERR; } } } } return true; ERR: delete pChangePos; return false; } bool cGameResourceManager::LoadMonsterList() { cFileLoader loader; cString pathName = "./Script/Resource/MonsterList.txt"; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load MonsterList.txt" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), " \t\r\n", pathName.Cstr() ); cString str; unsigned long nameIdx = 0; unsigned long jobnameIdx = 0; sMonsterScript* pList = NULL; while( tokenizer.IsEnd() == false ) { pList = new sMonsterScript; //¸ó½ºÅÍ Á¾·ù index if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mMonsterClassIdx = str.ToInt(); /// ¸ó½ºÅÍ À̸§Idx if( tokenizer.GetNext( &str ) == false ) { goto ERR; } nameIdx = str.ToInt(); /// ¸ó½ºÅÍ Á÷¾÷À̸§Idx if( tokenizer.GetNext( &str ) == false ) { goto ERR; } jobnameIdx = str.ToInt(); /// ¸ó½ºÅÍ À̸§ _stprintf( pList->mName, _T( "" ) ); /// kfmÆÄÀÏidx if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mKfmIdx = str.ToInt(); /// À̸§ ³ôÀ̰ª if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mNameHeight = str.ToInt(); /// if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mKind = (unsigned char)str.ToInt(); /// ¼Ó¼º if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mType = (unsigned char)str.ToInt(); /// ·¹º§ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mLevel = (unsigned char)str.ToInt(); /// HP if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mMaxHp = str.ToInt(); /// MP if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mMaxMp = str.ToInt(); /// expȹµæ·® if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mExp = str.ToInt(); /// sxpȹµæ·® if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mSxp = str.ToInt(); /// ¹°¸®¹æ¾î if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mDef = (unsigned short)str.ToInt(); /// ¸¶¹ý¹æ¾î if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mMdef = (unsigned short)str.ToInt(); /// ¸íÁß¼öÄ¡ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mHit = str.ToInt(); /// ȸÇÇÀ² if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mAvoid = (unsigned short)str.ToInt(); /// ½Ã¾ß¹üÀ§ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mSeekRange = str.ToInt(); /// ºñÁß if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mImportance = (unsigned char)str.ToInt(); /// Å©±â if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mMonsterScale = str.ToFloat(); /// ¿¬ÃâÀÌÆåÆ® Å©±â if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mEffectScale = str.ToFloat(); /// ÇÇÇØ¹üÀ§ - º¸°£ »çÀÌÁî if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mMonsterFixSize = str.ToFloat(); /// Çൿ¹üÀ§ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mFreeMoveRange = str.ToInt(); /// Çൿ(Á¤Áö) if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mActionStopRatio = (unsigned short)str.ToInt(); /// Çൿ(°È±â) if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mActionWalkRatio = (unsigned short)str.ToInt(); /// Çൿ(¶Ù±â) if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mActionRunRatio = (unsigned short)str.ToInt(); /// Á¤Áö½Ã°£ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mActionStopTime = str.ToInt(); /// À̵¿¼Óµµ(°È±â) if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mActionWalkSpd = str.ToInt(); /// À̵¿¼Óµµ(¶Ù±â,µµ¸Á) if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mActionRunSpd = str.ToInt(); /// ¼±°ø¿©ºÎ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mIsPrecedeAttack = str.ToInt() == 1 ? true : false; /// º¯½ÅÀÎ½Ä if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mIsChgMonCheck = str.ToInt() == 1 ? true : false; /// ÃßÀû½Ã°£ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mFollowTime = str.ToInt(); /// ÃßÀû°Å¸® if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mFollowRange = str.ToInt(); /// µµ¸ÁÁ¶°Ç if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mEscapeType = (unsigned char)str.ToInt(); /// µµ¸ÁÈ®·ü if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mEscapePer = (unsigned char)str.ToInt(); /// ȸº¹¿©ºÎ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mIsRecovery = str.ToInt() == 1 ? true : false; /// ȸº¹½ÃÀ۽ð£ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pList->mRecoveryTime = str.ToInt(); /// ÇØ½¬¿¡ ¸ó½ºÅÍ º°·Î ±â·Ï if( mMonsterMap.Insert( pList->mMonsterClassIdx, pList ) == false ) { assert(0); goto ERR; } } return true; ERR: delete pList; return false; } bool cGameResourceManager::PlayerSkillScriptLoad() { cFileLoader loader; cString pathName = "./Script/resource/SkillList_PC.txt"; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load SkillList_PC.txt" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), " \t\r\n", pathName.Cstr() ); cString str; sPlayerSkillBaseInfo* pSkillInfo = 0; while( tokenizer.IsEnd() == false ) { pSkillInfo = new sPlayerSkillBaseInfo; /// ½ºÅ³ Á¾·ùIdx if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mSkillIdx = str.ToInt(); /// ½ºÅ³ À̸§Idx if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mNameIdx = str.ToInt(); /// ½ºÅ³ ¾ÆÀÌÄÜIdx if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mIconIdx = str.ToInt(); /// ½Àµæ,»ç¿ë Á¾Á· if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mRace = static_cast(str.ToInt()); /// Á÷¾÷ ´Ü°è if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mJobStep = static_cast(str.ToInt()); /// ½ºÅ³½ÀµæÁ¶°Ç - ÃÑ»ç¿ë SP¾ç if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mBeforeReqSP = str.ToInt(); /// ½ºÅ³»ç¿ëÁ¶°Ç - ÇÊ¿äÀåºñ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mUseEquipment = static_cast(str.ToInt()); /// ½ºÅ³»ç¿ëÁ¶°Ç - ij¸¯ÅÍ»óÅ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mUseState = static_cast(str.ToInt()); /// ½ºÅ³»ç¿ëÁ¶°Ç - ij¸¯ÅÍ»óÅ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mUseItem = str.ToInt(); /// ºÐ·ù - ½ºÅ³ »ç¿ë ÇüÅ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mType = static_cast(str.ToInt()); /// ½ºÅ³À¯Çü - ¼Ó¼º if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mAttributeType = static_cast(str.ToInt()); /// ½ÃÀüÀ¯Çü if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mShotType = static_cast(str.ToInt()); /// ¹üÀ§¹æ½Ä - ½ºÅ³ »ç¿ë½Ã ±âÁØÀÇ ¹üÀ§ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mBoundType = static_cast(str.ToInt()); /// È¿°úÀû¿ëŸ°Ù - ¹üÀ§¾È¿¡¼­ È¿°ú¸¦ Àû¿ë¹Þ´Â ´ë»ó if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mApplyType = static_cast(str.ToInt()); /// ½ºÅ³À¯Çü - »çÁ¤°Å¸® if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mRangeType = static_cast(str.ToInt()); /// ±Û·Î¹úÄðŸÀÓ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mIsGlobalCoolTime = str.ToInt() == 0 ? false : true; /// ±×·ìÄðŸÀÓ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pSkillInfo->mGroupCoolTimeIdx = str.ToInt(); /// º¸°ü¼Ò ÀúÀå if( mPlayerSkillInfoMap.Insert( pSkillInfo->mSkillIdx, pSkillInfo ) == false ) { assert(0); goto ERR; } } return true; ERR: delete pSkillInfo; return false; } bool cGameResourceManager::PlayerSkillStepLoad() { cFileLoader loader; cString pathName = "./Script/resource/SkillList_Sub.txt"; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load SkillList_Sub.txt" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), " \t\r\n", pathName.Cstr() ); cString str; unsigned long skillIdx = ULONG_MAX; unsigned char step; sPlayerSkillStepInfo stepArray[50] = {0,}; unsigned char stepCount = 0; unsigned long currentSkillIdx = ULONG_MAX; while( tokenizer.IsEnd() == false ) { /// ½ºÅ³ Á¾·ùIdx if( tokenizer.GetNext( &str ) == false ) { return false; } skillIdx = str.ToInt(); if( currentSkillIdx != ULONG_MAX && (currentSkillIdx != skillIdx) ) { /// Áö±Ý±îÁö ½×ÀÎ Á¤º¸¸¦ ¼ÂÆÃÇÑ´Ù. assert(stepCount); assert(stepCount<50); sPlayerSkillBaseInfo* pSkillInfo = GetPlayerSkillInfo( currentSkillIdx ); if( pSkillInfo == 0 ) { assert(0); return false; } /// ÀоîµéÀÎ Á¤º¸¸¦ ¼ÂÆÃÇÑ´Ù. pSkillInfo->mpSetpInfoArray = new sPlayerSkillStepInfo[stepCount]; ::memcpy( pSkillInfo->mpSetpInfoArray, stepArray, sizeof(sPlayerSkillStepInfo)*stepCount); pSkillInfo->mStepCount = stepCount; /// Á¤º¸ ÃʱâÈ­ stepCount = 0; } currentSkillIdx = skillIdx; stepCount++; /// ½ºÅ³ ´Ü°è if( tokenizer.GetNext( &str ) == false ) { return false; } step = static_cast(str.ToInt()); /// ÅøÆÁIndex if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mToolTipIdx = str.ToInt(); /// SPÇʿ䰪 if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mRequireSP = static_cast(str.ToInt()); /// Á÷¾÷ Index if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mJobType = static_cast(str.ToInt()); /// ij¸¯ÅÍ ÇÊ¿äLv if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mPlayerLevel = static_cast(str.ToInt()); /// ½ºÅ³½ÀµæÁ¶°Ç1 - Çʿ佺ųidx if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mLearnSkillIdx1 = str.ToInt(); /// ½ºÅ³½ÀµæÁ¶°Ç1 - ½ºÅ³ÇÊ¿ä´Ü°è if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mLearnSkillStep1 = static_cast(str.ToInt()); /// ½ºÅ³½ÀµæÁ¶°Ç2 - Çʿ佺ųidx if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mLearnSkillIdx2 = str.ToInt(); /// ½ºÅ³½ÀµæÁ¶°Ç2 - ½ºÅ³ÇÊ¿ä´Ü°è if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mLearnSkillStep2 = static_cast(str.ToInt()); /// ¼Ò¸ð±Ý¾× if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mUseMoney = str.ToInt(); /// »óżöÄ¡°ª if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mUseStateValue = static_cast(str.ToInt()); /// ¼Ò¸ðMP°ª if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mUseMP = str.ToInt(); /// ¼Ò¸ðMP°ª if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mUseMPPer = str.ToInt(); /// ¼Ò¸ðHP°ª if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mUseHP = str.ToInt(); /// ¼Ò¸ð¾ÆÀÌÅÛ°³¼ö if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mUseItemCount = static_cast(str.ToInt()); /// »ç°Å¸® if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mTargetDist = static_cast(str.ToInt()); /// ij½ºÆÃ½Ã°£ if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mCastingTime = str.ToInt(); /// ÄðŸÀÓ if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mCoolTime = str.ToInt(); /// ¹üÀ§°Å¸®1 if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mBoundDist1 = static_cast(str.ToInt()); /// ¹üÀ§°Å¸®2 if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mBoundDist2 = static_cast(str.ToInt()); /// Àû¿ëÀοø if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mApplyCnt = static_cast(str.ToInt()); /// °íÀ¯¸íÁß·ü if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mAccuracyValue = static_cast(str.ToInt()); /// °íÀ¯Å©¸®Æ¼Äà if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mCriticalValue = static_cast(str.ToInt()); /// °íÀ¯ ¾î±×·Î ¼öÄ¡ if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mDistressValue = str.ToInt(); /// Àû¿ë°ª type1 if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mApplyValueType1 = static_cast(str.ToInt()); /// Àû¿ë°ª1 if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mApplyValue1 = str.ToInt(); /// Àû¿ë°ª type2 if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mApplyValueType2 = static_cast(str.ToInt()); /// Àû¿ë°ª2 if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mApplyValue2 = str.ToInt(); /// È¿°ú Index if( tokenizer.GetNext( &str ) == false ) { return false; } stepArray[step].mInfulenceIdx = str.ToInt(); // if( stepArray[step].mApplyValueType1 == eSTATUSPLUS_AROUND_PUSH && stepArray[step].mApplyValueType2 == eSTATUSPLUS_AROUND_PULL ) // return false; // if( stepArray[step].mApplyValueType1 == eSTATUSPLUS_AROUND_PULL && stepArray[step].mApplyValueType2 == eSTATUSPLUS_AROUND_PUSH ) // return false; if( tokenizer.IsEnd() ) { /// Áö±Ý±îÁö ½×ÀÎ Á¤º¸¸¦ ¼ÂÆÃÇÑ´Ù. assert(stepCount); assert(stepCount<50); sPlayerSkillBaseInfo* pSkillInfo = GetPlayerSkillInfo( currentSkillIdx ); if( pSkillInfo == 0 ) { assert(0); return false; } /// ÀоîµéÀÎ Á¤º¸¸¦ ¼ÂÆÃÇÑ´Ù. pSkillInfo->mpSetpInfoArray = new sPlayerSkillStepInfo[stepCount]; ::memcpy( pSkillInfo->mpSetpInfoArray, stepArray, sizeof(sPlayerSkillStepInfo)*stepCount); pSkillInfo->mStepCount = stepCount; /// Á¤º¸ ÃʱâÈ­ stepCount = 0; } } return true; } ////////////////////////////////////////////////////////////////////////// unsigned int cGameResourceManager::GetMapFolderIdx( unsigned long mapIdx, unsigned char mapMode ) { cPointerHashMap* pModeMap = (cPointerHashMap*)mMapInfoMap.GetAt( mapIdx ); if( pModeMap == NULL ) return 0; sMapInfo* pMapData = (sMapInfo*)pModeMap->GetAt( mapMode ); if( pMapData == NULL ) return 0; return pMapData->folderIdx; } sStageChangePos* cGameResourceManager::GetPosScriptInfo( unsigned long idx ) { return (sStageChangePos*)mStageChangePosMap.GetAt( idx ); } tPointerArray* cGameResourceManager::GetMapChangeStarterArr( unsigned short mapNum ) { mReturnArray.Clear(); if( mStageChangePosMap.IsEmpty() ) return &mReturnArray; cPointerHashMap::cIterator begin = mStageChangePosMap.Begin(); while( begin != mStageChangePosMap.End() ) { sStageChangePos* pChangePos = (sStageChangePos*)(*begin++).mSecond; if( pChangePos == 0 ) { assert(0); continue; } if( pChangePos->mMapNumber != mapNum ) continue; /// °Ë»ç ±âÁØ¿¡¼­ ¸ñÀûÁö Á¦¿Ü if( pChangePos->mTargetInfo == 0 ) continue; mReturnArray.PushBack( pChangePos ); } return &mReturnArray; } /// tPointerArray* cGameResourceManager::GetMapChangeDestArr( unsigned short mapNum ) { mReturnArray.Clear(); if( mStageChangePosMap.IsEmpty() ) return &mReturnArray; cPointerHashMap::cIterator begin = mStageChangePosMap.Begin(); while( begin != mStageChangePosMap.End() ) { sStageChangePos* pChangePos = (sStageChangePos*)(*begin++).mSecond; if( pChangePos == 0 ) { assert(0); continue; } if( pChangePos->mMapNumber != mapNum ) continue; /// °Ë»ç ±âÁØ¿¡¼­ Ãâ¹ßÁö Á¦¿Ü if( pChangePos->mTargetInfo != 0 ) continue; mReturnArray.PushBack( pChangePos ); } return &mReturnArray; } unsigned short cGameResourceManager::GetStageChangeMap( unsigned long posIdx ) { /// ½ºÅ©¸³Æ®»óÀÇ ½ÃÀÛÁÂÇ¥ sStageChangePos* pChangePos = (sStageChangePos*)mStageChangePosMap.GetAt( posIdx ); if( pChangePos == NULL ) { assert(NULL); return 0; } if( pChangePos->mFirstRegen == false ) return 0; return pChangePos->mMapNumber; } sMonsterScript* cGameResourceManager::GetMonsterListInfo( unsigned long monsterIdx ) { return (sMonsterScript*)mMonsterMap.GetAt( monsterIdx ); } sPlayerSkillBaseInfo* cGameResourceManager::GetPlayerSkillInfo( unsigned long skillNumber ) { sPlayerSkillBaseInfo* pSkillInfo = NULL; cPointerHashMap::cIterator start = mPlayerSkillInfoMap.Find( skillNumber ); cPointerHashMap::cIterator end = mPlayerSkillInfoMap.End(); if( start == end ) { return NULL; } pSkillInfo = (sPlayerSkillBaseInfo*)((*start).mSecond); if( pSkillInfo == NULL ) { assert(NULL); return NULL; } return pSkillInfo; }