Files
Leviathan/Client/Game/game/Main/SGameOption.h
T
2026-06-01 12:46:52 +02:00

895 lines
36 KiB
C++

#pragma once
//#include <string>
//#include <vector>
//#include "SGameMessageUI.h"
namespace
{
const int DEFAULT_POS = -1;
}
namespace SGAME_OPT_DATA
{
enum APPLY_MODE
{
MODE_ENVIRONMENT = 0,
MODE_PLAY,
MODE_UI,
};
const int c_nMaxChannel = 5;
const int c_nMaxChatOption = 19;
//=============================================================================================================================================
/// 윈도우 위치를 디폴트로 쎄팅해야할 것들(알파처러 해야할 윈도우도 이것으로 같이 처리하자)
enum
{
Messanger,
Inventory,
Creature,
CreatureInfo,
CreatureSkill,
Quest,
Motion,
Char,
Skill,
Map,
ItemCombine,
Shop,
Store,
Storage,
Party,
Equipment, // 장비창. bintitle. 2010.10.07.
NONE_MOVE_WIN, ///< 이 위에는 움직이지 못하게 할 윈도우들 / or / 윈도우 위치 초기화시 초기화를 해줄 윈도우들
System,
SkillFund,
ShopKart,
StorageKart,
CraetureForm,
CratureDetail,
CratureSkill,
CreatureSkillFund,
QuestInfo,
QuestReward,
CashStorage,
DungeonStone,
DungeonUnit,
DungeonUnitMini,
DungeonUnitInvitation,
GuildList,
TitleMain,
TitleGainResult,
ADD_ALPHA_WIN, ///< NONE_MOVE_WIN 에서 ADD_ALPHA_WIN까지는 움직이는거와 함께 알파 처리해야할 것들(스킬창은 위로 되지만 스킬투자창은 따로)
SysMenu,
Option,
MAX ///< ADD_ALPHA_WIN 에서 MAX까지는 윈도우 위치를 Default로 쎄팅해줘야 하는 것들
};
const int c_nWindowOption[MAX][3]
={
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_COMMUNITY, 788, 217, ///< Messanger//임시주석
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_INVENTORY, 626, 108, ///< Inventory
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE, 3000, 540, ///< Creature (3000같은 어이없는 숫자를 넣은것은 화면 우측 끝에 붙이기 위해서 -N4-)
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_PAGE, 50, 192, ///< CreatureInfo
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_SKILL, 50, 192, ///< CratureSkill
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_QUEST_LIST, 13, 146, ///< Quest
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MOTION, 366, 222, ///< Motion
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CHARINFO, 30, 140, ///< Char
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SKILL, 40, 166, ///< Skill
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_WORLDMAP, 222, 34, ///< Map
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ITEMCOMBINE, 412, 261, ///< ItemCombine
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SHOP, 35, 135, ///< Shop
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_STORE_CLIENT, 35, 95, ///< Store
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_STORAGE, 518, 367, ///< Storage
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_PARTY, 0, 350, ///< Party
// SIMSG_TOGGLE_UIWINDOW::UIWINDOW_EQUIPMENT, 300, 108, ///< Equipment // 장비창. bintitle. 2010.10.07.
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_EQUIPMENT, 280, 108, ///< Equipment // 장비창. servantes. 2010.12.10.
-1, -1, -1, ///< NONE_MOVE_WIN
//---------------------------------------------------------------------------------------------- 윈도우 움직이는 설정관련 ↑
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SYSTEM, -1, -1, ///< System
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SKILLFUND, -1, -1, ///< SkillFund
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_SHOPKART, -1, -1, ///< ShopKart
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_STORAGEKART, -1, -1, ///< StorageKart
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATUREFORM, -1, -1, ///< CraetureForm
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_DETAIL, -1, -1, ///< CratureDetail
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CREATURE_SKILLFUND, -1, -1, ///< CreatureSkillFund
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_QUEST_INFO, -1, -1, ///< QuestInfo
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_QUEST_REWARD, -1, -1, ///< QuestReward
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_CASH_STORAGE, -1, -1, ///< CashStorage
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DUNGEON_STONE, -1, -1, ///< DungeonStone
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DUNGEON_UNIT, -1, -1, ///< DungeonUnit
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DUNGEON_UNIT_MINI, -1, -1, ///< DungeonUnitMini // 공대창 미니 2011. 10. 10 - marine
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_DUNGEON_UNIT_INVITATION, -1, -1, ///< DungeonUnitMini // 공대 초대창 2011. 10. 20 - marine
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_GUILD_MEMBER_LIST, -1, -1, ///< GuildMemberList // 2011. 10. 26 - marine
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_TITLE_MAIN, -1, -1, // Title // 2012. 4. 4 - marine 호칭
SIMSG_TOGGLE_UIWINDOW::UIWINDOW_TITLE_GAIN_RESULT, -1, -1, // 타이틀 획득 알림
-1, -1, -1, ///< ADD_ALPHA_WIN
//---------------------------------------------------------------------------------------------- 알파 처리 관련 ↑
0, -1, -1, ///< SysMenu
0, -1, -1, ///< Option
};
// 게임 환경 옵션 관련 ===================================================
const int MaxBrightPower = 5;
const int MaxBakGrondDis = 5;
const int MaxCharDis = 4;
const int MaxTextureQuality = 3;
const int MaxBackSound = 10;
const int MaxEffectSound = 10;
const int MaxEnvSound = 10;
// 배경 표시거리 세트
const int LandDis[5] = {1,1,2,3,4};
const int PropDis[5] = {1,2,3,4,4};
const int TreeDis[5] = {1,3,4,4,4};
const int GraseDis[5] = {0,1,2,3,3};
const int TreeQuality[5] = {1,3,3,4,4};
// 택스처 품질 세트에 따른 고급 리소스 옵션 / 셀프 쉐도우 품질
const int RscQuality[3] = {0,1,1};
const int SlfeShadowQuality[3] = {0,1,2};
//=========================================================================
//게임 플레이 옵션 관련 ===================================================
const int MaxTapCase = 2;
const int MaxWinAlpha = 5;
const int MaxWeatherQuality = 4;
const float AlphaLevel[5] = {1.0f, 0.9f, 0.7f , 0.5f ,0.4f};
//=========================================================================
};
struct _OPT_DATA
{
_OPT_DATA()
{
nPresetOption = nResolution_Width = nResolution_Height = nRefreshRate = nWinMode = nBright = nWinBright = -1;
nBackGrondDis = nTerrainDis = nPropDis = nSpeedDis = nGrassDis = nSpeedQual = nAvatarDis = nShadowDis = -1;
nMipBias = nResourceQual = nSelfShadowQual = nGlowQual = nWaterQual = nLowShadow = -1;
nTreeAlpha = nEnhance = nStateEffect = nStateEffectPlayer = nStateEffectParty = nStateEffectEnemy = nShadow = -1;
// nAllMute = nRepeat = nBGM_Volume = nSFX_Volume = nBGM_Mute = nSFX_Mute = nLightMap = nRenderGrass = nRenderGrass = -1;
nAllMute = nBGM_Volume = nSFX_Volume = nBGM_Mute = nSFX_Mute = nLightMap = nRenderGrass = nRenderGrass = -1;// 2011.11.29 - servantes : 옵션 nui에 해당 효과 없음 / nRepeat 삭제
nEffect = nEffectPlayer = nEffectParty = nEffectEnemy = -1;
nResolution_OldWidth = nResolution_OldHeight = -1; //servantes 2010.11.26
nFullWinMode = 0; // 전체 창 모드 kkr
nFaceAni = 0;
nWeatherQuality = 3; ///< [sonador] 2007.05.30 날씨 효과 옵션 초기화
nCameraCollision = 1;
nTABKey = nEnterChat = nChipAttack = nTrade = nPVP = nWheel = nChatHide = nMobFace = nChatBalloon = nTip = nAutoTarget = -1;
// 2010.05.20 - prodongi
/*nHelm = */nMantle = nHPGage = nPlayerGage = nMobGage = nTargetGage = nName = nPlayerName = nCreatureName = -1;
nMobName = nNPCName = ndamage = nPlayerDM = nCreatureDM = nPartyDM = nWinLock = nWinAlpha = -1;
nSelfBoothType = 1;
nTownLimit = 0;
nCriticalCamera = 1;
//nAvatarDeco = 1;
nLobby_Theme = -1;
nRenderOtherPlayer = 0;
nTitleShow = 0;
isShowSelectOutLine = 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 게임 환경 관련 옵션
int nPresetOption; ///< 프리셋 모드 (0 이면 유저 세팅)
int nResolution_Width; ///< 해상도 가로
int nResolution_Height; ///< 해상도 세로
int nResolution_OldWidth; ///< 해상도 가로 servantes 2010.11.26
int nResolution_OldHeight; ///< 해상도 세로
int nRefreshRate; ///< 화면 재생 빈도
int nWinMode; ///< Full, Window
int nFullWinMode; ///< 전체창모드 kkr
int nBright; ///< 화면 밝기
int nWinBright; ///< 바탕화면 밝기 적용
int nBackGrondDis; ///< 배경 표시거리
int nTerrainDis; ///< 지면 표시거리
int nPropDis; ///< 구조물 표시거리
int nSpeedDis; ///< 나무 표시거리
int nGrassDis; ///< 풀 표시거리
int nSpeedQual; ///< 나무 품질
int nAvatarDis; ///< 캐릭터 표시거리
int nShadowDis; ///< 그림자 표시거리
int nMipBias; ///< 텍스쳐 밉바이어스
int nResourceQual; ///< 리소스 품질
int nSelfShadowQual; ///< 셀프 그림자 품질
int nGlowQual; ///< Glow 품질
int nWaterQual; ///< 물 반사 효과
int nLowShadow; ///< 저사양 그림자
int nTownLimit; ///< 마을에서 프랍거리 제한이 자동으로 설정
int nTreeAlpha; ///< 나무 알파처리(투명화)
int nEnhance; ///< 강화 효과 표시
int nStateEffect; ///< 지속효과 표시
int nStateEffectPlayer; ///< 지속효과 표시(자신과 크리처)
int nStateEffectParty; ///< 지속효과 표시(파티)
int nStateEffectEnemy; ///< 지속효과 표시(적)
int nShadow; ///< 그림자 표시
int nAllMute; ///< 전체 음소거
// int nRepeat; ///< 현재음 반복 // 2011.11.29 - servantes : 옵션 nui에 해당 효과 없음 / 주석처리
int nBGM_Volume; ///< 배경음 볼륨
int nSFX_Volume; ///< 효과음 볼륨
int nENVS_Volume; ///< 환경음 볼륨
int nMASTER_Volume; ///< 전체음 볼륨
int nBGM_Mute; ///< 배경음 소거
int nSFX_Mute; ///< 효과음 소거
int nENVS_Mute; ///< 환경음 소거
int nLightMap; ///< LightMap
int nRenderTree; ///< nRenderTree
int nRenderGrass; ///< nRenderGrass
int nEffect; ///< 이펙트 표시
int nEffectPlayer; ///< 이펙트 표시(자신과 크리처)
int nEffectParty; ///< 이펙트 표시(파티)
int nEffectEnemy; ///< 이펙트 표시(적)
int nFaceAni; ///< 눈 깜빡임 표시
int nRenderOtherPlayer; ///< 자신외 다른 플레이어 렌더 표시
int nWeatherQuality; ///< [sonador] 2007.05.30 날씨효과 품질
int nCameraCollision; ///< 카메라 충돌 옵션
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 게임 플레이 관련 옵션
int nTABKey; ///< TAB키 설정
int nEnterChat; ///< 앤터체팅사용
int nChipAttack; ///< 포스칩 후 자동 공격
int nTrade; ///< 거래 및 초대 거절
int nPVP; ///< 대련신청_거부
int nWheel; ///< 휠방향_반전
int nChatHide; ///< 체팅창 자동숨김
int nMobFace; ///< 몬스터 페이스컷
int nSimpleRak; ///< 라크 랜더
int nChatBalloon; ///< 말풍선 표시
int nTip; ///< 게임팁 표시
// 2010.05.20 - prodongi
//int nHelm; ///< 투구 보이기
int nMantle; ///< 망토 보이기
int nHPGage; ///< 체력게이지 표시
int nPlayerGage; ///< 자신과 파티원
int nMobGage; ///< 몬스터
int nTargetGage; ///< 타겟
int nName; ///< 이름 표시
int nPlayerName; ///< 플레이어
int nCreatureName; ///< 크리처
int nMobName; ///< 몬스터
int nNPCName; ///< NPC
int ndamage; ///< 데미지 표시
int nPlayerDM; ///< 자신
int nCreatureDM; ///< 크리처
int nPartyDM; ///< 파티원
int nWinLock; ///< 현재윈도우장금
int nWinAlpha; ///< 윈도우 투명도 설정
int nSelfBoothType; ///< 상점 랜더링 관련
int nCriticalCamera; ///< 크리티칼 카메라 진동
//int nAvatarDeco; ///< 꾸미기 아이템 적용 // 2010.10.11. 게임플레이옵션에서 "꾸미기보이기" 제거.
int nAutoTarget;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 로비
int nLobby_Theme;
int nTitleShow;
int isShowSelectOutLine;
};
enum BOOTH_TYPE
{
RENDER_NONE_BOOTH = 0, ///< 상점모드 중일 때 랜더링을 전혀 안하겠다는 것
RENDER_SIMPLE_BOOTH, ///< 간단한 리소스 상점을 랜더
RENDER_DETAIL_BOOTH, ///< 기존의 상점 리소스로 랜더
RENDER_AVATAR_BOOTH, ///< 그냥 아바타로 랜더
};
struct DISP_MODE
{
UINT width;
UINT height;
std::vector< UINT > refreshrate_list;
};
class SINIManager
{
public:
SINIManager();
~SINIManager();
// attribute
public:
std::string m_strFile;
std::string m_strSection;
std::string m_strGlobalSection;
// operators
public:
bool IsLoading () { return ( m_strFile.size() > 0 ); };
bool LoadOptionFile ( const char* szFileName = "\\rappelz_v1.opt");
bool LoadOptionFilePath( const char* szFilePath );
void SetSection ( const char* szName ) { m_strSection = szName; };
bool SetValueInt ( std::string strkey, int nValue, bool bGlobal = false );
int GetValueInt ( std::string strKey, bool bGlobal = false );
bool SetValueString ( std::string strKey, std::string strValue, bool bGlobal = false );
void GetValueString ( std::string strKey, char* szBuf, bool bGlobal = false );
};
class SGameOption
{
public:
SGameOption();
~SGameOption();
public:
/// 캐릭별 저장 게임 월드에서 호출해 준다(캐릭이름) ======
void Load( const char* szName );
/// 각 모드별(그래픽/사운드/UI) 로 실시간 저장한다 =======
void Apply( int nMode );
void SetOptionData( int nMode );
/// 각 채팅 타입별 저장
void ChatOptionApply( int nTabType, std::string strValue );
void ChatOptionApply( int nTabType, bool * pCehck );
void InitChattinSet();
// attribute
public:
const _OPT_DATA & GetOptData() { return m_curData; }
const _OPT_DATA & GetDefOptData() { return m_defData; }
void GetDefPlayOptData(_OPT_DATA & data);
void SettingForMinimumSystem();
void SettingForMaximumSystem();
enum {
PRESET_LOWEST = 1,
PRESET_LOW,
PRESET_MID,
PRESET_HIGH,
PRESET_HIGHEST
};
bool GetPresetOptData( int level, _OPT_DATA& data );
void SetOptData( _OPT_DATA & optData ) { m_curData = optData; }
int GetResolution_Index( int nWidth, int nHeight );
bool CheckBoolValue( int nValue, bool bDefaultValue );
int CheckIntValue( int nValue, int bDefaultValue );
//Get-------------------------------------------
int GetPresetOption() const { return m_curData.nPresetOption; };
int GetResolution_Width() const { return m_curData.nResolution_Width; } ///< 해상도 가로
int GetResolution_Height() const { return m_curData.nResolution_Height; } ///< 해상도 세로
int GetResolution_OldWidth() const { return m_curData.nResolution_OldWidth; } ///< 해상도 가로 servantes 2010.11.26
int GetResolution_OldHeight() const { return m_curData.nResolution_OldHeight; } ///< 해상도 세로
int GetRefreshRate() const { return m_curData.nRefreshRate; }; ///< 화면 재생 빈도
int GetWinMode() const { return m_curData.nWinMode; }; ///< Full, Window
int GetFullWindowMode() const { return m_curData.nFullWinMode; }; ///< 전체 창 모드 kkr
int GetTerrainViewDistance() const { return m_curData.nTerrainDis; }; ///< 지면 표시거리
int GetPropViewDistance() const { return m_curData.nPropDis; }; ///< 구조물 표시거리
int GetSpeedTreeViewDistance() const { return m_curData.nSpeedDis; }; ///< 나무 표시거리
int GetGrassViewDistance() const { return m_curData.nGrassDis; }; ///< 풀 표시거리
int GetAvatarViewDistance() const { return m_curData.nAvatarDis; }; ///< 캐릭터 표시거리
int GetShadowViewDistance() const { return m_curData.nShadowDis; }; ///< 그림자 표시거리
int GetSpeedTreeQuality() const { return m_curData.nSpeedQual; }; ///< 나무 품질
int GetTextureMipBias() const { return m_curData.nMipBias; }; ///< 텍스쳐 밉 바이어스
int GetSelfShadowQuality() const { return m_curData.nSelfShadowQual; }; ///< 셀프 쉐도우 품질
int GetGlowQuality() const { return m_curData.nGlowQual; }; ///< Glow 품질
int GetLowShadow() const { return m_curData.nLowShadow; }; ///< 저사양 그림자
int GetWaterQuality() const { return m_curData.nWaterQual; }; ///< 물 반사 효과
int GetResourceQuality() const { return m_curData.nResourceQual; }; ///< 리소스 품질
int GetBright() const { return m_curData.nBright; }; ///< 화면 밝기
int IsStateEffectRender() const { return m_curData.nStateEffect; }; ///< 지속효과 이펙트 랜더
int IsStatePlayerEftRend() const { return m_curData.nStateEffectPlayer; }; ///< 자신과 크리처 지속효과 이펙트 랜더
int IsStatePartyEftRend() const { return m_curData.nStateEffectParty; }; ///< 파티원 이펙트 랜더
int IsStateEnemyEftRend() const { return m_curData.nStateEffectEnemy; }; ///< 적 이펙트 랜더
int IsEnhanceRende() const { return m_curData.nEnhance; }; ///< 인첸된 아이템 강화효과 이펙트 랜더
int GetRenderTree() const { return m_curData.nRenderTree; }; ///< 나무 표시
int GetRenderGrass() const { return m_curData.nRenderGrass; }; ///< 풀 표시
int IsEffectRender() const { return m_curData.nEffect; }; ///< 이펙트 랜더
int IsPlayerEftRend() const { return m_curData.nEffectPlayer; }; ///< 자신과 크리처 이펙트 랜더
int IsPartyEftRend() const { return m_curData.nEffectParty; }; ///< 파티원 이펙트 랜더
int IsEnemyEftRend() const { return m_curData.nEffectEnemy; }; ///< 적 이펙트 랜더
int GetFaceAni() const { return m_curData.nFaceAni; };
int GetRenderOtherPlayerType() { return m_curData.nRenderOtherPlayer; }
int GetWeatherQuality() const { return m_curData.nWeatherQuality; }
int GetCameraCollision() const { return m_curData.nCameraCollision; }
int GetTitleNameShow() const { return m_curData.nTitleShow; }
bool NotifyTitle(int changeOpt);
bool isShowSelectOutLine() const { return m_curData.isShowSelectOutLine == 1; }
//Set-------------------------------------------
void SetPresetOption( int nPresetLevel ) { m_curData.nPresetOption = nPresetLevel; };
void SetResolution_Width( int nWidth ) { m_curData.nResolution_Width = nWidth; } ///< 해상도 가로
void SetResolution_Height( int nHeight ) { m_curData.nResolution_Height = nHeight; } ///< 해상도 세로
void SetResolution_OldWidth( int nWidth ) { m_curData.nResolution_OldWidth = nWidth; } ///< 해상도 가로 servantes 2010.11.26
void SetResolution_OldHeight( int nHeight ) { m_curData.nResolution_OldHeight = nHeight; } ///< 해상도 세로
void SetRefreshRate( int nLevel ) { m_curData.nRefreshRate = nLevel; }; ///< 화면 재생 빈도
void SetWinMode( int nLevel ) { m_curData.nWinMode = nLevel; }; ///< Full, Window
void SetFullWinMode( int nLevel ) { m_curData.nFullWinMode = nLevel; }; ///< 전체 창 모드 kkr
void SetTerrainViewDistance( int nLevel ) { m_curData.nTerrainDis = nLevel; }; ///< 지면 표시거리
void SetPropViewDistance( int nLevel ) { m_curData.nPropDis = nLevel; }; ///< 구조물 표시거리
void SetSpeedTreeViewDistance( int nLevel ) { m_curData.nSpeedDis = nLevel; }; ///< 나무 표시거리
void SetGrassViewDistance( int nLevel ) { m_curData.nGrassDis = nLevel; }; ///< 풀 표시거리
void SetAvatarViewDistance( int nLevel ) { m_curData.nAvatarDis = nLevel; }; ///< 캐릭터 표시거리
void SetShadowViewDistance( int nLevel ) { m_curData.nShadowDis = nLevel; }; ///< 그림자 표시거리
void SetSpeedTreeQuality( int nLevel ) { m_curData.nSpeedQual = nLevel; }; ///< 나무 품질
void SetTextureMipBias( int nLevel ) { m_curData.nMipBias = nLevel; }; ///< 텍스쳐 밉 바이어스
void SetSelfShadowQuality( int nLevel ) { m_curData.nSelfShadowQual = nLevel; }; ///< 셀프 쉐도우 품질
void SetGlowQuality( int nLevel ) { m_curData.nGlowQual = nLevel; }; ///< Glow 품질
void SetLowShadow( int nLevel ) { m_curData.nLowShadow = nLevel; }; ///< 저사양 그림자
void SetShadow( int nLevel ) { m_curData.nShadow = nLevel; };
void SetWaterQuality( int nLevel ) { m_curData.nWaterQual = nLevel; }; ///< 물 반사 효과
void SetResourceQuality( int nLevel ) { m_curData.nResourceQual = nLevel; }; ///< 리소스 품질
void SetBright( int nLevel ) { m_curData.nBright = nLevel; }; ///< 화면 밝기
void SetRenderTree( int nOn ) { m_curData.nRenderTree = nOn; }; ///< 나무 표시
void SetRenderGrass( int nOn ) { m_curData.nRenderGrass = nOn; }; ///< 풀 표시
void SetLight( int nOn ) { m_curData.nLightMap = nOn; }; ///< 라이트멥
void SetFaceAni( int nLevel ) { m_curData.nFaceAni = nLevel; };
// 사운드 ===================================
int GetBGM_Volume() const { return m_curData.nBGM_Volume; };
int GetSFX_Volume() const { return m_curData.nSFX_Volume; };
int GetENVS_Volume() const { return m_curData.nENVS_Volume; };
int GetMASTER_Volume() const { return m_curData.nMASTER_Volume; };
bool GetAll_Mute() const { return (m_curData.nAllMute == 1) ? true : false; };
bool GetBGM_Mute() const { return (m_curData.nBGM_Mute == 1) ? true : false; };
bool GetSFX_Mute() const { return (m_curData.nSFX_Mute == 1) ? true : false; };
bool GetENVS_Mute() const { return (m_curData.nENVS_Mute == 1) ? true : false; };
void SetBGM_Volum( int nLevel ) { m_curData.nBGM_Volume = nLevel; };
void SetSFX_Volum( int nLevel ) { m_curData.nSFX_Volume = nLevel; };
void SetAll_Mute( int nLevel ) { m_curData.nAllMute = nLevel; };
void SetBGM_Mute( int nLevel ) { m_curData.nBGM_Mute = nLevel; };
void SetSFX_Mute( int nLevel ) { m_curData.nSFX_Mute = nLevel; };
void SetRenderOtherPlayer( int nRender ){ m_curData.nRenderOtherPlayer = nRender; };
// 게임플레이 관련 ===================================
bool IsWinLock() const { return (m_curData.nWinLock == 1) ? true : false; }; ///< 윈도우 장금
bool IsChatHide() const { return (m_curData.nChatHide == 1) ? true : false; }; ///< 쳇팅창 숨김
bool IsMobFace() const { return (m_curData.nMobFace == 1) ? true : false; }; ///< 쳇팅창 숨김
bool IsEnterChat() const { return (m_curData.nEnterChat == 1) ? true : false; }; ///< 엔터 체팅
int GetTapKeyType() const { return m_curData.nTABKey; }; ///< 탭키 설정
// 2010.05.20 정보를 서버에서 관리함 - prodongi
//bool IsShowHelm() const { return (m_curData.nHelm == 1) ? true : false; }; ///< 투구 보이기
bool IsShowMantle() const { return (m_curData.nMantle == 1) ? true : false; }; ///< 망토 보이기
bool IsRejectTrade() const { return (m_curData.nTrade == 1) ? true : false; }; ///< 거래 및 초대 거절
bool IsRejectPVP() const { return (m_curData.nPVP == 1 ) ? true : false; }; ///< 대련신청_거부
bool IsInverseWheel() const { return (m_curData.nWheel == 1 ) ? true : false; }; ///< 휠방향_반전
bool IsDemageRender() const { return (m_curData.ndamage == 1) ? true : false; }; ///< 데미지 렌더
bool IsPlayerDmgRend() const { return (m_curData.nPlayerDM == 1) ? true : false; }; ///< 플레이어 데미미지 렌더
bool IsCratureDmgRend() const { return (m_curData.nCreatureDM == 1) ? true : false; }; ///< 크리처 데미지 렌더
bool IsPartyDmgRend() const { return (m_curData.nPartyDM == 1) ? true : false; }; ///< 파티원 데미지 렌더
bool GetWindAlpha() const { return (m_curData.nWinAlpha == 1) ? true : false; }; ///< 파티원 데미지 렌더
bool IsTreeRender() const { return (m_curData.nRenderTree == 1) ? true : false; }; ///< 나무 랜더
bool IsGrassRender() const { return (m_curData.nRenderGrass == 1) ? true : false; }; ///< 풀 랜더
bool IsLightMap() const { return (m_curData.nLightMap == 1) ? true : false; }; ///< 라이트맵
void SetLobbyTheme( int nLevel ) { m_curData.nLobby_Theme = nLevel; };
int GetLobbyTheme() const { return m_curData.nLobby_Theme; };
int IsDetailRak() const { return !m_curData.nSimpleRak; };
int GetBoothType() const { return m_curData.nSelfBoothType; };
void SetBoothRendType(int nType) { m_curData.nSelfBoothType = nType; };
int GetCriticalCamera() const { return m_curData.nCriticalCamera; };
void SetCriticalCamera(int nType) { m_curData.nCriticalCamera = nType; };
bool IsAutoTarget() const { return (m_curData.nAutoTarget == 1) ? true : false; }; ///< AutoTarget
void InvertAutoTarget() { m_curData.nAutoTarget = !m_curData.nAutoTarget; };
// int GetAvatarDeco() const { return m_curData.nAvatarDeco; }; // 2010.10.11. 게임플레이옵션에서 "꾸미기보이기" 제거.
// void SetAvatarDeco(int nType) { m_curData.nAvatarDeco = nType; }; // 2010.10.11. 게임플레이옵션에서 "꾸미기보이기" 제거.
//Game Content
int GetTownLimit() const { return m_curData.nTownLimit; };
void SetTownLimit( int nLevel ) { m_curData.nTownLimit = nLevel;};
//servantes 2010.11.02
bool GetOpenEquipWnd() const { return m_bOpenEquipWnd; };
void SetOpenEquipWnd(bool nValue);
/// 2011.02.16 - prodongi
bool GetUseRechargeMsgBox() const { return m_useRechargeMsgBox == 1 ? true : false; }
void SetUseRechargeMsgBox(bool use);
// UI =======================================
int GetMinimapAlpha() const { return m_nMinimapAlpha; };
bool IsMinimapOpen() const { return ( m_nMinimapOpen == 1 ? true : false ); };
void SetMinimapAlpha( int nLevel ) { m_nMinimapAlpha = nLevel; };
void SetMinimapOpen( bool bOpen ) { m_nMinimapOpen = ( bOpen ) ? 1 : 0; };
int GetFaceCut() const { return m_nFaceCut; };
int GetMinimap() const { return m_nMinimap; };
int GetZoom() const { return m_nZoom; };
void SetFaceCut( int nLevel ) { m_nFaceCut = nLevel; };
void SetMinimap( int nLevel ) { m_nMinimap = nLevel; };
void SetZoom( int nLevel ) { m_nZoom = nLevel; };
// 인터페이스 옵션 ===========================
int GetQuickVerX() const { return m_nQuickVerX; };
int GetQuickVerY() const { return m_nQuickVerY; };
int GetQuickHozX() const { return m_nQuickHozX; };
int GetQuickHozY() const { return m_nQuickHozY; };
bool IsVerticalQuick() const { return ( m_nVerticalQuick == 1 ? true : false ); };
int GetStateVerX() const { return m_nStateVerX; };
int GetStateVerY() const { return m_nStateVerY; };
int GetStateHozX() const { return m_nStateHozX; };
int GetStateHozY() const { return m_nStateHozY; };
bool IsVerticalState() const { return ( m_nVerticalState == 1 ? true : false ); };
int GetMessangerX() const { return m_nMessangerX; };
int GetMessangerY() const { return m_nMessangerY; };
bool IsMessangerOpen() const { return ( m_nMessangerOpen == 1 ? true : false ); };
bool IsCreatureOpen() const { return ( m_nCreatureOpen == 1 ? true : false ); };
int GetSysMenuX() const { return m_nSysMenuX; };
int GetSysMenuY() const { return m_nSysMenuY; };
int GetInventoryX() const { return m_nInventoryX; };
int GetInventoryY() const { return m_nInventoryY; };
int GetChattingLine() const { return m_nChattingLine; };
int GetChattingHeight() const { return m_nChattingHeight; };
int GetEquipmentX() const { return m_nPosEquipment.x; };
int GetEquipmentY() const { return m_nPosEquipment.y; };
///////////////////////////////////////////////////////////////////////////////////////////////
//추가 2006/3/10 이동표
int GetCreatureX() const { return m_nCreatureX; };
int GetCreatureY() const { return m_nCreatureY; };
int GetCreatureInfoX() const { return m_nCreatureInfoX; };
int GetCreatureInfoY() const { return m_nCreatureInfoY; };
int GetQuestX() const { return m_nQuestX; };
int GetQuestY() const { return m_nQuestY; };
int GetMotionX() const { return m_nMotionX; };
int GetMotionY() const { return m_nMotionY; };
int GetOptionX() const { return m_nOptionX; };
int GetOptionY() const { return m_nOptionY; };
int GetCharX() const { return m_nCharX; };
int GetCharY() const { return m_nCharY; };
int GetSkillX() const { return m_nSkillX; };
int GetSkillY() const { return m_nSkillY; };
int GetSystemX() const { return m_nSystemX; };
int GetSystemY() const { return m_nSystemY; };
int GetMapX() const { return m_nMapX; };
int GetMapY() const { return m_nMapY; };
int GetItemCombineX() const { return m_nItemCombineX; };
int GetItemCombineY() const { return m_nItemCombineY; };
int GetShopX() const { return m_nShopX; };
int GetShopY() const { return m_nShopY; };
int GetStoreX() const { return m_nStoreX; };
int GetStoreY() const { return m_nStoreY; };
int GetStorageX() const { return m_nStorageX; };
int GetStorageY() const { return m_nStorageY; };
int GetPartyX() const { return m_nPartyX; };
int GetPartyY() const { return m_nPartyY; };
///////////////////////////////////////////////////////////////////////////////////////////////
int GetCreatureSkillX() const { return m_nCreatureSkillX; };
int GetCreatureSkillY() const { return m_nCreatureSkillY; };
// void SetQuickVerX( int nValue ) ;
//void SetQuickVerY( int nValue ) ;
void SetQuickHozX( int nValue ) ;
void SetQuickHozY( int nValue ) ;
void SetVerticalQuick( int nVertical ) ;
//void SetStateVerX( int nValue ) ;
//void SetStateVerY( int nValue ) ;
void SetStateHozX( int nValue ) ;
void SetStateHozY( int nValue ) ;
void SetVerticalStat( int nVertical ) ;
void SetMessangerX( int nValue ) ;
void SetMessangerY( int nValue ) ;
void SetPartyX( int nValue ) ;
void SetPartyY( int nValue ) ;
void SetMessangerOpep( int nOpen ) ;
void SetCreatureOpen( int nOpen ) ;
void SetSysMenuX( int nValue ) ;
void SetSysMenuY( int nValue ) ;
void SetInventoryX( int nValue ) ;
void SetInventoryY( int nValue ) ;
void SetChattingLine( int nValue ) ;
void SetChattingHeight( int nValue ) ;
void SetEquipmentWndPos( KPoint & point ); // 장비창 위치. bintitle. 2010.10.07.
void SetEquipmentX(int nValue) { m_nPosEquipment.x = nValue; }; //servantes 2010.12.09
void SetEquipmentY(int nValue) { m_nPosEquipment.y = nValue; }; //servantes 2010.12.09
///////////////////////////////////////////////////////////////////////////////////////////////
//추가 2006/3/10 이동표
void SetCreatureX( int nValue );
void SetCreatureY( int nValue );
void SetCreatureInfoX( int nValue );
void SetCreatureInfoY( int nValue );
void SetQuestX( int nValue );
void SetQuestY( int nValue );
void SetMotionX( int nValue );
void SetMotionY( int nValue );
void SetOptionX( int nValue );
void SetOptionY( int nValue );
void SetCharX( int nValue );
void SetCharY( int nValue );
void SetSkillX( int nValue );
void SetSkillY( int nValue );
void SetSystemX( int nValue );
void SetSystemY( int nValue );
void SetMapX( int nValue );
void SetMapY( int nValue );
void SetItemCombineX( int nValue );
void SetItemCombineY( int nValue );
void SetShopX( int nValue );
void SetShopY( int nValue );
void SetStoreX( int nValue );
void SetStoreY( int nValue );
void SetStorageX( int nValue );
void SetStorageY( int nValue );
///////////////////////////////////////////////////////////////////////////////////////////////
void SetCreatureSkillX( int nValue );
void SetCreatureSkillY( int nValue );
bool IsChatOptionCheck( int nTabMode, int nIndex );
bool IsChattingOpen() const { return m_bChatOpen; };
void SetChattingOpen( bool bOpen ) { m_bChatOpen = bOpen; };
/// 크리처 정보창 열려있나없다
bool IsCreatureInfoOpen() const { return m_bIsCreatureInfo; };
void SetCreautreInfoOpen( bool bOpen ) { m_bIsCreatureInfo = bOpen; };
/// 채널명
bool SetChatTabName( int nIndex, const char* szTabName );
const char* GetChatTabName( int nIndex );
/// 채널 마크
bool SGameOption::SetChatTabMark( int nIndex, const char* szTabMark );
const char* SGameOption::GetChatTabMark( int nIndex );
/// 파뤼/길드 선택 : 게임 내에서
void SetMessengerType( int nType );
int GetMessengerType() { return m_nMessengerType; };
/// Local System Info
void AddDispMode( UINT width, UINT height, UINT refreshrate );
const std::vector< DISP_MODE > & GetDispMode() { return m_distMode; }
void SetCurrentRefreshRate( UINT refreshrate ) { m_curRefreshRate = refreshrate; }
const unsigned int GetCurrentRefreshRate() { return m_curRefreshRate; }
void SetPhysicalMemSize( unsigned int nMemSize ) { m_MemSize = nMemSize; }
const unsigned int GetPhysicalMemSize() { return m_MemSize; }
void SetUIPosDefault();
protected:
void SetCheckStr( bool * pCehck, char * pStr );
void SetEnvironmenteDefault( _OPT_DATA& data ); ///< 기본값 설정(게임 환경)
void SetPlayDataDefault( _OPT_DATA& data ); ///< 기본값 설정(게임 플레이)
void Save();
/// 종료시에 모두 저장한다 =====================
void Destroy();
/// 캐릭별로 저장하지 않는 옵션(그래픽옵션) 은 생성자에서 로드 ===
void OptionDataBind();
void SetCrrOptionData();
void Init();
protected:
_OPT_DATA m_defData; ///< 기본 데이타
_OPT_DATA m_curData; ///< 현재 상태
std::vector< DISP_MODE > m_distMode;
unsigned int m_curRefreshRate;
unsigned int m_MemSize; ///< Physical Memory Size
// UI ============
int m_nMinimapAlpha;
int m_nMinimapOpen;
int m_nFaceCut;
int m_nMinimap;
int m_nZoom;
int m_nMessengerType;
bool m_bIsCreatureInfo;
// 인터페이스 위치 =======
int m_nQuickVerX;
int m_nQuickVerY;
int m_nQuickHozX;
int m_nQuickHozY;
int m_nVerticalQuick;
int m_nStateVerX;
int m_nStateVerY;
int m_nStateHozX;
int m_nStateHozY;
int m_nVerticalState;
int m_nMessangerX;
int m_nMessangerY;
int m_nMessangerOpen;
int m_nPartyX;
int m_nPartyY;
int m_nCreatureOpen;
int m_nSysMenuX;
int m_nSysMenuY;
int m_nInventoryX;
int m_nInventoryY;
int m_nChattingLine;
int m_nChattingHeight;
//추가 2006/3/10 이동표
int m_nCreatureX;
int m_nCreatureY;
int m_nCreatureInfoX;
int m_nCreatureInfoY;
int m_nQuestX;
int m_nQuestY;
int m_nMotionX;
int m_nMotionY;
int m_nOptionX;
int m_nOptionY;
int m_nCharX;
int m_nCharY;
int m_nSkillX;
int m_nSkillY;
int m_nSystemX;
int m_nSystemY;
int m_nMapX;
int m_nMapY;
int m_nItemCombineX;
int m_nItemCombineY;
int m_nShopX;
int m_nShopY;
int m_nStoreX;
int m_nStoreY;
int m_nStorageX;
int m_nStorageY;
KPoint m_nPosEquipment; // 장비창 위치. bintitle. 2010.10.07.
bool m_bChannelCheck[SGAME_OPT_DATA::c_nMaxChannel][SGAME_OPT_DATA::c_nMaxChatOption]; ///< 채팅 옵션
std::string m_strTabName[SGAME_OPT_DATA::c_nMaxChannel]; ///< 채팅 채널명
std::string m_strTabMark[SGAME_OPT_DATA::c_nMaxChannel];
bool m_bChatOpen;
//추가 2009.11.27. sfreer
int m_nCreatureSkillX;
int m_nCreatureSkillY;
bool m_bOpenEquipWnd; //servantes 2010.11.02
int m_useRechargeMsgBox; /// 2011.02.16 충전 확인창 사용 유무 - prodongi
private:
std::string m_strName; ///< 캐릭 이름
SINIManager m_OptionManager; ///< INI Manager
};
SGameOption & GetGameOption();
class SLocaleOption
{
public:
SLocaleOption();
~SLocaleOption();
bool LoadOptionFile(const char *filename);
// 2010.06.29 Parse data directly from the file in memory - prodongi
bool parsingOptionFile(const char* filename);
int GetValueInt ( std::string strKey,int bDefaultValue);
const char *GetValueString ( std::string strKey, const char *defaultstr);
private:
SINIManager m_OptionManager; ///< INI Manager
std::map<std::string, std::string> m_StrMap;
std::map<std::string, int> m_IntMap;
void LoadValueString(const char *key);
void LoadValueInt(const char *key);
// 2010.06.29 - prodongi
void parsingValueString(char const* key, char const* data, char* value);
void parsingValueInt(char const* key, char const* data, char* value);
bool parsingValue(char const* key, char const* data, char* value);
bool pickupValue(char const* data, char const* startToken, char endToken, char* value);
// 2010.09.01 - prodongi
void parsingBigSmallValueString(char const* bigKey, char const* smallKey, char const* data, char* value);
void parsingBigSmallValueInt(char const* bigKey, char const* smallKey, char const* data, char* value);
// 2010.08.26 - prodongi
template <class T> bool isValue(T const& keyList, std::string const& key)
{
return keyList.find(key) != keyList.end();
}
template <class T, class KEY> void copyValue(T& keyList, KEY const& src, KEY const& dest)
{
if (!isValue(keyList, src))
return ;
keyList[dest] = keyList[src];
}
void SetExceptionalCodePage();
};
SLocaleOption &GetLocaleOption();