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>
This commit is contained in:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View File

@@ -0,0 +1,183 @@
// DBSetting.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "SeverSetupDlg.h"
#include "DBSetting.h"
#include ".\dbsetting.h"
// CDBSetting 대화 상자입니다.
IMPLEMENT_DYNAMIC(CDBSetting, CDialog)
CDBSetting::CDBSetting(const TCHAR* szWindowTitle,
const DBSetting& dbSetting,
CWnd* pParent)
: CDialog(CDBSetting::IDD, pParent)
, m_szWindowTitle(szWindowTitle)
, m_szDBAddrLabel(_T(""))
, m_DBSetting(dbSetting)
, m_szDBNameLabel(_T(""))
{
}
CDBSetting::~CDBSetting()
{
}
void CDBSetting::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_DB_TYPE, m_cbDBType);
DDX_Control(pDX, IDC_DB_NONE, m_edDBInfo[DBSetting::DB_TYPE]);
DDX_Control(pDX, IDC_DB_ADDR, m_edDBInfo[DBSetting::DB_ADDR]);
DDX_Control(pDX, IDC_DB_NAME, m_edDBInfo[DBSetting::DB_NAME]);
DDX_Control(pDX, IDC_DB_USER, m_edDBInfo[DBSetting::DB_USER]);
DDX_Control(pDX, IDC_DB_PASS, m_edDBInfo[DBSetting::DB_PASS]);
DDX_Text(pDX, IDC_DB_ADDR_LABEL, m_szDBAddrLabel);
DDX_Text(pDX, IDC_DB_NAME_LABLE, m_szDBNameLabel);
}
BEGIN_MESSAGE_MAP(CDBSetting, CDialog)
ON_CBN_SELCHANGE(IDC_DB_TYPE, OnCbnSelchangeDbType)
END_MESSAGE_MAP()
// CDBSetting 메시지 처리기입니다.
BOOL CDBSetting::OnInitDialog()
{
CDialog::OnInitDialog();
SetWindowText(m_szWindowTitle);
for (int nIndex = 0; nIndex < DBSetting::MAX_DBDATA; ++nIndex)
{
// 다른 데이터들을 전부 세팅한다.
m_edDBInfo[nIndex].SetWindowText(m_DBSetting.m_szDBData[nIndex]);
}
m_cbDBType.InsertString(0, _T("MSSQL"));
m_cbDBType.InsertString(1, _T("ODBC"));
m_cbDBType.InsertString(2, _T("ORACLE"));
CString& szDBType = m_DBSetting.m_szDBData[DBSetting::DB_TYPE];
szDBType.MakeUpper();
int nDBTypeIndex = 0;
if (0 == szDBType.Compare(_T("MSSQL"))) { nDBTypeIndex = 0; }
else if (0 == szDBType.Compare(_T("ODBC"))) { nDBTypeIndex = 1; }
else if (0 == szDBType.Compare(_T("ORACLE"))) { nDBTypeIndex = 2; }
m_cbDBType.SetCurSel(nDBTypeIndex);
OnCbnSelchangeDbType();
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CDBSetting::OnOK()
{
// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
UpdateData(FALSE);
for (int nIndex = 0; nIndex < DBSetting::MAX_DBDATA; ++nIndex)
{
// 다른 데이터들을 전부 얻어온다.
m_edDBInfo[nIndex].GetWindowText(m_DBSetting.m_szDBData[nIndex]);
}
int nCurSel = m_cbDBType.GetCurSel();
if (nCurSel < 0) { nCurSel = 0; }
m_cbDBType.GetLBText(nCurSel, m_DBSetting.m_szDBData[DBSetting::DB_TYPE]);
const CString& DBType = m_DBSetting.m_szDBData[DBSetting::DB_TYPE];
if (0 != DBType.Compare(_T("MSSQL")))
{
m_DBSetting.m_szDBData[DBSetting::DB_NAME] = _T("NULL");
}
CDialog::OnOK();
}
void CDBSetting::OnCbnSelchangeDbType()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
CString DBType;
m_cbDBType.GetLBText(m_cbDBType.GetCurSel(), DBType);
if (0 == DBType.Compare("MSSQL"))
{
m_edDBInfo[DBSetting::DB_NAME].EnableWindow(TRUE);
m_szDBAddrLabel.SetString(_T("DB Address"));
m_szDBNameLabel.SetString(_T("DB Name"));
}
else
{
m_edDBInfo[DBSetting::DB_NAME].EnableWindow(FALSE);
m_szDBAddrLabel.SetString(_T("DB DataSourceName"));
m_szDBNameLabel.SetString(_T(""));
}
UpdateData(FALSE);
}
void CDBSetting::CreateDBInfoString(const DBSetting& dbSetting, CString& szDBInfo)
{
const CString& DBType = dbSetting.m_szDBData[DBSetting::DB_TYPE];
if (0 == DBType.Compare(_T("MSSQL")))
{
szDBInfo.AppendFormat(
_T("- DB Type : %s\r\n")
_T("- DB Addr : %s\r\n")
_T("- DB Name : %s\r\n")
_T("- DB User : %s\r\n")
_T("- DB Pass : "),
dbSetting.m_szDBData[DBSetting::DB_TYPE],
dbSetting.m_szDBData[DBSetting::DB_ADDR],
dbSetting.m_szDBData[DBSetting::DB_NAME],
dbSetting.m_szDBData[DBSetting::DB_USER]);
}
else
{
szDBInfo.AppendFormat(
_T("- DB Type : %s\r\n")
_T("- DB DataSource : %s\r\n")
_T("- DB User : %s\r\n")
_T("- DB Pass : "),
dbSetting.m_szDBData[DBSetting::DB_TYPE],
dbSetting.m_szDBData[DBSetting::DB_ADDR],
dbSetting.m_szDBData[DBSetting::DB_USER]);
}
int nLength = dbSetting.m_szDBData[DBSetting::DB_PASS].GetLength();
while (0 < --nLength) { szDBInfo.Append("*"); }
}
bool CDBSetting::CreateDBSettingDlg(const TCHAR* szWindowTitle,
const TCHAR* szDBInfoFooter,
DBSetting& dbSetting, CString& szDBInfo)
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
CDBSetting DBSettingDlg(szWindowTitle, dbSetting);
if (IDOK == DBSettingDlg.DoModal())
{
dbSetting = DBSettingDlg.GetDBSetting();
szDBInfo.SetString(szDBInfoFooter);
CDBSetting::CreateDBInfoString(dbSetting, szDBInfo);
return true;
}
return false;
}

View File

