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

263 lines
7.3 KiB
C++

// ItemDistributeDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "AdminToolClient.h"
#include "ItemDistributeDlg.h"
#include "GlobalFunctions.h"
#include "PacketManager.h"
#include "ListCtrlSortClass.h"
#include "WindowMgr.h"
#include <Log/ServerLog.h>
// CItemDistributeDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CItemDistributeDlg, CDialog)
CItemDistributeDlg::CItemDistributeDlg(CWnd* pParent /*=NULL*/)
: CDialog(CItemDistributeDlg::IDD, pParent)
, m_bSortListAsc(false)
{
INSERT_WINDOW(IDD_ITEMDISTRIBUTEDLG, static_cast<CWnd*>(this));
}
CItemDistributeDlg::~CItemDistributeDlg()
{
ERASE_WINDOW(IDD_ITEMDISTRIBUTEDLG);
}
void CItemDistributeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_ITEMDISTRIBUTE_REPORT_LIST, m_ctrlResultList);
}
BEGIN_MESSAGE_MAP(CItemDistributeDlg, CDialog)
ON_WM_CTLCOLOR()
ON_BN_CLICKED(IDC_ITEMDISTRIBUTE_BTN, OnBnClickedItemdistributeBtn)
ON_BN_CLICKED(IDC_ITEMDISTRIBUTE_CLIPCOPY_BTN, OnBnClickedItemdistributeClipcopyBtn)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_ITEMDISTRIBUTE_REPORT_LIST, OnLvnColumnclickItemdistributeReportList)
END_MESSAGE_MAP()
HBRUSH CItemDistributeDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
return hbr;
}
BOOL CItemDistributeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetDlgItemText(IDC_ITEMDISTRIBUTE_ITEMNAME_EDIT, g_stMyItemInfo.m_stItemInfo.m_szItemName);
m_ctrlResultList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB);
m_ctrlResultList.InsertColumn(0, _T("UID"), LVCFMT_LEFT, 80);
m_ctrlResultList.InsertColumn(1, _T("CID"), LVCFMT_LEFT, 80);
m_ctrlResultList.InsertColumn(2, GetLocalString("SERVER_GROUP"), LVCFMT_LEFT, 50);
m_ctrlResultList.InsertColumn(3, GetLocalString("RESULT"), LVCFMT_LEFT, 220);
SetWindowText(GetLocalString("IDD_ITEMDISTRIBUTEDLG"));
SetUIString(this->m_hWnd, IDC_ITEMDISTRIBUTE_01, "IDC_ITEMDISTRIBUTE_01");
SetUIString(this->m_hWnd, IDC_ITEMDISTRIBUTE_02, "IDC_ITEMDISTRIBUTE_02");
SetUIString(this->m_hWnd, IDC_ITEMDISTRIBUTE_03, "IDC_ITEMDISTRIBUTE_03");
SetUIString(this->m_hWnd, IDC_ITEMDISTRIBUTE_04, "IDC_ITEMDISTRIBUTE_04");
SetUIString(this->m_hWnd, IDC_ITEMDISTRIBUTE_05, "IDC_ITEMDISTRIBUTE_05");
SetUIString(this->m_hWnd, IDC_ITEMDISTRIBUTE_06, "IDC_ITEMDISTRIBUTE_06");
SetUIString(this->m_hWnd, IDC_ITEMDISTRIBUTE_CLIPCOPY_BTN, "IDC_ITEMDISTRIBUTE_CLIPCOPY_BTN");
SetUIString(this->m_hWnd, IDC_ITEMDISTRIBUTE_BTN, "IDC_ITEMDISTRIBUTE_BTN");
return TRUE;
}
void CItemDistributeDlg::OnBnClickedItemdistributeBtn()
{
CString strBuffer;
GetDlgItemText(IDC_DSTUSER_EDIT, strBuffer);
if(strBuffer.IsEmpty())
{
Report(GetLocalString("MSG_0153"), CAUTION);
return;
}
strBuffer.TrimLeft();
strBuffer.TrimRight();
int nCurPos = 0;
CString strResToken = "res";
PktAdminMgr::DstUserInfo arrDstUserInfo[UCHAR_MAX];
PktAdminMgr::DstUserInfo* lpPos = arrDstUserInfo;
unsigned char cUserInfoNum = 0;
while(!strResToken.IsEmpty())
{
lpPos->Clear();
strResToken = strBuffer.Tokenize(" ", nCurPos); // UID 토큰 분리
if(strResToken.IsEmpty())
{
// 서버그룹 인덱스 다음에 얻은 토큰이 비어있는 경우(정상 입력)
break;
}
lpPos->m_dwUID = atol(strResToken);
strResToken = strBuffer.Tokenize(" ", nCurPos); // CID 토큰 분리
if(strResToken.IsEmpty())
{
// UID 다음에 얻은 토큰이 비어있는 경우(비 정상 입력)
Report(GetLocalString("MSG_0154"), CAUTION);
break;
}
lpPos->m_dwCID = atol(strResToken);
strResToken = strBuffer.Tokenize("\n", nCurPos); // 서버 그룹 토큰 분리
if(strResToken.IsEmpty())
{
// CID 다음에 얻은 토큰이 비어있는 경우(비 정상 입력)
Report(GetLocalString("MSG_0154"), CAUTION);
break;
}
lpPos->m_dwServerGroup = atol(strResToken);
if(!lpPos->IsValid())
{
Report(GetLocalString("MSG_0154"), CAUTION);
return;
}
++lpPos;
++cUserInfoNum;
if(cUserInfoNum == UCHAR_MAX)
{
CPacketMgr::GetInstance()->SendPktItemDistribute(
g_stMyItemInfo.m_stItemInfo, arrDstUserInfo, cUserInfoNum);
m_ctrlResultList.DeleteAllItems();
lpPos = arrDstUserInfo;
cUserInfoNum = 0;
}
}
if(0 < cUserInfoNum)
{
CPacketMgr::GetInstance()->SendPktItemDistribute(
g_stMyItemInfo.m_stItemInfo, arrDstUserInfo, cUserInfoNum);
m_ctrlResultList.DeleteAllItems();
}
}
void CItemDistributeDlg::ReportResult(PktAdminMgr::PktItemDistributeAck* lpInfo)
{
if(NULL != lpInfo)
{
CString strResult;
switch(lpInfo->m_cResultType)
{
case PktAdminMgr::PktItemDistributeAck::SUCCESS:
strResult = GetLocalString("MSG_0086");
break;
case PktAdminMgr::PktItemDistributeAck::FALED_TO_CREATE_ITEM_OBJ:
strResult = GetLocalString("MSG_0155");
break;
case PktAdminMgr::PktItemDistributeAck::FALED_TO_CREATE_TEMPINVEN_OBJ:
strResult = GetLocalString("MSG_0156");
break;
case PktAdminMgr::PktItemDistributeAck::FALED_TO_GET_GAMEDB:
strResult = GetLocalString("MSG_0157");
break;
case PktAdminMgr::PktItemDistributeAck::FALED_TO_GET_ITEMINFO:
strResult = GetLocalString("MSG_0158");
break;
case PktAdminMgr::PktItemDistributeAck::FALED_TO_GET_TEMPINVEN_OBJ:
strResult = GetLocalString("MSG_0159");
break;
case PktAdminMgr::PktItemDistributeAck::FALED_TO_SERIALIZE_IN:
strResult = GetLocalString("MSG_0160");
break;
case PktAdminMgr::PktItemDistributeAck::FALED_TO_SERIALIZE_OUT:
strResult = GetLocalString("MSG_0161");
break;
case PktAdminMgr::PktItemDistributeAck::FALED_TO_SET_ITEM:
strResult = GetLocalString("MSG_0162");
break;
case PktAdminMgr::PktItemDistributeAck::FALED_TO_UPDATE_TEMPINVEN:
strResult = GetLocalString("MSG_0163");
break;
default:
strResult.Format(_T("UNKNOWN"));
break;
}
CString strForFormat;
int nInsertRow = m_ctrlResultList.GetItemCount();
strForFormat.Format(_T("%u"), lpInfo->m_stUserInfo.m_dwUID);
m_ctrlResultList.InsertItem(nInsertRow, strForFormat);
strForFormat.Format(_T("%u"), lpInfo->m_stUserInfo.m_dwCID);
m_ctrlResultList.SetItemText(nInsertRow, 1, strForFormat);
strForFormat.Format(_T("%u"), lpInfo->m_stUserInfo.m_dwServerGroup);
m_ctrlResultList.SetItemText(nInsertRow, 2, strForFormat);
m_ctrlResultList.SetItemText(nInsertRow, 3, strResult);
}
}
void CItemDistributeDlg::OnBnClickedItemdistributeClipcopyBtn()
{
ClippingListCtrl(m_ctrlResultList, 4, true);
}
void CItemDistributeDlg::OnLvnColumnclickItemdistributeReportList(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_ctrlResultList, m_iSortListItem);
*pResult = 0;
}
void CItemDistributeDlg::SortListWndItem(CListCtrl* lpListCtrl, const int iCol)
{
CListCtrlSortClass SortClass(lpListCtrl, iCol);
switch(m_iSortListItem)
{
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::SERVERGROUP:
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtINT);
break;
case SORT_TYPE::RESULT:
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRINGNOCASE);
break;
}
}