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>
146 lines
3.5 KiB
C++
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);
|
|
}
|