Files
Client/GameTools/NeoRylClient/HumanExchange.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

812 lines
31 KiB
C++

// 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<CItemInstance *>::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<CItemInstance *>::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<CItemInstance *>::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<CItemInstance *>::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;
}
}