@@ -0,0 +1,65 @@
#pragma once
#include "afxwin.h"
#include <DB/OleDB.h>
// CDBSetting 대화 상자입니다.
struct DBSetting
{
enum
{
DB_TYPE = 0,
DB_ADDR = 1,
DB_NAME = 2,
DB_USER = 3,
DB_PASS = 4,
MAX_DBDATA = 5
};
CString m_szDBData[MAX_DBDATA];
};
class CDBSetting : public CDialog
{
DECLARE_DYNAMIC(CDBSetting)
public:
CDBSetting(const TCHAR* szWindowTitle,
const DBSetting& dbSetting, CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CDBSetting();
// 대화 상자 데이터입니다.
enum { IDD = IDD_DBINFO };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
public:
DBSetting& GetDBSetting() { return m_DBSetting; }
static void CreateDBInfoString(const DBSetting& dbSetting, CString& szDBInfo);
static bool CreateDBSettingDlg(const TCHAR* szWindowTitle,
const TCHAR* szDBInfoFooter, DBSetting& dbSetting, CString& szDBInfo);
private:
virtual BOOL OnInitDialog();
virtual void OnOK();
afx_msg void OnCbnSelchangeDbType();
CComboBox m_cbDBType;
CEdit m_edDBInfo[DBSetting::MAX_DBDATA];
DBSetting m_DBSetting;
CString m_szWindowTitle;
CString m_szDBAddrLabel;
CString m_szDBNameLabel;
};

View File

@@ -0,0 +1,77 @@
================================================================================
MFC 라이브러리 : SeverSetupDlg 프로젝트 개요
================================================================================
응용 프로그램 마법사를 사용하여 SeverSetupDlg 응용 프로그램을 만듭니다. 이 응용
프로그램에서는 기본적인 MFC 사용 밥법과 응용 프로그램 작성 방법을 설명합니다.
이 파일에는 SeverSetupDlg 응용 프로그램을 구성하는 각 파일에 대한 개요가 포함되어
있습니다.
SeverSetupDlg.vcproj
응용 프로그램 마법사를 사용하여 생성된 VC++ 프로젝트의 주 프로젝트 파일입니다.
이 파일에는 파일을 생성한 Visual C++ 버전 정보 및 응용 프로그램 마법사에서 선택한 플랫폼,
구성, 프로젝트 기능 등의 정보가 포함됩니다.
SeverSetupDlg.h
응용 프로그램의 주 헤더 파일입니다. 이 파일에는 다른 프로젝트에 관련된 Resource.h와 같은
특정 헤더가 포함되며 CSeverSetupDlgApp 응용 프로그램 클래스가 선언됩니다.
SeverSetupDlg.cpp
CSeverSetupDlgApp 응용 프로그램 클래스를 포함하는 주 응용 프로그램의 소스 파일입니다.
SeverSetupDlg.rc
프로그램에서 사용하는 모든 Microsoft Windows 리소스가 나열된 파일입니다.
이 파일에는 RES 하위 디렉터리에 저장된 아이콘, 비트맵 및 커서가 포함되며
Microsoft Visual C++에서 직접 이 파일을 편집할 수도 있습니다. 사용자의 프로젝트
리소스는 1042에 들어 있습니다.
res\SeverSetupDlg.ico
응용 프로그램의 아이콘으로 사용되는 아이콘 파일입니다.
이 아이콘은 주 리소스 파일인 SeverSetupDlg.rc에 포함됩니다.
res\SeverSetupDlg.rc2
Microsoft Visual C++에서 편집할 수 없는 리소스가 포함된 파일입니다.
리소스 편집기에서 편집할 수 없는 모든 리소스는 이 파일에 포함되어 있습니다.
/////////////////////////////////////////////////////////////////////////////
응용 프로그램 마법사에서는 단일 대화 상자 클래스를 만듭니다.
SeverSetupDlgDlg.h, SeverSetupDlgDlg.cpp - 대화 상자
CSeverSetupDlgDlg 클래스를 포함하는 파일입니다. 이 클래스에는 응용 프로그램의
주 대화 상자에 대한 동작이 정의됩니다. 대화 상자의 템플릿은 SeverSetupDlg.rc에
있으며 Microsoft Visual C++에서 편집할 수 있습니다.
/////////////////////////////////////////////////////////////////////////////
기타 기능
ActiveX 컨트롤
응용 프로그램에서 ActiveX 컨트롤을 사용할 수 있습니다.
/////////////////////////////////////////////////////////////////////////////
기타 표준 파일
StdAfx.h, StdAfx.cpp
미리 컴파일된 헤더 파일(PCH) SeverSetupDlg.pch 및 미리 컴파일된
형식 파일 StdAfx.obj를 빌드할 때 사용되는 파일입니다.
Resource.h
새로운 리소스 ID를 정의하는 표준 헤더 파일입니다.
Microsoft Visual C++에서 이 파일을 읽고 업데이트합니다.
/////////////////////////////////////////////////////////////////////////////
기타 정보
응용 프로그램 마법사에서는 "TODO:"를 사용하여 추가하거나 사용자 지정해야 하는
소스 코드를 나타냅니다.
응용 프로그램에서 공유 DLL에 MFC를 사용하고 응용 프로그램의 언어가 운영 체제의
언어와 다른 경우 Microsoft Visual C++ CD-ROM의 Win\System 디렉터리에 있는
해당 지역의 리소스인 MFC70XXX.DLL을 컴퓨터의 system 또는 system32 디렉터리에
복사한 다음 MFCLOC.DLL로 이름을 바꾸어야 합니다. "XXX"는 해당 언어를 나타내는
약어입니다. 예를 들어 MFC70DEU.DLL에는 독일어로 변환된 리소스가 포함됩니다.
이런 작업을 하지 않으면 응용 프로그램의 일부 UI 요소가 운영 체제의 언어로
남아 있게 됩니다.
/////////////////////////////////////////////////////////////////////////////

View File

@@ -0,0 +1,101 @@
#include "stdafx.h"
#include "ServerGroup.h"
#include <Utility/Setup/ServerSetup.h>
void SetGameServerNation(CComboBox& NationComboBox)
{
NationComboBox.InsertString(0, "0 = Korea");
NationComboBox.InsertString(1, "1 = Global");
}
void SetServerGroup(CComboBox& ServerGroupComboBox)
{
ServerGroupComboBox.InsertString(0, "0 = Test");
ServerGroupComboBox.InsertString(1, "1 = Ichman");
ServerGroupComboBox.InsertString(2, "2 = Asia");
ServerGroupComboBox.InsertString(3, "3 = 3");
ServerGroupComboBox.InsertString(4, "4 = 4");
ServerGroupComboBox.InsertString(5, "5 = 5");
ServerGroupComboBox.InsertString(6, "6 = 6");
ServerGroupComboBox.InsertString(7, "7 = 7");
ServerGroupComboBox.InsertString(8, "8 = 8");
ServerGroupComboBox.InsertString(9, "9 = 9 (Battle Server)");
}
void SetServerZone(CComboBox &ZoneCombo)
{
ZoneCombo.InsertString(0, "None");
ZoneCombo.InsertString(1, "Zone1 (Grand Cost)");
ZoneCombo.InsertString(2, "Zone2 (Rehan Spot)");
ZoneCombo.InsertString(3, "Zone3");
ZoneCombo.InsertString(4, "Zone4 (Sinor Island)");
ZoneCombo.InsertString(5, "Zone5 (Island of Pain)");
ZoneCombo.InsertString(6, "Zone6");
ZoneCombo.InsertString(7, "Zone7");
ZoneCombo.InsertString(8, "Zone8 (Caernarvon)");
ZoneCombo.InsertString(9, "Zone9 (Kartehena)");
ZoneCombo.InsertString(10, "Zone10");
ZoneCombo.InsertString(11, "Zone11");
ZoneCombo.InsertString(12, "Zone12 (Almighty Ground)");
ZoneCombo.InsertString(13, "Zone13");
ZoneCombo.InsertString(14, "Zone14 (Prison)");
ZoneCombo.InsertString(15, "Zone15");
ZoneCombo.InsertString(16, "Zone16 (Storn War(L))");
ZoneCombo.InsertString(17, "Zone17 (Storn War(M))");
ZoneCombo.InsertString(18, "Zone18 (Storn War(H))");
}
void SetServerChannel(CComboBox& ServerChannelComboBox)
{
ServerChannelComboBox.InsertString(0, "CH1");
ServerChannelComboBox.InsertString(1, "CH2");
ServerChannelComboBox.InsertString(2, "CH3");
ServerChannelComboBox.InsertString(3, "CH4");
ServerChannelComboBox.InsertString(4, "CH5");
}
void SetAuthType(CComboBox& AuthType)
{
AuthType.InsertString(CServerSetup::ROWGlobalAuth, "ROWGlobalAuth");
AuthType.InsertString(CServerSetup::HangameAuth, "HangameAuth");
AuthType.InsertString(CServerSetup::GamaAuth, "GamaAuth");
AuthType.InsertString(CServerSetup::YouxiLandAuth, "YouxiLandAuth");
AuthType.InsertString(CServerSetup::JapanAuth, "JapanAuth");
AuthType.InsertString(CServerSetup::GammaniaAuth, "GammaniaAuth");
}
void SetBillingType(CComboBox& BillingType)
{
BillingType.InsertString(CServerSetup::ROWGlobalBilling, "ROWGlobalBilling");
BillingType.InsertString(CServerSetup::GamaBilling, "GamaBilling");
BillingType.InsertString(CServerSetup::GamaUnitedBilling, "GamaUnitedBilling");
BillingType.InsertString(CServerSetup::YouxiLandBilling, "YouxiLandBilling");
BillingType.InsertString(CServerSetup::JapanBilling, "JapanBilling");
BillingType.InsertString(CServerSetup::GammaniaBilling, "GammaniaBilling");
}
void SetDBAgentServerType(CComboBox& TypeCb)
{
TypeCb.InsertString(0, "ROW");
TypeCb.SetItemData(0, UnifiedConst::ROW);
TypeCb.InsertString(1, "Part1");
TypeCb.SetItemData(1, UnifiedConst::Part1);
TypeCb.InsertString(2, "Part1 Unified");
TypeCb.SetItemData(2, UnifiedConst::Part1Unified);
TypeCb.InsertString(3, "Part2 Unified");
TypeCb.SetItemData(3, UnifiedConst::Part2Unified);
TypeCb.InsertString(4, "Part2 Selectable");
TypeCb.SetItemData(4, UnifiedConst::Part2Selectable);
}
unsigned short GetZoneTCPPort(unsigned long dwServerID)
{
return CServerSetup::GetGameServerTCPPort(dwServerID);
}

View File

@@ -0,0 +1,16 @@
#ifndef _INIT_SERVER_GROUP_INFO_
#define _INIT_SERVER_GROUP_INFO_
#include "afxwin.h"
void SetGameServerNation(CComboBox& NationComboBox);
void SetServerGroup(CComboBox& ServerGroupComboBox);
void SetServerChannel(CComboBox& ServerChannelComboBox);
void SetAuthType(CComboBox& AuthType);
void SetBillingType(CComboBox& BillingType);
void SetServerZone(CComboBox& ZoneCombo);
void SetDBAgentServerType(CComboBox& TypeCb);
unsigned short GetZoneTCPPort(unsigned long dwServerID);
#endif

View File

@@ -0,0 +1,97 @@
// SetupPage1.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "SeverSetupDlg.h"
#include "SetupPage1.h"
#include <Utility/Setup/ServerSetup.h>
// CSetupPage1 대화 상자입니다.
IMPLEMENT_DYNAMIC(CSetupPage1, CPropertyPage)
CSetupPage1::CSetupPage1()
: CPropertyPage(CSetupPage1::IDD)
, m_bEnabled(FALSE)
, m_szLoginServerID(_T(""))
, m_szLoginServerListenLauncherPort(_T(""))
, m_szLoginServerListenDBAgentPort(_T(""))
, m_bLoginPingCheck(FALSE)
, m_bLoginAloneMode(FALSE)
, m_dwLeastPatchVer(0)
, m_szPatchAddress(_T(""))
{
}
CSetupPage1::~CSetupPage1()
{
}
void CSetupPage1::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
DDX_Text(pDX, IDC_LOGIN_SERVER_ID, m_szLoginServerID);
DDX_Text(pDX, IDC_LOGIN_LISTEN_LAUNCHER_PORT, m_szLoginServerListenLauncherPort);
DDX_Text(pDX, IDC_LOGIN_LISTEN_DBAGENT_PORT, m_szLoginServerListenDBAgentPort);
DDX_Check(pDX, IDC_LOGIN_PING_CHECK, m_bLoginPingCheck);
DDX_Check(pDX, IDC_LOGIN_ALONE_MODE, m_bLoginAloneMode);
DDX_Text(pDX, IDC_LOGIN_PATCH_VER, m_dwLeastPatchVer);
DDX_Text(pDX, IDC_LOGIN_PATCH_ADDR, m_szPatchAddress);
}
BEGIN_MESSAGE_MAP(CSetupPage1, CPropertyPage)
END_MESSAGE_MAP()
BOOL CSetupPage1::OnInitDialog()
{
CPropertyPage::OnInitDialog();
m_szLoginServerListenLauncherPort.Format(_T("%d"), CServerSetup::LoginServerLauncherListen);
m_szLoginServerListenDBAgentPort.Format(_T("%d"), CServerSetup::LoginServerDBAgentServerListen);
CString szPingCheck;
CString szAloneMode;
CString szLeastPatchVer;
ReadStringFromReg(g_szSetupFileName, _T("LoginServer"), _T("ServerID"), m_szLoginServerID);
ReadStringFromReg(g_szSetupFileName, _T("LoginServer"), _T("PingCheck"), szPingCheck);
ReadStringFromReg(g_szSetupFileName, _T("LoginServer"), _T("AloneMode"), szAloneMode);
ReadStringFromReg(g_szSetupFileName, _T("LoginServer"), _T("LeastPatchVer"), szLeastPatchVer);
ReadStringFromReg(g_szSetupFileName, _T("LoginServer"), _T("PatchAddr"), m_szPatchAddress);
m_bLoginPingCheck = (1 == atol(szPingCheck));
m_bLoginAloneMode = (1 == atol(szAloneMode));
m_dwLeastPatchVer = atol(szLeastPatchVer);
// 로그인 서버는 ID가 0이다.
m_szLoginServerID.SetString(_T("0"));
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CSetupPage1::Save(void)
{
if(m_bEnabled)
{
UpdateData(TRUE);
CString szLeastPatchVer;
szLeastPatchVer.Format(_T("%d"), m_dwLeastPatchVer);
WriteStringToReg(g_szSetupFileName, _T("LoginServer"), _T("ServerID"), m_szLoginServerID);
WriteStringToReg(g_szSetupFileName, _T("LoginServer"), _T("PingCheck"), BOOLToString(m_bLoginPingCheck));
WriteStringToReg(g_szSetupFileName, _T("LoginServer"), _T("AloneMode"), BOOLToString(m_bLoginAloneMode));
WriteStringToReg(g_szSetupFileName, _T("LoginServer"), _T("LeastPatchVer"), szLeastPatchVer);
WriteStringToReg(g_szSetupFileName, _T("LoginServer"), _T("PatchAddr"), m_szPatchAddress);
}
}
BOOL CSetupPage1::OnSetActive()
{
// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
UpdateData(FALSE);
m_bEnabled = TRUE;
return CPropertyPage::OnSetActive();
}

View File

@@ -0,0 +1,41 @@
#pragma once
// CSetupPage1 대화 상자입니다.
class CSetupPage1 : public CPropertyPage
{
DECLARE_DYNAMIC(CSetupPage1)
public:
CSetupPage1();
virtual ~CSetupPage1();
// 대화 상자 데이터입니다.
enum { IDD = IDD_PAGE_1 };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
public:
void Save(void);
private:
virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
BOOL m_bEnabled;
BOOL m_bLoginPingCheck;
BOOL m_bLoginAloneMode;
DWORD m_dwLeastPatchVer;
CString m_szLoginServerListenLauncherPort;
CString m_szLoginServerListenDBAgentPort;
CString m_szLoginServerID;
CString m_szPatchAddress;
};

View File

@@ -0,0 +1,244 @@
// SetupPage2.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "SeverSetupDlg.h"
#include "ServerGroup.h"
#include "SetupPage2.h"
#include <Utility/Setup/ServerSetup.h>
#include <Network/Packet/PacketStruct/ServerInfo.h>
#include ".\setuppage2.h"
// CSetupPage2 대화 상자입니다.
IMPLEMENT_DYNAMIC(CSetupPage2, CPropertyPage)
CSetupPage2::CSetupPage2()
: CPropertyPage(CSetupPage2::IDD)
, m_bEnabled(FALSE)
, m_szAuthServerID(_T(""))
, m_szAuthServerClientListenPort(_T(""))
, m_bPingCheck(FALSE)
, m_bKoreanCheck(FALSE)
, m_bTestGroup(FALSE)
, m_bSupressCharCreate(FALSE)
, m_bSupressCharDelete(FALSE)
, m_bBattleServer(FALSE)
, m_szAuthDBInfo(_T(""))
, m_szAdminToolDBInfo(_T(""))
, m_szDBAgentAddress(_T(""))
{
}
CSetupPage2::~CSetupPage2()
{
}
void CSetupPage2::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
DDX_Text(pDX, IDC_AUTH_SERVER_ID, m_szAuthServerID);
DDX_Text(pDX, IDC_AUTH_CLIENT_LISTEN_PORT, m_szAuthServerClientListenPort);
DDX_Control(pDX, IDC_AUTH_SERVER_TYPE, m_cbAuthType);
DDX_Control(pDX, IDC_AUTH_SERVER_GROUP, m_cbAuthGroup);
DDX_Check(pDX, IDC_AUTH_PING_CHECK, m_bPingCheck);
DDX_Check(pDX, IDC_AUTH_HAN_CHECK, m_bKoreanCheck);
DDX_Check(pDX, IDC_AUTH_TEST_GROUP, m_bTestGroup);
DDX_Check(pDX, IDC_AUTH_SUPRESS_CHARCREATE, m_bSupressCharCreate);
DDX_Check(pDX, IDC_AUTH_SUPRESS_CHARDELETE, m_bSupressCharDelete);
DDX_Check(pDX, IDC_AUTH_BATTLESERVER, m_bBattleServer);
DDX_Text(pDX, IDC_AUTH_EDT_DBSETTING, m_szAuthDBInfo);
DDX_Text(pDX, IDC_AUTH_BLOCK_EDT_DBSETTING, m_szAdminToolDBInfo);
DDX_Text(pDX, IDC_AUTH_DBAGENT_ADDR, m_szDBAgentAddress);
}
BEGIN_MESSAGE_MAP(CSetupPage2, CPropertyPage)
ON_BN_CLICKED(IDC_AUTH_BTN_DBSETTING, OnBnClickedAuthBtnDbsetting)
ON_BN_CLICKED(IDC_AUTH_BLOCK_BTN_DBSETTING, OnBnClickedAuthBlockBtnDbsetting)
END_MESSAGE_MAP()
// CSetupPage2 메시지 처리기입니다.
BOOL CSetupPage2::OnInitDialog()
{
CPropertyPage::OnInitDialog();
m_szAuthServerClientListenPort.Format(_T("%d"), CServerSetup::AuthServerClientListen);
SetAuthType(m_cbAuthType);
SetServerGroup(m_cbAuthGroup);
m_cbAuthGroup.SetCurSel(0);
CString szAuthType;
CString szPingCheck;
CString szKoreanLangCheck;
CString szBattleServerAuth;
CString szTestGroupAuth;
CString szSupressCharCreate;
CString szSupressCharDelete;
// 기본 정보
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("ServerID"), m_szAuthServerID);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("AuthType"), szAuthType);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("DBAgentAddr"), m_szDBAgentAddress);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("PingCheck"), szPingCheck);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("KoreanLangCheck"), szKoreanLangCheck);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("BattleServerAuth"), szBattleServerAuth);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("TestGroupAuth"), szTestGroupAuth);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("SupressCharCreate"), szSupressCharCreate);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("SupressCharDelete"), szSupressCharDelete);
// 인증 DB정보
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("AuthDBType"), m_AuthDB.m_szDBData[DBSetting::DB_TYPE]);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("AuthDBAddr"), m_AuthDB.m_szDBData[DBSetting::DB_ADDR]);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("AuthDBName"), m_AuthDB.m_szDBData[DBSetting::DB_NAME]);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("AuthDBUser"), m_AuthDB.m_szDBData[DBSetting::DB_USER]);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("AuthDBPass"), m_AuthDB.m_szDBData[DBSetting::DB_PASS]);
// 운영툴 DB정보 (블럭 때문임)
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("AdminToolDBType"), m_AdminToolDB.m_szDBData[DBSetting::DB_TYPE]);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("AdminToolDBAddr"), m_AdminToolDB.m_szDBData[DBSetting::DB_ADDR]);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("AdminToolDBName"), m_AdminToolDB.m_szDBData[DBSetting::DB_NAME]);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("AdminToolDBUser"), m_AdminToolDB.m_szDBData[DBSetting::DB_USER]);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("AdminToolDBPass"), m_AdminToolDB.m_szDBData[DBSetting::DB_PASS]);
SERVER_ID serverID;
serverID.dwID = atol(m_szAuthServerID);
serverID.sID.ID = 0;
serverID.sID.Type = CServerSetup::AuthServer;
serverID.sID.Channel = 0;
m_szAuthServerID.Format("0x%08x", serverID.dwID);
m_cbAuthType.SetCurSel(atol(szAuthType));
m_cbAuthGroup.SetCurSel(int(serverID.sID.Group));
m_bPingCheck = (1 == atol(szPingCheck));
m_bKoreanCheck = (1 == atol(szKoreanLangCheck));
m_bTestGroup = (1 == atol(szTestGroupAuth));
m_bSupressCharCreate = (1 == atol(szSupressCharCreate));
m_bSupressCharDelete = (1 == atol(szSupressCharDelete));
m_bBattleServer = (1 == atol(szBattleServerAuth));
CDBSetting::CreateDBInfoString(m_AuthDB, m_szAuthDBInfo);
CDBSetting::CreateDBInfoString(m_AdminToolDB, m_szAdminToolDBInfo);
UpdateData(FALSE);
UpdateServerID();
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CSetupPage2::Save(void)
{
if(m_bEnabled)
{
UpdateData(TRUE);
CString szAuthServerID;
CString szAuthType;
CString szPingCheck;
CString szKoreanLangCheck;
CString szBattleServerAuth;
CString szTestGroupAuth;
CString szSupressCharCreate;
CString szSupressCharDelete;
SERVER_ID serverID;
serverID.sID.ID = 0;
serverID.sID.Type = CServerSetup::AuthServer;
serverID.sID.Group = m_cbAuthGroup.GetCurSel();
serverID.sID.Channel = 0;
szAuthServerID.Format(_T("%d"), serverID.dwID);
szAuthType.Format(_T("%d"), m_cbAuthType.GetCurSel());
szPingCheck.SetString(BOOLToString(m_bPingCheck));
szKoreanLangCheck.SetString(BOOLToString(m_bKoreanCheck));
szBattleServerAuth.SetString(BOOLToString(m_bBattleServer));
szTestGroupAuth.SetString(BOOLToString(m_bTestGroup));
szSupressCharCreate.SetString(BOOLToString(m_bSupressCharCreate));
szSupressCharDelete.SetString(BOOLToString(m_bSupressCharDelete));
// 기본 정보
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("ServerID"), szAuthServerID);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("AuthType"), szAuthType);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("DBAgentAddr"), m_szDBAgentAddress);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("PingCheck"), szPingCheck);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("KoreanLangCheck"), szKoreanLangCheck);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("BattleServerAuth"), szBattleServerAuth);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("TestGroupAuth"), szTestGroupAuth);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("SupressCharCreate"), szSupressCharCreate);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("SupressCharDelete"), szSupressCharDelete);
// 인증 DB정보
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("AuthDBType"), m_AuthDB.m_szDBData[DBSetting::DB_TYPE]);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("AuthDBAddr"), m_AuthDB.m_szDBData[DBSetting::DB_ADDR]);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("AuthDBName"), m_AuthDB.m_szDBData[DBSetting::DB_NAME]);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("AuthDBUser"), m_AuthDB.m_szDBData[DBSetting::DB_USER]);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("AuthDBPass"), m_AuthDB.m_szDBData[DBSetting::DB_PASS]);
// 운영툴 DB정보 (블럭 때문임)
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("AdminToolDBType"), m_AdminToolDB.m_szDBData[DBSetting::DB_TYPE]);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("AdminToolDBAddr"), m_AdminToolDB.m_szDBData[DBSetting::DB_ADDR]);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("AdminToolDBName"), m_AdminToolDB.m_szDBData[DBSetting::DB_NAME]);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("AdminToolDBUser"), m_AdminToolDB.m_szDBData[DBSetting::DB_USER]);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("AdminToolDBPass"), m_AdminToolDB.m_szDBData[DBSetting::DB_PASS]);
}
}
BOOL CSetupPage2::OnSetActive()
{
// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
UpdateData(FALSE);
m_bEnabled = TRUE;
return CPropertyPage::OnSetActive();
}
void CSetupPage2::UpdateServerID()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData(TRUE);
SERVER_ID serverID;
serverID.sID.ID = 0;
serverID.sID.Type = CServerSetup::AuthServer;
serverID.sID.Group = m_cbAuthGroup.GetCurSel();
serverID.sID.Channel = 0;
m_szAuthServerID.Format("0x%08x", serverID.dwID);
UpdateData(FALSE);
}
void CSetupPage2::OnBnClickedAuthBtnDbsetting()
{
UpdateData(TRUE);
if (CDBSetting::CreateDBSettingDlg(
_T("Auth DBSetting"),
_T("* Auth DBSetting \r\n"),
m_AuthDB, m_szAuthDBInfo))
{
UpdateData(FALSE);
}
}
void CSetupPage2::OnBnClickedAuthBlockBtnDbsetting()
{
UpdateData(TRUE);
if (CDBSetting::CreateDBSettingDlg(
_T("AdminTool DBSetting (for block user)"),
_T("* AdminTool DBSetting (for block user) \r\n"),
m_AdminToolDB, m_szAdminToolDBInfo))
{
UpdateData(FALSE);
}
}

View File

@@ -0,0 +1,57 @@
#pragma once
#include "afxwin.h"
#include "afxcmn.h"
#include "DBSetting.h"
// CSetupPage2 대화 상자입니다.
class CSetupPage2 : public CPropertyPage
{
DECLARE_DYNAMIC(CSetupPage2)
public:
CSetupPage2();
virtual ~CSetupPage2();
// 대화 상자 데이터입니다.
enum { IDD = IDD_PAGE_2 };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
void UpdateServerID();
void Save(void);
private:
afx_msg void OnBnClickedAuthBtnDbsetting();
afx_msg void OnBnClickedAuthBlockBtnDbsetting();
BOOL m_bEnabled;
BOOL m_bPingCheck;
BOOL m_bKoreanCheck;
BOOL m_bTestGroup;
BOOL m_bSupressCharCreate;
BOOL m_bSupressCharDelete;
BOOL m_bBattleServer;
CComboBox m_cbAuthType;
CComboBox m_cbAuthGroup;
CString m_szAuthServerID;
CString m_szAuthServerClientListenPort;
CString m_szDBAgentAddress;
CString m_szAuthDBInfo;
CString m_szAdminToolDBInfo;
DBSetting m_AuthDB;
DBSetting m_AdminToolDB;
};

View File

