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>
243 lines
6.8 KiB
C++
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);
|
|
}
|
|
} |