Files
2026-06-01 12:46:52 +02:00

2357 lines
91 KiB
C++

#pragma once
#include "stdafx.h"
#include <windows.h>
#ifndef _RAPPELZ_CONFIG
#include "KRenderDeviceDX.h"
#endif
#include "SGameOption.h"
//#include "Util.h"
#include <toolkit/XEnv.h>
#include <dump/XException.h>
#ifdef _RAC
#include "SStringDB.h"
#endif
#include <kfile/KFileManager.h>
#include "SLog.h"
#include <map>
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 == "<NULL>" )
{
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 == "<NULL>" )
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;
}