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:
352
Server/DBProcess/QuestChange/QuestChange.cpp
Normal file
352
Server/DBProcess/QuestChange/QuestChange.cpp
Normal file
@@ -0,0 +1,352 @@
|
||||
// QuestChange.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
|
||||
//
|
||||
|
||||
/*
|
||||
스크립트 구조
|
||||
|
||||
REMOVE 퀘스트ID
|
||||
CHANGE 퀘스트ID 퀘스트ID
|
||||
|
||||
퀘스트ID 는 10진수 혹은 0x로 시작하는 16진수이다.
|
||||
주석은 C스타일의 주석 // 만 지원한다
|
||||
*/
|
||||
|
||||
#pragma warning(disable:4800)
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
|
||||
#include <RylDBLibrary/RylDBLibrary.h>
|
||||
#include <RylDBLibrary/RylDBCharCommand.h>
|
||||
|
||||
#include <Network/Packet/PacketStruct/CharQuestPacket.h>
|
||||
#include <Log/ServerLog.h>
|
||||
|
||||
#include <boost/pool/pool_alloc.hpp>
|
||||
#include <Creature/CreatureStructure.h>
|
||||
#include <Creature/Character/CharacterClass.h>
|
||||
|
||||
// Quest Script Command
|
||||
|
||||
class CProcessQuest : public IDBCharQuestProcess
|
||||
{
|
||||
public:
|
||||
|
||||
bool LoadScript(const char* szScriptName);
|
||||
|
||||
private:
|
||||
|
||||
typedef std::pair<unsigned short, unsigned short> QuestChangePair;
|
||||
|
||||
typedef std::vector<unsigned short> QuestRemoveVector;
|
||||
typedef std::vector<QuestChangePair> QuestChangeVector;
|
||||
|
||||
virtual ConvertResult operator()(RylDBCommand::CCharQuest& charQuest_InOut);
|
||||
|
||||
QuestRemoveVector m_QuestRemoveVector;
|
||||
QuestChangeVector m_QuestChangeVector;
|
||||
};
|
||||
|
||||
template<class Data, class Pair>
|
||||
struct match_first
|
||||
{
|
||||
bool operator () (const Data& lhs, const Data& rhs) { return lhs < rhs; }
|
||||
bool operator () (const Pair& lhs, const Pair& rhs) { return lhs.first < rhs.first; }
|
||||
bool operator () (const Data& lhs, const Pair& rhs) { return lhs < rhs.first; }
|
||||
bool operator () (const Pair& lhs, const Data& rhs) { return lhs.first < rhs; }
|
||||
};
|
||||
|
||||
void PrintUsage()
|
||||
{
|
||||
printf("usage : QuestChange.exe DBAddress DBName DBAccount DBPassword QuestChangeScriptName \n");
|
||||
}
|
||||
|
||||
unsigned short ConvertStringToQuestID(const char* szQuestID)
|
||||
{
|
||||
unsigned short wQuestID = 0;
|
||||
|
||||
if (0 != szQuestID)
|
||||
{
|
||||
const char* szHexHeader = "0X";
|
||||
size_t nHexHeaderLen = strlen(szHexHeader);
|
||||
|
||||
char* szStopPtr = 0;
|
||||
int nBase = (0 == strncmp(szQuestID, szHexHeader, nHexHeaderLen)) ? 16 : 10;
|
||||
wQuestID = static_cast<unsigned short>(strtoul(szQuestID, &szStopPtr, nBase));
|
||||
}
|
||||
|
||||
return wQuestID;
|
||||
}
|
||||
|
||||
int _tmain(int argc, _TCHAR* argv[])
|
||||
{
|
||||
if(6 != argc)
|
||||
{
|
||||
PrintUsage();
|
||||
return -1;
|
||||
}
|
||||
|
||||
const char* szProcessQuestScript = argv[5];
|
||||
|
||||
CProcessQuest processQuest;
|
||||
|
||||
if(FAILED(processQuest.LoadScript(szProcessQuestScript)))
|
||||
{
|
||||
printf("%s 스크립트 로드 실패", szProcessQuestScript);
|
||||
return -1;
|
||||
}
|
||||
|
||||
CoInitialize(0);
|
||||
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
ATL::CDataSource dataSource;
|
||||
ATL::CSession Session;
|
||||
|
||||
#define LOG_CONVERT0(str) { ERRLOG0(g_Log, (str)); printf(str "\n"); }
|
||||
#define LOG_CONVERT1(str, arg1) { ERRLOG1(g_Log, (str), (arg1)); printf(str "\n", (arg1)); }
|
||||
#define LOG_CONVERT2(str, arg1, arg2) { ERRLOG2(g_Log, (str), (arg1), (arg2)); printf(str "\n", (arg1), (arg2)); }
|
||||
|
||||
if(FAILED(hr = CRylDBProcess::ConnectDB(dataSource, argv[1], argv[2], argv[3], argv[4])))
|
||||
{
|
||||
LOG_CONVERT1("Connect DB failed : hr:0x%08X", hr);
|
||||
}
|
||||
else if(FAILED(hr = Session.Open(dataSource)))
|
||||
{
|
||||
LOG_CONVERT1("Open session failed : hr:0x%08X", hr);
|
||||
}
|
||||
else
|
||||
{
|
||||
CRylDBProcess rylDBProcess(Session);
|
||||
CConsoleCounter consoleCounter(1000);
|
||||
|
||||
if (!rylDBProcess.CharQuest(processQuest, consoleCounter))
|
||||
{
|
||||
LOG_CONVERT1("CharQuest process failed : hr:0x%08X", hr);
|
||||
}
|
||||
}
|
||||
|
||||
INFLOG0(g_Log, "Remove Complete");
|
||||
|
||||
Session.Close();
|
||||
dataSource.Close();
|
||||
|
||||
CoUninitialize();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool CProcessQuest::LoadScript(const char* szScriptName)
|
||||
{
|
||||
bool bResult = true;
|
||||
|
||||
FILE* lpFile = fopen(szScriptName, "rt");
|
||||
|
||||
if (0 != lpFile)
|
||||
{
|
||||
const int MAX_BUFFER = 1024;
|
||||
char szBuffer[MAX_BUFFER];
|
||||
|
||||
const char* szDelimiter = "\r\n\t: ";
|
||||
|
||||
int nLine = 0;
|
||||
|
||||
const char* szComment = "//";
|
||||
size_t nCommentLen = strlen(szComment);
|
||||
|
||||
char* szStopPtr = 0;
|
||||
int nBase = 10;
|
||||
|
||||
while(fgets(szBuffer, MAX_BUFFER - 1, lpFile))
|
||||
{
|
||||
++nLine;
|
||||
|
||||
char* szCommand = strtok(szBuffer, szDelimiter);
|
||||
char* szQuestID = strtok(0, szDelimiter);
|
||||
char* szChangeID = strtok(0, szDelimiter);
|
||||
|
||||
if (0 != szCommand && 0 != szQuestID)
|
||||
{
|
||||
strupr(szCommand);
|
||||
strupr(szQuestID);
|
||||
|
||||
unsigned short wQuestID = ConvertStringToQuestID(szQuestID);
|
||||
|
||||
if (0 != wQuestID && 0 == strcmp(szCommand, "REMOVE"))
|
||||
{
|
||||
m_QuestRemoveVector.push_back(wQuestID);
|
||||
}
|
||||
else if (0 != szChangeID && 0 == strcmp(szCommand, "CHANGE"))
|
||||
{
|
||||
strupr(szChangeID);
|
||||
|
||||
unsigned short wChangeID = ConvertStringToQuestID(szChangeID);
|
||||
|
||||
if (0 != wChangeID)
|
||||
{
|
||||
m_QuestChangeVector.push_back(
|
||||
QuestChangePair(wQuestID, wChangeID));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
fclose(lpFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG_CONVERT1("파일 열기에 실패했습니다 : %s", szScriptName);
|
||||
bResult = false;
|
||||
}
|
||||
|
||||
std::sort(m_QuestRemoveVector.begin(), m_QuestRemoveVector.end());
|
||||
std::sort(m_QuestChangeVector.begin(), m_QuestChangeVector.end());
|
||||
|
||||
return bResult;
|
||||
}
|
||||
|
||||
ConvertResult CProcessQuest::operator() (RylDBCommand::CCharQuest& charQuest_InOut)
|
||||
{
|
||||
unsigned long dwCID = charQuest_InOut.GetCID();
|
||||
unsigned long dwTotalChangedCount = 0;
|
||||
|
||||
const QUEST& quest_In = charQuest_InOut.GetQuest();
|
||||
const HISTORY history_In = charQuest_InOut.GetHistory();
|
||||
|
||||
QuestRemoveVector::iterator remove_pos = m_QuestRemoveVector.begin();
|
||||
QuestRemoveVector::iterator remove_end = m_QuestRemoveVector.end();
|
||||
|
||||
QuestChangeVector::iterator change_pos = m_QuestChangeVector.begin();
|
||||
QuestChangeVector::iterator change_end = m_QuestChangeVector.end();
|
||||
QuestChangeVector::iterator change_find;
|
||||
|
||||
if (0 < quest_In.dwSize)
|
||||
{
|
||||
unsigned long dwChangedCount = 0;
|
||||
|
||||
QUEST quest_Out;
|
||||
memset(&quest_Out, 0, sizeof(QUEST));
|
||||
|
||||
const PktQuestDB::ExecutingQuest* lpExecutingQuestPos =
|
||||
reinterpret_cast<const PktQuestDB::ExecutingQuest*>(quest_In.Data);
|
||||
|
||||
const PktQuestDB::ExecutingQuest* lpExecutingQuestEnd =
|
||||
reinterpret_cast<const PktQuestDB::ExecutingQuest*>(quest_In.Data + quest_In.dwSize);
|
||||
|
||||
PktQuestDB::ExecutingQuest* lpDst = reinterpret_cast<PktQuestDB::ExecutingQuest*>(quest_Out.Data);
|
||||
|
||||
for(; lpExecutingQuestPos < lpExecutingQuestEnd; ++lpExecutingQuestPos)
|
||||
{
|
||||
if (std::binary_search(remove_pos, remove_end, lpExecutingQuestPos->m_wQuestID))
|
||||
{
|
||||
// 퀘스트를 복사하지 않는다.
|
||||
INFLOG2(g_Log, "CID:%10u / QuestID:0x%04X / 진행중인 퀘스트를 제거했습니다",
|
||||
dwCID, lpExecutingQuestPos->m_wQuestID);
|
||||
|
||||
++dwChangedCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
change_find = std::lower_bound(
|
||||
m_QuestChangeVector.begin(), m_QuestChangeVector.end(),
|
||||
lpExecutingQuestPos->m_wQuestID, match_first<unsigned short, QuestChangePair>());
|
||||
|
||||
if (change_find != change_end && change_find->first == lpExecutingQuestPos->m_wQuestID)
|
||||
{
|
||||
// 진행중인 퀘스트의 ID가 변경되었다.
|
||||
*lpDst = *lpExecutingQuestPos;
|
||||
lpDst->m_wQuestID = change_find->second;
|
||||
|
||||
INFLOG4(g_Log, "CID:%10u / QuestID:0x%04X / Phase:%d / ChangedID:0x%04X / "
|
||||
"진행중인 퀘스트의 ID를 변경했습니다",
|
||||
dwCID, lpExecutingQuestPos->m_wQuestID,
|
||||
lpExecutingQuestPos->m_cPhase, lpDst->m_wQuestID);
|
||||
|
||||
++dwChangedCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 목록에 없는 경우에만 복사한다.
|
||||
*lpDst = *lpExecutingQuestPos;
|
||||
}
|
||||
|
||||
++lpDst;
|
||||
}
|
||||
}
|
||||
|
||||
if (0 < dwChangedCount)
|
||||
{
|
||||
quest_Out.dwSize = static_cast<unsigned long>(
|
||||
reinterpret_cast<char*>(lpDst) - quest_Out.Data);
|
||||
|
||||
charQuest_InOut.SetQuest(quest_Out);
|
||||
|
||||
dwTotalChangedCount += dwChangedCount;
|
||||
}
|
||||
}
|
||||
|
||||
if (0 < history_In.dwSize)
|
||||
{
|
||||
unsigned long dwChangedCount = 0;
|
||||
|
||||
HISTORY history_Out;
|
||||
memset(&history_Out, 0, sizeof(HISTORY));
|
||||
|
||||
const unsigned short* lpHistoryPos = reinterpret_cast<const unsigned short*>(history_In.Data);
|
||||
const unsigned short* lpHistoryEnd = reinterpret_cast<const unsigned short*>(history_In.Data + history_In.dwSize);
|
||||
|
||||
unsigned short* lpDst = reinterpret_cast<unsigned short*>(history_Out.Data);
|
||||
|
||||
for(; lpHistoryPos < lpHistoryEnd; ++lpHistoryPos)
|
||||
{
|
||||
if (std::binary_search(remove_pos, remove_end, *lpHistoryPos))
|
||||
{
|
||||
// 퀘스트를 복사하지 않는다.
|
||||
INFLOG2(g_Log, "CID:%10u / QuestID:0x%04X / 수행 완료된 퀘스트를 제거했습니다",
|
||||
dwCID, *lpHistoryPos);
|
||||
|
||||
++dwChangedCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
change_find = std::lower_bound(
|
||||
m_QuestChangeVector.begin(), m_QuestChangeVector.end(),
|
||||
*lpHistoryPos, match_first<unsigned short, QuestChangePair>());
|
||||
|
||||
if (change_find != change_end && change_find->first == *lpHistoryPos)
|
||||
{
|
||||
// 수행 완료된 퀘스트의 ID가 변경되었다. 맞춰서 변경해준다.
|
||||
*lpDst = change_find->second;
|
||||
|
||||
INFLOG3(g_Log, "CID:%10u / QuestID:0x%04X / ChangedID:0x%04X / 수행 완료된 퀘스트 ID 변경",
|
||||
dwCID, *lpHistoryPos, *lpDst);
|
||||
|
||||
++dwChangedCount;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 목록에 없는 경우에만 복사한다.
|
||||
*lpDst = *lpHistoryPos;
|
||||
}
|
||||
|
||||
++lpDst;
|
||||
}
|
||||
}
|
||||
|
||||
if (0 < dwChangedCount)
|
||||
{
|
||||
history_Out.dwSize = static_cast<unsigned long>(
|
||||
reinterpret_cast<char*>(lpDst) - history_Out.Data);
|
||||
|
||||
charQuest_InOut.SetHistory(history_Out);
|
||||
|
||||
dwTotalChangedCount += dwChangedCount;
|
||||
}
|
||||
}
|
||||
|
||||
return (0 < dwTotalChangedCount) ? CONVERT_SUCCEEDED : CONVERT_DO_NOT_WRITE;
|
||||
}
|
||||
|
||||
161
Server/DBProcess/QuestChange/QuestChange.vcproj
Normal file
161
Server/DBProcess/QuestChange/QuestChange.vcproj
Normal file
@@ -0,0 +1,161 @@
|
||||
<?xml version="1.0" encoding="ks_c_5601-1987"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.10"
|
||||
Name="QuestChange"
|
||||
ProjectGUID="{18CD51C7-02F4-45D3-AD75-81E82B131859}"
|
||||
SccProjectName="SAK"
|
||||
SccAuxPath="SAK"
|
||||
SccLocalPath="SAK"
|
||||
SccProvider="SAK"
|
||||
Keyword="Win32Proj">
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"/>
|
||||
</Platforms>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="../Executable/$(ConfigurationName)"
|
||||
IntermediateDirectory="../Intermediate/$(ProjectName)/$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
UseOfATL="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="../;../../RylServerProject;../../RylServerProject/BaseLibrary;../../RylServerProject/RylServerLibrary;../../RylServerProject/RylGameLibrary"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||
MinimalRebuild="TRUE"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="2"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="4"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)/QuestChange.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile="$(OutDir)/QuestChange.pdb"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="../Executable/$(ConfigurationName)"
|
||||
IntermediateDirectory="../Intermediate/$(ProjectName)/$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
UseOfATL="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="../;../../RylServerProject;../../RylServerProject/BaseLibrary;../../RylServerProject/RylServerLibrary;../../RylServerProject/RylGameLibrary"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||
RuntimeLibrary="0"
|
||||
UsePrecompiledHeader="2"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)/QuestChange.exe"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="TRUE"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<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=".\QuestChange.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=".\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}">
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath=".\ReadMe.txt">
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
32
Server/DBProcess/QuestChange/ReadMe.txt
Normal file
32
Server/DBProcess/QuestChange/ReadMe.txt
Normal file
@@ -0,0 +1,32 @@
|
||||
========================================================================
|
||||
콘솔 응용 프로그램 : QuestChange 프로젝트 개요
|
||||
========================================================================
|
||||
|
||||
응용 프로그램 마법사에서 이 QuestChange 응용 프로그램을 만들었습니다.
|
||||
이 파일에는 QuestChange 응용 프로그램을 구성하는 각각의 파일에
|
||||
들어 있는 요약 설명이 포함되어 있습니다.
|
||||
|
||||
|
||||
QuestChange.vcproj
|
||||
응용 프로그램 마법사를 사용하여 생성한 VC++ 프로젝트의 기본 프로젝트 파일입니다.
|
||||
해당 파일을 생성한 Visual C++의 버전 정보를 비롯하여
|
||||
응용 프로그램 마법사에서 선택한 플랫폼, 구성 및
|
||||
프로젝트 기능에 대한 정보가 들어 있습니다.
|
||||
|
||||
QuestChange.cpp
|
||||
기본 응용 프로그램 소스 파일입니다.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
기타 표준 파일:
|
||||
|
||||
StdAfx.h 및 StdAfx.cpp는
|
||||
QuestChange.pch라는 이름의 PCH(미리 컴파일된 헤더) 파일과
|
||||
StdAfx.obj라는 이름의 미리 컴파일된 형식 파일을 빌드하는 데 사용됩니다.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
기타 참고:
|
||||
|
||||
응용 프로그램 마법사에서 사용하는 "TODO:" 주석은 사용자가 추가하거나 사용자 지정해야 하는
|
||||
소스 코드 부분을 나타냅니다.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
8
Server/DBProcess/QuestChange/stdafx.cpp
Normal file
8
Server/DBProcess/QuestChange/stdafx.cpp
Normal file
@@ -0,0 +1,8 @@
|
||||
// stdafx.cpp : 표준 포함 파일만 들어 있는 소스 파일입니다.
|
||||
// QuestChange.pch는 미리 컴파일된 헤더가 됩니다.
|
||||
// stdafx.obj에는 미리 컴파일된 형식 정보가 포함됩니다.
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
// TODO: 필요한 추가 헤더는
|
||||
// 이 파일이 아닌 STDAFX.H에서 참조합니다.
|
||||
12
Server/DBProcess/QuestChange/stdafx.h
Normal file
12
Server/DBProcess/QuestChange/stdafx.h
Normal file
@@ -0,0 +1,12 @@
|
||||
// stdafx.h : 자주 사용하지만 자주 변경되지는 않는
|
||||
// 표준 시스템 포함 파일 및 프로젝트 관련 포함 파일이
|
||||
// 들어 있는 포함 파일입니다.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
#include <iostream>
|
||||
#include <tchar.h>
|
||||
|
||||
// TODO: 프로그램에 필요한 추가 헤더는 여기에서 참조합니다.
|
||||
Reference in New Issue
Block a user