// HumanExchange.cpp: implementation of the CHumanExchange class. // ////////////////////////////////////////////////////////////////////// #include "ClientMain.h" #include "WinInput.h" #include "HumanExchange.h" #include "GUIMessageBox.h" #include "GUITooltipItem.h" #include "GUITextEdit.h" #include "GUIMessageBox.h" #include "GUIMessageBoxManager.h" #include "Item\ItemMgr.h" #include "Item\ItemFactory.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CHumanExchange::CHumanExchange() { } CHumanExchange::~CHumanExchange() { } BOOL CHumanExchange::Init(unsigned short x, unsigned short y) { CSprite *lpSprite; lpSprite = new CSprite; lpSprite->Create(x, y, 0, 0, 222, 252, g_ClientMain.m_lpInterface->m_lstTexture[39]); m_lstSprite.push_back(lpSprite); lpSprite = new CSprite; lpSprite->Create(x + 222, y, 0, 0, 222, 252, g_ClientMain.m_lpInterface->m_lstTexture[39]); m_lstSprite.push_back(lpSprite); // 0 : »ó´ë¹æ È®ÀÎ CGUIButton *lpButton; lpButton = new CGUIButton; lpButton->m_nMethod = BUTTON_SIMPLECHECK; lpButton->m_lpNormalButton = new CSprite; lpButton->m_lpNormalButton->Create(35, 215, 114, 130, 182, 156, g_ClientMain.m_lpInterface->m_lstTexture[12]); lpButton->m_lpClickMouseButton = new CSprite; lpButton->m_lpClickMouseButton->Create(35, 215, 182, 130, 250, 156, g_ClientMain.m_lpInterface->m_lstTexture[12]); lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[125]); lpButton->SetMove(x, y); m_ButtonManager.AddButton(lpButton); // 1 : »ó´ë¹æ Ãë¼Ò lpButton = new CGUIButton; lpButton->m_nMethod = BUTTON_SIMPLE; lpButton->m_lpNormalButton = new CSprite; lpButton->m_lpNormalButton->Create(120, 215, 114, 104, 182, 130, g_ClientMain.m_lpInterface->m_lstTexture[12]); lpButton->m_lpClickMouseButton = new CSprite; lpButton->m_lpClickMouseButton->Create(120, 215, 182, 104, 250, 130, g_ClientMain.m_lpInterface->m_lstTexture[12]); lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[126]); lpButton->SetMove(x, y); m_ButtonManager.AddButton(lpButton); // 2: È®ÀÎ lpButton = new CGUIButton; lpButton->m_nMethod = BUTTON_SIMPLECHECK; lpButton->m_lpNormalButton = new CSprite; lpButton->m_lpNormalButton->Create(35 + 222, 215, 114, 130, 182, 156, g_ClientMain.m_lpInterface->m_lstTexture[12]); lpButton->m_lpClickMouseButton = new CSprite; lpButton->m_lpClickMouseButton->Create(35 + 222, 215, 182, 130, 250, 156, g_ClientMain.m_lpInterface->m_lstTexture[12]); lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[125]); lpButton->SetMove(x, y); m_ButtonManager.AddButton(lpButton); // 3 : Ãë¼Ò lpButton = new CGUIButton; lpButton->m_nMethod = BUTTON_SIMPLE; lpButton->m_lpNormalButton = new CSprite; lpButton->m_lpNormalButton->Create(120 + 222, 215, 114, 104, 182, 130, g_ClientMain.m_lpInterface->m_lstTexture[12]); lpButton->m_lpClickMouseButton = new CSprite; lpButton->m_lpClickMouseButton->Create(120 + 222, 215, 182, 104, 250, 130, g_ClientMain.m_lpInterface->m_lstTexture[12]); lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[126]); lpButton->SetMove(x, y); m_ButtonManager.AddButton(lpButton); // 4 : µ· ¹öư lpButton = new CGUIButton; lpButton->m_nMethod = BUTTON_SIMPLE; lpButton->m_lpNormalButton = new CSprite; lpButton->m_lpNormalButton->Create(180 + 222, 185, 180, 185, 208, 205, g_ClientMain.m_lpInterface->m_lstTexture[39]); lpButton->m_lpClickMouseButton = new CSprite; lpButton->m_lpClickMouseButton->Create(180 + 222, 185, 85, 153, 113, 173, g_ClientMain.m_lpInterface->m_lstTexture[11]); lpButton->SetTooltip(&m_TooltipManager, ""); lpButton->SetMove(x, y); m_ButtonManager.AddButton(lpButton); // 5 : »ó´ëÆí ¶ô lpButton = new CGUIButton; lpButton->m_nMethod = BUTTON_CHECK; lpButton->m_lpNormalButton = new CSprite; lpButton->m_lpNormalButton->Create(192, 32, 222, 0, 248, 26, g_ClientMain.m_lpInterface->m_lstTexture[39]); lpButton->m_lpOnMouseButton = new CSprite; lpButton->m_lpOnMouseButton->Create(192, 32, 222, 26, 248, 52, g_ClientMain.m_lpInterface->m_lstTexture[39]); lpButton->m_lpClickMouseButton = new CSprite; lpButton->m_lpClickMouseButton->Create(192, 32, 222, 52, 248, 78, g_ClientMain.m_lpInterface->m_lstTexture[39]); lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[129]); lpButton->SetMove(x, y); m_ButtonManager.AddButton(lpButton); // 6 : ¶ô lpButton = new CGUIButton; lpButton->m_nMethod = BUTTON_CHECK; lpButton->m_lpNormalButton = new CSprite; lpButton->m_lpNormalButton->Create(192 + 222, 32, 222, 0, 248, 26, g_ClientMain.m_lpInterface->m_lstTexture[39]); lpButton->m_lpOnMouseButton = new CSprite; lpButton->m_lpOnMouseButton->Create(192 + 222, 32, 222, 26, 248, 52, g_ClientMain.m_lpInterface->m_lstTexture[39]); lpButton->m_lpClickMouseButton = new CSprite; lpButton->m_lpClickMouseButton->Create(192 + 222, 32, 222, 52, 248, 78, g_ClientMain.m_lpInterface->m_lstTexture[39]); lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[129]); lpButton->SetMove(x, y); m_ButtonManager.AddButton(lpButton); m_bShow = FALSE; InitValue(); m_dwWindowKind = WINDOW_FIX; m_rcWindowSize.left = x; m_rcWindowSize.top = y; m_rcWindowSize.right = x + 444; m_rcWindowSize.bottom = y + 252; m_rcMoveEdge.left = x; m_rcMoveEdge.top = y; m_rcMoveEdge.right = x + 444; m_rcMoveEdge.bottom = y + 20; return TRUE; } void CHumanExchange::InitValue(void) { m_dwSplitResult = 0; m_dwSplitValue = 0; m_lpSplitItem = NULL; m_bSingleWindow = FALSE; m_dwExchangeGoldResult = 0; m_dwExchangeGoldValue = 0; m_ButtonManager.m_lstButton[0]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[1]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[2]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[3]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[5]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[6]->m_nState = BUTTON_NONE; } BOOL CHumanExchange::Update(BOOL &bClick, BOOL &bEdge) { if(g_DeviceInput.InRect(m_rcWindowSize.left, m_rcWindowSize.top, m_rcWindowSize.right, m_rcWindowSize.bottom)) { bEdge = TRUE; if(g_DeviceInput.GetIsLeftMouseDown() || g_DeviceInput.GetIsMiddleMouseDown() || g_DeviceInput.GetIsRightMouseDown() || g_DeviceInput.GetIsLeftMousePress() || g_DeviceInput.GetIsMiddleMousePress() || g_DeviceInput.GetIsRightMousePress() || g_DeviceInput.GetIsLeftMouseUp() || g_DeviceInput.GetIsMiddleMouseUp() || g_DeviceInput.GetIsRightMouseUp()) { bClick = TRUE; } } POINT *ptMousePos = g_DeviceInput.GetMousePosition(); // ¼Õ¿¡ ¹°°ÇÀ» µé°í ÀÖÀ»¶§ Ãë¼Ò¿Í µ· ³õ±â ¹öưÀ» ´©¸£Áö ¸øÇÑ´Ù. if(!g_ClientMain.m_lpPickItem && !m_bSingleWindow) { m_ButtonManager.m_lstButton[3]->Update(); m_ButtonManager.m_lstButton[4]->Update(); } // È®ÀÎÀÌ ´­·¯Áö¸é ¶ôÀÌ È°µ¿À» ¸øÇÑ´Ù. if(!m_bSingleWindow && !g_ClientMain.m_lpPickItem && m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_NONE && g_DeviceInput.InRect(192 + 222 + m_rcWindowSize.left, 32 + m_rcWindowSize.top, 192 + 222 + 26 + m_rcWindowSize.left, 32 + 26 + m_rcWindowSize.top) && g_DeviceInput.GetIsLeftMouseDown()) { unsigned short wCmd; if(m_ButtonManager.m_lstButton[6]->m_nState == BUTTON_NONE) { wCmd = ClientSocket::ExchangeCmd_Lock; g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, wCmd); } else { wCmd = ClientSocket::ExchangeCmd_UnLock; g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, wCmd); } } m_TooltipManager.Update(); // ³ª´©±â if(m_dwSplitResult & MB_YES) { if(m_ButtonManager.m_lstButton[0]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[5]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[6]->m_nState == BUTTON_HOLD) { g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_Cancel); } if(m_dwSplitValue) { if(m_dwSplitValue >= m_lpSplitItem->GetNowDurability()) { g_ClientMain.SetPickItem(m_lpSplitItem, FALSE); g_ClientMain.m_csStatus.DeleteExchangeItem(m_lpSplitItem); } else { g_ClientMain.m_lpPickItem = new CItemInstance; g_ClientMain.m_lpPickItem->m_lpItemBase = Item::CItemFactory::GetInstance().CreateItem(m_lpSplitItem->GetProtoTypeID()); g_ClientMain.m_lpPickItem->SetPos(m_lpSplitItem->m_lpItemBase->GetPos().m_cIndex); g_ClientMain.m_lpPickItem->SetNowDurability(m_dwSplitValue); g_ClientMain.m_lpPickItem->SetItemPos(ClientSocket::ItemPos_Exchange); g_ClientMain.m_lpPickItem->m_dwItemUID = m_lpSplitItem->m_dwItemUID; g_ClientMain.m_lpPickItem->m_lpSprite = new CSprite; g_ClientMain.m_lpPickItem->m_lpSprite->Create(0, 0, g_ClientMain.m_lpPickItem->GetItemInfo().m_SpriteData.m_nSpriteMinX, g_ClientMain.m_lpPickItem->GetItemInfo().m_SpriteData.m_nSpriteMinY, g_ClientMain.m_lpPickItem->GetItemInfo().m_SpriteData.m_nSpriteMaxX, g_ClientMain.m_lpPickItem->GetItemInfo().m_SpriteData.m_nSpriteMaxY, NULL); g_ClientMain.m_lpPickItem->m_lpTooltip = new CGUITooltipItem; ((CGUITooltipItem *)g_ClientMain.m_lpPickItem->m_lpTooltip)->SetItem(g_ClientMain.m_lpPickItem); unsigned long dwDurability = m_lpSplitItem->GetNowDurability() - m_dwSplitValue; m_lpSplitItem->SetNowDurability(dwDurability); } } m_dwSplitResult = 0; m_dwSplitValue = 0; m_lpSplitItem = NULL; g_TextEdit.m_dwEditMode = EDITMODE_CHAT; g_ClientMain.SetFocus(); return TRUE; } else if(m_dwSplitResult & MB_NO || m_dwSplitResult & MB_EXIT) { m_dwSplitResult = 0; m_dwSplitValue = 0; m_lpSplitItem = NULL; g_TextEdit.m_dwEditMode = EDITMODE_CHAT; g_ClientMain.SetFocus(); return TRUE; } // µ· ¿Ã¸®±â if(m_dwExchangeGoldResult & MB_YES) { if(m_ButtonManager.m_lstButton[0]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[5]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[6]->m_nState == BUTTON_HOLD) { g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_UnLock); g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_Cancel); } if(g_ClientMain.m_csStatus.m_Info.Gold <= m_dwExchangeGoldValue) { m_dwExchangeGoldValue = g_ClientMain.m_csStatus.m_Info.Gold; } __int64 ddGold = (__int64)m_dwExchangeGoldValue - (__int64)g_ClientMain.m_csStatus.m_dwExchangeGold; if(ddGold > 0) { g_ClientMain.m_Network.m_nsNetworkState = NS_TAKEGOLD; g_ClientMain.m_Network.m_pSocket->CharTakeGold(g_ClientMain.m_dwMyChrID, ClientSocket::ItemPos_Inven, ClientSocket::ItemPos_Exchange, (unsigned long)ddGold); } else if(ddGold < 0) { g_ClientMain.m_Network.m_nsNetworkState = NS_TAKEGOLD; g_ClientMain.m_Network.m_pSocket->CharTakeGold(g_ClientMain.m_dwMyChrID, ClientSocket::ItemPos_Exchange, ClientSocket::ItemPos_Inven, (unsigned long)-ddGold); } m_dwExchangeGoldResult = 0; m_dwExchangeGoldValue = 0; g_TextEdit.m_dwEditMode = EDITMODE_CHAT; g_ClientMain.SetFocus(); return TRUE; } else if(m_dwExchangeGoldResult & MB_NO || m_dwExchangeGoldResult & MB_EXIT) { m_dwExchangeGoldResult = 0; m_dwExchangeGoldValue = 0; g_TextEdit.m_dwEditMode = EDITMODE_CHAT; g_ClientMain.SetFocus(); return TRUE; } // ±³È¯Ã¢ ¾ÆÀÌÅÛ ¼±Åà if(m_ButtonManager.m_lstButton[6]->m_nState == BUTTON_NONE) { if(SelectItem()) { if(m_ButtonManager.m_lstButton[0]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[5]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[6]->m_nState == BUTTON_HOLD) { g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_UnLock); g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_Cancel); } return TRUE; } } // È®ÀÎ ¹öư ´©¸£±â if(!m_bSingleWindow && !g_ClientMain.m_lpPickItem && m_ButtonManager.m_lstButton[5]->m_nState == BUTTON_HOLD && m_ButtonManager.m_lstButton[6]->m_nState == BUTTON_HOLD && g_DeviceInput.InRect(35 + 222 + m_rcWindowSize.left, 215 + m_rcWindowSize.top, 35 + 222 + 68 + m_rcWindowSize.left, 215 + 26 + m_rcWindowSize.top) && g_DeviceInput.GetIsLeftMouseDown()) { unsigned short wCmd; if(m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_NONE) { if(m_ButtonManager.m_lstButton[0]->m_nState == BUTTON_HOLD) wCmd = ClientSocket::ExchangeCmd_Exchange; else wCmd = ClientSocket::ExchangeCmd_OK; } else { wCmd = ClientSocket::ExchangeCmd_Cancel; } g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, wCmd); } // Ãë¼Ò ¹öư ´©¸£±â if(m_ButtonManager.m_lstButton[3]->m_nState == BUTTON_CLICK) { unsigned short wCmd; if(m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_HOLD) { wCmd = ClientSocket::ExchangeCmd_Cancel; g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, wCmd); } else if(m_ButtonManager.m_lstButton[6]->m_nState == BUTTON_NONE) { wCmd = ClientSocket::ExchangeCmd_Quit; g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, wCmd); } } // µ· ¹öư ´©¸£±â if(m_ButtonManager.m_lstButton[4]->m_nState == BUTTON_CLICK && m_ButtonManager.m_lstButton[6]->m_nState == BUTTON_NONE && g_ClientMain.m_dwKindCursor == CURSOR_NORMAL && !g_ClientMain.m_lpPickItem) { CGUIMessageBox *lpMessageBox; lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[128], MB_NUMBER | MB_YES | MB_NO | MB_EXIT); lpMessageBox->SetResult(&m_dwExchangeGoldResult); lpMessageBox->SetValue(&m_dwExchangeGoldValue); g_TextEdit.SetFocus(); m_dwExchangeGoldResult = 0; m_dwExchangeGoldValue = 0; } unsigned long dwInvenX = (ptMousePos->x - (m_rcWindowSize.left + 230)) / 26; unsigned long dwInvenY = (ptMousePos->y - (m_rcWindowSize.top + 72)) / 26; __int64 ddItem; if(m_ButtonManager.m_lstButton[6]->m_nState == BUTTON_NONE) { if(g_DeviceInput.GetIsLeftMouseDown() && g_ClientMain.m_lpPickItem && g_ClientMain.m_lpPickItem->GetItemPos() != ClientSocket::ItemPos_QSlot) { if(g_DeviceInput.InRect(m_rcWindowSize.left + 230, m_rcWindowSize.top + 72, m_rcWindowSize.left + 437, m_rcWindowSize.top + 175)) // ±³È¯Ã¢ { if((ddItem = g_ClientMain.m_csStatus.IsCheckItem(g_ClientMain.m_lpPickItem, 3, dwInvenX, dwInvenY)) != ITEM_FAILED) { Item::ItemPos pItemIndex; pItemIndex.SetPos(dwInvenX, dwInvenY, 0); pItemIndex.m_cPos = ClientSocket::ItemPos_Exchange; if(g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos() == pItemIndex) { CItemInstance *lpExistItem = g_ClientMain.m_csStatus.GetExchangeItem(g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos()); if(lpExistItem) { if(g_ClientMain.m_lpPickItem->GetIsEnableStack()) { unsigned dwDurability = lpExistItem->GetNowDurability() + g_ClientMain.m_lpPickItem->GetNowDurability(); lpExistItem->SetNowDurability(dwDurability); delete g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); } } else { g_ClientMain.m_csStatus.AddExchangeItem(g_ClientMain.m_lpPickItem); g_ClientMain.SetPickItem(NULL); } return TRUE; } if(ddItem == ITEM_EMPTY) { if(g_ClientMain.m_lpPickItem->GetIsEnableStack()) { CItemInstance *lpExistItem = NULL; switch(g_ClientMain.m_lpPickItem->GetItemPos()) { case ClientSocket::ItemPos_Inven: lpExistItem = g_ClientMain.m_csStatus.GetInventoryItem(g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos()); break; case ClientSocket::ItemPos_Exchange: lpExistItem = g_ClientMain.m_csStatus.GetExchangeItem(g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos()); break; } if(lpExistItem && lpExistItem->GetProtoTypeID() == g_ClientMain.m_lpPickItem->GetProtoTypeID()) { // ±âÁ¸ÀÇ ÀÚ¸®¿¡ ¾ÆÀÌÅÛÀÌ ³²¾ÆÀÖÀ¸¸é ¾ÆÀÌÅÛÀÌ ³ª´²Áø°É·Î »ý°¢, ¾ÆÀÌÅÛÀ» ½ºÅÃÇÑ´Ù. if(m_ButtonManager.m_lstButton[0]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[5]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[6]->m_nState == BUTTON_HOLD) { g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_UnLock); g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_Cancel); } g_ClientMain.m_Network.SendSplitItem(g_ClientMain.m_lpPickItem, &pItemIndex, g_ClientMain.m_lpPickItem->GetNowDurability()); } else { if(m_ButtonManager.m_lstButton[0]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[5]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[6]->m_nState == BUTTON_HOLD) { g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_UnLock); g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_Cancel); } g_ClientMain.m_Network.SendTakeItem(g_ClientMain.m_lpPickItem, &pItemIndex, g_ClientMain.m_lpPickItem->GetNowDurability()); } } else { // ¾ÆÀÌÅÛ À̵¿ if(m_ButtonManager.m_lstButton[0]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[5]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[6]->m_nState == BUTTON_HOLD) { g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_UnLock); g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_Cancel); } g_ClientMain.m_Network.SendTakeItem(g_ClientMain.m_lpPickItem, &pItemIndex, 1); } } else { CItemInstance *lpExistItem = g_ClientMain.m_csStatus.GetExchangeItem(ddItem); if(g_ClientMain.m_lpPickItem->GetIsEnableStack() && lpExistItem && (dwInvenX == lpExistItem->m_lpItemBase->GetPos().GetXIndex() && dwInvenY == lpExistItem->m_lpItemBase->GetPos().GetYIndex()) && lpExistItem->GetProtoTypeID() == g_ClientMain.m_lpPickItem->GetProtoTypeID() && lpExistItem->GetNowDurability() < lpExistItem->GetMaxDurability()) { // ¾ÆÀÌÅÛÀ» ½ºÅÃÇÑ´Ù. unsigned char cNum; if(lpExistItem->GetMaxDurability() - lpExistItem->GetNowDurability() < g_ClientMain.m_lpPickItem->GetNowDurability()) { cNum = lpExistItem->GetMaxDurability() - lpExistItem->GetNowDurability(); } else { cNum = g_ClientMain.m_lpPickItem->GetNowDurability(); } if(m_ButtonManager.m_lstButton[0]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[5]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[6]->m_nState == BUTTON_HOLD) { g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_UnLock); g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_Cancel); } g_ClientMain.m_Network.SendTakeItem(g_ClientMain.m_lpPickItem, &pItemIndex, cNum); return TRUE; } // Àκ¥Å丮 ¸®½ºÆ®¿¡¼­ ¾ÆÀÌÅÛÀ» ã´Â´Ù.(¿Ï·á) // ½º¿ÒÇϱâ CItemInstance *lpInvenItem = NULL; if(g_ClientMain.m_lpPickItem->GetIsEnableStack() && g_ClientMain.m_lpPickItem->GetItemPos() != ClientSocket::ItemPos_Temp) lpInvenItem = g_ClientMain.m_csStatus.GetExchangeItem(g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos()); if(!lpInvenItem) { if(m_ButtonManager.m_lstButton[0]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[5]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[6]->m_nState == BUTTON_HOLD) { g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_UnLock); g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_Cancel); } g_ClientMain.m_Network.SendSwapItem(g_ClientMain.m_lpPickItem, &pItemIndex, lpExistItem); } } return TRUE; } } } } return TRUE; } void CHumanExchange::ShowWindow(BOOL bShow) { if(bShow) { m_bShow = TRUE; m_ButtonManager.m_lstButton[0]->ShowButton(TRUE); m_ButtonManager.m_lstButton[1]->ShowButton(TRUE); m_ButtonManager.m_lstButton[2]->ShowButton(TRUE); m_ButtonManager.m_lstButton[3]->ShowButton(TRUE); m_ButtonManager.m_lstButton[5]->ShowButton(TRUE); m_ButtonManager.m_lstButton[6]->ShowButton(TRUE); m_bSingleWindow = FALSE; m_ButtonManager.m_lstButton[0]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[1]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[2]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[3]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[5]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[6]->m_nState = BUTTON_NONE; } else { m_ButtonManager.m_lstButton[0]->ShowButton(FALSE); m_ButtonManager.m_lstButton[1]->ShowButton(FALSE); m_ButtonManager.m_lstButton[5]->ShowButton(FALSE); m_ButtonManager.m_lstButton[0]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[1]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[2]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[3]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[5]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[6]->m_nState = BUTTON_NONE; if(g_ClientMain.m_csStatus.m_lstExchange.size() || g_ClientMain.m_csStatus.m_dwExchangeGold || g_ClientMain.m_Network.m_nsNetworkState != NS_NOWAITING || g_ClientMain.m_lpPickItem) { return; } m_bShow = FALSE; m_bSingleWindow = FALSE; } } void CHumanExchange::Render(LPDIRECT3DDEVICE8 lpD3DDevice) { RECT rcRect; if(!m_bSingleWindow) { m_lstSprite[0]->Render(lpD3DDevice); CCreature *lpCreature = g_CharacterData.GetCreature(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID); if(lpCreature) { SetRect(&rcRect, 48 + m_rcWindowSize.left, 42 + m_rcWindowSize.top, 175 + m_rcWindowSize.left, 57 + m_rcWindowSize.top); g_TextEdit.DrawText(lpCreature->m_strName, &rcRect, DT_VCENTER | DT_CENTER, D3DCOLOR_RGBA(255, 255, 255, 255)); } SetRect(&rcRect, 51 + m_rcWindowSize.left, 188 + m_rcWindowSize.top, 178 + m_rcWindowSize.left, 203 + m_rcWindowSize.top); g_TextEdit.DrawText(g_TextEdit.MakePrintGold(g_ClientMain.m_csStatus.m_dwExchange2Gold), &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, 255)); } m_lstSprite[1]->Render(lpD3DDevice); SetRect(&rcRect, 48 + 222 + m_rcWindowSize.left, 42 + m_rcWindowSize.top, 175 + 222 + m_rcWindowSize.left, 57 + m_rcWindowSize.top); g_TextEdit.DrawText(g_ClientMain.m_csStatus.m_Info.Name, &rcRect, DT_VCENTER | DT_CENTER, D3DCOLOR_RGBA(255, 255, 255, 255)); SetRect(&rcRect, 51 + 222 + m_rcWindowSize.left, 188 + m_rcWindowSize.top, 178 + 222 + m_rcWindowSize.left, 203 + m_rcWindowSize.top); g_TextEdit.DrawText(g_TextEdit.MakePrintGold(g_ClientMain.m_csStatus.m_dwExchangeGold), &rcRect, DT_CENTER | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, 255)); __int64 ddItem; list::iterator it; for(it = g_ClientMain.m_csStatus.m_lstExchange.begin(); it != g_ClientMain.m_csStatus.m_lstExchange.end(); it++) { (*it)->Render(lpD3DDevice); } if(!m_bSingleWindow) { for(it = g_ClientMain.m_csStatus.m_lstExchange2.begin(); it != g_ClientMain.m_csStatus.m_lstExchange2.end(); it++) { (*it)->Render(lpD3DDevice); } } if(g_ClientMain.m_lpPickItem && g_MessageBoxManager.m_lstMessageBox.empty()) { if(g_DeviceInput.InRect(m_rcWindowSize.left + 230, m_rcWindowSize.top + 72, m_rcWindowSize.left + 437, m_rcWindowSize.top + 175)) // Àκ¥ { Item::ItemPos pItemIndex; POINT *ptMousePos = g_DeviceInput.GetMousePosition(); pItemIndex.SetPos((ptMousePos->x - (m_rcWindowSize.left + 230)) / 26, (ptMousePos->y - (m_rcWindowSize.top + 72)) / 26, 0); if((ddItem = g_ClientMain.m_csStatus.IsCheckItem(g_ClientMain.m_lpPickItem, 3, pItemIndex.GetXIndex(), pItemIndex.GetYIndex())) != ITEM_FAILED) { g_ClientMain.m_lpCommonInterface->RenderRect(lpD3DDevice, m_rcWindowSize.left + 230 + pItemIndex.GetXIndex() * 26, m_rcWindowSize.top + 72 + pItemIndex.GetYIndex() * 26, m_rcWindowSize.left + 230 + g_ClientMain.m_lpPickItem->GetItemInfo().m_DetailData.m_cXSize * 26 + pItemIndex.GetXIndex() * 26, m_rcWindowSize.top + 72 + g_ClientMain.m_lpPickItem->GetItemInfo().m_DetailData.m_cYSize * 26 + pItemIndex.GetYIndex() * 26, 0xFF0000FF, 0x80); } else { if(g_ClientMain.m_lpPickItem->GetItemInfo().m_DetailData.m_cXSize + pItemIndex.GetXIndex() < 8 && g_ClientMain.m_lpPickItem->GetItemInfo().m_DetailData.m_cYSize + pItemIndex.GetYIndex() < 4) { g_ClientMain.m_lpCommonInterface->RenderRect(lpD3DDevice, m_rcWindowSize.left + 230 + pItemIndex.GetXIndex() * 26, m_rcWindowSize.top + 72 + pItemIndex.GetYIndex() * 26, m_rcWindowSize.left + 230 + g_ClientMain.m_lpPickItem->GetItemInfo().m_DetailData.m_cXSize * 26 + pItemIndex.GetXIndex() * 26, m_rcWindowSize.top + 72 + g_ClientMain.m_lpPickItem->GetItemInfo().m_DetailData.m_cYSize * 26 + pItemIndex.GetYIndex() * 26, 0xFFFF0000, 0x80); } } } } m_ButtonManager.Render(lpD3DDevice); } BOOL CHumanExchange::SelectItem() { BOOL bPickItem = FALSE; const Item::ItemInfo *lpItemInfo; list::iterator it; for(it = g_ClientMain.m_csStatus.m_lstExchange2.begin(); it != g_ClientMain.m_csStatus.m_lstExchange2.end(); it++) { lpItemInfo = &(*it)->GetItemInfo(); (*it)->m_wPutX = m_rcWindowSize.left + 8 + 26 * (*it)->m_lpItemBase->GetPos().GetXIndex() + (((lpItemInfo->m_DetailData.m_cXSize * 26 - 1) - (*it)->m_lpSprite->GetSizeX()) / 2); (*it)->m_wPutY = m_rcWindowSize.top + 72 + 26 * (*it)->m_lpItemBase->GetPos().GetYIndex() + (((lpItemInfo->m_DetailData.m_cYSize * 26 - 1) - (*it)->m_lpSprite->GetSizeY()) / 2); } ///// Àκ¥ ¾ÆÀÌÅÛ ¾÷µ¥ÀÌÆ® ¹× ¼±Åà for(it = g_ClientMain.m_csStatus.m_lstExchange.begin(); it != g_ClientMain.m_csStatus.m_lstExchange.end();) { lpItemInfo = &(*it)->GetItemInfo(); (*it)->m_wPutX = m_rcWindowSize.left + 230 + 26 * (*it)->m_lpItemBase->GetPos().GetXIndex() + (((lpItemInfo->m_DetailData.m_cXSize * 26 - 1) - (*it)->m_lpSprite->GetSizeX()) / 2); (*it)->m_wPutY = m_rcWindowSize.top + 72 + 26 * (*it)->m_lpItemBase->GetPos().GetYIndex() + (((lpItemInfo->m_DetailData.m_cYSize * 26 - 1) - (*it)->m_lpSprite->GetSizeY()) / 2); if(m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_NONE && g_ClientMain.m_dwKindCursor == CURSOR_NORMAL && !g_ClientMain.m_lpPickItem && g_DeviceInput.GetIsLeftMouseDown() && (*it)->IsOverMouse()) { /* if((*it)->GetIsEnableStack() && g_DeviceInput.KeyHold(VK_SHIFT) && (*it)->m_lpItemBase->m_nNowDurability > 1) { if(m_ButtonManager.m_lstButton[0]->m_nState == BUTTON_HOLD || m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_HOLD) { g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_Cancel); } CGUIMessageBox *lpMessageBox; lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[127], MB_NUMBER | MB_YES | MB_NO | MB_EXIT); lpMessageBox->SetResult(&m_dwSplitResult); lpMessageBox->SetValue(&m_dwSplitValue); g_TextEdit.SetFocus(); m_lpSplitItem = (*it); m_dwSplitResult = 0; m_dwSplitValue = 0; it++; } else*/ { g_ClientMain.SetPickItem((*it)); g_ClientMain.m_csStatus.CheckExchangeField(0, g_ClientMain.m_lpPickItem); it = g_ClientMain.m_csStatus.m_lstExchange.erase(it); bPickItem = TRUE; } } else { it++; } } if(bPickItem) { return TRUE; } return FALSE; } void CHumanExchange::ExchangeAccept(unsigned long dwChrID) { if(dwChrID == g_ClientMain.m_dwMyChrID) { m_ButtonManager.m_lstButton[2]->m_nState = BUTTON_HOLD; } else { m_ButtonManager.m_lstButton[0]->m_nState = BUTTON_HOLD; if(m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_HOLD) { g_ClientMain.m_Network.SendExchangeCmd(g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID, ClientSocket::ExchangeCmd_Exchange); } } } void CHumanExchange::ExchangeCancel(unsigned long dwChrID) { m_ButtonManager.m_lstButton[0]->m_nState = BUTTON_NONE; m_ButtonManager.m_lstButton[2]->m_nState = BUTTON_NONE; } void CHumanExchange::ExchangeQuit() { m_bSingleWindow = TRUE; list::iterator it; CItemInstance *lpItem; for(it = g_ClientMain.m_csStatus.m_lstExchange2.begin(); it != g_ClientMain.m_csStatus.m_lstExchange2.end();) { lpItem = (*it); g_ClientMain.m_csStatus.CheckExchangeField(0, lpItem, FALSE); it = g_ClientMain.m_csStatus.m_lstExchange2.erase(it); delete lpItem; } g_ClientMain.m_csStatus.m_lstExchange2.clear(); g_ClientMain.m_csStatus.m_Info.Gold += g_ClientMain.m_csStatus.m_dwExchangeGold; g_ClientMain.m_csStatus.m_dwExchangeGold = 0; g_ClientMain.m_csStatus.m_dwExchange2Gold = 0; ShowWindow(FALSE); } void CHumanExchange::ProcessExchange() { m_bSingleWindow = TRUE; g_ClientMain.m_csStatus.m_Info.Gold += g_ClientMain.m_csStatus.m_dwExchange2Gold; list::iterator it; CItemInstance *lpItem; for(it = g_ClientMain.m_csStatus.m_lstExchange.begin(); it != g_ClientMain.m_csStatus.m_lstExchange.end();) { lpItem = (*it); g_ClientMain.m_csStatus.CheckExchangeField(0, lpItem); it = g_ClientMain.m_csStatus.m_lstExchange.erase(it); delete lpItem; } g_ClientMain.m_csStatus.m_lstExchange.clear(); g_ClientMain.m_csStatus.m_dwExchangeGold = 0; for(it = g_ClientMain.m_csStatus.m_lstExchange2.begin(); it != g_ClientMain.m_csStatus.m_lstExchange2.end();) { lpItem = (*it); g_ClientMain.m_csStatus.CheckExchangeField(0, lpItem, FALSE); g_ClientMain.m_csStatus.AddExchangeItem(lpItem); it = g_ClientMain.m_csStatus.m_lstExchange2.erase(it); } g_ClientMain.m_csStatus.m_lstExchange2.clear(); g_ClientMain.m_csStatus.m_dwExchange2Gold = 0; ShowWindow(FALSE); } void CHumanExchange::InitPos(CItemInstance *lpItem) { const Item::ItemInfo *lpItemInfo = &lpItem->GetItemInfo(); lpItem->m_wPutX = m_rcWindowSize.left + 8 + 26 * lpItem->m_lpItemBase->GetPos().GetXIndex() + (((lpItemInfo->m_DetailData.m_cXSize * 26 - 1) - lpItem->m_lpSprite->GetSizeX()) / 2); lpItem->m_wPutY = m_rcWindowSize.top + 72 + 26 * lpItem->m_lpItemBase->GetPos().GetYIndex() + (((lpItemInfo->m_DetailData.m_cYSize * 26 - 1) - lpItem->m_lpSprite->GetSizeY()) / 2); } void CHumanExchange::ExchangeLock(unsigned long dwChrID) { if(dwChrID == g_ClientMain.m_dwMyChrID) { m_ButtonManager.m_lstButton[6]->m_nState = BUTTON_HOLD; } else { m_ButtonManager.m_lstButton[5]->m_nState = BUTTON_HOLD; } } void CHumanExchange::ExchangeUnLock(unsigned long dwChrID) { if(dwChrID == g_ClientMain.m_dwMyChrID) { m_ButtonManager.m_lstButton[6]->m_nState = BUTTON_NONE; } else { m_ButtonManager.m_lstButton[5]->m_nState = BUTTON_NONE; } }