#include "stdafx.h" #include "ItemManager.h" #include "CoolTimeManager.h" #include "ObjectManager.h" #include "Hero.h" #include "GameUIManager.h" #include "ChatManager.h" #include "GameResourceManager.h" #include "UIMsgboxEvent.h" #include "NumberEditBox.h" #include "Npc_Common.h" #include "Monster.h" #include "Player_Common.h" #include "Trade_Common.h" #include "UIRootNode.h" // #include "LootingWindow.h" #include "NpcDisjointWindow.h" #include "EnhancedWindow.h" #include "TradeWindow.h" #include "MoneyWindow.h" #include "UserSellWindow.h" #include "PutCardWindow.h" #include "CardBookWindow.h" #include "TarotSheetWindow.h" #include "NpcDealWindow.h" #include "NpcDealRegistSheet.h" #include "NpcDealSearchSheet.h" #include "ItemReceiptWindow.h" #include "CashFreeMoveWindow.h" #include "MegaphoneWindow.h" #include "TwitterWindow.h" #include "ItemMixWindow.h" #include "MailWindow.h" #include "SummonWindow.h" // #include "SoundSceneNode.h" #include "SoundSystem.h" #include "NaviMesh.h" #include "OptionManager.h" #include "SceneManager.h" void cItemManager::NetworkMsgParserTrade( char* msg ) { MSGROOT* tempMsg = (MSGROOT*)msg; switch( tempMsg->Protocol ) { case NM_TRADE_POST_SUMMON_OPEN_RES: { MSG_ERROR* msgData = (MSG_ERROR*)msg; switch( msgData->ErrorCode ) { case ERROR_TRADE_POST_SUMMON_OPEN_SUCCESS: { MSG_RES_TRADE_POST_SUMMON_OPEN* msgData = (MSG_RES_TRADE_POST_SUMMON_OPEN*)msg; if( HERO ) { /// ¾ÆÀÌÅÛ °»½Å sInventory* inv = &msgData->inventory; if( inv->count > 0 ) { NetSetItem( inv ); UpdateItem(); } else { NetDumpItem( inv->number ); } /// ij¸¯ÅÍ »óÅ º¯°æ HERO->SetStopFlag( eSTOP_SUMMON_PAPER ); /// ¿ìÆíÇÔ ¿­±â cMailWindow* pMailWin = GAMEUI->GetMailWindow(); if( pMailWin == NULL ) { assert(0); return; } /// npcidx == 0 ÁÖ¹®¼­ »ç¿ë¿¡ ÀÇÇØ ¸ÞÀÏâ Open pMailWin->Show( 0 ); } else { assert(0); break; } } break; case ERROR_TRADE_POST_SUMMON_OPEN_USEFUL_SUCCESS: { if( HERO ) { cSummonWindow* pSummonWin = GAMEUI->GetSummonWindow(); if( pSummonWin ) { pSummonWin->StartCoolTime(); } else assert(0); /// ij¸¯ÅÍ »óÅ º¯°æ HERO->SetStopFlag( eSTOP_SUMMON_PAPER ); /// ¿ìÆíÇÔ ¿­±â cMailWindow* pMailWin = GAMEUI->GetMailWindow(); if( pMailWin == NULL ) { assert(0); return; } /// npcidx == 0 ÁÖ¹®¼­ »ç¿ë¿¡ ÀÇÇØ ¸ÞÀÏâ Open pMailWin->Show( 0 ); } else { assert(0); break; } } break; case ERROR_TRADE_POST_SUMMON_OPEN_FAIL: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12800 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_TRADE_POST_SUMMON_OPEN_LICENSE: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 293 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_TRADE_POST_SUMMON_OPEN_ALREADY: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12083 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; } UnlockItemTry( ITEM_TRY_SUMMON ); cSummonWindow* pSummonWin = GAMEUI->GetSummonWindow(); if( pSummonWin ) { pSummonWin->NetUnLock(); pSummonWin->Clear(); pSummonWin->Hide(); } } break; case NM_TRADE_POST_SUMMON_OPEN_SYN: { MSG_SYN_TRADE_POST_SUMMON_OPEN* msgData = (MSG_SYN_TRADE_POST_SUMMON_OPEN*)msg; cPlayer* pPlayer = OBJECTMAN->GetPlayer( msgData->characterIdx ); if( pPlayer != NULL ) { pPlayer->SetStopFlag( eSTOP_SUMMON_PAPER ); } else { assert(0); } } break; case NM_TRADE_POST_SUMMON_CLOSE_SYN: { MSG_SYN_TRADE_POST_SUMMON_CLOSE* msgData = (MSG_SYN_TRADE_POST_SUMMON_CLOSE*)msg; cPlayer* pPlayer = OBJECTMAN->GetPlayer( msgData->characterIdx ); if( pPlayer != NULL ) { pPlayer->SetStopFlag( eSTOP_NONE ); } else { assert(0); } } break; case NM_TRADE_AGENT_SUMMON_OPEN_RES: { MSG_ERROR* msgData = (MSG_ERROR*)msg; switch( msgData->ErrorCode ) { case ERROR_TRADE_AGENT_SUMMON_OPEN_SUCCESS: { MSG_RES_TRADE_AGENT_SUMMON_OPEN* msgData = (MSG_RES_TRADE_AGENT_SUMMON_OPEN*)msg; if( HERO ) { /// ¾ÆÀÌÅÛ °»½Å sInventory* inv = &msgData->inventory; if( inv->count > 0 ) { NetSetItem( inv ); UpdateItem(); } else { NetDumpItem( inv->number ); } cNpcDealWindow* win = GAMEUI->GetNpcDealWindow(); if( !win ) { assert(0); return; } cNpcDealRegistSheet* regist = win->GetRegistSheet(); if( !regist ) { assert(0); return; } regist->Clear(); // hero°¡ µî·ÏÇÑ ¾ÆÀÌÅÛ NPC_ITEM_AGENT_OPEN_RESULT* data = msgData->Agent; for( long i = 0; i < msgData->RowCount; ++i, ++data ) { NPC_ITEM_AGENT_OPEN_RESULT* p = new NPC_ITEM_AGENT_OPEN_RESULT; *p = *data; if( regist->AddItem( p ) == false ) { assert(0); SAFE_DELETE( p ); continue; } } regist->SetTotalPage( msgData->EndPage ); regist->ChangePage( msgData->StartPage ); /// ij¸¯ÅÍ »óÅ º¯°æ HERO->SetStopFlag( eSTOP_SUMMON_PAPER ); GAMEUI->UpdateInvenWithUI( (cUIWindow*)GAMEUI->GetNpcDealWindow() ); GAMEUI->ShowInventory(); GAMEUI->ShowNpcDealWindow(); } else { assert(0); break; } } break; case ERROR_TRADE_AGENT_SUMMON_OPEN_USEFUL_SUCCESS: { if( HERO ) { cSummonWindow* pSummonWin = GAMEUI->GetSummonWindow(); if( pSummonWin ) { pSummonWin->StartCoolTime(); } else assert(0); /// ij¸¯ÅÍ »óÅ º¯°æ HERO->SetStopFlag( eSTOP_SUMMON_PAPER ); GAMEUI->UpdateInvenWithUI( (cUIWindow*)GAMEUI->GetNpcDealWindow() ); GAMEUI->ShowInventory(); GAMEUI->ShowNpcDealWindow(); } else { assert(0); break; } } break; case ERROR_TRADE_AGENT_SUMMON_OPEN_FAIL: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12801 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_TRADE_AGENT_SUMMON_OPEN_LICENSE: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 293 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_TRADE_AGENT_SUMMON_OPEN_ALREADY: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12084 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; } UnlockItemTry( ITEM_TRY_SUMMON ); cSummonWindow* pSummonWin = GAMEUI->GetSummonWindow(); if( pSummonWin ) { pSummonWin->NetUnLock(); pSummonWin->Clear(); pSummonWin->Hide(); } } break; case NM_TRADE_AGENT_SUMMON_OPEN_SYN: { MSG_SYN_TRADE_AGENT_SUMMON_OPEN* msgData = (MSG_SYN_TRADE_AGENT_SUMMON_OPEN*)msg; cPlayer* pPlayer = OBJECTMAN->GetPlayer( msgData->characterIdx ); if( pPlayer != NULL ) { pPlayer->SetStopFlag( eSTOP_SUMMON_PAPER ); } else { assert(0); } } break; case NM_TRADE_AGENT_SUMMON_CLOSE_SYN: { MSG_SYN_TRADE_AGENT_SUMMON_CLOSE* msgData = (MSG_SYN_TRADE_AGENT_SUMMON_CLOSE*)msg; cPlayer* pPlayer = OBJECTMAN->GetPlayer( msgData->characterIdx ); if( pPlayer != NULL ) { pPlayer->SetStopFlag( eSTOP_NONE ); } else { assert(0); } } break; } } void cItemManager::NetworkMsgParser( char* msg ) { MSGROOT* tempMsg = (MSGROOT*)msg; switch( tempMsg->Protocol ) { /* case NM_ITEM_INVENTORY_OPEN_RES: { MSG_ERROR* msgData = (MSG_ERROR*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_INVENTORY_OPEN_SUCCESS: { } break; case ERROR_ITEM_INVENTORY_OPEN_FAIL: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_YESNO, GAMERESOURCEMAN->GetGameText( 13117 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_ITEM_INVENTORY_OPEN_ITEMPWD_REG: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_MAKE_CERTIFY_NUMBER, eSKIN_YESNO, GAMERESOURCEMAN->GetGameText( 13104 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_ITEM_INVENTORY_OPEN_ITEMPWD_CHECK: { if( HERO ) { eITEMPWD_STATE nCertifyState = HERO->GetCertifyState(); if( nCertifyState == eITEMPWD_NO_CHECK && HERO->IsCertifyUse() ) { cCertifyWindow* pCertifyWin = GAMEUI->GetCertifyWindow(); if( pCertifyWin == NULL ) { assert(0); return; } pCertifyWin->Show( eCertify_State_Check ); } } } break; } } break; */ case NM_ITEM_MOV_INVENTORY_RES: { MSG_RES_ITEM_MOV_INVENTORY* msgData = (MSG_RES_ITEM_MOV_INVENTORY*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_MOV_INVENTORY_SUCCESS: NetTryItem( NM_ITEM_MOV_INVENTORY_RES ); break; case ERROR_ITEM_MOV_INVENTORY_FAIL: case ERROR_ITEM_MOV_INVENTORY_STATE: { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 222 ) ); } break; case ERROR_ITEM_MOV_INVENTORY_NOTYET: { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 223 ) ); } break; case ERROR_ITEM_MOV_INVENTORY_MAX_ITEM: { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 220 ) ); } break; case ERROR_ITEM_MOV_INVENTORY_MERGE: { /// move Àá±Ý Ç®°í merge Àá±Ý °É±â if( mTry == ITEM_TRY_MOVE ) { mLocked = false; mTry = ITEM_TRY_NULL; } else { assert(0); } /// mLocked = true; mTry = ITEM_TRY_MERGE; } break; default: { assert(0); } break; } switch( mTry ) { case ITEM_TRY_MOVE: UnlockItemTry( ITEM_TRY_MOVE ); break; case ITEM_TRY_EQUIP: UnlockItemTry( ITEM_TRY_EQUIP ); break; case ITEM_TRY_UNEQUIP: UnlockItemTry( ITEM_TRY_UNEQUIP ); break; case ITEM_TRY_SPLIT: UnlockItemTry( ITEM_TRY_SPLIT ); break; } } break; case NM_ITEM_MERGE_INVENTORY_RES: { MSG_RES_ITEM_MERGE_INVENTORY* msgData = (MSG_RES_ITEM_MERGE_INVENTORY*)msg; if( msgData->ErrorCode == ERROR_ITEM_MERGE_INVENTORY_SUCCESS ) NetTryItem( NM_ITEM_MERGE_INVENTORY_RES ); else CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 224 ) ); UnlockItemTry( ITEM_TRY_MERGE ); } break; case NM_ITEM_USE_INVENTORY_RES: { MSG_RES_ITEM_USE_INVENTORY* msgData = (MSG_RES_ITEM_USE_INVENTORY*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_USE_INVENTORY_SUCCESS: NetTryItem( NM_ITEM_USE_INVENTORY_RES ); break; case ERROR_ITEM_USE_INVENTORY_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 225 )); break; case ERROR_ITEM_USE_INVENTORY_NOTYET: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 223 )); break; case ERROR_ITEM_USE_INVENTORY_COOLTIME: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 226 )); break; case ERROR_ITEM_USE_INVENTORY_TITLE: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 68 )); break; case ERROR_ITEM_USE_INVENTORY_SLOT: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 3102 )); break; case ERROR_ITEM_USE_SKILL_SYSTEM: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 225 )); break; case ERROR_ITEM_USE_SKILL_STATE: // ´ë»óÀÇ »óŰ¡ ¾È¸ÂÀ½ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 274 )); break; case ERROR_ITEM_USE_SKILL_GROUPORDER: // È¿·Â±×·ìÀÌ ³·À½ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 275 )); break; case ERROR_ITEM_USE_INVENTORY_LICENSE: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 293 )); break; case ERROR_ITEM_USE_EXP_RECOVER: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 11902 )); break; case ERROR_ITEM_USE_SKILL_DUPLICATE: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12006 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_ITEM_USE_SKILL_PCOVER: // ÀÏ¹Ý ¹öÇÁ°¡ PC¹öÇÁ¸¦ µ¤À»¼ö ¾øÀ½ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 12004 )); break; case ERROR_ITEM_USE_SKILL_PCSCRIPT: // PC¹æ ¹öÇÁ³¢¸® Áߺ¹ºÒ°¡ ¼³Á¤ ½ºÅ©¸³Æ® ¿À·ù CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 225 )); break; default: assert(0); break; } UnlockItemTry( ITEM_TRY_USE ); } break; case NM_ITEM_DEL_INVENTORY_RES: { MSG_RES_ITEM_DEL_INVENTORY* msgData = (MSG_RES_ITEM_DEL_INVENTORY*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_DEL_INVENTORY_SUCCESS: NetTryItem( NM_ITEM_DEL_INVENTORY_RES ); break; case ERROR_ITEM_DEL_INVENTORY_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 227 ) ); break; case ERROR_ITEM_DEL_INVENTORY_NOTYET: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 223 ) ); break; default: assert(0); break; } UnlockItemTry( ITEM_TRY_DUMP ); } break; case NM_ITEM_SWI_INVENTORY_RES: { MSG_RES_ITEM_SWI_INVENTORY* msgData = (MSG_RES_ITEM_SWI_INVENTORY*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_SWI_INVENTORY_SUCCESS: NetSwitchWeapon( msgData->activeWeapon ); break; case ERROR_ITEM_SWI_INVENTORY_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 228 ) ); HERO->SetWeaponChangeFlag( false ); break; case ERROR_ITEM_SWI_INVENTORY_NOTYET: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 223 ) ); HERO->SetWeaponChangeFlag( false ); break; default: assert(0); break; } UnlockItemTry( ITEM_TRY_SWITCH ); } break; case NM_ITEM_DIVIDE_INVENTORY_RES: { MSG_RES_ITEM_DIVIDE_INVENTORY* msgData = (MSG_RES_ITEM_DIVIDE_INVENTORY*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_DIVIDE_INVENTORY_SUCCESS: NetTryItem( NM_ITEM_DIVIDE_INVENTORY_RES, msgData ); break; case ERROR_ITEM_DIVIDE_INVENTORY_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 229 ) ); break; case ERROR_ITEM_DIVIDE_INVENTORY_NOTYET: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 223 ) ); break; default: assert(0); break; } UnlockItemTry( ITEM_TRY_SPLIT ); } break; case NM_ITEM_ENHANCED_START_RES: { MSG_ERROR* msgData = (MSG_ERROR*)msg; cEnhancedWindow* win = GAMEUI->GetEnhancedWindow(); if( win ) win->NetUnLock(); switch( msgData->ErrorCode ) { case ERROR_ITEM_ENHANCED_START_SUCCESS: { if( win ) win->StartEnhanced(); } break; case ERROR_ITEM_ENHANCED_START_FAIL: { HERO->SetStopFlag( eSTOP_NONE ); UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 254 ), GAMERESOURCEMAN->GetGameText( 301 ), 0, win ); } break; case ERROR_ITEM_ENHANCED_START_STATE: { HERO->SetStopFlag( eSTOP_NONE ); UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 272 ), GAMERESOURCEMAN->GetGameText( 301 ), 0, win ); } break; case ERROR_ITEM_ENHANCED_START_LICENSE: { HERO->SetStopFlag( eSTOP_NONE ); UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 293 ), GAMERESOURCEMAN->GetGameText( 301 ), 0, win ); } break; case ERROR_ITEM_ENHANCED_START_EQUIP_LEVEL_BY_SAFE: { HERO->SetStopFlag( eSTOP_NONE ); UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12100 ), GAMERESOURCEMAN->GetGameText( 301 ), 0, win ); } break; case ERROR_ITEM_ENHANCED_START_EQUIP_LEVEL_BY_CARD: { HERO->SetStopFlag( eSTOP_NONE ); UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12500 ), GAMERESOURCEMAN->GetGameText( 301 ), 0, win ); } break; } UnlockItemTry( ITEM_TRY_ENHANCEDSTART ); } break; case NM_ITEM_ENHANCED_START_SYN: { MSG_SYN_ITEM_ENHANCED_START* msgData = (MSG_SYN_ITEM_ENHANCED_START*)msg; cPlayer* p = OBJECTMAN->GetPlayer( msgData->characterIdx ); if( p != NULL ) { p->SetStopFlag( eSTOP_ENHANCED ); } } break; case NM_ITEM_ENHANCED_END_SYN: { /// °­È­ MSG_SYN_ITEM_ENHANCED_END* msgData = (MSG_SYN_ITEM_ENHANCED_END*)msg; HERO->SetStopFlag( eSTOP_NONE ); HERO->ClearItemEnhanceEffect(); cEnhancedWindow* enhance = GAMEUI->GetEnhancedWindow(); if( enhance ) { enhance->NetUnLock(); enhance->StopEnhanced(); } switch( msgData->ErrorCode ) { case ERROR_ITEM_ENHANCED_END_SUCCESS: { NetEnhancedItem( (MSG_SYN_ITEM_ENHANCED_END*)msg ); } break; case ERROR_ITEM_ENHANCED_END_FAIL: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 254 ), GAMERESOURCEMAN->GetGameText( 301 ), 0, enhance ); } break; case ERROR_ITEM_ENHANCED_END_NOTYET: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 255 ), GAMERESOURCEMAN->GetGameText( 301 ), 0, enhance ); } break; case ERROR_ITEM_ENHANCED_END_EQUIP_LEVEL_BY_SAFE: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12100 ), GAMERESOURCEMAN->GetGameText( 301 ), 0, enhance ); } break; case ERROR_ITEM_ENHANCED_END_EQUIP_LEVEL_BY_CARD: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12500 ), GAMERESOURCEMAN->GetGameText( 301 ), 0, enhance ); } break; } /// DB ´ë±âÁßÀ̾úÀ¸¸é Ç®±â if( mTry == ITEM_TRY_ENHANCEDBWORK ) { UnlockItemTry( ITEM_TRY_ENHANCEDBWORK ); } } break; case NM_ITEM_ENHANCED_OTHEREND_SYN: { MSG_SYN_ITEM_ENHANCED_OTHEREND* msgData = (MSG_SYN_ITEM_ENHANCED_OTHEREND*)msg; cPlayer* p = OBJECTMAN->GetPlayer( msgData->characterIdx ); if( p != NULL ) { p->SetStopFlag( eSTOP_NONE ); switch( msgData->ErrorCode ) { case ERROR_ITEM_ENHANCED_SYN_SUCCESS: // ¼º°ø { NiTransform trans; trans.MakeIdentity(); trans.m_Translate = NiPoint3( 0.0f, 0.0f, 50.0f ); p->SetLinkdEffect( eLINK_HEAD2, "./Data/Effect/eff_pc_enchant_02.nif", &trans, false, true ); p->ChangeAnimation( (ePLAYER_ANIMATIONTYPE) 817 ); } break; case ERROR_ITEM_ENHANCED_SYN_DOWN: // ´Ù¿î case ERROR_ITEM_ENHANCED_SYN_DESTROY: // ÆÄ±« case ERROR_ITEM_ENHANCED_SYN_KEEP: // º¯È­¾øÀ½ { NiTransform trans; trans.MakeIdentity(); trans.m_Translate = NiPoint3( 0.0f, 0.0f, 20.0f ); p->SetLinkdEffect( eLINK_HEAD2, "./Data/Effect/eff_pc_enchant_03.nif", &trans, false, true ); p->ChangeAnimation( (ePLAYER_ANIMATIONTYPE) 818 ); } break; case ERROR_ITEM_ENHANCED_SYN_ENDFAIL: // °­È­ ¾ÈÇÔ ( Ãë¼ÒµÊ ) break; } } } break; case NM_ITEM_ENHANCED_CANCEL_RES: { MSG_ERROR* pmsg = (MSG_ERROR*)msg; if( pmsg->ErrorCode == ERROR_ITEM_ENHANCED_CANCEL_DBWORK ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 273 ) ); ITEMMAN->LockItemTry( ITEM_TRY_ENHANCEDBWORK ); } } break; case NM_ITEM_ENHANCED_CANCEL_SYN: { MSG_SYN_ITEM_ENHANCED_CANCEL* msgData = (MSG_SYN_ITEM_ENHANCED_CANCEL*)msg; cPlayer* p = OBJECTMAN->GetPlayer( msgData->characterIdx ); if( p && p->GetStopFlag() == eSTOP_ENHANCED ) { p->SetStopFlag( eSTOP_NONE ); } else assert(0); } break; case NM_ITEM_ENHANCED_CANCELFORCE_SYN: { // °­Á¦ Ãë¼Ò if( HERO->GetStopFlag() == eSTOP_ENHANCED ) { HERO->SetStopFlag( eSTOP_NONE ); HERO->ClearItemEnhanceEffect(); cEnhancedWindow* win = GAMEUI->GetEnhancedWindow(); if( win ) { win->StopEnhanced(); win->Hide(); } } } break; case NM_ITEM_DISJOINT_INVENTORY_RES: { /// ºÐÇØ MSG_RES_ITEM_DISJOINT_INVENTORY* msgData = (MSG_RES_ITEM_DISJOINT_INVENTORY*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_DISJOINT_INVENTORY_SUCCESS: { NetTryItem( NM_ITEM_DISJOINT_INVENTORY_RES, msgData ); } break; case ERROR_ITEM_DISJOINT_INVENTORY_FAIL: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 251 ), GAMERESOURCEMAN->GetGameText( 301 ) ); } break; case ERROR_ITEM_DISJOINT_INVENTORY_NOTYET: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 252 ), GAMERESOURCEMAN->GetGameText( 301 ) ); } break; case ERROR_ITEM_DISJOINT_INVENTORY_MAX_ITEM: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 220 ), GAMERESOURCEMAN->GetGameText( 301 ) ); } break; case ERROR_ITEM_DISJOINT_INVENTORY_LICENSE: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 293 ), GAMERESOURCEMAN->GetGameText( 301 ) ); } break; } /// ¾ÆÀÌÅÛ ºÐÇØ »ç¿îµå Àç»ý Ãë¼ÒÇϱâ. HERO->ClearItemDisjointSound(); /// À©µµ¿ì Ŭ¸®¾î cNpcDisjointWindow* p = GAMEUI->GetNpcDisjointWindow(); if( p ) { p->Clear(); /// ³»ºÎ¿¡¼­ netunlock } else { assert(0); } UnlockItemTry( ITEM_TRY_DISJOINT ); } break; case NM_ITEM_DROP_IN_SYN: { MSG_ITEM_INFO* msgData = (MSG_ITEM_INFO*)msg; if( CreateDropItem( msgData ) == false ) { assert(0); } else { /// µå¶øµÈ ¾ÆÀÌÅÛ¿¡ µû¸¥ »ç¿îµå Àç»ý. NiPoint3 trans; trans.x = msgData->itemDrop.xPos; trans.y = msgData->itemDrop.yPos; NAVIMESH->CalcHeight( &trans.z, trans.x, trans.y ); unsigned long soundIndex = 2013; if( msgData->rare >= eTOOLTIP_RARE ) soundIndex = 2014; /// ¾ÆÀÌÅÛ µå¶ø ½Ã »ç¿îµå ¿¬Ãâ. sSoundInfo* pInfo = SOUNDSYS->GetSoundInfo( soundIndex ); if( pInfo == 0 ) return ; cSoundSceneNodeParam soundParam; if( pInfo->mRadius <= 0.0f ) { soundParam.mRadius = 2000.0f; } else { soundParam.mRadius = pInfo->mRadius; } soundParam.mLoopCount = 1; soundParam.mVolumeRatio = OPTIONMAN->GetEffVolume() * pInfo->mVolume; /// ±âº» ¼Ó¼º ÀÎÀÚµéÀ» ¼³Á¤ soundParam.mPathName = pInfo->mFileName; soundParam.mTranslate = trans; soundParam.mpOwnerSceneNode = NULL; //cSoundSceneNode* pnode = SCENEMAN->CreateEffectSound( soundParam ); SCENEMAN->CreateEffectSound( soundParam ); } } break; case NM_ITEM_SIGHT_IN_RES: { MSG_ITEM_INFO* msgData = (MSG_ITEM_INFO*)msg; if( CreateDropItem( msgData ) == false ) { assert(0); } } break; case NM_ITEM_DROP_OUT_SYN: case NM_ITEM_SIGHT_OUT_RES: { MSG_ITEMIDX* msgData = (MSG_ITEMIDX*)msg; DeleteDropItem( msgData->idx ); } break; case NM_ITEM_GET_OPEN_RES: { /// ¾ÆÀÌÅÛ ¸®½ºÆ® ¿äû MSG_RES_ITEM_GET_OPEN* msgData = (MSG_RES_ITEM_GET_OPEN*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_GET_OPEN_SUCCESS: { /// UI ¿¡ ¾ÆÀÌÅÛ ¸®½ºÆ® ¼¼ÆÃ cLootingWindow* looting = GAMEUI->GetLootingWindow(); if( looting ) { /// µ¥ÀÌÅÍ »èÁ¦ looting->Clear(); looting->SetDropIndex( msgData->openItemIdx ); sItemData* data = msgData->itemData; for( int i = 0; i < msgData->rowCount; ++i, ++data ) { looting->AddItem( data ); } GAMEUI->ShowLootingWindow(); } else { assert(0); } } break; /// »óÅÂ... idle case ERROR_ITEM_GET_OPEN_FAIL: { /// ½ÇÆÐ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 210 ) ); } break; case ERROR_ITEM_GET_OPEN_OWNER: case ERROR_ITEM_GET_OPEN_PARTY: { /// ¼ÒÀ¯±Ç¿À·ù CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 211 ) ); } break; case ERROR_ITEM_GET_OPEN_DISTANCE: { /// °Å¸®¿À·ù CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 212 ) ); } break; case ERROR_ITEM_GET_OPEN_EXIST: { /// ¿­¶÷Áß¿À·ù CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 213 ) ); } break; default: assert(0); break; } UnlockItemTry( ITEM_TRY_PICK ); } break; case NM_ITEM_GET_OPEN_SYN: { MSG_SYN_ITEM_GET_OPEN* msgData = (MSG_SYN_ITEM_GET_OPEN*)msg; cPlayer* player = OBJECTMAN->GetPlayer( msgData->characterIdx ); if( player ) player->SetState( ePLAYER_STATE_ITEMPICK ); } break; case NM_ITEM_GET_CLOSE_RES: { /// ¹«Á¶°Ç »óÀÚ ´Ý±â cLootingWindow* looting = GAMEUI->GetLootingWindow(); if( looting ) { /// ´Ý±â¸¸ÇÑ´Ù ( ´Ý±â ÆÐŶÀº ¾Èº¸³¿ ) looting->Close(); looting->NetUnLock( eLOCK_CLOSE ); /// »óÅÂ... idle if( HERO->GetState() == ePLAYER_STATE_ITEMPICK ) HERO->SetState( eOBJECT_STATE_IDLE ); } else assert(0); } break; case NM_ITEM_GET_CLOSE_SYN: { MSG_SYN_ITEM_GET_CLOSE* msgData = (MSG_SYN_ITEM_GET_CLOSE*)msg; cPlayer* player =OBJECTMAN->GetPlayer( msgData->characterIdx ); if( player ) { /// »óÅÂ... idle if( player->GetState() == ePLAYER_STATE_ITEMPICK ) player->SetState( eOBJECT_STATE_IDLE ); } } break; case NM_ITEM_GET_RES: { /// ¾ÆÀÌÅÛ È¹µæ MSG_RES_ITEM_GET* msgData = (MSG_RES_ITEM_GET*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_GET_SUCCESS: NetTryItem( NM_ITEM_GET_RES, msgData ); break; case ERROR_ITEM_GET_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_GETITEM, GAMERESOURCEMAN->GetGameText( 234 ) ); break; case ERROR_ITEM_GET_AUTO: /// ÀÚµ¿½ÀµæÀÎ °æ¿ì ó¸® NetGetItem( (MSG_RES_ITEM_GET*)msg ); return; default: assert( 0 && "network error!" ); break; } UnlockItemTry( ITEM_TRY_GET ); cLootingWindow* win = GAMEUI->GetLootingWindow(); if( win ) { win->NetUnLock( eLOCK_GETITEM ); } else { assert(0); } } break; case NM_ITEM_GET_LEAVE_RES: { /// ¾ÆÀÌÅÛ È¹µæÈÄ, ·çÆÃâ¿¡ ³²Àº »óÅ MSG_RES_ITEM_GET_LEAVE* msgData = (MSG_RES_ITEM_GET_LEAVE*)msg; /// ³²Àº ³»¿ë ¼¼ÆÃ cLootingWindow* looting = GAMEUI->GetLootingWindow(); if( looting ) { /// µ¥ÀÌÅÍ »èÁ¦ looting->Clear(); sItemData* data = msgData->itemData; for( int i = 0; i < msgData->rowCount; ++i, ++data ) { looting->AddItem( data ); } if( msgData->rowCount <= 0 ) { looting->Hide(); if( HERO->GetState() == ePLAYER_STATE_ITEMPICK ) HERO->SetState( eOBJECT_STATE_IDLE ); } } else { assert(0); } } break; case NM_ITEM_GATHERING_OPEN_RES: { /// äÁý »óÀÚ¿­±â MSG_RES_ITEM_GATHERING_OPEN* msgData = (MSG_RES_ITEM_GATHERING_OPEN*)msg; /// UI ¿¡ ¾ÆÀÌÅÛ ¸®½ºÆ® ¼¼ÆÃ cLootingWindow* looting = GAMEUI->GetLootingWindow(); if( looting ) { /// µ¥ÀÌÅÍ »èÁ¦ looting->Clear(); sItemData* data = msgData->itemData; for( int i = 0; i < msgData->rowCount; ++i, ++data ) { looting->AddItem( data ); } GAMEUI->ShowLootingWindow(); } else { assert(0); } } break; case NM_ITEM_USE_RES: { /// ¾ÆÀÌÅÛÀÌ »ç¿ëµÊ ( ½ºÅ³¿¡ ÀÇÇÑ »ç¿ëµî ) MSG_RES_ITEM_USE* msgData = (MSG_RES_ITEM_USE*)msg; sInventory* inv = &msgData->inventory; if( inv->count > 0 ) { NetSetItem( inv ); /// ÄðŸÀӸŴÏÀú¿¡ »ç¿ë µî·Ï cItem& item = mItemArray[inv->number]; if( item.mDefine ) { cItemAbility* itemAbil = item.mDefine->GetAbililty(); if( itemAbil && itemAbil->GetCoolTime() > 0 ) { COOLMAN->StartCoolTime( item.mIndex ); } } /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); } else { NetDumpItem( inv->number ); } /// ½ºÅ³»ç¿ëÀ¸·Î ÀÎÇÑ ¾ÆÀÌÅÛ »ç¿ëÀ̹ǷÎ, unlock ÇÏ¸é ¾ÈµÊ!!! /// lock, unlock Àº Àκ¥Å丮,â°í µî¿¡¼­ ¾ÆÀÌÅÛ ¿¡ °üÇÑ ³»¿ëÀ϶§¸¸ »ç¿ë } break; case NM_ITEM_REWARD_RES: { /// Äù½ºÆ®·Î ÀÎÇÑ LOCKÀº Äù½ºÆ®¿¡¼­ Ǭ´Ù /// ¿¡·¯¸Þ¼¼Áö´Â Äù½ºÆ® º¸»ó¿¡¼­ ó¸® /// ¾ÆÀÌÅÛ È¹µæ - Äù½ºÆ® º¸»ó, ½Å±ÔÄù½ºÆ®½Ã ¾ÆÀÌÅÛ Á¦°ø MSG_RES_ITEM_REWARD* msgData = (MSG_RES_ITEM_REWARD*)msg; NetTryItem( NM_ITEM_REWARD_RES, msgData ); } break; case NM_ITEM_TAKE_RES: { /// Äù½ºÆ®·Î ÀÎÇÑ LOCKÀº Äù½ºÆ®¿¡¼­ Ǭ´Ù /// ¾ÆÀÌÅÛ È¸¼ö MSG_RES_ITEM_TAKE* msgData = (MSG_RES_ITEM_TAKE*)msg; NetTryItem( NM_ITEM_TAKE_RES, msgData ); } break; case NM_ITEM_GET_QUEST_RES: { /// ¾ÆÀÌÅÛ ÀÚµ¿½ÀµæÀ̹ǷΠlock ¾ÈÇÔ MSG_RES_ITEM_GET_QUEST* msgData = (MSG_RES_ITEM_GET_QUEST*)msg; bool isItemGet = false; sInventory* inv = msgData->Inventory; for ( long i = 0; i < msgData->RowCount; i++, inv++ ) { /// ÁݱâÀüÀÇ °¹¼ö È®ÀÎÇϱâ cItem& item = mItemArray[inv->number]; /// Ãß°¡µÈ °¹¼ö ±¸Çϱâ int addcount = inv->count - item.mCount; /// °¹¼ö ¹× ¹«°Ô Ãß°¡ ¾ÈÇÔ NetSetItem( inv ); /// ¾ÆÀÌÅÛ È¹µæ¸Þ¼¼Áö ½î±â cItemDefine* itemDefine = GetItemDefine( item.mIndex ); if( itemDefine ) { isItemGet = true; cStringT str; LPCTSTR countStr = cNumberEditBox::FormatNumber( addcount ); str.Format( GAMERESOURCEMAN->GetGameText( 240 ), countStr ); CHATMANAGER->AddItemMsg( item.mIndex, inv->number, GAMERESOURCEMAN->GetGameText( 245 ), (LPCTSTR)str.Cstr(), true ); } } /// Äù½ºÆ® ¾ÆÀÌÅÛ ½Àµæ ÀÌÆåÆ® ó¸® if( isItemGet ) { NiTransform trans; trans.MakeIdentity(); trans.m_Translate = NiPoint3( 0.0f, 0.0f, 50.0f ); HERO->SetLinkdEffect( eLINK_HEAD2, "./Data/Effect/eff_pc_itemget_03.nif", &trans, false, true ); SOUNDSYS->Play2DSound( 2017 ); } /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); } break; case NM_ITEM_EXCHANGE_ASK_RES: { cStringT str; /// °Å·¡½Åû °á°ú MSG_RES_ITEM_EXCHANGE_ASK* msgData = (MSG_RES_ITEM_EXCHANGE_ASK*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_EXCHANGE_ASK_SUCCESS: // ¼º°ø - ½ÅûÈÄ ´ë±âÁß str.Format( GAMERESOURCEMAN->GetGameText( 2000 ), mTradeName.Cstr() ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)str.Cstr() ); break; case ERROR_ITEM_EXCHANGE_ASK_FAIL: // ½ÇÆÐ - ´ë»óÀÌ ¾ø°Å³ª ¿À·ùÀΰæ¿ì CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2015 ) ); break; case ERROR_ITEM_EXCHANGE_ASK_ERROR: // ½ÇÆÐ - °Å·¡ÇÒ¼ö ¾ø´Â »óÅ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2020 ) ); break; case ERROR_ITEM_EXCHANGE_ASK_DISTANCE: // ½ÇÆÐ - °Å¸® CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2017 ) ); break; case ERROR_ITEM_EXCHANGE_ASK_OPTIONREFUSE: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2023 ) ); break; case ERROR_ITEM_EXCHANGE_ASK_TARGETOPTIONREFUSE: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2700 ) ); break; case ERROR_ITEM_EXCHANGE_ASK_TARGETERROR: // ´ë»ó »óÅ ¿À·ù CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2016 ) ); break; case ERROR_ITEM_EXCHANGE_ASK_REPLAY: // ´äº¯¿äû { /// »ó´ë¹æÀ¸·ÎºÎÅÍ °Å·¡¿äûÀÌ ¿È /// °Å·¡¿äû ¸Þ¼¼Áö ¹Ú½º ¶ç¿ì±â cPlayer* target = OBJECTMAN->GetPlayer( msgData->characterIdx ); if( !target ) { assert(0); return; } /// str.Format( GAMERESOURCEMAN->GetGameText( 2001 ), target->GetName() ); UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_TRADE_REQUEST, eSKIN_YESNO, (LPCTSTR)str.Cstr(), GAMERESOURCEMAN->GetGameText( 301 ), 0, 0, TRADE_WAIT_TIME, false, false ); /// »ó´ëÁ¤º¸¼¼ÆÃ mTradeTarget = msgData->characterIdx; mTradeName = target->GetName(); } break; } } break; case NM_ITEM_EXCHANGE_REP_RES: { /// °Å·¡¿äû ÀÀ´ä¿¡ °üÇÑ °á°ú MSG_RES_ITEM_EXCHANGE_REP* msgData = (MSG_RES_ITEM_EXCHANGE_REP*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_EXCHANGE_REP_SUCCESS: { /// °Å·¡ ½ÃÀÛ cTradeWindow* trade = GAMEUI->GetTradeWindow(); if( trade ) { cUIWindow* inven = (cUIWindow*)GAMEUI->GetInventoryWindow(); if( inven && inven->IsVisible() ) UIMAN->SetRestoreShow( inven ); trade->SetNames( (LPCTSTR)mTradeName.Cstr() ); trade->Show(); // ¼ø¼­ ÁÖÀÇ GAMEUI->ShowInventory(); } else { assert(0); } } break; case ERROR_ITEM_EXCHANGE_REP_REFUSE: break; case ERROR_ITEM_EXCHANGE_REP_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2020 ) ); break; case ERROR_ITEM_EXCHANGE_REP_ERROR: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2002 ) ); break; case ERROR_ITEM_EXCHANGE_REP_TARGETERROR: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2016 ) ); break; case ERROR_ITEM_EXCHANGE_REP_NOTEXIST: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2004 ) ); break; case ERROR_ITEM_EXCHANGE_REP_DISTANCE: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2017 ) ); break; case ERROR_ITEM_EXCHANGE_REP_OPTIONREFUSE: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2023 ) ); break; case ERROR_ITEM_EXCHANGE_REP_TARGETOPTIONREFUSE: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2700 ) ); break; case ERROR_ITEM_EXCHANGE_REP_TIME: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2005 ) ); break; } } break; case NM_ITEM_EXCHANGE_REP_SYN: { /// °Å·¡ ½ÅûÀÚ¿¡°Ô °á°ú ¿È( »ó´ë¹æÀÇ ÀÀ´ä°ü·Ã ) MSG_RES_ITEM_EXCHANGE_REP* msgData = (MSG_RES_ITEM_EXCHANGE_REP*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_EXCHANGE_REP_SUCCESS: { /// °Å·¡ ½ÃÀÛ cTradeWindow* trade = GAMEUI->GetTradeWindow(); if( trade ) { cUIWindow* inven = (cUIWindow*)GAMEUI->GetInventoryWindow(); if( inven && inven->IsVisible() ) UIMAN->SetRestoreShow( inven ); trade->SetNames( (LPCTSTR)mTradeName.Cstr() ); trade->Show(); // ¼ø¼­ ÁÖÀÇ GAMEUI->ShowInventory(); } else { assert(0); } } break; case ERROR_ITEM_EXCHANGE_REP_TARGETREFUSE: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2003 ) ); break; case ERROR_ITEM_EXCHANGE_REP_FAIL: case ERROR_ITEM_EXCHANGE_REP_ERROR: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2016 ) ); break; case ERROR_ITEM_EXCHANGE_REP_TARGETERROR: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2020 ) ); break; case ERROR_ITEM_EXCHANGE_REP_NOTEXIST: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2002 ) ); break; case ERROR_ITEM_EXCHANGE_REP_DISTANCE: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2017 ) ); break; case ERROR_ITEM_EXCHANGE_REP_OPTIONREFUSE: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2700 ) ); break; case ERROR_ITEM_EXCHANGE_REP_TARGETOPTIONREFUSE: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2023 ) ); break; case ERROR_ITEM_EXCHANGE_REP_TIME: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2005 ) ); break; } } break; case NM_ITEM_EXCHANGE_ADD_RES: { /// °Å·¡¾ÆÀÌÅÛ Ãß°¡ °á°ú MSG_RES_ITEM_EXCHANGE_ADD* msgData = (MSG_RES_ITEM_EXCHANGE_ADD*)msg; cTradeWindow* trade = GAMEUI->GetTradeWindow(); if( !trade ) { assert(0); } switch( msgData->ErrorCode ) { case ERROR_ITEM_EXCHANGE_ADD_SUCCESS: /// µî·Ï¿Ï·á if( mTry == ITEM_TRY_TRADEADD ) { /// ¾ÆÀÌÅÛ µî·ÏÀ̾úÀ¸¸é, if( trade && trade->AddMyItem( mSlotIndex0 ) == false ) { assert(0); } mSlotIndex0 = 0; } else { /// ±Ý¾× µî·ÏÀ̾úÀ¸¸é, if( trade ) trade->AddMyMoney( mTradeMoney ); } break; case ERROR_ITEM_EXCHANGE_ADD_FAIL: /// ½ÇÆÐ if( mTry == ITEM_TRY_TRADEADD ) CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2008 ) ); else CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2018 ) ); break; case ERROR_ITEM_EXCHANGE_ADD_TRADE_MONEY: /// Æ®·¹ÀÌµå ½Ãµµ½Ã ÃÖ´ë °Å·¡ Çѵµ(10¾ï) Ãʰú½Ã UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 11206 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_ITEM_EXCHANGE_ADD_EXCHANGE: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 2019 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; break; } /// ¶ôÇ®±â if( mTry == ITEM_TRY_TRADEADD ) { UnlockItemTry( ITEM_TRY_TRADEADD ); if( trade ) trade->NetUnLock(); } else { /// ±Ý¾× À©µµ¿ì ¶ô Ç®±â cMoneyWindow* win = GAMEUI->GetMoneyWindow(); if( win ) win->NetUnLock(); } } break; case NM_ITEM_EXCHANGE_ADD_SYN: { /// »ó´ë¹æ ¾ÆÀÌÅÛ Ãß°¡ MSG_SYN_ITEM_EXCHANGE_ADD* msgData = (MSG_SYN_ITEM_EXCHANGE_ADD*)msg; cTradeWindow* trade = GAMEUI->GetTradeWindow(); if( trade ) { /// ¾ÆÀÌÅÛ µî·Ï if( msgData->type == TYPE_ITEM_EXCHANGE_ADD_ITEM ) { trade->AddThatItem( &msgData->inventory ); } /// ±Ý¾× µî·Ï else { trade->AddThatMoney( msgData->money ); } } else assert(0); } break; case NM_ITEM_EXCHANGE_DEL_RES: { /// ¾ÆÀÌÅÛ »èÁ¦ °á°ú MSG_RES_ITEM_EXCHANGE_DEL* msgData = (MSG_RES_ITEM_EXCHANGE_DEL*)msg; cTradeWindow* trade = GAMEUI->GetTradeWindow(); if( !trade ) { assert(0); } switch( msgData->ErrorCode ) { case ERROR_ITEM_EXCHANGE_DEL_SUCCESS: if( mTry == ITEM_TRY_TRADEDELETE ) { /// ¾ÆÀÌÅÛ »èÁ¦ if( trade && trade->DeleteMyItem( (unsigned short)mTempIndex ) == false ) { assert(0); return; } } break; case ERROR_ITEM_EXCHANGE_DEL_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2009 ) ); break; } UnlockItemTry( ITEM_TRY_TRADEDELETE ); if( trade ) trade->NetUnLock(); } break; case NM_ITEM_EXCHANGE_DEL_SYN: { /// »ó´ë¹æ ¾ÆÀÌÅÛ »èÁ¦ MSG_SYN_ITEM_EXCHANGE_DEL* msgData = (MSG_SYN_ITEM_EXCHANGE_DEL*)msg; cTradeWindow* trade = GAMEUI->GetTradeWindow(); if( trade ) { /// ¾ÆÀÌÅÛ »èÁ¦ trade->DeleteThatItem( &msgData->inventory ); } else { assert(0); } } break; case NM_ITEM_EXCHANGE_OK_RES: { /// °Å·¡¹°Ç° È®ÀÎ MSG_RES_ITEM_EXCHANGE_OK* msgData = (MSG_RES_ITEM_EXCHANGE_OK*)msg; cTradeWindow* trade = GAMEUI->GetTradeWindow(); if( trade ) { if( msgData->ErrorCode != ERROR_ITEM_EXCHANGE_OK_PLAYER ) trade->NetUnLock(); switch( msgData->ErrorCode ) { case ERROR_ITEM_EXCHANGE_OK_SUCCESS: { /// ¹°Ç°È®ÀΠó¸® trade->SetStatus( ItemExchangeOk, true ); } break; case ERROR_ITEM_EXCHANGE_OK_FAIL: { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2010 ) ); /// ¹°Ç°¼öÁ¤»óÅ ó¸® trade->SetStatus( ItemExchangeBegin, true ); } break; case ERROR_ITEM_EXCHANGE_OK_PLAYER: /// »ó´ë¹æÀÇ ¹°Ç° È®ÀÎ µÊ { trade->SetStatus( ItemExchangeOk, false ); } break; } } else assert(0); } break; case NM_ITEM_EXCHANGE_RETRY_RES: { /// °Å·¡¹°Ç° ¼öÁ¤ MSG_RES_ITEM_EXCHANGE_RETRY* msgData = (MSG_RES_ITEM_EXCHANGE_RETRY*)msg; cTradeWindow* trade = GAMEUI->GetTradeWindow(); if( trade ) { if( msgData->ErrorCode != ERROR_ITEM_EXCHANGE_RETRY_PLAYER ) trade->NetUnLock(); switch( msgData->ErrorCode ) { case ERROR_ITEM_EXCHANGE_RETRY_SUCCESS: { trade->SetStatus( ItemExchangeBegin, true ); trade->SetStatus( ItemExchangeBegin, false ); } break; case ERROR_ITEM_EXCHANGE_RETRY_FAIL: { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2011 ) ); trade->SetStatus( ItemExchangeOk, true ); } break; case ERROR_ITEM_EXCHANGE_RETRY_PLAYER: /// »ó´ë¹æÀÇ ¹°Ç° ¼öÁ¤»óÅ µÊ { trade->SetStatus( ItemExchangeBegin, true ); trade->SetStatus( ItemExchangeBegin, false ); } break; } } else assert(0); } break; case NM_ITEM_EXCHANGE_CANCEL_RES: { MSG_RES_ITEM_EXCHANGE_CANCEL* msgData = (MSG_RES_ITEM_EXCHANGE_CANCEL*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_EXCHANGE_CANCEL_SUCCESS: break; case ERROR_ITEM_EXCHANGE_CANCEL_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2007 ) ); break; case ERROR_ITEM_EXCHANGE_CANCEL_PLAYER: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2006 ) ); break; } cTradeWindow* trade = GAMEUI->GetTradeWindow(); if( !trade ) { assert(0); } if( msgData->ErrorCode != ERROR_ITEM_EXCHANGE_CANCEL_FAIL ) { /// °Å·¡ ´Ý±â if( trade ) trade->Hide(); /// Ŭ¸®¾î mTradeName.Clear(); mTradeTarget = 0; } if( trade && msgData->ErrorCode != ERROR_ITEM_EXCHANGE_CANCEL_PLAYER ) trade->NetUnLock(); } break; case NM_ITEM_EXCHANGE_END_RES: { /// °Å·¡ Á¾·á MSG_RES_ITEM_EXCHANGE_END* msgData = (MSG_RES_ITEM_EXCHANGE_END*)msg; cTradeWindow* trade = GAMEUI->GetTradeWindow(); if( !trade ) { assert(0); } switch( msgData->ErrorCode ) { case ERROR_ITEM_EXCHANGE_END_SUCCESS: { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2012 ) ); /// °Å·¡ ¾ÆÀÌÅÛ »ðÀÔ ¹× °Å·¡µÈ ¾ÆÀÌÅÛ »èÁ¦ NetTradeItem( msgData ); /// °Å·¡À©µµ¿ì ´Ý±â if( trade ) trade->Hide(); } break; case ERROR_ITEM_EXCHANGE_END_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2013 ) ); break; case ERROR_ITEM_EXCHANGE_END_THATMONEY_FAIL: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, (LPCTSTR)GAMERESOURCEMAN->GetGameText(11207), GAMERESOURCEMAN->GetGameText( 301 ), 0, trade ); } break; case ERROR_ITEM_EXCHANGE_END_MYMONEY_FAIL: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, (LPCTSTR)GAMERESOURCEMAN->GetGameText(11201), GAMERESOURCEMAN->GetGameText( 301 ), 0, trade ); } break; case ERROR_ITEM_EXCHANGE_END_INVENTORY: { /// max Àκ¥Å丮·Î ÀÎÇÑ ¿¡·¯ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2021 ) ); UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 2021 ), GAMERESOURCEMAN->GetGameText( 301 ), 0, trade ); } break; case ERROR_ITEM_EXCHANGE_END_WAIT: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2014 ) ); break; case ERROR_ITEM_EXCHANGE_END_MY_MAX_ITEM: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 2025 ), GAMERESOURCEMAN->GetGameText( 301 ), 0, trade ); } break; case ERROR_ITEM_EXCHANGE_END_THAT_MAX_ITEM: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 2026 ), GAMERESOURCEMAN->GetGameText( 301 ), 0, trade ); } break; } if( trade ) trade->NetUnLock(); if( msgData->ErrorCode == ERROR_ITEM_EXCHANGE_END_WAIT ) { if( trade ) trade->SetStatus( ItemExchangeEnd, true ); } } break; case NM_ITEM_STALL_SELL_OPEN_RES: { /// ³ëÁ¡»ó ¿ÀÇ ¿äû °á°ú MSG_RES_ITEM_STALL_SELL_OPEN* msgData = (MSG_RES_ITEM_STALL_SELL_OPEN*)msg; cUserSellWindow* userSell = GAMEUI->GetUserSellWindow(); if( !userSell ) { assert(0); } switch( msgData->ErrorCode ) { case ERROR_ITEM_STALL_SELL_OPEN_SUCCESS: { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2500 ) ); /// ÆÇ¸Å³ëÁ¡»ó open »óÅ·ΠÇÔ if( userSell ) { cUIWindow* inven = (cUIWindow*)GAMEUI->GetInventoryWindow(); if( inven && inven->IsVisible() ) UIMAN->SetRestoreShow( inven ); userSell->SetStatus( eUSERSELL_SELL ); userSell->SetOpen(); userSell->SetName( (LPTSTR)mUserSellName.Cstr() ); userSell->Show(); // ¼ø¼­ ÁÖÀÇ GAMEUI->ShowInventory(); } /// »óÅ º¯°æ HERO->SetStopFlag( eSTOP_OPENSTALL ); HERO->ActiveUserSellBubble( (LPTSTR)mUserSellName.Cstr(), COLOR_GREEN ); } break; case ERROR_ITEM_STALL_SELL_OPEN_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2501 ) ); break; case ERROR_ITEM_STALL_SELL_OPEN_EXIST: /// ÀÌ¹Ì ¿ÀÇÂÁß CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2502 ) ); break; } if( userSell ) userSell->NetUnLock( eLOCK_REGIST ); } break; case NM_ITEM_STALL_SELL_OPEN_SYN: { /// ´Ù¸¥À¯Àú°¡ ³ëÁ¡»ó ¿­°í ÀÖÀ½ MSG_SYN_ITEM_STALL_SELL_OPEN* msgData = (MSG_SYN_ITEM_STALL_SELL_OPEN*)msg; cPlayer* p = OBJECTMAN->GetPlayer( msgData->characterIdx ); if( p ) { p->SetStopFlag( eSTOP_OPENSTALL ); p->ActiveUserSellBubble( msgData->title, COLOR_GREEN ); } } break; case NM_ITEM_STALL_SELL_RENAME_RES: { /// ³ëÁ¡¸í º¯°æ°á°ú MSG_RES_ITEM_STALL_SELL_RENAME* msgData = (MSG_RES_ITEM_STALL_SELL_RENAME*)msg; cUserSellWindow* userSell = GAMEUI->GetUserSellWindow(); if( !userSell ) { assert(0); } switch( msgData->ErrorCode ) { case ERROR_ITEM_STALL_SELL_RENAME_SUCCESS: { /// ³ëÁ¡¸í º¯°æ ¼º°ø CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2515 ) ); /// ³ëÁ¡¸é º¯°æ if( userSell ) userSell->SetName( (LPTSTR)mUserSellName.Cstr() ); /// »óÅ º¯°æ HERO->ActiveUserSellBubble( (LPTSTR)mUserSellName.Cstr(), COLOR_GREEN ); } break; case ERROR_ITEM_STALL_SELL_RENAME_FAIL: { /// º¯°æ ½ÇÆÐ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2516 ) ); } break; } if( userSell ) userSell->NetUnLock( eLOCK_RENAME ); } break; case NM_ITEM_STALL_SELL_RENAME_SYN: { /// ´Ù¸¥ À¯ÀúÀÇ ³ëÁ¡¸í º¯°æµÊ MSG_SYN_ITEM_STALL_SELL_RENAME* msgData = (MSG_SYN_ITEM_STALL_SELL_RENAME*)msg; cPlayer* p = OBJECTMAN->GetPlayer( msgData->characterIdx ); if( p ) { if( p->GetState() == eOBJECT_STATE_STOP && p->GetStopFlag() == eSTOP_OPENSTALL ) { p->ActiveUserSellBubble( msgData->title, COLOR_GREEN ); /// ÇöÀç º¸°íÀÖ´Â »óÁ¡ÀÇ À̸§ÀÌ º¯°æµÇ¾úÀ¸¸é Àç ¼¼ÆÃ if( msgData->characterIdx == mUserSellTarget ) { cUserSellWindow* userSell = GAMEUI->GetUserSellWindow(); if( userSell ) userSell->SetName( msgData->title ); } } else { assert(0); } } } break; case NM_ITEM_STALL_SELL_CLOSE_RES: { /// ³ëÁ¡´Ý±â ¿äû MSG_RES_ITEM_STALL_SELL_CLOSE* msgData = (MSG_RES_ITEM_STALL_SELL_CLOSE*)msg; cUserSellWindow* userSell = GAMEUI->GetUserSellWindow(); if( !userSell ) { assert(0); } switch( msgData->ErrorCode ) { case ERROR_ITEM_STALL_SELL_CLOSE_SUCCESS: { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2503 ) ); if( userSell ) userSell->Hide(); HERO->DeActiveUserSellBubble(); HERO->StandUp(); } break; case ERROR_ITEM_STALL_SELL_CLOSE_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2504 ) ); break; } if( userSell ) userSell->NetUnLock( eLOCK_END ); } break; case NM_ITEM_STALL_SELL_CLOSE_SYN: { /// ´Ù¸¥À¯ÀúÀÇ ³ëÁ¡»ó ´ÝÈû MSG_SYN_ITEM_STALL_SELL_CLOSE* msgData = (MSG_SYN_ITEM_STALL_SELL_CLOSE*)msg; cPlayer* p = OBJECTMAN->GetPlayer( msgData->characterIdx ); if( p ) { /// »óÅ üũ if( p->GetState() != eOBJECT_STATE_STOP ) { assert(0); } if( p->GetStopFlag() != eSTOP_OPENSTALL ) { assert(0); } p->SetStopFlag( eSTOP_NONE ); p->DeActiveUserSellBubble(); p->StandUp(); /// hero°¡ ÀÌ¿ëÁßÀΰæ¿ì, if( msgData->characterIdx == GetUserSellTarget() ) { ITEMMAN->ClearUserSellTarget(); HERO->SetStopFlag( eSTOP_NONE ); cUserSellWindow* usersell = GAMEUI->GetUserSellWindow(); if( usersell ) usersell->Hide(); } } } break; case NM_ITEM_STALL_SELL_ADD_RES: { /// ³ëÁ¡ ¾ÆÀÌÅÛ µî·Ï MSG_RES_ITEM_STALL_SELL_ADD* msgData = (MSG_RES_ITEM_STALL_SELL_ADD*)msg; cUserSellWindow* userSell = GAMEUI->GetUserSellWindow(); if( !userSell ) { assert(0); } switch( msgData->ErrorCode ) { case ERROR_ITEM_STALL_SELL_ADD_SUCCESS: if( mTry == ITEM_TRY_SELLITEMADD ) { /// ¾ÆÀÌÅÛ µî·Ï ¼º°ø if( userSell && userSell->AddSellItem( mSlotIndex0, mPrice ) == false ) { assert(0); } mSlotIndex0 = 0; } break; case ERROR_ITEM_STALL_SELL_ADD_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2506 ) ); break; case ERROR_ITEM_STALL_SELL_ADD_TRADE_MONEY: { // ³ëÁ¡ °³´ç ÆÇ¸Å ±Ý¾×À» »õ·Î µî·Ï ¶Ç´Â ¼öÁ¤ÇÏ·Á°í ÇÒ¶§ ÃÖ´ë °Å·¡ ±Ý¾× º¸´Ù Å©°Ô ¼³Á¤ÇÏ·Á°í ÇÒ °æ¿ì UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 11206 ), GAMERESOURCEMAN->GetGameText( 301 ) ); if( mSlotIndex0 <= MAX_INVENTORY ) { if( userSell->IsRegistSellSlot( mSlotIndex0 ) != -1 ) { cItem& item = mItemArray[ mSlotIndex0 ]; item.SetLock( true ); mSlotIndex0 = 0; } } } break; case ERROR_ITEM_STALL_SELL_ADD_EXCHANGE: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 2019 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; } UnlockItemTry( ITEM_TRY_SELLITEMADD ); if( userSell ) userSell->NetUnLock( eLOCK_ADD ); } break; case NM_ITEM_STALL_SELL_ADD_SYN: { /// »ó´ë ³ëÁ¡»óÀÇ ¾ÆÀÌÅÛ Ãß°¡µÊ MSG_SYN_ITEM_STALL_SELL_DAT* msgData = (MSG_SYN_ITEM_STALL_SELL_DAT*)msg; cUserSellWindow* userSell = GAMEUI->GetUserSellWindow(); if( !userSell ) { assert(0); } /// sStallSellData data; data.status = StallSellItemStart; data.inventory = msgData->inventory; data.price = msgData->price; if( userSell && userSell->AddJoinItem( &data ) == false ) { assert(0); } } break; case NM_ITEM_STALL_SELL_DEL_RES: { /// ³ëÁ¡ ¾ÆÀÌÅÛ »èÁ¦ MSG_RES_ITEM_STALL_SELL_DEL* msgData = (MSG_RES_ITEM_STALL_SELL_DEL*)msg; cUserSellWindow* userSell = GAMEUI->GetUserSellWindow(); if( !userSell ) { assert(0); } switch( msgData->ErrorCode ) { case ERROR_ITEM_STALL_SELL_DEL_SUCCESS: if( mTry == ITEM_TRY_SELLITEMDELETE ) { /// mSlotIndex0 : ³ëÁ¡ ½½·ÔÀ» »ç¿ëÇÑ´Ù if( userSell && userSell->DelSellItem( mSlotIndex0 ) == false ) { assert(0); } } break; case ERROR_ITEM_STALL_SELL_DEL_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2507 ) ); break; } UnlockItemTry( ITEM_TRY_SELLITEMDELETE ); if( userSell ) userSell->NetUnLock( eLOCK_DELETE ); } break; case NM_ITEM_STALL_SELL_DEL_SYN: { MSG_SYN_ITEM_STALL_SELL_DAT* msgData = (MSG_SYN_ITEM_STALL_SELL_DAT*)msg; sInventory* inv = &msgData->inventory; cUserSellWindow* userSell = GAMEUI->GetUserSellWindow(); if( userSell ) userSell->DelJoinItem( inv ); } break; case NM_ITEM_STALL_SELL_MOD_RES: { /// ³ëÁ¡¾ÆÀÌÅÛ Á¤º¸ º¯°æ ¿äû MSG_RES_ITEM_STALL_SELL_MOD* msgData = (MSG_RES_ITEM_STALL_SELL_MOD*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_STALL_SELL_MOD_SUCCESS: { /// º¯°æ À©µµ¿ì ¶ç¿ì±â GAMEUI->ShowMoneyModifyWindow( eMONEY_NONE, eMBEVENT_USERSELL_ITEMMONEYMODIFY ); } break; case ERROR_ITEM_STALL_SELL_MOD_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2508 ) ); break; } cUIWindow* sell = (cUIWindow*)GAMEUI->GetUserSellWindow(); if( sell ) sell->NetUnLock( eLOCK_ITEMUPDATE ); } break; case NM_ITEM_STALL_SELL_MOD_SYN: { /// ³ëÁ¡ ¾ÆÀÌÅÛ Á¤º¸ ¼öÁ¤ÁßÀÓ MSG_SYN_ITEM_STALL_SELL_DAT* msgData = (MSG_SYN_ITEM_STALL_SELL_DAT*)msg; cUserSellWindow* userSell = GAMEUI->GetUserSellWindow(); if( userSell ) userSell->PauseJoinItem( &msgData->inventory ); } break; case NM_ITEM_STALL_SELL_COM_RES: { /// ¾ÆÀÌÅÛ ±¸ÀÔµÊ MSG_RES_ITEM_STALL_SELL_COM* msgData = (MSG_RES_ITEM_STALL_SELL_COM*)msg; cUserSellWindow* userSell = GAMEUI->GetUserSellWindow(); if( !userSell ) { assert(0); } sInventory* inv = &msgData->inventory; cItem& item = mItemArray[inv->number]; int sellCount = item.mCount - inv->count; /// ÆÈ¸°°¹¼ö if( item.mDefine ) { /// ÆÇ¸ÅÁ¤º¸ Ãâ·Â cStringT str; str.Format( GAMERESOURCEMAN->GetGameText( 248 ), msgData->characterName, item.mDefine->GetName(), sellCount ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)str.Cstr() ); } else { assert(0); } /// ÆÇ¸ÅÀÚ ¸ñ·Ï¿¡¼­ »èÁ¦ if( inv->count == 0 ) { if( userSell ) userSell->DelSellItem( inv->number, true ); /// Àκ¥Å丮 »èÁ¦ NetDumpItem( inv->number ); } else { /// Àڱ⠸ñ·Ï °³¼ö °»½Å if( userSell ) userSell->ModSellItem( inv->number, inv->count, true ); // °»½ÅÈÄ °¹¼ö ÃʱâÈ­ item.SetCount( inv->count ); /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); } } break; case NM_ITEM_STALL_SELL_JOIN_RES: { /// »ó´ë¹æÀÇ ³ëÁ¡»ó º¸±â MSG_RES_ITEM_STALL_SELL_JOIN* msgData = (MSG_RES_ITEM_STALL_SELL_JOIN*)msg; cUserSellWindow* userSell = GAMEUI->GetUserSellWindow(); if( !userSell ) { assert(0); } switch( msgData->ErrorCode ) { case ERROR_ITEM_STALL_SELL_JOIN_SUCCESS: { /// Âü¿© »óÅ·Πº¯°æ if( userSell ) { userSell->SetStatus( eUSERSELL_JOIN ); userSell->SetName( msgData->title ); userSell->SetTargetIndex( mUserSellTarget ); } /// ³ëÁ¡»ó Á¤º¸ ¼¼ÆÃ sStallSellData* data = msgData->stallSellData; for( int i = 0; i < msgData->rowCount; ++i, ++data ) { if( userSell && userSell->AddJoinItem( data ) == false ) { assert(0); continue; } } HERO->SetStopFlag( eSTOP_USESTALL ); if( userSell ) { cUIWindow* inven = (cUIWindow*)GAMEUI->GetInventoryWindow(); if( inven && inven->IsVisible() ) UIMAN->SetRestoreShow( inven ); // ¼ø¼­ ÁÖÀÇ userSell->Show(); GAMEUI->ShowInventory(); } } break; case ERROR_ITEM_STALL_SELL_JOIN_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2510 ) ); break; case ERROR_ITEM_STALL_SELL_JOIN_OVER: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2511 ) ); break; } } break; case NM_ITEM_STALL_SELL_LEAVE_RES: { /// ´Ý±â MSG_RES_ITEM_STALL_SELL_LEAVE* msgData = (MSG_RES_ITEM_STALL_SELL_LEAVE*)msg; cUserSellWindow* userSell = GAMEUI->GetUserSellWindow(); if( !userSell ) { assert(0); } switch( msgData->ErrorCode ) { case ERROR_ITEM_STALL_SELL_LEAVE_SUCCESS: break; case ERROR_ITEM_STALL_SELL_LEAVE_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2504 ) ); break; case ERROR_ITEM_STALL_SELL_LEAVE_CLOSED: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2512 ) ); break; } if( userSell ) userSell->Hide(); /// º¸°íÀÕ´Â ³ëÁ¡ Á¤º¸ ÃʱâÈ­ mUserSellTarget = 0; HERO->SetStopFlag( eSTOP_NONE ); if( userSell ) userSell->NetUnLock( eLOCK_JOINEND ); } break; case NM_ITEM_STALL_SELL_GET_RES: // ±¸ÀÔ°á°ú { MSG_RES_ITEM_STALL_SELL_GET* msgData = (MSG_RES_ITEM_STALL_SELL_GET*)msg; cUserSellWindow* userSell = GAMEUI->GetUserSellWindow(); if( !userSell ) { assert(0); } /// switch( msgData->ErrorCode ) { case ERROR_ITEM_STALL_SELL_GET_SUCCESS: { /// ±¸ÀÔ ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å NetSetItem( &msgData->Inventory ); UpdateItem(); /// ³ëÁ¡ ±¸¸Å½Ã »ç¿îµå Àç»ý SOUNDSYS->Play2DSound( 2044 ); } break; case ERROR_ITEM_STALL_SELL_GET_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2513 ) ); break; case ERROR_ITEM_STALL_SELL_LEAVE_MAX_ITEM: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 220 ) ); break; case ERROR_ITEM_STALL_SELL_LEAVE_HAVE_MONEY: // UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 11207 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; } UnlockItemTry( ITEM_TRY_SELLGET ); if( userSell ) userSell->NetUnLock( eLOCK_GET ); } break; case NM_ITEM_PUT_CARD_INVENTORY_RES: /// ¾ÆÀÌÅÛ¿¡ Ä«µå ÀåÂø ó¸® { MSG_RES_ITEM_PUT_CARD_INVENTORY* msgData = (MSG_RES_ITEM_PUT_CARD_INVENTORY*)msg; cPutCardWindow* putCard = GAMEUI->GetPutCardWindow(); if( !putCard ) { assert(0); } switch( msgData->ErrorCode ) { case ERROR_ITEM_PUT_CARD_INVENTORY_SUCCESS: { CHATMANAGER->AddSystemMsg( eSYSTEM_DOITEM, GAMERESOURCEMAN->GetGameText( 2603 ) ); /// »ðÀÔÇÑ Ä«µå »èÁ¦ if( mTry == ITEM_TRY_PUTCARD ) NetDumpItem( mSlotIndex0 ); sInventory& inv = msgData->Inventory; /// ÇØ´ç ¾ÆÀÌÅÛ Á¤º¸ °»½Å unsigned short slot = inv.number; cItem& item = mItemArray[slot]; /// ÀåÂø Ä«µåÁ¤º¸ ¼¼ÆÃ item.mCardIndex1 = inv.cardSlot1; item.mCardIndex2 = inv.cardSlot2; item.mCardIndex3 = inv.cardSlot3; item.mCardIndex4 = inv.cardSlot4; item.mCardIndex5 = inv.cardSlot5; /// ÀåÂø Á¤º¸ °»½Å if( putCard ) putCard->AddCard( msgData->Inventory ); /// Ä«µå ÀåÂø »ç¿îµå Àç»ý SOUNDSYS->Play2DSound( 3035 ); } break; case ERROR_ITEM_PUT_CARD_INVENTORY_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_DOITEM, GAMERESOURCEMAN->GetGameText( 2604 ) ); break; case ERROR_ITEM_PUT_CARD_INVENTORY_NOTYET: CHATMANAGER->AddSystemMsg( eSYSTEM_DOITEM, GAMERESOURCEMAN->GetGameText( 2605 ) ); break; case ERROR_ITEM_PUT_CARD_INVENTORY_LICENSE: CHATMANAGER->AddSystemMsg( eSYSTEM_DOITEM, GAMERESOURCEMAN->GetGameText( 293 ) ); break; } UnlockItemTry( ITEM_TRY_PUTCARD ); if( putCard ) putCard->NetUnLock(); } break; case NM_ITEM_CHANGE_INVENTORY_RES: /// ¾ÆÀÌÅÛ Ã¼ÀÎÁö { MSG_RES_ITEM_CHANGE_INVENTORY* msgData = (MSG_RES_ITEM_CHANGE_INVENTORY*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_CHANGE_INVENTORY_SUCCESS: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 243 )); NetTryItem( NM_ITEM_CHANGE_INVENTORY_RES, msgData ); break; case ERROR_ITEM_CHANGE_INVENTORY_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 244 )); break; case ERROR_ITEM_CHANGE_INVENTORY_NOTYET: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 223 )); break; case ERROR_ITEM_CHANGE_INVENTORY_MAX_ITEM: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 192 )); break; case ERROR_ITEM_CHANGE_INVENTORY_HAVE_MONEY: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 11217 ), GAMERESOURCEMAN->GetGameText(301) ); break; case ERROR_ITEM_CHANGE_INVENTORY_LICENSE: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 293 )); break; } UnlockItemTry( ITEM_TRY_CHANGE ); } break; case NM_ITEM_COLLECT_RES: { MSG_RES_ITEM_COLLECT* msgData = (MSG_RES_ITEM_COLLECT*)msg; cCardBookWindow* cardbook = (cCardBookWindow*)GAMEUI->GetCardBookWindow(); if( !cardbook ) { assert(0); return; } cTarotSheetWindow* sheet = cardbook->GetTarotSheet(); if( !sheet ) { assert(0); return; } // ¶ôÇ®±â ¸ÕÀú UnlockItemTry( ITEM_TRY_CARDBOOKADD ); switch( msgData->ErrorCode ) { case ERROR_ITEM_COLLECT_SUCCESS: { sInventory* inv = msgData->Inventory; for( unsigned long i = 0; i < msgData->RowCount; ++i, ++inv ) { cItem& item = mItemArray[inv->number]; // µî·ÏµÈ ½ºÇÁ·¹µå : ½ºÇÁ·¹µå ½½·Ô if( inv->number >= INVENTORY_SPREAD_NORMAL_BEGIN && inv->number <= INVENTORY_SPREAD_NORMAL_END ) { if( inv->count > 0 ) { // ÃʱâÈ­ if( item.mCount > 0 ) item.SetCount( 0 ); NetSetItem( inv ); int i = inv->number - INVENTORY_TAROT_NORMAL_BEGIN; if( i >= 0 ) sheet->UpdateData( i ); item.SetUsedFlag( false, false ); } else assert(0); } else { // ³²Àº ¾ÆÀÌÅÛ item.SetCount( inv->count ); ChangeSelectSlot( inv->number ); } } UpdateItem(); /// Ä«µå ³õ´Â »ç¿îµå Àç»ý SOUNDSYS->Play2DSound( 3035 ); // Ä«µåºÏ º¸¿©ÁÖ±â if( cardbook ) cardbook->Show(); } break; case ERROR_ITEM_COLLECT_FAIL: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 342 ) ); break; case ERROR_ITEM_COLLECT_NOTYET: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 342 ) ); break; case ERROR_ITEM_COLLECT_LICENSE: CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 293 ) ); break; } } break; case NM_ITEM_MAKESKILL_RES: case NM_ITEM_RECIPE_RES: { /// Á¶ÇÕ Àü¹®±â¼ú ¾ÆÀÌÅÛ & ·¹½ÃÇÇ ¾ÆÀÌÅÛ MSG_RES_MAKESKILL_ITEM* msgData = (MSG_RES_MAKESKILL_ITEM*)msg; NetMixSkillItem( msgData ); } break; case NM_ITEM_MIXED_RES: { /// Á¶ÇÕ ¾ÆÀÌÅÛ °á°ú MSG_RES_ITEM_MIXED* msgData = (MSG_RES_ITEM_MIXED*)msg; NetMixItem( msgData ); /// DB ´ë±âÁßÀ̾úÀ¸¸é Ç®±â if( mTry == ITEM_TRY_ITEMMIXDBWORK ) { CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 2823 ) ); UnlockItemTry( ITEM_TRY_ITEMMIXDBWORK ); } } break; case NM_ITEM_SKILLRESET_RES: { MSG_RES_ITEM_SKILLRESET* msgData = (MSG_RES_ITEM_SKILLRESET*)msg; NetSkillResetItem( msgData ); } break; case NM_ITEM_LICENSE_RES: { // ¹°Ç°ÀÎÁõ °á°ú MSG_RES_ITEM_LICENSE* msgData = (MSG_RES_ITEM_LICENSE*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_LICENSE_SUCCESS: { // Àκ¥½½·Ô °Ë»ç if( msgData->number <= MAX_INVENTORY ) { cItem& item = mItemArray[msgData->number]; // ÀÎÁõ ¼ÂÆÃ item.SetSeal( !(msgData->seal == 0) ); /// ¼±Åà ½½·Ô °»½Å ChangeSelectSlot( msgData->number ); UpdateItem(); } else { // ¿¡·¯ assert(0); } } break; case ERROR_ITEM_LICENSE_FAIL: // ½ÇÆÐ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 277 ) ); break; case ERROR_ITEM_LICENSE_TYPE: // ¹ÌÀÎÁõ ¾ÆÀÌÅÛÀÌ ¾Æ´Ô CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 278 ) ); break; case ERROR_ITEM_LICENSE_ALREADY: // ÀÌ¹Ì ÀÎÁõµÈ ¾ÆÀÌÅÛ CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, GAMERESOURCEMAN->GetGameText( 279 ) ); break; } // lockÇ®±â UnlockItemTry( ITEM_TRY_SEAL ); } break; case NM_ITEM_CASH_LIST_RES: { MSG_RES_ITEM_CASH_LIST* msgData = (MSG_RES_ITEM_CASH_LIST*)msg; cItemReceiptWindow* receipt = GAMEUI->GetItemReceiptWindow(); // ClearCashInven(); if( receipt ) { receipt->ClearTempInven(); // Àκ¥µ¥ÀÌÅÍ ÀúÀå sCashInventory* inv = msgData->Inventory; for( long i = 0; i < msgData->RowCount; ++i, ++inv ) { receipt->AddTempInven( inv ); } receipt->SaveResult( msgData->ErrorCode ); receipt->NetUnLock(); } else assert(0); UnlockItemTry( ITEM_TRY_LISTRECEIPT ); } break; case NM_ITEM_BILL_SYN: { MSG_SYN_ITEM_BILL* msgData = (MSG_SYN_ITEM_BILL*)msg; sItemBill* bill = msgData->itemBill; for( long i = 0; i < msgData->rowCount; ++i, ++bill ) { NetSetItemBill( bill ); } } break; case NM_ITEM_BILL_ADD_SYN: { MSG_SYN_ITEM_BILL_ADD* msgData = (MSG_SYN_ITEM_BILL_ADD*)msg; if( NetSetItemBill( &msgData->itemBill ) == false ) { assert(0); } } break; case NM_ITEM_BILL_DEL_SYN: { // ½Ã°£Á¦ ¾ÆÀÌÅÛÀÇ ½Ã°£ÀÌ ³¡³ª¸é ¿Â´Ù MSG_SYN_ITEM_BILL_DEL* msgData = (MSG_SYN_ITEM_BILL_DEL*)msg; sItemBillEx* bill = (sItemBillEx*)mItemBillMap.GetAt( msgData->idx ); if( bill ) { // ¾ÆÀÌÅÛ °Ë»ö & »èÁ¦ for( unsigned short i = INVENTORY_EQUIP_BEGIN; i <= INVENTORY_BAG_END; ++i ) { cItem& item = mItemArray[i]; if( item.mDBIndex == (unsigned long)bill->inventoryIdx ) { /// »èÁ¦ ¸Þ½ÃÁö Ãâ·Â if( item.GetDefine() ) { cStringT msg; msg.Format( GAMERESOURCEMAN->GetGameText( 12300 ), item.GetDefine()->GetName() ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, msg.Cstr() ); } // cCashFreeMoveWindow* cashFreeMoveWin = GAMEUI->GetCashFreeMoveWindow(); if( cashFreeMoveWin ) { if( cashFreeMoveWin->GetLinkSlot() == i ) cashFreeMoveWin->Hide(); } cMegaphoneWindow* megaWin = GAMEUI->GetMegaphoneWindow(); if( megaWin ) { if( megaWin->GetInventoryIndex() == item.mDBIndex ) megaWin->Hide(); } // ¿øÇǽºÀÎ °æ¿ì, if( item.mDefine && item.mDefine->GetType() == ITEM_WEAR && item.mDefine->GetSubType() == ITEM_WEAR_COS_ONEPIECE ) { // Âø¿ëµÈ ¾ÆÀÌÅÛÀÎ °æ¿ì ³ª¸ÓÁö ½½·Ôµµ °°ÀÌ »èÁ¦ if( i == INVENTORY_COSTUME_BODY1 ) { NetDumpItem( INVENTORY_COSTUME_BODY2 ); NetDumpItem( INVENTORY_COSTUME_HAND ); NetDumpItem( INVENTORY_COSTUME_FOOT ); } } NetDumpItem( i ); UIMAN->HideTip(); break; } } } } break; case NM_ITEM_THEMERESET_RES: { MSG_RES_ITEM_THEMERESET* msgData = (MSG_RES_ITEM_THEMERESET*)msg; UIMAN->DestroyMsgBox( eMBEVENT_THEME_RESETWAIT ); switch( msgData->ErrorCode ) { case ERROR_THEMERESET_SUCCESS: { sInventory& inv = msgData->mInventory; cItem& item = mItemArray[inv.number]; if( inv.count == 0 ) item.SetCount( 0 ); else NetSetItem( &inv ); UpdateItem(); ChangeSelectSlot( inv.number ); // LPCTSTR modeName = UIMAN->GetUIText( 26500 + msgData->mThemeMode ); LPCTSTR mapName = GAMERESOURCEMAN->GetMapName( msgData->mThemeNum ); cStringT msg; msg.Format( GAMERESOURCEMAN->GetGameText( 12012 ), mapName, modeName ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, msg.Cstr() ); } break; case ERROR_THEMERESET_STATE: // ij¸¯ÅÍ »óÅ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12011 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_THEMERESET_ITEM: // ¾ÆÀÌÅÛ ÀÎÁõ¿¡·¯ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12013 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_THEMERESET_DBERROR: // dbó¸® ¿¡·¯ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 8089 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_THEMERESET_ITEM_LICENSE: // ¹ÌÀÎÁõ ¾ÆÀÌÅÛ »ç¿ë UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12014 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_THEMERESET_READY: // ´øÀü ÃʱâÈ­ ´ë±â »óÅ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12007 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; } cUIWindow* themeWin = (cUIWindow*)GAMEUI->GetThemeResetWindow(); if( themeWin ) { themeWin->Hide(); themeWin->NetUnLock(); } // if( HERO->GetState() != eOBJECT_STATE_DIE ) { HERO->SetStopFlag( eSTOP_NONE ); } UnlockItemTry( ITEM_TRY_THEMERESET ); } break; case NM_ITEM_PARTY_GIVE_RES: { // ÆÄƼ¿ø »ðÀÔ MSG_RES_ITEM_PARTY_GIVE* msgData = (MSG_RES_ITEM_PARTY_GIVE*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_PARTY_GIVE_SUCCESS: // ¼º°ø break; case ERROR_ITEM_PARTY_GIVE_FAIL: // ½ÇÆÐ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 168 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_ITEM_PARTY_GIVE_TYPE: // ½ÇÆÐ - ÆÄƼÀå ºÐ¹è°¡ ¾Æ´Ô UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 169 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_ITEM_PARTY_GIVE_OWNER: // ½ÇÆÐ - Áö±Þ ±ÇÇÑ ¾øÀ½ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 168 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_ITEM_PARTY_GIVE_TARGET: // ½ÇÆÐ - Áö±ÞÇÒ Ä³¸¯ÅÍ ¾øÀ½ UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 171 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_ITEM_PARTY_GIVE_PARTY: // ½ÇÆÐ - ¼ÒÀ¯±Ç ¿À·ù UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 211 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_ITEM_PARTY_GIVE_MAP: // ½ÇÆÐ - µ¿ÀÏ ¸Ê ¿À·ù UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 167 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_ITEM_PARTY_GIVE_INVEN_FULL: // ½ÇÆÐ - Àκ¥Å丮 ºÎÁ· UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 166 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_ITEM_PARTY_GIVE_MAX_ITEM: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 172 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_ITEM_PARTY_GIVE_WEIGHT: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 173 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; } cUIWindow* win = (cUIWindow*)GAMEUI->GetItemDivideWindow(); if( win ) win->NetUnLock(); cUIWindow* looting = (cUIWindow*)GAMEUI->GetLootingWindow(); if( looting ) looting->NetUnLock(); UnlockItemTry( ITEM_TRY_GIVEPARTY ); } break; case NM_ITEM_PARTY_GIVE_SYN: { MSG_SYN_ITEM_PARTY_GIVE* msgData = (MSG_SYN_ITEM_PARTY_GIVE*)msg; NetGivePartyItem( msgData ); } break; case NM_ITEM_WAREHOUSE_SUMMON_OPEN_RES: { MSG_ERROR* msgData = (MSG_ERROR*)msg; switch( msgData->ErrorCode ) { case ERROR_ITEM_WAREHOUSE_SUMMON_OPEN_SUCCESS: { MSG_RES_ITEM_WAREHOUSE_SUMMON_OPEN* msgData = (MSG_RES_ITEM_WAREHOUSE_SUMMON_OPEN*)msg; if( HERO ) { /// ¾ÆÀÌÅÛ °»½Å sInventory* inv = &msgData->inventory; if( inv->count > 0 ) { NetSetItem( inv ); UpdateItem(); } else { NetDumpItem( inv->number ); } /// ij¸¯ÅÍ »óÅ º¯°æ HERO->SetStopFlag( eSTOP_SUMMON_PAPER ); GAMEUI->UpdateInvenWithWare(); GAMEUI->ShowWarehouse(); GAMEUI->ShowInventory(); } else { assert(0); return; } } break; case ERROR_ITEM_WAREHOUSE_SUMMON_OPEN_USEFUL_SUCCESS: { if( HERO ) { cSummonWindow* pSummonWin = GAMEUI->GetSummonWindow(); if( pSummonWin ) { pSummonWin->StartCoolTime(); } else assert(0); /// ij¸¯ÅÍ »óÅ º¯°æ HERO->SetStopFlag( eSTOP_SUMMON_PAPER ); GAMEUI->UpdateInvenWithWare(); GAMEUI->ShowWarehouse(); GAMEUI->ShowInventory(); } else { assert(0); break; } } break; case ERROR_ITEM_WAREHOUSE_SUMMON_OPEN_FAIL: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 12802 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_ITEM_WAREHOUSE_SUMMON_OPEN_LICENSE: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 293 ), GAMERESOURCEMAN->GetGameText( 301 ) ); break; case ERROR_ITEM_WAREHOUSE_SUMMON_OPEN_ALREADY: UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODALLESS, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 293 ), GAMERESOURCEMAN->GetGameText( 12085 ) ); break; } UnlockItemTry( ITEM_TRY_SUMMON ); cSummonWindow* pSummonWin = GAMEUI->GetSummonWindow(); if( pSummonWin ) { pSummonWin->NetUnLock(); pSummonWin->Clear(); pSummonWin->Hide(); } } break; case NM_ITEM_WAREHOUSE_SUMMON_OPEN_SYN: { MSG_SYN_ITEM_WAREHOUSE_SUMMON_OPEN* msgData = (MSG_SYN_ITEM_WAREHOUSE_SUMMON_OPEN*)msg; cPlayer* pPlayer = OBJECTMAN->GetPlayer( msgData->characterIdx ); if( pPlayer != NULL ) { pPlayer->SetStopFlag( eSTOP_SUMMON_PAPER ); } else { assert(0); } } break; case NM_ITEM_WAREHOUSE_SUMMON_CLOSE_SYN: { MSG_SYN_ITEM_WAREHOUSE_SUMMON_CLOSE* msgData = (MSG_SYN_ITEM_WAREHOUSE_SUMMON_CLOSE*)msg; cPlayer* pPlayer = OBJECTMAN->GetPlayer( msgData->characterIdx ); if( pPlayer != NULL ) { pPlayer->SetStopFlag( eSTOP_NONE ); } else { assert(0); } } break; default: assert( 0 && "invalid network message" ); break; } } void cItemManager::NetSetItem( sInventory* inv, bool setCool ) { unsigned short slotIndex = inv->number; if( slotIndex > MAX_INVENTORY ) { assert( 0 && "index out of range" ); return; } cItem& item = mItemArray[slotIndex]; if( item.mCount > 0 ) { if(item.mDBIndex != inv->idx || item.mIndex != inv->ItemIndex ) { assert( 0 && "item already exist" ); return; } } cItemDefine* itemDefine = GetItemDefine( inv->ItemIndex ); if( itemDefine == 0 ) { assert( 0 && "failed to find item define" ); return; } item.mDBIndex = inv->idx; item.mIndex = inv->ItemIndex; item.mCount = inv->count; item.mDefine = itemDefine; item.mEnhanced = inv->enhanced; item.mEquipType = itemDefine->mEquipType; item.mFlag = itemDefine->mFlag; item.mSeal = (inv->seal == 1); item.mCash = (inv->cash == 1); item.mCardIndex1 = inv->cardSlot1; item.mCardIndex2 = inv->cardSlot2; item.mCardIndex3 = inv->cardSlot3; item.mCardIndex4 = inv->cardSlot4; item.mCardIndex5 = inv->cardSlot5; if( item.mIcon ) item.BindIcon( item.mIcon ); /// ¾ÆÀÌÅÛ ¼¼ÆÃ, ¿ÜºÎÁ¶°Ç¿¡ ÀÇÇÑ ¾ÆÀÌÅÛ »ç¿ë, ºÐ¸®, ¾ÆÀÌÅÛ È¹µæ, ¾ÆÀÌÅÛ ±¸ÀÔ /// ÄðŸÀÓ º¹»ç±â´ÉÀ» ÇØ¾ßÇϸé if( setCool == true ) COOLMAN->CopyCoolTime( item.mIndex ); /// Äù½ºÆ®¿ë ¾ÆÀÌÅÛÀ̸é À̵¿ºÒ°¡ ó¸® eItemIn in = GetItemIn( slotIndex ); if( in == ITEM_IN_INVEN_QUEST || in == ITEM_IN_CARDBOOK_NORMAL_SPREAD ) item.SetUsedFlag( false, false ); /// ¾ÆÀÌÅÛÀÇ Á¦ÇÑÁ¶°Ç üũ int ret0 = CheckLimit( item.GetIndex() ); int ret1 = CheckLimitEtc( item.GetIndex() ); bool equipError = false; if( slotIndex >= INVENTORY_EQUIP_BEGIN && slotIndex <= INVENTORY_EQUIP_END ) { if( item.mSeal == true ) equipError = true; } NiColorA color = NiColorA::WHITE; if( ret0 != ITEMLIMIT_SUCCESS || ret1 != ITEMLIMIT_SUCCESS || equipError == true ) { color = NiColorA( 1.0f, 0.0f, 0.0f, 1.0f ); } item.SetColor( color ); if( slotIndex >= INVENTORY_EQUIP_BEGIN && slotIndex <= INVENTORY_BAG_END ) { /// ½Ã°£Á¦ ¿¬°á if( item.mDefine->GetLicenseClass() == 1 || item.mDefine->GetLicenseClass() == 2 ) { cItemBillMap::cIterator b = mItemBillMap.Begin(); cItemBillMap::cIterator end = mItemBillMap.End(); for( ; b != end; ++b ) { sItemBillEx* bill = (sItemBillEx*)(b->mSecond); if( bill && (unsigned long)bill->inventoryIdx == item.mDBIndex ) { item.mItemBill = bill; break; } } } } } bool cItemManager::NetSetItemBill( sItemBill* bill ) { if( bill == 0 ) { assert(0); return false; } // ½Ã°£Á¤º¸ ÀúÀå sItemBillEx* p = new sItemBillEx; p->idx = bill->idx; p->type = bill->type; p->validDate = bill->validDate; p->validTime = bill->validTime; p->inventoryIdx = bill->inventoryIdx; time( &p->begin ); p->begin += p->validTime; if( mItemBillMap.Insert( p->idx, p ) == false ) { assert(0); SAFE_DELETE( p ); return false; } // ¾ÆÀÌÅÛ Å½»ö & ¿¬°á for( unsigned short i = INVENTORY_EQUIP_BEGIN; i <= INVENTORY_BAG_END; ++i ) { cItem& item = mItemArray[i]; if( item.mDBIndex == (unsigned long)p->inventoryIdx ) { // °Ë»ç if( !(item.mDefine->GetLicenseClass() == 1 || item.mDefine->GetLicenseClass() == 2) ) assert(0); item.mItemBill = p; return true; } } return false; } void cItemManager::DeleteItemBill( unsigned long idx ) { sItemBillEx* p = (sItemBillEx*)mItemBillMap.GetAt( idx ); if( p ) { mItemBillMap.Erase( idx ); SAFE_DELETE( p ); } } void cItemManager::NetTryItem( unsigned int protocol, void* msg ) { switch( mTry ) { case ITEM_TRY_MOVE: if( protocol == NM_ITEM_MOV_INVENTORY_RES || protocol == NM_NPC_ITEM_MOV2_INVENTORY_RES ) NetMoveItem( mSlotIndex0, mSlotIndex1 ); else assert( 0 && "invalid protocol" ); break; case ITEM_TRY_MERGE: if( protocol == NM_ITEM_MERGE_INVENTORY_RES ) { NetMoveItem( mSlotIndex0, mSlotIndex1 ); } else assert( 0 && "invalid protocol" ); break; case ITEM_TRY_USE: if( protocol == NM_ITEM_USE_INVENTORY_RES ) NetUseItem( mSlotIndex0 ); else assert( 0 && "invalid protocol" ); break; case ITEM_TRY_EQUIP: if( protocol == NM_ITEM_MOV_INVENTORY_RES ) NetMoveItem( mSlotIndex0, mSlotIndex1 ); else assert( 0 && "invalid protocol" ); break; case ITEM_TRY_UNEQUIP: if( protocol == NM_ITEM_MOV_INVENTORY_RES ) NetMoveItem( mSlotIndex0, mSlotIndex1 ); else assert( 0 && "invalid protocol" ); break; case ITEM_TRY_DUMP: if( protocol == NM_ITEM_DEL_INVENTORY_RES ) NetDumpItem( mSlotIndex0, true ); else assert( 0 && "invalid protocol" ); break; case ITEM_TRY_SPLIT: if( protocol == NM_ITEM_DIVIDE_INVENTORY_RES || protocol == NM_ITEM_MOV_INVENTORY_RES ) NetSplitItem( (MSG_RES_ITEM_DIVIDE_INVENTORY*)msg ); else if( protocol == NM_NPC_ITEM_MOV2_INVENTORY_RES ) NetSplitItem( (MSG_RES_NPC_ITEM_MOV2_INVENTORY*)msg, mSlotIndex0, mSlotIndex1 ); else assert( 0 && "invalid protocol" ); break; case ITEM_TRY_BUY: if( protocol == NM_NPC_ITEM_BUY_RES ) NetBuyItem( (MSG_RES_NPC_ITEM_BUY*)msg ); else assert( 0 && "invalid protocol" ); break; case ITEM_TRY_SELL: if( protocol == NM_NPC_ITEM_SELL_RES ) NetSellItem( (MSG_RES_NPC_ITEM_SELL*)msg ); else assert( 0 && "invalid protocol" ); break; case ITEM_TRY_GET: if( protocol == NM_ITEM_GET_RES ) NetGetItem( (MSG_RES_ITEM_GET*)msg ); else assert( 0 && "invalid protocol" ); break; case ITEM_TRY_DISJOINT: if( protocol == NM_ITEM_DISJOINT_INVENTORY_RES ) NetDisjointItem( (MSG_RES_ITEM_DISJOINT_INVENTORY*)msg ); else assert( 0 && "invalid protocol" ); break; /// Äù½ºÆ® - ¾ÆÀÌÅÛ º¸»ó & ¹Ý³³ case ITEM_TRY_QUEST_REWARDTAKE: if( protocol == NM_ITEM_REWARD_RES ) NetRewardItem( (MSG_RES_ITEM_REWARD*)msg ); else if( protocol == NM_ITEM_TAKE_RES ) NetTakeItem( (MSG_RES_ITEM_TAKE*)msg ); else assert( 0 && "invalid protocol" ); break; case ITEM_TRY_QUEST_ADDBYITEM: if( protocol == NM_ITEM_REWARD_RES ) NetRewardItem( (MSG_RES_ITEM_REWARD*)msg ); else assert( 0 && "invalid protocol" ); break; /// Äù½ºÆ® - ¾ÆÀÌÅÛ ¹Ý³³ case ITEM_TRY_QUEST_TAKE: if( protocol == NM_ITEM_TAKE_RES ) NetTakeItem( (MSG_RES_ITEM_TAKE*)msg ); else assert( 0 && "invalid protocol" ); break; case ITEM_TRY_CHANGE: if( protocol == NM_ITEM_CHANGE_INVENTORY_RES ) NetChangeItem( (MSG_RES_ITEM_CHANGE_INVENTORY*)msg ); else assert( 0 && "invalid protocol" ); break; case ITEM_TRY_NPCDEALREGIST: if( protocol == NM_NPC_ITEM_AGENT_ADD_RES ) NetItemAgentAddItem( (MSG_RES_NPC_ITEM_AGENT_ADD*) msg ); else assert( 0 && "invalid protocol" ); break; case ITEM_TRY_NPCDEALDELETE: if( protocol == NM_NPC_ITEM_AGENT_DEL_RES ) NetItemAgentDelItem( (MSG_RES_NPC_ITEM_AGENT_DEL*) msg ); else assert( 0 && "invalid protocol" ); break; case ITEM_TRY_NPCDEALBUY: if( protocol == NM_NPC_ITEM_AGENT_GET_RES ) NetItemAgentGetItem( (MSG_RES_NPC_ITEM_AGENT_GET*) msg ); else assert( 0 && "invalid protocol" ); break; default: assert( 0 && "invalid item try" ); } } /// ¾ÆÀÌÅÛ À̵¿ void cItemManager::NetMoveItem( unsigned short i0, unsigned short i1 ) { assert( i0 <= MAX_INVENTORY && "index out of range" ); assert( i1 <= MAX_INVENTORY && "index out of range" ); assert( i0 != i1 ); if( i0 == i1 ) return; /// À̵¿ °¡´É ¿©ºÎ¸¦ °Ë»ç eItemIn in0 = GetItemIn( i0 ); eItemIn in1 = GetItemIn( i1 ); assert( in0 != ITEM_IN_NULL ); assert( in1 != ITEM_IN_NULL ); /// cItem& item0 = mItemArray[i0]; if( item0.mCount == 0 ) return; cItem& item1 = mItemArray[i1]; cItemDefine* itemDefine = item0.mDefine; if( !itemDefine ) { assert(0); return; } /// ÀåÂø -> Àκ¥ °³ÀÎ if( in0 == ITEM_IN_EQUIP && in1 == ITEM_IN_INVEN_PRIVATE ) { if( item1.mCount && (item1.mFlag & mFlagArray[i0] ) != item1.mFlag ) return; if( MoveItemDown( i0, i1 ) == false ) return; /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å CheckItemCount(); /// Àüü ´É·ÂÄ¡°Ë»ç CheckEquipAbility(); /// Âø¿ë ¹æ¾î±¸¼Â °»½Å HERO->ResetArmorSets(); } /// Àκ¥ °³ÀÎ -> ÀåÂø else if( in0 == ITEM_IN_INVEN_PRIVATE && in1 == ITEM_IN_EQUIP ) { if( item0.mEquipType == ITEM_EQUIP_TWO_HANDS ) { if( i1 == INVENTORY_HAND_LEFT1 ) i1 = INVENTORY_HAND_RIGHT1; else if( i1 == INVENTORY_HAND_LEFT2 ) i1 = INVENTORY_HAND_RIGHT2; } if( item0.mCount && (item0.mFlag & mFlagArray[i1] ) != item0.mFlag ) return; if( MoveItemUp( i0, i1 ) == false ) return; /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å CheckItemCount(); /// Àüü ´É·ÂÄ¡°Ë»ç CheckEquipAbility(); /// Âø¿ë ¹æ¾î±¸¼Â °»½Å HERO->ResetArmorSets(); } /// Àκ¥ °³ÀÎ -> Àκ¥ °³ÀÎ else if( (in0 == ITEM_IN_INVEN_PRIVATE) && in0 == in1 ) { if( item0.mIndex == item1.mIndex && item0.mCash == false && item1.mCash == false ) { /// °°Àº Á¾·ù¸é º´ÇÕ unsigned short capacity = itemDefine->mCapacity; /// º´ÇÕÀÌ °¡´ÉÇÑ °¹¼ö¸é º´ÇÕ if( capacity > 1 && item1.mCount < capacity ) { unsigned short value = item0.mCount; unsigned short count = item1.mCount + value; if( count > capacity ) { value -= (count - capacity); count = capacity; } assert( value > 0 ); item0 = item0.mCount - value; item1 = count; } } else { /// ´Ù¸¥ Á¾·ù¸é ±³È¯ cItem tempItem = item0; item0 = item1; item1 = tempItem; } } /// â°í °³ÀÎ -> â°í °³ÀÎ else if( (in0 == ITEM_IN_WAREHOUSE_PRIVATE) && in0 == in1 ) { if( item0.mIndex == item1.mIndex && item0.mCash == false && item1.mCash == false ) { /// °°Àº Á¾·ù¸é º´ÇÕ unsigned short capacity = itemDefine->mCapacity; /// º´ÇÕÀÌ °¡´ÉÇÑ °¹¼ö¸é º´ÇÕ if( capacity > 1 && item1.mCount < capacity ) { unsigned short value = item0.mCount; unsigned short count = item1.mCount + value; if( count > capacity ) { value -= (count - capacity); count = capacity; } assert( value > 0 ); item0 = item0.mCount - value; item1 = count; } } else { /// ´Ù¸¥ Á¾·ù¸é ±³È¯ cItem tempItem = item0; item0 = item1; item1 = tempItem; } } /// Àκ¥ °³ÀÎ <-> â°í °³ÀÎ /// ¼ö·ÉÇÔ -> Àκ¥ else if( (in0 == ITEM_IN_INVEN_PRIVATE && in1 == ITEM_IN_WAREHOUSE_PRIVATE) || (in0 == ITEM_IN_WAREHOUSE_PRIVATE && in1 == ITEM_IN_INVEN_PRIVATE) || (in0 == ITEM_IN_RECEIPT && in1 == ITEM_IN_INVEN_PRIVATE) ) { if( item0.mIndex == item1.mIndex && item0.mCash == false && item1.mCash == false ) { /// °°Àº Á¾·ù¸é º´ÇÕ unsigned short capacity = itemDefine->mCapacity; /// º´ÇÕÀÌ °¡´ÉÇÑ °¹¼ö¸é º´ÇÕ if( capacity > 1 && item1.mCount < capacity ) { unsigned short value = item0.mCount; unsigned short count = item1.mCount + value; if( count > capacity ) { value -= (count - capacity); count = capacity; } assert( value > 0 ); item0 = item0.mCount - value; item1 = count; } } else { /// ´Ù¸¥ Á¾·ù¸é ±³È¯ cItem tempItem = item0; item0 = item1; item1 = tempItem; } if( in0 == ITEM_IN_WAREHOUSE_PRIVATE && in1 == ITEM_IN_INVEN_PRIVATE ) { COOLMAN->CopyCoolTime( item1.mIndex ); } else if( in0 == ITEM_IN_RECEIPT && in1 == ITEM_IN_INVEN_PRIVATE ) { COOLMAN->CopyCoolTime( item1.mIndex ); } else item1.EndCoolTime(); /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); } /// Ä«µåºÏ <-> Àκ¥ else if( (in0 == ITEM_IN_CARDBOOK_NORMAL && in1 == ITEM_IN_INVEN_PRIVATE) || (in0 == ITEM_IN_INVEN_PRIVATE && in1 == ITEM_IN_CARDBOOK_NORMAL) ) { /// °°Àº Á¾·ù¸é º´ÇÕ if( item0.mIndex == item1.mIndex ) { /// º´ÇÕÀÌ °¡´ÉÇÑ °¹¼ö¸é º´ÇÕ unsigned short capacity = itemDefine->mCapacity; if( capacity > 1 && item1.mCount < capacity ) { unsigned short value = item0.mCount; unsigned short count = item1.mCount + value; if( count > capacity ) { value -= (count - capacity); count = capacity; } assert( value > 0 ); item0 = item0.mCount - value; item1 = count; } } // ºñ¾îÀÖÀ¸¸é ¼ÂÆÃ else if( item1.mIndex == 0 ) { item1 = item0; item0 = 0; } else assert(0); // item1.EndCoolTime(); /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); // Ÿ·ÎÄ«µåºÏ °»½Å cCardBookWindow* cardBook = (cCardBookWindow*)GAMEUI->GetCardBookWindow(); if( cardBook ) { cTarotSheetWindow* sheet = cardBook->GetTarotSheet(); if( sheet ) { if( in0 == ITEM_IN_CARDBOOK_NORMAL ) { int i = i0 - INVENTORY_TAROT_NORMAL_BEGIN; if( i >= 0 ) sheet->ClearIcon( i ); else assert(0); } else if( in0 == ITEM_IN_INVEN_PRIVATE ) { int i = i1 - INVENTORY_TAROT_NORMAL_BEGIN; if( i >= 0 ) { sheet->UpdateData( i ); cardBook->Show(); } else assert(0); } } else assert(0); } else assert(0); } else { return; } /// ¾ÆÀÌÅÛ ¼¿À» °Ë»ç CheckItemSlot( i0 ); CheckItemSlot( i1 ); ChangeSelectSlot( i0 ); ChangeSelectSlot( i1 ); /// »ç¿îµå Ãâ·Â PlayIconSettingSound( i1 ); } /// ¼Ò¸ð¼º ¾ÆÀÌÅÛ »ç¿ë void cItemManager::NetUseItem( unsigned short i ) { cItem& item = mItemArray[i]; cItemDefine* itemDefine = item.mDefine; if( !itemDefine ) { assert(0); return; } unsigned char type = itemDefine->GetType(); unsigned char subtype = itemDefine->GetSubType(); /// ¼Ò¸ð¼º ¾ÆÀÌÅÛ¸¸ »ç¿ë if( type == ITEM_ETC1 || type == ITEM_MONSTER || ( type == ITEM_CARD && subtype == ITEM_CARD_COMMON ) || type == ITEM_INVENTORY ) { /// ÄðŸÀӸŴÏÀú¿¡ »ç¿ë µî·Ï cItemAbility* itemAbil = itemDefine->GetAbililty(); if( itemAbil && itemAbil->GetCoolTime() > 0 ) { COOLMAN->StartCoolTime( item.mIndex ); } /// ¾ÆÀÌÅÛ »ç¿ë item.SetCount( item.mCount - 1 ); /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); /// ¼±Åà ½½·Ô °»½Å ChangeSelectSlot( i ); } else { assert(0); } } /// ¾ÆÀÌÅÛ ¹ö¸®±â void cItemManager::NetDumpItem( unsigned short i , bool onSound ) { if( i > MAX_INVENTORY ) { assert(0); return; } if( mItemArray[i].mLock == true ) mItemArray[i].SetLock( false ); /// ¾ÆÀÌÅÛ »èÁ¦ mItemArray[i] = 0; /// ¾ÆÀÌÅÛ »èÁ¦ °¹¼ö °»½Å eItemIn in = GetItemIn(i); if( in == ITEM_IN_INVEN_PRIVATE ) { /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); } // ¼±Åý½·Ô °»½Å ChangeSelectSlot( i ); //// ÈÞÁöÅë¿¡ ¹ö¸± ¶§ ³ª´Â »ç¿îµå Àç»ý if( onSound ) { SOUNDSYS->Play2DSound( 2058 ); } } /// ¾ÆÀÌÅÛ ºÐ¸® ( Àκ¥ -> Àκ¥) void cItemManager::NetSplitItem( MSG_RES_ITEM_DIVIDE_INVENTORY* msgData ) { sInventory* inv = msgData->Inventory; for( unsigned long i = 0; i < msgData->RowCount; i++, inv++ ) { /// ºÐ¸®´ë½Å »õ·Î»ý°Ü³­ ¾ÆÀÌÅÛ ¼¼ÆÃ.(°¹¼ö Ãß°¡¾ÈÇÔ) NetSetItem( inv ); } /// ¾ÆÀÌÅÛÀÌ ÀÖÀ¸¸é ±×¶§ °Ë»ç if( msgData->RowCount > 0 ) { /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); /// ¾ÆÀÌÅÛ »ç¿îµå Àç»ý PlayIconSettingSound( msgData->Inventory->number ); } } /// ¾ÆÀÌÅÛ ºÐ¸® ( Àκ¥ <-> â°í ) void cItemManager::NetSplitItem( MSG_RES_NPC_ITEM_MOV2_INVENTORY* msgData, unsigned short slotIndex0, unsigned short slotIndex1 ) { int count = 0; /// ºÐ¸®ÀüÀÇ ¿ø·¡ °¹¼ö cItem& item = mItemArray[slotIndex0]; count = item.mCount; eItemIn in0 = GetItemIn( slotIndex0 ); eItemIn in1 = GetItemIn( slotIndex1 ); /// ÄðŸÀÓ ¼¼ÆÃ¿©ºÎ ( â°í -> Àκ¥ À϶§¸¸ ÇÑ´Ù ) bool setcool = false; /// â°í ->Àκ¥ if( in0 == ITEM_IN_WAREHOUSE_PRIVATE && in1 == ITEM_IN_INVEN_PRIVATE ) { setcool = true; } sInventory* inv = msgData->Inventory; for( unsigned long i = 0; i < msgData->RowCount; i++, inv++ ) { /// ºÐ¸®´ë½Å »õ·Î»ý°Ü³­ ¾ÆÀÌÅÛ ¼¼ÆÃ.(°¹¼ö Ãß°¡¾ÈÇÔ) NetSetItem( inv, setcool ); } /// ¾ÆÀÌÅÛÀÌ ÀÖÀ¸¸é ±×¶§ °Ë»ç if( msgData->RowCount > 0 ) { /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); /// ¾ÆÀÌÅÛ »ç¿îµå Àç»ý PlayIconSettingSound( msgData->Inventory->number ); } } /// ¾ÆÀÌÅÛ Áݱâ - Àκ¥Å丮¸¸ ¼¼ÆÃ ( ±âÁ¸¿¡ ÀÖ´Â ¾ÆÀÌÅÛ°ú ÀÚµ¿ ÇÕÄ¡±â µÊ ) void cItemManager::NetGetItem( MSG_RES_ITEM_GET* msgData ) { cStringT str; unsigned short itemRareLevel = eTOOLTIP_NORMAL; sInventory* inv = msgData->Inventory; for ( long i = 0; i < msgData->RowCount; i++, inv++ ) { /// ÁݱâÀüÀÇ °¹¼ö È®ÀÎÇϱâ cItem& item = mItemArray[inv->number]; /// Ãß°¡µÈ °¹¼ö ±¸Çϱâ int addcount = inv->count - item.mCount; if( addcount > 0 ) { /// ¾ÆÀÌÅÛ È¹µæ¸Þ¼¼Áö ½î±â cItemDefine* itemDefine = GetItemDefine( inv->ItemIndex ); if( itemDefine ) { LPCTSTR countStr = cNumberEditBox::FormatNumber( addcount ); str.Format( GAMERESOURCEMAN->GetGameText( 240 ), countStr ); CHATMANAGER->AddItemMsg( inv->ItemIndex, inv->number, 0, (LPCTSTR)str.Cstr() ); /// ¿©·¯°³ÀÇ ¾ÆÀÌÅÛÀ» µ¿½Ã¿¡ ½ÀµæÇÑ °æ¿ì ÃÖ°í µî±Þ ¾ÆÀÌÅÛ ÀÌÆåÆ®¸¸ º¸¿©ÁÖ±â. if( itemDefine->GetTipType() > itemRareLevel ) itemRareLevel = itemDefine->GetTipType(); } } else assert(0); // Àκ¥Å丮 ¼ÂÆÃ NetSetItem( inv ); } /// °¹¼ö °»½Å if( msgData->RowCount > 0 ) { /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); } /// ¾ÆÀÌÅÛ È¹µæ ÀÌÆåÆ® NiTransform trans; trans.MakeIdentity(); trans.m_Translate = NiPoint3( 0.0f, 0.0f, 50.0f ); switch( itemRareLevel ) { //case eTOOLTIP_MALL: case eTOOLTIP_ETC: case eTOOLTIP_NORMAL: case eTOOLTIP_MAGIC: { HERO->SetLinkdEffect( eLINK_HEAD2, "./Data/Effect/eff_pc_itemget_01.nif", &trans, false, true ); SOUNDSYS->Play2DSound( 2015 ); } break; case eTOOLTIP_RARE: case eTOOLTIP_UNIQUE: case eTOOLTIP_EPIC: case eTOOLTIP_REGEND: { HERO->SetLinkdEffect( eLINK_HEAD2, "./Data/Effect/eff_pc_itemget_02.nif", &trans, false, true ); SOUNDSYS->Play2DSound( 2016 ); } break; } } //ItemActiveFront = left2, right2 //ItemActiveBack = left1, right1 void cItemManager::NetSwitchWeapon( eItemActiveWeapon activeWeapon ) { SetSwitchWeapon( activeWeapon, true ); } /// ¾ÆÀÌÅÛ »ç±â (»õ·Î¿î Ä­¿¡ »ðÀÔ) void cItemManager::NetBuyItem( MSG_RES_NPC_ITEM_BUY* msgData ) { cStringT str; sInventory* inv = msgData->inventory; /// ¾ÆÀÌÅÛ Idx, º¯È­ °¹¼ö sChangeCount buyItem; sChangeCount payItem; for ( long i = 0; i < msgData->rowCount; i++, inv++ ) { /// cItem& item = mItemArray[inv->number]; /// º¯È­·® üũ int changeVal = (int)inv->count - item.mCount; if( changeVal < 0 ) { /// ÁöºÒ ¾ÆÀÌÅÛ if( payItem.itemIdx != 0 && payItem.itemIdx != inv->ItemIndex ) assert(0); payItem.itemIdx = inv->ItemIndex; payItem.total += changeVal; } else if( changeVal > 0 ) { /// ±¸ÀÔ ¾ÆÀÌÅÛ if( buyItem.itemIdx != 0 && buyItem.itemIdx != inv->ItemIndex ) assert(0); buyItem.itemIdx = inv->ItemIndex; buyItem.total += changeVal; } /// Àκ¥Å丮 º¯°æ if( inv->count == 0 ) { item.SetCount( 0 ); } else { NetSetItem( inv ); ChangeSelectSlot( inv->number ); } } if( buyItem.total > 0 ) { /// »óÁ¡ ±¸ÀÔ »ç¿îµå Àç»ý cItemDefine* itemDefine = GetItemDefine( buyItem.itemIdx ); if( itemDefine ) { LPCTSTR countStr = cNumberEditBox::FormatNumber( buyItem.total ); str.Format( GAMERESOURCEMAN->GetGameText( 209 ), itemDefine->GetName(), countStr ); CHATMANAGER->AddSystemMsg( eSYSTEM_NPCSTORE, (LPCTSTR)str.Cstr() ); } } if( payItem.total < 0 ) { payItem.total *= -1; cItemDefine* itemDefine = GetItemDefine( payItem.itemIdx ); if( itemDefine ) { LPCTSTR countStr = cNumberEditBox::FormatNumber( payItem.total ); str.Format( GAMERESOURCEMAN->GetGameText( 217 ), itemDefine->GetName(), countStr ); CHATMANAGER->AddSystemMsg( eSYSTEM_NPCSTORE, (LPCTSTR)str.Cstr() ); } } /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å if( msgData->rowCount > 0 ) { UpdateItem(); } } /// ¾ÆÀÌÅÛ ÆÈ±â void cItemManager::NetSellItem( MSG_RES_NPC_ITEM_SELL* msgData ) { cStringT str; sInventory* inv = msgData->inventory; sChangeCount sellItem; for ( long i = 0; i < msgData->rowCount; i++, inv++ ) { /// ÆÈ±âÀüÀÇ °¹¼ö È®ÀÎÇϱâ cItem& item = mItemArray[inv->number]; /// º¯È­·® üũ int changeVal = (int)inv->count - item.mCount; if( changeVal < 0 ) { /// ÁöºÒ ¾ÆÀÌÅÛ if( sellItem.itemIdx != 0 && sellItem.itemIdx != inv->ItemIndex ) assert(0); sellItem.itemIdx = inv->ItemIndex; sellItem.total += changeVal; } /// Àκ¥Å丮 Á¤º¸ º¯°æ if( inv->count == 0 ) item.SetCount( 0 ); else NetSetItem( inv ); } if( sellItem.total < 0 ) { sellItem.total *= -1; cItemDefine* itemDefine = GetItemDefine( sellItem.itemIdx ); if( itemDefine ) { LPCTSTR countStr = cNumberEditBox::FormatNumber( sellItem.total ); str.Format( GAMERESOURCEMAN->GetGameText( 218 ), itemDefine->GetName(), countStr ); CHATMANAGER->AddSystemMsg( eSYSTEM_NPCSTORE, (LPCTSTR)str.Cstr() ); } } /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); ChangeSelectSlot( mSlotIndex0 ); /// »óÁ¡¿¡¼­ ¾ÆÀÌÅÛ ÆÇ¸Å ½Ã »ç¿îµå Àç»ý SOUNDSYS->Play2DSound( 2045 ); } /// ¾ÆÀÌÅÛ ºÐÇØ void cItemManager::NetDisjointItem( MSG_RES_ITEM_DISJOINT_INVENTORY* msgData ) { /// ºÐÇØµÈ ¾ÆÀÌÅÛ »èÁ¦ cNpcDisjointWindow* p = GAMEUI->GetNpcDisjointWindow(); if( p ) NetDumpItem( p->GetSlotIndex() ); else assert(0); /// cStringT str; sInventory* inv = msgData->Inventory; for ( unsigned long i = 0; i < msgData->RowCount; i++, inv++ ) { /// »õ·Î¿î °¹¼ö - ±âÁ¸°¹¼ö = ½ÇÁ¦·Î Ãß°¡µÈ °³¼ö cItem& item = mItemArray[inv->number]; /// Ãß°¡µÈ °¹¼ö ±¸Çϱâ int addcount = inv->count - item.mCount; /// ¾ÆÀÌÅÛ ¼¼ÆÃ NetSetItem( inv ); /// ¾ÆÀÌÅÛ È¹µæ¸Þ¼¼Áö ½î±â cItemDefine* itemDefine = GetItemDefine( inv->ItemIndex ); if( itemDefine ) { LPCTSTR countStr = cNumberEditBox::FormatNumber( addcount ); str.Format( GAMERESOURCEMAN->GetGameText( 253 ), itemDefine->GetName(), countStr ); CHATMANAGER->AddSystemMsg( eSYSTEM_DOITEM, (LPCTSTR)str.Cstr() ); } } if( msgData->RowCount > 0 ) { /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); /// ¾ÆÀÌÅÛ ºÐÇØ ¿Ï·á »ç¿îµå Àç»ý(¾ÆÀÌÅÛ È¹µæ »ç¿îµå´Â ¾øÀ½) SOUNDSYS->Play2DSound( 2019 ); } } void cItemManager::NetEnhancedItem( MSG_SYN_ITEM_ENHANCED_END* msgData ) { cEnhancedWindow* pEnhancedWin = GAMEUI->GetEnhancedWindow(); cStringT str; sInventory* inv0 = &msgData->Inventory[0]; /// °­È­ ¾ÆÀÌÅÛ sInventory* inv1 = &msgData->Inventory[1]; /// °­È­ Ä«µå sInventory* inv2 = NULL; if( msgData->RowCount > 2 ) { inv2 = &msgData->Inventory[2]; /// ij½Ã ¾ÆÀÌÅÛ °­È­ Ä«µå } bool success = false; /// °»½ÅµÈ Ä«µå°¹¼ö ¼¼ÆÃ cItem* card = GetItem( inv1->number ); if( card ) card->SetCount( inv1->count ); if( inv2 ) { cItem* cashProtectcard = GetItem( inv2->number ); if( cashProtectcard ) cashProtectcard->SetCount( inv2->count ); } /// °­È­¾ÆÀÌÅÛ °Ë»ç cItem& item = mItemArray[inv0->number]; if( inv0->count > 0 ) { if( item.mEnhanced < inv0->enhanced ) { /// °­È­¼º°ø success = true; CHATMANAGER->AddSystemMsg( eSYSTEM_DOITEM, GAMERESOURCEMAN->GetGameText( 256 ) ); // °­È­ ÃÖÁ¾´Ü°è½Ã(10°­) °­È­Ã¢ ¹öư ºñȰ¼ºÈ­ if( inv0->enhanced == MAX_ITEM_ENHANCED ) { pEnhancedWin->SetStartBtnEnable( false ); } // °­È­ 7´Ü°è ¼º°ø ºÎÅÍ Æ®À§ÅÍ À̺¥Æ® ¸Þ½ÃÁö Àü¼Û if( OPTIONMAN->IsAutoSendTwitterMsg() == true && inv0->enhanced >= TWIT_EVENT_ENHANCE_STEP ) { cTwitterWindow* pTwitWin = GAMEUI->GetTwitterWindow(); if( pTwitWin ) { if( pTwitWin->IsLogin() == true ) { sTwitterEvent tEvent; tEvent.mEvent = eTWITEVENT_ENHANCE; tEvent.mExData = (void*)inv0->number; pTwitWin->AddEvent( tEvent ); } } else { assert(0); } } } else if( item.mEnhanced == inv0->enhanced ) { /// °­È­½ÇÆÐ - º¯µ¿¾øÀ½ if( inv2 ) { cItemDefine* pItemDef = ITEMMAN->GetItemDefine( inv2->ItemIndex ); if( pItemDef == NULL ) { assert(0); } if( pItemDef->GetType() == ITEM_MATERIAL ) { if( pItemDef->GetSubType() == ITEM_MATERIAL_ENHANCED_DOWN_30 || pItemDef->GetSubType() == ITEM_MATERIAL_ENHANCED_DOWN_60 ) { CHATMANAGER->AddSystemMsg( eSYSTEM_DOITEM, GAMERESOURCEMAN->GetGameText( 12102 ) ); } else { CHATMANAGER->AddSystemMsg( eSYSTEM_DOITEM, GAMERESOURCEMAN->GetGameText( 12104 ) ); } } } else CHATMANAGER->AddSystemMsg( eSYSTEM_DOITEM, GAMERESOURCEMAN->GetGameText( 257 ) ); } else { /// °­È­½ÇÆÐ - ´Ü°è Çϰ­ CHATMANAGER->AddSystemMsg( eSYSTEM_DOITEM, GAMERESOURCEMAN->GetGameText( 257 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_DOITEM, GAMERESOURCEMAN->GetGameText( 258 ) ); } /// ¼¼ÆÃ item.mCardIndex1 = inv0->cardSlot1; item.mCardIndex2 = inv0->cardSlot2; item.mCardIndex3 = inv0->cardSlot3; item.mCardIndex4 = inv0->cardSlot4; item.mCardIndex5 = inv0->cardSlot5; item.mEnhanced = inv0->enhanced; if( pEnhancedWin ) { pEnhancedWin->AddItem( inv0->number, false, true ); } } else { /// °­È­½ÇÆÐ - ¾ÆÀÌÅÛ ÆÄ±« NetDumpItem( inv0->number ); if( pEnhancedWin ) { pEnhancedWin->ClearItemSlot(); pEnhancedWin->ClearCardSlot(); pEnhancedWin->ClearCahProtectCardSlot(); } CHATMANAGER->AddSystemMsg( eSYSTEM_DOITEM, GAMERESOURCEMAN->GetGameText( 257 ) ); CHATMANAGER->AddSystemMsg( eSYSTEM_DOITEM, GAMERESOURCEMAN->GetGameText( 259 ) ); } if( pEnhancedWin ) pEnhancedWin->SetResult( success ); NiTransform trans; trans.MakeIdentity(); if( success == true ) { trans.m_Translate = NiPoint3( 0.0f, 0.0f, 50.0f ); HERO->SetLinkdEffect( eLINK_HEAD2, "./Data/Effect/eff_pc_enchant_02.nif", &trans, false, true ); HERO->ChangeAnimation( (ePLAYER_ANIMATIONTYPE) 817 ); SOUNDSYS->Play2DSound( 2023 ); } else { trans.m_Translate = NiPoint3( 0.0f, 0.0f, 20.0f ); HERO->SetLinkdEffect( eLINK_HEAD2, "./Data/Effect/eff_pc_enchant_03.nif", &trans, false, true ); HERO->ChangeAnimation( (ePLAYER_ANIMATIONTYPE) 818 ); SOUNDSYS->Play2DSound( 2024 ); } /// ¾ÆÀÌÅÛ °ü·Ã Á¤º¸ °»½Å UpdateItem(); ChangeSelectSlot(0); } /// Äù½ºÆ® - ¾ÆÀÌÅÛ º¸»ó, ½Å±ÔÄù½ºÆ® ¾ÆÀÌÅÛ Á¦°ø void cItemManager::NetRewardItem( MSG_RES_ITEM_REWARD* msgData ) { cStringT str; // Äù½ºÆ®¸¦ ¹ßµ¿½ÃŰ´Â ¾ÆÀÌÅÛµµ ¿À¹Ç·Î, ¾ÆÀÌÅÛÀÌ ¼Ò¸ð°¡ µÈ´Ù sInventory* inv = msgData->inventory; for ( long i = 0; i < msgData->rowCount; i++, inv++ ) { cItem& item = mItemArray[inv->number]; /// º¯È­·® üũ int changeVal = (int)inv->count - item.mCount; if( changeVal > 0 ) { /// ȹµæ cItemDefine* itemDefine = GetItemDefine( inv->ItemIndex ); if( itemDefine ) { LPCTSTR countStr = cNumberEditBox::FormatNumber( changeVal ); str.Format( GAMERESOURCEMAN->GetGameText( 240 ), countStr ); CHATMANAGER->AddItemMsg( inv->ItemIndex, inv->number, GAMERESOURCEMAN->GetGameText( 236 ), (LPCTSTR)str.Cstr(), true ); } } /// Àκ¥Å丮 Á¤º¸ º¯°æ if( inv->count == 0 ) item.SetCount( 0 ); else NetSetItem( inv ); ChangeSelectSlot( inv->number ); } /// °¹¼ö °»½Å if( msgData->rowCount > 0 ) { /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); } } /// Äù½ºÆ® - ¾ÆÀÌÅÛ ¹Ý³³ void cItemManager::NetTakeItem( MSG_RES_ITEM_TAKE* msgData ) { sInventory* inv = msgData->inventory; for( long i = 0; i < msgData->rowCount; ++i, ++inv ) { cItem& item = mItemArray[inv->number]; item.SetCount( inv->count ); // ¼±Åý½·Ô °»½Å if( inv->count == 0 ) ChangeSelectSlot( inv->number ); } /// °¹¼ö °»½Å if( msgData->rowCount > 0 ) { /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); } } /// void cItemManager::NetTradeItem( MSG_RES_ITEM_EXCHANGE_END* msgData ) { /// °Å·¡µÈ ¾ÆÀÌÅÛ »èÁ¦ cTradeWindow* trade = GAMEUI->GetTradeWindow(); if( !trade ) { assert(0); return; } /// »èÁ¦ unsigned short lastSlot = trade->GetMyLastSlot(); for( unsigned short i = 0; i < lastSlot; ++i ) { unsigned short slotIndex = trade->GetMySlotIndex( i ); if( slotIndex <= MAX_INVENTORY ) NetDumpItem( slotIndex ); } cStringT str; sInventory* inv = msgData->Inventory; for ( unsigned long i = 0; i < msgData->RowCount; i++, inv++ ) { /// °¹¼ö ¹× ¹«°Ô Ãß°¡ ¾ÈÇÔ NetSetItem( inv ); /// ¾ÆÀÌÅÛ È¹µæ¸Þ¼¼Áö ½î±â cItemDefine* itemDefine = GetItemDefine( inv->ItemIndex ); if( itemDefine ) { LPCTSTR countStr = cNumberEditBox::FormatNumber( inv->count ); str.Format( GAMERESOURCEMAN->GetGameText( 240 ), countStr ); CHATMANAGER->AddItemMsg( inv->ItemIndex, inv->number, 0, (LPCTSTR)str.Cstr() ); } } /// °¹¼ö °»½Å if( msgData->RowCount > 0 ) { /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); } } void cItemManager::NetChangeItem( MSG_RES_ITEM_CHANGE_INVENTORY* msgData ) { cStringT str; sInventory* inv = msgData->Inventory; for ( unsigned long i = 0; i < msgData->RowCount; i++, inv++ ) { /// »õ·Î¿î °¹¼ö - ±âÁ¸°¹¼ö = ½ÇÁ¦·Î Ãß°¡µÈ °³¼ö cItem& item = mItemArray[inv->number]; /// Ãß°¡µÈ °¹¼ö ±¸Çϱâ int addcount = inv->count - item.mCount; /// ¾ÆÀÌÅÛ ¼¼ÆÃ if( inv->count <= 0 ) { item.SetCount( 0 ); } else { NetSetItem( inv ); } if( addcount > 0 ) { // ȹµæÇÑ ¾ÆÀÌÅÛ cItemDefine* itemDefine = GetItemDefine( inv->ItemIndex ); if( itemDefine ) { LPCTSTR countStr = cNumberEditBox::FormatNumber( addcount ); str.Format( GAMERESOURCEMAN->GetGameText( 240 ), countStr ); CHATMANAGER->AddItemMsg( inv->ItemIndex, inv->number, 0, (LPCTSTR)str.Cstr() ); } } ChangeSelectSlot( inv->number ); } if( msgData->RowCount > 0 ) { /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); } } void cItemManager::NetMixSkillItem( MSG_RES_MAKESKILL_ITEM* msgData ) { sInventory* inv = &msgData->inventory; cItem& item = mItemArray[inv->number]; if( inv->count == 0 ) { /// »èÁ¦ item.SetCount( 0 ); } else { NetSetItem( inv ); } /// °¹¼ö °»½Å UpdateItem(); /// ¼±Åà ½½·Ô °»½Å ChangeSelectSlot( inv->number ); } void cItemManager::NetMixItem( MSG_RES_ITEM_MIXED* msgData ) { cStringT str; sInventory* inv = msgData->inventory; for ( long i = 0; i < msgData->rowCount; i++, inv++ ) { /// »õ·Î¿î °¹¼ö - ±âÁ¸°¹¼ö = ½ÇÁ¦·Î Ãß°¡µÈ °³¼ö cItem& item = mItemArray[inv->number]; /// º¯È­·® üũ int changeVal = (int)inv->count - item.mCount; if( changeVal > 0 ) { /// ¾ÆÀÌÅÛ È¹µæ¸Þ¼¼Áö ½î±â cItemDefine* itemDefine = GetItemDefine( inv->ItemIndex ); if( itemDefine ) { LPCTSTR countStr = cNumberEditBox::FormatNumber( changeVal ); str.Format( GAMERESOURCEMAN->GetGameText( 240 ), countStr ); CHATMANAGER->AddItemMsg( inv->ItemIndex, inv->number, 0, (LPCTSTR)str.Cstr() ); } } /// Àκ¥Å丮 Á¤º¸ º¯°æ if( inv->count == 0 ) item.SetCount( 0 ); else NetSetItem( inv ); /// ¼±Åà ½½·Ô °»½Å ChangeSelectSlot( inv->number ); } /// °¹¼ö °»½Å UpdateItem(); } void cItemManager::NetGivePartyItem( MSG_SYN_ITEM_PARTY_GIVE* msgData ) { cStringT str; sInventory* inv = msgData->inventory; for ( long i = 0; i < msgData->rowCount; i++, inv++ ) { /// »õ·Î¿î °¹¼ö - ±âÁ¸°¹¼ö = ½ÇÁ¦·Î Ãß°¡µÈ °³¼ö cItem& item = mItemArray[inv->number]; /// º¯È­·® üũ int changeVal = (int)inv->count - item.mCount; if( changeVal > 0 ) { /// ¾ÆÀÌÅÛ È¹µæ¸Þ¼¼Áö ½î±â cItemDefine* itemDefine = GetItemDefine( inv->ItemIndex ); if( itemDefine ) { LPCTSTR countStr = cNumberEditBox::FormatNumber( changeVal ); str.Format( GAMERESOURCEMAN->GetGameText( 240 ), countStr ); CHATMANAGER->AddItemMsg( inv->ItemIndex, inv->number, 0, (LPCTSTR)str.Cstr() ); //str.Format( GAMERESOURCEMAN->GetGameText( 139 ), mParty[i].name ); //CHATMANAGER->AddItemMsg( pmsg->ItemIndex[idx], USHRT_MAX, (LPCTSTR)str.Cstr(), GAMERESOURCEMAN->GetGameText( 140 ) ); } } /// Àκ¥Å丮 Á¤º¸ º¯°æ if( inv->count == 0 ) item.SetCount( 0 ); else NetSetItem( inv ); /// ¼±Åà ½½·Ô °»½Å ChangeSelectSlot( inv->number ); } /// °¹¼ö °»½Å UpdateItem(); } void cItemManager::NetSkillResetItem( MSG_RES_ITEM_SKILLRESET* msgData ) { sInventory* inv = &msgData->inventory; cItem& item = mItemArray[inv->number]; if( inv->count == 0 ) { item.SetCount( 0 ); } else { NetSetItem( inv ); } /// °¹¼ö °»½Å UpdateItem(); /// ¼±Åà ½½·Ô °»½Å ChangeSelectSlot( inv->number ); } void cItemManager::NetItemAgentAddItem( MSG_RES_NPC_ITEM_AGENT_ADD* msgData ) { cNpcDealWindow* win = GAMEUI->GetNpcDealWindow(); if( !win ) { assert(0); return; } cNpcDealRegistSheet* regist = win->GetRegistSheet(); if( !regist ) { assert(0); return; } // °ü¸®Á¤º¸ ÃʱâÈ­ regist->Clear(); regist->DeleteRegistItem(); NPC_ITEM_AGENT_OPEN_RESULT* data = msgData->Result; for( long i = 0; i < msgData->RowCount; ++i, ++data ) { NPC_ITEM_AGENT_OPEN_RESULT* p = new NPC_ITEM_AGENT_OPEN_RESULT; *p = *data; if( regist->AddItem( p ) == false ) { assert(0); SAFE_DELETE(p); continue; } } regist->SetTotalPage( msgData->EndPage ); regist->ChangePage( msgData->StartPage ); win->UpdateHaveMoney(); /// ¾ÆÀÌÅÛ »èÁ¦ NetDumpItem( mSlotIndex0 ); } void cItemManager::NetItemAgentDelItem( MSG_RES_NPC_ITEM_AGENT_DEL* msgData ) { cNpcDealWindow* win = GAMEUI->GetNpcDealWindow(); if( !win ) { assert(0); return; } cNpcDealRegistSheet* regist = win->GetRegistSheet(); if( !regist ) { assert(0); return; } /// Ãë¼ÒµÈ ¾ÆÀÌÅÛÀ̹ǷΠÀκ¥Å丮¿¡ Àç »ðÀÔ NetSetItem( &msgData->Inventory ); // ¾ÆÀÌÅÛ ¹«°Ô ¹× °¹¼ö, Äü½½·Ô °»½Å UpdateItem(); // °ü¸®Á¤º¸ ÃʱâÈ­ regist->Clear(); NPC_ITEM_AGENT_OPEN_RESULT* data = msgData->Result; for( long i = 0; i < msgData->RowCount; ++i, ++data ) { NPC_ITEM_AGENT_OPEN_RESULT* p = new NPC_ITEM_AGENT_OPEN_RESULT; *p = *data; if( regist->AddItem( p ) == false ) { assert(0); SAFE_DELETE(p); continue; } } regist->SetTotalPage( msgData->EndPage ); regist->ChangePage( msgData->StartPage ); } void cItemManager::NetItemAgentGetItem( MSG_RES_NPC_ITEM_AGENT_GET* msgData ) { cNpcDealWindow* win = GAMEUI->GetNpcDealWindow(); if( !win ) { assert(0); return; } cNpcDealSearchSheet* searchSheet = win->GetSearchSheet(); if( searchSheet ) { searchSheet->ClearData(); NPC_ITEM_AGENT_SEARCH_RESULT* data = msgData->Result; for( long i = 0; i < msgData->RowCount; ++i, ++data ) { NPC_ITEM_AGENT_SEARCH_RESULT* p = new NPC_ITEM_AGENT_SEARCH_RESULT; *p = *data; if( searchSheet->AddItem( p ) == false ) { assert(0); SAFE_DELETE(p); continue; } } searchSheet->SavePage( msgData->StartPage, msgData->EndPage ); searchSheet->UpdateItemList(); win->UpdateHaveMoney(); } UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1518 ), GAMERESOURCEMAN->GetGameText( 301 ) ); } // ¼ö·ÉÇÔ ¾ÆÀÌÅÛ ÃʱâÈ­ void cItemManager::ClearCashInven() { for( unsigned short i = INVENTORY_CASH_ITEM_BEGIN; i <= INVENTORY_CASH_ITEM_END; ++i ) { mItemArray[i] = 0; } } // ij½¬ÅÛ ¼ÂÆÃ - ¼ö·ÉÇÔ ¾ÆÀÌÅÛ void cItemManager::NetSetCashItem( sCashInventory* inv ) { unsigned short slotIndex = inv->number; // Àκ¥Å丮 ³Ñ¹ö üũ if( !(slotIndex >= INVENTORY_CASH_ITEM_BEGIN && slotIndex <= INVENTORY_CASH_ITEM_END) ) { assert(0); return; } // ¾ÆÀÌÅÛ ¼ÂÆÃ cItem& item = mItemArray[slotIndex]; if( item.mCount > 0 ) { if(item.mDBIndex != inv->idx || item.mIndex != inv->ItemIndex ) { assert( 0 && "item already exist" ); return; } } cItemDefine* itemDefine = GetItemDefine( inv->ItemIndex ); if( itemDefine == 0 ) { assert( 0 && "failed to find item define" ); return; } item.mDBIndex = inv->idx; item.mIndex = inv->ItemIndex; item.mCount = inv->count; item.mDefine = itemDefine; item.mSeal = (inv->seal == 1); item.mCash = (inv->cash == 1); item.mEnhanced = 0; item.mEquipType = itemDefine->mEquipType; item.mFlag = itemDefine->mFlag; item.mCardIndex1 = 0; item.mCardIndex2 = 0; item.mCardIndex3 = 0; item.mCardIndex4 = 0; item.mCardIndex5 = 0; if( item.mIcon ) item.BindIcon( item.mIcon ); /// ¾ÆÀÌÅÛÀÇ Á¦ÇÑÁ¶°Ç üũ int ret0 = CheckLimit( item.GetIndex() ); int ret1 = CheckLimitEtc( item.GetIndex() ); NiColorA color = NiColorA::WHITE; if( ret0 != ITEMLIMIT_SUCCESS || ret1 != ITEMLIMIT_SUCCESS ) { color = NiColorA( 1.0f, 0.0f, 0.0f, 1.0f ); } item.SetColor( color ); //if( item.mCash == false ) //assert(0); } bool cItemManager::CheatMakeItem( sInventory* inv ) { if( IsLocked() ) return false; int total = 0; unsigned long itemIndex = inv->ItemIndex; { /// ÁݱâÀüÀÇ °¹¼ö È®ÀÎÇϱâ cItem& item = mItemArray[inv->number]; /// »õ·Î¿î °¹¼ö - ±âÁ¸°¹¼ö = ½ÇÁ¦·Î Ãß°¡µÈ °³¼ö total += ( inv->count - item.mCount ); /// ¾ÆÀÌÅÛ ¼¼ÆÃ NetSetItem( inv ); } /// ¾ÆÀÌÅÛ°ü·Ã Á¤º¸ °»½Å UpdateItem(); /// ¾ÆÀÌÅÛ È¹µæ¸Þ¼¼Áö ½î±â cItemDefine* itemDefine = GetItemDefine( itemIndex ); if( itemDefine ) { LPCTSTR countStr = cNumberEditBox::FormatNumber( total ); cStringT str; str.Format( GAMERESOURCEMAN->GetGameText( 215 ), itemDefine->GetName(), countStr ); CHATMANAGER->AddSystemMsg( eSYSTEM_NORMAL, (LPCTSTR)str.Cstr() ); } return true; } void cItemManager::LockChangeToMerge() { /// move Àá±Ý Ç®°í merge Àá±Ý °É±â if( mTry == ITEM_TRY_MOVE ) { mLocked = false; mTry = ITEM_TRY_NULL; } else { assert(0); } /// mLocked = true; mTry = ITEM_TRY_MERGE; }