Files
Client/Server/AdminTool/AdminToolClient/CharStatusPage.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

243 lines
6.8 KiB
C++

// CharStatusPage.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "AdminToolClient.h"
#include "CharStatusPage.h"
#include "PacketManager.h"
#include "GlobalFunctions.h"
#include <Character/ModifyCharacter.h>
#include <Creature/CreatureStructure.h>
#include <Creature/Character/ExpTable.h>
#include <Network/Protocol/Ryl_AdminMgrProtocol.h>
// CCharStatusPage 대화 상자입니다.
IMPLEMENT_DYNAMIC(CCharStatusPage, CPropertyPage)
CCharStatusPage::CCharStatusPage()
: CPropertyPage(CCharStatusPage::IDD)
, m_lpStatusPageInfo( NULL )
, m_dwFame(0)
, m_dwMileage(0)
, m_dwLV(0)
, m_dwSTR(0)
, m_dwDEX(0)
, m_dwWIS(0)
, m_dwINT(0)
, m_dwCON(0)
, m_dwIP(0)
, m_dwHP(0)
, m_dwMP(0)
, m_dwEXP(0)
, m_dwEXPLimit(0)
, m_dwDocKey(0)
{
}
CCharStatusPage::~CCharStatusPage()
{
}
void CCharStatusPage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CHARSEX, m_ctrlCharSex);
DDX_Control(pDX, IDC_CHARHAIR, m_ctrlCharHair);
DDX_Control(pDX, IDC_CHARFACE, m_ctrlCharFace);
DDX_Control(pDX, IDC_CHARNATIONALITY, m_ctrlCharRace);
DDX_Control(pDX, IDC_CHARCLASS, m_ctrlCharClass);
DDX_Text(pDX, IDC_STATUS_FAME, m_dwFame);
DDX_Text(pDX, IDC_STATUS_MILEAGE, m_dwMileage);
DDX_Text(pDX, IDC_STATUS_LV, m_dwLV);
DDX_Text(pDX, IDC_STATUS_STR, m_dwSTR);
DDX_Text(pDX, IDC_STATUS_DEX, m_dwDEX);
DDX_Text(pDX, IDC_STATUS_WIS, m_dwWIS);
DDX_Text(pDX, IDC_STATUS_INT, m_dwINT);
DDX_Text(pDX, IDC_STATUS_CON, m_dwCON);
DDX_Text(pDX, IDC_STATUS_IP, m_dwIP);
DDX_Text(pDX, IDC_STATUS_HP, m_dwHP);
DDX_Text(pDX, IDC_STATUS_MP, m_dwMP);
DDX_Text(pDX, IDC_STATUS_EXP, m_dwEXP);
DDX_Text(pDX, IDC_STATUS_EXPLIMIT, m_dwEXPLimit);
}
BEGIN_MESSAGE_MAP(CCharStatusPage, CPropertyPage)
ON_BN_CLICKED(IDC_UPDATE_STATUS, OnBnClickedUpdateStatus)
END_MESSAGE_MAP()
// CCharStatusPage 메시지 처리기입니다.
BOOL CCharStatusPage::OnInitDialog()
{
CPropertyPage::OnInitDialog();
// 성별
m_ctrlCharSex.InsertString(0, GetLocalString("MALE"));
m_ctrlCharSex.InsertString(1, GetLocalString("FEMALE"));
// 머리모양과 얼굴
for(int nIndex = 1; nIndex < 8; ++nIndex)
{
CString strFaceandHair;
strFaceandHair.Format(_T("Type %d"), nIndex);
m_ctrlCharFace.AddString(strFaceandHair);
m_ctrlCharHair.AddString(strFaceandHair);
}
// 종족 (나중에 콤보박스 인덱스를 그대로 사용할 수 있도록 인서트할때 인덱스 엄수)
for(unsigned int nIndex = 0; nIndex < CClass::MAX_RACE; ++nIndex)
{
m_ctrlCharRace.InsertString(nIndex, GetRaceString(nIndex));
}
// 클래스 (나중에 콤보박스 인덱스를 그대로 사용할 수 있도록 인서트할때 인덱스 엄수)
for(int nClass = 0; nClass < CClass::MAX_CLASS; ++nClass)
{
m_ctrlCharClass.InsertString(nClass, GetClassString(nClass));
}
if(NULL == m_lpStatusPageInfo)
{
GetDlgItem(IDC_UPDATE_STATUS)->EnableWindow(false);
}
SetUIString(this->m_hWnd, IDC_STATUSPAGE_01, "IDC_STATUSPAGE_01");
SetUIString(this->m_hWnd, IDC_STATUSPAGE_02, "IDC_STATUSPAGE_02");
SetUIString(this->m_hWnd, IDC_STATUSPAGE_03, "IDC_STATUSPAGE_03");
SetUIString(this->m_hWnd, IDC_STATUSPAGE_04, "IDC_STATUSPAGE_04");
SetUIString(this->m_hWnd, IDC_STATUSPAGE_05, "IDC_STATUSPAGE_05");
SetUIString(this->m_hWnd, IDC_STATUSPAGE_06, "IDC_STATUSPAGE_06");
SetUIString(this->m_hWnd, IDC_STATUSPAGE_07, "IDC_STATUSPAGE_07");
SetUIString(this->m_hWnd, IDC_STATUSPAGE_08, "IDC_STATUSPAGE_08");
SetUIString(this->m_hWnd, IDC_UPDATE_STATUS, "IDC_UPDATE_STATUS");
SetUIString(this->m_hWnd, IDC_STATCHANCE, "ADDED_STRING_082");
SetUIString(this->m_hWnd, IDC_NATION_STATIC, "ADDED_STRING_083");
return TRUE;
}
bool CCharStatusPage::SetStatusPageData(unsigned int dwDocKey, CModifyCharacter* lpModifyCharacter)
{
if(NULL != lpModifyCharacter && 0 != dwDocKey)
{
m_lpStatusPageInfo = lpModifyCharacter;
m_dwDocKey = dwDocKey;
GetDlgItem(IDC_UPDATE_STATUS)->EnableWindow(true);
return true;
}
else
{
GetDlgItem(IDC_UPDATE_STATUS)->EnableWindow(false);
}
return false;
}
bool CCharStatusPage::SetStatusPage(CModifyCharacter* lpCharInfo)
{
m_dwEXPLimit = 0;
if(NULL != lpCharInfo)
{
PktAdminMgr::CHAR_STATUS_ST CharStatusInfo;
lpCharInfo->GetModifyCharStatus(CharStatusInfo);
m_ctrlCharRace.SetCurSel((int)lpCharInfo->GetRace());
m_dwLV = (unsigned int)CharStatusInfo.m_cLevel;
m_ctrlCharClass.SetCurSel((unsigned int)CharStatusInfo.m_nClass);
m_dwEXP = (unsigned long)CharStatusInfo.m_dwExp;
if(m_dwLV > 0 && m_dwLV < Creature::PC_MAX_LEVEL)
m_dwEXPLimit = (unsigned long)EXP::ExpTable[m_dwLV-1];
m_ctrlCharSex.SetCurSel ((unsigned int)CharStatusInfo.m_cSex - 1);
m_ctrlCharFace.SetCurSel((unsigned int)CharStatusInfo.m_cFace - 1);
m_ctrlCharHair.SetCurSel((unsigned int)CharStatusInfo.m_cHair - 1);
m_dwFame = (unsigned long)CharStatusInfo.m_dwFame;
m_dwMileage = (unsigned long)CharStatusInfo.m_dwMileage;
m_dwSTR = (unsigned int)CharStatusInfo.m_nSTR;
m_dwDEX = (unsigned int)CharStatusInfo.m_nDEX;
m_dwCON = (unsigned int)CharStatusInfo.m_nCON;
m_dwWIS = (unsigned int)CharStatusInfo.m_nWIS;
m_dwINT = (unsigned int)CharStatusInfo.m_nINT;
m_dwIP = (unsigned int)CharStatusInfo.m_nIP;
m_dwHP = (unsigned long)lpCharInfo->GetMaxHP();
m_dwMP = (unsigned long)lpCharInfo->GetMaxMP();
SetDlgItemText(IDC_STATUS_NATION, GetNationString(lpCharInfo->GetUserNation()));
SetDlgItemInt(IDC_STATUS_CHANCE, (unsigned int)lpCharInfo->GetChance(), false);
}
else
{
m_dwFame = m_dwMileage = m_dwLV = 0;
m_dwSTR = m_dwDEX = m_dwCON = m_dwWIS = m_dwINT = m_dwIP = 0;
m_dwHP = m_dwMP = 0;
m_dwEXP = 0;
m_ctrlCharRace.SetCurSel(CB_ERR);
m_ctrlCharClass.SetCurSel(CB_ERR);
m_ctrlCharSex.SetCurSel(CB_ERR);
m_ctrlCharFace.SetCurSel(CB_ERR);
m_ctrlCharHair.SetCurSel(CB_ERR);
SetDlgItemInt(IDC_STATUS_CHANCE, 0, false);
}
UpdateData(false);
return true;
}
void CCharStatusPage::OnBnClickedUpdateStatus()
{
PktAdminMgr::CHAR_STATUS_ST stStatus;
UpdateData(true);
CString strGetString;
m_ctrlCharRace.GetLBText(m_ctrlCharRace.GetCurSel(), strGetString);
if(0 == strGetString.CompareNoCase(_T("UNKNOWN")))
{
MessageBox(GetLocalString("MSG_0168"));
return;
}
stStatus.m_cRace = (char)m_ctrlCharRace.GetCurSel();
stStatus.m_cLevel = m_dwLV;
stStatus.m_nClass = m_ctrlCharClass.GetCurSel();
stStatus.m_dwExp = m_dwEXP;
stStatus.m_cFace = m_ctrlCharFace.GetCurSel() + 1;
stStatus.m_cHair = m_ctrlCharHair.GetCurSel() + 1;
stStatus.m_cSex = m_ctrlCharSex.GetCurSel() + 1;
stStatus.m_dwFame = m_dwFame;
stStatus.m_dwMileage = m_dwMileage;
stStatus.m_nCON = m_dwCON;
stStatus.m_nDEX = m_dwDEX;
stStatus.m_nINT = m_dwINT;
stStatus.m_nSTR = m_dwSTR;
stStatus.m_nWIS = m_dwWIS;
stStatus.m_nIP = m_dwIP;
stStatus.m_cChance = (char)GetDlgItemInt(IDC_STATUS_CHANCE, 0, false);
if(NULL != m_lpStatusPageInfo)
{
CPacketMgr::GetInstance()->SendUpdateStatus(m_lpStatusPageInfo->GetServerGroup(),
m_lpStatusPageInfo->GetCID(), m_lpStatusPageInfo->GetUID(), m_dwDocKey, stStatus);
}
}