bool CCMatchLocale::PostLoginInfoToDBAgent(const CCUID& uidComm, const char* szCN, const char* szPW, bool bFreeLoginIP, unsigned long nChecksumPack, int nTotalUserCount) { // if (m_nCountry != CCC_JAPAN) { cclog( "country code is not JPN.\n" ); return false; } if (m_pDBAgentClient) { if (!m_pDBAgentClient->GetSock()->IsActive()) { if (!m_pDBAgentClient->IsConnected()) { cclog( "Retry connect to DBAgent.\n" ); ConnectToDBAgent(); return false; } } if (m_pDBAgentClient->IsConnected()) { m_pDBAgentClient->Send(uidComm, szCN, szPW, bFreeLoginIP, nChecksumPack, nTotalUserCount); return true; } cclog( "DBAgent not connect.\n" ); } cclog( "DBAgentClient NULL.\n" ); return false; }
int RMain(const char *AppName, HINSTANCE this_inst, HINSTANCE prev_inst, LPSTR cmdline, int cmdshow, RMODEPARAMS *pModeParams, WNDPROC winproc, WORD nIconResID ) { g_WinProc=winproc ? winproc : DefWindowProc; #ifdef _INDEPTH_DEBUG_ cclog("Creating window.\n"); #endif // make a window WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = sizeof(DWORD); wc.hInstance = this_inst; wc.hIcon = LoadIcon( this_inst, MAKEINTRESOURCE(nIconResID)); wc.hCursor = 0;//LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = NULL; wc.lpszMenuName = NULL; wc.lpszClassName = "RealSpace2"; if(!RegisterClass(&wc)) return FALSE; DWORD dwStyle = pModeParams->bFullScreen ? WS_POPUP | WS_SYSMENU : WS_POPUP | WS_CAPTION | WS_SYSMENU ; g_hWnd = CreateWindow( "RealSpace2", AppName , dwStyle, CW_USEDEFAULT, CW_USEDEFAULT, pModeParams->nWidth, pModeParams->nHeight, NULL, NULL, this_inst , NULL ); // initialize realspace2 RAdjustWindow(pModeParams); while(ShowCursor(false)>0); #ifdef _INDEPTH_DEBUG_ cclog("EXIT RMain()\n"); #endif return 0; }
int get_ca_ip(char *host, int type, const char *uri, struct in_addr * addr) { if(good_ip_num <= 0) { // if(init_host_ip_from_host(host)) if(init_ca_host_ip(host, type)) { cclog(1, "can not get ca ip for: %s", host); abort(); } } int i; int n = 0; while(1) { i = get_pos(uri); if(n++ == ip_num) break; if(host_ip[i].good_ip) { *addr = host_ip[i].m_addr; cclog(8, "get ca ip %s in pos: %d", inet_ntoa(*addr), i); } return 0; } return -1; }
bool CreateDirect3D9() { if (!g_pD3D) { g_hD3DLibrary = LoadLibrary( "d3d9.dll" ); if (!g_hD3DLibrary) { cclog("Error, could not load d3d9.dll"); return false; } typedef IDirect3D9 * (__stdcall *D3DCREATETYPE)(UINT); D3DCREATETYPE d3dCreate = (D3DCREATETYPE) GetProcAddress(g_hD3DLibrary, "Direct3DCreate9"); if (!d3dCreate) { cclog("Error, could not get proc adress of Direct3DCreate9."); return false; } //just like pID3D = Direct3DCreate9(D3D_SDK_VERSION); g_pD3D = (*d3dCreate)(D3D_SDK_VERSION); if (!g_pD3D) { cclog("Error initializing D3D."); return false; } }
static void get_name_real(char *host) { struct hostent *he; char ** p; struct in_addr addr; int i = 0; he = gethostbyname(host); p = he->h_addr_list; while(*p!=NULL) { addr.s_addr = *((unsigned int *)*p); cclog(3, "address is %s", inet_ntoa(addr)); host_ip[i].m_addr = addr; host_ip[i].good_ip = 1; ip_num++; good_ip_num++; p++; if(i++ == MAX_CA_IP) break; } cclog(3, "we get %d address for %s", ip_num, host); }
bool ZTips::Initialize(CCZFileSystem* pfs, const CCLanguage LangID ) { CCZFile mzf; if(!mzf.Open(FILENAME_TIPS,pfs)) return false; char *buffer; buffer=new char[mzf.GetLength()+1]; mzf.Read(buffer,mzf.GetLength()); buffer[mzf.GetLength()]=0; // LANGID LangID = LANG_KOREAN; /* Korean : 이거 정말 하드코딩 박기 싫었는디... 쩝... -_-;;; */ //#ifdef LOCALE_JAPAN // LangID = LANG_JAPANESE; /* Japanese */ //#elif LOCALE_US // LangID = LANG_ENGLISH; /* International */ //#elif LOCALE_BRAZIL // LangID = LANG_PORTUGUESE; /* Brazil */ //#elif LOCALE_INDIA // LangID = LANG_ENGLISH; /* India */ //#endif cclog( "Load XML from memory : %s(0x%04X)", FILENAME_TIPS, LangID); CCXmlDocument aXml; aXml.Create(); if(!aXml.LoadFromMemory(buffer, LangID)) { cclog( "- FAIL\n"); delete buffer; return false; } delete buffer; cclog( "- SUCCESS\n"); int iCount, i; CCXmlElement aParent, aChild; aParent = aXml.GetDocumentElement(); iCount = aParent.GetChildNodeCount(); char szTagName[256]=""; for (i = 0; i < iCount; i++) { aChild = aParent.GetChildNode(i); aChild.GetTagName(szTagName); if(stricmp(szTagName,ZTOK_TIPS)==0) { if (szTagName[0] == '#') continue; ParseTips(&aChild); } } return true; }
void dump_ca_host_ip() { if(ip_num <= 0) { cclog(0, "ca host ip num is <= 0 exit"); abort(); } int i; for(i = 0; i < ip_num; i++) cclog(1, inet_ntoa(host_ip[i].m_addr)?inet_ntoa(host_ip[i].m_addr):null_string); }
void _ZChangeGameState(int nIndex) { GunzState state = GunzState(nIndex); cclog("Setting GunzState to %d\n", state); if (ZApplication::GetGameInterface()) { ZApplication::GetGameInterface()->SetState(state); } }
////////////////////////////////////////////////////////////////////////// // SetLight ////////////////////////////////////////////////////////////////////////// bool RLenzFlare::SetLight( rvector& pos_ ) { if( miNumLight >= MAX_LENZFLARE_NUMBER ) { cclog("Can't Set Light...: Light Buffer for LenzFlare is Full already..\n" ); return false; } mLightList[miNumLight++] = pos_; return true; }
BOOL CALLBACK EnumLoadedModulesCallback(LPSTR pModuleName, ULONG ulModuleBase, ULONG ulModuleSize, PVOID pUserContext) { if (!g_pfnSymLoadModule((HANDLE)pUserContext, 0, pModuleName, 0, ulModuleBase, ulModuleSize)) { // ::MessageBox(NULL,"SymLoadModule failed","error",MB_OK); cclog("SymLoadModule failed %d ( module = %s ) \n",GetLastError(),pModuleName); return false; } return TRUE; }
void RFrame_Render() { if (!RIsActive() && RIsFullScreen()) return; RRESULT isOK=RIsReadyToRender(); if(isOK==R_NOTREADY) return; else if(isOK==R_RESTORED) { RMODEPARAMS ModeParams={ RGetScreenWidth(),RGetScreenHeight(),RIsFullScreen(),RGetPixelFormat() }; RResetDevice(&ModeParams); cclog("devices Restored. \n"); } if(timeGetTime() > g_last_mouse_move_time + RTOOLTIP_GAP) g_tool_tip = true; if(g_pFunctions[RF_RENDER]) g_pFunctions[RF_RENDER](NULL); RGetDevice()->SetStreamSource(0,NULL,0,0); RGetDevice()->SetIndices(0); RGetDevice()->SetTexture(0,NULL); RGetDevice()->SetTexture(1,NULL); // Draw FPS // 60fps 가 100점 /* char buf[256]; float fMs = 1000.f/g_fFPS; float fScore = 100-(fMs-(1000.f/60.f))*2; sprintf(buf, "FPS : %3.3f , %d triangles, %4.1f ms,score %4.1f 점",g_fFPS,gNumTrisRendered,fMs,fScore); RECT drawRect; SetRect(&drawRect, 0, 0, RGetScreenWidth(), RGetScreenHeight()); g_lpFont->DrawText(buf, -1, &drawRect, DT_LEFT | DT_TOP, D3DCOLOR_RGBA(255, 255, 255, 255)); // */ /* for(int i=0;i<CCGetLogHistoryCount();i++) { drawRect.top=(i+1)*20; g_lpFont->DrawText(CCGetLogHistory(i), -1, &drawRect, DT_LEFT | DT_TOP, D3DCOLOR_RGBA(255, 255, 255, 255)); } */ }
void RFrame_Destroy() { if(g_pFunctions[RF_DESTROY]) g_pFunctions[RF_DESTROY](NULL); cclog("Rframe_destory::closeDisplay\n"); RCloseDisplay(); #ifdef _USE_GDIPLUS Gdiplus::GdiplusShutdown(g_gdiplusToken); #endif }
bool ZGameOnJPAuthInfo::ParseVersion() { ZLocatorList* pLocatorList = ZGetConfiguration()->GetLocatorList(); if ( pLocatorList == NULL) return false; // Launch mode char szTestLaunch[ 64]; GetPrivateProfileString( "SERVER", "TESTLAUNCH", "FALSE", szTestLaunch, 64, VERSION_CONFIG_FILENAME ); if ( stricmp( szTestLaunch, "TRUE") == 0) m_bAlpha = true; #ifdef _DEBUG if ( m_bAlpha == true) cclog( "%s : Launch mode = Alpha\n", __FUNCTION__); else cclog( "%s : Launch mode = Real\n", __FUNCTION__); #else if ( m_bAlpha == true) cclog( "Alpha launch mode\n"); #endif // Server list int nCount = 0; nCount = GetPrivateProfileInt( "SERVER", "COUNT", 0, VERSION_CONFIG_FILENAME); if ( nCount == 0) { cclog( "ERROR : The count of locator is ZERO.\n"); ASSERT( 0); return false; } #ifdef _DEBUG cclog( "%s : Server count = %d\n", __FUNCTION__, nCount); #endif for ( int i = 0; i < nCount; i++) { char szKeyName[ 64]; sprintf( szKeyName, "IP%d", i + 1); char szIP[ 64]; GetPrivateProfileString( "SERVER", szKeyName, "", szIP, 64, VERSION_CONFIG_FILENAME ); pLocatorList->AddIP( szIP); #ifdef _DEBUG cclog( "%s : Server IP = %s\n", __FUNCTION__, szIP); #endif } return true; }
static int set_process_rlimit(void) { struct rlimit rlmt; /* no need anymore, was used for open masses of socket * in order to use valgrind */ return 0; getrlimit(RLIMIT_NOFILE, &rlmt); if (rlmt.rlim_max < FD_MAX) { rlmt.rlim_max = FD_MAX; rlmt.rlim_cur = rlmt.rlim_max; } else if (rlmt.rlim_cur < rlmt.rlim_max) { rlmt.rlim_cur = rlmt.rlim_max; } if (0 != setrlimit(RLIMIT_NOFILE, &rlmt)) { cclog(0, "set process resouce limit failed"); return -1; } cclog(0, "set rlim_cur = rlim_max: rlim_cur->%ld, rlim_max->%ld", rlmt.rlim_cur, rlmt.rlim_max); return 0; }
RRESULT OnDestroy(void *pParam) { cclog("Destroy gunz\n"); g_App.OnDestroy(); SAFE_DELETE(g_pDefFont); g_Core.Finalize(); cclog("interface finalize.\n"); SAFE_DELETE(g_pInput); g_DInput.Destroy(); cclog("game input destroy.\n"); // RGetShaderMgr()->Release(); ZGetConfiguration()->Destroy(); cclog("game gonfiguration destroy.\n"); delete g_pDC; struct _finddata_t c_file; intptr_t hFile; char szFileName[256]; #define FONT_DIR "Font/" #define FONT_EXT "ttf" if( (hFile = _findfirst(FONT_DIR"*."FONT_EXT, &c_file )) != -1L ){ do{ strcpy(szFileName, FONT_DIR); strcat(szFileName, c_file.name); RemoveFontResource(szFileName); }while( _findnext( hFile, &c_file ) == 0 ); _findclose(hFile); } CCFontManager::Destroy(); CCBitmapManager::Destroy(); CCBitmapManager::DestroyAniBitmap(); cclog("Bitmap manager destroy Animation bitmap.\n"); // ZBasicInfoItem::Release(); // ZGetStencilLight()->Destroy(); // LightSource::Release(); RBspObject::DestroyShadeMap(); RDestroyLenzFlare(); RAnimationFileMgr::GetInstance()->Destroy(); ZStringResManager::ResetInstance(); cclog("destroy gunz finish.\n"); return R_OK; }
int RRun() { if(g_pFunctions[RF_CREATE]) { if(g_pFunctions[RF_CREATE](NULL)!=R_OK) { RFrame_Destroy(); return -1; } } cclog("Init RFrame_Init().\n"); RFrame_Init(); // message loop // Now we're ready to recieve and process Windows messages. BOOL bGotMsg; MSG msg; // PeekMessage( &msg, NULL, 0U, 0U, PM_NOREMOVE ); do { // Use PeekMessage() if the app is active, so we can use idle time to // render the scene. Else, use GetMessage() to avoid eating CPU time. // if( g_bActive ) bGotMsg = PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ); // else // bGotMsg = GetMessage( &msg, NULL, 0U, 0U ); if( bGotMsg ) { // WM_USER 이상의 메시지는 처리하지 않는다. 이것은 일본어 IME의 팝업메뉴 호출을 막기 위한 처리다. // (팝업메뉴가 코드진행을 멈추게하는 특성을 유저들이 무적어뷰즈로 악용하기 때문) // WM_USER+25는 건즈내부에서 사용하고 있으므로 WM_USER+25가 넘어간 메시지부터는 버린다. if (msg.message <= WM_USER +25) { TranslateMessage( &msg ); DispatchMessage( &msg ); } } else { RFrame_UpdateRender(); } if(!g_bActive) Sleep(10); }while( WM_QUIT != msg.message ); return (INT)msg.wParam; }
void CCMatchShutdown::Notify(int nIndex) { char* pszMsg = m_ShutdownNotifyArray[nIndex]->GetString(); CCMatchServer* pServer = CCMatchServer::GetInstance(); CCCommand* pCmd = pServer->CreateCommand(MC_ADMIN_ANNOUNCE, CCUID(0,0)); pCmd->AddParameter(new CCCmdParamCCUID(CCUID(0,0))); pCmd->AddParameter(new CCCmdParamStr(pszMsg)); pCmd->AddParameter(new CCCmdParamUInt(ZAAT_CHAT)); pServer->RouteToAllClient(pCmd); #ifdef _DEBUG cclog( "CCMatchShutdown::Notify - Notify : %s\n", pszMsg ); #endif }
bool ZLocale::CreateAuthInfo() { // if (m_pAuthInfo) delete m_pAuthInfo; // m_pAuthInfo = NULL; #ifdef _INDEPTH_DEBUG_ cclog("ZLocale::CreateAuthInfo() returning NULL since authentication is not a issue.\n"); #endif /* switch (m_iCountry) { case CCC_KOREA: { #ifdef LOCALE_KOREA m_pAuthInfo = new ZNetmarbleAuthInfo(); #endif // LOCALE_KOREA } break; case CCC_JAPAN: { #ifdef LOCALE_JAPAN m_pAuthInfo = new ZGameOnJPAuthInfo(); #endif // LOCALE_JAPAN } break; case CCC_NHNUSA : { #ifdef LOCALE_NHNUSA m_pAuthInfo = new ZNHN_USAAuthInfo(); if( 0 == m_pAuthInfo ) return false; //if( !((ZNHN_USAAuthInfo*)m_pAuthInfo)->InitAuth() ) //{ // delete m_pAuthInfo; // m_pAuthInfo = 0; // return false; //} return true; #endif } break; default: { } }; */ return true; }
int mark_bad_ip(struct in_addr addr) { int i; for(i = 0; i < ip_num; i++) { if(memcmp(&host_ip[i].m_addr, &addr, sizeof(struct in_addr)) == 0) { host_ip[i].good_ip = 0; good_ip_num--; return 0; } } cclog(2, "in mark_bad_ip, can't find addr of %s", inet_ntoa(addr)); return -1; }
int rf_epoll_mod(int fd,int flag){ rf_client *rfc = &fd_table[fd]; struct epoll_event cevent; memset(&cevent, 0, sizeof(struct epoll_event)); cevent.events = flag; cevent.data.fd = fd; rfc->epoll_flag = flag; if( epoll_ctl(kdpfd, EPOLL_CTL_MOD, fd, &cevent) == -1 ) { cclog(2,"epoll_ctl fail: %s,fd:%d\n", strerror(errno),fd); return RF_ERR_EPOLL; } return RF_OK; }
int RInitD3D( RMODEPARAMS* pModeParams ) { RFrame_Create(); ShowWindow(g_hWnd,SW_SHOW); if(!RInitDisplay(g_hWnd,pModeParams)) { cclog("can't init display\n"); return -1; } //RBeginScene(); RGetDevice()->Clear(0 , NULL, D3DCLEAR_TARGET, 0x00000000, 1.0f, 0 ); // REndScene(); RFlip(); return 0; }
RRESULT OnError(void *pParam) { cclog("RealSpace::OnError(%d) \n", RGetLastError()); switch (RGetLastError()) { case RERROR_INVALID_DEVICE: { D3DADAPTER_IDENTIFIER9 *ai=RGetAdapterID(); char szLog[512]; ZTransMsg( szLog, MSG_DONOTSUPPORT_GPCARD, 1, ai->Description); int ret=MessageBox(NULL, szLog, ZMsg( MSG_WARNING), MB_YESNO); if(ret!=IDYES) return R_UNKNOWN; } break; case RERROR_CANNOT_CREATE_D3D: { ShowCursor(TRUE); char szLog[512]; sprintf(szLog, ZMsg( MSG_DIRECTX_NOT_INSTALL)); int ret=MessageBox(NULL, szLog, ZMsg( MSG_WARNING), MB_YESNO); if(ret==IDYES) { ShellExecute(g_hWnd, "open", ZMsg( MSG_DIRECTX_DOWNLOAD_URL), NULL, NULL, SW_SHOWNORMAL); } } break; }; return R_OK; }
static int init_host_ip_from_file(char *file) { FILE *fp; static char addrbuf[32]; int a1 = 0, a2 = 0, a3 = 0, a4 = 0; struct in_addr A; char x; memset(host_ip, 0, sizeof(host_ip)); ip_num = 0; good_ip_num = 0; pos = 0; assert(file); if((fp = fopen(file, "r")) == NULL) { cclog(0, "can not open file: %s", file); abort(); } int i = 0; while(fgets(addrbuf, 32 - 1, fp)) { if(addrbuf[strlen(addrbuf) - 1] == '\n') addrbuf[strlen(addrbuf) - 1] = '\0'; if(strlen(addrbuf) == 0) continue; if(sscanf(addrbuf, "%d.%d.%d.%d%c", &a1, &a2, &a3, &a4, &x) == 4) { if (a1 < 0 || a1 > 255) goto out1; if (a2 < 0 || a2 > 255) goto out1; if (a3 < 0 || a3 > 255) goto out1; if (a4 < 0 || a4 > 255) goto out1; snprintf(addrbuf, 32, "%d.%d.%d.%d", a1, a2, a3, a4); A.s_addr = inet_addr(addrbuf); host_ip[i].m_addr = A; host_ip[i].good_ip = 1; if(i <= MAX_CA_IP - 1) { i++; ip_num++; good_ip_num++; continue; } else { cclog(1, "ca ip list full, out now!"); break; } out1: cclog(1, "error host ip format of: %s", addrbuf); continue; } else { cclog(1, "error host ip format of: %s", addrbuf); continue; } } if(fp) fclose(fp); cclog(3, "after init ca ip table, we get %d ip", ip_num); if(ip_num > 0) return 0; else { cclog(1, "get ca ip failed"); abort(); } }
void CCQuestLevel::InitCurrSector(CCMATCH_GAMETYPE eGameType) { // npc queue 세팅 CCMatchQuest* pQuest = CCMatchServer::GetInstance()->GetQuest(); int nNPCSetID = 0; if( m_DynamicInfo.nCurrSectorIndex < (int)m_StaticInfo.pScenario->Maps[m_StaticInfo.nDice].vecNPCSetArray.size() ) { nNPCSetID = m_StaticInfo.pScenario->Maps[m_StaticInfo.nDice].vecNPCSetArray[m_DynamicInfo.nCurrSectorIndex]; } else { _ASSERT( 0 && "NPC set의 크기에 문제가 있음. 리소스 검사가 필요함." ); cclog( "NPC set의 크기에 문제가 있음. 리소스 검사가 필요함.\n" ); return; } CCQuestNPCSetInfo* pNPCSetInfo = pQuest->GetNPCSetInfo(nNPCSetID); m_NPCQueue.Clear(); m_DynamicInfo.bCurrBossSector = false; if (CCGetGameTypeMgr()->IsQuestOnly(eGameType)) { // 만약 키 NPC가 있고, 마지막 섹터이면 키 NPC 세팅 if ((m_StaticInfo.pScenario->Maps[m_StaticInfo.nDice].nKeyNPCID != 0) && (m_DynamicInfo.nCurrSectorIndex == GetMapSectorCount() - 1)) { m_NPCQueue.Make(m_StaticInfo.nQLD, pNPCSetInfo, CCQUEST_NPC(m_StaticInfo.pScenario->Maps[m_StaticInfo.nDice].nKeyNPCID)); if (m_StaticInfo.pScenario->Maps[m_StaticInfo.nDice].bKeyNPCIsBoss) { m_DynamicInfo.bCurrBossSector = true; } } else { m_NPCQueue.Make(m_StaticInfo.nQLD, pNPCSetInfo); } } else if (CCGetGameTypeMgr()->IsSurvivalOnly(eGameType)) { const int nCurrSector = m_DynamicInfo.nCurrSectorIndex; const std::vector<int>& vecKeyNpc = m_StaticInfo.pScenario->Maps[m_StaticInfo.nDice].vecKeyNPCArray; // 이 섹터의 키NPC를 세팅 int keyNpcID = NPC_NONE; if (nCurrSector < (int)vecKeyNpc.size()) { keyNpcID = vecKeyNpc[nCurrSector]; } if (keyNpcID != NPC_NONE) { m_NPCQueue.Make(m_StaticInfo.nQLD, pNPCSetInfo, CCQUEST_NPC(keyNpcID)); m_DynamicInfo.bCurrBossSector = false; // 서바이벌엔 보스가 없다(몹은 보스용 몹이지만 퀘스트에서의 보스처럼 다루지 않음) } else { m_NPCQueue.Make(m_StaticInfo.nQLD, pNPCSetInfo); } } else _ASSERT(0); // spawn index 세팅 memset(m_SpawnInfos, 0, sizeof(m_SpawnInfos)); int nSectorID = m_StaticInfo.SectorList[m_DynamicInfo.nCurrSectorIndex].nSectorID; if (CCGetGameTypeMgr()->IsQuestOnly(eGameType)) m_DynamicInfo.pCurrSector = pQuest->GetSectorInfo(nSectorID); else if (CCGetGameTypeMgr()->IsSurvivalOnly(eGameType)) m_DynamicInfo.pCurrSector = pQuest->GetSurvivalSectorInfo(nSectorID); else ASSERT(0); }
int rf_parse_dir(xmlNodePtr cur,rf_cli_session *sess){ if(sess->params == NULL){ sess->params = cc_malloc(sizeof(rf_cli_dir_params)); } rf_cli_dir_params *dir_params = (rf_cli_dir_params *)sess->params; bool b_action = false; bool b_dir = false; while (cur != NULL) { if ((!xmlStrcmp(cur->name, (const xmlChar *)"action"))){ xmlChar *key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); dir_params->action = strtol((const char *)key, (char **)NULL, 10); b_action = true; cclog(4,"action : %s", key); xmlFree(key); } if ((!xmlStrcmp(cur->name, (const xmlChar *)"report_address"))){ xmlChar *key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); if(dir_params->report_address == NULL){ dir_params->report_address = strdup((const char *)key); } cclog(4,"report_address: %s", dir_params->report_address); xmlFree(key); } if ((!xmlStrcmp(cur->name, (const xmlChar *)"dir"))){ xmlChar *key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); cclog(4,"dir : %s", key); if(xmlStrlen(key) > strlen("http://")){ rf_url_list * url = cc_malloc(sizeof(rf_url_list)); url->buffer = cc_malloc(xmlStrlen(key) + 1); strcpy(url->buffer,(char *)key); url->len = xmlStrlen(key); assert(sess->url_list == NULL); sess->url_list = url; b_dir = true; } else{ cclog(1,"invalid url : %s",key); xmlFree(key); return RF_ERR_XML_INVALID_URL; } xmlFree(key); } cur = cur->next; } if(!(b_action && b_dir)){ return RF_ERR_XML_PARSE; } return RF_OK; }
int rf_xml_parse(rf_cli_session *sess,const char *buffer,int size){ int ret = RF_OK; if(NULL == (doc = xmlParseMemory(buffer,size))){ cclog(3,"Document not parsed successfully.[%s]", buffer); return RF_ERR_XML_PARSE; } if(NULL == (cur = xmlDocGetRootElement(doc))){ cclog(1,"empty document."); ret = RF_ERR_XML_PARSE; goto OUT; } if (xmlStrcmp(cur->name, (const xmlChar *) "method")) { cclog(1,"document of the wrong type, root node != method."); ret = RF_ERR_XML_PARSE; goto OUT; } xmlChar *method_name , *sessid; if(NULL == (method_name = xmlGetProp(cur,(const xmlChar *)"name"))){ cclog(1,"get method name error!"); ret = RF_ERR_XML_PARSE; goto OUT; } if(NULL == (sessid = xmlGetProp(cur,(const xmlChar *)"sessionid"))){ cclog(1,"get sessionid error!"); xmlFree(method_name); ret = RF_ERR_XML_PARSE; goto OUT; } cclog(4,"method name : %s,session id : %s",method_name,sessid); sess->method = action_atoi((char *)method_name); strcpy(sess->sessionid,(char *)sessid); xmlFree(method_name); xmlFree(sessid); cur = cur->xmlChildrenNode; switch (sess->method){ case RF_FC_ACTION_URL_PURGE : case RF_FC_ACTION_URL_EXPIRE: ret = rf_parse_url(cur,sess); break; case RF_FC_ACTION_DIR_PURGE: if(!config.enable_dir_purge) { cclog(1,"Do not support dir purge!"); ret = RF_ERR_XML_PARSE; break; } case RF_FC_ACTION_DIR_EXPIRE: ret = rf_parse_dir(cur,sess); break; default: cclog(1,"can not process method : %s",action_itoa(sess->method)); break; }; OUT: xmlFreeDoc(doc); doc = NULL; return ret; }
bool ZWorld::Create(ZLoadingProgress *pLoading ) { if(m_bCreated) return true; m_pBsp = new RBspObject; #ifndef _DEBUG const char* descExt = "xml.mef"; #else const char* descExt = "xml"; #endif if(!m_pBsp->Open(m_szBspName, descExt, RBspObject::ROF_RUNTIME,ZWorldProgressCallBack,pLoading)) { CCLog("error while loading %s \n",m_szName); // 맵로딩에 실패하면 저장해둔 맵정보를 모두 지워준다.(버그수정:로딩에 실패할경우 실패된 맵정보를 그냥 저장 했었다) ZGetWorldManager()->Clear(); return false; } m_pBsp->OptimizeBoundingBox(); char szMapPath[64] = ""; ZGetCurrMapPath(szMapPath); ZWater* water_instance; RMapObjectList* map_object_list = m_pBsp->GetMapObjectList(); RMeshMgr* mesh_mgr = m_pBsp->GetMeshManager(); for( RMapObjectList::iterator iter = map_object_list->begin(); iter != map_object_list->end(); ) { ROBJECTINFO* object_info = *iter; RMesh* pMesh = mesh_mgr->GetFast( object_info->nMeshID ); if( pMesh->m_data_num <= 0 ) { ++iter; continue; } RMeshNode* pMeshNode = pMesh->m_data[0]; char* object_name = (char*)object_info->name.c_str(); // m_pBsp->m_filename.c_str() int len = int(strlen(m_szName)+1); object_name += len; /* while(1) { if( object_name[0] == '_' ) { ++object_name; break; } ++object_name; } */ if( pMeshNode->m_point_color_num > 0 ) // 맵에서 칼라값을 하나 이상 갖는 놈은 깃발이다.. 현재.. { ZClothEmblem* new_instance = new ZClothEmblem; new_instance->CreateFromMeshNode( pMeshNode , this ); m_flags.Add( new_instance, object_name ); iter = map_object_list->Delete( iter ); continue; } // Sky Box... if( m_pSkyBox == NULL ) { if( strncmp(object_name,"obj_sky_", 8) == 0 || strncmp(object_name,"obj_ef_sky", 10) == 0 ) // if( strncmp(object_name,"obj_sky_", 8) == 0 ) { m_pSkyBox = new ZSkyBox; m_pSkyBox->Create( pMesh->m_pVisualMesh ); // iter = map_object_list->Delete( iter ); ROBJECTINFO *info=*iter; delete info; iter = map_object_list->erase( iter ); continue; } } // Water // if( g_pGame->m_bReflection ) { // 임시.... int nWater = 0; if( !strncmp( object_name, "obj_water", 9 ) ) nWater = 1; if( !strncmp( object_name, "obj_water2", 10 ) ) nWater = 3;//일렁임은 제거.. if( !strncmp( object_name, "obj_sea", 7 ) ) nWater = 2; if( nWater ) { m_bWaterMap = true; m_fWaterHeight = pMeshNode->m_mat_base._42; } else { m_bWaterMap = false; m_fWaterHeight = 0.f; } if(nWater) // if( !strncmp( object_name, "obj_water", 9 ) ) { int id = object_info->nMeshID; RMesh* mesh = mesh_mgr->GetFast(id); RMeshNode* node = mesh->m_data[0]; water_instance = new ZWater; water_instance->SetMesh(node); m_waters.push_back( water_instance ); if(nWater==1) water_instance->m_nWaterType = WaterType1; // else if(nWater==2) water_instance->m_nWaterType = WaterType1; else if(nWater==3) water_instance->m_nWaterType = WaterType2; if(nWater==2) { // 물 예외 처리 가능할때 통합.. // water_instance->m_nWaterType = 1;//sea water_instance->m_isRender = false; // 안 그리고 오브젝트로 그린다.. pMesh->m_LitVertexModel = true; // 바다는 라이트 영향을 안받는다.. ++iter; } else { iter = map_object_list->Delete( iter ); } // iter = map_object_list->Delete( iter ); continue; } } ++iter; } char szBuf[128]; if( m_flags.size() > 0 ) { sprintf( szBuf, "%s%s/flag.xml", szMapPath, ZGetGameClient()->GetMatchStageSetting()->GetMapName()); m_flags.InitEnv(szBuf); // cclog("ZGame::Create() m_flags.InitEnv \n"); cclog( "create game enrvironment.\n" ); } m_pMapDesc = new ZMapDesc; m_pMapDesc->Open(m_pBsp); sprintf( szBuf, "%s%s/smoke.xml", szMapPath, ZGetGameClient()->GetMatchStageSetting()->GetMapName()); m_pMapDesc->LoadSmokeDesc(szBuf); // cclog("ZGame::Create() pMapDesc->LoadSmokeDesc \n"); // 맵레벨의 전역값 설정 FogInfo finfo = GetBsp()->GetFogInfo(); m_bFog = finfo.bFogEnable; m_fFogNear = finfo.fNear; m_fFogFar = finfo.fFar; m_dwFogColor = finfo.dwFogColor; m_bCreated = true; cclog( "game world create success.\n" ); return true; }
int parse_url_list(xmlNodePtr cur,char *token,rf_cli_session *sess){ xmlChar *key,*id; cur = cur->xmlChildrenNode; bool b_find = false; while (cur != NULL) { if ((!xmlStrcmp(cur->name, (const xmlChar *)token))) { key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1); if(! (key && xmlStrlen(key))){ xmlFree(key); goto NEXT; } id = xmlGetProp(cur,(const xmlChar *)"id"); if(! (id && xmlStrlen(id))){ xmlFree(id); xmlFree(key); goto NEXT; } b_find = true; rf_url_list * url = cc_malloc(sizeof(rf_url_list)); url->buffer = cc_malloc(xmlStrlen(key) + 1); strcpy(url->buffer,(char *)key); /* //here we don't want to decode '&' char *c,*d; while((c = strstr(url->buffer,"%26")) != NULL){ *c++ = '&'; d = c + 2; while((*d) != '\0') *c++ = *d++; *c = '\0'; } */ url->len = xmlStrlen(key); url->id = strtoll((const char *)id, (char **)NULL, 10); xmlFree(key); xmlFree(id); /* Add Start: url remove host, by xin.yao, 2012-03-04 */ urlRemoveHost(url); /* Add Ended: by xin.yao */ cclog(4,"url: %s,id : %"PRINTF_UINT64_T, url->buffer,url->id); //add to url list if(sess->url_list == NULL){ sess->url_list = url; }else{ url->next = sess->url_list; sess->url_list = url; } sess->url_number++; } NEXT: cur = cur->next; } return b_find ? RF_OK : RF_ERR_XML_PARSE; }
bool ZGameClient::OnCommand(CCCommand* pCommand) { bool ret; ret = CCMatchClient::OnCommand(pCommand); #ifdef _LOG_ENABLE_CLIENT_COMMAND_ char buf[256]; sprintf(buf,"[ID:%d]: %s\n", pCommand->GetID(), pCommand->GetDescription()); OutputDebugString(buf); #endif switch(pCommand->GetID()){ case MC_NET_ONDISCONNECT: { } break; case MC_NET_ONERROR: { } break; case ZC_CHANGESKIN: { char szSkinName[256]; pCommand->GetParameter(szSkinName, 0, MPT_STR, sizeof(szSkinName) ); if(ZApplication::GetGameInterface()->ChangeInterfaceSkin(szSkinName)) { CCClient::OutputMessage(CCZMOM_LOCALREPLY, "Change Skin To %s", szSkinName); } else { CCClient::OutputMessage(CCZMOM_LOCALREPLY, "Change Skin Failed"); } } break; case MC_ADMIN_TERMINAL: { #ifndef _PUBLISH char szText[65535]; szText[0] = 0; CCUID uidChar; pCommand->GetParameter(&uidChar, 0, MPT_UID); pCommand->GetParameter(szText, 1, MPT_STR, sizeof(szText) ); OutputToConsole(szText); #endif } break; case MC_NET_CHECKPING: { CCUID uid; if (pCommand->GetParameter(&uid, 0, MPT_UID)==false) break; CCCommand* pNew = new CCCommand(m_CommandManager.GetCommandDescByID(MC_NET_PING), uid, m_This); pNew->AddParameter(new CCCommandParameterUInt(timeGetTime())); Post(pNew); return true; } case MC_NET_PING: { unsigned int nTimeStamp; if (pCommand->GetParameter(&nTimeStamp, 0, MPT_UINT)==false) break; CCCommand* pNew = new CCCommand(m_CommandManager.GetCommandDescByID(MC_NET_PONG), pCommand->m_Sender, m_This); pNew->AddParameter(new CCCommandParameterUInt(nTimeStamp)); Post(pNew); return true; } case MC_NET_PONG: { int nTimeStamp; pCommand->GetParameter(&nTimeStamp, 0, MPT_UINT); CCClient::OutputMessage(CCZMOM_LOCALREPLY, "Ping from (%u:%u) = %d", pCommand->GetSenderUID().High, pCommand->GetSenderUID().Low, timeGetTime()-nTimeStamp); } break; case MC_UDP_PONG: { unsigned int nIp, nTimeStamp; pCommand->GetParameter(&nIp, 0, MPT_UINT); pCommand->GetParameter(&nTimeStamp, 1, MPT_UINT); ZApplication::GetGameInterface()->SetAgentPing(nIp, nTimeStamp); } break; case MC_HSHIELD_PING: { /* unsigned int nTimeStamp; if(pCommand->GetParameter(&nTimeStamp, 0, MPT_UINT) == false) break; CCCommandParameter* pParam = pCommand->GetParameter(1); if(pParam->GetType() != MPT_BLOB) break; void* pBlob = pParam->GetPointer(); int nCount = CCGetBlobArrayCount(pBlob); unsigned char* pReqMsg = (unsigned char*)CCGetBlobArrayElement(pBlob, 0); DWORD dwRet = _AhnHS_MakeAckMsg(pReqMsg, ZGetMyInfo()->GetSystemInfo()->pbyAckMsg); if(dwRet != ERROR_SUCCESS) cclog("Making Ack Msg Failed. (Error code = %x)\n", dwRet); CCCommand* pNew = new CCCommand(m_CommandManager.GetCommandDescByID(MC_HSHIELD_PONG), pCommand->m_Sender, m_This); pNew->AddParameter(new CCCommandParameterUInt(nTimeStamp)); void* pBlob2 = CCMakeBlobArray(sizeof(unsigned char), SIZEOF_ACKMSG); unsigned char* pCmdBlock = (unsigned char*)CCGetBlobArrayElement(pBlob2, 0); CopyMemory(pCmdBlock, ZGetMyInfo()->GetSystemInfo()->pbyAckMsg, SIZEOF_ACKMSG); pNew->AddParameter(new CCCmdParamBlob(pBlob2, CCGetBlobArraySize(pBlob2))); // CCEraseBlobArray(pBlob); CCEraseBlobArray(pBlob2); Post(pNew); */ return true; } break; case ZC_CON_CONNECT: { char szBuf[256]; sprintf(szBuf, "Net.Connect %s:%d", ZGetConfiguration()->GetServerIP(), ZGetConfiguration()->GetServerPort()); ConsoleInputEvent(szBuf); SetServerAddr(ZGetConfiguration()->GetServerIP(), ZGetConfiguration()->GetServerPort()); } break; case ZC_CON_DISCONNECT: { ConsoleInputEvent("Net.Disconnect"); } break; case ZC_CON_CLEAR: { if (ZGetConsole()) ZGetConsole()->ClearMessage(); } break; case ZC_CON_HIDE: { if (ZGetConsole()) ZGetConsole()->Show(false); } break; case ZC_CON_SIZE: { if (ZGetConsole()) { int iConWidth, iConHeight; pCommand->GetParameter(&iConWidth, 0, MPT_INT); pCommand->GetParameter(&iConHeight, 1, MPT_INT); if ((iConWidth > 30) && (iConHeight > 30)) { sPoint point = ZGetConsole()->GetPosition(); ZGetConsole()->SetBounds(point.x, point.y, iConWidth, iConHeight); } } } break; case MC_CLOCK_SYNCHRONIZE: { unsigned long int nGlobalClock; pCommand->GetParameter(&nGlobalClock, 0, MPT_UINT); unsigned long int nLocalClock = GetClockCount(); if (nGlobalClock > nLocalClock) m_bIsBigGlobalClock = true; else m_bIsBigGlobalClock = false; m_nClockDistance = ZGetClockDistance(nGlobalClock, nLocalClock); } break; #ifdef _DEBUG case ZC_TEST_SETCLIENT1: { char szBuf[256]; sprintf(szBuf, "peer.setport 10000"); ConsoleInputEvent(szBuf); sprintf(szBuf, "peer.addpeer 127.0.0.1 10001"); ConsoleInputEvent(szBuf); CCClient::OutputMessage(CCZMOM_LOCALREPLY, "Done SetClient1"); } break; case ZC_TEST_SETCLIENT2: { char szBuf[256]; sprintf(szBuf, "peer.setport 10001"); ConsoleInputEvent(szBuf); sprintf(szBuf, "peer.addpeer 127.0.0.1 10000"); ConsoleInputEvent(szBuf); CCClient::OutputMessage(CCZMOM_LOCALREPLY, "Done SetClient2"); } break; case ZC_TEST_SETCLIENTALL: { char szMyIP[256]; pCommand->GetParameter(szMyIP, 0, MPT_STR, sizeof(szMyIP) ); char szBuf[256]; char szIPs[][256] = { "192.168.0.100", "192.168.0.111", "192.168.0.10", "192.168.0.11", "192.168.0.16", "192.168.0.20", "192.168.0.25", "192.168.0.30", "192.168.0.32", "192.168.0.200", "192.168.0.15", "192.168.0.17"}; sprintf(szBuf, "peer.setport 10000"); ConsoleInputEvent(szBuf); for (int i = 0; i < 12; i++) { if (!strcmp(szMyIP, szIPs[i])) continue; sprintf(szBuf, "peer.addpeer %s 10000", szIPs[i]); ConsoleInputEvent(szBuf); } CCClient::OutputMessage(CCZMOM_LOCALREPLY, "Done SetClient All"); } break; #endif #ifndef _PUBLISH case ZC_TEST_BIRD1: { OnBirdTest(); } break; #endif case MC_MATCH_NOTIFY: { unsigned int nMsgID = 0; if (pCommand->GetParameter(&nMsgID, 0, MPT_UINT) == false) break; OnMatchNotify(nMsgID); } break; case MC_MATCH_BRIDGEPEER_ACK: { CCUID uidChar; int nCode; pCommand->GetParameter(&uidChar, 0, MPT_UID); pCommand->GetParameter(&nCode, 1, MPT_INT); OnBridgePeerACK(uidChar, nCode); } break; case MC_MATCH_STAGE_RESPONSE_FORCED_ENTRY: // 난입 { int nResult; pCommand->GetParameter(&nResult, 0, MPT_INT); if (nResult == MOK) { OnForcedEntryToGame(); } else { ZApplication::GetGameInterface()->ShowMessage("난입할 수 없습니다."); } } break; case MC_MATCH_STAGE_JOIN: { CCUID uidChar, uidStage; unsigned int nRoomNo=0; char szStageName[256]=""; pCommand->GetParameter(&uidChar, 0, MPT_UID); pCommand->GetParameter(&uidStage, 1, MPT_UID); pCommand->GetParameter(&nRoomNo, 2, MPT_UINT); pCommand->GetParameter(szStageName, 3, MPT_STR, sizeof(szStageName) ); OnStageJoin(uidChar, uidStage, nRoomNo, szStageName); } break; case MC_MATCH_STAGE_LEAVE: { CCUID uidChar, uidStage; pCommand->GetParameter(&uidChar, 0, MPT_UID); pCommand->GetParameter(&uidStage, 1, MPT_UID); OnStageLeave(uidChar, uidStage); } break; case MC_MATCH_STAGE_START: { CCUID uidChar, uidStage; int nCountdown; pCommand->GetParameter(&uidChar, 0, MPT_UID); pCommand->GetParameter(&uidStage, 1, MPT_UID); pCommand->GetParameter(&nCountdown, 2, MPT_INT); OnStageStart(uidChar, uidStage, nCountdown); } break; case MC_MATCH_STAGE_LAUNCH: { CCUID uidStage; char szMapName[_MAX_DIR]; pCommand->GetParameter(&uidStage, 0, MPT_UID); pCommand->GetParameter(szMapName, 1, MPT_STR, sizeof(szMapName) ); OnStageLaunch(uidStage, szMapName); } break; case MC_MATCH_STAGE_RELAY_LAUNCH : { CCUID uidStage; bool bIsIgnore; char szMapName[_MAX_DIR]; pCommand->GetParameter(&uidStage, 0, MPT_UID); pCommand->GetParameter(szMapName, 1, MPT_STR, sizeof(szMapName) ); pCommand->GetParameter(&bIsIgnore, 2, MPT_BOOL); if( !bIsIgnore ) OnStageLaunch(uidStage, szMapName); else { m_bForcedEntry = true; ZApplication::GetGameInterface()->SerializeStageInterface(); } } break; case MC_MATCH_STAGE_FINISH_GAME: { bool bIsRelayMapUnFinish; CCUID uidStage; pCommand->GetParameter(&uidStage, 0, MPT_UID); pCommand->GetParameter(&bIsRelayMapUnFinish, 1, MPT_BOOL); OnStageFinishGame(uidStage, bIsRelayMapUnFinish); } break; case MC_MATCH_STAGE_MAP: { CCUID uidStage; char szMapName[_MAX_DIR]; pCommand->GetParameter(&uidStage, 0, MPT_UID); pCommand->GetParameter(szMapName, 1, MPT_STR, sizeof(szMapName) ); OnStageMap(uidStage, szMapName); } break; case MC_MATCH_STAGE_RELAY_MAP_INFO_UPDATE: { CCUID uidStage; int nRelayMapType = 0; int nRelayMapRepeatCount = 0; pCommand->GetParameter(&uidStage, 0, MPT_UID); pCommand->GetParameter(&nRelayMapType, 1, MPT_INT ); pCommand->GetParameter(&nRelayMapRepeatCount, 2, MPT_INT ); CCCommandParameter* pParam = pCommand->GetParameter(3); if (pParam->GetType() != MPT_BLOB) break; void* pRelayMapListBlob = pParam->GetPointer(); if( NULL == pRelayMapListBlob ) break; OnStageRelayMapListUpdate(nRelayMapType, nRelayMapRepeatCount, pRelayMapListBlob); } break; case MC_MATCH_STAGE_RELAY_MAP_ELEMENT_UPDATE: { CCUID uidStage; int nRelayMapType = 0; int nRelayMapRepeatCount = 0; pCommand->GetParameter(&uidStage, 0, MPT_UID ); pCommand->GetParameter(&nRelayMapType, 1, MPT_INT ); pCommand->GetParameter(&nRelayMapRepeatCount, 2, MPT_INT ); OnStageRelayMapElementUpdate(nRelayMapType, nRelayMapRepeatCount); } break; case MC_MATCH_STAGE_TEAM: { CCUID uidChar, uidStage; unsigned int nTeam; pCommand->GetParameter(&uidChar, 0, MPT_UID); pCommand->GetParameter(&uidStage, 1, MPT_UID); pCommand->GetParameter(&nTeam, 2, MPT_UINT); OnStageTeam(uidChar, uidStage, nTeam); } break; case MC_MATCH_STAGE_PLAYER_STATE: { CCUID uidChar, uidStage; int nObjectStageState; pCommand->GetParameter(&uidChar, 0, MPT_UID); pCommand->GetParameter(&uidStage, 1, MPT_UID); pCommand->GetParameter(&nObjectStageState, 2, MPT_INT); OnStagePlayerState(uidChar, uidStage, CCMatchObjectStageState(nObjectStageState)); } break; case MC_MATCH_STAGE_MASTER: { CCUID uidChar, uidStage; pCommand->GetParameter(&uidStage, 0, MPT_UID); pCommand->GetParameter(&uidChar, 1, MPT_UID); OnStageMaster(uidStage, uidChar); } break; case MC_MATCH_STAGE_CHAT: { CCUID uidStage, uidChar; static char szChat[512]; pCommand->GetParameter(&uidChar, 0, MPT_UID); pCommand->GetParameter(&uidStage, 1, MPT_UID); pCommand->GetParameter(szChat, 2, MPT_STR, sizeof(szChat) ); //check Chatting Message..jintriple3 줄 바꿈 문자 필터링 CheckMsgAboutChat(szChat); OnStageChat(uidChar, uidStage, szChat); } break; case MC_MATCH_STAGE_LIST: { char nPrevStageCount, nNextStageCount; pCommand->GetParameter(&nPrevStageCount, 0, MPT_CHAR); pCommand->GetParameter(&nNextStageCount, 1, MPT_CHAR); CCCommandParameter* pParam = pCommand->GetParameter(2); if(pParam->GetType()!=MPT_BLOB) break; void* pBlob = pParam->GetPointer(); int nCount = CCGetBlobArrayCount(pBlob); OnStageList((int)nPrevStageCount, (int)nNextStageCount, pBlob, nCount); } break; case MC_MATCH_CHANNEL_RESPONSE_PLAYER_LIST: { unsigned char nTotalPlayerCount, nPage; pCommand->GetParameter(&nTotalPlayerCount, 0, MPT_UCHAR); pCommand->GetParameter(&nPage, 1, MPT_UCHAR); CCCommandParameter* pParam = pCommand->GetParameter(2); if(pParam->GetType()!=MPT_BLOB) break; void* pBlob = pParam->GetPointer(); int nCount = CCGetBlobArrayCount(pBlob); OnChannelPlayerList((int)nTotalPlayerCount, (int)nPage, pBlob, nCount); } break; case MC_MATCH_CHANNEL_RESPONSE_ALL_PLAYER_LIST: { CCUID uidChannel; pCommand->GetParameter(&uidChannel, 0, MPT_UID); CCCommandParameter* pParam = pCommand->GetParameter(1); if(pParam->GetType()!=MPT_BLOB) break; void* pBlob = pParam->GetPointer(); int nCount = CCGetBlobArrayCount(pBlob); OnChannelAllPlayerList(uidChannel, pBlob, nCount); } break; case MC_MATCH_RESPONSE_FRIENDLIST: { CCCommandParameter* pParam = pCommand->GetParameter(0); if(pParam->GetType()!=MPT_BLOB) break; void* pBlob = pParam->GetPointer(); int nCount = CCGetBlobArrayCount(pBlob); OnResponseFriendList(pBlob, nCount); } break; case MC_MATCH_RESPONSE_STAGESETTING: { CCUID uidStage; pCommand->GetParameter(&uidStage, 0, MPT_UID); CCCommandParameter* pStageParam = pCommand->GetParameter(1); if(pStageParam->GetType()!=MPT_BLOB) break; void* pStageBlob = pStageParam->GetPointer(); int nStageCount = CCGetBlobArrayCount(pStageBlob); CCCommandParameter* pCharParam = pCommand->GetParameter(2); if(pCharParam->GetType()!=MPT_BLOB) break; void* pCharBlob = pCharParam->GetPointer(); int nCharCount = CCGetBlobArrayCount(pCharBlob); int nStageState; pCommand->GetParameter(&nStageState, 3, MPT_INT); CCUID uidMaster; pCommand->GetParameter(&uidMaster, 4, MPT_UID); OnResponseStageSetting(uidStage, pStageBlob, nStageCount, pCharBlob, nCharCount, STAGE_STATE(nStageState), uidMaster); ChangeQuestStage(); } break; case MC_MATCH_RESPONSE_PEER_RELAY: { CCUID uidPeer; if (pCommand->GetParameter(&uidPeer, 0, MPT_UID) == false) break; OnResponsePeerRelay(uidPeer); } break; case MC_MATCH_LOADING_COMPLETE: { CCUID uidChar; int nPercent; if (pCommand->GetParameter(&uidChar, 0, MPT_UID) == false) break; if (pCommand->GetParameter(&nPercent, 1, MPT_INT) == false) break; OnLoadingComplete(uidChar, nPercent); } break; case MC_MATCH_ANNOUNCE: { unsigned int nType; char szMsg[256]; pCommand->GetParameter(&nType, 0, MPT_UINT); pCommand->GetParameter(szMsg, 1, MPT_STR, sizeof(szMsg) ); OnAnnounce(nType, szMsg); } break; case MC_MATCH_CHANNEL_RESPONSE_JOIN: { CCUID uidChannel; int nChannelType; char szChannelName[256]; bool bEnableInterface; pCommand->GetParameter(&uidChannel, 0, MPT_UID); pCommand->GetParameter(&nChannelType, 1, MPT_INT); pCommand->GetParameter(szChannelName, 2, MPT_STR, sizeof(szChannelName) ); pCommand->GetParameter(&bEnableInterface, 3, MPT_BOOL); const char* szChannelNameTranslated = ZGetStringResManager()->GetStringFromXml(szChannelName); OnChannelResponseJoin(uidChannel, (CCCHANNEL_TYPE)nChannelType, szChannelNameTranslated, bEnableInterface); } break; case MC_MATCH_CHANNEL_CHAT: { CCUID uidChannel, uidChar; char szChat[512]; char szName[256]; int nGrade; pCommand->GetParameter(&uidChannel, 0, MPT_UID); pCommand->GetParameter(szName, 1, MPT_STR, sizeof(szName) ); pCommand->GetParameter(szChat, 2, MPT_STR, sizeof(szChat) ); pCommand->GetParameter(&nGrade,3, MPT_INT); //jintriple3 줄 바꿈 문자 필터링 //check chatting Message CheckMsgAboutChat(szChat); OnChannelChat(uidChannel, szName, szChat, nGrade); } break; case MC_MATCH_CHANNEL_LIST: { CCCommandParameter* pParam = pCommand->GetParameter(0); if(pParam->GetType()!=MPT_BLOB) break; void* pBlob = pParam->GetPointer(); int nCount = CCGetBlobArrayCount(pBlob); OnChannelList(pBlob, nCount); } break; case MC_MATCH_CHANNEL_RESPONSE_RULE: { CCUID uidChannel; pCommand->GetParameter(&uidChannel, 0, MPT_UID); char szRuleName[128]; pCommand->GetParameter(szRuleName, 1, MPT_STR, sizeof(szRuleName) ); OnChannelResponseRule(uidChannel, szRuleName); } break; case MC_MATCH_RESPONSE_RECOMMANDED_CHANNEL: { CCUID uidChannel; pCommand->GetParameter(&uidChannel, 0, MPT_UID); OnResponseRecommandedChannel(uidChannel); } break; case MC_ADMIN_ANNOUNCE: { char szChat[512]; unsigned long int nMsgType = 0; pCommand->GetParameter(szChat, 1, MPT_STR, sizeof(szChat) ); pCommand->GetParameter(&nMsgType, 2, MPT_UINT); OnAdminAnnounce(ZGetStringResManager()->GetStringFromXml(szChat), ZAdminAnnounceType(nMsgType)); } break; case MC_MATCH_GAME_LEVEL_UP: { CCUID uidChar; pCommand->GetParameter(&uidChar, 0, MPT_UID); OnGameLevelUp(uidChar); } break; case MC_MATCH_GAME_LEVEL_DOWN: { CCUID uidChar; pCommand->GetParameter(&uidChar, 0, MPT_UID); OnGameLevelDown(uidChar); } break; case MC_MATCH_RESPONSE_GAME_INFO: { CCUID uidStage; pCommand->GetParameter(&uidStage, 0, MPT_UID); CCCommandParameter* pParam = pCommand->GetParameter(1); if(pParam->GetType()!=MPT_BLOB) break; void* pGameInfoBlob = pParam->GetPointer(); pParam = pCommand->GetParameter(2); if(pParam->GetType()!=MPT_BLOB) break; void* pRuleInfoBlob = pParam->GetPointer(); pParam = pCommand->GetParameter(3); if(pParam->GetType()!=MPT_BLOB) break; void* pPlayerInfoBlob = pParam->GetPointer(); OnResponseGameInfo(uidStage, pGameInfoBlob, pRuleInfoBlob, pPlayerInfoBlob); } break; case MC_MATCH_OBTAIN_WORLDITEM: { CCUID uidPlayer; int nIteCCUID; pCommand->GetParameter(&uidPlayer, 0, MPT_UID); pCommand->GetParameter(&nIteCCUID, 1, MPT_INT); OnObtainWorldItem(uidPlayer, nIteCCUID); } break; case MC_MATCH_SPAWN_WORLDITEM: { CCCommandParameter* pParam = pCommand->GetParameter(0); if (pParam->GetType()!=MPT_BLOB) break; void* pSpawnInfoBlob = pParam->GetPointer(); OnSpawnWorldItem(pSpawnInfoBlob); } break; case MC_MATCH_REMOVE_WORLDITEM: { int nIteCCUID; pCommand->GetParameter(&nIteCCUID, 0, MPT_INT); OnRemoveWorldItem(nIteCCUID); } break; case MC_MATCH_USER_WHISPER: { char szSenderName[128]=""; char szTargetName[128]=""; char szMessage[1024]=""; pCommand->GetParameter(szSenderName, 0, MPT_STR, sizeof(szSenderName) ); pCommand->GetParameter(szTargetName, 1, MPT_STR, sizeof(szTargetName) ); pCommand->GetParameter(szMessage, 2, MPT_STR, sizeof(szMessage) ); //jintriple3 줄 바꿈 문자 필터링 //check chatting Message CheckMsgAboutChat(szMessage); OnUserWhisper(szSenderName, szTargetName, szMessage); } break; case MC_MATCH_CHATROOM_JOIN: { char szPlayerName[128]=""; char szChatRoomName[128]=""; pCommand->GetParameter(szPlayerName, 0, MPT_STR, sizeof(szPlayerName) ); pCommand->GetParameter(szChatRoomName, 1, MPT_STR, sizeof(szChatRoomName) ); OnChatRoomJoin(szPlayerName, szChatRoomName); } break; case MC_MATCH_CHATROOM_LEAVE: { char szPlayerName[128]=""; char szChatRoomName[128]=""; pCommand->GetParameter(szPlayerName, 0, MPT_STR, sizeof(szPlayerName) ); pCommand->GetParameter(szChatRoomName, 1, MPT_STR, sizeof(szChatRoomName) ); OnChatRoomLeave(szPlayerName, szChatRoomName); } break; case MC_MATCH_CHATROOM_SELECT_WRITE: { char szChatRoomName[128]=""; pCommand->GetParameter(szChatRoomName, 0, MPT_STR, sizeof(szChatRoomName) ); OnChatRoomSelectWrite(szChatRoomName); } break; case MC_MATCH_CHATROOM_INVITE: { char szSenderName[64]=""; char szTargetName[64]=""; char szRoomName[128]=""; pCommand->GetParameter(szSenderName, 0, MPT_STR, sizeof(szSenderName) ); pCommand->GetParameter(szTargetName, 1, MPT_STR, sizeof(szTargetName) ); pCommand->GetParameter(szRoomName, 2, MPT_STR, sizeof(szRoomName) ); OnChatRoomInvite(szSenderName, szRoomName); } break; case MC_MATCH_CHATROOM_CHAT: { char szChatRoomName[128]=""; char szPlayerName[128]=""; char szChat[128]=""; pCommand->GetParameter(szChatRoomName, 0, MPT_STR, sizeof(szChatRoomName) ); pCommand->GetParameter(szPlayerName, 1, MPT_STR, sizeof(szPlayerName) ); pCommand->GetParameter(szChat, 2, MPT_STR, sizeof(szChat) ); //jintriple3 줄 바꿈 문자 필터링 //check chatting Message CheckMsgAboutChat(szChat); OnChatRoomChat(szChatRoomName, szPlayerName, szChat); } break; case ZC_REPORT_119: { OnLocalReport119(); } break; case ZC_MESSAGE: { int iMessageID; pCommand->GetParameter(&iMessageID, 0, MPT_INT); ZGetGameInterface()->ShowMessage(iMessageID); }break; case MC_TEST_PEERTEST_PING: { CCUID uidSender = pCommand->GetSenderUID(); char szLog[128]; sprintf(szLog, "PEERTEST_PING: from (%d%d)", uidSender.High, uidSender.Low); ZChatOutput(szLog, ZChat::CMT_SYSTEM); } break; case MC_TEST_PEERTEST_PONG: { } break; // 클랜관련 case MC_MATCH_CLAN_RESPONSE_CREATE_CLAN: { int nResult, nRequestID; pCommand->GetParameter(&nResult, 0, MPT_INT); pCommand->GetParameter(&nRequestID, 1, MPT_INT); OnResponseCreateClan(nResult, nRequestID); } break; case MC_MATCH_CLAN_RESPONSE_AGREED_CREATE_CLAN: { int nResult; pCommand->GetParameter(&nResult, 0, MPT_INT); OnResponseAgreedCreateClan(nResult); } break; case MC_MATCH_CLAN_ASK_SPONSOR_AGREEMENT: { int nRequestID; char szClanName[256]; CCUID uidMasterObject; char szMasterName[256]; pCommand->GetParameter(&nRequestID, 0, MPT_INT); pCommand->GetParameter(szClanName, 1, MPT_STR, sizeof(szClanName) ); pCommand->GetParameter(&uidMasterObject, 2, MPT_UID); pCommand->GetParameter(szMasterName, 3, MPT_STR, sizeof(szMasterName) ); OnClanAskSponsorAgreement(nRequestID, szClanName, uidMasterObject, szMasterName); } break; case MC_MATCH_CLAN_ANSWER_SPONSOR_AGREEMENT: { CCUID uidClanMaster; int nRequestID; bool bAnswer; char szCharName[256]; pCommand->GetParameter(&nRequestID, 0, MPT_INT); pCommand->GetParameter(&uidClanMaster, 1, MPT_UID); pCommand->GetParameter(szCharName, 2, MPT_STR, sizeof(szCharName) ); pCommand->GetParameter(&bAnswer, 3, MPT_BOOL); OnClanAnswerSponsorAgreement(nRequestID, uidClanMaster, szCharName, bAnswer); } break; case MC_MATCH_CLAN_RESPONSE_CLOSE_CLAN: { int nResult; pCommand->GetParameter(&nResult, 0, MPT_INT); OnClanResponseCloseClan(nResult); } break; case MC_MATCH_CLAN_RESPONSE_JOIN_CLAN: { int nResult; pCommand->GetParameter(&nResult, 0, MPT_INT); OnClanResponseJoinClan(nResult); } break; case MC_MATCH_CLAN_ASK_JOIN_AGREEMENT: { char szClanName[256], szClanAdmin[256]; CCUID uidClanAdmin; pCommand->GetParameter(szClanName, 0, MPT_STR, sizeof(szClanName) ); pCommand->GetParameter(&uidClanAdmin, 1, MPT_UID); pCommand->GetParameter(szClanAdmin, 2, MPT_STR, sizeof(szClanAdmin) ); OnClanAskJoinAgreement(szClanName, uidClanAdmin, szClanAdmin); } break; case MC_MATCH_CLAN_ANSWER_JOIN_AGREEMENT: { CCUID uidClanAdmin; bool bAnswer; char szJoiner[256]; pCommand->GetParameter(&uidClanAdmin, 0, MPT_UID); pCommand->GetParameter(szJoiner, 1, MPT_STR, sizeof(szJoiner) ); pCommand->GetParameter(&bAnswer, 2, MPT_BOOL); OnClanAnswerJoinAgreement(uidClanAdmin, szJoiner, bAnswer); } break; case MC_MATCH_CLAN_RESPONSE_AGREED_JOIN_CLAN: { int nResult; pCommand->GetParameter(&nResult, 0, MPT_INT); OnClanResponseAgreedJoinClan(nResult); } break; case MC_MATCH_CLAN_UPDATE_CHAR_CLANINFO: { CCCommandParameter* pParam = pCommand->GetParameter(0); if(pParam->GetType()!=MPT_BLOB) break; void* pBlob = pParam->GetPointer(); OnClanUpdateCharClanInfo(pBlob); } break; case MC_MATCH_CLAN_RESPONSE_LEAVE_CLAN: { int nResult; pCommand->GetParameter(&nResult, 0, MPT_INT); OnClanResponseLeaveClan(nResult); } break; case MC_MATCH_CLAN_MASTER_RESPONSE_CHANGE_GRADE: { int nResult; pCommand->GetParameter(&nResult, 0, MPT_INT); OnClanResponseChangeGrade(nResult); } break; case MC_MATCH_CLAN_ADMIN_RESPONSE_EXPEL_MEMBER: { int nResult; pCommand->GetParameter(&nResult, 0, MPT_INT); OnClanResponseExpelMember(nResult); } break; case MC_MATCH_CLAN_MSG: { char szSenderName[256]; char szMsg[512]; pCommand->GetParameter(szSenderName, 0, MPT_STR, sizeof(szSenderName) ); pCommand->GetParameter(szMsg, 1, MPT_STR, sizeof( szMsg) ); //jintriple3 줄 바꿈 문자 필터링 //check chatting Message CheckMsgAboutChat(szMsg); OnClanMsg(szSenderName, szMsg); } break; case MC_MATCH_CLAN_RESPONSE_MEMBER_LIST: { CCCommandParameter* pParam = pCommand->GetParameter(0); if(pParam->GetType()!=MPT_BLOB) break; void* pBlob = pParam->GetPointer(); OnClanMemberList(pBlob); } break; case MC_MATCH_CLAN_RESPONSE_CLAN_INFO: { CCCommandParameter* pParam = pCommand->GetParameter(0); if(pParam->GetType()!=MPT_BLOB) break; void* pBlob = pParam->GetPointer(); OnClanResponseClanInfo(pBlob); } break; case MC_MATCH_CLAN_RESPONSE_EMBLEMURL: { int nCLID=0; int nEmblemChecksum=0; char szURL[4096]=""; pCommand->GetParameter(&nCLID, 0, MPT_INT); pCommand->GetParameter(&nEmblemChecksum, 1, MPT_INT); pCommand->GetParameter(szURL, 2, MPT_STR, sizeof(szURL) ); OnClanResponseEmblemURL(nCLID, nEmblemChecksum, szURL); } break; case MC_MATCH_CLAN_LOCAL_EMBLEMREADY: { int nCLID=0; char szURL[4096]=""; pCommand->GetParameter(&nCLID, 0, MPT_INT); pCommand->GetParameter(szURL, 1, MPT_STR, sizeof(szURL) ); OnClanEmblemReady(nCLID, szURL); } break; case MC_MATCH_RESPONSE_RESULT: { int nResult; pCommand->GetParameter(&nResult, 0, MPT_INT); if (nResult != MOK) { ZApplication::GetGameInterface()->ShowErrorMessage( nResult ); } } break; case MC_MATCH_RESPONSE_CHARINFO_DETAIL: { CCCommandParameter* pParam = pCommand->GetParameter(0); if (pParam->GetType()!=MPT_BLOB) break; void* pBlob = pParam->GetPointer(); OnResponseCharInfoDetail(pBlob); } break; case MC_MATCH_RESPONSE_PROPOSAL: { int nResult, nProposalMode, nRequestID; pCommand->GetParameter(&nResult, 0, MPT_INT); pCommand->GetParameter(&nProposalMode, 1, MPT_INT); pCommand->GetParameter(&nRequestID, 2, MPT_INT); OnResponseProposal(nResult, CCMatchProposalMode(nProposalMode), nRequestID); } break; case MC_MATCH_ASK_AGREEMENT: { CCUID uidProposer; // char szProposerCharName[256]; int nProposalMode, nRequestID; pCommand->GetParameter(&uidProposer, 0, MPT_UID); // pCommand->GetParameter(szProposerCharName, 1, MPT_STR); CCCommandParameter* pParam = pCommand->GetParameter(1); void* pMemberNamesBlob = pParam->GetPointer(); pCommand->GetParameter(&nProposalMode, 2, MPT_INT); pCommand->GetParameter(&nRequestID, 3, MPT_INT); OnAskAgreement(uidProposer, pMemberNamesBlob, CCMatchProposalMode(nProposalMode), nRequestID); } break; case MC_MATCH_REPLY_AGREEMENT: { CCUID uidProposer, uidChar; char szReplierName[256]; int nProposalMode, nRequestID; bool bAgreement; pCommand->GetParameter(&uidProposer, 0, MPT_UID); pCommand->GetParameter(&uidChar, 1, MPT_UID); pCommand->GetParameter(szReplierName, 2, MPT_STR, sizeof(szReplierName) ); pCommand->GetParameter(&nProposalMode, 3, MPT_INT); pCommand->GetParameter(&nRequestID, 4, MPT_INT); pCommand->GetParameter(&bAgreement, 5, MPT_BOOL); OnReplyAgreement(uidProposer, uidChar, szReplierName, CCMatchProposalMode(nProposalMode), nRequestID, bAgreement); } break; // 레더 커맨드 case MC_MATCH_LADDER_SEARCH_RIVAL: // 검색 시작 { ZGetGameInterface()->OnArrangedTeamGameUI(true); }break; case MC_MATCH_LADDER_CANCEL_CHALLENGE: { ZGetGameInterface()->OnArrangedTeamGameUI(false); char szCharName[MATCHOBJECT_NAME_LENGTH]; pCommand->GetParameter(szCharName, 0, MPT_STR, sizeof(szCharName) ); if(szCharName[0]!=0) { char szOutput[256]; ZTransMsg(szOutput,MSG_LADDER_CANCEL,1,szCharName); ZChatOutput(sColor(ZCOLOR_CHAT_SYSTEM), szOutput); }else // 이름이 없으면 실패한경우다. { ZChatOutput(sColor(ZCOLOR_CHAT_SYSTEM), ZMsg(MSG_LADDER_FAILED) ); } }break; case MC_MATCH_LADDER_RESPONSE_CHALLENGE: { int nResult; pCommand->GetParameter(&nResult, 0, MPT_INT); OnLadderResponseChallenge(nResult); } break; case MC_MATCH_LADDER_PREPARE: { CCUID uidStage; pCommand->GetParameter(&uidStage, 0, MPT_UID); int nTeam; pCommand->GetParameter(&nTeam, 1, MPT_INT); OnLadderPrepare(uidStage, nTeam); }break; case MC_MATCH_LADDER_LAUNCH: // 게임 시작 { CCUID uidStage; pCommand->GetParameter(&uidStage, 0, MPT_UID); char szMapName[128]; pCommand->GetParameter(szMapName, 1, MPT_STR, sizeof(szMapName) ); OnLadderLaunch(uidStage, szMapName); }break; case MC_MATCH_CLAN_STANDBY_CLAN_LIST: { int nPrevStageCount, nNextStageCount; pCommand->GetParameter(&nPrevStageCount, 0, MPT_INT); pCommand->GetParameter(&nNextStageCount, 1, MPT_INT); CCCommandParameter* pParam = pCommand->GetParameter(2); if(pParam->GetType()!=MPT_BLOB) break; void* pBlob = pParam->GetPointer(); OnClanStandbyClanList(nPrevStageCount, nNextStageCount, pBlob); } break; case MC_MATCH_CLAN_MEMBER_CONNECTED: { char szMember[256]; pCommand->GetParameter(szMember, 0, MPT_STR, sizeof(szMember) ); OnClanMemberConnected(szMember); } break; case MC_MATCH_NOTIFY_CALLVOTE: { char szDiscuss[128] = ""; char szArg[256] = ""; pCommand->GetParameter(szDiscuss, 0, MPT_STR, sizeof(szDiscuss) ); pCommand->GetParameter(szArg, 1, MPT_STR, sizeof(szArg) ); OnNotifyCallVote(szDiscuss, szArg); } break; case MC_MATCH_NOTIFY_VOTERESULT: { char szDiscuss[128]; int nResult = 0; pCommand->GetParameter(szDiscuss, 0, MPT_STR, sizeof(szDiscuss) ); pCommand->GetParameter(&nResult, 1, MPT_INT); OnNotifyVoteResult(szDiscuss, nResult); } break; case MC_MATCH_VOTE_RESPONSE: { int nMsgCode = 0; pCommand->GetParameter( &nMsgCode, 0, MPT_INT ); OnVoteAbort( nMsgCode ); } break; case MC_MATCH_BROADCAST_CLAN_RENEW_VICTORIES: { char szWinnerClanName[256], szLoserClanName[256]; int nVictories; pCommand->GetParameter(szWinnerClanName, 0, MPT_STR, sizeof(szWinnerClanName) ); pCommand->GetParameter(szLoserClanName, 1, MPT_STR, sizeof(szLoserClanName) ); pCommand->GetParameter(&nVictories, 2, MPT_INT); OnBroadcastClanRenewVictories(szWinnerClanName, szLoserClanName, nVictories); } break; case MC_MATCH_BROADCAST_CLAN_INTERRUPT_VICTORIES: { char szWinnerClanName[256], szLoserClanName[256]; int nVictories; pCommand->GetParameter(szWinnerClanName, 0, MPT_STR, sizeof(szWinnerClanName) ); pCommand->GetParameter(szLoserClanName, 1, MPT_STR, sizeof(szLoserClanName) ); pCommand->GetParameter(&nVictories, 2, MPT_INT); OnBroadcastClanInterruptVictories(szWinnerClanName, szLoserClanName, nVictories); } break; case MC_MATCH_BROADCAST_DUEL_RENEW_VICTORIES: { char szChannelName[256], szChampionName[256]; int nVictories, nRoomNo; pCommand->GetParameter(szChampionName, 0, MPT_STR, sizeof(szChampionName) ); pCommand->GetParameter(szChannelName, 1, MPT_STR, sizeof(szChannelName) ); pCommand->GetParameter(&nRoomNo, 2, MPT_INT); pCommand->GetParameter(&nVictories, 3, MPT_INT); OnBroadcastDuelRenewVictories(szChampionName, szChannelName, nRoomNo, nVictories); } break; case MC_MATCH_BROADCAST_DUEL_INTERRUPT_VICTORIES: { char szChampionName[256], szInterrupterName[256]; int nVictories; pCommand->GetParameter(szChampionName, 0, MPT_STR, sizeof(szChampionName) ); pCommand->GetParameter(szInterrupterName, 1, MPT_STR, sizeof(szInterrupterName) ); pCommand->GetParameter(&nVictories, 2, MPT_INT); OnBroadcastDuelInterruptVictories(szChampionName, szInterrupterName, nVictories); } break; case MC_MATCH_RESPONSE_STAGE_FOLLOW: { int nMsgID; pCommand->GetParameter( &nMsgID, 0, MPT_INT ); OnFollowResponse( nMsgID ); } break; case MC_MATCH_SCHEDULE_ANNOUNCE_SEND : { char cAnnounce[ 512 ] = {0}; pCommand->GetParameter( cAnnounce, 0, MPT_STR , sizeof(cAnnounce) ); ZChatOutput( cAnnounce ); } break; case MC_MATCH_EXPIRED_RENT_ITEM: { CCCommandParameter* pParam = pCommand->GetParameter(0); if(pParam->GetType()!=MPT_BLOB) break; void* pBlob = pParam->GetPointer(); OnExpiredRentItem(pBlob); } break; case MC_MATCH_FIND_HACKING: { } break; case MC_MATCH_REWARD_BATTLE_TIME: { CCUID uidOwner; char szRewardName[256], szRewardResetDesc[256]; int nRemainReward; unsigned int nItemId, nItemCnt; unsigned int nRentHourPeriod; pCommand->GetParameter(&uidOwner, 0, MPT_UID); pCommand->GetParameter(szRewardName, 1, MPT_STR, sizeof(szRewardName) ); pCommand->GetParameter(szRewardResetDesc, 2, MPT_STR, sizeof(szRewardResetDesc) ); pCommand->GetParameter(&nItemId, 3, MPT_UINT); pCommand->GetParameter(&nItemCnt, 4, MPT_UINT); pCommand->GetParameter(&nRentHourPeriod, 5, MPT_UINT); pCommand->GetParameter(&nRemainReward, 6, MPT_INT); const char* szCharName = "-"; const char* szItemName = "-"; if (ZGetCharacterManager()) { ZCharacter* pChar = ZGetCharacterManager()->Find(uidOwner); if (pChar) szCharName = pChar->GetUserName(); } CCMatchItemDesc* pItemDesc = CCGetMatchItemDescMgr()->GetItemDesc(nItemId); if (pItemDesc) szItemName = pItemDesc->m_pMItemName->Ref().m_szItemName; else { const ZGambleItemDefine* pGItemDef = ZGetGambleItemDefineMgr().GetGambleItemDefine(nItemId); if (pGItemDef) szItemName = pGItemDef->GetName().c_str(); } // 이 커맨드는 // 1. 보상을 실제로 받은 경우 // 2. 보상을 받을 수 있지만 기회가 남지 않아서 받을 수 없는 경우 // 두 경우 모두 전송받는다. 따라서 상황에 맞게 적절한 처리가 필요하다 bool bRewardReally = (nItemId != 0); bool bMyReward = (ZGetMyUID() == uidOwner); if (bRewardReally) { TimeReward_ShowCharEffect(uidOwner); // 캐릭터 머리 위에 이펙트 출력 TimeReward_ChatOutput_RewardGet(szRewardName, szCharName, szItemName); // '누가 무엇을 받았다' 출력 if (bMyReward) // 나 자신을 위한 커맨드라면 { if (nRemainReward >= 1) TimeReward_ChatOutput_RemainChance(nRemainReward); // 남은 기회를 출력 else if (nRemainReward == 0) TimeReward_ChatOutput_ResetChance(szRewardResetDesc); // 이번에 받은 것이 마지막 기회였다면 재충전 시각 공지 else if (nRemainReward == -1) int a=0;// 이 경우는 별도의 기회 제한이 없는 이벤트를 나타낸다, 특별히 기회에 대한 출력문을 보여주지 않는다 } } else // 조건은 충족했으나 남은 기회가 없어 받지 못한 경우 { if (bMyReward) { TimeReward_ChatOutput_NoChance(szRewardName); // 기회가 없어서 받지 못함을 알려주고 TimeReward_ChatOutput_ResetChance(szRewardResetDesc); // 재충전 시각을 공지 } } } break; // 듀얼 토너먼트 #ifdef _DUELTOURNAMENT case MC_MATCH_DUELTOURNAMENT_RESPONSE_JOINGAME: { int nResult; pCommand->GetParameter(&nResult, 0, MPT_INT); switch (nResult) { case MERR_DT_WRONG_CHANNEL: ZApplication::GetGameInterface()->ShowErrorMessage( nResult ); cclog("Error: Illegal request to join game, This isn't a duel tournament channel.\n"); break; case MERR_DT_CANNOT_CHALLENGE: ZApplication::GetGameInterface()->ShowErrorMessage( nResult ); cclog("Error: failed to challenge a duel tournament game.\n"); break; case MERR_DT_ALREADY_JOIN: ZApplication::GetGameInterface()->ShowErrorMessage( nResult ); cclog("Error: already trying to join a duel tournament game.\n"); break; } } break; case MC_MATCH_DUELTOURNAMENT_PREPARE_MATCH: { CCUID uidStage = CCUID(0,0); int nType; pCommand->GetParameter(&uidStage, 0, MPT_UID); pCommand->GetParameter(&nType, 1, MPT_INT); CCCommandParameter* pParam = pCommand->GetParameter(2); void* pBlobPlayerInfo = pParam->GetPointer(); OnDuelTournamentPrepare((CCDUELTOURNAMENTTYPE)nType, uidStage, pBlobPlayerInfo); } break; case MC_MATCH_DUELTOURNAMENT_LAUNCH_MATCH: { CCUID uidStage; pCommand->GetParameter(&uidStage, 0, MPT_UID); char szMapName[128]; pCommand->GetParameter(szMapName, 1, MPT_STR, sizeof(szMapName) ); ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); CCWidget* pWidget = pResource->FindWidget("DuelTournamentWaitMatchDialog"); if(pWidget!=NULL) pWidget->Show(false); OnDuelTournamentLaunch(uidStage, szMapName); } break; case MC_MATCH_DUELTOURNAMENT_NOT_SERVICE_TIME: { int nOpenStartTime; int nOpenEndTime; pCommand->GetParameter(&nOpenStartTime, 0, MPT_INT); pCommand->GetParameter(&nOpenEndTime, 1, MPT_INT); // 듀얼토너먼트 신청이 서비스 시간에 따라 취소 되었음. ZApplication::GetGameInterface()->OnDuelTournamentGameUI(false); // 참가 신청 박스 닫아준다. const char *strFormat = ZErrStr( MERR_DT_NOT_SERVICE_TIME ); if(strFormat) { char text[1024]; sprintf(text, strFormat, nOpenStartTime, nOpenEndTime); ZApplication::GetGameInterface()->ShowErrorMessage(text, MERR_DT_NOT_SERVICE_TIME); } } break; case MC_MATCH_DUELTOURNAMENT_CHAR_INFO: { pCommand->GetParameter(&m_dtCharInfo.tournamentPoint, 0, MPT_INT); pCommand->GetParameter(&m_dtCharInfo.wins, 1, MPT_INT); pCommand->GetParameter(&m_dtCharInfo.losses, 2, MPT_INT); pCommand->GetParameter(&m_dtCharInfo.ranking, 3, MPT_INT); //pCommand->GetParameter(&rankingFructuation, 4, MPT_INT); pCommand->GetParameter(&m_dtCharInfo.winners, 5, MPT_INT); pCommand->GetParameter(&m_dtCharInfo.lastWeekGrade, 6, MPT_INT); ZGetGameInterface()->UpdateDuelTournamantMyCharInfoUI(); } break; case MC_MATCH_DUELTOURNAMENT_CHAR_INFO_PREVIOUS: { pCommand->GetParameter(&m_dtCharInfoPrev.tournamentPoint, 0, MPT_INT); pCommand->GetParameter(&m_dtCharInfoPrev.wins, 1, MPT_INT); pCommand->GetParameter(&m_dtCharInfoPrev.losses, 2, MPT_INT); pCommand->GetParameter(&m_dtCharInfoPrev.ranking, 3, MPT_INT); pCommand->GetParameter(&m_dtCharInfoPrev.winners, 4, MPT_INT); ZGetGameInterface()->UpdateDuelTournamantMyCharInfoPreviousUI(); } break; #endif //_DUELTOURNAMENT // Gamble 아이템 case MC_MATCH_RESPONSE_GAMBLE: { unsigned int nRecvItem; unsigned int nCnt; unsigned int nTime; pCommand->GetParameter(&nRecvItem, 0, MPT_UINT); pCommand->GetParameter(&nCnt, 1, MPT_UINT); pCommand->GetParameter(&nTime, 2, MPT_UINT); OnRecieveGambleItem( nRecvItem, nCnt, nTime); } break; case MC_QUEST_NPCLIST : { CCCommandParameter* pParam = pCommand->GetParameter( 0 ); if( MPT_BLOB != pParam->GetType() ) { break; } void* pBlobNPCList = pParam->GetPointer(); if( NULL == pBlobNPCList ) { return false; } int gameType; if (!pCommand->GetParameter(&gameType, 1, MPT_INT)) { ASSERT(0); return false; } OnQuestNPCList( pBlobNPCList, (CCMATCH_GAMETYPE)gameType ); } break; case MC_REQUEST_RESOURCE_CRC32 : { DWORD dwKey = 0; pCommand->GetParameter( &dwKey, 0, MPT_UINT ); DWORD dwCrc32, dwXor; ZGetGame()->MakeResourceCRC32(dwKey, dwCrc32, dwXor); ZPostResponseResourceCRC32( dwCrc32, dwXor ); } break; case MC_MATCH_ROUTE_UPDATE_STAGE_EQUIP_LOOK : { CCUID uidPlayer; int nParts; int nItemID; pCommand->GetParameter( &uidPlayer, 0, MPT_UID ); pCommand->GetParameter( &nParts, 1, MPT_INT ); pCommand->GetParameter( &nItemID, 2, MPT_INT ); OnResponseUpdateStageEquipLook( uidPlayer, nParts, nItemID ); } break; case MC_ADMIN_RESPONSE_KICK_PLAYER: { int nResult; pCommand->GetParameter( &nResult, 0, MPT_INT ); OnAdminResponseKickPlayer(nResult); } break; case MC_ADMIN_RESPONSE_BLOCK_PLAYER: { int nResult; pCommand->GetParameter( &nResult, 0, MPT_INT ); OnAdminResponseBlockPlayer(nResult); } break; case MC_ADMIN_RESPONSE_MUTE_PLAYER: { int nResult; pCommand->GetParameter( &nResult, 0, MPT_INT ); OnAdminResponseMutePlayer(nResult); } break; default: if (!ret) { // CCClient::OutputMessage(CCZMOM_LOCALREPLY, "Command(%s) handler not found", pCommand->m_pCommandDesc->GetName()); // return false; } break; } if (m_fnOnCommandCallback) ret = m_fnOnCommandCallback(pCommand); return ret; }
bool CCMatchConfig::Create() { int nTemp = 0; GetPrivateProfileString("DB", "DNS", "gunzdb", m_szDB_DNS, 64, SERVER_CONFIG_FILENAME); GetPrivateProfileString("DB", "USERNAME", "gunzdb", m_szDB_UserName, 64, SERVER_CONFIG_FILENAME); GetPrivateProfileString("DB", "PASSWORD", "gunzdb", m_szDB_Password, 64, SERVER_CONFIG_FILENAME); m_nMaxUser = GetPrivateProfileInt("SERVER", "MAXUSER", 1500, SERVER_CONFIG_FILENAME); m_nServerID = GetPrivateProfileInt("SERVER", "SERVERID", 1500, SERVER_CONFIG_FILENAME); GetPrivateProfileString("SERVER", "SERVERNAME", "matchserver", m_szServerName, 256, SERVER_CONFIG_FILENAME); m_nServerPort = GetPrivateProfileInt("SERVER", "SERVERPORT", 6000, SERVER_CONFIG_FILENAME); m_nServerUDPPort = GetPrivateProfileInt("SERVER", "SERVERUDPPORT", 7777, SERVER_CONFIG_FILENAME); char szServerMode[128] = ""; GetPrivateProfileString("SERVER", "MODE", SERVER_CONFIG_SERVERMODE_NORMAL, szServerMode, 128, SERVER_CONFIG_FILENAME); if (!stricmp(szServerMode, SERVER_CONFIG_SERVERMODE_NORMAL)) m_nServerMode = CSM_NORMAL; else if (!stricmp(szServerMode, SERVER_CONFIG_SERVERMODE_CLAN)) m_nServerMode = CSM_CLAN; else if (!stricmp(szServerMode, SERVER_CONFIG_SERVERMODE_LADDER)) m_nServerMode = CSM_LADDER; else if (!stricmp(szServerMode, SERVER_CONFIG_SERVERMODE_EVENT)) m_nServerMode = CSM_EVENT; else if (!stricmp(szServerMode, SERVER_CONFIG_SERVERMODE_TEST)) m_nServerMode = CSM_TEST; else { _ASSERT(0); } m_bEnabledSurvivalMode = (0 != GetPrivateProfileInt("SERVER", "SURVIVALENABLE", 1, SERVER_CONFIG_FILENAME)); m_dwSurvivalRankingDailyRequestHour = GetPrivateProfileInt("SERVER", "SURVIVALRANKING_DAILY_REQUEST_HOUR", 5, SERVER_CONFIG_FILENAME); m_dwSurvivalRankingDailyRequestMin = GetPrivateProfileInt("SERVER", "SURVIVALRANKING_DAILY_REQUEST_MINUTE", 0, SERVER_CONFIG_FILENAME); if (m_dwSurvivalRankingDailyRequestHour < 0 || m_dwSurvivalRankingDailyRequestHour >= 24) { cclog("[ASSERTION FAILED!] %s : SURVIVALRANKING_DAILY_REQUEST_HOUR invalid!\n", SERVER_CONFIG_FILENAME); _ASSERT(0); } if (m_dwSurvivalRankingDailyRequestMin < 0 || m_dwSurvivalRankingDailyRequestMin >= 60) { cclog("[ASSERTION FAILED!] %s : SURVIVALRANKING_DAILY_REQUEST_MINUTE invalid!\n", SERVER_CONFIG_FILENAME); _ASSERT(0); } m_dwDuelTournamentMatchMakingInterval = GetPrivateProfileInt("SERVER", "DUELTOURNAMENT_MATCHMAKING_INTERVAL", 1000, SERVER_CONFIG_FILENAME); m_dwDuelTournamentMatchMaingAcceptableTpGap = GetPrivateProfileInt("SERVER", "DUELTOURNAMENT_MATCHMAKING_ACCEPTABLE_TP_GAP", 10, SERVER_CONFIG_FILENAME); m_dwDuelTournamentMatchMaingWaitLimit = GetPrivateProfileInt("SERVER", "DUELTOURNAMENT_MATCHMAKING_WAIT_LIMIT", 10000, SERVER_CONFIG_FILENAME); if (m_dwDuelTournamentMatchMakingInterval > 10000) cclog("[WARNING] %s : DUELTOURNAMENT_MATCHMAKING_INTERVAL is too big.\n", SERVER_CONFIG_FILENAME); if (m_dwDuelTournamentMatchMaingAcceptableTpGap > 1000) cclog("[WARNING] %s : DUELTOURNAMENT_MATCHMAKING_ACCEPTABLE_TP_GAP is too big.\n", SERVER_CONFIG_FILENAME); if (m_dwDuelTournamentMatchMaingWaitLimit > 60000) cclog("[WARNING] %s : DUELTOURNAMENT_MATCHMAKING_WAIT_LIMIT is too big.\n", SERVER_CONFIG_FILENAME); m_dwDuelTournamentServiceStartTime = GetPrivateProfileInt("SERVER", "DUELTOURNAMENT_SERVICE_START_TIME ", 0, SERVER_CONFIG_FILENAME); m_dwDuelTournamentServiceEndTime = GetPrivateProfileInt("SERVER", "DUELTOURNAMENT_SERVICE_END_TIME ", 23, SERVER_CONFIG_FILENAME); if(m_dwDuelTournamentServiceStartTime > 23) { m_dwDuelTournamentServiceStartTime = 23; cclog("[WARNING] %s : DUELTOURNAMENT_SERVICE_START_TIME is too big. max is 23.\n", SERVER_CONFIG_FILENAME);_ASSERT(0); } if(m_dwDuelTournamentServiceEndTime > 23) { m_dwDuelTournamentServiceEndTime = 23; cclog("[WARNING] %s : DUELTOURNAMENT_SERVICE_END_TIME is too big. max is 23.\n", SERVER_CONFIG_FILENAME);_ASSERT(0); } if( 0 > m_dwDuelTournamentServiceStartTime) { m_dwDuelTournamentServiceStartTime = 0; cclog("[WARNING] %s : DUELTOURNAMENT_SERVICE_START_TIME must be a positive value.\n", SERVER_CONFIG_FILENAME);_ASSERT(0); } if( 0 > m_dwDuelTournamentServiceEndTime) { m_dwDuelTournamentServiceEndTime = 0; cclog("[WARNING] %s : DUELTOURNAMENT_SERVICE_END_TIME must be a positive value.\n", SERVER_CONFIG_FILENAME);_ASSERT(0); } m_bSendLoginUserToDuelTournamentChannel = (0 != GetPrivateProfileInt("SERVER", "SEND_LOGINUSER_TO_DUELTOURNAMENT_CHANNEL", 1, SERVER_CONFIG_FILENAME)); m_bEnabledDuelTournament = (0 != GetPrivateProfileInt("SERVER", "DUELTOURNAMENT_ENABLE", 1, SERVER_CONFIG_FILENAME)); m_dwBRDescriptionRefreshInterval = GetPrivateProfileInt("BATTLETIMEREWARD", "BATTLETIMEREWARD_REFRESH_INTERVAL", 5, SERVER_CONFIG_FILENAME); m_dwBRDescriptionRefreshInterval = m_dwBRDescriptionRefreshInterval * 60 * 1000; // 인원제한 무시하는 허용IP char szAllowIP[1024] = ""; char* pNextArg = szAllowIP; GetPrivateProfileString("SERVER", "FREELOGINIP", "", szAllowIP, 1024, SERVER_CONFIG_FILENAME); CCLex lex; while(true) { char szIP[128] = ""; pNextArg = lex.GetOneArg(pNextArg, szIP); if (*szIP == NULL) break; AddFreeLoginIP(szIP); } char szDebug[4] = {0,}; GetPrivateProfileString( "SERVER", "DEBUG", SERVER_CONFIG_DEBUG_DEFAULT, szDebug, 4, SERVER_CONFIG_FILENAME ); if( 0 == stricmp("0", szDebug) ) m_bIsDebugServer = false; else m_bIsDebugServer = true; // Debug ip. char szDebugIP[ 1024 ] = {0,}; char* pNextDbgIP = szDebugIP; GetPrivateProfileString( "SERVER", "DEBUGIP", "", szDebugIP, 1024, SERVER_CONFIG_FILENAME ); while(true) { char szIP[128] = ""; pNextDbgIP = lex.GetOneArg(pNextDbgIP, szIP); if (*szIP == NULL) break; AddDebugLoginIP(szIP); } if( !LoadMonitorIPnPort() ) { cclog( "server.ini - monitor ip not setting\n" ); return false; } if( !LoadKeeperIP() ) { cclog( "server.ini - Keeper ip not setting\n" ); return false; } // 프리미엄 IP 체크 int nCheckPremiumIP = GetPrivateProfileInt("SERVER", "CheckPremiumIP", 0, SERVER_CONFIG_FILENAME); if (nCheckPremiumIP != 0) m_bCheckPremiumIP = true; char szCountry[ 32 ] = ""; GetPrivateProfileString( "SERVER", "COUNTRY", "", szCountry, 31, SERVER_CONFIG_FILENAME ); if( 0 != strlen(szCountry) ) m_strCountry = szCountry; else { ASSERT( 0 ); cclog( "server.ini - Invalid country type.\n" ); return false; } char szLanguage[ 32 ] = ""; GetPrivateProfileString( "SERVER", "LANGUAGE", "", szLanguage, 31, SERVER_CONFIG_FILENAME ); if( 0 != strlen(szLanguage) ) m_strLanguage = szLanguage; else { ASSERT( 0 ); cclog( "server.ini - Invalid language type.\n" ); return false; } char szIsUseTicket[ 2 ] = ""; GetPrivateProfileString( "SERVER", "USETICKET", SERVER_CONFIG_USE_TICKET, szIsUseTicket, 2, SERVER_CONFIG_FILENAME ); if( 0 != strlen(szIsUseTicket) ) m_bIsUseTicket = static_cast< bool >( atoi(szIsUseTicket) ); else { ASSERT( 0 ); cclog( "server.ini - invalid ticket setting.\n" ); return false; } char szGameguard[ 2 ] = ""; GetPrivateProfileString( "SERVER", "GAMEGUARD", "1", szGameguard, 2, SERVER_CONFIG_FILENAME ); if( 1 == atoi(szGameguard) ) m_bIsUseGameguard = true; else { cclog( "gameguard not running\n" ); m_bIsUseGameguard = false; } char szNHNUSAAuth[ 2 ] = ""; GetPrivateProfileString( "SERVER", "NHNUSA_AUTH", "1", szNHNUSAAuth, 2, SERVER_CONFIG_FILENAME ); if( 1 == atoi(szNHNUSAAuth) ) m_bIsUseNHNUSAAuth = true; else { m_bIsUseNHNUSAAuth = false; cclog( "nhn usa auth not running.\n" ); } char szNHNServerMode[ 2 ] = ""; GetPrivateProfileString( "SERVER", "NHN_SERVERMODE", "r", szNHNServerMode, 2, SERVER_CONFIG_FILENAME ); if( 0 == stricmp("r", szNHNServerMode) ) { m_NHNServerMode = NSM_REAL; //cclog( "nhn server mode is real\n" ); } else if( 0 == stricmp("a", szNHNServerMode) ) { m_NHNServerMode = NSM_ALPHA; //cclog( "nhn server mode is alpha\n" ); } // 일본 넷마블 전용 GetPrivateProfileString("LOCALE", "DBAgentIP", SERVER_CONFIG_DEFAULT_NJ_DBAGENT_IP, m_NJ_szDBAgentIP, 64, SERVER_CONFIG_FILENAME); m_NJ_nDBAgentPort = GetPrivateProfileInt("LOCALE", "DBAgentPort", SERVER_CONFIG_DEFAULT_NJ_DBAGENT_PORT, SERVER_CONFIG_FILENAME); m_NJ_nGameCode = GetPrivateProfileInt("LOCALE", "GameCode", SERVER_CONFIG_DEFAULT_NJ_DBAGENT_GAMECODE, SERVER_CONFIG_FILENAME); ReadEnableMaps(); // filer. char szUse[ 2 ] = {0,}; GetPrivateProfileString( "FILTER", "USE", "0", szUse, 2, SERVER_CONFIG_FILENAME ); SetUseFilterState( atoi(szUse) ); char szAccept[ 2 ] = {0,}; GetPrivateProfileString( "FILTER", "ACCEPT_INVALID_IP", "1", szAccept, 2, SERVER_CONFIG_FILENAME ); SetAcceptInvalidIPState( atoi(szAccept) ); // environment char szUseHShield[ 2 ] = {0,}; GetPrivateProfileString("ENVIRONMENT", "USE_HSHIELD", SERVER_CONFIG_DEFAULT_USE_HSHIELD, szUseHShield, 2, SERVER_CONFIG_FILENAME); ASSERT( 0 != strlen(szUseHShield) ); if( 0 == stricmp("1", szUseHShield) ) m_bIsUseHShield = true; else m_bIsUseHShield = false; char szUseXTrap[ 2 ] = {0,}; GetPrivateProfileString("ENVIRONMENT", "USE_XTRAP", SERVER_CONFIG_DEFAULT_USE_XTRAP, szUseXTrap, 2, SERVER_CONFIG_FILENAME); ASSERT( 0 != strlen(szUseXTrap) ); if( 0 == stricmp("1", szUseXTrap) ) m_bIsUseXTrap = true; else m_bIsUseXTrap = false; char szUseEvent[ 2 ] = {0,}; GetPrivateProfileString("ENVIRONMENT", "USE_EVENT", SERVER_CONFIG_DEFAULT_USE_EVENT, szUseEvent, 2, SERVER_CONFIG_FILENAME); ASSERT( 0 != strlen(szUseEvent) ); if( 0 == stricmp("1", szUseEvent) ) m_bIsUseEvent = true; else m_bIsUseEvent = false; char szUseFileCrc[ 2 ] = {0,}; GetPrivateProfileString("ENVIRONMENT", "USE_FILECRC", SERVER_CONFIG_DEFAULT_USE_FILECRC, szUseFileCrc, 2, SERVER_CONFIG_FILENAME); ASSERT( 0 != strlen(szUseFileCrc) ); if( 0 == stricmp("1", szUseFileCrc) ) m_bIsUseFileCrc = true; else m_bIsUseFileCrc = false; char szUseMD5[ 2 ] = {0,}; GetPrivateProfileString("ENVIRONMENT", "USE_MD5", SERVER_CONFIG_DEFAULT_USE_FILECRC, szUseMD5, 2, SERVER_CONFIG_FILENAME); ASSERT( 0 != strlen(szUseMD5) ); if( 0 == stricmp("1", szUseMD5) ) m_bIsUseMD5 = true; else m_bIsUseMD5 = false; char szBlockFlooding[ 2 ] = {0,}; GetPrivateProfileString("ENVIRONMENT", "BLOCK_FLOODING", SERVER_CONFIG_DEFAULT_BLOCK_FLOODING, szBlockFlooding, 2, SERVER_CONFIG_FILENAME); ASSERT( 0 != strlen(szBlockFlooding) ); if( 0 == stricmp("1", szBlockFlooding) ) m_bBlockFlooding = true; else m_bBlockFlooding = false; if( m_bIsUseHShield && m_bIsUseXTrap ) { ASSERT( 0 && "hackshield와 x-trap은 같이 사용할 수 없다." ); cclog( "server.ini - HackShield and XTrap is duplicated\n" ); return false; } char szBlockHacking[ 2 ] = {0,}; GetPrivateProfileString("ENVIRONMENT", "USE_BLOCKHACKING", 0, szBlockHacking, 2, SERVER_CONFIG_FILENAME); ASSERT( 0 != strlen(szBlockHacking) ); if( 0 == stricmp("1", szBlockHacking) ) m_bIsUseBlockHancking = true; else m_bIsUseBlockHancking = false; // 새로운 아이템 정책1. 아이템의 일치성 보장 // Added By 홍기주(2010-04-07) char szItemConsistency[ 2 ] = {0,}; GetPrivateProfileString("ENVIRONMENT", "USE_ITEM_CONSISTENCY", 0, szItemConsistency, 2, SERVER_CONFIG_FILENAME); ASSERT( 0 != strlen(szItemConsistency) ); if( 0 == stricmp("1", szItemConsistency) ) m_bIsUseItemConsistency = true; else m_bIsUseItemConsistency = false; InitKillTrackerConfig(); InitPowerLevelingConfig(); char szUseResourceCRC32CacheCheck[ 2 ] = {0,}; GetPrivateProfileString("ENVIRONMENT" , "USE_RESOURCECRC32CACHECKECK" , SERVER_CONFIG_DEFAULT_USE_RESOURCECRC32CACHECHECK , szUseResourceCRC32CacheCheck, 2, SERVER_CONFIG_FILENAME); ASSERT( 0 != strlen(szUseResourceCRC32CacheCheck) ); if( 0 == stricmp("1", szUseResourceCRC32CacheCheck) ) m_bIsUseResourceCRC32CacheCheck = true; else m_bIsUseResourceCRC32CacheCheck = false; InitLoopLogConfig(); m_bIsComplete = true; return m_bIsComplete; }