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

270 lines
8.0 KiB
C++

// GAdminManagementDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "AdminToolClient.h"
#include "GAdminManagementDlg.h"
#include "GlobalFunctions.h"
#include "WindowMgr.h"
#include "PacketManager.h"
#include "CharacterDoc.h"
#include "GAdminInfoEditDlg.h"
#include "ListCtrlSortClass.h"
// CGAdminManagementDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CGAdminManagementDlg, CDialog)
CGAdminManagementDlg::CGAdminManagementDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGAdminManagementDlg::IDD, pParent)
, m_strRegAdminUID(_T(""))
, m_strSearchedGroup(_T(""))
, m_bSortListAsc(false)
{
}
CGAdminManagementDlg::~CGAdminManagementDlg()
{
}
void CGAdminManagementDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_GADMINLIST, m_ctrlGAdminList);
DDX_Control(pDX, IDC_GAM_SERVERCB1, m_ctrlGAMServerCb1);
DDX_Control(pDX, IDC_GAM_SERVERCB2, m_ctrlGAMServerCb2);
DDX_Text(pDX, IDC_GAM_UID_EDIT, m_strRegAdminUID);
DDX_Control(pDX, IDC_GAM_LIMITIPSTART_IP, m_ctrlLimitStartIP);
DDX_Control(pDX, IDC_GAM_LIMITIPEND_IP, m_ctrlLimitEndIP);
DDX_Control(pDX, IDC_GAM_ADMINLV_CB, m_ctrlNewAdminLV);
DDX_Text(pDX, IDC_GAM_SEARCHEDGROUP_EDIT, m_strSearchedGroup);
}
BEGIN_MESSAGE_MAP(CGAdminManagementDlg, CDialog)
ON_WM_CTLCOLOR()
ON_WM_CONTEXTMENU()
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_GAM_ADMINREG_BTN, OnBnClickedGamAdminregBtn)
ON_BN_CLICKED(IDC_GAM_ADMINSEARCH_BTN, OnBnClickedGamAdminsearchBtn)
ON_COMMAND(ID_GAM_ADMINEDIT, OnGamAdminedit)
ON_COMMAND(ID_GAM_ADMINDEL, OnGamAdmindel)
ON_NOTIFY(LVN_COLUMNCLICK, IDC_GAM_ADMIN_LIST, OnLvnColumnclickGamAdminList)
END_MESSAGE_MAP()
// CGAdminManagementDlg 메시지 처리기입니다.
HBRUSH CGAdminManagementDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
return hbr;
}
BOOL CGAdminManagementDlg::OnInitDialog()
{
CDialog::OnInitDialog();
INSERT_WINDOW(IDD_GADMINMANAGEMENTDLG, static_cast<CWnd*>(this));
m_ctrlGAdminList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB);
m_ctrlGAdminList.InsertColumn(0, _T("UID"), LVCFMT_LEFT, 110);
m_ctrlGAdminList.InsertColumn(1, _T("Level"), LVCFMT_LEFT, 50);
m_ctrlGAdminList.InsertColumn(2, GetLocalString("LIMIT_IP_START"), LVCFMT_LEFT, 120);
m_ctrlGAdminList.InsertColumn(3, GetLocalString("LIMIT_IP_END"), LVCFMT_LEFT, 120);
ServerGroupComboSet(m_ctrlGAMServerCb1);
ServerGroupComboSet(m_ctrlGAMServerCb2);
m_ctrlNewAdminLV.InsertString(0, _T("Supporter"));
m_ctrlNewAdminLV.InsertString(1, _T("Admin LV1"));
m_ctrlNewAdminLV.InsertString(2, _T("Admin LV2"));
m_ctrlNewAdminLV.InsertString(3, _T("Admin LV3"));
m_ctrlNewAdminLV.InsertString(4, _T("Developer"));
SetWindowText(GetLocalString("IDD_GADMINMANAGEMENTDLG"));
SetUIString(this->m_hWnd, IDC_GADMINMANEGE_01, "IDC_GADMINMANEGE_01");
SetUIString(this->m_hWnd, IDC_GADMINMANEGE_02, "IDC_GADMINMANEGE_02");
SetUIString(this->m_hWnd, IDC_GADMINMANEGE_03, "IDC_GADMINMANEGE_03");
SetUIString(this->m_hWnd, IDC_GADMINMANEGE_04, "IDC_GADMINMANEGE_04");
SetUIString(this->m_hWnd, IDC_GADMINMANEGE_05, "IDC_GADMINMANEGE_05");
SetUIString(this->m_hWnd, IDC_GADMINMANEGE_06, "IDC_GADMINMANEGE_06");
SetUIString(this->m_hWnd, IDC_GADMINMANEGE_07, "IDC_GADMINMANEGE_07");
SetUIString(this->m_hWnd, IDC_GAM_ADMINSEARCH_BTN, "IDC_GAM_ADMINSEARCH_BTN");
SetUIString(this->m_hWnd, IDC_GAM_ADMINREG_BTN, "IDC_GAM_ADMINREG_BTN");
return TRUE;
}
void CGAdminManagementDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
if(pWnd->GetSafeHwnd() == m_ctrlGAdminList.GetSafeHwnd()
&& m_ctrlGAdminList.GetSelectedCount() == 1)
{
CMenu muTemp, *pContextMenu;
muTemp.LoadMenu(IDR_CONTEXTMENU);
pContextMenu = muTemp.GetSubMenu(9);
pContextMenu->ModifyMenu(0, MF_STRING | MF_BYPOSITION, ID_GAM_ADMINEDIT, GetLocalString("MENU_028"));
pContextMenu->ModifyMenu(1, MF_STRING | MF_BYPOSITION, ID_GAM_ADMINDEL, GetLocalString("MENU_029"));
pContextMenu->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
}
}
void CGAdminManagementDlg::OnDestroy()
{
CDialog::OnDestroy();
ERASE_WINDOW(IDD_GADMINMANAGEMENTDLG);
}
void CGAdminManagementDlg::OnBnClickedGamAdminregBtn()
{
UpdateData(true);
if((CB_ERR != m_ctrlGAMServerCb1.GetCurSel()) && (CB_ERR != m_ctrlNewAdminLV.GetCurSel()))
{
if(!m_strRegAdminUID.IsEmpty())
{
unsigned long dwServerGroup;
CString strGroupName;
m_ctrlGAMServerCb1.GetLBText(m_ctrlGAMServerCb1.GetCurSel(), strGroupName);
CCharacterDoc::GetInstance().GetServerIndex(strGroupName, dwServerGroup);
TCHAR szStartIP[PktAdminMgr::MAX_IP], szEndIP[PktAdminMgr::MAX_IP];
if(m_ctrlLimitStartIP.IsBlank())
_sntprintf(szStartIP, PktAdminMgr::MAX_IP, _T("NULL"));
if(m_ctrlLimitEndIP.IsBlank())
_sntprintf(szEndIP, PktAdminMgr::MAX_IP, _T("NULL"));
if(!(m_ctrlLimitStartIP.IsBlank() && m_ctrlLimitEndIP.IsBlank()))
{
m_ctrlLimitStartIP.GetWindowText(szStartIP, PktAdminMgr::MAX_IP);
m_ctrlLimitEndIP.GetWindowText(szEndIP, PktAdminMgr::MAX_IP);
}
#ifdef _UNICODE
CPacketMgr::GetInstance()->SendGameAdmin(PktAdminMgr::PktGameAdmin::REG,
dwServerGroup, _ttol(m_strRegAdminUID), m_ctrlNewAdminLV.GetCurSel() + 1, szStartIP, szEndIP);
#endif
CPacketMgr::GetInstance()->SendGameAdmin(PktAdminMgr::PktGameAdmin::REG,
dwServerGroup, _ttol(m_strRegAdminUID), m_ctrlNewAdminLV.GetCurSel() + 1, szStartIP, szEndIP);
}
}
}
void CGAdminManagementDlg::OnBnClickedGamAdminsearchBtn()
{
if(CB_ERR != m_ctrlGAMServerCb2.GetCurSel())
{
m_ctrlGAdminList.DeleteAllItems();
unsigned long dwServerGroup;
CString strGroupName;
m_ctrlGAMServerCb2.GetLBText(m_ctrlGAMServerCb2.GetCurSel(), strGroupName);
CCharacterDoc::GetInstance().GetServerIndex(strGroupName, dwServerGroup);
CPacketMgr::GetInstance()->SendGameAdmin(PktAdminMgr::PktGameAdmin::SEARCH, dwServerGroup);
m_strSearchedGroup.Format(_T("%s"), strGroupName);
UpdateData(false);
}
}
void CGAdminManagementDlg::OnGamAdminedit()
{
if(m_ctrlGAdminList.GetSelectedCount() == 1)
{
int Index = m_ctrlGAdminList.GetNextItem(-1, LVIS_SELECTED);
CGAdminInfoEditDlg dlg(m_strSearchedGroup, m_ctrlGAdminList.GetItemText(Index, 0));
dlg.DoModal();
}
}
void CGAdminManagementDlg::OnGamAdmindel()
{
if(m_ctrlGAdminList.GetSelectedCount() == 1)
{
UpdateData(true);
unsigned long dwServerGroup;
CCharacterDoc::GetInstance().GetServerIndex(m_strSearchedGroup, dwServerGroup);
int Index = m_ctrlGAdminList.GetNextItem(-1, LVIS_SELECTED);
unsigned long dwUID = _ttol(m_ctrlGAdminList.GetItemText(Index, 0));
CPacketMgr::GetInstance()->SendGameAdmin(PktAdminMgr::PktGameAdmin::DEL, dwServerGroup, dwUID);
}
}
void CGAdminManagementDlg::ReFreshGameAdminList()
{
OnBnClickedGamAdminsearchBtn();
}
BOOL CGAdminManagementDlg::PreTranslateMessage(MSG* pMsg)
{
if((WM_KEYDOWN == pMsg->message) && (VK_RETURN == pMsg->wParam))
{
if(pMsg->hwnd == GetDlgItem(IDC_GAM_UID_EDIT)->m_hWnd
|| pMsg->hwnd == GetDlgItem(IDC_GAM_LIMITIPEND_IP)->m_hWnd)
{
OnBnClickedGamAdminregBtn();
}
}
return CDialog::PreTranslateMessage(pMsg);
}
void CGAdminManagementDlg::OnOK()
{
//CDialog::OnOK();
}
void CGAdminManagementDlg::SortListWndItem(CListCtrl* pListCtrl, const int iCol)
{
CListCtrlSortClass SortClass(pListCtrl,iCol);
switch(m_iSortListItem)
{
case SORT_TYPE::UID:
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtINT);
break;
case SORT_TYPE::LV:
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtINT);
break;
case SORT_TYPE::IP_S:
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRING);
break;
case SORT_TYPE::IP_E:
SortClass.Sort(m_bSortListAsc, CListCtrlSortClass::SortDataType::dtSTRING);
break;
}
}
void CGAdminManagementDlg::OnLvnColumnclickGamAdminList(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_ctrlGAdminList, m_iSortListItem);
*pResult = 0;
}