Compare commits

...

3 Commits

Author SHA1 Message Date
17204aba1d Improve Debug build and JIT script execution
- Use VirtualAlloc with PAGE_EXECUTE_READWRITE for JIT code buffers
- Remove DEP disable flag, rely on proper memory allocation instead
- Allow Debug build to use command-line IP args (fallback to 127.0.0.1)
- Add CHANGELOG.md documenting all recent fixes
2025-11-30 19:41:45 +09:00
955e032217 Fix Debug build and script execution: Add _USE_32BIT_TIME_T, disable DEP for JIT script engine 2025-11-30 19:12:08 +09:00
bd9cb3776e Fix Debug and Release_NoGD build configurations
- Add _USE_32BIT_TIME_T preprocessor definition to GlobalScript Debug build
  to resolve LNK2019 error (time_t size mismatch between projects)

- Update Release_NoGD configuration in RYLClient.vcxproj:
  * Add SSE2 instruction set support
  * Enable OpenMP support
  * Add warning suppressions (4996, 4819, 4482, 4566)
  * Add ManifestFile setting
  * Align with Release configuration settings

- Modify RYLClientMain.cpp:
  * Update _RYL_TEST macro to enable ADMIN_L3 mode automatically
  * Allow standalone execution without Login.exe in test mode

Issues resolved:
- Debug build: ParsePacket::HandleUserLogin linker error
- Release_NoGD build: Compilation failure due to configuration differences
2025-11-30 18:34:17 +09:00
9 changed files with 273 additions and 154 deletions

30
CHANGELOG.md Normal file
View File

@@ -0,0 +1,30 @@
# Changelog
All notable changes to this project will be documented in this file.
## [2024-11-30] - Build System & Script Engine Fixes
### Fixed
- **Release_NoGD Configuration**: Added missing compiler settings (SSE2, OpenMP, warning suppressions) to match Release configuration
- **Debug Build Linker Error**: Added `_USE_32BIT_TIME_T` preprocessor definition to GlobalScript Debug configuration to fix `ParsePacket::HandleUserLogin` time_t size mismatch (LNK2019)
- **Script Execution Crash**: Implemented VirtualAlloc with PAGE_EXECUTE_READWRITE for JIT code buffer allocation to resolve DEP-related memory access violations
- **Standalone Debugging**: Modified `_RYL_TEST` mode to automatically enable `ADMIN_L3` without requiring Login.exe
### Changed
- **Working Directory**: Set LocalDebuggerWorkingDirectory to `F:\YouxiLand\ROW` for all configurations to enable proper resource loading during debugging
- **Server IP Handling**: Modified `GetServerInfo()` to respect command-line IP arguments even in Debug builds, falling back to `127.0.0.1` only when no IP is provided
- **Memory Management**: Enhanced `CVirtualMachine::Destroy()` to properly detect and free VirtualAlloc-allocated memory using VirtualQuery
### Added
- **Debug Logging**: Added MCF file decryption logging (`.decrypted.log` files) for script debugging
- **Execute State Logging**: Added comprehensive state logging to `script_execute.log` before script execution
### Technical Details
- MCF XOR encryption key: `0x82fac623 ^ 0x601f1ac4`
- Stack reserve size increased to 8MB for Debug configuration
- Code buffer now allocated with executable permissions for JIT execution compatibility with Windows 10/11 DEP
### Notes
- Visual Studio 2010 project
- DirectX 8 graphics API
- Custom JIT script engine with x86 machine code execution

View File

@@ -100,7 +100,7 @@
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>./;../../MemoryManager;../RYLClient/RYLClient;../../Engine/Zalla3D Base Class;./GameGuardLib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_RYL_GAME_CLIENT_;NO_GAMEGUARD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_RYL_GAME_CLIENT_;NO_GAMEGUARD;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<PrecompiledHeader>

View File

@@ -75,12 +75,18 @@
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../Executable/$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../Intermediate/$(ProjectName)/$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</LinkIncremental>
<LocalDebuggerWorkingDirectory Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">F:\YouxiLand\ROW</LocalDebuggerWorkingDirectory>
<DebuggerFlavor Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">WindowsLocalDebugger</DebuggerFlavor>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../Executable/$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../Intermediate/$(ProjectName)/$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<LocalDebuggerWorkingDirectory Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">F:\YouxiLand\ROW</LocalDebuggerWorkingDirectory>
<DebuggerFlavor Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">WindowsLocalDebugger</DebuggerFlavor>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_NoGD|Win32'">../../Executable/$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_NoGD|Win32'">../../Intermediate/$(ProjectName)/$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release_NoGD|Win32'">false</LinkIncremental>
<LocalDebuggerWorkingDirectory Condition="'$(Configuration)|$(Platform)'=='Release_NoGD|Win32'">F:\YouxiLand\ROW</LocalDebuggerWorkingDirectory>
<DebuggerFlavor Condition="'$(Configuration)|$(Platform)'=='Release_NoGD|Win32'">WindowsLocalDebugger</DebuggerFlavor>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release_MY|Win32'">../../Executable/$(Configuration)\</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release_MY|Win32'">../../Intermediate/$(ProjectName)/$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release_MY|Win32'">false</LinkIncremental>
@@ -120,17 +126,17 @@
<TreatWChar_tAsBuiltInType>false</TreatWChar_tAsBuiltInType>
<RuntimeTypeInfo>true</RuntimeTypeInfo>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>Effect.lib;SoundLib.lib;Caldron.lib;Zalla3DBaseClass.lib;GlobalScript.lib;ScriptEngine.lib;CharacterActionControl.lib;ws2_32.lib;dsound.lib;eaxguid.lib;d3d8.lib;d3dx8.lib;dxguid.lib;dinput8.lib;shlwapi.lib;ole32.lib;wbemuuid.lib;winmm.lib;dxerr8.lib;odbc32.lib;odbccp32.lib;iphlpapi.lib;ijl15.lib;imm32.lib;../../Engine/SoundLib/vorbis_sdk/lib/ogg_static_d.lib;../../Engine/SoundLib/vorbis_sdk/lib/vorbis_static_d.lib;../../Engine/SoundLib/vorbis_sdk/lib/vorbisfile_static_d.lib;luad.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)Client.exe</OutputFile>
<OutputFile>F:\YouxiLand\ROW\Client.exe</OutputFile>
<AdditionalLibraryDirectories>../../Engine/SoundLib/vorbis_sdk/lib;../../Library/$(Configuration)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>LIBC;LIBCD;MSVCRT;MSVCRTD;LIBCMT;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)Client.pdb</ProgramDatabaseFile>
<SubSystem>Windows</SubSystem>
<StackReserveSize>
</StackReserveSize>
<StackReserveSize>8388608</StackReserveSize>
<TargetMachine>MachineX86</TargetMachine>
<EnableUAC>false</EnableUAC>
<UACExecutionLevel>HighestAvailable</UACExecutionLevel>
@@ -154,6 +160,7 @@
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
<OpenMPSupport>true</OpenMPSupport>
<DisableSpecificWarnings>4996;4819;4482;%(DisableSpecificWarnings);4566;4819</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>ws2_32.lib;dsound.lib;eaxguid.lib;d3d8.lib;d3dx8.lib;dxguid.lib;dinput8.lib;shlwapi.lib;ole32.lib;wbemuuid.lib;winmm.lib;dxerr8.lib;odbc32.lib;odbccp32.lib;iphlpapi.lib;ijl15.lib;imm32.lib;lua.lib;../../Engine/SoundLib/vorbis_sdk/lib/ogg_static.lib;../../Engine/SoundLib/vorbis_sdk/lib/vorbis_static.lib;../../Engine/SoundLib/vorbis_sdk/lib/vorbisfile_static.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -185,12 +192,14 @@
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
<OpenMPSupport>true</OpenMPSupport>
<DisableSpecificWarnings>4996;4819;4482;%(DisableSpecificWarnings);4566;4819</DisableSpecificWarnings>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>ws2_32.lib;dsound.lib;eaxguid.lib;d3d8.lib;d3dx8.lib;dxguid.lib;dinput8.lib;shlwapi.lib;ole32.lib;wbemuuid.lib;winmm.lib;dxerr8.lib;odbc32.lib;odbccp32.lib;iphlpapi.lib;ijl15.lib;imm32.lib;lua.lib;../../Engine/SoundLib/vorbis_sdk/lib/ogg_static.lib;../../Engine/SoundLib/vorbis_sdk/lib/vorbis_static.lib;../../Engine/SoundLib/vorbis_sdk/lib/vorbisfile_static.lib;%(AdditionalDependencies)</AdditionalDependencies>
<OutputFile>$(OutDir)Client.exe</OutputFile>
<AdditionalLibraryDirectories>../../Engine/SoundLib/vorbis_sdk/lib;../../Library/$(Configuration)</AdditionalLibraryDirectories>
<IgnoreSpecificDefaultLibraries>LIBC;LIBCD;MSVCRT;MSVCRTD;LIBCMTD;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
<AdditionalLibraryDirectories>../../Engine/SoundLib/vorbis_sdk/lib;../..\Library\$(Configuration)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<ProgramDatabaseFile>$(OutDir)Client.pdb</ProgramDatabaseFile>
<SubSystem>Windows</SubSystem>
@@ -198,10 +207,14 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX86</TargetMachine>
<ManifestFile>Client.exe.manifest</ManifestFile>
<IgnoreSpecificDefaultLibraries>LIBC;LIBCD;MSVCRT;MSVCRTD;LIBCMTD;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
</Link>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<ProjectReference>
<UseLibraryDependencyInputs>true</UseLibraryDependencyInputs>
</ProjectReference>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_MY|Win32'">
<ClCompile>
@@ -212,6 +225,7 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>ws2_32.lib;dsound.lib;eaxguid.lib;d3d8.lib;d3dx8.lib;shlwapi.lib;ole32.lib;wbemuuid.lib;winmm.lib;dxguid.lib;dxerr8.lib;dinput8.lib;odbc32.lib;odbccp32.lib;iphlpapi.lib;ijl15.lib;imm32.lib;../../Engine/SoundLib/vorbis_sdk/lib/ogg_static.lib;../../Engine/SoundLib/vorbis_sdk/lib/vorbis_static.lib;../../Engine/SoundLib/vorbis_sdk/lib/vorbisfile_static.lib;%(AdditionalDependencies)</AdditionalDependencies>
@@ -241,6 +255,7 @@
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<AdditionalDependencies>ws2_32.lib;dsound.lib;eaxguid.lib;d3d8.lib;d3dx8.lib;dxguid.lib;dinput8.lib;shlwapi.lib;ole32.lib;wbemuuid.lib;winmm.lib;dxerr8.lib;odbc32.lib;odbccp32.lib;iphlpapi.lib;ijl15.lib;imm32.lib;../../Engine/SoundLib/vorbis_sdk/lib/ogg_static_d.lib;../../Engine/SoundLib/vorbis_sdk/lib/vorbis_static_d.lib;../../Engine/SoundLib/vorbis_sdk/lib/vorbisfile_static_d.lib;%(AdditionalDependencies)</AdditionalDependencies>

