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>
208 lines
6.3 KiB
C++
208 lines
6.3 KiB
C++
// BlockedListDlg.cpp : 구현 파일입니다.
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "AdminToolClient.h"
|
|
#include "BlockManagementDlg.h"
|
|
#include "GlobalFunctions.h"
|
|
#include "CharacterDoc.h"
|
|
#include "WindowMgr.h"
|
|
#include "PacketManager.h"
|
|
#include "ListCtrlSortClass.h"
|
|
|
|
|
|
// CBlockManagementDlg 대화 상자입니다.
|
|
|
|
IMPLEMENT_DYNAMIC(CBlockManagementDlg, CDialog)
|
|
CBlockManagementDlg::CBlockManagementDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CBlockManagementDlg::IDD, pParent)
|
|
, m_bSortListAsc(false)
|
|
{
|
|
INSERT_WINDOW(IDD_BLOCKEDLISTDLG, this);
|
|
}
|
|
|
|
CBlockManagementDlg::~CBlockManagementDlg()
|
|
{
|
|
ERASE_WINDOW(IDD_BLOCKEDLISTDLG);
|
|
}
|
|
|
|
void CBlockManagementDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
DDX_Control(pDX, IDC_BLOCKEDLIST, m_ctrlBlockedList);
|
|
DDX_Control(pDX, IDC_BM_SERVERCOMBO, m_ctrlBMServerCombo);
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CBlockManagementDlg, CDialog)
|
|
ON_BN_CLICKED(IDC_BLOCKLIST_SEARCH, OnBnClickedBlocklistSearch)
|
|
ON_WM_CONTEXTMENU()
|
|
ON_COMMAND(ID_DELETE_BLOCK, OnDeleteBlock)
|
|
ON_BN_CLICKED(IDC_BLOCKLIST_CLIP_BTN, OnBnClickedBlocklistClipBtn)
|
|
ON_NOTIFY(LVN_COLUMNCLICK, IDC_BLOCKEDLIST, OnLvnColumnclickBlockedlist)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
// CBlockManagementDlg 메시지 처리기입니다.
|
|
|
|
BOOL CBlockManagementDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
m_ctrlBlockedList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB);
|
|
|
|
m_ctrlBlockedList.InsertColumn(0, GetLocalString("ADDED_STRING_114"), LVCFMT_RIGHT, 50);
|
|
m_ctrlBlockedList.InsertColumn(1, GetLocalString("SERVER_GROUP"), LVCFMT_LEFT, 90);
|
|
m_ctrlBlockedList.InsertColumn(2, _T("UID"), LVCFMT_LEFT, 100);
|
|
m_ctrlBlockedList.InsertColumn(3, GetLocalString("ACCOUNT"), LVCFMT_LEFT, 100);
|
|
m_ctrlBlockedList.InsertColumn(4, GetLocalString("CHAR_NAME"), LVCFMT_LEFT, 100);
|
|
m_ctrlBlockedList.InsertColumn(5, GetLocalString("BLOCK_TARGET"), LVCFMT_LEFT, 70);
|
|
m_ctrlBlockedList.InsertColumn(6, GetLocalString("BLCOK_TERM"), LVCFMT_LEFT, 70);
|
|
m_ctrlBlockedList.InsertColumn(7, GetLocalString("BLOCK_START_TIME"), LVCFMT_LEFT, 120);
|
|
m_ctrlBlockedList.InsertColumn(8, GetLocalString("BLOCK_END_TIME"), LVCFMT_LEFT, 120);
|
|
m_ctrlBlockedList.InsertColumn(9, GetLocalString("ADMIN_ID"), LVCFMT_LEFT, 80);
|
|
m_ctrlBlockedList.InsertColumn(10, GetLocalString("DESCRIPTION"), LVCFMT_LEFT, 170);
|
|
|
|
SetWindowText(GetLocalString("IDD_BLOCKEDLISTDLG"));
|
|
|
|
SetUIString(this->m_hWnd, IDC_BLOCKMANAGE_01,"IDC_BLOCKMANAGE_01");
|
|
SetUIString(this->m_hWnd, IDC_BLOCKMANAGE_02,"IDC_BLOCKMANAGE_02");
|
|
SetUIString(this->m_hWnd, IDC_BLOCKMANAGE_03,"IDC_BLOCKMANAGE_03");
|
|
SetUIString(this->m_hWnd, IDC_BLOCKLIST_SEARCH,"IDC_BLOCKLIST_SEARCH");
|
|
SetUIString(this->m_hWnd, IDC_BLOCKLIST_CLIP_BTN,"IDC_BLOCKLIST_CLIP_BTN");
|
|
|
|
ServerGroupComboSet(m_ctrlBMServerCombo);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
void CBlockManagementDlg::OnDeleteBlock()
|
|
{
|
|
int Index = m_ctrlBlockedList.GetNextItem(-1, LVIS_SELECTED);
|
|
|
|
if(-1 != Index)
|
|
{
|
|
TCHAR szValue[256];
|
|
unsigned long dwServerGroup;
|
|
|
|
m_ctrlBlockedList.GetItemText(Index, 1, szValue, sizeof(szValue));
|
|
CCharacterDoc::GetInstance().GetServerIndex(szValue, dwServerGroup);
|
|
|
|
m_ctrlBlockedList.GetItemText(Index, 0, szValue, sizeof(szValue));
|
|
unsigned long nidx = _ttol(szValue);
|
|
|
|
CPacketMgr::GetInstance()->SendDelBlockUser((char)dwServerGroup, nidx, szValue);
|
|
|
|
// 삭제 후 목록 갱신
|
|
m_ctrlBlockedList.DeleteAllItems();
|
|
CPacketMgr::GetInstance()->SendPktSearchBlock(dwServerGroup);
|
|
}
|
|
}
|
|
|
|
void CBlockManagementDlg::OnContextMenu(CWnd* pWnd, CPoint point)
|
|
{
|
|
if(pWnd->GetSafeHwnd() == m_ctrlBlockedList.GetSafeHwnd() &&
|
|
m_ctrlBlockedList.GetSelectedCount() == 1)
|
|
{
|
|
CMenu muTemp, *pContextMenu;
|
|
muTemp.LoadMenu(IDR_CONTEXTMENU);
|
|
pContextMenu = muTemp.GetSubMenu(10);
|
|
pContextMenu->ModifyMenu(0, MF_STRING | MF_BYPOSITION, ID_DELETE_BLOCK, GetLocalString("MENU_030"));
|
|
pContextMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
|
|
}
|
|
}
|
|
|
|
void CBlockManagementDlg::OnOK()
|
|
{
|
|
//CDialog::OnOK();
|
|
}
|
|
|
|
void CBlockManagementDlg::OnCancel()
|
|
{
|
|
CDialog::OnCancel();
|
|
}
|
|
|
|
void CBlockManagementDlg::OnBnClickedBlocklistSearch()
|
|
{
|
|
CComboBox* lpServerCombo = static_cast<CComboBox*>(GetDlgItem(IDC_BM_SERVERCOMBO));
|
|
|
|
if(CB_ERR != lpServerCombo->GetCurSel())
|
|
{
|
|
m_ctrlBlockedList.DeleteAllItems();
|
|
|
|
CString strServerName;
|
|
unsigned long dwServerGroup;
|
|
|
|
lpServerCombo->GetLBText(lpServerCombo->GetCurSel(), strServerName);
|
|
CCharacterDoc::GetInstance().GetServerIndex(strServerName, dwServerGroup);
|
|
|
|
CPacketMgr::GetInstance()->SendPktSearchBlock(dwServerGroup);
|
|
}
|
|
}
|
|
|
|
void CBlockManagementDlg::OnBnClickedBlocklistClipBtn()
|
|
{
|
|
ClippingListCtrl(m_ctrlBlockedList, 9, true);
|
|
}
|
|
|
|
void CBlockManagementDlg::OnLvnColumnclickBlockedlist(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_ctrlBlockedList, m_iSortListItem);
|
|
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CBlockManagementDlg::SortListWndItem(CListCtrl* lpListCtrl, const int iCol)
|
|
{
|
|
CListCtrlSortClass SortClass(lpListCtrl, iCol);
|
|
|
|
switch(m_iSortListItem)
|
|
{
|
|
case SORT_TYPE::INDEX:
|
|
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtINT);
|
|
break;
|
|
case SORT_TYPE::SERVER_GROUP:
|
|
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRING);
|
|
break;
|
|
case SORT_TYPE::UID:
|
|
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtINT);
|
|
break;
|
|
case SORT_TYPE::ACCOUNT:
|
|
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRING);
|
|
break;
|
|
case SORT_TYPE::CHAR_NAME:
|
|
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRING);
|
|
break;
|
|
case SORT_TYPE::TARGET:
|
|
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtINT);
|
|
break;
|
|
case SORT_TYPE::TERM:
|
|
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtINT);
|
|
break;
|
|
case SORT_TYPE::START_TIME:
|
|
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRING);
|
|
break;
|
|
case SORT_TYPE::END_TIME:
|
|
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRING);
|
|
break;
|
|
case SORT_TYPE::ADMIN_ID:
|
|
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRINGNOCASE);
|
|
break;
|
|
case SORT_TYPE::DESCRIPTION:
|
|
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRINGNOCASE);
|
|
break;
|
|
}
|
|
}
|