Files
Sun1602/Client/GameClient/GameParameter.cpp
T
2022-10-26 12:25:11 +08:00

531 lines
18 KiB
C++

#include "SunClientPrecompiledHeader.h"
#include "OptionDialog.h"
#include "GlobalFunc.h"
CGameParameter::CGameParameter(void)
{
ZeroMemory( m_szFullPath, MAX_PATH );
ZeroMemory( m_szPackFileName, MAX_PATH );
ZeroMemory( m_szSettingFileNameForPack, MAX_PATH );
SetCetegoryName( "PARAM" );
}
CGameParameter::CGameParameter(LPCSTR filename)
{
SetSettingFileName( filename );
ZeroMemory( m_szPackFileName, MAX_PATH );
SetCetegoryName( "PARAM" );
}
CGameParameter::~CGameParameter(void)
{
// TODO : Release 함수를 만들어서 관리해야 함.
m_IntParam.m_Map.clear();
m_FloatParam.m_Map.clear();
m_StringParam.m_Map.clear();
}
void CGameParameter::SetSettingFileName( LPCSTR szSettingFileName )
{
if( szSettingFileName )
{
DWORD dwError = GetCurrentDirectoryA( 512, m_szFullPath );
if(0 == dwError)
{
assert(0);
}
strcat(m_szFullPath, "\\");
strcat(m_szFullPath, szSettingFileName); // 주어지는 파일 이름에 대한 풀 패스를 설정함
StrnCopy( m_szSettingFileNameForPack, szSettingFileName, MAX_PATH );
}
else
{
ZeroMemory( m_szFullPath, MAX_PATH );
}
}
void CGameParameter::SetPackFileName( LPCSTR szPackFileName )
{
if( szPackFileName )
strcpy( m_szPackFileName, szPackFileName );
else
ZeroMemory( m_szPackFileName, MAX_PATH );
}
void CGameParameter::SetCetegoryName( LPCSTR szCategoryName )
{
if( szCategoryName )
StrCopy( m_szCetegoryName, szCategoryName );
else
ZeroMemory( m_szCetegoryName, MAX_PATH );
}
LPCTSTR CGameParameter::SelectCetegoryName( LPCTSTR szCategoryName )
{
if( szCategoryName )
return szCategoryName;
else
{
return m_szCetegoryName;
}
}
int CGameParameter::ReadInt( LPCTSTR szKeyName, int nDefaultValue, LPCTSTR szCetegoryName )
{
util::_tstring szNumber;
TCHAR szDefaultValue[32];
Sprintf( szDefaultValue, _T("%d"), nDefaultValue );
Read( szNumber, szKeyName, szDefaultValue, szCetegoryName );
m_IntParam.m_Map[szKeyName] = (int)_tstof( (TCHAR *)szNumber.c_str() );
return m_IntParam.m_Map[szKeyName];
}
float CGameParameter::ReadFloat( LPCTSTR szKeyName, float fDefaultValue, LPCTSTR szCetegoryName )
{
util::_tstring szNumber;
TCHAR szDefaultValue[32];
Sprintf( szDefaultValue, _T("%f"), fDefaultValue );
Read( szNumber, szKeyName, szDefaultValue, szCetegoryName );
m_FloatParam.m_Map[szKeyName] = (float)_tstof( (TCHAR *)szNumber.c_str() );
return m_FloatParam.m_Map[szKeyName];
}
util::_tstring& CGameParameter::ReadString( LPCTSTR szKeyName, LPCTSTR szDefaultValue, LPCTSTR szCetegoryName )
{
Read( m_StringParam.m_Map[szKeyName], szKeyName, szDefaultValue, szCetegoryName );
return m_StringParam.m_Map[szKeyName];
}
void CGameParameter::Read( util::_tstring & szOutput, LPCTSTR szKeyName, LPCTSTR szDefaultValue, LPCTSTR szCetegoryName )
{
// set default value
if( szDefaultValue ) szOutput = szDefaultValue;
else szOutput.empty();
// read from pack
if(IsSystemPackFileName())
{
util::SolarFileReader sr;
BOOL bResult = sr.OpenFileFromPack(m_szPackFileName, m_szSettingFileNameForPack, SEPERATOR_WHITESPACE_ONLY_STRING);
if( !bResult )
return;
while( TRUE )
{
if ( TOKEN_END == sr.GetNextTokenType() )
break;
if( Strcmp( szKeyName, sr.GetTokenString() ) == 0 )
{
sr.GetNextTokenType(); sr.GetTokenString(); // =
sr.GetNextTokenType();
szOutput = sr.GetTokenString(); // real value
break;;
}
}
sr.CloseFile();
}
// read from unpack
else
{
TCHAR szTempBuffer[256];
GetPrivateProfileString( SelectCetegoryName( szCetegoryName ), szKeyName, szDefaultValue, szTempBuffer, 256, m_szFullPath );
szOutput = szTempBuffer;
}
}
BOOL CGameParameter::WriteInt( LPCTSTR szKeyName, int nValue, LPCTSTR szCetegoryName )
{
TCHAR szValue[MAX_PATH];
Sprintf( szValue, _T("%d"), nValue );
BOOL bRet = Write( szKeyName, szValue, szCetegoryName );
if( bRet )
m_IntParam.m_Map[szKeyName] = nValue;
return bRet;
}
BOOL CGameParameter::WriteFloat( LPCTSTR szKeyName, float fValue, LPCTSTR szCetegoryName )
{
TCHAR szValue[MAX_PATH];
Sprintf( szValue, _T("%f"), fValue );
BOOL bRet = Write( szKeyName, szValue, szCetegoryName );
if( bRet )
m_FloatParam.m_Map[szKeyName] = fValue;
return bRet;
}
BOOL CGameParameter::Write( LPCTSTR szKeyName, LPCTSTR szValue, LPCTSTR szCetegoryName )
{
if(IsSystemPackFileName())
{
assert( !"Pack File - Don't support write" );
return FALSE;
}
else
{
return WritePrivateProfileString( SelectCetegoryName( szCetegoryName ), szKeyName, szValue, m_szFullPath );
}
}
//=========================================================================================================
//=========================================================================================================
// GameParameter 들...
CGeneralGameParam::CGeneralGameParam()
{
}
void CGeneralGameParam::Load( void )
{
GlobalFunc::WriteLoadingTimeLog(_T("CGeneralGameParam::Load Start"));
DWORD dwStartTime = GlobalFunc::StartTimeCheck();
m_bNet = ReadInt(_T("NETWORK"), TRUE);
m_Start_MapID = ReadInt(_T("START_MAP_ID"), 10001);
m_Start_FieldID = ReadInt(_T("START_FIELD_ID"), 10001);
#ifdef _NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT
m_CharSelectMapID = ReadInt(_T("CHARACTER_SELECT_MAP"), 11002);
#else
m_CharSelectMapID = ReadInt(_T("CHARACTER_SELECT_MAP"), 11000);
#endif//_NA_005003_20120612_NEW_CHARACTER_MYSTIC_FOR_CLIENT
m_dwVillageMapID = ReadInt(_T("VILLAGE_MAP_ID"), 10001);
m_iStartTileIndex = ReadInt(_T("START_TILE_INDEX"), 0);
m_iShadowType = ReadInt(_T("SHADOW_TYPE"),1);
m_iCameraRotation = ReadInt(_T("CAMERA_ROTATION"),0);
m_iScreenShotMode = ReadInt(_T("SCREENSHOT_MODE"),FALSE);
float fTemp;
fTemp = ReadFloat(_T("CAMERA_TO_X"),0.0f);
m_vCameraTo.x = fTemp;
fTemp = ReadFloat(_T("CAMERA_TO_Y"),0.0f);
m_vCameraTo.y = fTemp;
fTemp = ReadFloat(_T("CAMERA_TO_Z"),0.0f);
m_vCameraTo.z = fTemp;
m_bInterpolatePosition = ReadInt(_T("INTERPOLATE_POSITION"),0);
m_bServerDebug = ReadInt(_T("SERVER_DEBUG"),0);
// 동영상 -----------------------------------------------
// 동영상 촬영용 프리 카메라 모드
m_iIsFreeCameraMode = ReadInt(_T("FREE_CAMERA_MODE"), FALSE);
// 동영상 촬영용 프리 카메라 제어 속도
m_fFreeCameraSpeed = ReadFloat(_T("FREE_CAMERA_SPEED"), 0.1f);
m_iFreeCameraTurnSpeed = ReadInt(_T("FREE_CAMERA_TURN_SPEED"), 2);
m_bFreeCameraState = FALSE;
m_szCinematicFileName = ReadString(_T("CINEMATIC_FILENAME"), NULL);
m_szCharacterSceneCinematicFileName = ReadString(_T("CHARACTER_CINEMATIC_FILENAME"), "");
#if _DEV_VER
int iSpecialMode = ReadInt(_T("SPECIAL_MODE"),0); // 개발버전에서만 SPECIAL_MODE 파라미터를 읽어오고
#else
int iSpecialMode = eSPECIAL_MODE_NONE; // 유저배포버전에서는 무조건 SPECIAL_MODE를 끄자.
#endif
m_eSpecialMode = (eSPECIAL_MODE)iSpecialMode;
if( m_eSpecialMode >= eSPECIAL_MODE_STEP1 )
{
// 스페셜 모드가 1보다 클경우 출력창에 로그 표시(개발자버전인경우)
m_bShowConsole = TRUE;
m_szConsoleSetting = "ERROR";
}
else
{
m_bShowConsole = FALSE;
m_szConsoleSetting = "ERRORR";
}
m_bUsePackFile = ReadInt(_T("USE_PACK_FILE"),0);
m_iMultiThreadLoading = ReadInt(_T("MULTI_THREAD_LOADING"),0);
m_bMoveNakProcess = ReadInt(_T("MOVE_NAK_PROCESS"), 1);
m_bStartLuaConsole = ReadInt(_T("START_LUA"),0);
m_engineRoot = ReadString(_T("ENGINE_ROOT"), NULL);
// 리소스 테스트 -----------------------------------------------
// TEST RESOURCE
m_bResourceTestScene = ReadInt(_T("TEST_RESOURCE_SCENE"), FALSE);
m_bTestGraphicResource = ReadInt(_T("TEST_RESOURCE_GRAPHIC_RESOURCE"), FALSE);
m_bTestMap = ReadInt(_T("TEST_RESOURCE_MAP"), FALSE);
m_bTestEffect = ReadInt(_T("TEST_RESOURCE_EFFECT"), FALSE);
m_bTestInterface = ReadInt(_T("TEST_RESOURCE_INTERFACE"), FALSE);
m_bTestRscFailedOnly = ReadInt(_T("TEST_RESOURCE_FAILED_ONLY_LOG"), FALSE);
// TEST_UI_SCENE
this->m_bTestUIScene = ReadInt(_T("TEST_UI_SCENE"), FALSE);
this->m_iTestUIScene_ExtID = ReadInt(_T("TEST_UI_SCENE_EXT"), 0);
#ifdef _DEV_VER
show_ui_name_ = !!(ReadInt(_T("SHOW_UI_NAME"), 0));//KeyWord:_DH_SHOW_UI_NAME
show_string_id_ = !!(ReadInt(_T("SHOW_STRING_ID"), 0));//KeyWord:_DEBUG_STRINGIDEX_SHOW
show_trigger_ = !!(ReadInt(_T("SHOW_TRIGGER"), 0));//define:_DH_TRIGGER_LOG_MESSAGE
show_item_id_ = !!(ReadInt(_T("SHOW_ITEM_ID"), 0));//define:_SCJ_SHOW_ITEM_ID
show_npc_id_ = !!(ReadInt(_T("SHOW_NPC_ID"), 0));//define:_SCJ_SHOW_NPC_ID
#endif//_DEV_VER
show_ssq_player_name_ = !!(ReadInt(_T("SSQ_PLAYER_NAME"), 0));//define:_NA_004756_120504_SHOW_SSQ_PLAYER_NAME
/////////////////////////////////////////////////////////////////////
// about game server
m_dwUserID = ReadInt(_T("USER_ID"), NULL);
//==============================================================================================
// 게임 공용 파라미터
this->m_iIntervalToWorldServerReconnect = 15000;
this->m_bSpringCamera=ReadInt(_T("SPRING_CAMERA_MODE"), FALSE);
m_springConst=ReadFloat(_T("SPRING_CONST"),0.709996f);
m_dampConst=ReadFloat(_T("SPRING_DAMP"),6.8f);
m_springLen=ReadFloat(_T("SPRING_LEN"),0.1f);
m_iGuildRankUpDisplayCount = ReadInt( _T("GUILD_RANKUP_DISPLAY_COUNT"), 6 );
m_bSoundLog = ReadInt(_T("MAKE_SOUND_LOG"),0);
m_fCameraDistance = ReadFloat(_T("CAMERA_DISTANCE"),10.0f);
m_fMaxCameraDistance = ReadFloat(_T("MAX_CAMERA_DISTANCE"),11.0f);
wings_down_jump_height_ = ReadFloat(_T("WINGS_DOWN_JUMP_HEIGHT"), 50.0f);
//크래쉬리포트 전송 타입
send_dump_type_ = ReadInt(_T("SEND_DUMP_TYPE"), 0);
//전장 다중 예약 허용
battle_ground_multi_reservation_ = ReadInt(_T("BATTLE_GROUND_MULTI_RESERVATION"), 0);
//------------------------------------------------------------------------------
//! 통합샵
//------------------------------------------------------------------------------
conveniencestore_connect_ip = ReadString(_T("CONNECT_IP"), _T(""));
conveniencestore_remote_path = ReadString(_T("REMOTE_PATH"), _T(""));
conveniencestore_port_num = ReadInt(_T("CONNECT_PORT"), 0);
conveniencestore_always_download= ReadInt(_T("ALWAYS_DOWNLOAD"), 0) != 0;
//------------------------------------------------------------------------------
#ifdef _DEV_VER
//==============================================================================================
// 개발모드 옵션을 위한 클라이언트 변수
m_bEnableAutoKill = false;
m_bEnableAutoCooltimeReset = false;
#endif
////==============================================================================================
GlobalFunc::EndTimeCheck(dwStartTime, true, _T("CGeneralGameParam::Load End"));
}
//=========================================================================================================
CClientInfoParam::CClientInfoParam()
{
}
CClientInfoParam::~CClientInfoParam()
{
}
void CClientInfoParam::Load( void )
{
GlobalFunc::WriteLoadingTimeLog(_T("CClientInfoParam::Load Start"));
DWORD dwStartTime = GlobalFunc::StartTimeCheck();
m_ClientVersion = ReadString( _T("VERSION"), _T("1.0"), _T( "GENERAL" ) );
GlobalFunc::EndTimeCheck(dwStartTime, true, _T("CClientInfoParam::Load End"));
}
//=========================================================================================================
//=========================================================================================================
CTestGameParam::CTestGameParam()
: CGameParameter("TEST.ini")
{
}
//=========================================================================================================
//=========================================================================================================
CGraphicParam::CGraphicParam()
{
}
CGraphicParam::~CGraphicParam()
{
}
void CGraphicParam::Load()
{
m_iLoadingText_StartPointX = ReadInt(_T("LOADTEXT_STARTPOINT_X") , 200 );
m_iLoadingText_StartPointY = ReadInt(_T("LOADTEXT_STARTPOINT_Y") , 300);
m_iLoadingText_CardOut = ReadInt(_T("LOADTEXT_CARDOUT") , 20);
m_iFogValue = ReadInt(_T("FOG_VALUE") , 10);
m_iBlurValue = ReadInt(_T("BLUR_VALUE") , 100);
m_fTerrain_Color_Rate = ReadFloat(_T("TERRAIN_COLOR_RATE") , 0.6f);
m_fPkFogBegin = ReadFloat(_T("PK_FOG_BEGINE"),10.0f);
m_fPkFogEnd = ReadFloat(_T("PK_FOG_END"),100.0f);
m_fPkFogRate = ReadFloat(_T("PK_FOG_RATE"),15.0f);
TCHAR szKeyWord[1024 + 1] = {0,};
for(int i = 0; i < MAX_CHARACTER_LIST_NUM; ++i)
{
Snprintf(szKeyWord, 1024, _T("CHARACTER_SELECT_SCENE_POSITION%dX"), i);
m_wvCharScenePos[i].x = ReadFloat(szKeyWord, 0.f);
Snprintf(szKeyWord, 1024, _T("CHARACTER_SELECT_SCENE_POSITION%dY"), i);
m_wvCharScenePos[i].y = ReadFloat(szKeyWord, 0.f);
Snprintf(szKeyWord, 1024, _T("CHARACTER_SELECT_SCENE_POSITION%dZ"), i);
m_wvCharScenePos[i].z = ReadFloat(szKeyWord, 0.f);
}
m_wcCharCreateSceneFogColor = WzColor_RGBA(ReadInt(_T("CHARACTER_CREATE_SCENE_FOG_COLORR"), 255),
ReadInt(_T("CHARACTER_CREATE_SCENE_FOG_COLORG"), 255),
ReadInt(_T("CHARACTER_CREATE_SCENE_FOG_COLORB"), 255),
255);
//------------------------------------------------------------------------------
//! _YMS_SMOOTH_GAUGE_
//! 게이지 속도 부드럽게
//const int kGaugeHpKindCount = 5;
//const int kGaugeStateKindCount = 2;
hero_gauge_velocity_[0][0] = ReadFloat(_T("HERO_RESERVEHP_VEL_STAND_1000"), 1.0f);
hero_gauge_velocity_[0][1] = ReadFloat(_T("HERO_RESERVEHP_VEL_STAND_2000"), 1.0f);
hero_gauge_velocity_[0][2] = ReadFloat(_T("HERO_RESERVEHP_VEL_STAND_3000"), 1.0f);
hero_gauge_velocity_[0][3] = ReadFloat(_T("HERO_RESERVEHP_VEL_STAND_4000"), 1.0f);
hero_gauge_velocity_[0][4] = ReadFloat(_T("HERO_RESERVEHP_VEL_STAND_5000"), 1.0f);
hero_gauge_velocity_[1][0] = ReadFloat(_T("HERO_RESERVEHP_VEL_SIT_1000"), 1.0f);
hero_gauge_velocity_[1][1] = ReadFloat(_T("HERO_RESERVEHP_VEL_SIT_2000"), 1.0f);
hero_gauge_velocity_[1][2] = ReadFloat(_T("HERO_RESERVEHP_VEL_SIT_3000"), 1.0f);
hero_gauge_velocity_[1][3] = ReadFloat(_T("HERO_RESERVEHP_VEL_SIT_4000"), 1.0f);
hero_gauge_velocity_[1][4] = ReadFloat(_T("HERO_RESERVEHP_VEL_SIT_5000"), 1.0f);
//! 날고 있을때 카메라 눈높이.
camera_eye_height_wings_spread_ = ReadFloat(_T("CAMERA_EYE_HEIGHT_WINGS_SPREAD"), 2.5f);
camera_eye_height_rider_spread_ = ReadFloat(_T("CAMERA_EYE_HEIGHT_RIDER_SPREAD"), 6.0f);
}
//------------------------------------------------------------------------------
float CGraphicParam::hero_gauge_velocity(DWORD max_hp, bool sit)
{
int state_kind = sit ? 1 : 0;
int hp_kind = 0;
if (max_hp < 1000) hp_kind = 0;
else if (max_hp < 2000) hp_kind = 1;
else if (max_hp < 3000) hp_kind = 2;
else if (max_hp < 4000) hp_kind = 3;
else hp_kind = 4;
return hero_gauge_velocity_[state_kind][hp_kind];
}
//=========================================================================================================
//=========================================================================================================
CProgramParam::CProgramParam()
{
is_sound_caching_ = true;
nation_type_ = kLanguageInvalid;
is_block_cash_shop_ = false;
}
CProgramParam::~CProgramParam()
{
}
void CProgramParam::Load()
{
m_bCheckBlockChatRepeat = ReadInt(_T("CHECK_CHAT_REPEAT") , TRUE);
m_iBlockChatRepeatTime = ReadInt(_T("BLOCK_CHAT_REPEAT_TIME"), 5000);
m_bEffectBatch = ReadInt(_T("EFFECTBATCH"),1);
m_iAutoEffectRate = ReadInt(_T("AUTO_EFFECT_RATE"),1); // 자동 이펙트 생성 비율 조절: 기본값은 활성화(1)
#ifdef _GS_ADD_BIGEVENT_MSG_1122
m_bBigEventTimer = ReadInt(_T("BIG_EVENT_TIMER"),0);
m_wBigEventQuestCode = ReadInt(_T("BIG_EVENT_QUEST_CODE"),0);
m_iBigEventStringCode = ReadInt(_T("BIG_EVENT_STRING_CODE"),0);
m_iBigEventDisplayTime = ReadInt(_T("BIG_EVENT_DISPLAY_TIME"),1000);
#endif//_GS_ADD_BIGEVENT_MSG_1122
m_NewServerSet.insert(ReadInt( _T("NEW_SERVER_ID1"), 0 ));
m_NewServerSet.insert(ReadInt( _T("NEW_SERVER_ID2"), 0 ));
m_NewServerSet.insert(ReadInt( _T("NEW_SERVER_ID3"), 0 ));
m_NewServerSet.insert(ReadInt( _T("NEW_SERVER_ID4"), 0 ));
m_NewServerSet.insert(ReadInt( _T("NEW_SERVER_ID5"), 0 ));
m_NewServerSet.erase(0);
m_IconWidth = ReadInt( _T("NEW_ICON_WIDTH"), 63 );
m_IconHeight = ReadInt( _T("NEW_ICON_HEIGHT"), 16 );
m_DominationChannel = ReadInt(_T("DOMINATION_CHANNEL"),1);
#ifdef _DEV_VER
search_frame_per_update_time_ = ReadInt(_T("SEARCH_FRAME_UPDATE_TIME"),100);
number_of_searching_per_a_frame_ = ReadInt(_T("NUMBER_OF_SEARCHING_PER_A_FRAME"),200);
#endif//_NA_0_20091208_VENDOR_ITEM_SEARCH
replace_string_ = ReadString(_T("REPLACE_WORD_FOR_SLANG"), "*");
replace_type_ = ReadInt(_T("REPLACE_TYPE_FOR_SLANG"), 0);
is_enable_perk_setting_ = (ReadInt(_T("ENABLE_PERK_SETTING_FREE"), 1) == 1) ? true : false;
is_sound_caching_ = (ReadInt(_T("SOUND_CACHING"), 1) != 0);
// 캐릭터 삭제대기 레벨(디폴트:40)
delete_level_for_wait_ = static_cast<DWORD>(ReadInt(_T("DELETE_LEVEL_FOR_WAIT"), 40));
int temp_type = ReadInt(_T("NATION_TYPE"), -1);
nation_type_ = static_cast<LanguageType>(temp_type);
int cashshop_block_value = ReadInt(_T("CASHSHOP_BLOCK"), 0);
is_block_cash_shop_ = (cashshop_block_value == 1) ? true : false;
}
//////////////////////////////////////////////////////////////////////////
//=========================================================================================================
CTimerParam::CTimerParam()
{
}
CTimerParam::~CTimerParam()
{
}
void CTimerParam::Load()
{
is_show_event_timer = ReadInt(_T("EVENT_TIMER") , FALSE);
max_event_time = ReadInt(_T("MAX_EVENT_TIME"), 1800);
show_tired_system = ReadInt(_T("TIRED_SYSTEM") , 1);
max_time_tired_system = ReadInt(_T("TIRED_TIME") , 720);
}