Files
Sun1602/Client/GameClient/Interface/uiVendorBuy/uiVendorBuy_dialogproc.cpp
T
2022-10-26 12:25:11 +08:00

873 lines
25 KiB
C++

//------------------------------------------------------------------------------
// uiVendorBuy_dialogproc.cpp
// (C) 2005 ckbang
//------------------------------------------------------------------------------
#include "SunClientPrecompiledHeader.h"
#include "uiVendorMan/uiVendorMan.h"
#include "uiVendorBuy.h"
#include "ItemUnitRenderer.h"
#include "Mouse.h"
#include "MouseHandler.h"
#include "uiVendorSell/uiVendorSell_def.h"
#include "ChatDialog.h"
#include "ObjectManager.h"
#include "slotkeygenerator.h"
#include "CursorChangeTransact.h"
#include "hero.h"
#include "Application.h"
#include "interfacemanager.h"
#include "globalfunc.h"
#include "uiToolTipMan/uiToolTipMan.h"
#include "HeroActionInput.h"
#include "uiChatMan/uiChatMan_def.h"
#ifdef _JBH_MOD_VENDOR_SELECT_BUY_NUM
#include "uiVendorBuyPopup.h"
#endif
#include "GameFunc.h"
#ifdef _NA_008678_20160203_ADD_HEIM_TRADINGVOLUME_NOTIFICATION_OPTION
#include "uiSystemMan/uiSystemMan.h"
#endif // _NA_008678_20160203_ADD_HEIM_TRADINGVOLUME_NOTIFICATION_OPTION
//------------------------------------------------------------------------------
#ifdef _NA_005988_20120901_VENDOR_SEARCH_SYSTEM
#include "../uiVendorMan/uiVendorSearch/uiVendorSearch.h"
#endif
WzID uiVendorBuy::m_wzId[DIALOG_MAX] =
{
#ifdef _NA_0_20101124_VENDOR_SLOT_COUNT_INCREASE
StrToWzID("B005"), // DIALOG_SLOT00
StrToWzID("B006"), // DIALOG_SLOT01
StrToWzID("B008"), // DIALOG_SLOT02
StrToWzID("B007"), // DIALOG_SLOT03
StrToWzID("B011"), // DIALOG_SLOT04
StrToWzID("B012"), // DIALOG_SLOT05
StrToWzID("B010"), // DIALOG_SLOT06
StrToWzID("B009"), // DIALOG_SLOT07
StrToWzID("B020"), // DIALOG_SLOT10
StrToWzID("B019"), // DIALOG_SLOT11
StrToWzID("B018"), // DIALOG_SLOT12
StrToWzID("B017"), // DIALOG_SLOT13
StrToWzID("B015"), // DIALOG_SLOT14
StrToWzID("B016"), // DIALOG_SLOT15
StrToWzID("B014"), // DIALOG_SLOT16
StrToWzID("B013"), // DIALOG_SLOT17
StrToWzID("B029"), // DIALOG_SLOT20
StrToWzID("B030"), // DIALOG_SLOT21
StrToWzID("B031"), // DIALOG_SLOT22
StrToWzID("B032"), // DIALOG_SLOT23
StrToWzID("B033"), // DIALOG_SLOT24
StrToWzID("B034"), // DIALOG_SLOT25
StrToWzID("B035"), // DIALOG_SLOT26
StrToWzID("B036"), // DIALOG_SLOT27
StrToWzID("B028"), // DIALOG_SLOT30
StrToWzID("B027"), // DIALOG_SLOT31
StrToWzID("B026"), // DIALOG_SLOT32
StrToWzID("B025"), // DIALOG_SLOT33
StrToWzID("B023"), // DIALOG_SLOT34
StrToWzID("B024"), // DIALOG_SLOT35
StrToWzID("B022"), // DIALOG_SLOT36
StrToWzID("B021"), // DIALOG_SLOT37
StrToWzID("B037"), // DIALOG_SLOT30
StrToWzID("B038"), // DIALOG_SLOT31
StrToWzID("B039"), // DIALOG_SLOT32
StrToWzID("B040"), // DIALOG_SLOT33
StrToWzID("B041"), // DIALOG_SLOT34
StrToWzID("B042"), // DIALOG_SLOT35
StrToWzID("B043"), // DIALOG_SLOT46
StrToWzID("B044"), // DIALOG_SLOT47
#else
StrToWzID("B005"), // DIALOG_SLOT00
StrToWzID("B006"), // DIALOG_SLOT01
StrToWzID("B007"), // DIALOG_SLOT02
StrToWzID("B008"), // DIALOG_SLOT03
StrToWzID("B009"), // DIALOG_SLOT04
StrToWzID("B010"), // DIALOG_SLOT05
StrToWzID("B011"), // DIALOG_SLOT10
StrToWzID("B012"), // DIALOG_SLOT11
StrToWzID("B013"), // DIALOG_SLOT12
StrToWzID("B014"), // DIALOG_SLOT13
StrToWzID("B015"), // DIALOG_SLOT14
StrToWzID("B016"), // DIALOG_SLOT15
StrToWzID("B017"), // DIALOG_SLOT20
StrToWzID("B018"), // DIALOG_SLOT21
StrToWzID("B019"), // DIALOG_SLOT22
StrToWzID("B020"), // DIALOG_SLOT23
StrToWzID("B021"), // DIALOG_SLOT24
StrToWzID("B022"), // DIALOG_SLOT25
StrToWzID("B023"), // DIALOG_SLOT30
StrToWzID("B024"), // DIALOG_SLOT31
StrToWzID("B025"), // DIALOG_SLOT32
StrToWzID("B026"), // DIALOG_SLOT33
StrToWzID("B027"), // DIALOG_SLOT34
StrToWzID("B028"), // DIALOG_SLOT35
#endif //_NA_0_20101124_VENDOR_SLOT_COUNT_INCREASE
StrToWzID("T006"), // DIALOG_TXT_SELLITEM,
StrToWzID("e000"), // DIALOG_EDIT_SELLMSG
StrToWzID("T001"), // DIALOG_TXT_SELLMSG,
StrToWzID("T002"), // DIALOG_TXT_ITEMCOUNTS,
StrToWzID("T004"), // DIALOG_TXT_ITEMVALUE,
StrToWzID("T003"), // DIALOG_TXTVALUE_ITEMCOUNTS,
StrToWzID("T005"), // DIALOG_TXTVALUE_ITEMVALUTE,
StrToWzID("S001"), // DIALOG_TXT_ITEM_UNIT_PRICE,
StrToWzID("TI01"), // DIALOG_BTN_ITEMBUY,
StrToWzID("B000"), // DIALOG_EXIT,
};
//------------------------------------------------------------------------------
/**
called to show request
*/
void
uiVendorBuy::OnShowWindow( BOOL val )
{
TCHAR szMessage[INTERFACE_STRING_LENGTH];
if (val)
{
// 이러한 경우에는 개인상점 구매창을 열 수 없다.
if (g_pHero == NULL)
{
this->ShowInterface(FALSE);
return;
}
if (g_pHero->GetBeHaveState() != PLAYER_BEHAVE_IDLE_STATE)
{
ChatDialog* pChatDlg = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG);
if (pChatDlg)
{
pChatDlg->SetFocusChatEdit();
pChatDlg->ShowWindow(TRUE);
}
// 현재 다른 용무 중으로 인하여 개인 상점을 시작할 수 없습니다.
g_InterfaceManager.GetInterfaceString( eST_CANNOT_CREATE_VENDOR, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
}
if (this->GetUIMan()->IsShowDialog(InterfaceManager::DIALOG_BATTLEZONE_CREATE))
{
this->ShowInterface(FALSE);
ChatDialog* pChatDlg = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG);
if (pChatDlg)
{
pChatDlg->SetFocusChatEdit();
pChatDlg->ShowWindow(TRUE);
}
// 배틀 존 생성중에는 개인상점 구매창을 열 수 없습니다.
const int c_iNotOpenVendorInCreateBattleZone = 70413;
g_InterfaceManager.GetInterfaceString( c_iNotOpenVendorInCreateBattleZone, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
this->GetUIMan()->ShowWindow(InterfaceManager::DIALOG_EQUIP, FALSE);
return;
}
if (this->GetUIMan()->IsShowDialog(InterfaceManager::DIALOG_BATTLEZONE_LIST))
{
this->ShowInterface(FALSE);
ChatDialog* pChatDlg = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG);
if (pChatDlg)
{
pChatDlg->SetFocusChatEdit();
pChatDlg->ShowWindow(TRUE);
}
// 배틀 존 목록을 보고계시는 동안 개인상점 구매창을 열 수 없습니다.
const int c_iNotOpenVendorInBattleZoneList = 70412;
g_InterfaceManager.GetInterfaceString( c_iNotOpenVendorInBattleZoneList, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
this->GetUIMan()->ShowWindow(InterfaceManager::DIALOG_EQUIP, FALSE);
return;
}
if (this->GetUIMan()->IsShowDialog(InterfaceManager::DIALOG_BATTLE_LOBBY))
{
this->ShowInterface(FALSE);
ChatDialog* pChatDlg = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG);
if (pChatDlg)
{
pChatDlg->SetFocusChatEdit();
pChatDlg->ShowWindow(TRUE);
}
// 배틀 존 대기실에서는 개인상점 구매창을 열 수 없습니다.
const int c_iNotOpenVendorInBattleZone = 70411;
g_InterfaceManager.GetInterfaceString( c_iNotOpenVendorInBattleZone, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
this->GetUIMan()->ShowWindow(InterfaceManager::DIALOG_EQUIP, FALSE);
return;
}
if (this->GetUIMan()->IsShowDialog(InterfaceManager::DIALOG_SHOP))
{
this->ShowInterface(FALSE);
ChatDialog* pChatDlg = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG);
if (pChatDlg)
{
pChatDlg->SetFocusChatEdit();
pChatDlg->ShowWindow(TRUE);
}
// 상점에서 용무를 마치기 전에는 개인상점 구매창을 열 수 없습니다.
const int c_iNotOpenVendor = 70410;
g_InterfaceManager.GetInterfaceString( c_iNotOpenVendor, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage);
this->GetUIMan()->ShowWindow(InterfaceManager::DIALOG_EQUIP, FALSE);
return;
}
ClearCheckItem();
POINT pt = m_pVendorMan->GetWinPos();
GetDialogWZ()->MoveWindowWZ((float)pt.x, (float)pt.y);
this->m_curPos = 0;
this->m_curMoney = 0;
this->m_curAmouts = 0;
#ifdef _NA_005988_20120901_VENDOR_SEARCH_SYSTEM
uiVendorSearch * pVendorSearch = GET_CAST_DIALOG( uiVendorSearch, IM_VENDOR_MANAGER::VENDOR_SEARCH );
if(pVendorSearch && pVendorSearch->IsVisibleWindow())
{
m_curPos = pVendorSearch->GetVendorSelectItem().BuySlotPos_;
m_curMoney = pVendorSearch->GetVendorSelectItem().price * pVendorSearch->GetVendorSelectItem().count;
m_curAmouts = pVendorSearch->GetVendorSelectItem().count;
}
//보호코드
this->m_curPos = this->m_curPos > 40 ? 0 : this->m_curPos ;
#endif
this->OffLock();
TCHAR szMessage[INTERFACE_STRING_LENGTH];
g_InterfaceManager.GetInterfaceString( eST_VENDOR_TEXT, szMessage, INTERFACE_STRING_LENGTH );
StrnCopy(this->m_szVendorMsg, szMessage, MAX_VENDOR_TITLE_LENGTH);
CCtrlStaticWZ * pControl;
pControl = (CCtrlStaticWZ*)getControl(DIALOG_EDIT_SELLMSG);
if (pControl)
{
GlobalFunc::SetCaption( pControl, this->m_szVendorMsg );
pControl->SetTextColor(WzColor_RGBA( 152, 208, 142, 255 ));
}
this->ResetItemRenderer();
keyMsg msg;
ZeroMemory(&msg,sizeof(msg));
msg.dwType=eDoType_dialog_vendor_buy;
msg.wParam=InterfaceManager::DIALOG_VENDOR_BUY;
msg.DoSomething=GlobalFunc::DoVentorBuy;
g_KeyQueueManager.PushBack(msg);
this->GetUIMan()->AttachFirstDialog(InterfaceManager::DIALOG_VENDOR_BUY);
g_pHero->StopMove();
g_pHero->ResetMoveFlag();
g_HeroInput.SetAutoRun(FALSE);
g_HeroInput.SetFollowState(FALSE);
g_HeroInput.SetAutoAttack(FALSE);
}
else
{
#ifdef _JBH_MOD_VENDOR_SELECT_BUY_NUM
uiBase* pVendorDlg = GET_DIALOG( IM_VENDOR_MANAGER::VENDOR_BUY_POPUP );
if( pVendorDlg)
{
pVendorDlg->ShowWindow(FALSE);
}
#endif
g_KeyQueueManager.DeleteMsg(eDoType_dialog_vendor_buy);
ChatDialog* pChatDlg = GET_CAST_DIALOG(ChatDialog, IM_CHAT_MANAGER::CHAT_DIALOG);
if (pChatDlg)
{
pChatDlg->SetFocusChatEdit();
pChatDlg->ShowWindow(FALSE);
}
if (g_pHero)
{
g_pHero->SetBeHaveState(PLAYER_BEHAVE_IDLE_STATE);
}
FlushUnitDraw();
this->GetUIMan()->DeAttachFirstDialog(InterfaceManager::DIALOG_VENDOR_BUY);
m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX;
RECT rc;
this->GetDialogWZ()->GetClientRect(&rc);
POINT pt = { rc.left, rc.top };
this->m_pVendorMan->SetWinPos(pt);
}
this->GetUIMan()->ShowWindow(InterfaceManager::DIALOG_EQUIP, val);
}
//------------------------------------------------------------------------------
/**
*/
void
uiVendorBuy::Exit()
{
this->ShowInterface(FALSE);
FlushUnitDraw();
this->QueryViewEnd();
}
//------------------------------------------------------------------------------
/**
*/
void
uiVendorBuy::MessageProc( SI_MESSAGE * pMessage )
{
if (this->IsLock())
return;
TCHAR szMessage[INTERFACE_STRING_LENGTH];
switch( pMessage->eResultMsg )
{
case RT_MSG_LBUTTONCLICK:
{
POSTYPE pos = getCtrlIDToPos( pMessage->dwCtrlID );
if( pos < POS_MAX_SLOT )
{
SCSlot& rSlot = this->GetSlot(pos);
if (rSlot.GetCode())
{
// 슬롯에 채워져 있는 아이템을 클릭했을 경우
if (MouseHandler::Instance()->IsExistItemAtHand())
{
MouseHandler::Instance()->RollbackItemAtHand();
}
uiSCItemSlot& rItemSlot = (uiSCItemSlot&)rSlot;
if (rItemSlot.CanEquip())
{
this->m_curAmouts = 1;
}
else
{
#ifdef _JBH_MOD_VENDOR_SELECT_BUY_NUM
if( rItemSlot.GetNum() > 1 && g_Input.GetState(DIK_LSHIFT, KS_KEY) )
{
uiVendorBuyPopup* pVendorBuyPopup = GET_CAST_DIALOG( uiVendorBuyPopup, IM_VENDOR_MANAGER::VENDOR_BUY_POPUP );
if ( pVendorBuyPopup )
{
pVendorBuyPopup->ShowWindow(TRUE);
pVendorBuyPopup->SetMaxNum( rItemSlot.GetNum() );
pVendorBuyPopup->SetCurSlotPos( pos );
}
}
else
{
this->m_curAmouts = rItemSlot.GetNum();
}
#else
this->m_curAmouts = rItemSlot.GetNum();
#endif
}
this->m_curMoney = rItemSlot.GetMoney();
this->m_curPos = pos;
}
}
switch( getCtrlIDToPos( pMessage->dwCtrlID ) )
{
// 닫기
case DIALOG_EXIT:
{
this->ShowInterface(FALSE);
this->QueryViewEnd();
}
break;
case DIALOG_BTN_ITEMBUY:
{
if (!this->m_curMoney)
{
// 우선, 구입하려는 아이템을 선택하세요.
const int c_iSelectItem = 70409;
g_InterfaceManager.GetInterfaceString( c_iSelectItem, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_TOP_SHOW, szMessage);
}
else
if (this->m_curMoney <= g_pHero->GetMoney())
{
#ifdef _NA_008678_20160203_ADD_HEIM_TRADINGVOLUME_NOTIFICATION_OPTION
if (GlobalFunc::HeimTradingvolumeCheck(this->m_curMoney))
{
uiSystemMan* ui_system_manager_ptr = GET_DIALOG_MANAGER(uiSystemMan, UIMAN_SYSTEM);
if (ui_system_manager_ptr)
{
ui_system_manager_ptr->Sys_SystemHeimTradingvolumeVendorBuy(GetDialogKey(), this->m_curPos, this->m_curMoney, true);
}
}
else
{
this->SendItemBuySync(this->m_curPos);
}
#else
this->SendItemBuySync(this->m_curPos);
#endif // _NA_008678_20160203_ADD_HEIM_TRADINGVOLUME_NOTIFICATION_OPTION
}
else
{
// 현재 보유한 하임이 부족하여 아이템을 구매할 수 없습니다.
const int c_iNotEnoughMoney = 70408;
g_InterfaceManager.GetInterfaceString( c_iNotEnoughMoney, szMessage, INTERFACE_STRING_LENGTH );
GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_TOP_SHOW, szMessage);
}
}
break;
#ifdef _JBH_MOD_MONEY_OUTPUT
case DIALOG_TXTVALUE_ITEMVALUTE:
{
m_bClickMoney = TRUE;
}
break;
#endif
}
}
break;
default:
{
SolarDialog::MessageProc( pMessage );
}
break;
}
}
//----------------------------------------------------------------------------
/**
*/
void
uiVendorBuy::MouseOver_MsgProc( SI_MESSAGE * pMessage )
{
switch( pMessage->eResultMsg )
{
case RT_MSG_MOUSEOVER:
{
POSTYPE pos = getCtrlIDToPos( pMessage->dwCtrlID );
if (pos >= POS_SLOT_BEGIN && pos < POS_SLOT_END)
{
if (!IsEmpty( pos ))
{
SCSlot & rSlot = GetSlot( pos );
m_MouseOverObject.eMouseOverType = eMOUSE_OVER_SLOT;
m_MouseOverObject.pSlot = &rSlot;
SetCheckItem(pos, false);
}
else
{
m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX;
}
}
else
{
m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX;
}
}
break;
}
}
//------------------------------------------------------------------------------
/**
*/
void
uiVendorBuy::OnUpdateSolarDialog()
{
if (m_pItemUnitRenderer)
m_pItemUnitRenderer->Update();
this->updateVendingCurrentItemInfos();
CCtrlStaticWZ * pControl;
pControl = (CCtrlStaticWZ*)getControl(DIALOG_EDIT_SELLMSG);
if (pControl)
{
GlobalFunc::SetCaption( pControl, this->m_szVendorMsg );
pControl->SetTextColor(WzColor_RGBA( 152, 208, 142, 255 ));
}
#ifdef _JBH_MOD_MONEY_OUTPUT
#if defined(__KR) || defined(_KOREA)
updateToolTip();
# endif //#if defined(__KR) || defined(_KOREA)
#endif
}
//------------------------------------------------------------------------------
/**
*/
void
uiVendorBuy::updateVendingCurrentItemInfos()
{
TCHAR string_value[INTERFACE_STRING_LENGTH];
DWORD money_color;
CCtrlStaticWZ* text_control = NULL;;
text_control = static_cast<CCtrlStaticWZ*>(getControl(DIALOG_TXTVALUE_ITEMCOUNTS));
if (text_control)
{
Sprintf(string_value, _T("%d"), this->m_curAmouts);
text_control->SetTextColor(RGBA(255,255,255,255));
GlobalFunc::SetCaption(text_control, string_value);
}
text_control = static_cast<CCtrlStaticWZ*>(getControl(DIALOG_TXTVALUE_ITEMVALUTE));
if (text_control)
{
money_color = GlobalFunc::GetMoneyColor(m_curMoney);
text_control->SetTextColor(money_color);
GlobalFunc::SetMoneyText(text_control, m_curMoney);
}
text_control = static_cast<CCtrlStaticWZ*>(getControl(DIALOG_TXT_ITEM_UNIT_PRICE));
if (text_control)
{
MONEY unit_price = m_curAmouts != 0 ? (m_curMoney / m_curAmouts) : m_curMoney;
money_color = GlobalFunc::GetMoneyColor(unit_price);
text_control->SetTextColor(money_color);
GlobalFunc::SetMoneyText(text_control, unit_price);
}
}
//------------------------------------------------------------------------------
/**
*/
void uiVendorBuy::RenderCheckItem()
{
if (m_pItemUnitRenderer == NULL)
{
return;
}
for (POSTYPE idx = 0; idx < GetMaxSlotNum(); ++idx)
{
if (IsEmpty(idx))
{
continue;
}
CControlWZ* slot_control = getControl(idx);
if (GetCheckItem(idx) &&
slot_control)
{
g_InterfaceManager.RenderCheckItem(slot_control->GetSizeRect());
}
}
}
//------------------------------------------------------------------------------
/**
*/
void
uiVendorBuy::OnRenderSolarDialog()
{
if (m_pItemUnitRenderer)
{
m_pItemUnitRenderer->Render();
RenderCheckItem();
}
// 슬롯에 선택된 아이템 표시하기
if(this->GetSlotNum() >0)
{
SCSlot& rSlot = this->GetSlot(m_curPos);
if(rSlot.GetCode())
{
CControlWZ* pControl = this->getControl(m_curPos);
RECT rt = pControl->GetSizeRect();
g_InterfaceManager.RenderActivateMark( rt.left - 13, rt.top - 13);
}
}
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)
{
pUIMan->RegisterTooltipItem(m_MouseOverObject.pSlot, FALSE, kLimitStatCompositeNormal);
pUIMan->RegisterTooltipVendorItemUnitPrice(m_MouseOverObject.pSlot);
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 = POS_SLOT_BEGIN; a < POS_SLOT_END; 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;
}
}
//------------------------------------------------------------------------------
/**
pSlot for not allocated in heap
*/
RC::eSLOT_INSERT_RESULT uiVendorBuy::InsertSlot( POSTYPE AtPos, SCSlot & IN rSlot )
{
if(!this->IsVisible())
return RC::RC_INSERT_SLOT_FAILED;
RC::eSLOT_INSERT_RESULT eInsertSlotResult = SCSlotContainer::InsertSlot( AtPos, rSlot );
// 클라에서 따로 시리얼을 발급한다.
DBSERIAL dwSerial = g_SlotKeyGenerator.GetKey();
SCSlot & rRealSlot = GetSlot(AtPos);
rRealSlot.SetSerial(dwSerial);
CControlWZ * pCtrl = getControl(AtPos);
RECT rect = pCtrl->GetSizeRect();
if(m_pItemUnitRenderer)
{
m_pItemUnitRenderer->AddItemUnit( rRealSlot.GetSerial(), rRealSlot.GetCode(), &rect, &rRealSlot ,pCtrl);
}
else
{
assert(!"m_pItemUnitRenderer == NULL");
}
ReFreshRenderSlot();
return eInsertSlotResult;
}
//------------------------------------------------------------------------------
/**
*/
BOOL
uiVendorBuy::DeleteSlot( POSTYPE AtPos, SCSlot * pSlotOut )
{
SCSlot& slot = this->GetSlot(AtPos);
if (m_pItemUnitRenderer)
{
m_pItemUnitRenderer->RemoveItemUnit( slot.GetSerial() );
}
else
{
assert(!"m_pItemUnitRenderer == NULL");
}
g_SlotKeyGenerator.Restore( (DWORD)slot.GetSerial() );
SCSlotContainer::DeleteSlot( AtPos, pSlotOut );
this->ReFreshRenderSlot();
return TRUE;
}
void uiVendorBuy::Serialize( POSTYPE pos, BitStream & bitstream, eSLOT_SERIALIZE eType )
{
SCItemSlotContainer::Serialize( pos , bitstream, eType );
if( eType == eSLOT_SERIALIZE_CLIENT_SAVE )
{
// 클라에서 따로 시리얼을 발급한다.
DBSERIAL dwSerial = g_SlotKeyGenerator.GetKey();
SCSlot & rRealSlot = GetSlot(pos);
rRealSlot.SetSerial(dwSerial);
CControlWZ * pCtrl = getControl(pos);
RECT rect = pCtrl->GetSizeRect();
if(m_pItemUnitRenderer)
{
m_pItemUnitRenderer->AddItemUnit( rRealSlot.GetSerial(), rRealSlot.GetCode(), &rect, &rRealSlot ,pCtrl);
}
else
{
assert(!"m_pItemUnitRenderer == NULL");
}
ReFreshRenderSlot();
}
}
//------------------------------------------------------------------------------
/**
*/
void
uiVendorBuy::ReFreshRenderSlot()
{
ItemUnitRenderer::RenderUnit * pRender = NULL;
RECT rcSlot;
CControlWZ * pCtrl = NULL;
for (int i = 0; i < GetMaxSlotNum(); ++i)
{
SCSlot & rSlot = SCSlotContainer::GetSlot(i);
// 보여줘야할 목록
if ( !IsEmpty(i) )
{
if(!m_pItemUnitRenderer)
continue;
pRender = m_pItemUnitRenderer->GetItemUnit( rSlot.GetSerial() );
SetCheckItem(i, GameFunc::IsCheckItem(rSlot));
if (pRender = NULL)
{
pCtrl = getControl(i);
rcSlot = pCtrl->GetSizeRect();
m_pItemUnitRenderer->AddItemUnit( rSlot.GetSerial(), rSlot.GetCode(), &rcSlot, &rSlot ,pCtrl);
}
if (pRender)
{
pRender->SetShow(TRUE);
}
}
}
}
//------------------------------------------------------------------------------
/**
*/
#ifdef _JBH_MOD_MONEY_OUTPUT
void uiVendorBuy::updateToolTip()
{
int iMouseX = Mouse::Instance()->GetMouseX();
int iMouseY = Mouse::Instance()->GetMouseY();
// 스킵처리
// 인터페이스에서 Dialog 바탕에서는 Mouse Over가 오지 않는다.
BOOL bMouseOver = FALSE;
// 효율을 위하여 DIALOG_TXT_ITEMVALUE 컨트롤만 검사함.
CControlWZ * pControl = getControl(DIALOG_TXTVALUE_ITEMVALUTE);
if(pControl)
{
RECT rc = pControl->GetSizeRect();
if (rc.left <= iMouseX && rc.right >= iMouseX)
{
if (rc.top <= iMouseY && rc.bottom >= iMouseY)
{
bMouseOver = TRUE;
if( m_dwPendingTick == 0)
{
m_dwPendingTick = clock_function::GetTickCount();
}
}
else
{
m_dwPendingTick = 0;
m_bClickMoney = FALSE;
}
}
else
{
m_dwPendingTick = 0;
m_bClickMoney = FALSE;
}
}
DWORD dwTick = 0;
if( m_dwPendingTick > 0 )
{
dwTick = clock_function::GetTickCount() - m_dwPendingTick;
}
if ( (bMouseOver && dwTick > 2000 ) || m_bClickMoney )
{
if( m_curMoney > 0 )
{
TCHAR szMessage[INTERFACE_STRING_LENGTH];
memset(szMessage , 0 , sizeof( szMessage ) );
GlobalFunc::ChangeMoneyToStringMoney( m_curMoney , szMessage );
uiToolTipMan* pUIMan = (uiToolTipMan*)g_InterfaceManager.GetUserInterfaceManager(UIMAN_TOOLTIP);
if( pUIMan )
{
pUIMan->InitTooltip();
pUIMan->RegisterTooltip(szMessage ,_tcslen(szMessage) , 25 );
pUIMan->SetTooltipDialogID( GetDialogKey() );
}
}
}
}
#endif
//------------------------------------------------------------------------------
// EOF
//------------------------------------------------------------------------------