@@ -0,0 +1,453 @@
// SetupPage3.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "SeverSetupDlg.h"
#include "SetupPage3.h"
#include "ServerGroup.h"
#include <Utility/Setup/ServerSetup.h>
#include <Network/Packet/PacketStruct/ServerInfo.h>
#include ".\setuppage3.h"
// CSetupPage3 대화 상자입니다.
IMPLEMENT_DYNAMIC(CSetupPage3, CPropertyPage)
CSetupPage3::CSetupPage3()
: CPropertyPage(CSetupPage3::IDD)
, m_bPingCheck(FALSE)
, m_bHackCheck(FALSE)
, m_bLotteryEvent(FALSE)
, m_bLevelUpEvent(FALSE)
, m_bDeathPenaltyEvent(FALSE)
, m_ExpRate(_T(""))
, m_DropRate(_T(""))
, m_EquipCorrRate(_T(""))
, m_ServerID(_T(""))
, m_ServerIDHex(_T(""))
, m_bEnabled(FALSE)
, m_DBAgentServerAddress(_T(""))
, m_LogServerAddress(_T(""))
, m_ChatServerAddress(_T(""))
, m_BattleLimit(_T(""))
, m_BattleLimitPer(_T("100"))
, m_strZoneCount(_T("0"))
, m_bBattleServer(FALSE)
, m_Fame(_T(""))
, m_Refine(_T(""))
, m_Mileage(_T(""))
, m_strTCPPort(_T(""))
, m_strP1UDPListen(_T(""))
{
}
CSetupPage3::~CSetupPage3()
{
}
void CSetupPage3::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
DDX_Check(pDX, IDC_PINGCHECK, m_bPingCheck);
DDX_Check(pDX, IDC_HACKCHECK, m_bHackCheck);
DDX_Check(pDX, IDC_LOTTERY, m_bLotteryEvent);
DDX_Check(pDX, IDC_LEVELUP, m_bLevelUpEvent);
DDX_Check(pDX, IDC_DEATHPENALTY, m_bDeathPenaltyEvent);
DDX_Text(pDX, IDC_AGENTADDR, m_DBAgentServerAddress);
DDX_Text(pDX, IDC_EXP, m_ExpRate);
DDX_Text(pDX, IDC_DROP, m_DropRate);
DDX_Control(pDX, IDC_ZONE, m_Zone);
DDX_Control(pDX, IDC_CHANNEL, m_Channel);
DDX_Text(pDX, IDC_SERVERID, m_ServerID);
DDX_Text(pDX, IDC_SERVERID_HEX, m_ServerIDHex);
DDX_Control(pDX, IDC_GROUP, m_Group);
DDX_Text(pDX, IDC_LOGSERVERADDR, m_LogServerAddress);
DDX_Text(pDX, IDC_CHATSERVERADDR, m_ChatServerAddress);
DDX_Text(pDX, IDC_BATTLELIMIT, m_BattleLimit);
DDX_Text(pDX, IDC_BATTLELIMITPER, m_BattleLimitPer);
DDX_Text(pDX, IDC_ZONE_TCPPORT, m_strTCPPort);
DDX_Control(pDX, IDC_ZONE_SELECTION, m_ctrlZoneCountCb);
DDX_Text(pDX, IDC_ZONE_COUNT, m_strZoneCount);
DDX_Control(pDX, IDC_SAVE_ZONE_SETING, m_ctrlSaveZoneSetting);
DDX_Check(pDX, IDC_GAMEBATTLESERVER, m_bBattleServer);
DDX_Control(pDX, IDC_NATION_SELECTION, m_Nation);
DDX_Text(pDX, IDC_FAME, m_Fame);
DDX_Text(pDX, IDC_REFINE, m_Refine);
DDX_Text(pDX, IDC_MILEAGE, m_Mileage);
DDX_Text(pDX, IDC_ZONE_UDPPORT, m_strP1UDPListen);
DDX_Text(pDX, IDC_EQUIPCORR, m_EquipCorrRate);
}
BEGIN_MESSAGE_MAP(CSetupPage3, CPropertyPage)
ON_CBN_SELCHANGE(IDC_GROUP, OnCbnSelchangeGroup)
ON_CBN_SELCHANGE(IDC_ZONE, OnCbnSelchangeZone)
ON_CBN_SELCHANGE(IDC_CHANNEL, OnCbnSelchangeChannel)
ON_BN_CLICKED(IDC_ZONE_ADD, OnBnClickedZoneAdd)
ON_BN_CLICKED(IDC_ZONE_DEL, OnBnClickedZoneDel)
ON_CBN_SELCHANGE(IDC_ZONE_SELECTION, OnCbnSelchangeZoneSelection)
ON_BN_CLICKED(IDC_SAVE_ZONE_SETING, OnBnClickedSaveZoneSetting)
END_MESSAGE_MAP()
// CSetupPage3 메시지 처리기입니다.
BOOL CSetupPage3::OnInitDialog()
{
CPropertyPage::OnInitDialog();
const int MAX_BUFFER = 260;
char ZoneCount[MAX_BUFFER] = "";
char strInputedZoneSetupNum[MAX_BUFFER] = "";
char strGameServerNation[MAX_BUFFER] = "";
char strBattleServer[MAX_BUFFER] = "";
ReadStringFromReg(g_szSetupFileName, "Zone_ETC", "ZoneCount", ZoneCount, MAX_BUFFER);
ReadStringFromReg(g_szSetupFileName, "Zone_ETC", "InputedZoneSetupNum", strInputedZoneSetupNum, MAX_BUFFER);
ReadStringFromReg(g_szSetupFileName, "Zone_ETC", "GameServerNation", strGameServerNation, MAX_BUFFER);
ReadStringFromReg(g_szSetupFileName, "Zone_ETC", "BattleServerGroup", strBattleServer, MAX_BUFFER);
m_strZoneCount = ZoneCount;
m_bBattleServer = (0 != atoi(strBattleServer));
// 게임 서버 설정 페이지 콤보 셋팅
SetGameServerNation(m_Nation);
SetServerGroup(m_Group);
SetServerZone(m_Zone);
SetServerChannel(m_Channel);
SetZoneCountCombo(m_ctrlZoneCountCb);
m_Nation.SetCurSel(atoi(strGameServerNation));
// 셋팅 되어 있는 존이 있다면 첫번째 셋팅 한 존으로 초기화
if (0 == atoi(ZoneCount))
{
m_ctrlZoneCountCb.EnableWindow(false);
m_ctrlSaveZoneSetting.EnableWindow(false);
}
else
{
m_ctrlZoneCountCb.SetCurSel(0);
SetGameServerPage(1);
}
return TRUE;
}
void CSetupPage3::SetGameServerPage(unsigned int nZoneCount)
{
const int MAX_BUFFER = 260;
char szSection[MAX_BUFFER], szSetCount[MAX_BUFFER] = "";
for(int nZone = 1; nZone < m_Zone.GetCount(); ++nZone)
{
for(int nCh = 0; nCh < m_Channel.GetCount(); ++nCh)
{
_snprintf(szSection, MAX_PATH, "Zone_%02d%02d", nZone, nCh);
ReadStringFromReg(g_szSetupFileName, szSection, "SetCount", szSetCount, MAX_BUFFER);
if ((nZoneCount != 0) && (nZoneCount == atoi(szSetCount)))
{
SetZoneSetupInfo(szSection);
return;
}
}
}
SetZoneSetupInfo("?????");
}
void CSetupPage3::SetZoneSetupInfo(char* szSection)
{
// 게임 서버 설정 페이지 셋팅할 정보 읽기
const int MAX_BUFFER = 260;
char szServerID[MAX_BUFFER] = "";
char szPingCheck[MAX_BUFFER] = "";
char szSpeedHackCheck[MAX_BUFFER] = "";
char szLotteryEvent[MAX_BUFFER] = "";
char szLevelUpEvent[MAX_BUFFER] = "";
char szDeathPenaltyEvent[MAX_BUFFER] = "";
ReadStringFromReg(g_szSetupFileName, szSection, "ServerID", szServerID, MAX_BUFFER);
ReadStringFromReg(g_szSetupFileName, szSection, "PingCheck", szPingCheck, MAX_BUFFER);
ReadStringFromReg(g_szSetupFileName, szSection, "SpeedHackCheck", szSpeedHackCheck, MAX_BUFFER);
ReadStringFromReg(g_szSetupFileName, szSection, "LotteryEvent", szLotteryEvent, MAX_BUFFER);
ReadStringFromReg(g_szSetupFileName, szSection, "LevelUpEvent", szLevelUpEvent, MAX_BUFFER);
ReadStringFromReg(g_szSetupFileName, szSection, "DeathPenaltyEvent", szDeathPenaltyEvent, MAX_BUFFER);
ReadStringFromReg(g_szSetupFileName, szSection, "DBAgentServerAddr", m_DBAgentServerAddress);
ReadStringFromReg(g_szSetupFileName, szSection, "LogServerAddr", m_LogServerAddress);
ReadStringFromReg(g_szSetupFileName, szSection, "ChatServerAddr", m_ChatServerAddress);
ReadStringFromReg(g_szSetupFileName, szSection, "ExpRate", m_ExpRate);
ReadStringFromReg(g_szSetupFileName, szSection, "DropRate", m_DropRate);
ReadStringFromReg(g_szSetupFileName, szSection, "EquipCorrRate", m_EquipCorrRate);
ReadStringFromReg(g_szSetupFileName, szSection, "Fame", m_Fame);
ReadStringFromReg(g_szSetupFileName, szSection, "Refine", m_Refine);
ReadStringFromReg(g_szSetupFileName, szSection, "Mileage", m_Mileage);
ReadStringFromReg(g_szSetupFileName, szSection, "BattleUserLimit", m_BattleLimit);
ReadStringFromReg(g_szSetupFileName, szSection, "BattleUserLimitPer", m_BattleLimitPer);
// 페이지 셋팅
m_ServerID = szServerID;
m_bPingCheck = atoi(szPingCheck);
m_bHackCheck = atoi(szSpeedHackCheck);
m_bLotteryEvent = atoi(szLotteryEvent);
m_bLevelUpEvent = atoi(szLevelUpEvent);
m_bDeathPenaltyEvent= atoi(szDeathPenaltyEvent);
SERVER_ID serverID = {0,};
serverID.dwID = atoi(szServerID);
serverID.sID.Type = CServerSetup::GameServer;
m_ServerID.Format("%d", serverID.dwID);
m_ServerIDHex.Format("0x%08X", serverID.dwID);
m_Group.SetCurSel(serverID.GetGroup());
m_Zone.SetCurSel(serverID.GetZone());
m_Channel.SetCurSel(serverID.GetChannel());
m_strTCPPort.Format("%d", GetZoneTCPPort(serverID.dwID));
m_strP1UDPListen.Format("%d", CServerSetup::GetP1GameServerUDPPort(serverID.dwID));
switch(m_Zone.GetCurSel())
{
case SERVER_ID::ZONE1:
case SERVER_ID::ZONE2:
case SERVER_ID::ZONE4:
case SERVER_ID::ZONE5:
case SERVER_ID::ZONE12:
case SERVER_ID::BATTLE_SERVER:
m_Channel.SetCurSel(0);
m_Channel.EnableWindow(true);
break;
default:
m_Channel.SetCurSel(0);
m_Channel.EnableWindow(false);
break;
}
UpdateData(false);
}
// nSaveType : true - 전 게임서버 공통 정보 저장
// false - 개별 게임서버 정보 저장
void CSetupPage3::Save(bool bSaveType)
{
if (!m_bEnabled)
{
return;
}
UpdateData(true);
// 전 게임서버 공통 저장 항목 (섹션: Zone_ETC) --------------------------------------------------------------
// 게임 서버 국가
char szGameServerNation[MAX_PATH] = "";
_snprintf(szGameServerNation, MAX_PATH, "%d", m_Nation.GetCurSel());
WriteStringToReg(g_szSetupFileName, "Zone_ETC", "GameServerNation", szGameServerNation);
// 배틀 로한군의 게임 서버인지 여부
WriteStringToReg(g_szSetupFileName, "Zone_ETC", "BattleServerGroup", BOOLToString(m_bBattleServer));
// 저장할 존 정보의 개수
WriteStringToReg(g_szSetupFileName, "Zone_ETC", "ZoneCount", m_strZoneCount );
// 개별 게임서버 저장 항목 (섹션: Zone_%02d%02d) ------------------------------------------------------------
if (!bSaveType)
{
if ((m_Zone.GetCurSel() == -1)
|| (m_Channel.GetCurSel() == -1)
|| (m_ctrlZoneCountCb.GetCurSel() == -1))
{
MessageBox("Invalid Selection;");
return;
}
// 현재 사용중인 SetCount로 저장하려한다면 기존것을 'not use' 로 저장
const int MAX_BUFFER = 260;
char szTemp[MAX_BUFFER], szSetCount[MAX_BUFFER] = "";
for(int nZone = 1; nZone < m_Zone.GetCount(); ++nZone)
{
for(int nCh = 0; nCh < m_Channel.GetCount(); ++nCh)
{
_snprintf(szTemp, MAX_PATH, "Zone_%02d%02d", nZone, nCh);
ReadStringFromReg(g_szSetupFileName, szTemp, "SetCount", szSetCount, MAX_BUFFER);
if (atoi(szSetCount) == (m_ctrlZoneCountCb.GetCurSel() + 1))
{
WriteStringToReg(g_szSetupFileName, szTemp, "SetCount", "not use");
}
}
}
char szSection[MAX_PATH] = "";
_snprintf(szSection, MAX_PATH, "Zone_%02d%02d", m_Zone.GetCurSel(), m_Channel.GetCurSel());
WriteStringToReg(g_szSetupFileName, szSection, "ServerID", m_ServerID);
WriteStringToReg(g_szSetupFileName, szSection, "PingCheck", BOOLToString(m_bPingCheck));
WriteStringToReg(g_szSetupFileName, szSection, "SpeedHackCheck", BOOLToString(m_bHackCheck));
WriteStringToReg(g_szSetupFileName, szSection, "LotteryEvent", BOOLToString(m_bLotteryEvent));
WriteStringToReg(g_szSetupFileName, szSection, "LevelUpEvent", BOOLToString(m_bLevelUpEvent));
WriteStringToReg(g_szSetupFileName, szSection, "DeathPenaltyEvent", BOOLToString(m_bDeathPenaltyEvent));
WriteStringToReg(g_szSetupFileName, szSection, "DBAgentServerAddr", m_DBAgentServerAddress);
WriteStringToReg(g_szSetupFileName, szSection, "LogServerAddr", m_LogServerAddress);
WriteStringToReg(g_szSetupFileName, szSection, "ChatServerAddr", m_ChatServerAddress);
WriteStringToReg(g_szSetupFileName, szSection, "ExpRate", m_ExpRate);
WriteStringToReg(g_szSetupFileName, szSection, "DropRate", m_DropRate);
WriteStringToReg(g_szSetupFileName, szSection, "EquipCorrRate", m_EquipCorrRate);
WriteStringToReg(g_szSetupFileName, szSection, "Fame", m_Fame);
WriteStringToReg(g_szSetupFileName, szSection, "Refine", m_Refine);
WriteStringToReg(g_szSetupFileName, szSection, "Mileage", m_Mileage);
WriteStringToReg(g_szSetupFileName, szSection, "BattleUserLimit", m_BattleLimit);
WriteStringToReg(g_szSetupFileName, szSection, "BattleUserLimitPer", m_BattleLimitPer);
// SetCount: 몇번째로 셋팅한 존 정보인지 저장
_snprintf(szSetCount, MAX_PATH, "%d", m_ctrlZoneCountCb.GetCurSel() + 1);
WriteStringToReg(g_szSetupFileName, szSection, "SetCount", szSetCount);
}
}
BOOL CSetupPage3::OnSetActive()
{
UpdateData(FALSE);
m_bEnabled = TRUE;
return CPropertyPage::OnSetActive();
}
void CSetupPage3::OnCbnSelchangeGroup()
{
UpdateData(TRUE);
SERVER_ID serverID = {0,};
serverID.sID.Type = CServerSetup::GameServer;
serverID.sID.Group = m_Group.GetCurSel();
serverID.sID.ID = m_Zone.GetCurSel();
serverID.sID.Channel = m_Channel.GetCurSel();
m_ServerID.Format("%d", serverID.dwID);
m_ServerIDHex.Format("0x%08X", serverID.dwID);
UpdateData(FALSE);
}
void CSetupPage3::OnCbnSelchangeZone()
{
SERVER_ID serverID = {0,};
serverID.sID.Type = CServerSetup::GameServer;
serverID.sID.Group = m_Group.GetCurSel();
serverID.sID.ID = m_Zone.GetCurSel();
serverID.sID.Channel = m_Channel.GetCurSel();
m_ServerID.Format("%d", serverID.dwID);
m_ServerIDHex.Format("0x%08X", serverID.dwID);
m_strTCPPort.Format("%d", GetZoneTCPPort(serverID.dwID));
m_strP1UDPListen.Format("%d", CServerSetup::GetP1GameServerUDPPort(serverID.dwID));
switch(m_Zone.GetCurSel())
{
case SERVER_ID::ZONE1:
case SERVER_ID::ZONE2:
case SERVER_ID::ZONE4:
case SERVER_ID::ZONE5:
case SERVER_ID::ZONE12:
case SERVER_ID::BATTLE_SERVER:
m_Channel.SetCurSel(0);
m_Channel.EnableWindow(true);
break;
default:
m_Channel.SetCurSel(0);
m_Channel.EnableWindow(false);
break;
}
UpdateData(false);
}
void CSetupPage3::OnCbnSelchangeChannel()
{
UpdateData(true);
SERVER_ID serverID = {0,};
serverID.sID.Type = CServerSetup::GameServer;
serverID.sID.Group = m_Group.GetCurSel();
serverID.sID.ID = m_Zone.GetCurSel();
serverID.sID.Channel = m_Channel.GetCurSel();
m_ServerID.Format ("%d", serverID.dwID);
m_ServerIDHex.Format("0x%08X", serverID.dwID);
m_strTCPPort.Format( "%d", GetZoneTCPPort(serverID.dwID));
m_strP1UDPListen.Format("%d", CServerSetup::GetP1GameServerUDPPort(serverID.dwID));
UpdateData(false);
}
void CSetupPage3::OnBnClickedZoneAdd()
{
if (atoi(m_strZoneCount) == 0) // 존 카운트가 1이되는 순간 활성화 될 항목
{
m_ctrlZoneCountCb.EnableWindow(true);
m_ctrlSaveZoneSetting.EnableWindow(true);
}
// 존 카운트 1 증가
int nCount = atoi(m_strZoneCount);
nCount++;
m_strZoneCount.Format("%d", nCount);
UpdateData(false);
SetZoneCountCombo(m_ctrlZoneCountCb);
}
void CSetupPage3::OnBnClickedZoneDel()
{
if (atoi(m_strZoneCount) == 1) // 존 카운트가 0이되는 순간 비활성화 시킬 항목
{
m_ctrlZoneCountCb.EnableWindow(false);
m_ctrlSaveZoneSetting.EnableWindow(false);
}
// 존 카운트 1 감소
int nCount = atoi(m_strZoneCount);
if (nCount > 0) nCount--;
m_strZoneCount.Format("%d", nCount);
UpdateData(false);
SetZoneCountCombo(m_ctrlZoneCountCb);
}
void CSetupPage3::SetZoneCountCombo(CComboBox& ZoneCountCb)
{
CString strComboString;
int nDeleteCount = ZoneCountCb.GetCount();
int nMaxZoneConut = atoi(m_strZoneCount);
ZoneCountCb.ResetContent();
for(int count = 1; count <= nMaxZoneConut; count++) // 현재 정보로 콤보 다시 셋팅
{
strComboString.Format("zone count %d", count);
ZoneCountCb.InsertString(count - 1 , strComboString);
}
}
void CSetupPage3::OnCbnSelchangeZoneSelection()
{
SetGameServerPage(m_ctrlZoneCountCb.GetCurSel() + 1);
}
void CSetupPage3::OnBnClickedSaveZoneSetting()
{
Save(false);
}

