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

270 lines
9.3 KiB
C++
Raw Permalink Blame History

// HumanChrSelect2.cpp: implementation of the CHumanChrSelect2 class.
//
//////////////////////////////////////////////////////////////////////
#include "ClientMain.h"
#include "HumanGUI.h"
#include "HumanChrSelect2.h"
#include "FrameTimer.h"
#include "GUIMessageBoxManager.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CHumanChrSelect2::CHumanChrSelect2()
{
}
CHumanChrSelect2::~CHumanChrSelect2()
{
}
void CHumanChrSelect2::InitValue(void)
{
m_dwChrDeleteResult = 0;
m_dwEndTimer = 0xFFFFFFFF;
g_ClientMain.m_bDeleteChar = FALSE;
}
BOOL CHumanChrSelect2::Init(unsigned short x, unsigned short y)
{
CSprite *lpSprite;
lpSprite = new CSprite;
lpSprite->Create(0, 457, 0, 0, 234, 143, g_ClientMain.m_lpInterface->m_lstTexture[1]);
m_lstSprite.push_back(lpSprite);
lpSprite = new CSprite;
lpSprite->Create(617, 462, 73, 0, 256, 143, g_ClientMain.m_lpInterface->m_lstTexture[2]);
m_lstSprite.push_back(lpSprite);
CGUIButton *lpButton;
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_NORMAL;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(61, 479, 0, 143, 163, 177, g_ClientMain.m_lpInterface->m_lstTexture[1]);
lpButton->m_lpOnMouseButton = new CSprite;
lpButton->m_lpOnMouseButton->Create(61, 479, 0, 177, 163, 211, g_ClientMain.m_lpInterface->m_lstTexture[1]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(61, 479, 0, 211, 163, 245, g_ClientMain.m_lpInterface->m_lstTexture[1]);
lpButton->SetTooltip(&m_TooltipManager, "");
lpButton->SetMove(x, y);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_NORMAL;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(31, 527, 144, 154, 256, 188, g_ClientMain.m_lpInterface->m_lstTexture[2]);
lpButton->m_lpOnMouseButton = new CSprite;
lpButton->m_lpOnMouseButton->Create(31, 527, 144, 188, 256, 222, g_ClientMain.m_lpInterface->m_lstTexture[2]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(31, 527, 144, 222, 256, 256, g_ClientMain.m_lpInterface->m_lstTexture[2]);
lpButton->SetTooltip(&m_TooltipManager, "");
lpButton->SetMove(x, y);
m_ButtonManager.AddButton(lpButton);
lpButton = new CGUIButton;
lpButton->m_nMethod = BUTTON_NORMAL;
lpButton->m_lpNormalButton = new CSprite;
lpButton->m_lpNormalButton->Create(624, 526, 0, 154, 144, 188, g_ClientMain.m_lpInterface->m_lstTexture[2]);
lpButton->m_lpOnMouseButton = new CSprite;
lpButton->m_lpOnMouseButton->Create(624, 526, 0, 188, 144, 222, g_ClientMain.m_lpInterface->m_lstTexture[2]);
lpButton->m_lpClickMouseButton = new CSprite;
lpButton->m_lpClickMouseButton->Create(624, 526, 0, 222, 144, 256, g_ClientMain.m_lpInterface->m_lstTexture[2]);
lpButton->SetTooltip(&m_TooltipManager, "");
lpButton->SetMove(x, y);
m_ButtonManager.AddButton(lpButton);
m_dwWindowKind = WINDOW_FIX;
m_rcWindowSize.left = x; m_rcWindowSize.top = y;
m_rcWindowSize.right = x; m_rcWindowSize.bottom = y;
m_rcMoveEdge.left = x; m_rcMoveEdge.top = y;
m_rcMoveEdge.right = x; m_rcMoveEdge.bottom = y;
return TRUE;
}
BOOL CHumanChrSelect2::Update(BOOL &bClick, BOOL &bEdge)
{
g_MessageBoxManager.Update();
if(g_ClientMain.m_bSelectChar) return TRUE;
if(m_dwEndTimer != 0xFFFFFFFF)
{
if(CFrameTimer::GetUpdateTimer(m_dwEndTimer) >= 1.0f)
{
g_ClientMain.m_dwClientState = CHRSELECT_INITSELECT;
g_MessageBoxManager.DestroyList();
}
return TRUE;
}
if(m_dwChrDeleteResult & MB_YES)
{
g_ClientMain.m_bDeleteChar = TRUE;
g_ClientMain.m_Network.SendDeleteChar(g_ClientMain.m_dwSelectChr, g_ClientMain.m_scLoginChar[g_ClientMain.m_dwSelectChr].UID);
CGUIMessageBox *lpMessage;
lpMessage = new CGUIMessageBox;
lpMessage->Create(g_StringTable.m_strString[120]);
lpMessage->SetTimer(100000);
m_dwChrDeleteResult = 0;
return TRUE;
} else if(m_dwChrDeleteResult & MB_NO || m_dwChrDeleteResult & MB_EXIT)
{
m_dwChrDeleteResult = 0;
return TRUE;
}
if(g_ClientMain.m_Network.GetState() != NS_NOWAITING)
return TRUE;
if(g_ClientMain.m_bDeleteChar)
{
if(g_ClientMain.m_Network.GetState() == NS_NOWAITING)
{
if(!g_ClientMain.m_Network.GetError())
{
for(int cCash=0;cCash<g_CharacterData.m_ChrCashList.num;cCash++)
{
if(g_CharacterData.m_lstCharData[g_ClientMain.m_dwSelectChr]->m_lpChrModel==g_CharacterData.m_ChrCashList[cCash].m_lpChrModel)
{
g_ClientMain.m_lpSceneManager->DeleteCharacter(g_CharacterData.m_lstCharData[g_ClientMain.m_dwSelectChr]->m_lpChrModel);
g_CharacterData.m_ChrCashList[cCash].m_lpChrModel = g_CharacterData.m_lstCharData[g_ClientMain.m_dwSelectChr]->m_lpChrModel = g_ClientMain.m_lpSceneManager->AddCharacter("PC_MAN.GCMDS", "FACE01", "HAIR01");
for(int j = 0; j < 15; j++)
{
strcpy(g_CharacterData.m_lstCharData[g_ClientMain.m_dwSelectChr]->m_strShape[j], "");
}
break;
}
}
g_CharacterData.m_lstCharData[g_ClientMain.m_dwSelectChr]->m_lpChrModel->SetPosition(g_ClientMain.m_vecCharSelectPos[g_ClientMain.m_dwSelectChr]);
g_CharacterData.m_lstCharData[g_ClientMain.m_dwSelectChr]->m_lpChrModel->SetDirection(0.0f);
// g_CharacterData.m_lstCharData[g_ClientMain.m_dwSelectChr]->m_lpChrModel->SetMotion("WAIT");
g_CharacterData.m_lstCharData[g_ClientMain.m_dwSelectChr]->InitWeapon(0);
m_dwEndTimer = CFrameTimer::Regist(1.0f);
char strCameraPath[MAX_PATH];
switch(g_ClientMain.m_dwSelectChr)
{
case 0:
sprintf(strCameraPath, "%s\\1stCSzo.zca", g_ClientMain.m_strClientPath);
g_ClientMain.m_lpSceneManager->GetCamera()->Unload();
g_ClientMain.m_lpSceneManager->GetCamera()->Load(strCameraPath);
g_ClientMain.m_lpSceneManager->GetCamera()->SetTotalAniTime(1000.0f);
g_ClientMain.m_lpSceneManager->GetCamera()->StartPlay();
g_ClientMain.m_lpSceneManager->GetCamera()->PlayAnimate();
break;
case 1:
sprintf(strCameraPath, "%s\\2ndCSzo.zca", g_ClientMain.m_strClientPath);
g_ClientMain.m_lpSceneManager->GetCamera()->Unload();
g_ClientMain.m_lpSceneManager->GetCamera()->Load(strCameraPath);
g_ClientMain.m_lpSceneManager->GetCamera()->SetTotalAniTime(1000.0f);
g_ClientMain.m_lpSceneManager->GetCamera()->StartPlay();
g_ClientMain.m_lpSceneManager->GetCamera()->PlayAnimate();
break;
case 2:
sprintf(strCameraPath, "%s\\3rdCSzo.zca", g_ClientMain.m_strClientPath);
g_ClientMain.m_lpSceneManager->GetCamera()->Unload();
g_ClientMain.m_lpSceneManager->GetCamera()->Load(strCameraPath);
g_ClientMain.m_lpSceneManager->GetCamera()->SetTotalAniTime(1000.0f);
g_ClientMain.m_lpSceneManager->GetCamera()->StartPlay();
g_ClientMain.m_lpSceneManager->GetCamera()->PlayAnimate();
break;
}
g_ClientMain.m_dwSelectChr = 0xFFFFFFFF;
} else
{
g_ClientMain.m_bDeleteChar = FALSE;
}
}
return TRUE;
}
m_ButtonManager.Update();
m_TooltipManager.Update();
if(m_ButtonManager.m_lstButton[0]->m_nState == BUTTON_CLICK) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
CGUIMessageBox *lpMessage;
lpMessage = new CGUIMessageBox;
lpMessage->Create(g_StringTable.m_strString[121], MB_EXIT | MB_YES | MB_NO);
lpMessage->SetResult(&m_dwChrDeleteResult);
m_dwChrDeleteResult = 0;
return TRUE;
} else if(m_ButtonManager.m_lstButton[1]->m_nState == BUTTON_CLICK) // <20><><EFBFBD><EFBFBD>
{
char strCameraPath[MAX_PATH];
m_dwEndTimer = CFrameTimer::Regist(1.0f);
switch(g_ClientMain.m_dwSelectChr)
{
case 0:
sprintf(strCameraPath, "%s\\1stCSzo.zca", g_ClientMain.m_strClientPath);
g_ClientMain.m_lpSceneManager->GetCamera()->Unload();
g_ClientMain.m_lpSceneManager->GetCamera()->Load(strCameraPath);
g_ClientMain.m_lpSceneManager->GetCamera()->SetTotalAniTime(1000.0f);
g_ClientMain.m_lpSceneManager->GetCamera()->StartPlay();
g_ClientMain.m_lpSceneManager->GetCamera()->PlayAnimate();
break;
case 1:
sprintf(strCameraPath, "%s\\2ndCSzo.zca", g_ClientMain.m_strClientPath);
g_ClientMain.m_lpSceneManager->GetCamera()->Unload();
g_ClientMain.m_lpSceneManager->GetCamera()->Load(strCameraPath);
g_ClientMain.m_lpSceneManager->GetCamera()->SetTotalAniTime(1000.0f);
g_ClientMain.m_lpSceneManager->GetCamera()->StartPlay();
g_ClientMain.m_lpSceneManager->GetCamera()->PlayAnimate();
break;
case 2:
sprintf(strCameraPath, "%s\\3rdCSzo.zca", g_ClientMain.m_strClientPath);
g_ClientMain.m_lpSceneManager->GetCamera()->Unload();
g_ClientMain.m_lpSceneManager->GetCamera()->Load(strCameraPath);
g_ClientMain.m_lpSceneManager->GetCamera()->SetTotalAniTime(1000.0f);
g_ClientMain.m_lpSceneManager->GetCamera()->StartPlay();
g_ClientMain.m_lpSceneManager->GetCamera()->PlayAnimate();
break;
}
g_ClientMain.m_dwSelectChr = 0xFFFFFFFF;
return TRUE;
} else if(m_ButtonManager.m_lstButton[2]->m_nState == BUTTON_CLICK) // <20><><EFBFBD><EFBFBD><EEB0A1>
{
g_ClientMain.m_Network.CharSelect(g_ClientMain.m_scLoginChar[g_ClientMain.m_dwSelectChr].UID);
}
return TRUE;
}
void CHumanChrSelect2::Render(LPDIRECT3DDEVICE8 lpD3DDevice)
{
if(m_dwEndTimer != 0xFFFFFFFF) return;
m_lstSprite[0]->Render(lpD3DDevice, m_cAlpha);
m_lstSprite[1]->Render(lpD3DDevice, m_cAlpha);
m_ButtonManager.Render(lpD3DDevice, m_cAlpha);
g_MessageBoxManager.Render(lpD3DDevice);
}