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

203 lines
5.4 KiB
C++

// AddBlockUserDlg.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "AdminToolClient.h"
#include "AddBlockUserDlg.h"
#include "UserCharTreeView.h"
#include "GlobalFunctions.h"
#include "CharacterDoc.h"
#include "PacketManager.h"
#include ".\addblockuserdlg.h"
// CAddBlockUserDlg 대화 상자입니다.
IMPLEMENT_DYNAMIC(CAddBlockUserDlg, CDialog)
CAddBlockUserDlg::CAddBlockUserDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAddBlockUserDlg::IDD, pParent)
, m_lpParent(pParent)
{
}
CAddBlockUserDlg::~CAddBlockUserDlg()
{
}
void CAddBlockUserDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_BA_SERVER_CB, m_ctrlServerGroupCb);
DDX_Control(pDX, IDC_BA_SELALL_CHK, m_ctrlAllChk);
}
BEGIN_MESSAGE_MAP(CAddBlockUserDlg, CDialog)
ON_CBN_SELCHANGE(IDC_BLOCK_TYPE, OnCbnSelchangeBlockType)
ON_BN_CLICKED(IDC_BA_SELALL_CHK, OnBnClickedBaSelallChk)
END_MESSAGE_MAP()
// CAddBlockUserDlg 메시지 처리기입니다.
BOOL CAddBlockUserDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CUserCharTreeView* lpTreeDlg = static_cast<CUserCharTreeView*>(m_lpParent);
CUserCharTreeView::BLOCK_INFO BlockInfo = lpTreeDlg->GetLastBlockInfo();
ServerGroupComboSet(m_ctrlServerGroupCb, false);
// 대상 그룹 셋팅 (체크 콤보 박스)
CString strServerName;
CCharacterDoc::GetInstance().GetServerName(BlockInfo.m_dwServerGroup, strServerName);
if (0 != strServerName.CompareNoCase("UNKNOWN"))
{
m_ctrlServerGroupCb.SetCheck(m_ctrlServerGroupCb.FindString(-1, strServerName), true);
m_ctrlServerGroupCb.EnableWindow(false);
m_ctrlAllChk.EnableWindow(false);
}
// 대상 캐릭명 셋팅
SetDlgItemText(IDC_BLOCK_NAME, BlockInfo.m_szCharacterName);
CComboBox* lpBlockTermCb = static_cast<CComboBox*>(GetDlgItem(IDC_BLOCK_TYPE));
// 블럭 기간 콤보 셋팅
lpBlockTermCb->AddString(GetLocalString("IDC_BLOCKADD_06"));
lpBlockTermCb->AddString(GetLocalString("IDC_BLOCKADD_07"));
SetWindowText(GetLocalString("WND_BLOCKADD"));
SetUIString(this->m_hWnd, IDC_BLOCKADD_01, "IDC_BLOCKADD_01");
SetUIString(this->m_hWnd, IDC_BLOCKADD_02, "IDC_BLOCKADD_02");
SetUIString(this->m_hWnd, IDC_BLOCKADD_03, "IDC_BLOCKADD_03");
SetUIString(this->m_hWnd, IDC_BLOCKADD_04, "IDC_BLOCKADD_04");
SetUIString(this->m_hWnd, IDC_BLOCKADD_05, "IDC_BLOCKADD_05");
return TRUE;
}
void CAddBlockUserDlg::OnOK()
{
CUserCharTreeView* lpTreeDlg = static_cast<CUserCharTreeView*>(m_lpParent);
CUserCharTreeView::BLOCK_INFO BlockInfo = lpTreeDlg->GetLastBlockInfo();
CDateTimeCtrl* lpDateCtrl = static_cast<CDateTimeCtrl*>(GetDlgItem(IDC_BLOCK_DATE));
CComboBox* lpBlockTermCb = static_cast<CComboBox*>(GetDlgItem(IDC_BLOCK_TYPE));
unsigned char cBlockTarget, cBlockTerm = 0;
// 블럭 대상
if(BlockInfo.ACCOUNT == BlockInfo.m_cType)
{
cBlockTarget = PktAdminMgr::PktAddBlockUser::TARGET_ACCOUNT;
}
else if(BlockInfo.CHARACTER == BlockInfo.m_cType)
{
cBlockTarget = PktAdminMgr::PktAddBlockUser::TARGET_CHARACTER;
}
// 블럭 기간
if(CB_ERR == lpBlockTermCb->GetCurSel())
{
Report(GetLocalString("MSG_0093"), CAUTION);
return;
}
else
{
if(TEMP_BLOCK == lpBlockTermCb->GetCurSel())
{
cBlockTerm = PktAdminMgr::PktAddBlockUser::TERM_TEMPORARY;
}
else if((PERMANANT_BLOCK == lpBlockTermCb->GetCurSel()))
{
cBlockTerm = PktAdminMgr::PktAddBlockUser::TERM_PERMANANT;
}
}
// 블럭 기간 (실제 날짜)
TCHAR szFinishDate[20], szDescription[31];
szFinishDate[0] = szDescription[0] = 0;
COleDateTime StartBlockTime = COleDateTime::GetCurrentTime();
COleDateTime FinishBlockTime;
lpDateCtrl->GetTime(FinishBlockTime);
COleDateTimeSpan TimeSpan = FinishBlockTime - StartBlockTime;
// 24시간 이내에 있는 시간은 왠지 모르게 계산을 못한다 ㅡ.ㅡ 10일-9일을 하면 날수가 0이다 젠장
long BlockDays = TimeSpan.GetDays() + 1;
if((StartBlockTime.GetDay() == FinishBlockTime.GetDay()) && (1 == BlockDays))
{
--BlockDays;
}
else if(StartBlockTime > FinishBlockTime)
{
Report(GetLocalString("MSG_0094"), CAUTION);
return;
}
GetDlgItemText(IDC_BLOCK_REASON, szDescription, sizeof(szDescription));
_sntprintf(szFinishDate, sizeof(szFinishDate), _T("%d"), BlockDays);
if((0 < _tcslen(szFinishDate)) && (0 < _tcslen(szDescription)) && (30 > _tcslen(szDescription)))
{
for (int nIndex = 0; nIndex < m_ctrlServerGroupCb.GetCount(); ++nIndex)
{
if (TRUE == m_ctrlServerGroupCb.GetCheck(nIndex))
{
CString strServerName;
unsigned long dwServerIndex = 10000;
m_ctrlServerGroupCb.GetLBText(nIndex, strServerName);
CCharacterDoc::GetInstance().GetServerIndex(strServerName, dwServerIndex);
CPacketMgr::GetInstance()->SendPktBlockUser((unsigned char)dwServerIndex,
BlockInfo.m_dwUID, BlockInfo.m_szCharacterName, cBlockTarget, cBlockTerm, szFinishDate, szDescription);
}
}
EndDialog(true);
}
else
{
Report(GetLocalString("MSG_0095"), CAUTION);
return;
}
}
void CAddBlockUserDlg::OnCbnSelchangeBlockType()
{
CComboBox* lpBlockTermCb = static_cast<CComboBox*>(GetDlgItem(IDC_BLOCK_TYPE));
if(NULL == lpBlockTermCb)
{
return;
}
if(TEMP_BLOCK == lpBlockTermCb->GetCurSel())
{
GetDlgItem(IDC_BLOCK_DATE)->EnableWindow(true);
}
else if(PERMANANT_BLOCK == lpBlockTermCb->GetCurSel())
{
GetDlgItem(IDC_BLOCK_DATE)->EnableWindow(false);
}
}
void CAddBlockUserDlg::OnBnClickedBaSelallChk()
{
bool bChk = false;
m_ctrlServerGroupCb.EnableWindow(true);
if (BST_CHECKED == m_ctrlAllChk.GetCheck())
{
bChk = true;
m_ctrlServerGroupCb.EnableWindow(false);
}
m_ctrlServerGroupCb.SelectAll(bChk);
}