View File

@@ -0,0 +1,81 @@
#pragma once
#include "afxwin.h"
// CSetupPage3 대화 상자입니다.
class CSetupPage3 : public CPropertyPage
{
DECLARE_DYNAMIC(CSetupPage3)
public:
CSetupPage3();
virtual ~CSetupPage3();
// 대화 상자 데이터입니다.
enum { IDD = IDD_PAGE_3 };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
private:
BOOL m_bEnabled;
BOOL m_bBattleServer;
BOOL m_bHackCheck;
BOOL m_bPingCheck;
BOOL m_bLotteryEvent;
BOOL m_bLevelUpEvent;
BOOL m_bDeathPenaltyEvent;
CString m_ServerID;
CString m_ServerIDHex;
CString m_DBAgentServerAddress;
CString m_LogServerAddress;
CString m_ChatServerAddress;
CString m_ExpRate;
CString m_DropRate;
CString m_Fame;
CString m_Refine;
CString m_Mileage;
CString m_BattleLimit;
CString m_BattleLimitPer;
CString m_strZoneCount;
CString m_strTCPPort;
CString m_strP1UDPListen;
CComboBox m_Nation;
CComboBox m_ctrlZoneCountCb;
CComboBox m_Zone;
CComboBox m_Channel;
CComboBox m_Group;
CButton m_ctrlSaveZoneSetting;
afx_msg void OnCbnSelchangeGroup();
afx_msg void OnCbnSelchangeZone();
afx_msg void OnCbnSelchangeChannel();
afx_msg void OnBnClickedZoneAdd();
afx_msg void OnBnClickedZoneDel();
afx_msg void OnCbnSelchangeZoneSelection();
afx_msg void OnBnClickedSaveZoneSetting();
void SetGameServerPage(unsigned int nZoneCount);
void SetZoneCountCombo(CComboBox& ZoneCountCb);
void SetZoneSetupInfo(char* szSection);
public:
void Save(bool bSaveType);
CString m_EquipCorrRate;
};

View File

@@ -0,0 +1,284 @@
// SetupPage4.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "SeverSetupDlg.h"
#include "ServerGroup.h"
#include "SetupPage4.h"
#include <Utility/Setup/ServerSetup.h>
#include <Network/Packet/PacketStruct/ServerInfo.h>
#include ".\setuppage4.h"
// CSetupPage4 대화 상자입니다.
IMPLEMENT_DYNAMIC(CSetupPage4, CPropertyPage)
CSetupPage4::CSetupPage4()
: CPropertyPage(CSetupPage4::IDD)
, m_bEnabled(FALSE)
, m_szDBAgentServerID(_T(""))
, m_szVersion(_T(""))
, m_szCheckSum(_T(""))
, m_szPatchAddress(_T(""))
, m_bPingCheck(FALSE)
, m_bBattleServer(FALSE)
, m_bAdminIPCheck(FALSE)
, m_szLoginServerAddr(_T(""))
, m_szUIDServerAddr(_T(""))
, m_szGameDBInfo(_T(""))
, m_szGameListenPort(_T(""))
, m_szAuthListenPort(_T(""))
, m_szChatListenPort(_T(""))
, m_szAdminToolListenPort(_T(""))
, m_szLimitServerGroupUserNum(_T(""))
, m_szLimitBattleGroundUserNum(_T(""))
, m_szLimitBattleGroundUserPer(_T(""))
, m_szPart1DBAgentAddr(_T(""))
, m_szRestrictedTransLevel(_T(""))
, m_szMaxTransCount(_T(""))
{
}
CSetupPage4::~CSetupPage4()
{
}
void CSetupPage4::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_DBAGENT_SERVER_ID, m_szDBAgentServerID);
DDX_Control(pDX, IDC_DBAGENT_SERVER_GROUP, m_cbDBAgentServerGroup);
DDX_Control(pDX, IDC_DBAGENT_SERVER_TYPE, m_cbDBAgentServerType);
DDX_Control(pDX, IDC_DBAGENT_NATION, m_cbDBAgentServiceNation);
DDX_Control(pDX, IDC_DBAGENT_BILLING_TYPE, m_cbDBAgentBillingType);
DDX_Text(pDX, IDC_DBAGENT_VERSION, m_szVersion);
DDX_Text(pDX, IDC_DBAGENT_CHECKSUM, m_szCheckSum);
DDX_Text(pDX, IDC_DBAGENT_PATCH_ADDR, m_szPatchAddress);
DDX_Check(pDX, IDC_DBAGENT_PING_CHECK, m_bPingCheck);
DDX_Check(pDX, IDC_DBAGENT_BATTLE_SERVER, m_bBattleServer);
DDX_Check(pDX, IDC_DBAGENT_ADMIN_IP_CHECK, m_bAdminIPCheck);
DDX_Text(pDX, IDC_DBAGENT_LOGIN_SERVER_ADDR, m_szLoginServerAddr);
DDX_Text(pDX, IDC_DBAGENT_UID_SERVER_ADDR, m_szUIDServerAddr);
DDX_Text(pDX, IDC_DBAGENT_EDT_DBSETTING, m_szGameDBInfo);
DDX_Text(pDX, IDC_DBAGENT_GAME_LISTEN_PORT, m_szGameListenPort);
DDX_Text(pDX, IDC_DBAGENT_AUTH_LISTEN_PORT, m_szAuthListenPort);
DDX_Text(pDX, IDC_DBAGENT_CHAT_LISTEN_PORT, m_szChatListenPort);
DDX_Text(pDX, IDC_DBAGENT_ADMINTOOL_LISTEN_PORT, m_szAdminToolListenPort);
DDX_Text(pDX, IDC_DBAGENT_LIMIT_SERVER_GROUP_USER_NUM, m_szLimitServerGroupUserNum);
DDX_Text(pDX, IDC_DBAGENT_LIMIT_BATTLEGROUND_USER_NUM, m_szLimitBattleGroundUserNum);
DDX_Text(pDX, IDC_DBAGENT_LIMIT_BATTLEGROUND_USER_PER, m_szLimitBattleGroundUserPer);
DDX_Text(pDX, IDC_DBAGENT_PART1UNI_AGENT_ADDR, m_szPart1DBAgentAddr);
DDX_Text(pDX, IDC_DBAGENT_RESTRICTEDLEVEL_P1TOP2, m_szRestrictedTransLevel);
DDX_Text(pDX, IDC_DBAGENT_MAX_TRANSFER_COUNT, m_szMaxTransCount);
DDX_Control(pDX, IDC_DBAGENT_PART2UNIFIED_SERVER_NUM, m_cbSelectableUnifiedServerNum);
}
BEGIN_MESSAGE_MAP(CSetupPage4, CDialog)
ON_BN_CLICKED(IDC_DBAGENT_BTN_DBSETTING, OnBnClickedDbagentBtnDbsetting)
ON_CBN_SELCHANGE(IDC_DBAGENT_SERVER_GROUP, OnCbnSelchangeDbagentServerGroup)
END_MESSAGE_MAP()
// CSetupPage4 메시지 처리기입니다.
BOOL CSetupPage4::OnInitDialog()
{
CPropertyPage::OnInitDialog();
m_szGameListenPort.Format(_T("%d"), CServerSetup::DBAgentServerGameServerListen);
m_szAuthListenPort.Format(_T("%d"), CServerSetup::DBAgentServerAuthServerListen);
m_szChatListenPort.Format(_T("%d"), CServerSetup::DBAgentServerChatServerListen);
m_szAdminToolListenPort.Format(_T("%d"), CServerSetup::DBAgentAdminToolServerListen);
SetServerGroup(m_cbDBAgentServerGroup);
SetDBAgentServerType(m_cbDBAgentServerType);
SetBillingType(m_cbDBAgentBillingType);
SetGameServerNation(m_cbDBAgentServiceNation);
CString szServerID;
CString szServerType;
CString szBillingType;
CString szNationType;
CString szPingCheck;
CString szAdminIPCheck;
CString szBattleServer;
CString szSelectableUnifiedServerNum;
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("ServerID"), szServerID);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("ServerType"), szServerType);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("BillingType"), szBillingType);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("NationType"), szNationType);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("ClientVersion"), m_szVersion);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("PatchAddress"), m_szPatchAddress);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("LoginServerAddr"), m_szLoginServerAddr);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("UIDServerAddr"), m_szUIDServerAddr);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("CheckSum"), m_szCheckSum);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("LimitServerGroupUserNum"), m_szLimitServerGroupUserNum);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("LimitBattleUser"), m_szLimitBattleGroundUserNum);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("LimitBattleUserPer"), m_szLimitBattleGroundUserPer);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("PingCheck"), szPingCheck);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("AdminIPCheck"), szAdminIPCheck);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("BattleServer"), szBattleServer);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("GameDBType"), m_GameDB.m_szDBData[DBSetting::DB_TYPE]);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("GameDBAddr"), m_GameDB.m_szDBData[DBSetting::DB_ADDR]);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("GameDBName"), m_GameDB.m_szDBData[DBSetting::DB_NAME]);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("GameDBUser"), m_GameDB.m_szDBData[DBSetting::DB_USER]);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("GameDBPass"), m_GameDB.m_szDBData[DBSetting::DB_PASS]);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("Part1UnifiedAgentAddr"), m_szPart1DBAgentAddr);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("RestrictedPart1ToPart2Level"), m_szRestrictedTransLevel);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("MaxTransferCharNum"), m_szMaxTransCount);
ReadStringFromReg(g_szSetupFileName, _T("DBAgentServer"), _T("Part2SelectableUnifiedServerNum"), szSelectableUnifiedServerNum);
int nCount = 0;
CString nNum;
for(nCount = 0; nCount < UnifiedConst::Part1; ++nCount)
{
nNum.Format("%d", nCount);
m_cbSelectableUnifiedServerNum.InsertString(nCount, nNum);
}
m_cbSelectableUnifiedServerNum.SetCurSel(atol(szSelectableUnifiedServerNum));
SERVER_ID serverID = { 0, };
serverID.dwID = atol(szServerID);
m_szDBAgentServerID.Format("0x%08x", serverID.dwID);
m_cbDBAgentServerGroup.SetCurSel(serverID.GetGroup());
m_cbDBAgentBillingType.SetCurSel(atol(szBillingType));
m_cbDBAgentServiceNation.SetCurSel(atol(szNationType));
int nAgentServerType = atoi(szServerType);
int nMaxCount = m_cbDBAgentServerType.GetCount();
for(nCount = 0; nCount < nMaxCount; ++nCount)
{
if(m_cbDBAgentServerType.GetItemData(nCount) == nAgentServerType)
{
m_cbDBAgentServerType.SetCurSel(nCount);
break;
}
}
if(nCount == nMaxCount)
{
m_cbDBAgentServerType.SetCurSel(0);
}
m_bPingCheck = (1 == atol(szPingCheck));
m_bAdminIPCheck = (1 == atol(szAdminIPCheck));
m_bBattleServer = (1 == atol(szBattleServer));
CDBSetting::CreateDBInfoString(m_GameDB, m_szGameDBInfo);
UpdateData(FALSE);
UpdateServerID();
return TRUE;
}
void CSetupPage4::Save(void)
{
if(m_bEnabled)
{
UpdateData(TRUE);
CString szServerID;
CString szServerType;
CString szBillingType;
CString szNationType;
CString szSelectableUnifiedServerNum;
SERVER_ID serverID = {0,};
serverID.sID.ID = 0;
serverID.sID.Channel = 0;
serverID.sID.Type = CServerSetup::AgentServer;
serverID.sID.Group = m_cbDBAgentServerGroup.GetCurSel();
szServerID.Format(_T("%d"), serverID.dwID);
szBillingType.Format(_T("%d"), m_cbDBAgentBillingType.GetCurSel());
szNationType.Format(_T("%d"), m_cbDBAgentServiceNation.GetCurSel());
szSelectableUnifiedServerNum.Format(_T("%d"), m_cbSelectableUnifiedServerNum.GetCurSel());
szServerType.Format(_T("%d"),
m_cbDBAgentServerType.GetItemData(m_cbDBAgentServerType.GetCurSel()));
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("ServerID"), szServerID);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("ServerType"), szServerType);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("BillingType"), szBillingType);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("NationType"), szNationType);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("ClientVersion"), m_szVersion);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("PatchAddress"), m_szPatchAddress);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("LoginServerAddr"), m_szLoginServerAddr);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("UIDServerAddr"), m_szUIDServerAddr);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("CheckSum"), m_szCheckSum);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("LimitServerGroupUserNum"), m_szLimitServerGroupUserNum);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("LimitBattleUser"), m_szLimitBattleGroundUserNum);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("LimitBattleUserPer"), m_szLimitBattleGroundUserPer);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("PingCheck"), BOOLToString(m_bPingCheck));
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("AdminIPCheck"), BOOLToString(m_bAdminIPCheck));
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("BattleServer"), BOOLToString(m_bBattleServer));
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("GameDBType"), m_GameDB.m_szDBData[DBSetting::DB_TYPE]);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("GameDBAddr"), m_GameDB.m_szDBData[DBSetting::DB_ADDR]);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("GameDBName"), m_GameDB.m_szDBData[DBSetting::DB_NAME]);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("GameDBUser"), m_GameDB.m_szDBData[DBSetting::DB_USER]);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("GameDBPass"), m_GameDB.m_szDBData[DBSetting::DB_PASS]);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("Part1UnifiedAgentAddr"), m_szPart1DBAgentAddr);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("RestrictedPart1ToPart2Level"), m_szRestrictedTransLevel);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("MaxTransferCharNum"), m_szMaxTransCount);
WriteStringToReg(g_szSetupFileName, _T("DBAgentServer"), _T("Part2SelectableUnifiedServerNum"), szSelectableUnifiedServerNum);
}
}
BOOL CSetupPage4::OnSetActive()
{
// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
UpdateData(FALSE);
m_bEnabled = TRUE;
return CPropertyPage::OnSetActive();
}
void CSetupPage4::UpdateServerID()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData(TRUE);
SERVER_ID serverID = {0,};
serverID.sID.ID = 0;
serverID.sID.Channel = 0;
serverID.sID.Type = CServerSetup::AgentServer;
serverID.sID.Group = m_cbDBAgentServerGroup.GetCurSel();
m_szDBAgentServerID.Format(_T("0x%08x"), serverID.dwID);
UpdateData(FALSE);
}
void CSetupPage4::OnBnClickedDbagentBtnDbsetting()
{
UpdateData(TRUE);
if (CDBSetting::CreateDBSettingDlg(
_T("GameDB DBSetting"),
_T("* GameDB DBSetting \r\n"),
m_GameDB, m_szGameDBInfo))
{
UpdateData(FALSE);
}
}
void CSetupPage4::OnCbnSelchangeDbagentServerGroup()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateServerID();
}

View File

@@ -0,0 +1,70 @@
#pragma once
#include "afxwin.h"
#include "DBSetting.h"
// CSetupPage4 대화 상자입니다.
class CSetupPage4 : public CPropertyPage
{
DECLARE_DYNAMIC(CSetupPage4)
public:
CSetupPage4();
virtual ~CSetupPage4();
// 대화 상자 데이터입니다.
enum { IDD = IDD_PAGE_4 };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
public:
void Save(void);
private:
virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
void UpdateServerID();
afx_msg void OnBnClickedDbagentBtnDbsetting();
afx_msg void OnCbnSelchangeDbagentServerGroup();
BOOL m_bEnabled;
BOOL m_bPingCheck;
BOOL m_bBattleServer;
BOOL m_bAdminIPCheck;
CComboBox m_cbDBAgentServerGroup;
CComboBox m_cbDBAgentServerType;
CComboBox m_cbDBAgentServiceNation;
CComboBox m_cbDBAgentBillingType;
CComboBox m_cbSelectableUnifiedServerNum;
CString m_szGameListenPort;
CString m_szAuthListenPort;
CString m_szChatListenPort;
CString m_szAdminToolListenPort;
CString m_szDBAgentServerID;
CString m_szVersion;
CString m_szCheckSum;
CString m_szPatchAddress;
CString m_szLoginServerAddr;
CString m_szUIDServerAddr;
CString m_szGameDBInfo;
CString m_szLimitServerGroupUserNum;
CString m_szLimitBattleGroundUserNum;
CString m_szLimitBattleGroundUserPer;
CString m_szPart1DBAgentAddr;
CString m_szRestrictedTransLevel;
CString m_szMaxTransCount;
DBSetting m_GameDB;
};

View File

