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,75 @@
// Arrangement2.cpp : 응용 프로그램에 대한 클래스 동작을 정의합니다.
//
#include "stdafx.h"
#include "Arrangement2.h"
#include "Arrangement2Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CArrangement2App
BEGIN_MESSAGE_MAP(CArrangement2App, CWinApp)
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
// CArrangement2App 생성
CArrangement2App::CArrangement2App()
{
// TODO: 여기에 생성 코드를 추가합니다.
// InitInstance에 모든 중요한 초기화 작업을 배치합니다.
}
// 유일한 CArrangement2App 개체입니다.
CArrangement2App theApp;
// CArrangement2App 초기화
BOOL CArrangement2App::InitInstance()
{
// 응용 프로그램 매니페스트가 ComCtl32.dll 버전 6 이상을 사용하여 비주얼 스타일을
// 사용하도록 지정하는 경우, Windows XP 상에서 반드시 InitCommonControls()가 필요합니다.
// InitCommonControls()를 사용하지 않으면 창을 만들 수 없습니다.
InitCommonControls();
CWinApp::InitInstance();
GdiplusStartupInput gdiplusStartupInput;
GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);
AfxEnableControlContainer();
CArrangement2Dlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 여기에 대화 상자가 확인을 눌러 없어지는 경우 처리할
// 코드를 배치합니다.
}
else if (nResponse == IDCANCEL)
{
// TODO: 여기에 대화 상자가 취소를 눌러 없어지는 경우 처리할
// 코드를 배치합니다.
}
// 대화 상자가 닫혔으므로 응용 프로그램의 메시지 펌프를 시작하지 않고
// 응용 프로그램을 끝낼 수 있도록 FALSE를 반환합니다.
return FALSE;
}
int CArrangement2App::ExitInstance()
{
GdiplusShutdown(m_gdiplusToken);
return CWinApp::ExitInstance();
}

View File

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

View File

@@ -0,0 +1,306 @@
// 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\\Arrangement2.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\\Arrangement2.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Arrangement2 정보"
FONT 9, "굴림", 0, 0, 0x1
BEGIN
ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20
LTEXT "Arrangement Tool - Ver 1.2",IDC_STATIC,40,10,119,8,
SS_NOPREFIX
LTEXT "Copyright (c) 2002",IDC_STATIC,40,25,119,8
DEFPUSHBUTTON "확인",IDOK,178,7,50,16,WS_GROUP
END
IDD_ARRANGEMENT2_DIALOG DIALOGEX 0, 0, 807, 667
STYLE DS_SETFONT | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE |
WS_CAPTION | WS_VSCROLL | WS_HSCROLL | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
CAPTION "Arrangement2"
FONT 9, "굴림", 400, 0, 0x81
BEGIN
GROUPBOX "위치",IDC_STATIC5,665,281,94,33
LTEXT "X : ",IDC_STATICX,673,297,13,11
LTEXT "Z : ",IDC_STATICZ,713,297,14,11
EDITTEXT IDC_POSITIONX,685,296,22,12,ES_CENTER | ES_AUTOHSCROLL |
ES_READONLY
EDITTEXT IDC_POSITIONZ,725,295,22,12,ES_CENTER | ES_AUTOHSCROLL |
ES_READONLY
LTEXT "KID :",IDC_STATICKID,661,109,21,12
PUSHBUTTON "스크립트 생성(&C)",IDC_CREATESCRIPT,665,7,114,18
GROUPBOX "정보",IDC_STATIC4,654,266,135,134
LTEXT "전체 몬스터 수 : ",IDC_STATICMONTNUM,665,325,52,11
EDITTEXT IDC_NUMINWORLD,717,321,39,14,ES_CENTER | ES_AUTOHSCROLL |
ES_READONLY
COMBOBOX IDC_KIDCOMBO,681,106,104,88,CBS_DROPDOWN |
CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
EDITTEXT IDC_NUMOFKID,689,168,94,14,ES_CENTER | ES_AUTOHSCROLL |
ES_READONLY
CONTROL "KID(&1)",IDC_VISUALKID,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,669,356,35,10
GROUPBOX "표시기능",IDC_STATIC6,661,342,95,46
LTEXT "이름 : ",IDC_STATICNAME,661,127,22,8
LTEXT "레벨 : ",IDC_STATICLEVEL,661,143,22,8
LTEXT "클래스 : ",IDC_STATICCLASS,657,157,28,8
LTEXT "개체수 : ",IDC_STATICOBJNUM,661,172,28,8
EDITTEXT IDC_CLASS,689,153,94,14,ES_CENTER | ES_AUTOHSCROLL |
ES_READONLY
EDITTEXT IDC_LEVEL,689,139,94,14,ES_CENTER | ES_AUTOHSCROLL |
ES_READONLY
EDITTEXT IDC_NAME,689,125,94,14,ES_CENTER | ES_AUTOHSCROLL |
ES_READONLY
GROUPBOX "작업 모드",IDC_STATIC1,654,35,135,43
CONTROL "배치(&A)",IDC_ARRANGEMENT,"Button",BS_AUTORADIOBUTTON |
BS_PUSHLIKE | WS_GROUP,665,50,30,19
CONTROL "삭제(&D)",IDC_ERASE,"Button",BS_AUTORADIOBUTTON |
BS_PUSHLIKE,697,50,30,19
CONTROL "그룹(&G)",IDC_GROUP,"Button",BS_AUTORADIOBUTTON |
BS_PUSHLIKE,729,50,30,19
GROUPBOX "그룹",IDC_STATIC3,654,223,135,34
CONTROL "PID(&2)",IDC_VISUALPID,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,669,371,36,10
LTEXT "PID : ",IDC_STATICPID,661,243,19,8
COMBOBOX IDC_PIDCOMBO,681,239,54,88,CBS_DROPDOWN |
CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
LTEXT "리스폰 영역 :",IDC_STATICRESPAWN,661,195,42,8
EDITTEXT IDC_RESPAWNEDIT,705,192,48,14,ES_RIGHT | ES_AUTOHSCROLL |
ES_NUMBER
CONTROL "LEVEL(&3)",IDC_VISUALLEVEL,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,709,356,41,9
EDITTEXT IDC_PARTYMEM_NUM,737,238,45,14,ES_CENTER |
ES_AUTOHSCROLL | ES_READONLY | ES_NUMBER
GROUPBOX "배치",IDC_STATIC2,653,89,136,124
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", "(c) Youxiland"
VALUE "FileDescription", "Arrangement Tool"
VALUE "FileVersion", "1.0.0.1"
VALUE "InternalName", "Arrangement2.exe"
VALUE "LegalCopyright", "(c) Youxiland. All rights reserved."
VALUE "OriginalFilename", "Arrangement2.exe"
VALUE "ProductName", "Arrangement Tool"
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_ABOUTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 228
TOPMARGIN, 7
BOTTOMMARGIN, 48
END
IDD_ARRANGEMENT2_DIALOG, DIALOG
BEGIN
LEFTMARGIN, 6
RIGHTMARGIN, 792
VERTGUIDE, 63
VERTGUIDE, 112
TOPMARGIN, 7
BOTTOMMARGIN, 645
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// RT_MANIFEST
//
IDR_MANIFEST RT_MANIFEST "res\\Arrangement2.manifest"
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_MENU1 MENU
BEGIN
POPUP "존 로드(&F)"
BEGIN
POPUP "존(&Z)"
BEGIN
MENUITEM "존1 (그랜드 코스트)", ID__ZONE1
MENUITEM "존2 (레한 스팟)", ID__ZONE2
MENUITEM "존3 (배틀 그라운드)", ID__ZONE3
MENUITEM "존4 (사이너 아일랜드)", ID__ZONE4
MENUITEM "존5 (아일랜드 오브 패인)", ID__ZONE5
MENUITEM "존8 (카나번)", ID__ZONE8
MENUITEM "존9(신규존)", ID__ZONE9
MENUITEM "존12 (신의 대륙)", ID__ZONE12
MENUITEM "존16 (다크 카나번)", ID__ZONE16
MENUITEM "존100 (아레나)", ID__ZONE100
END
MENUITEM SEPARATOR
MENUITEM "종료(&X)", ID_APP_EXIT
END
POPUP "보기(&V)"
BEGIN
POPUP "줌(&Z)"
BEGIN
MENUITEM "50% (그림에 노이즈 생김 -_-)", ID__50
MENUITEM "100%", ID__100
MENUITEM "200%", ID__200
MENUITEM "400%", ID__400
MENUITEM "800%", ID__800
END
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
IDR_ACCELERATOR1 ACCELERATORS
BEGIN
VK_F1, IDC_ERASE, VIRTKEY, CONTROL, NOINVERT
END
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDS_ABOUTBOX "Arrangement2 정보(&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\Arrangement2.rc2" // Microsoft Visual C++에서 편집되지 않은 리소스
#include "afxres.rc" // 표준 구성 요소
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@@ -0,0 +1,223 @@
<?xml version="1.0" encoding="ks_c_5601-1987"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="Arrangement2"
ProjectGUID="{8DB7D818-437F-47B5-8DAF-DF284B32A737}"
Keyword="MFCProj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="../DBToolExecutable/$(ConfigurationName)"
IntermediateDirectory="../Intermediate/$(ProjectName)/$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../../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"
AdditionalDependencies="gdiplus.lib ijl15.lib"
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"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
OmitFramePointers="TRUE"
AdditionalIncludeDirectories="../../RylServerProject/BaseLibrary;"
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
StringPooling="TRUE"
MinimalRebuild="FALSE"
RuntimeLibrary="0"
EnableFunctionLevelLinking="TRUE"
TreatWChar_tAsBuiltInType="TRUE"
UsePrecompiledHeader="2"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="gdiplus.lib ijl15.lib"
LinkIncremental="1"
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="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
<File
RelativePath="Arrangement2.cpp">
</File>
<File
RelativePath="Arrangement2Dlg.cpp">
</File>
<File
RelativePath="DelimitedFile.cpp">
</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>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc">
<File
RelativePath="Arrangement2.h">
</File>
<File
RelativePath="Arrangement2Dlg.h">
</File>
<File
RelativePath="DelimitedFile.h">
</File>
<File
RelativePath="ijl.h">
</File>
<File
RelativePath="MemUtils.h">
</File>
<File
RelativePath="Resource.h">
</File>
<File
RelativePath="stdafx.h">
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;jpg;jpeg;jpe;manifest">
<File
RelativePath="res\Arrangement2.ico">
</File>
<File
RelativePath="res\Arrangement2.manifest">
</File>
<File
RelativePath="Arrangement2.rc">
</File>
<File
RelativePath="res\Arrangement2.rc2">
</File>
</Filter>
<Filter
Name="Misc"
Filter="">
<File
RelativePath="ijl15.dll">
</File>
<File
RelativePath="ijl15.lib">
</File>
<File
RelativePath="MonsterProtoType.txt">
</File>
<File
RelativePath="Zone01.jpg">
</File>
</Filter>
</Files>
<Globals>
<Global
Name="RESOURCE_FILE"
Value="Arrangement2.rc"/>
</Globals>
</VisualStudioProject>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,311 @@
// Arrangement2Dlg.h : 헤더 파일
//
#pragma once
#include "afxwin.h"
#include <map>
#include <vector>
using namespace std;
// CArrangement2Dlg 대화 상자
class CArrangement2Dlg : public CDialog
{
// 생성
public:
CArrangement2Dlg(CWnd* pParent = NULL); // 표준 생성자
// 대화 상자 데이터
enum { IDD = IDD_ARRANGEMENT2_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원
// 구현
protected:
HICON m_hIcon;
// 메시지 맵 함수를 생성했습니다.
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnZoom(UINT nID);
afx_msg void OnUpdateZoom(CCmdUI *pCmdUI);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnBnClickedCreatescript();
afx_msg void OnBnClickedVisualkid();
afx_msg void OnCbnSelchangeKidcombo();
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
afx_msg void OnZone(UINT nID);
afx_msg void OnUpdateZone(CCmdUI* pCmdUI);
afx_msg void OnBnClickedVisualpid();
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnAppExit();
afx_msg void OnCbnSelchangePidcombo();
protected:
virtual BOOL DestroyWindow();
public:
int m_nPositionX;
int m_nPositionY;
int m_nPositionZ;
int m_nProcess;
int m_nPID;
BOOL m_bVisualKID;
BOOL m_bVisualPID;
BOOL m_bVisualLevel;
CString m_strName;
CString m_strLevel;
CString m_strClass;
int m_nNumOfKID;
int m_nNumOfWorld;
CComboBox m_ctrKIDCombo;
BOOL m_bErase;
short m_wRespawnArea;
CComboBox m_ctrPIDCombo;
int m_nPartyMemNum;
// ------------------------------------------------------------------
// 사용자 정의
private:
enum _Const
{
MAP_PAGE_X = 1100,
MAP_PAGE_Z = 900,
SECTOR_SIZE = 315,
MAX_NUM = 0xffff,
ID_LENGTH = 8,
MONSTER_BIT = 0x80000000,
MONSTER_PARTY_BIT = 0x80000000,
MAX_STRING_LENGTH = 32,
MAX_PARTY_MEMBER_NUM = 10
};
enum Process
{
ARRANGEMENT = 0,
ERASE,
PARTY
};
enum MovingPattern
{
PATTERN_AREA = 0,
PATTERN_FIX,
PATTERN_ROUTE,
PATTERN_NONAREA
};
enum RespawnArea
{
DEFAULT_DISTANCE = 32
};
enum SpeacialKindID
{
// 소환수
SUMMON_KINDLING = 3500,
SUMMON_FLAMEWALKER = 3506,
SUMMON_BURNINGSHIELD = 3513,
SUMMON_FIREWING = 3520,
SUMMON_DEATHBURN = 3527,
// 명예의 석상
STATUE_NEUTRALITY = 4001,
STATUE_HUMAN_LOADING = 4002,
STATUE_HUMAN_COMPLETE = 4003,
STATUE_AKHAN_LOADING = 4004,
STATUE_AKHAN_COMPLETE = 4005,
// BattleGround Server 명예의 석상
BG_STATUE_NEUTRALITY = 4006,
BG_STATUE_HUMAN_LOADING = 4007,
BG_STATUE_HUMAN_COMPLETE = 4008,
BG_STATUE_AKHAN_LOADING = 4009,
BG_STATUE_AKHAN_COMPLETE = 4010,
// 다크 카나번 석상
POWER_STATUE_NEUTRALITY = 4011, // 힘의 석상
POWER_STATUE_HUMAN_LOADING = 4012,
POWER_STATUE_HUMAN_COMPLETE = 4013,
POWER_STATUE_AKHAN_LOADING = 4014,
POWER_STATUE_AKHAN_COMPLETE = 4015,
INT_STATUE_NEUTRALITY = 4016, // 지능의 석상
INT_STATUE_HUMAN_LOADING = 4017,
INT_STATUE_HUMAN_COMPLETE = 4018,
INT_STATUE_AKHAN_LOADING = 4019,
INT_STATUE_AKHAN_COMPLETE = 4020,
EXP_STATUE_NEUTRALITY = 4021, // 경험의 석상
EXP_STATUE_HUMAN_LOADING = 4022,
EXP_STATUE_HUMAN_COMPLETE = 4023,
EXP_STATUE_AKHAN_LOADING = 4024,
EXP_STATUE_AKHAN_COMPLETE = 4025,
WEALTH_STATUE_NEUTRALITY = 4026, // 부의 석상
WEALTH_STATUE_HUMAN_LOADING = 4027,
WEALTH_STATUE_HUMAN_COMPLETE = 4028,
WEALTH_STATUE_AKHAN_LOADING = 4029,
WEALTH_STATUE_AKHAN_COMPLETE = 4030,
LIFE_EXTRACT_NEUTRALITY = 4031, // 생명 축출기
LIFE_EXTRACT_HUMAN_LOADING = 4032,
LIFE_EXTRACT_HUMAN_COMPLETE = 4033,
LIFE_EXTRACT_AKHAN_LOADING = 4034,
LIFE_EXTRACT_AKHAN_COMPLETE = 4035,
// 석상 KID (CreatureStructure.h 에도 정의되어 있음)
MIN_STATUE_KID = 4001,
MAX_STATUE_KID = 4035
};
struct Monster
{
unsigned long m_dwCID;
int m_nKID;
int m_nPID;
int m_nLevel;
BOOL m_bScout;
int m_nMovingPattern;
short m_wRespawnArea;
int m_nPosX;
int m_nPosY;
int m_nPosZ;
Monster()
: m_dwCID(0), m_nKID(0), m_nPID(0), m_bScout(FALSE), m_nMovingPattern(0),
m_nPosX(0), m_nPosY(0), m_nPosZ(0), m_wRespawnArea(DEFAULT_DISTANCE), m_nLevel(0)
{ }
};
typedef struct _MonsterInfo
{
int m_nKID;
char m_strName[MAX_STRING_LENGTH];
char m_strLevel[MAX_STRING_LENGTH];
char m_strClass[MAX_STRING_LENGTH];
} MonsterInfo, *LPMonsterInfo;
int m_nMapStartX;
int m_nMapStartZ;
UINT_PTR m_nTimer;
bool m_bBlink;
// 석상 몬스터 ID 유지를 위해
struct sStatueKey
{
sStatueKey(unsigned short wPosX, unsigned short wPosZ)
{
m_dwValue = static_cast<unsigned long>( (wPosX << 16) | wPosZ ) ;
}
operator unsigned long() const
{
return m_dwValue ;
}
unsigned long m_dwValue ;
} ;
// 몬스터 정보의 리스트
typedef vector<Monster *> MonsterList;
typedef std::map<int, MonsterInfo> MonsterInfoList;
typedef std::map<unsigned long, unsigned long> StatueIDMap; // <sStatueKey::m_dwValue, StatueCID>
MonsterList m_lstMonster;
MonsterInfoList m_lstMonsterInfo;
StatueIDMap m_mapStatueID;
// 맵이미지 크기
unsigned long m_dwPageX;
unsigned long m_dwPageZ;
// 다이얼로그 과거와 현제 크기 및 차이
int m_nPrevX;
int m_nPrevY;
int m_nNextX;
int m_nNextY;
int m_nGapX;
int m_nGapY;
// 다이얼로그 위치
RECT m_rectWindow;
// 이미 그려진 녀석을 이동시 참조하는 변수
bool m_bDragObject;
int m_DragObjectIndex;
CPoint DragScreenStartPoint;
bool m_bDragScreen;
// 줌
UINT m_nSelectedZoom;
float m_fMagnification;
// 선택된(로딩된 존)
UINT m_nLoadedZone;
// 이미지
BYTE* m_imageData;
SIZE m_imageDims;
int m_imageChannels;
BITMAPINFO m_bmi;
BYTE* m_bmp;
void CalculateNumOfKID(int nKID);
void CalculateNumOfPID();
void ClearBitmap();
void ClearData();
BOOL OpenJPGFile(LPCTSTR lpszPathName);
void RGBA_FPX_to_BGRA(BYTE* data,int width,int height);
void InitialUpdate();
void LoadScript(void);
void DrawOutLineText(Graphics& graphics, Font& font, PointF pointF, wchar_t* strText);
BOOL IsStatue(unsigned short wKID) CONST;
template <class T>
void SetObjectPos(T* pObject);
public:
afx_msg void OnSize(UINT nType, int cx, int cy);
};

View File

@@ -0,0 +1,327 @@
#ifdef _BASE_LIBRARY_
#include "../stdafx.h"
#endif
#include "DelimitedFile.h"
// TODO: CDelimitedFile::Write 계열 제작
CDelimitedFile::CDelimitedFile(const char* pszDelimiter)
: m_fpFile( NULL ), m_dwColumn( 0 ), m_dwColumnCount( 0 )
{
strncpy(m_szDelimiter, pszDelimiter, MAX_DELIMITER_NUM);
}
CDelimitedFile::~CDelimitedFile()
{
Close();
}
BOOL CDelimitedFile::Open( LPCSTR szFilename, int nHeadLine, UINT nOpenFlags )
{
m_fpFile = ::fopen( szFilename, (nOpenFlags & modeCreate) ? "wt" : "rt" );
if (NULL == m_fpFile)
{
#ifdef _BASE_LIBRARY_
g_Log.ErrLog(__FUNCTION__, __FILE__, __LINE__, "파일 %s를 열 수 없습니다.", szFilename);
#endif
return FALSE;
}
if (nHeadLine > -1) {
for (int i=0; i<nHeadLine; ++i) {
ReadLine();
}
CHAR szColumnName[256];
for( m_dwColumnCount = 0; ReadString( szColumnName, 255 ); m_dwColumnCount++ ) {
// TODO: szColumnName을 리스트에 추가
m_ColumnNames.push_back(szColumnName);
}
}
return TRUE;
}
void CDelimitedFile::Close( void )
{
if( m_fpFile ) {
::fclose( m_fpFile );
m_fpFile = NULL;
}
}
BOOL CDelimitedFile::ReadLine( void )
{
while( ::fgets( m_szLine, MAX_LINE_LENGTH, m_fpFile ) ) {
if( (m_szLine[0]) && (m_szLine[0] != ';') ) {
m_dwColumn = 0;
memcpy(m_szBackupLine, m_szLine, MAX_LINE_LENGTH);
return TRUE;
}
}
return FALSE;
}
BOOL CDelimitedFile::ReadData( double &dNumber )
{
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
if( !pszData || !(*pszData) )
return FALSE;
dNumber = atof( pszData );
return TRUE;
}
BOOL CDelimitedFile::ReadData( float &fNumber )
{
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
if( !pszData || !(*pszData) )
return FALSE;
fNumber = (float) atof( pszData );
return TRUE;
}
BOOL CDelimitedFile::ReadData( unsigned long &fNumber )
{
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
if( !pszData || !(*pszData) )
return FALSE;
fNumber = (unsigned long) atol( pszData );
return TRUE;
}
BOOL CDelimitedFile::ReadData( int &iNumber )
{
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
if( !pszData || !(*pszData) )
return FALSE;
iNumber = atoi( pszData );
return TRUE;
}
BOOL CDelimitedFile::ReadData( unsigned short &iNumber )
{
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
if( !pszData || !(*pszData) )
return FALSE;
iNumber = (unsigned short)atoi( pszData );
return TRUE;
}
BOOL CDelimitedFile::ReadData( short &iNumber )
{
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
if( !pszData || !(*pszData) )
return FALSE;
iNumber = (short)atoi( pszData );
return TRUE;
}
BOOL CDelimitedFile::ReadData( unsigned char &iNumber )
{
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
if( !pszData || !(*pszData) )
return FALSE;
iNumber = (unsigned char)atoi( pszData );
return TRUE;
}
BOOL CDelimitedFile::ReadData( char &iNumber )
{
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
if( !pszData || !(*pszData) )
return FALSE;
iNumber = (char)atoi( pszData );
return TRUE;
}
BOOL CDelimitedFile::ReadData( __int64 &i64Number )
{
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
if( !pszData || !(*pszData) )
return FALSE;
i64Number = _atoi64( pszData );
return TRUE;
}
BOOL CDelimitedFile::ReadData( DWORD64 &i64Number )
{
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
if( !pszData || !(*pszData) )
return FALSE;
i64Number = (DWORD)_atoi64( pszData );
return TRUE;
}
BOOL CDelimitedFile::ReadString( char *szString, DWORD dwSize )
{
CHAR *pszData = ::strtok( (m_dwColumn++) ? NULL : m_szLine, m_szDelimiter );
if( !pszData || !(*pszData) )
return FALSE;
strncpy( szString, pszData, dwSize );
return TRUE;
}
BOOL CDelimitedFile::ReadData(const char *szField, double &dNumber )
{
int nSearch;
if( ((nSearch = FindColumn( szField )) == -1) )
return FALSE;
GotoColumn( nSearch );
return ReadData( dNumber );
}
BOOL CDelimitedFile::ReadData(const char *szField, float &fNumber )
{
int nSearch;
if( ((nSearch = FindColumn( szField )) == -1) )
return FALSE;
GotoColumn( nSearch );
return ReadData( fNumber );
}
BOOL CDelimitedFile::ReadData(const char *szField, unsigned long &fNumber )
{
int nSearch;
if( ((nSearch = FindColumn( szField )) == -1) )
return FALSE;
GotoColumn( nSearch );
return ReadData( fNumber );
}
BOOL CDelimitedFile::ReadData(const char *szField, int &iNumber )
{
int nSearch;
if( ((nSearch = FindColumn( szField )) == -1) )
return FALSE;
GotoColumn( nSearch );
return ReadData( iNumber );
}
BOOL CDelimitedFile::ReadData(const char *szField, unsigned short &iNumber )
{
int nSearch;
if( ((nSearch = FindColumn( szField )) == -1) )
return FALSE;
GotoColumn( nSearch );
return ReadData( iNumber );
}
BOOL CDelimitedFile::ReadData(const char *szField, short &iNumber )
{
int nSearch;
if( ((nSearch = FindColumn( szField )) == -1) )
return FALSE;
GotoColumn( nSearch );
return ReadData( iNumber );
}
BOOL CDelimitedFile::ReadData(const char *szField, unsigned char &iNumber )
{
int nSearch;
if( ((nSearch = FindColumn( szField )) == -1) )
return FALSE;
GotoColumn( nSearch );
return ReadData( iNumber );
}
BOOL CDelimitedFile::ReadData(const char *szField, char &iNumber )
{
int nSearch;
if( ((nSearch = FindColumn( szField )) == -1) )
return FALSE;
GotoColumn( nSearch );
return ReadData( iNumber );
}
BOOL CDelimitedFile::ReadData(const char *szField, __int64 &i64Number )
{
int nSearch;
if( ((nSearch = FindColumn( szField )) == -1) )
return FALSE;
GotoColumn( nSearch );
return ReadData( i64Number );
}
BOOL CDelimitedFile::ReadData(const char *szField, DWORD64 &i64Number )
{
int nSearch;
if( ((nSearch = FindColumn( szField )) == -1) )
return FALSE;
GotoColumn( nSearch );
return ReadData( i64Number );
}
BOOL CDelimitedFile::ReadString(const char *szField, char *szString, DWORD dwSize )
{
int nSearch;
if( ((nSearch = FindColumn( szField )) == -1) )
return FALSE;
GotoColumn( nSearch );
return ReadString( szString, dwSize );
}
BOOL CDelimitedFile::GotoColumn( int nColumn )
{
CHAR* pszPos = 0;
if(nColumn < 0 || (DWORD)nColumn > m_dwColumnCount)
return FALSE;
if( (m_dwColumn == (DWORD) nColumn) )
return TRUE;
if( nColumn == 0 ) {
m_dwColumn = 0;
strtok(m_szLine, m_szDelimiter);
}
else {
for(;m_dwColumn < m_dwColumnCount && nColumn != m_dwColumn; ++m_dwColumn )
pszPos = strtok(0, m_szDelimiter);
if(m_dwColumn == m_dwColumnCount) {
memcpy(m_szLine, m_szBackupLine, MAX_LINE_LENGTH);
pszPos = strtok(m_szLine, m_szDelimiter);
for(m_dwColumn = 1; m_dwColumn < (DWORD)nColumn && nColumn != m_dwColumn; ++m_dwColumn )
pszPos = strtok(NULL, m_szDelimiter );
}
}
return TRUE;
}
int CDelimitedFile::FindColumn(const char *szField )
{
// list에서 찾기
const std::basic_string<char>::size_type npos = -1;
for(std::basic_string<char>::size_type nCount = 0; nCount < m_ColumnNames.size(); ++nCount) {
if(npos != m_ColumnNames[nCount].find(szField)) {
return (int)nCount;
}
}
return npos;
}

View File

@@ -0,0 +1,82 @@
#pragma once
#include <winsock2.h>
#include <windows.h>
#include <vector>
#include <string>
class CDelimitedFile
{
public:
// MAX Delimiter num is 32;
CDelimitedFile(const char* pszDelimiter = "\t");
~CDelimitedFile();
enum {
MAX_LINE_LENGTH = 8192,
MAX_DELIMITER_NUM = 32
};
enum OpenFlags {
modeRead = (int) 0x00000,
modeCreate = (int) 0x01000
};
private:
FILE *m_fpFile;
DWORD m_dwColumn;
DWORD m_dwColumnCount;
CHAR m_szLine[MAX_LINE_LENGTH];
CHAR m_szBackupLine[MAX_LINE_LENGTH];
char m_szDelimiter[MAX_DELIMITER_NUM];
std::vector<std::string> m_ColumnNames;
private:
int FindColumn(const char *szField );
BOOL GotoColumn( int nColumn );
public:
BOOL Open(LPCSTR szFilename, int nHeadLine = -1, UINT nOpenFlags = modeRead );
BOOL ReadLine();
BOOL ReadData(double &dNumber);
BOOL ReadData(float &fNumber);
BOOL ReadData(unsigned long &fNumber);
BOOL ReadData(int &iNumber);
BOOL ReadData(unsigned short &iNumber);
BOOL ReadData(short &iNumber);
BOOL ReadData(unsigned char &iNumber);
BOOL ReadData(char &iNumber);
BOOL ReadData(__int64 &i64Number);
BOOL ReadData(DWORD64 &i64Number);
BOOL ReadString(char *szString, DWORD dwSize);
BOOL ReadData(const char *szField, double &dNumber);
BOOL ReadData(const char *szField, float &fNumber);
BOOL ReadData(const char *szField, unsigned long &fNumber);
BOOL ReadData(const char *szField, int &iNumber);
BOOL ReadData(const char *szField, unsigned short &iNumber);
BOOL ReadData(const char *szField, short &iNumber);
BOOL ReadData(const char *szField, unsigned char &iNumber);
BOOL ReadData(const char *szField, char &iNumber);
BOOL ReadData(const char *szField, __int64 &i64Number);
BOOL ReadData(const char *szField, DWORD64 &i64Number);
BOOL ReadString(const char *szField, char *szString, DWORD dwSize);
void Close() ;
};

View File

@@ -0,0 +1,92 @@
#ifndef _MEMUTILS_H_
#define _MEMUTILS_H_
#include <winsock2.h>
#include <windows.h>
#define SAFE_FREE(p) { if (p) { free(p); (p) = NULL; } }
#define SAFE_DELETE(p) { if (p) { delete (p); (p) = NULL; } }
#define SAFE_DELETE_ARRAY(p) { if (p) { delete[] (p); (p) = NULL; } }
#define SAFE_RELEASE(p) { if (p) { (p)->Release(); (p) = NULL; } }
#define SAFE_CLOSESOCK(p) { if (INVALID_SOCKET != (p)) { closesocket(p); (p) = INVALID_SOCKET; } }
#define SAFE_CLOSEHANDLE(p) { if (INVALID_HANDLE_VALUE != (p)) { CloseHandle(p); (p) = INVALID_HANDLE_VALUE; } }
// 각종 유용한 함수자와, 알고리즘들을 담고 있습니다.
namespace MemUtils
{
// 개체 생성
template<typename Object>
struct fnCreate {
Object* operator() () {
return new Object;
}
};
// 개체 삭제
struct fnDelete {
template<typename Object>
void operator() (Object* pObject) {
delete pObject;
}
};
// Map의 Pair에 있는 개체 삭제
struct fnDelete2nd {
template<typename Pair>
void operator() (Pair& pair) {
delete pair.second;
}
};
// 배열 삭제
struct fnDeleteArray {
template<typename Object>
void operator() (Object* pObject) {
delete [] pObject;
}
};
// Release 함.
struct fnRelease {
template<typename Object>
void operator() (Object* pObject) {
pObject->Release();
}
};
// Map의 Pair에 있는 개체 삭제.
struct fnRelease2nd {
template<typename Pair>
void operator() (Pair& pair) {
pair.second->Release();
}
};
// 조건이 true이면 복사를 하는 iterator.
template<typename InputIterator, typename OutputIterator, typename Predicate>
inline OutputIterator copy_if(InputIterator begin, InputIterator end, OutputIterator destBegin, Predicate Pred) {
while(begin != end) {
if(Pred(*begin)) *destBegin++ = *begin;
++begin;
}
return destBegin;
}
// 컨테이너를 받아, 컨테이너 내의 모든 멤버에 대해서 delete를 수행. DestructType 은 fnDelete나 fnRelease중 하나
template<typename ContainerType, typename DesturctType, typename LockType>
inline void ClearContainer(ContainerType& Container, DesturctType fnDestructor, LockType& Lock) {
LockType::Syncronize sync(Lock);
std::for_each(Container.begin(), Container.end(), fnDestructor);
Container.clear();
}
// 컨테이너를 받아, 컨테이너 내의 모든 멤버에 대해서 delete를 수행. DestructType 은 fnDelete나 fnRelease중 하나
template<typename ContainerType, typename DestructType>
inline void ClearContainer(ContainerType& Container, DestructType fnDestructor) {
std::for_each(Container.begin(), Container.end(), fnDestructor);
Container.clear();
}
};
#endif

View File

@@ -0,0 +1,290 @@
1 영 씨맨 MON_Seaman.GCMDS 2 Defender 24 44 24 216 35 1 30 -30 40 -40 660 0.191804878 15 1 17 22 2 3 0 0 0.7 4 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 200 340 5 8.5 1 0 X O X O 15000 2352 0 0 0 1000 80 80 80 140 159 2 20
2 씨맨 빌리져 MON_Seaman.GCMDS 2 Defender 24 48.4 24 230.4 35 1 36 -36 48 -48 148 0.18154083 17 2 21 26 6 5 2 0 0.7 4 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 245 9000 6.125 10.775 1.2 0 X X X O 15000 2353 0 0 0 1000 80 80 80 140 158 2 20
3 씨맨 파이터 MON_Seaman_warrior.GCMDS 2 Warrior 24 48.4 24 230.4 35 1 36 -36 48 -48 148 0.18154083 23 3 25 30 9 6 3 0 0.8 4 0 2 1 0 0 0 0 0 0 0 0 0 0 1 1 306 521 7.65 13.025 1.2 1 X X X O 15000 2354 0 0 0 1000 80 80 80 140 157 2 20
4 뮤테이티드 스퀴럴 MON_Daramji.GCMDS 2 Defender 12 37.8 12 100.8 40 1 12 -16 56 -44 144 0.186532492 15 1 17 22 2 3 0 0 0.8 4 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 186 340 4.65 8.5 0.8 0 X X X O 15000 2355 0 0 0 1000 80 80 80 140 159 2 20
5 그래플링 스퀴럴 MON_Bronji.GCMDS 2 Defender 24 75.6 24 201.6 40 1 12 -16 56 -44 144 0.186532492 17 2 21 26 6 5 2 0 0.8 4 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 245 431 6.125 10.775 0.8 0 X X X O 15000 2356 0 0 0 1000 80 80 80 140 158 2 20
6 뱃 MON_Bat.GCMDS 2 Warrior 15 52 15 135 24 1 30 -30 0 -80 180 0.149502979 23 3 25 30 9 6 3 0 0.5 4 0 2 1 0 0 0 0 0 0 0 0 0 0 1 1 306 521 7.65 13.025 1 1 X X X O 15000 2357 0 0 0 1000 80 80 80 140 157 2 20
7 스몰 그럽 MON_Bulte.GCMDS 2 Defender 16 72 16 72 35 1 20 -20 25 -25 125 0.214525312 34 4 25 32 11 8 4 0 0.8 4 0 3 1 0 0 0 0 0 0 0 0 0 0 1 1 374 614 9.35 15.35 1 1 X X X O 15000 2358 0 0 0 1000 80 80 80 140 156 2 20
8 트라이벌 리자드맨 MON_Lizardman.GCMDS 2 Warrior 30 99.75 30 261 60 1 49.5 -40.5 148.5 -72 172 0.156407418 49 5 28 35 13 8 5 0 1.6 4 0 3 2 0 0 0 0 0 0 0 0 0 0 1 1 414 655 10.35 16.375 0.9 1 X X X O 15000 2359 0 0 0 1000 80 80 80 140 155 2 20
9 스파이더 MON_Spider.GCMDS 2 Warrior 32 95.2 32 100.8 30 1 56 -56 52.5 -63 163 0.164975731 49 5 28 35 13 8 5 0 0.8 4 0 3 2 0 0 0 0 0 0 0 0 0 0 1 1 414 655 10.35 16.375 0.7 1 X X X O 15000 2360 0 0 0 1000 80 80 80 140 155 2 20
10 씨맨 엘리트 MON_Seaman_warrior.GCMDS 2 Warrior 24 52.8 24 244.8 35 1 42 -42 56 -56 156 0.172314908 69 6 31 38 14 10 6 0 1 4 0 4 2 0 0 0 0 0 0 0 0 0 0 1 1 486 746 12.15 18.65 1.4 2 X X X O 15000 2361 0 0 0 1000 80 80 80 140 154 2 20
11 그럽 MON_Bulte.GCMDS 2 Defender 16 108 16 96 35 1 40 -40 50 -50 150 0.179143389 95 7 34 41 17 11 8 0 1 4 0 5 2 0 0 0 0 0 0 0 0 0 0 1 1 568 840 14.2 21 2 2 X X X O 15000 2362 0 0 0 1000 80 80 80 140 153 2 20
12 라지 스퀴럴 MON_Daramji.GCMDS 2 Defender 12 42 12 108 40 1 15 -20 70 -55 155 0.173416769 69 6 31 38 14 10 6 0 1 4 0 4 2 0 0 0 0 0 0 0 0 0 0 1 1 490 746 12.25 18.65 1 2 X X X O 15000 2363 0 0 0 1000 80 80 80 140 154 2 20
13 고블린 스커미셔 MON_Goblin.GCMDS 2 Warrior 32 112 24 216 30 1 35 -35 15 -40 140 0.191804878 128 8 36 45 18 13 9 0 1 4 0 5 3 0 0 0 0 0 0 0 0 0 0 1 1 650 932 16.25 23.3 1 2 X X X O 15000 2364 0 0 0 1000 80 80 80 140 152 2 20
14 라폰 MON_Chulpawn.GCMDS 2 Defender 32 112 32 112 40 1 50 -50 25 -150 250 0.107813954 168 9 37 46 19 13 9 0 1.3 4 0 6 3 0 0 0 0 0 0 0 0 0 0 1 1 709 973 17.725 24.325 1 3 X X X O 15000 2365 0 0 0 1000 80 80 80 140 151 2 20
15 라지 스파이더 MON_Spider.GCMDS 2 Warrior 32 112 32 112 30 1 80 -80 75 -90 190 0.141682403 168 9 37 46 19 13 9 0 1.1 4 0 6 3 0 0 0 0 0 0 0 0 0 0 1 1 709 973 17.725 24.325 1 3 X X X O 15000 2366 0 0 0 1000 80 80 80 140 151 2 20
16 고블린 MON_Goblin.GCMDS 2 Warrior 32 112 24 216 30 1 35 -35 15 -40 190 0.141682403 263 10 49 58 25 14 13 0 1.2 4 0 7 4 0 0 0 0 0 0 0 0 0 0 1 1 793 1070 19.825 26.75 1 3 X X X O 15000 2367 0 0 0 1000 80 80 80 140 150 2 20
17 고블린 파이터 MON_Goblin_warrior.GCMDS 2 Defender 32 112 24 216 50 1 35 -35 15 -40 190 0.141682403 319 11 48 57 25 17 14 0 1.9 4 0 7 4 0 0 0 0 0 0 0 0 0 0 1 1 917 1162 22.925 29.05 1 3 X X X O 20000 2368 0 0 0 1000 80 80 80 140 149 2 20
18 좀비독 MON_ZombieDog.GCMDS 2 Warrior 40 120 40 120 40 1 30 -30 15 -145 295 0.091412092 319 11 52 61 27 16 15 0 1.6 4 0 7 4 0 0 0 0 0 0 0 0 0 0 1 1 887 1162 22.175 29.05 1 3 X X X O 20000 2369 0 0 0 1000 80 80 80 140 149 2 20
19 자이언트 스파이더 MON_Spider.GCMDS 2 Warrior 32 123.2 32 119.4666667 30 1 96 -96 90 -108 258 0.104481861 382 12 55 66 30 17 17 0 1.2 4 0 8 5 0 0 0 0 0 0 0 0 0 0 1 1 994 1254 24.85 31.35 1.2 4 X O X O 20000 2370 0 0 0 1000 80 80 80 140 148 2 20
20 좀비 MON_Zombie.GCMDS 2 Defender 60 160 60 160 60 1 25 -25 20 -35 185 0.145487999 382 12 48 59 26 19 15 0 2.3 4 0 8 5 0 0 0 0 0 0 0 0 0 0 1 1 1035 1254 25.875 31.35 1 4 X O X O 20000 2371 0 0 0 1000 80 80 80 140 148 2 20
21 레스틀레스 데드 MON_Skeleton.GCMDS 2 Warrior 29 85.85 30 243 36 1 24.5 -35 17.5 -45.5 196 0.137369775 456 13 57 68 30 18 17 0 1.5 4 0 9 5 0 0 0 0 0 0 0 0 0 0 1 1 1062 1302 26.55 32.55 0.7 4 X X X O 20000 2372 0 0 0 1000 80 80 80 140 147 2 20
22 울프 래드 MON_Wolf_attacker.GCMDS 2 Warrior 32 100.8 24 201.6 40 1 16 -16 36 -112 262 0.102891755 456 13 57 68 30 18 17 0 1.6 4 0 9 5 0 0 0 0 0 0 0 0 0 0 1 1 1062 1302 26.55 32.55 0.8 4 X X X O 20000 2373 0 0 0 1000 80 80 80 140 147 2 20
23 씨 그럽 MON_Bulte.GCMDS 2 Defender 16 126 16 108 35 1 50 -50 62.5 -62.5 213 0.126460099 456 13 50 61 27 19 16 0 1.3 4 0 9 5 0 0 0 0 0 0 0 0 0 0 1 1 1108 1302 27.7 32.55 2.5 4 X X X O 20000 2374 0 0 0 1000 80 80 80 140 147 2 20
24 폰폰 MON_Pawnpawn.GCMDS 2 Defender 24 84 24 216 35 1 75 -60 10 -60 210 0.128257941 540 14 53 64 29 21 17 0 1.3 4 0 9 6 0 0 0 0 0 0 0 0 0 0 1 1 1231 1395 30.775 34.875 1 4 X O X O 20000 2375 0 0 0 1000 80 80 80 140 146 2 20
25 데드마스크 MON_Skullbat.GCMDS 2 Warrior 33 126.5 33 316.8 42 1 102 -162 108 -42 192 0.140215172 540 14 62 73 33 19 19 0 1.7 4 0 9 6 0 0 0 0 0 0 0 0 0 0 1 1 1170 1395 29.25 34.875 1.2 4 X O X O 20000 2376 0 0 0 1000 80 80 80 140 146 2 20
26 엘더 라폰 MON_Chulpawn.GCMDS 2 Defender 32 117.6 32 115.7333333 40 1 55 -55 27.5 -165 315 0.085621174 540 14 53 64 29 21 17 0 1.5 4 0 9 6 0 0 0 0 0 0 0 0 0 0 1 1 1231 1395 30.775 34.875 1.1 4 X O X O 20000 2377 0 0 0 1000 80 80 80 140 146 2 20
27 타이티클 MON_Titug.GCMDS 2 Defender 32 100.8 32 268.8 30 1 76 -76 64 -80 230 0.117152517 634 15 57 68 32 22 20 0 1.1 5 0 10 6 0 0 0 0 0 0 0 0 0 0 1 1 1349 1487 33.725 37.175 0.8 5 X X X O 20000 2378 0 0 0 1000 80 80 80 140 145 2 20
28 다이어 스퀴럴 MON_Bronji.GCMDS 2 Defender 24 84 24 216 40 1 15 -20 70 -55 205 0.1313704 739 16 59 72 33 24 21 0 1.5 5 0 11 6 0 0 0 0 0 0 0 0 0 0 1 1 1496 1588 37.4 39.7 1 5 X O X O 20000 2379 0 0 0 1000 80 80 80 140 144 2 20
29 데드 하운드 MON_ZombieDog.GCMDS 2 Warrior 40 138 40 132 40 1 39 -39 19.5 -188.5 339 0.079571295 739 16 68 81 37 22 23 0 1.6 5 0 11 6 0 0 0 0 0 0 0 0 0 0 1 1 1412 1588 35.3 39.7 1.3 5 X O X O 20000 2380 0 0 0 1000 80 80 80 140 144 2 20
30 드로운드 원 MON_Zombie.GCMDS 2 Defender 60 160 60 160 60 1 25 -25 20 -35 185 0.145487999 739 16 59 72 33 24 21 0 2.3 5 0 11 6 0 0 0 0 0 0 0 0 0 0 1 1 1496 1588 37.4 39.7 1 5 X O X O 20000 2381 0 0 0 1000 80 80 80 140 144 2 20
31 타이틱 MON_Titug.GCMDS 2 Defender 32 112 32 288 30 1 95 -95 80 -100 250 0.107813954 855 17 61 74 34 25 23 0 1.1 5 0 11 7 0 0 0 0 0 0 0 0 0 0 1 1 1588 1631 39.7 40.775 1 5 X X X O 20000 2382 0 0 0 1000 80 80 80 140 143 2 20
32 스켈레톤 MON_Skeleton.GCMDS 2 Warrior 29 101 30 270 36 1 35 -50 25 -65 215 0.125289215 984 18 74 87 41 24 25 0 1.5 5 0 12 7 0 0 0 0 0 0 0 0 0 0 1 1 1625 1724 40.625 43.1 1 6 X O X O 20000 2383 0 0 0 1000 80 80 80 140 142 2 20
33 울프 펍 MON_Wolf.GCMDS 2 Defender 32 100.8 24 201.6 40 1 16 -16 36 -116 266 0.101349251 984 18 64 77 36 26 24 0 1.5 5 0 12 7 0 0 0 0 0 0 0 0 0 0 1 1 1736 1724 43.4 43.1 0.8 6 X O X O 20000 2384 0 0 0 1000 80 80 80 140 142 2 20
34 앰피비언 MON_Amphibian.GCMDS 2 Warrior 42 139.65 42 365.4 42 1 40.5 -49.5 180 -54 204 0.13201106 984 18 74 87 41 24 25 0 1.7 5 0 12 7 0 0 0 0 0 0 0 0 0 0 1 1 1625 1724 40.625 43.1 0.9 6 X O X O 20000 2385 0 0 0 1000 80 80 80 140 142 2 20
35 자이언트 데드 MON_Zombie.GCMDS 2 Defender 60 192 60 181.3333333 60 1 35 -35 28 -49 199 0.135310175 1125 19 68 81 39 28 26 0 2.3 5 0 13 7 0 0 0 0 0 0 0 0 0 0 1 1 1877 1826 46.925 45.65 1.4 6 X X X O 20000 2386 0 0 0 1000 80 80 80 140 141 2 20
36 기간틱 스파이더 MON_Spider.GCMDS 2 Warrior 32 134.4 32 126.9333333 30 1 112 -112 105 -126 276 0.097687745 1125 19 77 90 43 25 27 0 1.2 5 0 13 7 0 0 0 0 0 0 0 0 0 0 1 1 1758 1826 43.95 45.65 1.4 6 X X X O 20000 2387 0 0 0 1000 80 80 80 140 141 2 20
37 자이언트 그럽 MON_Bulte.GCMDS 2 Defender 16 144 16 120 35 1 60 -60 75 -75 225 0.119744979 1125 19 68 81 39 28 26 0 1.3 5 0 13 7 0 0 0 0 0 0 0 0 0 0 1 1 1877 1826 46.925 45.65 3 6 X X X O 20000 2388 0 0 0 1000 80 80 80 140 141 2 20
38 스켈레탈 워리어 MON_Skeleton_warrior.GCMDS 2 Defender 40 140 24 216 40 1 50 -65 60 -65 215 0.125289215 1280 20 68 83 40 30 27 0 1.5 5 0 13 8 0 0 0 0 0 0 0 0 0 0 1 1 2056 1920 51.4 48 1 6 X O X O 20000 2389 0 0 0 1000 80 80 80 140 140 2 20
39 소울 개더러 MON_Beholder.GCMDS 2 Defender 32 95.2 24 194.4 40 1 66.5 -84 80.5 -84 234 0.115157837 1449 21 70 85 40 30 27 0 1.5 5 0 14 8 0 0 0 0 0 0 0 0 0 0 1 1 2169 1963 54.225 49.075 0.7 7 X X X O 20000 2390 0 0 0 1000 80 80 80 140 139 2 20
40 울프 어태커 MON_Wolf_attacker.GCMDS 2 Warrior 32 112 24 216 40 1 20 -20 45 -140 290 0.092984162 1280 20 79 94 45 27 28 0 1.6 5 0 13 8 0 0 0 0 0 0 0 0 0 0 1 1 1912 1920 47.8 48 1 6 X O X O 20000 2391 0 0 0 1000 80 80 80 140 140 2 20
41 울프 마더 MON_Wolf.GCMDS 2 Defender 32 112 24 216 40 1 20 -20 45 -145 295 0.091412092 1449 21 70 85 40 30 27 0 1.5 5 0 14 8 0 0 0 0 0 0 0 0 0 0 1 1 2169 1963 54.225 49.075 1 7 X X X O 20000 2392 0 0 0 1000 80 80 80 140 139 2 20
42 앰피비언 헌터 MON_Amphibian.GCMDS 2 Warrior 42 154.35 42 390.6 42 1 49.5 -60.5 220 -66 216 0.124711848 1280 20 79 94 45 27 28 0 1.7 5 0 13 8 0 0 0 0 0 0 0 0 0 0 1 1 1912 1920 47.8 48 1.1 6 X O X O 20000 2393 0 0 0 1000 80 80 80 140 140 2 20
43 앰피비언 가디언 MON_Amphibian_sorcerer.GCMDS 2 Warrior 42 147 42 378 40 120 45 -55 200 -60 210 0.128257941 1449 21 81 96 46 27 29 0 1.6 5 0 14 8 0 0 0 0 0 0 0 0 0 0 1 1 2015 1963 50.375 49.075 1 7 X X X O 20000 2394 0 0 0 1000 80 80 80 140 139 2 20
44 캐리온 라바 MON_Carrion.GCMDS 2 Defender 24 75.6 24 201.6 32 1 36 -36 84 -204 354 0.076205556 1449 21 70 85 40 30 27 0 1.2 5 0 14 8 0 0 0 0 0 0 0 0 0 0 1 1 2169 1963 54.225 49.075 0.8 7 X X X O 20000 2395 0 0 0 1000 80 80 80 140 139 2 20
45 앤션트 솔져 MON_Skeleton_warrior.GCMDS 2 Defender 40 140 24 216 40 1 50 -65 60 -65 215 0.125289215 1632 22 73 88 43 32 29 0 1.5 5 0 15 9 0 0 0 0 0 0 0 0 0 0 1 1 2346 2068 58.65 51.7 1 7 X O X O 20000 2396 0 0 0 1000 80 80 80 140 138 2 20
46 앤션트 가드 MON_Skeleton_warrior.GCMDS 2 Defender 40 140 24 216 40 1 50 -65 60 -65 215 0.125289215 1830 23 77 92 45 33 30 0 1.5 5 0 15 9 0 0 0 0 0 0 0 0 0 0 1 1 2511 2162 62.775 54.05 1 7 X X X O 20000 2397 0 0 0 1000 80 80 80 140 137 2 20
47 리자드맨 스커미셔 MON_Lizardman.GCMDS 2 Warrior 30 99.75 30 261 60 1 49.5 -40.5 148.5 -72 222 0.121356149 1449 21 81 96 46 27 29 0 2.5 5 0 14 8 0 0 0 0 0 0 0 0 0 0 1 1 2015 1963 50.375 49.075 0.9 7 X X X O 20000 2398 0 0 0 1000 80 80 80 140 139 2 20
48 리자드맨 파이터 MON_Lizardman.GCMDS 2 Warrior 30 110.25 30 279 60 1 60.5 -49.5 181.5 -88 238 0.113229817 1632 22 87 102 49 28 31 0 2.5 5 0 15 9 0 0 0 0 0 0 0 0 0 0 1 1 2164 2068 54.1 51.7 1.1 7 X O X O 20000 2399 0 0 0 1000 80 80 80 140 138 2 20
49 리자드맨 엘리트 파이터 MON_Lizardman_warrior.GCMDS 2 Defender 32 117.6 24 223.2 45 1 99 -99 132 -88 238 0.113229817 1830 23 77 92 45 33 30 0 1.7 5 0 15 9 0 0 0 0 0 0 0 0 0 0 1 1 2511 2162 62.775 54.05 1.1 7 X X X O 20000 2400 0 0 0 1000 80 80 80 140 137 2 20
50 포레스트 스콜피온 mon_scorpion.GCMDS 2 Defender 32 84 32 240 35 1 75 -75 65 -90 240 0.112289772 1449 21 70 85 40 30 27 0 1.3 5 0 14 8 0 0 0 0 0 0 0 0 0 0 1 1 2169 1963 54.225 49.075 0.5 7 X X X O 20000 2401 0 0 0 1000 80 80 80 140 139 2 20
51 엘로이 파이터 MON_Eloyee.GCMDS 2 Warrior 30 105 30 270 61 1 70 -70 20 -70 220 0.122454513 1632 22 87 102 49 28 31 0 2.5 5 0 15 9 0 0 0 0 0 0 0 0 0 0 1 1 2164 2068 54.1 51.7 1 7 X O X O 20000 2402 0 0 0 1000 80 80 80 140 138 2 20
52 비거 엘로이 MON_Eloyee.GCMDS 2 Warrior 30 115.5 30 288 61 1 84 -84 24 -84 234 0.115157837 1830 23 90 105 51 30 33 0 2.5 5 0 15 9 0 0 0 0 0 0 0 0 0 0 1 1 2318 2162 57.95 54.05 1.2 7 X X X O 20000 2403 0 0 0 1000 80 80 80 140 137 2 20
53 비틀링 MON_Labstar.GCMDS 2 Defender 32 100.8 24 201.6 32 1 96 -52 32 -128 278 0.09698692 1449 21 70 85 40 30 27 0 1.2 5 0 14 8 0 0 0 0 0 0 0 0 0 0 1 1 2169 1963 54.225 49.075 0.8 7 X X X O 20000 2404 0 0 0 1000 80 80 80 140 139 2 20
54 자이언트 스퀴럴 MON_Daramji.GCMDS 2 Defender 12 48.3 12 118.8 40 1 19.5 -26 91 -71.5 222 0.121356149 1632 22 73 88 43 32 29 0 1.5 5 0 15 9 0 0 0 0 0 0 0 0 0 0 1 1 2346 2068 58.65 51.7 1.3 7 X O X O 20000 2405 0 0 0 1000 80 80 80 140 138 2 20
55 드레드 스퀴럴 MON_Bronji.GCMDS 2 Defender 24 96.6 24 237.6 40 1 19.5 -26 91 -71.5 222 0.121356149 1830 23 77 92 45 33 30 0 1.5 5 0 15 9 0 0 0 0 0 0 0 0 0 0 1 1 2511 2162 62.775 54.05 1.3 7 X X X O 20000 2406 0 0 0 1000 80 80 80 140 137 2 20
56 코볼드 래드 MON_Field.GCMDS 2 Defender 32 112 24 216 40 1 60 -75 110 -90 240 0.112289772 2044 24 79 96 47 35 32 0 1.5 5 0 16 10 0 0 0 0 0 0 0 0 0 0 1 1 2723 2256 68.075 56.4 1 8 X O X O 20000 2407 0 0 0 1000 80 80 80 140 136 2 20
57 코볼드 헌터 MON_Field.GCMDS 2 Defender 32 123.2 24 230.4 40 1 72 -90 132 -108 258 0.104481861 2274 25 81 98 47 35 32 0 1.5 5 0 17 10 0 0 0 0 0 0 0 0 0 0 1 1 2860 2312 71.5 57.8 1.2 8 X X X O 20000 2408 0 0 0 1000 80 80 80 140 135 2 20
58 킬러비틀 MON_Labstar.GCMDS 2 Defender 32 112 24 216 32 1 120 -65 40 -160 310 0.08699909 2044 24 79 96 47 35 32 0 1.2 5 0 16 10 0 0 0 0 0 0 0 0 0 0 1 1 2723 2256 68.075 56.4 1 8 X O X O 20000 2409 0 0 0 1000 80 80 80 140 136 2 20
59 킬러비틀 프라이빗 MON_Labstar.GCMDS 2 Defender 32 117.6 24 223.2 32 1 132 -71.5 44 -176 326 0.082738074 2274 25 81 98 47 35 32 0 1.2 5 0 17 10 0 0 0 0 0 0 0 0 0 0 1 1 2860 2312 71.5 57.8 1.1 8 X X X O 20000 2410 0 0 0 1000 80 80 80 140 135 2 20
60 리자드맨 로얄 가드 MON_Lizardman_warrior.GCMDS 2 Defender 32 112 24 216 45 1 90 -90 120 -80 230 0.117152517 2044 24 79 96 47 35 32 0 1.7 5 0 16 10 0 0 0 0 0 0 0 0 0 0 1 1 2723 2256 68.075 56.4 1 8 X O X O 20000 2411 0 0 0 1000 80 80 80 140 136 2 20
61 오크 스카우트 MON_Orc.GCMDS 2 Warrior 32 106.4 24 208.8 40 1 40.5 -45 18 -36 186 0.144710663 2044 24 92 109 53 31 35 0 1.6 5 0 16 10 0 0 0 0 0 0 0 0 0 0 1 1 2498 2256 62.45 56.4 0.9 8 X O X O 20000 2412 0 0 0 1000 80 80 80 140 136 2 20
62 나이트 울프 MON_NightWolf_attacker.GCMDS 2 Warrior 32 112 24 216 40 1 25 -25 35 -150 300 0.089892233 2274 25 95 112 54 32 35 0 1.6 5 0 17 10 0 0 0 0 0 0 0 0 0 0 1 1 2621 2312 65.525 57.8 1 8 X X X O 20000 2413 0 0 0 1000 80 80 80 140 135 2 20
63 헌티드 MON_Skeleton.GCMDS 2 Warrior 29 116.15 30 297 36 1 45.5 -65 32.5 -84.5 235 0.114669715 2274 25 95 112 54 32 35 0 1.5 5 0 17 10 0 0 0 0 0 0 0 0 0 0 1 1 2621 2312 65.525 57.8 1.3 8 X X X O 20000 2414 0 0 0 1000 80 80 80 140 135 2 20
64 캐리온 크롤러 MON_Carrion.GCMDS 2 Defender 24 84 24 216 32 1 45 -45 105 -255 405 0.066622823 2520 26 84 101 50 37 35 0 1.2 5 0 17 11 0 0 0 0 0 0 0 0 0 0 1 1 3067 2407 76.675 60.175 1 8 X O X O 20000 2415 0 0 0 1000 80 80 80 140 134 2 20
65 플로팅 레이 MON_Beholder.GCMDS 2 Defender 32 112 24 216 40 1 95 -120 115 -120 270 0.099852246 2784 27 88 105 52 38 36 0 1.5 5 0 18 11 0 0 0 0 0 0 0 0 0 0 1 1 3259 2501 81.475 62.525 1 9 X X X O 20000 2416 0 0 0 1000 80 80 80 140 133 2 20
66 코볼드 머셔너리 MON_Field.GCMDS 2 Defender 32 117.6 24 223.2 40 1 66 -82.5 121 -99 249 0.108245443 2520 26 84 101 50 37 35 0 1.5 5 0 17 11 0 0 0 0 0 0 0 0 0 0 1 1 3067 2407 76.675 60.175 1.1 8 X O X O 20000 2417 0 0 0 1000 80 80 80 140 134 2 20
67 킬러비틀 로드 MON_Labstar.GCMDS 2 Defender 32 128.8 24 237.6 32 1 156 -84.5 52 -208 358 0.075355537 2784 27 88 105 52 38 36 0 1.2 5 0 18 11 0 0 0 0 0 0 0 0 0 0 1 1 3259 2501 81.475 62.525 1.3 9 X X X O 20000 2418 0 0 0 1000 80 80 80 140 133 2 20
68 미믹 mon_mimic.GCMDS 2 Defender 12 42 12 108 35 1 25 -25 15 -10 160 0.168043444 2784 27 88 105 52 38 36 0 1.3 5 0 18 11 0 0 0 0 0 0 0 0 0 0 1 1 3259 2501 81.475 62.525 1 9 X X X O 20000 2419 0 0 0 1000 80 80 80 140 133 2 20
69 트라이벌 헌터 MON_SsangNom.GCMDS 2 Defender 32 100.8 24 201.6 40 1 84 -120 52 -128 278 0.09698692 2274 25 81 98 47 35 32 0 1.5 5 0 17 10 0 0 0 0 0 0 0 0 0 0 1 1 2860 2312 71.5 57.8 0.8 8 X X X O 20000 2420 0 0 0 1000 80 80 80 140 135 2 20
70 트라이벌 솔져 MON_Tribal_warrior.GCMDS 2 Warrior 32 112 24 216 42 1 80 -130 55 -130 280 0.096296065 2520 26 98 115 57 33 37 0 1.7 5 0 17 11 0 0 0 0 0 0 0 0 0 0 1 1 2793 2407 69.825 60.175 1 8 X O X O 20000 2421 0 0 0 1000 80 80 80 140 134 2 20
71 트라이벌 가드 MON_SsangNom.GCMDS 2 Defender 32 112 24 216 40 1 105 -150 65 -160 310 0.08699909 2784 27 88 105 52 38 36 0 1.5 5 0 18 11 0 0 0 0 0 0 0 0 0 0 1 1 3259 2501 81.475 62.525 1 9 X X X O 20000 2422 0 0 0 1000 80 80 80 140 133 2 20
72 오크 가드 MON_Orc_defender.GCMDS 2 Defender 32 112 24 216 40 1 60 -50 25 -130 280 0.096296065 2784 27 88 105 52 38 36 0 1.5 5 0 18 11 0 0 0 0 0 0 0 0 0 0 1 1 3259 2501 81.475 62.525 1 9 X X X O 20000 2423 0 0 0 1000 80 80 80 140 133 2 20
73 워킹 데드 MON_Skeleton.GCMDS 2 Warrior 29 106.05 30 279 36 1 38.5 -55 27.5 -71.5 222 0.121356149 3065 28 104 123 61 36 40 0 1.5 5 0 19 11 0 0 0 0 0 0 0 0 0 0 1 1 3178 2610 79.45 65.25 1.1 9 X O X O 20000 2424 0 0 0 1000 80 80 80 140 132 2 20
74 앤션트 로얄 가드 MON_Skeleton_warrior.GCMDS 2 Defender 40 147 24 223.2 40 1 55 -71.5 66 -71.5 222 0.121356149 3365 29 90 109 54 41 38 0 1.5 5 0 19 12 0 0 0 0 0 0 0 0 0 0 1 1 3669 2655 91.725 66.375 1.1 9 X X X O 20000 2425 0 0 0 1000 80 80 80 140 131 2 20
75 코볼드 파이터 MON_Field.GCMDS 2 Defender 32 128.8 24 237.6 40 1 78 -97.5 143 -117 267 0.100970814 3065 28 88 107 53 40 37 0 1.5 5 0 19 11 0 0 0 0 0 0 0 0 0 0 1 1 3508 2610 87.7 65.25 1.3 9 X O X O 20000 2426 0 0 0 1000 80 80 80 140 132 2 20
76 세미 고르곤 MON_Gorgon_Female.GCMDS 2 Warrior 33 103.5 15 126 30 1 68 -68 88 -184 334 0.080760198 3365 29 106 125 61 36 40 0 1.2 5 0 19 12 0 0 0 0 0 0 0 0 0 0 1 1 3323 2655 83.075 66.375 0.8 9 X X X O 20000 2427 0 0 0 1000 80 80 80 140 131 2 20
77 트라이벌 워리어 MON_Tribal_warrior.GCMDS 2 Warrior 32 112 24 216 42 1 80 -130 55 -130 280 0.096296065 3065 28 104 123 61 36 40 0 1.7 5 0 19 11 0 0 0 0 0 0 0 0 0 0 1 1 3178 2610 79.45 65.25 1 9 X O X O 20000 2428 0 0 0 1000 80 80 80 140 132 2 20
78 트라이벌 챔피온 MON_SsangNom.GCMDS 2 Defender 32 112 24 216 40 1 105 -150 65 -160 310 0.08699909 3365 29 90 109 54 41 38 0 1.5 5 0 19 12 0 0 0 0 0 0 0 0 0 0 1 1 3669 2655 91.725 66.375 1 9 X X X O 20000 2429 0 0 0 1000 80 80 80 140 131 2 20
79 오크 솔져 MON_Orc.GCMDS 2 Warrior 32 117.6 24 223.2 40 1 49.5 -55 22 -44 194 0.138777932 3065 28 104 123 61 36 40 0 1.6 5 0 19 11 0 0 0 0 0 0 0 0 0 0 1 1 3178 2610 79.45 65.25 1.1 9 X O X O 20000 2430 0 0 0 1000 80 80 80 140 132 2 20
80 오크 엘리트 가드 MON_Orc_defender.GCMDS 2 Defender 32 117.6 24 223.2 40 1 66 -55 27.5 -143 293 0.092034505 3365 29 90 109 54 41 38 0 1.5 5 0 19 12 0 0 0 0 0 0 0 0 0 0 1 1 3669 2655 91.725 66.375 1.1 9 X X X O 20000 2431 0 0 0 1000 80 80 80 140 131 2 20
81 골렘 MON_Golem.GCMDS 2 Defender 30 99.75 30 261 30 1 85.5 -85.5 0 -148.5 299 0.090192153 3685 30 93 112 56 42 40 0 1.1 6 0 20 12 0 0 0 0 0 0 0 0 0 0 1 1 3910 2750 97.75 68.75 0.9 10 X O X O 20000 2432 0 0 0 1000 80 80 80 140 130 2 20
82 벗쳐 mon_sloter.GCMDS 2 Defender 32 100.8 24 201.6 35 1 56 -56 20 -100 250 0.107813954 4024 31 97 116 59 44 42 0 1.3 6 0 21 12 0 0 0 0 0 0 0 0 0 0 1 1 4131 2860 103.275 71.5 0.8 10 X O X O 20000 2433 0 0 0 1000 80 80 80 140 129 2 20
83 트롤 머셔너리 MON_Troll.GCMDS 2 Defender 40 126 40 336 40 1 60 -52 40 -60 210 0.128257941 3685 30 93 112 56 42 40 0 1.5 6 0 20 12 0 0 0 0 0 0 0 0 0 0 1 1 3910 2750 97.75 68.75 0.8 10 X O X O 20000 2434 0 0 0 1000 80 80 80 140 130 2 20
84 오크 엘리트 솔져 MON_Orc.GCMDS 2 Warrior 32 123.2 24 230.4 40 1 54 -60 24 -48 198 0.135989831 4024 31 115 134 67 39 45 0 1.6 6 0 21 12 0 0 0 0 0 0 0 0 0 0 1 1 3720 2860 93 71.5 1.2 10 X O X O 20000 2435 0 0 0 1000 80 80 80 140 129 2 20
85 트레인드 나이트 울프 MON_NightWolf.GCMDS 2 Defender 32 112 24 216 40 1 25 -25 35 -150 300 0.089892233 4382 32 99 120 60 46 43 0 1.5 6 0 21 13 0 0 0 0 0 0 0 0 0 0 1 1 4419 2956 110.475 73.9 1 10 X O X O 20000 2436 0 0 0 1000 80 80 80 140 128 2 20
86 오크 워치프 MON_Orc_defender.GCMDS 2 Defender 32 123.2 24 230.4 40 1 72 -60 30 -156 306 0.088133734 4698 33 101 122 61 46 44 0 1.5 6 0 22 13 0 0 0 0 0 0 0 0 0 0 1 1 4607 3001 115.175 75.025 1.2 11 X X X O 20000 2437 0 0 0 1000 80 80 80 140 127 2 20
87 앤션트 프라이빗 MON_Skeleton.GCMDS 2 Warrior 29 111.1 30 288 36 1 42 -60 30 -78 228 0.118175941 4024 31 115 134 67 39 45 0 1.5 6 0 21 12 0 0 0 0 0 0 0 0 0 0 1 1 3720 2860 93 71.5 1.2 10 X O X O 20000 2438 0 0 0 1000 80 80 80 140 129 2 20
88 앤션트 제너럴 MON_Skeleton_warrior.GCMDS 2 Defender 40 154 24 230.4 40 1 60 -78 72 -78 228 0.118175941 4382 32 99 120 60 46 43 0 1.5 6 0 21 13 0 0 0 0 0 0 0 0 0 0 1 1 4419 2956 110.475 73.9 1.2 10 X O X O 20000 2439 0 0 0 1000 80 80 80 140 128 2 20
89 데스 콜러 MON_Beholder.GCMDS 2 Defender 32 112 24 216 40 1 95 -120 115 -120 270 0.099852246 4698 33 101 122 61 46 44 0 1.5 6 0 22 13 0 0 0 0 0 0 0 0 0 0 1 1 4607 3001 115.175 75.025 1 11 X X X O 20000 2440 0 0 0 1000 80 80 80 140 127 2 20
90 트롤 파이터 MON_Troll.GCMDS 2 Defender 40 140 40 360 40 1 75 -65 50 -75 225 0.119744979 4935 34 104 125 63 48 46 0 1.5 6 0 23 14 0 0 0 0 0 0 0 0 0 0 1 1 4884 3114 122.1 77.85 1 11 X O X O 20000 2441 0 0 0 1000 80 80 80 140 126 2 20
91 트롤 가드 MON_Troll_warrior.GCMDS 2 Warrior 40 140 40 360 40 1 100 -80 65 -85 235 0.114669715 5177 35 126 147 74 44 51 0 1.6 6 0 23 14 0 0 0 0 0 0 0 0 0 0 1 1 4575 3210 114.375 80.25 1 11 X O X O 20000 2442 0 0 0 1000 80 80 80 140 125 2 20
92 리빙락 MON_Golem.GCMDS 2 Defender 30 110.25 30 279 30 1 104.5 -104.5 0 -181.5 332 0.081245757 4935 34 104 125 63 48 46 0 1.1 6 0 23 14 0 0 0 0 0 0 0 0 0 0 1 1 4884 3114 122.1 77.85 1.1 11 X O X O 20000 2443 0 0 0 1000 80 80 80 140 126 2 20
93 스톤 자이언트 MON_Golem.GCMDS 2 Defender 30 126 30 306 30 1 133 -133 0 -231 381 0.070813488 5177 35 108 129 66 49 48 0 1.1 6 0 23 14 0 0 0 0 0 0 0 0 0 0 1 1 5135 3210 128.375 80.25 1.4 11 X O X O 20000 2444 0 0 0 1000 80 80 80 140 125 2 20
94 다이어 울프 어태커 MON_Wolf_attacker.GCMDS 2 Warrior 32 140 24 252 40 1 30 -30 67.5 -210 360 0.074937594 5425 36 128 151 76 45 52 0 1.6 6 0 24 15 0 0 0 0 0 0 0 0 0 0 1 1 4845 3306 121.125 82.65 1.5 12 X X X O 20000 2445 0 0 0 1000 80 80 80 140 124 2 20
95 다이어 울프 마더 MON_Wolf.GCMDS 2 Defender 32 140 24 252 40 1 30 -30 67.5 -217.5 368 0.073311137 5679 37 110 133 67 51 49 0 1.5 6 0 25 15 0 0 0 0 0 0 0 0 0 0 1 1 5682 3370 142.05 84.25 1.5 12 X O X O 20000 2446 0 0 0 1000 80 80 80 140 123 2 20
96 슬로터 mon_sloter.GCMDS 2 Defender 32 106.4 24 208.8 35 1 63 -63 22.5 -112.5 263 0.102501751 5679 37 110 133 67 51 49 0 1.3 6 0 25 15 0 0 0 0 0 0 0 0 0 0 1 1 5682 3370 142.05 84.25 0.9 12 X O X O 20000 2447 0 0 0 1000 80 80 80 140 123 2 20
97 자이언트 트롤 MON_Troll.GCMDS 2 Defender 40 161 40 396 40 1 97.5 -84.5 65 -97.5 248 0.108680394 5938 38 113 136 70 53 51 0 1.5 6 0 25 16 0 0 0 0 0 0 0 0 0 0 1 1 5996 3467 149.9 86.675 1.3 12 X O X O 20000 2448 0 0 0 1000 80 80 80 140 122 2 20
98 자이언트 트롤 치프 MON_Troll_warrior.GCMDS 2 Warrior 40 161 40 396 40 1 130 -104 84.5 -110.5 261 0.103284734 6203 39 139 162 82 48 56 0 1.6 6 0 26 16 0 0 0 0 0 0 0 0 0 0 1 1 5540 3563 138.5 89.075 1.3 13 X X X O 20000 2449 0 0 0 1000 80 80 80 140 121 2 20
99 고르곤 펍 MON_Gorgon.GCMDS 2 Defender 33 115 15 135 30 1 85 -85 110 -230 380 0.070999561 6203 39 117 140 72 54 52 0 1.1 6 0 26 16 0 0 0 0 0 0 0 0 0 0 1 1 6279 3563 156.975 89.075 1 13 X X X O 20000 2450 0 0 0 1000 80 80 80 140 121 2 20
100 고르곤 피메일 MON_Gorgon_Female.GCMDS 2 Warrior 33 126.5 15 144 30 1 102 -102 132 -276 426 0.063342603 6474 40 142 167 85 50 58 0 1.2 6 0 27 16 0 0 0 0 0 0 0 0 0 0 1 1 5845 3680 146.125 92 1.2 13 X O X O 20000 2451 0 0 0 1000 80 80 80 140 120 2 20
101 고르곤 메일 MON_Gorgon.GCMDS 2 Defender 33 126.5 15 144 30 1 102 -102 132 -276 426 0.063342603 6750 41 121 146 74 57 54 0 1.1 6 0 27 17 0 0 0 0 0 0 0 0 0 0 1 1 6903 3727 172.575 93.175 1.2 13 X O X O 30000 2452 0 0 0 1000 80 80 80 140 119 2 20
102 디케이드 MON_Skeleton.GCMDS 2 Warrior 29 116.15 30 297 36 1 45.5 -65 32.5 -84.5 235 0.114669715 6203 39 139 162 82 48 56 0 1.5 6 0 26 16 0 0 0 0 0 0 0 0 0 0 1 1 5540 3563 138.5 89.075 1.3 13 X X X O 20000 2453 0 0 0 1000 80 80 80 140 121 2 20
103 러스티드 MON_Skeleton_warrior.GCMDS 2 Defender 40 161 24 237.6 40 1 65 -84.5 78 -84.5 235 0.114669715 6474 40 119 144 74 56 54 0 1.5 6 0 27 16 0 0 0 0 0 0 0 0 0 0 1 1 6656 3680 166.4 92 1.3 13 X O X O 20000 2454 0 0 0 1000 80 80 80 140 120 2 20
104 안틱 가디언 MON_Yang.GCMDS 2 Defender 56 215.9 56 228.6 50 1 189 -112 122.5 -105 255 0.105707017 6750 41 121 146 74 57 54 0 1.9 6 0 27 17 0 0 0 0 0 0 0 0 0 0 1 1 6903 3727 172.575 93.175 0.7 13 X O X O 30000 2455 0 0 0 1000 80 80 80 140 119 2 20
105 스몰 뱃 MON_Bat.GCMDS 2 Warrior 15 46.8 15 126 24 1 24 -24 0 -64 164 0.163977801 15 1 17 22 2 3 0 0 0.5 4 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 186 340 4.65 8.5 0.8 0 X X X O 15000 2456 0 0 0 1000 80 80 80 140 159 2 20
106 락터틀링 mon_rockturtle.GCMDS 2 Defender 40 112 24 187.2 40 1 78 -78 54 -42 142 0.189132143 17 2 21 26 6 5 2 0 0.8 4 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 245 431 6.125 10.775 0.6 0 X X X O 15000 2457 0 0 0 1000 80 80 80 140 158 2 20
107 락 스콜피온 mon_scorpion.GCMDS 2 Defender 32 89.6 32 249.6 35 1 90 -90 78 -108 208 0.129485101 34 4 25 32 11 8 4 0 0.8 4 0 3 1 0 0 0 0 0 0 0 0 0 0 1 1 374 614 9.35 15.35 0.6 1 X X X O 15000 2458 0 0 0 1000 80 80 80 140 156 2 20
108 스컬 뱃 MON_Skullbat.GCMDS 2 Warrior 33 115 33 297 42 1 85 -135 90 -35 135 0.198827298 49 5 28 35 13 8 5 0 1.1 4 0 3 2 0 0 0 0 0 0 0 0 0 0 1 1 414 655 10.35 16.375 1 1 X X X O 15000 2459 0 0 0 1000 80 80 80 140 155 2 20
109 펑거스네이크 mon_fungus.GCMDS 2 Warrior 30 105 30 270 30 1 40 -50 30 -30 130 0.206380105 69 6 31 38 14 10 6 0 0.9 4 0 4 2 0 0 0 0 0 0 0 0 0 0 1 1 486 746 12.15 18.65 1 2 X X X O 15000 2460 0 0 0 1000 80 80 80 140 154 2 20
110 티클링 MON_Titug.GCMDS 2 Defender 32 89.6 32 249.6 30 1 57 -57 48 -60 160 0.168043444 95 7 34 41 17 11 8 0 0.8 4 0 5 2 0 0 0 0 0 0 0 0 0 0 1 1 568 840 14.2 21 0.6 2 X X X O 15000 2461 0 0 0 1000 80 80 80 140 153 2 20
111 락 터틀 mon_rockturtle.GCMDS 2 Defender 40 126 24 201.6 40 1 104 -104 72 -56 156 0.172314908 128 8 34 43 18 13 9 0 1.2 4 0 5 3 0 0 0 0 0 0 0 0 0 0 1 1 655 932 16.375 23.3 0.8 2 X X X O 15000 2462 0 0 0 1000 80 80 80 140 152 2 20
112 스트라이들링 mon_unmon.GCMDS 2 Warrior 20 70 20 180 24 1 25 -25 40 -40 140 0.191804878 168 9 37 46 19 13 9 0 0.9 4 0 6 3 0 0 0 0 0 0 0 0 0 0 1 1 709 973 17.725 24.325 1 3 X X X O 15000 2463 0 0 0 1000 80 80 80 140 151 2 20
113 랜드 스트라이더 mon_unmon.GCMDS 2 Warrior 20 105 20 240 24 1 50 -50 80 -80 230 0.117152517 263 10 49 58 25 14 13 0 1 4 0 7 4 0 0 0 0 0 0 0 0 0 0 1 1 793 1070 19.825 26.75 2 3 X X X O 15000 2464 0 0 0 1000 80 80 80 140 150 2 20
114 헝거 쿠루민 mon_curumin.GCMDS 2 Warrior 32 106.4 24 208.8 30 1 54 -45 67.5 -81 231 0.116647409 319 11 52 61 27 16 15 0 1.2 4 0 7 4 0 0 0 0 0 0 0 0 0 0 1 1 887 1162 22.175 29.05 0.9 3 X X X O 20000 2465 0 0 0 1000 80 80 80 140 149 2 20
115 락키터 mon_rockturtle.GCMDS 2 Defender 40 140 24 216 40 1 130 -130 90 -70 220 0.122454513 319 11 48 57 25 17 14 0 1.5 4 0 7 4 0 0 0 0 0 0 0 0 0 0 1 1 917 1162 22.925 29.05 1 3 X X X O 20000 2466 0 0 0 1000 80 80 80 140 149 2 20
116 포이즈너스 mon_venom.GCMDS 2 Defender 32 112 24 216 40 1 40 -40 170 -80 230 0.117152517 382 12 48 59 26 19 15 0 1.5 4 0 8 5 0 0 0 0 0 0 0 0 0 0 1 1 1035 1254 25.875 31.35 1 4 X O X O 20000 2467 0 0 0 1000 80 80 80 140 148 2 20
117 디셈바우어러 mon_unmon.GCMDS 2 Warrior 20 122.5 20 270 24 1 62.5 -62.5 100 -100 250 0.107813954 456 13 57 68 30 18 17 0 1 4 0 9 5 0 0 0 0 0 0 0 0 0 0 1 1 1062 1302 26.55 32.55 2.5 4 X X X O 20000 2468 0 0 0 1000 80 80 80 140 147 2 20
118 락 시클링 mon_un.GCMDS 2 Defender 32 100.8 16 134.4 30 1 48 -48 72 -56 156 0.172314908 168 9 37 46 19 13 9 0 1 4 0 6 3 0 0 0 0 0 0 0 0 0 0 1 1 709 973 17.725 24.325 0.8 3 X X X O 15000 2469 0 0 0 1000 80 80 80 140 151 2 20
119 락 시클 mon_un.GCMDS 2 Defender 32 112 16 144 30 1 60 -60 90 -70 220 0.122454513 263 10 44 53 23 16 13 0 1.1 4 0 7 4 0 0 0 0 0 0 0 0 0 0 1 1 820 1070 20.5 26.75 1 3 X X X O 15000 2470 0 0 0 1000 80 80 80 140 150 2 20
120 샌드 시클링 mon_un.GCMDS 2 Defender 32 100.8 16 134.4 30 1 48 -48 72 -56 156 0.172314908 168 9 37 46 19 13 9 0 1 4 0 6 3 0 0 0 0 0 0 0 0 0 0 1 1 709 973 17.725 24.325 0.8 3 X X X O 15000 2471 0 0 0 1000 80 80 80 140 151 2 20
121 샌드 시클 mon_un.GCMDS 2 Defender 32 112 16 144 30 1 60 -60 90 -70 220 0.122454513 263 10 44 53 23 16 13 0 1.1 4 0 7 4 0 0 0 0 0 0 0 0 0 0 1 1 820 1070 20.5 26.75 1 3 X X X O 15000 2472 0 0 0 1000 80 80 80 140 150 2 20
122 락카이트 mon_rockturtle.GCMDS 2 Defender 40 147 24 223.2 40 1 143 -143 99 -77 227 0.118694375 456 13 50 61 27 19 16 0 1.5 4 0 9 5 0 0 0 0 0 0 0 0 0 0 1 1 1108 1302 27.7 32.55 1.1 4 X X X O 20000 2473 0 0 0 1000 80 80 80 140 147 2 20
123 스웜프 포이즌 mon_fungus.GCMDS 2 Warrior 30 120.75 30 297 30 1 52 -65 39 -39 189 0.14242756 456 13 57 68 30 18 17 0 1.2 4 0 9 5 0 0 0 0 0 0 0 0 0 0 1 1 1062 1302 26.55 32.55 1.3 4 X X X O 20000 2474 0 0 0 1000 80 80 80 140 147 2 20
124 쿠루민 해글러 mon_curumin.GCMDS 2 Warrior 32 112 24 216 30 1 60 -50 75 -90 240 0.112289772 540 14 62 73 33 19 19 0 1.2 4 0 9 6 0 0 0 0 0 0 0 0 0 0 1 1 1170 1395 29.25 34.875 1 4 X O X O 20000 2475 0 0 0 1000 80 80 80 140 146 2 20
125 퀄프 스카우트 mon_querf.GCMDS 2 Defender 32 106.4 24 208.8 35 1 81 -99 31.5 -81 231 0.116647409 634 15 57 68 32 22 20 0 1.3 5 0 10 6 0 0 0 0 0 0 0 0 0 0 1 1 1349 1487 33.725 37.175 0.9 5 X X X O 20000 2476 0 0 0 1000 80 80 80 140 145 2 20
126 슬래셔 mon_specter.GCMDS 2 Warrior 24 84 24 216 40 1 90 -90 100 -130 280 0.096296065 739 16 68 81 37 22 23 0 1.6 5 0 11 6 0 0 0 0 0 0 0 0 0 0 1 1 1412 1588 35.3 39.7 1 5 X O X O 20000 2477 0 0 0 1000 80 80 80 140 144 2 20
127 퀄프 파이터 mon_querf.GCMDS 2 Defender 32 112 24 216 35 1 90 -110 35 -90 240 0.112289772 739 16 59 72 33 24 21 0 1.3 5 0 11 6 0 0 0 0 0 0 0 0 0 0 1 1 1496 1588 37.4 39.7 1 5 X O X O 20000 2478 0 0 0 1000 80 80 80 140 144 2 20
128 데이 랜턴 mon_agu.gcmds 2 Warrior 32 112 24 216 30 1 85 -85 75 -40 190 0.141682403 855 17 70 83 39 22 24 0 1.2 5 0 11 7 0 0 0 0 0 0 0 0 0 0 1 1 1497 1631 37.425 40.775 1 5 X X X O 20000 2479 0 0 0 1000 80 80 80 140 143 2 20
129 퀄프 치프 mon_querf.GCMDS 2 Defender 32 117.6 24 223.2 35 1 99 -121 38.5 -99 249 0.108245443 855 17 61 74 34 25 23 0 1.3 5 0 11 7 0 0 0 0 0 0 0 0 0 0 1 1 1588 1631 39.7 40.775 1.1 5 X X X O 20000 2480 0 0 0 1000 80 80 80 140 143 2 20
130 앵글러 mon_agu.gcmds 2 Warrior 32 168 24 288 30 1 170 -170 150 -80 230 0.117152517 1125 19 77 90 43 25 27 0 1.2 5 0 13 7 0 0 0 0 0 0 0 0 0 0 1 1 1758 1826 43.95 45.65 2 6 X X X O 20000 2481 0 0 0 1000 80 80 80 140 141 2 20
131 오스트리사우르스 mon_ostrisaur.GCMDS 2 Defender 32 112 24 216 30 1 35 -35 140 -80 230 0.117152517 984 18 64 77 36 26 24 0 1.1 5 0 12 7 0 0 0 0 0 0 0 0 0 0 1 1 1736 1724 43.4 43.1 1 6 X O X O 20000 2482 0 0 0 1000 80 80 80 140 142 2 20
132 데드아칸 mon_a_zombie.gcmds 2 Defender 48 168 48 432 40 1 50 -45 50 -25 175 0.153745049 1280 20 68 83 40 30 27 0 1.5 5 0 13 8 0 0 0 0 0 0 0 0 0 0 1 1 2056 1920 51.4 48 1 6 X O X O 20000 2483 0 0 0 1000 80 80 80 140 140 2 20
133 스피스 mon_spis.gcmds 2 Defender 15 52 15 135 30 1 140 -140 180 -100 250 0.107813954 1280 20 68 83 40 30 27 0 1.1 5 0 13 8 0 0 0 0 0 0 0 0 0 0 1 1 2056 1920 51.4 48 1 6 X O X O 20000 2484 0 0 0 1000 80 80 80 140 140 2 20
134 베놈 펍 mon_venom.GCMDS 2 Defender 32 112 24 216 40 1 40 -40 170 -80 230 0.117152517 1449 21 70 85 40 30 27 0 1.5 5 0 14 8 0 0 0 0 0 0 0 0 0 0 1 1 2169 1963 54.225 49.075 1 7 X X X O 20000 2485 0 0 0 1000 80 80 80 140 139 2 20
135 레한 드래곤플라이 MON_Pawnpawn.GCMDS 2 Defender 24 84 24 216 35 1 75 -60 10 -60 210 0.128257941 1632 22 73 88 43 32 29 0 1.3 5 0 15 9 0 0 0 0 0 0 0 0 0 0 1 1 2346 2068 58.65 51.7 1 7 X O X O 20000 2486 0 0 0 1000 80 80 80 140 138 2 20
136 러프 데드 mon_a_zombie.gcmds 2 Defender 48 184.8 48 460.8 40 1 60 -54 60 -30 180 0.149502979 1632 22 73 88 43 32 29 0 1.5 5 0 15 9 0 0 0 0 0 0 0 0 0 0 1 1 2346 2068 58.65 51.7 1.2 7 X O X O 20000 2487 0 0 0 1000 80 80 80 140 138 2 20
137 스펙터 mon_specter.GCMDS 2 Warrior 24 84 24 216 40 1 90 -90 100 -130 280 0.096296065 1830 23 90 105 51 30 33 0 1.6 5 0 15 9 0 0 0 0 0 0 0 0 0 0 1 1 2318 2162 57.95 54.05 1 7 X X X O 20000 2488 0 0 0 1000 80 80 80 140 137 2 20
138 자이언트펑거스 mon_fungus.GCMDS 2 Warrior 30 131.25 30 315 30 1 60 -75 45 -45 195 0.138070273 1632 22 87 102 49 28 31 0 1.2 5 0 15 9 0 0 0 0 0 0 0 0 0 0 1 1 2164 2068 54.1 51.7 1.5 7 X O X O 20000 2489 0 0 0 1000 80 80 80 140 138 2 20
139 글로비 mon_globus.GCMDS 2 Defender 40 105 20 150 32 1 70 -60 175 -110 260 0.103680721 1830 23 77 92 45 33 30 0 1.2 5 0 15 9 0 0 0 0 0 0 0 0 0 0 1 1 2511 2162 62.775 54.05 0.5 7 X X X O 20000 2490 0 0 0 1000 80 80 80 140 137 2 20
140 코르케바인 스커미셔 mon_korkebine.GCMDS 2 Defender 32 112 24 216 40 1 55 -75 20 -100 250 0.107813954 2274 25 81 98 47 35 32 0 1.5 5 0 17 10 0 0 0 0 0 0 0 0 0 0 1 1 2860 2312 71.5 57.8 1 8 X X X O 20000 2491 0 0 0 1000 80 80 80 140 135 2 20
141 가이거 스파이서 mon_spis.gcmds 2 Defender 15 57.2 15 144 30 1 168 -168 216 -120 270 0.099852246 2044 24 79 96 47 35 32 0 1.1 5 0 16 10 0 0 0 0 0 0 0 0 0 0 1 1 2723 2256 68.075 56.4 1.2 8 X O X O 20000 2492 0 0 0 1000 80 80 80 140 136 2 20
142 워울프 mon_wolfgirl.GCMDS 2 Warrior 32 112 12 156 24 1 60 -80 80 -70 220 0.122454513 2044 24 92 109 53 31 35 0 1 5 0 16 10 0 0 0 0 0 0 0 0 0 0 1 1 2498 2256 62.45 56.4 1 8 X O X O 20000 2493 0 0 0 1000 80 80 80 140 136 2 20
143 라키톱스 mon_ceratops.GCMDS 2 Defender 40 105 32 240 40 1 57.5 -57.5 160 -135 285 0.094611177 2274 25 81 98 47 35 32 0 1.5 5 0 17 10 0 0 0 0 0 0 0 0 0 0 1 1 2860 2312 71.5 57.8 0.5 8 X X X O 20000 2494 0 0 0 1000 80 80 80 140 135 2 20
144 베놈 mon_venom.GCMDS 2 Defender 32 123.2 24 230.4 40 1 48 -48 204 -96 246 0.109560848 1830 23 77 92 45 33 30 0 1.5 5 0 15 9 0 0 0 0 0 0 0 0 0 0 1 1 2511 2162 62.775 54.05 1.2 7 X X X O 20000 2495 0 0 0 1000 80 80 80 140 137 2 20
145 코르케바인 워리어 mon_korkebine.GCMDS 2 Defender 32 117.6 24 223.2 40 1 60.5 -82.5 22 -110 260 0.103680721 2520 26 84 101 50 37 35 0 1.5 5 0 17 11 0 0 0 0 0 0 0 0 0 0 1 1 3067 2407 76.675 60.175 1.1 8 X O X O 20000 2496 0 0 0 1000 80 80 80 140 134 2 20
146 범핑리자드 mon_iguanodon.GCMDS 2 Defender 32 95.2 24 194.4 35 1 59.5 -105 189 -126 276 0.097687745 2520 26 84 101 50 37 35 0 1.3 5 0 17 11 0 0 0 0 0 0 0 0 0 0 1 1 3067 2407 76.675 60.175 0.7 8 X O X O 20000 2497 0 0 0 1000 80 80 80 140 134 2 20
147 앰버 시클 mon_un.GCMDS 2 Defender 32 140 16 168 30 1 90 -90 135 -105 255 0.105707017 2784 27 88 105 52 38 36 0 1.1 5 0 18 11 0 0 0 0 0 0 0 0 0 0 1 1 3259 2501 81.475 62.525 1.5 9 X X X O 20000 2498 0 0 0 1000 80 80 80 140 133 2 20
148 안틱 코볼드 MON_Field.GCMDS 2 Defender 32 117.6 24 223.2 40 1 66 -82.5 121 -99 249 0.108245443 2520 26 84 101 50 37 35 0 1.5 5 0 17 11 0 0 0 0 0 0 0 0 0 0 1 1 3067 2407 76.675 60.175 1.1 8 X O X O 20000 2499 0 0 0 1000 80 80 80 140 134 2 20
149 바이거 워울프 mon_wolfgirl.GCMDS 2 Warrior 32 128.8 12 171.6 24 1 78 -104 104 -91 241 0.111825567 2784 27 101 118 58 34 38 0 1 5 0 18 11 0 0 0 0 0 0 0 0 0 0 1 1 2970 2501 74.25 62.525 1.3 9 X X X O 20000 2500 0 0 0 1000 80 80 80 140 133 2 20
150 영 케라톱스 mon_ceratops.GCMDS 2 Defender 40 126 32 268.8 40 1 92 -92 256 -216 366 0.073711102 3065 28 88 107 53 40 37 0 1.5 5 0 19 11 0 0 0 0 0 0 0 0 0 0 1 1 3508 2610 87.7 65.25 0.8 9 X O X O 20000 2501 0 0 0 1000 80 80 80 140 132 2 20
151 이구아나돈 mon_iguanodon.GCMDS 2 Defender 32 112 24 216 35 1 85 -150 270 -180 330 0.081737184 3365 29 90 109 54 41 38 0 1.3 5 0 19 12 0 0 0 0 0 0 0 0 0 0 1 1 3669 2655 91.725 66.375 1 9 X X X O 20000 2502 0 0 0 1000 80 80 80 140 131 2 20
152 케라톱스 mon_ceratops.GCMDS 2 Defender 40 140 32 288 40 1 115 -115 320 -270 420 0.064246399 3685 30 93 112 56 42 40 0 1.5 6 0 20 12 0 0 0 0 0 0 0 0 0 0 1 1 3910 2750 97.75 68.75 1 10 X O X O 20000 2503 0 0 0 1000 80 80 80 140 130 2 20
153 쿠체릭 mon_head.GCMDS 2 Defender 30 105 30 270 35 1 60 60 45 -55 205 0.1313704 4024 31 97 116 59 44 42 0 1.3 6 0 21 12 0 0 0 0 0 0 0 0 0 0 1 1 4131 2860 103.275 71.5 1 10 X O X O 20000 2504 0 0 0 1000 80 80 80 140 129 2 20
154 메르카디안 울프 mon_Nightwolf.GCMDS 2 Defender 32 140 24 252 40 1 37.5 -37.5 52.5 -225 375 0.07194478 3685 30 93 112 56 42 40 0 1.5 6 0 20 12 0 0 0 0 0 0 0 0 0 0 1 1 3910 2750 97.75 68.75 1.5 10 X O X O 20000 2505 0 0 0 1000 80 80 80 140 130 2 20
155 울븐 데몬 mon_wolfgirl.GCMDS 2 Warrior 32 134.4 12 176.8 24 1 84 -112 112 -98 248 0.108680394 4024 31 115 134 67 39 45 0 1 6 0 21 12 0 0 0 0 0 0 0 0 0 0 1 1 3720 2860 93 71.5 1.4 10 X O X O 20000 2506 0 0 0 1000 80 80 80 140 129 2 20
156 라디에이티드 스콜피온 mon_scorpion.GCMDS 2 Defender 32 112 32 288 35 1 150 -150 130 -180 330 0.081737184 4698 33 101 122 61 46 44 0 1.3 6 0 22 13 0 0 0 0 0 0 0 0 0 0 1 1 4607 3001 115.175 75.025 1 11 X X X O 20000 2507 0 0 0 1000 80 80 80 140 127 2 20
157 고렙 mon_gorep.gcmds 2 Defender 32 171.2 20 276 40 1 91 -88.9 59.5 -142.8 293 0.092034505 4935 34 104 125 63 48 46 0 1.5 6 0 23 14 0 0 0 0 0 0 0 0 0 0 1 1 4884 3114 122.1 77.85 0.07 11 X O X O 20000 2508 0 0 0 1000 80 80 80 140 126 2 20
158 불런트 mon_bullent.GCMDS 2 Defender 32 112 16 144 35 1 95 -95 250 -140 290 0.092984162 5177 35 108 129 66 49 48 0 1.3 6 0 23 14 0 0 0 0 0 0 0 0 0 0 1 1 5135 3210 128.375 80.25 1 11 X O X O 20000 2509 0 0 0 1000 80 80 80 140 125 2 20
159 부르트 mon_gorep.gcmds 2 Defender 32 174.4 20 278.6666667 40 1 117 -114.3 76.5 -183.6 334 0.080760198 5679 37 110 133 67 51 49 0 1.5 6 0 25 15 0 0 0 0 0 0 0 0 0 0 1 1 5682 3370 142.05 84.25 0.09 12 X O X O 20000 2510 0 0 0 1000 80 80 80 140 123 2 20
160 메르카디안 스콜피온 mon_scorpion.GCMDS 2 Defender 32 134.4 32 326.4 35 1 210 -210 182 -252 402 0.067119347 5425 36 108 131 67 51 49 0 1.3 6 0 24 15 0 0 0 0 0 0 0 0 0 0 1 1 5465 3306 136.625 82.65 1.4 12 X X X O 20000 2511 0 0 0 1000 80 80 80 140 124 2 20
161 단테 mon_dante.gcmds 2 Defender 32 112 24 216 40 1 160 -180 195 -210 360 0.074937594 5938 38 113 136 70 53 51 0 1.5 6 0 25 16 0 0 0 0 0 0 0 0 0 0 1 1 5996 3467 149.9 86.675 1 12 X O X O 20000 2512 0 0 0 1000 80 80 80 140 122 2 20
162 빅마우스 mon_bullent.GCMDS 2 Defender 32 112 16 144 35 1 95 -95 250 -140 290 0.092984162 6203 39 117 140 72 54 52 0 1.3 6 0 26 16 0 0 0 0 0 0 0 0 0 0 1 1 6279 3563 156.975 89.075 1 13 X X X O 20000 2513 0 0 0 1000 80 80 80 140 121 2 20
163 앤션트 스톤 MON_Golem.GCMDS 2 Defender 30 131.25 30 315 30 1 142.5 -142.5 0 -247.5 398 0.067793 6474 40 119 144 74 56 54 0 1.1 6 0 27 16 0 0 0 0 0 0 0 0 0 0 1 1 6656 3680 166.4 92 1.5 13 X O X O 20000 2514 0 0 0 1000 80 80 80 140 120 2 20
164 타이타노 mon_titano.GCMDS 2 BG 80 560 80 560 1 1 270 -270 730 -410 560 0.048197692 1294 40 119 144 74 76 54 0 0 6 0 66 56 0 0 0 0 0 0 0 0 0 0 1 1 13312 3680 332.8 92 1 13 X O X O 20000 2515 0 0 0 1000 80 80 80 140 120 2 20
165 트롤 트래블러 MON_Troll.GCMDS 2 Defender 40 175 40 420 40 1 112.5 -97.5 75 -112.5 263 0.102501751 4382 32 99 120 60 46 43 0 1.5 6 0 21 13 0 0 0 0 0 0 0 0 0 0 1 1 4419 2956 110.475 73.9 1.5 10 X O X O 20000 2516 0 0 0 1000 80 80 80 140 128 2 20
166 리자드맨 워치프 MON_LizardmanLeader.GCMDS 2 Boss 32 173.6 24 295.2 40 1 115.5 -220.5 241.5 -252 804 0.067152961 79130 45 130 157 81 84 57 0 3.8 7 0 74 62 0 0 0 0 0 0 0 0 0 0 1 1 14610 4087 365.25 102.175 2.1 15 X X X O 1800000 2517 0 0 0 0 80 80 80 140 115 2 20
167 스켈레탈 로드 MON_AncientGuard_warrior.GCMDS 2 Boss 35 183 24 288 50 1 210 -140 130 -200 700 0.077125861 190710 74 204 245 131 138 94 0 4.8 8 0 121 103 0 0 0 0 0 0 0 0 0 0 1 1 31260 6935 781.5 173.375 2 24 X O X O 1800000 2518 0 0 0 0 80 80 80 140 86 2 20
168 님버스 mon_nymbus.gcmds 2 Boss 40 175 40 420 40 1 232.5 -232.5 187.5 -255 810 0.066655696 79130 45 130 157 81 84 57 0 3.8 7 0 74 62 0 0 0 0 0 0 0 0 0 0 1 1 14610 4087 365.25 102.175 1.5 15 X X X O 1800000 2519 0 0 0 0 80 80 80 140 115 2 20
169 오머튼 MON_Omurten.GCMDS 2 Boss 56 317.5 56 296.3333333 55 1 202.5 -217.5 420 -345 990 0.054539445 190710 74 204 245 131 138 94 0 5.2 8 0 121 103 0 0 0 0 0 0 0 0 0 0 1 1 31260 6935 781.5 173.375 1.5 24 X O X O 1800000 2520 0 0 0 0 80 80 80 140 86 2 20
170 사이너 울프 MON_Wolf_attacker.GCMDS 2 Warrior 32 128.8 24 237.6 40 1 26 -26 58.5 -182 332 0.081245757 6203 39 139 162 82 48 56 0 1.6 6 0 26 16 0 0 0 0 0 0 0 0 0 0 1 1 5540 3563 138.5 89.075 1.3 13 X X X O 20000 2521 0 0 0 1000 80 80 80 140 121 2 20
171 리빙트렁크 mon_tren.GCMDS 2 Defender 56 147 56 420 40 1 150 -125 175 -95 245 0.110006437 6474 40 119 144 74 56 54 0 1.5 6 0 27 16 0 0 0 0 0 0 0 0 0 0 1 1 6656 3680 166.4 92 0.5 13 X O X O 20000 2522 0 0 0 1000 80 80 80 140 120 2 20
172 사이너 타이거 mon_tizer.GCMDS 2 Warrior 36 119.7 24 208.8 24 1 72 -72 117 -198 348 0.077517127 6750 41 144 169 85 50 58 0 1 6 0 27 17 0 0 0 0 0 0 0 0 0 0 1 1 6062 3727 151.55 93.175 0.9 13 X O X O 30000 2523 0 0 0 1000 80 80 80 140 119 2 20
173 다크 워리어 MON_Dark_warrior.GCMDS 2 Warrior 32 112 24 216 30 1 60 -80 55 -115 265 0.101730532 7032 42 147 172 88 52 60 0 1.2 6 0 28 17 0 0 0 0 0 0 0 0 0 0 1 1 6339 3824 158.475 95.6 1 14 X X X O 30000 2524 0 0 0 1000 80 80 80 140 118 2 20
174 다크 디펜더 MON_Dark_defender.GCMDS 2 Defender 32 112 24 216 40 1 70 -80 70 -145 295 0.091412092 7320 43 128 153 79 60 58 0 1.5 6 0 29 17 0 0 0 0 0 0 0 0 0 0 1 1 7575 3942 189.375 98.55 1 14 X O X O 30000 2525 0 0 0 1000 80 80 80 140 117 2 20
175 세이버투스 타이거 mon_tizer.GCMDS 2 Warrior 36 132.3 24 223.2 24 1 88 -88 143 -242 392 0.068829203 7614 44 153 180 92 55 63 0 1 6 0 29 18 0 0 0 0 0 0 0 0 0 0 1 1 6964 4040 174.1 101 1.1 14 X O X O 30000 2526 0 0 0 1000 80 80 80 140 116 2 20
176 트렌 mon_tren.GCMDS 2 Defender 56 196 56 504 40 1 300 -250 350 -190 340 0.079337698 7913 45 130 157 81 62 61 0 1.5 7 0 30 18 0 0 0 0 0 0 0 0 0 0 1 1 8279 4087 206.975 102.175 1 15 X X X O 30000 2527 0 0 0 1000 80 80 80 140 115 2 20
177 타이거라이더 mon_tirider.GCMDS 2 Defender 36 126 20 180 24 1 50 -50 65 -220 370 0.072915486 8218 46 133 160 83 64 62 0 0.9 7 0 31 19 0 0 0 0 0 0 0 0 0 0 1 1 8675 4208 216.875 105.2 1 15 X O X O 30000 2528 0 0 0 1000 80 80 80 140 114 2 20
178 펄칸 스커미셔 mon_pulkhan.GCMDS 2 Warrior 32 100.8 24 201.6 32 1 60 -60 36 -68 218 0.123572896 8529 47 164 191 98 58 69 0 1.3 7 0 31 19 0 0 0 0 0 0 0 0 0 0 1 1 7830 4306 195.75 107.65 0.8 15 X O X O 30000 2529 0 0 0 1000 80 80 80 140 113 2 20
179 워라이더 mon_tirider.GCMDS 2 Defender 36 132.3 20 186 24 1 55 -55 71.5 -242 392 0.068829203 8845 48 139 168 87 67 65 0 0.9 7 0 32 20 0 0 0 0 0 0 0 0 0 0 1 1 9504 4404 237.6 110.1 1.1 16 X X X O 30000 2530 0 0 0 1000 80 80 80 140 112 2 20
180 펄칸 스카우트 mon_pulkhan.GCMDS 2 Warrior 32 106.4 24 208.8 32 1 67.5 -67.5 40.5 -76.5 227 0.118694375 9167 49 168 197 101 60 71 0 1.3 7 0 33 20 0 0 0 0 0 0 0 0 0 0 1 1 8481 4476 212.025 111.9 0.9 16 X O X O 30000 2531 0 0 0 1000 80 80 80 140 111 2 20
181 펄칸 가드 mon_pulkhan02.GCMDS 2 Defender 32 112 24 216 32 1 75 -75 45 -85 235 0.114669715 9495 50 144 173 90 69 67 0 1.2 7 0 33 21 0 0 0 0 0 0 0 0 0 0 1 1 10260 4575 256.5 114.375 1 16 X O X O 30000 2532 0 0 0 1000 80 80 80 140 110 2 20
182 소울리스 머셔너리 mon_tirider.GCMDS 2 Defender 36 132.3 20 186 24 1 55 -55 71.5 -242 392 0.068829203 9828 51 148 177 93 70 69 0 0.9 7 0 34 21 0 0 0 0 0 0 0 0 0 0 1 1 10651 4673 266.275 116.825 1.1 17 X O X O 30000 2533 0 0 0 1000 80 80 80 140 109 2 20
183 펄칸 파이터 mon_pulkhan.GCMDS 2 Warrior 32 112 24 216 32 1 75 -75 45 -85 235 0.114669715 10167 52 177 208 107 64 75 0 1.3 7 0 35 21 0 0 0 0 0 0 0 0 0 0 1 1 9585 4798 239.625 119.95 1 17 X O X O 30000 2534 0 0 0 1000 80 80 80 140 108 2 20
184 펄칸 나이트 mon_pulkhan02.GCMDS 2 Defender 32 112 24 216 32 1 75 -75 45 -85 235 0.114669715 10512 53 150 181 94 73 71 0 1.2 7 0 35 22 0 0 0 0 0 0 0 0 0 0 1 1 11530 4847 288.25 121.175 1 17 X O X O 30000 2535 0 0 0 1000 80 80 80 140 107 2 20
185 가비얼 밀리샤 mon_gavial.GCMDS 2 Defender 32 100.8 24 201.6 40 1 80 -80 144 -104 254 0.106121802 10863 54 153 184 97 74 73 0 1.5 7 0 36 22 0 0 0 0 0 0 0 0 0 0 1 1 12019 4946 300.475 123.65 0.8 18 X O X O 30000 2536 0 0 0 1000 80 80 80 140 106 2 20
186 스월링소드 마스터 mon_shogen_master_red.GCMDS 2 Defender 32 112 20 180 32 1 110 -110 85 -75 225 0.119744979 11219 55 157 188 99 76 74 0 1.2 7 0 37 22 0 0 0 0 0 0 0 0 0 0 1 1 12451 5072 311.275 126.8 1 18 X O X O 30000 2537 0 0 0 1000 80 80 80 140 105 2 20
187 가비얼 파이터 mon_gavial.GCMDS 2 Defender 32 106.4 24 208.8 40 1 90 -90 162 -117 267 0.100970814 11581 56 159 192 101 78 76 0 1.5 7 0 37 23 0 0 0 0 0 0 0 0 0 0 1 1 13035 5172 325.875 129.3 0.9 18 X O X O 30000 2538 0 0 0 1000 80 80 80 140 104 2 20
188 듀얼소드 마스터 mon_shogen_master_black.GCMDS 2 Warrior 32 112 20 180 40 1 95 -50 50 -170 320 0.084286179 11949 57 193 226 116 69 81 0 1.6 7 0 38 23 0 0 0 0 0 0 0 0 0 0 1 1 11434 5221 285.85 130.525 1 19 X O X O 30000 2539 0 0 0 1000 80 80 80 140 103 2 20
189 가비얼 가드 mon_gavial.GCMDS 2 Defender 32 112 24 216 40 1 100 -100 180 -130 280 0.096296065 12322 58 164 197 104 80 78 0 1.5 7 0 39 24 0 0 0 0 0 0 0 0 0 0 1 1 13963 5350 349.075 133.75 1 19 X O X O 30000 2540 0 0 0 1000 80 80 80 140 102 2 20
190 가비얼 마스터 mon_vicrocodile.GCMDS 2 Defender 32 106.4 24 208.8 40 1 148.5 -148.5 180 -180 330 0.081737184 12701 59 168 201 106 81 79 0 1.5 7 0 39 24 0 0 0 0 0 0 0 0 0 0 1 1 14436 5450 360.9 136.25 0.9 19 X O X O 30000 2541 0 0 0 1000 80 80 80 140 101 2 20
191 헌티드 스월링소드 mon_shogen_master_red.GCMDS 2 Defender 32 112 20 180 32 1 110 -110 85 -75 225 0.119744979 13086 60 168 203 107 83 82 0 1.2 8 0 40 25 0 0 0 0 0 0 0 0 0 0 1 1 15080 5550 377 138.75 1 20 X O X O 30000 2542 0 0 0 1000 80 80 80 140 100 2 20
192 헌티드 듀얼소드 mon_shogen_master_black.GCMDS 2 Warrior 32 112 20 180 40 1 95 -50 50 -170 320 0.084286179 13476 61 204 239 124 74 88 0 1.6 8 0 41 25 0 0 0 0 0 0 0 0 0 0 1 1 13127 5630 328.175 140.75 1 20 X O X O 30000 2543 0 0 0 1000 80 80 80 140 99 2 20
193 셀피 mon_slephi.GCMDS 2 Warrior 40 140 40 360 32 1 95 -95 200 -120 270 0.099852246 13872 62 210 245 127 75 90 0 1.3 8 0 41 26 0 0 0 0 0 0 0 0 0 0 1 1 13570 5731 339.25 143.275 1 20 X O X O 30000 2544 0 0 0 1000 80 80 80 140 98 2 20
194 라이노맨 mon_rhinoman.GCMDS 2 Defender 36 126 24 216 32 1 110 -110 95 -180 330 0.081737184 14274 63 177 212 113 86 86 0 1.2 8 0 42 26 0 0 0 0 0 0 0 0 0 0 1 1 16617 5831 415.425 145.775 1 21 X O X O 30000 2545 0 0 0 1000 80 80 80 140 97 2 20
195 워 라이노맨 mon_rhinoman.GCMDS 2 Defender 36 126 24 216 32 1 110 -110 95 -180 330 0.081737184 14682 64 179 216 114 88 87 0 1.2 8 0 43 26 0 0 0 0 0 0 0 0 0 0 1 1 17322 5964 433.05 149.1 1 21 X O X O 30000 2546 0 0 0 1000 80 80 80 140 96 2 20
196 바이크로커다일 mon_vicrocodile.GCMDS 2 Defender 32 117.6 24 223.2 40 1 181.5 -181.5 220 -220 370 0.072915486 15095 65 181 218 115 89 88 0 1.5 8 0 43 27 0 0 0 0 0 0 0 0 0 0 1 1 17794 6015 444.85 150.375 1.1 21 X O X O 30000 2547 0 0 0 1000 80 80 80 140 95 2 20
197 페인 스콜피온 mon_scorpion.GCMDS 2 Defender 32 128.8 32 316.8 35 1 195 -195 169 -234 384 0.070261069 6203 39 117 140 72 54 52 0 1.3 6 0 26 16 0 0 0 0 0 0 0 0 0 0 1 1 6279 3563 156.975 89.075 1.3 13 X X X O 20000 2548 0 0 0 1000 80 80 80 140 121 2 20
198 블랙트렁크 mon_trenber.GCMDS 2 Defender 56 147 56 420 40 1 150 -125 175 -95 245 0.110006437 6474 40 119 144 74 56 54 0 1.5 6 0 27 16 0 0 0 0 0 0 0 0 0 0 1 1 6656 3680 166.4 92 0.5 13 X O X O 20000 2549 0 0 0 1000 80 80 80 140 120 2 20
199 로밍 펑거스 mon_fungus01.GCMDS 2 Defender 32 112 32 288 32 1 90 -90 90 -90 240 0.112289772 6750 41 121 146 74 57 54 0 1.2 6 0 27 17 0 0 0 0 0 0 0 0 0 0 1 1 6903 3727 172.575 93.175 1 13 X O X O 30000 2550 0 0 0 1000 80 80 80 140 119 2 20
200 파핑 펑거스 mon_fungus02.GCMDS 2 Warrior 32 112 32 288 32 1 90 -90 90 -90 240 0.112289772 7614 44 153 180 92 55 63 0 1.3 6 0 29 18 0 0 0 0 0 0 0 0 0 0 1 1 6964 4040 174.1 101 1 14 X O X O 30000 2551 0 0 0 1000 80 80 80 140 116 2 20
201 트렌버 mon_trenber.GCMDS 2 Defender 56 166.6 56 453.6 40 1 210 -175 245 -133 283 0.095278016 7913 45 130 157 81 62 61 0 1.5 7 0 30 18 0 0 0 0 0 0 0 0 0 0 1 1 8279 4087 206.975 102.175 0.7 15 X X X O 30000 2552 0 0 0 1000 80 80 80 140 115 2 20
202 바이거 로밍 펑거스 mon_fungus01.GCMDS 2 Defender 32 134.4 32 326.4 32 1 126 -126 126 -126 276 0.097687745 8218 46 133 160 83 64 62 0 1.2 7 0 31 19 0 0 0 0 0 0 0 0 0 0 1 1 8675 4208 216.875 105.2 1.4 15 X O X O 30000 2553 0 0 0 1000 80 80 80 140 114 2 20
203 바이거 파핑 펑거스 mon_fungus02.GCMDS 2 Warrior 32 134.4 32 326.4 32 1 126 -126 126 -126 276 0.097687745 8529 47 164 191 98 58 69 0 1.3 7 0 31 19 0 0 0 0 0 0 0 0 0 0 1 1 7830 4306 195.75 107.65 1.4 15 X O X O 30000 2554 0 0 0 1000 80 80 80 140 113 2 20
204 프레빅 헌터 mon_prebic.GCMDS 2 Defender 32 106.4 32 278.4 32 1 144 -144 64.8 -117 267 0.100970814 8845 48 139 168 87 67 65 0 1.2 7 0 32 20 0 0 0 0 0 0 0 0 0 0 1 1 9504 4404 237.6 110.1 0.9 16 X X X O 30000 2555 0 0 0 1000 80 80 80 140 112 2 20
205 프레빅 가드 mon_prebic02.GCMDS 2 Warrior 32 106.4 32 278.4 32 1 144 -144 63 -117 267 0.100970814 9167 49 168 197 101 60 71 0 1.3 7 0 33 20 0 0 0 0 0 0 0 0 0 0 1 1 8481 4476 212.025 111.9 0.9 16 X O X O 30000 2556 0 0 0 1000 80 80 80 140 111 2 20
206 배릭 머셔너리 mon_barick.GCMDS 2 Defender 32 112 24 216 32 1 55 -50 60 -90 240 0.112289772 9495 50 144 173 90 69 67 0 1.2 7 0 33 21 0 0 0 0 0 0 0 0 0 0 1 1 10260 4575 256.5 114.375 1 16 X O X O 30000 2557 0 0 0 1000 80 80 80 140 110 2 20
207 프레빅 파이터 mon_prebic.GCMDS 2 Defender 32 117.6 32 297.6 32 1 176 -176 79.2 -143 293 0.092034505 9828 51 148 177 93 70 69 0 1.2 7 0 34 21 0 0 0 0 0 0 0 0 0 0 1 1 10651 4673 266.275 116.825 1.1 17 X O X O 30000 2558 0 0 0 1000 80 80 80 140 109 2 20
208 프레빅 나이트 mon_prebic02.GCMDS 2 Warrior 32 117.6 32 297.6 32 1 176 -176 77 -143 293 0.092034505 10167 52 177 208 107 64 75 0 1.3 7 0 35 21 0 0 0 0 0 0 0 0 0 0 1 1 9585 4798 239.625 119.95 1.1 17 X O X O 30000 2559 0 0 0 1000 80 80 80 140 108 2 20
209 배릭 헌터 mon_barick.GCMDS 2 Defender 32 112 24 216 32 1 55 -50 60 -90 240 0.112289772 10512 53 150 181 94 73 71 0 1.2 7 0 35 22 0 0 0 0 0 0 0 0 0 0 1 1 11530 4847 288.25 121.175 1 17 X O X O 30000 2560 0 0 0 1000 80 80 80 140 107 2 20
210 마킨 워리어 mon_makin.GCMDS 2 Warrior 32 112 24 216 32 1 90 -90 50 -90 240 0.112289772 10863 54 185 216 112 66 78 0 1.3 7 0 36 22 0 0 0 0 0 0 0 0 0 0 1 1 10259 4946 256.475 123.65 1 18 X O X O 30000 2561 0 0 0 1000 80 80 80 140 106 2 20
211 마킨 가드 mon_makin02.GCMDS 2 Defender 32 112 24 216 32 1 90 -90 50 -90 240 0.112289772 11219 55 157 188 99 76 74 0 1.2 7 0 37 22 0 0 0 0 0 0 0 0 0 0 1 1 12451 5072 311.275 126.8 1 18 X O X O 30000 2562 0 0 0 1000 80 80 80 140 105 2 20
212 엘리트 배릭 머셔너리 mon_barick.GCMDS 2 Defender 32 117.6 24 223.2 32 1 60.5 -55 66 -99 249 0.108245443 11581 56 159 192 101 78 76 0 1.2 7 0 37 23 0 0 0 0 0 0 0 0 0 0 1 1 13035 5172 325.875 129.3 1.1 18 X O X O 30000 2563 0 0 0 1000 80 80 80 140 104 2 20
213 원더링 노나트 mon_nonut.GCMDS 2 Defender 32 112 24 216 32 1 85 -85 60 -100 250 0.107813954 11949 57 161 194 101 78 76 0 1.2 7 0 38 23 0 0 0 0 0 0 0 0 0 0 1 1 13424 5221 335.6 130.525 1 19 X O X O 30000 2564 0 0 0 1000 80 80 80 140 103 2 20
214 터퍼 마킨 워리어 mon_makin.GCMDS 2 Warrior 32 112 24 216 32 1 90 -90 50 -90 240 0.112289772 12322 58 196 229 119 70 83 0 1.3 7 0 39 24 0 0 0 0 0 0 0 0 0 0 1 1 11841 5350 296.025 133.75 1 19 X O X O 30000 2565 0 0 0 1000 80 80 80 140 102 2 20
215 터퍼 마킨 가드 mon_makin02.GCMDS 2 Defender 32 112 24 216 32 1 90 -90 50 -90 240 0.112289772 12701 59 168 201 106 81 79 0 1.2 7 0 39 24 0 0 0 0 0 0 0 0 0 0 1 1 14436 5450 360.9 136.25 1 19 X O X O 30000 2566 0 0 0 1000 80 80 80 140 101 2 20
216 노나트 파이터 mon_nonut.GCMDS 2 Defender 32 112 24 216 32 1 85 -85 60 -100 250 0.107813954 13086 60 168 203 107 83 82 0 1.2 8 0 40 25 0 0 0 0 0 0 0 0 0 0 1 1 15080 5550 377 138.75 1 20 X O X O 30000 2567 0 0 0 1000 80 80 80 140 100 2 20
217 마인들리스 mon_clinzer.GCMDS 2 Defender 32 106.4 24 208.8 40 1 49.5 -49.5 90 -90 240 0.112289772 13476 61 170 205 108 83 83 0 1.5 8 0 41 25 0 0 0 0 0 0 0 0 0 0 1 1 15509 5630 387.725 140.75 0.9 20 X O X O 30000 2568 0 0 0 1000 80 80 80 140 99 2 20
218 엘더 노나트 파이터 mon_nonut.GCMDS 2 Defender 32 123.2 24 230.4 32 1 102 -102 72 -120 270 0.099852246 13872 62 173 208 110 85 84 0 1.2 8 0 41 26 0 0 0 0 0 0 0 0 0 0 1 1 16099 5731 402.475 143.275 1.2 20 X O X O 30000 2569 0 0 0 1000 80 80 80 140 98 2 20
219 클린저 mon_clinzer.GCMDS 2 Defender 32 112 24 216 40 1 55 -55 100 -100 250 0.107813954 14274 63 177 212 113 86 86 0 1.5 8 0 42 26 0 0 0 0 0 0 0 0 0 0 1 1 16617 5831 415.425 145.775 1 21 X O X O 30000 2570 0 0 0 1000 80 80 80 140 97 2 20
220 타우터 mon_tower.GCMDS 2 Defender 32 112 24 216 34 1 130 -130 90 -100 250 0.107813954 14682 64 179 216 114 88 87 0 1.3 8 0 43 26 0 0 0 0 0 0 0 0 0 0 1 1 17322 5964 433.05 149.1 1 21 X O X O 30000 2571 0 0 0 1000 80 80 80 140 96 2 20
221 안틱 데스 mon_rich.GCMDS 2 Warrior 30 105 30 270 40 1 320 -160 310 -160 310 0.08699909 15095 65 218 255 133 78 94 0 1.6 8 0 43 27 0 0 0 0 0 0 0 0 0 0 1 1 14973 6015 374.325 150.375 1 21 X O X O 30000 2572 0 0 0 1000 80 80 80 140 95 2 20
222 크래모스 mon_cramos.GCMDS 2 Defender 32 112 32 320 40 1 120 -120 75 -155 305 0.088422029 15095 65 181 218 115 89 88 0 1.5 8 0 43 27 0 0 0 0 0 0 0 0 0 0 1 1 17794 6015 444.85 150.375 1 21 X O X O 30000 2572 0 0 0 1000 80 80 80 140 95 2 20
223 놀 패트롤 mon_gnoll_king.GCMDS 2 Defender 40 140 24 240 36 1 85 -85 130 -85 235 0.114669715 15514 66 184 221 117 90 89 0 1.3 8 0 44 27 0 0 0 0 0 0 0 0 0 0 1 1 18438 6116 460.95 152.9 1 22 X O X O 30000 2572 0 0 0 1000 80 80 80 140 94 2 20
224 드레드 울프 MON_NightWolf.GCMDS 2 Defender 32 151.2 24 266.4 40 1 42.5 -42.5 59.5 -255 405 0.066622823 15939 67 188 225 120 92 91 0 1.5 8 0 45 27 0 0 0 0 0 0 0 0 0 0 1 1 19001 6250 475.025 156.25 1.7 22 X O X O 30000 2572 0 0 0 1000 80 80 80 140 93 2 20
225 놀 파이터 mon_gnoll_warrior.GCMDS 2 Defender 32 112 24 240 36 1 70 -70 120 -75 225 0.119744979 16369 68 188 227 121 94 93 0 1.3 8 0 45 28 0 0 0 0 0 0 0 0 0 0 1 1 19771 6352 494.275 158.8 1 22 X O X O 30000 2572 0 0 0 1000 80 80 80 140 92 2 20
226 바이거 크래모스 mon_cramos.GCMDS 2 Defender 32 117.6 32 330.6666667 40 1 132 -132 82.5 -170.5 321 0.084024155 16805 69 190 229 121 94 93 0 1.5 8 0 46 28 0 0 0 0 0 0 0 0 0 0 1 1 20287 6403 507.175 160.075 1.1 23 X O X O 30000 2572 0 0 0 1000 80 80 80 140 91 2 20
227 놀 헌터 mon_gnoll_king.GCMDS 2 Defender 40 147 24 248 36 1 93.5 -93.5 143 -93.5 244 0.110455658 17247 70 193 232 124 96 95 0 1.3 8 0 47 29 0 0 0 0 0 0 0 0 0 0 1 1 20988 6540 524.7 163.5 1.1 23 X O X O 30000 2572 0 0 0 1000 80 80 80 140 90 2 20
228 요커 라이더 mon_york.GCMDS 2 Defender 32 112 24 240 36 1 80 -80 240 -210 360 0.074937594 17694 71 197 236 126 97 96 0 1.3 8 0 47 29 0 0 0 0 0 0 0 0 0 0 1 1 21599 6642 539.975 166.05 1 23 X O X O 30000 2572 0 0 0 1000 80 80 80 140 89 2 20
229 놀 나이트 mon_gnoll_tanker.GCMDS 2 Defender 32 117.6 24 248 36 1 77 -77 132 -82.5 233 0.115650124 18147 72 199 240 128 99 98 0 1.3 8 0 48 30 0 0 0 0 0 0 0 0 0 0 1 1 22435 6744 560.875 168.6 1.1 24 X O X O 30000 2572 0 0 0 1000 80 80 80 140 88 2 20
230 스톤 오브 앤션트 라이프 MON_Golem.GCMDS 2 Defender 30 131.25 30 315 30 1 142.5 -142.5 0 -247.5 398 0.067793 18606 73 201 242 128 99 98 0 1.1 8 0 49 30 0 0 0 0 0 0 0 0 0 0 1 1 22997 6832 574.925 170.8 1.5 24 X O X O 30000 2572 0 0 0 1000 80 80 80 140 87 2 20
231 로밍 배클린 mon_backlyn.GCMDS 2 Defender 32 112 24 240 36 1 100 -100 110 -110 260 0.103680721 19071 74 204 245 131 101 100 0 1.3 8 0 49 31 0 0 0 0 0 0 0 0 0 0 1 1 23757 6935 593.925 173.375 1 24 X O X O 30000 2572 0 0 0 1000 80 80 80 140 86 2 20
232 포가튼 나이트 mon_knight.GCMDS 2 Defender 32 112 24 240 36 1 70 -70 120 -75 225 0.119744979 19541 75 208 249 133 102 102 0 1.3 9 0 50 31 0 0 0 0 0 0 0 0 0 0 1 1 24418 7037 610.45 175.925 1 25 X O X O 30000 2572 0 0 0 1000 80 80 80 140 85 2 20
233 배클린 가드 mon_backlyn.GCMDS 2 Defender 32 117.6 24 248 36 1 110 -110 121 -121 271 0.099484869 20017 76 208 251 134 104 103 0 1.3 9 0 51 31 0 0 0 0 0 0 0 0 0 0 1 1 25325 7178 633.125 179.45 1.1 25 X O X O 30000 2572 0 0 0 1000 80 80 80 140 84 2 20
234 미노타르트 mon_bulls.GCMDS 2 Defender 36 113.4 28 261.3333333 32 1 136 -136 112 -176 326 0.082738074 20499 77 210 253 135 105 105 0 1.2 9 0 51 32 0 0 0 0 0 0 0 0 0 0 1 1 25935 7231 648.375 180.775 0.8 25 X O X O 30000 2572 0 0 0 1000 80 80 80 140 83 2 20
235 미나타미 어프랜티스 mon_minatami.GCMDS 2 Defender 32 112 20 200 28 1 65 -65 80 -120 270 0.099852246 20986 78 213 256 137 106 106 0 1 9 0 52 32 0 0 0 0 0 0 0 0 0 0 1 1 26756 7334 668.9 183.35 1 26 X O X O 30000 2572 0 0 0 1000 80 80 80 140 82 2 20
236 미나타미 몽크 mon_minatami.GCMDS 2 Defender 32 112 20 200 28 1 65 -65 80 -120 270 0.099852246 21479 79 217 260 140 108 108 0 1 9 0 53 32 0 0 0 0 0 0 0 0 0 0 1 1 27468 7476 686.7 186.9 1 26 X O X O 30000 2572 0 0 0 1000 80 80 80 140 81 2 20
237 엘레판트롤 mon_elepan_troll.GCMDS 2 Defender 32 112 24 240 36 1 100 -170 50 -110 260 0.103680721 21978 80 219 264 141 110 109 0 1.3 9 0 53 33 0 0 0 0 0 0 0 0 0 0 1 1 28448 7580 711.2 189.5 1 26 X O X O 30000 2572 0 0 0 1000 80 80 80 140 80 2 20
238 퀜 mon_queen.GCMDS 2 Defender 30 105 30 300 30 1 225 -225 350 -180 330 0.081737184 22482 81 221 266 142 110 110 0 1.1 9 0 54 33 0 0 0 0 0 0 0 0 0 0 1 1 29107 7633 727.675 190.825 1 27 X O X O 30000 2572 0 0 0 1000 80 80 80 140 80 2 20
239 듈라한 mon_dullahan.GCMDS 2 Defender 32 112 24 240 40 1 95 -95 100 -100 250 0.107813954 22992 82 224 269 144 112 111 0 1.5 9 0 55 34 0 0 0 0 0 0 0 0 0 0 1 1 29992 7778 749.8 194.45 1 27 X O X O 30000 2572 0 0 0 1000 80 80 80 140 80 2 20
240 솔드 마인드 mon_york.GCMDS 2 Defender 32 117.6 24 248 36 1 88 -88 264 -231 381 0.070813488 23508 83 228 273 147 113 113 0 1.3 9 0 55 34 0 0 0 0 0 0 0 0 0 0 1 1 30758 7882 768.95 197.05 1.1 27 X O X O 30000 2572 0 0 0 1000 80 80 80 140 80 2 20
241 바이터 퀜 mon_queen02.GCMDS 2 Defender 30 105 30 300 30 1 225 -225 350 -180 330 0.081737184 24030 84 228 275 148 115 114 0 1.1 9 0 56 35 0 0 0 0 0 0 0 0 0 0 1 1 31813 7986 795.325 199.65 1 28 X O X O 30000 2572 0 0 0 1000 80 80 80 140 80 2 20
242 매드 나이트 mon_knight.GCMDS 2 Defender 32 117.6 24 248 36 1 77 -77 132 -82.5 233 0.115650124 24557 85 230 277 148 115 114 0 1.3 9 0 57 35 0 0 0 0 0 0 0 0 0 0 1 1 32525 8082 813.125 202.05 1.1 28 X O X O 30000 2572 0 0 0 1000 80 80 80 140 80 2 20
243 엘레판트롤 마스터 mon_elepan_troll.GCMDS 2 Defender 32 117.6 24 248 36 1 110 -187 55 -121 271 0.099484869 25090 86 233 280 151 117 117 0 1.3 9 0 57 36 0 0 0 0 0 0 0 0 0 0 1 1 33475 8187 836.875 204.675 1.1 28 X O X O 30000 2572 0 0 0 1000 80 80 80 140 80 2 20
244 킬링윈드 mon_queen.GCMDS 2 Defender 30 110.25 30 310 30 1 247.5 -247.5 385 -198 348 0.077517127 25629 87 237 284 153 118 118 0 1.1 9 0 58 36 0 0 0 0 0 0 0 0 0 0 1 1 34296 8291 857.4 207.275 1.1 29 X O X O 30000 2572 0 0 0 1000 80 80 80 140 80 2 20
245 헤들리스 아머 mon_dullahan02.GCMDS 2 Defender 32 117.6 24 248 40 1 104.5 -104.5 110 -110 260 0.103680721 26173 88 239 288 155 120 120 0 1.5 9 0 59 36 0 0 0 0 0 0 0 0 0 0 1 1 35430 8440 885.75 211 1.1 29 X O X O 30000 2572 0 0 0 1000 80 80 80 140 80 2 20
246 윙 오브 데스 mon_queen02.GCMDS 2 Defender 30 110.25 30 310 30 1 247.5 -247.5 385 -198 348 0.077517127 26723 89 241 290 155 121 120 0 1.1 9 0 59 37 0 0 0 0 0 0 0 0 0 0 1 1 36195 8495 904.875 212.375 1.1 29 X O X O 30000 2572 0 0 0 1000 80 80 80 140 80 2 20
247 씨멘디펜더 mon_seaman_mage.GCMDS 2 Defender 24 44 24 216 35 120 30 -30 40 -40 140 0.191804878 49 5 28 35 13 8 6 0 0.8 5 0 7 2 0 0 0 0 0 0 0 0 0 0 1 1 396 3000 9.9 17.375 1 7 X X X O 15000 2572 0 0 0 1000 80 80 80 140 132 2 20
248 씨멘워리어 mon_seaman_mage.GCMDS 2 Warriro 24 44 24 216 35 120 30 -30 40 -40 140 0.191804878 49 5 28 35 13 8 6 0 0.8 5 0 7 2 0 0 0 0 0 0 0 0 0 0 1 1 396 3000 9.9 17.375 1 7 X X X O 15000 2572 0 0 0 1000 80 80 80 140 132 2 20
249 씨멘어콜라이트 mon_seaman_mage.GCMDS 2 Acolyte 24 44 24 216 35 120 30 -30 40 -40 140 0.191804878 49 5 28 35 13 8 6 0 0.8 5 0 7 2 0 0 0 0 0 0 0 0 0 0 1 1 396 3000 9.9 17.375 1 7 X X X O 15000 2572 0 0 0 1000 80 80 80 140 132 2 20
250 씨멘메이지 mon_seaman_mage.GCMDS 2 Mage 24 44 24 216 35 120 30 -30 40 -40 140 0.191804878 49 5 28 35 13 8 6 0 0.8 5 0 7 2 0 0 0 0 0 0 0 0 0 0 1 1 396 3000 9.9 17.375 1 7 X X X O 15000 2572 0 0 0 1000 80 80 80 140 132 2 20
251 씨멘보스 mon_seaman_mage.GCMDS 2 Boss 24 44 24 216 35 120 30 -30 40 -40 140 0.191804878 49 5 28 35 13 8 6 0 0.8 5 0 7 2 0 0 0 0 0 0 0 0 0 0 1 1 396 3000 9.9 17.375 1 7 X X X O 15000 2572 0 0 0 1000 80 80 80 140 132 2 20
1000 킨들링 summon_kindling.GCMDS 1 Summon 36 116.55 36 342 36 1 68 -68 25.5 -25.5 126 0.212845582 0 4 25 32 11 8 4 0 0.8 4 0 3 1 0 0 0 0 0 0 0 0 0 0 1 1 374 614 9.35 15.35 0.85 1 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1001 킨들링 summon_kindling.GCMDS 1 Summon 36 119.7 36 348 36 1 72 -72 27 -27 127 0.211191779 0 7 34 41 17 11 8 0 1 4 0 5 2 0 0 0 0 0 0 0 0 0 0 1 1 568 840 14.2 21 0.9 2 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1002 킨들링 summon_kindling.GCMDS 1 Summon 36 122.85 36 354 36 1 76 -76 28.5 -28.5 179 0.150332625 0 10 44 53 23 16 13 1 1.3 4 1 7 4 0 0 0 0 0 0 0 0 0 0 1 1 820 1070 20.5 26.75 0.95 3 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1003 킨들링 summon_kindling.GCMDS 1 Summon 36 126 36 360 36 1 80 -80 30 -30 180 0.149502979 0 13 50 61 27 19 16 2 1.3 4 2 9 5 0 0 0 0 0 0 0 0 0 0 1 1 1108 1302 27.7 32.55 1 4 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1004 킨들링 summon_kindling.GCMDS 1 Summon 36 129.15 36 366 36 1 84 -84 31.5 -31.5 182 0.14787077 0 16 59 72 33 24 21 3 1.3 5 3 11 6 0 0 0 0 0 0 0 0 0 0 1 1 1496 1588 37.4 39.7 1.05 5 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1005 킨들링 summon_kindling.GCMDS 1 Summon 36 132.3 36 372 36 1 88 -88 33 -33 183 0.147067916 0 19 68 81 39 28 26 4 1.3 5 4 13 7 0 0 0 0 0 0 0 0 0 0 1 1 1877 1826 46.925 45.65 1.1 6 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1006 플레임워커 summon_flamewalker.GCMDS 1 Summon 32 100.8 32 298.6666667 36 1 80 -80 80 -80 230 0.117152517 0 19 68 81 39 28 26 5 1.3 5 5 13 7 0 0 0 0 0 0 0 0 0 0 1 1 1877 1826 46.925 45.65 0.8 6 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1007 플레임워커 summon_flamewalker.GCMDS 1 Summon 32 103.6 32 304 36 1 85 -85 85 -85 235 0.114669715 0 22 73 88 43 32 29 6 1.3 5 6 15 9 0 0 0 0 0 0 0 0 0 0 1 1 2346 2068 58.65 51.7 0.85 7 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1008 플레임워커 summon_flamewalker.GCMDS 1 Summon 32 106.4 32 309.3333333 36 1 90 -90 90 -90 240 0.112289772 0 25 81 98 47 35 32 7 1.3 5 7 17 10 0 0 0 0 0 0 0 0 0 0 1 1 2860 2312 71.5 57.8 0.9 8 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1009 플레임워커 summon_flamewalker.GCMDS 1 Summon 32 109.2 32 314.6666667 36 1 95 -95 95 -95 245 0.110006437 0 28 88 107 53 40 37 8 1.3 5 8 19 11 0 0 0 0 0 0 0 0 0 0 1 1 3508 2610 87.7 65.25 0.95 9 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1010 플레임워커 summon_flamewalker.GCMDS 1 Summon 32 112 32 320 36 1 100 -100 100 -100 250 0.107813954 0 31 97 116 59 44 42 9 1.3 6 9 21 12 0 0 0 0 0 0 0 0 0 0 1 1 4131 2860 103.275 71.5 1 10 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1011 플레임워커 summon_flamewalker.GCMDS 1 Summon 32 114.8 32 325.3333333 36 1 105 -105 105 -105 255 0.105707017 0 34 104 125 63 48 46 10 1.3 6 10 23 14 0 0 0 0 0 0 0 0 0 0 1 1 4884 3114 122.1 77.85 1.05 11 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1012 플레임워커 summon_flamewalker.GCMDS 1 Summon 32 117.6 32 330.6666667 36 1 110 -110 110 -110 260 0.103680721 0 37 110 133 67 51 49 11 1.3 6 11 25 15 0 0 0 0 0 0 0 0 0 0 1 1 5682 3370 142.05 84.25 1.1 12 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1013 버닝쉴드 summon_burningshield.GCMDS 1 Summon 32 100.8 32 298.6666667 36 1 112 -112 120 -120 270 0.099852246 0 37 110 133 67 51 49 12 1.3 6 12 25 15 0 0 0 0 0 0 0 0 0 0 1 1 5682 3370 142.05 84.25 0.8 12 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1014 버닝쉴드 summon_burningshield.GCMDS 1 Summon 32 103.6 32 304 36 1 119 -119 127.5 -127.5 278 0.09698692 0 40 119 144 74 56 54 13 1.3 6 13 27 16 0 0 0 0 0 0 0 0 0 0 1 1 6656 3680 166.4 92 0.85 13 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1015 버닝쉴드 summon_burningshield.GCMDS 1 Summon 32 106.4 32 309.3333333 36 1 126 -126 135 -135 285 0.094611177 0 43 128 153 79 60 58 14 1.3 6 14 29 17 0 0 0 0 0 0 0 0 0 0 1 1 7575 3942 189.375 98.55 0.9 14 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1016 버닝쉴드 summon_burningshield.GCMDS 1 Summon 32 109.2 32 314.6666667 36 1 133 -133 142.5 -142.5 293 0.092034505 0 46 133 160 83 64 62 15 1.3 7 15 31 19 0 0 0 0 0 0 0 0 0 0 1 1 8675 4208 216.875 105.2 0.95 15 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1017 버닝쉴드 summon_burningshield.GCMDS 1 Summon 32 112 32 320 36 1 140 -140 150 -150 300 0.089892233 0 49 141 170 88 67 66 16 1.3 7 16 33 20 0 0 0 0 0 0 0 0 0 0 1 1 9818 4476 245.45 111.9 1 16 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1018 버닝쉴드 summon_burningshield.GCMDS 1 Summon 32 114.8 32 325.3333333 36 1 147 -147 157.5 -157.5 308 0.087562741 0 52 148 179 94 72 71 17 1.3 7 17 35 21 0 0 0 0 0 0 0 0 0 0 1 1 11179 4798 279.475 119.95 1.05 17 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1019 버닝쉴드 summon_burningshield.GCMDS 1 Summon 32 117.6 32 330.6666667 36 1 154 -154 165 -165 315 0.085621174 0 55 157 188 99 76 74 18 1.3 7 18 37 22 0 0 0 0 0 0 0 0 0 0 1 1 12451 5072 311.275 126.8 1.1 18 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1020 파이어윙 summon_firewing.GCMDS 1 Summon 36 113.4 36 336 40 1 240 -240 240 -160 310 0.08699909 0 55 157 188 99 76 74 19 1.5 7 19 37 22 0 0 0 0 0 0 0 0 0 0 1 1 12451 5072 311.275 126.8 0.8 18 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1021 파이어윙 summon_firewing.GCMDS 1 Summon 36 116.55 36 342 40 1 255 -255 255 -170 320 0.084286179 0 58 164 197 104 80 78 20 1.5 7 20 39 24 0 0 0 0 0 0 0 0 0 0 1 1 13963 5350 349.075 133.75 0.85 19 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1022 파이어윙 summon_firewing.GCMDS 1 Summon 36 119.7 36 348 40 1 270 -270 270 -180 330 0.081737184 0 61 170 205 108 83 83 21 1.5 8 21 41 25 0 0 0 0 0 0 0 0 0 0 1 1 15509 5630 387.725 140.75 0.9 20 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1023 파이어윙 summon_firewing.GCMDS 1 Summon 36 122.85 36 354 40 1 285 -285 285 -190 340 0.079337698 0 64 179 216 114 88 87 22 1.5 8 22 43 26 0 0 0 0 0 0 0 0 0 0 1 1 17322 5964 433.05 149.1 0.95 21 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1024 파이어윙 summon_firewing.GCMDS 1 Summon 36 126 36 360 40 1 300 -300 300 -200 350 0.077074953 0 67 188 225 120 92 91 23 1.5 8 23 45 27 0 0 0 0 0 0 0 0 0 0 1 1 19001 6250 475.025 156.25 1 22 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1025 파이어윙 summon_firewing.GCMDS 1 Summon 36 129.15 36 366 40 1 315 -315 315 -210 360 0.074937594 0 70 193 232 124 96 95 24 1.5 8 24 47 29 0 0 0 0 0 0 0 0 0 0 1 1 20988 6540 524.7 163.5 1.05 23 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1026 파이어윙 summon_firewing.GCMDS 1 Summon 36 132.3 36 372 40 1 330 -330 330 -220 370 0.072915486 0 73 201 242 128 99 98 25 1.5 8 25 49 30 0 0 0 0 0 0 0 0 0 0 1 1 22997 6832 574.925 170.8 1.1 24 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1027 데스번 summon_firewing.GCMDS 1 Summon 36 113.4 36 336 40 1 240 -240 240 -160 310 0.08699909 0 73 201 242 128 99 98 26 1.5 8 26 49 30 0 0 0 0 0 0 0 0 0 0 1 1 22997 6832 574.925 170.8 0.8 24 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1028 데스번 summon_firewing.GCMDS 1 Summon 36 116.55 36 342 40 1 255 -255 255 -170 320 0.084286179 0 76 208 251 134 104 103 27 1.5 9 27 51 31 0 0 0 0 0 0 0 0 0 0 1 1 25325 7178 633.125 179.45 0.85 25 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1029 데스번 summon_firewing.GCMDS 1 Summon 36 119.7 36 348 40 1 270 -270 270 -180 330 0.081737184 0 79 217 260 140 108 108 28 1.5 9 28 53 32 0 0 0 0 0 0 0 0 0 0 1 1 27468 7476 686.7 186.9 0.9 26 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1030 데스번 summon_firewing.GCMDS 1 Summon 36 122.85 36 354 40 1 285 -285 285 -190 340 0.079337698 0 82 224 269 144 112 111 29 1.5 9 29 55 34 0 0 0 0 0 0 0 0 0 0 1 1 29992 7778 749.8 194.45 0.95 27 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1031 데스번 summon_firewing.GCMDS 1 Summon 36 126 36 360 40 1 300 -300 300 -200 350 0.077074953 0 85 230 277 148 115 114 30 1.5 9 30 57 35 0 0 0 0 0 0 0 0 0 0 1 1 32525 8082 813.125 202.05 1 28 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1032 데스번 summon_firewing.GCMDS 1 Summon 36 129.15 36 366 40 1 315 -315 315 -210 360 0.074937594 0 88 239 288 155 120 120 31 1.5 9 31 59 36 0 0 0 0 0 0 0 0 0 0 1 1 35430 8440 885.75 211 1.05 29 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1033 데스번 summon_firewing.GCMDS 1 Summon 36 132.3 36 372 40 1 330 -330 330 -220 370 0.072915486 0 91 248 297 160 124 124 32 1.5 10 32 61 37 0 0 0 0 0 0 0 0 0 0 1 1 38093 8750 952.325 218.75 1.1 30 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1034 명예의 석상(중립) stone_n.GCMDS 2 Structure 0 0 0 0 1 1 125 -125 125 -125 275 0.098041964 0 89 241 290 155 121 120 32 0 9 32 59 37 0 0 0 0 0 0 0 0 0 0 1 1 36195 8495 904.875 212.375 5 29 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1035 명예의 석상(인간)소환중 stone_h_re.GCMDS 0 Structure 0 0 0 0 1 1 125 -125 125 -125 275 0.098041964 0 89 241 290 155 121 120 32 0 9 32 59 37 0 0 0 0 0 0 0 0 0 0 1 1 36195 8495 904.875 212.375 5 29 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1036 명예의 석상(인간) stone_h.GCMDS 0 Structure 0 0 0 0 1 1 125 -125 125 -125 275 0.098041964 0 89 241 290 155 121 120 32 0 9 32 59 37 0 0 0 0 0 0 0 0 0 0 1 1 36195 8495 904.875 212.375 5 29 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1037 명예의 석상(아칸)소환중 stone_a_re.GCMDS 1 Structure 0 0 0 0 1 1 125 -125 125 -125 275 0.098041964 0 89 241 290 155 121 120 32 0 9 32 59 37 0 0 0 0 0 0 0 0 0 0 1 1 36195 8495 904.875 212.375 5 29 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0
1038 명예의 석상(아칸) stone_a.GCMDS 1 Structure 0 0 0 0 1 1 125 -125 125 -125 275 0.098041964 0 89 241 290 155 121 120 32 0 9 32 59 37 0 0 0 0 0 0 0 0 0 0 1 1 36195 8495 904.875 212.375 5 29 X X X X 0 0 0 0 0 0 0 0 0 0 0 0 0

View File

@@ -0,0 +1,91 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by Arrangement2.rc
//
#define IDR_MANIFEST 1
#define IDM_ABOUTBOX 0x0010
#define IDD_ABOUTBOX 100
#define IDS_ABOUTBOX 101
#define IDD_ARRANGEMENT2_DIALOG 102
#define IDR_MAINFRAME 128
#define IDR_MENU1 129
#define ID_130 130
#define ID__50 131
#define ID__100 132
#define ID__200 133
#define ID__400 134
#define ID__800 135
#define IDR_ACCELERATOR1 136
#define IDC_POSITIONX 1002
#define IDC_POSITIONZ 1004
#define IDC_SCOUT 1006
#define IDC_AREA 1007
#define IDC_FIX 1008
#define IDC_ROUTE 1009
#define IDC_NONAREA 1010
#define IDC_CREATESCRIPT 1011
#define IDC_NUMINWORLD 1012
#define IDC_KIDCOMBO 1013
#define IDC_VISUALKID 1014
#define IDC_ERASE 1015
#define IDC_NUMOFKID 1016
#define IDC_NUMOFKID2 1017
#define IDC_CLASS 1017
#define IDC_LEVEL 1018
#define IDC_NAME 1019
#define IDC_ARRANGEMENT 1020
#define IDC_GROUP 1022
#define IDC_VISUALPID 1023
#define IDC_COMBO1 1024
#define IDC_PIDCOMBO 1024
#define IDC_EDIT2 1026
#define IDC_RESPAWNEDIT 1026
#define IDC_CHECK1 1027
#define IDC_VISUALLEVEL 1027
#define IDC_EDIT1 1028
#define IDC_PARTYMEM_NUM 1028
#define IDC_CHECK2 1029
#define IDC_CHK_STATUE 1029
#define IDC_STATIC4 1033
#define IDC_STATIC1 1034
#define IDC_STATIC2 1035
#define IDC_STATIC3 1036
#define IDC_STATICKID 1037
#define IDC_STATICNAME 1038
#define IDC_STATICLEVEL 1039
#define IDC_STATICCLASS 1040
#define IDC_STATICOBJNUM 1041
#define IDC_STATICRESPAWN 1042
#define IDC_STATICPID 1043
#define IDC_STATIC5 1044
#define IDC_STATIC6 1045
#define IDC_STATICX 1046
#define IDC_STATICZ 1047
#define IDC_STATICMONTNUM 1048
#define ID_32774 32774
#define ID_Menu 32775
#define ID__32779 32779
#define ID__32780 32780
#define ID__32781 32781
#define ID__32782 32782
#define ID__ZONE1 32789
#define ID__ZONE2 32790
#define ID__ZONE3 32791
#define ID__ZONE4 32792
#define ID__ZONE5 32793
#define ID__ZONE8 32794
#define ID__ZONE9 32795
#define ID__ZONE12 32796
#define ID__ZONE100 32797
#define ID__ZONE16 32799
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 137
#define _APS_NEXT_COMMAND_VALUE 32801
#define _APS_NEXT_CONTROL_VALUE 1049
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 MiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 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.Arrangement2"
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 @@
//
// Arrangement2.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,7 @@
// stdafx.cpp : 표준 포함 파일을 포함하는 소스 파일입니다.
// Arrangement2.pch는 미리 컴파일된 헤더가 됩니다.
// stdafx.obj는 미리 컴파일된 형식 정보를 포함합니다.
#include "stdafx.h"

View File

@@ -0,0 +1,45 @@
// 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 <gdiplus.h>
using namespace Gdiplus;

View File

@@ -0,0 +1,88 @@
// AuthDBManager.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "AuthDBManager.h"
#include "AuthDBManagerDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAuthDBManagerApp
BEGIN_MESSAGE_MAP(CAuthDBManagerApp, CWinApp)
//{{AFX_MSG_MAP(CAuthDBManagerApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAuthDBManagerApp construction
CAuthDBManagerApp::CAuthDBManagerApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CAuthDBManagerApp object
CAuthDBManagerApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CAuthDBManagerApp initialization
BOOL CAuthDBManagerApp::InitInstance()
{
// ¾ð¾î DLL
GET_PLUGIN_INFO hGet_PlugIn_Info;
if((m_Language = LoadLibrary("language.dll")) != NULL)
{
AfxSetResourceHandle(m_Language);
hGet_PlugIn_Info = (GET_PLUGIN_INFO)GetProcAddress(m_Language, "Get_PlugIn_Info");
if(hGet_PlugIn_Info != NULL)
{
m_PlugInInfo = hGet_PlugIn_Info();
}
}
else
{
m_Language = m_hInstance;
ZeroMemory(&m_PlugInInfo, sizeof(PLUGININFO));
}
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
CAuthDBManagerDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}

View File

@@ -0,0 +1,56 @@
// AuthDBManager.h : main header file for the AuthDBManager application
//
#if !defined(AFX_AuthDBManager_H__EA33128C_6CFB_48FD_9E36_85366557E0D2__INCLUDED_)
#define AFX_AuthDBManager_H__EA33128C_6CFB_48FD_9E36_85366557E0D2__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#include "resource.h" // main symbols
#include "plugin.h"
#include <RylServerLibrary/DB/DBComponent.h>
#include "AuthDef.h"
/////////////////////////////////////////////////////////////////////////////
// CAuthDBManagerApp:
// See AuthDBManager.cpp for the implementation of this class
//
class CAuthDBManagerApp : public CWinApp
{
public:
CAuthDBManagerApp();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAuthDBManagerApp)
public:
virtual BOOL InitInstance();
//}}AFX_VIRTUAL
// Implementation
PLUGININFO m_PlugInInfo;
HINSTANCE m_Language;
//{{AFX_MSG(CAuthDBManagerApp)
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_AuthDBManager_H__EA33128C_6CFB_48FD_9E36_85366557E0D2__INCLUDED_)

View File

@@ -0,0 +1,432 @@
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// Korean 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 DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
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"
"#ifdef _WIN32\r\n"
"LANGUAGE 18, 1\r\n"
"#pragma code_page(949)\r\n"
"#endif //_WIN32\r\n"
"#include ""res\\AuthDBManager.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
"#include ""l.kor\\afxres.rc"" // Standard components\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOGEX 0, 0, 121, 166
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "프로그램 정보"
FONT 10, "굴림"
BEGIN
ICON IDR_MAINFRAME,IDC_STATIC,13,22,20,20,0,WS_EX_STATICEDGE
LTEXT "인증 DB 매니저 버전 1.0",IDC_STATIC,35,29,77,8,
SS_NOPREFIX
DEFPUSHBUTTON "확인",IDOK,35,132,50,14,BS_FLAT | WS_GROUP
GROUPBOX "",IDC_STATIC,5,4,110,154
CTEXT "플러그 인",IDC_STATIC,13,50,36,12,SS_NOPREFIX |
SS_CENTERIMAGE | SS_SUNKEN
LISTBOX ID_PLUGIN_LIST,13,63,94,30,LBS_SORT |
LBS_NOINTEGRALHEIGHT | NOT WS_BORDER | WS_VSCROLL |
WS_TABSTOP,WS_EX_STATICEDGE
CTEXT "업데이트",IDC_STATIC,13,94,36,12,SS_NOPREFIX |
SS_CENTERIMAGE | SS_SUNKEN
CTEXT "",ID_LASTUPDATE,49,94,58,12,SS_NOPREFIX |
SS_CENTERIMAGE | SS_SUNKEN
CTEXT "제작자",IDC_STATIC,13,107,36,12,SS_NOPREFIX |
SS_CENTERIMAGE | SS_SUNKEN
CTEXT "",ID_CREATER,49,107,58,12,SS_NOPREFIX | SS_CENTERIMAGE |
SS_SUNKEN
END
IDD_AuthDBManager_DIALOG DIALOGEX 0, 0, 418, 398
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION |
WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "인증 DB 매니저"
MENU IDR_MENU
FONT 10, "굴림"
BEGIN
CONTROL "List1",ID_USER_LIST,"SysListView32",LVS_REPORT |
LVS_EDITLABELS | WS_TABSTOP,7,21,403,218,
WS_EX_STATICEDGE
LTEXT "",ID_ERROR_LOG,7,350,243,35,0,WS_EX_STATICEDGE
GROUPBOX "",IDC_STATIC,0,0,418,397,BS_FLAT
CTEXT "",ID_SELECTED_ROW,54,6,28,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "",ID_SELECTED_COUNT,82,6,29,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "아이디",IDC_STATIC,13,258,30,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
GROUPBOX "유저 추가",IDC_STATIC,7,245,243,97,BS_FLAT
CTEXT "패스",IDC_STATIC,13,270,30,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "이름",IDC_STATIC,13,283,30,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT ID_ID,43,258,50,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
EDITTEXT ID_PASSWORD,43,270,50,12,ES_PASSWORD | ES_AUTOHSCROLL |
NOT WS_BORDER,WS_EX_STATICEDGE
EDITTEXT ID_NAME,43,283,50,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
CTEXT "성",IDC_STATIC,13,296,30,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
COMBOBOX ID_SEX,43,296,50,54,CBS_DROPDOWN | WS_VSCROLL |
WS_TABSTOP
CTEXT "생일",IDC_STATIC,13,309,30,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT ID_BIRTH,43,309,50,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
CTEXT "주민등록",IDC_STATIC,13,322,30,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT ID_IDNUMBER,43,322,50,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
CTEXT "우편번호",IDC_STATIC,103,270,30,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT ID_ZIPCODE,133,270,50,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
CTEXT "주소",IDC_STATIC,103,283,30,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT ID_ADDRESS,133,283,109,12,ES_AUTOHSCROLL | ES_OEMCONVERT |
ES_WANTRETURN | NOT WS_BORDER,WS_EX_STATICEDGE
CTEXT "핸드폰",IDC_STATIC,103,296,30,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT ID_MOBILE,133,296,50,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
CTEXT "전화번호",IDC_STATIC,103,309,30,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT ID_PHONE,133,309,50,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
CTEXT "직업",IDC_STATIC,103,258,30,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT ID_JOB,133,258,50,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
CTEXT "메일",IDC_STATIC,103,322,30,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT ID_EMAIL,133,322,109,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
CTEXT "선택 줄 / 개수",IDC_STATIC,7,6,47,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "ID / 아이디",IDC_STATIC,196,6,41,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "",ID_SELECTED_UID,237,6,29,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "",ID_SELECTED_ID,266,6,68,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "총 수",IDC_STATIC,345,6,27,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "",ID_TOTAL_ROW,372,6,38,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "*",ID_CONNECTION_LED,161,7,10,9,SS_CENTERIMAGE
CTEXT "*",ID_QEURY_LED,173,7,10,9,SS_CENTERIMAGE
CTEXT "연결 / 쿼리",IDC_STATIC,120,6,37,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CONTROL 133,IDC_STATIC,"Static",SS_BITMAP,272,269,127,86
DEFPUSHBUTTON "@.@",IDC_DEFAULT,327,319,26,14,BS_FLAT | NOT WS_VISIBLE
END
IDD_CONNECT DIALOGEX 0, 0, 143, 169
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "DB 연결"
FONT 10, "굴림체"
BEGIN
COMBOBOX ID_SELECT_TYPE,74,7,58,70,CBS_DROPDOWN | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
CTEXT "접속 방법 선택",IDC_STATIC,9,7,65,13,SS_CENTERIMAGE,
WS_EX_STATICEDGE
GROUPBOX "ODBC",IDC_STATIC,8,29,124,32,BS_FLAT
CTEXT "데이터 소스",IDC_STATIC,15,40,51,13,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT ID_DATASOURCE_NAME,66,40,58,13,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
GROUPBOX "OLE DB",IDC_STATIC,8,66,124,73,BS_FLAT
CTEXT "서버",IDC_STATIC,15,78,51,13,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT ID_SERVER_NAME,66,78,58,13,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
CTEXT "데이터베이스",IDC_STATIC,15,91,51,13,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT ID_DATABASE_NAME,66,91,58,13,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
CTEXT "패스워드",IDC_STATIC,15,117,51,13,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT ID_AUTHUSER_NAME,66,104,58,13,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
CTEXT "계정",IDC_STATIC,15,104,51,13,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT ID_AUTHUSER_PASS,66,117,58,13,ES_PASSWORD |
ES_AUTOHSCROLL | NOT WS_BORDER,WS_EX_STATICEDGE
PUSHBUTTON "확인",IDOK,45,145,50,14,BS_FLAT
END
IDD_SEARCH DIALOGEX 0, 0, 138, 146
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "검색 정렬"
FONT 10, "굴림체", 0, 0, 0x1
BEGIN
PUSHBUTTON "확인",IDOK,37,115,50,14,BS_FLAT
GROUPBOX "검색",IDC_STATIC,6,7,123,46,BS_FLAT
EDITTEXT ID_SEARCH_TEXT,54,32,66,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
CTEXT "검색 대상",IDC_STATIC,15,32,39,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
COMBOBOX ID_SELECT_SEARCH,54,19,67,95,CBS_DROPDOWN | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
CTEXT "검색 선택",IDC_STATIC,15,19,39,13,SS_CENTERIMAGE,
WS_EX_STATICEDGE
GROUPBOX "정렬",IDC_STATIC,6,58,123,46,BS_FLAT
COMBOBOX ID_SELECT_ALIGN,54,69,67,95,CBS_DROPDOWN | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
CTEXT "정렬 선택",IDC_STATIC,15,69,39,13,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "정렬 방식",IDC_STATIC,15,82,39,13,SS_CENTERIMAGE,
WS_EX_STATICEDGE
COMBOBOX ID_SELECT_ALIGNTYPE,54,82,67,95,CBS_DROPDOWN | CBS_SORT |
WS_VSCROLL | WS_TABSTOP
END
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// 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 "041204B0"
BEGIN
VALUE "CompanyName", "\0"
VALUE "FileDescription", "AuthDBManager MFC 응용 프로그램\0"
VALUE "FileVersion", "1, 0, 0, 1\0"
VALUE "InternalName", "AuthDBManager\0"
VALUE "LegalCopyright", "Copyright (C) 2002\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "AuthDBManager.EXE\0"
VALUE "ProductName", "AuthDBManager 응용 프로그램\0"
VALUE "ProductVersion", "1, 0, 0, 1\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x412, 1200
END
END
#endif // !_MAC
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_ABOUTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 114
TOPMARGIN, 7
BOTTOMMARGIN, 159
END
IDD_AuthDBManager_DIALOG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 411
TOPMARGIN, 7
BOTTOMMARGIN, 391
END
IDD_CONNECT, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 136
TOPMARGIN, 7
BOTTOMMARGIN, 162
END
IDD_SEARCH, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 131
TOPMARGIN, 7
BOTTOMMARGIN, 139
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME ICON DISCARDABLE "icon.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_MENU MENU DISCARDABLE
BEGIN
POPUP "연결"
BEGIN
MENUITEM "연결", ID_CONNECT
MENUITEM "끊기", ID_DISCONNECT
END
POPUP "관리"
BEGIN
MENUITEM "유저 추가", ID_ADD_USER
MENUITEM "유저 삭제", ID_DELETE_USER
END
POPUP "툴"
BEGIN
MENUITEM "유저 리스트 업데이트", ID_REFESH
MENUITEM "검색 정렬", ID_SEARCH
END
POPUP "정보"
BEGIN
MENUITEM "정보", ID_ABOUT
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//
IDB_LEDS BITMAP DISCARDABLE "Led\\leds.bmp"
IDB_LOGO BITMAP DISCARDABLE "res\\Logo.bmp"
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
IDS_F1 "ID"
IDS_F2 "아이디"
IDS_F3 "패스"
IDS_F4 "이름"
IDS_F5 "성"
IDS_F6 "생일"
IDS_F7 "주민번호"
IDS_F8 "우편번호"
IDS_F9 "주소"
IDS_F10 "휴대폰"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_F11 "전화"
IDS_F12 "메일"
IDS_F13 "직업"
IDS_F14 "가입날짜"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_S1 "남"
IDS_S2 "여"
IDS_A1 "오름차순"
IDS_A2 "내림차순"
END
#endif // Korean 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)
#ifdef _WIN32
LANGUAGE 18, 1
#pragma code_page(949)
#endif //_WIN32
#include "res\AuthDBManager.rc2" // non-Microsoft Visual C++ edited resources
#include "l.kor\afxres.rc" // Standard components
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@@ -0,0 +1,254 @@
<?xml version="1.0" encoding="ks_c_5601-1987"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="AuthDBManager"
ProjectGUID="{8832403E-C3A9-419C-832D-0BF8968EA53B}"
Keyword="MFCProj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="../DBToolExecutable/$(ConfigurationName)"
IntermediateDirectory="../Intermediate/$(ProjectName)/$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="1"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../;./;../../RylServerProject;../../RylServerProject/RylServerLibrary;../../RylServerProject/BaseLibrary"
PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="2"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="odbc32.lib odbccp32.lib oledb.lib msdasc.lib"
LinkIncremental="2"
SuppressStartupBanner="TRUE"
GenerateDebugInformation="TRUE"
SubSystem="2"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="TRUE"
SuppressStartupBanner="TRUE"
TargetEnvironment="1"
TypeLibraryName=".\Debug/AuthDBManager.tlb"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1042"/>
<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"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../;./;../../RylServerProject;../../RylServerProject/RylServerLibrary;../../RylServerProject/BaseLibrary"
PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS"
StringPooling="TRUE"
RuntimeLibrary="0"
EnableFunctionLevelLinking="TRUE"
UsePrecompiledHeader="2"
WarningLevel="3"
SuppressStartupBanner="TRUE"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="odbc32.lib odbccp32.lib oledb.lib msdasc.lib"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
SubSystem="2"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="TRUE"
SuppressStartupBanner="TRUE"
TargetEnvironment="1"
TypeLibraryName=".\Release/AuthDBManager.tlb"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1042"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
<File
RelativePath=".\AuthDBManager.cpp">
</File>
<File
RelativePath=".\AuthDBManager.rc">
</File>
<File
RelativePath=".\AuthDBManagerDlg.cpp">
</File>
<File
RelativePath=".\ConnectDlg.cpp">
</File>
<File
RelativePath=".\SearchDlg.cpp">
</File>
<File
RelativePath=".\StdAfx.cpp">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
PrecompiledHeaderThrough="stdafx.h"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
PrecompiledHeaderThrough="stdafx.h"/>
</FileConfiguration>
</File>
<File
RelativePath=".\UserList.cpp">
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl">
<File
RelativePath=".\AuthDBManager.h">
</File>
<File
RelativePath=".\AuthDBManagerDlg.h">
</File>
<File
RelativePath="AuthDef.h">
</File>
<File
RelativePath=".\ConnectDlg.h">
</File>
<File
RelativePath=".\plugin.h">
</File>
<File
RelativePath=".\Resource.h">
</File>
<File
RelativePath=".\SearchDlg.h">
</File>
<File
RelativePath=".\StdAfx.h">
</File>
<File
RelativePath=".\UserList.h">
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
<File
RelativePath=".\res\AuthDBManager.rc2">
</File>
<File
RelativePath=".\icon.ico">
</File>
<File
RelativePath=".\Led\leds.bmp">
</File>
<File
RelativePath=".\res\Logo.bmp">
</File>
</Filter>
<Filter
Name="Led"
Filter="">
<File
RelativePath=".\Led\Led.cpp">
</File>
<File
RelativePath=".\Led\Led.h">
</File>
</Filter>
<Filter
Name="ListViewControl"
Filter="">
<File
RelativePath=".\ListViewControl\InPlaceEdit.cpp">
</File>
<File
RelativePath=".\ListViewControl\InPlaceEdit.h">
</File>
<File
RelativePath=".\ListViewControl\InPlaceList.cpp">
</File>
<File
RelativePath=".\ListViewControl\InPlaceList.h">
</File>
<File
RelativePath=".\ListViewControl\ListViewControl.cpp">
</File>
<File
RelativePath=".\ListViewControl\ListViewControl.h">
</File>
</Filter>
</Files>
<Globals>
<Global
Name="RESOURCE_FILE"
Value="AuthDBManager.rc"/>
</Globals>
</VisualStudioProject>

View File

@@ -0,0 +1,640 @@
// AuthDBManagerDlg.cpp : implementation file
//
#include "stdafx.h"
#include "AuthDBManager.h"
#include "AuthDBManagerDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
CListBox m_PlugList;
CString m_LastUpdate;
CString m_Creater;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSelchangePluginList();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
m_LastUpdate = _T("");
m_Creater = _T("");
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
DDX_Control(pDX, ID_PLUGIN_LIST, m_PlugList);
DDX_Text(pDX, ID_LASTUPDATE, m_LastUpdate);
DDX_Text(pDX, ID_CREATER, m_Creater);
//}}AFX_DATA_MAP
}
BOOL CAboutDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CAuthDBManagerApp* pAppWnd = (CAuthDBManagerApp*)AfxGetApp();
CString PlugInfoS;
if(pAppWnd->m_PlugInInfo.PlugInfo)
{
PlugInfoS.Format("%s %s", pAppWnd->m_PlugInInfo.PlugInName, pAppWnd->m_PlugInInfo.PlugInVer);
m_PlugList.AddString(PlugInfoS);
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CAboutDlg::OnSelchangePluginList()
{
// TODO: Add your control notification handler code here
CAuthDBManagerApp* pAppWnd = (CAuthDBManagerApp*)AfxGetApp();
int Sel;
Sel = m_PlugList.GetCurSel();
if(Sel == 0)
{
m_Creater = pAppWnd->m_PlugInInfo.PlugInCreator.CreaterName;
m_LastUpdate = pAppWnd->m_PlugInInfo.PlugInLastUpdate;
UpdateData(FALSE);
}
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
ON_LBN_SELCHANGE(ID_PLUGIN_LIST, OnSelchangePluginList)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAuthDBManagerDlg dialog
CAuthDBManagerDlg::CAuthDBManagerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAuthDBManagerDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CAuthDBManagerDlg)
m_ErrorLog = _T("");
m_SelectedCount = _T("");
m_SelectedRow = _T("");
m_SelectedUID = _T("");
m_SelectedID = _T("");
m_TotalRow = _T("");
m_Address = _T("");
m_Birth = _T("");
m_Email = _T("");
m_ID = _T("");
m_IDNumber = _T("");
m_Job = _T("");
m_Mobile = _T("");
m_Name = _T("");
m_Password = _T("");
m_Phone = _T("");
m_ZipCode = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CAuthDBManagerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAuthDBManagerDlg)
DDX_Control(pDX, ID_SEX, m_Sex);
DDX_Control(pDX, ID_CHAR_LIST, m_UserList);
DDX_Control(pDX, ID_QEURY_LED, m_QueryLed);
DDX_Control(pDX, ID_CONNECTION_LED, m_ConnectionLed);
DDX_Text(pDX, ID_ERROR_LOG, m_ErrorLog);
DDX_Text(pDX, ID_SELECTED_COUNT, m_SelectedCount);
DDX_Text(pDX, ID_SELECTED_ROW, m_SelectedRow);
DDX_Text(pDX, ID_SELECTED_UID, m_SelectedUID);
DDX_Text(pDX, ID_SELECTED_ID, m_SelectedID);
DDX_Text(pDX, ID_TOTAL_ROW, m_TotalRow);
DDX_Text(pDX, ID_ADDRESS, m_Address);
DDX_Text(pDX, ID_BIRTH, m_Birth);
DDX_Text(pDX, ID_EMAIL, m_Email);
DDX_Text(pDX, ID_ID, m_ID);
DDX_Text(pDX, ID_IDNUMBER, m_IDNumber);
DDX_Text(pDX, ID_JOB, m_Job);
DDX_Text(pDX, ID_MOBILE, m_Mobile);
DDX_Text(pDX, ID_NAME, m_Name);
DDX_Text(pDX, ID_PASSWORD, m_Password);
DDX_Text(pDX, ID_PHONE, m_Phone);
DDX_Text(pDX, ID_ZIPCODE, m_ZipCode);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAuthDBManagerDlg, CDialog)
//{{AFX_MSG_MAP(CAuthDBManagerDlg)
ON_WM_SYSCOMMAND()
ON_NOTIFY(LVN_ENDLABELEDIT, ID_USER_LIST, OnEndlabeleditUserList)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_COMMAND(ID_ABOUT, OnAbout)
ON_COMMAND(ID_CONNECT, OnConnect)
ON_COMMAND(ID_DISCONNECT, OnDisconnect)
ON_NOTIFY(NM_CLICK, ID_USER_LIST, OnClickUserList)
ON_COMMAND(ID_ADD_USER, OnAddUser)
ON_COMMAND(ID_DELETE_USER, OnDeleteUser)
ON_COMMAND(ID_INIT_LOGINTIME, OnInitLogintime)
ON_COMMAND(ID_REFESH, OnRefesh)
ON_COMMAND(ID_SEARCH, OnSearch)
ON_NOTIFY(LVN_KEYDOWN, ID_USER_LIST, OnKeydownUserList)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAuthDBManagerDlg message handlers
BOOL CAuthDBManagerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
char SelectName[256];
int Counter;
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
CAuthDBManagerApp* pAppWnd = (CAuthDBManagerApp*)AfxGetApp();
m_UserList.SetColumn();
for(Counter = 0; Counter < 2; Counter++)
{
LoadString(pAppWnd->m_Language, IDS_S1 + Counter, SelectName, 256);
m_Sex.InsertString(Counter, SelectName);
}
m_Sex.SetCurSel(0);
m_ConnectionLed.SetLed(CLed::LED_COLOR_GREEN, CLed::LED_OFF, CLed::LED_ROUND);
m_QueryLed.SetLed(CLed::LED_COLOR_RED, CLed::LED_OFF, CLed::LED_ROUND);
m_Align = 0;
m_AlignType = 0;
m_SearchType = 0;
ZeroMemory(m_Search, sizeof(char) * 256);
return TRUE; // return TRUE unless you set the focus to a control
}
void CAuthDBManagerDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CAuthDBManagerDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CAuthDBManagerDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CAuthDBManagerDlg::OnAbout()
{
// TODO: Add your command handler code here
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
void CAuthDBManagerDlg::OnConnect()
{
m_QueryLed.SetLed(CLed::LED_COLOR_RED, CLed::LED_ON, CLed::LED_ROUND);
if(!CDBSingleObject::GetInstance().Connect(CDBSingleObject::Class_AuthDB))
{
m_ErrorLog.Format("[연결] 접속에 실패 했습니다. %s", CDBSingleObject::GetInstance().GetErrorString());
}
else
{
m_ErrorLog.Format("[연결] 접속에 성공 했습니다.");
}
m_QueryLed.SetLed(CLed::LED_COLOR_RED, CLed::LED_OFF, CLed::LED_ROUND);
m_ConnectionLed.SetLed(CLed::LED_COLOR_GREEN, CLed::LED_ON, CLed::LED_ROUND);
UpdateUserTable();
}
void CAuthDBManagerDlg::OnDisconnect()
{
// TODO: Add your command handler code here
m_QueryLed.SetLed(CLed::LED_COLOR_RED, CLed::LED_ON, CLed::LED_ROUND);
if(CDBSingleObject::GetInstance().DisconnectDataSource())
m_ConnectionLed.SetLed(CLed::LED_COLOR_GREEN, CLed::LED_OFF, CLed::LED_ROUND);
m_QueryLed.SetLed(CLed::LED_COLOR_RED, CLed::LED_OFF, CLed::LED_ROUND);
}
bool CAuthDBManagerDlg::ConnectDB(int Type, CString DataSource, CString Server, CString DataBase, CString User, CString Pass)
{
m_QueryLed.SetLed(CLed::LED_COLOR_RED, CLed::LED_ON, CLed::LED_ROUND);
if(Type == 0)
{
if(!CDBSingleObject::GetInstance().ConnectSQLServer(DataSource.GetBuffer(0), NULL, NULL, NULL, CDBSingleObject::ConnType_ODBC))
{
m_ErrorLog = CDBSingleObject::GetInstance().GetErrorString();
UpdateData(FALSE);
m_QueryLed.SetLed(CLed::LED_COLOR_RED, CLed::LED_OFF, CLed::LED_ROUND);
return false;
}
}
else if(Type == 1)
{
if(!CDBSingleObject::GetInstance().ConnectSQLServer(Server.GetBuffer(0), DataBase.GetBuffer(0), User.GetBuffer(0), Pass.GetBuffer(0), CDBSingleObject::ConnType_MSSQL))
{
m_ErrorLog = CDBSingleObject::GetInstance().GetErrorString();
UpdateData(FALSE);
m_QueryLed.SetLed(CLed::LED_COLOR_RED, CLed::LED_OFF, CLed::LED_ROUND);
return false;
}
}
else if(Type == 2)
{
if(!CDBSingleObject::GetInstance().ConnectDataSourcePrompt(m_hWnd))
{
m_ErrorLog = CDBSingleObject::GetInstance().GetErrorString();
UpdateData(FALSE);
m_QueryLed.SetLed(CLed::LED_COLOR_RED, CLed::LED_OFF, CLed::LED_ROUND);
return false;
}
}
m_QueryLed.SetLed(CLed::LED_COLOR_RED, CLed::LED_OFF, CLed::LED_ROUND);
m_ConnectionLed.SetLed(CLed::LED_COLOR_GREEN, CLed::LED_ON, CLed::LED_ROUND);
return true;
}
const int MaxRow = 200;
bool CAuthDBManagerDlg::UpdateUserTable(void)
{
SELECT_AUTHUSER_TABLE LoginTable[MaxRow] = {0,};
int StartRow;
int RowCounter, Rows;
char Query[256] = "";
char Option[256] = "";
if(m_SearchType != 0)
{
if(m_SearchType == 1)
{
sprintf(Option, " where Account='%s'", m_Search);
}
else if(m_SearchType == 2)
{
sprintf(Option, " where Name='%s'", m_Search);
}
}
if(m_Align == 0)
{
strcat(Option, " order by UID");
}
else if(m_Align == 1)
{
strcat(Option, " order by Account");
}
else if(m_Align == 2)
{
strcat(Option, " order by Name");
}
if(m_AlignType == 0)
{
strcat(Option, " asc");
}
else if(m_AlignType == 1)
{
strcat(Option, " desc");
}
m_UserList.DeleteAllItems();
sprintf(Query, "select * from AuthUser %s", Option);
for(StartRow = 0;; StartRow += MaxRow)
{
if(CDBSingleObject::GetInstance().Select(Query, (void**)&LoginTable, sizeof(SELECT_AUTHUSER_TABLE), StartRow, MaxRow, &Rows))
{
for(RowCounter = 0; RowCounter < Rows; RowCounter++)
m_UserList.AddUserRow(&LoginTable[RowCounter]);
}
else
{
m_ErrorLog = CDBSingleObject::GetInstance().GetErrorString();
UpdateData(FALSE);
return false;
}
if(Rows < MaxRow)
break;
}
m_TotalRow.Format("%d", StartRow + Rows);
UpdateData(FALSE);
return true;
}
void CAuthDBManagerDlg::OnClickUserList(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
POSITION Pos;
int Index;
unsigned long UserUID;
char strUserUID[256];
char strUserID[256];
Pos= m_UserList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
while(Pos)
{
Index = m_UserList.GetNextSelectedItem(Pos);
}
m_SelectedRow.Format("%d", Index);
m_SelectedCount.Format("%d", m_UserList.GetSelectedCount());
// 캐릭터 아이디 정보 업데이트
if(m_UserList.GetItemText(Index, 0, strUserUID, 256))
{
UserUID = atoi(strUserUID);
m_SelectedUID.Format("%d", UserUID);
m_UserList.GetItemText(Index, 1, strUserID, 256);
m_SelectedID = strUserID;
}
UpdateData(FALSE);
}
*pResult = 0;
}
void CAuthDBManagerDlg::OnEndlabeleditUserList(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
char Query[256] = "";
// TODO: Add your control notification handler code here
UPDATE_AUTHUSER_TABLE ModifyLoginTable;
LV_ITEM *plvItem = &pDispInfo->item;
ZeroMemory(&ModifyLoginTable, sizeof(UPDATE_AUTHUSER_TABLE));
if(plvItem->pszText != NULL)
{
m_UserList.SetItemText(plvItem->iItem, plvItem->iSubItem, plvItem->pszText);
m_UserList.GetUserRow(plvItem->iItem, &ModifyLoginTable);
sprintf(Query, "UpdateUser '%d', '%s', '%s', '%s', '%d', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s'",
ModifyLoginTable.UID, ModifyLoginTable.AuthID, ModifyLoginTable.AuthPW, ModifyLoginTable.Name, ModifyLoginTable.Sex, ModifyLoginTable.Birth,
ModifyLoginTable.ZipCode, ModifyLoginTable.Address, ModifyLoginTable.Mobile, ModifyLoginTable.Phone, ModifyLoginTable.Email, ModifyLoginTable.Job,
ModifyLoginTable.IDNumber);
CDBSingleObject::GetInstance().ExecuteQuery(Query);;
}
*pResult = 0;
}
void CAuthDBManagerDlg::OnAddUser()
{
// TODO: Add your command handler code here
INSERT_AUTHUSER_TABLE InsertLoginTable = {0,};
char Query[256] = "";
UpdateData(TRUE);
strncpy(InsertLoginTable.AuthID, m_ID.GetBuffer(16), 16);
strncpy(InsertLoginTable.AuthPW, m_Password.GetBuffer(16), 16);
strncpy(InsertLoginTable.Name, m_Name.GetBuffer(16), 16);
InsertLoginTable.Sex = m_Sex.GetCurSel();
strncpy(InsertLoginTable.Birth, m_Birth.GetBuffer(20), 20);
strncpy(InsertLoginTable.IDNumber, m_IDNumber.GetBuffer(14), 14);
strncpy(InsertLoginTable.ZipCode, m_ZipCode.GetBuffer(12), 12);
strncpy(InsertLoginTable.Address, m_Address.GetBuffer(80), 80);
strncpy(InsertLoginTable.Mobile, m_Mobile.GetBuffer(20), 20);
strncpy(InsertLoginTable.Phone, m_Phone.GetBuffer(20), 20);
strncpy(InsertLoginTable.Email, m_Email.GetBuffer(48), 48);
strncpy(InsertLoginTable.Job, m_Job.GetBuffer(20), 20);
sprintf(Query, "InsertUser '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s'",
InsertLoginTable.AuthID, InsertLoginTable.AuthPW, InsertLoginTable.Name, InsertLoginTable.Sex, InsertLoginTable.Birth,InsertLoginTable.ZipCode,
InsertLoginTable.Address, InsertLoginTable.Mobile, InsertLoginTable.Phone, InsertLoginTable.Email, InsertLoginTable.Job, InsertLoginTable.IDNumber);
if(CDBSingleObject::GetInstance().ExecuteQuery(Query))
UpdateUserTable();
else
{
m_ErrorLog = CDBSingleObject::GetInstance().GetErrorString();
UpdateData(FALSE);
}
}
void CAuthDBManagerDlg::OnDeleteUser()
{
// TODO: Add your command handler code here
POSITION Pos;
int Index;
char Query[256] = "";
char strUserUID[256] = "";
Pos= m_UserList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
while(Pos != NULL)
{
Index = m_UserList.GetNextSelectedItem(Pos);
if(m_UserList.GetItemText(Index, 0, strUserUID, 256))
{
sprintf(Query, "DeleteUserByUID %s", strUserUID);
if(!CDBSingleObject::GetInstance().ExecuteQuery(Query))
{
m_ErrorLog = CDBSingleObject::GetInstance().GetErrorString();
UpdateData(FALSE);
break;
}
}
}
}
UpdateUserTable();
}
void CAuthDBManagerDlg::OnInitLogintime()
{
// TODO: Add your command handler code here
}
void CAuthDBManagerDlg::OnRefesh()
{
// TODO: Add your command handler code here
UpdateUserTable();
}
void CAuthDBManagerDlg::OnSearch()
{
// TODO: Add your command handler code here
CSearchDlg dlgSearch;
dlgSearch.DoModal();
UpdateUserTable();
}
void CAuthDBManagerDlg::OnKeydownUserList(NMHDR* pNMHDR, LRESULT* pResult)
{
NMLVKEYDOWN* pKeyDown = (NMLVKEYDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
POSITION Pos;
int Index;
char Query[256] = "";
char strUserUID[256] = "";
if(pKeyDown->wVKey == VK_DELETE)
{
Pos= m_UserList.GetFirstSelectedItemPosition();
if(Pos != NULL)
{
while(Pos)
{
Index = m_UserList.GetNextSelectedItem(Pos);
if(m_UserList.GetItemText(Index, 0, strUserUID, 256))
{
sprintf(Query, "DeleteUserByUID %s", strUserUID);
if(!CDBSingleObject::GetInstance().ExecuteQuery(Query))
{
m_ErrorLog = CDBSingleObject::GetInstance().GetErrorString();
UpdateData(FALSE);
break;
}
}
}
UpdateUserTable();
}
}
*pResult = 0;
}

View File

@@ -0,0 +1,98 @@
// AuthDBManagerDlg.h : header file
//
#if !defined(AFX_AuthDBManagerDLG_H__E7BBB14C_99A2_40F4_A212_B00B1FF8EEF2__INCLUDED_)
#define AFX_AuthDBManagerDLG_H__E7BBB14C_99A2_40F4_A212_B00B1FF8EEF2__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/////////////////////////////////////////////////////////////////////////////
// CAuthDBManagerDlg dialog
#include "AuthDBManager.h"
#include "Led\Led.h"
#include "ConnectDlg.h"
#include "SearchDlg.h"
#include "UserList.h"
class CAuthDBManagerDlg : public CDialog
{
// Construction
public:
CAuthDBManagerDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CAuthDBManagerDlg)
enum { IDD = IDD_AuthDBManager_DIALOG };
CComboBox m_Sex;
CUserList m_UserList;
CLed m_QueryLed;
CLed m_ConnectionLed;
CString m_ErrorLog;
CString m_SelectedCount;
CString m_SelectedRow;
CString m_SelectedUID;
CString m_SelectedID;
CString m_TotalRow;
CString m_Address;
CString m_Birth;
CString m_Email;
CString m_ID;
CString m_IDNumber;
CString m_Job;
CString m_Mobile;
CString m_Name;
CString m_Password;
CString m_Phone;
CString m_ZipCode;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAuthDBManagerDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
char m_Select[2][10];
// Generated message map functions
//{{AFX_MSG(CAuthDBManagerDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnEndlabeleditUserList(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnAbout();
afx_msg void OnConnect();
afx_msg void OnDisconnect();
afx_msg void OnClickUserList(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnAddUser();
afx_msg void OnDeleteUser();
afx_msg void OnInitLogintime();
afx_msg void OnRefesh();
afx_msg void OnSearch();
afx_msg void OnKeydownUserList(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
int m_Align; // Á¤·Ä
int m_AlignType;
int m_SearchType; // °Ë»ö
char m_Search[256];
public:
bool ConnectDB(int Type, CString DataSource, CString Server, CString DataBase, CString User, CString Pass);
bool UpdateUserTable(void);
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_AuthDBManagerDLG_H__E7BBB14C_99A2_40F4_A212_B00B1FF8EEF2__INCLUDED_)

View File

@@ -0,0 +1,66 @@
///////////////////////////////////////////////////////////////////////////////////////////////
//
// Table Schema Define
//
//////////////////////////////////////////////////////////////////////////////////////////////
#ifndef _AuthDBDef
#define _AuthDBDef
#pragma pack(1)
typedef struct _INSERT_AUTHUSER_TABLE
{
char AuthID[16]; // 아이디
char AuthPW[16]; // 패스
char Name[16]; // 이름
char Sex; // 성별
char Birth[11]; // 생일
char ZipCode[12]; // 우편 번호
char Address[80]; // 주소
char Mobile[20]; // 휴대폰
char Phone[20]; // 전화
char Email[50]; // 이메일
char Job[20]; // 직업
char IDNumber[15]; // 주민등록 번호
}INSERT_AUTHUSER_TABLE, *LPINSERT_AUTHUSER_TABLE;
#pragma pack()
#pragma pack(1)
typedef struct _SELECT_AUTHUSER_TABLE
{
unsigned long UID; // 아이디
char AuthID[16]; // 아이디
char AuthPW[16]; // 패스
char Name[16]; // 이름
char Sex; // 성별
char Birth[11]; // 생일
char ZipCode[12]; // 우편 번호
char Address[80]; // 주소
char Mobile[20]; // 휴대폰
char Phone[20]; // 전화
char Email[50]; // 이메일
char Job[20]; // 직업
char IDNumber[15]; // 주민등록 번호
TIME Reg_Date; // 등록 일자
}SELECT_AUTHUSER_TABLE, *LPSELECT_AUTHUSER_TABLE;
#pragma pack()
#pragma pack(1)
typedef struct _UPDATE_AUTHUSER_TABLE
{
unsigned long UID; // 아이디
char AuthID[16]; // 아이디
char AuthPW[16]; // 패스
char Name[16]; // 이름
char Sex; // 성별
char Birth[11]; // 생일
char ZipCode[12]; // 우편 번호
char Address[80]; // 주소
char Mobile[20]; // 휴대폰
char Phone[20]; // 전화
char Email[50]; // 이메일
char Job[20]; // 직업
char IDNumber[15]; // 주민등록 번호
}UPDATE_AUTHUSER_TABLE, *LPUPDATE_AUTHUSER_TABLE;
#pragma pack()
#endif

View File

@@ -0,0 +1,89 @@
// ConnectDlg.cpp : implementation file
//
#include "stdafx.h"
#include "AuthDBManager.h"
#include "ConnectDlg.h"
#include "AuthDBManagerDlg.h"
#include ".\connectdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CConnectDlg dialog
CConnectDlg::CConnectDlg(CWnd* pParent /*=NULL*/)
: CDialog(CConnectDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CConnectDlg)
m_AuthUserName = _T("");
m_AuthUserPass = _T("");
m_DataBaseName = _T("");
m_DataSourceName = _T("");
m_ServerName = _T("");
//}}AFX_DATA_INIT
}
void CConnectDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CConnectDlg)
DDX_Control(pDX, ID_SELECT_TYPE, m_SelectControl);
DDX_Text(pDX, ID_AUTHUSER_NAME, m_AuthUserName);
DDX_Text(pDX, ID_AUTHUSER_PASS, m_AuthUserPass);
DDX_Text(pDX, ID_DATABASE_NAME, m_DataBaseName);
DDX_Text(pDX, ID_DATASOURCE_NAME, m_DataSourceName);
DDX_Text(pDX, ID_SERVER_NAME, m_ServerName);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CConnectDlg, CDialog)
//{{AFX_MSG_MAP(CConnectDlg)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDOK, OnBnClickedOk)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CconnectDlg message handlers
BOOL CConnectDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_SelectControl.InsertString(0, "ODBC");
m_SelectControl.InsertString(1, "OLE DB");
m_SelectControl.InsertString(2, "Source Prompt");
m_SelectControl.SetCurSel(0);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CConnectDlg::OnOK()
{
// TODO: Add extra validation here
CAuthDBManagerApp* pAppWnd = (CAuthDBManagerApp*)AfxGetApp();
CAuthDBManagerDlg* pDlgWnd = (CAuthDBManagerDlg*)pAppWnd->m_pMainWnd;
UpdateData();
pDlgWnd->ConnectDB(m_SelectControl.GetCurSel(), m_DataSourceName, m_ServerName, m_DataBaseName, m_AuthUserName, m_AuthUserPass);
CDialog::OnOK();
}
void CConnectDlg::OnBnClickedOk()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
OnOK();
}

View File

@@ -0,0 +1,54 @@
#if !defined(AFX_CONNECTDLG_H__815DC394_E827_414B_96D6_30BA20241E8F__INCLUDED_)
#define AFX_CONNECTDLG_H__815DC394_E827_414B_96D6_30BA20241E8F__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ConnectDlg.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CConnectDlg dialog
class CConnectDlg : public CDialog
{
// Construction
public:
CConnectDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CconnectDlg)
enum { IDD = IDD_CONNECT };
CComboBox m_SelectControl;
CString m_AuthUserName;
CString m_AuthUserPass;
CString m_DataBaseName;
CString m_DataSourceName;
CString m_ServerName;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CconnectDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CconnectDlg)
virtual void OnOK();
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedOk();
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_CONNECTDLG_H__815DC394_E827_414B_96D6_30BA20241E8F__INCLUDED_)

View File

@@ -0,0 +1,238 @@
///////////////////////////////////////////////////////////////////////////////
// Led.cpp : implementation file
// Visual Source Safe: $Revision: 1 $
//
// Led static control. Will display a LED in 4 different colors and two shapes.
///////////////////////////////////////////////////////////////////////////////
// Copyright (C) 1998-1999 Monte Variakojis ( monte@apollocom.com )
// All rights reserved - not to be sold.
///////////////////////////////////////////////////////////////////////////////
#include "..\stdafx.h"
#include "..\resource.h"
#include "Led.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLed
#define TIMER_ID_PING 1 // Timer Ping ID
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
CLed::CLed()
{
m_LedBitmap.LoadBitmap(IDB_LEDS);
m_nLedColor = LED_COLOR_RED;
m_nLedMode = LED_OFF;
m_nLedShape = LED_ROUND;
}
CLed::~CLed()
{
VERIFY(m_LedBitmap.DeleteObject());
}
BEGIN_MESSAGE_MAP(CLed, CStatic)
//{{AFX_MSG_MAP(CLed)
ON_WM_PAINT()
ON_WM_TIMER()
ON_WM_CREATE()
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLed message handlers
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void CLed::OnPaint()
{
CPaintDC dc(this); // device context for painting
DrawLed(&dc,m_nLedColor,m_nLedMode,m_nLedShape);
// Do not call CStatic::OnPaint() for painting messages
}
///////////////////////////////////////////////////////////////////////////////
// Name: SetLed
// Description: This method will draw the LED to the specified DC.
//
// Entry:
// CDC *pDC - DC to draw to
//
// int iLedColor - Where color is defined by:
// LED_COLOR_RED
// LED_COLOR_GREEN
// LED_COLOR_YELLOW
// LED_COLOR_BLUE
//
// int iMode - where mode is defined by:
// LED_ON
// LED_OFF
// LED_DISABLED
//
// int iShape - where shape is defined by:
// LED_ROUND
// LED_SQUARE
///////////////////////////////////////////////////////////////////////////////
void CLed::DrawLed(CDC *pDC,int nLEDColor, int nMode, int nShape)
{
CRect rect;
GetClientRect(&rect);
//
// Center led within an oversized window
//
if(rect.Width() >= LED_SIZE && rect.Height() >= LED_SIZE)
{
int nWidth = rect.Width();
int nHeight = rect.Height();
rect.left += (nWidth - LED_SIZE)/2;
rect.right -= (nWidth - LED_SIZE)/2;
rect.top += (nHeight - LED_SIZE)/2;
rect.bottom -= (nHeight - LED_SIZE)/2;
}
//
// Prepare temporary DCs and bitmaps
//
CBitmap TransBitmap;
TransBitmap.CreateBitmap(LED_SIZE,LED_SIZE,1,1,NULL);
CBitmap bitmapTemp;
CBitmap* pBitmap = &m_LedBitmap;
CDC srcDC;
CDC dcMask;
CDC TempDC;
TempDC.CreateCompatibleDC(pDC);
srcDC.CreateCompatibleDC(pDC);
dcMask.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = srcDC.SelectObject(pBitmap);
CBitmap* pOldMaskbitmap = dcMask.SelectObject(&TransBitmap);
bitmapTemp.CreateCompatibleBitmap(pDC,LED_SIZE,LED_SIZE);
//
// Work with tempDC and bitmapTemp to reduce flickering
//
CBitmap *pOldBitmapTemp = TempDC.SelectObject(&bitmapTemp);
TempDC.BitBlt(0, 0, LED_SIZE, LED_SIZE, pDC, rect.left, rect.top, SRCCOPY);
//
// Create mask
//
COLORREF OldBkColor = srcDC.SetBkColor(RGB(255,0,255));
dcMask.BitBlt(0, 0, LED_SIZE, LED_SIZE,&srcDC, nMode*LED_SIZE, nLEDColor+nShape, SRCCOPY);
TempDC.SetBkColor(OldBkColor);
//
// Using the IDB_LEDS bitmap, index into the bitmap for the appropriate
// LED. By using the mask color (RGB(255,0,255)) a mask has been created
// so the bitmap will appear transparent.
//
TempDC.BitBlt(0, 0, LED_SIZE, LED_SIZE, &srcDC, nMode*LED_SIZE, nLEDColor+nShape, SRCINVERT);
TempDC.BitBlt(0, 0, LED_SIZE, LED_SIZE,&dcMask, 0, 0, SRCAND);
TempDC.BitBlt(0, 0, LED_SIZE, LED_SIZE, &srcDC, nMode*LED_SIZE, nLEDColor+nShape, SRCINVERT);
//
// Since the actual minipulation is done to tempDC so there is minimal
// flicker, it is now time to draw the result to the screen.
//
pDC->BitBlt(rect.left, rect.top, LED_SIZE, LED_SIZE, &TempDC, 0, 0, SRCCOPY);
//
// House cleaning
//
srcDC.SelectObject(pOldBitmap);
dcMask.SelectObject(pOldMaskbitmap);
TempDC.SelectObject(pOldBitmapTemp);
VERIFY(srcDC.DeleteDC());
VERIFY(dcMask.DeleteDC());
VERIFY(TempDC.DeleteDC());
VERIFY(TransBitmap.DeleteObject());
VERIFY(bitmapTemp.DeleteObject());
}
///////////////////////////////////////////////////////////////////////////////
// Name: SetLed
// Description: This method will draw and set led parameters.
//
// Entry: int iLedColor - Where color is defined by:
// LED_COLOR_RED
// LED_COLOR_GREEN
// LED_COLOR_YELLOW
// LED_COLOR_BLUE
//
// int iMode - where mode is defined by:
// LED_ON
// LED_OFF
// LED_DISABLED
//
// int iShape - where shape is defined by:
// LED_ROUND
// LED_SQUARE
///////////////////////////////////////////////////////////////////////////////
void CLed::SetLed(int nLedColor, int nMode, int nShape)
{
m_nLedColor = nLedColor;
m_nLedMode = nMode;
m_nLedShape = nShape;
CDC *pDC;
pDC = GetDC();
DrawLed(pDC,m_nLedColor,m_nLedMode,m_nLedShape);
ReleaseDC(pDC);
}
///////////////////////////////////////////////////////////////////////////////
// Name: Ping
// Description: This method will turn the led on for dwTimeout milliseconds and
// then turn it off.
//
// Entry: DWORD dwTimeout - Time out in milliseconds
///////////////////////////////////////////////////////////////////////////////
void CLed::Ping(DWORD dwTimeout)
{
// Return if pinging
if(m_bPingEnabled == TRUE)
{
KillTimer(TIMER_ID_PING);
}
m_bPingEnabled = TRUE;
SetLed(m_nLedColor,CLed::LED_ON,m_nLedShape);
SetTimer(TIMER_ID_PING,dwTimeout,NULL);
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void CLed::OnTimer(UINT nIDEvent)
{
if(nIDEvent == TIMER_ID_PING)
{
SetLed(m_nLedColor,CLed::LED_OFF,m_nLedShape);
KillTimer(nIDEvent);
m_bPingEnabled = FALSE;
}
CStatic::OnTimer(nIDEvent);
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
BOOL CLed::OnEraseBkgnd(CDC* pDC)
{
// No background rendering
return TRUE;
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

View File

@@ -0,0 +1,88 @@
///////////////////////////////////////////////////////////////////////////////
// Led.h : header file
// Visual Source Safe: $Revision: 1 $
//
// Led static control. Will display a LED in 4 different colors and two shapes.
///////////////////////////////////////////////////////////////////////////////
// Copyright (C) 1998-1999 Monte Variakojis ( monte@apollocom.com )
// All rights reserved - not to be sold.
///////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_LEDWND_H__2D837381_FFEC_11D1_A1CE_00A024D311C0__INCLUDED_)
#define AFX_LEDWND_H__2D837381_FFEC_11D1_A1CE_00A024D311C0__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
///////////////////////////////////////////////////////////////////////////////
#define LED_SIZE 16 // Led are 16 X 16 pixels
/////////////////////////////////////////////////////////////////////////////
// CLed window
class CLed : public CStatic
{
protected:
int m_nLedColor, m_nLedMode, m_nLedShape;
DWORD m_dwPingTimeout;
BOOL m_bPingEnabled;
CBitmap m_LedBitmap;
public:
enum {
LED_ROUND = 0, // Circle starts at row 0
LED_SQUARE = LED_SIZE * 4, // squares start at row 4
};
enum {
LED_COLOR_RED = 0 * LED_SIZE, // Row 0
LED_COLOR_GREEN = 1 * LED_SIZE, // Row 1
LED_COLOR_YELLOW = 2 * LED_SIZE, // Row 2
LED_COLOR_BLUE = 3 * LED_SIZE, // Row 3
};
enum {
LED_ON = 0, // Column 0
LED_OFF = 1, // Column 1
LED_DISABLED = 2, // Column 2
};
// Construction
public:
CLed();
// Attributes
public:
// Operations
public:
void SetLed(int nLedColor, int nMode, int nShape);
int GetLedMode(){return m_nLedMode;}
void Ping(DWORD dwTimeout = 1000);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CLed)
//}}AFX_VIRTUAL
// Implementation
public:
void DrawLed( CDC *pDC, int nLEDColor, int nMode, int nShape );
virtual ~CLed();
// Generated message map functions
protected:
//{{AFX_MSG(CLed)
afx_msg void OnPaint();
afx_msg void OnTimer(UINT nIDEvent);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_LEDWND_H__2D837381_FFEC_11D1_A1CE_00A024D311C0__INCLUDED_)

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -0,0 +1,127 @@
#include "InPlaceEdit.h"
CInPlaceEdit::CInPlaceEdit(int iItem, int iSubItem, CString sInitText) :m_sInitText( sInitText )
{
m_iItem = iItem;
m_iSubItem = iSubItem;
m_bESC = FALSE;
}
CInPlaceEdit::~CInPlaceEdit()
{
}
BEGIN_MESSAGE_MAP(CInPlaceEdit, CEdit)
//{{AFX_MSG_MAP(CInPlaceEdit)
ON_WM_KILLFOCUS()
ON_WM_NCDESTROY()
ON_WM_CHAR()
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CInPlaceEdit::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_DELETE || pMsg->wParam == VK_ESCAPE || GetKeyState(VK_CONTROL))
{
::TranslateMessage(pMsg);
::DispatchMessage(pMsg);
return TRUE;
}
}
return CEdit::PreTranslateMessage(pMsg);
}
void CInPlaceEdit::OnKillFocus(CWnd* pNewWnd)
{
CEdit::OnKillFocus(pNewWnd);
CString str;
GetWindowText(str);
LV_DISPINFO dispinfo;
dispinfo.hdr.hwndFrom = GetParent()->m_hWnd;
dispinfo.hdr.idFrom = GetDlgCtrlID();
dispinfo.hdr.code = LVN_ENDLABELEDIT;
dispinfo.item.mask = LVIF_TEXT;
dispinfo.item.iItem = m_iItem;
dispinfo.item.iSubItem = m_iSubItem;
dispinfo.item.pszText = m_bESC ? NULL : LPTSTR((LPCTSTR)str);
dispinfo.item.cchTextMax = str.GetLength();
GetParent()->GetParent()->SendMessage(WM_NOTIFY, GetParent()->GetDlgCtrlID(), (LPARAM)&dispinfo);
DestroyWindow();
}
void CInPlaceEdit::OnNcDestroy()
{
CEdit::OnNcDestroy();
delete this;
}
void CInPlaceEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar == VK_ESCAPE || nChar == VK_RETURN)
{
if(nChar == VK_ESCAPE)
m_bESC = TRUE;
GetParent()->SetFocus();
return;
}
CEdit::OnChar(nChar, nRepCnt, nFlags);
CString str;
GetWindowText(str);
CWindowDC dc(this);
CFont *pFont = GetParent()->GetFont();
CFont *pFontDC = dc.SelectObject(pFont);
CSize size = dc.GetTextExtent(str);
dc.SelectObject(pFontDC);
size.cx += 5;
CRect rect, parentrect;
GetClientRect(&rect);
GetParent()->GetClientRect(&parentrect);
ClientToScreen(&rect);
GetParent()->ScreenToClient(&rect);
if(size.cx > rect.Width())
{
if(size.cx + rect.left < parentrect.right)
rect.right = rect.left + size.cx;
else
rect.right = parentrect.right;
MoveWindow(&rect);
}
}
int CInPlaceEdit::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if(CEdit::OnCreate(lpCreateStruct) == -1)
return -1;
CFont* font = GetParent()->GetFont();
SetFont(font);
SetWindowText(m_sInitText);
SetFocus();
SetSel(0, -1);
return 0;
}

View File

@@ -0,0 +1,40 @@
#include <afxcmn.h> // MFC support for Windows Common Controls
class CInPlaceEdit : public CEdit
{
public:
CInPlaceEdit(int iItem, int iSubItem, CString sInitText);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CInPlaceEdit)
public:
virtual BOOL PreTranslateMessage(MSG* pMsg);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CInPlaceEdit();
// Generated message map functions
protected:
//{{AFX_MSG(CInPlaceEdit)
afx_msg void OnKillFocus(CWnd* pNewWnd);
afx_msg void OnNcDestroy();
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
int m_iItem;
int m_iSubItem;
CString m_sInitText;
BOOL m_bESC; // To indicate whether ESC key was pressed
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

View File

@@ -0,0 +1,126 @@
// InPlaceList.cpp : implementation file
//
#include "InPlaceList.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CInPlaceList
CInPlaceList::CInPlaceList(int iItem, int iSubItem, CStringList *plstItems, int nSel)
{
m_iItem = iItem;
m_iSubItem = iSubItem;
m_lstItems.AddTail( plstItems );
m_nSel = nSel;
m_bESC = FALSE;
}
CInPlaceList::~CInPlaceList()
{
}
BEGIN_MESSAGE_MAP(CInPlaceList, CComboBox)
//{{AFX_MSG_MAP(CInPlaceList)
ON_WM_CREATE()
ON_WM_KILLFOCUS()
ON_WM_CHAR()
ON_WM_NCDESTROY()
ON_CONTROL_REFLECT(CBN_CLOSEUP, OnCloseup)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CInPlaceList message handlers
int CInPlaceList::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CComboBox::OnCreate(lpCreateStruct) == -1)
return -1;
// Set the proper font
CFont* font = GetParent()->GetFont();
SetFont(font);
for( POSITION pos = m_lstItems.GetHeadPosition(); pos != NULL; )
{
AddString( (LPCTSTR) (m_lstItems.GetNext( pos )) );
}
SetCurSel( m_nSel );
SetFocus();
return 0;
}
BOOL CInPlaceList::PreTranslateMessage(MSG* pMsg)
{
if( pMsg->message == WM_KEYDOWN )
{
if(pMsg->wParam == VK_RETURN
|| pMsg->wParam == VK_ESCAPE
)
{
::TranslateMessage(pMsg);
::DispatchMessage(pMsg);
return TRUE; // DO NOT process further
}
}
return CComboBox::PreTranslateMessage(pMsg);
}
void CInPlaceList::OnKillFocus(CWnd* pNewWnd)
{
CComboBox::OnKillFocus(pNewWnd);
CString str;
GetWindowText(str);
// Send Notification to parent of ListView ctrl
LV_DISPINFO dispinfo;
dispinfo.hdr.hwndFrom = GetParent()->m_hWnd;
dispinfo.hdr.idFrom = GetDlgCtrlID();
dispinfo.hdr.code = LVN_ENDLABELEDIT;
dispinfo.item.mask = LVIF_TEXT;
dispinfo.item.iItem = m_iItem;
dispinfo.item.iSubItem = m_iSubItem;
dispinfo.item.pszText = m_bESC ? NULL : LPTSTR((LPCTSTR)str);
dispinfo.item.cchTextMax = str.GetLength();
GetParent()->GetParent()->SendMessage( WM_NOTIFY, GetParent()->GetDlgCtrlID(), (LPARAM)&dispinfo );
PostMessage( WM_CLOSE );
}
void CInPlaceList::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if( nChar == VK_ESCAPE || nChar == VK_RETURN)
{
if( nChar == VK_ESCAPE )
m_bESC = TRUE;
GetParent()->SetFocus();
return;
}
CComboBox::OnChar(nChar, nRepCnt, nFlags);
}
void CInPlaceList::OnNcDestroy()
{
CComboBox::OnNcDestroy();
delete this;
}
void CInPlaceList::OnCloseup()
{
GetParent()->SetFocus();
}

View File

@@ -0,0 +1,48 @@
// InPlaceList.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CInPlaceList window
#include <afxcmn.h> // MFC support for Windows Common Controls
class CInPlaceList : public CComboBox
{
// Construction
public:
CInPlaceList(int iItem, int iSubItem, CStringList *plstItems, int nSel);
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CInPlaceList)
public:
virtual BOOL PreTranslateMessage(MSG* pMsg);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CInPlaceList();
// Generated message map functions
protected:
//{{AFX_MSG(CInPlaceList)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnKillFocus(CWnd* pNewWnd);
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnNcDestroy();
afx_msg void OnCloseup();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
int m_iItem;
int m_iSubItem;
CStringList m_lstItems;
int m_nSel;
BOOL m_bESC; // To indicate whether ESC key was pressed
};

View File

@@ -0,0 +1,260 @@
///////////////////////////////////////////////////////////////////////////////////////////////
//
// CListViewControl
//
//////////////////////////////////////////////////////////////////////////////////////////////
#include "ListViewControl.h"
CListViewControl::CListViewControl()
{
ZeroMemory(m_ColType, sizeof(unsigned int) * 100);
}
CListViewControl::~CListViewControl()
{
}
BEGIN_MESSAGE_MAP(CListViewControl, CListCtrl)
//{{AFX_MSG_MAP(CListViewControl)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
ON_WM_LBUTTONDBLCLK()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CListViewControl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMLVCUSTOMDRAW lplvcd = (LPNMLVCUSTOMDRAW)pNMHDR;
switch(lplvcd->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
if(lplvcd->nmcd.dwItemSpec % 2)
lplvcd->clrTextBk = RGB(200, 228, 248);
*pResult = CDRF_DODEFAULT;
break;
}
}
void CListViewControl::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CListCtrl::OnLButtonDblClk(nFlags, point);
int index, colnum;
if((index = HitTestEx(point, &colnum)) != -1)
{
if(m_ColType[colnum] == CT_EDIT)
{
if(GetWindowLong(m_hWnd, GWL_STYLE) & LVS_EDITLABELS)
EditSubLabel(index, colnum);
}
if(m_ColType[colnum] == CT_COMBO)
{
if(GetWindowLong(m_hWnd, GWL_STYLE) & LVS_EDITLABELS)
ShowInPlaceList(index, colnum, m_ColumnStringList[colnum], 0);
}
}
}
void CListViewControl::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
if(GetFocus() != this)
SetFocus();
CListCtrl::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CListViewControl::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
if(GetFocus() != this)
SetFocus();
CListCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
}
bool CListViewControl::SetColumnType(int ColNum, unsigned int Type)
{
if(ColNum < 0)
return false;
m_ColType[ColNum] = Type;
return true;
}
bool CListViewControl::SetColumnStringList(int ColNum, CStringList &StringList)
{
if(ColNum < 0)
return false;
m_ColumnStringList[ColNum].RemoveAll();
POSITION Pos = StringList.GetHeadPosition();
while(Pos)
m_ColumnStringList[ColNum].AddTail(StringList.GetNext(Pos));
return true;
}
int CListViewControl::HitTestEx(CPoint &point, int *col) const
{
int colnum = 0;
int row = HitTest(point, NULL);
if(col)
*col = 0;
if((GetWindowLong(m_hWnd, GWL_STYLE) & LVS_TYPEMASK) != LVS_REPORT)
return row;
row = GetTopIndex();
int bottom = row + GetCountPerPage();
if(bottom > GetItemCount())
bottom = GetItemCount();
CHeaderCtrl* pHeader = (CHeaderCtrl*)GetDlgItem(0);
int nColumnCount = pHeader->GetItemCount();
INT* piColumnArray = new INT[nColumnCount];
((CListCtrl*)this)->GetColumnOrderArray(piColumnArray);
for(;row <=bottom; row++)
{
CRect rect;
GetItemRect(row, &rect, LVIR_BOUNDS);
if(rect.PtInRect(point))
{
for(colnum = 0; colnum < nColumnCount; colnum++)
{
int colwidth = GetColumnWidth(piColumnArray[colnum]);
if(point.x >= rect.left && point.x <= (rect.left + colwidth))
{
*col = piColumnArray[colnum];
delete [] piColumnArray;
return row;
}
rect.left += colwidth;
}
}
}
delete [] piColumnArray;
return -1;
}
CEdit* CListViewControl::EditSubLabel(int nItem, int nCol)
{
if(!EnsureVisible(nItem, TRUE))
return NULL;
CHeaderCtrl* pHeader = (CHeaderCtrl*)GetDlgItem(0);
int nColumnCount = pHeader->GetItemCount();
if(nCol >= nColumnCount || GetColumnWidth(nCol) < 5)
return NULL;
int offset = 0;
INT *piColumnArray = new INT[nColumnCount];
((CListCtrl*)this)->GetColumnOrderArray(piColumnArray);
for(int i = 0; nCol != piColumnArray[i]; i++)
offset += GetColumnWidth( piColumnArray[i]);
delete [] piColumnArray;
CRect rect;
GetItemRect(nItem, &rect, LVIR_BOUNDS);
CRect rcClient;
GetClientRect(&rcClient);
if(offset + rect.left < 0 || offset + rect.left > rcClient.right)
{
CSize size;
if(offset + rect.left < 0)
size.cx = -(offset - rect.left);
else
size.cx = offset - rect.left;
size.cy = 0;
Scroll(size);
GetItemRect(nItem, &rect, LVIR_BOUNDS);
}
LV_COLUMN lvcol;
lvcol.mask = LVCF_FMT;
GetColumn(nCol, &lvcol);
DWORD dwStyle ;
if((lvcol.fmt&LVCFMT_JUSTIFYMASK) == LVCFMT_LEFT)
dwStyle = ES_LEFT;
else if((lvcol.fmt&LVCFMT_JUSTIFYMASK) == LVCFMT_RIGHT)
dwStyle = ES_RIGHT;
else dwStyle = ES_CENTER;
rect.left += offset+4;
rect.right = rect.left + GetColumnWidth(nCol) - 3 ;
if(rect.right > rcClient.right)
rect.right = rcClient.right;
dwStyle |= WS_BORDER|WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL;
CEdit *pEdit = new CInPlaceEdit(nItem, nCol, GetItemText(nItem, nCol));
pEdit->Create(dwStyle, rect, this, IDC_IPEDIT);
return pEdit;
}
CComboBox* CListViewControl::ShowInPlaceList(int nItem, int nCol, CStringList &lstItems, int nSel)
{
if(!EnsureVisible(nItem, TRUE))
return NULL;
CHeaderCtrl* pHeader = (CHeaderCtrl*)GetDlgItem(0);
int nColumnCount = pHeader->GetItemCount();
if(nCol >= nColumnCount || GetColumnWidth(nCol) < 10)
return NULL;
int offset = 0;
for(int i = 0; i < nCol; i++)
offset += GetColumnWidth(i);
CRect rect;
GetItemRect(nItem, &rect, LVIR_BOUNDS);
CRect rcClient;
GetClientRect(&rcClient);
if(offset + rect.left < 0 || offset + rect.left > rcClient.right)
{
CSize size;
size.cx = offset + rect.left;
size.cy = 0;
Scroll( size );
rect.left -= size.cx;
}
rect.left += offset+4;
rect.right = rect.left + GetColumnWidth(nCol) - 3 ;
int height = rect.bottom-rect.top;
rect.bottom += 5*height;
if(rect.right > rcClient.right) rect.right = rcClient.right;
DWORD dwStyle = WS_BORDER|WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST|CBS_DISABLENOSCROLL;
CComboBox *pList = new CInPlaceList(nItem, nCol, &lstItems, nSel);
pList->Create(dwStyle, rect, this, IDC_IPEDIT);
pList->SetItemHeight(-1, height);
pList->SetHorizontalExtent(GetColumnWidth(nCol));
return pList;
}

View File

@@ -0,0 +1,47 @@
///////////////////////////////////////////////////////////////////////////////////////////////
//
// CListViewControl
//
//////////////////////////////////////////////////////////////////////////////////////////////
#ifndef _CListViewControl
#define _CListViewControl
#include <afxcmn.h> // MFC support for Windows Common Controls
#include "InPlaceEdit.h"
#include "InPlaceList.h"
#define IDC_IPEDIT 4321
const unsigned int CT_NORMAL = 0;
const unsigned int CT_EDIT = 1;
const unsigned int CT_COMBO = 2;
class CListViewControl : public CListCtrl
{
public:
CListViewControl();
virtual ~CListViewControl();
protected:
//{{AFX_MSG(CCharList)
afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
//}}AFX_MSG
bool SetColumnType(int ColNum, unsigned int Type = CT_EDIT);
bool SetColumnStringList(int ColNum, CStringList &StringList);
int HitTestEx(CPoint &point, int *col) const;
CEdit* EditSubLabel(int nItem, int nCol);
CComboBox* ShowInPlaceList(int nItem, int nCol, CStringList &lstItems, int nSel);
private:
unsigned int m_ColType[100];
CStringList m_ColumnStringList[100];
DECLARE_MESSAGE_MAP()
};
#endif

View File

@@ -0,0 +1,105 @@
// SearchDlg.cpp : implementation file
//
#include "stdafx.h"
#include "AuthDBManager.h"
#include "SearchDlg.h"
#include "AuthDBManagerDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSearchDlg dialog
CSearchDlg::CSearchDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSearchDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSearchDlg)
m_SearchText = _T("");
//}}AFX_DATA_INIT
}
void CSearchDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSearchDlg)
DDX_Control(pDX, ID_SELECT_ALIGNTYPE, m_SelectAlignType);
DDX_Control(pDX, ID_SELECT_ALIGN, m_SelectAlign);
DDX_Control(pDX, ID_SELECT_SEARCH, m_SelectSearch);
DDX_Text(pDX, ID_SEARCH_TEXT, m_SearchText);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSearchDlg, CDialog)
//{{AFX_MSG_MAP(CSearchDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSearchDlg message handlers
BOOL CSearchDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CAuthDBManagerApp* pAppWnd = (CAuthDBManagerApp*)AfxGetApp();
char FieldName[256];
m_SelectSearch.InsertString(0, "----------------");
LoadString(pAppWnd->m_Language, IDS_F2, FieldName, 256);
m_SelectSearch.InsertString(1, FieldName);
LoadString(pAppWnd->m_Language, IDS_F4, FieldName, 256);
m_SelectSearch.InsertString(2, FieldName);
m_SelectSearch.SetCurSel(0);
m_SelectAlign.InsertString(0, "----------------");
LoadString(pAppWnd->m_Language, IDS_F1, FieldName, 256);
m_SelectAlign.InsertString(1, FieldName);
LoadString(pAppWnd->m_Language, IDS_F2, FieldName, 256);
m_SelectAlign.InsertString(2, FieldName);
LoadString(pAppWnd->m_Language, IDS_F4, FieldName, 256);
m_SelectAlign.InsertString(3, FieldName);
LoadString(pAppWnd->m_Language, IDS_F14, FieldName, 256);
m_SelectAlign.InsertString(4, FieldName);
m_SelectAlign.SetCurSel(0);
LoadString(pAppWnd->m_Language, IDS_A1, FieldName, 256);
m_SelectAlignType.InsertString(0, FieldName);
LoadString(pAppWnd->m_Language, IDS_A2, FieldName, 256);
m_SelectAlignType.InsertString(1, FieldName);
m_SelectAlignType.SetCurSel(0);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CSearchDlg::OnOK()
{
// TODO: Add extra validation here
CAuthDBManagerApp* pAppWnd = (CAuthDBManagerApp*)AfxGetApp();
CAuthDBManagerDlg* pDlgWnd = (CAuthDBManagerDlg*)pAppWnd->m_pMainWnd;
UpdateData();
pDlgWnd->m_SearchType = m_SelectSearch.GetCurSel();
strcpy(pDlgWnd->m_Search, m_SearchText.GetBuffer(0));
pDlgWnd->m_Align = m_SelectAlign.GetCurSel();
pDlgWnd->m_AlignType = m_SelectAlignType.GetCurSel();
CDialog::OnOK();
}

View File

@@ -0,0 +1,50 @@
#if !defined(AFX_SEARCHDLG_H__A1FDDFCB_DBA3_4CCD_8F91_1E8ABFA035CA__INCLUDED_)
#define AFX_SEARCHDLG_H__A1FDDFCB_DBA3_4CCD_8F91_1E8ABFA035CA__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// SearchDlg.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CSearchDlg dialog
class CSearchDlg : public CDialog
{
// Construction
public:
CSearchDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CSearchDlg)
enum { IDD = IDD_SEARCH };
CComboBox m_SelectAlignType;
CComboBox m_SelectAlign;
CComboBox m_SelectSearch;
CString m_SearchText;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSearchDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CSearchDlg)
virtual BOOL OnInitDialog();
virtual void OnOK();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_SEARCHDLG_H__A1FDDFCB_DBA3_4CCD_8F91_1E8ABFA035CA__INCLUDED_)

View File

@@ -0,0 +1,8 @@
// stdafx.cpp : source file that includes just the standard includes
// AuthDBManager.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"

View File

@@ -0,0 +1,27 @@
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__40910505_0D0F_499D_85FE_F0441F208DE9__INCLUDED_)
#define AFX_STDAFX_H__40910505_0D0F_499D_85FE_F0441F208DE9__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__40910505_0D0F_499D_85FE_F0441F208DE9__INCLUDED_)

View File

@@ -0,0 +1,240 @@
// UserList.cpp : implementation file
//
#include "stdafx.h"
#include "AuthDBManager.h"
#include "UserList.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CUserList
CUserList::CUserList()
{
int Counter;
char FieldName[256];
CAuthDBManagerApp* pAppWnd = (CAuthDBManagerApp*)AfxGetApp();
for(Counter = 0; Counter < 14; Counter++)
{
LoadString(pAppWnd->m_Language, IDS_F1 + Counter, FieldName, 256);
strcpy(m_FieldName[Counter], FieldName);
}
for(Counter = 0; Counter < 2; Counter++)
{
LoadString(pAppWnd->m_Language, IDS_S1 + Counter, FieldName, 256);
strcpy(m_Select[Counter], FieldName);
}
}
CUserList::~CUserList()
{
}
BEGIN_MESSAGE_MAP(CUserList, CListCtrl)
//{{AFX_MSG_MAP(CUserList)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
ON_WM_LBUTTONDBLCLK()
ON_WM_HSCROLL()
ON_WM_VSCROLL()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CUserList::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
CListViewControl::OnCustomDraw(pNMHDR, pResult);
}
void CUserList::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CListViewControl::OnLButtonDblClk(nFlags, point);
}
void CUserList::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
CListViewControl::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CUserList::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
CListViewControl::OnVScroll(nSBCode, nPos, pScrollBar);
}
//Interface////////////////////////////////////////////////////////////////////////////////////
//
// SetColumn [ public ]
// - 테이블 컬럼 세팅
//
// Parameter :
// 1st : 컬럼 정보
//
// Return:
// 성공시 true
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool CUserList::SetColumn(void)
{
DWORD ExStyle = LVS_EX_FLATSB | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, ExStyle);
DWORD Style = GetWindowLong(m_hWnd, GWL_STYLE);
Style |= LVS_EDITLABELS;
if (!SetWindowLong(m_hWnd, GWL_STYLE, Style))
return false;
CStringList StringList;
int IndexCounter = 0;
SetColumnType(IndexCounter, CT_NORMAL);
InsertColumn(IndexCounter, m_FieldName[IndexCounter++], LVCFMT_CENTER, 4 * 10);
SetColumnType(IndexCounter, CT_EDIT);
InsertColumn(IndexCounter, m_FieldName[IndexCounter++], LVCFMT_CENTER, 15 * 10);
SetColumnType(IndexCounter, CT_EDIT);
InsertColumn(IndexCounter, m_FieldName[IndexCounter++], LVCFMT_CENTER, 15 * 10);
SetColumnType(IndexCounter, CT_EDIT);
InsertColumn(IndexCounter, m_FieldName[IndexCounter++], LVCFMT_CENTER, 15 * 10);
SetColumnType(IndexCounter, CT_COMBO);
StringList.AddTail(m_Select[0]);
StringList.AddTail(m_Select[1]);
SetColumnStringList(IndexCounter, StringList);
InsertColumn(IndexCounter, m_FieldName[IndexCounter++], LVCFMT_CENTER, 5 * 10);
SetColumnType(IndexCounter, CT_EDIT);
InsertColumn(IndexCounter, m_FieldName[IndexCounter++], LVCFMT_CENTER, 10 * 10);
SetColumnType(IndexCounter, CT_EDIT);
InsertColumn(IndexCounter, m_FieldName[IndexCounter++], LVCFMT_CENTER, 15 * 10);
SetColumnType(IndexCounter, CT_EDIT);
InsertColumn(IndexCounter, m_FieldName[IndexCounter++], LVCFMT_CENTER, 7 * 10);
SetColumnType(IndexCounter, CT_EDIT);
InsertColumn(IndexCounter, m_FieldName[IndexCounter++], LVCFMT_CENTER, 30 * 10);
SetColumnType(IndexCounter, CT_EDIT);
InsertColumn(IndexCounter, m_FieldName[IndexCounter++], LVCFMT_CENTER, 10 * 10);
SetColumnType(IndexCounter, CT_EDIT);
InsertColumn(IndexCounter, m_FieldName[IndexCounter++], LVCFMT_CENTER, 10 * 10);
SetColumnType(IndexCounter, CT_EDIT);
InsertColumn(IndexCounter, m_FieldName[IndexCounter++], LVCFMT_CENTER, 15 * 10);
SetColumnType(IndexCounter, CT_EDIT);
InsertColumn(IndexCounter, m_FieldName[IndexCounter++], LVCFMT_CENTER, 8 * 10);
SetColumnType(IndexCounter, CT_EDIT);
InsertColumn(IndexCounter, m_FieldName[IndexCounter++], LVCFMT_CENTER, 16 * 10);
return true;
}
//Interface////////////////////////////////////////////////////////////////////////////////////
//
// AddUserRow [ public ]
// - 줄 추가
//
// Parameter :
// 1st : 컬럼 정보
//
// Return:
// 성공시 true
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool CUserList::AddUserRow(LPSELECT_AUTHUSER_TABLE UserTable_In)
{
CString strItem;
int Counter = 1;
int Index;
Index = GetItemCount();
strItem.Format("%d", UserTable_In->UID);
InsertItem(Index, strItem);
strItem.Format("%s", UserTable_In->AuthID);
SetItemText(Index, Counter++, strItem);
strItem.Format("%s", UserTable_In->AuthPW);
SetItemText(Index, Counter++, strItem);
strItem.Format("%s", UserTable_In->Name);
SetItemText(Index, Counter++, strItem);
strItem.Format("%s", m_Select[UserTable_In->Sex]);
SetItemText(Index, Counter++, strItem);
strItem.Format("%s", UserTable_In->Birth);
SetItemText(Index, Counter++, strItem);
strItem.Format("%s", UserTable_In->IDNumber);
SetItemText(Index, Counter++, strItem);
strItem.Format("%s", UserTable_In->ZipCode);
SetItemText(Index, Counter++, strItem);
strItem.Format("%s", UserTable_In->Address);
SetItemText(Index, Counter++, strItem);
strItem.Format("%s", UserTable_In->Mobile);
SetItemText(Index, Counter++, strItem);
strItem.Format("%s", UserTable_In->Phone);
SetItemText(Index, Counter++, strItem);
strItem.Format("%s", UserTable_In->Email);
SetItemText(Index, Counter++, strItem);
strItem.Format("%s", UserTable_In->Job);
SetItemText(Index, Counter++, strItem);
strItem.Format("%04d/%02d/%02d %02d:%02d:%02d", UserTable_In->Reg_Date.Year, UserTable_In->Reg_Date.Month, UserTable_In->Reg_Date.Day, UserTable_In->Reg_Date.Hour, UserTable_In->Reg_Date.Minute, UserTable_In->Reg_Date.Second);
SetItemText(Index, Counter++, strItem);
return true;
}
bool CUserList::GetUserRow(unsigned long Item_In, LPUPDATE_AUTHUSER_TABLE Table_Out)
{
int Counter = 0;
char strItemText[256];
CString DateText, YearText, MonthText, DayText, HourText, MinuteText, SecondText;
GetItemText(Item_In, Counter++, strItemText, 256);
Table_Out->UID = atoi(strItemText);
GetItemText(Item_In, Counter++, strItemText, 256);
strncpy(Table_Out->AuthID, strItemText, 16);
GetItemText(Item_In, Counter++, strItemText, 256);
strncpy(Table_Out->AuthPW, strItemText, 16);
GetItemText(Item_In, Counter++, strItemText, 256);
strncpy(Table_Out->Name, strItemText, 16);
GetItemText(Item_In, Counter++, strItemText, 256);
if(!strcmp(strItemText, m_Select[0]))
Table_Out->Sex = 0;
else
Table_Out->Sex = 1;
GetItemText(Item_In, Counter++, strItemText, 256);
strncpy(Table_Out->Birth, strItemText, 20);
GetItemText(Item_In, Counter++, strItemText, 256);
strncpy(Table_Out->IDNumber, strItemText, 15);
GetItemText(Item_In, Counter++, strItemText, 256);
strncpy(Table_Out->ZipCode, strItemText, 12);
GetItemText(Item_In, Counter++, strItemText, 256);
strncpy(Table_Out->Address, strItemText, 80);
GetItemText(Item_In, Counter++, strItemText, 256);
strncpy(Table_Out->Mobile, strItemText, 20);
GetItemText(Item_In, Counter++, strItemText, 256);
strncpy(Table_Out->Phone, strItemText, 20);
GetItemText(Item_In, Counter++, strItemText, 256);
strncpy(Table_Out->Email, strItemText, 50);
GetItemText(Item_In, Counter++, strItemText, 256);
strncpy(Table_Out->Job, strItemText, 20);
GetItemText(Item_In, Counter++, strItemText, 256);
return true;
}

View File

@@ -0,0 +1,61 @@
#if !defined(AFX_USERLIST_H__CA827D8B_2DCE_47F1_8895_25056B67CD92__INCLUDED_)
#define AFX_USERLIST_H__CA827D8B_2DCE_47F1_8895_25056B67CD92__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// UserList.h : header file
//
#include "AuthDBManager.h"
#include "ListViewControl\ListViewControl.h"
/////////////////////////////////////////////////////////////////////////////
// CUserList window
class CUserList : public CListViewControl
{
// Construction
public:
CUserList();
// Attributes
public:
// Operations
public:
char m_FieldName[21][20];
char m_Select[2][10];
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CUserList)
afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CUserList();
bool SetColumn(void);
bool AddUserRow(LPSELECT_AUTHUSER_TABLE UserTable_In);
bool GetUserRow(unsigned long Item_In, LPUPDATE_AUTHUSER_TABLE Table_Out);
// Generated message map functions
protected:
//{{AFX_MSG(CUserList)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_USERLIST_H__CA827D8B_2DCE_47F1_8895_25056B67CD92__INCLUDED_)

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -0,0 +1,25 @@
#include <windows.h>
#if !defined PlugIn_Strunt
#define PlugIn_Strunt
typedef struct
{
char CreaterName[255];
char CreaterEmail[255];
char CreaterHomepage[255];
}CREATERINFO;
typedef struct
{
bool PlugInfo;
char PlugInVer[255];
char PlugInName[255];
char PlugInLastUpdate[255];
CREATERINFO PlugInCreator;
}PLUGININFO;
#endif
typedef PLUGININFO (*GET_PLUGIN_INFO) (void);

View File

@@ -0,0 +1,13 @@
//
// AuthDBManager.RC2 - resources Microsoft Visual C++ does not edit directly
//
#ifdef APSTUDIO_INVOKED
#error this file is not editable by Microsoft Visual C++
#endif //APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// Add manually edited resources here...
/////////////////////////////////////////////////////////////////////////////

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

View File

@@ -0,0 +1,89 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by AuthDBManager.rc
//
#define IDM_ABOUTBOX 0x0010
#define IDD_ABOUTBOX 100
#define IDS_ABOUTBOX 101
#define IDD_AuthDBManager_DIALOG 102
#define IDS_F1 102
#define IDS_F2 103
#define IDS_F3 104
#define IDS_F4 105
#define IDS_F5 106
#define IDS_F6 107
#define IDS_F7 108
#define IDS_F8 109
#define IDS_F9 110
#define IDS_F10 111
#define IDS_F11 112
#define IDS_F12 113
#define IDS_F13 114
#define IDS_F14 115
#define IDR_MAINFRAME 128
#define IDR_MENU 130
#define IDD_CONNECT 131
#define IDB_LEDS 132
#define IDB_LOGO 133
#define IDD_SEARCH 134
#define IDS_S1 150
#define IDS_S2 151
#define IDS_A1 152
#define IDS_A2 153
#define ID_USER_LIST 1000
#define ID_CHAR_LIST 1000
#define ID_ERROR_LOG 1001
#define ID_SELECT_TYPE 1002
#define ID_ID 1002
#define ID_DATASOURCE_NAME 1003
#define ID_PASSWORD 1003
#define ID_SERVER_NAME 1004
#define ID_CONNECTION_LED 1004
#define ID_DATABASE_NAME 1005
#define ID_QEURY_LED 1005
#define ID_AUTHUSER_NAME 1006
#define ID_SELECTED_ROW 1006
#define ID_AUTHUSER_PASS 1007
#define ID_SELECTED_COUNT 1007
#define ID_SELECTED_UID 1008
#define ID_SEX 1009
#define ID_NAME 1011
#define ID_PLUGIN_LIST 1011
#define ID_LASTUPDATE 1012
#define ID_BIRTH 1013
#define ID_CREATER 1013
#define ID_SEARCH_TEXT 1013
#define ID_IDNUMBER 1014
#define ID_SELECT_SEARCH 1014
#define ID_ZIPCODE 1015
#define ID_SELECT_ALIGN 1015
#define ID_ADDRESS 1016
#define ID_SELECT_ALIGNTYPE 1016
#define IDC_DEFAULT 1017
#define IDC_BUTTON1 1018
#define ID_MOBILE 1019
#define ID_PHONE 1020
#define ID_JOB 1021
#define ID_EMAIL 1022
#define ID_SELECTED_ID 1024
#define ID_TOTAL_ROW 1025
#define ID_CONNECT 32771
#define ID_DISCONNECT 32772
#define ID_ABOUT 32773
#define ID_ADD_USER 32774
#define ID_DELETE_USER 32775
#define ID_INIT_LOGINTIME 32776
#define ID_REFESH 32777
#define ID_SEARCH 32778
#define ID_AUTHTEST 32779
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 135
#define _APS_NEXT_COMMAND_VALUE 32780
#define _APS_NEXT_CONTROL_VALUE 1020
#define _APS_NEXT_SYMED_VALUE 102
#endif
#endif

View File

@@ -0,0 +1,72 @@
// AuthGama.cpp : 응용 프로그램에 대한 클래스 동작을 정의합니다.
//
#include "stdafx.h"
#include "AuthGama.h"
#include "AuthGamaDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CAuthGamaApp
BEGIN_MESSAGE_MAP(CAuthGamaApp, CWinApp)
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
// CAuthGamaApp 생성
CAuthGamaApp::CAuthGamaApp()
{
// TODO: 여기에 생성 코드를 추가합니다.
// InitInstance에 모든 중요한 초기화 작업을 배치합니다.
}
// 유일한 CAuthGamaApp 개체입니다.
CAuthGamaApp theApp;
// CAuthGamaApp 초기화
BOOL CAuthGamaApp::InitInstance()
{
// 응용 프로그램 매니페스트가 ComCtl32.dll 버전 6 이상을 사용하여 비주얼 스타일을
// 사용하도록 지정하는 경우, Windows XP 상에서 반드시 InitCommonControls()가 필요합니다.
// InitCommonControls()를 사용하지 않으면 창을 만들 수 없습니다.
InitCommonControls();
CWinApp::InitInstance();
AfxEnableControlContainer();
// 표준 초기화
// 이들 기능을 사용하지 않고 최종 실행 파일의 크기를 줄이려면
// 아래에서 필요 없는 특정 초기화 루틴을 제거해야 합니다.
// 해당 설정이 저장된 레지스트리 키를 변경하십시오.
// TODO: 이 문자열을 회사 또는 조직의 이름과 같은
// 적절한 내용으로 수정해야 합니다.
SetRegistryKey(_T("로컬 응용 프로그램 마법사에서 생성한 응용 프로그램"));
CAuthGamaDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 여기에 대화 상자가 확인을 눌러 없어지는 경우 처리할
// 코드를 배치합니다.
}
else if (nResponse == IDCANCEL)
{
// TODO: 여기에 대화 상자가 취소를 눌러 없어지는 경우 처리할
// 코드를 배치합니다.
}
// 대화 상자가 닫혔으므로 응용 프로그램의 메시지 펌프를 시작하지 않고
// 응용 프로그램을 끝낼 수 있도록 FALSE를 반환합니다.
return FALSE;
}

View File

@@ -0,0 +1,31 @@
// AuthGama.h : PROJECT_NAME 응용 프로그램에 대한 주 헤더 파일입니다.
//
#pragma once
#ifndef __AFXWIN_H__
#error PCH에서 이 파일을 포함하기 전에 'stdafx.h'를 포함하십시오.
#endif
#include "resource.h" // 주 기호
// CAuthGamaApp:
// 이 클래스의 구현에 대해서는 AuthGama.cpp을 참조하십시오.
//
class CAuthGamaApp : public CWinApp
{
public:
CAuthGamaApp();
// 재정의
public:
virtual BOOL InitInstance();
// 구현
DECLARE_MESSAGE_MAP()
};
extern CAuthGamaApp theApp;

View File

@@ -0,0 +1,202 @@
// 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\\AuthGama.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\\AuthGama.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_AUTHGAMA_DIALOG DIALOGEX 0, 0, 214, 201
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_VISIBLE |
WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "AuthGama"
FONT 9, "MS Shell Dlg", 0, 0, 0x1
BEGIN
EDITTEXT IDC_AUTH_USER,57,36,115,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_AUTH_PASSWD,57,48,115,12,ES_PASSWORD |
ES_AUTOHSCROLL | NOT WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_UID_IN,71,135,127,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
EDITTEXT IDC_ACCOUNT_IN,71,147,126,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
PUSHBUTTON "찾기",IDC_FIND_BTN,136,164,62,24,BS_FLAT
PUSHBUTTON "연결",IDC_DB_CONNECT,7,7,83,18,BS_FLAT
CTEXT "Account",IDC_STATIC,11,37,45,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Password",IDC_STATIC,11,49,45,11,SS_CENTERIMAGE,
WS_EX_STATICEDGE
PUSHBUTTON "인증",IDC_AUTH_BTN,179,36,24,37,BS_FLAT
CTEXT "",IDC_UID_OUT,14,164,120,11,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "UID",IDC_STATIC,14,135,56,11,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "",IDC_ACCOUNT_OUT,14,176,120,11,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Account",IDC_STATIC,14,147,56,11,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT IDC_MD5_PASSWORD,46,86,129,13,ES_PASSWORD |
ES_AUTOHSCROLL | NOT WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_MD5_HASHVAL,46,102,130,13,ES_AUTOHSCROLL |
ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE
GROUPBOX "MD5",IDC_STATIC,7,78,200,40,BS_FLAT
LTEXT "Password",IDC_STATIC,12,90,31,8
LTEXT "MD5 Hash",IDC_STATIC,12,103,32,8
PUSHBUTTON "변환",IDC_MD5_CONVERT_BTN,178,86,25,29,BS_FLAT
GROUPBOX "인증",IDC_STATIC,7,28,200,48,BS_FLAT
GROUPBOX "검색",IDC_STATIC,7,122,200,72,BS_FLAT
CTEXT "",IDC_AUTH_RESULT,57,61,115,11,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Result",IDC_STATIC,11,61,45,11,SS_CENTERIMAGE,
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", "AuthGama.exe"
VALUE "LegalCopyright", "TODO: (c) <회사 이름>. All rights reserved."
VALUE "OriginalFilename", "AuthGama.exe"
VALUE "ProductName", "TODO: <제품 이름>"
VALUE "ProductVersion", "1.0.0.1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "변환", 0x412, 949
END
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_AUTHGAMA_DIALOG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 207
TOPMARGIN, 7
BOTTOMMARGIN, 194
END
END
#endif // APSTUDIO_INVOKED
#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\AuthGama.rc2" // Microsoft Visual C++에서 편집되지 않은 리소스
#include "afxres.rc" // 표준 구성 요소
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@@ -0,0 +1,207 @@
<?xml version="1.0" encoding="ks_c_5601-1987"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="AuthGama"
ProjectGUID="{CE41A965-FA1E-4CCD-9D57-AA41409E331C}"
Keyword="MFCProj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="../DBToolExecutable/$(ConfigurationName)"
IntermediateDirectory="../Intermediate/$(ProjectName)/$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../;./;../../RylServerProject;../../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="1042"
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"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
AdditionalIncludeDirectories="../;./;../../RylServerProject;../../RylServerProject/RylServerLibrary;../../RylServerProject/BaseLibrary"
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
MinimalRebuild="FALSE"
RuntimeLibrary="0"
TreatWChar_tAsBuiltInType="TRUE"
UsePrecompiledHeader="2"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
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="1042"
AdditionalIncludeDirectories="$(IntDir)"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="소스 파일"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
<File
RelativePath=".\AuthGama.cpp">
</File>
<File
RelativePath=".\AuthGamaDlg.cpp">
</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>
</Filter>
<Filter
Name="헤더 파일"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
<File
RelativePath=".\AuthGama.h">
</File>
<File
RelativePath=".\AuthGamaDlg.h">
</File>
<File
RelativePath=".\Resource.h">
</File>
<File
RelativePath=".\stdafx.h">
</File>
</Filter>
<Filter
Name="리소스 파일"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
<File
RelativePath=".\res\AuthGama.ico">
</File>
<File
RelativePath=".\AuthGama.rc">
</File>
<File
RelativePath=".\res\AuthGama.rc2">
</File>
</Filter>
<Filter
Name="MD5"
Filter="">
<File
RelativePath=".\Md5\global.h">
</File>
<File
RelativePath=".\Md5\md5.h">
</File>
<File
RelativePath=".\Md5\md5c.c">
</File>
</Filter>
<File
RelativePath=".\res\AuthGama.manifest">
</File>
<File
RelativePath=".\ReadMe.txt">
</File>
</Files>
<Globals>
<Global
Name="RESOURCE_FILE"
Value="AuthGama.rc"/>
</Globals>
</VisualStudioProject>

View File

@@ -0,0 +1,318 @@
// AuthGamaDlg.cpp : 구현 파일
//
#include "stdafx.h"
#include "AuthGama.h"
#include "AuthGamaDlg.h"
#include <Utility/Setup/ServerSetup.h>
#include <Log/ServerLog.h>
#include <DB/DBComponent.h>
#include <DB/AuthDBComponent.h>
extern "C"
{
#include <MD5/global.h>
#include <MD5/md5.h>
#include ".\authgamadlg.h"
}
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CAuthGamaDlg 대화 상자
static void MD5Print (unsigned char digest[16], char *szOutput)
{
for (unsigned int i = 0; i < 16; i++)
{
sprintf (szOutput + i * 2, "%02x", digest[i]);
}
}
static void MD5String (char *szString, char* szOutput)
{
MD5_CTX context;
unsigned char digest[16];
unsigned int len = static_cast<unsigned int>(strlen(szString));
MD5Init (&context);
MD5Update (&context, reinterpret_cast<unsigned char*>(szString), len);
MD5Final (digest, &context);
MD5Print (digest, szOutput);
}
CAuthGamaDlg::CAuthGamaDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAuthGamaDlg::IDD, pParent)
, m_szAuthAccount(_T(""))
, m_szAuthPassword(_T(""))
, m_szAuthResult(_T(""))
, m_szMD5Password(_T(""))
, m_szMD5HashVal(_T(""))
, m_szFindUID(_T(""))
, m_szFindAccount(_T(""))
, m_szFoundUID(_T(""))
, m_szFoundAccount(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CAuthGamaDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_AUTH_USER, m_szAuthAccount);
DDX_Text(pDX, IDC_AUTH_PASSWD, m_szAuthPassword);
DDX_Text(pDX, IDC_AUTH_RESULT, m_szAuthResult);
DDX_Text(pDX, IDC_MD5_PASSWORD, m_szMD5Password);
DDX_Text(pDX, IDC_MD5_HASHVAL, m_szMD5HashVal);
DDX_Text(pDX, IDC_UID_IN, m_szFindUID);
DDX_Text(pDX, IDC_ACCOUNT_IN, m_szFindAccount);
DDX_Text(pDX, IDC_UID_OUT, m_szFoundUID);
DDX_Text(pDX, IDC_ACCOUNT_OUT, m_szFoundAccount);
DDX_Control(pDX, IDC_AUTH_BTN, m_btnAuth);
DDX_Control(pDX, IDC_MD5_CONVERT_BTN, m_btnMD5);
DDX_Control(pDX, IDC_FIND_BTN, m_btnFind);
}
BEGIN_MESSAGE_MAP(CAuthGamaDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_DB_CONNECT, OnBnClickedDbConnect)
ON_BN_CLICKED(IDC_AUTH_BTN, OnBnClickedAuthBtn)
ON_BN_CLICKED(IDC_MD5_CONVERT_BTN, OnBnClickedMd5ConvertBtn)
ON_BN_CLICKED(IDC_FIND_BTN, OnBnClickedFindBtn)
ON_EN_CHANGE(IDC_ACCOUNT_IN, OnEnChangeAccountIn)
ON_EN_CHANGE(IDC_UID_IN, OnEnChangeUidIn)
END_MESSAGE_MAP()
// CAuthGamaDlg 메시지 처리기
BOOL CAuthGamaDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
// 프레임워크가 이 작업을 자동으로 수행합니다.
SetIcon(m_hIcon, TRUE); // 큰 아이콘을 설정합니다.
SetIcon(m_hIcon, FALSE); // 작은 아이콘을 설정합니다.
// DB에 연결되기 전까지 버튼을 누를 수 없도록 합니다.
m_btnAuth.EnableWindow(FALSE);
//m_btnMD5.EnableWindow(FALSE); // MD5 변환기능은 DB연결에 상관없이 사용가능하도록 변경(by zun!)
m_btnFind.EnableWindow(FALSE);
// 로그를 남기지 않습니다.
g_Log.Disable(0xFFFFFFFF);
g_SessionLog.Disable(0xFFFFFFFF);
return TRUE; // 컨트롤에 대한 포커스를 설정하지 않을 경우 TRUE를 반환합니다.
}
// 대화 상자에 최소화 단추를 추가할 경우 아이콘을 그리려면
// 아래 코드가 필요합니다. 문서/뷰 모델을 사용하는 MFC 응용 프로그램의 경우에는
// 프레임워크에서 이 작업을 자동으로 수행합니다.
void CAuthGamaDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다.
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 아이콘을 그립니다.
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// 사용자가 최소화된 창을 끄는 동안에 커서가 표시되도록 시스템에서
// 이 함수를 호출합니다.
HCURSOR CAuthGamaDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CAuthGamaDlg::OnBnClickedDbConnect()
{
// 서버셋업에서 셋업을 읽어오고, 인증DB로 연결을 합니다.
CString szError;
CDBComponent& DBComponent = CDBSingleObject::GetInstance();
if (!CServerSetup::GetInstance().Initialize(CServerSetup::AuthServer))
{
// 인증서버 정보를 읽는 데 실패했습니다.
szError.Format("Read AuthServer info failed");
}
else if (!DBComponent.Connect(CDBComponent::Class_AuthDB))
{
// 연결에 실패하였습니다.
szError.Format("Connect DB failed : %s ", DBComponent.GetErrorString());
}
else
{
// 연결에 성공하였습니다.
m_btnAuth.EnableWindow(TRUE);
m_btnMD5.EnableWindow(TRUE);
m_btnFind.EnableWindow(TRUE);
SetWindowText(_T("AuthGama : AuthDB Connect Succeeded"));
}
if (!szError.IsEmpty())
{
AfxMessageBox(szError, MB_OK | MB_ICONERROR);
}
}
void CAuthGamaDlg::OnBnClickedAuthBtn()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData(TRUE);
DWORD dwUID = 0;
CDBComponent& DBComponent = CDBSingleObject::GetInstance();
char szPassword[33];
char szMD5String[33];
_snprintf(szPassword, 33, m_szAuthPassword);
szPassword[32] = 0;
MD5String(szPassword, szMD5String);
szMD5String[32] = 0;
if (!DBComponent::AuthDB::LoginAuthGama(DBComponent,
m_szAuthAccount, szMD5String, dwUID))
{
m_szAuthResult.Format(_T("DB Error : %s"), DBComponent.GetErrorString());
}
else if (dwUID < 100)
{
switch(dwUID)
{
case 1: m_szAuthResult.Format(_T("Invalid password")); break;
case 2: m_szAuthResult.Format(_T("Unknown Account")); break;
case 5: m_szAuthResult.Format(_T("Password failed more than 3")); break;
default: m_szAuthResult.Format(_T("Unknown Error")); break;
}
}
else
{
m_szAuthResult.Format(_T("%d"), dwUID);
}
UpdateData(FALSE);
}
void CAuthGamaDlg::OnBnClickedMd5ConvertBtn()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData(TRUE);
char szPassword[33];
char szMD5String[33];
_snprintf(szPassword, 33, m_szMD5Password);
szPassword[32] = 0;
MD5String(szPassword, szMD5String);
szMD5String[32] = 0;
m_szMD5HashVal.SetString(szMD5String);
UpdateData(FALSE);
}
void CAuthGamaDlg::OnBnClickedFindBtn()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData(TRUE);
const int MAX_BUFFER = 64;
CString szError;
CDBComponent& DBComponent = CDBSingleObject::GetInstance();
unsigned long dwUID = 0;
if (!m_szFindUID.IsEmpty() && (0 != (dwUID = atol(m_szFindUID))))
{
char szAccount[MAX_BUFFER];
if (DBComponent::AuthDB::GetGamaAccountByUID(DBComponent, dwUID, szAccount, MAX_BUFFER))
{
m_szFoundUID.Format(_T("%d"), dwUID);
m_szFoundAccount.SetString(szAccount);
}
else
{
szError.Format(_T("DB Error : %s"), DBComponent.GetErrorString());
}
}
else if (!m_szFindAccount.IsEmpty())
{
if (DBComponent::AuthDB::GetGamaUIDByAccount(DBComponent, m_szFindAccount, dwUID))
{
m_szFoundUID.Format(_T("%d"), dwUID);
m_szFoundAccount.SetString(m_szFindAccount);
}
else
{
szError.Format(_T("DB Error : %s"), DBComponent.GetErrorString());
}
}
if (!szError.IsEmpty())
{
AfxMessageBox(szError, MB_OK | MB_ICONERROR);
}
UpdateData(FALSE);
}
void CAuthGamaDlg::OnOK()
{
// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
// CDialog::OnOK();
}
void CAuthGamaDlg::OnEnChangeAccountIn()
{
// TODO: RICHEDIT 컨트롤인 경우 이 컨트롤은
// CDialog::마스크에 OR 연산하여 설정된 ENM_CHANGE 플래그를 지정하여
// CRichEditCtrl().SetEventMask()를 호출하도록 OnInitDialog() 함수를 재지정하지 않으면
// 이 알림을 보내지 않습니다.
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData(TRUE);
m_szFindUID.Empty();
UpdateData(FALSE);
}
void CAuthGamaDlg::OnEnChangeUidIn()
{
// TODO: RICHEDIT 컨트롤인 경우 이 컨트롤은
// CDialog::마스크에 OR 연산하여 설정된 ENM_CHANGE 플래그를 지정하여
// CRichEditCtrl().SetEventMask()를 호출하도록 OnInitDialog() 함수를 재지정하지 않으면
// 이 알림을 보내지 않습니다.
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData(TRUE);
m_szFindAccount.Empty();
UpdateData(FALSE);
}

View File

@@ -0,0 +1,61 @@
// AuthGamaDlg.h : 헤더 파일
//
#pragma once
#include "afxwin.h"
// CAuthGamaDlg 대화 상자
class CAuthGamaDlg : public CDialog
{
// 생성
public:
CAuthGamaDlg(CWnd* pParent = NULL); // 표준 생성자
// 대화 상자 데이터
enum { IDD = IDD_AUTHGAMA_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원
// 구현
protected:
HICON m_hIcon;
// 메시지 맵 함수를 생성했습니다.
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
private:
afx_msg void OnBnClickedDbConnect();
afx_msg void OnBnClickedAuthBtn();
afx_msg void OnBnClickedMd5ConvertBtn();
afx_msg void OnBnClickedFindBtn();
CString m_szAuthAccount; // 인증받을 계정명
CString m_szAuthPassword; // 인증받을 패스워드
CString m_szAuthResult; // 인증결과값
CString m_szMD5Password; // MD5값을 알아낼 패스워드
CString m_szMD5HashVal; // 패스워드로 만들어낸 MD5값
CString m_szFindUID; // 검색할 UID
CString m_szFindAccount; // 검색할 계정명
CString m_szFoundUID; // 검색된 UID
CString m_szFoundAccount; // 검색된 계정명
CButton m_btnAuth;
CButton m_btnMD5;
CButton m_btnFind;
protected:
virtual void OnOK();
public:
afx_msg void OnEnChangeAccountIn();
afx_msg void OnEnChangeUidIn();
};

View File

@@ -0,0 +1,30 @@
/* GLOBAL.H - RSAREF types and constants
*/
/* PROTOTYPES should be set to one if and only if the compiler supports
function argument prototyping.
The following makes PROTOTYPES default to 0 if it has not already
been defined with C compiler flags.
*/
#ifndef PROTOTYPES
#define PROTOTYPES 0
#endif
/* POINTER defines a generic pointer type */
typedef unsigned char *POINTER;
/* UINT2 defines a two byte word */
typedef unsigned short int UINT2;
/* UINT4 defines a four byte word */
typedef unsigned long int UINT4;
/* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
returns an empty list.
*/
#if PROTOTYPES
#define PROTO_LIST(list) list
#else
#define PROTO_LIST(list) ()
#endif

View File

@@ -0,0 +1,36 @@
/* MD5.H - header file for MD5C.C
*/
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.
License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.
License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.
RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.
These notices must be retained in any copies of any part of this
documentation and/or software.
*/
/* MD5 context. */
typedef struct {
UINT4 state[4]; /* state (ABCD) */
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
} MD5_CTX;
void MD5Init (MD5_CTX *);
void MD5Update (MD5_CTX *, unsigned char *, unsigned int);
void MD5Final (unsigned char [16], MD5_CTX *);

View File

@@ -0,0 +1,337 @@
/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
*/
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.
License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.
License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.
RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.
These notices must be retained in any copies of any part of this
documentation and/or software.
*/
#include "global.h"
#include "md5.h"
/* Constants for MD5Transform routine.
*/
#define S11 7
#define S12 12
#define S13 17
#define S14 22
#define S21 5
#define S22 9
#define S23 14
#define S24 20
#define S31 4
#define S32 11
#define S33 16
#define S34 23
#define S41 6
#define S42 10
#define S43 15
#define S44 21
static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64]));
static void Encode PROTO_LIST
((unsigned char *, UINT4 *, unsigned int));
static void Decode PROTO_LIST
((UINT4 *, unsigned char *, unsigned int));
static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int));
static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int));
static unsigned char PADDING[64] = {
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
/* F, G, H and I are basic MD5 functions.
*/
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z)))
/* ROTATE_LEFT rotates x left n bits.
*/
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
Rotation is separate from addition to prevent recomputation.
*/
#define FF(a, b, c, d, x, s, ac) { \
(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define GG(a, b, c, d, x, s, ac) { \
(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define HH(a, b, c, d, x, s, ac) { \
(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define II(a, b, c, d, x, s, ac) { \
(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
/* MD5 initialization. Begins an MD5 operation, writing a new context.
*/
void MD5Init (context)
MD5_CTX *context; /* context */
{
context->count[0] = context->count[1] = 0;
/* Load magic initialization constants.
*/
context->state[0] = 0x67452301;
context->state[1] = 0xefcdab89;
context->state[2] = 0x98badcfe;
context->state[3] = 0x10325476;
}
/* MD5 block update operation. Continues an MD5 message-digest
operation, processing another message block, and updating the
context.
*/
void MD5Update (context, input, inputLen)
MD5_CTX *context; /* context */
unsigned char *input; /* input block */
unsigned int inputLen; /* length of input block */
{
unsigned int i, index, partLen;
/* Compute number of bytes mod 64 */
index = (unsigned int)((context->count[0] >> 3) & 0x3F);
/* Update number of bits */
if ((context->count[0] += ((UINT4)inputLen << 3))
< ((UINT4)inputLen << 3))
context->count[1]++;
context->count[1] += ((UINT4)inputLen >> 29);
partLen = 64 - index;
/* Transform as many times as possible.
*/
if (inputLen >= partLen) {
MD5_memcpy
((POINTER)&context->buffer[index], (POINTER)input, partLen);
MD5Transform (context->state, context->buffer);
for (i = partLen; i + 63 < inputLen; i += 64)
MD5Transform (context->state, &input[i]);
index = 0;
}
else
i = 0;
/* Buffer remaining input */
MD5_memcpy
((POINTER)&context->buffer[index], (POINTER)&input[i],
inputLen-i);
}
/* MD5 finalization. Ends an MD5 message-digest operation, writing the
the message digest and zeroizing the context.
*/
void MD5Final (digest, context)
unsigned char digest[16]; /* message digest */
MD5_CTX *context; /* context */
{
unsigned char bits[8];
unsigned int index, padLen;
/* Save number of bits */
Encode (bits, context->count, 8);
/* Pad out to 56 mod 64.
*/
index = (unsigned int)((context->count[0] >> 3) & 0x3f);
padLen = (index < 56) ? (56 - index) : (120 - index);
MD5Update (context, PADDING, padLen);
/* Append length (before padding) */
MD5Update (context, bits, 8);
/* Store state in digest */
Encode (digest, context->state, 16);
/* Zeroize sensitive information.
*/
MD5_memset ((POINTER)context, 0, sizeof (*context));
}
/* MD5 basic transformation. Transforms state based on block.
*/
static void MD5Transform (state, block)
UINT4 state[4];
unsigned char block[64];
{
UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
Decode (x, block, 64);
/* Round 1 */
FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
/* Round 2 */
GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
/* Round 3 */
HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
/* Round 4 */
II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
state[0] += a;
state[1] += b;
state[2] += c;
state[3] += d;
/* Zeroize sensitive information.
*/
MD5_memset ((POINTER)x, 0, sizeof (x));
}
/* Encodes input (UINT4) into output (unsigned char). Assumes len is
a multiple of 4.
*/
static void Encode (output, input, len)
unsigned char *output;
UINT4 *input;
unsigned int len;
{
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4) {
output[j] = (unsigned char)(input[i] & 0xff);
output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
}
}
/* Decodes input (unsigned char) into output (UINT4). Assumes len is
a multiple of 4.
*/
static void Decode (output, input, len)
UINT4 *output;
unsigned char *input;
unsigned int len;
{
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4)
output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
(((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
}
/* Note: Replace "for loop" with standard memcpy if possible.
*/
static void MD5_memcpy (output, input, len)
POINTER output;
POINTER input;
unsigned int len;
{
unsigned int i;
for (i = 0; i < len; i++)
output[i] = input[i];
}
/* Note: Replace "for loop" with standard memset if possible.
*/
static void MD5_memset (output, value, len)
POINTER output;
int value;
unsigned int len;
{
unsigned int i;
for (i = 0; i < len; i++)
((char *)output)[i] = (char)value;
}

View File

@@ -0,0 +1,77 @@
================================================================================
MFC 라이브러리 : AuthGama 프로젝트 개요
================================================================================
응용 프로그램 마법사를 사용하여 AuthGama 응용 프로그램을 만듭니다. 이 응용
프로그램에서는 기본적인 MFC 사용 밥법과 응용 프로그램 작성 방법을 설명합니다.
이 파일에는 AuthGama 응용 프로그램을 구성하는 각 파일에 대한 개요가 포함되어
있습니다.
AuthGama.vcproj
응용 프로그램 마법사를 사용하여 생성된 VC++ 프로젝트의 주 프로젝트 파일입니다.
이 파일에는 파일을 생성한 Visual C++ 버전 정보 및 응용 프로그램 마법사에서 선택한 플랫폼,
구성, 프로젝트 기능 등의 정보가 포함됩니다.
AuthGama.h
응용 프로그램의 주 헤더 파일입니다. 이 파일에는 다른 프로젝트에 관련된 Resource.h와 같은
특정 헤더가 포함되며 CAuthGamaApp 응용 프로그램 클래스가 선언됩니다.
AuthGama.cpp
CAuthGamaApp 응용 프로그램 클래스를 포함하는 주 응용 프로그램의 소스 파일입니다.
AuthGama.rc
프로그램에서 사용하는 모든 Microsoft Windows 리소스가 나열된 파일입니다.
이 파일에는 RES 하위 디렉터리에 저장된 아이콘, 비트맵 및 커서가 포함되며
Microsoft Visual C++에서 직접 이 파일을 편집할 수도 있습니다. 사용자의 프로젝트
리소스는 1042에 들어 있습니다.
res\AuthGama.ico
응용 프로그램의 아이콘으로 사용되는 아이콘 파일입니다.
이 아이콘은 주 리소스 파일인 AuthGama.rc에 포함됩니다.
res\AuthGama.rc2
Microsoft Visual C++에서 편집할 수 없는 리소스가 포함된 파일입니다.
리소스 편집기에서 편집할 수 없는 모든 리소스는 이 파일에 포함되어 있습니다.
/////////////////////////////////////////////////////////////////////////////
응용 프로그램 마법사에서는 단일 대화 상자 클래스를 만듭니다.
AuthGamaDlg.h, AuthGamaDlg.cpp - 대화 상자
CAuthGamaDlg 클래스를 포함하는 파일입니다. 이 클래스에는 응용 프로그램의
주 대화 상자에 대한 동작이 정의됩니다. 대화 상자의 템플릿은 AuthGama.rc에
있으며 Microsoft Visual C++에서 편집할 수 있습니다.
/////////////////////////////////////////////////////////////////////////////
기타 기능
ActiveX 컨트롤
응용 프로그램에서 ActiveX 컨트롤을 사용할 수 있습니다.
/////////////////////////////////////////////////////////////////////////////
기타 표준 파일
StdAfx.h, StdAfx.cpp
미리 컴파일된 헤더 파일(PCH) AuthGama.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,31 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by AuthGama.rc
//
#define IDD_AUTHGAMA_DIALOG 102
#define IDR_MAINFRAME 128
#define IDC_DB_CONNECT 1000
#define IDC_AUTH_USER 1002
#define IDC_AUTH_PASSWD 1003
#define IDC_AUTH_BTN 1004
#define IDC_UID_OUT 1005
#define IDC_AUTH_RESULT 1006
#define IDC_UID_IN 1008
#define IDC_FIND_BTN 1009
#define IDC_ACCOUNT_OUT 1010
#define IDC_ACCOUNT_IN 1011
#define IDC_MD5_PASSWORD 1016
#define IDC_MD5_HASHVAL 1017
#define IDC_MD5_CONVERT 1018
#define IDC_MD5_CONVERT_BTN 1018
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 129
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1002
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 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.AuthGama"
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 @@
//
// AuthGama.RC2 - resources Microsoft Visual C++에서 직접 편집하지 않는 리소스
//
#ifdef APSTUDIO_INVOKED
#error 이 파일은 Microsoft Visual C++에서 편집할 수 없습니다.
#endif //APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// 여기에 수동으로 편집한 리소스를 추가합니다.
/////////////////////////////////////////////////////////////////////////////

View File

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

View File

@@ -0,0 +1,42 @@
// 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

View File

@@ -0,0 +1,74 @@
// AuthHan.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "AuthHan.h"
#include "AuthHanDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAuthHanApp
BEGIN_MESSAGE_MAP(CAuthHanApp, CWinApp)
//{{AFX_MSG_MAP(CAuthHanApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAuthHanApp construction
CAuthHanApp::CAuthHanApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CAuthHanApp object
CAuthHanApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CAuthHanApp initialization
BOOL CAuthHanApp::InitInstance()
{
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
CAuthHanDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}

View File

@@ -0,0 +1,49 @@
// AuthHan.h : main header file for the AUTHHAN application
//
#if !defined(AFX_AUTHHAN_H__9A2BCE45_C0A5_418B_B7DC_02F9002937D2__INCLUDED_)
#define AFX_AUTHHAN_H__9A2BCE45_C0A5_418B_B7DC_02F9002937D2__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#include "resource.h" // main symbols
/////////////////////////////////////////////////////////////////////////////
// CAuthHanApp:
// See AuthHan.cpp for the implementation of this class
//
class CAuthHanApp : public CWinApp
{
public:
CAuthHanApp();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAuthHanApp)
public:
virtual BOOL InitInstance();
//}}AFX_VIRTUAL
// Implementation
//{{AFX_MSG(CAuthHanApp)
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_AUTHHAN_H__9A2BCE45_C0A5_418B_B7DC_02F9002937D2__INCLUDED_)

View File

@@ -0,0 +1,239 @@
// 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"
"#ifdef _WIN32\r\n"
"LANGUAGE 18, 1\r\n"
"#pragma code_page(949)\r\n"
"#endif //_WIN32\r\n"
"#include ""res\\AuthHan.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
"#include ""l.kor\\afxres.rc"" // Standard components\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\\AuthHan.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOG 0, 0, 235, 55
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "AuthHan 정보"
FONT 9, "굴림"
BEGIN
ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20
LTEXT "AuthHan 버전 1.0",IDC_STATIC,40,10,119,8,SS_NOPREFIX
LTEXT "Copyright (C) 2002",IDC_STATIC,40,25,119,8
DEFPUSHBUTTON "확인",IDOK,178,7,50,14,WS_GROUP
END
IDD_AUTHHAN_DIALOG DIALOGEX 0, 0, 289, 206
STYLE DS_SETFONT | DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE |
WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "AuthHan"
FONT 10, "굴림", 0, 0, 0x1
BEGIN
EDITTEXT IDC_ACCOUNT,47,35,85,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
EDITTEXT IDC_PASSWORD,47,47,85,12,ES_PASSWORD | ES_AUTOHSCROLL |
NOT WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_UID_IN,195,42,85,12,ES_AUTOHSCROLL | NOT WS_BORDER,
WS_EX_STATICEDGE
EDITTEXT IDC_ACCOUNT_IN,195,55,85,12,ES_AUTOHSCROLL | NOT
WS_BORDER,WS_EX_STATICEDGE
PUSHBUTTON "찾기",IDC_FIND,224,73,56,26,BS_FLAT
PUSHBUTTON "UID리스트를 계정으로 변환",IDC_FIND_UID_LIST,196,113,89,
15,BS_FLAT
PUSHBUTTON "계정 리스트를 UID로 변환",IDC_FIND_ACCOUNT_LIST,196,134,
89,15,BS_FLAT
PUSHBUTTON "연결",IDC_CONNECT,4,4,79,14,BS_FLAT
LTEXT "",IDC_LOG,4,159,282,43,0,WS_EX_STATICEDGE
GROUPBOX "인증",IDC_STATIC,4,23,133,82,BS_FLAT
CTEXT "Account",IDC_STATIC,8,35,39,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Password",IDC_STATIC,8,47,39,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
PUSHBUTTON "인증",IDC_AUTH,8,67,66,29,BS_FLAT
CTEXT "",IDC_ID,145,73,75,12,SS_CENTERIMAGE,WS_EX_STATICEDGE
PUSHBUTTON "업데이트",IDC_UPDATE,78,67,54,14,BS_FLAT
GROUPBOX "검색",IDC_STATIC,140,23,145,82,BS_FLAT
CTEXT "UID",IDC_STATIC,145,42,49,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "",IDC_ACCOUNT_OUT,145,86,75,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
CTEXT "Account",IDC_STATIC,145,55,49,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
PUSHBUTTON "메일 동의",IDC_REG,78,83,54,14,BS_FLAT
CONTROL "배틀로한(ActionRyl) 인증체크",IDC_BATTLERYL_CHECK,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,98,8,104,10
EDITTEXT IDC_MD5_PASSWORD,48,118,85,14,ES_PASSWORD |
ES_AUTOHSCROLL | NOT WS_BORDER,WS_EX_STATICEDGE
EDITTEXT IDC_MD5_HASHVAL,48,135,85,14,ES_AUTOHSCROLL |
ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE
GROUPBOX "MD5",IDC_STATIC,8,110,155,43
LTEXT "Password",IDC_STATIC,13,121,33,8
LTEXT "MD5 Hash",IDC_STATIC,13,137,33,8
PUSHBUTTON "변환",IDC_MD5_CONVERT,137,119,22,30
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 "041204B0"
BEGIN
VALUE "FileDescription", "AuthHan MFC 응용 프로그램"
VALUE "FileVersion", "1, 0, 0, 1"
VALUE "InternalName", "AuthHan"
VALUE "LegalCopyright", "Copyright (C) 2002"
VALUE "OriginalFilename", "AuthHan.EXE"
VALUE "ProductName", "AuthHan 응용 프로그램"
VALUE "ProductVersion", "1, 0, 0, 1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x412, 1200
END
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_ABOUTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 228
TOPMARGIN, 7
BOTTOMMARGIN, 48
END
IDD_AUTHHAN_DIALOG, DIALOG
BEGIN
LEFTMARGIN, 4
RIGHTMARGIN, 285
TOPMARGIN, 4
BOTTOMMARGIN, 202
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDS_ABOUTBOX "AuthHan 정보(&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)
#ifdef _WIN32
LANGUAGE 18, 1
#pragma code_page(949)
#endif //_WIN32
#include "res\AuthHan.rc2" // non-Microsoft Visual C++ edited resources
#include "l.kor\afxres.rc" // Standard components
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@@ -0,0 +1,202 @@
<?xml version="1.0" encoding="ks_c_5601-1987"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="AuthHan"
ProjectGUID="{89A2020E-B414-4DEB-A86D-3FE96E28267A}"
Keyword="MFCProj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="../DBToolExecutable/$(ConfigurationName)"
IntermediateDirectory="../Intermediate/$(ProjectName)/$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="1"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../;./;../../RylServerProject;../../RylServerProject/RylServerLibrary;../../RylServerProject/BaseLibrary"
PreprocessorDefinitions="WIN32,_DEBUG,_WINDOWS"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="2"
ExpandAttributedSource="FALSE"
WarningLevel="3"
SuppressStartupBanner="TRUE"
DebugInformationFormat="4"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
OutputFile="$(OutDir)/$(ProjectName).exe"
LinkIncremental="2"
SuppressStartupBanner="TRUE"
GenerateDebugInformation="TRUE"
SubSystem="2"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="TRUE"
SuppressStartupBanner="TRUE"
TargetEnvironment="1"
TypeLibraryName=".\Debug/AuthHan.tlb"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1042"/>
<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"
ATLMinimizesCRunTimeLibraryUsage="FALSE"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="../;./;../../RylServerProject;../../RylServerProject/RylServerLibrary;../../RylServerProject/BaseLibrary"
PreprocessorDefinitions="WIN32,NDEBUG,_WINDOWS"
StringPooling="TRUE"
RuntimeLibrary="0"
EnableFunctionLevelLinking="TRUE"
UsePrecompiledHeader="2"
WarningLevel="3"
SuppressStartupBanner="TRUE"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
OutputFile="$(OutDir)/$(ProjectName).exe"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
SubSystem="2"/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="NDEBUG"
MkTypLibCompatible="TRUE"
SuppressStartupBanner="TRUE"
TargetEnvironment="1"
TypeLibraryName=".\Release/AuthHan.tlb"/>
<Tool
Name="VCPostBuildEventTool"/>
<Tool
Name="VCPreBuildEventTool"/>
<Tool
Name="VCPreLinkEventTool"/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="NDEBUG"
Culture="1042"/>
<Tool
Name="VCWebServiceProxyGeneratorTool"/>
<Tool
Name="VCXMLDataGeneratorTool"/>
<Tool
Name="VCWebDeploymentTool"/>
<Tool
Name="VCManagedWrapperGeneratorTool"/>
<Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="Source Files"
Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
<File
RelativePath=".\AuthHan.cpp">
</File>
<File
RelativePath=".\AuthHanDlg.cpp">
</File>
<File
RelativePath=".\md5c.c">
</File>
<File
RelativePath=".\StdAfx.cpp">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
PrecompiledHeaderThrough="stdafx.h"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCLCompilerTool"
UsePrecompiledHeader="1"
PrecompiledHeaderThrough="stdafx.h"/>
</FileConfiguration>
</File>
</Filter>
<Filter
Name="Header Files"
Filter="h;hpp;hxx;hm;inl">
<File
RelativePath=".\AuthHan.h">
</File>
<File
RelativePath=".\AuthHanDlg.h">
</File>
<File
RelativePath=".\global.h">
</File>
<File
RelativePath=".\md5.h">
</File>
<File
RelativePath=".\Resource.h">
</File>
<File
RelativePath=".\StdAfx.h">
</File>
</Filter>
<Filter
Name="Resource Files"
Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
<File
RelativePath=".\res\AuthHan.ico">
</File>
<File
RelativePath=".\AuthHan.rc">
</File>
<File
RelativePath=".\res\AuthHan.rc2">
</File>
</Filter>
</Files>
<Globals>
<Global
Name="RESOURCE_FILE"
Value="AuthHan.rc"/>
</Globals>
</VisualStudioProject>

View File

@@ -0,0 +1,555 @@
// AuthHanDlg.cpp : implementation file
//
#include "stdafx.h"
#include "AuthHan.h"
#include "AuthHanDlg.h"
extern "C"
{
#include <stdio.h>
#include "global.h"
#include "md5.h"
}
#include <DB/DBComponent.h>
#include <DB/AuthDBComponent.h>
#include ".\authhandlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
static void MD5Print (unsigned char digest[16], char *output)
{
unsigned int i;
for (i = 0; i < 16; i++)
{
sprintf (output + i * 2, "%02x", digest[i]);
}
}
static void MD5String (char *string, char *output)
{
MD5_CTX context;
unsigned char digest[16];
unsigned int len = strlen (string);
MD5Init (&context);
MD5Update (&context, reinterpret_cast<unsigned char*>(string), len);
MD5Final (digest, &context);
MD5Print (digest, output);
}
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAuthHanDlg dialog
CAuthHanDlg::CAuthHanDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAuthHanDlg::IDD, pParent)
, m_AccountIn(_T(""))
, m_bBattleRylAuth(FALSE)
, m_szMD5Password(_T(""))
, m_szMD5HashValue(_T(""))
{
//{{AFX_DATA_INIT(CAuthHanDlg)
m_Log = _T("");
m_Account = _T("");
m_Password = _T("");
m_ID = _T("");
m_UID_IN = _T("");
m_Account_Out = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CAuthHanDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAuthHanDlg)
DDX_Text(pDX, IDC_LOG, m_Log);
DDX_Text(pDX, IDC_ACCOUNT, m_Account);
DDX_Text(pDX, IDC_PASSWORD, m_Password);
DDX_Text(pDX, IDC_ID, m_ID);
DDX_Text(pDX, IDC_UID_IN, m_UID_IN);
DDX_Text(pDX, IDC_ACCOUNT_OUT, m_Account_Out);
//}}AFX_DATA_MAP
DDX_Text(pDX, IDC_ACCOUNT_IN, m_AccountIn);
DDX_Check(pDX, IDC_BATTLERYL_CHECK, m_bBattleRylAuth);
DDX_Text(pDX, IDC_MD5_PASSWORD, m_szMD5Password);
DDX_Text(pDX, IDC_MD5_HASHVAL, m_szMD5HashValue);
}
BEGIN_MESSAGE_MAP(CAuthHanDlg, CDialog)
//{{AFX_MSG_MAP(CAuthHanDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_CONNECT, OnConnect)
ON_BN_CLICKED(IDC_AUTH, OnAuth)
ON_BN_CLICKED(IDC_UPDATE, OnUpdate)
ON_BN_CLICKED(IDC_FIND, OnFind)
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_REG, OnBnClickedReg)
ON_BN_CLICKED(IDC_FIND_UID_LIST, OnBnClickedFindUidList)
ON_BN_CLICKED(IDC_FIND_ACCOUNT_LIST, OnBnClickedFindAccountList)
ON_BN_CLICKED(IDC_MD5_CONVERT, OnBnClickedMd5Convert)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAuthHanDlg message handlers
BOOL CAuthHanDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CAuthHanDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CAuthHanDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CAuthHanDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CAuthHanDlg::OnConnect()
{
// TODO: Add your control notification handler code here
if(CDBSingleObject::GetInstance().Connect(CDBSingleObject::Class_AuthDB))
{
m_Log = "Connected";
}
else
{
m_Log = "Connected failed";
}
UpdateData(FALSE);
}
typedef struct _ACCOUNT
{
char Account[16];
char Password[16];
}ACCOUNT, *LPACCOUNT;
void CAuthHanDlg::OnAuth()
{
UpdateData();
AuthUserHangame();
}
void CAuthHanDlg::AuthUserHangame(void)
{
UpdateData();
HAN_UID hanUID;
char szPassword[33];
memset(szPassword, 0, sizeof(char) * 33);
MD5String(m_Password.GetBuffer(0), szPassword);
bool bResult = !m_bBattleRylAuth ?
DBComponent::AuthDB::LoginAuthHan(CDBSingleObject::GetInstance(),
m_Account.GetBuffer(0), szPassword, hanUID) :
DBComponent::AuthDB::LoginBattleAuthHan(CDBSingleObject::GetInstance(),
m_Account.GetBuffer(0), szPassword, hanUID);
if(bResult)
{
unsigned long UserID = hanUID.hUID;
if(UserID > 100)
{
m_ID.Format("%d", UserID);
m_Log.Format("H:0x%08x L:0x%08x", hanUID.hUID, hanUID.lUID);
}
else
{
switch(UserID)
{
case 1: m_Log = "password mismatch"; break;
case 2: m_Log = "한게임 사용자가 아니거나 비정상적인 사용자"; break;
case 3: m_Log = "동의한 사용자가 아님"; break;
case 4: m_Log = "연령 미달"; break;
case 5: m_Log = "3회 이상 로그인 실패"; break;
case 6: m_Log = "동의한 사용자이지만 게임을 할 수 없는 상태"; break;
default:
m_Log.Format("기타 에러 : %u : H:0x%08x L:0x%08x", UserID, hanUID.hUID, hanUID.lUID);
break;
}
}
}
else
{
m_Log = CDBSingleObject::GetInstance().GetErrorString();
}
UpdateData(FALSE);
}
void CAuthHanDlg::OnUpdate()
{
UpdateData();
UpdateData(FALSE);
}
void CAuthHanDlg::OnFind()
{
UpdateData();
DWORD UserID = 0;
char UID[16] = "";
char Account[16] = "";
if(0 != m_AccountIn.GetLength())
{
bool bResult = !m_bBattleRylAuth ?
DBComponent::AuthDB::GetUIDByAccount(CDBSingleObject::GetInstance(), m_AccountIn.GetBuffer(0), UID)
: DBComponent::AuthDB::GetBattleUIDByAccount(CDBSingleObject::GetInstance(), m_AccountIn.GetBuffer(0), UID);
if(bResult)
{
m_ID = UID;
m_Account_Out = "";
}
else
{
m_Log = CDBSingleObject::GetInstance().GetErrorString();
}
}
else if(0 != m_UID_IN.GetLength())
{
bool bResult = !m_bBattleRylAuth ?
DBComponent::AuthDB::GetAccountByUID(CDBSingleObject::GetInstance(), atoi(m_UID_IN.GetBuffer(0)), Account)
: DBComponent::AuthDB::GetBattleAccountByUID(CDBSingleObject::GetInstance(), atoi(m_UID_IN.GetBuffer(0)), Account);
if(bResult)
{
m_ID = "";
m_Account_Out = Account;
}
else
{
m_Log = CDBSingleObject::GetInstance().GetErrorString();
}
}
UpdateData(FALSE);
}
void CAuthHanDlg::OnBnClickedReg()
{
UpdateData();
bool bResult = !m_bBattleRylAuth ?
DBComponent::AuthDB::RegRylGameHan(CDBSingleObject::GetInstance(), m_Account.GetBuffer(0), "Y")
: DBComponent::AuthDB::RegBattleRylGameHan(CDBSingleObject::GetInstance(), m_Account.GetBuffer(0), "Y");
m_Log = bResult ? "Query Ok..." : CDBSingleObject::GetInstance().GetErrorString();
UpdateData(FALSE);
}
void CAuthHanDlg::OnBnClickedFindUidList()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
// 1. 읽을 파일을 연다
// 2. 쓸 파일이름을 받아서 연다.
// 3. GetAccountByUID 를 사용하여 하나씩 읽어 온다
// 4. 리스트에 읽어온 결과를 기록한다
// 5. 파일을 닫는다.
UpdateData();
OPENFILENAME openfile;
OPENFILENAME savefile;
char szOpenFileName[MAX_PATH * MAX_PATH] = "";
char szSaveFileName[MAX_PATH] = "";
memset(&openfile, 0, sizeof(OPENFILENAME));
memset(&savefile, 0, sizeof(OPENFILENAME));
openfile.lStructSize = sizeof(OPENFILENAME);
openfile.hwndOwner = m_hWnd;
openfile.lpstrFilter = "All Files(*.*)\0*.*\0";
openfile.lpstrFile = szOpenFileName;
openfile.nMaxFile = MAX_PATH * MAX_PATH;
openfile.Flags = OFN_FILEMUSTEXIST | OFN_LONGNAMES | OFN_EXPLORER;
savefile.lStructSize = sizeof(OPENFILENAME);
savefile.hwndOwner = m_hWnd;
savefile.lpstrFilter = "All Files(*.*)\0*.*\0";
savefile.lpstrFile = szSaveFileName;
savefile.nMaxFile = MAX_PATH;
savefile.Flags = OFN_LONGNAMES | OFN_EXPLORER;
bool bResult = false;
if(GetOpenFileName(&openfile))
{
if(GetSaveFileName(&savefile))
{
FILE* readfile = fopen(szOpenFileName, "rt");
if(NULL != readfile)
{
FILE* writefile = fopen(szSaveFileName, "wt");
if(NULL != writefile)
{
const int MAX_BUFFER = 4000;
char szUID[MAX_BUFFER];
char Account[16] = "";
while(fgets(szUID, MAX_BUFFER, readfile))
{
char* stopstring = NULL;
unsigned long dwUID = strtoul(szUID, &stopstring, 10);
if(0 < dwUID)
{
bool bResult = !m_bBattleRylAuth ? DBComponent::AuthDB::GetAccountByUID(CDBSingleObject::GetInstance(), dwUID, Account)
: DBComponent::AuthDB::GetBattleAccountByUID(CDBSingleObject::GetInstance(), dwUID, Account);
if(bResult)
{
fprintf(writefile, "%10d\t%s\n", dwUID, Account);
}
else
{
fprintf(writefile, "%10d\t%s\n", dwUID, CDBSingleObject::GetInstance().GetErrorString());
}
}
Sleep(50);
}
bResult = true;
fclose(writefile);
}
fclose(readfile);
}
}
}
MessageBox(bResult ? "변환이 완료되었습니다." : "변환을 실패하였습니다");
}
void CAuthHanDlg::OnBnClickedFindAccountList()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData();
OPENFILENAME openfile;
OPENFILENAME savefile;
char szOpenFileName[MAX_PATH * MAX_PATH] = "";
char szSaveFileName[MAX_PATH] = "";
memset(&openfile, 0, sizeof(OPENFILENAME));
memset(&savefile, 0, sizeof(OPENFILENAME));
openfile.lStructSize = sizeof(OPENFILENAME);
openfile.hwndOwner = m_hWnd;
openfile.lpstrFilter = "All Files(*.*)\0*.*\0";
openfile.lpstrFile = szOpenFileName;
openfile.nMaxFile = MAX_PATH * MAX_PATH;
openfile.Flags = OFN_FILEMUSTEXIST | OFN_LONGNAMES | OFN_EXPLORER;
savefile.lStructSize = sizeof(OPENFILENAME);
savefile.hwndOwner = m_hWnd;
savefile.lpstrFilter = "All Files(*.*)\0*.*\0";
savefile.lpstrFile = szSaveFileName;
savefile.nMaxFile = MAX_PATH;
savefile.Flags = OFN_LONGNAMES | OFN_EXPLORER;
bool bResult = false;
if(GetOpenFileName(&openfile))
{
if(GetSaveFileName(&savefile))
{
FILE* readfile = fopen(szOpenFileName, "rt");
if(NULL != readfile)
{
FILE* writefile = fopen(szSaveFileName, "wt");
if(NULL != writefile)
{
const int MAX_BUFFER = 4000;
char szAccount[MAX_BUFFER];
char szUID[16] = "";
while(fgets(szUID, MAX_BUFFER, readfile))
{
char* stopstring = NULL;
bool bResult = !m_bBattleRylAuth ? DBComponent::AuthDB::GetUIDByAccount(CDBSingleObject::GetInstance(), szAccount, szUID)
: DBComponent::AuthDB::GetBattleUIDByAccount(CDBSingleObject::GetInstance(), szAccount, szUID);
if(bResult)
{
fprintf(writefile, "%s\t%s\n", szUID, szAccount);
}
else
{
fprintf(writefile, "%s\t%s\n", szUID, CDBSingleObject::GetInstance().GetErrorString());
}
Sleep(50);
}
bResult = true;
fclose(writefile);
}
fclose(readfile);
}
}
}
MessageBox(bResult ? "변환이 완료되었습니다." : "변환을 실패하였습니다");
}
void CAuthHanDlg::OnBnClickedMd5Convert()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData();
char szPassword[33];
memset(szPassword, 0, sizeof(char) * 33);
MD5String(m_szMD5Password.GetBuffer(0), szPassword);
m_szMD5HashValue = szPassword;
UpdateData(FALSE);
}

View File

@@ -0,0 +1,78 @@
// AuthHanDlg.h : header file
//
#if !defined(AFX_AUTHHANDLG_H__D956BA36_044B_41F8_8C63_71ACF469DA91__INCLUDED_)
#define AFX_AUTHHANDLG_H__D956BA36_044B_41F8_8C63_71ACF469DA91__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <RylServerLibrary/DB/DBComponent.h>
/////////////////////////////////////////////////////////////////////////////
// CAuthHanDlg dialog
class CAuthHanDlg : public CDialog
{
// Construction
public:
CAuthHanDlg(CWnd* pParent = NULL); // standard constructor
void AuthUserHangame(void);
// Dialog Data
//{{AFX_DATA(CAuthHanDlg)
enum { IDD = IDD_AUTHHAN_DIALOG };
CString m_Log;
CString m_Account;
CString m_Password;
CString m_ID;
CString m_T1;
CString m_T2;
CString m_UID_IN;
CString m_Account_Out;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAuthHanDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
public:
// Generated message map functions
//{{AFX_MSG(CAuthHanDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnConnect();
afx_msg void OnAuth();
afx_msg void OnUpdate();
afx_msg void OnFind();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
afx_msg void OnBnClickedReg();
afx_msg void OnBnClickedFindUidList();
afx_msg void OnBnClickedFindAccountList();
private:
CString m_AccountIn;
BOOL m_bBattleRylAuth;
CString m_szMD5Password;
CString m_szMD5HashValue;
afx_msg void OnBnClickedMd5Convert();
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_AUTHHANDLG_H__D956BA36_044B_41F8_8C63_71ACF469DA91__INCLUDED_)

View File

@@ -0,0 +1,42 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by AuthHan.rc
//
#define IDM_ABOUTBOX 0x0010
#define IDD_ABOUTBOX 100
#define IDS_ABOUTBOX 101
#define IDD_AUTHHAN_DIALOG 102
#define IDR_MAINFRAME 128
#define IDC_CONNECT 1000
#define IDC_LOG 1001
#define IDC_ACCOUNT 1002
#define IDC_PASSWORD 1003
#define IDC_AUTH 1004
#define IDC_ID 1005
#define IDC_UPDATE 1006
#define IDC_BUTTON 1007
#define IDC_UID_IN 1008
#define IDC_FIND 1009
#define IDC_ACCOUNT_OUT 1010
#define IDC_ACCOUNT_IN 1011
#define IDC_FIND_UID_LIST 1012
#define IDC_REG 1013
#define IDC_FIND3 1014
#define IDC_FIND_ACCOUNT_LIST 1014
#define IDC_CHECK1 1015
#define IDC_BATTLERYL_CHECK 1015
#define IDC_MD5_PASSWORD 1016
#define IDC_MD5_HASHVAL 1017
#define IDC_BUTTON1 1018
#define IDC_MD5_CONVERT 1018
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 129
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1019
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

View File

@@ -0,0 +1,8 @@
// stdafx.cpp : source file that includes just the standard includes
// AuthHan.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"

View File

@@ -0,0 +1,27 @@
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__0EAFCB48_9CA8_4B9A_BF6D_C9048E6747F7__INCLUDED_)
#define AFX_STDAFX_H__0EAFCB48_9CA8_4B9A_BF6D_C9048E6747F7__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__0EAFCB48_9CA8_4B9A_BF6D_C9048E6747F7__INCLUDED_)

View File

@@ -0,0 +1,30 @@
/* GLOBAL.H - RSAREF types and constants
*/
/* PROTOTYPES should be set to one if and only if the compiler supports
function argument prototyping.
The following makes PROTOTYPES default to 0 if it has not already
been defined with C compiler flags.
*/
#ifndef PROTOTYPES
#define PROTOTYPES 0
#endif
/* POINTER defines a generic pointer type */
typedef unsigned char *POINTER;
/* UINT2 defines a two byte word */
typedef unsigned short int UINT2;
/* UINT4 defines a four byte word */
typedef unsigned long int UINT4;
/* PROTO_LIST is defined depending on how PROTOTYPES is defined above.
If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it
returns an empty list.
*/
#if PROTOTYPES
#define PROTO_LIST(list) list
#else
#define PROTO_LIST(list) ()
#endif

View File

@@ -0,0 +1,36 @@
/* MD5.H - header file for MD5C.C
*/
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.
License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.
License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.
RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.
These notices must be retained in any copies of any part of this
documentation and/or software.
*/
/* MD5 context. */
typedef struct {
UINT4 state[4]; /* state (ABCD) */
UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
} MD5_CTX;
void MD5Init (MD5_CTX *);
void MD5Update (MD5_CTX *, unsigned char *, unsigned int);
void MD5Final (unsigned char [16], MD5_CTX *);

View File

@@ -0,0 +1,337 @@
/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm
*/
/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.
License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.
License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.
RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.
These notices must be retained in any copies of any part of this
documentation and/or software.
*/
#include "global.h"
#include "md5.h"
/* Constants for MD5Transform routine.
*/
#define S11 7
#define S12 12
#define S13 17
#define S14 22
#define S21 5
#define S22 9
#define S23 14
#define S24 20
#define S31 4
#define S32 11
#define S33 16
#define S34 23
#define S41 6
#define S42 10
#define S43 15
#define S44 21
static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64]));
static void Encode PROTO_LIST
((unsigned char *, UINT4 *, unsigned int));
static void Decode PROTO_LIST
((UINT4 *, unsigned char *, unsigned int));
static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int));
static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int));
static unsigned char PADDING[64] = {
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
/* F, G, H and I are basic MD5 functions.
*/
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z)))
/* ROTATE_LEFT rotates x left n bits.
*/
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
Rotation is separate from addition to prevent recomputation.
*/
#define FF(a, b, c, d, x, s, ac) { \
(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define GG(a, b, c, d, x, s, ac) { \
(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define HH(a, b, c, d, x, s, ac) { \
(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define II(a, b, c, d, x, s, ac) { \
(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
/* MD5 initialization. Begins an MD5 operation, writing a new context.
*/
void MD5Init (context)
MD5_CTX *context; /* context */
{
context->count[0] = context->count[1] = 0;
/* Load magic initialization constants.
*/
context->state[0] = 0x67452301;
context->state[1] = 0xefcdab89;
context->state[2] = 0x98badcfe;
context->state[3] = 0x10325476;
}
/* MD5 block update operation. Continues an MD5 message-digest
operation, processing another message block, and updating the
context.
*/
void MD5Update (context, input, inputLen)
MD5_CTX *context; /* context */
unsigned char *input; /* input block */
unsigned int inputLen; /* length of input block */
{
unsigned int i, index, partLen;
/* Compute number of bytes mod 64 */
index = (unsigned int)((context->count[0] >> 3) & 0x3F);
/* Update number of bits */
if ((context->count[0] += ((UINT4)inputLen << 3))
< ((UINT4)inputLen << 3))
context->count[1]++;
context->count[1] += ((UINT4)inputLen >> 29);
partLen = 64 - index;
/* Transform as many times as possible.
*/
if (inputLen >= partLen) {
MD5_memcpy
((POINTER)&context->buffer[index], (POINTER)input, partLen);
MD5Transform (context->state, context->buffer);
for (i = partLen; i + 63 < inputLen; i += 64)
MD5Transform (context->state, &input[i]);
index = 0;
}
else
i = 0;
/* Buffer remaining input */
MD5_memcpy
((POINTER)&context->buffer[index], (POINTER)&input[i],
inputLen-i);
}
/* MD5 finalization. Ends an MD5 message-digest operation, writing the
the message digest and zeroizing the context.
*/
void MD5Final (digest, context)
unsigned char digest[16]; /* message digest */
MD5_CTX *context; /* context */
{
unsigned char bits[8];
unsigned int index, padLen;
/* Save number of bits */
Encode (bits, context->count, 8);
/* Pad out to 56 mod 64.
*/
index = (unsigned int)((context->count[0] >> 3) & 0x3f);
padLen = (index < 56) ? (56 - index) : (120 - index);
MD5Update (context, PADDING, padLen);
/* Append length (before padding) */
MD5Update (context, bits, 8);
/* Store state in digest */
Encode (digest, context->state, 16);
/* Zeroize sensitive information.
*/
MD5_memset ((POINTER)context, 0, sizeof (*context));
}
/* MD5 basic transformation. Transforms state based on block.
*/
static void MD5Transform (state, block)
UINT4 state[4];
unsigned char block[64];
{
UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
Decode (x, block, 64);
/* Round 1 */
FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
/* Round 2 */
GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
/* Round 3 */
HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
/* Round 4 */
II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
state[0] += a;
state[1] += b;
state[2] += c;
state[3] += d;
/* Zeroize sensitive information.
*/
MD5_memset ((POINTER)x, 0, sizeof (x));
}
/* Encodes input (UINT4) into output (unsigned char). Assumes len is
a multiple of 4.
*/
static void Encode (output, input, len)
unsigned char *output;
UINT4 *input;
unsigned int len;
{
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4) {
output[j] = (unsigned char)(input[i] & 0xff);
output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
}
}
/* Decodes input (unsigned char) into output (UINT4). Assumes len is
a multiple of 4.
*/
static void Decode (output, input, len)
UINT4 *output;
unsigned char *input;
unsigned int len;
{
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4)
output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
(((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
}
/* Note: Replace "for loop" with standard memcpy if possible.
*/
static void MD5_memcpy (output, input, len)
POINTER output;
POINTER input;
unsigned int len;
{
unsigned int i;
for (i = 0; i < len; i++)
output[i] = input[i];
}
/* Note: Replace "for loop" with standard memset if possible.
*/
static void MD5_memset (output, value, len)
POINTER output;
int value;
unsigned int len;
{
unsigned int i;
for (i = 0; i < len; i++)
((char *)output)[i] = (char)value;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -0,0 +1,13 @@
//
// AUTHHAN.RC2 - resources Microsoft Visual C++ does not edit directly
//
#ifdef APSTUDIO_INVOKED
#error this file is not editable by Microsoft Visual C++
#endif //APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// Add manually edited resources here...
/////////////////////////////////////////////////////////////////////////////

View File

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

View File

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

View File

@@ -0,0 +1,215 @@
// 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\\AuthYouxi.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\\AuthYouxi.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "AuthYouxi 정보"
FONT 9, "MS Shell Dlg", 0, 0, 0x1
BEGIN
ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20
LTEXT "AuthYouxi 버전 1.0",IDC_STATIC,40,10,119,8,SS_NOPREFIX
LTEXT "Copyright (c) 2003",IDC_STATIC,40,25,119,8
DEFPUSHBUTTON "확인",IDOK,178,7,50,16,WS_GROUP
END
IDD_AUTHYOUXI_DIALOG DIALOGEX 0, 0, 157, 174
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE |
WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "AuthYouxi"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
DEFPUSHBUTTON ".",IDC_DEFAULT,22,122,6,6,BS_FLAT | NOT WS_VISIBLE
PUSHBUTTON "연결",IDC_CONNECT,5,5,50,14,BS_FLAT
GROUPBOX "인증",IDC_STATIC,5,24,145,83
CTEXT "계정",IDC_STATIC,11,37,32,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT IDC_ACCOUNT,44,37,96,12,ES_AUTOHSCROLL | NOT WS_BORDER
CTEXT "패스",IDC_STATIC,11,50,32,12,SS_CENTERIMAGE,
WS_EX_STATICEDGE
EDITTEXT IDC_PASSWORD,44,50,96,12,ES_AUTOHSCROLL | NOT WS_BORDER
PUSHBUTTON "spLoginAuthMyth",IDC_AUTH,11,68,129,14,BS_FLAT
PUSHBUTTON "spPayAuthMyth",IDC_PAYAUTH,11,84,129,14,BS_FLAT
LTEXT "",IDC_LOG,5,112,145,56,0,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", "AuthYouxi.exe"
VALUE "LegalCopyright", "TODO: (c) <회사 이름>. All rights reserved."
VALUE "OriginalFilename", "AuthYouxi.exe"
VALUE "ProductName", "TODO: <제품 이름>"
VALUE "ProductVersion", "1.0.0.1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "변환", 0x412, 949
END
END
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
IDD_ABOUTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 228
TOPMARGIN, 7
BOTTOMMARGIN, 48
END
IDD_AUTHYOUXI_DIALOG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 150
TOPMARGIN, 7
BOTTOMMARGIN, 167
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// RT_MANIFEST
//
IDR_MANIFEST RT_MANIFEST "res\\AuthYouxi.manifest"
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE
BEGIN
IDS_ABOUTBOX "AuthYouxi 정보(&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\AuthYouxi.rc2" // Microsoft Visual C++에서 편집되지 않은 리소스
#include "afxres.rc" // 표준 구성 요소
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@@ -0,0 +1,193 @@
<?xml version="1.0" encoding="ks_c_5601-1987"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="AuthYouxi"
ProjectGUID="{02F46342-4C6A-4518-BE02-E40BC2F96AB4}"
Keyword="MFCProj">
<Platforms>
<Platform
Name="Win32"/>
</Platforms>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="../DBToolExecutable/$(ConfigurationName)"
IntermediateDirectory="../Intermediate/$(ProjectName)/$(ConfigurationName)"
ConfigurationType="1"
UseOfMFC="1"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="../;./;../../RylServerProject;../../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"
CharacterSet="2">
<Tool
Name="VCCLCompilerTool"
Optimization="2"
InlineFunctionExpansion="1"
OmitFramePointers="TRUE"
AdditionalIncludeDirectories="../;./;../../RylServerProject;../../RylServerProject/RylServerLibrary;../../RylServerProject/BaseLibrary"
PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
StringPooling="TRUE"
MinimalRebuild="FALSE"
RuntimeLibrary="0"
EnableFunctionLevelLinking="TRUE"
TreatWChar_tAsBuiltInType="TRUE"
UsePrecompiledHeader="2"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
DebugInformationFormat="3"/>
<Tool
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
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="소스 파일"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
<File
RelativePath="AuthYouxi.cpp">
</File>
<File
RelativePath="AuthYouxiDlg.cpp">
</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>
</Filter>
<Filter
Name="헤더 파일"
Filter="h;hpp;hxx;hm;inl;inc">
<File
RelativePath="AuthYouxi.h">
</File>
<File
RelativePath="AuthYouxiDlg.h">
</File>
<File
RelativePath="Resource.h">
</File>
<File
RelativePath="stdafx.h">
</File>
</Filter>
<Filter
Name="리소스 파일"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;jpg;jpeg;jpe;manifest">
<File
RelativePath="res\AuthYouxi.ico">
</File>
<File
RelativePath="res\AuthYouxi.manifest">
</File>
<File
RelativePath="AuthYouxi.rc">
</File>
<File
RelativePath="res\AuthYouxi.rc2">
</File>
</Filter>
<File
RelativePath="ReadMe.txt">
</File>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@@ -0,0 +1,255 @@
// AuthYouxiDlg.cpp : 구현 파일
//
#include "stdafx.h"
#include "AuthYouxi.h"
#include "AuthYouxiDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#include <DB/DBComponent.h>
#include <DB/AuthDBComponent.h>
#include <DB/BillingDBComponent.h>
// 응용 프로그램 정보에 사용되는 CAboutDlg 대화 상자입니다.
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 대화 상자 데이터
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원
// 구현
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CAuthYouxiDlg 대화 상자
CAuthYouxiDlg::CAuthYouxiDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAuthYouxiDlg::IDD, pParent)
, m_Log(_T(""))
, m_Account(_T(""))
, m_Password(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CAuthYouxiDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_LOG, m_Log);
DDX_Text(pDX, IDC_ACCOUNT, m_Account);
DDX_Text(pDX, IDC_PASSWORD, m_Password);
}
BEGIN_MESSAGE_MAP(CAuthYouxiDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_CONNECT, OnBnClickedConnect)
ON_BN_CLICKED(IDC_AUTH, OnBnClickedAuth)
ON_BN_CLICKED(IDC_PAYAUTH, OnBnClickedPayauth)
END_MESSAGE_MAP()
// CAuthYouxiDlg 메시지 처리기
BOOL CAuthYouxiDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.
// IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
// 프레임워크가 이 작업을 자동으로 수행합니다.
SetIcon(m_hIcon, TRUE); // 큰 아이콘을 설정합니다.
SetIcon(m_hIcon, FALSE); // 작은 아이콘을 설정합니다.
// TODO: 여기에 추가 초기화 작업을 추가합니다.
return TRUE; // 컨트롤에 대한 포커스를 설정하지 않을 경우 TRUE를 반환합니다.
}
void CAuthYouxiDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 대화 상자에 최소화 단추를 추가할 경우 아이콘을 그리려면
// 아래 코드가 필요합니다. 문서/뷰 모델을 사용하는 MFC 응용 프로그램의 경우에는
// 프레임워크에서 이 작업을 자동으로 수행합니다.
void CAuthYouxiDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다.
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 아이콘을 그립니다.
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// 사용자가 최소화된 창을 끄는 동안에 커서가 표시되도록 시스템에서
// 이 함수를 호출합니다.
HCURSOR CAuthYouxiDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CAuthYouxiDlg::OnBnClickedConnect()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
if(CDBSingleObject::GetInstance().Connect(CDBSingleObject::Class_KeeperDB))
{
m_Log = "연결 완료. (Connected)";
}
else
{
m_Log = "연결 실패.";
}
UpdateData(FALSE);
}
void CAuthYouxiDlg::OnBnClickedAuth()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData();
AUTH Auth = {0,};
if(DBComponent::AuthDB::LoginAuthMyth(CDBSingleObject::GetInstance(),
m_Account.GetBuffer(0), m_Password.GetBuffer(0), "0.0.0.0", &Auth))
{
if(0 == Auth.Errcode)
{
m_Log.Format("인증 성공 UID:%d", Auth.UID);
}
else
{
switch(Auth.Errcode)
{
case 1: m_Log.Format("%d 등록이 되어 있지 않거나 암호가 틀림", Auth.Errcode); break;
case 2: m_Log.Format("%d UID 값 이상", Auth.Errcode); break;
case 3: m_Log.Format("%d 미설정된 포인트 량", Auth.Errcode); break;
case 9: m_Log.Format("%d 로그인 인증 오류", Auth.Errcode); break;
case 11: m_Log.Format("%d 포인트 카드 사용자가 아님", Auth.Errcode); break;
case 12: m_Log.Format("%d 남은 포인트가 없거나 음수 데이터", Auth.Errcode); break;
case 13: m_Log.Format("%d 남은 포인트 부족", Auth.Errcode); break;
case 14: m_Log.Format("%d 유효 기간 오류", Auth.Errcode); break;
case 19: m_Log.Format("%d 포인트 결제 오류", Auth.Errcode); break;
case 21: m_Log.Format("%d 정액 사용기간이 시작되지 않았음", Auth.Errcode); break;
case 22: m_Log.Format("%d 정액 사용기간 종료", Auth.Errcode); break;
case 29: m_Log.Format("%d 정액 결제 오류", Auth.Errcode); break;
case 51: m_Log.Format("%d 포인트 카드 사용자가 아님", Auth.Errcode); break;
case 52: m_Log.Format("%d 남은 포인트가 없거나 음수 데이터", Auth.Errcode); break;
case 53: m_Log.Format("%d 남은 포인트 부족", Auth.Errcode); break;
case 54: m_Log.Format("%d 유효 기간 오류", Auth.Errcode); break;
case 59: m_Log.Format("%d 포인트 결제 오류", Auth.Errcode); break;
default: m_Log.Format("%d 정해지지 않은 오류", Auth.Errcode); break;
}
}
}
else
{
m_Log = CDBSingleObject::GetInstance().GetErrorString();
}
UpdateData(FALSE);
}
void CAuthYouxiDlg::OnBnClickedPayauth()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
UpdateData();
PAY_AUTH PayAuth = {0,};
if(DBComponent::BillingDB::PayAuthMyth(
CDBSingleObject::GetInstance(), m_Account.GetBuffer(0), "0.0.0.0", &PayAuth))
{
if(0 == PayAuth.Errcode)
{
m_Log.Format("인증 성공 UID:%d, Time:%d (분)", PayAuth.UID, PayAuth.Time);
}
else
{
switch(PayAuth.Errcode)
{
case 1: m_Log.Format("%d 사용자 인증 실패. 시간:%d", PayAuth.Errcode, PayAuth.Time); break;
case 11: m_Log.Format("%d 결제정보가 없습니다. 시간:%d", PayAuth.Errcode, PayAuth.Time); break;
case 13: m_Log.Format("%d 포인트량 부족. 시간:%d", PayAuth.Errcode, PayAuth.Time); break;
case 19: m_Log.Format("%d 결제 인증 실패. 시간:%d", PayAuth.Errcode, PayAuth.Time); break;
default: m_Log.Format("%d 정해지지 않은 오류. 시간:%d", PayAuth.Errcode, PayAuth.Time); break;
}
}
}
else
{
m_Log = CDBSingleObject::GetInstance().GetErrorString();
}
UpdateData(FALSE);
}

View File

@@ -0,0 +1,38 @@
// AuthYouxiDlg.h : 헤더 파일
//
#pragma once
// CAuthYouxiDlg 대화 상자
class CAuthYouxiDlg : public CDialog
{
// 생성
public:
CAuthYouxiDlg(CWnd* pParent = NULL); // 표준 생성자
// 대화 상자 데이터
enum { IDD = IDD_AUTHYOUXI_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원
// 구현
protected:
HICON m_hIcon;
// 메시지 맵 함수를 생성했습니다.
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedConnect();
CString m_Log;
CString m_Account;
CString m_Password;
afx_msg void OnBnClickedAuth();
afx_msg void OnBnClickedPayauth();
};

View File

@@ -0,0 +1,81 @@
================================================================================
MFC 라이브러리 : AuthYouxi 프로젝트 개요
================================================================================
응용 프로그램 마법사를 사용하여 AuthYouxi 응용 프로그램을 만듭니다. 이 응용
프로그램에서는 기본적인 MFC 사용 밥법과 응용 프로그램 작성 방법을 설명합니다.
이 파일에는 AuthYouxi 응용 프로그램을 구성하는 각 파일에 대한 개요가 포함되어
있습니다.
AuthYouxi.vcproj
응용 프로그램 마법사를 사용하여 생성된 VC++ 프로젝트의 주 프로젝트 파일입니다.
이 파일에는 파일을 생성한 Visual C++ 버전 정보 및 응용 프로그램 마법사에서 선택한 플랫폼,
구성, 프로젝트 기능 등의 정보가 포함됩니다.
AuthYouxi.h
응용 프로그램의 주 헤더 파일입니다. 이 파일에는 다른 프로젝트에 관련된 Resource.h와 같은
특정 헤더가 포함되며 CAuthYouxiApp 응용 프로그램 클래스가 선언됩니다.
AuthYouxi.cpp
CAuthYouxiApp 응용 프로그램 클래스를 포함하는 주 응용 프로그램의 소스 파일입니다.
AuthYouxi.rc
프로그램에서 사용하는 모든 Microsoft Windows 리소스가 나열된 파일입니다.
이 파일에는 RES 하위 디렉터리에 저장된 아이콘, 비트맵 및 커서가 포함되며
Microsoft Visual C++에서 직접 이 파일을 편집할 수도 있습니다. 사용자의 프로젝트
리소스는 1042에 들어 있습니다.
res\AuthYouxi.ico
응용 프로그램의 아이콘으로 사용되는 아이콘 파일입니다.
이 아이콘은 주 리소스 파일인 AuthYouxi.rc에 포함됩니다.
res\AuthYouxi.rc2
Microsoft Visual C++에서 편집할 수 없는 리소스가 포함된 파일입니다.
리소스 편집기에서 편집할 수 없는 모든 리소스는 이 파일에 포함되어 있습니다.
/////////////////////////////////////////////////////////////////////////////
응용 프로그램 마법사에서는 단일 대화 상자 클래스를 만듭니다.
AuthYouxiDlg.h, AuthYouxiDlg.cpp - 대화 상자
CAuthYouxiDlg 클래스를 포함하는 파일입니다. 이 클래스에는 응용 프로그램의
주 대화 상자에 대한 동작이 정의됩니다. 대화 상자의 템플릿은 AuthYouxi.rc에
있으며 Microsoft Visual C++에서 편집할 수 있습니다.
/////////////////////////////////////////////////////////////////////////////
기타 기능
ActiveX 컨트롤
응용 프로그램에서 ActiveX 컨트롤을 사용할 수 있습니다.
인쇄 및 인쇄 미리보기 지원
응용 프로그램 마법사에서 MFC 라이브러리의 CView 클래스에 있는 멤버 함수를 호출하여
인쇄, 인쇄 설정, 인쇄 미리보기 명령을 처리할 수 있는 코드를 생성합니다.
/////////////////////////////////////////////////////////////////////////////
기타 표준 파일
StdAfx.h, StdAfx.cpp
미리 컴파일된 헤더 파일(PCH) AuthYouxi.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,28 @@
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by AuthYouxi.rc
//
#define IDR_MANIFEST 1
#define IDM_ABOUTBOX 0x0010
#define IDD_ABOUTBOX 100
#define IDS_ABOUTBOX 101
#define IDD_AUTHYOUXI_DIALOG 102
#define IDR_MAINFRAME 128
#define IDC_DEFAULT 1000
#define IDC_CONNECT 1001
#define IDC_ACCOUNT 1002
#define IDC_PASSWORD 1003
#define IDC_AUTH 1004
#define IDC_PAYAUTH 1005
#define IDC_LOG 1006
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 129
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1007
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 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.AuthYouxi"
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 @@
//
// AuthYouxi.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,7 @@
// stdafx.cpp : 표준 포함 파일을 포함하는 소스 파일입니다.
// AuthYouxi.pch는 미리 컴파일된 헤더가 됩니다.
// stdafx.obj는 미리 컴파일된 형식 정보를 포함합니다.
#include "stdafx.h"

View File

@@ -0,0 +1,42 @@
// 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

View File

@@ -0,0 +1,206 @@
// Admin.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "GameDBTool.h"
#include "Admin.h"
#include "GameDBTool.h"
#include "GameDBToolDlg.h"
#include ".\admin.h"
// CAdmin 대화 상자입니다.
IMPLEMENT_DYNAMIC(CAdmin, CDialog)
CAdmin::CAdmin(CWnd* pParent /*=NULL*/)
: CDialog(CAdmin::IDD, pParent)
, m_UserID(_T(""))
, m_SIP(_T(""))
, m_EIP(_T(""))
{
}
CAdmin::~CAdmin()
{
}
void CAdmin::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_UID, m_UserID);
DDX_Control(pDX, IDC_LEVEL, m_Level);
DDX_Text(pDX, IDC_S_IP, m_SIP);
DDX_Text(pDX, IDC_E_IP, m_EIP);
}
BEGIN_MESSAGE_MAP(CAdmin, CDialog)
ON_BN_CLICKED(IDC_MODIFY, OnBnClickedModify)
ON_EN_CHANGE(IDC_S_IP, OnEnChangeSIp)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
// CAdmin 메시지 처리기입니다.
BOOL CAdmin::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 여기에 추가 초기화 작업을 추가합니다.
CGameDBToolApp* pAppWnd = (CGameDBToolApp*)AfxGetApp();
CGameDBToolDlg* pDlgWnd = (CGameDBToolDlg*)pAppWnd->m_pMainWnd;
ADMIN Admin = {0,};
char Query[256] = "";
sprintf(Query, "SELECT * FROM AdminList WHERE UID='%d'", m_UID);
int Rows = 0;
if(!CDBSingleObject::GetInstance().Select( Query, (void **)&Admin, sizeof(ADMIN), 0, 1, &Rows))
{
pDlgWnd->m_Log.LogPrint("[영자] 영자 정보 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(0 == Rows)
{
pDlgWnd->m_Log.LogPrint("[영자] 영자 정보 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
m_UserID.Format("%d", m_UID);
m_Level.InsertString(0, "None");
m_Level.InsertString(1, "Admin LV1");
m_Level.InsertString(2, "Admin LV2");
m_Level.InsertString(3, "Admin LV3");
// 운영자 정보 창 띄었을때 현재 레벨 표시
switch(Admin.Level)
{
case 0: m_Level.SetCurSel(0); break;
case 1: m_Level.SetCurSel(1); break;
case 2: m_Level.SetCurSel(2); break;
case 3: m_Level.SetCurSel(3); break;
}
// 운영자 정보 창 띄었을때 현재 아이피 셋팅 표시
m_SIP = Admin.IP_S;
m_EIP = Admin.IP_E;
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}
void CAdmin::OnBnClickedModify()
{
UpdateData();
CGameDBToolApp* pAppWnd = (CGameDBToolApp*)AfxGetApp();
CGameDBToolDlg* pDlgWnd = (CGameDBToolDlg*)pAppWnd->m_pMainWnd;
IN_ADDR SAddr = {0,};
IN_ADDR EAddr = {0,};
SAddr.S_un.S_addr = inet_addr(m_SIP.GetBuffer(0));
EAddr.S_un.S_addr = inet_addr(m_EIP.GetBuffer(0));
if((SAddr.S_un.S_un_b.s_b1 != EAddr.S_un.S_un_b.s_b1) || (SAddr.S_un.S_un_b.s_b2 != EAddr.S_un.S_un_b.s_b2) ||
(SAddr.S_un.S_un_b.s_b3 != EAddr.S_un.S_un_b.s_b3))
{
MessageBox("IP 대역이 잘못 되었습니다.");
return;
}
char Query[256] = "";
switch(m_Level.GetCurSel())
{
case 0: // 일반
{
sprintf(Query, "UPDATE AdminList SET Level = '%d', IP_S = '%s', IP_E = '%s' WHERE UID = '%d'",
0, m_SIP.GetBuffer(0), m_EIP.GetBuffer(0), m_UID);
}break;
case 1: // 운영자 LV1
{
sprintf(Query, "UPDATE AdminList SET Level = '%d', IP_S = '%s', IP_E = '%s' WHERE UID = '%d'",
1, m_SIP.GetBuffer(0), m_EIP.GetBuffer(0), m_UID);
}break;
case 2: // 운영자 LV2
{
sprintf(Query, "UPDATE AdminList SET Level = '%d', IP_S = '%s', IP_E = '%s' WHERE UID = '%d'",
2, m_SIP.GetBuffer(0), m_EIP.GetBuffer(0), m_UID);
}break;
case 3: // 운영자 LV3
{
sprintf(Query, "UPDATE AdminList SET Level = '%d', IP_S = '%s', IP_E = '%s' WHERE UID = '%d'",
3, m_SIP.GetBuffer(0), m_EIP.GetBuffer(0), m_UID);
}break;
}
int Rows = 0;
if(!CDBSingleObject::GetInstance().ExecuteQuery(Query))
{
pDlgWnd->m_Log.LogPrint("[영자] 레벨 변환중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
CAdmin::OnOK();
}
void CAdmin::OnEnChangeSIp()
{
UpdateData();
m_EIP = m_SIP;
UpdateData(FALSE);
}
bool CAdminDB::Initialize(void)
{
char Query[256] = "";
memset(&m_AdminList, 0, sizeof(unsigned long) * MaxList);
sprintf(Query, "SELECT UID FROM AdminList");
if(!CDBSingleObject::GetInstance().Select( Query, (void **)m_AdminList, sizeof(DWORD), 0, MaxList, &m_AdminNum))
return false;
return true;
}
unsigned short CAdminDB::GetAdminLevel(unsigned long UID)
{
for(int Count = 0; Count < m_AdminNum; ++Count)
if(m_AdminList[Count] == UID)
{
return Level::L1;
}
return Level::None;
}
HBRUSH CAdmin::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 여기서 DC의 특성을 변경합니다.
HBRUSH m_hBrush;
m_hBrush = CreateSolidBrush(RGB( 255, 169, 128));
switch( nCtlColor ){
case CTLCOLOR_DLG:
pDC->SetBkColor(RGB( 255, 255, 255));
pDC->SetTextColor(RGB( 0, 0, 0));
return m_hBrush;
break;
case CTLCOLOR_STATIC:
pDC->SetBkColor(RGB( 255, 169, 128));
pDC->SetTextColor(RGB( 0, 0, 0));
return m_hBrush;
break;
default:
return hbr;
break;
}
}

View File

@@ -0,0 +1,58 @@
#pragma once
#include "afxwin.h"
// CAdmin 대화 상자입니다.
class CAdmin : public CDialog
{
DECLARE_DYNAMIC(CAdmin)
public:
CAdmin(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CAdmin();
// 대화 상자 데이터입니다.
enum { IDD = IDD_ADMIN };
DWORD m_UID;
public:
void SetUID(DWORD UID_In) { m_UID = UID_In; }
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
CString m_UserID;
CComboBox m_Level;
afx_msg void OnBnClickedModify();
CString m_SIP;
CString m_EIP;
afx_msg void OnEnChangeSIp();
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
};
class CAdminDB
{
public:
enum Level
{
None = 0,
L1 = 1, // 운영자 L1
L2 = 2, // 운영자 L2
L3 = 3, // 운영자 L3
};
private:
enum { MaxList = 100 };
DWORD m_AdminList[MaxList];
int m_AdminNum;
public:
bool Initialize(void);
unsigned short GetAdminLevel(unsigned long UID);
};

View File

@@ -0,0 +1,513 @@
// CharCopy.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "GameDBTool.h"
#include "CharCopy.h"
#include "GameDBTool.h"
#include "GameDBToolDlg.h"
#include ".\charcopy.h"
// CCharCopy 대화 상자입니다.
IMPLEMENT_DYNAMIC(CCharCopy, CDialog)
CCharCopy::CCharCopy(CWnd* pParent /*=NULL*/)
: CDialog(CCharCopy::IDD, pParent)
, m_CharID(_T(""))
, m_TargetID(_T(""))
{
}
CCharCopy::~CCharCopy()
{
}
void CCharCopy::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_CID, m_CharID);
DDX_Text(pDX, IDC_TARGETID, m_TargetID);
}
BOOL CCharCopy::OnInitDialog()
{
CDialog::OnInitDialog();
m_CharID.Format("%d", m_CID);
UpdateData(FALSE);
return TRUE;
}
BEGIN_MESSAGE_MAP(CCharCopy, CDialog)
ON_BN_CLICKED(IDC_FILE_SAVE, OnBnClickedFileSave)
ON_BN_CLICKED(IDC_DB_LOAD, OnBnClickedDbLoad)
ON_BN_CLICKED(IDC_COPY_TO, OnBnClickedCopyTo)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
void CCharCopy::OnBnClickedFileSave()
{
UpdateData();
CHAR_INFOST CharInfo; // 캐릭터 기본 정보
CHAR_POS CharPos; // 캐릭터 위치 정보
SKILL Skill; // 캐릭터 스킬 정보
QUICK Quick; // 캐릭터 퀵 슬롯
EQUIP Equip; // 캐릭터 장비
INVEN Inven; // 캐릭터 인벤
EXTRA Extra; // 캐릭터 여분
EXCHANGE Exchange; // 캐릭터 교환
CHAR_INFOEX CharInfoEx; // 캐릭터 추가 정보
CGameDBToolApp* pAppWnd = (CGameDBToolApp*)AfxGetApp();
CGameDBToolDlg* pDlgWnd = (CGameDBToolDlg*)pAppWnd->m_pMainWnd;
FileOpen *lpFileOpen = pDlgWnd->m_pFileOpen;
if(lpFileOpen->SaveDlg("idump"))
{
pDlgWnd->m_Log.LogPrint("[카피] DB 데이터 파일 기록 시작");
DWORD dwWritten = 0;
char DumpText[256] = "";
HANDLE hLogFile = CreateFile(lpFileOpen->GetFilePathNameFromBuffer(), GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hLogFile == NULL)
{
pDlgWnd->m_Log.LogPrint("[아이템] 아이템 파일 기록 에러 발생. %d", GetLastError());
return;
}
unsigned short usEquipView[15] = { 0, };
// 로드
if(!DBComponent::GameDB::GetCharInfo(CDBSingleObject::GetInstance(), m_CID, &CharInfo, usEquipView, 15))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 정보 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetCharPos(CDBSingleObject::GetInstance(), m_CID, &CharPos))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 위치 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetCharSkill(CDBSingleObject::GetInstance(), m_CID, &Skill))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 스킬 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetQuick(CDBSingleObject::GetInstance(), m_CID, &Quick))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 퀵 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetEquip(CDBSingleObject::GetInstance(), m_CID, &Equip))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 장비 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetInven(CDBSingleObject::GetInstance(), m_CID, &Inven))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 인벤 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetExtra(CDBSingleObject::GetInstance(), m_CID, &Extra))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 여분 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetExchange(CDBSingleObject::GetInstance(), m_CID, &Exchange))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 교환 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetCharInfoEx(CDBSingleObject::GetInstance(), m_CID, &CharInfoEx))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 추가 정보 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
// 저장
if(!WriteFile(hLogFile, &CharInfo, sizeof(CHAR_INFOST), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 정보 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!WriteFile(hLogFile, &CharPos, sizeof(CHAR_POS), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 위치 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!WriteFile(hLogFile, &Skill, sizeof(SKILL), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 스킬 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!WriteFile(hLogFile, &Quick, sizeof(QUICK), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 퀵 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!WriteFile(hLogFile, &Equip, sizeof(EQUIP), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 장비 아이템 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!WriteFile(hLogFile, &Inven, sizeof(INVEN), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 인벤 아이템 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!WriteFile(hLogFile, &Extra, sizeof(EXTRA), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 여분 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!WriteFile(hLogFile, &Exchange, sizeof(EXCHANGE), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 교환 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!WriteFile(hLogFile, &CharInfoEx, sizeof(CHAR_INFOEX), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 추가 정보 파일 기록 에러 발생. %d", GetLastError());
return;
}
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] DB 데이터 파일 기록 성공");
}
}
void CCharCopy::OnBnClickedDbLoad()
{
CHAR_INFOST CharInfo; // 캐릭터 기본 정보
CHAR_POS CharPos; // 캐릭터 위치 정보
SKILL Skill; // 캐릭터 스킬 정보
QUICK Quick; // 캐릭터 퀵 슬롯
EQUIP Equip; // 캐릭터 장비
INVEN Inven; // 캐릭터 인벤
EXTRA Extra; // 캐릭터 여분
EXCHANGE Exchange; // 캐릭터 교환
CHAR_INFOEX CharInfoEx; // 캐릭터 추가 정보
CGameDBToolApp* pAppWnd = (CGameDBToolApp*)AfxGetApp();
CGameDBToolDlg* pDlgWnd = (CGameDBToolDlg*)pAppWnd->m_pMainWnd;
FileOpen *lpFileOpen = pDlgWnd->m_pFileOpen;
if(lpFileOpen->OpenDlg())
{
pDlgWnd->m_Log.LogPrint("[카피] DB 데이터 파일 읽기 시작");
DWORD dwWritten = 0;
char DumpText[256] = "";
HANDLE hLogFile = CreateFile(lpFileOpen->GetFilePathNameFromBuffer(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hLogFile == NULL)
{
pDlgWnd->m_Log.LogPrint("[아이템] 아이템 파일 읽기 에러 발생. %d", GetLastError());
return;
}
// 저장
if(!ReadFile(hLogFile, &CharInfo, sizeof(CHAR_INFOST), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 정보 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!ReadFile(hLogFile, &CharPos, sizeof(CHAR_POS), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 위치 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!ReadFile(hLogFile, &Skill, sizeof(SKILL), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 스킬 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!ReadFile(hLogFile, &Quick, sizeof(QUICK), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 퀵 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!ReadFile(hLogFile, &Equip, sizeof(EQUIP), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 장비 아이템 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!ReadFile(hLogFile, &Inven, sizeof(INVEN), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 인벤 아이템 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!ReadFile(hLogFile, &Extra, sizeof(EXTRA), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 여분 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!ReadFile(hLogFile, &Exchange, sizeof(EXCHANGE), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 교환 파일 기록 에러 발생. %d", GetLastError());
return;
}
if(!ReadFile(hLogFile, &CharInfoEx, sizeof(CHAR_INFOEX), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 추가 정보 파일 기록 에러 발생. %d", GetLastError());
return;
}
// 저장
unsigned short EquipView[15] = {0,};
if(!DBComponent::GameDB::UpdateCharInfo(CDBSingleObject::GetInstance(), m_CID, &CharInfo, EquipView, 15))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 정보 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateCharPos(CDBSingleObject::GetInstance(), m_CID, &CharPos))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 위치 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateCharSkill(CDBSingleObject::GetInstance(), m_CID, &Skill))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 스킬 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateQuick(CDBSingleObject::GetInstance(), m_CID, &Quick))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 퀵 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateEquip(CDBSingleObject::GetInstance(), m_CID, &Equip))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 장비 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateInven(CDBSingleObject::GetInstance(), m_CID, &Inven))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 인벤 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateExtra(CDBSingleObject::GetInstance(), m_CID, &Extra))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 여분 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateExchange(CDBSingleObject::GetInstance(), m_CID, &Exchange))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 교환 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateCharInfoEx(CDBSingleObject::GetInstance(), m_CID, &CharInfoEx))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 추가 정보 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[아이템] DB 데이터 파일 기록 성공");
}
}
void CCharCopy::OnBnClickedCopyTo()
{
UpdateData();
CHAR_INFOST CharInfo; // 캐릭터 기본 정보
CHAR_POS CharPos; // 캐릭터 위치 정보
SKILL Skill; // 캐릭터 스킬 정보
QUICK Quick; // 캐릭터 퀵 슬롯
EQUIP Equip; // 캐릭터 장비
INVEN Inven; // 캐릭터 인벤
EXTRA Extra; // 캐릭터 여분
EXCHANGE Exchange; // 캐릭터 교환
CHAR_INFOEX CharInfoEx; // 캐릭터 추가 정보
CGameDBToolApp* pAppWnd = (CGameDBToolApp*)AfxGetApp();
CGameDBToolDlg* pDlgWnd = (CGameDBToolDlg*)pAppWnd->m_pMainWnd;
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 데이터 옮기기 시작");
unsigned short usEquipView[15] = { 0, };
// 로드
if(!DBComponent::GameDB::GetCharInfo(CDBSingleObject::GetInstance(), m_CID, &CharInfo, usEquipView, 15))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 정보 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetCharPos(CDBSingleObject::GetInstance(), m_CID, &CharPos))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 위치 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetCharSkill(CDBSingleObject::GetInstance(), m_CID, &Skill))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 스킬 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetQuick(CDBSingleObject::GetInstance(), m_CID, &Quick))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 퀵 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetEquip(CDBSingleObject::GetInstance(), m_CID, &Equip))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 장비 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetInven(CDBSingleObject::GetInstance(), m_CID, &Inven))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 인벤 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetExtra(CDBSingleObject::GetInstance(), m_CID, &Extra))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 여분 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetExchange(CDBSingleObject::GetInstance(), m_CID, &Exchange))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 교환 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetCharInfoEx(CDBSingleObject::GetInstance(), m_CID, &CharInfoEx))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 추가 정보 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
// 저장
DWORD TargetCID = atoi(m_TargetID.GetBuffer());
if(!DBComponent::GameDB::UpdateCharInfo(CDBSingleObject::GetInstance(), TargetCID, &CharInfo, usEquipView, 15))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 정보 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateCharPos(CDBSingleObject::GetInstance(), TargetCID, &CharPos))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 위치 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateCharSkill(CDBSingleObject::GetInstance(), TargetCID, &Skill))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 스킬 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateQuick(CDBSingleObject::GetInstance(), TargetCID, &Quick))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 퀵 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateEquip(CDBSingleObject::GetInstance(), TargetCID, &Equip))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 장비 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateInven(CDBSingleObject::GetInstance(), TargetCID, &Inven))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 인벤 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateExtra(CDBSingleObject::GetInstance(), TargetCID, &Extra))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 여분 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateExchange(CDBSingleObject::GetInstance(), TargetCID, &Exchange))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 교환 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateCharInfoEx(CDBSingleObject::GetInstance(), TargetCID, &CharInfoEx))
{
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 추가 정보 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
pDlgWnd->m_Log.LogPrint("[카피] 캐릭터 데이터 옮기기 성공");
}
HBRUSH CCharCopy::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 여기서 DC의 특성을 변경합니다.
HBRUSH m_hBrush;
m_hBrush = CreateSolidBrush(RGB( 255, 169, 128));
switch( nCtlColor ){
case CTLCOLOR_DLG:
pDC->SetBkColor(RGB( 255, 255, 255));
pDC->SetTextColor(RGB( 0, 0, 0));
return m_hBrush;
break;
case CTLCOLOR_STATIC:
pDC->SetBkColor(RGB( 255, 169, 128));
pDC->SetTextColor(RGB( 0, 0, 0));
return m_hBrush;
break;
default:
return hbr;
break;
}
}

View File

@@ -0,0 +1,34 @@
#pragma once
// CCharCopy 대화 상자입니다.
class CCharCopy : public CDialog
{
DECLARE_DYNAMIC(CCharCopy)
DWORD m_CID;
public:
CCharCopy(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CCharCopy();
void SetCID(DWORD CID_In) { m_CID = CID_In; }
// 대화 상자 데이터입니다.
enum { IDD = IDD_CHARCOPY };
protected:
virtual BOOL OnInitDialog();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedFileSave();
CString m_CharID;
CString m_TargetID;
afx_msg void OnBnClickedDbLoad();
afx_msg void OnBnClickedCopyTo();
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
};

View File

@@ -0,0 +1,257 @@
// CharItem.cpp : 구현 파일입니다.
//
#include "stdafx.h"
#include "GameDBTool.h"
#include "CharItem.h"
#include "GameDBTool.h"
#include "GameDBToolDlg.h"
#include ".\charitem.h"
// CCharItem 대화 상자입니다.
IMPLEMENT_DYNAMIC(CCharItem, CDialog)
CCharItem::CCharItem(CWnd* pParent /*=NULL*/)
: CDialog(CCharItem::IDD, pParent)
, m_Equip(_T(""))
, m_EquipSize(_T(""))
, m_InvenSize(_T(""))
, m_Inven(_T(""))
{
memset(&m_QuickData, 0, sizeof(QUICK));
memset(&m_InvenData, 0, sizeof(INVEN));
memset(&m_EquipData, 0, sizeof(EQUIP));
}
CCharItem::~CCharItem()
{
}
void CCharItem::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EQUIP, m_Equip);
DDX_Text(pDX, IDC_EQUIP_SIZE, m_EquipSize);
DDX_Text(pDX, IDC_INVEN_SIZE, m_InvenSize);
DDX_Text(pDX, IDC_INVEN, m_Inven);
}
BOOL CCharItem::OnInitDialog()
{
CDialog::OnInitDialog();
CCharItem::OnBnClickedDbLoad();
return TRUE;
}
BEGIN_MESSAGE_MAP(CCharItem, CDialog)
ON_BN_CLICKED(IDC_DB_LOAD, OnBnClickedDbLoad)
ON_BN_CLICKED(IDC_FILE_SAVE, OnBnClickedFileSave)
ON_BN_CLICKED(IDC_FILE_LOAD, OnBnClickedFileLoad)
ON_BN_CLICKED(IDC_DB_SAVE, OnBnClickedDbSave)
ON_WM_CTLCOLOR()
END_MESSAGE_MAP()
// CCharItem 메시지 처리기입니다.
void CCharItem::PrintData(void)
{
int Counter = 0;
char Dest[3];
BYTE *lpPos = NULL;
// 퀵 출력
// 장비 출력
m_Equip = "0x";
lpPos = (BYTE*)&m_EquipData;
for(Counter = 0; Counter < sizeof(EQUIP); ++Counter, ++lpPos)
{
Math::Convert::Hex08ToStr((char *)&Dest, *lpPos);
m_Equip.Insert((Counter * 2) + 2, Dest);
}
m_EquipSize.Format("%d", m_EquipData.dwSize);
// 인벤 출력
m_Inven = "0x";
lpPos = (BYTE*)&m_InvenData;
for(Counter = 0; Counter < sizeof(INVEN); ++Counter, ++lpPos)
{
Math::Convert::Hex08ToStr((char *)&Dest, *lpPos);
m_Inven.Insert((Counter * 2) + 2, Dest);
}
m_InvenSize.Format("%d", m_InvenData.dwSize);
UpdateData(FALSE);
}
void CCharItem::OnBnClickedDbLoad()
{
memset(&m_QuickData, 0, sizeof(QUICK));
memset(&m_InvenData, 0, sizeof(INVEN));
memset(&m_EquipData, 0, sizeof(EQUIP));
CGameDBToolApp* pAppWnd = (CGameDBToolApp*)AfxGetApp();
CGameDBToolDlg* pDlgWnd = (CGameDBToolDlg*)pAppWnd->m_pMainWnd;
/* if(!DBComponent::GameDB::GetQuick(CDBSingleObject::GetInstance(), m_CID, &m_QuickData))
{
pDlgWnd->m_Log.LogPrint("[아이템] 퀵 슬롯 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
*/
if(!DBComponent::GameDB::GetEquip(CDBSingleObject::GetInstance(), m_CID, &m_EquipData))
{
pDlgWnd->m_Log.LogPrint("[아이템] 장비 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::GetInven(CDBSingleObject::GetInstance(), m_CID, &m_InvenData))
{
pDlgWnd->m_Log.LogPrint("[아이템] 인벤 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
PrintData();
}
void CCharItem::OnBnClickedFileSave()
{
UpdateData();
CGameDBToolApp* pAppWnd = (CGameDBToolApp*)AfxGetApp();
CGameDBToolDlg* pDlgWnd = (CGameDBToolDlg*)pAppWnd->m_pMainWnd;
FileOpen *lpFileOpen = pDlgWnd->m_pFileOpen;
if(lpFileOpen->SaveDlg("idump"))
{
pDlgWnd->m_Log.LogPrint("[아이템] 아이템 파일 기록 시작");
DWORD dwWritten = 0;
char DumpText[256] = "";
HANDLE hLogFile = CreateFile(lpFileOpen->GetFilePathNameFromBuffer(), GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hLogFile == NULL)
{
pDlgWnd->m_Log.LogPrint("[아이템] 아이템 파일 기록 에러 발생. %d", GetLastError());
return;
}
// 장비 아이템 기록
if(!WriteFile(hLogFile, &m_EquipData, sizeof(EQUIP), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[아이템] 장비 아이템 파일 기록 에러 발생. %d", GetLastError());
return;
}
// 인벤 아이템 기록
if(!WriteFile(hLogFile, &m_InvenData, sizeof(INVEN), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[아이템] 인벤 아이템 파일 기록 에러 발생. %d", GetLastError());
return;
}
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[아이템] 아이템 파일 기록 성공");
}
}
void CCharItem::OnBnClickedFileLoad()
{
CGameDBToolApp* pAppWnd = (CGameDBToolApp*)AfxGetApp();
CGameDBToolDlg* pDlgWnd = (CGameDBToolDlg*)pAppWnd->m_pMainWnd;
FileOpen *lpFileOpen = pDlgWnd->m_pFileOpen;
if(lpFileOpen->OpenDlg())
{
pDlgWnd->m_Log.LogPrint("[아이템] 아이템 파일 읽기 시작");
DWORD dwWritten = 0;
char DumpText[256] = "";
HANDLE hLogFile = CreateFile(lpFileOpen->GetFilePathNameFromBuffer(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hLogFile == NULL)
{
pDlgWnd->m_Log.LogPrint("[아이템] 아이템 파일 읽기 에러 발생. %d", GetLastError());
return;
}
// 장비 아이템 기록
if(!ReadFile(hLogFile, &m_EquipData, sizeof(EQUIP), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[아이템] 장비 아이템 파일 읽기 에러 발생. %d", GetLastError());
return;
}
// 인벤 아이템 기록
if(!ReadFile(hLogFile, &m_InvenData, sizeof(INVEN), &dwWritten, NULL))
{
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[아이템] 인벤 아이템 파일 읽기 에러 발생. %d", GetLastError());
return;
}
CloseHandle(hLogFile);
pDlgWnd->m_Log.LogPrint("[아이템] 아이템 파일 기록 성공");
}
CCharItem::PrintData();
}
void CCharItem::OnBnClickedDbSave()
{
CGameDBToolApp* pAppWnd = (CGameDBToolApp*)AfxGetApp();
CGameDBToolDlg* pDlgWnd = (CGameDBToolDlg*)pAppWnd->m_pMainWnd;
/* if(!DBComponent::GameDB::GetQuick(CDBSingleObject::GetInstance(), m_CID, &m_QuickData))
{
pDlgWnd->m_Log.LogPrint("[아이템] 퀵 슬롯 읽기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
*/
if(!DBComponent::GameDB::UpdateEquip(CDBSingleObject::GetInstance(), m_CID, &m_EquipData))
{
pDlgWnd->m_Log.LogPrint("[아이템] 장비 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
if(!DBComponent::GameDB::UpdateInven(CDBSingleObject::GetInstance(), m_CID, &m_InvenData))
{
pDlgWnd->m_Log.LogPrint("[아이템] 인벤 쓰기중에 오류가 발생. %s", CDBSingleObject::GetInstance().GetErrorString());
}
}
HBRUSH CCharItem::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 여기서 DC의 특성을 변경합니다.
HBRUSH m_hBrush;
m_hBrush = CreateSolidBrush(RGB( 255, 169, 128));
switch( nCtlColor ){
case CTLCOLOR_DLG:
pDC->SetBkColor(RGB( 255, 255, 255));
pDC->SetTextColor(RGB( 0, 0, 0));
return m_hBrush;
break;
case CTLCOLOR_STATIC:
pDC->SetBkColor(RGB( 255, 169, 128));
pDC->SetTextColor(RGB( 0, 0, 0));
return m_hBrush;
break;
default:
return hbr;
break;
}
}

View File

@@ -0,0 +1,42 @@
#pragma once
// CCharItem 대화 상자입니다.
class CCharItem : public CDialog
{
DECLARE_DYNAMIC(CCharItem)
DWORD m_CID;
QUICK m_QuickData;
INVEN m_InvenData;
EQUIP m_EquipData;
public:
CCharItem(CWnd* pParent = NULL); // 표준 생성자입니다.
virtual ~CCharItem();
void SetCID(DWORD CID_In) { m_CID = CID_In; }
void PrintData(void);
// 대화 상자 데이터입니다.
enum { IDD = IDD_CHARITEM };
protected:
virtual BOOL OnInitDialog();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원입니다.
DECLARE_MESSAGE_MAP()
public:
CString m_Equip;
CString m_EquipSize;
CString m_InvenSize;
CString m_Inven;
afx_msg void OnBnClickedDbLoad();
afx_msg void OnBnClickedFileSave();
afx_msg void OnBnClickedFileLoad();
afx_msg void OnBnClickedDbSave();
afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
};

View File

@@ -0,0 +1,394 @@
#include "charlist.h"
char g_CharInfoField[25][20] =
{
"CID", "Name", "Sex", "Hair", "Face",
"Nationality", "Class", "Fame", "Mileage", "Guild",
"Party", "Level", "Gold", "IP", "STR",
"DEX", "CON", "INT", "WIS", "HP",
"MP", "EXP"
};
char g_Sex[2][7] = { "Male", "Female" };
CCharList::CCharList()
{
}
CCharList::~CCharList()
{
}
BEGIN_MESSAGE_MAP(CCharList, CListCtrl)
//{{AFX_MSG_MAP(CUserList)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
ON_NOTIFY_REFLECT(LVN_ENDLABELEDIT, OnEndLableEdit)
ON_WM_LBUTTONDBLCLK()
ON_WM_HSCROLL()
ON_WM_VSCROLL()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CCharList::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
CListViewControl::OnCustomDraw(pNMHDR, pResult);
}
void CCharList::OnEndLableEdit(NMHDR* pNMHDR, LRESULT* pResult)
{
CListViewControl::OnEndLableEdit(pNMHDR, pResult);
}
void CCharList::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CListViewControl::OnLButtonDblClk(nFlags, point);
}
void CCharList::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
CListViewControl::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CCharList::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
CListViewControl::OnVScroll(nSBCode, nPos, pScrollBar);
}
//Interface////////////////////////////////////////////////////////////////////////////////////
//
// SetColumn [ public ]
// - 테이블 컬럼 세팅
//
// Parameter :
// 1st : 컬럼 정보
//
// Return:
// 성공시 true
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool CCharList::SetColumn(void)
{
DWORD ExStyle = LVS_EX_FLATSB | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, ExStyle);
DWORD Style = GetWindowLong(m_hWnd, GWL_STYLE);
Style |= LVS_EDITLABELS;
if (!SetWindowLong(m_hWnd, GWL_STYLE, Style))
return false;
CStringList StringList;
// 캐릭터 아이디
SetColumnType(0, CT_NORMAL);
InsertColumn(0, g_CharInfoField[0], LVCFMT_CENTER, 4 * 20 + 5);
// 이름
SetColumnType(1, CT_NORMAL);
InsertColumn(1, g_CharInfoField[1], LVCFMT_CENTER, 130 );
// 성별
SetColumnType(2, CT_COMBO);
StringList.AddTail(g_Sex[0]);
StringList.AddTail(g_Sex[1]);
SetColumnStringList(2, StringList);
InsertColumn(2, g_CharInfoField[2], LVCFMT_CENTER, 5 * 10);
// 머리
SetColumnType(3, CT_EDIT);
InsertColumn(3, g_CharInfoField[3], LVCFMT_CENTER, 4 * 10);
// 얼굴
SetColumnType(4, CT_EDIT);
InsertColumn(4, g_CharInfoField[4], LVCFMT_CENTER, 4 * 10);
// 종족
SetColumnType(5, CT_EDIT);
InsertColumn(5, g_CharInfoField[5], LVCFMT_CENTER, 4 * 10);
// 클래스
SetColumnType(6, CT_EDIT);
InsertColumn(6, g_CharInfoField[6], LVCFMT_CENTER, 6 * 10);
// 공헌도
SetColumnType(7, CT_EDIT);
InsertColumn(7, g_CharInfoField[7], LVCFMT_CENTER, 6 * 10);
// 명성
SetColumnType(8, CT_EDIT);
InsertColumn(8, g_CharInfoField[8], LVCFMT_CENTER, 4 * 10);
// 길드
SetColumnType(9, CT_EDIT);
InsertColumn(9, g_CharInfoField[9], LVCFMT_CENTER, 4 * 10);
// 파티
SetColumnType(10, CT_EDIT);
InsertColumn(10, g_CharInfoField[10], LVCFMT_CENTER, 4 * 10);
// 레벨
SetColumnType(11, CT_EDIT);
InsertColumn(11, g_CharInfoField[11], LVCFMT_CENTER, 4 * 10);
// 돈
SetColumnType(12, CT_EDIT);
InsertColumn(12, g_CharInfoField[12], LVCFMT_CENTER, 8 * 10);
// IP
SetColumnType(13, CT_EDIT);
InsertColumn(13, g_CharInfoField[13], LVCFMT_CENTER, 4 * 10);
// STR
SetColumnType(14, CT_EDIT);
InsertColumn(14, g_CharInfoField[14], LVCFMT_CENTER, 4 * 10);
// DEX
SetColumnType(15, CT_EDIT);
InsertColumn(15, g_CharInfoField[15], LVCFMT_CENTER, 4 * 10);
// CON
SetColumnType(16, CT_EDIT);
InsertColumn(16, g_CharInfoField[16], LVCFMT_CENTER, 4 * 10);
// INT
SetColumnType(17, CT_EDIT);
InsertColumn(17, g_CharInfoField[17], LVCFMT_CENTER, 4 * 10);
// WIS
SetColumnType(18, CT_EDIT);
InsertColumn(18, g_CharInfoField[18], LVCFMT_CENTER, 4 * 10);
// HP
SetColumnType(19, CT_EDIT);
InsertColumn(19, g_CharInfoField[19], LVCFMT_CENTER, 4 * 10);
// MP
SetColumnType(20, CT_EDIT);
InsertColumn(20, g_CharInfoField[20], LVCFMT_CENTER, 4 * 10);
// EXP
SetColumnType(21, CT_EDIT);
InsertColumn(21, g_CharInfoField[21], LVCFMT_CENTER, 6 * 10);
return true;
}
//Interface////////////////////////////////////////////////////////////////////////////////////
//
// AddUserRow [ public ]
// - 줄 추가
//
// Parameter :
// 1st : 컬럼 정보
//
// Return:
// 성공시 true
//
///////////////////////////////////////////////////////////////////////////////////////////////
bool CCharList::AddCharRow(LPCHAR_INFOST CharInfo_In)
{
// TODO : 컴파일 에러가 나서 주석 처리해둡니다. 필요하신 분이 수정해주세요. (2005-01-26 by 로딘)
/*
CString strItem;
int Index;
Index = GetItemCount();
// 캐릭터 아이디
strItem.Format("%d", CharInfo_In->UID);
InsertItem(Index, strItem);
// 이름
strItem.Format("%s", CharInfo_In->Name);
SetItemText(Index, 1, strItem);
// 성별
strItem.Format("%s", g_Sex[CharInfo_In->Sex - 1]);
SetItemText(Index, 2, strItem);
// 머리
strItem.Format("%d", CharInfo_In->Hair);
SetItemText(Index, 3, strItem);
// 얼굴
strItem.Format("%d", CharInfo_In->Face);
SetItemText(Index, 4, strItem);
// 종족
strItem.Format("%d", CharInfo_In->Race);
SetItemText(Index, 5, strItem);
// 클래스
strItem.Format("%d", CharInfo_In->Class);
SetItemText(Index, 6, strItem);
// 명성
strItem.Format("%d", CharInfo_In->Fame);
SetItemText(Index, 7, strItem);
// 마일리지
strItem.Format("%d", CharInfo_In->Mileage);
SetItemText(Index, 8, strItem);
// 길드
strItem.Format("%d", CharInfo_In->Guild);
SetItemText(Index, 9, strItem);
// 파티
strItem.Format("%d", CharInfo_In->Party);
SetItemText(Index, 10, strItem);
// 레벨
strItem.Format("%d", CharInfo_In->Level);
SetItemText(Index, 11, strItem);
// 돈
strItem.Format("%d", CharInfo_In->Gold);
SetItemText(Index, 12, strItem);
// IP
strItem.Format("%d", CharInfo_In->IP);
SetItemText(Index, 13, strItem);
// STR
strItem.Format("%d", CharInfo_In->STR);
SetItemText(Index, 14, strItem);
// DEX
strItem.Format("%d", CharInfo_In->DEX);
SetItemText(Index, 15, strItem);
// CON
strItem.Format("%d", CharInfo_In->CON);
SetItemText(Index, 16, strItem);
// INT
strItem.Format("%d", CharInfo_In->INT);
SetItemText(Index, 17, strItem);
// WIS
strItem.Format("%d", CharInfo_In->WIS);
SetItemText(Index, 18, strItem);
// HP
strItem.Format("%d", CharInfo_In->HP);
SetItemText(Index, 19, strItem);
// MP
strItem.Format("%d", CharInfo_In->MP);
SetItemText(Index, 20, strItem);
// EXP
strItem.Format("%d", CharInfo_In->Exp);
SetItemText(Index, 21, strItem);
*/
return true;
}
bool CCharList::GetCharRow(unsigned long Item_In, LPCHAR_INFOST CharInfo_Out)
{
// TODO : 컴파일 에러가 나서 주석 처리해둡니다. 필요하신 분이 수정해주세요. (2005-01-26 by 로딘)
/*
int Counter = 0;
char strItemText[256];
// 캐릭터 아이디
GetItemText(Item_In, 0, strItemText, 256);
CharInfo_Out->UID = atoi(strItemText);
// 이름
GetItemText(Item_In, 1, strItemText, 256);
strncpy(CharInfo_Out->Name, strItemText, 16);
// 성별
GetItemText(Item_In, 2, strItemText, 256);
if(!strcmp(strItemText, g_Sex[0]))
CharInfo_Out->Sex = 1;
else
CharInfo_Out->Sex = 2;
// 머리
GetItemText(Item_In, 3, strItemText, 256);
CharInfo_Out->Hair = atoi(strItemText);
// 얼굴
GetItemText(Item_In, 4, strItemText, 256);
CharInfo_Out->Face = atoi(strItemText);
// 종족
GetItemText(Item_In, 5, strItemText, 256);
CharInfo_Out->Race = atoi(strItemText);
// 클래스
GetItemText(Item_In, 6, strItemText, 256);
CharInfo_Out->Class = atoi(strItemText);
// 명성
GetItemText(Item_In, 7, strItemText, 256);
CharInfo_Out->Fame = atoi(strItemText);
// 마일리지
GetItemText(Item_In, 8, strItemText, 256);
CharInfo_Out->Mileage = atoi(strItemText);
// 길드
GetItemText(Item_In, 9, strItemText, 256);
CharInfo_Out->Guild = atoi(strItemText);
// 파티
GetItemText(Item_In, 10, strItemText, 256);
CharInfo_Out->Party = atoi(strItemText);
// 레벨
GetItemText(Item_In, 11, strItemText, 256);
CharInfo_Out->Level = atoi(strItemText);
// 돈
GetItemText(Item_In, 12, strItemText, 256);
CharInfo_Out->Gold = atoi(strItemText);
// IP
GetItemText(Item_In, 13, strItemText, 256);
CharInfo_Out->IP = atoi(strItemText);
// STR
GetItemText(Item_In, 14, strItemText, 256);
CharInfo_Out->STR = atoi(strItemText);
// DEX
GetItemText(Item_In, 15, strItemText, 256);
CharInfo_Out->DEX = atoi(strItemText);
// CON
GetItemText(Item_In, 16, strItemText, 256);
CharInfo_Out->CON = atoi(strItemText);
// INT
GetItemText(Item_In, 17, strItemText, 256);
CharInfo_Out->INT = atoi(strItemText);
// WIS
GetItemText(Item_In, 18, strItemText, 256);
CharInfo_Out->WIS = atoi(strItemText);
// HP
GetItemText(Item_In, 19, strItemText, 256);
CharInfo_Out->HP = atoi(strItemText);
// MP
GetItemText(Item_In, 20, strItemText, 256);
CharInfo_Out->MP = atoi(strItemText);
// EXP
GetItemText(Item_In, 21, strItemText, 256);
CharInfo_Out->Exp = atoi(strItemText);
*/
return true;
}

View File

@@ -0,0 +1,42 @@
#pragma once
#include "./controlex/listviewcontrol.h"
#include "GameDBTool.h"
class CCharList :
public CListViewControl
{
// Construction
public:
CCharList();
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CUserList)
afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnEndLableEdit(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CCharList();
bool SetColumn(void);
bool AddCharRow(LPCHAR_INFOST CharInfo_In);
bool GetCharRow(unsigned long Item_In, LPCHAR_INFOST CharInfo_Out);
// Generated message map functions
protected:
//{{AFX_MSG(CUserList)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

Some files were not shown because too many files have changed in this diff Show More