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

329 lines
11 KiB
C++

// HumanJobChange.cpp: implementation of the CHumanJobChange class.
//
//////////////////////////////////////////////////////////////////////
#include "ClientMain.h"
#include "GUITextEdit.h"
#include "HumanJobChange.h"
#include "WinInput.h"
#include "GUIMessageBox.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CHumanJobChange::CHumanJobChange()
{
}
CHumanJobChange::~CHumanJobChange()
{
}
BOOL CHumanJobChange::Init(unsigned short x, unsigned short y)
{
CSprite *lpSprite;
lpSprite = new CSprite;
lpSprite->Create(x, y, 0, 0, 256, 256, g_ClientMain.m_lpInterface->m_lstTexture[35]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite;
lpSprite->Create(x + 256, y, 0, 0, 78, 256, g_ClientMain.m_lpInterface->m_lstTexture[36]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite;
lpSprite->Create(x, y + 256, 0, 0, 256, 160, g_ClientMain.m_lpInterface->m_lstTexture[37]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite;
lpSprite->Create(x + 256, y + 256, 0, 0, 78, 160, g_ClientMain.m_lpInterface->m_lstTexture[38]);
m_lstSprite.push_back(lpSprite);
CGUIButton *lpButton;
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(58, 379, 82, 0, 201, 20, g_ClientMain.m_lpInterface->m_lstTexture[36]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(58, 379, 82, 0, 201, 20, g_ClientMain.m_lpInterface->m_lstTexture[38]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[175]);
lpButton->SetMove(x, y);
lpButton->ShowButton(FALSE);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(198, 379, 82, 26, 201, 46, g_ClientMain.m_lpInterface->m_lstTexture[36]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(198, 379, 82, 26, 201, 46, g_ClientMain.m_lpInterface->m_lstTexture[38]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[176]);
lpButton->SetMove(x, y);
lpButton->ShowButton(FALSE);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(58, 379, 82, 52, 201, 72, g_ClientMain.m_lpInterface->m_lstTexture[36]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(58, 379, 82, 52, 201, 72, g_ClientMain.m_lpInterface->m_lstTexture[38]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[177]);
lpButton->SetMove(x, y);
lpButton->ShowButton(FALSE);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(198, 379, 82, 78, 201, 98, g_ClientMain.m_lpInterface->m_lstTexture[36]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(198, 379, 82, 78, 201, 98, g_ClientMain.m_lpInterface->m_lstTexture[38]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[178]);
lpButton->SetMove(x, y);
lpButton->ShowButton(FALSE);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(58, 379, 82, 104, 201, 124, g_ClientMain.m_lpInterface->m_lstTexture[36]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(58, 379, 82, 104, 201, 124, g_ClientMain.m_lpInterface->m_lstTexture[38]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[179]);
lpButton->SetMove(x, y);
lpButton->ShowButton(FALSE);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(198, 379, 82, 130, 201, 150, g_ClientMain.m_lpInterface->m_lstTexture[36]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(198, 379, 82, 130, 201, 150, g_ClientMain.m_lpInterface->m_lstTexture[38]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[180]);
lpButton->SetMove(x, y);
lpButton->ShowButton(FALSE);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(58, 379, 82, 156, 201, 176, g_ClientMain.m_lpInterface->m_lstTexture[36]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(58, 379, 82, 156, 201, 176, g_ClientMain.m_lpInterface->m_lstTexture[38]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[181]);
lpButton->SetMove(x, y);
lpButton->ShowButton(FALSE);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(198, 379, 82, 182, 201, 202, g_ClientMain.m_lpInterface->m_lstTexture[36]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(198, 379, 82, 182, 201, 202, g_ClientMain.m_lpInterface->m_lstTexture[38]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[182]);
lpButton->SetMove(x, y);
lpButton->ShowButton(FALSE);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(281, 355, 221, 126, 234, 138, g_ClientMain.m_lpInterface->m_lstTexture[36]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(281, 355, 234, 126, 247, 138, g_ClientMain.m_lpInterface->m_lstTexture[36]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[183]);
lpButton->SetMove(x, y);
lpButton->ShowButton(FALSE);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_SIMPLE;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(299, 355, 221, 138, 234, 150, g_ClientMain.m_lpInterface->m_lstTexture[36]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(299, 355, 234, 138, 247, 150, g_ClientMain.m_lpInterface->m_lstTexture[36]);
lpButton->SetTooltip(&m_TooltipManager, g_StringTable.m_strString[184]);
lpButton->SetMove(x, y);
lpButton->ShowButton(FALSE);
m_ButtonManager.AddButton(lpButton);
m_bShow = FALSE;
m_dwWindowKind = WINDOW_FIX;
m_rcWindowSize.left = x; m_rcWindowSize.top = y;
m_rcWindowSize.right = x + 334; m_rcWindowSize.bottom = y + 416;
m_rcMoveEdge.left = x; m_rcMoveEdge.top = y;
m_rcMoveEdge.right = x + 334; m_rcMoveEdge.bottom = y + 20;
InitValue();
return TRUE;
}
void CHumanJobChange::InitValue(void)
{
for(int i = 0; i < 10; i++)
{
m_ButtonManager.m_lstButton[i]->ShowButton(FALSE);
}
switch(g_ClientMain.m_csStatus.m_Info.Class)
{
case 1:
m_ButtonManager.m_lstButton[0]->ShowButton(TRUE);
m_ButtonManager.m_lstButton[1]->ShowButton(TRUE);
break;
case 2:
m_ButtonManager.m_lstButton[2]->ShowButton(TRUE);
m_ButtonManager.m_lstButton[3]->ShowButton(TRUE);
break;
case 3:
m_ButtonManager.m_lstButton[4]->ShowButton(TRUE);
m_ButtonManager.m_lstButton[5]->ShowButton(TRUE);
break;
case 4:
m_ButtonManager.m_lstButton[6]->ShowButton(TRUE);
m_ButtonManager.m_lstButton[7]->ShowButton(TRUE);
break;
}
m_dwChangeResult = 0;
m_wClassChange = 0;
}
BOOL CHumanJobChange::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 + 18);
unsigned long dwMousePosY = ptMousePos->y - (m_rcWindowSize.top + 286);
m_ButtonManager.Update();
m_TooltipManager.Update();
if(m_dwChangeResult & MB_YES)
{
g_ClientMain.m_Network.m_nsNetworkState = NS_UPGRADECLASS;
g_ClientMain.m_Network.m_pSocket->CharClassUpgrade(g_ClientMain.m_dwMyChrID, m_wClassChange);
m_dwChangeResult = 0;
m_wClassChange = 0;
ShowWindow(FALSE);
return TRUE;
} else if(m_dwChangeResult & MB_NO || m_dwChangeResult & MB_EXIT)
{
m_dwChangeResult = 0;
m_wClassChange = 0;
return TRUE;
}
for(int i = 0; i < 8; i++)
{
if(m_ButtonManager.m_lstButton[i]->m_nState == BUTTON_CLICK)
{
char strText[MAX_PATH];
CGUIMessageBox *lpMessageBox = new CGUIMessageBox;
sprintf(strText, g_StringTable.m_strString[185], g_ClientMain.m_lpCommonInterface->GetClassName(5 + i));
lpMessageBox->Create(strText, MB_YES | MB_NO | MB_EXIT);
lpMessageBox->SetResult(&m_dwChangeResult);
m_dwChangeResult = 0;
m_wClassChange = 5 + i;
break;
}
}
return TRUE;
}
void CHumanJobChange::ShowWindow(BOOL bShow)
{
m_bShow = bShow;
for(int i = 0; i < 10; i++)
{
m_ButtonManager.m_lstButton[i]->ShowButton(bShow);
}
if(bShow == FALSE)
{
vector<LPMessage>::iterator it;
LPMessage lpMessage;
for(it = m_lstMessage.begin(); it != m_lstMessage.end();)
{
lpMessage = (*it);
it = m_lstMessage.erase(it);
delete lpMessage;
}
m_lstMessage.clear();
}
}
void CHumanJobChange::Render(LPDIRECT3DDEVICE8 lpD3DDevice)
{
m_lstSprite[0]->Render(lpD3DDevice);
m_lstSprite[1]->Render(lpD3DDevice);
m_lstSprite[2]->Render(lpD3DDevice);
m_lstSprite[3]->Render(lpD3DDevice);
RECT rect;
for(int i = 0; i < m_lstMessage.size(); i++)
{
rect.left = m_rcWindowSize.left + 14;
rect.top = m_rcWindowSize.top + 20 + i * 16;
rect.right = rect.left + 304;
rect.bottom = rect.top + 16;
g_TextEdit.DrawText(m_lstMessage[i]->strMessage, &rect, DT_LEFT | DT_VCENTER, D3DCOLOR_RGBA(255, 255, 255, 255));
}
m_ButtonManager.Render(lpD3DDevice);
}
void CHumanJobChange::SetText(const char *strMessage)
{
vector<LPMessage>::iterator it;
LPMessage lpMessage;
for(it = m_lstMessage.begin(); it != m_lstMessage.end();)
{
lpMessage = (*it);
it = m_lstMessage.erase(it);
delete lpMessage;
}
m_lstMessage.clear();
char *strMessageTemp, *token, seps[] = "\\n";
strMessageTemp = new char[strlen(strMessage) + 100];
strcpy(strMessageTemp, strMessage);
token = strtok(strMessageTemp, seps);
while(token != NULL)
{
lpMessage = new Message;
strcpy(lpMessage->strMessage, token);
m_lstMessage.push_back(lpMessage);
token = strtok(NULL, seps);
}
delete[] strMessageTemp;
}