@@ -0,0 +1,183 @@
// SetupPage5.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "SeverSetupDlg.h"
#include "SetupPage5.h"
#include "ServerGroup.h"
#include "DBSetting.h"
#include <Utility/Setup/ServerSetup.h>
// CSetupPage5 대화 상자입니다.
IMPLEMENT_DYNAMIC(CSetupPage5, CPropertyPage)
CSetupPage5::CSetupPage5()
: CPropertyPage(CSetupPage5::IDD)
, m_bEnabled(FALSE)
, m_bFreeCheck(FALSE)
, m_bIgnoreFlag(FALSE)
, m_HanUnitedBillingAddr(_T(""))
, m_HanUnitedBillingPort(_T(""))
, m_szDBSettingStatus(_T(""))
, m_GammaniaServerCode(_T(""))
, m_GammaniaRegin(_T(""))
, m_GammaniaAddr(_T(""))
, m_GammaniaPort1(_T(""))
, m_GammaniaPort2(_T(""))
{
for (int nIndex = 0; nIndex < DBSetting::MAX_DBDATA; ++nIndex)
{
m_BillingDB.m_szDBData[nIndex].SetString(_T(""));
}
}
CSetupPage5::~CSetupPage5()
{
}
void CSetupPage5::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Check(pDX, IDC_UID_FREE_CHECK, m_bFreeCheck);
DDX_Check(pDX, IDC_UID_IGNORE_FLAG, m_bIgnoreFlag);
DDX_Control(pDX, IDC_UID_BILLING_TYPE, m_BillingType);
DDX_Text(pDX, IDC_UID_HAN_UNITED_BILLING_ADDR, m_HanUnitedBillingAddr);
DDV_MaxChars(pDX, m_HanUnitedBillingAddr, 16);
DDX_Text(pDX, IDC_UID_HAN_UNITED_BILLING_PORT, m_HanUnitedBillingPort);
DDV_MaxChars(pDX, m_HanUnitedBillingPort, 5);
DDX_Text(pDX, IDC_UID_EDT_DBSETTING, m_szDBSettingStatus);
DDX_Text(pDX, IDC_UID_SERVER_CODE, m_GammaniaServerCode);
DDV_MaxChars(pDX, m_GammaniaServerCode, 6);
DDX_Text(pDX, IDC_UID_REGIN, m_GammaniaRegin);
DDV_MaxChars(pDX, m_GammaniaRegin, 2);
DDX_Text(pDX, IDC_UID_ADDRESS, m_GammaniaAddr);
DDV_MaxChars(pDX, m_GammaniaAddr, 32);
DDX_Text(pDX, IDC_UID_PORT1, m_GammaniaPort1);
DDV_MaxChars(pDX, m_GammaniaPort1, 5);
DDX_Text(pDX, IDC_UID_PORT2, m_GammaniaPort2);
DDV_MaxChars(pDX, m_GammaniaPort2, 5);
}
BEGIN_MESSAGE_MAP(CSetupPage5, CDialog)
ON_WM_ACTIVATE()
ON_BN_CLICKED(IDC_UID_BTN_DBSETTING, OnBnClickedUidBtnDbsetting)
END_MESSAGE_MAP()
// CSetupPage5 메시지 처리기입니다.
void CSetupPage5::Save(void)
{
if(m_bEnabled)
{
UpdateData(TRUE);
char szBuffer[64];
// 과금관련 세팅
WriteStringToReg(g_szSetupFileName, _T("UIDServer"), _T("FreeCheck"), BOOLToString(m_bFreeCheck));
WriteStringToReg(g_szSetupFileName, _T("UIDServer"), _T("IgnoreFlag"), BOOLToString(m_bIgnoreFlag));
WriteStringToReg(g_szSetupFileName, _T("UIDServer"), _T("BillingType"), itoa(m_BillingType.GetCurSel(), szBuffer, 10));
// 한게임 통합빌링 관련 세팅
WriteStringToReg(g_szSetupFileName, _T("UIDServer"), _T("HanUnitedBillingAddr"), m_HanUnitedBillingAddr);
WriteStringToReg(g_szSetupFileName, _T("UIDServer"), _T("HanUnitedBillingPort"), m_HanUnitedBillingPort);
// 감마니아 통합인증 관련 셋팅
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("GammaniaServerCode"), m_GammaniaServerCode);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("GammaniaRegin"), m_GammaniaRegin);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("GammaniaAddr"), m_GammaniaAddr);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("GammaniaPort1"), m_GammaniaPort1);
WriteStringToReg(g_szSetupFileName, _T("AuthServer"), _T("GammaniaPort2"), m_GammaniaPort2);
// 감마니아 통합인증 관련 셋팅
WriteStringToReg(g_szSetupFileName, _T("UIDServer"), _T("GammaniaServerCode"), m_GammaniaServerCode);
WriteStringToReg(g_szSetupFileName, _T("UIDServer"), _T("GammaniaRegin"), m_GammaniaRegin);
WriteStringToReg(g_szSetupFileName, _T("UIDServer"), _T("GammaniaAddr"), m_GammaniaAddr);
WriteStringToReg(g_szSetupFileName, _T("UIDServer"), _T("GammaniaPort1"), m_GammaniaPort1);
WriteStringToReg(g_szSetupFileName, _T("UIDServer"), _T("GammaniaPort2"), m_GammaniaPort2);
// 과금 DB관련 정보
WriteStringToReg(g_szSetupFileName, _T("UIDServer"), _T("BillingDBType"), m_BillingDB.m_szDBData[DBSetting::DB_TYPE]);
WriteStringToReg(g_szSetupFileName, _T("UIDServer"), _T("BillingDBAddr"), m_BillingDB.m_szDBData[DBSetting::DB_ADDR]);
WriteStringToReg(g_szSetupFileName, _T("UIDServer"), _T("BillingDBName"), m_BillingDB.m_szDBData[DBSetting::DB_NAME]);
WriteStringToReg(g_szSetupFileName, _T("UIDServer"), _T("BillingDBUser"), m_BillingDB.m_szDBData[DBSetting::DB_USER]);
WriteStringToReg(g_szSetupFileName, _T("UIDServer"), _T("BillingDBPass"), m_BillingDB.m_szDBData[DBSetting::DB_PASS]);
}
}
BOOL CSetupPage5::OnSetActive()
{
UpdateData(FALSE);
m_bEnabled = TRUE;
return CPropertyPage::OnSetActive();
}
BOOL CSetupPage5::OnInitDialog()
{
CPropertyPage::OnInitDialog();
SetBillingType(m_BillingType);
CString szFreeCheck;
CString szIgnoreFlag;
CString szBillingType;
ReadStringFromReg(g_szSetupFileName, _T("UIDServer"), _T("FreeCheck"), szFreeCheck);
ReadStringFromReg(g_szSetupFileName, _T("UIDServer"), _T("IgnoreFlag"), szIgnoreFlag);
ReadStringFromReg(g_szSetupFileName, _T("UIDServer"), _T("BillingType"), szBillingType);
ReadStringFromReg(g_szSetupFileName, _T("UIDServer"), _T("HanUnitedBillingAddr"), m_HanUnitedBillingAddr);
ReadStringFromReg(g_szSetupFileName, _T("UIDServer"), _T("HanUnitedBillingPort"), m_HanUnitedBillingPort);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("GammaniaServerCode"), m_GammaniaServerCode);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("GammaniaRegin"), m_GammaniaRegin);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("GammaniaAddr"), m_GammaniaAddr);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("GammaniaPort1"), m_GammaniaPort1);
ReadStringFromReg(g_szSetupFileName, _T("AuthServer"), _T("GammaniaPort2"), m_GammaniaPort2);
/*
ReadStringFromReg(g_szSetupFileName, _T("UIDServer"), _T("GammaniaServerCode"), m_GammaniaServerCode);
ReadStringFromReg(g_szSetupFileName, _T("UIDServer"), _T("GammaniaRegin"), m_GammaniaRegin);
ReadStringFromReg(g_szSetupFileName, _T("UIDServer"), _T("GammaniaAddr"), m_GammaniaAddr);
ReadStringFromReg(g_szSetupFileName, _T("UIDServer"), _T("GammaniaPort1"), m_GammaniaPort1);
ReadStringFromReg(g_szSetupFileName, _T("UIDServer"), _T("GammaniaPort2"), m_GammaniaPort2);
*/
ReadStringFromReg(g_szSetupFileName, _T("UIDServer"), _T("BillingDBType"), m_BillingDB.m_szDBData[DBSetting::DB_TYPE]);
ReadStringFromReg(g_szSetupFileName, _T("UIDServer"), _T("BillingDBAddr"), m_BillingDB.m_szDBData[DBSetting::DB_ADDR]);
ReadStringFromReg(g_szSetupFileName, _T("UIDServer"), _T("BillingDBName"), m_BillingDB.m_szDBData[DBSetting::DB_NAME]);
ReadStringFromReg(g_szSetupFileName, _T("UIDServer"), _T("BillingDBUser"), m_BillingDB.m_szDBData[DBSetting::DB_USER]);
ReadStringFromReg(g_szSetupFileName, _T("UIDServer"), _T("BillingDBPass"), m_BillingDB.m_szDBData[DBSetting::DB_PASS]);
m_BillingType.SetCurSel(atoi(szBillingType));
m_bFreeCheck = atoi(szFreeCheck);
m_bIgnoreFlag = atoi(szIgnoreFlag);
m_szDBSettingStatus.SetString(_T("* UIDServer DBSetting \r\n"));
CDBSetting::CreateDBInfoString(m_BillingDB, m_szDBSettingStatus);
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CSetupPage5::OnBnClickedUidBtnDbsetting()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData(TRUE);
if (CDBSetting::CreateDBSettingDlg(
_T("Keeper DBSetting"),
_T("* Keeper DBSetting \r\n"),
m_BillingDB, m_szDBSettingStatus))
{
UpdateData(FALSE);
}
}

View File

@@ -0,0 +1,52 @@
#pragma once
#include "afxwin.h"
// CSetupPage5 대화 상자입니다.
#include "DBSetting.h"
class CSetupPage5 : public CPropertyPage
{
DECLARE_DYNAMIC(CSetupPage5)
public:
CSetupPage5();
virtual ~CSetupPage5();
// 대화 상자 데이터입니다.
enum { IDD = IDD_PAGE_5 };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
public:
void Save(void);
virtual BOOL OnSetActive();
virtual BOOL OnInitDialog();
private:
afx_msg void OnBnClickedUidBtnDbsetting();
BOOL m_bEnabled;
BOOL m_bFreeCheck;
BOOL m_bIgnoreFlag;
CComboBox m_BillingType;
CString m_HanUnitedBillingAddr;
CString m_HanUnitedBillingPort;
CString m_szDBSettingStatus;
DBSetting m_BillingDB;
CString m_GammaniaServerCode;
CString m_GammaniaRegin;
CString m_GammaniaAddr;
CString m_GammaniaPort1;
CString m_GammaniaPort2;
};

View File

@@ -0,0 +1,219 @@
// SetupPage6.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "SeverSetupDlg.h"
#include "SetupPage6.h"
#include "ServerGroup.h"
#include <Utility/Setup/ServerSetup.h>
#include <Network/Packet/PacketStruct/ServerInfo.h>
#include ".\setuppage6.h"
// CSetupPage6 대화 상자입니다.
IMPLEMENT_DYNAMIC(CSetupPage6, CPropertyPage)
CSetupPage6::CSetupPage6()
: CPropertyPage(CSetupPage6::IDD)
, m_bEnabled(FALSE)
, m_szLogOtherServerListenPort(_T(""))
, m_szLogClientListenPort(_T(""))
, m_szLogDBInfo(_T(""))
, m_szChatServerID(_T(""))
, m_szChatGameServerListenPort(_T(""))
, m_szChatMonitoringToolListenPort(_T(""))
, m_bChatPingCheck(FALSE)
, m_szChatDBAgentServerAddr(_T(""))
, m_szAdminToolDBInfo(_T(""))
, m_bUserIPCheck(FALSE)
{
}
CSetupPage6::~CSetupPage6()
{
}
void CSetupPage6::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
DDX_Text(pDX, IDC_LOG_OTHER_SERVER_PORT, m_szLogOtherServerListenPort);
DDX_Text(pDX, IDC_LOG_CLIENT_PORT, m_szLogClientListenPort);
DDX_Text(pDX, IDC_LOG_EDT_DBSETTING, m_szLogDBInfo);
DDX_Text(pDX, IDC_CHAT_SERVER_ID, m_szChatServerID);
DDX_Text(pDX, IDC_CHAT_GAME_SERVER_TCPPORT, m_szChatGameServerListenPort);
DDX_Text(pDX, IDC_CHAT_MONITORING_TOOL_TCP_PORT, m_szChatMonitoringToolListenPort);
DDX_Check(pDX, IDC_CHAT_PING_CHECK, m_bChatPingCheck);
DDX_Check(pDX, IDC_CHAT_USERIP_CHECK, m_bUserIPCheck);
DDX_Control(pDX, IDC_CHAT_SERVER_GROUP, m_cbChatServerGroup);
DDX_Control(pDX, IDC_CHAT_SERVER_CHANNEL, m_cbChatServerChannel);
DDX_Text(pDX, IDC_CHAT_DBAGENT_SERVER_ADDR, m_szChatDBAgentServerAddr);
DDX_Text(pDX, IDC_CHAT_EDT_DBSETTING, m_szAdminToolDBInfo);
}
BEGIN_MESSAGE_MAP(CSetupPage6, CPropertyPage)
ON_WM_ACTIVATE()
ON_BN_CLICKED(IDC_LOG_BTN_DBSETTING, OnBnClickedLogBtnDbsetting)
ON_BN_CLICKED(IDC_CHAT_BTN_DBSETTING, OnBnClickedChatBtnDbsetting)
ON_CBN_SELCHANGE(IDC_CHAT_SERVER_GROUP, OnCbnSelchangeChatServerGroup)
ON_CBN_SELCHANGE(IDC_CHAT_SERVER_CHANNEL, OnCbnSelchangeChatServerChannel)
END_MESSAGE_MAP()
// CSetupPage6 메시지 처리기입니다.
BOOL CSetupPage6::OnInitDialog()
{
CPropertyPage::OnInitDialog();
m_szLogOtherServerListenPort.Format(_T("%d"), CServerSetup::LogServerOtherServerListen);
m_szLogClientListenPort.Format(_T("%d"), CServerSetup::LogServerLogClientListen);
m_szChatGameServerListenPort.Format(_T("%d"), CServerSetup::ChatServerGameServerListen);
m_szChatMonitoringToolListenPort.Format(_T("%d"), CServerSetup::ChatServerMonitoringToolListen);
SetServerGroup(m_cbChatServerGroup);
SetServerChannel(m_cbChatServerChannel);
ReadStringFromReg(g_szSetupFileName, _T("LogServer"), _T("LogDBType"), m_LogDB.m_szDBData[DBSetting::DB_TYPE]);
ReadStringFromReg(g_szSetupFileName, _T("LogServer"), _T("LogDBAddr"), m_LogDB.m_szDBData[DBSetting::DB_ADDR]);
ReadStringFromReg(g_szSetupFileName, _T("LogServer"), _T("LogDBName"), m_LogDB.m_szDBData[DBSetting::DB_NAME]);
ReadStringFromReg(g_szSetupFileName, _T("LogServer"), _T("LogDBUser"), m_LogDB.m_szDBData[DBSetting::DB_USER]);
ReadStringFromReg(g_szSetupFileName, _T("LogServer"), _T("LogDBPass"), m_LogDB.m_szDBData[DBSetting::DB_PASS]);
CString szChatPingCheck, szUserIPCheck;
ReadStringFromReg(g_szSetupFileName, _T("ChatServer"), _T("ServerID"), m_szChatServerID);
ReadStringFromReg(g_szSetupFileName, _T("ChatServer"), _T("PingCheck"), szChatPingCheck);
ReadStringFromReg(g_szSetupFileName, _T("ChatServer"), _T("UserIPCheck"), szUserIPCheck);
ReadStringFromReg(g_szSetupFileName, _T("ChatServer"), _T("DBAgentAddress"), m_szChatDBAgentServerAddr);
ReadStringFromReg(g_szSetupFileName, _T("ChatServer"), _T("AdminToolDBType"), m_AdminToolDB.m_szDBData[DBSetting::DB_TYPE]);
ReadStringFromReg(g_szSetupFileName, _T("ChatServer"), _T("AdminToolDBAddr"), m_AdminToolDB.m_szDBData[DBSetting::DB_ADDR]);
ReadStringFromReg(g_szSetupFileName, _T("ChatServer"), _T("AdminToolDBName"), m_AdminToolDB.m_szDBData[DBSetting::DB_NAME]);
ReadStringFromReg(g_szSetupFileName, _T("ChatServer"), _T("AdminToolDBUser"), m_AdminToolDB.m_szDBData[DBSetting::DB_USER]);
ReadStringFromReg(g_szSetupFileName, _T("ChatServer"), _T("AdminToolDBPass"), m_AdminToolDB.m_szDBData[DBSetting::DB_PASS]);
SERVER_ID serverID = { 0, };
serverID.dwID = atol(m_szChatServerID);
m_cbChatServerGroup.SetCurSel(serverID.sID.Group);
m_cbChatServerChannel.SetCurSel(serverID.sID.Channel);
m_bChatPingCheck = (1 == atoi(szChatPingCheck));
m_bUserIPCheck = (1 == atoi(szUserIPCheck));
m_szLogDBInfo.SetString(_T("* LogServer DBSetting \r\n"));
CDBSetting::CreateDBInfoString(m_LogDB, m_szLogDBInfo);
m_szAdminToolDBInfo.SetString(_T("* AdminToolDBSetting (For chatting ban) \r\n"));
CDBSetting::CreateDBInfoString(m_AdminToolDB, m_szAdminToolDBInfo);
UpdateData(FALSE);
UpdateServerID();
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CSetupPage6::Save()
{
if(m_bEnabled)
{
UpdateData(TRUE);
WriteStringToReg(g_szSetupFileName, _T("LogServer"), _T("LogDBType"), m_LogDB.m_szDBData[DBSetting::DB_TYPE]);
WriteStringToReg(g_szSetupFileName, _T("LogServer"), _T("LogDBAddr"), m_LogDB.m_szDBData[DBSetting::DB_ADDR]);
WriteStringToReg(g_szSetupFileName, _T("LogServer"), _T("LogDBName"), m_LogDB.m_szDBData[DBSetting::DB_NAME]);
WriteStringToReg(g_szSetupFileName, _T("LogServer"), _T("LogDBUser"), m_LogDB.m_szDBData[DBSetting::DB_USER]);
WriteStringToReg(g_szSetupFileName, _T("LogServer"), _T("LogDBPass"), m_LogDB.m_szDBData[DBSetting::DB_PASS]);
SERVER_ID serverID = {0,};
serverID.sID.Type = CServerSetup::ChatServer;
serverID.sID.Group = m_cbChatServerGroup.GetCurSel();
serverID.sID.Channel = m_cbChatServerChannel.GetCurSel();
CString szChatServerID;
CString szChatPingCheck;
CString szUserIPCheck;
szChatServerID.Format(_T("%d"), serverID.dwID);
szChatPingCheck.Format(_T("%s"), BOOLToString(m_bChatPingCheck));
szUserIPCheck.Format(_T("%s"), BOOLToString(m_bUserIPCheck));
WriteStringToReg(g_szSetupFileName, _T("ChatServer"), _T("ServerID"), szChatServerID);
WriteStringToReg(g_szSetupFileName, _T("ChatServer"), _T("PingCheck"), szChatPingCheck);
WriteStringToReg(g_szSetupFileName, _T("ChatServer"), _T("UserIPCheck"), szUserIPCheck);
WriteStringToReg(g_szSetupFileName, _T("ChatServer"), _T("DBAgentAddress"), m_szChatDBAgentServerAddr);
WriteStringToReg(g_szSetupFileName, _T("ChatServer"), _T("AdminToolDBType"), m_AdminToolDB.m_szDBData[DBSetting::DB_TYPE]);
WriteStringToReg(g_szSetupFileName, _T("ChatServer"), _T("AdminToolDBAddr"), m_AdminToolDB.m_szDBData[DBSetting::DB_ADDR]);
WriteStringToReg(g_szSetupFileName, _T("ChatServer"), _T("AdminToolDBName"), m_AdminToolDB.m_szDBData[DBSetting::DB_NAME]);
WriteStringToReg(g_szSetupFileName, _T("ChatServer"), _T("AdminToolDBUser"), m_AdminToolDB.m_szDBData[DBSetting::DB_USER]);
WriteStringToReg(g_szSetupFileName, _T("ChatServer"), _T("AdminToolDBPass"), m_AdminToolDB.m_szDBData[DBSetting::DB_PASS]);
}
}
BOOL CSetupPage6::OnSetActive()
{
UpdateData(FALSE);
m_bEnabled = TRUE;
return CPropertyPage::OnSetActive();
}
void CSetupPage6::UpdateServerID()
{
UpdateData(TRUE);
SERVER_ID serverID = {0,};
serverID.sID.ID = 0;
serverID.sID.Type = CServerSetup::ChatServer;
serverID.sID.Group = m_cbChatServerGroup.GetCurSel();
serverID.sID.Channel = m_cbChatServerChannel.GetCurSel();
m_szChatServerID.Format("0x%08x", serverID.dwID);
UpdateData(FALSE);
}
void CSetupPage6::OnBnClickedLogBtnDbsetting()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData(TRUE);
if (CDBSetting::CreateDBSettingDlg(
_T("LogServer DBSetting"),
_T("* LogServer DBSetting \r\n"),
m_LogDB, m_szLogDBInfo))
{
UpdateData(FALSE);
}
}
void CSetupPage6::OnBnClickedChatBtnDbsetting()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData(TRUE);
if (CDBSetting::CreateDBSettingDlg(
_T("AdminTool (For chatting ban) DBSetting"),
_T("* AdminToolDBSetting (For chatting ban) \r\n"),
m_AdminToolDB, m_szAdminToolDBInfo))
{
UpdateData(FALSE);
}
}
void CSetupPage6::OnCbnSelchangeChatServerGroup()
{
UpdateServerID();
}
void CSetupPage6::OnCbnSelchangeChatServerChannel()
{
UpdateServerID();
}

