#include "stdafx.h" #include "ItemManager.h" #include "..\Client\ItemDefine.h" #define ITEM_SETINFO_FILENAME "./Script/Resource/Item_Set.txt" #define ITEM_DEFINE_FILENAME "./Script/Resource/Item_Define.txt" #define ITEM_ABILITY_FILENAME "./Script/Resource/Item_Ability.txt" #define ITEM_LIMIT_FILENAME "./Script/Resource/Item_Limit.txt" #define ITEM_CARD_FILENAME "./Script/Resource/Item_Card.txt" #define ITEM_TAROT_FILENAME "./Script/Resource/Item_Tarot.txt" #define ITEM_SPREAD_FILENAME "./Script/Resource/Item_Spread.txt" #define ITEM_NPCSTORE_FILENAME "./Script/Resource/Item_NpcStore.txt" #define ITEM_DISJOINT_FILENAME "./Script/Resource/Item_Disjoint.txt" #define ITEM_ENHANCED_FILENAME "./Script/Resource/Item_Enhanced.txt" #define ITEM_CARDSLOT_FILENAME "./Script/Resource/Item_Card_Slot.txt" cItemManager* cItemManager::mSingleton = 0; cItemManager::cItemManager() { assert( mSingleton == 0 && "bad singleton!" ); mSingleton = this; } cItemManager::~cItemManager() { mSingleton = 0; /// Á¤ÀÇ { cDefineMap::cIterator i = mDefineMap.Begin(); cDefineMap::cIterator iend = mDefineMap.End(); for( ; i != iend; ++i ) { delete (cItemDefine*)(i->mSecond); } mDefineMap.Clear(); } /// ´É·Â { cAbilityMap::cIterator i = mAbilityMap.Begin(); cAbilityMap::cIterator iend = mAbilityMap.End(); for( ; i != iend; ++i ) { delete (cItemAbility*)(i->mSecond); } mAbilityMap.Clear(); } /// Á¦ÇÑ { cLimitMap::cIterator i = mLimitMap.Begin(); cLimitMap::cIterator iend = mLimitMap.End(); for( ; i != iend; ++i ) { delete (cItemLimit*)(i->mSecond); } mLimitMap.Clear(); } /// Ä«µå { cCardMap::cIterator i = mCardMap.Begin(); cCardMap::cIterator iend = mCardMap.End(); for( ; i != iend; ++i ) { delete (cItemCard*)(i->mSecond); } mCardMap.Clear(); } /// Ÿ·Î { cTarotMap::cIterator i = mTarotMap.Begin(); cTarotMap::cIterator iend = mTarotMap.End(); for( ; i != iend; ++i ) { delete (cItemTarot*)(i->mSecond); } mTarotMap.Clear(); } /// ½ºÇÁ·¹µå { cSpreadMap::cIterator i = mSpreadMap.Begin(); cSpreadMap::cIterator iend = mSpreadMap.End(); for( ; i != iend; ++i ) { delete (cItemSpread*)(i->mSecond); } mSpreadMap.Clear(); } /// ºÐÇØ µ¥ÀÌÅÍ { cDisjointMap::cIterator i = mDisjointMap.Begin(); cDisjointMap::cIterator end = mDisjointMap.End(); for( ; i != end; ++i ) { delete (sItemDisjoint*)(i->mSecond); } mDisjointMap.Clear(); } /// °­È­ µ¥ÀÌÅÍ { cEnhancedMap::cIterator i = mEnhancedMap.Begin(); cEnhancedMap::cIterator end = mEnhancedMap.End(); for( ; i != end; ++i ) { cEnhancedOptionArr* optionArr = (cEnhancedOptionArr*)(i->mSecond); cEnhancedOptionArr::cIterator i2 = optionArr->Begin(); cEnhancedOptionArr::cIterator end2 = optionArr->End(); for( ; i2 != end2; ++i2 ) { delete (sItemEnhanced*)(*i2); } optionArr->Clear(); delete optionArr; } mEnhancedMap.Clear(); } /// Ä«µåÀåÂø µ¥ÀÌÅÍ { cPutCardSlotMap::cIterator i = mPutCardSlotMap.Begin(); cPutCardSlotMap::cIterator end = mPutCardSlotMap.End(); for( ; i != end; ++i ) { delete (sItemPutCardSlot*)(i->mSecond); } mPutCardSlotMap.Clear(); } /// { cSetInfoMap::cIterator i = mSetInfoMap.Begin(); cSetInfoMap::cIterator end = mSetInfoMap.End(); for( ; i != end; ++i ) { delete (cItemSetInfo*)(i->mSecond); } mSetInfoMap.Clear(); } } bool cItemManager::Init() { if( LoadAbility( ITEM_ABILITY_FILENAME ) == false ) { assert( 0 && "failed to load item ability" ); return false; } if( LoadLimit( ITEM_LIMIT_FILENAME ) == false ) { assert( 0 && "failed to load item limit" ); return false; } if( LoadCard( ITEM_CARD_FILENAME ) == false ) { assert( 0 && "failed to load item card" ); return false; } if( LoadTarot( ITEM_TAROT_FILENAME ) == false ) { assert( 0 && "failed to load item tarot" ); return false; } if( LoadSpread( ITEM_SPREAD_FILENAME ) == false ) { assert( 0 && "failed to load item spread" ); return false; } if( LoadDisjoint( ITEM_DISJOINT_FILENAME ) == false ) { assert( 0 && "failed to load item disjoint" ); return false; } if( LoadEnhanced( ITEM_ENHANCED_FILENAME ) == false ) { assert( 0 && "failed to load item enhanced" ); return false; } if( LoadCardSlot( ITEM_CARDSLOT_FILENAME ) == false ) { assert( 0 && "failed to load item card slot" ); return false; } if( LoadItemSet( ITEM_SETINFO_FILENAME ) == false ) { assert( 0 && "failed to load item set info" ); return false; } /// À§ÀÇ µ¥ÀÌÅ͸¦ ÂüÁ¶ÇϹǷΠ°¡Àå ³ªÁß¿¡ ·ÎµåÇÑ´Ù if( LoadDefine( ITEM_DEFINE_FILENAME ) == false ) { assert( 0 && "failed to load item define" ); return false; } return true; } cItemDefine* cItemManager::GetItemDefine( unsigned long itemIndex ) { if( itemIndex == 0 ) return 0; cDefineMap::cConstIterator i = mDefineMap.Find( itemIndex ); if( i == mDefineMap.End() ) return 0; else return (cItemDefine*)i->mSecond; } cItemAbility* cItemManager::GetItemAbility( unsigned long itemIndex ) { if( itemIndex == 0 ) return 0; cAbilityMap::cConstIterator i = mAbilityMap.Find( itemIndex ); if( i == mAbilityMap.End() ) return 0; else return (cItemAbility*)i->mSecond; } cItemSetInfo* cItemManager::GetItemSetInfo( unsigned int setIndex ) { return (cItemSetInfo*)mSetInfoMap.GetAt( setIndex ); } cItemLimit* cItemManager::GetItemLimit( unsigned long itemIndex ) { if( itemIndex == 0 ) return 0; cLimitMap::cConstIterator i = mLimitMap.Find( itemIndex ); if( i == mLimitMap.End() ) return 0; else return (cItemLimit*)i->mSecond; } cItemCard* cItemManager::GetItemCard( unsigned long itemIndex ) { cCardMap::cConstIterator i = mCardMap.Find( itemIndex ); if( i == mCardMap.End() ) return 0; else return (cItemCard*)i->mSecond; } cItemTarot* cItemManager::GetItemTarot( unsigned long itemIndex ) { if( itemIndex == 0 ) return 0; cTarotMap::cConstIterator i = mTarotMap.Find( itemIndex ); if( i == mTarotMap.End() ) return 0; else return (cItemTarot*)i->mSecond; } cItemSpread* cItemManager::GetItemSpread( unsigned long itemIndex ) { if( itemIndex == 0 ) return 0; cSpreadMap::cConstIterator i = mSpreadMap.Find( itemIndex ); if( i == mSpreadMap.End() ) return 0; else return (cItemSpread*)i->mSecond; } sItemDisjoint* cItemManager::GetItemDisjoint( unsigned long index ) { if( index == 0 ) return 0; cDisjointMap::cConstIterator i = mDisjointMap.Find( index ); if( i == mDisjointMap.End() ) return 0; else return (sItemDisjoint*)(i->mSecond); } cEnhancedOptionArr* cItemManager::GetItemEnhanced( unsigned long index ) { if( index == 0 ) return 0; cEnhancedMap::cConstIterator i = mEnhancedMap.Find( index ); if( i == mEnhancedMap.End() ) return 0; else return (cEnhancedOptionArr*)(i->mSecond); } sItemPutCardSlot* cItemManager::GetItemPutCardSlot( unsigned long index ) { cPutCardSlotMap::cConstIterator i = mPutCardSlotMap.Find( index ); if( i == mPutCardSlotMap.End() ) return 0; else return (sItemPutCardSlot*)(i->mSecond); } /// bool cItemManager::LoadAbility( const cString& pathName ) { cFileLoader loader; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load item ability" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), " \t\r\n", pathName.Cstr() ); cString str; while( tokenizer.IsEnd() == false ) { /// À妽º if( tokenizer.GetNext( &str ) == false ) return false; long index = str.ToInt(); assert( index > 0 ); /// »ç¿ëÈ¿°ú¼³¸í if( tokenizer.GetNext( &str ) == false ) return false; long discription = (long)str.ToInt(); /// ¹æ¾î±¸ÀçÁú if( tokenizer.GetNext( &str ) == false ) return false; short defenseType = (short)str.ToInt(); /// ¹üÀ§¹æ½Ä if( tokenizer.GetNext( &str ) == false ) return false; short rangeType = (short)str.ToInt(); /// È¿°úÀû¿ëŸ°Ù if( tokenizer.GetNext( &str ) == false ) return false; short targetType = (short)str.ToInt(); /// »ç¿ë°Å¸® if( tokenizer.GetNext( &str ) == false ) return false; short useRange = (short)str.ToInt(); /// ¹°¸® ¹æ¾î·Â if( tokenizer.GetNext( &str ) == false ) return false; short physicDefense = (short)str.ToInt(); /// ¸¶¹ý ¹æ¾î·Â if( tokenizer.GetNext( &str ) == false ) return false; short magicDefense = (short)str.ToInt(); /// »çÁ¤°Å¸® if( tokenizer.GetNext( &str ) == false ) return false; short attackRange = (short)str.ToInt(); /// °ø°Ý ¼Óµµ if( tokenizer.GetNext( &str ) == false ) return false; short attackSpeed = (short)str.ToInt(); /// ÄðŸÀÓ if( tokenizer.GetNext( &str ) == false ) return false; long coolTime = (long)str.ToInt(); /// ±×·ì ÄðŸÀÓ ¹øÈ£ if( tokenizer.GetNext( &str ) == false ) return false; unsigned int groupTime = (unsigned int)str.ToInt(); /// ¹°¸®:ÃÖ¼Ò°ø°Ý·Â if( tokenizer.GetNext( &str ) == false ) return false; short physicMinAttack = (short)str.ToInt(); /// ¹°¸®:ÃÖ´ë°ø°Ý·Â if( tokenizer.GetNext( &str ) == false ) return false; short physicMaxAttack = (short)str.ToInt(); /// ¸¶¹ý:ÃÖ¼Ò°ø°Ý·Â if( tokenizer.GetNext( &str ) == false ) return false; short magicMinAttack = (short)str.ToInt(); /// ¸¶¹ý:ÃÖ´ë°ø°Ý·Â if( tokenizer.GetNext( &str ) == false ) return false; short magicMaxAttack = (short)str.ToInt(); /// Èú ȸº¹·® if( tokenizer.GetNext( &str ) == false ) return false; short healValue = (short)str.ToInt(); /// ¿É¼Ç °ª sAblityOption opt[5]; for( int i = 0; i < 5; ++i ) { if( tokenizer.GetNext( &str ) == false ) return false; opt[i].mOptType = (short)str.ToInt(); if( tokenizer.GetNext( &str ) == false ) return false; opt[i].mOptValue = (short)str.ToInt(); } /// ½ºÅ³È¿°ú if( tokenizer.GetNext( &str ) == false ) return false; long InfluenceIndex = (long)str.ToInt(); /// ¹ßµ¿È¿°ú if( tokenizer.GetNext( &str ) == false ) return false; long activeIndex = (long)str.ToInt(); /// ¾ÆÀÌÅÛ ´É·ÂÀ» »ý¼º cItemAbility* p = new cItemAbility; p->mDescription = discription; p->mDefenseType = defenseType; p->mRangeType = rangeType; p->mTargetType = targetType; p->mUseRange = useRange; p->mPhysicDefense = physicDefense; p->mMagicDefense = magicDefense; p->mAttackRange = attackRange; p->mAttackSpeed = attackSpeed; p->mCoolTime = coolTime; p->mGroupNum = groupTime; p->mPhysicMinAttack = physicMinAttack; p->mPhysicMaxAttack = physicMaxAttack; p->mMagicMinAttack = magicMinAttack; p->mMagicMaxAttack = magicMaxAttack; p->mHealValue = healValue; p->mInfluenceIndex = InfluenceIndex; p->mActiveInfluenceIndex = activeIndex; for( int i = 0; i < 5; ++i ) { p->mOption[i] = opt[i]; } if( mAbilityMap.Insert( index, p ) == false ) { assert( 0 && "failed to insert item ability, maybe already exist" ); return false; } } return true; } bool cItemManager::LoadLimit( const cString& pathName ) { cFileLoader loader; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load item limit" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), " \t\r\n", pathName.Cstr() ); cString str; while( tokenizer.IsEnd() == false ) { /// À妽º if( tokenizer.GetNext( &str ) == false ) return false; long index = str.ToInt(); assert( index > 0 ); /// ij¸¯ÅÍ:Á¾Á· if( tokenizer.GetNext( &str ) == false ) return false; char charRace = (char)str.ToInt(); /// ij¸¯ÅÍ:¼ºº° if( tokenizer.GetNext( &str ) == false ) return false; char charGender = (char)str.ToInt(); /// Á÷¾÷1 if( tokenizer.GetNext( &str ) == false ) return false; long job1 = (long)str.ToInt(); /// Á÷¾÷2 if( tokenizer.GetNext( &str ) == false ) return false; long job2 = (long)str.ToInt(); /// ij¸¯ÅÍ:·¹º§ if( tokenizer.GetNext( &str ) == false ) return false; char charLevel = (char)str.ToInt(); /// ij¸¯ÅÍ:ÃÖ´ë·¹º§ if( tokenizer.GetNext( &str ) == false ) return false; unsigned char charMaxLevel = (unsigned char)str.ToInt(); /// ÀüÀå »ç¿ëÁ¦ÇÑ if( tokenizer.GetNext( &str ) == false ) return false; eUseMapType useMapType = static_cast( str.ToInt() ); /// ¼¼·Â if( tokenizer.GetNext( &str ) == false ) return false; char forcetype = (char)str.ToInt(); /// º¸Á¶Á÷¾÷ if( tokenizer.GetNext( &str ) == false ) return false; long makeSkill = (long)str.ToInt(); /// º¸Á¶Á÷¾÷ if( tokenizer.GetNext( &str ) == false ) return false; unsigned long makeSkillExp = (unsigned long)str.ToInt(); /// ¾ÆÀÌÅÛ Á¦ÇÑÀ» »ý¼º cItemLimit* p = new cItemLimit; p->mCharRace = charRace; p->mCharGender = charGender; p->mCharJob1 = job1; p->mCharJob2 = job2; p->mCharLevel = charLevel; p->mCharMaxLevel = charMaxLevel; p->mUseMapType = useMapType; p->mForceType = forcetype; p->mMakeSkill = makeSkill; p->mMakeSkillExp = makeSkillExp; if( mLimitMap.Insert( index, p ) == false ) { assert( 0 && "failed to insert item limit, maybe already exist" ); return false; } } return true; } bool cItemManager::LoadCard( const cString& pathName ) { cFileLoader loader; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load tarot define" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), " \t\r\n", pathName.Cstr() ); 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; char episode = (char)str.ToInt(); /// Ä«µå³Ñ¹ö if( tokenizer.GetNext( &str ) == false ) return false; unsigned int cardnum = (unsigned int)str.ToInt(); /// Èñ±Íµµ if( tokenizer.GetNext( &str ) == false ) return false; char rarelevel = (char)str.ToInt(); /// Ä«µåŸÀÔ if( tokenizer.GetNext( &str ) == false ) return false; char cardtype = (char)str.ToInt(); /// ÀåÂøÀ§Ä¡ if( tokenizer.GetNext( &str ) == false ) return false; char wearPos = (char)str.ToInt(); /// Ä«µåÀ̹ÌÁö À妽º if( tokenizer.GetNext( &str ) == false ) return false; unsigned int imageIndex = (unsigned int)str.ToInt(); /// µ¥ÀÌÅÍ ¼¼ÆÃ cItemCard* p = new cItemCard; p->mEpisode = episode; p->mCardNumber = cardnum; p->mRareLevel = rarelevel; p->mCardType = cardtype; p->mWearPos = wearPos; p->mImageIndex = imageIndex; if( mCardMap.Insert( index, p ) == false ) { assert( 0 && "failed to insert card define, maybe already exist" ); return false; } } return true; } bool cItemManager::LoadTarot( const cString& pathName ) { cFileLoader loader; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load tarot define" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), " \t\r\n", pathName.Cstr() ); 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; unsigned int imageIndex = (unsigned int)str.ToInt(); assert( imageIndex >= 0 ); /// °íÀ¯ ¹øÈ£ if( tokenizer.GetNext( &str ) == false ) return false; char number = (char)str.ToInt(); /// Ä«µå ·¹º§ if( tokenizer.GetNext( &str ) == false ) return false; char level = (char)str.ToInt(); /// Á¤¹æÇâ¼öÄ¡ if( tokenizer.GetNext( &str ) == false ) return false; short strvalue = (short)str.ToInt(); /// ¿ª¹æÇâ¼öÄ¡ if( tokenizer.GetNext( &str ) == false ) return false; short invvalue = (short)str.ToInt(); /// ¼Ó¼º if( tokenizer.GetNext( &str ) == false ) return false; char prop = (char)str.ToInt(); /// ¿¡ÇǼҵå(ÆÇ) if( tokenizer.GetNext( &str ) == false ) return false; char episode = (char)str.ToInt(); /// Á¤¹æÇâ ÇØ¼® À妽º if( tokenizer.GetNext( &str ) == false ) return false; unsigned long strdescIdx = (unsigned long)str.ToInt(); assert( strdescIdx >= 0 ); /// ¿ª¹æÇâ ÇØ¼® À妽º if( tokenizer.GetNext( &str ) == false ) return false; unsigned long invdescIdx = (unsigned long)str.ToInt(); assert( invdescIdx >= 0 ); /// µ¥ÀÌÅÍ ¼¼ÆÃ cItemTarot* p = new cItemTarot; p->mImageIndex = imageIndex; p->mNumber = number; p->mLevel = level; p->mStraightValue = strvalue; p->mInverseValue = invvalue; p->mProperty = prop; p->mEpisode = episode; p->mStraightIdx = strdescIdx; p->mInverseIdx = invdescIdx; if( mTarotMap.Insert( index, p ) == false ) { assert( 0 && "failed to insert tarot define, maybe already exist" ); return false; } } return true; } bool cItemManager::LoadSpread( const cString& pathName ) { cFileLoader loader; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load spread define" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), " \t\r\n", pathName.Cstr() ); cString str; while( tokenizer.IsEnd() == false ) { long index = 0; cItemSpread* p = new cItemSpread; for( int i = 0; i < 10; ++i ) { /// ½ºÇÁ·¹µå À妽º if( tokenizer.GetNext( &str ) == false ) { assert( 0 && "spread must 10 list" );; return false; } index = (long)str.ToInt(); assert( index >= 0 ); /// À̹ÌÁö À妽º if( tokenizer.GetNext( &str ) == false ) return false; int imageIdx = (int)str.ToInt(); /// ÁÂÇ¥ À妽º if( tokenizer.GetNext( &str ) == false ) return false; long axisIndex = (long)str.ToInt(); assert( axisIndex >= 0 ); /// x ÁÂÇ¥ if( tokenizer.GetNext( &str ) == false ) return false; unsigned int x = (unsigned int)str.ToInt(); /// y ÁÂÇ¥ if( tokenizer.GetNext( &str ) == false ) return false; unsigned int y = (unsigned int)str.ToInt(); /// ¹æÇâ if( tokenizer.GetNext( &str ) == false ) return false; int dir = (int)str.ToInt(); /// °è»ê½Ä if( tokenizer.GetNext( &str ) == false ) return false; unsigned int calc = 0; if( !str.CompareNoCase("*") ) { calc = 1; } else if( !str.CompareNoCase("/") ) { calc = 2; } else if( !str.CompareNoCase("+") ) { calc = 3; } /// °è»ê¼öÄ¡ if( tokenizer.GetNext( &str ) == false ) return false; int value = (int)str.ToInt(); /// µ¥ÀÌÅÍ »ðÀÔ p->mParam[i].mImageIndex = imageIdx; p->mParam[i].mX = x; p->mParam[i].mY = y; p->mParam[i].mDir = dir; p->mParam[i].mCalc = calc; p->mParam[i].mValue = value; if( axisIndex < 1 || axisIndex > 10 ) { assert( 0 && "error axis index" ); return false; } } if( mSpreadMap.Insert( index, p ) == false ) { assert( 0 && "failed to insert spread define, maybe already exist" ); return false; } } return true; } /// ºÐÇØ °ü·Ã µ¥ÀÌÅÍ ·Îµù bool cItemManager::LoadDisjoint( const cString& pathName ) { cFileLoader loader; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load item disjoint" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), "\t\r\n", pathName.Cstr() ); 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 price = (long)str.ToInt(); /// ¾ÆÀÌÅÛ1 if( tokenizer.GetNext( &str ) == false ) return false; long itemIdx1 = (long)str.ToInt(); /// ¾ÆÀÌÅÛ1 ¼ö·® if( tokenizer.GetNext( &str ) == false ) return false; int count1 = (int)str.ToInt(); /// ¾ÆÀÌÅÛ2 if( tokenizer.GetNext( &str ) == false ) return false; long itemIdx2 = (long)str.ToInt(); /// ¾ÆÀÌÅÛ2 ¼ö·® if( tokenizer.GetNext( &str ) == false ) return false; int count2 = (int)str.ToInt(); /// ¾ÆÀÌÅÛ3 if( tokenizer.GetNext( &str ) == false ) return false; long itemIdx3 = (long)str.ToInt(); /// ¾ÆÀÌÅÛ3 ¼ö·® if( tokenizer.GetNext( &str ) == false ) return false; int count3 = (int)str.ToInt(); /// ¾ÆÀÌÅÛ4 if( tokenizer.GetNext( &str ) == false ) return false; long itemIdx4 = (long)str.ToInt(); /// ¾ÆÀÌÅÛ4 ¼ö·® if( tokenizer.GetNext( &str ) == false ) return false; int count4 = (int)str.ToInt(); /// ¾ÆÀÌÅÛ5 if( tokenizer.GetNext( &str ) == false ) return false; long itemIdx5 = (long)str.ToInt(); /// ¾ÆÀÌÅÛ5 ¼ö·® if( tokenizer.GetNext( &str ) == false ) return false; int count5 = (int)str.ToInt(); /// ¾ÆÀÌÅÛ6 if( tokenizer.GetNext( &str ) == false ) return false; long itemIdx6 = (long)str.ToInt(); /// ¾ÆÀÌÅÛ6 ¼ö·® if( tokenizer.GetNext( &str ) == false ) return false; int count6 = (int)str.ToInt(); /// sItemDisjoint* p = new sItemDisjoint; p->mPrice = price; p->mDisjoint[0].itemIndex = itemIdx1; p->mDisjoint[0].count = count1; p->mDisjoint[1].itemIndex = itemIdx2; p->mDisjoint[1].count = count2; p->mDisjoint[2].itemIndex = itemIdx3; p->mDisjoint[2].count = count3; p->mDisjoint[3].itemIndex = itemIdx4; p->mDisjoint[3].count = count4; p->mDisjoint[4].itemIndex = itemIdx5; p->mDisjoint[4].count = count5; p->mDisjoint[5].itemIndex = itemIdx6; p->mDisjoint[5].count = count6; if( mDisjointMap.Insert( index, p ) == false ) { assert( 0 && "failed to insert item disjoint, maybe already exist" ); return false; } } return true; } bool cItemManager::LoadEnhanced( const cString& pathName ) { cFileLoader loader; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load item enhanced" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), "\t\r\n", pathName.Cstr() ); cString str; while( tokenizer.IsEnd() == false ) { /// index ±¸ºÐÀÚ if( tokenizer.GetNext( &str ) == false ) return false; if( str.CompareNoCase("Index") != 0 ) return false; /// À妽º if( tokenizer.GetNext( &str ) == false ) return false; long index = (long)str.ToInt(); cEnhancedOptionArr* pEnhancedOption = new cEnhancedOptionArr; while( tokenizer.GetNext( &str ) ) { if( str.CompareNoCase("End") == 0 ) break; sItemEnhanced* p = new sItemEnhanced; p->mEnhancedType = (unsigned char)str.ToInt(); /// Áõ°¡°ª for( unsigned int i = 0; i < MAX_ITEM_ENHANCED; ++i ) { if( tokenizer.GetNext( &str ) == false ) return false; p->mValue[i] = (short)str.ToInt(); } pEnhancedOption->PushBack( p ); } /// if( mEnhancedMap.Insert( index, pEnhancedOption ) == false ) { assert( 0 && "failed to insert item enhanced, maybe already exist" ); return false; } } return true; } /// Ä«µå ½½·Ô ·Îµù bool cItemManager::LoadCardSlot( const cString& pathName ) { cFileLoader loader; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load card slot" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), "\t\r\n", pathName.Cstr() ); cString str; while( tokenizer.IsEnd() == false ) { /// À妽º if( tokenizer.GetNext( &str ) == false ) return false; long index = (long)str.ToInt(); /// ½½·Ô ŸÀÔ1 if( tokenizer.GetNext( &str ) == false ) return false; short type1 = (short)str.ToInt(); /// ½½·Ô ŸÀÔ2 if( tokenizer.GetNext( &str ) == false ) return false; short type2 = (short)str.ToInt(); /// ½½·Ô ŸÀÔ3 if( tokenizer.GetNext( &str ) == false ) return false; short type3 = (short)str.ToInt(); /// ½½·Ô ŸÀÔ4 if( tokenizer.GetNext( &str ) == false ) return false; short type4 = (short)str.ToInt(); /// ½½·Ô ŸÀÔ5 if( tokenizer.GetNext( &str ) == false ) return false; short type5 = (short)str.ToInt(); /// µ¥ÀÌÅÍ »ðÀÔ sItemPutCardSlot* p = new sItemPutCardSlot; p->mSlotType[0] = type1; p->mSlotType[1] = type2; p->mSlotType[2] = type3; p->mSlotType[3] = type4; p->mSlotType[4] = type5; /// if( mPutCardSlotMap.Insert( index, p ) == false ) { assert( 0 && "failed to insert item putcard, maybe already exist" ); return false; } } return true; } bool cItemManager::LoadDefine( const cString& pathName ) { cFileLoader loader; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load item define" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), "\t\r\n", pathName.Cstr() ); 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; str.ToInt(); /// ÅøÆÁ À妽º if( tokenizer.GetNext( &str ) == false ) return false; 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; unsigned int highType = (unsigned int)str.ToInt(); /// °Ë»ö Áߺзù if( tokenizer.GetNext( &str ) == false ) return false; unsigned int middleType = (unsigned int)str.ToInt(); /// °Ë»ö ¼ÒºÐ·ù if( tokenizer.GetNext( &str ) == false ) return false; unsigned int lowType = (unsigned int)str.ToInt(); /// ¹«°Ô 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 long presentNum = (unsigned long)str.ToInt(); /// º¸À¯ °¡´É°¹¼ö if( tokenizer.GetNext( &str ) == false ) return false; unsigned int maxHaveInven = (unsigned int)str.ToInt(); // ±â°£Á¦ ¼³Á¤ if( tokenizer.GetNext( &str ) == false ) return false; BYTE licenseClass = (BYTE)str.ToInt(); // »ç¿ë±âÇÑ if( tokenizer.GetNext( &str ) == false ) return false; long licenseValid = (long)str.ToInt(); // ÀÎÁõ¿©ºÎ if( tokenizer.GetNext( &str ) == false ) return false; BYTE licenseType = (BYTE)str.ToInt(); /// »ç¿ëÀÚ°Å·¡ ¿©ºÎ(0°Å·¡°¡´É/1°Å·¡ºÒ°¡) if( tokenizer.GetNext( &str ) == false ) return false; char exchange = (char)str.ToInt(); /// ´É·Â À妽º 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(); (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; str.ToInt(); /// ¸ðµ¨ À妽º0 if( tokenizer.GetNext( &str ) == false ) return false; str.ToInt(); /// ¸ðµ¨ À妽º1 if( tokenizer.GetNext( &str ) == false ) return false; 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; /// ¾ÆÀÌÅÛ Á¤ÀǸ¦ »ý¼º cItemDefine* p = new cItemDefine; p->mName = _T(""); p->mDescription = _T("0"); p->mType = type; p->mSubType = subType; p->mHighType = highType; p->mMiddleType = middleType; p->mLowType = lowType; p->mWeight = weight; p->mCapacity = capacity; p->mSellType = sellType; p->mSellPrice = sellPrice; p->mBuyType = buyType; p->mBuyPrice = buyPrice; p->mPresentNum = presentNum; p->mMaxHaveInven = maxHaveInven; p->mLicenseClass = licenseClass; p->mLicenseValidThru = licenseValid; p->mLicenseType = licenseType; p->mExchange = exchange; p->mTitleIndex = titleIndex; p->mSetIndex = setIndex; p->mAbility = GetItemAbility( abilityIndex ); p->mLimit = GetItemLimit( limitIndex ); //p->mCard = GetItemCard( cardIndex ); p->mTarot = GetItemTarot( tarotIndex ); p->mSpread = GetItemSpread( spreadIndex ); p->mDisjoint = GetItemDisjoint( disjointIndex ); p->mEnhanceArr = GetItemEnhanced( enhanceIndex ); p->mPutCardSlot = GetItemPutCardSlot( cardSlotIndex ); p->mIconParam = 0; p->mFileNames0 = 0; p->mFileNames1 = 0; p->mHideEar = hideEar; p->mTooltipColor = tooltipColor; if( p->mLimit == 0 ) { assert( 0 && "failed to find item limit" ); return false; } /// ÀåÂø ŸÀÔÀ» ¼³Á¤ if( type == ITEM_WEAPON ) { switch( subType ) { /// ÇÑ¼Õ°Ë case ITEM_WEAPON_SWORD: p->mEquipType = ITEM_EQUIP_ONE_HAND; break; /// ¾ç¼Õ°Ë, ´Ü°Ë, ÃÑ, ÁöÆÎÀÌ, À̵µ·ù case ITEM_WEAPON_BLADE: case ITEM_WEAPON_GUN: case ITEM_WEAPON_STAFF: p->mEquipType = ITEM_EQUIP_TWO_HANDS; break; case ITEM_WEAPON_DUAL: case ITEM_WEAPON_CUTTER: p->mEquipType = ITEM_EQUIP_TWO_HANDS; break; /// ¹æÆÐ case ITEM_WEAPON_SHIELD: p->mEquipType = ITEM_EQUIP_SHIELD; break; } } /// Ç÷¢°ªÀ» ¼³Á¤ switch( type ) { case ITEM_WEAPON: switch( subType ) { case ITEM_WEAPON_SWORD: p->mFlag = ITEM_FLAG_SWORD; break; case ITEM_WEAPON_BLADE: p->mFlag = ITEM_FLAG_BLADE; break; case ITEM_WEAPON_DUAL: p->mFlag = ITEM_FLAG_DUAL; break; case ITEM_WEAPON_CUTTER: p->mFlag = ITEM_FLAG_CUTTER; break; case ITEM_WEAPON_GUN: p->mFlag = ITEM_FLAG_GUN; break; case ITEM_WEAPON_STAFF: p->mFlag = ITEM_FLAG_STAFF; break; case ITEM_WEAPON_SHIELD: p->mFlag = ITEM_FLAG_SHIELD; break; default: assert( 0 && "invalid item weapon subtype" ); } break; case ITEM_WEAR: switch( subType ) { case ITEM_WEAR_HEAD: p->mFlag = ITEM_FLAG_HEAD; break; case ITEM_WEAR_UPPER: p->mFlag = ITEM_FLAG_UPPER; break; case ITEM_WEAR_LOWER: p->mFlag = ITEM_FLAG_LOWER; break; case ITEM_WEAR_HANDS: p->mFlag = ITEM_FLAG_HANDS; break; case ITEM_WEAR_FEET: p->mFlag = ITEM_FLAG_FEET; break; case ITEM_WEAR_ONEPIECE: p->mFlag = ITEM_FLAG_ONEPIECE; break; case ITEM_WEAR_COS_ONEPIECE: p->mFlag = ITEM_FLAG_COSTUME_UPPER; break; case ITEM_WEAR_COS_HEAD: p->mFlag = ITEM_FLAG_COSTUME_HEAD; break; case ITEM_WEAR_COS_UPPER: p->mFlag = ITEM_FLAG_COSTUME_UPPER; break; case ITEM_WEAR_COS_LOWER: p->mFlag = ITEM_FLAG_COSTUME_LOWER; break; case ITEM_WEAR_COS_HANDS: p->mFlag = ITEM_FLAG_COSTUME_HANDS; break; case ITEM_WEAR_COS_FEET: p->mFlag = ITEM_FLAG_COSTUME_FEET; break; default: assert( 0 && "invalid item wear subtype" ); } break; case ITEM_ACCESSORY: switch( subType ) { case ITEM_ACCESSORY_EARRING: p->mFlag = ITEM_FLAG_EARRING; break; case ITEM_ACCESSORY_NECKLACE: p->mFlag = ITEM_FLAG_NECKLACE; break; case ITEM_ACCESSORY_BROOCH: p->mFlag = ITEM_FLAG_BROOCH; break; case ITEM_ACCESSORY_BRACELET: p->mFlag = ITEM_FLAG_BRACELET; break; case ITEM_ACCESSORY_RING: p->mFlag = ITEM_FLAG_RING; break; case ITEM_ACCESSORY_COS_FACE: p->mFlag = ITEM_FLAG_COSTUME_FACE; break; case ITEM_ACCESSORY_COS_BACK: p->mFlag = ITEM_FLAG_COSTUME_BACK; break; default: assert( 0 && "invalid item accessory subtype" ); } break; case ITEM_CARD: /// ij¸¯ÅÍ ÀåÂø Ä«µå p->mFlag = ( subType == ITEM_CARD_EQUIP_C ) ? ITEM_FLAG_EQUIPCARD : ITEM_FLAG_UNKNOWN; break; default: p->mFlag = ITEM_FLAG_UNKNOWN; break; } /// Ä«µåÀåÂø °¡´É ½½·Ô Ä«¿îÆ® ¼¼±â sItemPutCardSlot* slot = p->mPutCardSlot; if( slot ) { for( int i = 0; i < MAX_CARD_SLOT; ++i ) { /// ÀåÂø°¡´ÉÇÑ ½½·Ô ¼¼±â if( slot->mSlotType[i] > 0 ) p->mPutSlotCount++; } } if( mDefineMap.Insert( index, p ) == false ) { assert( 0 && "failed to insert item define, maybe already exist" ); return false; } /// ¼¼Æ® Á¤º¸ »ðÀÔ if( p->mSetIndex != 0 ) { cItemSetInfo* setInfo = (cItemSetInfo*)mSetInfoMap.GetAt( p->mSetIndex ); if( setInfo ) { setInfo->AddItem( index ); } else { assert(0); } } } return true; } bool cItemManager::LoadItemSet( const cString& pathName ) { cFileLoader loader; if( loader.Open( pathName, true ) == false ) { assert( 0 && "failed to load item set info" ); return false; } cTokenizer tokenizer( loader.GetBufferPtr(), loader.GetSize(), "\t\r\n", pathName.Cstr() ); 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; unsigned int count = (unsigned int)str.ToInt(); /// ¼¼Æ® À̸§ if( tokenizer.GetNext( &str ) == false ) return false; unsigned int nameIdx = (unsigned int)str.ToInt(); /// ¿É¼Ç if( tokenizer.GetNext( &str ) == false ) return false; short optType1 = (short)str.ToInt(); if( tokenizer.GetNext( &str ) == false ) return false; short optValue1 = (short)str.ToInt(); if( tokenizer.GetNext( &str ) == false ) return false; short optType2 = (short)str.ToInt(); if( tokenizer.GetNext( &str ) == false ) return false; short optValue2 = (short)str.ToInt(); if( tokenizer.GetNext( &str ) == false ) return false; unsigned long actIdx = str.ToInt(); cItemSetInfo* setInfo = (cItemSetInfo*)mSetInfoMap.GetAt(index); if( setInfo == 0 ) { setInfo = new cItemSetInfo; if( setInfo == 0 || mSetInfoMap.Insert( index, setInfo ) == false ) { assert(0); continue; } } /// À̸§Á¤º¸ setInfo->mSetNameIdx = nameIdx; /// °¹¼öº° ¿É¼ÇÁ¤º¸ sSetAblityOption* opt = new sSetAblityOption; opt->mOptType[0] = optType1; opt->mOptValue[0] = optValue1; opt->mOptType[1] = optType2; opt->mOptValue[1] = optValue2; opt->mActIdx = actIdx; /// optÁ¤º¸ ¼ÂÆÃ setInfo->AddOption( count, opt ); } return true; }