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:
73
Server/ToolProject/ItemViewer/ItemViewer.cpp
Normal file
73
Server/ToolProject/ItemViewer/ItemViewer.cpp
Normal file
@@ -0,0 +1,73 @@
|
||||
// ItemViewer.cpp : 응용 프로그램에 대한 클래스 동작을 정의합니다.
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "ItemViewer.h"
|
||||
#include "ItemViewerDlg.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#endif
|
||||
|
||||
|
||||
// CItemViewerApp
|
||||
|
||||
BEGIN_MESSAGE_MAP(CItemViewerApp, CWinApp)
|
||||
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
// CItemViewerApp 생성
|
||||
|
||||
CItemViewerApp::CItemViewerApp()
|
||||
{
|
||||
// TODO: 여기에 생성 코드를 추가합니다.
|
||||
// InitInstance에 모든 중요한 초기화 작업을 배치합니다.
|
||||
}
|
||||
|
||||
|
||||
// 유일한 CItemViewerApp 개체입니다.
|
||||
|
||||
CItemViewerApp theApp;
|
||||
|
||||
|
||||
// CItemViewerApp 초기화
|
||||
|
||||
BOOL CItemViewerApp::InitInstance()
|
||||
{
|
||||
// 응용 프로그램 매니페스트가 ComCtl32.dll 버전 6 이상을 사용하여 비주얼 스타일을
|
||||
// 사용하도록 지정하는 경우, Windows XP 상에서 반드시 InitCommonControls()가 필요합니다.
|
||||
// InitCommonControls()를 사용하지 않으면 창을 만들 수 없습니다.
|
||||
InitCommonControls();
|
||||
|
||||
CWinApp::InitInstance();
|
||||
|
||||
AfxEnableControlContainer();
|
||||
|
||||
// 표준 초기화
|
||||
// 이들 기능을 사용하지 않고 최종 실행 파일의 크기를 줄이려면
|
||||
// 아래에서 필요 없는 특정 초기화 루틴을 제거해야 합니다.
|
||||
// 해당 설정이 저장된 레지스트리 키를 변경하십시오.
|
||||
// TODO: 이 문자열을 회사 또는 조직의 이름과 같은
|
||||
// 적절한 내용으로 수정해야 합니다.
|
||||
SetRegistryKey(_T("로컬 응용 프로그램 마법사에서 생성한 응용 프로그램"));
|
||||
|
||||
CItemViewerDlg dlg;
|
||||
m_pMainWnd = &dlg;
|
||||
|
||||
INT_PTR nResponse = dlg.DoModal();
|
||||
if (nResponse == IDOK)
|
||||
{
|
||||
// TODO: 여기에 대화 상자가 확인을 눌러 없어지는 경우 처리할
|
||||
// 코드를 배치합니다.
|
||||
}
|
||||
else if (nResponse == IDCANCEL)
|
||||
{
|
||||
// TODO: 여기에 대화 상자가 취소를 눌러 없어지는 경우 처리할
|
||||
// 코드를 배치합니다.
|
||||
}
|
||||
|
||||
// 대화 상자가 닫혔으므로 응용 프로그램의 메시지 펌프를 시작하지 않고
|
||||
// 응용 프로그램을 끝낼 수 있도록 FALSE를 반환합니다.
|
||||
return FALSE;
|
||||
}
|
||||
34
Server/ToolProject/ItemViewer/ItemViewer.h
Normal file
34
Server/ToolProject/ItemViewer/ItemViewer.h
Normal file
@@ -0,0 +1,34 @@
|
||||
// ItemViewer.h : PROJECT_NAME 응용 프로그램에 대한 주 헤더 파일입니다.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __AFXWIN_H__
|
||||
#error PCH에서 이 파일을 포함하기 전에 'stdafx.h'를 포함하십시오.
|
||||
#endif
|
||||
|
||||
#include "resource.h" // 주 기호
|
||||
|
||||
|
||||
#include <d3d9.h>
|
||||
|
||||
// CItemViewerApp:
|
||||
// 이 클래스의 구현에 대해서는 ItemViewer.cpp을 참조하십시오.
|
||||
//
|
||||
|
||||
class CItemViewerApp : public CWinApp
|
||||
{
|
||||
public:
|
||||
CItemViewerApp();
|
||||
|
||||
// 재정의
|
||||
public:
|
||||
virtual BOOL InitInstance();
|
||||
|
||||
// 구현
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
|
||||
};
|
||||
|
||||
extern CItemViewerApp theApp;
|
||||
214
Server/ToolProject/ItemViewer/ItemViewer.rc
Normal file
214
Server/ToolProject/ItemViewer/ItemViewer.rc
Normal file
@@ -0,0 +1,214 @@
|
||||
// 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\\ItemViewer.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\\ItemViewer.ico"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Dialog
|
||||
//
|
||||
|
||||
IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
|
||||
WS_SYSMENU
|
||||
CAPTION "ItemViewer 정보"
|
||||
FONT 9, "MS Shell Dlg", 0, 0, 0x1
|
||||
BEGIN
|
||||
ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20
|
||||
LTEXT "ItemViewer Version 1.0",IDC_STATIC,40,10,119,8,
|
||||
SS_NOPREFIX
|
||||
LTEXT "Copyright (C) 2004",IDC_STATIC,40,25,119,8
|
||||
DEFPUSHBUTTON "확인",IDOK,178,7,50,16,WS_GROUP
|
||||
END
|
||||
|
||||
IDD_ITEMVIEWER_DIALOG DIALOGEX 0, 0, 322, 289
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE |
|
||||
WS_CAPTION | WS_SYSMENU
|
||||
EXSTYLE WS_EX_APPWINDOW
|
||||
CAPTION "ItemViewer"
|
||||
FONT 9, "MS Shell Dlg", 0, 0, 0x1
|
||||
BEGIN
|
||||
PUSHBUTTON "Load ItemScript",IDC_LOAD_ITEMSCRIPT,256,8,58,14
|
||||
PUSHBUTTON "Set Sprite Folder",IDC_SET_SPRITE_FOLDER,256,24,58,14
|
||||
EDITTEXT IDC_FIND_NAME,71,190,107,14,ES_AUTOHSCROLL
|
||||
COMBOBOX IDC_FIND_TYPE,7,191,61,70,CBS_DROPDOWN | CBS_SORT |
|
||||
WS_VSCROLL | WS_TABSTOP
|
||||
PUSHBUTTON "Find!",IDC_FIND_ITEM,181,190,34,14
|
||||
PUSHBUTTON "Save All Item DDS to BMP",IDC_SAVE_ALL_ITEM,224,190,90,
|
||||
14
|
||||
EDITTEXT IDC_SPRITE_PATH,7,24,245,14,ES_AUTOHSCROLL | ES_READONLY
|
||||
EDITTEXT IDC_ITEMSCRIPT_PATH,7,8,245,14,ES_AUTOHSCROLL |
|
||||
ES_READONLY
|
||||
GROUPBOX "Item image",IDC_STATIC,7,45,134,141
|
||||
GROUPBOX "Item data",IDC_STATIC,145,45,170,141
|
||||
EDITTEXT IDC_ITEM_DATA,150,55,159,126,ES_MULTILINE | ES_READONLY |
|
||||
WS_VSCROLL | WS_HSCROLL
|
||||
LISTBOX IDC_VIEWER_LOG,7,207,308,75,LBS_NOINTEGRALHEIGHT |
|
||||
WS_VSCROLL | WS_TABSTOP
|
||||
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", "ItemViewer.exe"
|
||||
VALUE "LegalCopyright", "TODO: (c) <회사 이름>. All rights reserved."
|
||||
VALUE "OriginalFilename", "ItemViewer.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_ITEMVIEWER_DIALOG, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 315
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 282
|
||||
END
|
||||
END
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// String Table
|
||||
//
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_ABOUTBOX "ItemViewer 정보(&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\ItemViewer.rc2" // Microsoft Visual C++에서 편집되지 않은 리소스
|
||||
#include "afxres.rc" // 표준 구성 요소
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
||||
196
Server/ToolProject/ItemViewer/ItemViewer.vcproj
Normal file
196
Server/ToolProject/ItemViewer/ItemViewer.vcproj
Normal file
@@ -0,0 +1,196 @@
|
||||
<?xml version="1.0" encoding="ks_c_5601-1987"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.10"
|
||||
Name="ItemViewer"
|
||||
ProjectGUID="{07B56CC2-7F9B-448C-9215-4F6CDF55525A}"
|
||||
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/BaseLibrary;../../RylServerProject/RylGameLibrary;../../RylServerProject/RylServerLibrary"
|
||||
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="dxguid.lib d3dx9.lib d3d9.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="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/BaseLibrary;../../RylServerProject/RylGameLibrary;../../RylServerProject/RylServerLibrary"
|
||||
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"
|
||||
AdditionalDependencies="dxguid.lib d3dx9.lib d3d9.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="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=".\ItemViewer.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\ItemViewerDlg.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=".\ItemViewer.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\ItemViewerDlg.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\ItemViewer.ico">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\ItemViewer.rc">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\res\ItemViewer.rc2">
|
||||
</File>
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath=".\res\ItemViewer.manifest">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\ReadMe.txt">
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
<Global
|
||||
Name="RESOURCE_FILE"
|
||||
Value="ItemViewer.rc"/>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
627
Server/ToolProject/ItemViewer/ItemViewerDlg.cpp
Normal file
627
Server/ToolProject/ItemViewer/ItemViewerDlg.cpp
Normal file
@@ -0,0 +1,627 @@
|
||||
// ItemViewerDlg.cpp : 구현 파일
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "ItemViewer.h"
|
||||
#include "ItemViewerDlg.h"
|
||||
#include ".\itemviewerdlg.h"
|
||||
|
||||
#include <Item/ItemMgr.h>
|
||||
|
||||
#include <d3dx9.h>
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#endif
|
||||
|
||||
|
||||
// 응용 프로그램 정보에 사용되는 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()
|
||||
|
||||
|
||||
// CItemViewerDlg 대화 상자
|
||||
|
||||
|
||||
|
||||
CItemViewerDlg::CItemViewerDlg(CWnd* pParent /*=NULL*/)
|
||||
: CDialog(CItemViewerDlg::IDD, pParent)
|
||||
, m_szItemScriptName(_T(""))
|
||||
, m_szSpriteFolderName(_T(""))
|
||||
, m_lpD3D(0), m_lpd3dDevice(0)
|
||||
{
|
||||
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
|
||||
}
|
||||
|
||||
void CItemViewerDlg::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CDialog::DoDataExchange(pDX);
|
||||
DDX_Text(pDX, IDC_ITEMSCRIPT_PATH, m_szItemScriptName);
|
||||
DDX_Text(pDX, IDC_SPRITE_PATH, m_szSpriteFolderName);
|
||||
DDX_Control(pDX, IDC_VIEWER_LOG, m_messageDlg);
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CItemViewerDlg, CDialog)
|
||||
ON_WM_SYSCOMMAND()
|
||||
ON_WM_PAINT()
|
||||
ON_WM_QUERYDRAGICON()
|
||||
//}}AFX_MSG_MAP
|
||||
ON_BN_CLICKED(IDC_LOAD_ITEMSCRIPT, OnBnClickedLoadItemscript)
|
||||
ON_BN_CLICKED(IDC_SET_SPRITE_FOLDER, OnBnClickedSetSpriteFolder)
|
||||
ON_BN_CLICKED(IDC_SAVE_ALL_ITEM, OnBnClickedSaveAllItem)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
// CItemViewerDlg 메시지 처리기
|
||||
|
||||
BOOL CItemViewerDlg::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: 여기에 추가 초기화 작업을 추가합니다.
|
||||
|
||||
if(NULL == (m_lpD3D = Direct3DCreate9(D3D_SDK_VERSION)))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
D3DPRESENT_PARAMETERS d3dpp;
|
||||
ZeroMemory(&d3dpp, sizeof(d3dpp));
|
||||
d3dpp.Windowed = TRUE;
|
||||
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
|
||||
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
|
||||
|
||||
if(FAILED(m_lpD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, GetSafeHwnd(),
|
||||
D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &m_lpd3dDevice)))
|
||||
{
|
||||
if(m_lpD3D != 0)
|
||||
{
|
||||
m_lpD3D->Release();
|
||||
m_lpD3D = 0;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
char szFileName[MAX_PATH];
|
||||
char szDir[MAX_PATH];
|
||||
char szPath[MAX_PATH];
|
||||
char szName[MAX_PATH];
|
||||
char szExtension[MAX_PATH];
|
||||
|
||||
GetModuleFileName(NULL, szFileName, MAX_PATH);
|
||||
_splitpath(szFileName, szDir, szPath, szName, szExtension);
|
||||
_snprintf(m_szRegFileName, MAX_PATH - 1, "%s%sItemViewer.ini", szDir, szPath);
|
||||
_snprintf(m_szCurrentFolderName, MAX_PATH - 1, "%s%s", szDir, szPath);
|
||||
|
||||
char szItemScriptName[MAX_PATH];
|
||||
char szDDSFilePath[MAX_PATH];
|
||||
|
||||
GetPrivateProfileString("Ryl_ItemViewer", "LastItemScriptName", "",
|
||||
szItemScriptName, MAX_PATH, m_szRegFileName);
|
||||
|
||||
GetPrivateProfileString("Ryl_ItemViewer", "LastDDSFilePath", "",
|
||||
szDDSFilePath, MAX_PATH, m_szRegFileName);
|
||||
|
||||
m_szItemScriptName = szItemScriptName;
|
||||
m_szSpriteFolderName = szDDSFilePath;
|
||||
|
||||
int nFind = m_szItemScriptName.ReverseFind('.');
|
||||
if(0 < nFind)
|
||||
{
|
||||
bool bResult = false;
|
||||
|
||||
if(0 == strcmp(m_szItemScriptName.GetBuffer() + nFind + 1, "gsf"))
|
||||
{
|
||||
bResult = Item::CItemMgr::GetInstance().LoadItemProtoTypeBinary(m_szItemScriptName);
|
||||
}
|
||||
else if(0 == strcmp(m_szItemScriptName.GetBuffer() + nFind + 1, "txt"))
|
||||
{
|
||||
bResult = Item::CItemMgr::GetInstance().LoadItemProtoType(m_szItemScriptName);
|
||||
}
|
||||
|
||||
if(!bResult)
|
||||
{
|
||||
m_szItemScriptName = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
LoadSurfaces();
|
||||
}
|
||||
|
||||
m_messageDlg.SetTopIndex(
|
||||
m_messageDlg.AddString(bResult ? "ItemScript load success" : "ItemScript load failed."));
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
m_szItemScriptName.Empty();
|
||||
}
|
||||
|
||||
UpdateData(false);
|
||||
return TRUE; // 컨트롤에 대한 포커스를 설정하지 않을 경우 TRUE를 반환합니다.
|
||||
}
|
||||
|
||||
void CItemViewerDlg::OnSysCommand(UINT nID, LPARAM lParam)
|
||||
{
|
||||
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
|
||||
{
|
||||
CAboutDlg dlgAbout;
|
||||
dlgAbout.DoModal();
|
||||
}
|
||||
else
|
||||
{
|
||||
CDialog::OnSysCommand(nID, lParam);
|
||||
}
|
||||
}
|
||||
|
||||
// 대화 상자에 최소화 단추를 추가할 경우 아이콘을 그리려면
|
||||
// 아래 코드가 필요합니다. 문서/뷰 모델을 사용하는 MFC 응용 프로그램의 경우에는
|
||||
// 프레임워크에서 이 작업을 자동으로 수행합니다.
|
||||
|
||||
void CItemViewerDlg::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 CItemViewerDlg::OnQueryDragIcon()
|
||||
{
|
||||
return static_cast<HCURSOR>(m_hIcon);
|
||||
}
|
||||
|
||||
void CItemViewerDlg::OnOK()
|
||||
{
|
||||
// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
|
||||
|
||||
// CDialog::OnOK();
|
||||
}
|
||||
|
||||
void CItemViewerDlg::OnBnClickedLoadItemscript()
|
||||
{
|
||||
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
||||
|
||||
OPENFILENAME openFileName;
|
||||
|
||||
memset(&openFileName, 0, sizeof(OPENFILENAME));
|
||||
|
||||
char szFileName[MAX_PATH];
|
||||
char szFilePathName[MAX_PATH];
|
||||
|
||||
memset(szFileName, 0, sizeof(char) * MAX_PATH);
|
||||
memset(szFilePathName, 0, sizeof(char) * MAX_PATH);
|
||||
|
||||
openFileName.lStructSize = sizeof(OPENFILENAME);
|
||||
|
||||
openFileName.hwndOwner = GetSafeHwnd();
|
||||
openFileName.lpstrFilter = "ItemScript file\0*.gsf;*.txt";
|
||||
openFileName.nMaxFile = MAX_PATH;
|
||||
openFileName.nMaxFileTitle = MAX_PATH;
|
||||
openFileName.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_LONGNAMES | OFN_EXPLORER;
|
||||
|
||||
openFileName.lpstrFile = szFileName;
|
||||
openFileName.lpstrFileTitle = szFilePathName;
|
||||
|
||||
if(GetOpenFileName(&openFileName))
|
||||
{
|
||||
UpdateData(true);
|
||||
|
||||
m_szItemScriptName = szFileName;
|
||||
|
||||
// 아이템 스크립트를 로딩한다.
|
||||
int nFind = m_szItemScriptName.ReverseFind('.');
|
||||
if(0 < nFind)
|
||||
{
|
||||
bool bResult = false;
|
||||
|
||||
if(0 == strcmp(m_szItemScriptName.GetBuffer() + nFind + 1, "gsf"))
|
||||
{
|
||||
bResult = Item::CItemMgr::GetInstance().LoadItemProtoTypeBinary(m_szItemScriptName);
|
||||
}
|
||||
else if(0 == strcmp(m_szItemScriptName.GetBuffer() + nFind + 1, "txt"))
|
||||
{
|
||||
bResult = Item::CItemMgr::GetInstance().LoadItemProtoType(m_szItemScriptName);
|
||||
}
|
||||
|
||||
if(!bResult)
|
||||
{
|
||||
m_szItemScriptName = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
LoadSurfaces();
|
||||
}
|
||||
|
||||
m_messageDlg.SetTopIndex(m_messageDlg.AddString(
|
||||
bResult ? "ItemScript load success" : "ItemScript load failed."));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_szItemScriptName.Empty();
|
||||
}
|
||||
|
||||
WritePrivateProfileString("Ryl_ItemViewer", "LastItemScriptName", m_szItemScriptName, m_szRegFileName);
|
||||
UpdateData(false);
|
||||
}
|
||||
}
|
||||
|
||||
void CItemViewerDlg::OnBnClickedSetSpriteFolder()
|
||||
{
|
||||
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
||||
|
||||
OPENFILENAME openFileName;
|
||||
|
||||
memset(&openFileName, 0, sizeof(OPENFILENAME));
|
||||
|
||||
char szFileName[MAX_PATH];
|
||||
char szFilePathName[MAX_PATH];
|
||||
|
||||
memset(szFileName, 0, sizeof(char) * MAX_PATH);
|
||||
memset(szFilePathName, 0, sizeof(char) * MAX_PATH);
|
||||
|
||||
openFileName.lStructSize = sizeof(OPENFILENAME);
|
||||
|
||||
openFileName.hwndOwner = GetSafeHwnd();
|
||||
openFileName.lpstrFilter = "\0";
|
||||
openFileName.nMaxFile = MAX_PATH;
|
||||
openFileName.nMaxFileTitle = MAX_PATH;
|
||||
openFileName.Flags = OFN_PATHMUSTEXIST | OFN_LONGNAMES | OFN_EXPLORER;
|
||||
|
||||
openFileName.lpstrFile = szFileName;
|
||||
openFileName.lpstrFileTitle = szFilePathName;
|
||||
|
||||
if(GetOpenFileName(&openFileName))
|
||||
{
|
||||
UpdateData(true);
|
||||
|
||||
m_szSpriteFolderName = szFileName;
|
||||
int nFind = m_szSpriteFolderName.ReverseFind('\\');
|
||||
if(0 < nFind)
|
||||
{
|
||||
m_szSpriteFolderName.GetBuffer()[nFind + 1] = 0;
|
||||
LoadSurfaces();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_szSpriteFolderName.Empty();
|
||||
}
|
||||
|
||||
WritePrivateProfileString("Ryl_ItemViewer", "LastDDSFilePath", m_szSpriteFolderName, m_szRegFileName);
|
||||
UpdateData(false);
|
||||
}
|
||||
}
|
||||
|
||||
void CItemViewerDlg::PostNcDestroy()
|
||||
{
|
||||
// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
|
||||
ClearSurfaces();
|
||||
|
||||
if(m_lpd3dDevice != 0)
|
||||
{
|
||||
m_lpd3dDevice->Release();
|
||||
m_lpd3dDevice = 0;
|
||||
}
|
||||
|
||||
if(m_lpD3D != 0)
|
||||
{
|
||||
m_lpD3D->Release();
|
||||
m_lpD3D = 0;
|
||||
}
|
||||
|
||||
CDialog::PostNcDestroy();
|
||||
}
|
||||
|
||||
bool CItemViewerDlg::LoadSurfaces()
|
||||
{
|
||||
ClearSurfaces();
|
||||
|
||||
if(m_szItemScriptName.IsEmpty() || m_szSpriteFolderName.IsEmpty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
DWORD nBufferSize = 512 * 1024;
|
||||
char* szBuffer = new char[nBufferSize];
|
||||
|
||||
if(0 == szBuffer)
|
||||
{
|
||||
m_messageDlg.SetTopIndex(m_messageDlg.AddString("Insufficient memory"));
|
||||
return false;
|
||||
}
|
||||
|
||||
CString szDDSFileName;
|
||||
CString szErrorMessage;
|
||||
|
||||
std::string spriteName;
|
||||
|
||||
|
||||
for(unsigned short usID = 0; usID < USHRT_MAX; ++usID)
|
||||
{
|
||||
const Item::ItemInfo* lpItemInfo = Item::CItemMgr::GetInstance().GetItemInfo(usID);
|
||||
if(0 != lpItemInfo)
|
||||
{
|
||||
spriteName.assign(lpItemInfo->m_SpriteData.m_szSpriteName);
|
||||
szDDSFileName.Format("%s%s.dds", m_szSpriteFolderName, lpItemInfo->m_SpriteData.m_szSpriteName);
|
||||
|
||||
LPDIRECT3DSURFACE9 lpItemSprite = 0;
|
||||
|
||||
SurfaceMap::iterator pos = m_surfaceMap.find(spriteName);
|
||||
if(pos == m_surfaceMap.end())
|
||||
{
|
||||
// Surface생성 및 Load
|
||||
const char* szErrorReason = 0;
|
||||
|
||||
// 파일 열기
|
||||
HANDLE hFile = CreateFile(szDDSFileName, GENERIC_READ, FILE_SHARE_READ, 0,
|
||||
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
|
||||
|
||||
if(INVALID_HANDLE_VALUE != hFile)
|
||||
{
|
||||
DWORD dwHighSize = 0;
|
||||
DWORD dwLowSize = GetFileSize(hFile, &dwHighSize);
|
||||
|
||||
if(0 == dwHighSize)
|
||||
{
|
||||
if(nBufferSize < dwLowSize)
|
||||
{
|
||||
nBufferSize = dwLowSize;
|
||||
delete [] szBuffer;
|
||||
|
||||
szBuffer = new char[nBufferSize];
|
||||
}
|
||||
|
||||
if(0 != szBuffer)
|
||||
{
|
||||
DWORD dwTotalReadSize = 0;
|
||||
|
||||
do
|
||||
{
|
||||
DWORD dwReadSize = 0;
|
||||
|
||||
if(ReadFile(hFile, szBuffer,
|
||||
dwLowSize - dwTotalReadSize, &dwReadSize, 0))
|
||||
{
|
||||
dwTotalReadSize += dwReadSize;
|
||||
}
|
||||
|
||||
} while(dwTotalReadSize < dwLowSize);
|
||||
|
||||
szBuffer[0] = 'D';
|
||||
szBuffer[1] = 'D';
|
||||
szBuffer[2] = 'S';
|
||||
szBuffer[3] = ' ';
|
||||
|
||||
D3DXIMAGE_INFO imageInfo;
|
||||
memset(&imageInfo, 0, sizeof(D3DXIMAGE_INFO));
|
||||
|
||||
HRESULT hr = D3DXGetImageInfoFromFileInMemory(szBuffer, dwLowSize, &imageInfo);
|
||||
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
hr = m_lpd3dDevice->CreateOffscreenPlainSurface(imageInfo.Width, imageInfo.Height,
|
||||
D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &lpItemSprite, NULL);
|
||||
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
RECT srcRect;
|
||||
SetRect(&srcRect, 0, 0, imageInfo.Width, imageInfo.Height);
|
||||
|
||||
// 파일 로드가 끝났수.
|
||||
hr = D3DXLoadSurfaceFromFileInMemory(lpItemSprite,
|
||||
NULL, NULL, szBuffer, dwLowSize, &srcRect,
|
||||
D3DX_DEFAULT, 0xFF000000, NULL);
|
||||
|
||||
if(SUCCEEDED(hr))
|
||||
{
|
||||
m_surfaceMap.insert(std::make_pair(spriteName, lpItemSprite));
|
||||
}
|
||||
else
|
||||
{
|
||||
lpItemSprite->Release();
|
||||
lpItemSprite = 0;
|
||||
|
||||
szErrorReason = "LoadSurface failed";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
szErrorReason = "Create offscreenBuffer failed";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
szErrorReason = "Get imageInfo failed";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
szErrorReason = "Buffer is NULL";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
szErrorReason = "Too large sprite file";
|
||||
}
|
||||
|
||||
CloseHandle(hFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
szErrorReason = "File open failed";
|
||||
}
|
||||
|
||||
if(0 != szErrorReason)
|
||||
{
|
||||
szErrorMessage.Format("%s : %s.dds (%6d : %s)",
|
||||
szErrorReason, lpItemInfo->m_SpriteData.m_szSpriteName,
|
||||
usID, lpItemInfo->m_SpriteData.m_szName);
|
||||
|
||||
m_messageDlg.SetTopIndex(m_messageDlg.AddString(szErrorMessage));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delete [] szBuffer;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void CItemViewerDlg::ClearSurfaces()
|
||||
{
|
||||
SurfaceMap::iterator pos = m_surfaceMap.begin();
|
||||
SurfaceMap::iterator end = m_surfaceMap.end();
|
||||
|
||||
for(; pos != end; ++pos)
|
||||
{
|
||||
pos->second->Release();
|
||||
}
|
||||
|
||||
m_surfaceMap.clear();
|
||||
}
|
||||
|
||||
|
||||
void CItemViewerDlg::OnBnClickedSaveAllItem()
|
||||
{
|
||||
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
||||
|
||||
if(0 == m_lpd3dDevice)
|
||||
{
|
||||
m_messageDlg.SetTopIndex(m_messageDlg.AddString("Invalid D3D Device"));
|
||||
return;
|
||||
}
|
||||
|
||||
// 폴더 생성
|
||||
|
||||
CString szCurrentFolderName;
|
||||
szCurrentFolderName.Format("%sSavedItems\\", m_szCurrentFolderName);
|
||||
|
||||
if (INVALID_FILE_ATTRIBUTES == GetFileAttributes(szCurrentFolderName))
|
||||
{
|
||||
if (!CreateDirectory(szCurrentFolderName, 0))
|
||||
{
|
||||
m_messageDlg.SetTopIndex(m_messageDlg.AddString("Folder create failed"));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
CString szBMPFileName;
|
||||
CString szDDSFileName;
|
||||
CString szErrorMessage;
|
||||
|
||||
std::string spriteName;
|
||||
|
||||
for(unsigned short usID = 0; usID < USHRT_MAX; ++usID)
|
||||
{
|
||||
const Item::ItemInfo* lpItemInfo = Item::CItemMgr::GetInstance().GetItemInfo(usID);
|
||||
if(0 != lpItemInfo)
|
||||
{
|
||||
spriteName.assign(lpItemInfo->m_SpriteData.m_szSpriteName);
|
||||
szBMPFileName.Format("%s%6d - %s.bmp", szCurrentFolderName, usID, lpItemInfo->m_SpriteData.m_szName);
|
||||
|
||||
SurfaceMap::iterator pos = m_surfaceMap.find(spriteName);
|
||||
if(pos != m_surfaceMap.end())
|
||||
{
|
||||
LPDIRECT3DSURFACE9 lpItemSprite = pos->second;
|
||||
|
||||
if(0 != lpItemSprite)
|
||||
{
|
||||
RECT srcRect;
|
||||
SetRect(&srcRect,
|
||||
lpItemInfo->m_SpriteData.m_nSpriteMinX,
|
||||
lpItemInfo->m_SpriteData.m_nSpriteMinY,
|
||||
lpItemInfo->m_SpriteData.m_nSpriteMaxX,
|
||||
lpItemInfo->m_SpriteData.m_nSpriteMaxY);
|
||||
|
||||
HRESULT hr = D3DXSaveSurfaceToFile(szBMPFileName, D3DXIFF_BMP, lpItemSprite, 0, &srcRect);
|
||||
|
||||
if(FAILED(hr))
|
||||
{
|
||||
szErrorMessage.Format("Save sprite failed : failed to save %6d:%s",
|
||||
usID, lpItemInfo->m_SpriteData.m_szName);
|
||||
m_messageDlg.SetTopIndex(m_messageDlg.AddString(szErrorMessage));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
szErrorMessage.Format("Save sprite failed : failed to find %6d:%s",
|
||||
usID, lpItemInfo->m_SpriteData.m_szName);
|
||||
|
||||
m_messageDlg.SetTopIndex(m_messageDlg.AddString(szErrorMessage));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_messageDlg.SetTopIndex(m_messageDlg.AddString("Save sprite complete."));
|
||||
}
|
||||
62
Server/ToolProject/ItemViewer/ItemViewerDlg.h
Normal file
62
Server/ToolProject/ItemViewer/ItemViewerDlg.h
Normal file
@@ -0,0 +1,62 @@
|
||||
// ItemViewerDlg.h : 헤더 파일
|
||||
//
|
||||
|
||||
#pragma once
|
||||
#include "afxwin.h"
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
// CItemViewerDlg 대화 상자
|
||||
class CItemViewerDlg : public CDialog
|
||||
{
|
||||
// 생성
|
||||
public:
|
||||
CItemViewerDlg(CWnd* pParent = NULL); // 표준 생성자
|
||||
|
||||
// 대화 상자 데이터
|
||||
enum { IDD = IDD_ITEMVIEWER_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()
|
||||
|
||||
virtual void OnOK();
|
||||
public:
|
||||
afx_msg void OnBnClickedLoadItemscript();
|
||||
afx_msg void OnBnClickedSetSpriteFolder();
|
||||
|
||||
private:
|
||||
|
||||
bool LoadSurfaces();
|
||||
void ClearSurfaces();
|
||||
|
||||
typedef std::map<std::string, LPDIRECT3DSURFACE9> SurfaceMap;
|
||||
SurfaceMap m_surfaceMap;
|
||||
|
||||
IDirect3D9* m_lpD3D;
|
||||
IDirect3DDevice9* m_lpd3dDevice;
|
||||
|
||||
CString m_szItemScriptName;
|
||||
CString m_szSpriteFolderName;
|
||||
CListBox m_messageDlg;
|
||||
|
||||
char m_szRegFileName[MAX_PATH];
|
||||
char m_szCurrentFolderName[MAX_PATH];
|
||||
|
||||
protected:
|
||||
virtual void PostNcDestroy();
|
||||
public:
|
||||
afx_msg void OnBnClickedSaveAllItem();
|
||||
};
|
||||
77
Server/ToolProject/ItemViewer/ReadMe.txt
Normal file
77
Server/ToolProject/ItemViewer/ReadMe.txt
Normal file
@@ -0,0 +1,77 @@
|
||||
================================================================================
|
||||
MFC 라이브러리 : ItemViewer 프로젝트 개요
|
||||
================================================================================
|
||||
|
||||
응용 프로그램 마법사를 사용하여 ItemViewer 응용 프로그램을 만듭니다. 이 응용
|
||||
프로그램에서는 기본적인 MFC 사용 밥법과 응용 프로그램 작성 방법을 설명합니다.
|
||||
|
||||
이 파일에는 ItemViewer 응용 프로그램을 구성하는 각 파일에 대한 개요가 포함되어
|
||||
있습니다.
|
||||
|
||||
ItemViewer.vcproj
|
||||
응용 프로그램 마법사를 사용하여 생성된 VC++ 프로젝트의 주 프로젝트 파일입니다.
|
||||
이 파일에는 파일을 생성한 Visual C++ 버전 정보 및 응용 프로그램 마법사에서 선택한 플랫폼,
|
||||
구성, 프로젝트 기능 등의 정보가 포함됩니다.
|
||||
|
||||
ItemViewer.h
|
||||
응용 프로그램의 주 헤더 파일입니다. 이 파일에는 다른 프로젝트에 관련된 Resource.h와 같은
|
||||
특정 헤더가 포함되며 CItemViewerApp 응용 프로그램 클래스가 선언됩니다.
|
||||
|
||||
ItemViewer.cpp
|
||||
CItemViewerApp 응용 프로그램 클래스를 포함하는 주 응용 프로그램의 소스 파일입니다.
|
||||
|
||||
ItemViewer.rc
|
||||
프로그램에서 사용하는 모든 Microsoft Windows 리소스가 나열된 파일입니다.
|
||||
이 파일에는 RES 하위 디렉터리에 저장된 아이콘, 비트맵 및 커서가 포함되며
|
||||
Microsoft Visual C++에서 직접 이 파일을 편집할 수도 있습니다. 사용자의 프로젝트
|
||||
리소스는 1042에 들어 있습니다.
|
||||
|
||||
res\ItemViewer.ico
|
||||
응용 프로그램의 아이콘으로 사용되는 아이콘 파일입니다.
|
||||
이 아이콘은 주 리소스 파일인 ItemViewer.rc에 포함됩니다.
|
||||
|
||||
res\ItemViewer.rc2
|
||||
Microsoft Visual C++에서 편집할 수 없는 리소스가 포함된 파일입니다.
|
||||
리소스 편집기에서 편집할 수 없는 모든 리소스는 이 파일에 포함되어 있습니다.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
응용 프로그램 마법사에서는 단일 대화 상자 클래스를 만듭니다.
|
||||
ItemViewerDlg.h, ItemViewerDlg.cpp - 대화 상자
|
||||
CItemViewerDlg 클래스를 포함하는 파일입니다. 이 클래스에는 응용 프로그램의
|
||||
주 대화 상자에 대한 동작이 정의됩니다. 대화 상자의 템플릿은 ItemViewer.rc에
|
||||
있으며 Microsoft Visual C++에서 편집할 수 있습니다.
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
기타 기능
|
||||
|
||||
ActiveX 컨트롤
|
||||
응용 프로그램에서 ActiveX 컨트롤을 사용할 수 있습니다.
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
기타 표준 파일
|
||||
|
||||
StdAfx.h, StdAfx.cpp
|
||||
미리 컴파일된 헤더 파일(PCH) ItemViewer.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 요소가 운영 체제의 언어로
|
||||
남아 있게 됩니다.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
BIN
Server/ToolProject/ItemViewer/res/ItemViewer.ico
Normal file
BIN
Server/ToolProject/ItemViewer/res/ItemViewer.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
22
Server/ToolProject/ItemViewer/res/ItemViewer.manifest
Normal file
22
Server/ToolProject/ItemViewer/res/ItemViewer.manifest
Normal 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.ItemViewer"
|
||||
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>
|
||||
13
Server/ToolProject/ItemViewer/res/ItemViewer.rc2
Normal file
13
Server/ToolProject/ItemViewer/res/ItemViewer.rc2
Normal file
@@ -0,0 +1,13 @@
|
||||
//
|
||||
// ItemViewer.RC2 - resources Microsoft Visual C++에서 직접 편집하지 않는 리소스
|
||||
//
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#error 이 파일은 Microsoft Visual C++에서 편집할 수 없습니다.
|
||||
#endif //APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// 여기에 수동으로 편집한 리소스를 추가합니다.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
31
Server/ToolProject/ItemViewer/resource.h
Normal file
31
Server/ToolProject/ItemViewer/resource.h
Normal file
@@ -0,0 +1,31 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by ItemViewer.rc
|
||||
//
|
||||
#define IDM_ABOUTBOX 0x0010
|
||||
#define IDD_ABOUTBOX 100
|
||||
#define IDS_ABOUTBOX 101
|
||||
#define IDD_ITEMVIEWER_DIALOG 102
|
||||
#define IDR_MAINFRAME 128
|
||||
#define IDC_LOAD_ITEMSCRIPT 1000
|
||||
#define IDC_VIEWER_LOG 1001
|
||||
#define IDC_SET_SPRITE_FOLDER 1002
|
||||
#define IDC_FIND_NAME 1003
|
||||
#define IDC_FIND_TYPE 1004
|
||||
#define IDC_FIND_ITEM 1005
|
||||
#define IDC_SAVE_ALL_ITEM 1006
|
||||
#define IDC_SPRITE_PATH 1007
|
||||
#define IDC_ITEMSCRIPT_PATH 1008
|
||||
#define IDC_ITEM_DATA 1009
|
||||
#define IDC_LIST1 1010
|
||||
|
||||
// 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 1011
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
7
Server/ToolProject/ItemViewer/stdafx.cpp
Normal file
7
Server/ToolProject/ItemViewer/stdafx.cpp
Normal file
@@ -0,0 +1,7 @@
|
||||
// stdafx.cpp : 표준 포함 파일을 포함하는 소스 파일입니다.
|
||||
// ItemViewer.pch는 미리 컴파일된 헤더가 됩니다.
|
||||
// stdafx.obj는 미리 컴파일된 형식 정보를 포함합니다.
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
|
||||
42
Server/ToolProject/ItemViewer/stdafx.h
Normal file
42
Server/ToolProject/ItemViewer/stdafx.h
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user