View File

@@ -0,0 +1,58 @@
#pragma once
#include "afxwin.h"
#include "DBSetting.h"
// CSetupPage6 대화 상자입니다.
class CSetupPage6 : public CPropertyPage
{
DECLARE_DYNAMIC(CSetupPage6)
public:
CSetupPage6();
virtual ~CSetupPage6();
// 대화 상자 데이터입니다.
enum { IDD = IDD_PAGE_6 };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
virtual BOOL OnInitDialog();
virtual BOOL OnSetActive();
DECLARE_MESSAGE_MAP()
public:
void Save();
private:
void UpdateServerID();
afx_msg void OnBnClickedLogBtnDbsetting();
afx_msg void OnBnClickedChatBtnDbsetting();
afx_msg void OnCbnSelchangeChatServerGroup();
afx_msg void OnCbnSelchangeChatServerChannel();
BOOL m_bEnabled;
BOOL m_bChatPingCheck;
BOOL m_bUserIPCheck;
CString m_szLogOtherServerListenPort;
CString m_szLogClientListenPort;
CString m_szLogDBInfo;
CComboBox m_cbChatServerGroup;
CComboBox m_cbChatServerChannel;
CString m_szChatGameServerListenPort;
CString m_szChatMonitoringToolListenPort;
CString m_szChatServerID;
CString m_szChatDBAgentServerAddr;
CString m_szAdminToolDBInfo;
DBSetting m_LogDB;
DBSetting m_AdminToolDB;
};

View File

@@ -0,0 +1,94 @@
// SetupSheet.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "SeverSetupDlg.h"
#include "SetupSheet.h"
#include ".\setupsheet.h"
// CSetupSheet
IMPLEMENT_DYNAMIC(CSetupSheet, CPropertySheet)
CSetupSheet::CSetupSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
AddPage(&m_Page1);
AddPage(&m_Page2);
AddPage(&m_Page3);
AddPage(&m_Page4);
AddPage(&m_Page5);
AddPage(&m_Page6);
}
CSetupSheet::CSetupSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
AddPage(&m_Page1);
AddPage(&m_Page2);
AddPage(&m_Page3);
AddPage(&m_Page4);
AddPage(&m_Page5);
AddPage(&m_Page6);
}
CSetupSheet::~CSetupSheet()
{
m_Menu.Detach();
}
BEGIN_MESSAGE_MAP(CSetupSheet, CPropertySheet)
ON_COMMAND(ID_SAVE, OnSave)
ON_WM_CREATE()
END_MESSAGE_MAP()
// CSetupSheet 메시지 처리기입니다.
BOOL CSetupSheet::OnInitDialog()
{
BOOL bResult = CPropertySheet::OnInitDialog();
// 매뉴
m_Menu.LoadMenu(IDR_MENU);
SetMenu(&m_Menu);
// 버튼 없앰
GetDlgItem(IDOK)->ShowWindow(FALSE);
GetDlgItem(IDCANCEL)->ShowWindow(FALSE);
GetDlgItem(IDHELP)->ShowWindow(FALSE);
GetDlgItem(ID_APPLY_NOW)->ShowWindow(FALSE);
SetActivePage(&m_Page1);
SetActivePage(&m_Page2);
SetActivePage(&m_Page3);
SetActivePage(&m_Page4);
SetActivePage(&m_Page5);
SetActivePage(&m_Page6);
SetActivePage(&m_Page1);
return bResult;
}
void CSetupSheet::OnSave()
{
UpdateData(TRUE);
m_Page1.Save();
m_Page2.Save();
m_Page3.Save(true);
m_Page4.Save();
m_Page5.Save();
m_Page6.Save();
}
int CSetupSheet::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if(CPropertySheet::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 여기에 특수화된 작성 코드를 추가합니다.
return 0;
}

View File

@@ -0,0 +1,37 @@
#pragma once
#include "SetupPage1.h"
#include "SetupPage2.h"
#include "SetupPage3.h"
#include "SetupPage4.h"
#include "SetupPage5.h"
#include "SetupPage6.h"
// CSetupSheet
class CSetupSheet : public CPropertySheet
{
DECLARE_DYNAMIC(CSetupSheet)
CMenu m_Menu;
CSetupPage1 m_Page1;
CSetupPage2 m_Page2;
CSetupPage3 m_Page3;
CSetupPage4 m_Page4;
CSetupPage5 m_Page5;
CSetupPage6 m_Page6;
public:
CSetupSheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
CSetupSheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0);
virtual ~CSetupSheet();
virtual BOOL OnInitDialog();
afx_msg void OnSave();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
protected:
DECLARE_MESSAGE_MAP()
};

Binary file not shown.

View File

@@ -0,0 +1,72 @@
// SeverSetupDlg.cpp : 응용 프로그램에 대한 클래스 동작을 정의합니다.
//
#include "stdafx.h"
#include "SeverSetupDlg.h"
#include "SetupSheet.h"
#include <Log/ServerLog.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
const TCHAR g_szSetupFileName[] = _T("DemonSetup.ini");
// CSeverSetupDlgApp
BEGIN_MESSAGE_MAP(CSeverSetupDlgApp, CWinApp)
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
// CSeverSetupDlgApp 생성
CSeverSetupDlgApp::CSeverSetupDlgApp()
{
// TODO: 여기에 생성 코드를 추가합니다.
// InitInstance에 모든 중요한 초기화 작업을 배치합니다.
}
// 유일한 CSeverSetupDlgApp 개체입니다.
CSeverSetupDlgApp theApp;
// CSeverSetupDlgApp 초기화
BOOL CSeverSetupDlgApp::InitInstance()
{
// 응용 프로그램 매니페스트가 ComCtl32.dll 버전 6 이상을 사용하여 비주얼 스타일을
// 사용하도록 지정하는 경우, Windows XP 상에서 반드시 InitCommonControls()가 필요합니다.
// InitCommonControls()를 사용하지 않으면 창을 만들 수 없습니다.
InitCommonControls();
CWinApp::InitInstance();
// AfxEnableControlContainer();
g_Log.Disable(0xFFFFFFFF);
g_SessionLog.Disable(0xFFFFFFFF);
CSetupSheet Sheetdlg("ROW Server Config");
m_pMainWnd = &Sheetdlg;
INT_PTR nResponse = Sheetdlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 여기에 대화 상자가 확인을 눌러 없어지는 경우 처리할
// 코드를 배치합니다.
}
else if (nResponse == IDCANCEL)
{
// TODO: 여기에 대화 상자가 취소를 눌러 없어지는 경우 처리할
// 코드를 배치합니다.
}
// 대화 상자가 닫혔으므로 응용 프로그램의 메시지 펌프를 시작하지 않고
// 응용 프로그램을 끝낼 수 있도록 FALSE를 반환합니다.
return FALSE;
}

View File

@@ -0,0 +1,32 @@
// SeverSetupDlg.h : PROJECT_NAME 응용 프로그램에 대한 주 헤더 파일입니다.
//
#pragma once
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#include "resource.h" // 주 기호
extern const TCHAR g_szSetupFileName[];
// CSeverSetupDlgApp:
// 이 클래스의 구현에 대해서는 SeverSetupDlg.cpp을 참조하십시오.
//
class CSeverSetupDlgApp : public CWinApp
{
public:
CSeverSetupDlgApp();
// 재정의
public:
virtual BOOL InitInstance();
// 구현
DECLARE_MESSAGE_MAP()
};
extern CSeverSetupDlgApp theApp;

View File

