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>
This commit is contained in:
432
Server/AdminTool/AdminToolClient/CharSkillPage.cpp
Normal file
432
Server/AdminTool/AdminToolClient/CharSkillPage.cpp
Normal file
@@ -0,0 +1,432 @@
|
||||
// CharSkillPage.cpp : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "AdminToolClient.h"
|
||||
#include "CharSkillPage.h"
|
||||
#include "CharSkillEditDlg.h"
|
||||
#include "PacketManager.h"
|
||||
#include "GlobalFunctions.h"
|
||||
#include "ListCtrlSortClass.h"
|
||||
|
||||
#include <Log/ServerLog.h>
|
||||
#include <Skill/SkillMgr.h>
|
||||
#include <Character/ModifyCharacter.h>
|
||||
#include <Utility/Math/Math.h>
|
||||
|
||||
|
||||
// CCharSkillPage <20><>ȭ <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
||||
|
||||
IMPLEMENT_DYNAMIC(CCharSkillPage, CPropertyPage)
|
||||
CCharSkillPage::CCharSkillPage()
|
||||
: CPropertyPage(CCharSkillPage::IDD)
|
||||
, m_dwSkillMaxNum(0)
|
||||
, m_dwSkillUseNum(0)
|
||||
, m_dwDocKey(0)
|
||||
, m_ContextType(CONTEXT_MENU_TYPE::NONE)
|
||||
, m_EditMode(SKILL_EDIT_MODE::MODE_EMPTY)
|
||||
, m_bSortListAsc(false)
|
||||
{
|
||||
}
|
||||
|
||||
CCharSkillPage::~CCharSkillPage()
|
||||
{
|
||||
}
|
||||
|
||||
void CCharSkillPage::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CPropertyPage::DoDataExchange(pDX);
|
||||
|
||||
DDX_Control(pDX, IDC_CHARSKILLLIST, m_ctrlCharSkillList);
|
||||
DDX_Control(pDX, IDC_SKILL_LIST, m_ctrlWantSkillList);
|
||||
DDX_Text(pDX, IDC_SKILL_MAXNUM, m_dwSkillMaxNum);
|
||||
DDX_Text(pDX, IDC_SKILL_USENUM, m_dwSkillUseNum);
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CCharSkillPage, CPropertyPage)
|
||||
ON_WM_CONTEXTMENU()
|
||||
ON_COMMAND(ID_SKILL_INSERT, OnSkillAddCM)
|
||||
ON_COMMAND(ID_CHARSKILLEDITCM, OnSkillEditCM)
|
||||
ON_COMMAND(ID_CHARSKILLDELCM, OnSkillDelCM)
|
||||
ON_NOTIFY(NM_DBLCLK, IDC_CHARSKILLLIST, OnNMDblclkCharskilllist)
|
||||
ON_LBN_DBLCLK(IDC_SKILL_LIST, OnLbnDblclkSkillList)
|
||||
ON_BN_CLICKED(IDC_SKILLPAGE_CLIPSKILL_BTN, OnBnClickedSkillpageClipskillBtn)
|
||||
ON_NOTIFY(LVN_COLUMNCLICK, IDC_CHARSKILLLIST, OnLvnColumnclickCharskilllist)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
// CCharSkillPage <20><EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
||||
|
||||
BOOL CCharSkillPage::OnInitDialog()
|
||||
{
|
||||
CPropertyPage::OnInitDialog();
|
||||
|
||||
m_ctrlCharSkillList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB);
|
||||
|
||||
m_ctrlCharSkillList.InsertColumn(0, GetLocalString("SLOT_NUM"), LVCFMT_LEFT, 40);
|
||||
m_ctrlCharSkillList.InsertColumn(1, GetLocalString("SKILL_ID"), LVCFMT_LEFT, 75);
|
||||
m_ctrlCharSkillList.InsertColumn(2, GetLocalString("SKILL_NAME"), LVCFMT_LEFT, 140);
|
||||
m_ctrlCharSkillList.InsertColumn(3, GetLocalString("SKILL_TYPE"), LVCFMT_LEFT, 80);
|
||||
m_ctrlCharSkillList.InsertColumn(4, _T("LV"), LVCFMT_LEFT, 65);
|
||||
|
||||
SetUIString(this->m_hWnd, IDC_SKILLPAGE_01, "IDC_SKILLPAGE_01");
|
||||
SetUIString(this->m_hWnd, IDC_SKILLPAGE_02, "IDC_SKILLPAGE_02");
|
||||
SetUIString(this->m_hWnd, IDC_SKILLPAGE_03, "IDC_SKILLPAGE_03");
|
||||
SetUIString(this->m_hWnd, IDC_SKILLPAGE_04, "IDC_SKILLPAGE_04");
|
||||
SetUIString(this->m_hWnd, IDC_SKILLPAGE_CLIPSKILL_BTN, "IDC_SKILLPAGE_CLIPSKILL_BTN");
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool CCharSkillPage::SetSkillPageData(unsigned int dwDocKey, CModifyCharacter* lpModifyCharacter)
|
||||
{
|
||||
if((0 != dwDocKey) && (NULL != lpModifyCharacter))
|
||||
{
|
||||
m_lpSkillPageInfo = lpModifyCharacter;
|
||||
m_dwDocKey = dwDocKey;
|
||||
|
||||
lpModifyCharacter->SetClientKey(dwDocKey);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void CCharSkillPage::SetSkillPage(CModifyCharacter* lpModifyCharacter)
|
||||
{
|
||||
m_ctrlCharSkillList.DeleteAllItems();
|
||||
m_ctrlWantSkillList.ResetContent();
|
||||
|
||||
if(NULL == lpModifyCharacter)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SetSkill(lpModifyCharacter->GetSkill());
|
||||
SetAcquirableSkillList();
|
||||
m_dwSkillMaxNum = lpModifyCharacter->GetMaxSkillPoint();
|
||||
m_dwSkillUseNum = lpModifyCharacter->GetSkillPoint();
|
||||
|
||||
UpdateData(false);
|
||||
}
|
||||
|
||||
void CCharSkillPage::SetSkill(SKILL& Skill)
|
||||
{
|
||||
for(int nSlotIndex = 0; nSlotIndex < Skill.wSlotNum; ++nSlotIndex)
|
||||
{
|
||||
SKILLSLOT& Slot = Skill.SSlot[nSlotIndex];
|
||||
|
||||
const Skill::ProtoType* lpPrototype =
|
||||
CSkillMgr::GetInstance().GetSkillProtoType(Slot.SKILLINFO.wSkill);
|
||||
|
||||
if(NULL != lpPrototype) // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>;
|
||||
{
|
||||
unsigned char cSkillLockCount = Slot.SKILLINFO.cLockCount;
|
||||
const Skill::ProtoType ProtoType = lpPrototype[cSkillLockCount];
|
||||
|
||||
CString strForFormat;
|
||||
int nRow = m_ctrlCharSkillList.GetItemCount();
|
||||
|
||||
strForFormat.Format(_T("%d"), nSlotIndex); // <20><><EFBFBD><EFBFBD> <20><>ȣ
|
||||
m_ctrlCharSkillList.InsertItem(nRow, strForFormat);
|
||||
|
||||
strForFormat.Format(_T("0x%x %d"), ProtoType.m_usSkill_ID, cSkillLockCount); // <20><>ų ID, <20><> ī<><C4AB>Ʈ
|
||||
m_ctrlCharSkillList.SetItemText(nRow, 1, strForFormat);
|
||||
|
||||
m_ctrlCharSkillList.SetItemText(nRow, 2, CONV_CLISTR(ProtoType.m_SpriteInfo.m_szName)); // <20><>ų <20><>
|
||||
|
||||
m_ctrlCharSkillList.SetItemText(nRow, 3, GetSkillTypeString(ProtoType.m_eSkillType)); // <20><>ų Ÿ<><C5B8>
|
||||
|
||||
strForFormat.Format(_T("%d"), ((int) Slot.SKILLINFO.cSkillLevel)); // <20><>ų <20><><EFBFBD><EFBFBD>
|
||||
m_ctrlCharSkillList.SetItemText(nRow, 4, strForFormat);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
ERRLOG3(g_Log, "<22><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. CID: %u, <20><>ųID: 0x%x, <20><><EFBFBD><EFBFBD>: %d",
|
||||
m_lpSkillPageInfo->GetCID(), Slot.SKILLINFO.wSkill, nSlotIndex);
|
||||
*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CCharSkillPage::OnContextMenu(CWnd* pWnd, CPoint point)
|
||||
{
|
||||
m_ContextType = CONTEXT_MENU_TYPE::NONE;
|
||||
|
||||
if((pWnd->GetSafeHwnd() == m_ctrlCharSkillList.GetSafeHwnd())
|
||||
&& (1 == m_ctrlCharSkillList.GetSelectedCount()))
|
||||
{
|
||||
m_ContextType = IN_SKILL_LIST;
|
||||
}
|
||||
else if((pWnd->GetSafeHwnd() == m_ctrlWantSkillList.GetSafeHwnd())
|
||||
&& (LB_ERR != m_ctrlWantSkillList.GetCurSel()))
|
||||
{
|
||||
m_ContextType = IN_WANTSKILL_LIST;
|
||||
}
|
||||
|
||||
if(NONE != m_ContextType)
|
||||
{
|
||||
CMenu muTemp, *pContextMenu;
|
||||
muTemp.LoadMenu(IDR_CONTEXTMENU);
|
||||
pContextMenu = muTemp.GetSubMenu(3);
|
||||
pContextMenu->ModifyMenu(0, MF_STRING | MF_BYPOSITION, ID_CHARSKILLEDITCM, GetLocalString("MENU_020"));
|
||||
pContextMenu->ModifyMenu(1, MF_STRING | MF_BYPOSITION, ID_CHARSKILLDELCM, GetLocalString("MENU_021"));
|
||||
pContextMenu->ModifyMenu(2, MF_STRING | MF_BYPOSITION, ID_SKILL_INSERT, GetLocalString("MENU_022"));
|
||||
|
||||
if(IN_SKILL_LIST == m_ContextType)
|
||||
{
|
||||
pContextMenu->DeleteMenu(ID_SKILL_INSERT, MF_POPUP | MF_BYCOMMAND);
|
||||
}
|
||||
else if(IN_WANTSKILL_LIST == m_ContextType)
|
||||
{
|
||||
pContextMenu->DeleteMenu(ID_CHARSKILLDELCM, MF_POPUP | MF_BYCOMMAND);
|
||||
pContextMenu->DeleteMenu(ID_CHARSKILLEDITCM, MF_POPUP | MF_BYCOMMAND);
|
||||
}
|
||||
|
||||
pContextMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
|
||||
}
|
||||
}
|
||||
|
||||
bool CCharSkillPage::SetManageSkillInfo()
|
||||
{
|
||||
ZeroMemory(&m_ManageSkill, sizeof(SKILLSLOT));
|
||||
|
||||
TCHAR szSkillID[32];
|
||||
TCHAR cSkillLockCount = 0;
|
||||
|
||||
int nSelIndex = -1;
|
||||
TCHAR szGetString[256];
|
||||
|
||||
if(IN_WANTSKILL_LIST == m_ContextType) // <20><>ų <20>߰<EFBFBD>
|
||||
{
|
||||
nSelIndex = m_ctrlWantSkillList.GetCurSel();
|
||||
|
||||
if(-1 != nSelIndex)
|
||||
m_ctrlWantSkillList.GetText(nSelIndex, szGetString);
|
||||
}
|
||||
else if(IN_SKILL_LIST == m_ContextType) // <20><>ų <20><><EFBFBD><EFBFBD>
|
||||
{
|
||||
nSelIndex = m_ctrlCharSkillList.GetNextItem(-1, LVIS_SELECTED);
|
||||
|
||||
if(-1 != nSelIndex)
|
||||
m_ctrlCharSkillList.GetItemText(nSelIndex, 1, szGetString, sizeof(szGetString));
|
||||
}
|
||||
|
||||
if((NULL != szGetString) && (-1 != nSelIndex))
|
||||
{
|
||||
_stscanf(szGetString, _T("%s %c"), szSkillID, &cSkillLockCount);
|
||||
|
||||
m_ManageSkill.SKILLINFO.wSkill = Math::Convert::Atos(szSkillID);
|
||||
m_ManageSkill.SKILLINFO.cLockCount = cSkillLockCount - 48; // ASCII <20>ڵ<EFBFBD> 48 = 0 -_ -?
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// <20><>ų <20>߰<EFBFBD>
|
||||
void CCharSkillPage::OnSkillAddCM()
|
||||
{
|
||||
if(LB_ERR != m_ctrlWantSkillList.GetCurSel())
|
||||
{
|
||||
if(SetManageSkillInfo())
|
||||
{
|
||||
m_EditMode = SKILL_EDIT_MODE::MODE_CREATE;
|
||||
|
||||
CCharSkillEditDlg Dlg(CCharSkillEditDlg::SKILL_ADD, this);
|
||||
Dlg.DoModal();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CCharSkillPage::OnLbnDblclkSkillList()
|
||||
{
|
||||
m_ContextType = IN_WANTSKILL_LIST; // SetManageSkillInfo<66><6F><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
|
||||
OnSkillAddCM();
|
||||
}
|
||||
|
||||
// <20><>ų <20><><EFBFBD><EFBFBD>
|
||||
void CCharSkillPage::OnSkillEditCM()
|
||||
{
|
||||
if(1 == m_ctrlCharSkillList.GetSelectedCount())
|
||||
{
|
||||
if(SetManageSkillInfo())
|
||||
{
|
||||
m_EditMode = SKILL_EDIT_MODE::MODE_EDIT;
|
||||
|
||||
CCharSkillEditDlg Dlg(CCharSkillEditDlg::SKILL_EDIT, this);
|
||||
Dlg.DoModal();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CCharSkillPage::OnNMDblclkCharskilllist(NMHDR *pNMHDR, LRESULT *pResult)
|
||||
{
|
||||
m_ContextType = IN_SKILL_LIST; // SetManageSkillInfo<66><6F><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
|
||||
OnSkillEditCM();
|
||||
|
||||
*pResult = 0;
|
||||
}
|
||||
|
||||
// <20><>ų <20><><EFBFBD><EFBFBD>
|
||||
void CCharSkillPage::OnSkillDelCM()
|
||||
{
|
||||
if(1 == m_ctrlCharSkillList.GetSelectedCount())
|
||||
{
|
||||
if(SetManageSkillInfo())
|
||||
{
|
||||
m_EditMode = SKILL_EDIT_MODE::MODE_DELETE;
|
||||
|
||||
CPacketMgr::GetInstance()->SendPktSkillEdit(m_lpSkillPageInfo->GetUID(), m_lpSkillPageInfo->GetCID(),
|
||||
m_lpSkillPageInfo->GetServerGroup(), m_lpSkillPageInfo->GetClientKey(),
|
||||
m_ManageSkill.SKILLINFO.wSkill, 0, 0, m_EditMode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> ǥ<><C7A5>
|
||||
void CCharSkillPage::SetAcquirableSkillList()
|
||||
{
|
||||
m_ctrlWantSkillList.ResetContent();
|
||||
|
||||
const unsigned short MAX_SKILL = 255; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><>ų<EFBFBD><C5B3> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>;)
|
||||
|
||||
CSkillID::isListSkillPos itrPos = CSkillID::GetInstance().begin();
|
||||
CSkillID::isListSkillPos itrEnd = CSkillID::GetInstance().end();
|
||||
|
||||
while(itrEnd != itrPos)
|
||||
{
|
||||
const Skill::ProtoType* lpPrototype =
|
||||
CSkillMgr::GetInstance().GetSkillProtoType(*itrPos);
|
||||
|
||||
if(NULL != lpPrototype)
|
||||
{
|
||||
SKILLSLOT Slot;
|
||||
|
||||
Slot.dwSkillSlot = 0;
|
||||
Slot.SKILLINFO.cSkillLevel = 0;
|
||||
Slot.SKILLINFO.wSkill = lpPrototype->m_usSkill_ID;
|
||||
|
||||
unsigned char cSkillClass = static_cast<unsigned char>
|
||||
((((lpPrototype->m_usSkill_ID - Skill::SKILL_MASK) & 0xFF00) >> 8) & 0x00FF);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20>Ǻ<EFBFBD>
|
||||
bool bIsLearnSkill =
|
||||
(CClass::GetRace(cSkillClass) == m_lpSkillPageInfo->GetRace())
|
||||
&& (!lpPrototype->m_bIsClassSkill);
|
||||
|
||||
if(bIsLearnSkill)
|
||||
{
|
||||
for(int nLockCount = 0; nLockCount < CSkillMgr::MAX_SKILL_LOCKCOUNT; ++nLockCount)
|
||||
{
|
||||
const Skill::ProtoType& Prototype = lpPrototype[nLockCount];
|
||||
|
||||
Slot.SKILLINFO.cLockCount = nLockCount;
|
||||
|
||||
if(Prototype.m_usSkill_ID != lpPrototype->m_usSkill_ID)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
if(PktBase::NO_SERVER_ERR ==
|
||||
m_lpSkillPageInfo->ReadSkill(Slot, Slot.SKILLINFO.wSkill, nLockCount))
|
||||
{
|
||||
CString strFormat;
|
||||
strFormat.Format( _T("0x%x %d [%s]"),
|
||||
Prototype.m_usSkill_ID, nLockCount, Prototype.m_SpriteInfo.m_szName);
|
||||
|
||||
// <20><><EFBFBD>ͳ<EFBFBD>Ƽ<EFBFBD><C6BC> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3>
|
||||
if(0 != Prototype.m_usChildSkill)
|
||||
{
|
||||
const Skill::ProtoType* lpChildSkill =
|
||||
CSkillMgr::GetInstance().GetSkillProtoType(Prototype.m_usChildSkill);
|
||||
|
||||
if(NULL != lpChildSkill)
|
||||
{
|
||||
strFormat.AppendFormat(_T("><[%s]"),
|
||||
lpChildSkill->m_SpriteInfo.m_szName);
|
||||
}
|
||||
}
|
||||
else if(0 != Prototype.m_usParentSkill)
|
||||
{
|
||||
const Skill::ProtoType* lpParentSkill =
|
||||
CSkillMgr::GetInstance().GetSkillProtoType(Prototype.m_usParentSkill);
|
||||
|
||||
if(NULL != lpParentSkill)
|
||||
{
|
||||
strFormat.AppendFormat(_T("><[%s]"),
|
||||
lpParentSkill->m_SpriteInfo.m_szName);
|
||||
}
|
||||
}
|
||||
|
||||
m_ctrlWantSkillList.AddString(strFormat);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ERRLOG1(g_Log,
|
||||
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><> <20>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><EFBFBD> <20><>ų ID <20><EFBFBD>. <20><>ųID: %s", *itrPos);
|
||||
}
|
||||
|
||||
++itrPos;
|
||||
}
|
||||
}
|
||||
|
||||
SKILLSLOT& CCharSkillPage::GetLastSkill()
|
||||
{
|
||||
return m_ManageSkill;
|
||||
}
|
||||
|
||||
void CCharSkillPage::OnBnClickedSkillpageClipskillBtn()
|
||||
{
|
||||
ClippingListCtrl(m_ctrlCharSkillList, 5, true);
|
||||
}
|
||||
|
||||
void CCharSkillPage::OnLvnColumnclickCharskilllist(NMHDR *pNMHDR, LRESULT *pResult)
|
||||
{
|
||||
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
|
||||
|
||||
if(pNMLV->iSubItem == m_iSortListItem)
|
||||
{
|
||||
m_bSortListAsc = !m_bSortListAsc;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_iSortListItem = pNMLV->iSubItem;
|
||||
m_bSortListAsc = true;
|
||||
}
|
||||
|
||||
SortListWndItem(&m_ctrlCharSkillList, m_iSortListItem);
|
||||
|
||||
*pResult = 0;
|
||||
}
|
||||
|
||||
void CCharSkillPage::SortListWndItem(CListCtrl* lpListCtrl, int iCol)
|
||||
{
|
||||
CListCtrlSortClass SortClass(lpListCtrl,iCol);
|
||||
|
||||
switch(m_iSortListItem)
|
||||
{
|
||||
case SORT_TYPE::SLOT_NUM:
|
||||
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtINT);
|
||||
break;
|
||||
case SORT_TYPE::SKILL_ID:
|
||||
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRINGNOCASE);
|
||||
break;
|
||||
case SORT_TYPE::SKILL_NAME:
|
||||
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRING);
|
||||
break;
|
||||
case SORT_TYPE::SKILL_TYPE:
|
||||
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRINGNOCASE);
|
||||
break;
|
||||
case SORT_TYPE::SKILL_LEVEL:
|
||||
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtINT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user