hi hallo ich habe einen source haben ihn komplet und die exen da eingefügt wen ich mich einlogen will kommt immer falsches pw ob wohl es richtig ist so wie mir gesagt wurde ligt es an dem hash wie ädere ich ihn ???
über neutz.cpp habe ich gemacht
der rest
was mache ich falsch ????
über neutz.cpp habe ich gemacht
#include "stdafx.h"
#include "AppDefine.h"
#include "Material.h"
#include "DialogMsg.h"
#include "party.h"
#include "../_Common/ModelObject.h"
#include "../_Common/HwOption.h"
#include "../_UnhandledException/ExceptionHandler.h"
#include "../_Common/ParticleMng.h"
#include "TailEffectMng.h"
#include "Sfx.h"
#include "definetext.h"
#include "DPClient.h"
#include "DPLoginClient.h"
#include "dpcertified.h"
#include "guild.h"
#include "guildwar.h"
#include "resource.h"
#include "Chatting.h"
#include "webbox.h"
#include "network.h"
#include "NPGameLib4.h"
#include "defineSound.h"
#include "ClientMsg.h"
#if __VER >= 12 // __MOD_TUTORIAL
#include "WndBase.h"
#include "WndGuideSystem.h"
#endif
#include "WorldMap.h"
#include "tools.h"
#if __VER >= 15 // __GUILD_HOUSE
#include "GuildHouse.h"
#endif
#ifdef __CERTIFIER_COLLECTING_SYSTEM
#include "DPCollectClient.h"
#endif // __CERTIFIER_COLLECTING_SYSTEM
//////////////////////////////////////////////////////////////////////////////
// functions declare
//////////////////////////////////////////////////////////////////////////////
extern void PreInitNProtect();
extern CNPGameLib* GetNProtect();
void __cdecl LoadProperty( void* );
//////////////////////////////////////////////////////////////////////////////
// global variable
//////////////////////////////////////////////////////////////////////////////
extern CGuildWarMng g_GuildWarMng;
extern CGuildMng g_GuildMng;
extern CDPClient g_DPlay;
extern CDPLoginClient g_dpLoginClient;
extern CDPCertified g_dpCertified;
extern CSfxTexture g_SfxTex;
extern CSfxMng g_SfxMng;
extern CSfxObjMng g_SfxObjMng;
extern CSfxMeshMng g_SfxMeshMng;
extern HANDLE g_hMutex;
CDamageNumMng g_DamageNumMng;
CModelObject g_Shadow;
//////////////////////////////////////////////////////////////////////////////
// global enum
//////////////////////////////////////////////////////////////////////////////
enum
{
NOTIFY_STATUS_NONE,
NOTIFY_STATUS_45MIN,
NOTIFY_STATUS_50MIN,
NOTIFY_STATUS_55MIN,
NOTIFY_STATUS_56MIN,
NOTIFY_STATUS_57MIN,
NOTIFY_STATUS_58MIN,
NOTIFY_STATUS_59MIN,
};
#ifdef __GAME_GRADE_SYSTEM
#ifdef __CLIENT
const FLOAT CNeuzApp::GAME_GRADE_MARK_FADING_SPEED( 800.0F );
#endif // __CLIENT
#endif // __GAME_GRADE_SYSTEM
//////////////////////////////////////////////////////////////////////////////
// global function
//////////////////////////////////////////////////////////////////////////////
void SetMouseCursor( DWORD dwCursor )
{
g_Neuz.SetDeviceCursor( g_Neuz.m_ahCursor[ dwCursor ] );
}
//////////////////////////////////////////////////////////////////////////////
// CNeuzApp
//////////////////////////////////////////////////////////////////////////////
CNeuzApp::CNeuzApp()
{
m_dwTimeOutDis = 0xffffffff;
m_dwTimeReSkillPoint = 0xffffffff;
#ifdef _DEBUG
m_bStartFullscreen = FALSE;
#else
m_bStartFullscreen = TRUE;
#endif
m_d3dEnumeration.AppUsesDepthBuffer = TRUE;
m_d3dEnumeration.AppMinDepthBits = 16;
m_d3dEnumeration.AppUsesMixedVP = TRUE;
#ifdef __XUZHU
g_GameTimer.m_bFixed = TRUE;
g_GameTimer.m_nHour = 12; // ¾ðÁ¦³ª ³·ÀÌ µÇµµ·Ï
#endif
#ifdef __TWN_LOGIN0816
m_szSessionPwd[0] = '\0';
#endif // __TWN_LOGIN0816
m_dwCreationWidth = FULLSCREEN_WIDTH;
m_dwCreationHeight = FULLSCREEN_HEIGHT - GetSystemMetrics( SM_CYMENU );
m_strWindowTitle = _T( "FLYFF" );
g_pD3dApp = this;
m_bLButtonDown = FALSE;
m_bRButtonDown = FALSE;
m_bFrameSkip = TRUE;
m_dwTempMessage = 0;
m_lpCertifierAddr[0] = '\0';
memset( m_lpCacheAddr, 0, sizeof(TCHAR) * 16 );
m_uCachePort = PN_CACHESRVR;
memset( &m_loginSI, 0x00, sizeof(m_loginSI) );
m_dwShoutLimitSecond = 0;
m_nShoutLimitCount = 0;
m_szAccount [ 0 ] = 0; // ¾îÄ«¿îÆ®
m_szPassword [ 0 ] = 0; // password
#ifdef __GPAUTH_01
m_bGPotatoAuth = FALSE;
*m_szGPotatoNo = '\0';
#ifdef __GPAUTH_02
*m_szCheck = '\0';
#endif // __GPAUTH_02
#endif // __GPAUTH_01
m_szCaptureFileName[ 0 ] = 0;
m_bCapture = FALSE;
m_nCaptureCnt = 0;
g_pBipedMesh = NULL;
m_dwSys = 0;
m_bQuit = FALSE;
m_uIdofMulti = NULL_ID;
m_b18Server = FALSE;
m_dwAuthKey = 0;
m_cbAccountFlag = 0X00;
m_dwTimeLeft = 0;
m_dwCurTick = 0;
m_nLeftTimeNotifyStatus = NOTIFY_STATUS_NONE;
m_bActiveNeuz = TRUE;
m_dwSummonPartyData = 0;
m_dwSummonPartyObjid = 0;
ZeroMemory( m_szSummonPartyWorldName, sizeof( m_szSummonPartyWorldName ) );
#if __VER >= 12 // __ITEMCREATEMON_S0602
m_vCursorPos = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
m_pCreateMonItem = NULL;
#endif // __ITEMCREATEMON_S0602
m_szWhisperName[0] = '\0';
#ifdef __THROUGHPORTAL0810
m_bThroughPortal = FALSE;
#else // __THROUGHPORTAL0810
m_bHanGame = FALSE;
#endif // __THROUGHPORTAL0810
m_bEncryptPWD = TRUE;
m_idPlayer = 0;
m_hThread = INVALID_HANDLE_VALUE;
memset( m_apPlayer, 0, sizeof(m_apPlayer) );
#if __VER >= 11 // __MOD_VENDOR
memset( m_aSavedInven, 0, sizeof(m_aSavedInven) );
#endif
for(int i = 0; i < 6; i++) m_pMasterIcon[i] = NULL;
m_pHeroIcon = NULL;
#if __VER >= 15 // __2ND_PASSWORD_SYSTEM
m_n2ndPasswordNumber = -1;
#endif // __2ND_PASSWORD_SYSTEM
#ifdef __GAME_GRADE_SYSTEM
#ifdef __CLIENT
m_dwTimeGameGradeMarkRendering = 0xffffffff;
m_bGameGradeMarkRenderingSwitch = FALSE;
m_nGameGradeMarkAlpha = GAME_GRADE_MARK_MINIMUM_ALPHA;
m_eGameGradeMarkState = FADE_IN;
m_dwTimeOld = g_tmCurrent;
m_dwTimeGameGradeMarkShowing = 0xffffffff;
#endif // __CLIENT
#endif // __GAME_GRADE_SYSTEM
pOldModalWindow = NULL;
}
BOOL CNeuzApp::LoadOption()
{
g_Option.Load( "neuz.ini" );
#ifdef _DEBUG
g_Option.LoadToolTip( "ToolTip.ini" );
#endif // _DEBUG
// È*¸é »çÀÌÁî ¼¼ÆÃ
FULLSCREEN_WIDTH = g_Option.m_nResWidth;
FULLSCREEN_HEIGHT = g_Option.m_nResHeight;
SetLODDetail( g_Option.m_nViewArea );
m_dwCreationWidth = FULLSCREEN_WIDTH;
m_dwCreationHeight = FULLSCREEN_HEIGHT - GetSystemMetrics( SM_CYMENU );
return TRUE;
}
HRESULT CNeuzApp::ConfirmDevice( D3DCAPS9* pCaps, DWORD dwBehavior,
D3DFORMAT adapterFormat, D3DFORMAT backBufferFormat )
{
// ½ºÅ°´× ÄÚµå
if( dwBehavior & D3DCREATE_PUREDEVICE )
return E_FAIL; // GetTransform doesn't work on PUREDEVICE
if( pCaps->VertexShaderVersion < D3DVS_VERSION(1,1) ) // ¹öÅØ½º½¦ÀÌ´õ 1.1À» Áö¿ø ¸øÇϴ°¡.
{
g_bUsableVS = FALSE; // ¹öÅØ½º½¦ÀÌ´õ »ç¿ë¾ÈµÊ.
if( dwBehavior & D3DCREATE_HARDWARE_VERTEXPROCESSING ) // hw vp´Â »ç¿ë¸øÇÔ
return E_FAIL;
}
// Check that the device can blend vertices with at least two matrices
// (Software can always do up to 4 blend matrices)
if( (dwBehavior & D3DCREATE_HARDWARE_VERTEXPROCESSING ) ||
(dwBehavior & D3DCREATE_MIXED_VERTEXPROCESSING ) )
{
if( pCaps->MaxPointSize <= 1.0f )
return E_FAIL;
if( pCaps->MaxVertexBlendMatrices < 2 )
return E_FAIL;
}
// If this is a TnL device, make sure it supports directional lights
if( (dwBehavior & D3DCREATE_HARDWARE_VERTEXPROCESSING ) ||
(dwBehavior & D3DCREATE_MIXED_VERTEXPROCESSING ) )
{
if( !(pCaps->VertexProcessingCaps & D3DVTXPCAPS_DIRECTIONALLIGHTS ) )
return E_FAIL;
}
if( pCaps->RasterCaps & D3DPRASTERCAPS_FOGVERTEX )
return S_OK;
return S_OK;
}
//
// µð¹ÙÀ̽º »ý¼ºÈÄ ´Ü Çѹø ½ÇÇàÇÑ´Ù.
//
HRESULT CNeuzApp::OneTimeSceneInit()
{
CNetwork::GetInstance().StartLog();
// »ç¿îµå ÃʱâÈ*
HRESULT hr = g_SoundMng.Initialize( GetSafeHwnd(), DSSCL_PRIORITY, 2, 22050, 16 );
InitCustomSound( FAILED(hr) ? FALSE : TRUE );
g_SoundMng.m_nSoundVolume = (int)( (-1) * (1.0f - g_Option.m_fEffectVolume) * 5000 );
::SetVolume( g_Option.m_fBGMVolume );
m_ahCursor[ CUR_ATTACK ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_ATTACK ) );
m_ahCursor[ CUR_BASE ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_BASE ) ); // IDC_BASE
m_ahCursor[ CUR_CAMERA ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_CAMERA ) );
m_ahCursor[ CUR_CONTROL ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_CONTROL ) );
m_ahCursor[ CUR_DELAY ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_DELAY ) );
m_ahCursor[ CUR_EDIT ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_EDIT ) );
m_ahCursor[ CUR_GETITEM ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_GETITEM ) );
m_ahCursor[ CUR_HELP ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_CURSOR2 ) );
m_ahCursor[ CUR_NO ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_CURSOR3 ) );
m_ahCursor[ CUR_NPC ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_NPC ) );
m_ahCursor[ CUR_SELECT ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_SELECT ) );
m_ahCursor[ CUR_RESIZE_HORI ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_RESIZE_HORI ) );
m_ahCursor[ CUR_RESIZE_VERT ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_RESIZE_VERT ) );
m_ahCursor[ CUR_RESIZE_HV1 ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_RESIZE_HV1 ) );
m_ahCursor[ CUR_RESIZE_HV2 ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_RESIZE_HV2 ) );
m_ahCursor[ CUR_DOOR ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_DOOR ) );
m_ahCursor[ CUR_GATE ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_GATE ) );
m_ahCursor[ CUR_LEVER ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_LEVER ) );
m_ahCursor[ CUR_HAMMER ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_HAMMER ) );
CWndBase::m_hDefaultCursor = m_ahCursor[ CUR_BASE ];
CWndEdit::m_hEditCursor = m_ahCursor[ CUR_EDIT ];
return S_OK;
}
void CNeuzApp::InitNProtect()
{
CScript s1;
if( s1.Load(MakePath( DIR_CLIENT, "GameGuard.txt.txt" ) ) )
s1.LoadString();
CScript s2;
if( s2.Load(MakePath( DIR_CLIENT, "GameGuard.inc" ) ) )
{
s2.GetToken();
while( s2.tok != FINISHED )
{
m_strArray.Add( s2.Token );
s2.GetToken();
}
}
PreInitNProtect();
DWORD dwResult = GetNProtect()->Init();
if( dwResult != NPGAMEMON_SUCCESS )
{
TCHAR msg[256];
LPCSTR lpszMsg;
switch (dwResult)
{
case NPGAMEMON_ERROR_EXIST:
lpszMsg = m_strArray.GetAt(0);//"°ÔÀÓ°¡µå°¡ ÀÌ¹Ì ½ÇÇà Áß ÀÔ´Ï´Ù. ÀçºÎÆÃ ÈÄ ´Ù½Ã ½ÇÇàÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGAMEMON_ERROR_GAME_EXIST:
lpszMsg = m_strArray.GetAt(1);//"°ÔÀÓÀÌ Áߺ¹ ½ÇÇàµÇ¾ú°Å³ª °ÔÀÓ°¡µå°¡ ÀÌ¹Ì ½ÇÇà Áß ÀÔ´Ï´Ù. °ÔÀÓ Á¾·á ÈÄ ´Ù½Ã ½ÇÇàÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGAMEMON_ERROR_INIT:
lpszMsg = m_strArray.GetAt(2);//"°ÔÀÓ°¡µå ÃʱâÈ* ¿¡·¯ÀÔ´Ï´Ù. ÀçºÎÆÃ ÈÄ ´Ù½Ã ½ÇÇàÇØº¸°Å³ª Ãæµ¹ÇÒ ¼ö ÀÖ´Â ´Ù¸¥ ÇÁ·Î±×·¥µéÀ» Á¾·áÇÑ ÈÄ ½ÇÇàÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGAMEMON_ERROR_AUTH_GAMEGUARD:
case NPGAMEMON_ERROR_NFOUND_GG:
case NPGAMEMON_ERROR_AUTH_INI:
case NPGAMEMON_ERROR_NFOUND_INI:
lpszMsg = m_strArray.GetAt(3);//"°ÔÀÓ°¡µå ÆÄÀÏÀÌ ¾ø°Å³ª º¯Á¶µÇ¾ú½À´Ï´Ù. °ÔÀÓ°¡µå ¼Â¾÷ ÆÄÀÏÀ» ¼³Ä¡Çغ¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGAMEMON_ERROR_CRYPTOAPI:
lpszMsg = m_strArray.GetAt(4);//"À©µµ¿ìÀÇ ÀϺΠ½Ã½ºÅÛ ÆÄÀÏÀÌ ¼Õ»óµÇ¾ú½À´Ï´Ù. ÀÎÅÍ³Ý ÀͽºÇ÷η¯(IE)¸¦ ´Ù½Ã ¼³Ä¡Çغ¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGAMEMON_ERROR_EXECUTE:
lpszMsg = m_strArray.GetAt(5);//"°ÔÀÓ°¡µå ½ÇÇà¿¡ ½ÇÆÐÇß½À´Ï´Ù. °ÔÀÓ°¡µå ¼Â¾÷ ÆÄÀÏÀ» ´Ù½Ã ¼³Ä¡Çغ¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGAMEMON_ERROR_ILLEGAL_PRG:
lpszMsg = m_strArray.GetAt(6);//"ºÒ¹ý ÇÁ·Î±×·¥ÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù. ºÒÇÊ¿äÇÑ ÇÁ·Î±×·¥À» Á¾·áÇÑ ÈÄ ´Ù½Ã ½ÇÇàÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGMUP_ERROR_ABORT:
lpszMsg = m_strArray.GetAt(7);//"°ÔÀÓ°¡µå ¾÷µ¥ÀÌÆ®¸¦ Ãë¼ÒÇϼ̽À´Ï´Ù. Á¢¼ÓÀÌ °è¼Ó µÇÁö ¾ÊÀ» °æ¿ì ÀÎÅÍ³Ý ¹× ¹æÈ*º® »óŸ¦ Á¡°ËÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGMUP_ERROR_CONNECT:
case NPGMUP_ERROR_DOWNCFG:
lpszMsg = m_strArray.GetAt(8);//"°ÔÀÓ°¡µå ¾÷µ¥ÀÌÆ® ¼*¹ö Á¢¼Ó¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù. Àá½Ã ÈÄ Àç½Ãµµ ÇØº¸°Å³ª, ÀÎÅÍ³Ý ¹× ¹æÈ*º® »óŸ¦ Á¡°ËÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGMUP_ERROR_AUTH:
lpszMsg = m_strArray.GetAt(9);//"°ÔÀÓ°¡µå ¾÷µ¥ÀÌÆ®¸¦ ¿Ï·áÇÏÁö ¸ø Çß½À´Ï´Ù. ¹ÙÀÌ·¯½º °Ë»ç¸¦ ÇØº¸½Ã°Å³ª, PC °ü¸® ÇÁ·Î±×·¥À» »ç¿ëÇÏ½Ã¸é ¼³Á¤À» Á¶Á¤ÇÑ ÈÄ °ÔÀÓÀ» ½ÇÇàÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGAMEMON_ERROR_NPSCAN:
default:
// ÀûÀýÇÑ Á¾·á ¸Þ½ÃÁö Ãâ·Â, UI ÃʱâÈ* ÈĶó¸é MessageBox ´ë½Å °ÔÀÓ UI¸¦ »ç¿ëÇØµµ µÊ
//wsprintf( msg, "°ÔÀÓ°¡µå ½ÇÇà ¿¡·¯ : %lu", dwResult );
wsprintf( msg, m_strArray.GetAt(10), dwResult );
lpszMsg = msg;
break;
}
if( lpszMsg )
::Error( "nProtect GameGuard : %s", lpszMsg );
// MessageBox( GetSafeHwnd(), lpszMsg, "nProtect GameGuard", MB_OK );
ExitProcess( -1 );
}
GetNProtect()->SetHwnd( GetSafeHwnd() );
}
///////////////////////////////////////////////////////
HRESULT CNeuzApp::RestoreDeviceObjects()
{
#ifdef __YENV
if( m_pEffect != NULL )
m_pEffect->OnResetDevice();
if( FAILED( LoadTextureFromRes( m_pd3dDevice, MakePath( DIR_MODELTEX, "Env.dds" ), &m_pEnvTex ) ) )
{
Error( "Env.dds ÅØ½ºÃÄ ¸øÀÐÀ½" );
}
#endif //__YENV
if( ( m_dwCreateFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING ) || ( m_dwCreateFlags & D3DCREATE_MIXED_VERTEXPROCESSING ) ||
m_d3dCaps.VertexShaderVersion >= D3DVS_VERSION(1,1) )
{
CreateSkinningVS( m_pd3dDevice, _T("skining2.vsh") );
}
if( m_d3dCaps.RasterCaps & D3DPRASTERCAPS_DEPTHBIAS ) // d3d9.0¿¡ »õ·Î Ãß°¡µÈ ±â´ÉÀε¥ ÀÌ°É Áö¿ø¸øÇÏ´Â Ä«µå°¡ ÀÖ´Ù. ±×·¡¼* ÀÌ·¸°Ô °Ë»çÇÑ´Ù.
g_ModelGlobal.m_bDepthBias = TRUE;
if( g_Option.m_nShadow < 2 && m_d3dCaps.MaxSimultaneousTextures <= 2 ) // ½Ç½Ã°£±×¸²ÀÚ¸¦ ¼¼ÆÃÇϰí Çϵå¿þ¾î°¡ µþ¸®¸é
{
g_Option.m_nShadow = 2; // ½Ç½Ã°£ ±×¸²ÀÚ ±â´ÉÀ» ²ö´Ù.
MessageBox( GetSafeHwnd(), m_strArray.GetAt(13), m_strArray.GetAt(11), MB_OK );
//MessageBox( GetSafeHwnd(), "ÀÌ ±×·¡ÇÈÄ«µå¿¡¼± ±×¸²ÀÚ ±â´ÉÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ±×¸²ÀÚ ±â´ÉÀ» ³·À½À¸·Î ¹Ù²ß´Ï´Ù.", "¾È³»", MB_OK );
}
int nMem = m_pd3dDevice->GetAvailableTextureMem();
if( g_Option.m_nTextureQuality == 0 && nMem <= (1024 * 1024 * 64) )
{
g_Option.m_nTextureQuality = 1; // 64¸Þ°¡ ÀÌÇÏÀÇ ÅØ½ºÃĸ޸𸮿¡¼± ÅØ½ºÃÄǰÁúÀ» ³·Ãá´Ù.
MessageBox( GetSafeHwnd(), m_strArray.GetAt(15), m_strArray.GetAt(14), MB_OK );
//MessageBox( GetSafeHwnd(), "»ç¿ë°¡´ÉÇÑ ÅØ½ºÃÄ ¸Þ¸ð¸®°¡ ºÎÁ·Çؼ* ÅØ½ºÃÄ Ç°ÁúÀ» ³·Ãä´Ï´Ù.", "°æ°í", MB_OK );
}
if( g_Option.m_nShadow < 2 )
{
if( nMem <= (1024 * 1024 * 64) )
{
g_Option.m_nShadow = 2; // 64¸Þ°¡ ÀÌÇÏÀÇ ÅØ½ºÃĸ޸𸮿¡¼± ±×¸²ÀÚ±â´ÉÀ» »ç¿ëÇÏÁö ¸øÇÑ´Ù.
MessageBox( GetSafeHwnd(), m_strArray.GetAt(16), m_strArray.GetAt(14), MB_OK );
//MessageBox( GetSafeHwnd(), "»ç¿ë°¡´ÉÇÑ ÅØ½ºÃÄ ¸Þ¸ð¸®°¡ ºÎÁ·Çؼ* ±×¸²ÀÚ ±â´ÉÀ» ÇØÁ¦ÇÕ´Ï´Ù.", "°æ°í", MB_OK );
} else
{
// CreateShadowMap( m_pd3dDevice, m_d3dpp.BackBufferFormat );
BOOL bSuccess = CreateShadowMap( m_pd3dDevice, D3DFMT_R5G6B5 );
if( bSuccess == FALSE )
{
// ½ÇÆÐÇÏ¸é ºñµÍ¸Þ¸ð¸® ºÎÁ·À̶ó ÆÇ´ÜÇÏ°í ¿É¼Ç °*Á¦·Î ³·Ãã.
if( g_Option.m_nShadow < 2 )
g_Option.m_nShadow ++;
if( g_Option.m_nTextureQuality < 2 )
g_Option.m_nTextureQuality ++;
}
}
}
if( g_Option.m_nBloom == 1 )
{
if( m_d3dCaps.PixelShaderVersion >= D3DPS_VERSION(1,1) )
g_Glare.Create( m_pd3dDevice, D3DFMT_R5G6B5, g_Option.m_nResWidth, g_Option.m_nResHeight - 48 );
else
g_Option.m_nBloom = 0;
}
g_ParticleMng.RestoreDeviceObjects( m_pd3dDevice );
g_TailEffectMng.RestoreDeviceObjects( m_pd3dDevice );
// Initialize the particle system
// HRESULT hr;
extern LPDIRECT3DTEXTURE9 g_pReflectMap;
if( FAILED( LoadTextureFromRes( m_pd3dDevice, MakePath( DIR_MODELTEX, "etc_reflect.tga" ), &g_pReflectMap ) ) )
{
Error( "etc_Reflect.tga ÅØ½ºÃÄ ¸øÀÐÀ½" );
}
g_ModelGlobal.RestoreDeviceObjects( m_pd3dDevice );
m_pd3dDevice->SetRenderState( D3DRS_SHADEMODE, D3DSHADE_GOURAUD );
CWndBase::m_Theme.RestoreDeviceObjects();
g_WndMng.RestoreDeviceObjects();
if( m_pd3dDevice )
{
m_2DRender.RestoreDeviceObjects(&m_d3dsdBackBuffer );
if( g_WorldMng.Get() )
g_WorldMng.Get()->RestoreDeviceObjects( m_pd3dDevice );
CWorld::StaticRestoreDeviceObjects( m_pd3dDevice );
prj.m_modelMng.RestoreDeviceObjects(m_pd3dDevice);
prj.m_terrainMng.RestoreDeviceObjects();
}
if( g_pBipedMesh )
g_pBipedMesh->RestoreDeviceObjects();
g_SfxMng.RestoreDeviceObjects();
g_SfxMeshMng.RestoreDeviceObjects();
g_DamageNumMng.RestoreDeviceObjects();
g_DialogMsg.RestoreDeviceObjects();
CWorldMap* pWorldMap = CWorldMap::GetInstance();
pWorldMap->RestoreDeviceObjects();
return S_OK;
}
///////////////////////////////////////////////////
HRESULT CNeuzApp::InvalidateDeviceObjects()
{
#ifdef __YENV
if( m_pEffect != NULL )
m_pEffect->OnLostDevice();
SAFE_RELEASE(m_pEnvTex);
#endif //__YENV
CWorldMap* pWorldMap = CWorldMap::GetInstance();
pWorldMap->InvalidateDeviceObjects();
g_Glare.DeleteDeviceObjects();
DeleteShadowMap( m_pd3dDevice );
DeleteVertexShader( m_pd3dDevice );
CWndBase::m_Theme.InvalidateDeviceObjects();
if( g_WorldMng.Get() )
g_WorldMng.Get()->InvalidateDeviceObjects();
CWorld::StaticInvalidateDeviceObjects();
g_WndMng.InvalidateDeviceObjects();
prj.m_modelMng.InvalidateDeviceObjects();
prj.m_terrainMng.InvalidateDeviceObjects();
m_2DRender.InvalidateDeviceObjects();
if( g_pBipedMesh )
g_pBipedMesh->InvalidateDeviceObjects();
g_SfxMng.InvalidateDeviceObjects();
g_SfxMeshMng.InvalidateDeviceObjects();
extern LPDIRECT3DTEXTURE9 g_pReflectMap;
SAFE_RELEASE( g_pReflectMap );
g_ParticleMng.InvalidateDeviceObjects();
g_TailEffectMng.InvalidateDeviceObjects();
g_ModelGlobal.InvalidateDeviceObjects( m_pd3dDevice );
g_DamageNumMng.InvalidateDeviceObjects();
g_DialogMsg.InvalidateDeviceObjects();
return S_OK;
}
///////////////////////////////////////////////////////
HRESULT CNeuzApp::DeleteDeviceObjects()
{
RestoreFakeDisplayMode();
#ifdef __YENV
SAFE_RELEASE(m_pEffect);
#endif //__YENV
CWorldMap* pWorldMap = CWorldMap::GetInstance();
pWorldMap->DeleteDeviceObjects();
g_toolTip.Delete();
#if __VER >= 15 // __IMPROVE_SYSTEM_VER15
g_toolTipSub1.Delete();
g_toolTipSub2.Delete();
#endif // __IMPROVE_SYSTEM_VER15
g_Glare.DeleteDeviceObjects();
CWndBase::m_Theme.DeleteDeviceObjects();
g_WndMng.DestroyApplet();
g_WndMng.Free();
if( g_WorldMng.Get() )
g_WorldMng.Get()->DeleteDeviceObjects();
g_WorldMng.Free();
CWorld::StaticDeleteDeviceObjects();
g_WndMng.DeleteDeviceObjects();
prj.m_modelMng.DeleteDeviceObjects();
prj.m_terrainMng.DeleteDeviceObjects();
m_2DRender.DeleteDeviceObjects();
g_DamageNumMng.DeleteDeviceObjects();
g_DialogMsg.DeleteDeviceObjects();
if( g_pBipedMesh )
g_pBipedMesh->DeleteDeviceObjects();
g_TextureMng.DeleteDeviceObjects();
SAFE_DELETE( g_pBipedMesh ); // g_Object3DMng°¡ ÆÄ±«µÇ±âÀü¿¡ ºÎ¸¦°Í
g_Shadow.DeleteDeviceObjects();
// ¿©±â¼* À̰ÍÀ» µû·Î ºÒ·¯ÁØ ÀÌÀ¯´Â °ÔÀÓÁ¾·á½Ã¿¡ ReleaseµÇÁö ¾ÊÀº ¼ö¸¦ ÆÇÁ¤ÇÒ¶§
// g_Object3DMngÀÇ ÆÄ±«ÀÚ°¡ ´Ê°Ô ¹ßµ¿µÇ¾î ´©¶ôµÇ±â ¶§¹®ÀÌ´Ù. ±×·¡¼* ¿©±â¼* ¸ÕÀú ÆÄ±«½ÃÄÑÁØ´Ù. °á°ú´Â °°´Ù.
// Destroy¸¦ ´Ù¸¥µ¥¼* È£ÃâÇÏÁö ¸»°Í!
g_Object3DMng.DeleteDeviceObjects();
#ifdef __PROF
g_Prof.Show( m_fFPS );
#endif
g_SfxMng.DeleteDeviceObjects();
g_SfxTex.DeleteAll();
g_SfxObjMng.RemoveAll();
g_SfxMeshMng.DeleteAll();
g_Object3DMng.Destroy();
CWndNeuz::FreeTileTexture();
#if __VER >= 11 // __SYS_COLLECTING
m_TexCltGauge[0].DeleteDeviceObjects();
m_TexCltGauge[1].DeleteDeviceObjects();
#endif
m_TextureGauge[0].DeleteDeviceObjects();
m_TextureGauge[1].DeleteDeviceObjects();
m_TextureGauge[2].DeleteDeviceObjects();
m_TextureGauge[3].DeleteDeviceObjects();
m_TextureGauge[4].DeleteDeviceObjects();
m_TextureHPGauge[0].DeleteDeviceObjects();
m_TextureHPGauge[1].DeleteDeviceObjects();
m_TextureHPGauge[2].DeleteDeviceObjects();
m_TextureTurboGauge[0].DeleteDeviceObjects();
m_TextureTurboGauge[1].DeleteDeviceObjects();
m_TextureCastingGauge[0].DeleteDeviceObjects();
m_TextureCastingGauge[1].DeleteDeviceObjects();
#if __VER >= 8 // __CSC_VER8_5
m_TextureAngelGauge[0].DeleteDeviceObjects();
m_TextureAngelGauge[1].DeleteDeviceObjects();
#endif //__CSC_VER8_5
m_TexturePackPVP.DeleteDeviceObjects();
m_TexLoading.DeleteDeviceObjects();
m_texQuestEmoticon.DeleteDeviceObjects();
return S_OK;
}
//
// Á¾·áÇϱâ Àü °´Ã¼¸¦ ÆÄ±«ÇÏ´Â °÷
//
HRESULT CNeuzApp::FinalCleanup()
{
#ifdef _DEBUG
WaitLoading();
#endif
if( g_hMutex )
::CloseHandle( g_hMutex );
// ´Ù½Ã ¾ËÆ®ÅÇ µÇ°Ô
::SystemParametersInfo (SPI_SCREENSAVERRUNNING, FALSE, NULL, 0); // 95, 98, Me¸é API¸¦ ¾´´Ù.
#if __VER >= 8 //__Y_GAMMA_CONTROL_8
Drv_SetGamma(GetSafeHwnd(), 1.0f, 10, 1.0f);
#endif //__Y_GAMMA_CONTROL_8
for( int i = 0; i < MAX_CHARACTER_LIST; i++ )
{
if( m_apPlayer[i] )
m_apPlayer[i]->m_pModel = NULL;
SAFE_DELETE( m_apPlayer[i] );
}
g_dpCertified.DeleteDPObject();
#ifdef __CERTIFIER_COLLECTING_SYSTEM
DPCollectClient->DeleteDPObject();
#endif // __CERTIFIER_COLLECTING_SYSTEM
g_dpLoginClient.DeleteDPObject();
g_DPlay.DeleteDPObject();
g_GuildWarMng.Clear();
g_GuildMng.Clear();
SAFE_DELETE( CParty::m_pPool );
SAFE_DELETE( CChatting::m_pPool );
SAFE_DELETE( CGuildMember::sm_pPool );
SAFE_DELETE( CGuild::sm_pPool );
SAFE_DELETE( CMover::m_pPool );
SAFE_DELETE( CActionMover::m_pPool );
SAFE_DELETE( CItem::m_pPool );
SAFE_DELETE( CDamageNum::m_pPool );
SAFE_DELETE( CSfxGenMoveMark::m_pPool );
SAFE_DELETE( CSfxGenWaterCircle::m_pPool );
SAFE_DELETE( CSfxGenNormalDmg01::m_pPool );
SAFE_DELETE( CSfxModel::m_pPool );
SAFE_DELETE( CSfxGenRainCircle::m_pPool );
#if __VER >= 12 // __LORD
// ±ºÁÖ Çù·Â °´Ã¼ÀÇ Á¦°Å
CCLord::Instance()->DestroyColleagues();
#endif // __LORD
UninitializeNetLib();
CWndNeuz::FreeTileTexture();
CResFile::FreeResource();
UnInitCustomSound();
g_Option.Save( "neuz.ini" );
return S_OK;
}
#ifdef __WRITEAVI
#include "..\_multimedia\writeAvi.h"
#pragma comment( lib, "vfw32.lib" )
CAVIFile avi( _T( "Capture\\test.avi" ) );
HRESULT CNeuzApp::CaptureBitmap()
{
IDirect3DSurface8* pDestSurface;
m_pd3dDevice->GetBackBuffer( 0, D3DBACKBUFFER_TYPE_MONO, &pDestSurface );
RECT rcSource[] = { 0, 0, 1024, 768 };
POINT ptDest[] = { 0, 0 };
D3DLOCKED_RECT lockedRect;
CRect rectIn ( 0, 0, m_d3dsdBackBuffer.Width, m_d3dsdBackBuffer.Height );//cb.bih.biWidth, abs(cb.bih.biHeight) );
D3DVIEWPORT9 viewport;
m_pd3dDevice->GetViewport( &viewport );
//LPBYTE lpData = new BYTE[ viewport.Width * viewport.Height * 3 ];D3DLOCK_DISCARD
if( pDestSurface->LockRect( &lockedRect, rectIn, D3DLOCK_READONLY ) == D3D_OK )// Lock
{
// LPDWORD pWord = (LPDWORD)lockedRect.pBits;
// memcpy( bmp.GetData(), pWord, viewport.Width * viewport.Height * 4 );
//
//LPWORD pWord = (LPWORD)lockedRect.pBits;
//for(int y = 0; y < viewport.Height; y++ )
//{
// for(int x = 0; x < viewport.Width; x++)
// {
/// WORD wData = pWord[ y * viewport.Width + x ];
// // 16 bit color
// BYTE byData1 = ( wData & 0xf800 ) >> 8;
// BYTE byData2 = ( wData & 0x07e0 ) >> 3;
// BYTE byData3 = ( wData & 0x001f ) << 3 ;
// DWORD dwOffset = ( y * viewport.Width + x ) * 3;
// lpData[ dwOffset + 0 ] = byData3;
// lpData[ dwOffset + 1 ] = byData2;
// lpData[ dwOffset + 2 ] = byData1;
// }
//}
//
LPDWORD pWord = (LPDWORD)lockedRect.pBits;
memcpy( g_bmp.GetData(), pWord, viewport.Width * viewport.Height * 4 );
pDestSurface->UnlockRect();
}
pDestSurface->Release();
avi.AddFrame( g_bmp );
//SAFE_DELETE( lpData );
return S_OK;
}
#endif
/*
IDirect3DSurface8* pDestSurface;
m_pd3dDevice->GetBackBuffer( 0, D3DBACKBUFFER_TYPE_MONO, &pDestSurface );
D3DLOCKED_RECT lockedRect;
CRect rectIn ( 0, 0, m_d3dsdBackBuffer.Width, m_d3dsdBackBuffer.Height );//cb.bih.biWidth, abs(cb.bih.biHeight) );
D3DVIEWPORT9 viewport;
m_pd3dDevice->GetViewport( &viewport );
LPBYTE lpData = new BYTE[ viewport.Width * viewport.Height * 3 ];
ZeroMemory( lpData, viewport.Width * viewport.Height * 3 );
if( pDestSurface->LockRect( &lockedRect, rectIn, 0 ) == D3D_OK )// Lock
{
LPWORD pWord = (LPWORD)lockedRect.pBits;
for(int y = 0; y < viewport.Height; y++ )
{
for(int x = 0; x < viewport.Width; x++)
{
WORD wData = pWord[ y * viewport.Width + x ];
// 16 bit color
BYTE byData1 = ( wData & 0xf800 ) >> 8;
BYTE byData2 = ( wData & 0x07e0 ) >> 3;
BYTE byData3 = ( wData & 0x001f ) << 3 ;
DWORD dwOffset = ( y * viewport.Width + x ) * 3;
lpData[ dwOffset + 0 ] = byData3;
lpData[ dwOffset + 1 ] = byData2;
lpData[ dwOffset + 2 ] = byData1;
}
}
pDestSurface->UnlockRect();
TCHAR szFileName[ 128 ];
_stprintf( szFileName, _T( "Capture\\%s%06d.bmp" ), m_szCaptureFileName, m_nCaptureCnt );
// SaveBMP( szFileName, (LPBYTE)lockedRect.pBits, CSize( viewport.Width, viewport.Height ) );
delete lpData;
m_nCaptureCnt++;
}
pDestSurface->Release();
return S_OK;
}
*/
//
// È*¸éÀ» ·£´õ¸µ ÇÑ´Ù. (Ãâ·Â)
//
#ifdef __VCINEMASCOPE
int m_nCinemaScopeCnt = -100;
#endif
HRESULT CNeuzApp::Render()
{
_PROFILE("CNeuzApp::Render()");
if( m_bActive == FALSE )
return S_FALSE;
// Clear the viewport
m_pd3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, CWndBase::m_Theme.m_d3dcBackground, 1.0f, 0 ) ;
CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetWndBase( APP_WORLD );
if( pWndWorld )
pWndWorld ->ClearFlyTarget(); // ºñÇà¶§ °ø°Ý°¡´ÉÇÑ Å¸°Ùµé ¸®½ºÆ® Áö¿öÁÜ.
//pd3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, D3DCOLOR_ARGB( 255, 90, 146, 222 ), 1.0f, 0 ) ;
//m_pd3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, D3DCOLOR_ARGB( 255, 255, 255, 255 ), 1.0f, 0 ) ;
//m_pd3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, D3DCOLOR_ARGB( 255, 0, 0, 0 ), 1.0f, 0 ) ;
// Begin the scene
if( g_Option.m_nShadow < 2 ) // ³ôÀ½/Áß°£ ¸¸ ½¦µµ¿ì ¸ÊÀ» ¸¸µç´Ù.
{
_PROFILE("Make Shadow Map");
CHECK1();
void RenderShadowMap( LPDIRECT3DDEVICE9 pd3dDevice, CObj **pList, int nMax );
if( g_pPlayer )
{
CWorld *pWorld = g_pPlayer->GetWorld();
if( pWorld )
{
#if __VER >= 13 // __HOUSING
#if __VER >= 14 // __BS_FIX_SHADOW_ONOBJECT
if( pWorld->GetID() != WI_WORLD_MINIROOM ) // 7.28±âȹ¿äû : ÇÏ¿ì¡ ±×¸²ÀÚ Á¦°Å
RenderShadowMap( m_pd3dDevice, pWorld->m_aobjCull, pWorld->m_nObjCullSize );
#else
if(pWorld->GetID() != WI_WORLD_MINIROOM && pWorld->GetID() != WI_INSTANCE_OMINOUS && pWorld->GetID() != WI_INSTANCE_OMINOUS_1)
RenderShadowMap( m_pd3dDevice, pWorld->m_aobjCull, pWorld->m_nObjCullSize );
#endif //__VER >= 14
#endif //__VER >= 13
}
}
CHECK2( " Render ShadowMap" );
}
// »Ç»þ½Ã ¿É¼ÇÀÌ ÄÑÁ®ÀÖÀ¸¸é ·»´õŸ°Ù¿¡ °ÔÀÓÈ*¸éÀ» ·»´õÇÔ.
if( g_Option.m_nBloom )
{
_PROFILE("Make Bloom");
CWorld* pWorld = g_WorldMng.Get();
if( pWorld && g_pPlayer && g_Glare.m_bActive )
{
pWorld->Projection( m_pd3dDevice, g_Glare.m_Src.m_nWidth, g_Glare.m_Src.m_nHeight );
pWorld->SetCamera( &m_camera );
g_Glare.m_Src.BeginScene();
DWORD dwColor = CWorld::GetDiffuseColor();
m_2DRender.m_pd3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, dwColor /*D3DCOLOR_ARGB( 255, 255, 255, 255 )*/, 1.0f, 0 ) ;
pWorld->RenderBase( m_pd3dDevice, g_WndMng.m_Theme.m_pFontWorld ); // ÁöÇü°ú ¿ÀºêÁ§Æ®¸¦ ¹Ì¸® ·»´õ¸µ ÇØµÒ.
g_Glare.m_Src.EndScene();
g_Glare.Blur( m_pd3dDevice ); // m_Src¸¦ m_Surface[0]¿¡ ºí·¯ÇÔ.
}
}
CHECK1();
if(SUCCEEDED(m_pd3dDevice->BeginScene()))
{
_PROFILE("BeginScene");
CHECK2( "Begin" );
g_nRenderCnt ++;
CHECK1();
CWorldMap* pWorldMap = CWorldMap::GetInstance();
g_WndMng.PaintRoot(&m_2DRender);
#ifdef __VCINEMASCOPE
CRect rect = g_WndMng.GetWndRect();
#if __VER >= 15 // __IMPROVE_QUEST_INTERFACE
CWndDialog* pWndDialog = (CWndDialog*)g_WndMng.GetWndBase( APP_DIALOG_EX );
#else // __IMPROVE_QUEST_INTERFACE
CWndDialog* pWndDialog = (CWndDialog*)g_WndMng.GetWndBase( APP_DIALOG );
#endif // __IMPROVE_QUEST_INTERFACE
// m_nCinemaScopeCnt = 0;
if( pWndDialog )
{
m_2DRender.RenderFillRect( CRect( 0, 0 + m_nCinemaScopeCnt, rect.Width(), 100 + m_nCinemaScopeCnt ), 0xff000000 );
m_2DRender.RenderFillRect( CRect( 0, 100 + m_nCinemaScopeCnt, rect.Width(), 150 + m_nCinemaScopeCnt ), 0xff000000, 0xff000000, 0x00000000, 0x00000000 );
m_2DRender.RenderFillRect( CRect( 0, rect.Height() - 100 - m_nCinemaScopeCnt, rect.Width(), rect.Height() - m_nCinemaScopeCnt ), 0xff000000 );
m_2DRender.RenderFillRect( CRect( 0, rect.Height() - 150 - m_nCinemaScopeCnt, rect.Width(), rect.Height() - 100 - m_nCinemaScopeCnt ), 0x00000000, 0x00000000, 0xff000000, 0xff000000 );
}
#endif
CHECK2( "Render WndMng" );
if( g_WndMng.m_pWndWorld )
g_WndMng.m_pWndWorld->RenderFocusArrow( CPoint(0,0) );
// µå·¡±× ¾ÆÀÌÅÛ
if( CWndBase::m_GlobalShortcut.IsEmpty() == FALSE )
{
GET_CLIENT_POINT( GetSafeHwnd(), point );
if( CWndBase::m_GlobalShortcut.m_pTexture )
CWndBase::m_GlobalShortcut.m_pTexture->Render( &m_2DRender, CPoint( point.x - 16, point.y - 16 ) );
else
{
int nHeight = m_2DRender.m_pFont->GetMaxHeight() / 2;
m_2DRender.TextOut( point.x - nHeight , point.y - nHeight, CWndBase::m_GlobalShortcut.m_szString );
}
}
// Åø¸³ °ü·Ã
g_toolTip.Paint(&m_2DRender);
#if __VER >= 15 // __IMPROVE_SYSTEM_VER15
g_toolTipSub1.Paint( &m_2DRender );
g_toolTipSub2.Paint( &m_2DRender );
#endif // __IMPROVE_SYSTEM_VER15
m_pd3dDevice->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );
m_2DRender.SetFont( CWndBase::m_Theme.m_pFontWorld );
g_ClientMsg.Render( CPoint( m_2DRender.m_clipRect.Width() / 2 , 520 * m_2DRender.m_clipRect.Height() / 768 ), &m_2DRender );
m_2DRender.SetFont( CWndBase::m_Theme.m_pFontText );
#ifdef __PROF
// CHECK1();
// m_2DRender.TextOut( 600, 120, g_Prof.m_szResult, D3DCOLOR_ARGB( 255, 255, 255, 255 ) );
// CHECK2( "Prof Text" );
#endif
// ¸ÊÀ̵¿°£¿¡ À̹ÌÁö ·ÎµùÃâ·Â
if( m_bTexLoad && m_bTexLoadAlpha )
{
m_nTexAlpha = (int)( m_nTexAlpha - 6.0f );
if( m_nTexAlpha < 0 )
{
m_nTexAlpha = 0;
m_bTexLoad = FALSE;
m_bTexLoadAlpha = FALSE;
m_TexLoading.DeleteDeviceObjects();
}
else
{
#if __VER >= 9 // __CSC_VER9_RESOLUTION
int wideOffsetX = 0;
if(g_Option.m_nResWidth == 1280 && (g_Option.m_nResHeight == 720 || g_Option.m_nResHeight == 768 || g_Option.m_nResHeight == 800)) //Wide Offset
{
m_TexLoading.m_size = CSize(960, FULLSCREEN_HEIGHT);
wideOffsetX = (g_Option.m_nResWidth - 960) / 2;
m_2DRender.RenderFillRect( CRect( 0, 0, g_Option.m_nResWidth, g_Option.m_nResHeight ), 0xff000000 );
}
else if(g_Option.m_nResWidth == 1360 && g_Option.m_nResHeight == 768)
{
m_TexLoading.m_size = CSize(1024, FULLSCREEN_HEIGHT);
wideOffsetX = (g_Option.m_nResWidth - 1024) / 2;
m_2DRender.RenderFillRect( CRect( 0, 0, g_Option.m_nResWidth, g_Option.m_nResHeight ), 0xff000000 );
}
else if(g_Option.m_nResWidth == 1440 && g_Option.m_nResHeight == 900)
{
m_TexLoading.m_size = CSize(1200, FULLSCREEN_HEIGHT);
wideOffsetX = (g_Option.m_nResWidth - 1200) / 2;
m_2DRender.RenderFillRect( CRect( 0, 0, g_Option.m_nResWidth, g_Option.m_nResHeight ), 0xff000000 );
}
else if(g_Option.m_nResWidth == 1680 && g_Option.m_nResHeight == 1050)
{
m_TexLoading.m_size = CSize(1400, FULLSCREEN_HEIGHT);
wideOffsetX = (g_Option.m_nResWidth - 1400) / 2;
m_2DRender.RenderFillRect( CRect( 0, 0, g_Option.m_nResWidth, g_Option.m_nResHeight ), 0xff000000 );
}
else
m_TexLoading.m_size = CSize(FULLSCREEN_WIDTH, FULLSCREEN_HEIGHT);
m_2DRender.RenderTexture( CPoint(0 + wideOffsetX, 0), &m_TexLoading, m_nTexAlpha );
#else //__CSC_VER9_RESOLUTION
m_TexLoading.m_size = CSize(FULLSCREEN_WIDTH, FULLSCREEN_HEIGHT);
m_2DRender.RenderTexture( CPoint(0,0), &m_TexLoading, m_nTexAlpha );
#endif //__CSC_VER9_RESOLUTION
}
}
pWorldMap->RenderWorldMap( &m_2DRender );
#ifdef __GAME_GRADE_SYSTEM
#ifdef __CLIENT
if( ::GetLanguage() == LANG_KOR )
{
g_WndMng.m_pTheme->RenderGameGradeMark( &m_2DRender, static_cast< DWORD >( m_nGameGradeMarkAlpha ) );
}
#endif // __CLIENT
#endif // __GAME_GRADE_SYSTEM
CHECK1();
m_pd3dDevice->EndScene();
CHECK2( "End" );
}
return S_OK;
}
// Ç÷¹ÀÌ °¡´É ½Ã°£ ¼¼ÆÃ
void CNeuzApp::SetLeftTime( long lTimeLeft )
{
m_dwTimeLeft = lTimeLeft * 1000;
m_dwCurTick = timeGetTime();
}
void CNeuzApp::NotifyLeftMinute( UINT type, int nMin )
{
if( ::GetLanguage() == LANG_THA )
{
if( type == m_nLeftTimeNotifyStatus )
return;
m_nLeftTimeNotifyStatus = type;
char szBuffer[256];
sprintf( szBuffer, prj.GetText(TID_GAME_REMAINPLAYTIMEMIN), nMin );
g_WndMng.OpenMessageBox( szBuffer );
}
}
// ű¹ÀÇ °æ¿ì Ç÷¹ÀÌ °¡´É ½Ã°£À» Ç¥½ÃÇØ ÁØ´Ù.
void CNeuzApp::NotifyLeftTime()
{
if( ::GetLanguage() != LANG_THA )
return;
if( m_dwTimeLeft == 0 )
return;
DWORD dw = timeGetTime() - m_dwCurTick;
if( dw > 1000 )
{
m_dwCurTick = timeGetTime();
if( m_dwTimeLeft >= dw )
m_dwTimeLeft -= dw;
else
{
m_dwTimeLeft = 0; // 0Ãʴ ǥ½ÃÇÏÁö ¾Ê´Â´Ù.
return;
}
long lLeftTime = ( m_dwTimeLeft + 500 ) / 1000; // + 500¹Ý¿Ã¸²
if( lLeftTime <= 10 ) // 10ÃÊ ÀÌÇÏ
{
char szBuffer[256];
sprintf( szBuffer, prj.GetText(TID_GAME_REMAINPLAYTIMESEC), lLeftTime );
g_WndMng.PutString( szBuffer );
}
else if( lLeftTime <= 60 * 15 ) // 15ºÐ ÀÌÇÏ
{
switch( lLeftTime )
{
case 60 * 1:
NotifyLeftMinute( NOTIFY_STATUS_59MIN, 1 );
break;
case 60 * 2:
NotifyLeftMinute( NOTIFY_STATUS_58MIN, 2 );
break;
case 60 * 3:
NotifyLeftMinute( NOTIFY_STATUS_57MIN, 3 );
break;
case 60 * 4:
NotifyLeftMinute( NOTIFY_STATUS_56MIN, 4 );
break;
case 60 * 5:
NotifyLeftMinute( NOTIFY_STATUS_55MIN, 5 );
break;
case 60 * 10:
NotifyLeftMinute( NOTIFY_STATUS_50MIN, 10 );
break;
case 60 * 15:
NotifyLeftMinute( NOTIFY_STATUS_45MIN, 15 );
break;
}
}
}
}
extern int g_nOldVirtKey;
//
// FrameÀ» ¿òÁ÷ÀδÙ. ±âÁ¸ÀÇ Process¿Í °°Àº ¿ªÇÒ
//
HRESULT CNeuzApp::FrameMove()
{
#ifdef __VCINEMASCOPE
#if __VER >= 15 // __IMPROVE_QUEST_INTERFACE
CWndDialog* pWndDialog = (CWndDialog*)g_WndMng.GetWndBase( APP_DIALOG_EX );
#else // __IMPROVE_QUEST_INTERFACE
CWndDialog* pWndDialog = (CWndDialog*)g_WndMng.GetWndBase( APP_DIALOG );
#endif // __IMPROVE_QUEST_INTERFACE
if( pWndDialog )
{
if( m_nCinemaScopeCnt < 0 )
m_nCinemaScopeCnt += 2;
}
else
m_nCinemaScopeCnt = -150;
#endif
_PROFILE("CNeuzApp::FrameMove()");
g_tmCurrent = timeGetTime(); // Àü¿ªÀ¸·Î »ç¿ëÇÒ ÇöÀç ½Ã°£.
g_tCurrent = time( NULL );
g_nProcessCnt ++;
if( g_GameTimer.m_nHour >= 21 || g_GameTimer.m_nHour <= 6 )
::SetNight( TRUE );
else
::SetNight( FALSE );
NotifyLeftTime();
CHECK1();
g_DPlay.ReceiveMessage();
g_DPlay.SendSnapshot();
g_DPlay.FlushPlayerAngle();
g_dpLoginClient.ReceiveMessage();
g_dpCertified.ReceiveMessage();
#ifdef __CERTIFIER_COLLECTING_SYSTEM
DPCollectClient->ReceiveMessage();
#endif // __CERTIFIER_COLLECTING_SYSTEM
CHECK2( "Receive" );
if( m_dwTempMessage )
{
CWndBase* pWndBase;
if( m_timerConnect.TimeOut() )
{
m_dwTempMessage = 0;
pWndBase = g_WndMng.GetWndBase( APP_SELECT_CHAR );
if( pWndBase )
{
((CWndSelectChar*)pWndBase)->Connected();
goto NEXT;
}
}
}
if( g_pBipedMesh )
g_pBipedMesh->FrameMove();
g_WndMng.Process(); // ½ÇÁ¦ÀûÀÎ ¿ùµå¿Í ij¸¯ÅÍ ÄÁÆ®·Ñ ÀÎÅÍÆäÀ̽º´Â CWndWorld::Process°¡ ó¸®ÇÔ
// À§Ä¡ ¹Ù²ÙÁö ¸¶½Ã¿À!! ata3k
// Űº¸µå ¾÷ÇßÀ»¶§ ¹ÝÀÀÇϱâ À§ÇØ Å¬¸®¾î ½ÃÄÑÁØ´Ù....
if( g_nOldVirtKey != 0 )
g_bKeyTable[ g_nOldVirtKey ] = FALSE;
NEXT:
if( g_WndMng.IsTitle() == TRUE )
CWndBase::m_Theme.FrameMove();
GET_CLIENT_POINT( GetSafeHwnd(), point );
g_toolTip.Process( point, &m_2DRender );
#if __VER >= 15 // __IMPROVE_SYSTEM_VER15
g_toolTipSub1.Process( point, &m_2DRender );
g_toolTipSub2.Process( point, &m_2DRender );
#endif // __IMPROVE_SYSTEM_VER15
g_DamageNumMng.Process();
#ifdef __FLYFF_INITPAGE_EXT
if(CWndBase::m_Theme.m_bRenderTitleWorld)
{
g_GameTimer.m_bFixed = TRUE;
g_GameTimer.m_nHour = 10;
}
else
g_GameTimer.Compute();
#else //__FLYFF_INITPAGE_EXT
g_GameTimer.Compute();
#endif //__FLYFF_INITPAGE_EXT
ProcessFadeMusic();
CalcUPS();
g_Object3DMng.Process();
g_ParticleMng.Process();
g_TailEffectMng.Process();
#ifdef __NEW_WEB_BOX
if( g_WndMng.GetWndBase( APP_WEBBOX ) )
#else // __NEW_WEB_BOX
if( g_WndMng.GetWndBase(APP_WEBBOX) || g_WndMng.GetWndBase(APP_WEBBOX2) )
#endif // __NEW_WEB_BOX
{
if( CWebBox::GetInstance()->Get_Start() == false )
CWebBox::GetInstance()->Set_Start();
CWebBox::GetInstance()->Process( GetSafeHwnd(), m_hInstance
#ifdef __GPAUTH_01
, m_bGPotatoAuth? m_szGPotatoNo: m_szAccount
#else // __GPAUTH_01
, m_szAccount
#endif // __GPAUTH_01
, CMover::GetActiveMover()? CMover::GetActiveMover()->m_idPlayer: 0
, m_dwSys
, CMover::GetActiveMover()? (int)CMover::GetActiveMover()->GetLevel(): 0
, CMover::GetActiveMover()? (int)CMover::GetActiveMover()->GetJob(): 0
, CMover::GetActiveMover()? (int)CMover::GetActiveMover()->GetSex(): 0
, CMover::GetActiveMover()? CMover::GetActiveMover()->GetName(): ""
);
}
CWorldMap* pWorldMap = CWorldMap::GetInstance();
pWorldMap->Process();
#ifdef __GAME_GRADE_SYSTEM
#ifdef __CLIENT
if( ::GetLanguage() == LANG_KOR )
{
CalculateGameGradeMarkAlpha();
}
#endif // __CLIENT
#endif // __GAME_GRADE_SYSTEM
if( m_bQuit )
{
if( g_pPlayer == NULL || m_timerQuit.IsTimeOut() )
::PostMessage( g_Neuz.GetSafeHwnd(), WM_CLOSE, TRUE, 0 );
}
return S_OK;
}
BOOL CALLBACK NPGameMonCallback( DWORD dwMsg, DWORD dwArg )
{
if( g_Neuz.m_strArray.GetSize() == 0 )
return false;
bool bAppExit = false;
TCHAR msg[128];
LPCTSTR lpszMsg = NULL;
switch (dwMsg)
{
case NPGAMEMON_CHECK_CSAUTH2: // ¼*¹ö·Î ÀÎÁõ ÆÐŶÀ» Àü¼Û
{
GG_AUTH_DATA AuthData;
memcpy( &AuthData, (PVOID)dwArg, sizeof(GG_AUTH_DATA) );
BEFORESENDSOLE( ar, PACKETTYPE_AUTHQUERY, DPID_UNKNOWN );
ar.Write( (void*)&AuthData, sizeof(GG_AUTH_DATA) );
SEND( ar, &g_dpLoginClient, DPID_SERVERPLAYER );
if( g_Neuz.m_loginSI.nCount == 1 )
{
++g_Neuz.m_loginSI.nCount;
g_dpLoginClient.SendGetPlayerList( g_Neuz.m_loginSI.dwID, g_Neuz.m_loginSI.pszAccount, g_Neuz.m_loginSI.pszPassword );
}
return true;
}
case NPGAMEMON_COMM_ERROR:
case NPGAMEMON_COMM_CLOSE:
bAppExit = true;
return false;
case NPGAMEMON_INIT_ERROR: // "°ÔÀÓ°¡µå ÃʱâÈ* ¿¡·¯
bAppExit = true;
wsprintf( msg, g_Neuz.m_strArray.GetAt(17), dwArg );
lpszMsg = msg;
break;
case NPGAMEMON_SPEEDHACK: // "½ºÇǵåÇÙÀÌ °¨ÁöµÇ¾ú½À´Ï´Ù."
bAppExit = true;
lpszMsg = g_Neuz.m_strArray.GetAt(18);
break;
case NPGAMEMON_GAMEHACK_KILLED: // "°ÔÀÓÇÙÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù."
case NPGAMEMON_GAMEHACK_DETECT: // "°ÔÀÓÇÙÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù."
bAppExit = true;
lpszMsg = g_Neuz.m_strArray.GetAt(19);
break;
case NPGAMEMON_GAMEHACK_DOUBT: //"°ÔÀÓÀ̳ª °ÔÀÓ°¡µå°¡ º¯Á¶µÇ¾ú½À´Ï´Ù.";
bAppExit = true;
lpszMsg = g_Neuz.m_strArray.GetAt(20);
break;
}
if( lpszMsg )
MessageBox( g_Neuz.GetSafeHwnd(), lpszMsg, "nProtect GameGuard", MB_OK );
if( bAppExit )
{
ExitProcess( -1 );
return false;
}
return true;
}
void CNeuzApp::HashMD5( char* szResult, LPCTSTR szPWD )
{
char szBuffer[256];
char* szKey = "";
#ifdef __INTERNALSERVER
switch( LANG_KOR )
#else // __INTERNALSERVER
switch( ::GetLanguage() )
#endif // __INTERNALSERVER
{
case LANG_JAP:
szKey = "chanho_park";
break;
case LANG_TWN:
szKey = "omg";
break;
case LANG_HK:
szKey = "tpgk";
break;
case LANG_ENG:
{
if( ::GetSubLanguage() == LANG_SUB_IND )
{
szKey = "dldhsdlseh";
}
else
{
szKey = "patom";
}
}
break;
case LANG_KOR:
szKey = "@FLYFF";
break;
case LANG_GER:
szKey = "kikugalanet";
break;
case LANG_SPA:
szKey = "kikugalanet";
break;
case LANG_POR:
//szKey = "rlawnsgud";
szKey = "kikugalanet"; //chipi_090520 05/22ºÎÅÍ ¾ÏÈ£È*Ű º¯°æ
break;
case LANG_FRE:
szKey = "kikugalanet";
break;
case LANG_VTN:
szKey = "kikugalanet";
break;
case LANG_RUS:
szKey = "kikugalanet";
break;
}
sprintf( szBuffer, "%s%s", szKey, szPWD );
md5( szResult, szBuffer );
}
// ij¸¯ÅÍ »èÁ¦ ۸¦ ¾ò´Â´Ù. ( szNo´Â À¯Àú ÀÔ·Â °ª )
// ÀϺ» - ÆÐ½º¿öµå
// ¹Ì±¹ - ÆÐ½º¿öµå
// ±×¿Ü - ÀԷ°ª
LPCTSTR CNeuzApp::GetDeleteKey( LPCTSTR szNo )
{
static char szKey[512];
if( m_bEncryptPWD )
{
switch( ::GetLanguage() )
{
case LANG_JAP:
#ifdef __THROUGHPORTAL0810
if( m_bThroughPortal )
#else // __THROUGHPORTAL0810
if( m_bHanGame )
#endif // __THROUGHPORTAL0810
strcpy( szKey, szNo ); // ÇѰÔÀÓÀº ÀÌ¹Ì ¾ÏÈ£È* µÇ¾î ÀÖÀ½
else
kikugalanet( szKey, szNo );
break;
case LANG_ENG:
case LANG_GER:
case LANG_SPA:
case LANG_POR:
case LANG_FRE:
//case LANG_VTN: //º£Æ®³²¾î´Â ÀÌ¹Ì ¾ÏÈ£È* µÇ¾î ÀÖ´Ù.
case LANG_RUS:
( szKey, szNo );
break;
case LANG_TWN:
case LANG_HK:
default:
strcpy( szKey, szNo );
break;
}
}
else
{
strcpy( szKey, szNo );
}
return szKey;
}
#include "AppDefine.h"
#include "Material.h"
#include "DialogMsg.h"
#include "party.h"
#include "../_Common/ModelObject.h"
#include "../_Common/HwOption.h"
#include "../_UnhandledException/ExceptionHandler.h"
#include "../_Common/ParticleMng.h"
#include "TailEffectMng.h"
#include "Sfx.h"
#include "definetext.h"
#include "DPClient.h"
#include "DPLoginClient.h"
#include "dpcertified.h"
#include "guild.h"
#include "guildwar.h"
#include "resource.h"
#include "Chatting.h"
#include "webbox.h"
#include "network.h"
#include "NPGameLib4.h"
#include "defineSound.h"
#include "ClientMsg.h"
#if __VER >= 12 // __MOD_TUTORIAL
#include "WndBase.h"
#include "WndGuideSystem.h"
#endif
#include "WorldMap.h"
#include "tools.h"
#if __VER >= 15 // __GUILD_HOUSE
#include "GuildHouse.h"
#endif
#ifdef __CERTIFIER_COLLECTING_SYSTEM
#include "DPCollectClient.h"
#endif // __CERTIFIER_COLLECTING_SYSTEM
//////////////////////////////////////////////////////////////////////////////
// functions declare
//////////////////////////////////////////////////////////////////////////////
extern void PreInitNProtect();
extern CNPGameLib* GetNProtect();
void __cdecl LoadProperty( void* );
//////////////////////////////////////////////////////////////////////////////
// global variable
//////////////////////////////////////////////////////////////////////////////
extern CGuildWarMng g_GuildWarMng;
extern CGuildMng g_GuildMng;
extern CDPClient g_DPlay;
extern CDPLoginClient g_dpLoginClient;
extern CDPCertified g_dpCertified;
extern CSfxTexture g_SfxTex;
extern CSfxMng g_SfxMng;
extern CSfxObjMng g_SfxObjMng;
extern CSfxMeshMng g_SfxMeshMng;
extern HANDLE g_hMutex;
CDamageNumMng g_DamageNumMng;
CModelObject g_Shadow;
//////////////////////////////////////////////////////////////////////////////
// global enum
//////////////////////////////////////////////////////////////////////////////
enum
{
NOTIFY_STATUS_NONE,
NOTIFY_STATUS_45MIN,
NOTIFY_STATUS_50MIN,
NOTIFY_STATUS_55MIN,
NOTIFY_STATUS_56MIN,
NOTIFY_STATUS_57MIN,
NOTIFY_STATUS_58MIN,
NOTIFY_STATUS_59MIN,
};
#ifdef __GAME_GRADE_SYSTEM
#ifdef __CLIENT
const FLOAT CNeuzApp::GAME_GRADE_MARK_FADING_SPEED( 800.0F );
#endif // __CLIENT
#endif // __GAME_GRADE_SYSTEM
//////////////////////////////////////////////////////////////////////////////
// global function
//////////////////////////////////////////////////////////////////////////////
void SetMouseCursor( DWORD dwCursor )
{
g_Neuz.SetDeviceCursor( g_Neuz.m_ahCursor[ dwCursor ] );
}
//////////////////////////////////////////////////////////////////////////////
// CNeuzApp
//////////////////////////////////////////////////////////////////////////////
CNeuzApp::CNeuzApp()
{
m_dwTimeOutDis = 0xffffffff;
m_dwTimeReSkillPoint = 0xffffffff;
#ifdef _DEBUG
m_bStartFullscreen = FALSE;
#else
m_bStartFullscreen = TRUE;
#endif
m_d3dEnumeration.AppUsesDepthBuffer = TRUE;
m_d3dEnumeration.AppMinDepthBits = 16;
m_d3dEnumeration.AppUsesMixedVP = TRUE;
#ifdef __XUZHU
g_GameTimer.m_bFixed = TRUE;
g_GameTimer.m_nHour = 12; // ¾ðÁ¦³ª ³·ÀÌ µÇµµ·Ï
#endif
#ifdef __TWN_LOGIN0816
m_szSessionPwd[0] = '\0';
#endif // __TWN_LOGIN0816
m_dwCreationWidth = FULLSCREEN_WIDTH;
m_dwCreationHeight = FULLSCREEN_HEIGHT - GetSystemMetrics( SM_CYMENU );
m_strWindowTitle = _T( "FLYFF" );
g_pD3dApp = this;
m_bLButtonDown = FALSE;
m_bRButtonDown = FALSE;
m_bFrameSkip = TRUE;
m_dwTempMessage = 0;
m_lpCertifierAddr[0] = '\0';
memset( m_lpCacheAddr, 0, sizeof(TCHAR) * 16 );
m_uCachePort = PN_CACHESRVR;
memset( &m_loginSI, 0x00, sizeof(m_loginSI) );
m_dwShoutLimitSecond = 0;
m_nShoutLimitCount = 0;
m_szAccount [ 0 ] = 0; // ¾îÄ«¿îÆ®
m_szPassword [ 0 ] = 0; // password
#ifdef __GPAUTH_01
m_bGPotatoAuth = FALSE;
*m_szGPotatoNo = '\0';
#ifdef __GPAUTH_02
*m_szCheck = '\0';
#endif // __GPAUTH_02
#endif // __GPAUTH_01
m_szCaptureFileName[ 0 ] = 0;
m_bCapture = FALSE;
m_nCaptureCnt = 0;
g_pBipedMesh = NULL;
m_dwSys = 0;
m_bQuit = FALSE;
m_uIdofMulti = NULL_ID;
m_b18Server = FALSE;
m_dwAuthKey = 0;
m_cbAccountFlag = 0X00;
m_dwTimeLeft = 0;
m_dwCurTick = 0;
m_nLeftTimeNotifyStatus = NOTIFY_STATUS_NONE;
m_bActiveNeuz = TRUE;
m_dwSummonPartyData = 0;
m_dwSummonPartyObjid = 0;
ZeroMemory( m_szSummonPartyWorldName, sizeof( m_szSummonPartyWorldName ) );
#if __VER >= 12 // __ITEMCREATEMON_S0602
m_vCursorPos = D3DXVECTOR3( 0.0f, 0.0f, 0.0f );
m_pCreateMonItem = NULL;
#endif // __ITEMCREATEMON_S0602
m_szWhisperName[0] = '\0';
#ifdef __THROUGHPORTAL0810
m_bThroughPortal = FALSE;
#else // __THROUGHPORTAL0810
m_bHanGame = FALSE;
#endif // __THROUGHPORTAL0810
m_bEncryptPWD = TRUE;
m_idPlayer = 0;
m_hThread = INVALID_HANDLE_VALUE;
memset( m_apPlayer, 0, sizeof(m_apPlayer) );
#if __VER >= 11 // __MOD_VENDOR
memset( m_aSavedInven, 0, sizeof(m_aSavedInven) );
#endif
for(int i = 0; i < 6; i++) m_pMasterIcon[i] = NULL;
m_pHeroIcon = NULL;
#if __VER >= 15 // __2ND_PASSWORD_SYSTEM
m_n2ndPasswordNumber = -1;
#endif // __2ND_PASSWORD_SYSTEM
#ifdef __GAME_GRADE_SYSTEM
#ifdef __CLIENT
m_dwTimeGameGradeMarkRendering = 0xffffffff;
m_bGameGradeMarkRenderingSwitch = FALSE;
m_nGameGradeMarkAlpha = GAME_GRADE_MARK_MINIMUM_ALPHA;
m_eGameGradeMarkState = FADE_IN;
m_dwTimeOld = g_tmCurrent;
m_dwTimeGameGradeMarkShowing = 0xffffffff;
#endif // __CLIENT
#endif // __GAME_GRADE_SYSTEM
pOldModalWindow = NULL;
}
BOOL CNeuzApp::LoadOption()
{
g_Option.Load( "neuz.ini" );
#ifdef _DEBUG
g_Option.LoadToolTip( "ToolTip.ini" );
#endif // _DEBUG
// È*¸é »çÀÌÁî ¼¼ÆÃ
FULLSCREEN_WIDTH = g_Option.m_nResWidth;
FULLSCREEN_HEIGHT = g_Option.m_nResHeight;
SetLODDetail( g_Option.m_nViewArea );
m_dwCreationWidth = FULLSCREEN_WIDTH;
m_dwCreationHeight = FULLSCREEN_HEIGHT - GetSystemMetrics( SM_CYMENU );
return TRUE;
}
HRESULT CNeuzApp::ConfirmDevice( D3DCAPS9* pCaps, DWORD dwBehavior,
D3DFORMAT adapterFormat, D3DFORMAT backBufferFormat )
{
// ½ºÅ°´× ÄÚµå
if( dwBehavior & D3DCREATE_PUREDEVICE )
return E_FAIL; // GetTransform doesn't work on PUREDEVICE
if( pCaps->VertexShaderVersion < D3DVS_VERSION(1,1) ) // ¹öÅØ½º½¦ÀÌ´õ 1.1À» Áö¿ø ¸øÇϴ°¡.
{
g_bUsableVS = FALSE; // ¹öÅØ½º½¦ÀÌ´õ »ç¿ë¾ÈµÊ.
if( dwBehavior & D3DCREATE_HARDWARE_VERTEXPROCESSING ) // hw vp´Â »ç¿ë¸øÇÔ
return E_FAIL;
}
// Check that the device can blend vertices with at least two matrices
// (Software can always do up to 4 blend matrices)
if( (dwBehavior & D3DCREATE_HARDWARE_VERTEXPROCESSING ) ||
(dwBehavior & D3DCREATE_MIXED_VERTEXPROCESSING ) )
{
if( pCaps->MaxPointSize <= 1.0f )
return E_FAIL;
if( pCaps->MaxVertexBlendMatrices < 2 )
return E_FAIL;
}
// If this is a TnL device, make sure it supports directional lights
if( (dwBehavior & D3DCREATE_HARDWARE_VERTEXPROCESSING ) ||
(dwBehavior & D3DCREATE_MIXED_VERTEXPROCESSING ) )
{
if( !(pCaps->VertexProcessingCaps & D3DVTXPCAPS_DIRECTIONALLIGHTS ) )
return E_FAIL;
}
if( pCaps->RasterCaps & D3DPRASTERCAPS_FOGVERTEX )
return S_OK;
return S_OK;
}
//
// µð¹ÙÀ̽º »ý¼ºÈÄ ´Ü Çѹø ½ÇÇàÇÑ´Ù.
//
HRESULT CNeuzApp::OneTimeSceneInit()
{
CNetwork::GetInstance().StartLog();
// »ç¿îµå ÃʱâÈ*
HRESULT hr = g_SoundMng.Initialize( GetSafeHwnd(), DSSCL_PRIORITY, 2, 22050, 16 );
InitCustomSound( FAILED(hr) ? FALSE : TRUE );
g_SoundMng.m_nSoundVolume = (int)( (-1) * (1.0f - g_Option.m_fEffectVolume) * 5000 );
::SetVolume( g_Option.m_fBGMVolume );
m_ahCursor[ CUR_ATTACK ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_ATTACK ) );
m_ahCursor[ CUR_BASE ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_BASE ) ); // IDC_BASE
m_ahCursor[ CUR_CAMERA ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_CAMERA ) );
m_ahCursor[ CUR_CONTROL ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_CONTROL ) );
m_ahCursor[ CUR_DELAY ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_DELAY ) );
m_ahCursor[ CUR_EDIT ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_EDIT ) );
m_ahCursor[ CUR_GETITEM ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_GETITEM ) );
m_ahCursor[ CUR_HELP ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_CURSOR2 ) );
m_ahCursor[ CUR_NO ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_CURSOR3 ) );
m_ahCursor[ CUR_NPC ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_NPC ) );
m_ahCursor[ CUR_SELECT ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_SELECT ) );
m_ahCursor[ CUR_RESIZE_HORI ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_RESIZE_HORI ) );
m_ahCursor[ CUR_RESIZE_VERT ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_RESIZE_VERT ) );
m_ahCursor[ CUR_RESIZE_HV1 ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_RESIZE_HV1 ) );
m_ahCursor[ CUR_RESIZE_HV2 ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_RESIZE_HV2 ) );
m_ahCursor[ CUR_DOOR ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_DOOR ) );
m_ahCursor[ CUR_GATE ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_GATE ) );
m_ahCursor[ CUR_LEVER ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_LEVER ) );
m_ahCursor[ CUR_HAMMER ] = LoadCursor( m_hInstance, MAKEINTRESOURCE( IDC_HAMMER ) );
CWndBase::m_hDefaultCursor = m_ahCursor[ CUR_BASE ];
CWndEdit::m_hEditCursor = m_ahCursor[ CUR_EDIT ];
return S_OK;
}
void CNeuzApp::InitNProtect()
{
CScript s1;
if( s1.Load(MakePath( DIR_CLIENT, "GameGuard.txt.txt" ) ) )
s1.LoadString();
CScript s2;
if( s2.Load(MakePath( DIR_CLIENT, "GameGuard.inc" ) ) )
{
s2.GetToken();
while( s2.tok != FINISHED )
{
m_strArray.Add( s2.Token );
s2.GetToken();
}
}
PreInitNProtect();
DWORD dwResult = GetNProtect()->Init();
if( dwResult != NPGAMEMON_SUCCESS )
{
TCHAR msg[256];
LPCSTR lpszMsg;
switch (dwResult)
{
case NPGAMEMON_ERROR_EXIST:
lpszMsg = m_strArray.GetAt(0);//"°ÔÀÓ°¡µå°¡ ÀÌ¹Ì ½ÇÇà Áß ÀÔ´Ï´Ù. ÀçºÎÆÃ ÈÄ ´Ù½Ã ½ÇÇàÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGAMEMON_ERROR_GAME_EXIST:
lpszMsg = m_strArray.GetAt(1);//"°ÔÀÓÀÌ Áߺ¹ ½ÇÇàµÇ¾ú°Å³ª °ÔÀÓ°¡µå°¡ ÀÌ¹Ì ½ÇÇà Áß ÀÔ´Ï´Ù. °ÔÀÓ Á¾·á ÈÄ ´Ù½Ã ½ÇÇàÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGAMEMON_ERROR_INIT:
lpszMsg = m_strArray.GetAt(2);//"°ÔÀÓ°¡µå ÃʱâÈ* ¿¡·¯ÀÔ´Ï´Ù. ÀçºÎÆÃ ÈÄ ´Ù½Ã ½ÇÇàÇØº¸°Å³ª Ãæµ¹ÇÒ ¼ö ÀÖ´Â ´Ù¸¥ ÇÁ·Î±×·¥µéÀ» Á¾·áÇÑ ÈÄ ½ÇÇàÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGAMEMON_ERROR_AUTH_GAMEGUARD:
case NPGAMEMON_ERROR_NFOUND_GG:
case NPGAMEMON_ERROR_AUTH_INI:
case NPGAMEMON_ERROR_NFOUND_INI:
lpszMsg = m_strArray.GetAt(3);//"°ÔÀÓ°¡µå ÆÄÀÏÀÌ ¾ø°Å³ª º¯Á¶µÇ¾ú½À´Ï´Ù. °ÔÀÓ°¡µå ¼Â¾÷ ÆÄÀÏÀ» ¼³Ä¡Çغ¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGAMEMON_ERROR_CRYPTOAPI:
lpszMsg = m_strArray.GetAt(4);//"À©µµ¿ìÀÇ ÀϺΠ½Ã½ºÅÛ ÆÄÀÏÀÌ ¼Õ»óµÇ¾ú½À´Ï´Ù. ÀÎÅÍ³Ý ÀͽºÇ÷η¯(IE)¸¦ ´Ù½Ã ¼³Ä¡Çغ¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGAMEMON_ERROR_EXECUTE:
lpszMsg = m_strArray.GetAt(5);//"°ÔÀÓ°¡µå ½ÇÇà¿¡ ½ÇÆÐÇß½À´Ï´Ù. °ÔÀÓ°¡µå ¼Â¾÷ ÆÄÀÏÀ» ´Ù½Ã ¼³Ä¡Çغ¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGAMEMON_ERROR_ILLEGAL_PRG:
lpszMsg = m_strArray.GetAt(6);//"ºÒ¹ý ÇÁ·Î±×·¥ÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù. ºÒÇÊ¿äÇÑ ÇÁ·Î±×·¥À» Á¾·áÇÑ ÈÄ ´Ù½Ã ½ÇÇàÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGMUP_ERROR_ABORT:
lpszMsg = m_strArray.GetAt(7);//"°ÔÀÓ°¡µå ¾÷µ¥ÀÌÆ®¸¦ Ãë¼ÒÇϼ̽À´Ï´Ù. Á¢¼ÓÀÌ °è¼Ó µÇÁö ¾ÊÀ» °æ¿ì ÀÎÅÍ³Ý ¹× ¹æÈ*º® »óŸ¦ Á¡°ËÇØº¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGMUP_ERROR_CONNECT:
case NPGMUP_ERROR_DOWNCFG:
lpszMsg = m_strArray.GetAt(8);//"°ÔÀÓ°¡µå ¾÷µ¥ÀÌÆ® ¼*¹ö Á¢¼Ó¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù. Àá½Ã ÈÄ Àç½Ãµµ ÇØº¸°Å³ª, ÀÎÅÍ³Ý ¹× ¹æÈ*º® »óŸ¦ Á¡°ËÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGMUP_ERROR_AUTH:
lpszMsg = m_strArray.GetAt(9);//"°ÔÀÓ°¡µå ¾÷µ¥ÀÌÆ®¸¦ ¿Ï·áÇÏÁö ¸ø Çß½À´Ï´Ù. ¹ÙÀÌ·¯½º °Ë»ç¸¦ ÇØº¸½Ã°Å³ª, PC °ü¸® ÇÁ·Î±×·¥À» »ç¿ëÇÏ½Ã¸é ¼³Á¤À» Á¶Á¤ÇÑ ÈÄ °ÔÀÓÀ» ½ÇÇàÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù.";
break;
case NPGAMEMON_ERROR_NPSCAN:
default:
// ÀûÀýÇÑ Á¾·á ¸Þ½ÃÁö Ãâ·Â, UI ÃʱâÈ* ÈĶó¸é MessageBox ´ë½Å °ÔÀÓ UI¸¦ »ç¿ëÇØµµ µÊ
//wsprintf( msg, "°ÔÀÓ°¡µå ½ÇÇà ¿¡·¯ : %lu", dwResult );
wsprintf( msg, m_strArray.GetAt(10), dwResult );
lpszMsg = msg;
break;
}
if( lpszMsg )
::Error( "nProtect GameGuard : %s", lpszMsg );
// MessageBox( GetSafeHwnd(), lpszMsg, "nProtect GameGuard", MB_OK );
ExitProcess( -1 );
}
GetNProtect()->SetHwnd( GetSafeHwnd() );
}
///////////////////////////////////////////////////////
HRESULT CNeuzApp::RestoreDeviceObjects()
{
#ifdef __YENV
if( m_pEffect != NULL )
m_pEffect->OnResetDevice();
if( FAILED( LoadTextureFromRes( m_pd3dDevice, MakePath( DIR_MODELTEX, "Env.dds" ), &m_pEnvTex ) ) )
{
Error( "Env.dds ÅØ½ºÃÄ ¸øÀÐÀ½" );
}
#endif //__YENV
if( ( m_dwCreateFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING ) || ( m_dwCreateFlags & D3DCREATE_MIXED_VERTEXPROCESSING ) ||
m_d3dCaps.VertexShaderVersion >= D3DVS_VERSION(1,1) )
{
CreateSkinningVS( m_pd3dDevice, _T("skining2.vsh") );
}
if( m_d3dCaps.RasterCaps & D3DPRASTERCAPS_DEPTHBIAS ) // d3d9.0¿¡ »õ·Î Ãß°¡µÈ ±â´ÉÀε¥ ÀÌ°É Áö¿ø¸øÇÏ´Â Ä«µå°¡ ÀÖ´Ù. ±×·¡¼* ÀÌ·¸°Ô °Ë»çÇÑ´Ù.
g_ModelGlobal.m_bDepthBias = TRUE;
if( g_Option.m_nShadow < 2 && m_d3dCaps.MaxSimultaneousTextures <= 2 ) // ½Ç½Ã°£±×¸²ÀÚ¸¦ ¼¼ÆÃÇϰí Çϵå¿þ¾î°¡ µþ¸®¸é
{
g_Option.m_nShadow = 2; // ½Ç½Ã°£ ±×¸²ÀÚ ±â´ÉÀ» ²ö´Ù.
MessageBox( GetSafeHwnd(), m_strArray.GetAt(13), m_strArray.GetAt(11), MB_OK );
//MessageBox( GetSafeHwnd(), "ÀÌ ±×·¡ÇÈÄ«µå¿¡¼± ±×¸²ÀÚ ±â´ÉÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ±×¸²ÀÚ ±â´ÉÀ» ³·À½À¸·Î ¹Ù²ß´Ï´Ù.", "¾È³»", MB_OK );
}
int nMem = m_pd3dDevice->GetAvailableTextureMem();
if( g_Option.m_nTextureQuality == 0 && nMem <= (1024 * 1024 * 64) )
{
g_Option.m_nTextureQuality = 1; // 64¸Þ°¡ ÀÌÇÏÀÇ ÅØ½ºÃĸ޸𸮿¡¼± ÅØ½ºÃÄǰÁúÀ» ³·Ãá´Ù.
MessageBox( GetSafeHwnd(), m_strArray.GetAt(15), m_strArray.GetAt(14), MB_OK );
//MessageBox( GetSafeHwnd(), "»ç¿ë°¡´ÉÇÑ ÅØ½ºÃÄ ¸Þ¸ð¸®°¡ ºÎÁ·Çؼ* ÅØ½ºÃÄ Ç°ÁúÀ» ³·Ãä´Ï´Ù.", "°æ°í", MB_OK );
}
if( g_Option.m_nShadow < 2 )
{
if( nMem <= (1024 * 1024 * 64) )
{
g_Option.m_nShadow = 2; // 64¸Þ°¡ ÀÌÇÏÀÇ ÅØ½ºÃĸ޸𸮿¡¼± ±×¸²ÀÚ±â´ÉÀ» »ç¿ëÇÏÁö ¸øÇÑ´Ù.
MessageBox( GetSafeHwnd(), m_strArray.GetAt(16), m_strArray.GetAt(14), MB_OK );
//MessageBox( GetSafeHwnd(), "»ç¿ë°¡´ÉÇÑ ÅØ½ºÃÄ ¸Þ¸ð¸®°¡ ºÎÁ·Çؼ* ±×¸²ÀÚ ±â´ÉÀ» ÇØÁ¦ÇÕ´Ï´Ù.", "°æ°í", MB_OK );
} else
{
// CreateShadowMap( m_pd3dDevice, m_d3dpp.BackBufferFormat );
BOOL bSuccess = CreateShadowMap( m_pd3dDevice, D3DFMT_R5G6B5 );
if( bSuccess == FALSE )
{
// ½ÇÆÐÇÏ¸é ºñµÍ¸Þ¸ð¸® ºÎÁ·À̶ó ÆÇ´ÜÇÏ°í ¿É¼Ç °*Á¦·Î ³·Ãã.
if( g_Option.m_nShadow < 2 )
g_Option.m_nShadow ++;
if( g_Option.m_nTextureQuality < 2 )
g_Option.m_nTextureQuality ++;
}
}
}
if( g_Option.m_nBloom == 1 )
{
if( m_d3dCaps.PixelShaderVersion >= D3DPS_VERSION(1,1) )
g_Glare.Create( m_pd3dDevice, D3DFMT_R5G6B5, g_Option.m_nResWidth, g_Option.m_nResHeight - 48 );
else
g_Option.m_nBloom = 0;
}
g_ParticleMng.RestoreDeviceObjects( m_pd3dDevice );
g_TailEffectMng.RestoreDeviceObjects( m_pd3dDevice );
// Initialize the particle system
// HRESULT hr;
extern LPDIRECT3DTEXTURE9 g_pReflectMap;
if( FAILED( LoadTextureFromRes( m_pd3dDevice, MakePath( DIR_MODELTEX, "etc_reflect.tga" ), &g_pReflectMap ) ) )
{
Error( "etc_Reflect.tga ÅØ½ºÃÄ ¸øÀÐÀ½" );
}
g_ModelGlobal.RestoreDeviceObjects( m_pd3dDevice );
m_pd3dDevice->SetRenderState( D3DRS_SHADEMODE, D3DSHADE_GOURAUD );
CWndBase::m_Theme.RestoreDeviceObjects();
g_WndMng.RestoreDeviceObjects();
if( m_pd3dDevice )
{
m_2DRender.RestoreDeviceObjects(&m_d3dsdBackBuffer );
if( g_WorldMng.Get() )
g_WorldMng.Get()->RestoreDeviceObjects( m_pd3dDevice );
CWorld::StaticRestoreDeviceObjects( m_pd3dDevice );
prj.m_modelMng.RestoreDeviceObjects(m_pd3dDevice);
prj.m_terrainMng.RestoreDeviceObjects();
}
if( g_pBipedMesh )
g_pBipedMesh->RestoreDeviceObjects();
g_SfxMng.RestoreDeviceObjects();
g_SfxMeshMng.RestoreDeviceObjects();
g_DamageNumMng.RestoreDeviceObjects();
g_DialogMsg.RestoreDeviceObjects();
CWorldMap* pWorldMap = CWorldMap::GetInstance();
pWorldMap->RestoreDeviceObjects();
return S_OK;
}
///////////////////////////////////////////////////
HRESULT CNeuzApp::InvalidateDeviceObjects()
{
#ifdef __YENV
if( m_pEffect != NULL )
m_pEffect->OnLostDevice();
SAFE_RELEASE(m_pEnvTex);
#endif //__YENV
CWorldMap* pWorldMap = CWorldMap::GetInstance();
pWorldMap->InvalidateDeviceObjects();
g_Glare.DeleteDeviceObjects();
DeleteShadowMap( m_pd3dDevice );
DeleteVertexShader( m_pd3dDevice );
CWndBase::m_Theme.InvalidateDeviceObjects();
if( g_WorldMng.Get() )
g_WorldMng.Get()->InvalidateDeviceObjects();
CWorld::StaticInvalidateDeviceObjects();
g_WndMng.InvalidateDeviceObjects();
prj.m_modelMng.InvalidateDeviceObjects();
prj.m_terrainMng.InvalidateDeviceObjects();
m_2DRender.InvalidateDeviceObjects();
if( g_pBipedMesh )
g_pBipedMesh->InvalidateDeviceObjects();
g_SfxMng.InvalidateDeviceObjects();
g_SfxMeshMng.InvalidateDeviceObjects();
extern LPDIRECT3DTEXTURE9 g_pReflectMap;
SAFE_RELEASE( g_pReflectMap );
g_ParticleMng.InvalidateDeviceObjects();
g_TailEffectMng.InvalidateDeviceObjects();
g_ModelGlobal.InvalidateDeviceObjects( m_pd3dDevice );
g_DamageNumMng.InvalidateDeviceObjects();
g_DialogMsg.InvalidateDeviceObjects();
return S_OK;
}
///////////////////////////////////////////////////////
HRESULT CNeuzApp::DeleteDeviceObjects()
{
RestoreFakeDisplayMode();
#ifdef __YENV
SAFE_RELEASE(m_pEffect);
#endif //__YENV
CWorldMap* pWorldMap = CWorldMap::GetInstance();
pWorldMap->DeleteDeviceObjects();
g_toolTip.Delete();
#if __VER >= 15 // __IMPROVE_SYSTEM_VER15
g_toolTipSub1.Delete();
g_toolTipSub2.Delete();
#endif // __IMPROVE_SYSTEM_VER15
g_Glare.DeleteDeviceObjects();
CWndBase::m_Theme.DeleteDeviceObjects();
g_WndMng.DestroyApplet();
g_WndMng.Free();
if( g_WorldMng.Get() )
g_WorldMng.Get()->DeleteDeviceObjects();
g_WorldMng.Free();
CWorld::StaticDeleteDeviceObjects();
g_WndMng.DeleteDeviceObjects();
prj.m_modelMng.DeleteDeviceObjects();
prj.m_terrainMng.DeleteDeviceObjects();
m_2DRender.DeleteDeviceObjects();
g_DamageNumMng.DeleteDeviceObjects();
g_DialogMsg.DeleteDeviceObjects();
if( g_pBipedMesh )
g_pBipedMesh->DeleteDeviceObjects();
g_TextureMng.DeleteDeviceObjects();
SAFE_DELETE( g_pBipedMesh ); // g_Object3DMng°¡ ÆÄ±«µÇ±âÀü¿¡ ºÎ¸¦°Í
g_Shadow.DeleteDeviceObjects();
// ¿©±â¼* À̰ÍÀ» µû·Î ºÒ·¯ÁØ ÀÌÀ¯´Â °ÔÀÓÁ¾·á½Ã¿¡ ReleaseµÇÁö ¾ÊÀº ¼ö¸¦ ÆÇÁ¤ÇÒ¶§
// g_Object3DMngÀÇ ÆÄ±«ÀÚ°¡ ´Ê°Ô ¹ßµ¿µÇ¾î ´©¶ôµÇ±â ¶§¹®ÀÌ´Ù. ±×·¡¼* ¿©±â¼* ¸ÕÀú ÆÄ±«½ÃÄÑÁØ´Ù. °á°ú´Â °°´Ù.
// Destroy¸¦ ´Ù¸¥µ¥¼* È£ÃâÇÏÁö ¸»°Í!
g_Object3DMng.DeleteDeviceObjects();
#ifdef __PROF
g_Prof.Show( m_fFPS );
#endif
g_SfxMng.DeleteDeviceObjects();
g_SfxTex.DeleteAll();
g_SfxObjMng.RemoveAll();
g_SfxMeshMng.DeleteAll();
g_Object3DMng.Destroy();
CWndNeuz::FreeTileTexture();
#if __VER >= 11 // __SYS_COLLECTING
m_TexCltGauge[0].DeleteDeviceObjects();
m_TexCltGauge[1].DeleteDeviceObjects();
#endif
m_TextureGauge[0].DeleteDeviceObjects();
m_TextureGauge[1].DeleteDeviceObjects();
m_TextureGauge[2].DeleteDeviceObjects();
m_TextureGauge[3].DeleteDeviceObjects();
m_TextureGauge[4].DeleteDeviceObjects();
m_TextureHPGauge[0].DeleteDeviceObjects();
m_TextureHPGauge[1].DeleteDeviceObjects();
m_TextureHPGauge[2].DeleteDeviceObjects();
m_TextureTurboGauge[0].DeleteDeviceObjects();
m_TextureTurboGauge[1].DeleteDeviceObjects();
m_TextureCastingGauge[0].DeleteDeviceObjects();
m_TextureCastingGauge[1].DeleteDeviceObjects();
#if __VER >= 8 // __CSC_VER8_5
m_TextureAngelGauge[0].DeleteDeviceObjects();
m_TextureAngelGauge[1].DeleteDeviceObjects();
#endif //__CSC_VER8_5
m_TexturePackPVP.DeleteDeviceObjects();
m_TexLoading.DeleteDeviceObjects();
m_texQuestEmoticon.DeleteDeviceObjects();
return S_OK;
}
//
// Á¾·áÇϱâ Àü °´Ã¼¸¦ ÆÄ±«ÇÏ´Â °÷
//
HRESULT CNeuzApp::FinalCleanup()
{
#ifdef _DEBUG
WaitLoading();
#endif
if( g_hMutex )
::CloseHandle( g_hMutex );
// ´Ù½Ã ¾ËÆ®ÅÇ µÇ°Ô
::SystemParametersInfo (SPI_SCREENSAVERRUNNING, FALSE, NULL, 0); // 95, 98, Me¸é API¸¦ ¾´´Ù.
#if __VER >= 8 //__Y_GAMMA_CONTROL_8
Drv_SetGamma(GetSafeHwnd(), 1.0f, 10, 1.0f);
#endif //__Y_GAMMA_CONTROL_8
for( int i = 0; i < MAX_CHARACTER_LIST; i++ )
{
if( m_apPlayer[i] )
m_apPlayer[i]->m_pModel = NULL;
SAFE_DELETE( m_apPlayer[i] );
}
g_dpCertified.DeleteDPObject();
#ifdef __CERTIFIER_COLLECTING_SYSTEM
DPCollectClient->DeleteDPObject();
#endif // __CERTIFIER_COLLECTING_SYSTEM
g_dpLoginClient.DeleteDPObject();
g_DPlay.DeleteDPObject();
g_GuildWarMng.Clear();
g_GuildMng.Clear();
SAFE_DELETE( CParty::m_pPool );
SAFE_DELETE( CChatting::m_pPool );
SAFE_DELETE( CGuildMember::sm_pPool );
SAFE_DELETE( CGuild::sm_pPool );
SAFE_DELETE( CMover::m_pPool );
SAFE_DELETE( CActionMover::m_pPool );
SAFE_DELETE( CItem::m_pPool );
SAFE_DELETE( CDamageNum::m_pPool );
SAFE_DELETE( CSfxGenMoveMark::m_pPool );
SAFE_DELETE( CSfxGenWaterCircle::m_pPool );
SAFE_DELETE( CSfxGenNormalDmg01::m_pPool );
SAFE_DELETE( CSfxModel::m_pPool );
SAFE_DELETE( CSfxGenRainCircle::m_pPool );
#if __VER >= 12 // __LORD
// ±ºÁÖ Çù·Â °´Ã¼ÀÇ Á¦°Å
CCLord::Instance()->DestroyColleagues();
#endif // __LORD
UninitializeNetLib();
CWndNeuz::FreeTileTexture();
CResFile::FreeResource();
UnInitCustomSound();
g_Option.Save( "neuz.ini" );
return S_OK;
}
#ifdef __WRITEAVI
#include "..\_multimedia\writeAvi.h"
#pragma comment( lib, "vfw32.lib" )
CAVIFile avi( _T( "Capture\\test.avi" ) );
HRESULT CNeuzApp::CaptureBitmap()
{
IDirect3DSurface8* pDestSurface;
m_pd3dDevice->GetBackBuffer( 0, D3DBACKBUFFER_TYPE_MONO, &pDestSurface );
RECT rcSource[] = { 0, 0, 1024, 768 };
POINT ptDest[] = { 0, 0 };
D3DLOCKED_RECT lockedRect;
CRect rectIn ( 0, 0, m_d3dsdBackBuffer.Width, m_d3dsdBackBuffer.Height );//cb.bih.biWidth, abs(cb.bih.biHeight) );
D3DVIEWPORT9 viewport;
m_pd3dDevice->GetViewport( &viewport );
//LPBYTE lpData = new BYTE[ viewport.Width * viewport.Height * 3 ];D3DLOCK_DISCARD
if( pDestSurface->LockRect( &lockedRect, rectIn, D3DLOCK_READONLY ) == D3D_OK )// Lock
{
// LPDWORD pWord = (LPDWORD)lockedRect.pBits;
// memcpy( bmp.GetData(), pWord, viewport.Width * viewport.Height * 4 );
//
//LPWORD pWord = (LPWORD)lockedRect.pBits;
//for(int y = 0; y < viewport.Height; y++ )
//{
// for(int x = 0; x < viewport.Width; x++)
// {
/// WORD wData = pWord[ y * viewport.Width + x ];
// // 16 bit color
// BYTE byData1 = ( wData & 0xf800 ) >> 8;
// BYTE byData2 = ( wData & 0x07e0 ) >> 3;
// BYTE byData3 = ( wData & 0x001f ) << 3 ;
// DWORD dwOffset = ( y * viewport.Width + x ) * 3;
// lpData[ dwOffset + 0 ] = byData3;
// lpData[ dwOffset + 1 ] = byData2;
// lpData[ dwOffset + 2 ] = byData1;
// }
//}
//
LPDWORD pWord = (LPDWORD)lockedRect.pBits;
memcpy( g_bmp.GetData(), pWord, viewport.Width * viewport.Height * 4 );
pDestSurface->UnlockRect();
}
pDestSurface->Release();
avi.AddFrame( g_bmp );
//SAFE_DELETE( lpData );
return S_OK;
}
#endif
/*
IDirect3DSurface8* pDestSurface;
m_pd3dDevice->GetBackBuffer( 0, D3DBACKBUFFER_TYPE_MONO, &pDestSurface );
D3DLOCKED_RECT lockedRect;
CRect rectIn ( 0, 0, m_d3dsdBackBuffer.Width, m_d3dsdBackBuffer.Height );//cb.bih.biWidth, abs(cb.bih.biHeight) );
D3DVIEWPORT9 viewport;
m_pd3dDevice->GetViewport( &viewport );
LPBYTE lpData = new BYTE[ viewport.Width * viewport.Height * 3 ];
ZeroMemory( lpData, viewport.Width * viewport.Height * 3 );
if( pDestSurface->LockRect( &lockedRect, rectIn, 0 ) == D3D_OK )// Lock
{
LPWORD pWord = (LPWORD)lockedRect.pBits;
for(int y = 0; y < viewport.Height; y++ )
{
for(int x = 0; x < viewport.Width; x++)
{
WORD wData = pWord[ y * viewport.Width + x ];
// 16 bit color
BYTE byData1 = ( wData & 0xf800 ) >> 8;
BYTE byData2 = ( wData & 0x07e0 ) >> 3;
BYTE byData3 = ( wData & 0x001f ) << 3 ;
DWORD dwOffset = ( y * viewport.Width + x ) * 3;
lpData[ dwOffset + 0 ] = byData3;
lpData[ dwOffset + 1 ] = byData2;
lpData[ dwOffset + 2 ] = byData1;
}
}
pDestSurface->UnlockRect();
TCHAR szFileName[ 128 ];
_stprintf( szFileName, _T( "Capture\\%s%06d.bmp" ), m_szCaptureFileName, m_nCaptureCnt );
// SaveBMP( szFileName, (LPBYTE)lockedRect.pBits, CSize( viewport.Width, viewport.Height ) );
delete lpData;
m_nCaptureCnt++;
}
pDestSurface->Release();
return S_OK;
}
*/
//
// È*¸éÀ» ·£´õ¸µ ÇÑ´Ù. (Ãâ·Â)
//
#ifdef __VCINEMASCOPE
int m_nCinemaScopeCnt = -100;
#endif
HRESULT CNeuzApp::Render()
{
_PROFILE("CNeuzApp::Render()");
if( m_bActive == FALSE )
return S_FALSE;
// Clear the viewport
m_pd3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, CWndBase::m_Theme.m_d3dcBackground, 1.0f, 0 ) ;
CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetWndBase( APP_WORLD );
if( pWndWorld )
pWndWorld ->ClearFlyTarget(); // ºñÇà¶§ °ø°Ý°¡´ÉÇÑ Å¸°Ùµé ¸®½ºÆ® Áö¿öÁÜ.
//pd3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, D3DCOLOR_ARGB( 255, 90, 146, 222 ), 1.0f, 0 ) ;
//m_pd3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, D3DCOLOR_ARGB( 255, 255, 255, 255 ), 1.0f, 0 ) ;
//m_pd3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, D3DCOLOR_ARGB( 255, 0, 0, 0 ), 1.0f, 0 ) ;
// Begin the scene
if( g_Option.m_nShadow < 2 ) // ³ôÀ½/Áß°£ ¸¸ ½¦µµ¿ì ¸ÊÀ» ¸¸µç´Ù.
{
_PROFILE("Make Shadow Map");
CHECK1();
void RenderShadowMap( LPDIRECT3DDEVICE9 pd3dDevice, CObj **pList, int nMax );
if( g_pPlayer )
{
CWorld *pWorld = g_pPlayer->GetWorld();
if( pWorld )
{
#if __VER >= 13 // __HOUSING
#if __VER >= 14 // __BS_FIX_SHADOW_ONOBJECT
if( pWorld->GetID() != WI_WORLD_MINIROOM ) // 7.28±âȹ¿äû : ÇÏ¿ì¡ ±×¸²ÀÚ Á¦°Å
RenderShadowMap( m_pd3dDevice, pWorld->m_aobjCull, pWorld->m_nObjCullSize );
#else
if(pWorld->GetID() != WI_WORLD_MINIROOM && pWorld->GetID() != WI_INSTANCE_OMINOUS && pWorld->GetID() != WI_INSTANCE_OMINOUS_1)
RenderShadowMap( m_pd3dDevice, pWorld->m_aobjCull, pWorld->m_nObjCullSize );
#endif //__VER >= 14
#endif //__VER >= 13
}
}
CHECK2( " Render ShadowMap" );
}
// »Ç»þ½Ã ¿É¼ÇÀÌ ÄÑÁ®ÀÖÀ¸¸é ·»´õŸ°Ù¿¡ °ÔÀÓÈ*¸éÀ» ·»´õÇÔ.
if( g_Option.m_nBloom )
{
_PROFILE("Make Bloom");
CWorld* pWorld = g_WorldMng.Get();
if( pWorld && g_pPlayer && g_Glare.m_bActive )
{
pWorld->Projection( m_pd3dDevice, g_Glare.m_Src.m_nWidth, g_Glare.m_Src.m_nHeight );
pWorld->SetCamera( &m_camera );
g_Glare.m_Src.BeginScene();
DWORD dwColor = CWorld::GetDiffuseColor();
m_2DRender.m_pd3dDevice->Clear(0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, dwColor /*D3DCOLOR_ARGB( 255, 255, 255, 255 )*/, 1.0f, 0 ) ;
pWorld->RenderBase( m_pd3dDevice, g_WndMng.m_Theme.m_pFontWorld ); // ÁöÇü°ú ¿ÀºêÁ§Æ®¸¦ ¹Ì¸® ·»´õ¸µ ÇØµÒ.
g_Glare.m_Src.EndScene();
g_Glare.Blur( m_pd3dDevice ); // m_Src¸¦ m_Surface[0]¿¡ ºí·¯ÇÔ.
}
}
CHECK1();
if(SUCCEEDED(m_pd3dDevice->BeginScene()))
{
_PROFILE("BeginScene");
CHECK2( "Begin" );
g_nRenderCnt ++;
CHECK1();
CWorldMap* pWorldMap = CWorldMap::GetInstance();
g_WndMng.PaintRoot(&m_2DRender);
#ifdef __VCINEMASCOPE
CRect rect = g_WndMng.GetWndRect();
#if __VER >= 15 // __IMPROVE_QUEST_INTERFACE
CWndDialog* pWndDialog = (CWndDialog*)g_WndMng.GetWndBase( APP_DIALOG_EX );
#else // __IMPROVE_QUEST_INTERFACE
CWndDialog* pWndDialog = (CWndDialog*)g_WndMng.GetWndBase( APP_DIALOG );
#endif // __IMPROVE_QUEST_INTERFACE
// m_nCinemaScopeCnt = 0;
if( pWndDialog )
{
m_2DRender.RenderFillRect( CRect( 0, 0 + m_nCinemaScopeCnt, rect.Width(), 100 + m_nCinemaScopeCnt ), 0xff000000 );
m_2DRender.RenderFillRect( CRect( 0, 100 + m_nCinemaScopeCnt, rect.Width(), 150 + m_nCinemaScopeCnt ), 0xff000000, 0xff000000, 0x00000000, 0x00000000 );
m_2DRender.RenderFillRect( CRect( 0, rect.Height() - 100 - m_nCinemaScopeCnt, rect.Width(), rect.Height() - m_nCinemaScopeCnt ), 0xff000000 );
m_2DRender.RenderFillRect( CRect( 0, rect.Height() - 150 - m_nCinemaScopeCnt, rect.Width(), rect.Height() - 100 - m_nCinemaScopeCnt ), 0x00000000, 0x00000000, 0xff000000, 0xff000000 );
}
#endif
CHECK2( "Render WndMng" );
if( g_WndMng.m_pWndWorld )
g_WndMng.m_pWndWorld->RenderFocusArrow( CPoint(0,0) );
// µå·¡±× ¾ÆÀÌÅÛ
if( CWndBase::m_GlobalShortcut.IsEmpty() == FALSE )
{
GET_CLIENT_POINT( GetSafeHwnd(), point );
if( CWndBase::m_GlobalShortcut.m_pTexture )
CWndBase::m_GlobalShortcut.m_pTexture->Render( &m_2DRender, CPoint( point.x - 16, point.y - 16 ) );
else
{
int nHeight = m_2DRender.m_pFont->GetMaxHeight() / 2;
m_2DRender.TextOut( point.x - nHeight , point.y - nHeight, CWndBase::m_GlobalShortcut.m_szString );
}
}
// Åø¸³ °ü·Ã
g_toolTip.Paint(&m_2DRender);
#if __VER >= 15 // __IMPROVE_SYSTEM_VER15
g_toolTipSub1.Paint( &m_2DRender );
g_toolTipSub2.Paint( &m_2DRender );
#endif // __IMPROVE_SYSTEM_VER15
m_pd3dDevice->SetRenderState( D3DRS_ZWRITEENABLE, TRUE );
m_2DRender.SetFont( CWndBase::m_Theme.m_pFontWorld );
g_ClientMsg.Render( CPoint( m_2DRender.m_clipRect.Width() / 2 , 520 * m_2DRender.m_clipRect.Height() / 768 ), &m_2DRender );
m_2DRender.SetFont( CWndBase::m_Theme.m_pFontText );
#ifdef __PROF
// CHECK1();
// m_2DRender.TextOut( 600, 120, g_Prof.m_szResult, D3DCOLOR_ARGB( 255, 255, 255, 255 ) );
// CHECK2( "Prof Text" );
#endif
// ¸ÊÀ̵¿°£¿¡ À̹ÌÁö ·ÎµùÃâ·Â
if( m_bTexLoad && m_bTexLoadAlpha )
{
m_nTexAlpha = (int)( m_nTexAlpha - 6.0f );
if( m_nTexAlpha < 0 )
{
m_nTexAlpha = 0;
m_bTexLoad = FALSE;
m_bTexLoadAlpha = FALSE;
m_TexLoading.DeleteDeviceObjects();
}
else
{
#if __VER >= 9 // __CSC_VER9_RESOLUTION
int wideOffsetX = 0;
if(g_Option.m_nResWidth == 1280 && (g_Option.m_nResHeight == 720 || g_Option.m_nResHeight == 768 || g_Option.m_nResHeight == 800)) //Wide Offset
{
m_TexLoading.m_size = CSize(960, FULLSCREEN_HEIGHT);
wideOffsetX = (g_Option.m_nResWidth - 960) / 2;
m_2DRender.RenderFillRect( CRect( 0, 0, g_Option.m_nResWidth, g_Option.m_nResHeight ), 0xff000000 );
}
else if(g_Option.m_nResWidth == 1360 && g_Option.m_nResHeight == 768)
{
m_TexLoading.m_size = CSize(1024, FULLSCREEN_HEIGHT);
wideOffsetX = (g_Option.m_nResWidth - 1024) / 2;
m_2DRender.RenderFillRect( CRect( 0, 0, g_Option.m_nResWidth, g_Option.m_nResHeight ), 0xff000000 );
}
else if(g_Option.m_nResWidth == 1440 && g_Option.m_nResHeight == 900)
{
m_TexLoading.m_size = CSize(1200, FULLSCREEN_HEIGHT);
wideOffsetX = (g_Option.m_nResWidth - 1200) / 2;
m_2DRender.RenderFillRect( CRect( 0, 0, g_Option.m_nResWidth, g_Option.m_nResHeight ), 0xff000000 );
}
else if(g_Option.m_nResWidth == 1680 && g_Option.m_nResHeight == 1050)
{
m_TexLoading.m_size = CSize(1400, FULLSCREEN_HEIGHT);
wideOffsetX = (g_Option.m_nResWidth - 1400) / 2;
m_2DRender.RenderFillRect( CRect( 0, 0, g_Option.m_nResWidth, g_Option.m_nResHeight ), 0xff000000 );
}
else
m_TexLoading.m_size = CSize(FULLSCREEN_WIDTH, FULLSCREEN_HEIGHT);
m_2DRender.RenderTexture( CPoint(0 + wideOffsetX, 0), &m_TexLoading, m_nTexAlpha );
#else //__CSC_VER9_RESOLUTION
m_TexLoading.m_size = CSize(FULLSCREEN_WIDTH, FULLSCREEN_HEIGHT);
m_2DRender.RenderTexture( CPoint(0,0), &m_TexLoading, m_nTexAlpha );
#endif //__CSC_VER9_RESOLUTION
}
}
pWorldMap->RenderWorldMap( &m_2DRender );
#ifdef __GAME_GRADE_SYSTEM
#ifdef __CLIENT
if( ::GetLanguage() == LANG_KOR )
{
g_WndMng.m_pTheme->RenderGameGradeMark( &m_2DRender, static_cast< DWORD >( m_nGameGradeMarkAlpha ) );
}
#endif // __CLIENT
#endif // __GAME_GRADE_SYSTEM
CHECK1();
m_pd3dDevice->EndScene();
CHECK2( "End" );
}
return S_OK;
}
// Ç÷¹ÀÌ °¡´É ½Ã°£ ¼¼ÆÃ
void CNeuzApp::SetLeftTime( long lTimeLeft )
{
m_dwTimeLeft = lTimeLeft * 1000;
m_dwCurTick = timeGetTime();
}
void CNeuzApp::NotifyLeftMinute( UINT type, int nMin )
{
if( ::GetLanguage() == LANG_THA )
{
if( type == m_nLeftTimeNotifyStatus )
return;
m_nLeftTimeNotifyStatus = type;
char szBuffer[256];
sprintf( szBuffer, prj.GetText(TID_GAME_REMAINPLAYTIMEMIN), nMin );
g_WndMng.OpenMessageBox( szBuffer );
}
}
// ű¹ÀÇ °æ¿ì Ç÷¹ÀÌ °¡´É ½Ã°£À» Ç¥½ÃÇØ ÁØ´Ù.
void CNeuzApp::NotifyLeftTime()
{
if( ::GetLanguage() != LANG_THA )
return;
if( m_dwTimeLeft == 0 )
return;
DWORD dw = timeGetTime() - m_dwCurTick;
if( dw > 1000 )
{
m_dwCurTick = timeGetTime();
if( m_dwTimeLeft >= dw )
m_dwTimeLeft -= dw;
else
{
m_dwTimeLeft = 0; // 0Ãʴ ǥ½ÃÇÏÁö ¾Ê´Â´Ù.
return;
}
long lLeftTime = ( m_dwTimeLeft + 500 ) / 1000; // + 500¹Ý¿Ã¸²
if( lLeftTime <= 10 ) // 10ÃÊ ÀÌÇÏ
{
char szBuffer[256];
sprintf( szBuffer, prj.GetText(TID_GAME_REMAINPLAYTIMESEC), lLeftTime );
g_WndMng.PutString( szBuffer );
}
else if( lLeftTime <= 60 * 15 ) // 15ºÐ ÀÌÇÏ
{
switch( lLeftTime )
{
case 60 * 1:
NotifyLeftMinute( NOTIFY_STATUS_59MIN, 1 );
break;
case 60 * 2:
NotifyLeftMinute( NOTIFY_STATUS_58MIN, 2 );
break;
case 60 * 3:
NotifyLeftMinute( NOTIFY_STATUS_57MIN, 3 );
break;
case 60 * 4:
NotifyLeftMinute( NOTIFY_STATUS_56MIN, 4 );
break;
case 60 * 5:
NotifyLeftMinute( NOTIFY_STATUS_55MIN, 5 );
break;
case 60 * 10:
NotifyLeftMinute( NOTIFY_STATUS_50MIN, 10 );
break;
case 60 * 15:
NotifyLeftMinute( NOTIFY_STATUS_45MIN, 15 );
break;
}
}
}
}
extern int g_nOldVirtKey;
//
// FrameÀ» ¿òÁ÷ÀδÙ. ±âÁ¸ÀÇ Process¿Í °°Àº ¿ªÇÒ
//
HRESULT CNeuzApp::FrameMove()
{
#ifdef __VCINEMASCOPE
#if __VER >= 15 // __IMPROVE_QUEST_INTERFACE
CWndDialog* pWndDialog = (CWndDialog*)g_WndMng.GetWndBase( APP_DIALOG_EX );
#else // __IMPROVE_QUEST_INTERFACE
CWndDialog* pWndDialog = (CWndDialog*)g_WndMng.GetWndBase( APP_DIALOG );
#endif // __IMPROVE_QUEST_INTERFACE
if( pWndDialog )
{
if( m_nCinemaScopeCnt < 0 )
m_nCinemaScopeCnt += 2;
}
else
m_nCinemaScopeCnt = -150;
#endif
_PROFILE("CNeuzApp::FrameMove()");
g_tmCurrent = timeGetTime(); // Àü¿ªÀ¸·Î »ç¿ëÇÒ ÇöÀç ½Ã°£.
g_tCurrent = time( NULL );
g_nProcessCnt ++;
if( g_GameTimer.m_nHour >= 21 || g_GameTimer.m_nHour <= 6 )
::SetNight( TRUE );
else
::SetNight( FALSE );
NotifyLeftTime();
CHECK1();
g_DPlay.ReceiveMessage();
g_DPlay.SendSnapshot();
g_DPlay.FlushPlayerAngle();
g_dpLoginClient.ReceiveMessage();
g_dpCertified.ReceiveMessage();
#ifdef __CERTIFIER_COLLECTING_SYSTEM
DPCollectClient->ReceiveMessage();
#endif // __CERTIFIER_COLLECTING_SYSTEM
CHECK2( "Receive" );
if( m_dwTempMessage )
{
CWndBase* pWndBase;
if( m_timerConnect.TimeOut() )
{
m_dwTempMessage = 0;
pWndBase = g_WndMng.GetWndBase( APP_SELECT_CHAR );
if( pWndBase )
{
((CWndSelectChar*)pWndBase)->Connected();
goto NEXT;
}
}
}
if( g_pBipedMesh )
g_pBipedMesh->FrameMove();
g_WndMng.Process(); // ½ÇÁ¦ÀûÀÎ ¿ùµå¿Í ij¸¯ÅÍ ÄÁÆ®·Ñ ÀÎÅÍÆäÀ̽º´Â CWndWorld::Process°¡ ó¸®ÇÔ
// À§Ä¡ ¹Ù²ÙÁö ¸¶½Ã¿À!! ata3k
// Űº¸µå ¾÷ÇßÀ»¶§ ¹ÝÀÀÇϱâ À§ÇØ Å¬¸®¾î ½ÃÄÑÁØ´Ù....
if( g_nOldVirtKey != 0 )
g_bKeyTable[ g_nOldVirtKey ] = FALSE;
NEXT:
if( g_WndMng.IsTitle() == TRUE )
CWndBase::m_Theme.FrameMove();
GET_CLIENT_POINT( GetSafeHwnd(), point );
g_toolTip.Process( point, &m_2DRender );
#if __VER >= 15 // __IMPROVE_SYSTEM_VER15
g_toolTipSub1.Process( point, &m_2DRender );
g_toolTipSub2.Process( point, &m_2DRender );
#endif // __IMPROVE_SYSTEM_VER15
g_DamageNumMng.Process();
#ifdef __FLYFF_INITPAGE_EXT
if(CWndBase::m_Theme.m_bRenderTitleWorld)
{
g_GameTimer.m_bFixed = TRUE;
g_GameTimer.m_nHour = 10;
}
else
g_GameTimer.Compute();
#else //__FLYFF_INITPAGE_EXT
g_GameTimer.Compute();
#endif //__FLYFF_INITPAGE_EXT
ProcessFadeMusic();
CalcUPS();
g_Object3DMng.Process();
g_ParticleMng.Process();
g_TailEffectMng.Process();
#ifdef __NEW_WEB_BOX
if( g_WndMng.GetWndBase( APP_WEBBOX ) )
#else // __NEW_WEB_BOX
if( g_WndMng.GetWndBase(APP_WEBBOX) || g_WndMng.GetWndBase(APP_WEBBOX2) )
#endif // __NEW_WEB_BOX
{
if( CWebBox::GetInstance()->Get_Start() == false )
CWebBox::GetInstance()->Set_Start();
CWebBox::GetInstance()->Process( GetSafeHwnd(), m_hInstance
#ifdef __GPAUTH_01
, m_bGPotatoAuth? m_szGPotatoNo: m_szAccount
#else // __GPAUTH_01
, m_szAccount
#endif // __GPAUTH_01
, CMover::GetActiveMover()? CMover::GetActiveMover()->m_idPlayer: 0
, m_dwSys
, CMover::GetActiveMover()? (int)CMover::GetActiveMover()->GetLevel(): 0
, CMover::GetActiveMover()? (int)CMover::GetActiveMover()->GetJob(): 0
, CMover::GetActiveMover()? (int)CMover::GetActiveMover()->GetSex(): 0
, CMover::GetActiveMover()? CMover::GetActiveMover()->GetName(): ""
);
}
CWorldMap* pWorldMap = CWorldMap::GetInstance();
pWorldMap->Process();
#ifdef __GAME_GRADE_SYSTEM
#ifdef __CLIENT
if( ::GetLanguage() == LANG_KOR )
{
CalculateGameGradeMarkAlpha();
}
#endif // __CLIENT
#endif // __GAME_GRADE_SYSTEM
if( m_bQuit )
{
if( g_pPlayer == NULL || m_timerQuit.IsTimeOut() )
::PostMessage( g_Neuz.GetSafeHwnd(), WM_CLOSE, TRUE, 0 );
}
return S_OK;
}
BOOL CALLBACK NPGameMonCallback( DWORD dwMsg, DWORD dwArg )
{
if( g_Neuz.m_strArray.GetSize() == 0 )
return false;
bool bAppExit = false;
TCHAR msg[128];
LPCTSTR lpszMsg = NULL;
switch (dwMsg)
{
case NPGAMEMON_CHECK_CSAUTH2: // ¼*¹ö·Î ÀÎÁõ ÆÐŶÀ» Àü¼Û
{
GG_AUTH_DATA AuthData;
memcpy( &AuthData, (PVOID)dwArg, sizeof(GG_AUTH_DATA) );
BEFORESENDSOLE( ar, PACKETTYPE_AUTHQUERY, DPID_UNKNOWN );
ar.Write( (void*)&AuthData, sizeof(GG_AUTH_DATA) );
SEND( ar, &g_dpLoginClient, DPID_SERVERPLAYER );
if( g_Neuz.m_loginSI.nCount == 1 )
{
++g_Neuz.m_loginSI.nCount;
g_dpLoginClient.SendGetPlayerList( g_Neuz.m_loginSI.dwID, g_Neuz.m_loginSI.pszAccount, g_Neuz.m_loginSI.pszPassword );
}
return true;
}
case NPGAMEMON_COMM_ERROR:
case NPGAMEMON_COMM_CLOSE:
bAppExit = true;
return false;
case NPGAMEMON_INIT_ERROR: // "°ÔÀÓ°¡µå ÃʱâÈ* ¿¡·¯
bAppExit = true;
wsprintf( msg, g_Neuz.m_strArray.GetAt(17), dwArg );
lpszMsg = msg;
break;
case NPGAMEMON_SPEEDHACK: // "½ºÇǵåÇÙÀÌ °¨ÁöµÇ¾ú½À´Ï´Ù."
bAppExit = true;
lpszMsg = g_Neuz.m_strArray.GetAt(18);
break;
case NPGAMEMON_GAMEHACK_KILLED: // "°ÔÀÓÇÙÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù."
case NPGAMEMON_GAMEHACK_DETECT: // "°ÔÀÓÇÙÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù."
bAppExit = true;
lpszMsg = g_Neuz.m_strArray.GetAt(19);
break;
case NPGAMEMON_GAMEHACK_DOUBT: //"°ÔÀÓÀ̳ª °ÔÀÓ°¡µå°¡ º¯Á¶µÇ¾ú½À´Ï´Ù.";
bAppExit = true;
lpszMsg = g_Neuz.m_strArray.GetAt(20);
break;
}
if( lpszMsg )
MessageBox( g_Neuz.GetSafeHwnd(), lpszMsg, "nProtect GameGuard", MB_OK );
if( bAppExit )
{
ExitProcess( -1 );
return false;
}
return true;
}
void CNeuzApp::HashMD5( char* szResult, LPCTSTR szPWD )
{
char szBuffer[256];
char* szKey = "";
#ifdef __INTERNALSERVER
switch( LANG_KOR )
#else // __INTERNALSERVER
switch( ::GetLanguage() )
#endif // __INTERNALSERVER
{
case LANG_JAP:
szKey = "chanho_park";
break;
case LANG_TWN:
szKey = "omg";
break;
case LANG_HK:
szKey = "tpgk";
break;
case LANG_ENG:
{
if( ::GetSubLanguage() == LANG_SUB_IND )
{
szKey = "dldhsdlseh";
}
else
{
szKey = "patom";
}
}
break;
case LANG_KOR:
szKey = "@FLYFF";
break;
case LANG_GER:
szKey = "kikugalanet";
break;
case LANG_SPA:
szKey = "kikugalanet";
break;
case LANG_POR:
//szKey = "rlawnsgud";
szKey = "kikugalanet"; //chipi_090520 05/22ºÎÅÍ ¾ÏÈ£È*Ű º¯°æ
break;
case LANG_FRE:
szKey = "kikugalanet";
break;
case LANG_VTN:
szKey = "kikugalanet";
break;
case LANG_RUS:
szKey = "kikugalanet";
break;
}
sprintf( szBuffer, "%s%s", szKey, szPWD );
md5( szResult, szBuffer );
}
// ij¸¯ÅÍ »èÁ¦ ۸¦ ¾ò´Â´Ù. ( szNo´Â À¯Àú ÀÔ·Â °ª )
// ÀϺ» - ÆÐ½º¿öµå
// ¹Ì±¹ - ÆÐ½º¿öµå
// ±×¿Ü - ÀԷ°ª
LPCTSTR CNeuzApp::GetDeleteKey( LPCTSTR szNo )
{
static char szKey[512];
if( m_bEncryptPWD )
{
switch( ::GetLanguage() )
{
case LANG_JAP:
#ifdef __THROUGHPORTAL0810
if( m_bThroughPortal )
#else // __THROUGHPORTAL0810
if( m_bHanGame )
#endif // __THROUGHPORTAL0810
strcpy( szKey, szNo ); // ÇѰÔÀÓÀº ÀÌ¹Ì ¾ÏÈ£È* µÇ¾î ÀÖÀ½
else
kikugalanet( szKey, szNo );
break;
case LANG_ENG:
case LANG_GER:
case LANG_SPA:
case LANG_POR:
case LANG_FRE:
//case LANG_VTN: //º£Æ®³²¾î´Â ÀÌ¹Ì ¾ÏÈ£È* µÇ¾î ÀÖ´Ù.
case LANG_RUS:
( szKey, szNo );
break;
case LANG_TWN:
case LANG_HK:
default:
strcpy( szKey, szNo );
break;
}
}
else
{
strcpy( szKey, szNo );
}
return szKey;
}
der rest
#ifdef __TWN_LOGIN0816
void CNeuzApp::SetAccountInfo( LPCTSTR lpszAccount, LPCTSTR lpszpw, LPCTSTR lpszSessionPwd )
#else // __TWN_LOGIN0816
void CNeuzApp::SetAccountInfo( LPCTSTR lpszAccount, LPCTSTR lpszpw )
#endif // __TWN_LOGIN0816
{
CString strAccount = lpszAccount;
strAccount.TrimLeft();
strAccount.TrimRight(); // TRIM
_tcscpy( g_Neuz.m_szAccount, (LPCTSTR)strAccount );
_tcslwr( g_Neuz.m_szAccount );
#ifdef __TWN_LOGIN0816
CString strSessionPwd = lpszSessionPwd;
strSessionPwd.TrimLeft();
strSessionPwd.TrimRight();
_tcscpy( g_Neuz.m_szSessionPwd, (LPCTSTR)strSessionPwd );
#endif // __TWN_LOGIN0816
if( m_bEncryptPWD )
HashMD5( g_Neuz.m_szPassword, lpszpw );
else
_tcscpy( g_Neuz.m_szPassword, lpszpw );
}
int g_nOldVirtKey = 0;
// ƯÁ¤Å°µéÀº ´*·¶À»¶§ ¹ÝÀÀÇϵµ·Ï ÇÑ´Ù...
// ³ª¸ÓÁö ۵éÀº ¾÷ÇßÀ»¶§ ¹ÝÀÀ
static BOOL IsPushedKey( int nVirtKey )
{
if( nVirtKey == g_Neuz.Key.chUp || nVirtKey == g_Neuz.Key.chLeft || nVirtKey == 'S' || nVirtKey == 'D' || nVirtKey == VK_SPACE ||
// nVirtKey == 'Q' || nVirtKey == 'E' ||
nVirtKey == VK_LEFT || nVirtKey == VK_RIGHT || nVirtKey == VK_UP || nVirtKey == VK_DOWN ||
nVirtKey == VK_PRIOR || nVirtKey == VK_NEXT )
return TRUE;
return FALSE;
}
LRESULT CNeuzApp::MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
#if __VER >= 15 // __GUILD_HOUSE
BOOL bHook = GuildDeploy()->MsgProc( hWnd, msg, wParam, lParam );
if( bHook )
return 0;
#endif
CWndEdit* pWndEdit = CWndEdit::GetWndEditCtrl();
if( pWndEdit )
{
#if __VER >= 9 // __CSC_VER9_3
if( !( ( msg == WM_KEYDOWN || msg == WM_KEYUP ) && (wParam == VK_ESCAPE || wParam == VK_F1 || wParam == VK_F2 || wParam == VK_F3 ||
wParam == VK_F4 || wParam == VK_F5 || wParam == VK_F6 || wParam == VK_F7 || wParam == VK_F8 || wParam == VK_F9) ) )
#else //__CSC_VER9_3
if( !( ( msg == WM_KEYDOWN || msg == WM_KEYUP ) && wParam == VK_ESCAPE ) )
#endif //__CSC_VER9_3
{
if( pWndEdit->IsYouMessage( msg, wParam, lParam ) )
return 0;
if( ( msg == WM_KEYDOWN || msg == WM_KEYUP ) && wParam != VK_RETURN )
return 0;
}
}
else
{
if( msg >= WM_IME_SETCONTEXT && msg <= WM_IME_KEYUP ) // ¸ðµç IME ¸Å½ÃÁö´Â ½ºÅµ
return 0;
if( CWndEdit::m_hIMCBackup == NULL )
{
CWndEdit::m_hIMCBackup = ::ImmAssociateContext( CWndEdit::m_hWnd, NULL );
}
CWndEdit::SetAlphaNumeric();
}
CWorldMap* pWorldMap = CWorldMap::GetInstance();
if( WM_LBUTTONDOWN == msg && pWorldMap && pWorldMap->IsRender( ) )
pWorldMap->OnLButtonDown( );
else
g_WndMng.WindowRootProc( msg, wParam, lParam );
//gmpbigsun(100308): here is stop if activated modal window
if( g_WndMng.IsOpenModalWnd() == TRUE && msg != WM_LOGOUT )
{
switch( msg )
{
case WM_KEYDOWN:
{
if( g_WndMng.m_pLogOutWaitting )
break;
if( KillWindow( wParam ) )
break;
CWndChat* pWndChat = ( CWndChat* )g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
int nVirtKey = ( int )wParam;
if( pWndChat )
{
switch( nVirtKey )
{
case VK_RETURN:
if( pWndEdit == NULL )
{
pWndChat->AddWndStyle( WBS_MODAL );
pOldModalWindow = g_WndMng.m_pWndFocus;
pWndChat->SetFocus();
CWndEditChat* pWndEdit = &pWndChat->m_wndEdit;
pWndEdit->SetFocus();
break;
}
}
}
break;
}
#ifdef __IMPROVE_MAP_SYSTEM
#ifdef __CLIENT
case WM_CLOSE:
{
prj.m_MapInformationManager.DeleteAllMapInformatio n();
g_Neuz.m_bQuit = TRUE;
if( wParam == FALSE )
{
if( g_pPlayer )
{
g_WndMng.m_bConnect = FALSE;
StopMusic();
return 1;
}
}
break;
}
#endif // __CLIENT
#endif // __IMPROVE_MAP_SYSTEM
}
return CD3DApplication::MsgProc( hWnd, msg, wParam, lParam );
}
switch( msg )
{
case WM_KEYDOWN:
{
#if __VER >= 12 // __MOD_TUTORIAL
CWndGuideSystem* pWndGuide = NULL;
pWndGuide = (CWndGuideSystem*)g_WndMng.GetWndBase( APP_GUIDE );
if(pWndGuide && pWndGuide->IsVisible()) pWndGuide->m_Condition.nInputKey = (UINT)wParam;
#endif
if( g_WndMng.m_pLogOutWaitting ) // Á¾·áÁßÀ̸é Űº¸µå ÀÔ·Â ºÒ°¡
break;
if( KillWindow( wParam ) )
break;
CWndChat* pWndChat = (CWndChat*) g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
int nVirtKey = (int) wParam; // virtual-key code
int lKeyData = lParam;
if( pWndChat )
{
switch(nVirtKey)
{
case VK_RETURN:
if( pWndChat && pWndEdit == NULL )
{
pWndChat->SetFocus();
CWndEditChat* pWndEdit = &pWndChat->m_wndEdit;
pWndEdit->SetFocus();
}
break;
}
}
#if __VER >= 13 // __HOUSING
if(nVirtKey == VK_ESCAPE)
{
if(CDeployManager::GetInstance()->IsReady())
{
CDeployManager::GetInstance()->EndDeploy();
return FALSE;
}
#if __VER >= 15 // __GUILD_HOUSE
GuildHouse->m_dwSelectedObjID = NULL_ID; //ÃÖ¿ì¼±¼øÀ§À̹ǷΠ°Á NULL_ID·Î ..
#endif
}
#endif // __HOUSING
CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetApplet( APP_WORLD );
if( pWndWorld && pWndWorld->IsFocusWnd() == FALSE )
pWndWorld->OnKeyDown( nVirtKey, 0, 0 );
g_bKeyTable[ nVirtKey ] = TRUE;
g_WndMng.SetMessengerAutoState();
#ifdef __BS_CONSOLE
if( nVirtKey == VK_OEM_3 )
{
gConsole()->Show( );
}
#endif
}
break;
case WM_KEYUP:
{
int nVirtKey = (int) wParam; // virtual-key code
int lKeyData = lParam;
for( int i = 0; i < MAX_SLOT_ITEM; ++i )
{
if( g_bSlotSwitchAboutEquipItem[ i ] == TRUE )
g_bSlotSwitchAboutEquipItem[ i ] = FALSE;
}
CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetApplet( APP_WORLD );
if( pWndWorld && pWndWorld->IsFocusWnd() == FALSE )
pWndWorld->OnKeyUp( nVirtKey, 0, 0 );
#if __VER >= 13 // __HOUSING
if(g_bKeyTable[VK_NEXT])
{
if(CDeployManager::GetInstance()->IsReady())
{
CDeployManager::GetInstance()->m_fAngle += 45.0f;
if(CDeployManager::GetInstance()->m_fAngle > 359.0f) CDeployManager::GetInstance()->m_fAngle = 0.0f;
CDeployManager::GetInstance()->m_pTargetObj->SetAngle(CDeployManager::GetInstance()->m_fAngle);
CDeployManager::GetInstance()->m_pTargetObj->UpdateLocalMatrix();
}
}
else if(g_bKeyTable[VK_PRIOR])
{
if(CDeployManager::GetInstance()->IsReady())
{
CDeployManager::GetInstance()->m_fAngle -= 45.0f;
if(CDeployManager::GetInstance()->m_fAngle < -359.0f) CDeployManager::GetInstance()->m_fAngle = 0.0f;
CDeployManager::GetInstance()->m_pTargetObj->SetAngle(CDeployManager::GetInstance()->m_fAngle);
CDeployManager::GetInstance()->m_pTargetObj->UpdateLocalMatrix();
}
}
#endif // __HOUSING
#if __VER >= 8 //__CSC_VER8_1
if( g_bKeyTable[ VK_MULTIPLY ] ) //VK_MULTIPLY Àӽ÷Î....
{
if(!g_WndMng.m_clearFlag)
g_WndMng.ClearAllWnd();
else
g_WndMng.RestoreWnd();
}
#endif //__CSC_VER8_1
g_bKeyTable[ nVirtKey ] = FALSE;
g_WndMng.SetMessengerAutoState();
}
break;
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_LBUTTONUP:
case WM_LBUTTONDBLCLK:
case WM_RBUTTONUP:
case WM_MOUSEMOVE:
case WM_MOUSEWHEEL:
#if __VER >= 13 // __HOUSING
if(CDeployManager::GetInstance()->IsReady() && msg == WM_MOUSEWHEEL)
{
int nDelta = (short)HIWORD(wParam);
if(nDelta < 0)
{
CDeployManager::GetInstance()->m_pTargetObj->AddAngle(2.5f);
CDeployManager::GetInstance()->m_pTargetObj->UpdateLocalMatrix();
}
else
{
CDeployManager::GetInstance()->m_pTargetObj->AddAngle(-2.5f);
CDeployManager::GetInstance()->m_pTargetObj->UpdateLocalMatrix();
}
}
#endif // __HOUSING
g_WndMng.SetMessengerAutoState();
break;
case WM_CLOSE:
{
#ifdef __IMPROVE_MAP_SYSTEM
#ifdef __CLIENT
prj.m_MapInformationManager.DeleteAllMapInformatio n();
#endif // __CLIENT
#endif // __IMPROVE_MAP_SYSTEM
g_Neuz.m_bQuit = TRUE;
if( wParam == FALSE )
{
if( g_pPlayer )
{
g_WndMng.m_bConnect = FALSE;
StopMusic();
return 1;
}
}
}
break;
case WM_LOGOUT:
{
g_WndMng.OpenTitle();
PlayMusic( BGM_TITLE, 0 );
g_WndMng.m_bConnect = FALSE;
return 1;
}
break;
case WM_MOVE:
{
CWebBox* pWebBox = CWebBox::GetInstance();
if( pWebBox && pWebBox->m_hDlg )
::SendMessage( pWebBox->m_hDlg, WM_INITDIALOG, 0, 0 );
}
break;
case WM_COMMAND:
break;
case WM_ACTIVATE:
m_bActiveNeuz = TRUE;
if( LOWORD(wParam) == WA_INACTIVE )
{
m_bActiveNeuz = FALSE;
}
break;
}
return CD3DApplication::MsgProc( hWnd, msg, wParam, lParam );
}
BOOL CNeuzApp::KillWindow( int wParam )
{
CWndStateConfirm* pWndStateConfirm = (CWndStateConfirm*)g_WndMng.GetWndBase( APP_STATE_CONFIRM );
if( pWndStateConfirm )
{
if( wParam == VK_RETURN )
{
pWndStateConfirm->SendYes();
}
else if( wParam == VK_ESCAPE )
{
#if __VER >= 13 // __RENEW_CHARINFO
CWndBase* pWndBase = g_WndMng.GetWndBase( APP_CHARACTER3 );
#elif __VER >= 9 // __CSC_VER9_2
CWndBase* pWndBase = g_WndMng.GetWndBase( APP_CHARACTER2 );
#else //__CSC_VER9_2
CWndBase* pWndBase = g_WndMng.GetWndBase( APP_CHARACTER );
#endif //__CSC_VER9_2
if( pWndBase ) {
#if __VER < 9 // __CSC_VER9_2
( (CWndCharacter*)pWndBase )->m_wndStateDetail.m_fWaitingConfirm = FALSE;
#endif //__CSC_VER9_2
}
pWndStateConfirm->Destroy();
}
return TRUE;
}
return FALSE;
}
void __cdecl LoadProperty( void* p )
{
prj.OpenProject( "Masquerade.prj" );
CNeuzApp* pApp = (CNeuzApp*) p;
pApp->m_hThread = INVALID_HANDLE_VALUE;
}
void CNeuzApp::WaitLoading()
{
OutputDebugString("WaitLoading start\n");
if( m_hThread != INVALID_HANDLE_VALUE )
{
WaitForSingleObject( m_hThread, INFINITE );
m_hThread = INVALID_HANDLE_VALUE;
}
OutputDebugString("WaitLoading end\n");
}
void CNeuzApp::BeginLoadThread()
{
CResFile::ScanResource( "" );
prj.LoadPreFiles();
m_hThread = (HANDLE) _beginthread( LoadProperty, 0, (LPVOID)this );
#if !defined(_DEBUG)
WaitLoading();
#endif
}
//
// µð¹ÙÀ̽º¿Í ºñµ¶¸³ÀûÀÎ ¸Å½¬, Æú¸®°ï µîÀ» óÀ½ ÃʱâÈ* ÇÏ´Â °÷
//
HRESULT CNeuzApp::InitDeviceObjects()
{
InitNProtect();
BeginLoadThread();
SetMouseCursor( CUR_DELAY );
g_MusicMng.LoadScript( MakePath( DIR_MUSIC, _T( "default.bgm" ) ) );
g_SoundMng.LoadScript( MakePath( DIR_CLIENT, _T( "sound.inc" ) ) );
#ifndef _DEBUG
{
CString strError;
int nMem = m_pd3dDevice->GetAvailableTextureMem();
int nVersion = LOWORD(m_d3dSettings.pWindowed_AdapterInfo->AdapterIdentifier.DriverVersion.u.LowPart);
strError.Format( "%s, %d(%d)", m_d3dSettings.pWindowed_AdapterInfo->AdapterIdentifier.Description, nMem, nVersion );
ADDERRORMSG_NOHEAD( strError );
}
#endif
#ifdef __YENV
if( m_d3dCaps.PixelShaderVersion < D3DPS_VERSION(1,1) )
g_dwUsablePS_Level = 0;
else if( m_d3dCaps.PixelShaderVersion < D3DPS_VERSION(2,0) )
g_dwUsablePS_Level = 1;
else
g_dwUsablePS_Level = 2;
#endif //__YENV
if( m_d3dCaps.TextureCaps & D3DPTEXTURECAPS_SQUAREONLY ) // Á¤»ç°¢ÇüÀÇ ÅØ½ºÃĸ¸ Áö¿øÇÏ´Â Ä«µå³ª µå¶óÀ̹ö¶ó¸é ½ÇÇØ¸øÇÑ´Ù.
{
MessageBox( GetSafeHwnd(), m_strArray.GetAt(12), m_strArray.GetAt(11), MB_OK );
ADDERRORMSG( m_strArray.GetAt(12) );
int *p = NULL;
*p = 1;
}
m_pd3dDevice->SetRenderState( D3DRS_ZFUNC, D3DCMP_LESSEQUAL);
prj.m_modelMng.InitDeviceObjects( m_pd3dDevice );
prj.m_terrainMng.InitDeviceObjects( m_pd3dDevice );
CWorld::StaticInitDeviceObjects( m_pd3dDevice );
g_DamageNumMng.LoadTexture( m_pd3dDevice ); // µ¥¹ÌÁö ÀÌÆåÆ®
g_SfxMng.InitDeviceObjects(m_pd3dDevice);
g_SfxMeshMng.InitDeviceObjects(m_pd3dDevice);
g_Shadow.InitDeviceObjects( m_pd3dDevice );
g_Shadow.LoadElement( "Shadow.o3d" );
g_ParticleMng.InitDeviceObjects( m_pd3dDevice );
if( g_Option.m_nTextureQuality == 2 ) // ÅØ½ºÃÄ Ä÷¸®Æ¼ ³·À½ÀÌ¸é ÆÄÆ¼Å¬ ½ÇÇà¾ÈµÊ.
g_ParticleMng.m_bActive = FALSE;
m_TextureGauge[0].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauMagChargeBG.TGA" ), 0xffff00ff, TRUE );
m_TextureGauge[1].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauMagChargeHead.TGA" ), 0xffff00ff, TRUE );
m_TextureGauge[2].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauMagChargeBody.TGA" ), 0xffff00ff, TRUE );
m_TextureGauge[3].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauMagChargeBody2.tga" ), 0xffff00ff, TRUE );
m_TextureGauge[4].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauMagChargeTail.TGA" ), 0xffff00ff, TRUE );
m_TextureHPGauge[0].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauPartyHpBG.TGA" ), 0xffff00ff, TRUE );
m_TextureHPGauge[1].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauPartyHp.TGA" ), 0xffff00ff, TRUE );
m_TextureHPGauge[2].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauPartyHp_Dbf.TGA" ), 0xffff00ff, TRUE );
m_TextureTurboGauge[0].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAccelBG.TGA" ), 0xffff00ff, TRUE );
m_TextureTurboGauge[1].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAccelInner.TGA" ), 0xffff00ff, TRUE );
m_TextureCastingGauge[0].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAccelBG.TGA" ), 0xffff00ff, TRUE );
m_TextureCastingGauge[1].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAccelInner.TGA" ), 0xffff00ff, TRUE );
m_pMasterIcon[0] = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ICON, "icon_Expert1.dds"), 0xffff00ff );
m_pMasterIcon[1] = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ICON, "icon_Expert2.dds"), 0xffff00ff );
m_pMasterIcon[2] = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ICON, "icon_Expert3.dds"), 0xffff00ff );
m_pMasterIcon[3] = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ICON, "icon_Expert4.dds"), 0xffff00ff );
m_pMasterIcon[4] = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ICON, "icon_Expert5.dds"), 0xffff00ff );
m_pMasterIcon[5] = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ICON, "icon_Expert6.dds"), 0xffff00ff );
m_pHeroIcon = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ICON, "icon_Hero.dds"), 0xffff00ff );
#if __VER >= 11 // __SYS_COLLECTING
m_TexCltGauge[0].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAccelBG.TGA" ), 0xffff00ff, TRUE );
m_TexCltGauge[1].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAccelInner.TGA" ), 0xffff00ff, TRUE );
//m_TexCltGauge[2].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauPartyHp_Dbf.TGA" ), 0xffff00ff, TRUE );
#endif
#if __VER >= 8 //__CSC_VER8_5
m_TextureAngelGauge[0].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAngelExpBG.TGA" ), 0xffff00ff, TRUE );
m_TextureAngelGauge[1].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAngelExp.TGA" ), 0xffff00ff, TRUE );
#endif //__CSC_VER8_5
m_dwPVPTime = GetTickCount();
m_nTexAlpha = 255;
m_bTexLoad = FALSE;
m_bTexLoadAlpha = FALSE;
g_toolTip.InitTexture();
#if __VER >= 15 // __IMPROVE_SYSTEM_VER15
g_toolTipSub1.InitTexture();
g_toolTipSub2.InitTexture();
#endif // __IMPROVE_SYSTEM_VER15
#ifdef __YENV
HRESULT hr;
LPD3DXBUFFER pErr = NULL;
#ifdef _DEBUG
if( FAILED(hr = D3DXCreateEffectFromFile( m_pd3dDevice, "hlsl.fx", NULL, NULL, 0, NULL, &m_pEffect, &pErr )))
#else //_DEBUG
if( FAILED(hr = D3DXCreateEffectFromResource( D3DDEVICE, NULL, MAKEINTRESOURCE(IDR_DATA3), NULL, NULL, 0, NULL, &m_pEffect, &pErr )))
#endif //_DEBUG
{
MessageBox( NULL, (LPCTSTR)pErr->GetBufferPointer(), "ERROR", MB_OK );
}
else
{
m_hTechnique = m_pEffect->GetTechniqueByName( "TShader" );
m_hmWVP = m_pEffect->GetParameterByName( NULL, "mWVP" );
m_hTexDiffuse = m_pEffect->GetParameterByName( NULL, "Tex_Diffuse" );
m_hTexBump = m_pEffect->GetParameterByName( NULL, "Tex_Bump" );
m_hTexSpecular = m_pEffect->GetParameterByName( NULL, "Tex_Specular" );
m_hvLightDir = m_pEffect->GetParameterByName( NULL, "vLightDir" );
m_hvEyePos = m_pEffect->GetParameterByName( NULL, "vEyePos" );
m_hvFog = m_pEffect->GetParameterByName( NULL, "vFog" );
m_hvDiffuse = m_pEffect->GetParameterByName( NULL, "I_d" );
m_hvAmbient = m_pEffect->GetParameterByName( NULL, "I_a" );
m_hvSpecual = m_pEffect->GetParameterByName( NULL, "I_s" );
}
SAFE_RELEASE( pErr );
if( g_dwUsablePS_Level < 2 )
g_Option.m_bSpecBump = FALSE;
m_pEnvTex = NULL;
#endif //__YENV
/*
{
CScript s;
if( s.Load(MakePath( DIR_CLIENT, "GameGuard.inc" )) )
{
s.GetToken();
while( s.tok != FINISHED )
{
m_strArray.Add( s.Token );
s.GetToken();
}
}
}
InitNProtect();
*/
// Å׸¶ ¼¼ÆÃ
CWndBase::m_Theme.LoadTheme( m_pd3dDevice, "Default.thm" );
CWndBase::m_Theme.InitDeviceObjects( m_pd3dDevice );
// CWndBase ¼¼ÆÃ
g_WndMng.m_pApp = this;
g_WndMng.m_pTheme = &CWndBase::m_Theme;
g_WndMng.m_pFont = CWndBase::m_Theme.m_pFontText;
g_WndMng.Initialize();
g_WndMng.InitDeviceObjects();
CWndBase::m_hWnd = GetSafeHwnd();
CWndBase::SetForbidTexture( m_pd3dDevice, MakePath( DIR_ICON, "icon_forbid.dds" ) );
// ´ÙÀ̾ó·Î±× ¸Þ½ÃÁö ¼¼ÆÃ
g_DialogMsg.InitDeviceObjects( m_pd3dDevice );
// 2DRender ¼¼ÆÃ
m_2DRender.InitDeviceObjects( m_pd3dDevice );
m_2DRender.m_pFont = CWndBase::m_Theme.m_pFontText;
g_WndMng.OpenTitle( TRUE );
InitFST(); // init frame skipping time
#ifdef __PROF
SetFrameSkip( FALSE );
#endif
m_texQuestEmoticon.LoadScript( m_pd3dDevice, MakePath( DIR_ICON, "icon_QuestEmoticon.inc" ) );
m_TexturePackPVP.LoadScript( m_pd3dDevice, MakePath( DIR_SFX, "CountFight.inc" ) );
#if __VER >= 15 // __BS_CHANGING_ENVIR
TexturePool::Get()->Init( m_pd3dDevice );
#endif //__BS_CHANGING_ENVIR
PlayMusic( BGM_TITLE, 0 );
return S_OK;
}
#if __VER >= 15
void CNeuzApp::ResetStaticValues( )
{
GuildHouse->ResetValues( );
}
#endif
#if __VER >= 8 //__Y_GAMMA_CONTROL_8
void CNeuzApp::Drv_SetGamma(HWND hWnd, float gamma, int overbright, float fContrast)
{
unsigned short ramp[3*256];
float f;
GetDeviceGammaRamp( GetDC(hWnd), ramp );
for ( int i = 0; i < 256; i++ )
{
f = (float)(255 * pow((float)i/256, 1/gamma));
f = f * fContrast + overbright;
if (f < 0)
f = 0;
if (f > 255)
f = 255;
ramp[i+0] = ramp[i+256] = ramp[i+512] = ((unsigned short)f<<8) ;
}
SetDeviceGammaRamp( GetDC(hWnd), ramp );
}
/*
void CNeuzApp::Loop()
{
if (GetAsyncKeyState(VK_F5))
g_fGamma -= 0.1f;
if (GetAsyncKeyState(VK_F6))
g_fGamma += 0.1f;
if (GetAsyncKeyState(VK_F7))
g_nOverBright -= 1;
if (GetAsyncKeyState(VK_F8))
g_nOverBright += 1;
if (GetAsyncKeyState(VK_F9))
g_fContrast -= 0.1f;
if (GetAsyncKeyState(VK_F10))
g_fContrast += 0.1f;
Drv_SetGamma(GetSafeHwnd(), g_fGamma, g_nOverBright, g_fContrast);
}
*/
#endif //__Y_GAMMA_CONTROL_8
#ifdef __GAME_GRADE_SYSTEM
#ifdef __CLIENT
void CNeuzApp::CalculateGameGradeMarkAlpha( void )
{
CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetWndBase( APP_WORLD );
if( pWndWorld == NULL )
{
return;
}
if( g_Option.m_bGameGradeRendering == TRUE )
{
if( g_tmCurrent > m_dwTimeGameGradeMarkRendering )
{
m_bGameGradeMarkRenderingSwitch = TRUE;
m_nGameGradeMarkAlpha = GAME_GRADE_MARK_MINIMUM_ALPHA;
m_eGameGradeMarkState = FADE_IN;
m_dwTimeOld = g_tmCurrent;
m_dwTimeGameGradeMarkRendering = g_tmCurrent + SEC( GAME_GRADE_MARK_RENDERING_INTERVAL_SECOND );
}
}
if( m_bGameGradeMarkRenderingSwitch == TRUE )
{
float fDelta = ( static_cast< float >( g_tmCurrent - m_dwTimeOld ) / 1000.0f );
m_dwTimeOld = g_tmCurrent;
switch( m_eGameGradeMarkState )
{
case FADE_IN:
{
m_nGameGradeMarkAlpha += static_cast< int >( GAME_GRADE_MARK_FADING_SPEED * fDelta );
if( m_nGameGradeMarkAlpha > GAME_GRADE_MARK_MAXIMUM_ALPHA )
{
m_nGameGradeMarkAlpha = GAME_GRADE_MARK_MAXIMUM_ALPHA;
m_dwTimeGameGradeMarkShowing = g_tmCurrent + SEC( GAME_GRADE_MARK_SHOWING_SECOND );
m_eGameGradeMarkState = SHOW;
}
break;
}
case SHOW:
{
if( g_tmCurrent > m_dwTimeGameGradeMarkShowing )
{
m_eGameGradeMarkState = FADE_OUT;
}
break;
}
case FADE_OUT:
{
m_nGameGradeMarkAlpha -= static_cast< int >( GAME_GRADE_MARK_FADING_SPEED * fDelta );
if( m_nGameGradeMarkAlpha < GAME_GRADE_MARK_MINIMUM_ALPHA )
{
m_nGameGradeMarkAlpha = GAME_GRADE_MARK_MINIMUM_ALPHA;
m_bGameGradeMarkRenderingSwitch = FALSE;
m_eGameGradeMarkState = FADE_IN;
}
break;
}
}
}
}
#endif // __CLIENT
#endif // __GAME_GRADE_SYSTEM
void CNeuzApp::SetAccountInfo( LPCTSTR lpszAccount, LPCTSTR lpszpw, LPCTSTR lpszSessionPwd )
#else // __TWN_LOGIN0816
void CNeuzApp::SetAccountInfo( LPCTSTR lpszAccount, LPCTSTR lpszpw )
#endif // __TWN_LOGIN0816
{
CString strAccount = lpszAccount;
strAccount.TrimLeft();
strAccount.TrimRight(); // TRIM
_tcscpy( g_Neuz.m_szAccount, (LPCTSTR)strAccount );
_tcslwr( g_Neuz.m_szAccount );
#ifdef __TWN_LOGIN0816
CString strSessionPwd = lpszSessionPwd;
strSessionPwd.TrimLeft();
strSessionPwd.TrimRight();
_tcscpy( g_Neuz.m_szSessionPwd, (LPCTSTR)strSessionPwd );
#endif // __TWN_LOGIN0816
if( m_bEncryptPWD )
HashMD5( g_Neuz.m_szPassword, lpszpw );
else
_tcscpy( g_Neuz.m_szPassword, lpszpw );
}
int g_nOldVirtKey = 0;
// ƯÁ¤Å°µéÀº ´*·¶À»¶§ ¹ÝÀÀÇϵµ·Ï ÇÑ´Ù...
// ³ª¸ÓÁö ۵éÀº ¾÷ÇßÀ»¶§ ¹ÝÀÀ
static BOOL IsPushedKey( int nVirtKey )
{
if( nVirtKey == g_Neuz.Key.chUp || nVirtKey == g_Neuz.Key.chLeft || nVirtKey == 'S' || nVirtKey == 'D' || nVirtKey == VK_SPACE ||
// nVirtKey == 'Q' || nVirtKey == 'E' ||
nVirtKey == VK_LEFT || nVirtKey == VK_RIGHT || nVirtKey == VK_UP || nVirtKey == VK_DOWN ||
nVirtKey == VK_PRIOR || nVirtKey == VK_NEXT )
return TRUE;
return FALSE;
}
LRESULT CNeuzApp::MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
#if __VER >= 15 // __GUILD_HOUSE
BOOL bHook = GuildDeploy()->MsgProc( hWnd, msg, wParam, lParam );
if( bHook )
return 0;
#endif
CWndEdit* pWndEdit = CWndEdit::GetWndEditCtrl();
if( pWndEdit )
{
#if __VER >= 9 // __CSC_VER9_3
if( !( ( msg == WM_KEYDOWN || msg == WM_KEYUP ) && (wParam == VK_ESCAPE || wParam == VK_F1 || wParam == VK_F2 || wParam == VK_F3 ||
wParam == VK_F4 || wParam == VK_F5 || wParam == VK_F6 || wParam == VK_F7 || wParam == VK_F8 || wParam == VK_F9) ) )
#else //__CSC_VER9_3
if( !( ( msg == WM_KEYDOWN || msg == WM_KEYUP ) && wParam == VK_ESCAPE ) )
#endif //__CSC_VER9_3
{
if( pWndEdit->IsYouMessage( msg, wParam, lParam ) )
return 0;
if( ( msg == WM_KEYDOWN || msg == WM_KEYUP ) && wParam != VK_RETURN )
return 0;
}
}
else
{
if( msg >= WM_IME_SETCONTEXT && msg <= WM_IME_KEYUP ) // ¸ðµç IME ¸Å½ÃÁö´Â ½ºÅµ
return 0;
if( CWndEdit::m_hIMCBackup == NULL )
{
CWndEdit::m_hIMCBackup = ::ImmAssociateContext( CWndEdit::m_hWnd, NULL );
}
CWndEdit::SetAlphaNumeric();
}
CWorldMap* pWorldMap = CWorldMap::GetInstance();
if( WM_LBUTTONDOWN == msg && pWorldMap && pWorldMap->IsRender( ) )
pWorldMap->OnLButtonDown( );
else
g_WndMng.WindowRootProc( msg, wParam, lParam );
//gmpbigsun(100308): here is stop if activated modal window
if( g_WndMng.IsOpenModalWnd() == TRUE && msg != WM_LOGOUT )
{
switch( msg )
{
case WM_KEYDOWN:
{
if( g_WndMng.m_pLogOutWaitting )
break;
if( KillWindow( wParam ) )
break;
CWndChat* pWndChat = ( CWndChat* )g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
int nVirtKey = ( int )wParam;
if( pWndChat )
{
switch( nVirtKey )
{
case VK_RETURN:
if( pWndEdit == NULL )
{
pWndChat->AddWndStyle( WBS_MODAL );
pOldModalWindow = g_WndMng.m_pWndFocus;
pWndChat->SetFocus();
CWndEditChat* pWndEdit = &pWndChat->m_wndEdit;
pWndEdit->SetFocus();
break;
}
}
}
break;
}
#ifdef __IMPROVE_MAP_SYSTEM
#ifdef __CLIENT
case WM_CLOSE:
{
prj.m_MapInformationManager.DeleteAllMapInformatio n();
g_Neuz.m_bQuit = TRUE;
if( wParam == FALSE )
{
if( g_pPlayer )
{
g_WndMng.m_bConnect = FALSE;
StopMusic();
return 1;
}
}
break;
}
#endif // __CLIENT
#endif // __IMPROVE_MAP_SYSTEM
}
return CD3DApplication::MsgProc( hWnd, msg, wParam, lParam );
}
switch( msg )
{
case WM_KEYDOWN:
{
#if __VER >= 12 // __MOD_TUTORIAL
CWndGuideSystem* pWndGuide = NULL;
pWndGuide = (CWndGuideSystem*)g_WndMng.GetWndBase( APP_GUIDE );
if(pWndGuide && pWndGuide->IsVisible()) pWndGuide->m_Condition.nInputKey = (UINT)wParam;
#endif
if( g_WndMng.m_pLogOutWaitting ) // Á¾·áÁßÀ̸é Űº¸µå ÀÔ·Â ºÒ°¡
break;
if( KillWindow( wParam ) )
break;
CWndChat* pWndChat = (CWndChat*) g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
int nVirtKey = (int) wParam; // virtual-key code
int lKeyData = lParam;
if( pWndChat )
{
switch(nVirtKey)
{
case VK_RETURN:
if( pWndChat && pWndEdit == NULL )
{
pWndChat->SetFocus();
CWndEditChat* pWndEdit = &pWndChat->m_wndEdit;
pWndEdit->SetFocus();
}
break;
}
}
#if __VER >= 13 // __HOUSING
if(nVirtKey == VK_ESCAPE)
{
if(CDeployManager::GetInstance()->IsReady())
{
CDeployManager::GetInstance()->EndDeploy();
return FALSE;
}
#if __VER >= 15 // __GUILD_HOUSE
GuildHouse->m_dwSelectedObjID = NULL_ID; //ÃÖ¿ì¼±¼øÀ§À̹ǷΠ°Á NULL_ID·Î ..
#endif
}
#endif // __HOUSING
CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetApplet( APP_WORLD );
if( pWndWorld && pWndWorld->IsFocusWnd() == FALSE )
pWndWorld->OnKeyDown( nVirtKey, 0, 0 );
g_bKeyTable[ nVirtKey ] = TRUE;
g_WndMng.SetMessengerAutoState();
#ifdef __BS_CONSOLE
if( nVirtKey == VK_OEM_3 )
{
gConsole()->Show( );
}
#endif
}
break;
case WM_KEYUP:
{
int nVirtKey = (int) wParam; // virtual-key code
int lKeyData = lParam;
for( int i = 0; i < MAX_SLOT_ITEM; ++i )
{
if( g_bSlotSwitchAboutEquipItem[ i ] == TRUE )
g_bSlotSwitchAboutEquipItem[ i ] = FALSE;
}
CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetApplet( APP_WORLD );
if( pWndWorld && pWndWorld->IsFocusWnd() == FALSE )
pWndWorld->OnKeyUp( nVirtKey, 0, 0 );
#if __VER >= 13 // __HOUSING
if(g_bKeyTable[VK_NEXT])
{
if(CDeployManager::GetInstance()->IsReady())
{
CDeployManager::GetInstance()->m_fAngle += 45.0f;
if(CDeployManager::GetInstance()->m_fAngle > 359.0f) CDeployManager::GetInstance()->m_fAngle = 0.0f;
CDeployManager::GetInstance()->m_pTargetObj->SetAngle(CDeployManager::GetInstance()->m_fAngle);
CDeployManager::GetInstance()->m_pTargetObj->UpdateLocalMatrix();
}
}
else if(g_bKeyTable[VK_PRIOR])
{
if(CDeployManager::GetInstance()->IsReady())
{
CDeployManager::GetInstance()->m_fAngle -= 45.0f;
if(CDeployManager::GetInstance()->m_fAngle < -359.0f) CDeployManager::GetInstance()->m_fAngle = 0.0f;
CDeployManager::GetInstance()->m_pTargetObj->SetAngle(CDeployManager::GetInstance()->m_fAngle);
CDeployManager::GetInstance()->m_pTargetObj->UpdateLocalMatrix();
}
}
#endif // __HOUSING
#if __VER >= 8 //__CSC_VER8_1
if( g_bKeyTable[ VK_MULTIPLY ] ) //VK_MULTIPLY Àӽ÷Î....
{
if(!g_WndMng.m_clearFlag)
g_WndMng.ClearAllWnd();
else
g_WndMng.RestoreWnd();
}
#endif //__CSC_VER8_1
g_bKeyTable[ nVirtKey ] = FALSE;
g_WndMng.SetMessengerAutoState();
}
break;
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_LBUTTONUP:
case WM_LBUTTONDBLCLK:
case WM_RBUTTONUP:
case WM_MOUSEMOVE:
case WM_MOUSEWHEEL:
#if __VER >= 13 // __HOUSING
if(CDeployManager::GetInstance()->IsReady() && msg == WM_MOUSEWHEEL)
{
int nDelta = (short)HIWORD(wParam);
if(nDelta < 0)
{
CDeployManager::GetInstance()->m_pTargetObj->AddAngle(2.5f);
CDeployManager::GetInstance()->m_pTargetObj->UpdateLocalMatrix();
}
else
{
CDeployManager::GetInstance()->m_pTargetObj->AddAngle(-2.5f);
CDeployManager::GetInstance()->m_pTargetObj->UpdateLocalMatrix();
}
}
#endif // __HOUSING
g_WndMng.SetMessengerAutoState();
break;
case WM_CLOSE:
{
#ifdef __IMPROVE_MAP_SYSTEM
#ifdef __CLIENT
prj.m_MapInformationManager.DeleteAllMapInformatio n();
#endif // __CLIENT
#endif // __IMPROVE_MAP_SYSTEM
g_Neuz.m_bQuit = TRUE;
if( wParam == FALSE )
{
if( g_pPlayer )
{
g_WndMng.m_bConnect = FALSE;
StopMusic();
return 1;
}
}
}
break;
case WM_LOGOUT:
{
g_WndMng.OpenTitle();
PlayMusic( BGM_TITLE, 0 );
g_WndMng.m_bConnect = FALSE;
return 1;
}
break;
case WM_MOVE:
{
CWebBox* pWebBox = CWebBox::GetInstance();
if( pWebBox && pWebBox->m_hDlg )
::SendMessage( pWebBox->m_hDlg, WM_INITDIALOG, 0, 0 );
}
break;
case WM_COMMAND:
break;
case WM_ACTIVATE:
m_bActiveNeuz = TRUE;
if( LOWORD(wParam) == WA_INACTIVE )
{
m_bActiveNeuz = FALSE;
}
break;
}
return CD3DApplication::MsgProc( hWnd, msg, wParam, lParam );
}
BOOL CNeuzApp::KillWindow( int wParam )
{
CWndStateConfirm* pWndStateConfirm = (CWndStateConfirm*)g_WndMng.GetWndBase( APP_STATE_CONFIRM );
if( pWndStateConfirm )
{
if( wParam == VK_RETURN )
{
pWndStateConfirm->SendYes();
}
else if( wParam == VK_ESCAPE )
{
#if __VER >= 13 // __RENEW_CHARINFO
CWndBase* pWndBase = g_WndMng.GetWndBase( APP_CHARACTER3 );
#elif __VER >= 9 // __CSC_VER9_2
CWndBase* pWndBase = g_WndMng.GetWndBase( APP_CHARACTER2 );
#else //__CSC_VER9_2
CWndBase* pWndBase = g_WndMng.GetWndBase( APP_CHARACTER );
#endif //__CSC_VER9_2
if( pWndBase ) {
#if __VER < 9 // __CSC_VER9_2
( (CWndCharacter*)pWndBase )->m_wndStateDetail.m_fWaitingConfirm = FALSE;
#endif //__CSC_VER9_2
}
pWndStateConfirm->Destroy();
}
return TRUE;
}
return FALSE;
}
void __cdecl LoadProperty( void* p )
{
prj.OpenProject( "Masquerade.prj" );
CNeuzApp* pApp = (CNeuzApp*) p;
pApp->m_hThread = INVALID_HANDLE_VALUE;
}
void CNeuzApp::WaitLoading()
{
OutputDebugString("WaitLoading start\n");
if( m_hThread != INVALID_HANDLE_VALUE )
{
WaitForSingleObject( m_hThread, INFINITE );
m_hThread = INVALID_HANDLE_VALUE;
}
OutputDebugString("WaitLoading end\n");
}
void CNeuzApp::BeginLoadThread()
{
CResFile::ScanResource( "" );
prj.LoadPreFiles();
m_hThread = (HANDLE) _beginthread( LoadProperty, 0, (LPVOID)this );
#if !defined(_DEBUG)
WaitLoading();
#endif
}
//
// µð¹ÙÀ̽º¿Í ºñµ¶¸³ÀûÀÎ ¸Å½¬, Æú¸®°ï µîÀ» óÀ½ ÃʱâÈ* ÇÏ´Â °÷
//
HRESULT CNeuzApp::InitDeviceObjects()
{
InitNProtect();
BeginLoadThread();
SetMouseCursor( CUR_DELAY );
g_MusicMng.LoadScript( MakePath( DIR_MUSIC, _T( "default.bgm" ) ) );
g_SoundMng.LoadScript( MakePath( DIR_CLIENT, _T( "sound.inc" ) ) );
#ifndef _DEBUG
{
CString strError;
int nMem = m_pd3dDevice->GetAvailableTextureMem();
int nVersion = LOWORD(m_d3dSettings.pWindowed_AdapterInfo->AdapterIdentifier.DriverVersion.u.LowPart);
strError.Format( "%s, %d(%d)", m_d3dSettings.pWindowed_AdapterInfo->AdapterIdentifier.Description, nMem, nVersion );
ADDERRORMSG_NOHEAD( strError );
}
#endif
#ifdef __YENV
if( m_d3dCaps.PixelShaderVersion < D3DPS_VERSION(1,1) )
g_dwUsablePS_Level = 0;
else if( m_d3dCaps.PixelShaderVersion < D3DPS_VERSION(2,0) )
g_dwUsablePS_Level = 1;
else
g_dwUsablePS_Level = 2;
#endif //__YENV
if( m_d3dCaps.TextureCaps & D3DPTEXTURECAPS_SQUAREONLY ) // Á¤»ç°¢ÇüÀÇ ÅØ½ºÃĸ¸ Áö¿øÇÏ´Â Ä«µå³ª µå¶óÀ̹ö¶ó¸é ½ÇÇØ¸øÇÑ´Ù.
{
MessageBox( GetSafeHwnd(), m_strArray.GetAt(12), m_strArray.GetAt(11), MB_OK );
ADDERRORMSG( m_strArray.GetAt(12) );
int *p = NULL;
*p = 1;
}
m_pd3dDevice->SetRenderState( D3DRS_ZFUNC, D3DCMP_LESSEQUAL);
prj.m_modelMng.InitDeviceObjects( m_pd3dDevice );
prj.m_terrainMng.InitDeviceObjects( m_pd3dDevice );
CWorld::StaticInitDeviceObjects( m_pd3dDevice );
g_DamageNumMng.LoadTexture( m_pd3dDevice ); // µ¥¹ÌÁö ÀÌÆåÆ®
g_SfxMng.InitDeviceObjects(m_pd3dDevice);
g_SfxMeshMng.InitDeviceObjects(m_pd3dDevice);
g_Shadow.InitDeviceObjects( m_pd3dDevice );
g_Shadow.LoadElement( "Shadow.o3d" );
g_ParticleMng.InitDeviceObjects( m_pd3dDevice );
if( g_Option.m_nTextureQuality == 2 ) // ÅØ½ºÃÄ Ä÷¸®Æ¼ ³·À½ÀÌ¸é ÆÄÆ¼Å¬ ½ÇÇà¾ÈµÊ.
g_ParticleMng.m_bActive = FALSE;
m_TextureGauge[0].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauMagChargeBG.TGA" ), 0xffff00ff, TRUE );
m_TextureGauge[1].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauMagChargeHead.TGA" ), 0xffff00ff, TRUE );
m_TextureGauge[2].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauMagChargeBody.TGA" ), 0xffff00ff, TRUE );
m_TextureGauge[3].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauMagChargeBody2.tga" ), 0xffff00ff, TRUE );
m_TextureGauge[4].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauMagChargeTail.TGA" ), 0xffff00ff, TRUE );
m_TextureHPGauge[0].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauPartyHpBG.TGA" ), 0xffff00ff, TRUE );
m_TextureHPGauge[1].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauPartyHp.TGA" ), 0xffff00ff, TRUE );
m_TextureHPGauge[2].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauPartyHp_Dbf.TGA" ), 0xffff00ff, TRUE );
m_TextureTurboGauge[0].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAccelBG.TGA" ), 0xffff00ff, TRUE );
m_TextureTurboGauge[1].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAccelInner.TGA" ), 0xffff00ff, TRUE );
m_TextureCastingGauge[0].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAccelBG.TGA" ), 0xffff00ff, TRUE );
m_TextureCastingGauge[1].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAccelInner.TGA" ), 0xffff00ff, TRUE );
m_pMasterIcon[0] = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ICON, "icon_Expert1.dds"), 0xffff00ff );
m_pMasterIcon[1] = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ICON, "icon_Expert2.dds"), 0xffff00ff );
m_pMasterIcon[2] = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ICON, "icon_Expert3.dds"), 0xffff00ff );
m_pMasterIcon[3] = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ICON, "icon_Expert4.dds"), 0xffff00ff );
m_pMasterIcon[4] = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ICON, "icon_Expert5.dds"), 0xffff00ff );
m_pMasterIcon[5] = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ICON, "icon_Expert6.dds"), 0xffff00ff );
m_pHeroIcon = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_ICON, "icon_Hero.dds"), 0xffff00ff );
#if __VER >= 11 // __SYS_COLLECTING
m_TexCltGauge[0].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAccelBG.TGA" ), 0xffff00ff, TRUE );
m_TexCltGauge[1].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAccelInner.TGA" ), 0xffff00ff, TRUE );
//m_TexCltGauge[2].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauPartyHp_Dbf.TGA" ), 0xffff00ff, TRUE );
#endif
#if __VER >= 8 //__CSC_VER8_5
m_TextureAngelGauge[0].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAngelExpBG.TGA" ), 0xffff00ff, TRUE );
m_TextureAngelGauge[1].LoadTexture( m_pd3dDevice, MakePath( DIR_THEME, "GauAngelExp.TGA" ), 0xffff00ff, TRUE );
#endif //__CSC_VER8_5
m_dwPVPTime = GetTickCount();
m_nTexAlpha = 255;
m_bTexLoad = FALSE;
m_bTexLoadAlpha = FALSE;
g_toolTip.InitTexture();
#if __VER >= 15 // __IMPROVE_SYSTEM_VER15
g_toolTipSub1.InitTexture();
g_toolTipSub2.InitTexture();
#endif // __IMPROVE_SYSTEM_VER15
#ifdef __YENV
HRESULT hr;
LPD3DXBUFFER pErr = NULL;
#ifdef _DEBUG
if( FAILED(hr = D3DXCreateEffectFromFile( m_pd3dDevice, "hlsl.fx", NULL, NULL, 0, NULL, &m_pEffect, &pErr )))
#else //_DEBUG
if( FAILED(hr = D3DXCreateEffectFromResource( D3DDEVICE, NULL, MAKEINTRESOURCE(IDR_DATA3), NULL, NULL, 0, NULL, &m_pEffect, &pErr )))
#endif //_DEBUG
{
MessageBox( NULL, (LPCTSTR)pErr->GetBufferPointer(), "ERROR", MB_OK );
}
else
{
m_hTechnique = m_pEffect->GetTechniqueByName( "TShader" );
m_hmWVP = m_pEffect->GetParameterByName( NULL, "mWVP" );
m_hTexDiffuse = m_pEffect->GetParameterByName( NULL, "Tex_Diffuse" );
m_hTexBump = m_pEffect->GetParameterByName( NULL, "Tex_Bump" );
m_hTexSpecular = m_pEffect->GetParameterByName( NULL, "Tex_Specular" );
m_hvLightDir = m_pEffect->GetParameterByName( NULL, "vLightDir" );
m_hvEyePos = m_pEffect->GetParameterByName( NULL, "vEyePos" );
m_hvFog = m_pEffect->GetParameterByName( NULL, "vFog" );
m_hvDiffuse = m_pEffect->GetParameterByName( NULL, "I_d" );
m_hvAmbient = m_pEffect->GetParameterByName( NULL, "I_a" );
m_hvSpecual = m_pEffect->GetParameterByName( NULL, "I_s" );
}
SAFE_RELEASE( pErr );
if( g_dwUsablePS_Level < 2 )
g_Option.m_bSpecBump = FALSE;
m_pEnvTex = NULL;
#endif //__YENV
/*
{
CScript s;
if( s.Load(MakePath( DIR_CLIENT, "GameGuard.inc" )) )
{
s.GetToken();
while( s.tok != FINISHED )
{
m_strArray.Add( s.Token );
s.GetToken();
}
}
}
InitNProtect();
*/
// Å׸¶ ¼¼ÆÃ
CWndBase::m_Theme.LoadTheme( m_pd3dDevice, "Default.thm" );
CWndBase::m_Theme.InitDeviceObjects( m_pd3dDevice );
// CWndBase ¼¼ÆÃ
g_WndMng.m_pApp = this;
g_WndMng.m_pTheme = &CWndBase::m_Theme;
g_WndMng.m_pFont = CWndBase::m_Theme.m_pFontText;
g_WndMng.Initialize();
g_WndMng.InitDeviceObjects();
CWndBase::m_hWnd = GetSafeHwnd();
CWndBase::SetForbidTexture( m_pd3dDevice, MakePath( DIR_ICON, "icon_forbid.dds" ) );
// ´ÙÀ̾ó·Î±× ¸Þ½ÃÁö ¼¼ÆÃ
g_DialogMsg.InitDeviceObjects( m_pd3dDevice );
// 2DRender ¼¼ÆÃ
m_2DRender.InitDeviceObjects( m_pd3dDevice );
m_2DRender.m_pFont = CWndBase::m_Theme.m_pFontText;
g_WndMng.OpenTitle( TRUE );
InitFST(); // init frame skipping time
#ifdef __PROF
SetFrameSkip( FALSE );
#endif
m_texQuestEmoticon.LoadScript( m_pd3dDevice, MakePath( DIR_ICON, "icon_QuestEmoticon.inc" ) );
m_TexturePackPVP.LoadScript( m_pd3dDevice, MakePath( DIR_SFX, "CountFight.inc" ) );
#if __VER >= 15 // __BS_CHANGING_ENVIR
TexturePool::Get()->Init( m_pd3dDevice );
#endif //__BS_CHANGING_ENVIR
PlayMusic( BGM_TITLE, 0 );
return S_OK;
}
#if __VER >= 15
void CNeuzApp::ResetStaticValues( )
{
GuildHouse->ResetValues( );
}
#endif
#if __VER >= 8 //__Y_GAMMA_CONTROL_8
void CNeuzApp::Drv_SetGamma(HWND hWnd, float gamma, int overbright, float fContrast)
{
unsigned short ramp[3*256];
float f;
GetDeviceGammaRamp( GetDC(hWnd), ramp );
for ( int i = 0; i < 256; i++ )
{
f = (float)(255 * pow((float)i/256, 1/gamma));
f = f * fContrast + overbright;
if (f < 0)
f = 0;
if (f > 255)
f = 255;
ramp[i+0] = ramp[i+256] = ramp[i+512] = ((unsigned short)f<<8) ;
}
SetDeviceGammaRamp( GetDC(hWnd), ramp );
}
/*
void CNeuzApp::Loop()
{
if (GetAsyncKeyState(VK_F5))
g_fGamma -= 0.1f;
if (GetAsyncKeyState(VK_F6))
g_fGamma += 0.1f;
if (GetAsyncKeyState(VK_F7))
g_nOverBright -= 1;
if (GetAsyncKeyState(VK_F8))
g_nOverBright += 1;
if (GetAsyncKeyState(VK_F9))
g_fContrast -= 0.1f;
if (GetAsyncKeyState(VK_F10))
g_fContrast += 0.1f;
Drv_SetGamma(GetSafeHwnd(), g_fGamma, g_nOverBright, g_fContrast);
}
*/
#endif //__Y_GAMMA_CONTROL_8
#ifdef __GAME_GRADE_SYSTEM
#ifdef __CLIENT
void CNeuzApp::CalculateGameGradeMarkAlpha( void )
{
CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetWndBase( APP_WORLD );
if( pWndWorld == NULL )
{
return;
}
if( g_Option.m_bGameGradeRendering == TRUE )
{
if( g_tmCurrent > m_dwTimeGameGradeMarkRendering )
{
m_bGameGradeMarkRenderingSwitch = TRUE;
m_nGameGradeMarkAlpha = GAME_GRADE_MARK_MINIMUM_ALPHA;
m_eGameGradeMarkState = FADE_IN;
m_dwTimeOld = g_tmCurrent;
m_dwTimeGameGradeMarkRendering = g_tmCurrent + SEC( GAME_GRADE_MARK_RENDERING_INTERVAL_SECOND );
}
}
if( m_bGameGradeMarkRenderingSwitch == TRUE )
{
float fDelta = ( static_cast< float >( g_tmCurrent - m_dwTimeOld ) / 1000.0f );
m_dwTimeOld = g_tmCurrent;
switch( m_eGameGradeMarkState )
{
case FADE_IN:
{
m_nGameGradeMarkAlpha += static_cast< int >( GAME_GRADE_MARK_FADING_SPEED * fDelta );
if( m_nGameGradeMarkAlpha > GAME_GRADE_MARK_MAXIMUM_ALPHA )
{
m_nGameGradeMarkAlpha = GAME_GRADE_MARK_MAXIMUM_ALPHA;
m_dwTimeGameGradeMarkShowing = g_tmCurrent + SEC( GAME_GRADE_MARK_SHOWING_SECOND );
m_eGameGradeMarkState = SHOW;
}
break;
}
case SHOW:
{
if( g_tmCurrent > m_dwTimeGameGradeMarkShowing )
{
m_eGameGradeMarkState = FADE_OUT;
}
break;
}
case FADE_OUT:
{
m_nGameGradeMarkAlpha -= static_cast< int >( GAME_GRADE_MARK_FADING_SPEED * fDelta );
if( m_nGameGradeMarkAlpha < GAME_GRADE_MARK_MINIMUM_ALPHA )
{
m_nGameGradeMarkAlpha = GAME_GRADE_MARK_MINIMUM_ALPHA;
m_bGameGradeMarkRenderingSwitch = FALSE;
m_eGameGradeMarkState = FADE_IN;
}
break;
}
}
}
}
#endif // __CLIENT
#endif // __GAME_GRADE_SYSTEM
was mache ich falsch ????