#pragma once #include "stdafx.h" #include #ifndef _RAPPELZ_CONFIG #include "KRenderDeviceDX.h" #endif #include "SGameOption.h" //#include "Util.h" #include #include #ifdef _RAC #include "SStringDB.h" #endif #include #include "SLog.h" #include namespace { enum INTERFACE { INTERFACE_SMALL = 0, INTERFACE_NORMAL, INTERFACE_LARGE, }; enum MINIMAP { MINIMAP_ALPHA_MIN = 0, MINIMAP_ALPHA_MIDDLE, MINIMAP_ALPHA_MAX, }; enum CHAT_TYPE { CHAT_ALL = 0, CHAT_WHISPER, CHAT_PARTY, CHAT_GUILD, CHAT_AD, CHAT_NOTICE, CHAT_SYSTEM, }; }; #define ERR_RESULT -1 bool g_bDefSet[SGAME_OPT_DATA::c_nMaxChannel][SGAME_OPT_DATA::c_nMaxChatOption] = { //사용자, 일반, 광역, 광고, 귓속, 친한 귓속, | 그룹, 파티, 길드, 공대, | 시스템, 경험치, NPC, 기본데미지, 스킬데미지,아이템, 전투 ,크리처, 기타 { true , true , true, true , true , true , true , true, true , true , true , true , true , true , true , true , true , true , true , }, { true , true , true, true , true , true , true , true, true , true , true , true, false, true , true , true , false, false, true , }, { true , false, false, false, true, true , true , true, true , false, false, false, false, false , false , false, false, false, false, }, { true , false, false, false, true, true, true, false, true , true , false, false, false, false , false , false, false, false, false, }, { true , false, true, true , false, false, false, false, false, false, false, false, false, false , false , false, false, false, false, }, }; SGameOption::SGameOption() : m_nQuickVerX(-1), m_nQuickVerY(-1), m_nQuickHozX(-1), m_nQuickHozY(-1), m_nVerticalQuick(-1), m_nStateVerX(-1), m_nStateVerY(-1), m_nStateHozX(-1), m_nStateHozY(-1), m_nVerticalState(-1), m_nMessangerX(-1), m_nMessangerY(-1), m_nMessangerOpen(-1), m_nCreatureOpen(-1), m_nSysMenuX(-1), m_nSysMenuY(-1), m_nInventoryX(-1), m_nInventoryY(-1), m_nChattingLine(-1), m_nChattingHeight(-1), m_nCreatureX(-1), m_nCreatureY(-1), m_nCreatureInfoX(-1), m_nCreatureInfoY(-1), m_nQuestX(-1), m_nQuestY(-1), m_nMotionX(-1), m_nMotionY(-1), m_nOptionX(-1), m_nOptionY(-1), m_nCharX(-1), m_nCharY(-1), m_nSkillX(-1), m_nSkillY(-1), m_nSystemX(-1), m_nSystemY(-1), m_nMapX(-1), m_nMapY(-1), m_nItemCombineX(-1), m_nItemCombineY(-1), m_nShopX(-1), m_nShopY(-1), m_nStoreX(-1), m_nStoreY(-1), m_nStorageX(-1), m_nStorageY(-1), m_nCreatureSkillX(-1), m_nCreatureSkillY(-1), m_nPosEquipment( -1, -1 ) , m_bOpenEquipWnd(false) //servantes 2010.11.02 { SetEnvironmenteDefault(m_defData); SetPlayDataDefault(m_defData); Init(); m_MemSize = 0; int i,j; for( j = 0; j < SGAME_OPT_DATA::c_nMaxChannel; j++ ) { for( i = 0; i < SGAME_OPT_DATA::c_nMaxChatOption; i++ ) m_bChannelCheck[j][i] = g_bDefSet[j][i]; } m_bChatOpen = true; /// 2011.02.16 - prodongi m_useRechargeMsgBox = 1; } SGameOption::~SGameOption() { Destroy(); } void SGameOption::InitChattinSet() { #ifdef _RAC m_strTabName[0] = S(6369);//"전체"; m_strTabName[1] = S(6370);//"일반"; m_strTabName[2] = S(6371);//"파티"; m_strTabName[3] = S(6372);//"길드"; m_strTabName[4] = S(6373);//"광고"; #else m_strTabName[0] = ""; m_strTabName[1] = ""; m_strTabName[2] = ""; m_strTabName[3] = ""; m_strTabName[4] = ""; #endif m_strTabMark[0] = ""; m_strTabMark[1] = ""; m_strTabMark[2] = "#"; m_strTabMark[3] = "%"; m_strTabMark[4] = "$"; } bool SGameOption::GetPresetOptData( int level, _OPT_DATA& data ) { if ( level <= 0 || level > PRESET_HIGHEST ) return false; data.nMASTER_Volume = m_curData.nMASTER_Volume; data.nAllMute = m_curData.nAllMute; data.nSFX_Volume = m_curData.nSFX_Volume; data.nSFX_Mute = m_curData.nSFX_Mute; data.nENVS_Volume = m_curData.nENVS_Volume; data.nENVS_Mute = m_curData.nENVS_Mute; data.nBGM_Volume = m_curData.nBGM_Volume; data.nBGM_Mute = m_curData.nBGM_Mute; switch ( level ) { case PRESET_LOWEST: //최저 사양 옵션 data.nResolution_Width = 1024; //해상도 가로 data.nResolution_Height = 768; //해상도 세로 data.nRefreshRate = 1; data.nBackGrondDis = 0;//0~4 data.nTerrainDis = 0;//0~4 data.nPropDis = 0;//0~3 data.nSpeedDis = 0;//0~3 data.nGrassDis = 0;//0~3 data.nAvatarDis = 0;//0~3 data.nShadowDis = 0; data.nLowShadow = 1; data.nSpeedQual = 0;//0~3 data.nMipBias = 0;//0~2 data.nSelfShadowQual = 0;//0~3 data.nGlowQual = 0;//0~1 data.nWaterQual = 0; data.nResourceQual = 0; data.nTownLimit = 1; data.nEnhance = 0; data.nShadow = 0; data.nStateEffect = 0; data.nStateEffectPlayer = 0; data.nStateEffectParty = 0; data.nStateEffectEnemy = 0; data.nRenderTree = 0; data.nRenderGrass = 0; data.nEffect = 0; data.nEffectPlayer = 0; data.nEffectParty = 0; data.nEffectEnemy = 0; data.nFaceAni = 0; data.nLightMap = 0; break; case PRESET_LOW: //저사양 옵션 data.nResolution_Width = 1024; //해상도 가로 data.nResolution_Height = 768; //해상도 세로 data.nRefreshRate = 1; data.nBackGrondDis = 1;//0~4 data.nTerrainDis = 1;//0~4 data.nPropDis = 1;//0~3 data.nSpeedDis = 2;//0~3 data.nGrassDis = 1;//0~3 data.nAvatarDis = 0;//0~3 data.nShadowDis = 0; data.nLowShadow = 1; data.nSpeedQual = 2;//0~3 data.nMipBias = 0;//0~2 data.nSelfShadowQual = 0;//0~3 data.nGlowQual = 0;//0~1 data.nWaterQual = 0; data.nResourceQual = 0; data.nTownLimit = 1; data.nEnhance = 0; data.nShadow = 1; data.nStateEffect = 1; data.nStateEffectPlayer = 1; data.nStateEffectParty = 0; data.nStateEffectEnemy = 0; data.nRenderTree = 0; data.nRenderGrass = 0; data.nEffect = 0; data.nEffectPlayer = 0; data.nEffectParty = 0; data.nEffectEnemy = 0; data.nFaceAni = 0; data.nLightMap = 0; break; case PRESET_MID: //중사양 옵션 data.nResolution_Width = 1024; //해상도 가로 data.nResolution_Height = 768; //해상도 세로 data.nRefreshRate = 1; data.nBackGrondDis = 2;//0~4 data.nTerrainDis = 2;//0~4 data.nPropDis = 2;//0~3 data.nSpeedDis = 3;//0~3 data.nGrassDis = 2;//0~3 data.nAvatarDis = 1;//0~3 data.nShadowDis = 0; data.nLowShadow = 0; data.nSpeedQual = 2;//0~3 data.nMipBias = 1;//0~2 data.nSelfShadowQual = 0;//0~3 data.nGlowQual = 0;//0~1 data.nWaterQual = 1; data.nResourceQual = 1; data.nTownLimit = 0; data.nEnhance = 1; data.nShadow = 1; data.nStateEffect = 1; data.nStateEffectPlayer = 1; data.nStateEffectParty = 1; data.nStateEffectEnemy = 0; data.nRenderTree = 1; data.nRenderGrass = 1; data.nEffect = 1; data.nEffectPlayer = 1; data.nEffectParty = 0; data.nEffectEnemy = 0; data.nFaceAni = 1; data.nLightMap = 0; break; case PRESET_HIGH: //고사양 옵션 data.nResolution_Width = 1024; //해상도 가로 data.nResolution_Height = 768; //해상도 세로 data.nRefreshRate = 1; data.nBackGrondDis = 3;//0~4 data.nTerrainDis = 3;//0~4 data.nPropDis = 3;//0~3 data.nSpeedDis = 3;//0~3 data.nGrassDis = 3;//0~3 data.nAvatarDis = 2;//0~3 data.nShadowDis = 1; data.nLowShadow = 0; data.nSpeedQual = 3;//0~3 data.nMipBias = 2;//0~2 data.nSelfShadowQual = 1;//0~3 data.nGlowQual = 0;//0~1 data.nWaterQual = 1; data.nResourceQual = 1; data.nTownLimit = 0; data.nEnhance = 1; data.nShadow = 1; data.nStateEffect = 1; data.nStateEffectPlayer = 1; data.nStateEffectParty = 1; data.nStateEffectEnemy = 0; data.nRenderTree = 1; data.nRenderGrass = 1; data.nEffect = 1; data.nEffectPlayer = 1; data.nEffectParty = 1; data.nEffectEnemy = 0; data.nFaceAni = 2; data.nLightMap = 0; break; case PRESET_HIGHEST: //최고사양 옵션 data.nResolution_Width = 1024; //해상도 가로 data.nResolution_Height = 768; //해상도 세로 data.nRefreshRate = 1; data.nBackGrondDis = 4;//0~4 data.nTerrainDis = 4;//0~4 data.nPropDis = 3;//0~3 data.nSpeedDis = 3;//0~3 data.nGrassDis = 3;//0~3 data.nAvatarDis = 3;//0~3 data.nShadowDis = 1; data.nLowShadow = 0; data.nSpeedQual = 3;//0~3 data.nMipBias = 2;//0~2 data.nSelfShadowQual = 3;//0~3 data.nGlowQual = 1;//0~1 data.nWaterQual = 1; data.nResourceQual = 1; data.nTownLimit = 0; data.nEnhance = 1; data.nShadow = 1; data.nStateEffect = 1; data.nStateEffectPlayer = 1; data.nStateEffectParty = 1; data.nStateEffectEnemy = 1; data.nRenderTree = 1; data.nRenderGrass = 1; data.nEffect = 1; data.nEffectPlayer = 1; data.nEffectParty = 1; data.nEffectEnemy = 1; data.nFaceAni = 2; data.nLightMap = 1; break; default: return false; } //저사양 클라이언트 버전이여도 지형 표시 거리와 캐릭터 표시 거리는 수정 가능하다 if( ENV().IsExist( "minimum_system" ) ) { data.nTerrainDis = m_curData.nTerrainDis; data.nAvatarDis = m_curData.nAvatarDis; } return true; } int SGameOption::GetResolution_Index( int nWidth, int nHeight ) { for( UINT i(0); m_distMode.size()>i; i++ ) { if( m_distMode[i].width == nWidth && m_distMode[i].height == nHeight ) { return i; } } return 0; } void SGameOption::AddDispMode( UINT width, UINT height, UINT refreshrate ) { for( UINT i(0); m_distMode.size()>i; i++ ) { if( m_distMode[i].width == width && m_distMode[i].height == height ) { m_distMode[i].refreshrate_list.push_back( refreshrate ); return; } } DISP_MODE dp_mode; dp_mode.width = width; dp_mode.height = height; dp_mode.refreshrate_list.push_back( refreshrate ); m_distMode.push_back( dp_mode ); } void SGameOption::SetOptionData( int nMode ) { switch(nMode) { case SGAME_OPT_DATA::MODE_ENVIRONMENT: { m_OptionManager.SetValueInt( "GRAPHIC_RESOLUTION_WIDTH" , m_curData.nResolution_Width , true ); //해상도 가로 m_OptionManager.SetValueInt( "GRAPHIC_RESOLUTION_HEIGHT", m_curData.nResolution_Height, true ); //해상도 세로 m_OptionManager.SetValueInt( "GRAPHIC_REFRESHRATE" , m_curData.nRefreshRate , true ); //화면 재생 빈도 m_OptionManager.SetValueInt( "GRAPHIC_WINMODE" , m_curData.nWinMode , true ); //Full, Window m_OptionManager.SetValueInt( "GRAPHIC_FULLWINMODE" , m_curData.nFullWinMode , true ); //전체창 m_OptionManager.SetValueInt( "GRAPHIC_BACKGROUNDDIS" , m_curData.nBackGrondDis , true ); //배경 표시거리 m_OptionManager.SetValueInt( "GRAPHIC_TERRAINDIS" , m_curData.nTerrainDis , true ); //지면 표시거리 m_OptionManager.SetValueInt( "GRAPHIC_PROPDIS" , m_curData.nPropDis , true ); //구조물 ??챨타? m_OptionManager.SetValueInt( "GRAPHIC_SPEEDDIS" , m_curData.nSpeedDis , true ); //나무 표시거리 m_OptionManager.SetValueInt( "GRAPHIC_GRASSDIS" , m_curData.nGrassDis , true ); //풀 표시거리 m_OptionManager.SetValueInt( "GRAPHIC_AVATARDIS" , m_curData.nAvatarDis , true ); //캐릭터 표시거리 m_OptionManager.SetValueInt( "GRAPHIC_SHADOWDIS" , m_curData.nShadowDis , true ); //그림자 표시거리 m_OptionManager.SetValueInt( "GRAPHIC_LOWSHADOW" , m_curData.nLowShadow , true ); //저사양 그림자 m_OptionManager.SetValueInt( "GRAPHIC_SPEEDQUAL" , m_curData.nSpeedQual , true ); //나무 품질 m_OptionManager.SetValueInt( "GRAPHIC_MIPBIAS" , m_curData.nMipBias , true ); //텍스쳐 밉바이어스 m_OptionManager.SetValueInt( "GRAPHIC_SELFSHADOWQUAL" , m_curData.nSelfShadowQual , true ); //셀프 그림자 품질 m_OptionManager.SetValueInt( "GRAPHIC_GLOWQUAL" , m_curData.nGlowQual , true ); //Glow 품질 m_OptionManager.SetValueInt( "GRAPHIC_WATERQUAL" , m_curData.nWaterQual , true ); //물 ??사 효과 m_OptionManager.SetValueInt( "GRAPHIC_RESOURCEQUAL" , m_curData.nResourceQual , true ); //리소스 품질 m_OptionManager.SetValueInt( "GRAPHIC_BRIGHT" , m_curData.nBright , true ); //화면 밝기 m_OptionManager.SetValueInt( "GRAPHIC_WINBRIGHT" , m_curData.nWinBright , true ); //바탕화면 밝기 적용 m_OptionManager.SetValueInt( "GRAPHIC_PRESETOPTION" , m_curData.nPresetOption , true ); //프리셋 모드 m_OptionManager.SetValueInt( "GRAPHIC_TOWNLIMIT" , m_curData.nTownLimit , true ); //마을내 ?玲?구조물 표시 m_OptionManager.SetValueInt( "GRAPHIC_TREEALPHA" , m_curData.nTreeAlpha , true ); //나무 투명화 m_OptionManager.SetValueInt( "GRAPHIC_ENHANCE" , m_curData.nEnhance , true ); //강화 이펙트 표시 m_OptionManager.SetValueInt( "GRAPHIC_STATE_EFFECT" , m_curData.nStateEffect , true ); //지속효과 이펙트 표시 m_OptionManager.SetValueInt( "GRAPHIC_STATE_EFFECT_CREATURE" , m_curData.nStateEffectPlayer , true ); //자신과 크리처 지속효과 m_OptionManager.SetValueInt( "GRAPHIC_STATE_EFFECT_PARTY" , m_curData.nStateEffectParty , true ); //파티원 지속효과 m_OptionManager.SetValueInt( "GRAPHIC_STATE_EFFECT_ENEMY" , m_curData.nStateEffectEnemy , true ); //적 지속효과 m_OptionManager.SetValueInt( "GRAPHIC_SHADOW" , m_curData.nShadow , true ); //그림자 표시 m_OptionManager.SetValueInt( "GRAPHIC_RENDERTREE" , m_curData.nRenderTree , true ); //나무 표시 m_OptionManager.SetValueInt( "GRAPHIC_RENDERGRASS" , m_curData.nRenderGrass , true ); //풀 표시 m_OptionManager.SetValueInt( "GRAPHIC_LIGHT" , m_curData.nLightMap , true ); //라이??멥 m_OptionManager.SetValueInt( "GRAPHIC_EFFECT" , m_curData.nEffect , true ); //이펙트 표시 m_OptionManager.SetValueInt( "GRAPHIC_EFFECT_CREATURE" , m_curData.nEffectPlayer , true ); //자신과 크리처 m_OptionManager.SetValueInt( "GRAPHIC_EFFECT_PARTY" , m_curData.nEffectParty , true ); //파티원 m_OptionManager.SetValueInt( "GRAPHIC_EFFECT_ENEMY" , m_curData.nEffectEnemy , true ); //적 m_OptionManager.SetValueInt( "GRAPHIC_FACE_ANI" , m_curData.nFaceAni , true ); //눈 깜빡 // 사운드 m_OptionManager.SetValueInt( "SOUND_ALL_MUTE" , m_curData.nAllMute , true ); // m_OptionManager.SetValueInt( "SOUND_REPEAT" , m_curData.nRepeat , true ); // 2011.11.29 - servantes : 옵션 nui에 해당 효과 없음 / 주석처리 m_OptionManager.SetValueInt( "SOUND_BGM_MUTE" , m_curData.nBGM_Mute , true ); m_OptionManager.SetValueInt( "SOUND_SFX_MUTE" , m_curData.nSFX_Mute , true ); m_OptionManager.SetValueInt( "SOUND_ENVS_MUTE" , m_curData.nENVS_Mute , true ); m_OptionManager.SetValueInt( "SOUND_BGM_VOLUME" , m_curData.nBGM_Volume , true ); m_OptionManager.SetValueInt( "SOUND_SFX_VOLUME" , m_curData.nSFX_Volume , true ); m_OptionManager.SetValueInt( "SOUND_ENVS_VOLUME" , m_curData.nENVS_Volume , true ); m_OptionManager.SetValueInt( "SOUND_MASTER_VOLUME" , m_curData.nMASTER_Volume , true ); //LOBBY m_OptionManager.SetValueInt( "LOBBY_THEME" , m_curData.nLobby_Theme , true ); m_OptionManager.SetValueInt( "GRAPHIC_RENDER_OTHERPLAYER", m_curData.nRenderOtherPlayer, true ); break; } case SGAME_OPT_DATA::MODE_PLAY: { // 게임 플레이 관련 옵션 m_OptionManager.SetValueInt( "PLAY_TAB" , m_curData.nTABKey , true ); //TAB키 설정 m_OptionManager.SetValueInt( "PLAY_ENTERCHAT" , m_curData.nEnterChat , true ); //앤터체팅사용 m_OptionManager.SetValueInt( "PLAY_CHIPATTACK" , m_curData.nChipAttack , true ); //포스칩 후 자동 공격 m_OptionManager.SetValueInt( "PLAY_TRADE" , m_curData.nTrade , true ); //?킹?및 초대 거절 m_OptionManager.SetValueInt( "PLAY_PVP" , m_curData.nPVP , true ); //대련신청_거부 m_OptionManager.SetValueInt( "PLAY_AUTOTARGET" , m_curData.nAutoTarget, true ); //공격_시_자동타겟팅 m_OptionManager.SetValueInt( "PLAY_WHEEL" , m_curData.nWheel , true ); //휠방향_반전 m_OptionManager.SetValueInt( "PLAY_CHATHIDE" , m_curData.nChatHide , true ); //체팅창 자동숨김 m_OptionManager.SetValueInt( "PLAY_MOBFACE" , m_curData.nMobFace , true ); //몬스터 페이스컷 m_OptionManager.SetValueInt( "PLAY_RAK" , m_curData.nSimpleRak , true ); //라크표시 m_OptionManager.SetValueInt( "PLAY_CHATBALLOON" , m_curData.nChatBalloon , true ); //말풍선 표시 m_OptionManager.SetValueInt( "PLAY_TIP" , m_curData.nTip , true ); //게임팁 표시 // 2010.05.20 - prodongi //m_OptionManager.SetValueInt( "PLAY_HELM" , m_curData.nHelm , true ); //투구 보이기 m_OptionManager.SetValueInt( "PLAY_MANTLE" , m_curData.nMantle , true ); //망토 보이기 m_OptionManager.SetValueInt( "PLAY_HPGAGE" , m_curData.nHPGage , true ); //체력게이지 표시 m_OptionManager.SetValueInt( "PLAY_PLAYERGAGE" , m_curData.nPlayerGage , true ); //자신과 파티원 m_OptionManager.SetValueInt( "PLAY_MOBGAGE" , m_curData.nMobGage , true ); //몬스터 m_OptionManager.SetValueInt( "PLAY_TARGETGAGE" , m_curData.nTargetGage , true ); //타겟 m_OptionManager.SetValueInt( "PLAY_NAME" , m_curData.nName , true ); //이름 표시 m_OptionManager.SetValueInt( "PLAY_PLAYERNAME" , m_curData.nPlayerName , true ); //플레이어 m_OptionManager.SetValueInt( "PLAY_CREATURENAME" , m_curData.nCreatureName , true ); //크리처 m_OptionManager.SetValueInt( "PLAY_MOBNAME" , m_curData.nMobName , true ); //몬스터 m_OptionManager.SetValueInt( "PLAY_NPCNAME" , m_curData.nNPCName , true ); //NPC m_OptionManager.SetValueInt( "PLAY_DAMAGE" , m_curData.ndamage , true ); //데미지 표시 m_OptionManager.SetValueInt( "PLAY_PLAYERDM" , m_curData.nPlayerDM , true ); //자신 m_OptionManager.SetValueInt( "PLAY_CREATUREDM" , m_curData.nCreatureDM , true ); //크리처 m_OptionManager.SetValueInt( "PLAY_PARTYDM" , m_curData.nPartyDM , true ); //파티원 m_OptionManager.SetValueInt( "PLAY_WINLOCK" , m_curData.nWinLock , true ); //현??윈도우장금 m_OptionManager.SetValueInt( "PLAY_WINALPHA" , m_curData.nWinAlpha , true ); //윈도우 투명도 설정 m_OptionManager.SetValueInt( "PLAY_BOOTHTYPE" , m_curData.nSelfBoothType , true ); //간단노점 m_OptionManager.SetValueInt( "PLAY_CRITICAL_CAMERA" , m_curData.nCriticalCamera , true ); //크리티칼 카메라 진동 // m_OptionManager.SetValueInt( "PLAY_AVATAR_DECO" , m_curData.nAvatarDeco , true ); //꾸미기 아이템 적용 // 2010.10.11. 게임플레이옵션에서 "꾸미기보이기" 제거. m_OptionManager.SetValueInt( "PLAY_WEATHER_QUALITY" , m_curData.nWeatherQuality , true ); //날씨 효과 품질 m_OptionManager.SetValueInt( "PLAY_CAMERA_COLLISION" , m_curData.nCameraCollision, true ); //카메라 충돌 m_OptionManager.SetValueInt( "PLAY_TITLE_SHOW" , m_curData.nTitleShow, true ); //호칭 m_OptionManager.SetValueInt( "PLAY_SELECT_OUTLINE_SHOW" , m_curData.isShowSelectOutLine, true ); break; } } } void SGameOption::Apply( int nMode ) { switch(nMode) { case SGAME_OPT_DATA::MODE_ENVIRONMENT: { SetOptionData( SGAME_OPT_DATA::MODE_ENVIRONMENT ); } break; case SGAME_OPT_DATA::MODE_PLAY: { SetOptionData( SGAME_OPT_DATA::MODE_PLAY ); m_OptionManager.SetValueInt( "MINIMAP_ALPHA" , m_nMinimapAlpha ); m_OptionManager.SetValueInt( "MINIMAP_OPEN" , m_nMinimapOpen ); } break; case SGAME_OPT_DATA::MODE_UI: { m_OptionManager.SetValueInt( "INTERFACE_FACECUT", m_nFaceCut ); m_OptionManager.SetValueInt( "INTERFACE_MINIMAP", m_nMinimap ); m_OptionManager.SetValueInt( "INTERFACE_ZOOM" , m_nZoom ); } break; } } void SGameOption::ChatOptionApply( int nTabType, bool * pCehck ) { if( nTabType < 0 || nTabType > 4 ) return; for( int i = 0; i < SGAME_OPT_DATA::c_nMaxChatOption; i++ ) { m_bChannelCheck[nTabType][i] = pCehck[i]; } Save(); // 2012. 1. 26 - marine 채팅옵션의 확인을 누를때 저장하도록 수정(여기서 하지 않으면 로그아웃, 클라이언트 이상종료, 등등의 이유로 채팅옵션이 저장되지 않는 경우 발생 } void SGameOption::ChatOptionApply( int nTabType, std::string strValue ) { for( int i = 0; i < SGAME_OPT_DATA::c_nMaxChatOption; i++ ) { std::string str = strValue.substr( i, 1 ); switch(nTabType) { case 0: m_bChannelCheck[nTabType][i] = !!(::atoi( str.c_str() )); break; case 1: m_bChannelCheck[nTabType][i] = !!(::atoi( str.c_str() )); break; case 2: m_bChannelCheck[nTabType][i] = !!(::atoi( str.c_str() )); break; case 3: m_bChannelCheck[nTabType][i] = !!(::atoi( str.c_str() )); break; case 4: m_bChannelCheck[nTabType][i] = !!(::atoi( str.c_str() )); break; } } Save(); // 2012. 1. 26 - marine 채팅옵션의 확인을 누를때 저장하도록 수정(여기서 하지 않으면 로그아웃, 클라이언트 이상종료, 등등의 이유로 채팅옵션이 저장되지 않는 경우 발생 } void SGameOption::Save() { // 저장 SetOptionData( SGAME_OPT_DATA::MODE_ENVIRONMENT ); SetOptionData( SGAME_OPT_DATA::MODE_PLAY ); m_OptionManager.SetValueInt( "MINIMAP_ALPHA" , m_nMinimapAlpha ); m_OptionManager.SetValueInt( "MINIMAP_OPEN" , m_nMinimapOpen ); // UI m_OptionManager.SetValueInt( "INTERFACE_FACECUT", m_nFaceCut ); m_OptionManager.SetValueInt( "INTERFACE_MINIMAP", m_nMinimap ); m_OptionManager.SetValueInt( "INTERFACE_ZOOM" , m_nZoom ); // 인터페이스 //m_OptionManager.SetValueInt( "QUICK_VER_X" , m_nQuickVerX ); //m_OptionManager.SetValueInt( "QUICK_VER_Y" , m_nQuickVerY ); m_OptionManager.SetValueInt( "QUICK_HOZ_X" , m_nQuickHozX ); m_OptionManager.SetValueInt( "QUICK_HOZ_Y" , m_nQuickHozY ); m_OptionManager.SetValueInt( "QUICK_VER_OPEN" , m_nVerticalQuick ); //m_OptionManager.SetValueInt( "STATE_VER_X" , m_nStateVerX ); //m_OptionManager.SetValueInt( "STATE_VER_Y" , m_nStateVerY ); m_OptionManager.SetValueInt( "STATE_HOZ_X" , m_nStateHozX ); m_OptionManager.SetValueInt( "STATE_HOZ_Y" , m_nStateHozY ); m_OptionManager.SetValueInt( "STATE_VER_OPEN" , m_nVerticalState ); m_OptionManager.SetValueInt( "MESSANGER_X" , m_nMessangerX ); m_OptionManager.SetValueInt( "MESSANGER_Y" , m_nMessangerY ); m_OptionManager.SetValueInt( "MESSANGER_OPEN" , m_nMessangerOpen ); m_OptionManager.SetValueInt( "PARTY_X" , m_nPartyX ); m_OptionManager.SetValueInt( "PARTY_Y" , m_nPartyY ); m_OptionManager.SetValueInt( "CREAUTRE_OPEN" , m_nCreatureOpen ); m_OptionManager.SetValueInt( "SYSMENU_X", m_nSysMenuX ); m_OptionManager.SetValueInt( "SYSMENU_Y", m_nSysMenuY ); m_OptionManager.SetValueInt( "INVENTORY_X", m_nInventoryX ); m_OptionManager.SetValueInt( "INVENTORY_Y", m_nInventoryY ); m_OptionManager.SetValueInt( "CHATTING_LINE" , m_nChattingLine ); m_OptionManager.SetValueInt( "CHATTING_HEIGHT" , m_nChattingHeight ); m_OptionManager.SetValueInt( "CREATURE_X", m_nCreatureX ); m_OptionManager.SetValueInt( "CREATURE_Y", m_nCreatureY ); m_OptionManager.SetValueInt( "CREATURE_INFO_X", m_nCreatureInfoX ); m_OptionManager.SetValueInt( "CREATURE_INFO_Y", m_nCreatureInfoY ); m_OptionManager.SetValueInt( "QUEST_X", m_nQuestX ); m_OptionManager.SetValueInt( "QUEST_Y", m_nQuestY ); m_OptionManager.SetValueInt( "MOTION_X", m_nMotionX ); m_OptionManager.SetValueInt( "MOTION_Y", m_nMotionY ); m_OptionManager.SetValueInt( "OPTION_X", m_nOptionX ); m_OptionManager.SetValueInt( "OPTION_Y", m_nOptionY ); m_OptionManager.SetValueInt( "CHAR_X", m_nCharX ); m_OptionManager.SetValueInt( "CHAR_Y", m_nCharY ); m_OptionManager.SetValueInt( "SKILL_X", m_nSkillX ); m_OptionManager.SetValueInt( "SKILL_Y", m_nSkillY ); m_OptionManager.SetValueInt( "SYSTEM_X", m_nSystemX ); m_OptionManager.SetValueInt( "SYSTEM_Y", m_nSystemY ); m_OptionManager.SetValueInt( "MAP_X", m_nMapX ); m_OptionManager.SetValueInt( "MAP_Y", m_nMapY ); m_OptionManager.SetValueInt( "ITEM_COMBINE_X", m_nItemCombineX ); m_OptionManager.SetValueInt( "ITEM_COMBINE_Y", m_nItemCombineY ); m_OptionManager.SetValueInt( "SHOP_X", m_nShopX ); m_OptionManager.SetValueInt( "SHOP_Y", m_nShopY ); m_OptionManager.SetValueInt( "STORE_X", m_nStoreX ); m_OptionManager.SetValueInt( "STORE_Y", m_nStoreY ); m_OptionManager.SetValueInt( "STORAGE_X", m_nStorageX ); m_OptionManager.SetValueInt( "STORAGE_Y", m_nStorageY ); // 장비창 위치저장. bintitle. 2010.10.07. m_OptionManager.SetValueInt( "EQUIPMENT_X", m_nPosEquipment.x ); m_OptionManager.SetValueInt( "EQUIPMENT_Y", m_nPosEquipment.y ); m_OptionManager.SetValueInt( "OPEN_EQUIP_WND_FLAG", m_bOpenEquipWnd ); //servantes 2010.11.02 /// 2011.02.16 - prodongi m_OptionManager.SetValueInt("USE_RECHARGE_MSGBOX", m_useRechargeMsgBox); // 채팅 std::string strValue; strValue.clear(); for( int i = 0; i < SGAME_OPT_DATA::c_nMaxChatOption; i++ ) strValue += CStringUtil::StringFormat( "%d", m_bChannelCheck[0][i] ); if( strValue.size() == SGAME_OPT_DATA::c_nMaxChatOption ) m_OptionManager.SetValueString( "CHAT_CHANNEL_00", strValue ); strValue.clear(); for( int i = 0; i < SGAME_OPT_DATA::c_nMaxChatOption; i++ ) strValue += CStringUtil::StringFormat( "%d", m_bChannelCheck[1][i] ); if( strValue.size() == SGAME_OPT_DATA::c_nMaxChatOption ) m_OptionManager.SetValueString( "CHAT_CHANNEL_01", strValue ); strValue.clear(); for( int i = 0; i < SGAME_OPT_DATA::c_nMaxChatOption; i++ ) strValue += CStringUtil::StringFormat( "%d", m_bChannelCheck[2][i] ); if( strValue.size() == SGAME_OPT_DATA::c_nMaxChatOption ) m_OptionManager.SetValueString( "CHAT_CHANNEL_02", strValue ); strValue.clear(); for( int i = 0; i < SGAME_OPT_DATA::c_nMaxChatOption; i++ ) strValue += CStringUtil::StringFormat( "%d", m_bChannelCheck[3][i] ); if( strValue.size() == SGAME_OPT_DATA::c_nMaxChatOption ) m_OptionManager.SetValueString( "CHAT_CHANNEL_03", strValue ); strValue.clear(); for( int i = 0; i < SGAME_OPT_DATA::c_nMaxChatOption; i++ ) strValue += CStringUtil::StringFormat( "%d", m_bChannelCheck[4][i] ); if( strValue.size() == SGAME_OPT_DATA::c_nMaxChatOption ) m_OptionManager.SetValueString( "CHAT_CHANNEL_04", strValue ); // 채널명 for( int i = 0; i < SGAME_OPT_DATA::c_nMaxChannel; i++ ) m_OptionManager.SetValueString( CStringUtil::StringFormat( "CHAT_TAB_NAME_%d", i ).c_str(), m_strTabName[i].c_str() ); // 채널명 for( int i = 0; i < SGAME_OPT_DATA::c_nMaxChannel; i++ ) m_OptionManager.SetValueString( CStringUtil::StringFormat( "CHAT_TAB_MARK_%d", i ).c_str(), m_strTabMark[i].c_str() ); m_OptionManager.SetValueInt( "CREATURESKILL_X", m_nCreatureSkillX ); m_OptionManager.SetValueInt( "CREATURESKILL_Y", m_nCreatureSkillY ); } void SGameOption::Destroy() { Save(); } void SGameOption::OptionDataBind() { ENV().Bind( "opt.ev.GRAPHIC_RESOLUTION_WIDTH" , &m_curData.nResolution_Width ); ENV().Bind( "opt.ev.GRAPHIC_RESOLUTION_HEIGHT" , &m_curData.nResolution_Height ); ENV().Bind( "opt.ev.GRAPHIC_REFRESHRATE" , &m_curData.nRefreshRate ); ENV().Bind( "opt.ev.GRAPHIC_WINMODE" , &m_curData.nWinMode ); ENV().Bind( "opt.ev.GRAPHIC_FULLWINMODE" , &m_curData.nFullWinMode ); ENV().Bind( "opt.ev.GRAPHIC_BACKGRONDDIS" , &m_curData.nBackGrondDis ); ENV().Bind( "opt.ev.GRAPHIC_TERRAINDIS" , &m_curData.nTerrainDis ); ENV().Bind( "opt.ev.GRAPHIC_PROPDIS" , &m_curData.nPropDis ); ENV().Bind( "opt.ev.GRAPHIC_SPEEDDIS" , &m_curData.nSpeedDis ); ENV().Bind( "opt.ev.GRAPHIC_GRASSDIS" , &m_curData.nGrassDis ); ENV().Bind( "opt.ev.GRAPHIC_AVATARDIS" , &m_curData.nAvatarDis ); ENV().Bind( "opt.ev.GRAPHIC_SHADOWDIS" , &m_curData.nShadowDis ); ENV().Bind( "opt.ev.GRAPHIC_LOWSHADOW" , &m_curData.nLowShadow ); ENV().Bind( "opt.ev.GRAPHIC_SPEEDQUAL" , &m_curData.nSpeedQual ); ENV().Bind( "opt.ev.GRAPHIC_MIPBIAS" , &m_curData.nMipBias ); ENV().Bind( "opt.ev.GRAPHIC_SELFSHADOWQUAL" , &m_curData.nSelfShadowQual ); ENV().Bind( "opt.ev.GRAPHIC_GLOWQUAL" , &m_curData.nGlowQual ); ENV().Bind( "opt.ev.GRAPHIC_WATERQUAL" , &m_curData.nWaterQual ); ENV().Bind( "opt.ev.GRAPHIC_RESOURCEQUAL" , &m_curData.nResourceQual ); ENV().Bind( "opt.ev.GRAPHIC_BRIGHT" , &m_curData.nBright ); ENV().Bind( "opt.ev.GRAPHIC_WINBRIGHT" , &m_curData.nWinBright ); ENV().Bind( "opt.ev.GRAPHIC_PRESETOPTION" , &m_curData.nPresetOption ); ENV().Bind( "opt.ev.GRAPHIC_TOWNLIMIT" , &m_curData.nTownLimit ); ENV().Bind( "opt.ev.GRAPHIC_TREEALPHA" , &m_curData.nTreeAlpha ); ENV().Bind( "opt.ev.GRAPHIC_ENHANCE" , &m_curData.nEnhance ); ENV().Bind( "opt.ev.GRAPHIC_STATE_EFFECT" , &m_curData.nStateEffect ); ENV().Bind( "opt.ev.GRAPHIC_STATE_EFFECT_PLAYER" , &m_curData.nStateEffectPlayer ); ENV().Bind( "opt.ev.GRAPHIC_STATE_EFFECT_PARTY" , &m_curData.nStateEffectParty ); ENV().Bind( "opt.ev.GRAPHIC_STATE_EFFECT_ENEMY" , &m_curData.nStateEffectEnemy ); ENV().Bind( "opt.ev.GRAPHIC_SHADOW" , &m_curData.nShadow ); ENV().Bind( "opt.ev.GRAPHIC_RENDERTREE" , &m_curData.nRenderTree ); ENV().Bind( "opt.ev.GRAPHIC_RENDERGRASS" , &m_curData.nRenderGrass ); ENV().Bind( "opt.ev.GRAPHIC_LIGHT" , &m_curData.nLightMap ); ENV().Bind( "opt.ev.GRAPHIC_EFFECT" , &m_curData.nEffect ); ENV().Bind( "opt.ev.GRAPHIC_EFFECT_PLAYER" , &m_curData.nEffectPlayer ); ENV().Bind( "opt.ev.GRAPHIC_EFFECT_PARTY" , &m_curData.nEffectParty ); ENV().Bind( "opt.ev.GRAPHIC_EFFECT_ENEMY" , &m_curData.nEffectEnemy ); ENV().Bind( "opt.ev.SOUND_ALL_MUTE" , &m_curData.nAllMute ); // ENV().Bind( "opt.ev.SOUND_REPEAT" , &m_curData.nRepeat ); // 2011.11.29 - servantes : 옵션 nui에 해당 효과 없음 / 주석처리 ENV().Bind( "opt.ev.SOUND_BGM_MUTE" , &m_curData.nBGM_Mute ); ENV().Bind( "opt.ev.SOUND_ENVS_MUTE" , &m_curData.nENVS_Mute ); ENV().Bind( "opt.ev.SOUND_BGM_VOLUME" , &m_curData.nBGM_Volume ); ENV().Bind( "opt.ev.SOUND_SFX_MUTE" , &m_curData.nSFX_Mute ); ENV().Bind( "opt.ev.SOUND_ENVS_VOLUME" , &m_curData.nENVS_Volume ); ENV().Bind( "opt.ev.SOUND_MASTER_VOLUME" , &m_curData.nMASTER_Volume ); ENV().Bind( "opt.ev.GRAPHIC_RENDER_OTHERPLAYER" , &m_curData.nRenderOtherPlayer ); ENV().Bind( "opt.pl.PLAY_TAB" , &m_curData.nTABKey ); ENV().Bind( "opt.pl.PLAY_ENTERCHAT" , &m_curData.nEnterChat ); ENV().Bind( "opt.pl.PLAY_CHIPATTACK" , &m_curData.nChipAttack ); ENV().Bind( "opt.pl.PLAY_TRADE" , &m_curData.nTrade ); ENV().Bind( "opt.pl.PLAY_PVP" , &m_curData.nPVP ); ENV().Bind( "opt.pl.PLAY_AUTO_TARGET" , &m_curData.nAutoTarget ); // 공격_시_자동타겟팅 ENV().Bind( "opt.pl.PLAY_WHEEL" , &m_curData.nWheel ); ENV().Bind( "opt.pl.PLAY_CHATHIDE" , &m_curData.nChatHide ); ENV().Bind( "opt.pl.PLAY_MOBFACE" , &m_curData.nMobFace ); ENV().Bind( "opt.pl.PLAY_RAK" , &m_curData.nSimpleRak ); ENV().Bind( "opt.pl.PLAY_CHATBALLOON" , &m_curData.nChatBalloon ); ENV().Bind( "opt.pl.PLAY_TIP" , &m_curData.nTip ); // 2010.05.20 - prodongi //ENV().Bind( "opt.pl.PLAY_HELM" , &m_curData.nHelm ); ENV().Bind( "opt.pl.PLAY_MANTLE" , &m_curData.nMantle ); ENV().Bind( "opt.pl.PLAY_HPGAGE" , &m_curData.nHPGage ); ENV().Bind( "opt.pl.PLAY_PLAYERGAGE" , &m_curData.nPlayerGage ); ENV().Bind( "opt.pl.PLAY_MOBGAGE" , &m_curData.nMobGage ); ENV().Bind( "opt.pl.PLAY_TARGETGAGE" , &m_curData.nTargetGage ); ENV().Bind( "opt.pl.PLAY_NAME" , &m_curData.nName ); ENV().Bind( "opt.pl.PLAY_PLAYERNAME" , &m_curData.nPlayerName ); ENV().Bind( "opt.pl.PLAY_CREATURENAME" , &m_curData.nCreatureName ); ENV().Bind( "opt.pl.PLAY_MOBNAME" , &m_curData.nMobName ); ENV().Bind( "opt.pl.PLAY_NPCNAME" , &m_curData.nNPCName ); ENV().Bind( "opt.pl.PLAY_DAMAGE" , &m_curData.ndamage ); ENV().Bind( "opt.pl.PLAY_PLAYERDM" , &m_curData.nPlayerDM ); ENV().Bind( "opt.pl.PLAY_CREATUREDM" , &m_curData.nCreatureDM ); ENV().Bind( "opt.pl.PLAY_PARTYDM" , &m_curData.nPartyDM ); ENV().Bind( "opt.pl.PLAY_WINLOCK" , &m_curData.nWinLock ); ENV().Bind( "opt.pl.PLAY_WINALPHA" , &m_curData.nWinAlpha ); ENV().Bind( "opt.pl.PLAY_BOOTHTYPE" , &m_curData.nSelfBoothType ); ENV().Bind( "opt.pl.PLAY_CRITICAL_CAMERA" , &m_curData.nCriticalCamera); // ENV().Bind( "opt.pl.PLAY_AVATAR_DECO" , &m_curData.nAvatarDeco ); // 2010.10.11. 게임플레이옵션에서 "꾸미기보이기" 제거. ENV().Bind( "opt.pl.PLAY_WEATHER_QUALITY" , &m_curData.nWeatherQuality); ENV().Bind( "opt.pl.PLAY_CAMERA_COLLISION" , &m_curData.nCameraCollision); ENV().Bind( "opt.pl.PLAY_TITLE_SHOW" , &m_curData.nTitleShow); // 2012. 5. 24 - marine ENV().Bind( "opt.pl.PLAY_SELECT_OUTLINE_SHOW" , &m_curData.isShowSelectOutLine); } void SGameOption::SetCrrOptionData() { m_curData.nResolution_Width = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_RESOLUTION_WIDTH" , true ), 1024); //해상도 가로 m_curData.nResolution_Height = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_RESOLUTION_HEIGHT", true ), 768); //해상도 세로 //if( m_curData.nResolution_Width <= 0 ) m_curData.nResolution_Width = 1024; //if( m_curData.nResolution_Height <= 0 ) m_curData.nResolution_Height = 768; m_curData.nRefreshRate = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_REFRESHRATE" , true ), m_curData.nRefreshRate); m_curData.nWinMode = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_WINMODE" , true ), m_curData.nWinMode); m_curData.nFullWinMode = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_FULLWINMODE" , true ), m_curData.nFullWinMode); m_curData.nBackGrondDis = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_BACKGROUNDDIS" , true ), m_curData.nBackGrondDis); m_curData.nTerrainDis = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_TERRAINDIS" , true ), m_curData.nTerrainDis); m_curData.nPropDis = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_PROPDIS" , true ), m_curData.nPropDis); m_curData.nSpeedDis = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_SPEEDDIS" , true ), m_curData.nSpeedDis); m_curData.nGrassDis = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_GRASSDIS" , true ), m_curData.nGrassDis); m_curData.nAvatarDis = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_AVATARDIS" , true ), m_curData.nAvatarDis); m_curData.nShadowDis = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_SHADOWDIS" , true ), m_curData.nShadowDis); m_curData.nLowShadow = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_LOWSHADOW" , true ), 0); //if( m_curData.nLowShadow < 0 ) m_curData.nLowShadow = 0; m_curData.nSpeedQual = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_SPEEDQUAL" , true ), m_curData.nSpeedQual); m_curData.nMipBias = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_MIPBIAS" , true ), m_curData.nMipBias); m_curData.nSelfShadowQual = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_SELFSHADOWQUAL", true ), m_curData.nSelfShadowQual); m_curData.nGlowQual = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_GLOWQUAL" , true ), m_curData.nGlowQual); m_curData.nWaterQual = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_WATERQUAL" , true ), m_curData.nWaterQual); m_curData.nResourceQual = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_RESOURCEQUAL" , true ), m_curData.nResourceQual); m_curData.nBright = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_BRIGHT" , true ), m_curData.nBright); m_curData.nWinBright = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_WINBRIGHT" , true ), m_curData.nWinBright); m_curData.nPresetOption = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_PRESETOPTION" , true ), 4); //if( m_curData.nPresetOption < 0 ) m_curData.nPresetOption = 4; m_curData.nTownLimit = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_TOWNLIMIT", true ), 0); //if( m_curData.nTownLimit < 0 ) m_curData.nTownLimit = 0; m_curData.nTreeAlpha = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_TREEALPHA" , true ), m_curData.nTreeAlpha ); m_curData.nEnhance = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_ENHANCE" , true ), m_curData.nEnhance ); m_curData.nRenderTree = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_RENDERTREE" , true ), m_curData.nRenderTree ); m_curData.nRenderGrass = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_RENDERGRASS" , true ), m_curData.nRenderGrass ); m_curData.nLightMap = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_LIGHT" , true ), m_curData.nLightMap ); m_curData.nStateEffect = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_STATE_EFFECT" , true ), m_curData.nStateEffect ); m_curData.nStateEffectPlayer = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_STATE_EFFECT_CREATURE", true ), m_curData.nStateEffectPlayer ); m_curData.nStateEffectParty = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_STATE_EFFECT_PARTY" , true ), m_curData.nStateEffectParty ); m_curData.nStateEffectEnemy = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_STATE_EFFECT_ENEMY" , true ), m_curData.nStateEffectEnemy ); m_curData.nEffect = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_EFFECT" , true ), m_curData.nEffect ); m_curData.nEffectPlayer = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_EFFECT_CREATURE" , true ), m_curData.nEffectPlayer ); m_curData.nEffectParty = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_EFFECT_PARTY" , true ), m_curData.nEffectParty ); m_curData.nEffectEnemy = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_EFFECT_ENEMY" , true ), m_curData.nEffectEnemy ); m_curData.nFaceAni = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_FACE_ANI" , true ), m_curData.nFaceAni ); //눈깜빡 m_curData.nShadow = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_SHADOW" , true ), m_curData.nShadow ); //사운드 m_curData.nAllMute = CheckIntValue( m_OptionManager.GetValueInt( "SOUND_ALL_MUTE" , true ), m_curData.nAllMute ); // m_curData.nRepeat = CheckIntValue( m_OptionManager.GetValueInt( "SOUND_REPEAT" , true ), m_curData.nRepeat ); // 2011.11.29 - servantes : 옵션 nui에 해당 효과 없음 / 주석처리 m_curData.nBGM_Mute = CheckIntValue( m_OptionManager.GetValueInt( "SOUND_BGM_MUTE" , true ), m_curData.nBGM_Mute ); m_curData.nSFX_Mute = CheckIntValue( m_OptionManager.GetValueInt( "SOUND_SFX_MUTE" , true ), m_curData.nSFX_Mute ); m_curData.nENVS_Mute = CheckIntValue( m_OptionManager.GetValueInt( "SOUND_ENVS_MUTE" , true ), m_curData.nENVS_Mute ); m_curData.nBGM_Volume = CheckIntValue( m_OptionManager.GetValueInt( "SOUND_BGM_VOLUME" , true ), m_curData.nBGM_Volume ); m_curData.nSFX_Volume = CheckIntValue( m_OptionManager.GetValueInt( "SOUND_SFX_VOLUME" , true ), m_curData.nSFX_Volume ); m_curData.nENVS_Volume = CheckIntValue( m_OptionManager.GetValueInt( "SOUND_ENVS_VOLUME" , true ), m_curData.nENVS_Volume ); m_curData.nMASTER_Volume = CheckIntValue( m_OptionManager.GetValueInt( "SOUND_MASTER_VOLUME" , true ), m_curData.nMASTER_Volume ); //LOBBY m_curData.nLobby_Theme = CheckIntValue( m_OptionManager.GetValueInt("LOBBY_THEME" , true ), m_curData.nLobby_Theme ); m_curData.nRenderOtherPlayer = CheckIntValue( m_OptionManager.GetValueInt( "GRAPHIC_RENDER_OTHERPLAYER", true ),m_curData.nRenderOtherPlayer); //게임 플레이 관련 m_curData.nTABKey = m_OptionManager.GetValueInt( "PLAY_TAB" , true ); if( m_curData.nTABKey < 0 || m_curData.nTABKey > SGAME_OPT_DATA::MaxTapCase ) m_curData.nTABKey = 0; m_curData.nEnterChat = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_ENTERCHAT" , true ), false); m_curData.nChipAttack = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_CHIPATTACK" , true ), true); m_curData.nTrade = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_TRADE" , true ), false); m_curData.nPVP = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_PVP" , true ), false); m_curData.nAutoTarget = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_AUTOTARGET", true ), true ); // 공격 시 자동타겟팅 m_curData.nWheel = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_WHEEL" , true ), false); m_curData.nChatHide = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_CHATHIDE" , true ), false); m_curData.nMobFace = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_MOBFACE" , true ), false); m_curData.nSimpleRak = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_RAK" , true ), true); m_curData.nChatBalloon = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_CHATBALLOON" , true ), true); m_curData.nTip = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_TIP" , true ), true); // 2010.05.20 - prodongi //m_curData.nHelm = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_HELM" , true ), true); m_curData.nMantle = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_MANTLE" , true ), true); m_curData.nHPGage = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_HPGAGE" , true ), true); m_curData.nPlayerGage = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_PLAYERGAGE" , true ), true); m_curData.nMobGage = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_MOBGAGE" , true ), true); m_curData.nTargetGage = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_TARGETGAGE" , true ), true); m_curData.nName = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_NAME" , true ), true); m_curData.nPlayerName = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_PLAYERNAME" , true ), true); m_curData.nCreatureName = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_CREATURENAME" , true ), true); m_curData.nMobName = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_MOBNAME" , true ), true); m_curData.nNPCName = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_NPCNAME" , true ), true); m_curData.ndamage = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_DAMAGE" , true ), true); m_curData.nPlayerDM = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_PLAYERDM" , true ), true); m_curData.nCreatureDM = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_CREATUREDM" , true ), true); m_curData.nPartyDM = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_PARTYDM" , true ), false); m_curData.nWinLock = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_WINLOCK" , true ), false); m_curData.nWinAlpha = CheckIntValue( m_OptionManager.GetValueInt( "PLAY_WINALPHA" , true ), m_curData.nWinAlpha ); m_curData.nSelfBoothType = CheckIntValue( m_OptionManager.GetValueInt( "PLAY_BOOTHTYPE" , true ), m_curData.nSelfBoothType ); m_curData.nCriticalCamera = CheckIntValue( m_OptionManager.GetValueInt( "PLAY_CRITICAL_CAMERA", true ), m_curData.nCriticalCamera ); // 2010.10.11. 게임플레이옵션에서 "꾸미기보이기" 제거. // 꾸미기아이템보이기 체크박스가 제거된다. 항상 보임으로 설정. bintitle. 2010.10.07. // m_curData.nAvatarDeco = 1; // m_curData.nAvatarDeco = CheckIntValue( m_OptionManager.GetValueInt( "PLAY_AVATAR_DECO" , true ), m_curData.nAvatarDeco ); m_curData.nWeatherQuality = CheckIntValue( m_OptionManager.GetValueInt( "PLAY_WEATHER_QUALITY", true ), m_curData.nWeatherQuality ); m_curData.nCameraCollision = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_CAMERA_COLLISION", true ), true ); m_curData.nTitleShow = CheckBoolValue( m_OptionManager.GetValueInt( "PLAY_TITLE_SHOW", true ), true ); m_curData.isShowSelectOutLine = CheckBoolValue(m_OptionManager.GetValueInt("PLAY_SELECT_OUTLINE_SHOW", true), true); if( m_curData.nCriticalCamera < 0 ) m_curData.nCriticalCamera = 1; // 2010.10.11. 게임플레이옵션에서 "꾸미기보이기" 제거. //if( m_curData.nAvatarDeco < 0 ) // m_curData.nAvatarDeco = 1; if( m_curData.nWinAlpha < 0 || m_curData.nWinAlpha >= SGAME_OPT_DATA::MaxWinAlpha ) m_curData.nWinAlpha = 0; } bool SGameOption::CheckBoolValue( int nValue, bool bDefaultValue ) { if( nValue != 0 && nValue != 1 ) return bDefaultValue; else return nValue; } int SGameOption::CheckIntValue( int nValue, int bDefaultValue ) { if( nValue == ERR_RESULT ) return bDefaultValue; else return nValue; } // 캐릭?? 상관없는 로드 void SGameOption::Init() { //Local System Info #define DIV 1024 char *divisor = "K"; MEMORYSTATUS stat; GlobalMemoryStatus (&stat); _oprint("The MEMORYSTATUS structure is %ld bytes long.\n" , stat.dwLength ); _oprint("It should be %d.\n" , sizeof (stat) ); _oprint("There is %ld percent of memory in use.\n" , stat.dwMemoryLoad ); _oprint("There are %ld total %sbytes of physical memory.\n", stat.dwTotalPhys/DIV , divisor); _oprint("There are %ld free %sbytes of physical memory.\n" , stat.dwAvailPhys/DIV , divisor); _oprint("There are %ld total %sbytes of paging file.\n" , stat.dwTotalPageFile/DIV, divisor); _oprint("There are %ld free %sbytes of paging file.\n" , stat.dwAvailPageFile/DIV, divisor); _oprint("There are %ld total %sbytes of virtual memory.\n" , stat.dwTotalVirtual/DIV , divisor); _oprint("There are %ld free %sbytes of virtual memory.\n" , stat.dwAvailVirtual/DIV , divisor); SetPhysicalMemSize( stat.dwTotalPhys/(DIV*DIV) ); int nMaxCount = 1000; int nFreeMem = stat.dwAvailPhys/(DIV*DIV); if( nFreeMem > 1024 ) { nMaxCount = 1000; #ifndef _RAPPELZ_CONFIG K3DRenderDeviceDX::SetRecycleMaxCount( nMaxCount ); #endif _oprint("Recycle Count : %d\n", nMaxCount ); } else if( nFreeMem < 1024 && nFreeMem > 512 ) { nMaxCount = 400; #ifndef _RAPPELZ_CONFIG K3DRenderDeviceDX::SetRecycleMaxCount( nMaxCount ); #endif _oprint("Recycle Count : %d\n", nMaxCount ); } else { nMaxCount = 200; #ifndef _RAPPELZ_CONFIG K3DRenderDeviceDX::SetRecycleMaxCount( nMaxCount ); #endif _oprint("Recycle Count : %d\n", nMaxCount ); } SetEnvironmenteDefault(m_defData); SetPlayDataDefault(m_defData); SetUIPosDefault(); m_defData.nWinMode = 0; //파일을 최초 읽지 못하는 경우 풀모드가 디폴트로 쎄팅 m_curData = m_defData; if( m_OptionManager.LoadOptionFile() ) { SetCrrOptionData(); } Save(); OptionDataBind(); /* if( m_OptionManager.LoadOptionFile() ) { SetCrrOptionData(); // SetEnvironmenteDefault(); } else { SetEnvironmenteDefault(m_defData); SetPlayDataDefault(m_defData); SetUIPosDefault(); m_defData.nWinMode = 0; //파일을 최초 읽지 못하는 경우 풀모드가 디폴트로 쎄팅 m_curData = m_defData; Save(); } OptionDataBind();*/ if( m_curData.nAllMute < 0 || m_curData.nAllMute > 1 ) m_curData.nAllMute = 0; if( m_curData.nBGM_Mute < 0 || m_curData.nBGM_Mute > 1 ) m_curData.nBGM_Mute = 0; if( m_curData.nSFX_Mute < 0 || m_curData.nSFX_Mute > 1 ) m_curData.nSFX_Mute = 0; if( m_curData.nENVS_Mute < 0 || m_curData.nENVS_Mute > 1 ) m_curData.nENVS_Mute = 0; if( m_curData.nRenderOtherPlayer < 0 || m_curData.nRenderOtherPlayer > 1 ) m_curData.nRenderOtherPlayer = 0; if( m_curData.nBGM_Volume < 0 || m_curData.nBGM_Volume > 9 ) m_curData.nBGM_Volume = 6; if( m_curData.nSFX_Volume < 0 || m_curData.nSFX_Volume > 9 ) m_curData.nSFX_Volume = 8; if( m_curData.nENVS_Volume < 0 || m_curData.nENVS_Volume > 9 ) m_curData.nENVS_Volume = 8; if( m_curData.nMASTER_Volume < 0 || m_curData.nMASTER_Volume > 9 ) m_curData.nMASTER_Volume = 10; } void SGameOption::SetEnvironmenteDefault( _OPT_DATA& data ) { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 게임 환경 관련 옵션 // data.nRepeat = 0; //0~1 현재음 반복 // 2011.11.29 - servantes : 옵션 nui에 해당 효과 없음 / 주석처리 data.nBright = 3; data.nWinBright = 0; //0~1 바탕화면 밝기 적용 data.nPresetOption = PRESET_MID; //3번이 기본 data.nWinMode = 1; //0~1 Full, Window data.nTreeAlpha = 1; //0~1 나무 알파처리(투명화) std::string strCountry = ENV().GetString( "country" ); if( strCountry == "" ) { data.nRenderOtherPlayer = 1; } else if( strCountry == "TW" ) { data.nRenderOtherPlayer = 0; } else data.nRenderOtherPlayer = 1; GetPresetOptData( data.nPresetOption, data ); data.nAllMute = 0; data.nBGM_Mute = 0; data.nSFX_Mute = 0; data.nENVS_Mute = 0; data.nBGM_Volume = 6; //0~9 data.nSFX_Volume = 8; //0~9 data.nENVS_Volume = 8; //0~9 data.nMASTER_Volume = 10; //0~9 } void SGameOption::SetPlayDataDefault( _OPT_DATA& data ) { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 게임 플레이 관련 옵션 data.nTABKey = 0; //0~1 TAB키 설정 std::string strCountry = ENV().GetString( "country" ); if( strCountry == "" ) data.nEnterChat = 0; else if( strCountry == "CN" ) data.nEnterChat = 1; else data.nEnterChat = 0; data.nChipAttack = 1; //0~1 포스칩 후 자동 공격 data.nTrade = 0; //0~1 거래 및 초대 거절 data.nPVP = 0; //0~1 대련신청_거부 data.nAutoTarget = 1; //0~1 // 공격_시_자동타겟팅 data.nWheel = 0; //0~1 휠방향_반전 data.nChatHide = 1; //0~1 체팅창 자동숨김 data.nMobFace = 0; //0~1 몬스?? 페이스컷 data.nSimpleRak = 1; //0~1 ??인??점 아바타 표시 data.nChatBalloon = 1; //0~1 말풍선 표시 data.nTip = 1; //0~1 게임팁 표시 // 2010.05.20 - prodongi //data.nHelm = 1; //0~1 투구 보이기 data.nMantle = 1; //0~1 망토 보이기 data.nHPGage = 1; //0~1 체력게이지 표시 data.nPlayerGage = 1; //0~1 자신과 파티원 data.nMobGage = 1; //0~1 몬스터 data.nTargetGage = 1; //0~1 타겟 data.nName = 1; //0~1 이름 표시 data.nPlayerName = 1; //0~1 플레이어 data.nCreatureName = 1; //0~1 크리처 data.nMobName = 1; //0~1 몬스터 data.nNPCName = 1; //0~1 NPC data.ndamage = 1; //0~1 데미?? 표시 data.nPlayerDM = 1; //0~1 자신 data.nCreatureDM = 1; //0~1 크리처 data.nPartyDM = 0; //0~1 파티원 data.nWinLock = 0; //0~1 현재윈도우장금 data.nWinAlpha = 0; //0~4 윈도우 투명도 설정 data.nSelfBoothType = 1; //0~3 data.nCriticalCamera= 1; //0~1 // data.nAvatarDeco = 1; //0~1 // 2010.10.11. 게임플레이옵션에서 "꾸미기보이기" 제거. data.nWeatherQuality = 3; //0~3 data.nCameraCollision = 1; //0~1 } void SGameOption::GetDefPlayOptData(_OPT_DATA & data) { data = m_curData; SetPlayDataDefault(data); } void SGameOption::SetUIPosDefault() { // m_nQuickVerX;// m_nQuickVerY;// m_nQuickHozX;// m_nQuickHozY;// m_nVerticalQuick; // m_nStateVerX;// m_nStateVerY;// m_nStateHozX;// m_nStateHozY;// m_nVerticalState; // m_nMessangerOpen; // m_nCreatureOpen; // m_nChattingLine;// m_nChattingHeight; //추가 2006/3/10 이동표 m_nMessangerX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Messanger][1]; m_nMessangerY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Messanger][2]; m_nPartyX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Party][1]; m_nPartyY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Party][2]; m_nSysMenuX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::SysMenu][1]; m_nSysMenuY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::SysMenu][2]; m_nInventoryX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Inventory][1]; m_nInventoryY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Inventory][2]; m_nCreatureX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Creature][1]; m_nCreatureY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Creature][2]; m_nCreatureInfoX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::CreatureInfo][1]; m_nCreatureInfoY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::CreatureInfo][2]; m_nQuestX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Quest][1]; m_nQuestY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Quest][2]; m_nMotionX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Motion][1]; m_nMotionY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Motion][2]; m_nOptionX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Option][1]; m_nOptionY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Option][2]; m_nCharX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Char][1]; m_nCharY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Char][2]; m_nSkillX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Skill][1]; m_nSkillY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Skill][2]; m_nSystemX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::System][1]; m_nSystemY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::System][2]; m_nMapX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Map][1]; m_nMapY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Map][2]; m_nItemCombineX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::ItemCombine][1]; m_nItemCombineY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::ItemCombine][2]; m_nShopX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Shop][1]; m_nShopY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Shop][2]; m_nStoreX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Store][1]; m_nStoreY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Store][2]; m_nStorageX = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Storage][1]; m_nStorageY = SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Storage][2]; m_nCreatureSkillX= SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::CreatureSkill][1]; m_nCreatureSkillY= SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::CreatureSkill][2]; // 장비창. bintitle. 2010.10.07. m_nPosEquipment.x= SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Equipment][1]; m_nPosEquipment.y= SGAME_OPT_DATA::c_nWindowOption[SGAME_OPT_DATA::Equipment][2]; } void SGameOption::SetCheckStr( bool * pCehck, char * pStr ) { char szCheckBuf[2]; szCheckBuf[1] = '\0'; if( ::_stricmp( pStr, "err" ) != 0 && ::strlen( pStr ) == SGAME_OPT_DATA::c_nMaxChatOption ) { for( int i = 0; i < SGAME_OPT_DATA::c_nMaxChatOption; i++ ) { szCheckBuf[0] = pStr[i]; pCehck[i] = !!( ::atoi( szCheckBuf ) ); } } } void SGameOption::Load( const char* szName ) { // 로드 - 캐릭별 옵션 if( strlen( szName ) <= 0 ) return; m_strName = szName; m_OptionManager.SetSection( szName ); if( m_OptionManager.IsLoading() ) { m_nMinimapAlpha = m_OptionManager.GetValueInt( "MINIMAP_ALPHA" ); //ENV().Bind( "opt.intf.MINIMAP_ALPHA", &m_nMinimapAlpha ); if( m_nMinimapAlpha < MINIMAP_ALPHA_MIN || m_nMinimapAlpha > MINIMAP_ALPHA_MAX ) m_nMinimapAlpha = MINIMAP_ALPHA_MIDDLE; m_nMinimapOpen = ( m_OptionManager.GetValueInt( "MINIMAP_OPEN" ) == 0 ) ? 0 : 1; ENV().Bind( "opt.intf.MINIMAP_OPEN", &m_nMinimapOpen ); m_nFaceCut = m_OptionManager.GetValueInt( "INTERFACE_FACECUT" ); //ENV().Bind( "opt.intf.INTERFACE_FACECUT", &m_nFaceCut ); if( m_nFaceCut > INTERFACE_LARGE || m_nFaceCut < INTERFACE_SMALL ) m_nFaceCut = INTERFACE_SMALL; m_nMinimap = m_OptionManager.GetValueInt( "INTERFACE_MINIMAP" ); //ENV().Bind( "opt.intf.INTERFACE_MINIMAP", &m_nMinimap ); if( m_nMinimap > INTERFACE_LARGE || m_nMinimap < INTERFACE_SMALL ) m_nMinimap = INTERFACE_SMALL; m_nZoom = m_OptionManager.GetValueInt( "INTERFACE_ZOOM" ); //ENV().Bind( "opt.intf.INTERFACE_ZOOM", &m_nZoom ); if( m_nZoom > INTERFACE_LARGE || m_nZoom < INTERFACE_SMALL ) m_nZoom = INTERFACE_SMALL; } // 인터페이스 옵션 ==================== if( m_OptionManager.IsLoading() ) { //m_nQuickVerX = m_OptionManager.GetValueInt( "QUICK_VER_X" ); //ENV().Bind( "opt.intf.QUICK_VER_X", &m_nQuickVerX ); //m_nQuickVerY = m_OptionManager.GetValueInt( "QUICK_VER_Y" ); //ENV().Bind( "opt.intf.QUICK_VER_Y", &m_nQuickVerY ); m_nQuickHozX = m_OptionManager.GetValueInt( "QUICK_HOZ_X" ); //ENV().Bind( "opt.intf.QUICK_HOZ_X", &m_nQuickHozX ); m_nQuickHozY = m_OptionManager.GetValueInt( "QUICK_HOZ_Y" ); //ENV().Bind( "opt.intf.QUICK_HOZ_Y", &m_nQuickHozY ); m_nVerticalQuick = ( m_OptionManager.GetValueInt( "QUICK_VER_OPEN" ) == 1 ) ? 1 : 0; //ENV().Bind( "opt.intf.QUICK_VER_OPEN", &m_nVerticalQuick ); //m_nStateVerX = m_OptionManager.GetValueInt( "STATE_VER_X" ); //ENV().Bind( "opt.intf.STATE_VER_X", &m_nStateVerX ); //m_nStateVerY = m_OptionManager.GetValueInt( "STATE_VER_Y" ); //ENV().Bind( "opt.intf.STATE_VER_Y", &m_nStateVerY ); m_nStateHozX = m_OptionManager.GetValueInt( "STATE_HOZ_X" ); //ENV().Bind( "opt.intf.STATE_HOZ_X", &m_nStateHozX ); m_nStateHozY = m_OptionManager.GetValueInt( "STATE_HOZ_Y" ); //ENV().Bind( "opt.intf.STATE_HOZ_Y", &m_nStateHozY ); m_nVerticalState = ( m_OptionManager.GetValueInt( "STATE_VER_OPEN" ) == 1 ) ? 1 : 0; //ENV().Bind( "opt.intf.STATE_VER_OPEN", &m_nVerticalState ); m_nMessangerX = m_OptionManager.GetValueInt( "MESSANGER_X" ); //ENV().Bind( "opt.intf.MESSANGER_X", &m_nMessangerX ); m_nMessangerY = m_OptionManager.GetValueInt( "MESSANGER_Y" ); //ENV().Bind( "opt.intf.MESSANGER_Y", &m_nMessangerY ); m_nMessangerOpen = m_OptionManager.GetValueInt( "MESSANGER_OPEN" ); //ENV().Bind( "opt.intf.MESSANGER_OPEN", &m_nMessangerOpen ); m_nPartyX = m_OptionManager.GetValueInt( "PARTY_X" ); m_nPartyY = m_OptionManager.GetValueInt( "PARTY_Y" ); m_nCreatureOpen = ( m_OptionManager.GetValueInt( "CREAUTRE_OPEN" ) == 1 ) ? 1 : 0; //ENV().Bind( "opt.intf.CREAUTRE_OPEN", &m_nCreatureOpen ); m_nSysMenuX = m_OptionManager.GetValueInt( "SYSMENU_X" ); //ENV().Bind( "opt.intf.SYSMENU_X", &m_nSysMenuX ); m_nSysMenuY = m_OptionManager.GetValueInt( "SYSMENU_Y" ); //ENV().Bind( "opt.intf.SYSMENU_Y", &m_nSysMenuY ); m_nInventoryX = m_OptionManager.GetValueInt( "INVENTORY_X" ); //ENV().Bind( "opt.intf.INVENTORY_X", &m_nInventoryX ); m_nInventoryY = m_OptionManager.GetValueInt( "INVENTORY_Y" ); //ENV().Bind( "opt.intf.INVENTORY_Y", &m_nInventoryY ); m_nChattingLine = m_OptionManager.GetValueInt( "CHATTING_LINE" ); //ENV().Bind( "opt.intf.CHATTING_LINE", &m_nChattingLine ); m_nChattingHeight = m_OptionManager.GetValueInt( "CHATTING_HEIGHT" ); //ENV().Bind( "opt.intf.CHATTING_HEIGHT", &m_nChattingHeight ); m_nCreatureX = m_OptionManager.GetValueInt( "CREATURE_X" ); m_nCreatureY = m_OptionManager.GetValueInt( "CREATURE_Y" ); m_nCreatureInfoX = m_OptionManager.GetValueInt( "CREATURE_INFO_X" ); m_nCreatureInfoY = m_OptionManager.GetValueInt( "CREATURE_INFO_Y" ); m_nQuestX = m_OptionManager.GetValueInt( "QUEST_X" ); m_nQuestY = m_OptionManager.GetValueInt( "QUEST_Y" ); m_nMotionX = m_OptionManager.GetValueInt( "MOTION_X" ); m_nMotionY = m_OptionManager.GetValueInt( "MOTION_Y" ); m_nOptionX = m_OptionManager.GetValueInt( "OPTION_X" ); m_nOptionY = m_OptionManager.GetValueInt( "OPTION_Y" ); m_nCharX = m_OptionManager.GetValueInt( "CHAR_X" ); m_nCharY = m_OptionManager.GetValueInt( "CHAR_Y" ); m_nSkillX = m_OptionManager.GetValueInt( "SKILL_X" ); m_nSkillY = m_OptionManager.GetValueInt( "SKILL_Y" ); m_nSystemX = m_OptionManager.GetValueInt( "SYSTEM_X" ); m_nSystemY = m_OptionManager.GetValueInt( "SYSTEM_Y" ); m_nMapX = m_OptionManager.GetValueInt( "MAP_X" ); m_nMapY = m_OptionManager.GetValueInt( "MAP_Y" ); m_nItemCombineX = m_OptionManager.GetValueInt( "ITEM_COMBINE_X" ); m_nItemCombineY = m_OptionManager.GetValueInt( "ITEM_COMBINE_Y" ); m_nShopX = m_OptionManager.GetValueInt( "SHOP_X" ); m_nShopY = m_OptionManager.GetValueInt( "SHOP_Y" ); m_nStoreX = m_OptionManager.GetValueInt( "STORE_X" ); m_nStoreY = m_OptionManager.GetValueInt( "STORE_Y" ); m_nStorageX = m_OptionManager.GetValueInt( "STORAGE_X" ); m_nStorageY = m_OptionManager.GetValueInt( "STORAGE_Y" ); m_nCreatureSkillX = m_OptionManager.GetValueInt( "CREATURESKILL_X" ); m_nCreatureSkillY = m_OptionManager.GetValueInt( "CREATURESKILL_Y" ); // 장비창 위치. bintitle. 2010.10.07. m_nPosEquipment.x = m_OptionManager.GetValueInt( "EQUIPMENT_X" ); m_nPosEquipment.y = m_OptionManager.GetValueInt( "EQUIPMENT_Y" ); m_bOpenEquipWnd = m_OptionManager.GetValueInt( "OPEN_EQUIP_WND_FLAG" ); //servantes 2010.11.02 /// 2011.02.16 - prodongi m_useRechargeMsgBox = m_OptionManager.GetValueInt("USE_RECHARGE_MSGBOX"); /// 2011.08.11 기본 값은 1로 설정 - prodongi if (-1 == m_useRechargeMsgBox) m_useRechargeMsgBox = 1; } // 채팅 if( m_OptionManager.IsLoading() ) { char szBuf[256]; char szCheckBuf[2]; // 채팅 옵션 ::memset( szBuf, 0, sizeof(szBuf) ); szCheckBuf[1] = '\0'; m_OptionManager.GetValueString( "CHAT_CHANNEL_00", szBuf ); SetCheckStr( &m_bChannelCheck[0][0], szBuf ); ::memset( szBuf, 0, sizeof(szBuf) ); m_OptionManager.GetValueString( "CHAT_CHANNEL_01", szBuf ); SetCheckStr( &m_bChannelCheck[1][0], szBuf ); ::memset( szBuf, 0, sizeof(szBuf) ); m_OptionManager.GetValueString( "CHAT_CHANNEL_02", szBuf ); SetCheckStr( &m_bChannelCheck[2][0], szBuf ); ::memset( szBuf, 0, sizeof(szBuf) ); m_OptionManager.GetValueString( "CHAT_CHANNEL_03", szBuf ); SetCheckStr( &m_bChannelCheck[3][0], szBuf ); ::memset( szBuf, 0, sizeof(szBuf) ); m_OptionManager.GetValueString( "CHAT_CHANNEL_04", szBuf ); SetCheckStr( &m_bChannelCheck[4][0], szBuf ); // 채널명 char szTabName[64]; ::memset( szTabName, 0, sizeof(szTabName) ); for( int i = 0; i < SGAME_OPT_DATA::c_nMaxChannel; i++ ) { m_OptionManager.GetValueString( CStringUtil::StringFormat( "CHAT_TAB_NAME_%d", i ).c_str(), szTabName ); if( ::_stricmp( szTabName, "err" ) != 0 ) m_strTabName[i] = szTabName; m_OptionManager.GetValueString( CStringUtil::StringFormat( "CHAT_TAB_MARK_%d", i ).c_str(), szTabName ); if( ::_stricmp( szTabName, "err" ) != 0 ) m_strTabMark[i] = szTabName; } } } void SGameOption::SetMessengerType( int nType ) { m_nMessengerType = nType; } bool SGameOption::SetChatTabMark( int nIndex, const char* szTabMark ) { if( _stricmp( m_strTabMark[nIndex].c_str(), szTabMark ) == 0 ) return false; //같으면 리턴 m_strTabMark[nIndex] = szTabMark; m_OptionManager.SetValueString( CStringUtil::StringFormat( "CHAT_TAB_MARK_%d", nIndex ).c_str(), m_strTabMark[nIndex].c_str() ); return true; } const char* SGameOption::GetChatTabMark( int nIndex ) { return m_strTabMark[nIndex].c_str(); } // 채널명 bool SGameOption::SetChatTabName( int nIndex, const char* szTabName ) { if( _stricmp( m_strTabName[nIndex].c_str(), szTabName ) == 0 ) return false; //같으면 리턴 m_strTabName[nIndex] = szTabName; m_OptionManager.SetValueString( CStringUtil::StringFormat( "CHAT_TAB_NAME_%d", nIndex ).c_str(), m_strTabName[nIndex].c_str() ); return true; } const char* SGameOption::GetChatTabName( int nIndex ) { return m_strTabName[nIndex].c_str(); } //void SGameOption::SetQuickVerX( int nValue ) //{ // m_nQuickVerX = nValue; // // m_OptionManager.SetValueInt( "QUICK_VER_X", m_nQuickVerX ); //} //void SGameOption::SetQuickVerY( int nValue ) //{ // m_nQuickVerY = nValue; // // m_OptionManager.SetValueInt( "QUICK_VER_Y", m_nQuickVerY ); //} void SGameOption::SetQuickHozX( int nValue ) { m_nQuickHozX = nValue; m_OptionManager.SetValueInt( "QUICK_HOZ_X", m_nQuickHozX ); } void SGameOption::SetQuickHozY( int nValue ) { m_nQuickHozY = nValue; m_OptionManager.SetValueInt( "QUICK_HOZ_Y", m_nQuickHozY ); } void SGameOption::SetVerticalQuick( int nVertical ) { m_nVerticalQuick = nVertical; m_OptionManager.SetValueInt( "QUICK_VER_OPEN", m_nVerticalQuick ); } //void SGameOption::SetStateVerX( int nValue ) //{ // m_nStateVerX = nValue; // // m_OptionManager.SetValueInt( "STATE_VER_X", m_nStateVerX ); //} //void SGameOption::SetStateVerY( int nValue ) //{ // m_nStateVerY = nValue; // // m_OptionManager.SetValueInt( "STATE_VER_Y", m_nStateVerY ); //} void SGameOption::SetStateHozX( int nValue ) { m_nStateHozX = nValue; m_OptionManager.SetValueInt( "STATE_HOZ_X", m_nStateHozX ); } void SGameOption::SetStateHozY( int nValue ) { m_nStateHozY = nValue; m_OptionManager.SetValueInt( "STATE_HOZ_Y", m_nStateHozY ); } void SGameOption::SetVerticalStat( int nVertical ) { m_nVerticalState = nVertical; m_OptionManager.SetValueInt( "STATE_VER_OPEN", m_nVerticalState ); } void SGameOption::SetMessangerX( int nValue ) { m_nMessangerX = nValue; m_OptionManager.SetValueInt( "MESSANGER_X", m_nMessangerX ); }; void SGameOption::SetMessangerY( int nValue ) { m_nMessangerY = nValue; m_OptionManager.SetValueInt( "MESSANGER_Y", m_nMessangerY ); } void SGameOption::SetPartyX( int nValue ) { m_nPartyX = nValue; m_OptionManager.SetValueInt( "PARTY_X", m_nPartyX ); }; void SGameOption::SetPartyY( int nValue ) { m_nPartyY = nValue; m_OptionManager.SetValueInt( "PARTY_Y", m_nPartyY ); } void SGameOption::SetMessangerOpep( int nOpen ) { m_nMessangerOpen = nOpen; m_OptionManager.SetValueInt( "MESSANGER_OPEN", m_nMessangerOpen ); } void SGameOption::SetCreatureOpen( int nOpen ) { m_nCreatureOpen = nOpen; m_OptionManager.SetValueInt( "CREAUTRE_OPEN", m_nCreatureOpen ); } void SGameOption::SetSysMenuX( int nValue ) { m_nSysMenuX = nValue; m_OptionManager.SetValueInt( "SYSMENU_X", m_nSysMenuX ); } void SGameOption::SetSysMenuY( int nValue ) { m_nSysMenuY = nValue; m_OptionManager.SetValueInt( "SYSMENU_Y", m_nSysMenuY ); } void SGameOption::SetCreatureSkillX( int nValue ) { m_nCreatureSkillX = nValue; m_OptionManager.SetValueInt( "CREATURESKILL_X", m_nCreatureSkillX ); } void SGameOption::SetCreatureSkillY( int nValue ) { m_nCreatureSkillY = nValue; m_OptionManager.SetValueInt( "CREATURESKILL_Y", m_nCreatureSkillY ); } void SGameOption::SetInventoryX( int nValue ) { m_nInventoryX = nValue; m_OptionManager.SetValueInt( "INVENTORY_X", m_nInventoryX ); } void SGameOption::SetInventoryY( int nValue ) { m_nInventoryY = nValue; m_OptionManager.SetValueInt( "INVENTORY_Y", m_nInventoryY ); } void SGameOption::SetChattingLine( int nValue ) { m_nChattingLine = nValue; m_OptionManager.SetValueInt( "CHATTING_LINE", m_nChattingLine ); } void SGameOption::SetChattingHeight( int nValue ) { m_nChattingHeight = nValue; m_OptionManager.SetValueInt( "CHATTING_HEIGHT", m_nChattingHeight ); } void SGameOption::SetCreatureX( int nValue ) { m_nCreatureX = nValue; m_OptionManager.SetValueInt( "CREATURE_X", m_nCreatureX ); } void SGameOption::SetCreatureY( int nValue ) { m_nCreatureY = nValue; m_OptionManager.SetValueInt( "CREATURE_Y", m_nCreatureY ); } void SGameOption::SetCreatureInfoX( int nValue ) { m_nCreatureInfoX = nValue; m_OptionManager.SetValueInt( "CREATURE_INFO_X", m_nCreatureInfoX ); } void SGameOption::SetCreatureInfoY( int nValue ) { m_nCreatureInfoY = nValue; m_OptionManager.SetValueInt( "CREATURE_INFO_Y", m_nCreatureInfoY ); } void SGameOption::SetQuestX( int nValue ) { m_nQuestX = nValue; m_OptionManager.SetValueInt( "QUEST_X", m_nQuestX ); } void SGameOption::SetQuestY( int nValue ) { m_nQuestY = nValue; m_OptionManager.SetValueInt( "QUEST_Y", m_nQuestY ); } void SGameOption::SetMotionX( int nValue ) { m_nMotionX = nValue; m_OptionManager.SetValueInt( "MOTION_X", m_nMotionX ); } void SGameOption::SetMotionY( int nValue ) { m_nMotionY = nValue; m_OptionManager.SetValueInt( "MOTION_Y", m_nMotionY ); } void SGameOption::SetOptionX( int nValue ) { m_nOptionX = nValue; m_OptionManager.SetValueInt( "OPTION_X", m_nOptionX ); } void SGameOption::SetOptionY( int nValue ) { m_nOptionY = nValue; m_OptionManager.SetValueInt( "OPTION_Y", m_nOptionY ); } void SGameOption::SetCharX( int nValue ) { m_nCharX = nValue; m_OptionManager.SetValueInt( "CHAR_X", m_nCharX ); } void SGameOption::SetCharY( int nValue ) { m_nCharY = nValue; m_OptionManager.SetValueInt( "CHAR_Y", m_nCharY ); } void SGameOption::SetSkillX( int nValue ) { m_nSkillX = nValue; m_OptionManager.SetValueInt( "SKILL_X", m_nSkillX ); } void SGameOption::SetSkillY( int nValue ) { m_nSkillY = nValue; m_OptionManager.SetValueInt( "SKILL_Y", m_nSkillY ); } void SGameOption::SetSystemX( int nValue ) { m_nSystemX = nValue; m_OptionManager.SetValueInt( "SYSTEM_X", m_nSystemX ); } void SGameOption::SetSystemY( int nValue ) { m_nSystemY = nValue; m_OptionManager.SetValueInt( "SYSTEM_Y", m_nSystemY ); } void SGameOption::SetMapX( int nValue ) { m_nMapX = nValue; m_OptionManager.SetValueInt( "MAP_X", m_nMapX ); } void SGameOption::SetMapY( int nValue ) { m_nMapY = nValue; m_OptionManager.SetValueInt( "MAP_Y", m_nMapY ); } void SGameOption::SetItemCombineX( int nValue ) { m_nItemCombineX = nValue; m_OptionManager.SetValueInt( "ITEM_COMBINE_X", m_nItemCombineX ); } void SGameOption::SetItemCombineY( int nValue ) { m_nItemCombineY = nValue; m_OptionManager.SetValueInt( "ITEM_COMBINE_Y", m_nItemCombineY ); } void SGameOption::SetShopX( int nValue ) { m_nShopX = nValue; m_OptionManager.SetValueInt( "SHOP_X", m_nShopX ); } void SGameOption::SetShopY( int nValue ) { m_nShopY = nValue; m_OptionManager.SetValueInt( "SHOP_Y", m_nShopY ); } void SGameOption::SetStoreX( int nValue ) { m_nStoreX = nValue; m_OptionManager.SetValueInt( "STORE_X", m_nStoreX ); } void SGameOption::SetStoreY( int nValue ) { m_nStoreY = nValue; m_OptionManager.SetValueInt( "STORE_Y", m_nStoreY ); } void SGameOption::SetStorageX( int nValue ) { m_nStorageX = nValue; m_OptionManager.SetValueInt( "STORAGE_X", m_nStorageX ); } void SGameOption::SetStorageY( int nValue ) { m_nStorageY = nValue; m_OptionManager.SetValueInt( "STORAGE_Y", m_nStorageY ); } void SGameOption::SetEquipmentWndPos( KPoint & point ) { m_nPosEquipment = point; m_OptionManager.SetValueInt( "EQUIPMENT_X", m_nPosEquipment.x ); m_OptionManager.SetValueInt( "EQUIPMENT_Y", m_nPosEquipment.y ); } void SGameOption::SetOpenEquipWnd(bool nValue) //servantes 2010.11.02 { m_bOpenEquipWnd = nValue; m_OptionManager.SetValueInt( "OPEN_EQUIP_WND_FLAG", m_bOpenEquipWnd ); } /// 2011.02.16 - prodongi void SGameOption::SetUseRechargeMsgBox(bool use) { m_useRechargeMsgBox = use ? 1 : 0; m_OptionManager.SetValueInt("USE_RECHARGE_MSGBOX", m_useRechargeMsgBox); } bool SGameOption::NotifyTitle(int changeOpt) { static int beforeOpt = -1; if(beforeOpt != changeOpt) // 옵션이 바뀌였다면.. { beforeOpt = changeOpt; return true; } else return false; } bool SGameOption::IsChatOptionCheck( int nTabMode, int nIndex ) { if( nIndex < 0 || nIndex > SGAME_OPT_DATA::c_nMaxChatOption ) return false; switch(nTabMode) { case 0: return m_bChannelCheck[nTabMode][nIndex]; case 1: return m_bChannelCheck[nTabMode][nIndex]; case 2: return m_bChannelCheck[nTabMode][nIndex]; case 3: return m_bChannelCheck[nTabMode][nIndex]; case 4: return m_bChannelCheck[nTabMode][nIndex]; } return false; } void SGameOption::SettingForMinimumSystem() { SetResourceQuality( 0 ); SetTextureMipBias( 0 ); SetLight( 0 ); SetWaterQuality( 0 ); SetLowShadow( 1 ); SetShadow( 1 ); } void SGameOption::SettingForMaximumSystem() { SetResourceQuality( 1 ); SetTextureMipBias( 2 ); } SGameOption & GetGameOption() { static SGameOption gameoption; return gameoption; } ////////////////////////////////////////////////////////////////////////// // INI file ////////////////////////////////////////////////////////////////////////// SINIManager::SINIManager() { m_strFile.clear(); m_strGlobalSection = "RAPPELZ"; } SINIManager::~SINIManager() { } bool SINIManager::LoadOptionFilePath( const char* szFilePath ) { m_strFile=szFilePath; FILE * pF = fopen( szFilePath, "rb" ); if( pF ) { fclose( pF ); return true; } return false; } bool SINIManager::LoadOptionFile( const char* szFileName ) { char pBuf[MAX_PATH]; GetCurrentDirectory( MAX_PATH, pBuf ); m_strFile = pBuf; m_strFile += szFileName; FILE * pF = fopen( m_strFile.c_str(), "rb" ); if( pF ) { fclose( pF ); return true; } return false; } bool SINIManager::SetValueInt( std::string strKey, int nValue, bool bGlobal ) { if( m_strFile.size() <= 0 ) return false; std::string strSection = m_strSection; if( bGlobal ) strSection = m_strGlobalSection; else { //섹션이 없을 경우, Save 하지 않는다. if( m_strSection.length() <= 0 ) return false; } std::string strValue = CStringUtil::StringFormat( "%d", nValue ); return !!(WritePrivateProfileString( strSection.c_str(), strKey.c_str(), strValue.c_str(), m_strFile.c_str() )); } int SINIManager::GetValueInt( std::string strKey, bool bGlobal ) { if( m_strFile.size() <= 0 ) return ERR_RESULT; std::string strSection = m_strSection; if( bGlobal ) strSection = m_strGlobalSection; return GetPrivateProfileInt( strSection.c_str(), strKey.c_str(), ERR_RESULT, m_strFile.c_str() ); } bool SINIManager::SetValueString( std::string strKey, std::string strValue, bool bGlobal ) { if( m_strFile.size() <= 0 ) return false; std::string strSection = m_strSection; if( bGlobal ) strSection = m_strGlobalSection; else { //섹션이 없을 경우, Save 하지 않는다. if( m_strSection.length() <= 0 ) return false; } std::string strEnvKey = "opt."; strEnvKey += strKey; //ENV().Set( strEnvKey.c_str(), strValue.c_str() ); return !!(WritePrivateProfileString( strSection.c_str(), strKey.c_str(), strValue.c_str(), m_strFile.c_str() )); } void SINIManager::GetValueString( std::string strKey, char* szBuf, bool bGlobal ) { if( m_strFile.size() <= 0 ) { szBuf = "err"; return; } std::string strSection = m_strSection; if( bGlobal ) strSection = m_strGlobalSection; GetPrivateProfileString( strSection.c_str(), strKey.c_str(), "err", szBuf, 255, m_strFile.c_str() ); //std::string strEnvKey = "opt."; //strEnvKey += strKey; //ENV().Set( strEnvKey.c_str(), szBuf ); } SLocaleOption::SLocaleOption() { } SLocaleOption::~SLocaleOption() { } void SLocaleOption::LoadValueString(const char *key) { char szTemp[512]; ::memset( szTemp, 0, sizeof(szTemp) ); m_OptionManager.GetValueString(key, szTemp, true ); if( ::_stricmp( szTemp, "err" ) != 0 ) { strlwr(szTemp); m_StrMap[key] = szTemp; } } void SLocaleOption::LoadValueInt(const char *key) { int d = m_OptionManager.GetValueInt( key, true ); if( ERR_RESULT != d) m_IntMap[key] = d; } // 2010.06.29 - prodongi bool SLocaleOption::pickupValue(char const* data, char const* startToken, char endToken, char* value) { size_t size, i; // start char const* f_start = strstr(data, startToken); if (!f_start) return false; ++f_start; // 공백 제거 size = strlen(f_start); for (i = 0; i < size; ++i) { if (*f_start != ' ') break; ++f_start; } // end char const* f_end = NULL; size = strlen(f_start); for (i = 0; i < size; ++i) { if (f_start[i] == endToken) { f_end = f_start + i - 1; break; } } if (i == size) f_end = f_start + i; if (!f_end) return false; size = f_end - f_start; strncpy(value, f_start, size); value[size] = 0x00; // 공백 제거 for (i = size-1; i > 0; --i) { if (value[i] != ' ') { value[i+1] = 0x00; break; } } return true; } // 2010.06.29 - prodongi void SLocaleOption::parsingValueString(char const* key, char const* data, char* value) { if (!parsingValue(key, data, value)) return ; strlwr(value); m_StrMap[key] = value; _oprint("%s=%s\n", key, value); } // 2010.06.29 - prodongi void SLocaleOption::parsingValueInt(char const* key, char const* data, char* value) { if (!parsingValue(key, data, value)) return ; m_IntMap[key] = atoi(value); _oprint("%s=%s\n", key, value); } // 2010.06.29 - prodongi bool SLocaleOption::parsingValue(char const* key, char const* data, char* value) { char const* f = strstr(data, key); if (!f) return false; return pickupValue(f, "=", '\n', value); } // 2010.09.01 - prodongi void SLocaleOption::parsingBigSmallValueString(char const* bigKey, char const* smallKey, char const* parsingData, char* value) { parsingValueString(bigKey, parsingData, value); if (isValue(m_StrMap, bigKey)) copyValue(m_StrMap,bigKey, smallKey); else { parsingValueString(smallKey, parsingData, value); if (isValue(m_StrMap, smallKey)) copyValue(m_StrMap, smallKey, bigKey); } } // 2010.09.01 - prodongi void SLocaleOption::parsingBigSmallValueInt(char const* bigKey, char const* smallKey, char const* parsingData, char* value) { parsingValueInt(bigKey, parsingData, value); if (isValue(m_IntMap, bigKey)) copyValue(m_IntMap,bigKey, smallKey); else { parsingValueInt(smallKey, parsingData, value); if (isValue(m_IntMap, smallKey)) copyValue(m_IntMap, smallKey, bigKey); } } // 2010.06.29 - prodongi bool SLocaleOption::parsingOptionFile(const char* filename) { char* data = KFileManager::Instance().readData(filename); if (!data) return false; volatile int CurrentLocalBitset = GameRule::GetCurrentLocalBitSet(); m_OptionManager.m_strGlobalSection = "[RAPPELZ]"; if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::KR) m_OptionManager.m_strGlobalSection = "[RAPPELZ_KR]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::HK) m_OptionManager.m_strGlobalSection = "[RAPPELZ_HK]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::US) m_OptionManager.m_strGlobalSection = "[RAPPELZ_US]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::DE) m_OptionManager.m_strGlobalSection = "[RAPPELZ_DE]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::JP) m_OptionManager.m_strGlobalSection = "[RAPPELZ_JP]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::TW) m_OptionManager.m_strGlobalSection = "[RAPPELZ_TW]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::CN) m_OptionManager.m_strGlobalSection = "[RAPPELZ_CN]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::FR) m_OptionManager.m_strGlobalSection = "[RAPPELZ_FR]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::RU) m_OptionManager.m_strGlobalSection = "[RAPPELZ_RU]"; // 2010.06.14 - prodongi //else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::MA) m_OptionManager.m_strGlobalSection = "[RAPPELZ_MA]"; //else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::SG) m_OptionManager.m_strGlobalSection = "[RAPPELZ_SG]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::MASG) m_OptionManager.m_strGlobalSection = "[RAPPELZ_MASG]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::PH) m_OptionManager.m_strGlobalSection = "[RAPPELZ_PH]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::VN) m_OptionManager.m_strGlobalSection = "[RAPPELZ_VN]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::TL) m_OptionManager.m_strGlobalSection = "[RAPPELZ_TL]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::ME) m_OptionManager.m_strGlobalSection = "[RAPPELZ_ME]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::TR) m_OptionManager.m_strGlobalSection = "[RAPPELZ_TR]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::PL) m_OptionManager.m_strGlobalSection = "[RAPPELZ_PL]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::IT) m_OptionManager.m_strGlobalSection = "[RAPPELZ_IT]"; else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::BR) m_OptionManager.m_strGlobalSection = "[RAPPELZ_BR]"; // 2010.09.08 브라질 - prodongi else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::ES) m_OptionManager.m_strGlobalSection = "[RAPPELZ_ES]"; // 2011.03.17 스페인 - prodongi else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::ID) m_OptionManager.m_strGlobalSection = "[RAPPELZ_ID]"; // 2011.07.21 인도네시아 - prodongi m_StrMap.clear(); m_IntMap.clear(); char* parsingData = new char[strlen(data)]; if (!pickupValue(data, m_OptionManager.m_strGlobalSection.c_str(), '[', parsingData)) { delete[] data; delete[] parsingData; return false; } char value[512]; parsingValueString("PUBLISHER_LOGO", parsingData, value); parsingValueString("PUBLISHER_LOGO_BGM", parsingData, value); parsingValueString("NFLAVOR_LOGO", parsingData, value); parsingValueString("NFLAVOR_LOGO_BGM", parsingData, value); parsingValueString("PUBLISHER2nd_LOGO", parsingData, value); parsingValueString("PUBLISHER2nd_LOGO_BGM", parsingData, value); parsingValueString("COPYRIGHT", parsingData, value); parsingValueString("COPYRIGHT_BGM", parsingData, value); parsingValueString("PUBLISHER_LOGO_DRAWMODE", parsingData, value); parsingValueString("NFLAVOR_LOGO_DRAWMODE", parsingData, value); parsingValueString("PUBLISHER2nd_LOGO_DRAWMODE", parsingData, value); parsingValueString("COPYRIGHT_DRAWMODE", parsingData, value); parsingValueString("GAME_INTRO", parsingData, value); parsingValueString("GAME_INTRO_BGM", parsingData, value); parsingValueString("GAME_INTRO_DRAWMODE", parsingData, value); parsingValueString("LOGIN_RAPPELZ_LOGO", parsingData, value); parsingValueString("LOGIN_RAPPELZ_SUBTITLE", parsingData, value); parsingValueString("LOGIN_PUBLISHER_LOGO", parsingData, value); parsingValueString("LOGIN_NFLAVOR_LOGO", parsingData, value); parsingValueString("LOADING_PUBLISHER_LOGO", parsingData, value); parsingValueString("LOADING_NFLAVOR_LOGO", parsingData, value); parsingValueString("LOADING_RAPPELZ_LOGO", parsingData, value); parsingValueString("LOADING_UPINFO_NUI", parsingData, value); parsingValueString("LOADING_DOWNINFO_NUI", parsingData, value); parsingValueString("ENDING_PUBLISHER_LOGO", parsingData, value); parsingValueString("ENDING_NFLAVOR_LOGO", parsingData, value); parsingValueString("ENDING_DOWNINFO_NUI", parsingData, value); parsingValueString("IDPW_URL", parsingData, value); parsingValueString("JOIN_URL", parsingData, value); parsingValueString("SECURITY_URL", parsingData, value); //parsingValueString( "SECURITY_EMAIL" ); parsingValueString("NOTICE_URL", parsingData, value); parsingValueInt("CODEPAGE", parsingData, value); parsingValueString("FONT", parsingData, value); // 2010.09.01 대문자로 표기되야 되나, 만약 소문자로 표기된 경우를 고려 - prodongi /* // 이 아래 폰트 관련 값들 읽어 놓는거 해놔야 되는데 안한거 같음.. floyd 2010. 6. 24 parsingValueString("font_default", parsingData, value); parsingValueString("font_01", parsingData, value); parsingValueString("font_02", parsingData, value); parsingValueInt("font_default_hinting", parsingData, value); parsingValueInt("font_01_hinting", parsingData, value); parsingValueInt("font_02_hinting", parsingData, value); */ parsingBigSmallValueString("FONT_DEFAULT", "font_default", parsingData, value); parsingBigSmallValueString("FONT_01", "font_01", parsingData, value); parsingBigSmallValueString("FONT_02", "font_02", parsingData, value); parsingBigSmallValueString("FONT_03", "font_03", parsingData, value); parsingBigSmallValueInt("FONT_DEFAULT_HINTING", "font_default_hinting", parsingData, value); parsingBigSmallValueInt("FONT_01_HINTING", "font_01_hinting", parsingData, value); parsingBigSmallValueInt("FONT_02_HINTING", "font_02_hinting", parsingData, value); parsingBigSmallValueInt("FONT_03_HINTING", "font_03_hinting", parsingData, value); SetExceptionalCodePage(); SLOG("Locale File - %s\n", m_OptionManager.m_strGlobalSection.c_str() ); delete[] data; delete[] parsingData; return true; } bool SLocaleOption::LoadOptionFile(const char *filename) { std::string strFile = KFileManager::Instance().CreateTemporaryFileFromResourceWithLocale( filename ); if( strFile.empty() ) return false; m_OptionManager.m_strGlobalSection = "RAPPELZ"; if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::KR) m_OptionManager.m_strGlobalSection = "RAPPELZ_KR"; // Korea else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::HK) m_OptionManager.m_strGlobalSection = "RAPPELZ_HK"; // Hong Kong (Traditional Chinese) else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::US) m_OptionManager.m_strGlobalSection = "RAPPELZ_US"; // United States else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::DE) m_OptionManager.m_strGlobalSection = "RAPPELZ_DE"; // Germany else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::JP) m_OptionManager.m_strGlobalSection = "RAPPELZ_JP"; // Japan else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::TW) m_OptionManager.m_strGlobalSection = "RAPPELZ_TW"; // Taiwan else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::CN) m_OptionManager.m_strGlobalSection = "RAPPELZ_CN"; // China else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::FR) m_OptionManager.m_strGlobalSection = "RAPPELZ_FR"; // France else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::RU) m_OptionManager.m_strGlobalSection = "RAPPELZ_RU"; // Russia //else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::MA) m_OptionManager.m_strGlobalSection = "RAPPELZ_MA"; // //else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::SG) m_OptionManager.m_strGlobalSection = "RAPPELZ_SG"; // else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::MASG) m_OptionManager.m_strGlobalSection = "RAPPELZ_MASG";// Malaysia (Singapore) else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::PH) m_OptionManager.m_strGlobalSection = "RAPPELZ_PH"; // Philippines else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::VN) m_OptionManager.m_strGlobalSection = "RAPPELZ_VN"; // else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::TL) m_OptionManager.m_strGlobalSection = "RAPPELZ_TL"; // else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::ME) m_OptionManager.m_strGlobalSection = "RAPPELZ_ME"; // Middle Earth (Arabic) else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::TR) m_OptionManager.m_strGlobalSection = "RAPPELZ_TR"; // Turkey else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::PL) m_OptionManager.m_strGlobalSection = "RAPPELZ_PL"; // Poland else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::IT) m_OptionManager.m_strGlobalSection = "RAPPELZ_IT"; // Italy else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::BR) m_OptionManager.m_strGlobalSection = "RAPPELZ_BR"; // Brazil else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::ES) m_OptionManager.m_strGlobalSection = "RAPPELZ_ES"; // Spain else if(GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::ID) m_OptionManager.m_strGlobalSection = "RAPPELZ_ID"; // Indonesia if(m_OptionManager.LoadOptionFilePath(strFile.c_str() )) { m_StrMap.clear(); m_IntMap.clear(); LoadValueString( "PUBLISHER_LOGO" ); LoadValueString( "PUBLISHER_LOGO_BGM" ); LoadValueString( "NFLAVOR_LOGO" ); LoadValueString( "NFLAVOR_LOGO_BGM" ); LoadValueString( "PUBLISHER2nd_LOGO" ); LoadValueString( "PUBLISHER2nd_LOGO_BGM" ); LoadValueString( "COPYRIGHT" ); LoadValueString( "COPYRIGHT_BGM" ); LoadValueString( "PUBLISHER_LOGO_DRAWMODE" ); LoadValueString( "NFLAVOR_LOGO_DRAWMODE" ); LoadValueString( "PUBLISHER2nd_LOGO_DRAWMODE" ); LoadValueString( "COPYRIGHT_DRAWMODE" ); LoadValueString( "GAME_INTRO" ); LoadValueString( "GAME_INTRO_BGM" ); LoadValueString( "GAME_INTRO_DRAWMODE" ); LoadValueString( "LOGIN_RAPPELZ_LOGO" ); LoadValueString( "LOGIN_RAPPELZ_SUBTITLE" ); LoadValueString( "LOGIN_PUBLISHER_LOGO" ); LoadValueString( "LOGIN_NFLAVOR_LOGO" ); LoadValueString( "LOADING_PUBLISHER_LOGO" ); LoadValueString( "LOADING_NFLAVOR_LOGO" ); LoadValueString( "LOADING_RAPPELZ_LOGO" ); LoadValueString( "LOADING_UPINFO_NUI" ); LoadValueString( "LOADING_DOWNINFO_NUI" ); LoadValueString( "ENDING_PUBLISHER_LOGO" ); LoadValueString( "ENDING_NFLAVOR_LOGO" ); LoadValueString( "ENDING_DOWNINFO_NUI" ); LoadValueString( "IDPW_URL" ); LoadValueString( "JOIN_URL" ); LoadValueString( "SECURITY_URL" ); LoadValueString( "NOTICE_URL" ); LoadValueInt( "CODEPAGE" ); LoadValueString( "FONT" ); // 2010.08.26 - prodongi /* // 이 아래 폰트 관련 값들 읽어 놓는거 해놔야 되는데 안한거 같음.. floyd 2010. 6. 24 LoadValueString( "font_default" ); LoadValueString( "font_01" ); LoadValueString( "font_02" ); LoadValueInt( "font_default_hinting" ); LoadValueInt( "font_01_hinting" ); LoadValueInt( "font_02_hinting" ); */ LoadValueString( "FONT_DEFAULT" ); LoadValueString( "FONT_01" ); LoadValueString( "FONT_02" ); LoadValueString( "FONT_03" ); LoadValueInt( "FONT_DEFAULT_HINTING" ); LoadValueInt( "FONT_01_HINTING" ); LoadValueInt( "FONT_02_HINTING" ); LoadValueInt( "FONT_03_HINTING" ); // nui 파일에서는 FONT_DEFAULT, FONT_01, FONT_02가 소문자로 설정되기 때문에, // 소문자도 수동으로 추가해준다 copyValue(m_StrMap, "FONT_DEFAULT", "font_default"); copyValue(m_StrMap, "FONT_01", "font_01"); copyValue(m_StrMap, "FONT_02", "font_02"); copyValue(m_StrMap, "FONT_03", "font_03"); /*LoadValueString( "USERSCREENSHOT_URL" ); LoadValueString( "INGAME_HELP_URL" ); LoadValueInt( "INGAME_HELP_WIDTH" ); LoadValueInt( "INGAME_HELP_HEIGHT" ); LoadValueString( "INGAME_STORE_URL" ); LoadValueInt( "INGAME_STORE_WIDTH" ); LoadValueInt( "INGAME_STORE_HEIGHT" ); LoadValueString( "INGAME_STORE_ADD_URL" ); LoadValueInt( "INGAME_STORE_ADD_WIDTH" ); LoadValueInt( "INGAME_STORE_ADD_HEIGHT" );*/ // 2010.06.29 중복 코드라서 주석처리 함 - prodongi // 2010.06.25 - prodongi /* LoadValueString("font_01"); LoadValueString("font_02"); LoadValueString("font_default"); LoadValueInt("font_01_hinting"); LoadValueInt("font_02_hinting"); LoadValueInt("font_default_hinting"); */ SetExceptionalCodePage(); SLOG("Locale File - %s\n", m_OptionManager.m_strGlobalSection.c_str() ); return true; } else { SLOG("Locale File - not Read\n"); return false; } } int SLocaleOption::GetValueInt( std::string strKey, int bDefaultValue) { if(m_IntMap.find( strKey) == m_IntMap.end() ) return bDefaultValue; else return m_IntMap[strKey]; } const char *SLocaleOption::GetValueString( std::string strKey, const char *defaultstr) { if(m_StrMap.find( strKey) == m_StrMap.end() ) return defaultstr; else return m_StrMap[strKey].c_str(); } void SLocaleOption::SetExceptionalCodePage() { // 동남아의 번체 중국어 설정 if( GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::MASG ) { if( stricmp( ENV().GetString( "locale" ).c_str(), "BIG5" ) == 0 ) { // Change in UTF-8 950 65001 m_IntMap["CODEPAGE"] = 950; } } if( GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::IT || // Italy GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::PL || // Poland GameRule::GetCurrentLocalBitSet() == GameRule::LOCAL_BITSET::TR ) // Turkey { // Italian: Windows-1252 // Polish: Windows-1250 // Turkish: Windows-1254 // English: ASCII if( stricmp( ENV().GetString( "locale" ).c_str(), "windows-1252" ) == 0 ) { // Change in UTF-8 1252 65001 m_IntMap["CODEPAGE"] = 1252; } else if( stricmp( ENV().GetString( "locale" ).c_str(), "windows-1250" ) == 0 ) { // Change in UTF-8 1250 m_IntMap["CODEPAGE"] = 1250; } else if( stricmp( ENV().GetString( "locale" ).c_str(), "windows-1254" ) == 0 ) { // Change in UTF-8 1254 m_IntMap["CODEPAGE"] = 1254; } else if( stricmp( ENV().GetString( "locale" ).c_str(), "ASCII" ) == 0 ) { // Change in UTF-8 1252 m_IntMap["CODEPAGE"] = 1252; } } } SLocaleOption &GetLocaleOption() { static SLocaleOption localeoption; return localeoption; }