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

196 lines
5.8 KiB
C++

// DuplicatedItemDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "AdminToolClient.h"
#include "DuplicatedItemDlg.h"
#include "PacketManager.h"
#include "GlobalFunctions.h"
#include "WindowMgr.h"
#include "ListCtrlSortClass.h"
#include "CharacterDoc.h"
#include <Utility/Math/Math.h>
// CDuplicatedItemDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CDuplicatedItemDlg, CDialog)
CDuplicatedItemDlg::CDuplicatedItemDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDuplicatedItemDlg::IDD, pParent)
, m_bSortListAsc(false)
{
INSERT_WINDOW(IDD_DUPLICATEDITEMDLG, static_cast<CWnd*>(this));
}
CDuplicatedItemDlg::~CDuplicatedItemDlg()
{
ERASE_WINDOW(IDD_DUPLICATEDITEMDLG);
}
void CDuplicatedItemDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_DS_DITEM_LIST, m_ctrlDItemList);
DDX_Control(pDX, IDC_DS_GROUP_CB, m_ctrlServerGroupCb);
DDX_Control(pDX, IDC_DS_ISCHK_CB, m_ctrlIsChkCb);
}
BEGIN_MESSAGE_MAP(CDuplicatedItemDlg, CDialog)
ON_BN_CLICKED(IDC_DS_SEARCH_BTN, OnBnClickedDsSearchBtn)
ON_BN_CLICKED(IDC_DS_DELETELIST_BTN, OnBnClickedDsDeletelistBtn)
ON_BN_CLICKED(IDC_DS_CHK_BTN, OnBnClickedDsChkBtn)
ON_NOTIFY(HDN_ITEMCHANGING, 0, OnHdnItemchangingDsDitemList)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_DS_DITEM_LIST, OnLvnColumnclickDsDitemList)
ON_BN_CLICKED(IDC_DUPITEM_CLIPPING_BTN, OnBnClickedDupitemClippingBtn)
END_MESSAGE_MAP()
// CDuplicatedItemDlg 메시지 처리기입니다.
BOOL CDuplicatedItemDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_ctrlDItemList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB);
m_ctrlDItemList.InsertColumn(0, GetLocalString("INSERT_TIME"), LVCFMT_LEFT, 120);
m_ctrlDItemList.InsertColumn(1, GetLocalString("CHK_TIME"), LVCFMT_LEFT, 120);
m_ctrlDItemList.InsertColumn(2, _T("UID"), LVCFMT_LEFT, 100);
m_ctrlDItemList.InsertColumn(3, _T("CID"), LVCFMT_LEFT, 100);
m_ctrlDItemList.InsertColumn(4, _T("CharName"), LVCFMT_LEFT, 100);
m_ctrlDItemList.InsertColumn(5, _T("ItemSerial"), LVCFMT_LEFT, 135);
m_ctrlDItemList.InsertColumn(6, _T("Qty"), LVCFMT_LEFT, 60);
m_ctrlDItemList.InsertColumn(7, GetLocalString("CHK_RESULT"), LVCFMT_LEFT, 90);
ServerGroupComboSet(m_ctrlServerGroupCb);
m_ctrlIsChkCb.InsertString(0, _T("0 : DO NOT"));
m_ctrlIsChkCb.InsertString(1, _T("1 : DO"));
m_ctrlIsChkCb.SetCurSel(0);
SetWindowText(GetLocalString("IDD_DUPLICATEDITEMDLG"));
SetUIString(this->m_hWnd, IDC_DUPITEM_01, "IDC_DUPITEM_01");
SetUIString(this->m_hWnd, IDC_DUPITEM_02, "IDC_DUPITEM_02");
SetUIString(this->m_hWnd, IDC_DUPITEM_03, "IDC_DUPITEM_03");
SetUIString(this->m_hWnd, IDC_DUPITEM_04, "IDC_DUPITEM_04");
SetUIString(this->m_hWnd, IDC_DS_SEARCH_BTN, "IDC_DS_SEARCH_BTN");
SetUIString(this->m_hWnd, IDC_DS_DELETELIST_BTN, "IDC_DS_DELETELIST_BTN");
SetUIString(this->m_hWnd, IDC_DUPITEM_CLIPPING_BTN, "IDC_DUPITEM_CLIPPING_BTN");
SetUIString(this->m_hWnd, IDC_DS_CHK_BTN, "IDC_DS_CHK_BTN");
return TRUE;
}
void CDuplicatedItemDlg::OnBnClickedDsSearchBtn()
{
if(CB_ERR != m_ctrlServerGroupCb.GetCurSel())
{
m_ctrlDItemList.DeleteAllItems();
CPacketMgr::GetInstance()->SendSearchDupItem(
(unsigned long)m_ctrlServerGroupCb.GetCurSel(), (m_ctrlIsChkCb.GetCurSel() == 0) ? true : false);
}
}
void CDuplicatedItemDlg::OnBnClickedDsChkBtn()
{
int iIndex = m_ctrlDItemList.GetNextItem(-1, LVIS_SELECTED);
if (-1 != iIndex)
{
unsigned long dwUID = atol(m_ctrlDItemList.GetItemText(iIndex, 2));
unsigned long dwCID = atol(m_ctrlDItemList.GetItemText(iIndex, 3));
unsigned __int64 i64ItemSerial =
Math::Convert::StrToHex64(m_ctrlDItemList.GetItemText(iIndex, 5));
unsigned long dwServerGroup = 100;
CString strServerName;
GetDlgItemText(IDC_DUPLICATEDITEM_SELGROUP_EDIT, strServerName);
CCharacterDoc::GetInstance().GetServerIndex(strServerName, dwServerGroup);
CPacketMgr::GetInstance()->SendChkDupItem(dwUID, dwCID, dwServerGroup, i64ItemSerial);
m_ctrlDItemList.DeleteAllItems();
CPacketMgr::GetInstance()->SendSearchDupItem(dwServerGroup, true);
}
}
void CDuplicatedItemDlg::OnBnClickedDsDeletelistBtn()
{
POSITION pos;
while(pos = m_ctrlDItemList.GetFirstSelectedItemPosition())
{
m_ctrlDItemList.DeleteItem(m_ctrlDItemList.GetNextSelectedItem(pos));
}
}
void CDuplicatedItemDlg::OnHdnItemchangingDsDitemList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR);
*pResult = 0;
}
void CDuplicatedItemDlg::OnLvnColumnclickDsDitemList(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_ctrlDItemList, m_iSortListItem);
*pResult = 0;
}
void CDuplicatedItemDlg::SortListWndItem(CListCtrl* lpListCtrl, const int iCol)
{
CListCtrlSortClass SortClass(lpListCtrl, iCol);
switch(m_iSortListItem)
{
case SORT_TYPE::INSERT_TIME:
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRING);
break;
case SORT_TYPE::CHK_TIME:
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRING);
break;
case SORT_TYPE::UID:
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtINT);
break;
case SORT_TYPE::CID:
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtINT);
break;
case SORT_TYPE::ITEM_SERIAL:
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRING);
break;
case SORT_TYPE::CHARNAME:
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRING);
break;
case SORT_TYPE::QTY:
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtINT);
break;
case SORT_TYPE::CHK_RESULT:
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRINGNOCASE);
break;
}
}
void CDuplicatedItemDlg::OnBnClickedDupitemClippingBtn()
{
ClippingListCtrl(m_ctrlDItemList, 8, true);
}