@@ -0,0 +1,686 @@
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// 한국어 resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)
#ifdef _WIN32
LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
#pragma code_page(949)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE
BEGIN
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
"#define _AFX_NO_OLE_RESOURCES\r\n"
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
"\r\n"
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)\r\n"
"LANGUAGE 18, 1\r\n"
"#pragma code_page(949)\r\n"
"#include ""res\\SeverSetupDlg.rc2"" // Microsoft Visual C++에서 편집되지 않은 리소스\r\n"
"#include ""afxres.rc"" // 표준 구성 요소\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME ICON "res\\SeverSetupDlg.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_PAGE_1 DIALOGEX 0, 0, 272, 119
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "Login Server"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
CONTROL "Ping Check",IDC_LOGIN_PING_CHECK,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,17,62,51,10
CONTROL "Alone Mode",IDC_LOGIN_ALONE_MODE,"Button",
BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED |
WS_TABSTOP,74,63,53,10
EDITTEXT IDC_LOGIN_PATCH_VER,84,78,92,12,ES_AUTOHSCROLL |
ES_NUMBER | NOT WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_LOGIN_PATCH_ADDR,84,92,175,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
CTEXT "Server ID",IDC_STATIC,13,17,52,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
LTEXT "",IDC_LOGIN_SERVER_ID,66,17,106,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Least Patch Version",IDC_STATIC,13,78,69,12,
SS_CENTERIMAGE,WS_EX_STATICEDGE
CTEXT "Patch Address",IDC_STATIC,13,92,69,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT IDC_LOGIN_LISTEN_LAUNCHER_PORT,124,31,48,12,
ES_AUTOHSCROLL | ES_READONLY
EDITTEXT IDC_LOGIN_LISTEN_DBAGENT_PORT,124,45,48,12,
ES_AUTOHSCROLL | ES_READONLY
CTEXT "Listen Port (For Launcher)",IDC_STATIC,13,31,110,12,
SS_CENTERIMAGE,WS_EX_STATICEDGE
CTEXT "Listen Port (For DBAgentServer)",IDC_STATIC,13,45,110,
12,SS_CENTERIMAGE,WS_EX_STATICEDGE
GROUPBOX "Login Server",IDC_STATIC,6,3,259,107,BS_FLAT
END
IDD_PAGE_2 DIALOGEX 0, 0, 247, 238
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "Auth"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
CONTROL "Ping Check",IDC_AUTH_PING_CHECK,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,12,75,51,10
CONTROL "Check Korean (Language)",IDC_AUTH_HAN_CHECK,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,12,88,99,10
EDITTEXT IDC_AUTH_DBAGENT_ADDR,92,59,113,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
COMBOBOX IDC_AUTH_SERVER_TYPE,60,33,86,92,CBS_DROPDOWNLIST |
CBS_SORT | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_AUTH_SERVER_GROUP,60,45,86,101,CBS_DROPDOWNLIST |
CBS_SORT | WS_VSCROLL | WS_TABSTOP
CTEXT "Server ID",IDC_STATIC,7,7,52,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
LTEXT "",IDC_AUTH_SERVER_ID,60,7,92,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Server Type",IDC_STATIC,7,33,52,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "DBAgentServer Address",IDC_STATIC,7,59,83,12,
SS_CENTERIMAGE,WS_EX_STATICEDGE
CTEXT "Server Group",IDC_STATIC,7,45,52,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT IDC_AUTH_CLIENT_LISTEN_PORT,95,20,57,12,ES_AUTOHSCROLL |
ES_READONLY
CTEXT "Listen Port (from Client)",IDC_STATIC,7,20,87,12,
SS_CENTERIMAGE,WS_EX_STATICEDGE
CONTROL "BattleServer(Hangame Only)",IDC_AUTH_BATTLESERVER,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,118,101,108,10
CONTROL "Supress CharCreate",IDC_AUTH_SUPRESS_CHARCREATE,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,118,75,81,10
CONTROL "Is Test Group",IDC_AUTH_TEST_GROUP,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,12,101,59,10
CONTROL "Supress CharDelete",IDC_AUTH_SUPRESS_CHARDELETE,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,118,88,79,10
PUSHBUTTON "AuthDBSetting",IDC_AUTH_BTN_DBSETTING,170,116,70,55
EDITTEXT IDC_AUTH_EDT_DBSETTING,12,116,154,55,ES_MULTILINE |
ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,
WS_EX_STATICEDGE
PUSHBUTTON "AdminToolDBSetting",IDC_AUTH_BLOCK_BTN_DBSETTING,170,
175,70,55
EDITTEXT IDC_AUTH_BLOCK_EDT_DBSETTING,12,175,154,55,ES_MULTILINE |
ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,
WS_EX_STATICEDGE
END
IDD_PAGE_3 DIALOGEX 0, 0, 352, 276
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "Game Server"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
COMBOBOX IDC_NATION_SELECTION,76,21,72,91,CBS_DROPDOWNLIST |
CBS_SORT | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_ZONE_SELECTION,87,48,71,86,CBS_DROPDOWNLIST |
CBS_SORT | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Save Zone Setting",IDC_SAVE_ZONE_SETING,161,48,101,12,
BS_FLAT
COMBOBOX IDC_GROUP,87,82,97,92,CBS_DROPDOWNLIST | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_ZONE,87,95,97,92,CBS_DROPDOWNLIST | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_CHANNEL,87,108,97,92,CBS_DROPDOWNLIST | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
CONTROL "Ping Check",IDC_PINGCHECK,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,27,136,51,10
CONTROL "Check Speed Hack",IDC_HACKCHECK,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,27,145,75,10
CONTROL "Lottery Event",IDC_LOTTERY,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,153,145,60,10
CONTROL "LevelUp GoldBox Event",IDC_LEVELUP,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,153,135,90,10
EDITTEXT IDC_AGENTADDR,93,187,81,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_LOGSERVERADDR,93,201,81,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_CHATSERVERADDR,254,187,81,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_EXP,72,220,38,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
EDITTEXT IDC_DROP,183,220,38,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
EDITTEXT IDC_FAME,72,235,38,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
EDITTEXT IDC_MILEAGE,293,220,38,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
EDITTEXT IDC_BATTLELIMIT,183,249,38,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
LTEXT "",IDC_SERVERID,71,65,92,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
LTEXT "",IDC_SERVERID_HEX,165,65,82,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT IDC_ZONE_COUNT,76,7,71,12,ES_CENTER | ES_AUTOHSCROLL |
ES_READONLY
PUSHBUTTON "Add",IDC_ZONE_ADD,150,7,38,12
PUSHBUTTON "Delete",IDC_ZONE_DEL,190,7,38,12
CTEXT "Drop Rate",IDC_STATIC,115,220,65,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT IDC_ZONE_TCPPORT,189,87,44,14,ES_RIGHT | ES_AUTOHSCROLL |
ES_READONLY
CTEXT "DB Agent Address",IDC_STATIC,18,186,74,12,
SS_CENTERIMAGE,WS_EX_STATICEDGE
CTEXT "LogServer Address",IDC_STATIC,18,201,74,12,
SS_CENTERIMAGE | SS_SUNKEN
CTEXT "ChatServer Address",IDC_STATIC,178,187,74,12,
SS_CENTERIMAGE | SS_SUNKEN
CTEXT "Exp Rate",IDC_STATIC,18,220,52,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Server ID",IDC_STATIC,17,65,52,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Server Zone",IDC_STATIC,17,95,68,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Server Channel",IDC_STATIC,17,108,68,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Server Group",IDC_STATIC,17,82,68,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Limit User Number",IDC_STATIC,115,250,65,12,
SS_CENTERIMAGE,WS_EX_STATICEDGE
CTEXT "Zone Count",IDC_STATIC,7,7,67,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
GROUPBOX "",IDC_STATIC,7,37,338,233,BS_FLAT
CTEXT "Current Selection",IDC_STATIC,17,48,67,12,
SS_CENTERIMAGE,WS_EX_STATICEDGE
LTEXT "Listen Port (for Client)",IDC_STATIC,190,79,72,8
CONTROL "Is BattleServer Group",IDC_GAMEBATTLESERVER,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,151,23,85,10
CTEXT "Nation",IDC_STATIC,7,21,67,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
GROUPBOX "Event On/Off",IDC_STATIC,143,125,193,54
GROUPBOX "Check Trouble",IDC_STATIC,17,125,122,54
CTEXT "Fame",IDC_STATIC,18,235,52,12,0,WS_EX_STATICEDGE
CTEXT "Mileage",IDC_STATIC,226,220,65,12,0,WS_EX_STATICEDGE
CONTROL "Death Penalty Event",IDC_DEATHPENALTY,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,153,155,82,10
EDITTEXT IDC_ZONE_UDPPORT,189,108,44,14,ES_RIGHT | ES_AUTOHSCROLL |
ES_READONLY
LTEXT "Listen Port (for Part 1 UDP)",IDC_STATIC,190,100,88,8
EDITTEXT IDC_REFINE,72,250,38,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
CTEXT "Refine",IDC_STATIC,18,250,52,12,0,WS_EX_STATICEDGE
EDITTEXT IDC_BATTLELIMITPER,183,235,38,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
CTEXT "Limit User Per",IDC_STATIC,115,235,65,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CONTROL "Event1 (Empty)",IDC_EVENT1,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,153,165,66,10
CONTROL "Event2 (Empty)",IDC_EVENT2,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,244,135,66,10
CONTROL "Event3 (Empty)",IDC_EVENT3,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,244,145,66,10
CONTROL "Event4 (Empty)",IDC_EVENT4,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,244,155,66,10
CONTROL "Event5 (Empty)",IDC_EVENT5,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,244,165,66,10
EDITTEXT IDC_EQUIPCORR,293,235,38,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
CTEXT "Equip Corr Rate",IDC_STATIC,226,235,65,12,
SS_CENTERIMAGE,WS_EX_STATICEDGE
END
IDD_PAGE_4 DIALOGEX 0, 0, 350, 257
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "DBAgent Server"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
COMBOBOX IDC_DBAGENT_SERVER_TYPE,73,34,77,79,CBS_DROPDOWNLIST |
CBS_SORT | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_DBAGENT_NATION,218,20,77,79,CBS_DROPDOWNLIST |
CBS_SORT | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_DBAGENT_SERVER_GROUP,73,20,77,92,CBS_DROPDOWNLIST |
CBS_SORT | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_DBAGENT_BILLING_TYPE,218,33,77,166,CBS_DROPDOWNLIST |
CBS_SORT | WS_VSCROLL | WS_TABSTOP
EDITTEXT IDC_DBAGENT_VERSION,60,48,46,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_DBAGENT_CHECKSUM,154,48,68,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_DBAGENT_PATCH_ADDR,60,61,162,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_DBAGENT_LOGIN_SERVER_ADDR,80,76,83,12,ES_AUTOHSCROLL |
NOT WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_DBAGENT_UID_SERVER_ADDR,80,89,83,12,ES_AUTOHSCROLL |
NOT WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_DBAGENT_LIMIT_SERVER_GROUP_USER_NUM,87,176,44,12,
ES_AUTOHSCROLL | NOT WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_DBAGENT_LIMIT_BATTLEGROUND_USER_NUM,87,190,44,12,
ES_AUTOHSCROLL | NOT WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_DBAGENT_PART1UNI_AGENT_ADDR,259,177,75,12,
ES_AUTOHSCROLL | NOT WS_VISIBLE | NOT WS_BORDER,
WS_EX_STATICEDGE
COMBOBOX IDC_DBAGENT_PART2UNIFIED_SERVER_NUM,256,232,80,91,
CBS_DROPDOWNLIST | CBS_SORT | NOT WS_VISIBLE |
WS_VSCROLL | WS_TABSTOP
CONTROL "BattleServer",IDC_DBAGENT_BATTLE_SERVER,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,236,65,56,10
CONTROL "Ping Check",IDC_DBAGENT_PING_CHECK,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,236,55,51,10
CONTROL "Check GameMaster IP",IDC_DBAGENT_ADMIN_IP_CHECK,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,236,76,86,10
LTEXT "",IDC_DBAGENT_SERVER_ID,74,8,77,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "LoginServer Address",IDC_STATIC,7,76,72,12,
SS_CENTERIMAGE,WS_EX_STATICEDGE
CTEXT "UIDServer Address",IDC_STATIC,7,89,72,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Check Sum",IDC_STATIC,107,48,46,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Server Group",IDC_STATIC,14,176,70,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Version",IDC_STATIC,7,48,52,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Patch Address",IDC_STATIC,8,61,52,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Server Group",IDC_STATIC,7,21,65,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT IDC_DBAGENT_GAME_LISTEN_PORT,295,105,42,12,
ES_AUTOHSCROLL | ES_READONLY
CTEXT "BillingType",IDC_STATIC,152,33,65,12,SS_CENTERIMAGE |
SS_SUNKEN
CTEXT "Server Type",IDC_STATIC,7,34,65,12,SS_CENTERIMAGE |
SS_SUNKEN
GROUPBOX "[ PartI Connection Info(Part2 Unified Type Only) ]",
IDC_STATIC,170,166,173,56,NOT WS_VISIBLE
CTEXT "Part1 Agent IP",IDC_STATIC,179,177,80,12,NOT WS_VISIBLE,
WS_EX_STATICEDGE
CTEXT "Nation",IDC_STATIC,152,20,65,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
GROUPBOX "[ Part2 Selectable Type Only ]",IDC_STATIC,169,223,174,
27,NOT WS_VISIBLE
CTEXT "UnifiedServerNum",IDC_STATIC,180,233,72,12,
SS_CENTERIMAGE | SS_SUNKEN | NOT WS_VISIBLE
EDITTEXT IDC_DBAGENT_RESTRICTEDLEVEL_P1TOP2,259,191,75,12,
ES_AUTOHSCROLL | NOT WS_VISIBLE | NOT WS_BORDER,
WS_EX_STATICEDGE
CTEXT "RestrictedLevelP1ToP2",IDC_STATIC,179,191,80,12,NOT
WS_VISIBLE,WS_EX_STATICEDGE
CTEXT "MaxCharTransferCount",IDC_STATIC,179,204,80,12,NOT
WS_VISIBLE,WS_EX_STATICEDGE
EDITTEXT IDC_DBAGENT_MAX_TRANSFER_COUNT,259,204,75,12,
ES_AUTOHSCROLL | NOT WS_VISIBLE | NOT WS_BORDER,
WS_EX_STATICEDGE
CTEXT "DBAgentServer ID",IDC_STATIC,7,8,65,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "GameServer",IDC_STATIC,236,105,57,12,SS_CENTERIMAGE |
SS_SUNKEN
CTEXT "AuthServer",IDC_STATIC,236,118,57,12,SS_CENTERIMAGE |
SS_SUNKEN
CTEXT "ChatServer",IDC_STATIC,236,129,57,12,SS_CENTERIMAGE |
SS_SUNKEN
CTEXT "AdminToolServer",IDC_STATIC,236,143,57,12,
SS_CENTERIMAGE | SS_SUNKEN
EDITTEXT IDC_DBAGENT_AUTH_LISTEN_PORT,295,117,42,12,
ES_AUTOHSCROLL | ES_READONLY
EDITTEXT IDC_DBAGENT_CHAT_LISTEN_PORT,295,129,42,12,
ES_AUTOHSCROLL | ES_READONLY
EDITTEXT IDC_DBAGENT_ADMINTOOL_LISTEN_PORT,295,143,42,12,
ES_AUTOHSCROLL | ES_READONLY
PUSHBUTTON "GameDBSetting",IDC_DBAGENT_BTN_DBSETTING,153,104,70,55
EDITTEXT IDC_DBAGENT_EDT_DBSETTING,7,104,144,55,ES_MULTILINE |
ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,
WS_EX_STATICEDGE
CTEXT "BattleGround",IDC_STATIC,14,190,70,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
GROUPBOX "Listen Ports",IDC_STATIC,230,94,112,67
GROUPBOX "Limit User Number",IDC_STATIC,7,166,130,55
EDITTEXT IDC_DBAGENT_LIMIT_BATTLEGROUND_USER_PER,87,204,44,12,
ES_AUTOHSCROLL | NOT WS_BORDER,WS_EX_STATICEDGE
CTEXT "BattleUserPer",IDC_STATIC,14,204,70,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
END
IDD_PAGE_5 DIALOGEX 0, 0, 246, 262
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "UID Server"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
CONTROL "Free Mode",IDC_UID_FREE_CHECK,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,22,34,50,10
CONTROL "Ignore Flag",IDC_UID_IGNORE_FLAG,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,74,34,53,10
COMBOBOX IDC_UID_BILLING_TYPE,73,48,93,92,CBS_DROPDOWNLIST |
CBS_SORT | WS_VSCROLL | WS_TABSTOP
CTEXT "Server ID",IDC_STATIC,20,18,52,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
LTEXT "",IDC_UID_SERVER_ID,74,18,92,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Billing Type",IDC_STATIC,20,48,52,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
GROUPBOX "UID Server",IDC_STATIC,7,7,232,248,BS_FLAT
CTEXT "HanUnitedBillingAddress",IDC_STATIC,20,65,81,12,
SS_CENTERIMAGE | SS_SUNKEN
EDITTEXT IDC_UID_HAN_UNITED_BILLING_ADDR,102,65,78,12,
ES_AUTOHSCROLL | NOT WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_UID_HAN_UNITED_BILLING_PORT,180,65,50,12,
ES_AUTOHSCROLL | NOT WS_BORDER,WS_EX_STATICEDGE
PUSHBUTTON "KeeperDBSetting",IDC_UID_BTN_DBSETTING,164,81,65,55
EDITTEXT IDC_UID_EDT_DBSETTING,20,81,140,55,ES_MULTILINE |
ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,
WS_EX_STATICEDGE
CTEXT "ServerCode",IDC_STATIC,41,152,81,12,SS_CENTERIMAGE |
SS_SUNKEN
EDITTEXT IDC_UID_SERVER_CODE,123,152,78,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
GROUPBOX "Gammania Auth Info",IDC_STATIC,16,140,213,88
CTEXT "Regin",IDC_STATIC,41,166,81,12,SS_CENTERIMAGE |
SS_SUNKEN
EDITTEXT IDC_UID_REGIN,123,166,78,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
CTEXT "Auth Address",IDC_STATIC,41,181,81,12,SS_CENTERIMAGE |
SS_SUNKEN
EDITTEXT IDC_UID_ADDRESS,123,181,78,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
CTEXT "LoginPort",IDC_STATIC,41,196,81,12,SS_CENTERIMAGE |
SS_SUNKEN
EDITTEXT IDC_UID_PORT1,123,196,78,12,ES_AUTOHSCROLL | ES_NUMBER |
NOT WS_BORDER,WS_EX_STATICEDGE
CTEXT "LogoutPort",IDC_STATIC,41,211,81,12,SS_CENTERIMAGE |
SS_SUNKEN
EDITTEXT IDC_UID_PORT2,123,211,78,12,ES_AUTOHSCROLL | ES_NUMBER |
NOT WS_BORDER,WS_EX_STATICEDGE
END
IDD_PAGE_6 DIALOGEX 0, 0, 254, 302
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "Log and Chat"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
COMBOBOX IDC_CHAT_SERVER_GROUP,84,185,80,92,CBS_DROPDOWNLIST |
CBS_SORT | WS_VSCROLL | WS_TABSTOP
COMBOBOX IDC_CHAT_SERVER_CHANNEL,84,198,80,92,CBS_DROPDOWNLIST |
CBS_SORT | WS_VSCROLL | WS_TABSTOP
EDITTEXT IDC_CHAT_DBAGENT_SERVER_ADDR,106,213,123,12,
ES_AUTOHSCROLL | NOT WS_BORDER,WS_EX_STATICEDGE
GROUPBOX "Log Server (not yet implemented)",IDC_STATIC,7,7,240,
103,BS_FLAT
GROUPBOX "Chat Server",IDC_STATIC,7,114,240,180,BS_FLAT
CTEXT "Server Group",IDC_STATIC,19,185,63,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Server Channel",IDC_STATIC,19,198,63,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "DBAgentServer Address",IDC_STATIC,19,213,85,12,
SS_CENTERIMAGE,WS_EX_STATICEDGE
CTEXT "Server ID",IDC_STATIC,19,127,63,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT IDC_CHAT_SERVER_ID,84,127,90,12,ES_AUTOHSCROLL |
ES_READONLY
CONTROL "Ping Check",IDC_CHAT_PING_CHECK,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,22,171,51,10
EDITTEXT IDC_CHAT_GAME_SERVER_TCPPORT,130,140,45,12,
ES_AUTOHSCROLL | ES_READONLY
CTEXT "Listen Port (For GameServer)",IDC_STATIC,19,140,109,12,
SS_CENTERIMAGE,WS_EX_STATICEDGE
EDITTEXT IDC_LOG_OTHER_SERVER_PORT,123,18,47,12,ES_AUTOHSCROLL |
ES_READONLY
PUSHBUTTON "LogDBSetting",IDC_LOG_BTN_DBSETTING,176,47,65,55
EDITTEXT IDC_LOG_EDT_DBSETTING,18,47,154,55,ES_MULTILINE |
ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,
WS_EX_STATICEDGE
PUSHBUTTON "AdminToolDBSetting",IDC_CHAT_BTN_DBSETTING,163,229,76,
55
EDITTEXT IDC_CHAT_EDT_DBSETTING,19,229,140,55,ES_MULTILINE |
ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,
WS_EX_STATICEDGE
EDITTEXT IDC_LOG_CLIENT_PORT,123,32,48,12,ES_AUTOHSCROLL |
ES_READONLY
CTEXT "Listen Port (For Other Server)",IDC_STATIC,18,18,103,12,
SS_CENTERIMAGE,WS_EX_STATICEDGE
CTEXT "Listen Port (For Log Client)",IDC_STATIC,18,32,103,12,
SS_CENTERIMAGE,WS_EX_STATICEDGE
EDITTEXT IDC_CHAT_MONITORING_TOOL_TCP_PORT,130,154,45,12,
ES_AUTOHSCROLL | ES_READONLY
CTEXT "Listen Port (For MonitoringTool)",IDC_STATIC,19,154,109,
12,SS_CENTERIMAGE,WS_EX_STATICEDGE
CONTROL "Check MonitoringTool User's IP",IDC_CHAT_USERIP_CHECK,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,81,171,116,10
END
IDD_DBINFO DIALOGEX 0, 0, 192, 121
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "DBInfo"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "확인",IDOK,70,100,50,14
PUSHBUTTON "취소",IDCANCEL,124,100,50,14
EDITTEXT IDC_DB_ADDR,89,40,78,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
EDITTEXT IDC_DB_NAME,89,53,78,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
EDITTEXT IDC_DB_USER,89,66,78,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
EDITTEXT IDC_DB_PASS,89,78,78,12,ES_PASSWORD | ES_AUTOHSCROLL |
NOT WS_BORDER,WS_EX_STATICEDGE
CTEXT "DB Address",IDC_DB_ADDR_LABEL,15,40,73,12,
SS_CENTERIMAGE,WS_EX_STATICEDGE
CTEXT "DB User",IDC_STATIC,15,66,73,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "DB Password",IDC_STATIC,15,79,73,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "DB Name",IDC_DB_NAME_LABLE,15,53,73,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
GROUPBOX "Database Info",IDC_STATIC,9,13,168,84
COMBOBOX IDC_DB_TYPE,89,27,78,124,CBS_DROPDOWNLIST | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
CTEXT "DB Type",IDC_STATIC,15,27,73,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT IDC_DB_NONE,89,7,78,12,ES_AUTOHSCROLL | NOT WS_VISIBLE |
NOT WS_BORDER,WS_EX_STATICEDGE
END
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "041203b5"
BEGIN
VALUE "CompanyName", "TODO: <회사 이름>"
VALUE "FileDescription", "TODO: <파일 설명>"
VALUE "FileVersion", "1.0.0.1"
VALUE "InternalName", "SeverSetupDlg.exe"
VALUE "LegalCopyright", "TODO: (c) <회사 이름>. All rights reserved."
VALUE "OriginalFilename", "SeverSetupDlg.exe"
VALUE "ProductName", "TODO: <제품 이름>"
VALUE "ProductVersion", "1.0.0.1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x412, 949
END
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_PAGE_1, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 265
TOPMARGIN, 7
BOTTOMMARGIN, 112
END
IDD_PAGE_2, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 240
TOPMARGIN, 7
BOTTOMMARGIN, 231
END
IDD_PAGE_3, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 345
TOPMARGIN, 7
BOTTOMMARGIN, 269
END
IDD_PAGE_4, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 343
TOPMARGIN, 7
BOTTOMMARGIN, 250
END
IDD_PAGE_5, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 239
TOPMARGIN, 7
BOTTOMMARGIN, 255
END
IDD_PAGE_6, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 247
TOPMARGIN, 7
BOTTOMMARGIN, 295
END
IDD_DBINFO, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 185
TOPMARGIN, 7
BOTTOMMARGIN, 114
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// RT_MANIFEST
//
IDR_MANIFEST RT_MANIFEST "res\\SeverSetupDlg.manifest"
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_MENU MENU
BEGIN
POPUP "Menu (&M)"
BEGIN
MENUITEM "Save Config (&S)", ID_SAVE
END
END
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDS_ABOUTBOX "SeverSetupDlg 정보(&A)..."
END
#endif // 한국어 resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_KOR)
LANGUAGE 18, 1
#pragma code_page(949)
#include "res\SeverSetupDlg.rc2" // Microsoft Visual C++에서 편집되지 않은 리소스
#include "afxres.rc" // 표준 구성 요소
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@@ -0,0 +1,253 @@
<?xml version="1.0" encoding="ks_c_5601-1987"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="SeverSetupDlg"
ProjectGUID="{45E35F1A-C466-42AE-9C6E-3D5AF9F16CC5}"
Keyword="MFCProj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="../DBToolExecutable/$(ConfigurationName)"
IntermediateDirectory="../Intermediate/$(ProjectName)/$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="1"
UseOfATL="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="./;../;../../RylServerProject/RylServerLibrary;../../RylServerProject/BaseLibrary"
PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
MinimalRebuild="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
TreatWChar_tAsBuiltInType="TRUE"
UsePrecompiledHeader="2"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
LinkIncremental="2"
GenerateDebugInformation="TRUE"
SubSystem="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="FALSE"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1033"
AdditionalIncludeDirectories="$(IntDir)"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="../DBToolExecutable/$(ConfigurationName)"
IntermediateDirectory="../Intermediate/$(ProjectName)/$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="1"
UseOfATL="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
OmitFramePointers="TRUE"
AdditionalIncludeDirectories="./;../;../../RylServerProject/RylServerLibrary;../../RylServerProject/BaseLibrary"
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
StringPooling="TRUE"
MinimalRebuild="FALSE"
RuntimeLibrary="0"
EnableFunctionLevelLinking="TRUE"
TreatWChar_tAsBuiltInType="TRUE"
UsePrecompiledHeader="2"
WarningLevel="3"
Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
IgnoreDefaultLibraryNames=""
GenerateDebugInformation="TRUE"
SubSystem="2"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="FALSE"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1033"
AdditionalIncludeDirectories="$(IntDir)"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Pages"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
<File
RelativePath=".\DBSetting.cpp">
</File>
<File
RelativePath=".\DBSetting.h">
</File>
<File
RelativePath="SetupPage1.cpp">
</File>
<File
RelativePath="SetupPage1.h">
</File>
<File
RelativePath="SetupPage2.cpp">
</File>
<File
RelativePath="SetupPage2.h">
</File>
<File
RelativePath="SetupPage3.cpp">
</File>
<File
RelativePath="SetupPage3.h">
</File>
<File
RelativePath="SetupPage4.cpp">
</File>
<File
RelativePath="SetupPage4.h">
</File>
<File
RelativePath="SetupPage5.cpp">
</File>
<File
RelativePath="SetupPage5.h">
</File>
<File
RelativePath="SetupPage6.cpp">
</File>
<File
RelativePath="SetupPage6.h">
</File>
<File
RelativePath="SetupSheet.cpp">
</File>
<File
RelativePath="SetupSheet.h">
</File>
</Filter>
<Filter
Name="¸®¼Ò½º ÆÄÀÏ"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;jpg;jpeg;jpe;manifest">
<File
RelativePath="res\SeverSetupDlg.ico">
</File>
<File
RelativePath="res\SeverSetupDlg.manifest">
</File>
<File
RelativePath="SeverSetupDlg.rc">
</File>
<File
RelativePath="res\SeverSetupDlg.rc2">
</File>
</Filter>
<Filter
Name="Misc"
Filter="">
<File
RelativePath="Misc\INIFunctions.cpp">
</File>
<File
RelativePath="Misc\INIFunctions.h">
</File>
</Filter>
<File
RelativePath="ReadMe.txt">
</File>
<File
RelativePath="Resource.h">
</File>
<File
RelativePath="ServerGroup.cpp">
</File>
<File
RelativePath="ServerGroup.h">
</File>
<File
RelativePath="SeverSetupDlg.cpp">
</File>
<File
RelativePath="SeverSetupDlg.h">
</File>
<File
RelativePath="stdafx.cpp">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"/>
</FileConfiguration>
</File>
<File
RelativePath="stdafx.h">
</File>
</Files>
<Globals>
<Global
Name="RESOURCE_FILE"
Value="SeverSetupDlg.rc"/>
</Globals>
</VisualStudioProject>

