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>
174 lines
3.9 KiB
C++
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;
|
|
}
|
|
}
|