#include "stdafx.h" #include "NpcDealSearchSheet.h" #include "UIImage.h" #include "NumberEditBox.h" #include "ComboBox.h" #include "ListFolderBox.h" #include "Button.h" #include "GameResourceManager.h" #include "ItemManager.h" #include "TipWindow.h" #include "GameUIManager.h" #include "Npc_Common.h" #include "ObjectManager.h" #include "Hero.h" #include "Application.h" #include "FontAgent.h" #include "ItemIcon.h" cNpcDealSearchSheet::cNpcDealSearchSheet( eUINodeType type ) : cUIWindow( type ) , mpNameEdit(0) , mpHighLv(0) , mpLowLv(0) , mpSearch(0) , mpRare(0) , mpEnhance(0) , mpTypeList(0) , mpHighImage(0) , mpItemList(0) , mTempType(-1) , mTempSubType(-1) , mTempLowLv(0) , mTempHighLv(0) , mTempEnhance(0) , mTempRare(0) , mTempPage(1) , mDealDelayTime(0) , mSaveStartPage(0) , mSaveEndPage(0) , mSaveCurrentPage(0) , mSaveResult(-1) , mpLeftPageButton(0) , mpRightPageButton(0) , mpPageNumPos(0) { memset( mpBuyButton, 0, sizeof(mpBuyButton) ); for( unsigned int cnt = 0; cnt < 10; ++cnt ) { mPageNum[cnt].mColor = COLOR_WHITE; mPageNum[cnt].mPos.mX = 0; mPageNum[cnt].mPos.mY = 0; mPageNum[cnt].mIsShow = false; } mPageTextRect = cUIRect( 0,0,0,0 ); } cNpcDealSearchSheet::~cNpcDealSearchSheet() { if( mpItemList ) mpItemList->Clear(); for( unsigned int i=0;iClear(); for( unsigned int i=0;iInitSelectRow(); if( mpNameEdit ) mpNameEdit->Clear(); if( mpLowLv ) mpLowLv->SetValue( LOWLEVEL ); if( mpHighLv ) mpHighLv->SetValue( HIGHLEVEL ); if( mpRare ) mpRare->SetSelect( 0 ); if( mpEnhance ) mpEnhance->SetSelect( 0 ); mTempType = -1; mTempSubType = -1; mTempLowLv = LOWLEVEL; mTempHighLv = HIGHLEVEL; mTempEnhance = 0; mTempRare = 0; mTempName.Clear(); mSortData = 255; mTempPage = 1; mTempSortData = 255; mSaveStartPage = 0; mSaveEndPage = 0; mSaveResult = -1; ClearPage(); } void cNpcDealSearchSheet::ClearData() { for( unsigned int i=0;iHide(); if( mpRightPageButton ) mpRightPageButton->Hide(); cUIPos pos; unsigned int rowHeight = mpItemList->GetRowHeight(); for( int i = 0; i < 10; ++i ) { mpBuyButton[i] = new cButton; if( mpBuyButton[i]->CreateBySkinName( "NpcDeal_SearchBuy", this, BUYBUTTON_ID + i ) == false ) { assert(0); return false; } pos.mX = mpBuyButton[i]->GetRelativeRect().mLeft; pos.mY = mpBuyButton[i]->GetRelativeRect().mTop + ( i * rowHeight ); mpBuyButton[i]->SetRelativePos( pos ); mpBuyButton[i]->Hide(); } if( mpRare ) { // Àüü mpRare->AddItem( GAMERESOURCEMAN->GetItemToolTipText( 2000909 ), (void*)ALL_INVENTORY_RARE ); // µî±Þ for( int i = 0; i < 8; ++i ) { mpRare->AddItem( GAMERESOURCEMAN->GetItemToolTipText( 2000901 + i ), (void*)(eTOOLTIP_MALL+i) ); } mpRare->SetSelect( 0 ); } if( mpEnhance ) { mpEnhance->AddItem( GAMERESOURCEMAN->GetItemToolTipText( 2000909 ), (void*)ALL_INVENTORY_ENHANCED ); cStringT str; for( int i = 0; i <= MAX_ITEM_ENHANCED; ++i ) { str.Format( GAMERESOURCEMAN->GetItemToolTipText( 2000087 ), i ); mpEnhance->AddItem( (LPCTSTR)str.Cstr(), (void*)i ); } mpEnhance->SetSelect( 0 ); } /// cUISkin* pSkin = UIMAN->GetSkin(); if( !pSkin ) { assert(0); return false; } cUINodeSkin* pHighSkin = pSkin->GetNodeSkin( "NpcDeal_FolderCheck" ); cUINodeSkin* pHighNoSkin = pSkin->GetNodeSkin( "NpcDeal_FolderNoCheck" ); if( pHighSkin && pHighNoSkin ) { mpHighImage = new cUIImage( pHighSkin->mpTexture ); unsigned int tx = pHighSkin->mSkinInfo->mTexX; unsigned int ty = pHighSkin->mSkinInfo->mTexY; unsigned int w = pHighSkin->mSkinInfo->mWidth; unsigned int h = pHighSkin->mSkinInfo->mHeight; int x = pHighSkin->mSkinInfo->mX; int y = pHighSkin->mSkinInfo->mY; mpHighImage->SetTextureRect( tx, ty, tx + w, ty + h ); mpHighImage->SetScreenRect( cUIRect( x, y, x + w, y + h ) ); unsigned int tx2 = pHighNoSkin->mSkinInfo->mTexX; unsigned int ty2 = pHighNoSkin->mSkinInfo->mTexY; mpTypeList->SetHighNoCheckPos( tx, ty ); mpTypeList->SetHighCheckPos( tx2, ty2 ); mpTypeList->SetLowGap( w ); } mpPageNumPos = pSkin->GetNodeSkin( "NpcDeal_Page_Text_Pos" ); if( !mpPageNumPos ) { assert(0); return false; } /// mpTypeList->ShowNumber( false ); /// ŸÀÔ Á¤º¸ SetTypeList(); Clear(); return true; } void cNpcDealSearchSheet::UpdateSkin() { cUIWindow::UpdateSkin(); if( mpItemList ) { unsigned int rowHeight = mpItemList->GetRowHeight(); for( int i = 0; i < 10; ++i ) { if( mpBuyButton[i] ) { cUIPos pos; pos.mX = mpBuyButton[i]->GetRelativeRect().mLeft; pos.mY = mpBuyButton[i]->GetRelativeRect().mTop + ( i * rowHeight ); mpBuyButton[i]->SetRelativePos( pos ); } } } } void cNpcDealSearchSheet::UpdateRect() { cUIWindow::UpdateRect(); unsigned int totalTextWidth = 0; /// ÃÖ´ë Ç¥Çö ÆäÀÌÁö for( unsigned int idx = 0; idx < 10; ++idx ) { if( mPageNum[idx].mIsShow == true ) totalTextWidth += mPageNum[idx].mTextWidth; } if( mpPageNumPos ) { unsigned int pageStartPos = mpPageNumPos->mSkinInfo->mX - (totalTextWidth/2) + mAbsoluteRect.mLeft; for( unsigned int idx = 0; idx < 10; ++idx ) { /// ¹®ÀÚ À§Ä¡; if( mPageNum[idx].mIsShow == true ) { mPageNum[idx].mPos.mX = pageStartPos; mPageNum[idx].mPos.mY = mpPageNumPos->mSkinInfo->mY + mAbsoluteRect.mTop ; pageStartPos += mPageNum[idx].mTextWidth; } } /// ÆäÀÌÁö È­»ìÇ¥ À§Ä¡ if( mpLeftPageButton ) mpLeftPageButton->SetRelativePos( cUIPos( mpPageNumPos->mSkinInfo->mX - (totalTextWidth/2) - mpLeftPageButton->GetAbsoluteRect().GetWidth() , mpLeftPageButton->GetRelativeRect().mTop ) ); if( mpRightPageButton ) mpRightPageButton->SetRelativePos( cUIPos( mpPageNumPos->mSkinInfo->mX + (totalTextWidth/2), mpLeftPageButton->GetRelativeRect().mTop ) ); } /// ÅØ½ºÆ® Ãâ·Â ¿µ¿ª ¼³Á¤ if( mPageNum[0].mIsShow == true ) { mPageTextRect = cUIRect( mPageNum[0].mPos.mX, mPageNum[0].mPos.mY, mPageNum[0].mPos.mX + totalTextWidth, mPageNum[0].mPos.mY + FONTAGENT->GetTextHeight( cFontAgent::eFont_UI )); } else mPageTextRect = cUIRect( 0, 0, 0, 0 ); } void cNpcDealSearchSheet::OnProcess( unsigned long deltaTime, unsigned long accumTime ) { cUIWindow::OnProcess( deltaTime, accumTime ); if( mDealDelayTime != 0 ) { if( IsNetLock() == false ) { if( mDealDelayTime <= accumTime ) { // ¸Þ¼¼Áö¹Ú½º Áö¿ì±â UIMAN->DestroyMsgBox( eMBEVENT_NPCDEAL_ITEM_FIND ); // °á°ú ÈÄó¸® switch( mSaveResult ) { case ERROR_NPC_ITEM_AGENT_SEARCH_SUCCESS: { // list set UpdateItemList(); } break; case ERROR_NPC_ITEM_AGENT_SEARCH_FAIL: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1508 ), GAMERESOURCEMAN->GetGameText( 301 ) ); RollBackPage(); } break; case ERROR_NPC_ITEM_AGENT_SEARCH_NOTYET: { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1509 ), GAMERESOURCEMAN->GetGameText( 301 ) ); RollBackPage(); } break; default: assert(0); break; } mDealDelayTime = 0; } } } } void cNpcDealSearchSheet::OnRender( cUIFontItemKeeper* pKeeper ) { cUIWindow::OnRender( pKeeper ); for( unsigned int cnt = 0; cnt < 10; ++cnt ) { if( mPageNum[cnt].mIsShow ) pKeeper->AddFontItem( cFontAgent::eFont_UI, const_cast(mPageNum[cnt].mPageNum.Cstr()), mPageNum[cnt].mPos.mX, mPageNum[cnt].mPos.mY, mPageNum[cnt].mColor ); } } void cNpcDealSearchSheet::OnCommand( cUINode*, unsigned int id ) { switch( id ) { /// °Ë»ö case eUIID_NPCDEAL_SEARCHBUTTON: { unsigned long accumtime = THEAPP->GetWorldAccumTime(); if( accumtime < mDealDelayTime ) { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1509 ), GAMERESOURCEMAN->GetGameText( 301 ) ); return; } char type = -1; short subType = -1; unsigned int row = mpTypeList->GetSelectRow(); unsigned int column = mpTypeList->GetSelectRowColumn(); sDealCategory* data = (sDealCategory*)mpTypeList->GetColumnData( row, column ); if( data ) { type = data->mHighKey; /// column[0]Àº ´ëºÐ·ù¸¸ ¼±ÅõȻóÅ if( column > 0 ) subType = data->mMiddleKey; } if( type == -1 ) { assert(0); RollBackPage(); return; } LPCTSTR itemName = mpNameEdit->GetText(); int len = ::_tcslen(itemName); /// ¿É¼Ç unsigned char lowLv = (unsigned char)mpLowLv->GetValue(); unsigned char highLv = (unsigned char)mpHighLv->GetValue(); unsigned char enhance = (unsigned char)mpEnhance->GetSelectData(); unsigned char rare = (unsigned char)mpRare->GetSelectData(); /// ·¹º§Á¶°Ç °Ë»ç if( lowLv > highLv ) { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1510 ), GAMERESOURCEMAN->GetGameText( 301 ) ); RollBackPage(); return; } // ¼¼ºÎŸÀÔ Ç׸ñ ¼³Á¤ ¿äû if( subType == -1 ) { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1521 ), GAMERESOURCEMAN->GetGameText( 301 ) ); RollBackPage(); return; } /// ¹®ÀÚ¿­ °Ë»ç if( len > 0 && CheckItemName( itemName, len ) == false ) { mpNameEdit->Clear(); UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1511 ), GAMERESOURCEMAN->GetGameText( 301 ) ); RollBackPage(); return; } mSortData = 255; /*---------------- // °Ë»ö Á¶°Ç */ bool result = false; // 1. ¼¼ºÎ °Ë»ö ( type, subtype ±âÁØ ) if( len == 0 ) { result = ITEMMAN->TryToNpcDealSearchType( 1, type, subType, lowLv, highLv, enhance, rare, mSortData ); } // 2. Àüü °Ë»ö ( type, subtype, item name ±âÁØ ) else if( len > 0 ) { result = ITEMMAN->TryToNpcDealSearchAll( 1, mpNameEdit->GetText(), type, subType, lowLv, highLv, enhance, rare, mSortData ); } else { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1526 ), GAMERESOURCEMAN->GetGameText( 301 ) ); } if( result == false ) { RollBackPage(); return; } // mTempName = mpNameEdit->GetText(); mTempType = type; mTempSubType = subType; mTempLowLv = lowLv; mTempHighLv = highLv; mTempEnhance = enhance; mTempRare = rare; // 1ÃÊ Áö¿¬ °É±â mDealDelayTime = THEAPP->GetWorldAccumTime() + DEAL_DELAYTIME; // °Ë»öÁß UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NPCDEAL_ITEM_FIND, eSKIN_NONE, GAMERESOURCEMAN->GetGameText( 1522 ), GAMERESOURCEMAN->GetGameText( 301 ) ); } break; case eUIID_NPCDEAL_SEARCHITEMLEVEL: case eUIID_NPCDEAL_SEARCHPRICE: if( mDealSearchArr.GetSize() > 0 ) { BYTE filed = ( id == eUIID_NPCDEAL_SEARCHITEMLEVEL ) ? 1 : 0; BYTE flag = (mSort.flag == 0)? 1:0; mSortData = 0; /// true : ¾ÆÀÌÅÛ¸í, false : °¡°Ý mSort.filed = filed; mSort.flag = flag; SendUpdateList( mSaveCurrentPage ); } break; case eUIID_NPCDEAL_SEARCHPAGELEFT: { /// ÇöÀç ÆäÀÌÁö -> ¾Õ ÆäÀÌÁöÀÇ Ã¹¹øÂ° ÆäÀÌÁö int prevPageNum = ( ( mSaveCurrentPage -1) / 10 ) * 10 + 1 - 10; SendUpdateList( prevPageNum ); } break; case eUIID_NPCDEAL_SEARCHPAGERIGHT: { /// ÇöÀç ÆäÀÌÁö -> µÚ ÆäÀÌÁöÀÇ Ã¹¹øÂ° ÆäÀÌÁö int nextPageNum = ( ( mSaveCurrentPage -1) / 10 ) * 10 + 1 + 10; SendUpdateList( nextPageNum ); } break; } /// ¹öư ´­¸² if( id >= BUYBUTTON_ID && id < BUYBUTTON_ID + 10 ) { int i = id - BUYBUTTON_ID; if( mpBuyButton[i] && mpBuyButton[i]->IsVisible() ) { mpItemList->ChangeSelectRow( i ); // NPC_ITEM_AGENT_SEARCH_RESULT* data = (NPC_ITEM_AGENT_SEARCH_RESULT*)mpItemList->GetExtraData( i ); if( data ) { /// ¿©·¯°¹¼ö°¡ ÀÖÀ¸¸é if( data->Inventory.count > 1 ) { GAMEUI->ShowItemCountWindow( eMBEVENT_ITEMCOUNT_NPCDEALBUY, data->Idx, data->Inventory.ItemIndex, data->Inventory.count, data->Price ); } /// ÇѰ³À̸é else { GAMEUI->ShowItemNpcDealBuyAskWindow( data->Idx, data->Inventory.ItemIndex, data->Inventory.count, data->Price ); } } } else assert(0); } } void cNpcDealSearchSheet::OnLButtonDown( const cUIPos& pos, bool ctrl, bool alt, bool shift ) { cUIWindow::OnLButtonDown( pos, ctrl, alt, shift ); if( mPageTextRect.ContainPoint( pos ) == true ) { for( unsigned int idx = 0; idx < 10; ++idx ) { if( mPageNum[idx].mIsShow == false ) continue; if( pos.mX >= mPageNum[idx].mPos.mX && pos.mX <= mPageNum[idx].mPos.mX + (int)mPageNum[idx].mTextWidth ) { SendUpdateList( mPageNum[idx].mPageNum.ToInt() ); return; } } } } void cNpcDealSearchSheet::OnListBoxImageHorvered( cUINode* , unsigned int , const cUIPos& pos, void* extraData ) { NPC_ITEM_AGENT_SEARCH_RESULT* data = (NPC_ITEM_AGENT_SEARCH_RESULT*)extraData; if( data ) { UIMAN->ShowOtherItemTip( eTIP_ITEM, pos, data->Inventory ); } } void cNpcDealSearchSheet::OnListBoxImageLeft( cUINode* , unsigned int ) { UIMAN->HideTip(); } void cNpcDealSearchSheet::OnListBoxChanged( cUINode* , unsigned int id ) { if( !mpTypeList ) { assert(0); return; } if( id == eUIID_NPCDEAL_SEARCHFOLDERLIST ) { char type = -1; unsigned int row = mpTypeList->GetSelectRow(); unsigned int column = mpTypeList->GetSelectRowColumn(); sDealCategory* data = (sDealCategory*)mpTypeList->GetColumnData( row, column ); if( data ) { type = data->mHighKey; } // ŸÀÔ¿¡ µû¸¥ ·¹º§ ±¸°£ °»½Å if( type > -1 ) { // Àåºñ±¸·ù (¹«±â, ¹æ¾î±¸, ¾Ç¼¼¼­¸®) - ÆÇ¸Å´ëÇà¿ë ŸÀÔÀÓ if( type == 1 || type == 2 || type == 3 ) { unsigned char level = HERO->GetLevel(); unsigned char lowLv = 1; unsigned char highLv = 99; if( level < 10 ) { lowLv = 1; highLv = level + 10; } else if( level > 245 ) { lowLv = level - 10; highLv = 255; } else { lowLv = level - 10; highLv = level + 10; } if( mpHighLv ) mpHighLv->SetValue( highLv ); if( mpLowLv ) mpLowLv->SetValue( lowLv ); } // ±×¿Ü else { if( mpHighLv ) mpHighLv->SetValue( HIGHLEVEL ); if( mpLowLv ) mpLowLv->SetValue( LOWLEVEL ); } } } } void cNpcDealSearchSheet::SetTypeList() { if( !mpTypeList ) { assert(0); return; } tArray* highArr = ITEMMAN->GetDealHighArr(); if( highArr ) { // ½ÇÁ¦ µ¥ÀÌÅÍ »ðÀÔ for( unsigned int i = 0; i < highArr->GetSize(); ++i ) { char idx = (*highArr)[i]; tArray* dealArr = ITEMMAN->GetDealCategoryMap( idx ); if( dealArr ) { sDealCategory* highData = (sDealCategory*)(*dealArr)[0]; if( !highData ) { assert(0); continue; } /// ´ëºÐ·ù »ðÀÔ LPCTSTR highName = GAMERESOURCEMAN->GetCategoryName( idx ); mpTypeList->AddHighData( highData->mHighKey, highName, mDefaultColor, highData, mpHighImage, false ); for( unsigned int j = 0; j < dealArr->GetSize(); ++j ) { /// Áߺзù »ðÀÔ sDealCategory* data = (sDealCategory*)(*dealArr)[j]; LPCTSTR middleName = GAMERESOURCEMAN->GetCategoryName( data->mMiddleKey ); mpTypeList->AddLowData( highData->mHighKey, middleName, mDefaultColor, data ); } } } } else assert(0); } void cNpcDealSearchSheet::SavePage( long startPage, long endPage ) { mSaveStartPage = startPage; mSaveEndPage = endPage; } // ¾ÆÀÌÅÛ Á¤º¸ ÀúÀå bool cNpcDealSearchSheet::AddItem( NPC_ITEM_AGENT_SEARCH_RESULT* data ) { mDealSearchArr.PushBack( data ); return true; } // UI ¿¡ ¼¼ÆÃ void cNpcDealSearchSheet::UpdateItemList() { if( !mpItemList ) { assert(0); return; } if( mpItemList ) mpItemList->Clear(); ClearPage(); for( unsigned int i=0;iGetItemDefine( data->Inventory.ItemIndex ); if( !define ) { assert(0); return; } cIconParam* iconParam = define->GetIconParam(); if( !iconParam ) { assert(0); return; } // Á¦ÇÑ Ä÷¯ int ret0 = ITEMMAN->CheckLimit( data->Inventory.ItemIndex ); int ret1 = ITEMMAN->CheckLimitEtc( data->Inventory.ItemIndex ); NiColorA color = NiColorA::WHITE; if( ret0 != ITEMLIMIT_SUCCESS || ret1 != ITEMLIMIT_SUCCESS ) { color = NiColorA( 1.0f, 0.0f, 0.0f, 1.0f ); } /// ¾ÆÀÌÅÛ À̹ÌÁö »ý¼º cUIImage* pImage = new cUIImage( iconParam->mpTexture ); if( pImage ) { int tx = iconParam->mTexPos.mX; int ty = iconParam->mTexPos.mY; pImage->SetTextureRect( tx, ty, tx + ICON_SIZE, ty + ICON_SIZE ); pImage->SetScreenRect( cUIRect( 0, 0, ICON_SIZE, ICON_SIZE ) ); pImage->SetColor( color ); } /// Å׵θ®À̹ÌÁö cUIImage* edgeImage = 0; cIconParam* pTipParam = UIMAN->GetIconParam( 10 ); if( pTipParam && define->GetTipType() != eTOOLTIP_NONE ) { edgeImage = new cUIImage( pTipParam->mpTexture ); unsigned int tx = pTipParam->mTexPos.mX + ( define->GetTipType() * ICON_SIZE ); unsigned int ty = pTipParam->mTexPos.mY; edgeImage->SetTextureRect( tx, ty, tx + ICON_SIZE, ty + ICON_SIZE ); edgeImage->SetScreenRect( cUIRect( 0, 0, ICON_SIZE, ICON_SIZE ) ); } /// cUIImage* sealImage = 0; cIconParam* pSealParam = UIMAN->GetIconParam( SEAL_INDEX ); if( pSealParam && data->Inventory.seal == 1 ) { sealImage = new cUIImage( pSealParam->mpTexture ); unsigned int tx = pSealParam->mTexPos.mX; unsigned int ty = pSealParam->mTexPos.mY; sealImage->SetTextureRect( tx, ty, tx + ICON_SIZE, ty + ICON_SIZE ); sealImage->SetScreenRect( cUIRect( 0, 0, ICON_SIZE, ICON_SIZE ) ); } /// ¾ÆÀÌÅÛ¸í TCHAR name[ITENNAME_LEN] = {0,}; TCHAR temp[ITENNAME_LEN] = {0,}; // Ä÷¯°¡Á®¿À±â unsigned long itemColor = COLOR_WHITE; ITEMMAN->GetTooltipColor( define->GetTipType(), itemColor ); /// ¾ÆÀÌÅÛ Á¤º¸ ¹Þ¾Æ¼­ Ãâ·Â if( data->Inventory.enhanced > 0 ) { /// °­È­ ´Ü°è Ãâ·Â ::_stprintf_s( temp, _T("+%d %s"), data->Inventory.enhanced, define->GetName() ); } else { ::_stprintf_s( temp, _T("%s"), define->GetName() ); } unsigned int colWidth = mpItemList->GetColumnMaxWidth( 0 ); bool ret = UIMAN->ModifyText( temp, name, ITENNAME_LEN, colWidth ); LPCTSTR itemname = ( ret == true ) ? name : temp; cUIImageFont* font = UIMAN->GetImageFont( eIAMGEFONT_ITEMCOUNT ); int row = mpItemList->AddRow( itemname, itemColor, pImage, edgeImage, sealImage, font, false, 0, (void*)data ); if( row == -1 ) { assert(0); return; } /// Âø¿ëÁ¦ÇÑ ·¹º§ cItemLimit* limit = define->GetLimit(); char level = ( limit != NULL ) ? limit->GetLevel() : 0; cStringT levelStr; levelStr.Format( _T("%d"), level ); mpItemList->AddColume( row, (LPCTSTR)levelStr.Cstr(), mDefaultColor ); /// ¸¶°¨½ÃÇÑ cStringT timeStr; timeStr.Format( UIMAN->GetUIText( 118 ), (data->ValidThru < 0)? 0:data->ValidThru ); mpItemList->AddColume( row, (LPCTSTR)timeStr.Cstr(), mDefaultColor ); /// ÆÇ¸ÅÀÚ¸í mpItemList->AddColume( row, data->CharacterName, mDefaultColor ); /// ¼ö·® cStringT countStr; countStr.Format( _T("%d"), data->Inventory.count ); mpItemList->AddColume( row, (LPCTSTR)countStr.Cstr(), mDefaultColor ); /// ÆÇ¸Å°¡ cStringT priceStr; LPCTSTR price = cNumberEditBox::FormatNumber( data->Price ); priceStr.Format( UIMAN->GetUIText( 354 ), price ); mpItemList->AddColume( row, (LPCTSTR)priceStr.Cstr(), mDefaultColor ); } else assert(0); } // ÆäÀÌÁö °»½Å ChangePage( mSaveStartPage ); } /// ÆäÀÌÁö ¹öư µî Àç ¼¼ÆÃ void cNpcDealSearchSheet::UpdatePage() { if( mpItemList ) { /// ¸®½ºÆ® ¹Ú½º °»½Å mpItemList->ChangeTopIndex( mSaveCurrentPage * 10 ); /// ¹öư °»½Å int count = mpItemList->GetRowCount() - mpItemList->GetCurrentTopIndex(); for( int i = 0; i < 10; ++i ) { if( i < count ) mpBuyButton[i]->Show(); else mpBuyButton[i]->Hide(); } } } void cNpcDealSearchSheet::ChangePage( unsigned int page ) { if( page > 0 ) { mSaveCurrentPage = page; SetSelectPage( page ); UpdatePage(); // ¹é¾÷ mTempPage = page; mTempSortData = mSortData; } } // µ¥ÀÌÅÍ ·Ñ¹é void cNpcDealSearchSheet::RollBackPage() { if( mTempPage > 0 ) { mSaveCurrentPage = mTempPage; SetSelectPage( mSaveCurrentPage ); UpdatePage(); mSortData = mTempSortData; } } bool cNpcDealSearchSheet::CheckItemName( LPCTSTR word, unsigned int len ) { if( len <= 0 ) return false; /// ³»¿ë¿¡ " "¸¦ Á¦¿ÜÇÑ ¹®ÀÚ°¡ ÀԷµǾú´ÂÁö °Ë»çÈÄ send bool search = false; LPCTSTR str = word; for( unsigned int i = 0;i < len; ++i ) { if( *str != 32 ) { search = true; break; } else str++; } return search; } // ±¸ÀÔ ¿äû void cNpcDealSearchSheet::SendDealBuy( long idx, unsigned int count ) { if( !(mSaveCurrentPage >= 0 && mSaveCurrentPage <= mSaveEndPage) ) { assert(0); return; } ITEMMAN->TryToNpcDealBuy( idx, mSaveCurrentPage, (short)count, (LPCTSTR)mTempName.Cstr(), mTempType, mTempSubType, mTempLowLv, mTempHighLv, mTempEnhance, mTempRare, mSortData ); } // ¸ñ·Ï Àç ¿äû º¸³»±â void cNpcDealSearchSheet::SendUpdateList( unsigned int pageNum ) { if( pageNum == 0 ) pageNum = mSaveCurrentPage; unsigned long accumtime = THEAPP->GetWorldAccumTime(); if( accumtime < mDealDelayTime ) { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1509 ), GAMERESOURCEMAN->GetGameText( 301 ) ); return; } if( !(pageNum >= 0 && pageNum <= mSaveEndPage) ) { assert(0); return; } /// ·¹º§Á¶°Ç °Ë»ç if( mTempLowLv > mTempHighLv ) { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1510 ), GAMERESOURCEMAN->GetGameText( 301 ) ); RollBackPage(); return; } if( mTempType == -1 ) return; // ¼¼ºÎŸÀÔ Ç׸ñ ¼³Á¤ ¿äû if( mTempSubType == -1 ) { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1521 ), GAMERESOURCEMAN->GetGameText( 301 ) ); RollBackPage(); return; } /// ¹®ÀÚ¿­ °Ë»ç if( mTempName.GetLength() > 0 && CheckItemName( (LPCTSTR)mTempName.Cstr(), mTempName.GetLength() ) == false ) { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1511 ), GAMERESOURCEMAN->GetGameText( 301 ) ); RollBackPage(); return; } /*---------------- // °Ë»ö Á¶°Ç */ bool result = false; // 1. ¼¼ºÎ °Ë»ö ( type, subtype ±âÁØ ) if( mTempName.GetLength() == 0 ) { result = ITEMMAN->TryToNpcDealSearchType( pageNum, mTempType, mTempSubType, mTempLowLv, mTempHighLv, mTempEnhance, mTempRare, mSortData ); } // 2. Àüü °Ë»ö ( type, subtype, item name ±âÁØ ) else if( mTempName.GetLength() > 0 ) { result = ITEMMAN->TryToNpcDealSearchAll( pageNum, (LPCTSTR)mTempName.Cstr(), mTempType, mTempSubType, mTempLowLv, mTempHighLv, mTempEnhance, mTempRare, mSortData ); } else { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NONE, eSKIN_OK, GAMERESOURCEMAN->GetGameText( 1526 ), GAMERESOURCEMAN->GetGameText( 301 ) ); } if( result == false ) { RollBackPage(); } else { // 1ÃÊ Áö¿¬ °É±â mDealDelayTime = THEAPP->GetWorldAccumTime() + DEAL_DELAYTIME; // °Ë»öÁß UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_NPCDEAL_ITEM_FIND, eSKIN_NONE, GAMERESOURCEMAN->GetGameText( 1522 ), GAMERESOURCEMAN->GetGameText( 301 ) ); } } void cNpcDealSearchSheet::OnNetLock( int lockTry ) { cUINode::NetLock( lockTry ); } void cNpcDealSearchSheet::OnNetUnLock( int lockTry ) { cUINode::NetUnLock( lockTry ); } void cNpcDealSearchSheet::SetSelectPage( unsigned int page ) { if( page == 0 ) { ClearPage(); return; } unsigned int index = (page-1)%10; /// ¼±ÅÃµÈ ÆäÀÌÁö »ö ¹Ù²Ù±â mPageNum[index].mColor = COLOR_GREEN; unsigned int pageStartNum = ( (page -1) / 10 ) * 10 + 1; /// ÀÏÀÇÀÚ¸® Áö¿ì±â unsigned int pageEndNum = pageStartNum + 9; if( pageEndNum > (unsigned int)mSaveEndPage ) { pageEndNum = (unsigned int)mSaveEndPage; mpRightPageButton->Hide(); } else mpRightPageButton->Show(); if( pageEndNum <= 10 ) mpLeftPageButton->Hide(); else mpLeftPageButton->Show(); int pageCountMax = pageEndNum - pageStartNum; unsigned int totalTextWidth = 0; if( pageCountMax >= 10 || pageCountMax < 0 ) pageCountMax = -1; /// ¹®ÀÚ ½ÃÀÛ À§Ä¡ = À©µµ¿ì ¹®ÀÚ Ãâ·Â Á᫐ ÁÂÇ¥ - (Ãѹ®ÀÚ ±æÀÌ/2) /// ¹®ÀÚ ³¡ À§Ä¡ = À©µµ¿ì ¹®ÀÚ Ãâ·Â Á᫐ ÁÂÇ¥ + (Ãѹ®ÀÚ ±æÀÌ/2) /// ¿ÞÂÊ È­»ìÇ¥ ½ÃÀÛ À§Ä¡ = ¹®ÀÚ ½ÃÀÛ À§Ä¡ - À̹ÌÁö ³Êºñ; /// ¿À¸¥ÂÊ È­»ìÇ¥ ½ÃÀÛ À§Ä¡ = ¹®ÀÚ ³¡ À§Ä¡; /// °¢ ¹®ÀÚ ½ÃÀÛ À§Ä¡ = Ãâ·ÂµÈ ¹®ÀÚµéÀÇ ±æÀÌÀÇ ÇÕ /// ÃÖ´ë Ç¥Çö ÆäÀÌÁö for( int idx = 0; idx <= pageCountMax; ++idx ) { mPageNum[idx].mPageNum.Format(_T(" %d "), pageStartNum + idx ); mPageNum[idx].mTextWidth = FONTAGENT->GetTextExtent( cFontAgent::eFont_UI, mPageNum[idx].mPageNum.Cstr(), mPageNum[idx].mPageNum.GetLength() ); /// ¹®ÀÚ ±æÀÌ +; totalTextWidth += mPageNum[idx].mTextWidth; } unsigned int pageStartPos = mpPageNumPos->mSkinInfo->mX - (totalTextWidth/2) + mAbsoluteRect.mLeft; for( int idx = 0; idx <= pageCountMax; ++idx ) { /// ¹®ÀÚ À§Ä¡; mPageNum[idx].mPos.mX = pageStartPos; mPageNum[idx].mPos.mY = mpPageNumPos->mSkinInfo->mY + mAbsoluteRect.mTop ; pageStartPos += mPageNum[idx].mTextWidth; mPageNum[idx].mIsShow = true; } for( int idx = pageCountMax+1; idx < 10; ++idx ) mPageNum[idx].mIsShow = false; /// ÆäÀÌÁö È­»ìÇ¥ À§Ä¡ if( mpLeftPageButton ) mpLeftPageButton->SetRelativePos( cUIPos( mpPageNumPos->mSkinInfo->mX - (totalTextWidth/2) - mpLeftPageButton->GetAbsoluteRect().GetWidth() , mpLeftPageButton->GetRelativeRect().mTop ) ); if( mpRightPageButton ) mpRightPageButton->SetRelativePos( cUIPos( mpPageNumPos->mSkinInfo->mX + (totalTextWidth/2), mpLeftPageButton->GetRelativeRect().mTop ) ); /// ÅØ½ºÆ® Ãâ·Â ¿µ¿ª ¼³Á¤ if( mPageNum[0].mIsShow == true ) { mPageTextRect = cUIRect( mPageNum[0].mPos.mX, mPageNum[0].mPos.mY, mPageNum[0].mPos.mX + totalTextWidth, mPageNum[0].mPos.mY + FONTAGENT->GetTextHeight( cFontAgent::eFont_UI )); } else mPageTextRect = cUIRect( 0, 0, 0, 0 ); } void cNpcDealSearchSheet::ClearPage() { for( unsigned int cnt = 0; cnt < 10; ++cnt ) { mPageNum[cnt].mColor = COLOR_WHITE; mPageNum[cnt].mIsShow = false; } if( mpLeftPageButton ) mpLeftPageButton->Hide(); if( mpRightPageButton ) mpRightPageButton->Hide(); mPageTextRect = cUIRect( 0, 0, 0, 0 ); for( int i = 0; i < 10; ++i ) { if( mpBuyButton[i] ) mpBuyButton[i]->Hide(); } }