View File

@@ -0,0 +1,46 @@
///////////////////////////////////////////////////////////////////////////////////////////////
//
// ¼³Á¤ ÆÄÀÏ ÇÔ¼ö
//
///////////////////////////////////////////////////////////////////////////////////////////////
#include "../stdafx.h"
#include "INIFunctions.h"
bool WriteStringToReg(const TCHAR *FileName_In, const TCHAR *Section_In,
const TCHAR *KeyName_In, const TCHAR *Value_In)
{
return 0 != WritePrivateProfileString(Section_In, KeyName_In, Value_In, FileName_In);
}
bool ReadStringFromReg(const TCHAR *FileName_In, const TCHAR *Section_In,
const TCHAR *KeyName_In, TCHAR *Value_Out, int nMaxBuffer)
{
return (0 <= GetPrivateProfileString(Section_In, KeyName_In, "", Value_Out, nMaxBuffer, FileName_In));
}
bool ReadStringFromReg(const TCHAR *FileName_In, const TCHAR *Section_In,
const TCHAR *KeyName_In, CString& Value_Out, int nMaxBuffer)
{
TCHAR* szBuffer =
reinterpret_cast<TCHAR*>(_alloca(nMaxBuffer * sizeof(TCHAR)));
if (0 <= GetPrivateProfileString(Section_In, KeyName_In, "", szBuffer, nMaxBuffer, FileName_In))
{
Value_Out.SetString(szBuffer);
return true;
}
return false;
}
bool WriteStructToReg(const TCHAR *FileName_In, const TCHAR *Section_In,
const TCHAR *KeyName_In, void *Value_In, int Size_in)
{
return 0 != WritePrivateProfileStruct(Section_In, KeyName_In, Value_In, Size_in, FileName_In);
}
bool ReadStructFromReg(const TCHAR *FileName_In, const TCHAR *Section_In,
const TCHAR *KeyName_In, void *Value_Out, int Size_in)
{
return 0 != GetPrivateProfileStruct(Section_In, KeyName_In, Value_Out, Size_in, FileName_In);
}

View File

@@ -0,0 +1,30 @@
///////////////////////////////////////////////////////////////////////////////////////////////
//
// ¼³Á¤ ÆÄÀÏ ÇÔ¼ö
//
///////////////////////////////////////////////////////////////////////////////////////////////
#ifndef _RYL_SERVER_SETUP_INIFunc
#define _RYL_SERVER_SETUP_INIFunc
#include <atlstr.h>
#include <windows.h>
#include <tchar.h>
inline const TCHAR* BOOLToString(BOOL bValue) { return bValue ? _T("1") : _T("0"); }
bool WriteStringToReg(const TCHAR *FileName_In, const TCHAR *Section_In,
const TCHAR *KeyName_In, const TCHAR *Value_In);
bool ReadStringFromReg(const TCHAR *FileName_In, const TCHAR *Section_In,
const TCHAR *KeyName_In, TCHAR *Value_Out, int nMaxBuffer);
bool ReadStringFromReg(const TCHAR *FileName_In, const TCHAR *Section_In,
const TCHAR *KeyName_In, CString& Value_Out, int nMaxBuffer = 512);
bool WriteStructToReg(const TCHAR *FileName_In, const TCHAR *Section_In,
const TCHAR *KeyName_In, void *Value_In, int Size_in);
bool ReadStructFromReg(const TCHAR *FileName_In, const TCHAR *Section_In,
const TCHAR *KeyName_In, void *Value_Out, int Size_in);
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="Microsoft.Windows.SeverSetupDlg"
type="win32"
/>
<description>여기에 응용 프로그램 설명을 추가합니다.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>

View File

@@ -0,0 +1,13 @@
//
// SeverSetupDlg.RC2 - resources Microsoft Visual C++에서 직접 편집하지 않는 리소스
//
#ifdef APSTUDIO_INVOKED
#error this file is not editable by Microsoft Visual C++
#endif //APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// 여기에 수동으로 편집한 리소스를 추가합니다....
/////////////////////////////////////////////////////////////////////////////

View File

@@ -0,0 +1,151 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by SeverSetupDlg.rc
//
#define IDR_MANIFEST 1
#define IDS_ABOUTBOX 101
#define IDR_MAINFRAME 127
#define IDD_PAGE_1 129
#define IDD_PAGE_2 130
#define IDR_MENU 131
#define ID_SAVE 132
#define IDD_PAGE_3 133
#define IDD_PAGE_4 134
#define IDD_PAGE_5 135
#define IDD_PAGE_6 136
#define IDD_DBINFO 137
#define IDC_SERVERID 1000
#define IDC_LOGIN_PATCH_VER 1001
#define IDC_SERVERID_HEX 1002
#define IDC_DBAGENT_PATCH_ADDR 1003
#define IDC_AUTH_SERVER_TYPE 1004
#define IDC_AUTH_HAN_CHECK 1006
#define IDC_AGENTADDR 1010
#define IDC_HACKCHECK 1012
#define IDC_EXP 1014
#define IDC_DROP 1016
#define IDC_ZONE 1017
#define IDC_CHANNEL 1018
#define IDC_DBAGENT_LOGIN_SERVER_ADDR 1019
#define IDC_DROP2 1019
#define IDC_EQUIPCORR 1019
#define IDC_GROUP 1020
#define IDC_DBAGENT_PART1UNI_AGENT_ADDR 1020
#define IDC_DBAGENT_UID_SERVER_ADDR 1021
#define IDC_DBAGENT_VERSION 1022
#define IDC_PINGCHECK 1023
#define IDC_DBAGENT_RESTRICTEDLEVEL_P1TOP2 1023
#define IDC_DBAGENT_SERVER_GROUP 1024
#define IDC_LOGIN_ALONE_MODE 1025
#define IDC_DBAGENT_MAX_TRANSFER_COUNT 1025
#define IDC_DBAGENT_CHECKSUM 1030
#define IDC_DBAGENT_LIMIT_SERVER_GROUP_USER_NUM 1031
#define IDC_DBAGENT_PING_CHECK 1032
#define IDC_DBAGENT_ADMIN_IP_CHECK 1033
#define IDC_UID_FREE_CHECK 1034
#define IDC_UID_IGNORE_FLAG 1035
#define IDC_LOGSERVERADDR 1042
#define IDC_DBAGENT_PART2UNIFIED_SERVER_NUM 1042
#define IDC_CHAT_SERVER_GROUP 1043
#define IDC_AUTH_SERVER_GROUP 1044
#define IDC_CHATSERVERADDR 1045
#define IDC_CHAT_SERVER_CHANNEL 1046
#define IDC_CHAT_DBAGENT_SERVER_ADDR 1047
#define IDC_CHAT_SERVER_ID 1048
#define IDC_LOTTERY 1049
#define IDC_BATTLELIMIT 1050
#define IDC_CHAT_GAME_SERVER_TCPPORT 1051
#define IDC_BATTLELIMITPER 1051
#define IDC_UID_HAN_UNITED_BILLING_ADDR 1052
#define IDC_LOG_OTHER_SERVER_PORT 1053
#define IDC_UID_SERVER_CODE 1053
#define IDC_UID_HAN_UNITED_BILLING_PORT 1054
#define IDC_LOG_CLIENT_PORT 1054
#define IDC_CHAT_PING_CHECK 1055
#define IDC_UID_REGIN 1055
#define IDC_ZONE_TCPPORT 1056
#define IDC_CHAT_MONITORING_TOOL_TCP_PORT 1056
#define IDC_UID_ADDRESS 1056
#define IDC_ZONE_SELECTION 1057
#define IDC_UID_PORT1 1057
#define IDC_ZONE_TCPPORT2 1058
#define IDC_ZONE_UDPPORT 1058
#define IDC_UID_ADDRESS3 1058
#define IDC_UID_PORT2 1058
#define IDC_ZONE_COUNT 1059
#define IDC_ZONE_ADD 1060
#define IDC_ZONE_DEL 1061
#define IDC_SAVE_ZONE_SETING 1062
#define IDC_LOGIN_LISTEN_LAUNCHER_PORT 1063
#define IDC_LOGIN_LISTEN_DBAGENT_PORT 1064
#define IDC_AUTH_CLIENT_LISTEN_PORT 1065
#define IDC_DBAGENT_GAME_LISTEN_PORT 1067
#define IDC_NATION_SELECTION 1068
#define IDC_DBAGENT_BILLING_TYPE 1068
#define IDC_AUTH_BATTLESERVER 1069
#define IDC_LEVELUP 1069
#define IDC_DBAGENT_BATTLE_SERVER 1069
#define IDC_DEATHPENALTY 1070
#define IDC_DBAGENT_AUTH_LISTEN_PORT 1070
#define IDC_GAMEBATTLESERVER 1071
#define IDC_DBAGENT_CHAT_LISTEN_PORT 1071
#define IDC_AUTH_SUPRESS_CHARCREATE 1072
#define IDC_DBAGENT_ADMINTOOL_LISTEN_PORT 1072
#define IDC_EVENT1 1072
#define IDC_EVENT2 1073
#define IDC_FAME 1074
#define IDC_FAME2 1075
#define IDC_REFINE 1075
#define IDC_EVENT3 1076
#define IDC_MILEAGE 1077
#define IDC_AUTH_TEST_GROUP 1078
#define IDC_EVENT4 1078
#define IDC_DBAGENT_SERVER_TYPE 1079
#define IDC_EVENT5 1079
#define IDC_DBAGENT_NATION 1080
#define IDC_AUTH_SUPRESS_CHARDELETE 1087
#define IDC_UID_BILLING_TYPE 1088
#define IDC_UID_SERVER_ID 1089
#define IDC_DB_TYPE 1093
#define IDC_DB_ADDR 1094
#define IDC_DB_NAME 1095
#define IDC_DB_USER 1096
#define IDC_DB_PASS 1097
#define IDC_UID_BTN_DBSETTING 1098
#define IDC_DB_NONE 1098
#define IDC_UID_EDT_DBSETTING 1099
#define IDC_DB_ADDR_LABEL 1100
#define IDC_DB_NAME_LABLE 1101
#define IDC_LOG_BTN_DBSETTING 1103
#define IDC_LOG_EDT_DBSETTING 1104
#define IDC_CHAT_BTN_DBSETTING 1105
#define IDC_LOGIN_PATCH_ADDR 1105
#define IDC_AUTH_BLOCK_BTN_DBSETTING 1105
#define IDC_CHAT_EDT_DBSETTING 1106
#define IDC_LOGIN_PING_CHECK 1106
#define IDC_AUTH_BLOCK_EDT_DBSETTING 1106
#define IDC_LOGIN_SERVER_ID 1107
#define IDC_AUTH_SERVER_ID 1108
#define IDC_AUTH_DBAGENT_ADDR 1109
#define IDC_AUTH_PING_CHECK 1110
#define IDC_AUTH_EDT_DBSETTING 1111
#define IDC_AUTH_BTN_DBSETTING 1112
#define IDC_DBAGENT_SERVER_ID 1113
#define IDC_DBAGENT_EDT_DBSETTING 1114
#define IDC_DBAGENT_BTN_DBSETTING 1115
#define IDC_DBAGENT_LIMIT_BATTLEGROUND_USER_NUM 1116
#define IDC_CHECK1 1117
#define IDC_CHAT_USERIP_CHECK 1117
#define IDC_DBAGENT_LIMIT_BATTLEGROUND_USER_NUM2 1117
#define IDC_DBAGENT_LIMIT_BATTLEGROUND_USER_PER 1117
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 138
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1118
#define _APS_NEXT_SYMED_VALUE 104
#endif
#endif

View File

@@ -0,0 +1,7 @@
// stdafx.cpp : 표준 포함 파일을 포함하는 소스 파일입니다.
// SeverSetupDlg.pch는 미리 컴파일된 헤더가 됩니다.
// stdafx.obj는 미리 컴파일된 형식 정보를 포함합니다.
#include "stdafx.h"

View File

@@ -0,0 +1,46 @@
// stdafx.h : 잘 변경되지 않고 자주 사용하는
// 표준 시스템 포함 파일 및 프로젝트 관련 포함 파일이
// 들어 있는 포함 파일입니다.
#pragma once
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // Windows 헤더에서 거의 사용되지 않는 내용을 제외시킵니다.
#endif
// 아래 지정된 플랫폼보다 우선하는 플랫폼을 대상으로 하는 경우 다음 정의를 수정하십시오.
// 다른 플랫폼에 사용되는 해당 값의 최신 정보는 MSDN을 참조하십시오.
#ifndef WINVER // Windows 95 및 Windows NT 4 이후 버전에서만 기능을 사용할 수 있습니다.
#define WINVER 0x0400 // Windows 98과 Windows 2000 이후 버전에 맞도록 적합한 값으로 변경해 주십시오.
#endif
#ifndef _WIN32_WINNT // Windows NT 4 이후 버전에서만 기능을 사용할 수 있습니다.
#define _WIN32_WINNT 0x0400 // Windows 98과 Windows 2000 이후 버전에 맞도록 적합한 값으로 변경해 주십시오.
#endif
#ifndef _WIN32_WINDOWS // Windows 98 이후 버전에서만 기능을 사용할 수 있습니다.
#define _WIN32_WINDOWS 0x0410 // Windows Me 이후 버전에 맞도록 적합한 값으로 변경해 주십시오.
#endif
#ifndef _WIN32_IE // IE 4.0 이후 버전에서만 기능을 사용할 수 있습니다.
#define _WIN32_IE 0x0400 // IE 5.0 이후 버전에 맞도록 적합한 값으로 변경해 주십시오.
#endif
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 일부 CString 생성자는 명시적으로 선언됩니다.
// MFC의 공통 부분과 무시 가능한 경고 메시지에 대한 숨기기를 해제합니다.
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC 핵심 및 표준 구성 요소
#include <afxext.h> // MFC 익스텐션
#include <afxdisp.h> // MFC 자동화 클래스
#include <afxdtctl.h> // Internet Explorer 4 공용 컨트롤에 대한 MFC 지원
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // Windows 공용 컨트롤에 대한 MFC 지원
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxdlgs.h>
// 보노 추가
#include "Misc/INIFunctions.h"