#include "stdafx.h" #include "gameResourceManager.h" #include "ResourceManager.h" #include "Player_Common.h" #include "SkillScript.h" #include "UIText.h" #include "GameFileLexer.h" #include "Parser.h" #include "FileSystem.h" #include "Application.h" #define HAIRCOLOR_KEY(hair,color) (unsigned int)(((unsigned char)(hair)|((unsigned short)((unsigned char)(color))<<8))) cGameResourceManager* cGameResourceManager::mpGameResourceManager = NULL; cGameResourceManager::cGameResourceManager() { mpGameResourceManager = this; mpSkillScript = 0; mpGameText = 0; mpSkillNameText = 0; mpItemNameText = 0; mpNpcNameText = 0; mpMonsterNameText = 0; mHairColorMax = 0; mBaseFaceCount = 0; } cGameResourceManager::~cGameResourceManager() { SAFE_DELETE(mpMonsterNameText); SAFE_DELETE(mpNpcNameText); SAFE_DELETE(mpItemNameText); SAFE_DELETE(mpSkillNameText); SAFE_DELETE(mpGameText); } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : Init() * ¸ñ Àû : ApplicationÀÇ Init()¿¡¼­ ½ÇÇàµÈ´Ù. * ÇÁ·Î±×·¥ ½ÇÇà½Ã Çѹø¸¸ ·ÎµùµÈ´Ù. * ÁÖÀÇ»çÇ× : ²À ·ÎµùÇØ¾ß Çϴ°͵鸸 ³ÖÀ»°Í.. (Selectâ°ú Makeâ¿¡¼­ »ç¿ëÇÒ °Íµé) * ------------------------------------------------------------------ */ bool cGameResourceManager::Init() { ////////////////////////////////////////////////////////////////////////// /// ½ºÅ©¸³Æ® ÆÄÀÏÀ» ·ÎµùÇÑ´Ù. /// Game¿ë ÅØ½ºÆ® ÆÄÀÏ if( !LoadGameText() ) { NiMessageBox( "LangÆú´õ ¾÷±×·¹À̵å üũ!!", "Error" ); return false; } /// ModelÁ¤º¸ if( !LoadModelFileInfo() ) { NiMessageBox( "ModelFileList.txt üũÇϼ¼¿ä!!", "Error" ); return false; } if( !LoadCharacterBaseHairFileInfo() ) { NiMessageBox( "CharacterHairFile.txt üũÇϼ¼¿ä!!", "Error" ); return false; } if( !LoadCharacterBaseFileInfo() ) { NiMessageBox( "CharacterBaseFile.txt üũÇϼ¼¿ä!!", "Error" ); return false; } if( !LoadFaceEmotionInfo() ) { NiMessageBox( "EmotionList.txt üũÇϼ¼¿ä!!", "Error" ); return false; } /// if( !LoadItemInfo() ) { NiMessageBox( "Item_Define.txt üũÇϼ¼¿ä!!", "Error" ); return false; } if( !LoadItemOnePieceInfo() ) { NiMessageBox( "Item_OnePiece.txt üũÇϼ¼¿ä!!", "Error" ); return false; } if( !LoadItemFileInfo() ) { NiMessageBox( "Item_FileName.txt üũÇϼ¼¿ä!!", "Error" ); return false; } if( !LoadMonsterInfo() ) { NiMessageBox( "MonsterList.txt üũÇϼ¼¿ä!!", "Error" ); return false; } if( !LoadNpcInfo() ) { NiMessageBox( "NPCList.txt üũÇϼ¼¿ä!!", "Error" ); return false; } mpSkillScript = new cSkillScript; if( !mpSkillScript->Init() ) { return false; } ////////////////////////////////////////////////////////////////////////// /// »ç¿ëÇÒ ±×·¡ÇÈ µ¥ÀÌÅ͵éÀ» ·ÎµùÇÑ´Ù. /// 1. ±âº» ÀÎÅÍÆäÀ̽º¿ë À̹ÌÁö ·Îµù.. /// 2. ±âº» »ç¿îµå ÆÄÀÏ ·Îµù.. /// 3. kfmÆÄÀÏ ·Îµù.. cArrayHashMap::cIterator i = mModelFileNameMap.Begin(); cArrayHashMap::cIterator end = mModelFileNameMap.End(); cString* pModelFile; for( ; i != end; ++i ) { unsigned long idx = (unsigned long)(*i).mFirst; pModelFile = (cString*)(*i).mSecond; if( pModelFile ) { cString pathName; if( idx <= 100 ) pathName.Format( "Data/Character/%s", pModelFile->Cstr() ); else if( idx <= 1000 ) pathName.Format( "Data/Npc/%s", pModelFile->Cstr() ); else pathName.Format( "Data/Monster/%s", pModelFile->Cstr() ); RESOURCEMAN->LoadKFM( pathName ); } } unsigned int characterCount = eGENDER_MAX * eRACE_MAX; cFileNameArray* pArray = 0; cArrayHashMap::cIterator iter; cArrayHashMap::cIterator iterEnd; cString* name = NULL; /// default hair loading iter = mDefaultHairFileNameMap.Begin(); iterEnd = mDefaultHairFileNameMap.End(); for( ; iter != iterEnd; ++iter ) { pArray = (cFileNameArray*)(*iter).mSecond; if( pArray ) { for( unsigned int cnt=0; cntGetLength() ) { cString pathName; pathName.Format( "Data/Character/%s", name->Cstr() ); RESOURCEMAN->LoadNIF( pathName ); } } } } /// default face loading iter = mDefaultFaceFileNameMap.Begin(); iterEnd = mDefaultFaceFileNameMap.End(); for( ; iter != iterEnd; ++iter ) { pArray = (cFileNameArray*)(*iter).mSecond; if( pArray ) { for( unsigned int cnt=0; cntGetLength() ) { cString pathName; pathName.Format( "Data/Character/%s", name->Cstr() ); RESOURCEMAN->LoadNIF( pathName ); } } } } /// default body, hand, foot loading iter = mDefaultWearFileNameMap.Begin(); iterEnd = mDefaultWearFileNameMap.End(); for( ; iter != iterEnd; ++iter ) { pArray = (cFileNameArray*)(*iter).mSecond; if( pArray ) { for( unsigned int cnt=0; cntGetLength() ) { cString pathName; pathName.Format( "Data/Character/%s", name->Cstr() ); RESOURCEMAN->LoadNIF( pathName ); } } } } // ////////////////////////////////////////////////////////////////////////// return true; } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : Exit() * ¸ñ Àû : Á¾·áºÎ * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ void cGameResourceManager::Exit() { if( mpSkillScript ) { mpSkillScript->Release(); delete mpSkillScript; mpSkillScript = 0; } RemoveAllCharacterBaseFileInfo(); RemoveAllModelFileName(); /// Á¤ÀÇ { cArrayHashMap::cIterator i = mItemInfo.Begin(); cArrayHashMap::cIterator iend = mItemInfo.End(); for( ; i != iend; ++i ) { delete (sItemInfo*)(i->mSecond); } mItemInfo.Clear(); } /// ÆÄÀϸí { cArrayHashMap::cIterator i = mItemFileInfo.Begin(); cArrayHashMap::cIterator iend = mItemFileInfo.End(); for( ; i != iend; ++i ) { delete [] ((cString*)(i->mSecond)); } mItemFileInfo.Clear(); } { cArrayHashMap::cIterator i = mItemOnePieceInfo.Begin(); cArrayHashMap::cIterator iend = mItemOnePieceInfo.End(); for( ; i != iend; ++i ) { delete (sItemOnepieceInfo*)(i->mSecond); } mItemOnePieceInfo.Clear(); } { cArrayHashMap::cIterator i = mFaceEmotionMap.Begin(); cArrayHashMap::cIterator end = mFaceEmotionMap.End(); for( ; i != end; ++i ) { sFaceEmoteInfo* p = (sFaceEmoteInfo*)(*i).mSecond; SAFE_DELETE(p); } mFaceEmotionMap.Clear(); } { cArrayHashMap::cIterator i = mMonsterInfo.Begin(); cArrayHashMap::cIterator end = mMonsterInfo.End(); for( ; i != end; ++i ) { sMonsterInfo* pInfo = (sMonsterInfo*)((*i).mSecond); SAFE_DELETE(pInfo); } mMonsterInfo.Clear(); } { cArrayHashMap::cIterator i = mNpceInfo.Begin(); cArrayHashMap::cIterator end = mNpceInfo.End(); for( ; i != end; ++i ) { sNpcInfo* pInfo = (sNpcInfo*)((*i).mSecond); SAFE_DELETE(pInfo); } mNpceInfo.Clear(); } } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : GetModelFileName( unsigned long modelIndex ) * ¸ñ Àû : * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ const char* cGameResourceManager::GetModelFileName( unsigned long modelIndex ) { cString* str = (cString*)mModelFileNameMap.GetAt( modelIndex ); if( !str ) return 0; return (*str).Cstr(); } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : LoadModleFileInfo() * ¸ñ Àû : ¸ðµ¨ Á¤º¸ÆÄÀϵéÀ» ·ÎµåÇÑ´Ù. * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ bool cGameResourceManager::LoadModelFileInfo() { /// ÆÄÀÏ ¿­±â cFileLoader loader; if( loader.Open( "./Script/Resource/ModelFileList.txt", true ) == false ) { return false; } /// cToken token; cLexer lexer( loader.GetBufferPtr(), loader.GetSize() ); cParser parser( &lexer, "./Script/Resource/ModelFileList.txt" ); unsigned long fileIdx; cString* name = NULL; while( lexer.IsEnd() == false ) { lexer.GetNextToken( &token ); switch( token.mType ) { case eTOKEN_ERROR: return false; case eTOKEN_NULL: continue; case eTOKEN_INT: { name = new cString; fileIdx = token.ToInt(); *name = parser.ParseString(); mModelFileNameMap.Insert( fileIdx, name ); name = NULL; } break; default: assert( 0 && "invalid token" ); return false; } } return true; } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : GetDefaultHairFileName( unsigned int hairIdx, char race, char gender ) * ¸ñ Àû : ±âº» ¸Ó¸® ÆÄÀϸí Á¦°ø * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ const char* cGameResourceManager::GetDefaultHairFileName( unsigned int hairIdx, char race, char gender ) { assert(race < eRACE_MAX); assert(gender < eGENDER_MAX); if( race < eRACE_MAX || gender < eGENDER_MAX ) { cFileNameArray* pArray = (cFileNameArray*)mDefaultHairFileNameMap.GetAt( hairIdx ); if( pArray ) { cString* name = (cString*)(*pArray)[(race*eGENDER_MAX) + gender]; if( name ) return name->Cstr(); } } return NULL; } const char* cGameResourceManager::GetHairColorTextureFileName( unsigned int hairIdx, unsigned int colorIdx, char race, char gender ) { if( colorIdx >= mHairColorMax ) return NULL; assert(race < eRACE_MAX); assert(gender < eGENDER_MAX); if( race < eRACE_MAX || gender < eGENDER_MAX ) { unsigned int key = HAIRCOLOR_KEY(hairIdx,colorIdx); cFileNameArray* pArray = (cFileNameArray*)mHairColorTextureMap.GetAt( key ); if( pArray ) { cString* name = (cString*)(*pArray)[(race*eGENDER_MAX) + gender]; if( name ) return name->Cstr(); } } return NULL; } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : GetDefaultFaceFileName( unsigned int faceIdx, char race, char gender ) * ¸ñ Àû : ±âº» ¾ó±¼ ÆÄÀϸí Á¦°ø * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ const char* cGameResourceManager::GetDefaultFaceFileName( unsigned int faceIdx, char race, char gender ) { assert(race < eRACE_MAX); assert(gender < eGENDER_MAX); if( race < eRACE_MAX || gender < eGENDER_MAX ) { cFileNameArray* pArray = (cFileNameArray*)mDefaultFaceFileNameMap.GetAt( faceIdx ); if( pArray ) { cString* name = (cString*)(*pArray)[(race*eGENDER_MAX) + gender]; if( name ) return name->Cstr(); } } return NULL; } const char* cGameResourceManager::GetFaceTextureFileName( unsigned long idx, char race, char gender ) { assert(race < eRACE_MAX); assert(gender < eGENDER_MAX); if( race < eRACE_MAX || gender < eGENDER_MAX ) { sFaceEmoteInfo* info = (sFaceEmoteInfo*)mFaceEmotionMap.GetAt(idx); if( info ) { if( info->textureName[race*eGENDER_MAX+gender].Compare("None") == 0 ) return NULL; return info->textureName[race*eGENDER_MAX+gender].Cstr(); } } return NULL; } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : GetDefaultWearFileName( unsigned int part, char race, char gender ) * ¸ñ Àû : °¢ º¹ÀåÀÇ ±âº» ±×·¡ÇÈ ÆÄÀÏ À̸§À»º¸¸¦ Á¦°øÇÑ´Ù. * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ const char* cGameResourceManager::GetDefaultWearFileName( unsigned int part, char race, char gender ) { assert(race < eRACE_MAX); assert(gender < eGENDER_MAX); if( race < eRACE_MAX || gender < eGENDER_MAX ) { cFileNameArray* pArray = (cFileNameArray*)mDefaultWearFileNameMap.GetAt( part ); if( pArray ) { cString* name = (cString*)(*pArray)[(race*eGENDER_MAX) + gender]; if( name ) return name->Cstr(); } } return NULL; } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : LoadCharacterBaseFileInfo() * ¸ñ Àû : ij¸¯ÅÍ ±âº» °´Ã¼ÆÄÀÏ ·ÎµåÇÑ´Ù. * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ bool cGameResourceManager::LoadCharacterBaseFileInfo() { /// ÆÄÀÏ ¿­±â cFileLoader loader; if( loader.Open( "./Script/Resource/CharacterBaseFile.txt", true ) == false ) { return false; } /// cToken token; cLexer lexer( loader.GetBufferPtr(), loader.GetSize() ); cParser parser( &lexer, "./Script/Resource/CharacterBaseFile.txt" ); cFileNameArray* pArray = 0; unsigned int index = 0; char type = 0; cString* fileName = 0; unsigned int count = eRACE_MAX * eGENDER_MAX; while( lexer.IsEnd() == false ) { lexer.GetNextToken( &token ); switch( token.mType ) { case eTOKEN_ERROR: return false; case eTOKEN_NULL: continue; case eTOKEN_INT: { pArray = new cFileNameArray; pArray->Reserve( count ); // À妽º ºÎÀ§ ÆÄÀϸí(count °³) index = token.ToInt(); type = (char)parser.ParseInt(); for( unsigned int i=0; iPushBack( fileName ); } switch( type ) { case ePART_FACE: { mDefaultFaceFileNameMap.Insert( index, pArray ); } break; case ePART_BODY1: case ePART_BODY2: case ePART_HAND: case ePART_FOOT: mDefaultWearFileNameMap.Insert( type, pArray ); } pArray = NULL; } break; default: assert( 0 && "invalid token" ); return false; } } return true; } bool cGameResourceManager::LoadFaceEmotionInfo() { cFileLoader loader; cString pathName = "./Script/Resource/EmotionList.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; unsigned int count = eRACE_MAX * eGENDER_MAX; sFaceEmoteInfo* pInfo = 0; unsigned long filterKey = 0; while( tokenizer.IsEnd() == false ) { pInfo = new sFaceEmoteInfo; /// if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pInfo->index = str.ToInt(); /// type if( tokenizer.GetNext( &str ) == false ) { goto ERR; } pInfo->type = (unsigned char)str.ToInt(); /// texture file name for( unsigned int i=0; itextureName[i] = str; } /// filter text index for( unsigned int i=0; i<10; i++ ) { if( tokenizer.GetNext( &str ) == false ) { goto ERR; } filterKey = str.ToInt(); } /// ÇØ½¬¿¡ ¸ó½ºÅÍ º°·Î ±â·Ï if( mFaceEmotionMap.Insert( pInfo->index, pInfo ) == false ) { assert(0); } if( pInfo->type == 0 ) mBaseFaceCount++; } return true; ERR: delete pInfo; return false; } bool cGameResourceManager::LoadCharacterBaseHairFileInfo() { /// ÆÄÀÏ ¿­±â 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: { mHairColorMax = 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(); cFileNameArray* pArray = 0; unsigned int index = 0; cString* fileName = 0; 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: { pArray = new cFileNameArray; pArray->Reserve( count ); // À妽º ºÎÀ§ ÆÄÀϸí(count °³) index = token.ToInt(); for( unsigned int i=0; iPushBack( fileName ); } mDefaultHairFileNameMap.Insert( index, pArray ); } break; default: assert( 0 && "invalid token" ); return false; } } return true; } bool cGameResourceManager::LoadHairColor( cParser& parser ) { if( parser.ExpectTokenString( "{" ) == false ) { assert( 0 && "wrong script" ); return false; } cToken token; cLexer* lexer = parser.GetLexer(); cFileNameArray* pArray = 0; unsigned int hairIdx = 0; unsigned int colorIdx = 0; cString* fileName = 0; 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: { pArray = new cFileNameArray; pArray->Reserve( count ); // Ű »ý¼º hairIdx = token.ToInt(); colorIdx = parser.ParseInt(); unsigned int key = HAIRCOLOR_KEY(hairIdx,colorIdx); for( unsigned int i=0; iPushBack( fileName ); } mHairColorTextureMap.Insert( key, pArray ); } break; default: assert( 0 && "invalid token" ); return false; } } return true; } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : RemoveAllModleFileName() * ¸ñ Àû : * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ void cGameResourceManager::RemoveAllModelFileName() { cArrayHashMap::cIterator i = mModelFileNameMap.Begin(); cArrayHashMap::cIterator end = mModelFileNameMap.End(); cString* pModelFile; for( ; i != end; ++i ) { pModelFile = (cString*)(*i).mSecond; delete pModelFile; } mModelFileNameMap.Clear(); } /* ------------------------------------------------------------------ * ÇÔ¼öÀ̸§ : RemoveAllCharacterBaseFileInfo() * ¸ñ Àû : * ÁÖÀÇ»çÇ× : * ------------------------------------------------------------------ */ void cGameResourceManager::RemoveAllCharacterBaseFileInfo() { cFileNameArray* pArray = 0; cString* name = 0; /// ±âº» º¹Àå Á¤º¸ Á¦°Å cArrayHashMap::cIterator i = mDefaultWearFileNameMap.Begin(); cArrayHashMap::cIterator end = mDefaultWearFileNameMap.End(); for( ; i != end; ++i ) { pArray = (cFileNameArray*)(*i).mSecond; if( pArray ) { for( unsigned int cnt=0; cnt< pArray->GetSize(); ++cnt ) { name = (cString*)(*pArray)[cnt]; SAFE_DELETE(name); } SAFE_DELETE(pArray); } } mDefaultWearFileNameMap.Clear(); /// ±âº» ¾ó±¼ Á¤º¸ Á¦°Å i = mDefaultFaceFileNameMap.Begin(); end = mDefaultFaceFileNameMap.End(); for( ; i != end; ++i ) { pArray = (cFileNameArray*)(*i).mSecond; if( pArray ) { for( unsigned int cnt=0; cnt< pArray->GetSize(); ++cnt ) { name = (cString*)(*pArray)[cnt]; SAFE_DELETE(name); } SAFE_DELETE(pArray); } } mDefaultFaceFileNameMap.Clear(); /// ±âº» Çì¾î ÅØ½ºÃÄ Á¤º¸ Á¦°Å i = mHairColorTextureMap.Begin(); end = mHairColorTextureMap.End(); for( ; i != end; ++i ) { pArray = (cFileNameArray*)(*i).mSecond; if( pArray ) { for( unsigned int cnt=0; cnt< pArray->GetSize(); ++cnt ) { name = (cString*)(*pArray)[cnt]; SAFE_DELETE(name); } SAFE_DELETE(pArray); } } mHairColorTextureMap.Clear(); /// ±âº» Çì¾î Á¤º¸ Á¦°Å i = mDefaultHairFileNameMap.Begin(); end = mDefaultHairFileNameMap.End(); for( ; i != end; ++i ) { pArray = (cFileNameArray*)(*i).mSecond; if( pArray ) { for( unsigned int cnt=0; cnt< pArray->GetSize(); ++cnt ) { name = (cString*)(*pArray)[cnt]; SAFE_DELETE(name); } SAFE_DELETE(pArray); } } mDefaultHairFileNameMap.Clear(); } bool cGameResourceManager::LoadItemInfo() { cFileLoader loader; if( loader.Open( "./Script/Resource/Item_Define.txt", true ) == false ) { assert( 0 && "failed to load item define" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), "\t\r\n", "./Script/Resource/Item_Define.txt" ); cString str; while( tokenizer.IsEnd() == false ) { /// À妽º if( tokenizer.GetNext( &str ) == false ) return false; long index = (long)str.ToInt(); assert( index > 0 ); /// À̸§ if( tokenizer.GetNext( &str ) == false ) return false; /// À̸§ À妽º if( tokenizer.GetNext( &str ) == false ) return false; unsigned int nameIndex = (unsigned int)str.ToInt(); /// ÅøÆÁ À妽º if( tokenizer.GetNext( &str ) == false ) return false; // unsigned int tipIndex = (unsigned int)str.ToInt(); /// Á¾·ù if( tokenizer.GetNext( &str ) == false ) return false; unsigned char type = (unsigned char)str.ToInt(); /// ¼¼ºÎ Á¾·ù if( tokenizer.GetNext( &str ) == false ) return false; unsigned char subType = (unsigned char)str.ToInt(); /// °Ë»ö ´ëºÐ·ù if( tokenizer.GetNext( &str ) == false ) return false; /// °Ë»ö Áߺзù if( tokenizer.GetNext( &str ) == false ) return false; /// °Ë»ö ¼ÒºÐ·ù if( tokenizer.GetNext( &str ) == false ) return false; //skip /// ¹«°Ô if( tokenizer.GetNext( &str ) == false ) return false; // short weight = (short)str.ToInt(); /// °ãħ°¹¼ö if( tokenizer.GetNext( &str ) == false ) return false; // short capacity = (short)str.ToInt(); /// ÆÇ¸Å¹æ¹ý if( tokenizer.GetNext( &str ) == false ) return false; // unsigned long sellType = (unsigned long)str.ToInt(); /// ÆÇ¸Å°¡°Ý if( tokenizer.GetNext( &str ) == false ) return false; // unsigned long sellPrice = (unsigned long)str.ToInt(); /// ±¸ÀÔ¹æ¹ý if( tokenizer.GetNext( &str ) == false ) return false; // unsigned long buyType = (unsigned long)str.ToInt(); /// ±¸ÀÔ°¡°Ý if( tokenizer.GetNext( &str ) == false ) return false; // unsigned long buyPrice = (unsigned long)str.ToInt(); /// ÃÖ´ë ÃâÇö°³¼ö if( tokenizer.GetNext( &str ) == false ) return false; // unsigned short presentNum = (unsigned short)str.ToInt(); /// º¸À¯ °¡´É°¹¼ö if( tokenizer.GetNext( &str ) == false ) return false; // unsigned long maxHaveInven = (unsigned long)str.ToInt(); // ±â°£Á¦ ¼³Á¤ if( tokenizer.GetNext( &str ) == false ) return false; // »ç¿ë±âÇÑ if( tokenizer.GetNext( &str ) == false ) return false; // ÀÎÁõ¿©ºÎ if( tokenizer.GetNext( &str ) == false ) return false; /// »ç¿ëÀÚ°Å·¡ ¿©ºÎ(0°Å·¡°¡´É/1°Å·¡ºÒ°¡) if( tokenizer.GetNext( &str ) == false ) return false; /// ´É·Â À妽º if( tokenizer.GetNext( &str ) == false ) return false; // long abilityIndex = (long)str.ToInt(); /// Á¦ÇÑ À妽º if( tokenizer.GetNext( &str ) == false ) return false; // long limitIndex = (long)str.ToInt(); /// Ä«µå À妽º if( tokenizer.GetNext( &str ) == false ) return false; //long cardIndex = (long)str.ToInt(); /// Ÿ·Î À妽º if( tokenizer.GetNext( &str ) == false ) return false; // long tarotIndex = (long)str.ToInt(); /// ½ºÇÁ·¹µå À妽º if( tokenizer.GetNext( &str ) == false ) return false; // long spreadIndex = (long)str.ToInt(); /// ºÐÇØ À妽º if( tokenizer.GetNext( &str ) == false ) return false; // long disjointIndex = (long)str.ToInt(); /// Ä«µå½½·Ô À妽º if( tokenizer.GetNext( &str ) == false ) return false; // long cardSlotIndex = (long)str.ToInt(); /// °­È­È®·ü À妽º if( tokenizer.GetNext( &str ) == false ) return false; // long enhanceRateIndex = (long)str.ToInt(); /// °­È­ À妽º if( tokenizer.GetNext( &str ) == false ) return false; // long enhanceIndex = (long)str.ToInt(); /// üÀÎÁö À妽º if( tokenizer.GetNext( &str ) == false ) return false; /// ȣĪ À妽º if( tokenizer.GetNext( &str ) == false ) return false; // long titleIndex = (long)str.ToInt(); /// ¼¼Æ® À妽º if( tokenizer.GetNext( &str) == false ) return false; // long setIndex = (long)str.ToInt(); /// ¾ÆÀÌÄÜ À妽º if( tokenizer.GetNext( &str ) == false ) return false; // unsigned int iconIndex = (unsigned int)str.ToInt(); /// ¸ðµ¨ À妽º0 if( tokenizer.GetNext( &str ) == false ) return false; unsigned int fileIndex0 = (unsigned int)str.ToInt(); /// ¸ðµ¨ À妽º1 if( tokenizer.GetNext( &str ) == false ) return false; unsigned int fileIndex1 = (unsigned int)str.ToInt(); /// Åõ±¸ Âø¿ë½Ã ±Í Ç¥½Ã¿©ºÎ (0:±ÍÇ¥½Ã, 1:±ÍÇ¥½Ã ¾ÈÇÔ) if( tokenizer.GetNext( &str ) == false ) return false; char hideEar = (char)str.ToInt(); /// ¾ÆÀÌÅÛ ÅøÆÁÄ÷¯ ( ·¹¾îµµ°ü·Ã ) if( tokenizer.GetNext( &str ) == false ) return false; // unsigned short tooltipColor = (unsigned short)str.ToInt(); // ȨÆäÀÌÁö °ø°³¿©ºÎ if( tokenizer.GetNext( &str ) == false ) return false; sItemInfo* p = new sItemInfo; p->mIndex = index; p->mNameIndex = nameIndex; p->mType = type; p->mSubType = subType; p->mModelIndex1 = fileIndex0; p->mModelIndex2 = fileIndex1; p->mHideEar = hideEar; if( mItemInfo.Insert( index, p ) == false ) { assert( 0 && "failed to insert item define, maybe already exist" ); return false; } } return true; } bool cGameResourceManager::LoadItemOnePieceInfo() { cFileLoader loader; if( loader.Open( "./Script/Resource/Item_OnePiece.txt", true ) == false ) { assert( 0 && "failed to load item onepiece" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), "\t\r\n", "./Script/Resource/Item_OnePiece.txt" ); cString str; while( tokenizer.IsEnd() == false ) { /// À妽º if( tokenizer.GetNext( &str ) == false ) return false; long index = (long)str.ToInt(); assert( index > 0 ); if( tokenizer.GetNext( &str ) == false ) return false; long upperIndex = (long)str.ToInt(); if( tokenizer.GetNext( &str ) == false ) return false; long lowerIndex = (long)str.ToInt(); if( tokenizer.GetNext( &str ) == false ) return false; long handsIndex = (long)str.ToInt(); if( tokenizer.GetNext( &str ) == false ) return false; long footsIndex = (long)str.ToInt(); sItemOnepieceInfo* p = new sItemOnepieceInfo; p->mIndex = index; p->mUpperIndex = upperIndex; p->mLowerIndex = lowerIndex; p->mHandsIndex = handsIndex; p->mFootsIndex = footsIndex; if( mItemOnePieceInfo.Insert( index, p ) == false ) { assert( 0 && "failed to insert item onpiece info, maybe already exist" ); return false; } } return true; } bool cGameResourceManager::LoadItemFileInfo() { cFileLoader loader; if( loader.Open( "./Script/Resource/Item_FileName.txt", true ) == false ) { assert( 0 && "failed to load item file name" ); return false; } unsigned int iend = eRACE_MAX * eGENDER_MAX; cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), " \t\r\n", "./Script/Resource/Item_FileName.txt" ); cString str; while( tokenizer.IsEnd() == false ) { /// À妽º if( tokenizer.GetNext( &str ) == false ) return false; long index = str.ToInt(); assert( index > 0 ); iend = eRACE_MAX * eGENDER_MAX; /// ¾ÆÀÌÅÛ ÆÄÀÏ À̸§ ¹è¿­À» »ý¼º cString* p = new cString[iend]; for( unsigned int i = 0; i < iend; ++i ) { if( tokenizer.GetNext( &(p[i]) ) == false ) { delete [] p; return false; } } if( mItemFileInfo.Insert( index, p ) == false ) { assert( 0 && "failed to insert item file names, maybe already exist" ); return false; } } return true; } bool cGameResourceManager::LoadMonsterInfo() { 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; sMonsterInfo* info = NULL; while( tokenizer.IsEnd() == false ) { info = new sMonsterInfo; //¸ó½ºÅÍ Á¾·ù index if( tokenizer.GetNext( &str ) == false ) { goto ERR; } info->mIndex = str.ToInt(); /// ¸ó½ºÅÍ À̸§Idx if( tokenizer.GetNext( &str ) == false ) { goto ERR; } info->mNameIndex = str.ToInt(); char name[32]; /// ¸ó½ºÅÍ À̸§ ::sprintf_s( name, "%s", GAMERESOURCEMAN->GetMonsterName( info->mNameIndex ) ); info->mName = name; /// ¸ó½ºÅÍ Á÷¾÷À̸§ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } /// kfmÆÄÀÏidx if( tokenizer.GetNext( &str ) == false ) { goto ERR; } info->mModelIndex = str.ToInt(); /// À̸§ ³ôÀ̰ª 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; } /// HP if( tokenizer.GetNext( &str ) == false ) { goto ERR; } /// MP if( tokenizer.GetNext( &str ) == false ) { goto ERR; } /// expȹµæ·® if( tokenizer.GetNext( &str ) == false ) { goto ERR; } /// sxpȹµæ·® 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; } /// ½Ã¾ß¹üÀ§ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } /// ºñÁß if( tokenizer.GetNext( &str ) == false ) { goto ERR; } /// Å©±â if( tokenizer.GetNext( &str ) == false ) { goto ERR; } info->mScale = str.ToFloat(); /// ¿¬ÃâÀÌÆåÆ® Å©±â if( tokenizer.GetNext( &str ) == false ) { goto ERR; } info->mEffectScale = str.ToFloat(); /// ÇÇÇØ¹üÀ§ - º¸°£ »çÀÌÁî 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; } /// Á¤Áö½Ã°£ 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; } /// ÃßÀû½Ã°£ 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; } /// ȸº¹½ÃÀ۽ð£ if( tokenizer.GetNext( &str ) == false ) { goto ERR; } /// ÇØ½¬¿¡ ¸ó½ºÅÍ º°·Î ±â·Ï if( mMonsterInfo.Insert( info->mIndex, info ) == false ) { assert(0); return false; } } return true; ERR: delete info; return false; } bool cGameResourceManager::LoadNpcInfo() { cFileLoader loader; cString pathName = "./Script/Resource/NPCList.txt"; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load NPCList.txt" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), " \t\r\n", pathName.Cstr() ); cString str; while( tokenizer.IsEnd() == false ) { /// NPC ¹øÈ£ if( tokenizer.GetNext( &str ) == false ) { return false; } unsigned long npcClassIdx = str.ToInt(); /// NPC À̸§ if( tokenizer.GetNext( &str ) == false ) { return false; } unsigned long nameIdx = str.ToInt(); char name[32]; ::sprintf_s( name, "%s", GAMERESOURCEMAN->GetNpcName( nameIdx ) ); // type if( tokenizer.GetNext( &str ) == false ) { return false; } /// NPC Á÷¾÷ À妽º if( tokenizer.GetNext( &str ) == false ) { return false; } // char jobName[32]; // _stprintf( jobName, _T( "%s" ), GAMERESOURCEMAN->GetNpcName( str.ToInt() ) ); /// NPC ¾Ö´Ï¸ÞÀÌ¼Ç ÆÄÀÏ ¹øÈ£(KFM)] if( tokenizer.GetNext( &str ) == false ) { return false; } unsigned int modelIndex = str.ToInt(); if( tokenizer.GetNext( &str ) == false ) { return false; } if( tokenizer.GetNext( &str ) == false ) { return false; } if( tokenizer.GetNext( &str ) == false ) { return false; } sNpcInfo* info = new sNpcInfo; info->mIndex = npcClassIdx; char str[32]; ::sprintf_s( str, "%s", name ); info->mName = str; info->mNameIndex = nameIdx; info->mModelIndex = modelIndex; /// ÇØ½¬¿¡ NPC º°·Î ±â·Ï if( mNpceInfo.Insert( info->mIndex, info ) == false ) { assert(0); delete info; return false; } } return true; } /// bool cGameResourceManager::LoadGameText() { /// mpGameText = new cUIText; if( !mpGameText ) { assert( 0 && "mpGameText not create!" ); return false; } cString path; path.Format("./language/%s/SystemMsg_c.txt", cApplication::mLangaugeFolder.Cstr() ); if( mpGameText->Load( path.Cstr() ) == false ) { assert( 0 && "failed to load GameText" ); return false; } /// ½ºÅ³¸í mpSkillNameText = new cUIText; if( !mpSkillNameText ) { assert( 0 && "mpSkillNameText not create!" ); return false; } path.Format("./language/%s/Skill_Name_c.txt", cApplication::mLangaugeFolder.Cstr() ); if( mpSkillNameText->Load( path.Cstr() ) == false ) { assert( 0 && "failed to load GameText" ); return false; } /// itemÀ̸§ mpItemNameText = new cUIText; if( !mpItemNameText ) { assert( 0 && "mpItemNameText not create!" ); return false; } path.Format("./language/%s/Item_Name_c.txt", cApplication::mLangaugeFolder.Cstr() ); if( mpItemNameText->Load( path.Cstr() ) == false ) { assert( 0 && "failed to load GameText" ); return false; } /// NPC À̸§ mpNpcNameText = new cUIText; if( !mpNpcNameText ) { assert( 0 && "mpNpcNameText not create!" ); return false; } path.Format("./language/%s/NPC_Name_c.txt", cApplication::mLangaugeFolder.Cstr() ); if( mpNpcNameText->Load( path.Cstr() ) == false ) { assert( 0 && "failed to load NpcName" ); return false; } /// ¸ó½ºÅÍ À̸§ mpMonsterNameText = new cUIText; if( !mpMonsterNameText ) { assert( 0 && "mpMonsterNameText not create!" ); return false; } path.Format("./language/%s/Mon_Name_c.txt", cApplication::mLangaugeFolder.Cstr() ); if( mpMonsterNameText->Load( path.Cstr() ) == false ) { assert( 0 && "failed to load MonsterName" ); return false; } return true; } LPCTSTR cGameResourceManager::GetGameText( unsigned int textIdx ) { assert(mpGameText); return mpGameText->GetText( textIdx ).Cstr(); } LPCTSTR cGameResourceManager::GetSkillNameText( unsigned int textIdx ) { assert(mpSkillNameText); return mpSkillNameText->GetText( textIdx ).Cstr(); } LPCTSTR cGameResourceManager::GetNpcName( unsigned int nameIdx ) { assert( mpNpcNameText ); return mpNpcNameText->GetText( nameIdx ).Cstr(); } LPCTSTR cGameResourceManager::GetMonsterName( unsigned int nameIdx ) { assert( mpMonsterNameText ); return mpMonsterNameText->GetText( nameIdx ).Cstr(); } LPCTSTR cGameResourceManager::GetItemNameText( unsigned int nameIdx ) { assert(mpItemNameText); return mpItemNameText->GetText( nameIdx ).Cstr(); } const char* cGameResourceManager::GetItemFileName( unsigned long itemFileIdx, char race, char gender, bool weapon ) { if( itemFileIdx == 0 ) return 0; cArrayHashMap::cConstIterator i = mItemFileInfo.Find( itemFileIdx ); if( i == mItemFileInfo.End() ) return 0; cString* p = (cString*)i->mSecond; if( p[race * eGENDER_MAX + gender] == "None" ) { if( weapon ) return p[0].Cstr(); return 0; } return p[race * eGENDER_MAX + gender].Cstr(); } sItemOnepieceInfo* cGameResourceManager::GetItemOnepieceInfo( unsigned long itemIndex ) { if( itemIndex == 0 ) return 0; return (sItemOnepieceInfo*)mItemOnePieceInfo.GetAt( itemIndex ); } sMonsterInfo* cGameResourceManager::GetMonsterInfo( unsigned long monIdx ) { return (sMonsterInfo*)mMonsterInfo.GetAt( monIdx ); }