Files
Client/Server/ToolProject/GameDBTool/CharSkill.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

174 lines
3.9 KiB
C++

// CharSkill.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "GameDBTool.h"
#include "CharSkill.h"
#include "GameDBTool.h"
#include "GameDBToolDlg.h"
#include <BaseLibrary/Utility/Math/Math.h>
#include ".\charskill.h"
// CCharSkill 대화 상자입니다.
IMPLEMENT_DYNAMIC(CCharSkill, CDialog)
CCharSkill::CCharSkill(CWnd* pParent /*=NULL*/)
: CDialog(CCharSkill::IDD, pParent), m_CID(0)
, m_Slot(_T(""))
, m_Total(_T(""))
, m_SkillID(_T(""))
{
memset(&m_Skill, 0, sizeof(SKILL));
}
CCharSkill::~CCharSkill()
{
}
void CCharSkill::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_SLOT, m_Slot);
DDX_Text(pDX, IDC_NUM, m_Total);
DDX_Control(pDX, IDC_SKILL_LIST, m_SkillList);
DDX_Text(pDX, IDC_SKILL, m_SkillID);
}
BOOL CCharSkill::OnInitDialog()
{
CDialog::OnInitDialog();
m_SkillList.SetColumn();
CCharSkill::OnBnClickedLoad();
return TRUE;
}
BEGIN_MESSAGE_MAP(CCharSkill, CDialog)
ON_BN_CLICKED(IDC_RESET, OnBnClickedReset)
ON_BN_CLICKED(IDC_LOAD, OnBnClickedLoad)
ON_BN_CLICKED(IDC_UPDATE, OnBnClickedUpdate)
ON_NOTIFY(LVN_KEYDOWN, IDC_SKILL_LIST, OnLvnKeydownSkillList)
ON_BN_CLICKED(IDC_ADD, OnBnClickedAdd)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
void CCharSkill::OnBnClickedReset()
{
m_SkillList.DeleteAllItems();
}
void CCharSkill::OnBnClickedLoad()
{
CGameDBToolApp* pAppWnd = (CGameDBToolApp*)AfxGetApp();
CGameDBToolDlg* pDlgWnd = (CGameDBToolDlg*)pAppWnd->m_pMainWnd;
if(!DBComponent::GameDB::GetCharSkill(CDBSingleObject::GetInstance(), m_CID, &m_Skill))
{
pDlgWnd->m_Log.LogPrint("[스킬] 캐릭터 스킬 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
m_Slot.Format("%d", m_Skill.wSlotNum);
m_Total.Format("%d", m_Skill.wSkillNum);
m_SkillList.AddSkillRows(&m_Skill);
UpdateData(FALSE);
}
void CCharSkill::OnBnClickedUpdate()
{
CGameDBToolApp* pAppWnd = (CGameDBToolApp*)AfxGetApp();
CGameDBToolDlg* pDlgWnd = (CGameDBToolDlg*)pAppWnd->m_pMainWnd;
m_SkillList.GetSkillRows(&m_Skill);
m_Slot.Format("%d", m_Skill.wSlotNum);
m_Total.Format("%d", m_Skill.wSkillNum);
if(!DBComponent::GameDB::UpdateCharSkill(CDBSingleObject::GetInstance(), m_CID, &m_Skill))
{
pDlgWnd->m_Log.LogPrint("[스킬] 캐릭터 스킬 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
else
{
pDlgWnd->m_Log.LogPrint("[스킬] 캐릭터 스킬 쓰기 완료.");
}
UpdateData(FALSE);
}
void CCharSkill::OnLvnKeydownSkillList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN>(pNMHDR);
POSITION Pos;
int IndexCount = 0, IndexNum = 0;
int Index[2000] = {0,};
if(pLVKeyDow->wVKey == VK_DELETE)
{
Pos= m_SkillList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
while(Pos)
{
Index[IndexNum++] = m_SkillList.GetNextSelectedItem(Pos);
}
for(IndexCount = IndexNum - 1; IndexCount >= 0; IndexCount--)
m_SkillList.DeleteItem(Index[IndexCount]);
}
}
*pResult = 0;
}
void CCharSkill::OnBnClickedAdd()
{
UpdateData();
unsigned short SkillID = Math::Convert::StrToHex16(m_SkillID.GetBuffer(0));
m_Skill.SSlot[m_Skill.wSlotNum].SKILLINFO.wSkill = SkillID;
m_Skill.SSlot[m_Skill.wSlotNum].SKILLINFO.cLockCount = 0;
m_Skill.SSlot[m_Skill.wSlotNum].SKILLINFO.cSkillLevel = 1;
m_Skill.wSlotNum += 1;
m_Skill.wSkillNum += 1;
m_Slot.Format("%d", m_Skill.wSlotNum);
m_Total.Format("%d", m_Skill.wSkillNum);
m_SkillList.AddSkillRows(&m_Skill);
UpdateData(FALSE);
}
HBRUSH CCharSkill::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 여기서 DC의 특성을 변경합니다.
HBRUSH m_hBrush;
m_hBrush = CreateSolidBrush(RGB( 255, 169, 128));
switch( nCtlColor ){
case CTLCOLOR_DLG:
pDC->SetBkColor(RGB( 255, 255, 255));
pDC->SetTextColor(RGB( 0, 0, 0));
return m_hBrush;
break;
case CTLCOLOR_STATIC:
pDC->SetBkColor(RGB( 255, 169, 128));
pDC->SetTextColor(RGB( 0, 0, 0));
return m_hBrush;
break;
default:
return hbr;
break;
}
}