////////////////////////////////////////////////////////////////////////// // // °ÔÀÓ ¿É¼Ç #include "SunClientPrecompiledHeader.h" #include "gameoption.h" #include "Sound.h" #include "ChatMsg.h" #ifdef _NA_008678_20160203_ADD_HEIM_TRADINGVOLUME_NOTIFICATION_OPTION #include "GameOptionListParser.h" #endif // _NA_008678_20160203_ADD_HEIM_TRADINGVOLUME_NOTIFICATION_OPTION CGameOption::CGameOption() : CGameParameter("GameData.dat"), m_bExceptionSize(FALSE) { ZeroMemory( &m_OptionParam, sizeof(OptionParam) ); m_ScreenSettingCount = 0; // ÆÄÀÏÀÇ ¼Ó¼ºÀ» ¸ÕÀú Ç®¾îÁØ´Ù SetFileAttributesA( m_szFullPath, FILE_ATTRIBUTE_NORMAL ); } CGameOption::~CGameOption() { Save(); m_ScreenSettingArray.Clear(); } void CGameOption::UpdateScreenSettingArray() { const int c_iMaxCount = 256; St_ScreenSetting pGetSS[c_iMaxCount]; int iMaxCount = g_pSunRenderer->GetAvailableScreenSettings( pGetSS, c_iMaxCount ); if( iMaxCount >= c_iMaxCount ) { assert( !"¸®½ºÆ® Ç׸ñÀÌ ³Ê¹« ¸¹´Ù! 256°³ ³Ñ¾î°¬´Ù! ÀÌ·±~" ); } m_ScreenSettingCount = 0; m_ScreenSettingArray.Clear(); int iCount = 0; char text[1024]; // Áö¿øÇÏ´Â ÇØ»óµµ°¡ ÀÖ´Â Áö °Ë»çÇÏ¿© ÇÊÅ͸µ for( int j = 0 ; j < iMaxCount ; ++j ) { if(pGetSS[j].m_iWidth>=640&&pGetSS[j].m_iHeight>=480) { SCREEN_SETTING temp; temp.ScreenSetting.m_iWidth = pGetSS[j].m_iWidth; temp.ScreenSetting.m_iHeight = pGetSS[j].m_iHeight; temp.ScreenSetting.m_iBpp = pGetSS[j].m_iBpp; temp.iOriginalScreenSetting = j; Sprintf(text, _T("%d x %d x %d"), pGetSS[j].m_iWidth, pGetSS[j].m_iHeight, pGetSS[j].m_iBpp ); temp.SettingText = text; m_ScreenSettingArray.Append(temp); ++iCount; } } m_ScreenSettingCount = iCount; } BOOL CGameOption::Load() { // 1. ¿£Áø¿¡¼­ ·ÎµåµÈ ÇØ»óµµ Á¤º¸¸¦ °¡Á®¿Â ÈÄ ¼¼ÆÃ St_ScreenFormat SaveScreenFormat; g_pSunRenderer->GetScreenFormat( &SaveScreenFormat ); St_RenderOption SaveOption; g_pSunRenderer->GetRenderOption(&SaveOption); int width = SaveScreenFormat.m_dwWidth; int height = SaveScreenFormat.m_dwHeight; int bpp = SaveScreenFormat.m_iRed == 8 ? 24 : 16; #if (WZENGINEVER >= 360) if (SaveScreenFormat.m_bFullScreen) { m_OptionParam.SetScreenMode( OptionParam::kScreenMode_Full ); } else if (SaveScreenFormat.m_bMaximizeScreen) { m_OptionParam.SetScreenMode( OptionParam::kScreenMode_MaxWindow ); } else { m_OptionParam.SetScreenMode( OptionParam::kScreenMode_Window ); } #endif //(WZENGINEVER >= 360) m_OptionParam.SetScreenSize( width, height ); m_OptionParam.SetScreenBitPerPixel( bpp ); // 2. »ç¿ë°¡´ÉÇÑ ÇØ»óµµ ¸ñ·ÏÀ» ±¸¼º UpdateScreenSettingArray(); // 3. ¿£Áø¿¡¼­ ·ÎµåµÈ ÇØ»óµµ¿Í ¸ÅĪµÇ´Â ÇØ»óµµ·Î ¼±Åà // ±âº» ÇØ»óµµÀÎ 1024 768·Î ¸ÂÃç³õ°í m_OptionParam.SetScreenIndex(0); // ÀûÀýÇÑ ÇØ»óµµ¸¦ ¼¼ÆÃ for (int a = 0; a < m_ScreenSettingCount; a++) { if ((m_ScreenSettingArray[a].ScreenSetting.m_iBpp == bpp ) && (m_ScreenSettingArray[a].ScreenSetting.m_iWidth == width) && (m_ScreenSettingArray[a].ScreenSetting.m_iHeight == height)) { m_OptionParam.SetScreenIndex(a); break; } } m_OptionParam.Load( this ); #ifdef _DH_OS_LANGUAGETYPE LanguageType DefaultLanguageType = GetOSUserDefaultLanguage(); SetLanguageType( DefaultLanguageType ); #endif //_DH_OS_LANGUAGETYPE return TRUE; } #ifdef _DH_OS_LANGUAGETYPE LanguageType CGameOption::GetOSUserDefaultLanguage() { LanguageType language_type = kLanguageGlobal; LANGID language_code = 0; switch(language_code = GetUserDefaultLangID()) { #ifdef _DEV_VER case 0x0412://Korean language_type = kLanguageKorea; break; case 0x411://Japanese language_type = kLanguageJapan; break; case 0x0404://Chinese (Taiwan) language_type = kLanguageTaiwan; break; case 0x0804://Chinese (PRC) case 0x0c04://Chinese (Hong Kong SAR, PRC) case 0x1004://Chinese (Singapore) case 0x1404://Windows 98/Me, Windows 2000/XP: Chinese (Macao SAR) language_type = kLanguageChina; break; /*case 0x0419://Russian language_type = kLanguageRussian; break;*/ #endif//_DEV_VER case 0x1407://German (Liechtenstein) case 0x1007://German (Luxembourg) case 0x0c07://German (Austria) case 0x0407://German (Standard) case 0x0807://German (Switzerland) language_type = kLanguageGermany; break; default: //English language_type = kLanguageGlobal; break; } return language_type; } #endif//_DH_OS_LANGUAGETYPE BOOL CGameOption::Save() { m_OptionParam.Save( this ); St_ScreenFormat SaveScreenFormat; g_pSunRenderer->GetScreenFormat( &SaveScreenFormat ); St_RenderOption SaveOption; g_pSunRenderer->GetRenderOption(&SaveOption); char szCurDirectory[512]; char szFileName[512]; ZeroMemory(szCurDirectory,sizeof(szCurDirectory)); ZeroMemory(szCurDirectory,sizeof(szFileName)); GetCurrentDirectoryA(512, szCurDirectory); sprintf( szFileName, "%s\\%s", szCurDirectory, "3dsetup.ini"); //GS_BUG_FIX:ÃÖ´ëÇØ»óµµ½Ã Á¤»óÀûÀ¸·Î À©µµ¿ì»çÀÌÁ º¯°æÇÏÁö¸øÇÑ´Ù. if( GAMEOPTION->IsExceptionSize()) { GAMEOPTION->GetExceptionSize(SaveScreenFormat); } SaveScreenFormatAndRenderOption( szFileName,&SaveScreenFormat,&SaveOption); return TRUE; } #include "Application.h" #include "InterfaceManager.h" #include "Camera.h" #include "uiQuestMan/uiQuestMan.h" #include "GameFunc.h" #include "Map.h" #include "HeroData.h" #include "Mouse.h" #include "Hero.h" #include "HeroActionInput.h" #include "uiHelpMan/uiHelpMan.h" #include "GlobalFunc.h" #include "SoundBGM.h" void CGameOption::ApplyScreenOption() { // ÇöÀçÀÇ ¼³Á¤ St_ScreenFormat ScreenFormat; g_pSunRenderer->GetScreenFormat( &ScreenFormat ); St_ScreenFormat backup_screen_format = ScreenFormat; const SCREEN_SETTING& ScreenSetting = GAMEOPTION->GetAvailableScreenSetting(m_OptionParam.GetScreenIndex()); // º¯°æ»çÇ×À» ÀçÈ®ÀÎ BOOL IsChanged = FALSE; if( ScreenFormat.m_bFullScreen == TRUE ) { if ( m_OptionParam.GetScreenMode() != OptionParam::kScreenMode_Full) { IsChanged = TRUE; } } else if( ScreenFormat.m_bMaximizeScreen == true) { if (m_OptionParam.GetScreenMode() != OptionParam::kScreenMode_MaxWindow) { IsChanged = TRUE; } } else { if (m_OptionParam.GetScreenMode() != OptionParam::kScreenMode_Window) { IsChanged = TRUE; } } if( (ScreenSetting.ScreenSetting.m_iWidth != ScreenFormat.m_dwWidth) || (ScreenSetting.ScreenSetting.m_iHeight != ScreenFormat.m_dwHeight)) { IsChanged = TRUE; } // º¯°æ »çÇ×ÀÌ ¾øÀ½ if( IsChanged == FALSE ) return; BOOL backup_is_wide = g_pApplication->IsWideModeFlag(); ENUM_SCREEN_RATIO backup_screen_ratio = g_pApplication->screen_ratio(); #ifdef _YMS_WINDOW_MAXSCREEN if ((m_OptionParam.GetScreenMode() != OptionParam::kScreenMode_Full) && (ScreenSetting.ScreenSetting.m_iWidth == g_pApplication->desktop_screen_size().x) && (ScreenSetting.ScreenSetting.m_iHeight == g_pApplication->desktop_screen_size().y)) { m_OptionParam.SetScreenMode(OptionParam::kScreenMode_MaxWindow); } if (m_OptionParam.GetScreenMode() == OptionParam::kScreenMode_Full) { ScreenFormat.m_bFullScreen = TRUE; ScreenFormat.m_bMaximizeScreen = false; ScreenFormat.m_dwWidth = ScreenSetting.ScreenSetting.m_iWidth; ScreenFormat.m_dwHeight = ScreenSetting.ScreenSetting.m_iHeight; } else if (m_OptionParam.GetScreenMode() == OptionParam::kScreenMode_MaxWindow) { ScreenFormat.m_bFullScreen = FALSE; ScreenFormat.m_bMaximizeScreen = true; ScreenFormat.m_dwWidth = g_pApplication->desktop_screen_size().x; ScreenFormat.m_dwHeight = g_pApplication->desktop_screen_size().y; } else { ScreenFormat.m_bFullScreen = FALSE; ScreenFormat.m_bMaximizeScreen = false; ScreenFormat.m_dwWidth = ScreenSetting.ScreenSetting.m_iWidth; ScreenFormat.m_dwHeight = ScreenSetting.ScreenSetting.m_iHeight; } #else ScreenFormat.m_dwWidth = ScreenSetting.ScreenSetting.m_iWidth; ScreenFormat.m_dwHeight = ScreenSetting.ScreenSetting.m_iHeight; #endif //_YMS_WINDOW_MAXSCREEN // ¿ÍÀÌµå ¸ðµå Ç÷¡±× ¼³Á¤ float fRate = (float)ScreenFormat.m_dwWidth / (float)ScreenFormat.m_dwHeight; if( ScreenSetting.ScreenSetting.m_iBpp == 24 ) { ScreenFormat.m_iRed = 8; ScreenFormat.m_iGreen = 8; ScreenFormat.m_iBlue = 8; } else if( ScreenSetting.ScreenSetting.m_iBpp == 16 ) { ScreenFormat.m_iRed = 5; ScreenFormat.m_iGreen = 5; ScreenFormat.m_iBlue = 5; } else { // ¹¹Áö? } #ifdef _YMS_WINDOW_MAXSCREEN bool is_window_size_changed = false; if ((backup_screen_format.m_dwWidth != ScreenFormat.m_dwWidth) || (backup_screen_format.m_dwHeight != ScreenFormat.m_dwHeight) || (backup_screen_format.m_bFullScreen != ScreenFormat.m_bFullScreen) || (backup_screen_format.m_bMaximizeScreen != ScreenFormat.m_bMaximizeScreen)) { is_window_size_changed = TRUE; } g_pSunRenderer->SelectMode(ScreenFormat); g_pSunRenderer->ChangeScreenFormat(&ScreenFormat, g_pApplication->GetHWnd(), is_window_size_changed); #else g_pSunRenderer->SelectMode(ScreenFormat); g_pSunRenderer->ChangeScreenFormat(&ScreenFormat, g_pApplication->GetHWnd()); #endif //_YMS_WINDOW_MAXSCREEN RECT rcWindow; rcWindow.left = 0; rcWindow.top = 0; rcWindow.right = ScreenFormat.m_dwWidth; rcWindow.bottom = ScreenFormat.m_dwHeight; g_InterfaceManager.SetWindowRC(&rcWindow); g_Camera.SetAspectRatio(SR_AUTO); POINT Point; Point.x = ScreenFormat.m_dwWidth; Point.y = ScreenFormat.m_dwHeight; g_pApplication->OnChangeRes(&Point ); g_InterfaceManager.MoveDefaultWindowPos(); //if (backup_screen_ratio != g_pApplication->screen_ratio()) //{ // g_InterfaceManager.MoveDefaultWindowPos(); //} if( uiQuestMan* pMan = GET_DIALOG_MANAGER( uiQuestMan, UIMAN_QUEST ) ) { pMan->SetQuestViewProgressRect(); } } void CGameOption::ApplyOptionValue( nOptionType::eOptionTypeIndex TypeIndex, int Value ) { switch( TypeIndex ) { // DisplayOption case nOptionType::TEXTURE_QUALITY: { float NewTextureRate = 0.25f; if( Value == eOPTION_LEVEL_HIGH ) NewTextureRate = 1.0f; else if( Value == eOPTION_LEVEL_MIDDLE ) NewTextureRate = 0.5f; else if ( Value == eOPTION_LEVEL_LOW ) NewTextureRate = 0.25f; St_RenderOption Option; g_pSunRenderer->GetRenderOption(&Option); if( Option.m_fTextureRate == NewTextureRate ) break; Option.m_fTextureRate = NewTextureRate; g_pSunRenderer->SetRenderOption(Option); g_pSunRenderer->x_pManagerTexture->ResizeAllTexture(); break; } case nOptionType::SHOW_SHADOW: { ENUM_SHADOWMAP_MODE eType = g_pSunRenderer->x_pManagerShadowMap->ConfirmDevice(); ENUM_SHADOW_TYPE eTypeToSet; // ±×¸²ÀÚ Ä÷¸®Æ¼ if( Value == TRUE ) eTypeToSet = SWT_SHADOWMAP_NO_SELFSHADOW; else eTypeToSet = SWT_DISABLED; switch (eType) { // ÃÖ°í»ç¾çÀÓ ¾î¶°ÇѰ͵µ ÇÊ¿ä¾øÀ½ case ESM_DEPTHSTENCIL: case ESM_R32F: break; // ÇÁ·ÎÁ§¼Ç ½¦µµ¿ì¹Û¿¡ Áö¿ø¾ÈÇÔ case ESM_PROTECTED_TEXTURE: { // ½¦µµ¿ì¸ÊÀ» ¹öÆÛ·Î º¯È¯ if (eTypeToSet == SWT_SHADOWMAP_NO_SELFSHADOW || eTypeToSet == SWT_SHADOWMAP) { eTypeToSet = SWT_CIRCLESHADOW; } } break; // ´Ù Áö¿ø¾ÈÇÔ. case ESM_NONE: { switch (m_OptionParam.GetShadowQuality()) { case eOPTION_LEVEL_HIGH: case eOPTION_LEVEL_MIDDLE: eTypeToSet = SWT_CIRCLESHADOW; break; case eOPTION_LEVEL_LOW: default: eTypeToSet = SWT_DISABLED; break; } } break; } St_RenderOption Option; g_pSunRenderer->GetRenderOption(&Option); if( Option.m_eShadowType == eTypeToSet && Option.m_bRenderShadow == Value ) break; Option.m_eShadowType = eTypeToSet; Option.m_bRenderShadow = Value; g_pSunRenderer->SetRenderOption(Option); g_pSunRenderer->x_pManagerShadowMap->ResetShadowMode(); } break; case nOptionType::LOD_LEVEL: { // LOD GameFunc::ApplyLODDistance( Value ); GameFunc::ApplyEffectLODDistance( Value ); } break; case nOptionType::USE_BLUR: { g_pMap->EnableBlur( Value ); } break; case nOptionType::USE_FOG: { g_pSunRenderer->EnableFog( Value ); } break; case nOptionType::USE_MAP_DISTANCE_VIEW: { if( Value ) g_pSunRenderer->x_pManagerPostEffect->TurnOnPostEffect(PET_DEPTH_OF_FIELD); else g_pSunRenderer->x_pManagerPostEffect->TurnOffPostEffect(PET_DEPTH_OF_FIELD); } break; case nOptionType::EFFECT_QUALITY: { if( g_pEffectManager != NULL ) { #if WZENGINEVER >= 610 int CurrentEffectLevel = g_pEffectManager->GetBaseEffectLevel(); #else int CurrentEffectLevel = -1; // Ç×»ó º¯°æµÈ´Ù #endif // ÇöÀç ¼³Á¤°ú Â÷À̰¡ Àִ°æ¿ì if( 3 - Value != CurrentEffectLevel ) { if( Value == 3 ) { g_pEffectManager->LoadEffectFromFile("Data\\Effect\\effectresource0.txt","Data\\Effect\\", EELT_ADD, 0); g_pEffectManager->UnLoadEffectFromFile("Data\\Effect\\effectresource1.txt"); g_pEffectManager->UnLoadEffectFromFile("Data\\Effect\\effectresource2.txt"); g_pEffectManager->UnLoadEffectFromFile("Data\\Effect\\effectresource3.txt"); } else if( Value == 2 ) { g_pEffectManager->LoadEffectFromFile("Data\\Effect\\effectresource0.txt","Data\\Effect\\", EELT_ADD, 0); g_pEffectManager->LoadEffectFromFile("Data\\Effect\\effectresource1.txt","Data\\Effect\\", EELT_ADD, 1); g_pEffectManager->UnLoadEffectFromFile("Data\\Effect\\effectresource2.txt"); g_pEffectManager->UnLoadEffectFromFile("Data\\Effect\\effectresource3.txt"); } else if( Value == 1 ) { g_pEffectManager->LoadEffectFromFile("Data\\Effect\\effectresource0.txt","Data\\Effect\\", EELT_ADD, 0); g_pEffectManager->LoadEffectFromFile("Data\\Effect\\effectresource1.txt","Data\\Effect\\", EELT_ADD, 1); g_pEffectManager->LoadEffectFromFile("Data\\Effect\\effectresource2.txt","Data\\Effect\\", EELT_ADD, 2); g_pEffectManager->UnLoadEffectFromFile("Data\\Effect\\effectresource3.txt"); } else { g_pEffectManager->LoadEffectFromFile("Data\\Effect\\effectresource0.txt","Data\\Effect\\", EELT_ADD, 0); g_pEffectManager->LoadEffectFromFile("Data\\Effect\\effectresource1.txt","Data\\Effect\\", EELT_ADD, 1); g_pEffectManager->LoadEffectFromFile("Data\\Effect\\effectresource2.txt","Data\\Effect\\", EELT_ADD, 2); g_pEffectManager->LoadEffectFromFile("Data\\Effect\\effectresource3.txt","Data\\Effect\\", EELT_ADD, 3); } // ÀÌÆåÆ® ±âº» ·¹º§ ¼³Á¤ g_pEffectManager->SetBaseEffectLevel( 3 - Value ); } } } break; case nOptionType::GAMMA_VALUE: { DWORD Gamma = Value / 100; Gamma=min(255,Gamma); Gamma=max(0,Gamma); float fGammaRate = (float)Gamma / 255; WORD wSred[256]; WORD wSgreen[256]; WORD wSblue[256]; for(int i=0;i<256;i++) { wSred[i] =WORD(g_D3dGammaRamp.red[i] * fGammaRate); wSred[i]=min(65535,wSred[i]); wSgreen[i] = WORD(g_D3dGammaRamp.green[i] * fGammaRate); wSgreen[i]=min(65535,wSgreen[i]); wSblue[i] = WORD(g_D3dGammaRamp.blue[i] * fGammaRate); wSblue[i]=min(65535,wSblue[i]); } g_pSunRenderer->SetGammaRamp(wSred,wSgreen,wSblue); } break; case nOptionType::USE_VOLUME_LIGHT: { #ifdef _NA_006998_20131217_DISABLE_VOLUMLIGHT_OPTION g_pSunRenderer->x_pManagerPostEffect->TurnOffPostEffect(PET_VOLUME_LIGHT); #else // _NA_006998_20131217_DISABLE_VOLUMLIGHT_OPTION if( Value == TRUE ) g_pSunRenderer->x_pManagerPostEffect->TurnOnPostEffect(PET_VOLUME_LIGHT); else g_pSunRenderer->x_pManagerPostEffect->TurnOffPostEffect(PET_VOLUME_LIGHT); #endif // _NA_006998_20131217_DISABLE_VOLUMLIGHT_OPTION } break; // GameOption case nOptionType::MOUSE_SENS_VALUE: { Mouse::Instance()->SetMoveLevel(Value); } break; case nOptionType::MOUSE_VIEW_SENS_VALUE: { g_Camera.SetRotationLevel(Value); } break; case nOptionType::CAMERA_VIEW_HEIGHT_OFFSET: if( Value < 3 ) { static float data[3] = {0.f, 0.35f, 0.45f}; g_Camera.MoveUpDown( data[Value] ); } break; case nOptionType::SHOW_HELMET: { BOOL bHide = !Value; if( g_pHero ) { if( g_pHero->IsHideHelmet() != bHide ) { g_pHero->HideHelmet( bHide ); MSG_CG_STATUS_RENDER_OPTION_SYN msg; msg.m_byRenderOptionType = MSG_CG_STATUS_RENDER_OPTION_SYN::eRENDER_HELMET_OPTION; msg.m_byOptionLevel = bHide ? 1 : 0; g_pHero->SendPacket(&msg,sizeof(msg)); } } else { xGetHeroData()->SetHideHelmet( bHide ); } } break; #ifdef _NA_006683_20130502_EQUIPMENTS_VISIBLE_COSTUME case nOptionType::HIDE_COSTUME: { BOOL bHide = Value; if( g_pHero ) { if( g_pHero->isHideCostume() != bHide ) { g_pHero->HideCostume( bHide ); MSG_CG_STATUS_RENDER_OPTION_SYN msg; msg.m_byRenderOptionType = MSG_CG_STATUS_RENDER_OPTION_SYN::eRENDER_COSTUME_OPTION; msg.m_byOptionLevel = bHide ? 1 : 0; g_pHero->SendPacket(&msg,sizeof(msg)); } } else { xGetHeroData()->SetHideCostume( bHide ); } } break; #endif #ifdef _NA_000000_20120420_EQUIPMENTS_VISIBLE_WING case nOptionType::SHOW_WING: { BOOL bHide = Value; if( g_pHero ) { if( g_pHero->IsHideWing() != bHide ) { g_pHero->HideWing( bHide ); MSG_CG_STATUS_RENDER_OPTION_SYN msg; msg.m_byRenderOptionType = MSG_CG_STATUS_RENDER_OPTION_SYN::eRENDER_WING_OPTION; msg.m_byOptionLevel = bHide ? 1 : 0; g_pHero->SendPacket(&msg,sizeof(msg)); } } else { xGetHeroData()->SetHideWing( bHide ); } } break; #endif //_NA_000000_20120420_EQUIPMENTS_VISIBLE_WING case nOptionType::USE_MOVE_TO_CAMERA: { g_HeroInput.SetCameraBaseMove( Value ); } break; case nOptionType::USE_BLOCK_WHISPER: { MSG_CG_STATUS_INTERCEPTION_SYN sendPacket; sendPacket.m_byInterceptionCode = eINTERCEPTION_WHISPER; sendPacket.m_bRequestFlag = Value; GlobalFunc::SendPacket(CI_GAMESERVERIDX, &sendPacket, sizeof (sendPacket)); } break; case nOptionType::USE_BLOCK_TRADE: { MSG_CG_STATUS_INTERCEPTION_SYN sendPacket; sendPacket.m_byInterceptionCode = eINTERCEPTION_TRADE; sendPacket.m_bRequestFlag = Value; GlobalFunc::SendPacket(CI_GAMESERVERIDX, &sendPacket, sizeof (sendPacket)); } break; case nOptionType::USE_CHANGE_EYE_MOUSE: { g_Input.SetMouseChange( Value ); } break; case nOptionType::USE_FIXED_TARGET: { g_HeroInput.SetFixTarget( Value ); } break; case nOptionType::USE_FORWARD_TARGET: { g_HeroInput.SetForwardTargeting( Value ); } break; case nOptionType::USE_AUTO_TARGET: { g_HeroInput.SetAutoTarget( Value ); } break; #ifdef _20220411_AUTO_AIM case nOptionType::QUICK_AUTO_AIM: { g_HeroInput.SetAutoAim( Value ); } break; #endif case nOptionType::USE_HELP: if( uiHelpMan* helpMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_HELP)) ) { helpMan->ShowHelpMenu( Value, TRUE ); } break; // Sound Option case nOptionType::BGM_VOLUME: { float fVolume = (float)Value * 0.01f; Sound::Instance()->SetBGMVolume( fVolume ); g_SoundBGM.SetVolume( fVolume ); } break; case nOptionType::AMBIENT_VOLUME: { float fVolume = (float)Value * 0.01f; Sound::Instance()->SetAmbientEffectVolume( fVolume ); if( g_pMap ) g_pMap->SetAmbientVolume( fVolume ); } break; case nOptionType::EFFECT_VOLUME: { float fVolume = (float)Value * 0.01f; Sound::Instance()->SetEffectVolume( fVolume ); } break; case nOptionType::SYSTEM_VOLUME: { float fVolume = (float)Value * 0.01f; Sound::Instance()->SetMasterVolume( fVolume, TRUE ); } break; case nOptionType::SPEAKER_VOLUME: { float fVolume = (float)Value * 0.01f; Sound::Instance()->SetWaveVolume( fVolume, TRUE ); } break; #if WZENGINEVER >= 620 case nOptionType::USE_FIXED_UI_POSITION: { BOOL UseAutoScale = Value == 0; if( g_pSunRenderer->Get2DModeAutoScale() != UseAutoScale ) { g_pSunRenderer->Set2DModeAutoScale( UseAutoScale ); St_ScreenFormat ScreenFormat; g_pSunRenderer->GetScreenFormat( &ScreenFormat ); RECT rcWindow; rcWindow.left = 0; rcWindow.top = 0; rcWindow.right = ScreenFormat.m_dwWidth; rcWindow.bottom = ScreenFormat.m_dwHeight; g_InterfaceManager.SetWindowRC(&rcWindow); g_Camera.SetAspectRatio(SR_AUTO); g_pSunRenderer->ChangeScreenFormat(&ScreenFormat, g_pApplication->GetHWnd(), false ); POINT Point; Point.x = ScreenFormat.m_dwWidth; Point.y = ScreenFormat.m_dwHeight; g_pApplication->OnChangeRes(&Point ); g_InterfaceManager.MoveDefaultWindowPos(); } } break; #endif // WZENGINEVER >= 620 #ifdef _NA_007865_20141403_LIGHTMAP_BUILD_EXCLUDE_OBJECTS case nOptionType::SHADOW_DISTANCE: { if (Value >= 0) { g_pSunRenderer->x_pManagerShadowMap->SetShadowRange(static_cast(Value)); } } #endif //_NA_007865_20141403_LIGHTMAP_BUILD_EXCLUDE_OBJECTS default: break; } } void CGameOption::ApplyOption() { ApplyScreenOption(); for( size_t i=0;i!=nOptionType::MAX;++i) { nOptionType::eOptionTypeIndex TypeIndex = (nOptionType::eOptionTypeIndex)i; ApplyOptionValue( TypeIndex, m_OptionParam.GetOptionValue(TypeIndex) ); } Save(); } const SCREEN_SETTING& CGameOption::GetAvailableScreenSetting(int index) { assert(index < m_ScreenSettingCount); assert(index >= 0); return m_ScreenSettingArray[index]; } //------------------------------------------------------------------------------ int CGameOption::GetAvailableScreenSettingIndex(int width, int height, int bpp) { for (int i = 0; i < m_ScreenSettingCount; ++i) { SCREEN_SETTING& screen_setting = m_ScreenSettingArray[i]; if ((screen_setting.ScreenSetting.m_iWidth == width) && (screen_setting.ScreenSetting.m_iHeight == height) && (screen_setting.ScreenSetting.m_iBpp == bpp)) { return screen_setting.iOriginalScreenSetting; } } return -1; } int CGameOption::GetAvailableScreenSettingCount() { return m_ScreenSettingCount; } void CGameOption::ToggleFullScreenMode() { if( g_pSunRenderer->ToggleFullScreen() == TRUE ) { St_ScreenFormat ScreenFormat; g_pSunRenderer->GetScreenFormat( &ScreenFormat ); if (ScreenFormat.m_bFullScreen) { m_OptionParam.SetScreenMode( OptionParam::kScreenMode_Full ); } else if (ScreenFormat.m_bMaximizeScreen) { m_OptionParam.SetScreenMode( OptionParam::kScreenMode_MaxWindow ); } else { m_OptionParam.SetScreenMode( OptionParam::kScreenMode_Window ); } } } #ifdef _NA_008678_20160203_ADD_HEIM_TRADINGVOLUME_NOTIFICATION_OPTION MONEY CGameOption::GetHeimTradingvolumeNotification() { MONEY money = 0; int option_value = m_OptionParam.GetOptionValue( nOptionType::HEIM_TRADINGVOLUME); sOptionItemInfo* option_item_info = OptionItemInfoParser::Instance()->GetOptionItemInfo(236); if (option_item_info == NULL) { return money; } if (option_item_info->m_ItemDataArray.empty()) { return money; } if (option_item_info->m_ItemDataArray.size()-1 < (unsigned int)option_value || option_value < 0) { return money; } if (option_value == 0) { money = 0; } else { std::string option_string = option_item_info->m_ItemDataArray[option_value]; money = _atoi64(const_cast(option_string.c_str())); } return money; } #endif // _NA_008678_20160203_ADD_HEIM_TRADINGVOLUME_NOTIFICATION_OPTION