#include "stdafx.h" #include "TarotManager.h" #include "ItemManager.h" #include "GameUIManager.h" #include "CardImage.h" #include "TarotWindow.h" #include "TarotControlWindow.h" #include "GameResourceManager.h" #include "ChatManager.h" #include "Npc.h" #include "UINpcTelling.h" #include "Player_Common.h" #include "UIManager.h" #include "ObjectManager.h" #include "Hero.h" #define TAROT_PARAMS_FILENAME "./Script/Interface/Path_Tarot.txt" #define NPCTAROT_SPREAD_FILE "./Script/Resource/FortuneTarot_Spread.txt" #define NPCTAROT_COMMENT_FILE "./Script/Resource/FortuneTarot_Comment.txt" #define NPCTAROT_CARD_FILE "./Script/Resource/FortuneTarot_Card.txt" cTarotManager* cTarotManager::mSingleton = 0; cTarotManager::cTarotManager() { assert( mSingleton == 0 && "bad singleton!" ); mSingleton = this; mCurrentPage = ePAGE_NONE; mTarotType = eTAROT_NONE; } cTarotManager::~cTarotManager() { mSingleton = 0; /// Ÿ·Ô À̹ÌÁö ÆÄ¶÷ { cTarotParamMap::cIterator i = mTarotParamMap.Begin(); cTarotParamMap::cIterator end = mTarotParamMap.End(); for( ; i != end; ++i ) { delete (cCardParam*)(i->mSecond); } mTarotParamMap.Clear(); } /// ½ºÇÁ·¹µå { cNpcSpreadMap::cIterator i = mNpcSpreadMap.Begin(); cNpcSpreadMap::cIterator end = mNpcSpreadMap.End(); for( ; i != end; ++i ) { sNpcSpread* p = (sNpcSpread*)(i->mSecond); SAFE_DELETE( p ); } mNpcSpreadMap.Clear(); } /// npc Ä«µå { cNpcTarotMap::cIterator i = mNpcTarotMap.Begin(); cNpcTarotMap::cIterator end = mNpcTarotMap.End(); for( ; i != end; ++i ) { sNpcTarotCard* p = (sNpcTarotCard*)(i->mSecond); SAFE_DELETE( p ); } mNpcTarotMap.Clear(); } /// ÇØ¼® { cNpcCommentMap::cIterator i = mNpcCommentMap.Begin(); cNpcCommentMap::cIterator end = mNpcCommentMap.End(); for( ; i != end; ++i ) { sNpcTarotComment* p = (sNpcTarotComment*)(i->mSecond); SAFE_DELETE( p ); } mNpcCommentMap.Clear(); } /// ¼±Åà Ÿ·Ô À妽º ClearCardinfo(); } /// void cTarotManager::Clear() { /// »õ·Î¿î Á¡ÀÌ ½ÃÀ۵DZâÀü¿¡ µ¥ÀÌÅÍ Å¬¸®¾î /// ¼±Åà Ÿ·Ô À妽º ClearCardinfo(); } /// bool cTarotManager::Init() { /// Ÿ·Ô À̹ÌÁö ½ºÅ©¸³Æ® ·Îµù if( LoadTarotParams( TAROT_PARAMS_FILENAME) == false ) { assert( 0 && "failed to load tarot params file" ); return false; } /// ½ºÇÁ·¹µå Á¤º¸ ·Îµå if( LoadNpcSpread( NPCTAROT_SPREAD_FILE ) == false ) { assert( 0 && "failed to load npc spread" ); return false; } /// ÇØ¼® Á¤º¸ ·Îµå if( LoadComment( NPCTAROT_COMMENT_FILE ) == false ) { assert( 0 && "failed to load tarot comment" ); return false; } if( LoadTarotDeck( NPCTAROT_CARD_FILE ) == false ) { assert( 0 && "failed to load tarot" ); return false; } return true; } void cTarotManager::TarotReadyLeader() { unsigned long state = HERO->GetState(); if( !(state == eOBJECT_STATE_IDLE || state == eOBJECT_STATE_MOVE || state == ePLAYER_STATE_SITDOWN ) ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 235 ) ); return; } /// ÀÌ¹Ì Å¸·Ô°ü·ÃâÀ» º¸°íÀÖÀ¸¸é ¸®ÅÏ if( IsUsingTarot() ) return; unsigned int error = TAROTMAN->CheckOpenTarot(); if( error != ERROR_NONE ) { TAROTMAN->ShowErrorMsg( error ); return; } if( HERO->IsRideVehicle() == true ) { MSGROOT msg; ::memset( &msg, 0, sizeof(msg) ); msg.Category = NM_PLAYER; msg.Protocol = NM_PLAYER_VEHICLE_END_REQ; NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); HERO->AlightVehicle(); } /// µû¶ó°¡±â Á¾·á if( HERO->IsFollowing() ) HERO->ReleaseFollowPlayer(); /// tarot Áغñ»óÅ ¾Ë¸² MSG_REQ_TAROT_READER_READY msg; msg.Category = NM_TAROT; msg.Protocol = NM_TAROT_READER_READY_REQ; NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); } bool cTarotManager::TarotSelfOpen() { unsigned long state = HERO->GetState(); if( !(state == eOBJECT_STATE_IDLE || state == eOBJECT_STATE_MOVE || state == ePLAYER_STATE_SITDOWN ) ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 235 ) ); return false; } GAMEUI->HideCardBookWindow(); /// ÀÌ¹Ì Å¸·Ô°ü·ÃâÀ» º¸°íÀÖÀ¸¸é ¸®ÅÏ if( IsUsingTarot() ) return false; unsigned int error = TAROTMAN->CheckOpenTarot(); if( error != ERROR_NONE ) { TAROTMAN->ShowErrorMsg( error ); return false; } /// µû¶ó°¡±â Á¾·á if( HERO->IsFollowing() ) HERO->ReleaseFollowPlayer(); /// selft tarot open MSGROOT msg; msg.Category = NM_TAROT; msg.Protocol = NM_TAROT_SELF_OPEN_REQ; NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); return true; } bool cTarotManager::TarotTutorialOpen( unsigned long npcIndex ) { /// ÀÌ¹Ì Å¸·Ô°ü·ÃâÀ» º¸°íÀÖÀ¸¸é ¸®ÅÏ if( IsUsingTarot() ) return false; MSG_REQ_TAROT_TUTORIAL_SEEKER_OPEN msg; msg.Category = NM_TAROT; msg.Protocol = NM_TAROT_TUTORIAL_SEEKER_OPEN_REQ; msg.npcIndex = npcIndex; NETWORK->SendNetworkMsg( (char*)&msg, sizeof(msg) ); return true; } unsigned int cTarotManager::CheckOpenTarot() { /// Àç·á üũ sItemCount* p = ITEMMAN->GetItemCount( TAROT_MATERIAL_ITEM ); unsigned int count = ( p ) ? p->bag : 0; if( count == 0 ) return ERROR_STUFF; /// ½ºÇÁ·¹µå üũ unsigned int spreadCount = 0; for( unsigned short i = 0; iGetItem( (unsigned short)(INVENTORY_SPREAD_NORMAL_BEGIN + i) ); if( item ) { unsigned int spreadIdx = item->GetIndex(); if( spreadIdx == 0 ) continue; cItemDefine* spreadDefine = ITEMMAN->GetItemDefine( spreadIdx ); if( !spreadDefine ) { assert(0); continue; } unsigned char type = spreadDefine->GetType(); if( type != ITEM_SPREAD ) continue; spreadCount++; } } if( spreadCount == 0 ) return ERROR_SPREAD; /// Ä«µå üũ for( unsigned short i=0; iGetItem( (unsigned short)(INVENTORY_TAROT_NORMAL_BEGIN + i) ); if( item && item->GetDefine() ) { unsigned int itemIdx = item->GetIndex(); if( itemIdx == 0 ) return ERROR_CARD; unsigned char subType = item->GetDefine()->GetSubType(); if( subType != ITEM_CARD_TAROT ) return ERROR_CARD; cItemTarot* pTarot = item->GetDefine()->GetTarotDefine(); if( pTarot == 0 ) return ERROR_CARD; if( pTarot->GetUniqueNumber() != i ) return ERROR_CARD; } else return ERROR_CARD; } return ERROR_NONE; } /// void cTarotManager::ClearCardinfo() { for( unsigned int i = 0; i < mSelectInfoArr.GetSize(); ++i ) { sResultInfo* info = (sResultInfo*)mSelectInfoArr[i]; SAFE_DELETE( info ); } mSelectInfoArr.Clear(); } /// void cTarotManager::NetworkMsgParser( char* msg ) { MSGROOT* tempMsg = (MSGROOT*)msg; switch( tempMsg->Protocol ) { case NM_TAROT_READER_READY_RES: { /// Ÿ·ÎÄ«µå Áغñ »óÅ ¿äû °á°ú MSG_RES_TAROT_READER_READY* pMsg = (MSG_RES_TAROT_READER_READY*)msg; switch( pMsg->ErrorCode ) { case ERROR_TAROT_READER_READY_SUCCESS: { if( mCurrentPage == ePAGE_NONE ) { HERO->SetStopFlag( eSTOP_READYTAROT ); ChangePage( ePAGE_OPEN ); } else { assert(0); } } break; case ERROR_TAROT_READER_READY_FAIL: { /// ½ÇÆÐ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 308 ), // ¿¡·¯ ¸Þ¼¼Áö GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } break; } } break; case NM_TAROT_READER_READY_SYN: { /// ´Ù¸¥À¯Àú°¡ Ÿ·ÎÄ«µå ÁغñÁß MSG_SYN_TAROT_READER_READY* pMsg = (MSG_SYN_TAROT_READER_READY*)msg; cPlayer* p = OBJECTMAN->GetPlayer( pMsg->mCharacterIdx ); if( p ) { p->SetStopFlag( eSTOP_READYTAROT ); } else { assert(0); } } break; case NM_TAROT_READER_OPEN_RES: { /// Á¡Áý¿ÀÇ °á°ú MSG_RES_TAROT_READER_OPEN* msgData = (MSG_RES_TAROT_READER_OPEN*)msg; switch( msgData->ErrorCode ) { case ERROR_TAROT_READER_OPEN_SUCCESS: { cTarotControlWindow* win = GAMEUI->GetTarotControlWindow(); if( win) { win->SetPay( msgData->Price ); win->SetPoint( msgData->Point ); win->SetShopName( msgData->strTitle ); win->SetMoney( 0 ); win->SetUserNum( 0 ); sItemCount* p = ITEMMAN->GetItemCount( TAROT_MATERIAL_ITEM ); unsigned int count = ( p ) ? p->bag : 0; win->SetStuffNum( count ); } else { assert(0); } HERO->SetStopFlag( eSTOP_OPENTAROT ); ChangePage( ePAGE_MANAGED ); /// hero ¸»Ç³¼± ¹Ù²ãÁÖ±â HERO->ActiveTarotBubble( (LPTSTR)msgData->strTitle, COLOR_SKYBLUE ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 319 ) ); } break;; case ERROR_TAROT_READER_OPEN_CARD: { /// Ä«µå ¿À·ù UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 302 ), // ¿¡·¯ ¸Þ¼¼Áö GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } break; case ERROR_TAROT_READER_OPEN_SPREAD: { /// ½ºÇÁ·¹µå ¿À·ù UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 303 ), // ¿¡·¯ ¸Þ¼¼Áö GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } break; case ERROR_TAROT_READER_OPEN_ITEM: { /// Àç·á ¿À·ù UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 307 ), // ¿¡·¯ ¸Þ¼¼Áö GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } break; case ERROR_TAROT_READER_OPEN_FAIL: { /// ½ÇÆÐ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 308 ), // ¿¡·¯ ¸Þ¼¼Áö GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } break; // Ÿ·Î °³¼³½Ã ¼³Á¤ÇÑ ÀÌ¿ë·á°¡ Çѵµ(10¾ï) Ãʰú½Ã case ERROR_TAROT_READER_OPEN_TRADE_MONEY: { /// ½ÇÆÐ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 11213 ), // ¿¡·¯ ¸Þ¼¼Áö GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } break; // Ÿ·Î °³¼³½Ã ¼³Á¤ÇÑ ÀÌ¿ë·á + ÇöÀç º¸À¯±ÝÀÌ Çѵµ(30¾ï) Ãʰú½Ã case ERROR_TAROT_READER_OPEN_HAVE_MONEY: { /// ½ÇÆÐ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 11214 ), // ¿¡·¯ ¸Þ¼¼Áö GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } break; } } break; case NM_TAROT_READER_OPEN_SYN: { /// Á¤º¸ º¯°æ / »óÅ º¯°æ Ŭ¸¯ °¡´É MSG_SYN_TAROT_READER_OPEN* msgData = (MSG_SYN_TAROT_READER_OPEN*)msg; cPlayer* p = OBJECTMAN->GetPlayer( msgData->mCharacterIdx ); if( p ) { p->SetStopFlag( eSTOP_OPENTAROT ); p->ActiveTarotBubble( msgData->mTitle, COLOR_SKYBLUE ); } } break; case NM_TAROT_READER_CLOSE_RES: { /// ¸®´õ - Á¡Áý ´Ý±â MSG_RES_TAROT_READER_CLOSE* msgData = (MSG_RES_TAROT_READER_CLOSE*)msg; cTarotControlWindow* tarotControlWin = GAMEUI->GetTarotControlWindow(); switch( msgData->ErrorCode ) { case ERROR_TAROT_READER_CLOSE_SUCCESS: { ChangePage( ePAGE_NONE ); /// °ü¸®»óÅÂÀÌ¸é °ü¸®Ã¢ ´Ý±â GAMEUI->HideTarotControlWindow(); /// HERO->DeActiveTarotBubble(); HERO->StandUp(); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 320 ) ); } break; case ERROR_TAROT_READER_CLOSE_FAIL: { /// ½ÇÆÐ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 309 ), // ¿¡·¯ ¸Þ¼¼Áö GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } break; case ERROR_TAROT_READER_CLOSE_ITEM: { ChangePage( ePAGE_NONE ); /// °ü¸®»óÅÂÀÌ¸é °ü¸®Ã¢ ´Ý±â GAMEUI->HideTarotControlWindow(); /// HERO->DeActiveTarotBubble(); HERO->StandUp(); } case ERROR_TAROT_READER_CLOSE_RESERVED_ON: { /// Ÿ·Î ¿¹¾à »óÅ ON if( tarotControlWin ) tarotControlWin->SetReserve( true ); } break; case ERROR_TAROT_READER_CLOSE_RESERVED_OFF: { /// Ÿ·Î ¿¹¾à »óÅ OFF if( tarotControlWin ) tarotControlWin->SetReserve( false ); } break; } if( tarotControlWin ) tarotControlWin->NetUnLock(); } break; case NM_TAROT_SEEKER_OPEN_RES: { /// ÃʱâÈ­ Clear(); /// Ÿ·ÎÀÌ¿ëÁß - º¹¼öÀÌ¿ë ºÒ°¡ if( mCurrentPage != ePAGE_NONE ) assert(0); cTarotWindow* win = GAMEUI->GetTarotWindow(); if( win == 0 ) { assert(0); return; } /// Ÿ·Î »óÁ¡ Á¤º¸ ¹Þ±â MSG_RES_TAROT_SEEKER_OPEN* msgData = (MSG_RES_TAROT_SEEKER_OPEN*)msg; switch( msgData->ErrorCode ) { case ERROR_TAROT_SEEKER_OPEN_SUCCESS: { mTarotType = eTAROT_USER; win->SetTitle( msgData->Title ); win->SetPrice( msgData->Price ); /// °³¼³ÀÚÀÇ Ä«µå À妽º ÀúÀå for( int i = 0; i < MAX_TAROT_CARDS; ++i ) { unsigned int cardIndex = msgData->TarotCardIndex[i]; if( cardIndex ) { /// À©µµ¿ì¿¡ Ä«µå ¼¼ÆÃ win->SetCardInfo( i, cardIndex, (i == 0) ); } else { assert(0); } } /// ½ºÇÁ·¹µå À妽º ÀúÀå for( int i = 0; i < MAX_SPREAD; ++i ) { unsigned int spreadIndex = msgData->SpreadIndex[i]; if( spreadIndex ) win->SetSpreadInfo( i, spreadIndex ); } HERO->SetStopFlag( eSTOP_ENTERTAROT ); ChangePage( ePAGE_VIEW ); } break; case ERROR_TAROT_SEEKER_OPEN_FAIL: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 310 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); break; case ERROR_TAROT_SEEKER_OPEN_READER: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 322 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); break; case ERROR_TAROT_SEEKER_OPEN_OVER: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 323 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); break; // °³¼³ÀÚÀÇ º¸À¯±Ý + Ÿ·Î ÀÌ¿ëÀÚÀÇ ¿ä±ÝÀÌ Çѵµ(30)¾ï Ãʰú½Ã case ERROR_TAROT_SEEKER_OPEN_HAVE_MONEY: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 11212 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); break; case ERROR_TAROT_SEEKER_OPEN_RESERVED: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 327 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); break; } } break; case NM_TAROT_SEEKER_CLOSE_RES: { /// Á¡±¥ º¸±â Ãë¼Ò MSG_RES_TAROT_SEEKER_CLOSE* msgData = (MSG_RES_TAROT_SEEKER_CLOSE*)msg; /// tarot state if( msgData->ErrorCode == ERROR_TAROT_SEEKER_CLOSE_SUCCESS ) { HERO->SetState( eOBJECT_STATE_IDLE ); ChangePage( ePAGE_NONE ); } else if( msgData->ErrorCode == ERROR_TAROT_SEEKER_CLOSE_READER ) { /// Á¡Áý ÀÌ¿ëÀ» ÇÒ °ÍÀÎÁö ¸Þ½ÃÁö âÀÌ ¶° ÀÖÀ¸¸é ´Ý±â. if( HERO->GetStopFlag() == eSTOP_ENTERTAROT ) { UIMAN->DestroyMsgBox( eMBEVENT_TAROTSEEKER_START ); } /// ¸®´õ°¡ Á¾·áÇÏ¿© °­Á¦ °ü¶÷ Á¾·á HERO->SetState( eOBJECT_STATE_IDLE ); ChangePage( ePAGE_NONE ); UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 318 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } else if( msgData->ErrorCode == ERROR_TAROT_SEEKER_CLOSE_FAIL ) { /// ½ÇÆÐ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 309 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); cTarotWindow* win = GAMEUI->GetTarotWindow(); if( win ) { win->NetUnLock(ePAGE_VIEW); win->NetUnLock(ePAGE_SELECT); win->NetUnLock(ePAGE_RESULT); } } } break; case NM_TAROT_SEEKER_JOIN_RES: { ClearCardinfo(); /// Á¡±¥ º¸±â ¿äû¿¡ ´ëÇÑ ÀÀ´ä MSG_RES_TAROT_SEEKER_JOIN* msgData = (MSG_RES_TAROT_SEEKER_JOIN*)msg; if ( msgData->ErrorCode == ERROR_TAROT_SEEKER_JOIN_SUCCESS ) { HERO->SetStopFlag( eSTOP_USETAROT ); ChangePage( ePAGE_SELECT ); /// Á¡±¥ º¸±â ¿äû ¼º°ø for( int i = 0; i < 10; ++i ) { unsigned int cardIndex = msgData->TarotCardIndex[i]; sResultInfo* result = new sResultInfo; result->TarotCardIndex = cardIndex; result->Dir = TAROT_SEEKER_RESULT_STRAIGHT; result->Value = 0; result->Apply = false; mSelectInfoArr.PushBack( result ); } } else { //--- ÀÌ µÎ°¡Áöµµ ó¸®ÇؾßÇÔ /// Á¡ÁýÀÌ¿ëÇÒ¼ö ¾ø´Â »óÅ /// ´Ù¸¥Ä³¸¯ÅͰ¡ ÀÌ¿ëÁß cTarotWindow* win = GAMEUI->GetTarotWindow(); assert(win); /// ÀÌ¿ë¿ä±Ý ºÎÁ· switch( msgData->ErrorCode ) { case ERROR_TAROT_SEEKER_JOIN_MONEY: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 321 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, win ); break; // °³¼³ÀÚÀÇ º¸À¯ ±Ý¾×ÀÌ Çѵµ(30¾ï) Ãʰú·Î ÀÎÇØ ÀÌ¿ëÀÚ°¡ Ÿ·Î Á¡ÁýÀ» ÀÌ¿ëÇÒ ¼ö ¾øÀ» ¶§ case ERROR_TAROT_SEEKER_JOIN_HAVE_MONEY : UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 11212 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, win ); break; default: /// ±× ¿Ü ºÎÁ· /// Á¡±¥ º¸±â ¿äû ½ÇÆÐ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 310 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, win ); break; } win->NetUnLock(ePAGE_VIEW); } } break; case NM_TAROT_SEEKER_RESULT_RES: { /// Á¡±¥ ¼±ÅÿϷῡ ´ëÇÑ ÀÀ´ä MSG_RES_TAROT_SEEKER_RESULT* msgData = (MSG_RES_TAROT_SEEKER_RESULT*)msg; cTarotWindow* win = GAMEUI->GetTarotWindow(); if( !win ) { assert(0); return; } win->NetUnLock( ePAGE_SELECT ); win->SetSelectedSpread( msgData->SpreadIndex ); cItemSpread* spread = win->GetCurrentSpreadInfo(); if( spread == 0 ) { assert(0); return; } for( int i = 0; i < 10; ++i ) { sResultInfo* result = GetSelectCardInfo( i ); if( result ) { result->Dir = msgData->Result[i].Dir; result->Value = msgData->Result[i].Value; result->Apply = false; if( ( spread->mParam[i].mDir == eSPREAD_STR && result->Dir == TAROT_SEEKER_RESULT_STRAIGHT ) || ( spread->mParam[i].mDir == eSPREAD_INV && result->Dir == TAROT_SEEKER_RESULT_INVERSE ) || ( spread->mParam[i].mDir == eSPREAD_ALL ) ) { result->Apply = true; } } } ChangePage( ePAGE_RESULT ); } break; case NM_TAROT_SEEKER_ACCEPT_RES: { MSG_RES_TAROT_SEEKER_ACCEPT* pmsg = (MSG_RES_TAROT_SEEKER_ACCEPT*)msg; if( pmsg->ErrorCode == ERROR_TAROT_SEEKER_ACCEPT_SUCCESS ) { /// tarot state HERO->SetState( eOBJECT_STATE_IDLE ); ChangePage( ePAGE_NONE ); } else { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 324 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } } break; case NM_TAROT_READER_CLOSE_SYN: { /// ´Ù¸¥À¯ÀúÀÇ Å¸·Ô»óÁ¡ ´ÝÈû. MSG_SYN_TAROT_READER_CLOSE* msgData = (MSG_SYN_TAROT_READER_CLOSE*)msg; cPlayer* p = OBJECTMAN->GetPlayer( msgData->mCharacterIdx ); if( p ) { /// »óÅ üũ if( p->GetState() != eOBJECT_STATE_STOP ) { assert(0); } if( p->GetStopFlag() != eSTOP_READYTAROT && p->GetStopFlag() != eSTOP_OPENTAROT ) { assert(0); } p->SetStopFlag( eSTOP_NONE ); p->DeActiveTarotBubble(); p->StandUp(); } } break; case NM_TAROT_READER_JOIN_RES: { /// ÀÌ¿ëÀÚ ÀÖÀ½. MSG_RES_TAROT_READER_JOIN* msgData = (MSG_RES_TAROT_READER_JOIN*)msg; cTarotControlWindow* pCotrol = GAMEUI->GetTarotControlWindow(); if( pCotrol ) { pCotrol->SetStatus( msgData->seekerName ); pCotrol->SetPoint( msgData->point ); pCotrol->SetUserNum( msgData->userCount ); sItemCount* p = ITEMMAN->GetItemCount( TAROT_MATERIAL_ITEM ); unsigned int count = ( p ) ? p->bag : 0; pCotrol->SetStuffNum( count ); } else { assert(0); } } break; case NM_TAROT_READER_LEAVE_RES: { ///ÀÌ¿ëÀÚ ³ª°¨ MSG_RES_TAROT_READER_LEAVE* msgData = (MSG_RES_TAROT_READER_LEAVE*)msg; cTarotControlWindow* pCotrol = GAMEUI->GetTarotControlWindow(); if( pCotrol ) pCotrol->ReleaseStatus( msgData->seekerName ); else { assert(0); } } break; // tutorial tarot case NM_TAROT_TUTORIAL_SEEKER_OPEN_RES: { /// ÃʱâÈ­ Clear(); /// Ÿ·ÎÀÌ¿ëÁß - º¹¼öÀÌ¿ë ºÒ°¡ if( mCurrentPage != ePAGE_NONE ) assert(0); cTarotWindow* win = GAMEUI->GetTarotWindow(); if( win == 0 ) { assert(0); return; } MSG_ERROR* pmsg = (MSG_ERROR*)msg; switch( pmsg->ErrorCode ) { case ERROR_TAROT_TUTORIAL_SEEKER_OPEN_SUCCESS: { mTarotType = eTAROT_TUTORIAL; cNpc* pNpc = (cNpc*)OBJECTMAN->GetNpc( HERO->GetNpcIdx() ); if( !pNpc ) { assert(0); ChangePage( ePAGE_NONE ); return; } cUINpcTelling* data = UIMAN->GetNpcTelling( pNpc->GetClassId() ); if( !data ) { assert(0); ChangePage( ePAGE_NONE ); return; } unsigned long* tarotArr = data->GetTarotArr(); // Ä«µå ¼¼ÆÃ for( int i = 0; i < MAX_TAROT_CARDS; ++i, ++tarotArr ) { unsigned long cardIndex = (*tarotArr); if( cardIndex ) { /// À©µµ¿ì¿¡ Ä«µå ¼¼ÆÃ win->SetCardInfo( i, cardIndex, (i == 0) ); } else assert(0); } // ½ºÇÁ·¹µå ¼¼ÆÃ unsigned long* spreadIndex = data->GetSpreadArr(); for( int i = 0; i < MAX_SPREAD; ++i, ++spreadIndex ) { if( (*spreadIndex) ) win->SetSpreadInfo( i, (*spreadIndex) ); } HERO->SetStopFlag( eSTOP_NPCSPEECH ); ChangePage( ePAGE_VIEW ); } break; case ERROR_TAROT_TUTORIAL_SEEKER_OPEN_FAIL: // ½ÇÆÐ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 310 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); break; case ERROR_TAROT_TUTORIAL_SEEKER_OPEN_OVER: // °Ô½ºÆ® Ãʰú UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 323 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); break; } } break; case NM_TAROT_TUTORIAL_SEEKER_CLOSE_RES: { MSG_ERROR* pmsg = (MSG_ERROR*)msg; if( pmsg->ErrorCode == ERROR_TAROT_TUTORIAL_SEEKER_CLOSE_SUCCESS ) { HERO->SetState( eOBJECT_STATE_IDLE ); HERO->CloseNpcTalk(); ChangePage( ePAGE_NONE ); } else { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 309 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } } break; case NM_TAROT_TUTORIAL_SEEKER_JOIN_RES: { MSG_RES_TAROT_TUTORIAL_SEEKER_JOIN* pmsg = (MSG_RES_TAROT_TUTORIAL_SEEKER_JOIN*)msg; ClearCardinfo(); if( pmsg->ErrorCode == ERROR_TAROT_TUTORIAL_SEEKER_JOIN_SUCCESS ) { // ¼º°ø ChangePage( ePAGE_SELECT ); /// Á¡±¥ º¸±â ¿äû ¼º°ø for( int i = 0; i < 10; ++i ) { unsigned int cardIndex = pmsg->TarotCardIndex[i]; sResultInfo* result = new sResultInfo; result->TarotCardIndex = cardIndex; result->Dir = TAROT_SEEKER_RESULT_STRAIGHT; result->Value = 0; result->Apply = false; mSelectInfoArr.PushBack( result ); } } else { // ½ÇÆÐ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 310 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } // cTarotWindow* win = GAMEUI->GetTarotWindow(); if( win ) win->NetUnLock(ePAGE_VIEW); } break; case NM_TAROT_TUTORIAL_SEEKER_RESULT_RES: { /// Á¡±¥ ¼±ÅÿϷῡ ´ëÇÑ ÀÀ´ä MSG_RES_TAROT_TUTORIAL_SEEKER_RESULT* pmsg = (MSG_RES_TAROT_TUTORIAL_SEEKER_RESULT*)msg; cTarotWindow* win = GAMEUI->GetTarotWindow(); if( !win ) { assert(0); return; } win->NetUnLock( ePAGE_SELECT ); win->SetSelectedSpread( pmsg->SpreadIndex ); cItemSpread* spread = win->GetCurrentSpreadInfo(); if( spread == 0 ) { assert(0); return; } for( int i = 0; i < 10; ++i ) { sResultInfo* result = GetSelectCardInfo( i ); if( result ) { result->Dir = pmsg->Result[i].Dir; result->Value = pmsg->Result[i].Value; result->Apply = false; if( ( spread->mParam[i].mDir == eSPREAD_STR && result->Dir == TAROT_SEEKER_RESULT_STRAIGHT ) || ( spread->mParam[i].mDir == eSPREAD_INV && result->Dir == TAROT_SEEKER_RESULT_INVERSE ) || ( spread->mParam[i].mDir == eSPREAD_ALL ) ) { result->Apply = true; } } } ChangePage( ePAGE_RESULT ); } break; case NM_TAROT_TUTORIAL_SEEKER_ACCEPT_RES: { MSG_RES_TAROT_TUTORIAL_SEEKER_ACCEPT* pmsg = (MSG_RES_TAROT_TUTORIAL_SEEKER_ACCEPT*)msg; if( pmsg->ErrorCode == ERROR_TAROT_TUTORIAL_SEEKER_ACCEPT_SUCCESS ) { /// tarot state HERO->SetState( eOBJECT_STATE_IDLE ); HERO->CloseNpcTalk(); ChangePage( ePAGE_NONE ); } else { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 324 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } } break; case NM_TAROT_SELF_OPEN_RES: { MSG_ERROR* pmsg = (MSG_ERROR*)msg; switch( pmsg->ErrorCode ) { case ERROR_TAROT_SELF_OPEN_SUCCESS: { mTarotType = eTAROT_SELF; // ChangePage( ePAGE_SELFVIEW ); HERO->SetStopFlag( eSTOP_SELFTAROT ); } break; case ERROR_TAROT_SELF_OPEN_FAIL: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 310 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); break; } } break; case NM_TAROT_SELF_CLOSE_RES: { MSG_ERROR* pmsg = (MSG_ERROR*)msg; switch( pmsg->ErrorCode ) { case ERROR_TAROT_SELF_CLOSE_SUCCESS: { HERO->SetState( eOBJECT_STATE_IDLE ); // ChangePage( ePAGE_NONE ); } break; case ERROR_TAROT_SELF_CLOSE_FAIL: { /// ½ÇÆÐ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 309 ), // ¿¡·¯ ¸Þ¼¼Áö GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } break; } cTarotWindow* win = GAMEUI->GetTarotWindow(); if( win ) win->NetUnLock( ePAGE_SELFVIEW ); } break; case NM_TAROT_SELF_JOIN_RES: { MSG_RES_TAROT_SELF_JOIN* pmsg = (MSG_RES_TAROT_SELF_JOIN*)msg; cTarotWindow* win = GAMEUI->GetTarotWindow(); switch( pmsg->ErrorCode ) { case ERROR_TAROT_SELF_JOIN_SUCCESS: { ClearCardinfo(); ChangePage( ePAGE_SELECT ); /// Á¡±¥ º¸±â ¿äû ¼º°ø for( int i = 0; i < 10; ++i ) { unsigned int cardIndex = pmsg->TarotCardIndex[i]; sResultInfo* result = new sResultInfo; result->TarotCardIndex = cardIndex; result->Dir = TAROT_SEEKER_RESULT_STRAIGHT; result->Value = 0; result->Apply = false; mSelectInfoArr.PushBack( result ); } } break; case ERROR_TAROT_SELF_JOIN_FAIL: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 310 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, win ); } break; case ERROR_TAROT_SELF_JOIN_METARIAL: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 307 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, win ); } break; case ERROR_TAROT_SELF_JOIN_SPREAD: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 303 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, win ); } break; } if( win ) win->NetUnLock( ePAGE_SELFVIEW ); } break; case NM_TAROT_SELF_RESULT_RES: { /// Á¡±¥ ¼±ÅÿϷῡ ´ëÇÑ ÀÀ´ä MSG_RES_TAROT_SELF_RESULT* msgData = (MSG_RES_TAROT_SELF_RESULT*)msg; cTarotWindow* win = GAMEUI->GetTarotWindow(); if( !win ) { assert(0); return; } win->NetUnLock( ePAGE_SELECT ); win->SetSelectedSpread( msgData->SpreadIndex ); cItemSpread* spread = win->GetCurrentSpreadInfo(); if( spread == 0 ) { assert(0); return; } for( int i = 0; i < 10; ++i ) { sResultInfo* result = GetSelectCardInfo( i ); if( result ) { result->Dir = msgData->Result[i].Dir; result->Value = msgData->Result[i].Value; result->Apply = false; if( ( spread->mParam[i].mDir == eSPREAD_STR && result->Dir == TAROT_SEEKER_RESULT_STRAIGHT ) || ( spread->mParam[i].mDir == eSPREAD_INV && result->Dir == TAROT_SEEKER_RESULT_INVERSE ) || ( spread->mParam[i].mDir == eSPREAD_ALL ) ) { result->Apply = true; } } } ChangePage( ePAGE_RESULT ); } break; case NM_TAROT_SELF_ACCEPT_RES: { MSG_ERROR* pmsg = (MSG_ERROR*)msg; if( pmsg->ErrorCode == ERROR_TAROT_SELF_ACCEPT_SUCCESS ) { /// tarot state HERO->SetState( eOBJECT_STATE_IDLE ); ChangePage( ePAGE_NONE ); } else { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 324 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } } break; default: assert( 0 && "error network message" ); break; } } void cTarotManager::ChangePage( unsigned char page ) { if( mCurrentPage == page ) return; switch( page ) { case ePAGE_NONE: case ePAGE_OPEN: case ePAGE_VIEW: case ePAGE_SELECT: case ePAGE_RESULT: case ePAGE_NPCVIEW: case ePAGE_NPCSELECT: case ePAGE_NPCRESULT: case ePAGE_SELFVIEW: { GAMEUI->ShowTarotWindow( page ); } break; case ePAGE_MANAGED: { /// Ÿ·Î °ü¸® À©µµ¿ì ¿­±â GAMEUI->ShowTarotControlWindow(); } break; } // ÃʱâÈ­ if( page == ePAGE_NONE ) { mTarotType = eTAROT_NONE; } mCurrentPage = (eTarotPage)page; } void cTarotManager::ShowErrorMsg( int error ) { switch( error ) { case ERROR_CARD: { /// Ä«µå°¡ ºÎÁ·ÇÔ. UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 302 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } break; case ERROR_SPREAD: { /// ½ºÇÁ·¹µå°¡ ºÎÁ·ÇÔ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 303 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } break; case ERROR_PRICE: { /// °¡°Ý ¼¼ÆÃ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 304 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } break; case ERROR_TITLE: { /// Á¡Áý¸í ¼¼ÆÃ ¿¡·¯ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 305 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } break; case ERROR_STUFF: { /// Àç·á ºÎÁ· ¿¡·¯ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 307 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } break; case ERROR_MAX_MONEY: { /// µî·ÏÇÑ ÀÌ¿ë ¿ä±Ý + Àκ¥ º¸À¯ ±Ý¾×ÀÌ ÃÖ´ëÇѵµ(30¾ï)À» ³Ñ°Ô µÈ´Ù¸é! UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 325 ), GAMERESOURCEMAN->GetGameText( 301 ), // ¿¡·¯ 0, GAMEUI->GetTarotWindow() ); } break; } }