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

146 lines
3.5 KiB
C++

// CharSkillEditDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "AdminToolClient.h"
#include "CharSkillEditDlg.h"
#include "CharSkillPage.h"
#include "GlobalFunctions.h"
#include "PacketManager.h"
#include <Skill/SkillMgr.h>
#include <Character/ModifyCharacter.h>
// CCharSkillEditDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CCharSkillEditDlg, CDialog)
CCharSkillEditDlg::CCharSkillEditDlg(unsigned char cDlgType, CWnd* pParent)
: CDialog(CCharSkillEditDlg::IDD, pParent)
, m_lpParent(pParent)
, m_cDlgType(cDlgType)
{
}
CCharSkillEditDlg::~CCharSkillEditDlg()
{
}
void CCharSkillEditDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_SKILLLEVELEDIT, m_ctrlSkillLevelEdit);
DDX_Text(pDX, IDC_CURRENT_SKILL_NAME, m_strSkillName);
DDX_Text(pDX, IDC_CURRENT_SKILL_LV, m_cSkillLevel);
}
BEGIN_MESSAGE_MAP(CCharSkillEditDlg, CDialog)
ON_BN_CLICKED(IDC_SKILLLV_EDIT, OnBnClickedSkillLVEdit)
END_MESSAGE_MAP()
// CCharSkillEditDlg 메시지 처리기입니다.
BOOL CCharSkillEditDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CString strWindowText = _T("Don't use thjs dialog~ -_ -;");
if(m_cDlgType == SKILL_ADD)
{
strWindowText = GetLocalString("SKILL_ADD");
}
else if(m_cDlgType == SKILL_EDIT)
{
strWindowText = GetLocalString("SKILL_EDIT");
}
CCharSkillPage* lpSkillPage = static_cast<CCharSkillPage*>(m_lpParent);
CModifyCharacter* lpCharacter = lpSkillPage->GetCharacter();
SKILLSLOT& SkillSlot = lpSkillPage->GetLastSkill();
const Skill::ProtoType* lpPrototype =
CSkillMgr::GetInstance().GetSkillProtoType(SkillSlot.SKILLINFO.wSkill);
if((NULL != lpPrototype) && (NULL != lpCharacter))
{
char cLockCount = SkillSlot.SKILLINFO.cLockCount;
if(cLockCount <= CSkillMgr::MAX_SKILL_LOCKCOUNT)
{
m_strSkillName.Format(_T("%s"), lpPrototype[cLockCount].m_SpriteInfo.m_szName);
}
else
{
return false;
}
short wSkillLevel = lpCharacter->GetSkillLevelEX(SkillSlot.SKILLINFO.wSkill, cLockCount);
if(-1 != wSkillLevel)
{
m_cSkillLevel = (unsigned char)wSkillLevel;
m_ctrlSkillLevelEdit.SetCurSel((int)m_cSkillLevel);
}
else
{
m_cSkillLevel = 0;
m_ctrlSkillLevelEdit.SetCurSel(0);
}
}
else
{
return false;
}
int nSkillLV = 0;
if(0 == SkillSlot.SKILLINFO.cLockCount)
{
nSkillLV = 1;
}
for(nSkillLV; nSkillLV <= CSkillMgr::MAX_SKILL_LEVEL; ++nSkillLV)
{
CString strSkillLevel;
strSkillLevel.Format(_T("LV %d"), nSkillLV);
m_ctrlSkillLevelEdit.AddString(strSkillLevel);
}
UpdateData(false);
SetUIString(this->m_hWnd, IDC_SKILLADDEDIT_01, "IDC_SKILLADDEDIT_01");
SetWindowText(strWindowText);
return TRUE;
}
void CCharSkillEditDlg::OnBnClickedSkillLVEdit()
{
CCharSkillPage* lpSkillPage = (CCharSkillPage*)m_lpParent;
CModifyCharacter* lpCharacter = lpSkillPage->GetCharacter();
SKILLSLOT& SkillSlot = lpSkillPage->GetLastSkill();
CCharSkillPage::SKILL_EDIT_MODE eSkillMode = lpSkillPage->GetMode();
int iSkillLevel = m_ctrlSkillLevelEdit.GetCurSel();
if(0 == SkillSlot.SKILLINFO.cLockCount)
{
++iSkillLevel; // 0단계 스킬인 경우에는 콤보박스 인덱스 + 1
}
if((CCharSkillPage::MODE_EMPTY != eSkillMode) && (-1 != iSkillLevel))
{
SkillSlot.SKILLINFO.cSkillLevel = (char)iSkillLevel;
CPacketMgr::GetInstance()->SendPktSkillEdit(
lpCharacter->GetUID(), lpCharacter->GetCID(), lpCharacter->GetServerGroup(),
lpCharacter->GetClientKey(), SkillSlot.SKILLINFO.wSkill, (char)iSkillLevel,
SkillSlot.SKILLINFO.cLockCount, lpSkillPage->GetMode());
}
EndDialog(IDOK);
}