Files
Client/GameTools/NeoRylClient/HumanUpgrade.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

335 lines
13 KiB
C++

// HumanUpgrade.cpp: implementation of the CHumanUpgrade class.
//
//////////////////////////////////////////////////////////////////////
#include "ClientMain.h"
#include "WinInput.h"
#include "HumanUpgrade.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CHumanUpgrade::CHumanUpgrade()
{
g_ClientMain.m_csStatus.m_lpUpgrade[0] = NULL;
g_ClientMain.m_csStatus.m_lpUpgrade[1] = NULL;
}
CHumanUpgrade::~CHumanUpgrade()
{
}
BOOL CHumanUpgrade::Init(unsigned short x, unsigned short y)
{
CSprite *lpSprite;
lpSprite = new CSprite;
lpSprite->Create(x, y, 0, 0, 222, 256, g_ClientMain.m_lpInterface->m_lstTexture[29]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite;
lpSprite->Create(x, y + 256, 0, 0, 222, 39, g_ClientMain.m_lpInterface->m_lstTexture[30]);
m_lstSprite.push_back(lpSprite);
CGUIButton *lpButton;
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLECHECK;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(63, 251, 114, 0, 182, 26, g_ClientMain.m_lpInterface->m_lstTexture[12]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(63, 251, 182, 0, 250, 26, g_ClientMain.m_lpInterface->m_lstTexture[12]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[260]);
lpButton->SetMove(x, y);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(139, 251, 114, 26, 182, 52, g_ClientMain.m_lpInterface->m_lstTexture[12]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(139, 251, 182, 26, 250, 52, g_ClientMain.m_lpInterface->m_lstTexture[12]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[261]);
lpButton->SetMove(x, y);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(162, 141, 49, 162, 98, 196, g_ClientMain.m_lpInterface->m_lstTexture[12]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(162, 141, 0, 162, 49, 196, g_ClientMain.m_lpInterface->m_lstTexture[12]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[262]);
lpButton->SetMove(x, y);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(190, 1, 0, 0, 28, 28, g_ClientMain.m_lpInterface->m_lpCommonWindow);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(190, 1, 28, 0, 56, 28, g_ClientMain.m_lpInterface->m_lpCommonWindow);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[263]);
lpButton->SetMove(x, y);
m_ButtonManager.AddButton(lpButton);
m_bShow = FALSE;
m_dwWindowKind = WINDOW_FIX;
m_rcWindowSize.left = x; m_rcWindowSize.top = y;
m_rcWindowSize.right = x + 222; m_rcWindowSize.bottom = y + 296;
m_rcMoveEdge.left = x; m_rcMoveEdge.top = y;
m_rcMoveEdge.right = x + 222; m_rcMoveEdge.bottom = y + 20;
InitValue();
return TRUE;
}
void CHumanUpgrade::InitValue(void)
{
g_ClientMain.m_csStatus.m_lpUpgrade[0] = NULL;
g_ClientMain.m_csStatus.m_lpUpgrade[1] = NULL;
}
BOOL CHumanUpgrade::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();
unsigned long dwMousePosX = ptMousePos->x - (m_rcWindowSize.left + 36);
unsigned long dwMousePosY = ptMousePos->y - (m_rcWindowSize.top + 81);
unsigned long dwWindowX = dwMousePosX / 26;
unsigned long dwWindowY = dwMousePosY / 26;
m_ButtonManager.Update();
m_TooltipManager.Update();
if(g_DeviceInput.InRect(m_rcWindowSize.left + 36, m_rcWindowSize.top + 81, m_rcWindowSize.left + 113, m_rcWindowSize.top + 184))
{
if(g_DeviceInput.GetIsLeftMouseDown())
{
if(g_ClientMain.m_lpPickItem)
{
if(g_ClientMain.m_lpPickItem->GetIsEnableUpgrade())
{
if(g_ClientMain.m_lpPickItem->GetIsEquip())
{
Item::ItemPos pItemIndex;
pItemIndex.m_cIndex = 0;
pItemIndex.m_cPos = ClientSocket::ItemPos_Upgrade;
if(!g_ClientMain.m_csStatus.m_lpUpgrade[0])
{
// 아이템 이동
if(g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos() == pItemIndex)
{
g_ClientMain.m_csStatus.m_lpUpgrade[0] = g_ClientMain.m_lpPickItem;
g_ClientMain.SetPickItem(NULL);
} else
{
g_ClientMain.m_Network.SendTakeItem(g_ClientMain.m_lpPickItem, &pItemIndex, 1);
}
} else
{
// 스왑하기
g_ClientMain.m_Network.SendSwapItem(g_ClientMain.m_lpPickItem, &pItemIndex, g_ClientMain.m_csStatus.m_lpUpgrade[0]);
}
}
}
} else
{
if(g_ClientMain.m_csStatus.m_lpUpgrade[0])
{
g_ClientMain.SetPickItem(g_ClientMain.m_csStatus.m_lpUpgrade[0]);
g_ClientMain.m_csStatus.m_lpUpgrade[0] = NULL;
}
}
return TRUE;
}
} else if(g_DeviceInput.InRect(m_rcWindowSize.left + 141, m_rcWindowSize.top + 81, m_rcWindowSize.left + 166, m_rcWindowSize.top + 106))
{
if(g_DeviceInput.GetIsLeftMouseDown())
{
if(g_ClientMain.m_lpPickItem) // 손에 있을시
{
if(g_ClientMain.m_lpPickItem->GetItemType() == Item::CItemType::MATERIAL)
{
if(g_ClientMain.m_csStatus.m_lpUpgrade[1])
{
if(g_ClientMain.m_lpPickItem->GetProtoTypeID() == g_ClientMain.m_csStatus.m_lpUpgrade[1]->GetProtoTypeID())
{
/* g_ClientMain.m_Network.m_nsNetworkState = NS_TAKEITEM;
TakeType pTakeType;
pTakeType.m_cSrcPos = g_ClientMain.m_lpPickItem->m_dwItemPos;
pTakeType.m_cSrcIndex = g_ClientMain.m_lpPickItem->m_lpItemBase->m_ItemInfo.m_nItemIndex;
pTakeType.m_cDstPos = g_ClientMain.m_csStatus.m_lpUpgrade[1]->m_dwItemPos;
pTakeType.m_cDstIndex = g_ClientMain.m_csStatus.m_lpUpgrade[1]->m_lpItemBase->m_ItemInfo.m_nItemIndex;
if(g_ClientMain.m_csStatus.m_lpUpgrade[1]->GetMaxDurability() - g_ClientMain.m_csStatus.m_lpUpgrade[1]->m_lpItemBase->m_nNowDurability < g_ClientMain.m_lpPickItem->m_lpItemBase->m_nNowDurability)
{
pTakeType.m_cSrcIndex.m_cNum = g_ClientMain.m_csStatus.m_lpUpgrade[1]->GetMaxDurability() - g_ClientMain.m_csStatus.m_lpUpgrade[1]->m_lpItemBase->m_nNowDurability;
} else
{
pTakeType.m_cSrcIndex.m_cNum = g_ClientMain.m_lpPickItem->m_lpItemBase->m_nNowDurability;
}
g_ClientMain.m_Network.m_pSocket->CharStackItem(g_ClientMain.m_dwMyChrID, pTakeType);*/
unsigned char cNum;
if(g_ClientMain.m_csStatus.m_lpUpgrade[1]->GetMaxDurability() - g_ClientMain.m_csStatus.m_lpUpgrade[1]->GetNowDurability() < g_ClientMain.m_lpPickItem->GetNowDurability())
{
cNum = g_ClientMain.m_csStatus.m_lpUpgrade[1]->GetMaxDurability() - g_ClientMain.m_csStatus.m_lpUpgrade[1]->GetNowDurability();
} else
{
cNum = g_ClientMain.m_lpPickItem->GetNowDurability();
}
g_ClientMain.m_Network.SendSplitItem(g_ClientMain.m_lpPickItem, &g_ClientMain.m_csStatus.m_lpUpgrade[1]->m_lpItemBase->GetPos(), cNum);
return TRUE;
} else // 다른 광물
{
Item::ItemPos pItemIndex;
pItemIndex.m_cIndex = 1;
pItemIndex.m_cPos = ClientSocket::ItemPos_Upgrade;
g_ClientMain.m_Network.SendSwapItem(g_ClientMain.m_lpPickItem, &pItemIndex, g_ClientMain.m_csStatus.m_lpUpgrade[1]);
return TRUE;
}
} else
{
CItemInstance *lpExistItem = g_ClientMain.m_csStatus.GetInventoryItem(g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos());
Item::ItemPos pItemIndex;
pItemIndex.m_cIndex = 1;
pItemIndex.m_cPos = ClientSocket::ItemPos_Upgrade;
if(g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos() == pItemIndex)
{
g_ClientMain.m_csStatus.m_lpUpgrade[1] = g_ClientMain.m_lpPickItem;
g_ClientMain.SetPickItem(NULL);
return TRUE;
}
if(lpExistItem)
{
/* g_ClientMain.m_Network.m_nsNetworkState = NS_TAKEITEM;
TakeType pTakeType;
pTakeType.m_cSrcPos = g_ClientMain.m_lpPickItem->m_dwItemPos;
pTakeType.m_cSrcIndex = g_ClientMain.m_lpPickItem->m_lpItemBase->m_ItemInfo.m_nItemIndex;
pTakeType.m_cDstPos = TakeType::TS_UPGRADE;
pTakeType.m_cDstIndex.m_cIndex = 1;
pTakeType.m_cSrcIndex.m_cNum = g_ClientMain.m_lpPickItem->m_lpItemBase->m_nNowDurability;
g_ClientMain.m_Network.m_pSocket->CharStackItem(g_ClientMain.m_dwMyChrID, pTakeType);*/
g_ClientMain.m_Network.SendSplitItem(g_ClientMain.m_lpPickItem, &pItemIndex, g_ClientMain.m_lpPickItem->GetNowDurability());
} else
{
g_ClientMain.m_Network.SendTakeItem(g_ClientMain.m_lpPickItem, &pItemIndex, g_ClientMain.m_lpPickItem->GetNowDurability());
}
return TRUE;
}
}
} else
{
// 광물을 줍는다.
if(g_ClientMain.m_csStatus.m_lpUpgrade[1])
{
g_ClientMain.SetPickItem(g_ClientMain.m_csStatus.m_lpUpgrade[1]);
g_ClientMain.m_csStatus.m_lpUpgrade[1] = NULL;
}
}
}
}
if(m_ButtonManager.m_lstButton[0]->m_nState == BUTTON_CLICK)
{
// 수리하기
} else if(m_ButtonManager.m_lstButton[1]->m_nState == BUTTON_CLICK)
{
// 모두 수리하기
} else if(m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_CLICK)
{
// 강화하기
g_ClientMain.m_Network.m_pSocket->CharUpgradeItem(g_ClientMain.m_dwMyChrID, g_ClientMain.m_csStatus.m_lpUpgrade[1]->GetNowDurability());
} else if(m_ButtonManager.m_lstButton[3]->m_nState == BUTTON_CLICK)
{
m_ButtonManager.m_lstButton[3]->m_nState = BUTTON_NONE;
ShowWindow(FALSE);
}
return TRUE;
}
void CHumanUpgrade::ShowWindow(BOOL bShow)
{
m_bShow = bShow;
m_ButtonManager.m_lstButton[0]->ShowButton(bShow);
m_ButtonManager.m_lstButton[1]->ShowButton(bShow);
m_ButtonManager.m_lstButton[2]->ShowButton(bShow);
}
void CHumanUpgrade::Render(LPDIRECT3DDEVICE8 lpD3DDevice)
{
m_lstSprite[0]->Render(lpD3DDevice, m_cAlpha);
m_lstSprite[1]->Render(lpD3DDevice, m_cAlpha);
if(g_ClientMain.m_csStatus.m_lpUpgrade[0])
{
g_ClientMain.m_csStatus.m_lpUpgrade[0]->m_wPutX = m_rcWindowSize.left + 36 +
((77 / 2) - (g_ClientMain.m_csStatus.m_lpUpgrade[0]->m_lpSprite->GetSizeX() / 2));
g_ClientMain.m_csStatus.m_lpUpgrade[0]->m_wPutY = m_rcWindowSize.top + 81 +
((103 / 2) - (g_ClientMain.m_csStatus.m_lpUpgrade[0]->m_lpSprite->GetSizeY() / 2));
g_ClientMain.m_csStatus.m_lpUpgrade[0]->Render(lpD3DDevice);
}
if(g_ClientMain.m_csStatus.m_lpUpgrade[1])
{
g_ClientMain.m_csStatus.m_lpUpgrade[1]->m_wPutX = m_rcWindowSize.left + 141 + ((24 - g_ClientMain.m_csStatus.m_lpUpgrade[1]->m_lpSprite->GetSizeX()) / 2);
g_ClientMain.m_csStatus.m_lpUpgrade[1]->m_wPutY = m_rcWindowSize.top + 81 + ((24 - g_ClientMain.m_csStatus.m_lpUpgrade[1]->m_lpSprite->GetSizeY()) / 2);
g_ClientMain.m_csStatus.m_lpUpgrade[1]->Render(lpD3DDevice);
}
if(g_ClientMain.m_lpPickItem)
{
if(g_DeviceInput.InRect(m_rcWindowSize.left + 36, m_rcWindowSize.top + 81, m_rcWindowSize.left + 113, m_rcWindowSize.top + 184))
{
if(g_ClientMain.m_lpPickItem->GetIsEnableUpgrade())
{
g_ClientMain.m_lpCommonInterface->RenderRect(lpD3DDevice, m_rcWindowSize.left + 36, m_rcWindowSize.top + 81, m_rcWindowSize.left + 113, m_rcWindowSize.top + 184, 0xFF0000FF, 0x80);
} else
{
g_ClientMain.m_lpCommonInterface->RenderRect(lpD3DDevice, m_rcWindowSize.left + 36, m_rcWindowSize.top + 81, m_rcWindowSize.left + 113, m_rcWindowSize.top + 184, 0xFFFF0000, 0x80);
}
} else if(g_DeviceInput.InRect(m_rcWindowSize.left + 141, m_rcWindowSize.top + 81, m_rcWindowSize.left + 166, m_rcWindowSize.top + 106))
{
if(g_ClientMain.m_lpPickItem->GetItemType() == Item::CItemType::MATERIAL)
{
g_ClientMain.m_lpCommonInterface->RenderRect(lpD3DDevice, m_rcWindowSize.left + 141, m_rcWindowSize.top + 81, m_rcWindowSize.left + 166, m_rcWindowSize.top + 106, 0xFF0000FF, 0x80);
} else
{
g_ClientMain.m_lpCommonInterface->RenderRect(lpD3DDevice, m_rcWindowSize.left + 141, m_rcWindowSize.top + 81, m_rcWindowSize.left + 166, m_rcWindowSize.top + 106, 0xFFFF0000, 0x80);
}
}
}
m_ButtonManager.Render(lpD3DDevice);
}