bool MAgentConfig::LoadFromXML(const char* pszFileName) { MXmlDocument xmlConfig; MXmlElement parentElement, childElement; MXmlElement serverElement; xmlConfig.Create(); if (!xmlConfig.LoadFromFile(pszFileName)) { xmlConfig.Destroy(); return false; } parentElement = xmlConfig.GetDocumentElement(); int iCount = parentElement.GetChildNodeCount(); if (!parentElement.IsEmpty()) { if (parentElement.FindChildNode(ATOK_AGENTCONFIG, &serverElement)) { serverElement.GetChildContents(m_szName, ATOK_NAME); serverElement.GetChildContents(&m_nMaxClient, ATOK_MAXCLIENT); if (serverElement.FindChildNode(ATOK_ADDRESS, &childElement)) { childElement.GetAttribute(m_szIP, ATOK_ATTR_IP); childElement.GetAttribute(&m_nTCPPort, ATOK_ATTR_TCPPORT); childElement.GetAttribute(&m_nUDPPort, ATOK_ATTR_UDPPORT); } if (serverElement.FindChildNode(ATOK_MATCHSERVERADDRESS, &childElement)){ childElement.GetAttribute(m_szMatchServerIP, ATOK_ATTR_IP); childElement.GetAttribute(&m_nMatchServerTCPPort, ATOK_ATTR_TCPPORT); } } } xmlConfig.Destroy(); return true; }
bool ZConfiguration::LoadConfig(const char* szFileName) { MXmlDocument xmlConfig; MXmlElement parentElement, serverElement, bindsElement; MXmlElement childElement; mlog( "Load Config from file : %s", szFileName ); xmlConfig.Create(); if (!xmlConfig.LoadFromFile(szFileName)) { mlog( "- FAIL\n"); xmlConfig.Destroy(); return false; } mlog( "- SUCCESS\n"); parentElement = xmlConfig.GetDocumentElement(); int iCount = parentElement.GetChildNodeCount(); if (!parentElement.IsEmpty()) { if (parentElement.FindChildNode( ZTOK_SERVER, &serverElement)) { serverElement.GetChildContents( m_szServerIP, ZTOK_IP); serverElement.GetChildContents( &m_nServerPort, ZTOK_PORT); } if (parentElement.FindChildNode(ZTOK_VIDEO, &childElement)) { childElement.GetChildContents(&m_Video.nWidth, ZTOK_VIDEO_WIDTH); childElement.GetChildContents(&m_Video.nHeight, ZTOK_VIDEO_HEIGHT); childElement.GetChildContents(&m_Video.nColorBits, ZTOK_VIDEO_COLORBITS); childElement.GetChildContents(&m_Video.bFullScreen, ZTOK_VIDEO_FULLSCREEN); childElement.GetChildContents(&m_Video.nGamma, ZTOK_VIDEO_GAMMA); childElement.GetChildContents(&m_Video.bReflection, ZTOK_VIDEO_REFLECTION ); childElement.GetChildContents(&m_Video.bLightMap, ZTOK_VIDEO_LIGHTMAP ); childElement.GetChildContents(&m_Video.bDynamicLight, ZTOK_VIDEO_DYNAMICLIGHT ); childElement.GetChildContents(&m_Video.bShader, ZTOK_VIDEO_SHADER ); childElement.GetChildContents(&m_Video.nCharTexLevel, ZTOK_VIDEO_CHARTEXLEVEL ); childElement.GetChildContents(&m_Video.nMapTexLevel, ZTOK_VIDEO_MAPTEXLEVEL ); RBspObject::SetTextureRenderOnOff(m_Video.nMapTexLevel != 7); childElement.GetChildContents(&m_Video.nEffectLevel, ZTOK_VIDEO_EFFECTLEVEL ); childElement.GetChildContents(&m_Video.nTextureFormat, ZTOK_VIDEO_TEXTUREFORMAT ); childElement.GetChildContents(&m_Video.bTerrible, "NHARDWARETNL"); childElement.GetChildContents(&m_MovingPicture.iResolution, ZTOK_MOVINGPICTURE_RESOLUTION ); childElement.GetChildContents(&m_MovingPicture.iFileSize, ZTOK_MOVINGPICTURE_FILESIZE ); } if (parentElement.FindChildNode(ZTOK_AUDIO, &childElement)) { childElement.GetChildContents(&m_Audio.bBGMEnabled, ZTOK_AUDIO_BGM_ENABLED); childElement.GetChildContents(&m_Audio.fBGMVolume, ZTOK_AUDIO_BGM_VOLUME); childElement.GetChildContents(&m_Audio.fEffectVolume, ZTOK_AUDIO_EFFECT_VOLUME); childElement.GetChildContents(&m_Audio.bBGMMute, ZTOK_AUDIO_BGM_MUTE); childElement.GetChildContents(&m_Audio.bEffectMute, ZTOK_AUDIO_EFFECT_MUTE); childElement.GetChildContents(&m_Audio.b8BitSound, ZTOK_AUDIO_8BITSOUND); childElement.GetChildContents(&m_Audio.bInverse, ZTOK_AUDIO_INVERSE); childElement.GetChildContents(&m_Audio.bHWMixing, ZTOK_AUDIO_HWMIXING); childElement.GetChildContents(&m_Audio.bHitSound, ZTOK_AUDIO_HITSOUND); childElement.GetChildContents(&m_Audio.bNarrationSound, ZTOK_AUDIO_NARRATIONSOUND); childElement.GetChildContents( &m_Audio.bCustomMusic, ZTOK_AUDIO_CUSTOMMUSIC ); //childElement.GetChildContents(&m_Audio.b3DSound, ZTOK_AUDIO_3D_SOUND); m_Audio.b3DSound = true; } if (parentElement.FindChildNode(ZTOK_MOUSE, &childElement)) { childElement.GetChildContents(&m_Mouse.fSensitivity, ZTOK_MOUSE_SENSITIVITY); childElement.GetChildContents(&m_Mouse.bInvert, ZTOK_MOUSE_INVERT); } if (parentElement.FindChildNode(ZTOK_JOYSTICK, &childElement)) { childElement.GetChildContents(&m_Joystick.fSensitivity, ZTOK_JOYSTICK_SENSITIVITY); childElement.GetChildContents(&m_Joystick.bInvert, ZTOK_JOYSTICK_INVERT); } if (parentElement.FindChildNode(ZTOK_KEYBOARD, &childElement)) { for(int i=0; i<ZACTION_COUNT; i++){ char szItemName[256]; strcpy(szItemName, m_Keyboard.ActionKeys[i].szName); _strupr(szItemName); MXmlNode keyNode; if (childElement.FindChildNode(szItemName, &keyNode)) { MXmlElement actionKeyElement = keyNode; const int ID_UNDEFINED = -2; int nKey; actionKeyElement.GetAttribute(&nKey,"alt",ID_UNDEFINED); // "alt"에 값이 없다면 ID_UNDEFINED 를 세팅 if(nKey!=ID_UNDEFINED) // "alt"에 값이 없다면 스킵 m_Keyboard.ActionKeys[i].nVirtualKeyAlt = nKey; actionKeyElement.GetContents(&m_Keyboard.ActionKeys[i].nVirtualKey); } } } if( parentElement.FindChildNode(ZTOK_MACRO, &childElement) ) { //char buf[8][256]; //childElement.GetChildContents(buf[0], ZTOK_MACRO_F1, 255); //childElement.GetChildContents(buf[1], ZTOK_MACRO_F2, 255); //childElement.GetChildContents(buf[2], ZTOK_MACRO_F3, 255); //childElement.GetChildContents(buf[3], ZTOK_MACRO_F4, 255); //childElement.GetChildContents(buf[4], ZTOK_MACRO_F5, 255); //childElement.GetChildContents(buf[5], ZTOK_MACRO_F6, 255); //childElement.GetChildContents(buf[6], ZTOK_MACRO_F7, 255); //childElement.GetChildContents(buf[7], ZTOK_MACRO_F8, 255); //for (int i = 0; i < 8; i++) //{ // strcpy(m_Macro.szMacro[i], ZGetStringResManager()->GetStringFromXml(buf[i])); //} // 여기선 읽기만 함. // string.xml을 읽은 후 다시 컨버팅 함. // config.xml에 있는 lcale정보로 string.xml의 국가를 결정하기 때문에 이 부분은 바로 처리할 수 없음. childElement.GetChildContents(m_Macro.szMacro[0], ZTOK_MACRO_F1, 255); childElement.GetChildContents(m_Macro.szMacro[1], ZTOK_MACRO_F2, 255); childElement.GetChildContents(m_Macro.szMacro[2], ZTOK_MACRO_F3, 255); childElement.GetChildContents(m_Macro.szMacro[3], ZTOK_MACRO_F4, 255); childElement.GetChildContents(m_Macro.szMacro[4], ZTOK_MACRO_F5, 255); childElement.GetChildContents(m_Macro.szMacro[5], ZTOK_MACRO_F6, 255); childElement.GetChildContents(m_Macro.szMacro[6], ZTOK_MACRO_F7, 255); childElement.GetChildContents(m_Macro.szMacro[7], ZTOK_MACRO_F8, 255); } if (parentElement.FindChildNode(ZTOK_ETC, &childElement)) { childElement.GetChildContents(&m_Etc.nNetworkPort1, ZTOK_ETC_NETWORKPORT1); childElement.GetChildContents(&m_Etc.nNetworkPort2, ZTOK_ETC_NETWORKPORT2); childElement.GetChildContents(&m_Etc.bBoost, ZTOK_ETC_BOOST); childElement.GetChildContents(&m_Etc.bRejectNormalChat, ZTOK_ETC_REJECT_NORMALCHAT); childElement.GetChildContents(&m_Etc.bRejectTeamChat, ZTOK_ETC_REJECT_TEAMCHAT); childElement.GetChildContents(&m_Etc.bRejectClanChat, ZTOK_ETC_REJECT_CLANCHAT); childElement.GetChildContents(&m_Etc.bRejectWhisper, ZTOK_ETC_REJECT_WHISPER); childElement.GetChildContents(&m_Etc.bRejectInvite, ZTOK_ETC_REJECT_INVITE); childElement.GetChildContents(&m_Etc.nCrossHair, ZTOK_ETC_CROSSHAIR); childElement.GetChildContents(&m_Etc.nFrameLimit_perSecond, ZTOK_ETC_FRAMELIMIT_PERSECOND); //m_Etc.szLanguage[0] = 0; #ifdef _MULTILANGUAGE #ifdef LOCALE_NHNUSA SetSelectedLanguageIndex( g_LanguageSettingForNHNUSA.GetLanguageSetting()); #else // 기본적으로는 게임내부 옵션에서 선택한 언어를 config에 저장했던 것을 로딩 childElement.GetChildContents( m_Etc.szLanguage, ZTOK_ETC_LANGUAGE, 32); #endif #endif //_MULTILANGUAGE } ValidateSelectedLanguage(); /* if (parentElement.FindChildNode(ZTOK_BINDS, &bindsElement)) { for(int i=0;i<bindsElement.GetChildNodeCount();i++) { char tagname[256]; MXmlElement bind=bindsElement.GetChildNode(i); bind.GetTagName(tagname); if(strcmp(tagname,ZTOK_BIND)==0) { char key[256],command[256]; int ctrl,alt,shift; bind.GetAttribute(key,ZTOK_KEY); bind.GetAttribute(&ctrl,ZTOK_KEY_CTRL); bind.GetAttribute(&alt,ZTOK_KEY_ALT); bind.GetAttribute(&shift,ZTOK_KEY_SHIFT); bind.GetContents(command); ZHOTKEY *photkey=new ZHOTKEY; photkey->nModifier=0; if(ctrl) photkey->nModifier|=MOD_CONTROL; if(alt) photkey->nModifier|=MOD_ALT; if(shift) photkey->nModifier|=MOD_SHIFT; photkey->nVirtKey=GetVirtKey(key); photkey->command=string(command); int nHotkeyID=MRegisterHotKey(photkey->nModifier,photkey->nVirtKey); m_HotKeys.insert(ZHOTKEYS::value_type(nHotkeyID,photkey)); } } } */ } //if( m_Video.bTerrible ) //{ // //m_Video.nCharTexLevel = 2; // //m_Video.nMapTexLevel = 2; // //m_Video.nEffectLevel = 2; // //m_Video.bDynamicLight = false; // //m_Video.bReflection = false; //} //else //{ // m_Video.bLightMap = false; // 최하위 버전이 아닐 경우 라이트 맵을 끄지 못한다 //} xmlConfig.Destroy(); return true; }
bool ZConfiguration::LoadLocale(const char* szFileName) { MXmlDocument xmlLocale; MXmlElement parentElement, serverElement, bindsElement; MXmlElement childElement; MXmlElement selectableLangsElem; char *buffer; MZFile mzFile; xmlLocale.Create(); if( !mzFile.Open(szFileName, ZApplication::GetFileSystem())) { xmlLocale.Destroy(); return false; } buffer = new char[ mzFile.GetLength()+1]; buffer[mzFile.GetLength()]=0; mzFile.Read( buffer, mzFile.GetLength()); mlog( "Load XML from memory : %s", szFileName); if( !xmlLocale.LoadFromMemory(buffer) ) { mlog( "- FAIL\n"); xmlLocale.Destroy(); return false; } delete[] buffer; mzFile.Close(); mlog( "- SUCCESS\n"); parentElement = xmlLocale.GetDocumentElement(); int iCount = parentElement.GetChildNodeCount(); if (!parentElement.IsEmpty()) { if( parentElement.FindChildNode(ZTOK_LOCALE, &childElement) ) { char szCountry[ 16 ] = ""; char szLanguage[ 16 ] = ""; //int nMaxPlayers = 16; int nMaxPlayers = 127; childElement.GetChildContents( szCountry, ZTOK_LOCALE_COUNTRY ); childElement.GetChildContents( szLanguage, ZTOK_LOCALE_LANGUAGE ); childElement.GetChildContents( &nMaxPlayers, ZTOK_LOCALE_MAXPLAYERS); if (childElement.FindChildNode(ZTOK_LOCALE_SELECTABLE_LANGUAGES, &selectableLangsElem)) ParseLocaleSelectableLanguages(selectableLangsElem); if( (0 == szCountry) || (0 == szLanguage) ) { mlog( "config.xml - Country or Language is invalid.\n" ); return false; } m_Locale.strCountry = szCountry; m_Locale.strDefaultLanguage = szLanguage; m_Locale.nMaxPlayers = nMaxPlayers; strcpy(m_Etc.szLanguage, szLanguage); mlog( "Country : KOR, Language : KOR\n", szCountry, szLanguage ); //mlog( "Country : (%s), Language : (%s)\n", szCountry, szLanguage ); } } xmlLocale.Destroy(); return true; }