View File

@@ -5,7 +5,7 @@
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LocalDebuggerCommand>$(OutDir)Client.exe</LocalDebuggerCommand>
<LocalDebuggerCommand>F:\YouxiLand\ROW\Client.exe</LocalDebuggerCommand>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>

View File

@@ -1,8 +1,8 @@
#include <process.h>
// <20>Ʒ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD>ϴ<EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻʽÿ<CABD>.
#ifndef _WIN32_WINNT // Windows NT 4 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>.
// <20>Ʒ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD>ϴ<EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻʽÿ<CABD>.
#ifndef _WIN32_WINNT // Windows NT 4 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>.
#define _WIN32_WINNT 0x0501 // Windows XP
#endif
@@ -80,7 +80,7 @@ DECLARE_ANTIHACK();
#include "RYLSceneObject.h"
#include "RYLIntroScene.h"
#include "RYLLoginScene.h"
// WORK_LIST 2.2 NationSelectScene <20≯<EFBFBD> <20><><EFBFBD><EFBFBD>
// WORK_LIST 2.2 NationSelectScene <20≯<EFBFBD> <20><><EFBFBD><EFBFBD>
#include "RYLRaceSelectScene.h"
#include "RYLCharacterSelectScene.h"
#include "RYLLoadingScene.h"
@@ -104,7 +104,7 @@ DECLARE_ANTIHACK();
#include "RYLGameTimeManager.h"
// <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20>ν<EFBFBD><CEBD><EFBFBD> <20><><EFBFBD><EFBFBD> WMI API<50><49> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD> <20>ν<EFBFBD><CEBD><EFBFBD> <20><><EFBFBD><EFBFBD> WMI API<50><49> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>
#include <Wbemidl.h>
#include <atlbase.h>
@@ -182,7 +182,7 @@ BOOL WINAPI AntiFunc(HINSTANCE hInstance)
return 0;
}
/*
// dump <20>׽<EFBFBD>Ʈ
// dump <20>׽<EFBFBD>Ʈ
int i = 0;
int a = 0;
a = 15;
@@ -241,7 +241,7 @@ int WINAPI ExceptionUserFunc(TCHAR* szBuffer, const int nBufferSize)
if ( pData )
zone = pData->m_dwPresentZone;
// <20><><EFBFBD><EFBFBD> Ÿ<><C5B8>
// <20><><EFBFBD><EFBFBD> Ÿ<><C5B8>
char szServerInfo[MAX_PATH] = "";
if ( CRYLNetworkData::Instance() )
{
@@ -253,7 +253,7 @@ int WINAPI ExceptionUserFunc(TCHAR* szBuffer, const int nBufferSize)
}
}
// OS <20><><EFBFBD><EFBFBD>
// OS <20><><EFBFBD><EFBFBD>
char szOSInfo[MAX_PATH] = "";
OSVERSIONINFOEX osvi;
@@ -342,19 +342,19 @@ int WINAPI ExceptionUserFunc(TCHAR* szBuffer, const int nBufferSize)
}
}
// <20>׷<EFBFBD><D7B7><EFBFBD> ī<><C4AB> <20><><EFBFBD><EFBFBD>
// <20>׷<EFBFBD><D7B7><EFBFBD> ī<><C4AB> <20><><EFBFBD><EFBFBD>
LogDisplay( szBuffer );
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ī<><C4AB> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD> ī<><C4AB> <20><><EFBFBD><EFBFBD>
LogSoundDrv( szBuffer );
// CPU <20><><EFBFBD><EFBFBD>
// CPU <20><><EFBFBD><EFBFBD>
LogCPU( szBuffer );
// MainBoard <20><><EFBFBD><EFBFBD>
// MainBoard <20><><EFBFBD><EFBFBD>
if ( osvi.dwMajorVersion == 4 )
{
if ( osvi.dwMinorVersion == 90 ) // <20><>Me
if ( osvi.dwMinorVersion == 90 ) // <20><>Me
{
LogMainBoard( szBuffer );
LogMemory( szBuffer );
@@ -382,7 +382,7 @@ LONG __stdcall UserUnhandledExceptionFilterEx(PEXCEPTION_POINTERS pExceptionInfo
{
if(Exception::ExceptionSaveDump)
{
// <20><><EFBFBD>ܸ<EFBFBD> ȣ<><C8A3><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>̴<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
// <20><><EFBFBD>ܸ<EFBFBD> ȣ<><C8A3><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>̴<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
char dumpfile[512];
if(strlen(Exception::DefaultDumpFileName) == 0)
@@ -396,8 +396,8 @@ LONG __stdcall UserUnhandledExceptionFilterEx(PEXCEPTION_POINTERS pExceptionInfo
else
strcpy(dumpfile, Exception::DefaultDumpFileName);
// <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƾ<EFBFBD><C6BE> Execption <20><><EFBFBD><EFBFBD> <20>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD> <20>ֵ<EFBFBD><D6B5><EFBFBD> <20><><EFBFBD><EFBFBD>.
// <20>̴ϴ<CCB4><CFB4><EFBFBD> <20><><EFBFBD><EFBFBD>.
// <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƾ<EFBFBD><C6BE> Execption <20><><EFBFBD><EFBFBD> <20>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD> <20>ֵ<EFBFBD><D6B5><EFBFBD> <20><><EFBFBD><EFBFBD>.
// <20>̴ϴ<CCB4><CFB4><EFBFBD> <20><><EFBFBD><EFBFBD>.
MiniDump(dumpfile, pExceptionInfo);
}
@@ -420,15 +420,15 @@ int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
// MessageBox(NULL, lpCmdLine, "aa", MB_OK);
// <20>ӽ<EFBFBD>
// <20>ӽ<EFBFBD>
// ::CopyFile(_T(".\\ROWYouxi.mcf"), _T(".\\GameGuard\\Splash.jpg"), FALSE);
// <20><>ü <20>Լ<EFBFBD> Exception <20><><EFBFBD><EFBFBD>
// <20><>ü <20>Լ<EFBFBD> Exception <20><><EFBFBD>
Exception::EnableUnhandledExceptioinFilterEx(UserUnhandledExceptionFilterEx, true);
// Ǯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// Ǯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
Exception::SetDumpType(Exception::NormalDump);
// Dump <20><><EFBFBD><EFBFBD>
// Dump <20><><EFBFBD><EFBFBD>
Exception::EnableSaveDump(true);
USE_ANTIHACK1();
@@ -452,17 +452,17 @@ CClientMain::CClientMain()
m_hnProtectLib = NULL;
m_wClientLoginFlag = 0;
#ifdef NDEBUG
m_wAdminMode = ADMIN_NONE; // <20>Ϲ<EFBFBD><CFB9><EFBFBD>
#if defined(NDEBUG) && !defined(_RYL_TEST)
m_wAdminMode = ADMIN_NONE; // <20>Ϲ<EFBFBD><CFB9><EFBFBD>
m_bUDPInfo = false;
#else
m_wAdminMode = ADMIN_L3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_wAdminMode = ADMIN_L3; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_bUDPInfo = true;
#endif
m_lpD3DDevice = NULL ;
// <20><><EFBFBD>̽<EFBFBD>ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ (2006-05-15 by hackermz)
// <20><><EFBFBD>̽<EFBFBD>ƽ <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ (2006-05-15 by hackermz)
m_dwUseJoystick = 0;
}
@@ -522,7 +522,7 @@ bool CClientMain::InitCreateGameClass()
else
{
//========================================================================
// GameData<74><61> NetWork Data <20><><EFBFBD><EFBFBD>
// GameData<74><61> NetWork Data <20><><EFBFBD><EFBFBD>
m_pRYLGameData = new CRYLGameData ;
m_pRYLNetworkData = new CRYLNetworkData(
@@ -566,7 +566,7 @@ VOID CClientMain::GetJapanServerInfo()
char strGameCode[ MAX_PATH ];
char strArgText[ MAX_PATH ], strAccountArg[ MAX_PATH ] ;
strcpy( strGameCode, "209551D1-DE8A-40CF-BF54-152D7C17A62F" ) ;//<2F><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
strcpy( strGameCode, "209551D1-DE8A-40CF-BF54-152D7C17A62F" ) ;//<2F><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
char *pLast = strCommandLine ;
sscanf( pLast, "%s %d %s", CRYLNetworkData::m_strIP, &CRYLNetworkData::m_dwServerID, &strArgText ) ;
@@ -584,7 +584,7 @@ USES_CONVERSION;
return FALSE ;
}
strcpy( m_pRYLNetworkData->m_strLoginID, OLE2T( bstrGameID ) ) ;//<2F><><EFBFBD><EFBFBD> -- Game<6D><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
strcpy( m_pRYLNetworkData->m_strLoginID, OLE2T( bstrGameID ) ) ;//<2F><><EFBFBD> -- Game<6D><65> <20><><EFBFBD><EFBFBD><EFBFBD> ID
m_pRYLNetworkData->m_dwUserID = atoi( m_pRYLNetworkData->m_strLoginID ) ;
SysAllocString( bstrGameID ) ;
@@ -603,6 +603,10 @@ VOID CClientMain::GetServerInfo( HWND hWnd )
{
char *strCommandLine = GetCommandLine() ;
// 기본값으로 초기화
strcpy(CRYLNetworkData::m_strIP, "");
CRYLNetworkData::m_dwServerID = 0;
if ( hWnd )
{
char *pLast = strCommandLine ;
@@ -612,12 +616,19 @@ VOID CClientMain::GetServerInfo( HWND hWnd )
else
{
char *pLast = strrchr( strCommandLine, '"' ) ;
if (pLast)
{
pLast += 2 ;
sscanf( pLast,"%s %d", CRYLNetworkData::m_strIP, &CRYLNetworkData::m_dwServerID ) ;
}
}
#ifdef DEBUG
// 명령줄에서 IP를 받지 못한 경우에만 기본값 사용
if (strlen(CRYLNetworkData::m_strIP) == 0 || strcmp(CRYLNetworkData::m_strIP, "") == 0)
{
strcpy(CRYLNetworkData::m_strIP, "127.0.0.1");
}
#endif
/*
if ( m_wAdminMode == ADMIN_L3 )
@@ -640,11 +651,11 @@ unsigned long CClientMain::ClientProc(HWND hWnd, unsigned int uMsg, WPARAM wPara
{
case WM_CLOSE:
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned long dwCounter = 10000;
if ( m_wAdminMode > SUPPORTER)
{
// <20><EFBFBD>ڴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><EFBFBD>ڴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
dwCounter = 3000;
}
@@ -794,7 +805,7 @@ unsigned long CClientMain::ClientProc(HWND hWnd, unsigned int uMsg, WPARAM wPara
{
if (wParam == 255)
{
// nProtect <20>˻<EFBFBD>
// nProtect <20>˻<EFBFBD>
m_pRYLNetworkData->ChecknProtect( m_hWnd ) ;
}
break;
@@ -897,10 +908,10 @@ unsigned long CClientMain::CheckOCTREE()
BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
{
// edith 2009.12.26 <20>ٽ<EFBFBD><D9BD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><EFBFBD><EFBFBD><EFBFBD>.
// edith 2009.12.26 <20>ٽ<EFBFBD><D9BD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>.
if(!CRYLNetworkData::UpdateHShield())
{
MessageBox(NULL, "<EFBFBD>ٽ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>.", "ERROR", MB_OK);
MessageBox(NULL, "<EFBFBD>ٽ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>.", "ERROR", MB_OK);
return FALSE;
}
@@ -1018,7 +1029,7 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
return FALSE;
}
// <20><><EFBFBD>̽<EFBFBD>ƽ <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>̽<EFBFBD>ƽ <20><><EFBFBD><EFBFBD>
if(ERROR_SUCCESS != RegQueryValueEx(hMPClientReg, "UseJoyStick", 0, NULL, (LPBYTE)&m_dwUseJoystick, &dwReadLens))
{
m_dwUseJoystick = 0;
@@ -1034,13 +1045,13 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
if (m_pRYLNetworkData->m_eInternationalCode == GameRYL::KOREA)
{
// myFirewall <20>ʱ<EFBFBD>ȭ
// myFirewall <20>ʱ<EFBFBD>ȭ
myfirewall::On();
}
// <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
using namespace SystemInfo;
CSystemInfo* pSystemInfo;
@@ -1057,7 +1068,7 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
bool bSave = false;
// <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. //
// <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. //
if(CRenderOption::m_CharacterProjectShadowTerrain!=0) bSave = true;
else if(CRenderOption::m_BuildingLightmap!=0) bSave = true;
else if(CRenderOption::m_ObjectLOD!=1) bSave = true;
@@ -1097,8 +1108,8 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
delete pSystemInfo;
pSystemInfo = NULL;
// edith 2009.02.14 <20><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ۼ<EFBFBD><DBBC><EFBFBD><EFBFBD><EFBFBD>.
// edith 2009.02.14 <20><><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ۼ<EFBFBD><DBBC><EFBFBD><EFBFBD><EFBFBD>.
CSceneManager::m_SkillWeatherEffect = static_cast<bool>(CRenderOption::m_bWeather);
// ---------------------------------------------------------------------------
@@ -1148,7 +1159,7 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
return FALSE;
}
// <20><>Ʈ<EFBFBD><C6AE> üũ<C3BC><C5A9> <20>˻<EFBFBD>
// <20><>Ʈ<EFBFBD><C6AE> üũ<C3BC><C5A9> <20>˻<EFBFBD>
dwTemp = CheckOCTREE();
dwCrc[0] = dwCrc[0] ^ dwTemp;
@@ -1168,7 +1179,7 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
}
dwCrc[1] = dwCrc[1]^dwTemp;
// <20><>Ʋ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<EFBFBD>.
// <20><>Ʋ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>մϴ<D5B4>.
if (GameRYL::SERVER_BATTLE_LOHAN == m_pRYLNetworkData->m_eServerType)
{
sprintf(strScriptPath, "%s\\Language\\%s\\BGItemScript.gsf", m_strClientPath, szLanguage[i]);
@@ -1219,7 +1230,7 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
MessageBox(NULL, CRYLStringTable::m_strString[22], CRYLStringTable::m_strString[21], MB_OK);
return FALSE;
}
// <20><>Ʋ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<EFBFBD>.
// <20><>Ʋ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>մϴ<D5B4>.
if (GameRYL::SERVER_BATTLE_LOHAN == m_pRYLNetworkData->m_eServerType)
{
sprintf(strScriptPath, "%s\\BGItemScript.gsf", m_strClientPath);
@@ -1279,7 +1290,7 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
return FALSE;
}
// <20><>üũ
// <20><>üũ
sprintf(strScriptPath, "%s\\zone1.z3s", m_strClientPath);
if (CCrc32Static::FileCrc32Assembly(strScriptPath, dwTemp) != NO_ERROR)
{
@@ -1372,16 +1383,16 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
// m_dwVersion = m_dwVersion ^ dwCrc[12];
#ifdef _RYL_TEST
// <20><><EFBFBD><EFBFBD><EFBFBD>׿<EFBFBD> <20><><EFBFBD><EFBFBD> üũ<C3BC><C5A9>.
// <20><><EFBFBD><EFBFBD>׿<EFBFBD> <20><><EFBFBD><EFBFBD> üũ<C3BC><C5A9>.
m_dwVersion = 0xfeef66b3;
#endif
//#ifndef NDEBUG
// switch (m_pRYLNetworkData->m_eServerType)
// {
// case GameRYL::SERVER_TEST: m_dwVersion = 0x2e07d9fa; break; // <20>׼<EFBFBD>
// case GameRYL::SERVER_REGULAR: m_dwVersion = 0xb332c5fb; break; // <20><><EFBFBD><EFBFBD>
// case GameRYL::SERVER_BATTLE_LOHAN: m_dwVersion = 0x00000001; break; // <20>
// case GameRYL::SERVER_TEST: m_dwVersion = 0x2e07d9fa; break; // <20>׼<EFBFBD>
// case GameRYL::SERVER_REGULAR: m_dwVersion = 0xb332c5fb; break; // <20><><EFBFBD><EFBFBD>
// case GameRYL::SERVER_BATTLE_LOHAN: m_dwVersion = 0x00000001; break; // <20>
// }
//#endif
@@ -1394,18 +1405,18 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
g_pClientSocket = ClientSocket::CreateInstance();
/*
// <20><><EFBFBD><EFBFBD><EBB7B1> <20>۾<EFBFBD> <20><> <20>׽<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20>κ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EBB7B1> <20>۾<EFBFBD> <20><> <20>׽<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ǵ<EFBFBD> <20>κ<EFBFBD>
char strLogFilePath[MAX_PATH] ;
sprintf(strLogFilePath, "%s\\NetworkLog.txt", m_strClientPath);
g_pSessionMgr->NetworkLog(strLogFilePath);
*/
// <20><><EFBFBD>̽<EFBFBD>ƽ <20>ʱ<EFBFBD>ȭ //
// <20>ѱ<EFBFBD><D1B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ƵӴϴ<D3B4>. (2006-05-02 by hackermz)
// <20>׽<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> UseJoystick <20>׸<EFBFBD><D7B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. (2006-05-15 by hackermz)
// <20><><EFBFBD>̽<EFBFBD>ƽ <20>ʱ<EFBFBD>ȭ //
// <20>ѱ<EFBFBD><D1B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ƵӴϴ<D3B4>. (2006-05-02 by hackermz)
// <20>׽<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> UseJoystick <20>׸<EFBFBD><D7B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. (2006-05-15 by hackermz)
// if (GameRYL::KOREA != m_pRYLNetworkData->m_eInternationalCode)
// edith <20><><EFBFBD>̽<EFBFBD>ƽ <20><><EFBFBD><EFBFBD>.
// edith <20><><EFBFBD>̽<EFBFBD>ƽ <20><><EFBFBD><EFBFBD>.
CInputDevice::GetInstance()->Initialize(m_hWnd, false, false, true);
/*
if (1 == GetUseJoystick())
@@ -1422,9 +1433,9 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
CEnumD3D::m_nDevice = m_InitValue.m_nDevice;
CEnumD3D::m_nMode = m_InitValue.m_nMode;
// edith 2008.01.18 ShowState<74><65> <20><><EFBFBD><EFBFBD> false->true<75><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// showState<74><65> true <20≯<EFBFBD> <20><><EFBFBD>Ľ<EFBFBD> <20><><EFBFBD>۸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׷<EFBFBD><D7B7><EFBFBD>ī<EFBFBD><C4AB><EFBFBD><EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD> <20><20>ʱ<EFBFBD>ȭ<EFBFBD><C8AD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD>.
// edith 2008.01.18 ShowState<74><65> <20><><EFBFBD><EFBFBD> false->true<75><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
// showState<74><65> true <20≯<EFBFBD> <20><><EFBFBD>Ľ<EFBFBD> <20><><EFBFBD>۸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׷<EFBFBD><D7B7><EFBFBD>ī<EFBFBD><C4AB><EFBFBD><EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD> <20><20>ʱ<EFBFBD>ȭ<EFBFBD><C8AD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD>.
m_BaseGraphicLayer.Create(m_hWnd, true, true, 0, 0, m_iScreenWidth, m_iScreenHeight );
m_pRYLGameData->m_lpSceneManager = new CSceneManager();
@@ -1433,7 +1444,7 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
m_pRYLGameData->m_lpSceneManager->m_WeatherManager.SetClearColor(&m_BaseGraphicLayer.m_ClearColor);
m_pRYLGameData->m_lpSceneManager->Create(m_InitValue, (char *)m_strClientPath);
// scene manager<65><72> ȭ<><C8AD><EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// scene manager<65><72> ȭ<><C8AD><EFBFBD>ػ<EFBFBD> <20><><EFBFBD><EFBFBD>
m_pRYLGameData->m_lpSceneManager->m_ScreenWidth = m_iScreenWidth;
m_pRYLGameData->m_lpSceneManager->m_ScreenHeight = m_iScreenHeight;
@@ -1469,7 +1480,7 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
}
// ---------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3>
// <20><><EFBFBD><EFBFBD> ó<><C3B3>
// try
// {
@@ -1483,7 +1494,7 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
// }
// ---------------------------------------------------------------------------
// CharacterData<74><61> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Set
// CharacterData<74><61> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Set
m_pRYLNetworkData->LinkCharacterData() ;
m_pRYLGameData->LinkCharacterData() ;
@@ -1498,7 +1509,7 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
m_pRYLGameData->m_bShowInfo = FALSE;
// ---------------------------------------------------------------------------
// Ÿ<≯<EFBFBD> <20>ʱ<EFBFBD>ȭ
// Ÿ<≯<EFBFBD> <20>ʱ<EFBFBD>ȭ
GRYLTimer.InitTimer() ;
@@ -1515,7 +1526,7 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
if(iLanguage >= iMaxLanguage)
iLanguage = 0;
// <20><>Ʋ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<EFBFBD>.
// <20><>Ʋ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>մϴ<D5B4>.
if (GameRYL::SERVER_BATTLE_LOHAN == m_pRYLNetworkData->m_eServerType)
{
sprintf(strScriptPath, "%s\\Language\\%s\\BGItemScript.gsf", m_strClientPath, szLanguage[iLanguage]);
@@ -1537,7 +1548,7 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
g_QuestList.Load(strQuestPath);
#else
// <20><>Ʋ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<EFBFBD>.
// <20><>Ʋ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>մϴ<D5B4>.
if (GameRYL::SERVER_BATTLE_LOHAN == m_pRYLNetworkData->m_eServerType)
{
sprintf(strScriptPath, "%s\\BGItemScript.gsf", m_strClientPath);
@@ -1594,10 +1605,10 @@ BOOL CClientMain::Init(HINSTANCE hInstance, INT iWidth, INT iHeight )
HRESULT CClientMain::CreateScene()
{
// TextSize<7A>ʱ<EFBFBD>ȭ
// TextSize<7A>ʱ<EFBFBD>ȭ
CRYLStringTable::CreateTextSize() ;
// GM Font <20>ʱ<EFBFBD>ȭ
// GM Font <20>ʱ<EFBFBD>ȭ
CGMFont::CreateInstance() ;
if ( FAILED( CGMFont::Instance()->InitDeviceObjects() ) )
{
@@ -1605,7 +1616,7 @@ HRESULT CClientMain::CreateScene()
return E_FAIL ;
}
// GM UI <20>ʱ<EFBFBD>ȭ
// GM UI <20>ʱ<EFBFBD>ȭ
if ( FAILED( GMUIInitialize( m_hWnd, m_iScreenWidth, m_iScreenHeight ) ) )
{
return E_FAIL ;
@@ -1614,7 +1625,7 @@ HRESULT CClientMain::CreateScene()
// ---------------------------------------------------------------------------
// Init Scene
// Game Scene<6E>̿<EFBFBD><CCBF><EFBFBD> Scene<6E><65><EFBFBD><EFBFBD> <20>ε<EFBFBD>
// Game Scene<6E>̿<EFBFBD><CCBF><EFBFBD> Scene<6E><65><EFBFBD><EFBFBD> <20>ε<EFBFBD>
m_pRYLSceneManager = new CRYLSceneManager() ;
// Intro Scene
@@ -1629,7 +1640,7 @@ HRESULT CClientMain::CreateScene()
// Loagin Scene
m_pRYLSceneManager->InsertScene( new CRYLLoginScene( LOGIN_SCENE ) ) ;
// WORK_LIST 2.2 NationSelectScene <20≯<EFBFBD> <20><><EFBFBD><EFBFBD>
// WORK_LIST 2.2 NationSelectScene <20≯<EFBFBD> <20><><EFBFBD><EFBFBD>
// RaceSelect Scene
m_pRYLSceneManager->InsertScene( new CRYLRaceSelectScene( RACESELECT_SCENE ) ) ;
m_pRYLSceneManager->SetScene( RACESELECT_SCENE ) ;
@@ -1658,7 +1669,7 @@ HRESULT CClientMain::CreateScene()
m_pRYLSceneManager->SetScene( INTRO_SCENE ) ;
// <20><><EFBFBD>ҽ<EFBFBD> <20>ʱ<EFBFBD>ȭ
// <20><><EFBFBD>ҽ<EFBFBD> <20>ʱ<EFBFBD>ȭ
//InitResourceObject() ;
return S_OK ;
@@ -1797,7 +1808,7 @@ void CClientMain::Update(void)
m_pRYLGameData->UpdateTipBroadCounter( fUpdate ) ;
m_pRYLGameData->UpdatePartyAttackTimer( fUpdate ) ;
// Shout, FameInfo.. etc Counter ó<><C3B3>
// Shout, FameInfo.. etc Counter ó<><C3B3>
CRYLNetworkData::ProcessCounter( fUpdate ) ;
m_pRYLGameData->UpdateSkillUseCounter( fUpdate ) ;
@@ -2106,9 +2117,9 @@ void CClientMain::Update(void)
}
// ---------------------------------------------------------------------------------
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD>â ó<><C3B3>
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD>â ó<><C3B3>
// <20><><EFBFBD><EFBFBD> <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if ( m_pRYLGameData->m_dwGuildWarJoinLeaveResult & MB_YES )
{
SendPacket::WarOnOff( g_GameSession, CRYLNetworkData::Instance()->m_dwMyChrID, Creature::WAR_ON, GameTime::GUILD ) ;
@@ -2191,7 +2202,7 @@ void CClientMain::Update(void)
if ( CRYLCommunityData::Instance()->m_dwResInvite & MB_YES )
{
// edith 2008.02.27 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// edith 2008.02.27 <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (Creature::LEVEL_ABLE_WAR > CRYLGameData::Instance()->m_csStatus.m_Info.Level)
{
char szErrMsg[MAX_PATH];
@@ -2202,7 +2213,7 @@ void CClientMain::Update(void)
}
else
{
// <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>
// <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>
SendPacket::CharGuildCmd( g_GameSession, CRYLCommunityData::Instance()->m_dwRefenceGID, m_pRYLNetworkData->m_dwMyChrID,
CRYLCommunityData::Instance()->m_dwRefenceCID, PktGuildCmd::GC_JOIN ) ;
}
@@ -2211,7 +2222,7 @@ void CClientMain::Update(void)
}
else if ( ( CRYLCommunityData::Instance()->m_dwResInvite & MB_NO ) || ( CRYLCommunityData::Instance()->m_dwResInvite & MB_EXIT ) )
{
// <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
SendPacket::CharGuildCmd( g_GameSession, CRYLCommunityData::Instance()->m_dwRefenceGID, m_pRYLNetworkData->m_dwMyChrID,
CRYLCommunityData::Instance()->m_dwRefenceCID, PktGuildCmd::GC_REFUSE ) ;
CRYLCommunityData::Instance()->m_dwResInvite = 0 ;
@@ -2247,7 +2258,7 @@ void CClientMain::Update(void)
}
}
// <20><>ġ <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ°<D6B4> üũ
// <20><>ġ <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ°<D6B4> üũ
RYLCreature* pSelfCreature = RYLCreatureManager::Instance()->GetSelfCreature();
if ( pSelfCreature && g_pClientSocket->GetStatusFlag() != NS_REQUESTQUEST )
{
@@ -2314,7 +2325,7 @@ void CClientMain::Update(void)
{
CSceneManager::m_fLife = ( FLOAT )( m_pRYLGameData->m_csStatus.GetCurrentHP() ) / ( m_pRYLGameData->m_csStatus.GetMaxHP() ) ;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>.
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>.
RYLCreature* pSelfCreature = RYLCreatureManager::Instance()->GetSelfCreature();
if(pSelfCreature)
{
@@ -2326,7 +2337,7 @@ void CClientMain::Update(void)
}
#ifndef NO_GAMEGUARD
// edith 2009.08.11 <20><><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD> 2.5 <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD>
// edith 2009.08.11 <20><><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD> 2.5 <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD>
// if (m_pRYLNetworkData->m_GGAuthCode.CheckFlag(GGAuthCode::GG_AUTH_CODE_1))
// {
// SendPacket::CSAuthReturnCode( g_GameSession, m_pRYLNetworkData->m_dwMyChrID, 1,
@@ -2361,8 +2372,8 @@ void CClientMain::Render(void)
{
PROFILE("Status Check");
////////////////////////// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD> üũ
// edith 2008.03.13 Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><>ŷ<EFBFBD><C5B7> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> üũ<C3BC>ϴ<EFBFBD> <20>κ<EFBFBD>
////////////////////////// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD> üũ
// edith 2008.03.13 Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><>ŷ<EFBFBD><C5B7> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> üũ<C3BC>ϴ<EFBFBD> <20>κ<EFBFBD>
if (m_wAdminMode != ADMIN_L3)
{
float fUpdate = CFrameTimer::GetUpdateTimer( GRYLTimer.GetCheckStatusTimerID() ) ;
@@ -2387,7 +2398,7 @@ void CClientMain::Render(void)
unsigned long dwKindCursor = CURSOR_NORMAL ;
{
PROFILE("Select Cursor");
////////////////////////// Ŀ<><C4BF> <20><><EFBFBD><EFBFBD>
////////////////////////// Ŀ<><C4BF> <20><><EFBFBD><EFBFBD>
if (m_pRYLGameData->m_dwKindCursor == CURSOR_NORMAL)
{
if (g_TooltipManager.m_ttRenderTarget)
@@ -2432,7 +2443,7 @@ void CClientMain::Render(void)
}
if (!m_pRYLGameData->m_bHardwareCursor && m_pRYLGameData->m_bShowCursor)
{ // <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> Ŀ<><C4BF>
{ // <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> Ŀ<><C4BF>
POINT *ptMousePos = g_DeviceInput.GetMouseLocal();
m_pRYLGameData->RenderCursor(m_BaseGraphicLayer.GetDevice(), ptMousePos->x, ptMousePos->y, m_pRYLGameData->m_dwKindCursor);
}
@@ -2447,7 +2458,7 @@ void CClientMain::Render(void)
{
PROFILE("Hardware Cursor");
if (m_pRYLGameData->m_bHardwareCursor)
{ // <20>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD> Ŀ<><C4BF>
{ // <20>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD> Ŀ<><C4BF>
switch (dwKindCursor)
{
case CURSOR_NORMAL:
@@ -2527,7 +2538,7 @@ void CClientMain::RenderMain()
{
PROFILE("Interface Effect");
/////////////// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
/////////////// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
DWORD effcullmode;
DWORD effzmode;
DWORD effalphamode;
@@ -2559,7 +2570,7 @@ void CClientMain::RenderMain()
m_BaseGraphicLayer.GetDevice()->SetRenderState(D3DRS_ZENABLE,effzmode);
m_BaseGraphicLayer.GetDevice()->SetRenderState(D3DRS_ALPHABLENDENABLE,effalphamode);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> state <20><><EFBFBD>º<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> state <20><>º<EFBFBD>
m_pRYLGameData->RenderClassEffect() ;
}
@@ -2567,7 +2578,7 @@ void CClientMain::RenderMain()
{
PROFILE("Etc Render");
/*
// edith 2008.01.18 ShowState ȭ<><20><>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// edith 2008.01.18 ShowState ȭ<><20><>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
m_BaseGraphicLayer.ShowState();
RYLCreature* pSelfCreature = RYLCreatureManager::Instance()->GetSelfCreature();
@@ -2600,8 +2611,8 @@ void CClientMain::RenderMain()
void CClientMain::SetDayTimer()
{
/* // <20>ҷ<EFBFBD><D2B7><EFBFBD> <20>̺<EFBFBD>Ʈ
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
/* // <20>ҷ<EFBFBD><D2B7><EFBFBD> <20>̺<EFBFBD>Ʈ
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
if(CRYLNetworkData::Instance()->m_dwPresentZone == SERVER_ID::ZONE1 ||
CRYLNetworkData::Instance()->m_dwPresentZone == SERVER_ID::ZONE2 ||
CRYLNetworkData::Instance()->m_dwPresentZone == SERVER_ID::ZONE12 ||
@@ -2665,7 +2676,7 @@ void CClientMain::ProcessScreenshot()
dwNumScreenShot = dwNumJPGScreenShot;
}
// GMTŸ<54>ӱ<EFBFBD><D3B1>ϱ<EFBFBD>
// GMTŸ<54>ӱ<EFBFBD><D3B1>ϱ<EFBFBD>
time_t rawtime;
tm * ptm;
time ( &rawtime );
@@ -2793,7 +2804,7 @@ void CClientMain::SetDisplay(void)
long lResult = ChangeDisplaySettings(&dm, 0);
if (lResult != DISP_CHANGE_SUCCESSFUL)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<EFBFBD>.
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD>Դϴ<D4B4>.
}
}
@@ -2841,24 +2852,24 @@ BOOL CALLBACK NPGameMonCallback(DWORD dwMsg, DWORD dwArg)
#ifndef NO_GAMEGUARD
switch (dwMsg)
{
// GameMon<6F><6E><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ä<><C3A4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<EFBFBD>.
// <20><><EFBFBD><EFBFBD> GameMon<6F><6E> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̹Ƿ<EFBFBD> <20><><EFBFBD>ӵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴϴ<DDB4>
// GameMon<6F><6E><EFBFBD><EFBFBD> <20><><EFBFBD> ä<><C3A4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Դϴ<D4B4>.
// <20><><EFBFBD><EFBFBD> GameMon<6F><6E> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD> <20><><EFBFBD><EFBFBD>̹Ƿ<CCB9> <20><><EFBFBD>ӵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴϴ<DDB4>
case NPGAMEMON_COMM_ERROR : // Communication error
MessageBox(g_ClientMain.m_hWnd, CRYLStringTable::m_strString[ 1302 ], CRYLStringTable::m_strString[21], MB_OK);
g_ClientMain.Destroy();
PostQuitMessage(WM_QUIT);
return FALSE; // <20>ݵ<EFBFBD><DDB5><EFBFBD> <20><><EFBFBD><EFBFBD>
return FALSE; // <20>ݵ<EFBFBD><DDB5> <20><><EFBFBD><EFBFBD>
// GameMon<6F><6E> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
// <20><><EFBFBD>ӵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴϴ<DDB4>.
// GameMon<6F><6E> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
// <20><><EFBFBD>ӵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴϴ<DDB4>.
case NPGAMEMON_COMM_CLOSE : // Communication closing
MessageBox(g_ClientMain.m_hWnd, CRYLStringTable::m_strString[ 1303 ], CRYLStringTable::m_strString[21], MB_OK);
g_ClientMain.Destroy();
PostQuitMessage(WM_QUIT);
return FALSE; // <20>ݵ<EFBFBD><DDB5><EFBFBD> <20><><EFBFBD><EFBFBD>
return FALSE; // <20>ݵ<EFBFBD><DDB5> <20><><EFBFBD><EFBFBD>
// GameMon <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
// <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD> dwArg <20><><EFBFBD><EFBFBD> <20>Բ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ְ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݴϴ<DDB4>.
// GameMon <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
// <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD> dwArg <20><><EFBFBD><EFBFBD> <20>Բ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ְ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݴϴ<DDB4>.
case NPGAMEMON_INIT_ERROR : // GameMon Init Error
{
char msg[1024];
@@ -2867,33 +2878,33 @@ BOOL CALLBACK NPGameMonCallback(DWORD dwMsg, DWORD dwArg)
g_ClientMain.Destroy();
PostQuitMessage(WM_QUIT);
}
return FALSE; // <20>ݵ<EFBFBD><DDB5><EFBFBD> <20><><EFBFBD><EFBFBD>
return FALSE; // <20>ݵ<EFBFBD><DDB5> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20>Բ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴϴ<DDB4>.
// <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20>Բ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴϴ<DDB4>.
case NPGAMEMON_SPEEDHACK : // SpeedHack detected
MessageBox(g_ClientMain.m_hWnd, CRYLStringTable::m_strString[911], CRYLStringTable::m_strString[21], MB_OK);
g_ClientMain.Destroy();
PostQuitMessage(WM_QUIT);
return FALSE; // <20><><EFBFBD><EFBFBD>
return FALSE; // <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><EFBFBD>ϴ<EFBFBD>.
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׽<EFBFBD><D7BD>ϴ<EFBFBD>.
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
case NPGAMEMON_GAMEHACK_KILLED : // GameHack killed
MessageBox(g_ClientMain.m_hWnd, CRYLStringTable::m_strString[ 1305 ], CRYLStringTable::m_strString[21], MB_OK);
return true; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
return true; // <20><><EFBFBD> <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰ߵǾ<DFB5><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><20>Ұ<EFBFBD><D2B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̹Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴϴ<DDB4>.
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰ߵǾ<DFB5><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><20>Ұ<EFBFBD><D2B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>̹Ƿ<CCB9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴϴ<DDB4>.
case NPGAMEMON_GAMEHACK_DETECT : // GameHack detected
MessageBox(g_ClientMain.m_hWnd, CRYLStringTable::m_strString[ 1306 ], CRYLStringTable::m_strString[21], MB_OK);
g_ClientMain.Destroy();
PostQuitMessage(WM_QUIT);
return FALSE; // <20><><EFBFBD><EFBFBD>
return FALSE; // <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ǽɵǴ<C9B5> <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>Դϴ<D4B4>.
// Ȥ<><C8A4> <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD> <20><><EFBFBD>Ӱ<EFBFBD><D3B0><20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.
// <20><><EFBFBD>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ְ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴϴ<DDB4>.
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ǽɵǴ<C9B5> <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>Դϴ<D4B4>.
// Ȥ<><C8A4> <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD> <20><><EFBFBD>Ӱ<EFBFBD><D3B0><20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.
// <20><><EFBFBD>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>غ<EFBFBD><D8BA><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ְ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴϴ<DDB4>.
case NPGAMEMON_GAMEHACK_DOUBT : // GameHack doubt
MessageBox(g_ClientMain.m_hWnd, CRYLStringTable::m_strString[ 2847 ], CRYLStringTable::m_strString[21], MB_OK);
g_ClientMain.Destroy();
@@ -2901,13 +2912,13 @@ BOOL CALLBACK NPGameMonCallback(DWORD dwMsg, DWORD dwArg)
return FALSE ;
case NPGAMEMON_CHECK_CSAUTH : // CSAuth
// edith 2009.08.11 <20><><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD> 2.5 <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD>
// edith 2009.08.11 <20><><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD> 2.5 <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD>
// CRYLNetworkData::Instance()->m_GGAuthCode.m_dwAuthCode = dwArg;
// CRYLNetworkData::Instance()->m_GGAuthCode.SetFlag(GGAuthCode::GG_AUTH_CODE_1);
return TRUE;
case NPGAMEMON_CHECK_CSAUTH2 : // CSAuth2
// edith 2009.08.11 <20><><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD> 2.5 <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD>
// edith 2009.08.11 <20><><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD> 2.5 <20><><EFBFBD>׷<EFBFBD><D7B7>̵<EFBFBD>
::memcpy(&CRYLNetworkData::Instance()->m_GGAuthCode.m_AuthCode2, (PVOID)dwArg, sizeof(GG_AUTH_DATA));
CRYLNetworkData::Instance()->m_GGAuthCode.SetFlag(GGAuthCode::GG_AUTH_CODE_2);
/*

View File

@@ -10,6 +10,7 @@
#include <fstream>
#include <set>
#include "GMMemory.h"
#include <windows.h>
typedef unsigned char byte;
@@ -86,14 +87,14 @@ void File_XOR( const char * szSrcFilename, const char * szDstFilename, int keyVa
if( !infile.is_open() )
{
ErrorMessage2( "ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.(At File_XOR) : %s", szSrcFilename );
ErrorMessage2( "ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.(At File_XOR) : %s", szSrcFilename );
}
fstream outfile( szDstFilename, ios_base::out | ios_base::binary );
if( !outfile.is_open() )
{
ErrorMessage2( "ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.(At File_XOR) : %s", szDstFilename );
ErrorMessage2( "ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.(At File_XOR) : %s", szDstFilename );
}
infile.seekg( 0, ios_base::end );
@@ -119,7 +120,7 @@ void CVirtualMachine::Create( const char * szFilename )
ifstream file( szFilename, ios::binary | ios::in );
if( !file.is_open() )
ErrorMessage2( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȭ<><C8AD><EFBFBD><EFBFBD> ã<><C3A3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. (At CVirtualMachine::Create) : %s", szFilename );
ErrorMessage2( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȭ<><C8AD><EFBFBD><EFBFBD> ã<><C3A3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. (At CVirtualMachine::Create) : %s", szFilename );
file.seekg( 0, ios_base::end );
unsigned int filesize = (unsigned int)file.tellg();
@@ -132,6 +133,16 @@ void CVirtualMachine::Create( const char * szFilename )
file.read( pBuf, filesize );
Data_XOR( pBuf, filesize, xor_key_valueT );
// 복호?<3F>된 ?<3F>이?<3F><>? 로그 ?<3F><EFBFBD>??<3F>??(?<3F>버깅용)
char szLogPath[MAX_PATH];
strcpy(szLogPath, szFilename);
strcat(szLogPath, ".decrypted.log");
FILE* fpLog = fopen(szLogPath, "wb");
if (fpLog) {
fwrite(pBuf, 1, filesize, fpLog);
fclose(fpLog);
}
Create( pBuf, filesize );
delete [] pBuf;
@@ -141,7 +152,7 @@ void CVirtualMachine::Create( const char * szFilename )
ifstream file( szFilename, ios::binary | ios::in );
if( !file.is_open() )
ErrorMessage2( "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȭ<><C8AD><EFBFBD><EFBFBD> ã<><C3A3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. (At CVirtualMachine::Create) : %s", szFilename );
ErrorMessage2( "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȭ<><C8AD><EFBFBD><EFBFBD> ã<><C3A3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. (At CVirtualMachine::Create) : %s", szFilename );
m_pRelocation->Create( file );
@@ -222,7 +233,11 @@ void CVirtualMachine::Create( const void * pDataBuf, unsigned DataSize )
TotalBufferSize = GlobalVarBufferSize + StringBufferSize + m_iCodeSize;
// Use VirtualAlloc for executable code buffer
m_pGlobalVars = m_pBuffer = (char*)VirtualAlloc(NULL, TotalBufferSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if (m_pBuffer == NULL) {
m_pGlobalVars = m_pBuffer = new char[TotalBufferSize];
}
m_pStringBuffer = ((byte*)m_pGlobalVars) + GlobalVarBufferSize;
m_pCodeBuffer = ((byte*)m_pStringBuffer) + StringBufferSize;
@@ -267,7 +282,11 @@ void CVirtualMachine::Create( CIntermediateCode & IMCode, CSymbolTable & Symbo
int StringBufferSize = SymbolTable.GetStringBufferSize();
int BufSize = GlobalVarsSize + StringBufferSize + m_iCodeSize;
// Use VirtualAlloc for executable code buffer
m_pGlobalVars = m_pBuffer = (char*)VirtualAlloc(NULL, BufSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if (m_pBuffer == NULL) {
m_pGlobalVars = m_pBuffer = new char[ BufSize ];
}
memset( m_pGlobalVars, 0, GlobalVarsSize );
@@ -277,13 +296,13 @@ void CVirtualMachine::Create( CIntermediateCode & IMCode, CSymbolTable & Symbo
m_pCodeBuffer = (char*)m_pStringBuffer + StringBufferSize;
if( IMCode.ToMachineCode( m_pCodeBuffer, m_pRelocation ) != m_iCodeSize )
ScriptSystemError( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20>ٸ<EFBFBD><D9B8>ϴ<EFBFBD>.( at CVirtualMachine::Create )" );
ScriptSystemError( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20>ٸ<EFBFBD><D9B8>ϴ<EFBFBD>.( at CVirtualMachine::Create )" );
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̼<EFBFBD>
m_pRelocation->Relocate( m_pGlobalVars, m_pStringBuffer, m_pCodeBuffer );
m_bRelocated = true;
//<2F>Լ<EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>Լ<EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>?
typedef CIntermediateCode::FUNCTABLE FUNCTABLE;
FUNCTABLE & funcTable = IMCode.GetFuncTable();
@@ -319,7 +338,15 @@ void CVirtualMachine::SetSysVars()
void CVirtualMachine::Destroy()
{
// Check if buffer was allocated with VirtualAlloc (aligned to 4KB/64KB boundary typically)
if (m_pBuffer != NULL) {
MEMORY_BASIC_INFORMATION mbi;
if (VirtualQuery(m_pBuffer, &mbi, sizeof(mbi)) && mbi.AllocationBase == m_pBuffer) {
VirtualFree(m_pBuffer, 0, MEM_RELEASE);
} else {
delete [] m_pBuffer;
}
}
m_pBuffer = m_pGlobalVars = m_pStringBuffer = m_pCodeBuffer = NULL;
m_iCodeSize = 0;
m_pFunctionMap->clear();
@@ -334,18 +361,18 @@ void CVirtualMachine::Destroy()
}
///////////////////////////////////////////////////////////////////////////////////
// ȭ<><C8AD> <20><><EFBFBD><EFBFBD>
// 1. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Relocation <20><><EFBFBD><EFBFBD>(int)
// 2. <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD> Relocation <20><><EFBFBD><EFBFBD>(int)
// 3. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Relocation Table
// 4. <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD> Relocation Table
// 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ũ<><C5A9>(int)
// 6. <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD> ũ<><C5A9>(int)
// 7. <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD> ũ<><C5A9>(int)
// 8. <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD>
// 9. <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD>
// 10. <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 11. < <20><><EFBFBD>ڿ<EFBFBD>, <20>Լ<EFBFBD> Ÿ<><C5B8>(long), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(long) > * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ȭ<><C8AD> <20><><EFBFBD><EFBFBD>
// 1. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Relocation <20><><EFBFBD><EFBFBD>(int)
// 2. <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD>?Relocation <20><><EFBFBD><EFBFBD>(int)
// 3. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Relocation Table
// 4. <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD>?Relocation Table
// 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ũ<><C5A9>(int)
// 6. <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD> ũ<><C5A9>(int)
// 7. <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD> ũ<><C5A9>(int)
// 8. <20><><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD>
// 9. <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD>
// 10. <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 11. < <20><><EFBFBD>ڿ<EFBFBD>, <20>Լ<EFBFBD> Ÿ<><C5B8>(long), <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(long) > * <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///////////////////////////////////////////////////////////////////////////////////
bool CVirtualMachine::Save( const char * szFilename )
@@ -412,6 +439,31 @@ bool CVirtualMachine::Save( const char * szFilename )
void CVirtualMachine::Execute()
{
// 디버깅: 실행 전 상태 로그
FILE* fpLog = fopen("script_execute.log", "a");
if (fpLog) {
fprintf(fpLog, "=== Execute Start ===\n");
fprintf(fpLog, "m_pCodeBuffer: %p\n", m_pCodeBuffer);
fprintf(fpLog, "m_iCodeSize: %d\n", m_iCodeSize);
fprintf(fpLog, "m_pGlobalVars: %p\n", m_pGlobalVars);
fprintf(fpLog, "m_pStringBuffer: %p\n", m_pStringBuffer);
fprintf(fpLog, "m_bRelocated: %d\n", m_bRelocated);
// 코드 버퍼 첫 16바이트 덤프
if (m_pCodeBuffer && m_iCodeSize > 0) {
fprintf(fpLog, "Code buffer first 16 bytes: ");
unsigned char* p = (unsigned char*)m_pCodeBuffer;
int dumpSize = (m_iCodeSize < 16) ? m_iCodeSize : 16;
for (int i = 0; i < dumpSize; i++) {
fprintf(fpLog, "%02X ", p[i]);
}
fprintf(fpLog, "\n");
}
fprintf(fpLog, "===================\n");
fflush(fpLog);
fclose(fpLog);
}
void * pCodeBuffer = m_pCodeBuffer;
__asm call pCodeBuffer;
}
@@ -460,18 +512,18 @@ union long_byte
};
///////////////////////////////////////////////////////////////////////////////////
//Native<76>Լ<EFBFBD><D4BC><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>ε<EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>
//Native<76>Լ<EFBFBD><D4BC><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>ε<EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD>?
//
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20>Լ<EFBFBD><D4BC><EFBFBD> <20><> <20><> <20><>ġ<EFBFBD><C4A1> <20>Ѵ<EFBFBD>. ( <20><><EFBFBD><EFBFBD> <20>ӵ<EFBFBD><D3B5><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. )
// 1-1. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ְ<EFBFBD>, <20><><EFBFBD>ǰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><20>Լ<EFBFBD> <20>ڵ忡<DAB5><E5BFA1> ó<><C3B3> <20>κп<CEBA> 5<><35><EFBFBD><EFBFBD>Ʈ <20>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD><EFBFBD>(nop)<29><> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>.
// 1-2. RegisterFunction<6F><6E> ȣ<><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 1-1<><31><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>κп<CEBA> call <native function><3E><> ret<65><74> <20><><EFBFBD><EFBFBD><EFBFBD>ִ´<EFBFBD>.
// <09>󸶳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20><><EFBFBD><EFBFBD> <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> nop<6F><70> 2<><32> <20>̻<EFBFBD> <20>߰<EFBFBD><DFB0>ǰ<EFBFBD>, native call<6C><6C> <20><><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD> <20>ȴ<EFBFBD>.
// Empty Function<6F><6E> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
//<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>?: <20>Լ<EFBFBD><D4BC><EFBFBD> <20><> <20><> <20><>ġ<EFBFBD><C4A1> <20>Ѵ<EFBFBD>. ( <20><><EFBFBD><EFBFBD> <20>ӵ<EFBFBD><D3B5><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. )
// 1-1. <20><><EFBFBD><EFBFBD> <20>ְ<EFBFBD>, <20><><EFBFBD>ǰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><20>Լ<EFBFBD> <20>ڵ忡<DAB5><E5BFA1> ó<><C3B3> <20>κп<CEBA> 5<><35><EFBFBD><EFBFBD>Ʈ <20>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD><EFBFBD>(nop)<29><> <20><><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>.
// 1-2. RegisterFunction<6F><6E> ȣ<><C8A3><EFBFBD><EFBFBD><EFBFBD>?<EFBFBD><EFBFBD> 1-1<><31><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>κп<CEBA> call <native function><3E><> ret<65><74> <20><><EFBFBD><EFBFBD>ִ´<D6B4>?
// <09>󸶳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20><><EFBFBD>?<EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> nop<6F><70> 2<><32> <20>̻<EFBFBD> <20>߰<EFBFBD><DFB0>ǰ<EFBFBD>, native call<6C><6C> <20><><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD> <20>ȴ<EFBFBD>.
// Empty Function<6F><6E> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
//
//<2F>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD> : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD> <20>ּҸ<D6BC> <20>ٲ۴<D9B2>.( <20><><EFBFBD><EFBFBD> <20>ӵ<EFBFBD><D3B5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. )
// 2-1. <20><><EFBFBD><EFBFBD> <EFBFBD>Լ<EFBFBD> ȣ<><C8A3> <20>κ<EFBFBD><CEBA><EFBFBD> Relocation Tableó<65><C3B3> call table<6C><65> <20><><EFBFBD><EFBFBD><EFBFBD>صд<D8B5>.
// 2-2. RegisterFunction<6F><6E> ȣ<><C8A3><EFBFBD>Ǿ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> call table<6C><65> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> call<6C>ϰ<EFBFBD> <20>ִ<EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٲ۴<D9B2>.
// call table<6C><65>? map< string, pair< SFuncType, vector<int> > >
//<2F>ٸ<EFBFBD> <20><><EFBFBD>?: <20><><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>?<EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD>?<EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD> <20>ּҸ<D6BC> <20>ٲ۴<D9B2>.( <20><><EFBFBD><EFBFBD> <20>ӵ<EFBFBD><D3B5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. )
// 2-1. <20><><EFBFBD>?<EFBFBD>Լ<EFBFBD> ȣ<><C8A3> <20>κ<EFBFBD><CEBA><EFBFBD> Relocation Tableó<65><C3B3> call table<6C><65> <20><><EFBFBD><EFBFBD><EFBFBD>صд<D8B5>.
// 2-2. RegisterFunction<6F><6E> ȣ<><C8A3>Ǿ<EFBFBD><C7BE><EFBFBD>?<EFBFBD><EFBFBD> call table<6C><65> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> call<6C>ϰ<EFBFBD> <20>ִ<EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٲ۴<D9B2>.
// call table<6C><65>? map< string, pair< SFuncType, vector<int> > >
///////////////////////////////////////////////////////////////////////////////////
@@ -490,9 +542,9 @@ void CVirtualMachine::RegisterFunction( ANY_FUNCTION FuncPtr, eDataType return
byte * pFunc = (byte*)GetFuncPtr( *m_pFunctionMap, szFuncName, funcType );
if( pFunc == NULL )
ErrorMessage2( "<EFBFBD>Լ<EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><EFBFBD>ϴ<EFBFBD>. <20>Լ<EFBFBD><D4BC><EFBFBD> ã<><C3A3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. : %s", funcType.ToString( szFuncName ) );
ErrorMessage2( "<EFBFBD>Լ<EFBFBD> <20><>Ͽ<EFBFBD>?<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><EFBFBD>ϴ<EFBFBD>. <20>Լ<EFBFBD><D4BC><EFBFBD> ã<><C3A3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. : %s", funcType.ToString( szFuncName ) );
if( pFunc[3] != 0x90 ) //nop<6F><70> <20>ƴ<EFBFBD> <20><>
if( pFunc[3] != 0x90 ) //nop<6F><70> <20>ƴ<EFBFBD> <20><>
ScriptSystemError( "RegisterFunction Error!!( at CVirtualMachine::RegisterFunction )" );
int nArg = funcType.GetArgCount();
@@ -528,7 +580,7 @@ ScriptFunc CVirtualMachine::GetScriptFunction( eDataType returnType, const char
void * pFunc = GetFuncPtr( *m_pFunctionMap, szFuncName, funcType );
if( pFunc == NULL )
ErrorMessage2( "<EFBFBD><EFBFBD>ũ<EFBFBD><EFBFBD>Ʈ <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>. <20>Լ<EFBFBD><D4BC><EFBFBD> ã<><C3A3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. : %s", funcType.ToString( szFuncName ) );
ErrorMessage2( "<EFBFBD><EFBFBD>ũ<EFBFBD><EFBFBD>Ʈ <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>. <20>Լ<EFBFBD><D4BC><EFBFBD> ã<><C3A3> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. : %s", funcType.ToString( szFuncName ) );
return ScriptFunc( pFunc, funcType.m_data );
}

View File

@@ -1,3 +1,4 @@
echo copy file
copy *.* S:\YouxiLand\ROW
copy *.* F:\YouxiLand\ROW
pause

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>