#include "SunClientPrecompiledHeader.h" #include #include #include "InterfaceManager.h" #include "SolarDialog.h" #include "shopdialog.h" #include "ItemUnitRenderer.h" #include "MouseHandler.h" #include "ItemManager.h" #include "ShopInfoParser.h" #include "ItemInfoParser.h" #include "Mouse.h" #include #include "chatdialog.h" #include "CursorChangeTransact.h" #include "globalfunc.h" #include "uiSystemMan/uiSystemMan.h" #include "uiToolTipMan/uiToolTipMan.h" #include "Hero.h" #ifdef _NA_003923_20120130_GUILD_RENEWAL_MOD_WAREHOUSE_SLOT_NUM #include "uiBankMan/uiBankDef.h" #include "uiBankMan/uiBankDialog.h" #else #include "BankDialog.h" #endif //_NA_003923_20120130_GUILD_RENEWAL_MOD_WAREHOUSE_SLOT_NUM #include "HeroActionInput.h" #include "uiCharacterStatusMan/uiCharacterStatusMan.h" #include "GraphicResourceList.h" #ifdef _NA004034_20120102_POINT_WALLET_SYSTEM #include "uiCharacterStatus/uiCharacterStatusCurrencyInfo.h" #endif //_NA004034_20120102_POINT_WALLET_SYSTEM WzID ShopDialog::m_wzId[ShopDialog::Dialog_MAX] = { StrToWzID("B000"), //SHOP_BT_SLOT1 = 0, StrToWzID("B001"), //SHOP_BT_SLOT2, StrToWzID("B003"), //SHOP_BT_SLOT3, StrToWzID("B004"), //SHOP_BT_SLOT4, StrToWzID("B005"), //SHOP_BT_SLOT5, StrToWzID("B006"), //SHOP_BT_SLOT6, StrToWzID("B007"), //SHOP_BT_SLOT7, StrToWzID("B008"), //SHOP_BT_SLOT8, StrToWzID("B009"), //SHOP_BT_SLOT9, StrToWzID("B010"), //SHOP_BT_SLOT10, StrToWzID("B011"), //SHOP_BT_SLOT11, StrToWzID("B012"), //SHOP_BT_SLOT12, StrToWzID("B013"), //SHOP_BT_SLOT13, StrToWzID("B014"), //SHOP_BT_SLOT14, StrToWzID("B015"), //SHOP_BT_SLOT15, StrToWzID("B016"), //SHOP_BT_SLOT16, StrToWzID("B017"), //SHOP_BT_SLOT17, StrToWzID("B018"), //SHOP_BT_SLOT18, StrToWzID("B019"), //SHOP_BT_SLOT19, StrToWzID("B020"), //SHOP_BT_SLOT20, StrToWzID("B021"), //SHOP_BT_SLOT21, StrToWzID("B022"), //SHOP_BT_SLOT22, StrToWzID("B023"), //SHOP_BT_SLOT23, StrToWzID("B024"), //SHOP_BT_SLOT24, StrToWzID("B025"), //SHOP_BT_SLOT25, StrToWzID("BT00"), //SHOP_BT_SLOT_HISTORY1 StrToWzID("BT01"), //SHOP_BT_SLOT_HISTORY2 StrToWzID("BT02"), //SHOP_BT_SLOT_HISTORY3 StrToWzID("BT03"), //SHOP_BT_SLOT_HISTORY4 StrToWzID("BT04"), //SHOP_BT_SLOT_HISTORY5 StrToWzID("T003"), //SHOP_TEXT_REPAIR_PAYMENT, StrToWzID("C005"), //SHOP_CHECK_BUY, StrToWzID("C006"), //SHOP_CHECK_SELL, StrToWzID("C007"), //SHOP_CHECK_REPAIR, StrToWzID("B991"), //SHOP_BT_REPAIR_ALL, StrToWzID("C000"), //SHOP_CHECK_BERSERKER, StrToWzID("C001"), //SHOP_CHECK_DRAGON, StrToWzID("C002"), //SHOP_CHECK_VALKYRIE, StrToWzID("C003"), //SHOP_CHECK_WEAPON, StrToWzID("C004"), //SHOP_CHECK_GENERAL, StrToWzID("P000"), //SHOP_PIC_COST_ICON, StrToWzID("B999") }; ShopDialog::ShopDialog(void) { m_pItemUnitRenderer = NULL; m_TabNum = 0; m_DialogKey = 0; } ShopDialog::~ShopDialog(void) { } VOID ShopDialog::Init( CDrawBase * pDrawBase ) { this->GetControlsFromDialog(); // ÃʱâÈ­ ÇØ¾ßÇÒ º¯¼öµé m_bDrawSlotInfo = FALSE; m_iDrawSlotPos = 0; m_Money = 0; m_TabNum = 0; m_eShopMethod = SHOP_METHOD_NONE; m_Money = 0; Sprintf( m_szText, _T("%I64"), m_Money ); GlobalFunc::SetCaption( m_pCtrlStaticRepairMoney, m_szText ); RECT rcDlg; GetDialogWZ()->GetDlgSize(&rcDlg); int iDeltaX = (rcDlg.right) / 2; int iDeltaY = (rcDlg.bottom) / 2; int x, y; x = g_InterfaceManager.GetWindowRC()->right / 2 - iDeltaX; y = g_InterfaceManager.GetWindowRC()->bottom / 2 - iDeltaY; MoveWindowWZ(x, y); SCItemSlotContainer::Init(MAX_VENDOR_SLOT_NUM, SI_NPCSTORE); InitContainer(); #ifdef _JBH_MOD_MONEY_OUTPUT m_bCkickMoney = FALSE; #endif m_PendingHistorySlotPos = -1; cost_icon_contol_ = static_cast(this->getControl(SHOP_PIC_COST_ICON)); currency_item_code_ = 0; shop_type_ = 0; mouse_over_position_ = INVALID_POSTYPE_VALUE; } VOID ShopDialog::InitContainer() { InitRenderer(); } VOID ShopDialog::ReleaseContainer() { // 2012.02.09 / ¼ÛÂùÁ¾ / ½½·ÔÀ» Áö¿ì±â Àü¿¡ ¸¶¿ì½º·Î µé°í ÀÖ´Â ¾ÆÀÌÅÛÀ» ³õÁö ¾Ê¾Æ Å©·¡½¬ ³­ Çö»ó ¼öÁ¤ if (MouseHandler::Instance()->IsExistItemAtHand()) { MouseHandler::Instance()->RollbackItemAtHand(); } FlushUnitDraw(); SAFE_RELEASENDELETE( m_pItemUnitRenderer ); } VOID ShopDialog::InitRenderer() { assert( !m_pItemUnitRenderer ); m_pItemUnitRenderer = new ItemUnitRenderer; m_pItemUnitRenderer->Init( g_pSunRenderer, SCSlotContainer::GetMaxSlotNum() ); } VOID ShopDialog::Release() { ReleaseContainer(); } VOID ShopDialog::FlushUnitDraw() { SCItemSlot FromSlot; if (!GetMaxSlotNum()) { return; } for (int i = 0; i < GetMaxSlotNum(); ++i) { if (!IsEmpty(i)) { DeleteSlot(i, NULL); } } } ItemUnitRenderer * ShopDialog::GetItemUnitRender() const { return m_pItemUnitRenderer; } VOID ShopDialog::MessageProc( SI_MESSAGE * pMessage ) { assert(pMessage); TCHAR szMessage[INTERFACE_STRING_LENGTH]; TCHAR szResult[INTERFACE_STRING_LENGTH]; switch( pMessage->eResultMsg ) { case RT_MSG_LBUTTONCLICK: { POSTYPE pos = getCtrlIDToPos( pMessage->dwCtrlID ); if( pos >= SHOP_BT_SLOT_HISTORY1 && pos <= SHOP_BT_SLOT_HISTORY5) { if( ! IsEmpty(GetRealSlotPos(pos)) && m_eShopMethod == SHOP_METHOD_BUY) { NET_SEND_CG_ITEM_REPURCHASE_SYN(pos); } return; } if( pos < SHOP_MAX_SLOT ) { CControlWZ * pControl = getControl(pos); assert(pControl); RECT rcSlot = pControl->GetSizeRect(); MouseHandler::Instance()->ItemTransaction(SI_NPCSTORE, GetRealSlotPos(pos), &rcSlot); } else { if (MouseHandler::Instance()->IsExistItemAtHand()) { MouseHandler::Instance()->RollbackItemAtHand(); } switch (pos) { case SHOP_BT_EXIT: { g_InterfaceManager.ShowDialog(InterfaceManager::DIALOG_SHOP, FALSE); } break; case SHOP_CHECK_BUY: { MouseHandler::Instance()->SetMouseState(MouseHandler::BUY ); SetCheckTrade(SHOP_METHOD_BUY ); // ±¸ÀÔÇÒ ¾ÆÀÌÅÛÀ» ¼±ÅÃÇϼ¼¿ä. g_InterfaceManager.GetInterfaceString( eST_SELECT_BUY_ITEM, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage ); } break; case SHOP_CHECK_SELL: { MouseHandler::Instance()->SetMouseState(MouseHandler::SELL ); SetCheckTrade(SHOP_METHOD_SELL ); // ÆÇ¸ÅÇÒ ¾ÆÀÌÅÛÀ» ¼±ÅÃÇϼ¼¿ä. g_InterfaceManager.GetInterfaceString( eST_SELECT_SELL_ITEM, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage ); } break; case SHOP_CHECK_REPAIR: { MouseHandler::Instance()->SetMouseState(MouseHandler::REPAIR ); SetCheckTrade(SHOP_METHOD_REPAIR); // ¼ö¸®ÇÒ ¾ÆÀÌÅÛÀ» ¼±ÅÃÇϼ¼¿ä(¾ÆÁ÷ ±¸ÇöµÇÁö ¾ÊÀ½) g_InterfaceManager.GetInterfaceString( eST_SELECT_REPAIR_ITEM, szMessage, INTERFACE_STRING_LENGTH ); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage ); } break; case SHOP_BT_REPAIR_ALL: { // ¸ðµç ¾ÆÀÌÅÛÀ» ¼ö¸®ÇÑ´Ù.(¾ÆÁ÷ ±¸ÇöµÇÁö ¾ÊÀ½) g_InterfaceManager.GetInterfaceString( eST_REPAIR_ALL_ITEM, szMessage, INTERFACE_STRING_LENGTH ); MouseHandler::Instance()->SetPendingRepairSlotIdx(SI_EQUIPMENT); MouseHandler::Instance()->SetPendingRepairPos(0); MouseHandler::Instance()->SetPendingRepairAll(TRUE); TCHAR szTemp[INTERFACE_STRING_LENGTH]; // %s#%I64u ÇÏÀÓÀÌ ¼Ò¿ä µË´Ï´Ù. 5129 g_InterfaceManager.GetInterfaceString(5129, szTemp, INTERFACE_STRING_LENGTH); TCHAR repair_money_string[INTERFACE_STRING_LENGTH] = ""; GlobalFunc::SetPointText(repair_money_string, ItemManager::Instance()->GetPriceRepairItemAll(SI_EQUIPMENT)); // [%s] ¸¦ ¼ö¸® ÇϽðڽÀ´Ï±î?%s ÇÏÀÓÀÌ ¼Ò¿äµË´Ï´Ù. 5131 Sprintf(szResult, szTemp, szMessage, repair_money_string); if(ItemManager::Instance()->IsExistLimitedItem( SI_EQUIPMENT )) { ZeroMemory(szTemp, INTERFACE_STRING_LENGTH); // 6056 # ¸®¹ÌƼµå¾ÆÀÌÅÛÀº Àüü ¼ö¸® ½Ã ÀϰýÀûÀ¸·Î ÃÖ´ë³»±¸µµ°¡ °¨¼ÒÇÏ°Ô µË´Ï´Ù. g_InterfaceManager.GetInterfaceString(6056, szTemp, INTERFACE_STRING_LENGTH); strcat(szResult, szTemp); } uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM); if(pSystemMan) pSystemMan->Sys_Confirm(szResult, GlobalFunc::RepairConfirm); } break; case SHOP_CHECK_BERSERKER: m_iClickedIndexTab = 0; ClickTabCheckButton(m_iClickedIndexTab ); ReFreshRenderSlot(); if (MouseHandler::Instance()->IsExistItemAtHand()) MouseHandler::Instance()->GetMouseItem()->m_pRenderUnit->SetShow(TRUE); break; case SHOP_CHECK_DRAGON: m_iClickedIndexTab = 1; ClickTabCheckButton(m_iClickedIndexTab ); ReFreshRenderSlot(); if (MouseHandler::Instance()->IsExistItemAtHand()) MouseHandler::Instance()->GetMouseItem()->m_pRenderUnit->SetShow(TRUE); break; case SHOP_CHECK_VALKYRIE: m_iClickedIndexTab = 2; ClickTabCheckButton(m_iClickedIndexTab ); ReFreshRenderSlot(); if (MouseHandler::Instance()->IsExistItemAtHand()) MouseHandler::Instance()->GetMouseItem()->m_pRenderUnit->SetShow(TRUE); break; case SHOP_CHECK_WEAPON: m_iClickedIndexTab = 3; ClickTabCheckButton(m_iClickedIndexTab ); ReFreshRenderSlot(); if (MouseHandler::Instance()->IsExistItemAtHand()) MouseHandler::Instance()->GetMouseItem()->m_pRenderUnit->SetShow(TRUE); break; case SHOP_CHECK_GENERAL: m_iClickedIndexTab = 4; ClickTabCheckButton(m_iClickedIndexTab ); ReFreshRenderSlot(); if (MouseHandler::Instance()->IsExistItemAtHand()) MouseHandler::Instance()->GetMouseItem()->m_pRenderUnit->SetShow(TRUE); break; #ifdef _JBH_MOD_MONEY_OUTPUT case SHOP_TEXT_REPAIR_PAYMENT: { m_bCkickMoney = TRUE; } break; #endif default: break; } } } break; default: { SolarDialog::MessageProc( pMessage ); } break; } } //---------------------------------------------------------------------------- /** */ VOID ShopDialog::MouseOver_MsgProc( SI_MESSAGE * pMessage ) { switch( pMessage->eResultMsg ) { case RT_MSG_MOUSEOVER: { POSTYPE pos = getCtrlIDToPos( pMessage->dwCtrlID ); POSTYPE RelativePos = GetRealSlotPos(pos); if (pos >= 0 && pos < SHOP_MAX_SLOT + MAX_HISTORY_SLOT) { if (!IsEmpty( RelativePos )) { SCSlot & rSlot = GetSlot( RelativePos ); m_MouseOverObject.eMouseOverType = eMOUSE_OVER_SLOT; m_MouseOverObject.pSlot = &rSlot; mouse_over_position_ = pos; } else { m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } } else { m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } } break; } } //---------------------------------------------------------------------------- /** */ VOID ShopDialog::NetworkProc( MSG_BASE * pMsg ) { } CControlWZ * ShopDialog::getControl( POSTYPE AtPos ) { assert( AtPos < Dialog_MAX ); return GetControlWZ( m_wzId[AtPos] ); } POSTYPE ShopDialog::getCtrlIDToPos( WzID wzId ) { for( POSTYPE i = 0 ; i < Dialog_MAX ; ++i ) { if( m_wzId[i] == wzId ) { return i; } } return Dialog_MAX; } RC::eSLOT_INSERT_RESULT ShopDialog::InsertSlot( POSTYPE AtPos, SCSlot & rSlot ) { /// ½½·Ô¿¡ ³ÖÀ½ RC::eSLOT_INSERT_RESULT eInsertSlotResult = SCSlotContainer::InsertSlot( AtPos, rSlot ); // HEROÀ̱⠶§¹®¿¡ Render // ½Ã¸®¾óÀº ¼³Á¤µÇ¼­ ¿Â´Ù. /// Àκ¥Å丮 CControlWZ * pCtrl = getControl( GetRelativeSlotPos(AtPos) ); RECT rect = pCtrl->GetSizeRect(); SCSlot & rRealSlot = GetSlot(AtPos); if(m_pItemUnitRenderer) { m_pItemUnitRenderer->AddItemUnit( rSlot.GetSerial(), rSlot.GetCode(), &rect, &rRealSlot ,pCtrl); } else { assert(m_pItemUnitRenderer); } ReFreshRenderSlot(); return eInsertSlotResult; } BOOL ShopDialog::DeleteSlot( POSTYPE AtPos, SCSlot * pSlotOut ) { if (m_pItemUnitRenderer) m_pItemUnitRenderer->RemoveItemUnit( GetSlot(AtPos).GetSerial() ); SCSlotContainer::DeleteSlot( AtPos, pSlotOut ); ReFreshRenderSlot(); return TRUE; } VOID ShopDialog::OnRenderSolarDialog() { assert(m_pItemUnitRenderer); if (m_pItemUnitRenderer) { m_pItemUnitRenderer->Render(); } if ( this->m_MouseOverObject.eMouseOverType != eMOUSE_OVER_MAX) { if ( eMOUSE_OVER_SLOT == m_MouseOverObject.eMouseOverType ) { uiToolTipMan* pUIMan = (uiToolTipMan*)g_InterfaceManager.GetUserInterfaceManager(UIMAN_TOOLTIP); if( pUIMan ) { if( m_MouseOverObject.pSlot->GetPos() >= HISTORY_SLOT1 ) { pUIMan->RegisterItemslotInfoTooltipForShop(m_MouseOverObject.pSlot, kLimitStatCompositeItemPurchased); pUIMan->SetTooltipDialogID(GetDialogKey()); } else { BYTE shop_type_value = shop_type(); pUIMan->RegisterItemslotInfoTooltipForShop(m_MouseOverObject.pSlot, shop_type_value); pUIMan->SetTooltipDialogID(GetDialogKey()); } } if( GetAsyncKeyState( VK_CONTROL ) & 0x8000 ) { uiToolTipMan* pUIMan2 = (uiToolTipMan*)g_InterfaceManager.GetUserInterfaceManager( UIMAN_TOOLTIP2 ); if( pUIMan2 ) { pUIMan2->RegisterHeroItemInfoTooltipFromSlot( m_MouseOverObject.pSlot ); } } CursorChangeTransact::Instance()->ChangeTranaction( MouseCursor::eMouseCursor_Cursor_Cancle ); } } int iMouseX = Mouse::Instance()->GetMouseX(); int iMouseY = Mouse::Instance()->GetMouseY(); // ½ºÅµÃ³¸® // ÀÎÅÍÆäÀ̽º¿¡¼­ Dialog ¹ÙÅÁ¿¡¼­´Â Mouse Over°¡ ¿ÀÁö ¾Ê´Â´Ù. BOOL bMouseOver = FALSE; for (POSTYPE a = SHOP_BT_SLOT1; a < SHOP_BT_SLOT25+1 +MAX_HISTORY_SLOT; a++) { CControlWZ * pControl = getControl(a); RECT rc = pControl->GetSizeRect(); if (rc.left <= iMouseX && rc.right >= iMouseX) { if (rc.top <= iMouseY && rc.bottom >= iMouseY) { bMouseOver = TRUE; } } } if ( !bMouseOver ) { m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } updateToolTip(); } VOID ShopDialog::OnUpdateSolarDialog() { assert(m_pItemUnitRenderer); m_pItemUnitRenderer->Update(); updateMoney(); #ifdef _JBH_MOD_MONEY_OUTPUT #if defined(__KR) || defined(_KOREA) updateToolTip(); # endif // #if defined(__KR) || defined(_KOREA) #endif // _JBH_MOD_MONEY_OUTPUT } BOOL ShopDialog::GetControlsFromDialog() { m_pCtrlStaticRepairMoney = (CCtrlStaticWZ *)getControl(SHOP_TEXT_REPAIR_PAYMENT); m_pCtrlCheckShopButtons[SHOP_METHOD_BUY] = (CCtrlButtonCheckWZ *)getControl(SHOP_CHECK_BUY); m_pCtrlCheckShopButtons[SHOP_METHOD_SELL] = (CCtrlButtonCheckWZ *)getControl(SHOP_CHECK_SELL); m_pCtrlCheckShopButtons[SHOP_METHOD_REPAIR] = (CCtrlButtonCheckWZ *)getControl(SHOP_CHECK_REPAIR); m_pCtrlCheckTabShopButtons[Shop_Tab_1]= (CCtrlButtonCheckWZ *)getControl(SHOP_CHECK_BERSERKER); m_pCtrlCheckTabShopButtons[Shop_Tab_2] = (CCtrlButtonCheckWZ *)getControl(SHOP_CHECK_DRAGON); m_pCtrlCheckTabShopButtons[Shop_Tab_3] = (CCtrlButtonCheckWZ *)getControl(SHOP_CHECK_VALKYRIE); m_pCtrlCheckTabShopButtons[Shop_Tab_4] = (CCtrlButtonCheckWZ *)getControl(SHOP_CHECK_WEAPON); m_pCtrlCheckTabShopButtons[Shop_Tab_5] = (CCtrlButtonCheckWZ *)getControl(SHOP_CHECK_GENERAL); return TRUE; } VOID ShopDialog::SetCheckTrade(SHOP_METHOD eShopMethod ) { m_eShopMethod = eShopMethod; for (int i = 0; i < SHOP_METHOD_MAX; ++i) { if ( i == m_eShopMethod ) { m_pCtrlCheckShopButtons[eShopMethod]->SetCheckState( TRUE ); } else { m_pCtrlCheckShopButtons[i]->SetCheckState( FALSE ); } } } VOID ShopDialog::ClickTabCheckButton(int iIndex ) { if (iIndex >= Shop_Type_MAX) { return; } m_iClickedIndexTab = iIndex; m_TabNum = m_iClickedIndexTab * SHOP_MAX_SLOT; for (int i = 0; i < Shop_Type_MAX; ++i) { m_pCtrlCheckTabShopButtons[i]->SetCheckState(FALSE); } m_pCtrlCheckTabShopButtons[iIndex]->SetCheckState(TRUE); } VOID ShopDialog::OnShowWindow(BOOL val) { SolarDialog::OnShowWindow(val); if (val) { if ( !m_pItemUnitRenderer ) { InitContainer(); } RegisteAllHistoryItemSlot(); // â°íâÀÌ ¿­¸°»óŶó¸é #ifdef _NA_003923_20120130_GUILD_RENEWAL_MOD_WAREHOUSE_SLOT_NUM uiBankDialog *pBankDlg = GET_CAST_DIALOG(uiBankDialog, IM_BANK_MANAGER::BANK_DIALOG); #else BankDialog *pBankDlg = GET_CAST_DIALOG(BankDialog, IM_BANK_MANAGER::BANK_DIALOG); #endif //_NA_003923_20120130_GUILD_RENEWAL_MOD_WAREHOUSE_SLOT_NUM if (pBankDlg && pBankDlg->IsVisibleWindow()) { pBankDlg->SendWareHouseEnd(); } SettingShop(); UpdateData(TRUE); this->m_eShopMethod = SHOP_METHOD_NONE; this->SetCheckTrade(SHOP_METHOD_NONE); ReFreshRenderSlot(); ClickTabCheckButton(m_iClickedIndexTab ); g_InterfaceManager.ShowWindow(InterfaceManager::DIALOG_EQUIP, TRUE); g_InterfaceManager.AttachFirstDialog(InterfaceManager::DIALOG_SHOP); g_InterfaceManager.DeAttachFirstDialog(InterfaceManager::DIALOG_SHOP); UpdateData(FALSE); keyMsg msg; ZeroMemory(&msg,sizeof(msg)); msg.dwType=eDoType_dialog_shop; msg.wParam=InterfaceManager::DIALOG_SHOP; msg.DoSomething=GlobalFunc::DoShowWindow; g_KeyQueueManager.PushBack(msg); } else { ReleaseContainer(); m_iClickedIndexTab = 0; m_TabNum = m_iClickedIndexTab * SHOP_MAX_SLOT; this->m_eShopMethod = SHOP_METHOD_NONE; MouseHandler::Instance()->RemoveMouseState(MouseHandler::BUY); MouseHandler::Instance()->RemoveMouseState(MouseHandler::SELL); MouseHandler::Instance()->RemoveMouseState(MouseHandler::REPAIR); if (g_InterfaceManager.GetDialog(InterfaceManager::DIALOG_EQUIP)) g_InterfaceManager.ShowWindow(InterfaceManager::DIALOG_EQUIP, FALSE); g_KeyQueueManager.DeleteMsg(eDoType_dialog_shop); m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } } BOOL ShopDialog::UpdateData(BOOL bTake) { BOOL bRet = GetControlsFromDialog(); if ( !bRet ) { return FALSE; } return TRUE; } VOID ShopDialog::updateMoney() { if (g_pHero) { if(m_pCtrlStaticRepairMoney) { TCHAR szMoney[INTERFACE_STRING_LENGTH + 1] = {0,}; TCHAR szFinal[INTERFACE_STRING_LENGTH + 1] = {0,}; TCHAR money_type[INTERFACE_STRING_LENGTH + 1] = {0,}; TCHAR temp_string[INTERFACE_STRING_LENGTH + 1] = {0,}; NUMBERFMT nFmt = { 0, 0, 3, _T("."), _T(","), 1 }; // µ·À» ¼ÂÆÃÇÑ´Ù. if (shop_type_ == SHOP_TYPE_OF_ITEM) { int item_count = ItemManager::Instance()->GetOverlapItemCount(currency_item_code_); Sprintf(szMoney, _T("%d"), item_count); g_InterfaceManager.GetInterfaceString(47642, money_type); //47642 %s °³ } else if (shop_type_ == SHOP_TYPE_OF_ACCUMULATE) { int gain_point = 0; uiCharacterStatusMan* character_status_manager = GET_DIALOG_MANAGER(uiCharacterStatusMan, UIMAN_CHARACTERSTATUS); if (character_status_manager != NULL) { gain_point = character_status_manager->accumulate_point(); } Sprintf(szMoney, _T("%d"), gain_point); g_InterfaceManager.GetInterfaceString(47643, money_type); //47643 %s Æ÷ÀÎÆ® } else if (shop_type_ == SHOP_TYPE_OF_CURRENCY) { #ifdef _NA004034_20120102_POINT_WALLET_SYSTEM int gain_point = 0; uiCharacterStatusCurrencyInfo* ui_currency_info = GET_CAST_DIALOG(uiCharacterStatusCurrencyInfo, uiCharacterStatusCurrencyInfo::kDialog_ID); if (ui_currency_info != NULL) { // È­Æó Äڵ忡 ÇØ´çµÇ´Â Æ÷ÀÎÆ®Á¤º¸¸¦ °¡Á®¿È DWORD currency_code = currency_item_code(); uiCharacterStatusCurrencyInfo::CurrencyPointInfo* currency_point_info = ui_currency_info->GetCurrencyPointInfo(currency_code); if (currency_point_info != NULL) { // È­ÆóÆ÷ÀÎÆ® ¼¼ÆÃ gain_point = currency_point_info->currency_point; } } Sprintf(szMoney, _T("%d"), gain_point); g_InterfaceManager.GetInterfaceString(47642, money_type); //47642 %s °³ #endif //_NA004034_20120102_POINT_WALLET_SYSTEM } else { Sprintf(szMoney, _T("%I64u"), g_pHero->GetMoney()); g_InterfaceManager.GetInterfaceString(47641, money_type); //47641 %s ÇÏÀÓ } ::GetNumberFormat( LOCALE_SYSTEM_DEFAULT, NULL, szMoney, &nFmt, szFinal, sizeof(szFinal)); Sprintf(temp_string, money_type, szFinal); #ifdef _JBH_MOD_MONEY_OUTPUT DWORD dwColor = GlobalFunc::GetMoneyColor( g_pHero->GetMoney() ); m_pCtrlStaticRepairMoney->SetTextColor( dwColor ); #else m_pCtrlStaticRepairMoney->SetTextColor(RGBA(255,255,255,255)); #endif GlobalFunc::SetCaption( m_pCtrlStaticRepairMoney, temp_string ); } } } // ½ÇÁ¦ ½½·ÔÁ¤º¸°ü·ÃÇÑ À§Ä¡ POSTYPE ShopDialog::GetRealSlotPos( POSTYPE pos ) { if( pos >= SHOP_BT_SLOT_HISTORY1 ) { return pos + 100; } else { return pos + m_TabNum; } } // ÀÎÅÍÆäÀ̽º ÄÁÆ®·Ñ À§Ä¡. POSTYPE ShopDialog::GetRelativeSlotPos( POSTYPE pos ) { if( pos >= HISTORY_SLOT1 ) { return pos - 100; } else { return pos % SHOP_MAX_SLOT; } } BOOL ShopDialog::AddItem(eSHOP_TAB eShopTabIndex, POSTYPE AtPos, SHOPINFO::SHOP_ITEM * pShopItem) { if ( 0 == pShopItem->m_SellItemCode ) return FALSE; int TabNum = eShopTabIndex * SHOP_MAX_SLOT; BASE_ITEMINFO * pBaseItemInfo = ItemInfoParser::Instance()->GetItemInfo( pShopItem->m_SellItemCode ); if (!pBaseItemInfo) { assert(!"À߸øµÈ ¾ÆÀÌÅÛÀÌ´Ù.!"); return FALSE; } static DWORD SERIAL = 1000000; SCItemSlot ItemSlot; ItemSlot.SetSlotType(ST_ITEM); nsSlot::ItemTypeChanger::MakeItemSlotByType(&ItemSlot, pShopItem->m_SellItemCode, pShopItem->m_SellItemNum, pShopItem->item_type_); ItemSlot.SetNum(pShopItem->m_SellItemNum); ItemSlot.SetSerial(SERIAL++); #ifdef _NA_007444_20140722_TIMELIMITITEM_SELL_ON_SHOP ItemSlot.SetDateTime(pShopItem->timelimit_ * 60); #endif //_NA_007444_20140722_TIMELIMITITEM_SELL_ON_SHOP InsertSlot( TabNum + AtPos, ItemSlot); return TRUE; } BOOL ShopDialog::SettingShop() { m_pShopListInfo = ShopInfoParser::Instance()->GetShopList( GetShopID() ); if (!m_pShopListInfo) { return FALSE; } currency_item_code_ = m_pShopListInfo->GetCurrencyItemCode(); shop_type_ = m_pShopListInfo->GetShopType(); SetCostIconFromType(); int iCnt = 0; int iTab1Cnt = 0; int iTab2Cnt = 0; int iTab3Cnt = 0; int iTab4Cnt = 0; int iTab5Cnt = 0; m_pShopListInfo->SetFirstItem(); SHOPINFO::SHOP_ITEM * pShopItem = NULL; for ( int i = 0; i < SHOPINFO::_MAX_TAB_NUM; ++i) { for ( int j = 0; j < SHOPINFO::_MAX_SELLITEM_NUM; ++j ) { SHOPINFO::SHOP_ITEM * pShopItem = m_pShopListInfo->GetItemForIndex(i, j); if (iTab1Cnt < SHOP_MAX_SLOT) { BOOL bRet = AddItem((eSHOP_TAB)i, j, pShopItem); prices_[i][j] = pShopItem->item_cost_; } else { prices_[i][j] = 0; } } } ReFreshRenderSlot(); return TRUE; } VOID ShopDialog::ReFreshRenderSlot() { ItemUnitRenderer::RenderUnit * pRender = NULL; RECT rcSlot; CControlWZ * pCtrl = NULL; for (int i = 0; i < GetMaxSlotNum(); ++i) { SCSlot & rSlot = SCSlotContainer::GetSlot(i); if( (i >= m_TabNum && i < m_TabNum+SHOP_MAX_SLOT) || (i >= HISTORY_SLOT1 && i<= HISTORY_SLOT5) ) { // º¸¿©Áà¾ßÇÒ ¸ñ·Ï if ( !IsEmpty(i) ) { if(!m_pItemUnitRenderer) continue; pRender = m_pItemUnitRenderer->GetItemUnit( rSlot.GetSerial() ); if (!pRender ) { pCtrl = getControl( GetRelativeSlotPos(i) ); rcSlot = pCtrl->GetSizeRect(); pRender = m_pItemUnitRenderer->AddItemUnit( rSlot.GetSerial(), rSlot.GetCode(), &rcSlot, &rSlot ,pCtrl); } if (pRender) { pRender->SetShow(TRUE); } else { assert(!"ShopDialog - RenderUnit is Null Pointer"); } } } else { // º¸¿©ÁöÁö ¸»¾Æ¾ß ÇÒ ¸ñ·Ï if ( !IsEmpty(i) ) { if(!m_pItemUnitRenderer) continue; pRender = m_pItemUnitRenderer->GetItemUnit( rSlot.GetSerial() ); if (!pRender ) { pCtrl = getControl( GetRelativeSlotPos(i) ); rcSlot = pCtrl->GetSizeRect(); m_pItemUnitRenderer->AddItemUnit( rSlot.GetSerial(), rSlot.GetCode(), &rcSlot, &rSlot ,pCtrl); } if (pRender) pRender->SetShow(FALSE); } } } } VOID ShopDialog::SetShopID(DWORD dwID) { m_dwShopID = dwID; } DWORD ShopDialog::GetShopID() const { return m_dwShopID; } #ifdef _JBH_MOD_MONEY_OUTPUT void ShopDialog::updateToolTip() { int iMouseX = Mouse::Instance()->GetMouseX(); int iMouseY = Mouse::Instance()->GetMouseY(); // ½ºÅµÃ³¸® // ÀÎÅÍÆäÀ̽º¿¡¼­ Dialog ¹ÙÅÁ¿¡¼­´Â Mouse Over°¡ ¿ÀÁö ¾Ê´Â´Ù. BOOL bMouseOver = FALSE; // È¿À²À» À§ÇÏ¿© SHOP_TEXT_REPAIR_PAYMENT ÄÁÆ®·Ñ¸¸ °Ë»çÇÔ. CControlWZ * pControl = getControl(SHOP_TEXT_REPAIR_PAYMENT); if(pControl) { RECT rc = pControl->GetSizeRect(); if (rc.left <= iMouseX && rc.right >= iMouseX) { if (rc.top <= iMouseY && rc.bottom >= iMouseY) { if( m_dwPendingTick == 0) { m_dwPendingTick = clock_function::GetTickCount(); } bMouseOver = TRUE; } else { m_dwPendingTick = 0; m_bCkickMoney = FALSE; } } else { m_dwPendingTick = 0; m_bCkickMoney = FALSE; } } DWORD dwTick = 0; if( m_dwPendingTick > 0 ) { dwTick = clock_function::GetTickCount() - m_dwPendingTick; } if ( ( bMouseOver && dwTick > 2000 ) || m_bCkickMoney ) { if (g_pHero && (g_pHero->GetMoney() > 0)) { TCHAR szMessage[INTERFACE_STRING_LENGTH]; memset(szMessage , 0 , sizeof( szMessage ) ); GlobalFunc::ChangeMoneyToStringMoney( g_pHero->GetMoney() , szMessage ); uiToolTipMan* pUIMan = (uiToolTipMan*)g_InterfaceManager.GetUserInterfaceManager(UIMAN_TOOLTIP); if( pUIMan ) { pUIMan->InitTooltip(); pUIMan->RegisterTooltip(szMessage ,_tcslen(szMessage) , 25 ); pUIMan->SetTooltipDialogID( GetDialogKey() ); } } } } #endif RC::eSLOT_INSERT_RESULT ShopDialog::PushHistorySlot(SCSlot & rSlot) { int iCount = 0; //½½·Ô¿¡ ÀÖ´Â°Ç ´Ù Áö¿ì°í, m_ItemHistorySlot¿¡ Á¤º¸¸¦ ä¿ö ³Ö´Â´Ù for( int i =0; i < MAX_HISTORY_SLOT; ++i) { SCItemSlot & rItemSlot = (SCItemSlot &)GetSlot(HISTORY_SLOT1 + i); if( rItemSlot.GetCode() ) { iCount++; } DeleteSlot(HISTORY_SLOT1 + i,NULL); } //ä¿öÁø Á¤º¸¸¦ ½½·Ô¿¡ ³Ö´Â´Ù. int insertCount =0; for( int i =0; i < MAX_HISTORY_SLOT; ++i ) { // not insert latest Item if( iCount == 5 && i ==0 ) continue; if( m_ItemHistorySlot[i].GetCode() ) { InsertSlot(HISTORY_SLOT1 + insertCount, m_ItemHistorySlot[i]); m_ItemHistorySlot[insertCount].Copy(m_ItemHistorySlot[i]); //memcpy(&m_ItemHistorySlot[insertCount], &m_ItemHistorySlot[i], sizeof(SCItemSlot)); insertCount++; } } //¹è¿­ÀÇ ¹üÀ§¸¦ ³Ñ¾î¼¹À»°æ¿ì ¹æÁö if (MAX_HISTORY_SLOT <= insertCount) { return RC_INSERT_SLOT_FAILED; } // static DWORD dwHistorySlotIndex = 2000000; rSlot.SetSerial(dwHistorySlotIndex++); InsertSlot(HISTORY_SLOT1 + insertCount, rSlot); SCItemSlot& item_slot = (SCItemSlot&)rSlot; m_ItemHistorySlot[insertCount].Copy(item_slot); //memcpy(&m_ItemHistorySlot[insertCount], &rSlot, sizeof(SCItemSlot)); return RC_INSERT_SLOT_SUCCESS; } BOOL ShopDialog::PopHistorySlot() { // popÇÒ ¾ÆÀÌÅÛÀ» »©°í ¸ðÀº´Ù. int insertCount = 0; for( int i =0; i < MAX_HISTORY_SLOT; ++i) { if( m_PendingHistorySlotPos == HISTORY_SLOT1 + i) { DeleteSlot(HISTORY_SLOT1 +i , NULL); continue; } SCItemSlot & rItemSlot = (SCItemSlot &)GetSlot(HISTORY_SLOT1 + i); if( rItemSlot.GetCode()) { m_ItemHistorySlot[insertCount].Copy(rItemSlot); //memcpy(&m_ItemHistorySlot[insertCount], &rItemSlot, sizeof(SCItemSlot)); insertCount++; } DeleteSlot(HISTORY_SLOT1 +i , NULL); } // insertCount µÚÀÇ ¾ÆÀÌÅÛÀº clear for( int i = insertCount; i < MAX_HISTORY_SLOT; ++i) { m_ItemHistorySlot[i].Clear(); } //»õ·Ó°Ô ¸¸µé¾îÁø m_ItemHistorySlotÀ» ½½·Ô¿¡ ³Ö¾îÁØ´Ù. insertCount = 0; for( int i =0; i < MAX_HISTORY_SLOT; ++i) { if( m_ItemHistorySlot[i].GetCode() ) { InsertSlot(HISTORY_SLOT1 + insertCount, m_ItemHistorySlot[i]); insertCount++; } } return TRUE; } void ShopDialog::RegisteAllHistoryItemSlot() { for( int i =0; i< MAX_HISTORY_SLOT; ++i ) { DeleteSlot(HISTORY_SLOT1 +i , NULL); } int insertCount =0; for( int i =0; i GetMouseX(); int iMouseY = Mouse::Instance()->GetMouseY(); // ½ºÅµÃ³¸® // ÀÎÅÍÆäÀ̽º¿¡¼­ Dialog ¹ÙÅÁ¿¡¼­´Â Mouse Over°¡ ¿ÀÁö ¾Ê´Â´Ù. bool bMouseOver = false; for (POSTYPE a = 0; a < Dialog_MAX; a++) { CControlWZ * pControl = getControl(a); if(pControl) { RECT rc = pControl->GetSizeRect(); if (rc.left <= iMouseX && rc.right >= iMouseX) { if (rc.top <= iMouseY && rc.bottom >= iMouseY) { bMouseOver = true; break; } } } } if (bMouseOver) { CControlWZ* control = getControl(SHOP_PIC_COST_ICON); uiToolTipMan* tooltip_manager = (uiToolTipMan*)g_InterfaceManager.GetUserInterfaceManager(UIMAN_TOOLTIP); if (control) { RECT control_rect = control->GetSizeRect(); DWORD tooltip_string_code = 0; if (control_rect.left <= iMouseX && control_rect.right >= iMouseX && control_rect.top <= iMouseY && control_rect.bottom >= iMouseY) { switch (shop_type()) { case SHOP_TYPE_OF_NARMAL://ÀÏ¹Ý tooltip_string_code = 999; //999 ÇÏÀÓ break; case SHOP_TYPE_OF_ITEM://¾ÆÀÌÅÛ { BASE_ITEMINFO* item_info = ItemInfoParser::Instance()->GetItemInfo(currency_item_code()); if (item_info) { TCHAR item_name[INTERFACE_STRING_LENGTH] = {0,}; g_InterfaceManager.GetItemName(item_info->m_Code, item_name, INTERFACE_STRING_LENGTH); if (tooltip_manager) { tooltip_manager->RegisterTooltipFormat(item_name, 0, 0); tooltip_manager->SetTooltipDialogID(GetDialogKey()); } } } break; case SHOP_TYPE_OF_ACCUMULATE://Á¢¼Ó Æ÷ÀÎÆ® tooltip_string_code = 47644; //47644 Á¢¼ÓÆ÷ÀÎÆ® break; #ifdef _NA004034_20120102_POINT_WALLET_SYSTEM case SHOP_TYPE_OF_CURRENCY://È­Æó Æ÷ÀÎÆ® { uiCharacterStatusCurrencyInfo* ui_currency_info = GET_CAST_DIALOG(uiCharacterStatusCurrencyInfo, uiCharacterStatusCurrencyInfo::kDialog_ID); if (ui_currency_info != NULL) { uiCharacterStatusCurrencyInfo::CurrencyPointInfo* currency_point_info = ui_currency_info->GetCurrencyPointInfo(currency_item_code()); if (currency_point_info != NULL) { tooltip_string_code = currency_point_info->currency_info->currency_name_code; } } } break; #endif //_NA004034_20120102_POINT_WALLET_SYSTEM } } if (tooltip_string_code > 0 && tooltip_manager) { tooltip_manager->SetTooltipDialogID(GetDialogKey()); tooltip_manager->RegisterTooltipWithStringCode(tooltip_string_code); } } } } void ShopDialog::SetCostIconFromType() { if (cost_icon_contol_) { DWORD texture_number = 0; switch (shop_type()) { case SHOP_TYPE_OF_NARMAL://ÀÏ¹Ý texture_number = 33501; break; case SHOP_TYPE_OF_ITEM://¾ÆÀÌÅÛ { BASE_ITEMINFO* item_info = ItemInfoParser::Instance()->GetItemInfo(currency_item_code()); if (item_info) { texture_number = item_info->m_wVICode; } } break; case SHOP_TYPE_OF_ACCUMULATE://Á¢¼Ó Æ÷ÀÎÆ® texture_number = 32950; break; #ifdef _NA004034_20120102_POINT_WALLET_SYSTEM case SHOP_TYPE_OF_CURRENCY://È­Æó Æ÷ÀÎÆ® { uiCharacterStatusCurrencyInfo* ui_currency_info = GET_CAST_DIALOG(uiCharacterStatusCurrencyInfo, uiCharacterStatusCurrencyInfo::kDialog_ID); if (ui_currency_info != NULL) { uiCharacterStatusCurrencyInfo::CurrencyPointInfo* currency_point_info = ui_currency_info->GetCurrencyPointInfo(currency_item_code()); if (currency_point_info != NULL) { texture_number = currency_point_info->currency_info->currency_icon_code; } } } break; #endif //_NA004034_20120102_POINT_WALLET_SYSTEM } SetControlImage(cost_icon_contol_->GetCtrlID(), texture_number, 0, 0, 32, 32); } }