ZPlayerListBox* GetProperClanListOutput() { ZIDLResource* pIDLResource = ZApplication::GetGameInterface()->GetIDLResource(); GunzState nState = ZApplication::GetGameInterface()->GetState(); switch(nState) { case GUNZ_LOBBY: { ZPlayerListBox* pList = (ZPlayerListBox*)pIDLResource->FindWidget("LobbyChannelPlayerList"); if (pList && pList->GetMode() == ZPlayerListBox::PLAYERLISTMODE_CHANNEL_CLAN) return pList; else return NULL; } break; case GUNZ_STAGE: { ZPlayerListBox* pList = (ZPlayerListBox*)pIDLResource->FindWidget("StagePlayerList_"); if (pList && pList->GetMode() == ZPlayerListBox::PLAYERLISTMODE_STAGE_CLAN) return pList; else return NULL; } break; }; return NULL; }
void ZGameClient::OnClanAskJoinAgreement(const char* szClanName, MUID& uidClanAdmin, const char* szClanAdmin) { // 받을수 없는 상황이면 무시 if(!ZGetGameInterface()->IsReadyToPropose()) return; m_uidRequestPlayer = uidClanAdmin; ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); MTextArea* pTextEdit = (MTextArea*)pResource->FindWidget("ClanJoinerAgreementConfirm_Textarea"); if (pTextEdit) { char szTemp[256]; // ZTransMsg(szTemp, MSG_CLAN_JOINER_AGREEMENT_LABEL, 1, szClanName); ZTransMsg(szTemp, MSG_CLAN_JOINER_AGREEMENT_LABEL, 1, szClanName); pTextEdit->SetText(szTemp); } MWidget* pWidget = pResource->FindWidget("ClanJoinerAgreementConfirm"); if(pWidget!=NULL) { static ZCOUNTDOWN countDown = {30,"ClanJoinerAgreementConfirm_Remain", "ClanJoinerAgreementConfirm",OnClanAskJoinAgreement_OnExpire}; countDown.nSeconds=30; // static 이므로 재설정 ZApplication::GetTimer()->SetTimerEvent(0, &OnTimer_CountDown, &countDown, true); pWidget->Show(true, true); } }
void ShowProposalWaitFrame(bool bVisible, const char* szTitle, const char* szMessage) { ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); MWidget* pWidget = pResource->FindWidget("ProposalAgreementWait"); if(pWidget!=NULL) { if (bVisible) { pWidget->SetText(szTitle); MTextArea* pTextArea = (MTextArea*)pResource->FindWidget("ProposalAgreementWait_Textarea"); if (pTextArea) { pTextArea->SetText(szMessage); } static ZCOUNTDOWN countDown = {PROPOSAL_AGREEMENT_TIMEOUT_SEC, "ProposalAgreementWait_Remain", "ProposalAgreementWait", ShowProposalWaitFrame_OnExpire}; countDown.nSeconds=PROPOSAL_AGREEMENT_TIMEOUT_SEC; // static 이므로 재설정 ZApplication::GetTimer()->SetTimerEvent(0, &OnTimer_CountDown, &countDown, true); pWidget->Show(true, true); } else { pWidget->Show(false); } } }
/*********************************************************************** OnDestroy : public desc : 몬스터 도감 감추기 arg : none ret : none ************************************************************************/ void ZMonsterBookInterface::OnDestroy( void) { // Get resource pointer ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); // 몬스터 도감 감추기 CCWidget* pWidget = pResource->FindWidget( "MonsterBook"); if ( pWidget) pWidget->Show( false); // 배경 책 이미지를 메모리로부터 삭제한다 if ( m_pBookBgImg != NULL) { // 배경 책 이미지를 보여주는 위젯의 비트맵 이미지 포인터를 리셋한다 CCPicture* pPicture = (CCPicture*)pResource->FindWidget( "MonsterBook_BookBG"); if ( pPicture) pPicture->SetBitmap( NULL); delete m_pBookBgImg; m_pBookBgImg = NULL; } // 해당 몬스터의 일러스트 이미지 삭제 if ( m_pIllustImg) { CCPicture* pPicture = (CCPicture*)pResource->FindWidget( "MonsterBook_MonsterIllust"); if ( pPicture) pPicture->SetBitmap( NULL); delete m_pIllustImg; m_pIllustImg = NULL; } // 몬스터 도감 페이지 정보 리스트 삭제 if ( !m_mapMonsterBookPage.empty()) { for ( ZMonsterBookPageItr itr = m_mapMonsterBookPage.begin(); itr != m_mapMonsterBookPage.end(); itr++) delete (*itr).second; m_mapMonsterBookPage.clear(); } // 로비 UI 보이기 pWidget = pResource->FindWidget( "Lobby"); if ( pWidget) pWidget->Show( true); }
/// 동의을 기다리고 있는지의 여부 - ui로 체크한다. bool IsWaitingRepliersAgreement() { ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); MWidget* pWidget = pResource->FindWidget("ProposalAgreementWait"); if(pWidget!=NULL) { return pWidget->IsVisible(); } return false; }
/// 클랜가입 동의을 기다리고 있는지의 여부 bool IsWaitingClanJoiningAgree() { ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); MWidget* pWidget = pResource->FindWidget("ClanJoinerAgreementWait"); if(pWidget!=NULL) { return pWidget->IsVisible(); } return false; }
void ZItemMenu::SetupMenu() { RemoveAllMenuItem(); ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); ZShopEquipListbox* pItemListBox = (ZShopEquipListbox*)pResource->FindWidget("EquipmentList"); ZItemMenuItem* pMenuItem = new ZItemMenuItem(ZCMD_ITEMMENU_BRINGBACK_ACCOUNTITEM, ZMsg( MSG_MENUITEM_SENTTOBANK)); pMenuItem->SetSize(GetFont()->GetWidth(pMenuItem->GetText())+5, GetFont()->GetHeight()); AddMenuItem(pMenuItem); // Add하면서 MenuItem Resize됨 }
/*********************************************************************** OnCreate : public desc : 몬스터 도감 보이기 arg : none ret : none ************************************************************************/ void ZMonsterBookInterface::OnCreate( void) { // Get resource pointer ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); // 변수 초기화 m_nTotalPageNum = 0; m_nCurrentPageNum = 0; // 퀘스트에 필요한 정보 로딩 LoadMonsterBookInfo(); // 로비 UI 감추기 CCWidget* pWidget = pResource->FindWidget( "Lobby"); if ( pWidget) pWidget->Show( false); // 페이지를 그린다 DrawPage(); // 몬스터 도감 보이기 pWidget = pResource->FindWidget( "MonsterBook"); if ( pWidget) pWidget->Show( true); // 스트립 이미지 애니메이션 CCPicture* pPicture = (CCPicture*)pResource->FindWidget( "MonsterBook_StripBottom"); if( pPicture) pPicture->SetAnimation( 0, 1000.0f); pPicture = (CCPicture*)pResource->FindWidget( "MonsterBook_StripTop"); if( pPicture) pPicture->SetAnimation( 1, 1000.0f); }
bool ZShopEquipInterface::IsEquipmentFrameListOpened( const char* szName) { ZIDLResource* pResource = GetIDLResource(); char szTemp[256]; MPicture* pPicture; strcpy( szTemp, szName); if (GetArmorWeaponTabIndex() == 0) { strcat( szTemp, "_ArmorBGListFrameOpen"); pPicture = (MPicture*)pResource->FindWidget( szTemp); if (pPicture) return pPicture->IsVisible(); } else if (GetArmorWeaponTabIndex() == 1) { strcat( szTemp, "_WeaponBGListFrameOpen"); pPicture = (MPicture*)pResource->FindWidget( szTemp); if (pPicture) return pPicture->IsVisible(); } return false; }
void SetCountdown(const ZCOUNTDOWN& Countdown) { auto Callback = [Countdown = Countdown]() mutable { ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); MWidget* pTargetWidget = pResource->FindWidget(Countdown.szTargetWidget); if (!pTargetWidget || !pTargetWidget->IsVisible()) return true; if (Countdown.nSeconds > 0) { if (Countdown.szLabelWidget != NULL) { ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); MWidget* pWidget = pResource->FindWidget(Countdown.szLabelWidget); if (pWidget) { char buffer[256]; sprintf_safe(buffer, "%d", Countdown.nSeconds); pWidget->SetText(buffer); } } Countdown.nSeconds--; return false; } pTargetWidget->Show(false); if (Countdown.pCallBack) Countdown.pCallBack(); return true; }; ZApplication::GetTimer()->SetTimerEvent(1000, Callback); }
void ShowClanSponsorAgreeWaitFrame(bool bVisible) { ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); MWidget* pWidget = pResource->FindWidget("ClanSponsorAgreementWait"); if(pWidget!=NULL) { if (bVisible) { static ZCOUNTDOWN countDown = {30,"ClanSponsorAgreementWait_Remain", "ClanSponsorAgreementWait",ShowClanSponsorAgreeWaitFrame_OnExpire}; countDown.nSeconds=30; // static 이므로 재설정 ZApplication::GetTimer()->SetTimerEvent(0, &OnTimer_CountDown, &countDown, true); pWidget->Show(true, true); } else { pWidget->Show(false); } } }
void ZRoomListBox::RequestSelPrivateStageJoin() { MUID uidChar = ZGetGameClient()->GetPlayerUID(); ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); MUID uidStageUID = GetSelectedPrivateStageUID(); if (uidStageUID == MUID(0,0)) uidStageUID = GetSelRoomUID(); if (uidStageUID != MUID(0,0)) { MEdit* pPassEdit = (MEdit*)pResource->FindWidget("PrivateStagePassword"); if (pPassEdit!=NULL) { char szPassword[256]; strcpy_safe(szPassword, pPassEdit->GetText()); ZPostRequestPrivateStageJoin(uidChar, uidStageUID, szPassword); ZApplication::GetGameInterface()->EnableLobbyInterface(false); } } }
void ZGameClient::OnAskAgreement(const MUID& uidProposer, void* pMemberNamesBlob, const MMatchProposalMode nProposalMode, const int nRequestID) { // 응답할 수 없는 상황이면 바로 거절한다. if ((IsWaitingRepliersAgreement()) || (!ZGetGameInterface()->IsReadyToPropose())) { char szCharName[MATCHOBJECT_NAME_LENGTH]; sprintf(szCharName, ZGetMyInfo()->GetCharName()); ZPostReplyAgreement(uidProposer, GetPlayerUID(), szCharName, nProposalMode, nRequestID, false); return; } char szMemberNames[MAX_REPLIER][256]; // 0 번째는 제안자 int nMemberCount = MGetBlobArrayCount(pMemberNamesBlob); if (nMemberCount < 1) return; for (int i = 0; i < nMemberCount; i++) { MTD_ReplierNode* pReplierNode = (MTD_ReplierNode*)MGetBlobArrayElement(pMemberNamesBlob, i); strcpy(szMemberNames[i], pReplierNode->szName); } m_nProposalMode = nProposalMode; m_nRequestID = nRequestID; m_uidRequestPlayer = uidProposer; ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); MTextArea* pTextEdit = (MTextArea*)pResource->FindWidget("ProposalAgreementConfirm_Textarea"); if (pTextEdit) { // 여기서 각각의 상황에 맞는 대사를 넣어줘야한다. char szTemp[256] = ""; char szMembers[256] = " ("; for (int i = 0; i < nMemberCount; i++) { strcat(szMembers, szMemberNames[i]); if (i != nMemberCount-1) strcat(szMembers, ", "); } strcat(szMembers, ")"); switch (nProposalMode) { case MPROPOSAL_LADDER_INVITE: { // ZTransMsg(szTemp, MSG_LADDER_REPLIER_AGREEMENT_LABEL, 1, szMemberNames[0]); ZTransMsg(szTemp, MSG_LADDER_REPLIER_AGREEMENT_LABEL, 1, szMemberNames[0]); strcat(szTemp, szMembers); } break; case MPROPOSAL_CLAN_INVITE: { // ZTransMsg(szTemp, MSG_CLANBATTLE_REPLIER_AGREEMENT_LABEL, 1, szMemberNames[0]); ZTransMsg(szTemp, MSG_CLANBATTLE_REPLIER_AGREEMENT_LABEL, 1, szMemberNames[0]); strcat(szTemp, szMembers); } break; }; pTextEdit->SetText(szTemp); } MWidget* pWidget = pResource->FindWidget("ProposalAgreementConfirm"); if(pWidget!=NULL) { static ZCOUNTDOWN countDown = {PROPOSAL_AGREEMENT_TIMEOUT_SEC, "ProposalAgreementConfirm_Remain", "ProposalAgreementConfirm", OnAskReplierAgreement_OnExpire}; countDown.nSeconds=PROPOSAL_AGREEMENT_TIMEOUT_SEC; // static 이므로 재설정 ZApplication::GetTimer()->SetTimerEvent(0, &OnTimer_CountDown, &countDown, true); pWidget->Show(true, true); } }
void ZShopEquipInterface::SelectShopTab(int nTabIndex) { if (nTabIndex == -1) nTabIndex = m_nShopTabNum; ZIDLResource* pResource = GetIDLResource(); // 프리미엄 샵 - 설정되는 국가대로 하나씩 지워나간다 #ifndef _DEBUG #if defined(LOCALE_BRAZIL) || defined(LOCALE_INDIA) || defined(LOCALE_US) || defined(LOCALE_JAPAN) || defined(LOCALE_KOREA) || defined(LOCALE_NHNUSA) { if ( nTabIndex == 2) return; } #endif #endif MWidget* pWidget = pResource->FindWidget("AllEquipmentList"); if (pWidget != NULL) pWidget->Show(nTabIndex==0 ? true : false); pWidget = pResource->FindWidget("MyAllEquipmentList"); if (pWidget != NULL) pWidget->Show(nTabIndex==1 ? true : false); pWidget = pResource->FindWidget("CashEquipmentList"); if (pWidget != NULL) pWidget->Show(nTabIndex==2 ? true : false); // Set filter MComboBox* pComboBox = (MComboBox*)pResource->FindWidget( "Shop_AllEquipmentFilter"); if(pComboBox) { int sel = pComboBox->GetSelIndex(); ZMyItemList* pil = ZGetMyInfo()->GetItemList(); if ( pil) { pil->m_ListFilter = sel; pil->Serialize(); } } // 버튼 설정 MButton* pButton = (MButton*)pResource->FindWidget( "BuyConfirmCaller"); if ( pButton) { pButton->Show( false); pButton->Enable( false); } pButton = (MButton*)pResource->FindWidget( "SellConfirmCaller"); if ( pButton) { pButton->Show( false); pButton->Enable( false); } if ( nTabIndex == 0) { pButton = (MButton*)pResource->FindWidget( "BuyConfirmCaller"); if ( pButton) pButton->Show( true); } else if ( nTabIndex == 1) { pButton = (MButton*)pResource->FindWidget( "SellConfirmCaller"); if ( pButton) pButton->Show( true); } /* 수년전 만들다만 프리미엄 탭(캐쉬템) 코드임. 제거 예정 else if ( nTabIndex == 2) { pButton = (MButton*)pResource->FindWidget( "BuyCashConfirmCaller"); if ( pButton) pButton->Show( true); } */ pButton = (MButton*)pResource->FindWidget("AllEquipmentListCaller"); if (pButton != NULL) pButton->Show(nTabIndex!=0 ? true : false); pButton = (MButton*)pResource->FindWidget("MyAllEquipmentListCaller"); if (pButton != NULL) pButton->Show(nTabIndex!=1 ? true : false); pButton = (MButton*)pResource->FindWidget("CashEquipmentListCaller"); if (pButton != NULL) pButton->Show(nTabIndex!=2 ? true : false); // 구입, 판매 라벨 MPicture* pPicture; MBitmap* pBitmap; pPicture = (MPicture*)pResource->FindWidget("Shop_FrameTabLabel1"); if ( pPicture) pPicture->Show(nTabIndex==0 ? true : false); pPicture = (MPicture*)pResource->FindWidget("Shop_FrameTabLabel2"); if ( pPicture) pPicture->Show(nTabIndex==1 ? true : false); pPicture = (MPicture*)pResource->FindWidget("Shop_FrameTabLabel3"); if ( pPicture) pPicture->Show(nTabIndex==2 ? true : false); // 프레임 탭 pPicture = (MPicture*)pResource->FindWidget("Shop_TabLabel"); if ( pPicture) { if ( nTabIndex == 0) pBitmap = MBitmapManager::Get( "framepaneltab1.tga"); else if ( nTabIndex == 1) pBitmap = MBitmapManager::Get( "framepaneltab2.tga"); else if ( nTabIndex == 2) pBitmap = MBitmapManager::Get( "framepaneltab3.tga"); if ( pBitmap) pPicture->SetBitmap( pBitmap); } // 프리미엄 샵 - 설정되는 국가대로 하나씩 지워나간다 #ifndef _DEBUG #if defined(LOCALE_BRAZIL) || defined(LOCALE_INDIA) || defined(LOCALE_US) || defined(LOCALE_JAPAN) || defined(LOCALE_KOREA) || defined(LOCALE_NHNUSA) { pWidget = pResource->FindWidget( "Shop_TabLabelBg"); if ( pWidget) pWidget->Show( false); pWidget = pResource->FindWidget( "CashEquipmentListCaller"); if ( pWidget) pWidget->Show( false); pWidget = pResource->FindWidget( "Shop_FrameTabLabel3"); if ( pWidget) pWidget->Show( false); } #endif #endif m_nShopTabNum = nTabIndex; DrawCharInfoText(); }
void ZGameClient::OnClanStandbyClanList(int nPrevStageCount, int nNextStageCount, void* pBlob) { int nCount = MGetBlobArrayCount(pBlob); ZIDLResource* pRes = ZApplication::GetGameInterface()->GetIDLResource(); ZClanListBox* pListBox = (ZClanListBox*)pRes->FindWidget("Lobby_ClanList"); if (!pListBox) return; pListBox->ClearAll(); vector< int > vecClanID; for(int i=0; i<nCount; i++) { MTD_StandbyClanList* pNode = (MTD_StandbyClanList*)MGetBlobArrayElement(pBlob, i); _ASSERT(i<4); pListBox->SetInfo(i,pNode->nCLID,pNode->szClanName,pNode->nPlayers); //ProcessEmblem(pNode->nCLID, pNode->nEmblemChecksum); // Emblem // 클랜 URL이 없으면 Vector에 쌓는다 if (m_EmblemMgr.CheckEmblem(pNode->nCLID, pNode->nEmblemChecksum)) { // Begin Draw } else /*if (pNode->nEmblemChecksum != 0)*/ { vecClanID.push_back( pNode->nCLID ); } } //// Emblem // 클랜 URL이 없는 vector를 서버에 보낸다. if(vecClanID.size() > 0) { void* pBlob = MMakeBlobArray(sizeof(int), (int)vecClanID.size()); /// nOneBlobSize만큼 nBlobCount갯수만큼 배열한 블럭 만들기 int nCount = 0; for(vector<int>::iterator it = vecClanID.begin(); it != vecClanID.end(); it++, nCount++) { int *nClanID = (int*)MGetBlobArrayElement(pBlob, nCount); *nClanID = *it; } ZPostRequestEmblemURL(pBlob); MEraseBlobArray(pBlob); vecClanID.clear(); } ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); MWidget* pBtn = pResource->FindWidget("StageBeforeBtn"); if (nPrevStageCount != -1) { if (nPrevStageCount == 0) { if (pBtn) pBtn->Enable(false); } else { if (pBtn) pBtn->Enable(true); } } pBtn = pResource->FindWidget("StageAfterBtn"); if (nNextStageCount != -1) { if (nNextStageCount == 0) { if (pBtn) pBtn->Enable(false); } else { if (pBtn) pBtn->Enable(true); } } }
void ZGameClient::OnReplyAgreement(const MUID& uidProposer, const MUID& uidChar, const char* szReplierName, const MMatchProposalMode nProposalMode, const int nRequestID, const bool bAgreement) { if (!IsWaitingRepliersAgreement()) { m_AgreementBuilder.CancelProposal(); return; } ZNetAgreementBuilder::_BuildReplyResult nResult; nResult = m_AgreementBuilder.BuildReply(szReplierName, nProposalMode, nRequestID, bAgreement); if (nResult == ZNetAgreementBuilder::BRR_ALL_AGREED) // 모두 동의했을경우 { switch (nProposalMode) { case MPROPOSAL_LADDER_INVITE: { char szMember[MAX_LADDER_TEAM_MEMBER][MATCHOBJECT_NAME_LENGTH]; char* ppMember[MAX_LADDER_TEAM_MEMBER]; for(int i=0; i<MAX_LADDER_TEAM_MEMBER; i++) { ppMember[i] = szMember[i]; } int nCount = m_AgreementBuilder.GetReplierNames(&ppMember[1], MAX_LADDER_TEAM_MEMBER-1); // 자신도 넣는다. strcpy(szMember[0], ZGetMyInfo()->GetCharName()); nCount++; // 여기서 실제로 요청 ZPostLadderRequestChallenge(ppMember, nCount, 0); } break; case MPROPOSAL_CLAN_INVITE: { char szMember[MAX_CLANBATTLE_TEAM_MEMBER][MATCHOBJECT_NAME_LENGTH]; char* ppMember[MAX_CLANBATTLE_TEAM_MEMBER]; for(int i=0; i<MAX_CLANBATTLE_TEAM_MEMBER; i++) { ppMember[i] = szMember[i]; } int nCount = m_AgreementBuilder.GetReplierNames(&ppMember[1], MAX_CLANBATTLE_TEAM_MEMBER-1); // 자신도 넣는다. strcpy(szMember[0], ZGetMyInfo()->GetCharName()); nCount++; // Balance 옵션 int nBalancedMatching = 0; ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); MButton* pButton = (MButton*)pResource->FindWidget("BalancedMatchingCheckBox"); if ((pButton) && (pButton->GetCheck())) { nBalancedMatching = 1; } // 여기서 실제로 요청 ZPostLadderRequestChallenge(ppMember, nCount, nBalancedMatching); } break; }; ShowProposalWaitFrame(false); return; } else if (nResult == ZNetAgreementBuilder::BRR_DISAGREED) // 거절했을 경우 { ShowProposalWaitFrame(false); char temp[256] = ""; char szRejecter[64] = ""; // 거절한 사람 반환, 거절한 사람이 없을 경우는 그냥 마지막에 대답한 사람으로 정한다. if (!m_AgreementBuilder.GetRejecter(szRejecter)) strcpy(szRejecter, szReplierName); ZTransMsg(temp, MSG_LADDER_REPLIER_AGREEMENT_REJECT, 1, szRejecter); ZApplication::GetGameInterface()->ShowMessage(temp, NULL, MSG_LADDER_REPLIER_AGREEMENT_REJECT); } }
void ZGameClient::OnClanResponseClanInfo(void* pBlob) { int nCount = MGetBlobArrayCount(pBlob); if(nCount != 1) return; MTD_ClanInfo* pClanInfo = (MTD_ClanInfo*)MGetBlobArrayElement(pBlob, 0); // 이미 emblem을 가지고 있었으면 emblem interface 에 통보해준다 int nOldClanID = ZGetNetRepository()->GetClanInfo()->nCLID; // repository에 클랜정보를 보관한다 memcpy(ZGetNetRepository()->GetClanInfo(),pClanInfo,sizeof(MTD_ClanInfo)); // mlog("OnClanResponseClanInfo : "); // emblem interface 에 통보한다 ZGetEmblemInterface()->AddClanInfo(pClanInfo->nCLID); if(nOldClanID!=0) { ZGetEmblemInterface()->DeleteClanInfo(nOldClanID); } ZIDLResource* pRes = ZApplication::GetGameInterface()->GetIDLResource(); MPicture* pPicture= (MPicture*)pRes->FindWidget( "Lobby_ClanInfoEmblem" ); if ( pPicture) pPicture->SetBitmap( ZGetEmblemInterface()->GetClanEmblem2( pClanInfo->nCLID)); // 클랜 이름 MLabel* pLabel = (MLabel*)pRes->FindWidget("Lobby_ClanInfoName"); pLabel->SetText(ZGetNetRepository()->GetClanInfo()->szClanName); // 접속된 사람수 char szCount[16]; sprintf(szCount,"%d",ZGetNetRepository()->GetClanInfo()->nConnedMember); char szOutput[256]; // ZTranslateMessage(szOutput,MSG_LOBBY_CLAN_DETAIL,2, // ZGetNetRepository()->GetClanInfo()->szMaster,szCount); ZTransMsg(szOutput,MSG_LOBBY_CLAN_DETAIL,2, ZGetNetRepository()->GetClanInfo()->szMaster,szCount); pLabel = (MLabel*)pRes->FindWidget("Lobby_ClanInfoDetail"); pLabel->SetText(szOutput); sprintf(szOutput,"%d/%d",ZGetNetRepository()->GetClanInfo()->nWins,ZGetNetRepository()->GetClanInfo()->nLosses); ZBmNumLabel *pNumLabel = (ZBmNumLabel*)pRes->FindWidget("Lobby_ClanInfoWinLose"); pNumLabel->SetText(szOutput); sprintf(szOutput,"%d", ZGetNetRepository()->GetClanInfo()->nPoint); pNumLabel = (ZBmNumLabel*)pRes->FindWidget("Lobby_ClanInfoPoints"); pNumLabel->SetText(szOutput); pNumLabel = (ZBmNumLabel*)pRes->FindWidget("Lobby_ClanInfoTotalPoints"); // sprintf(szOutput,"%d",ZGetNetRepository()->GetClanInfo()->nWins,ZGetNetRepository()->GetClanInfo()->nXP); // pNumLabel->SetText(szOutput); pNumLabel->SetNumber(ZGetNetRepository()->GetClanInfo()->nTotalPoint,true); int nRanking = pClanInfo->nRanking; pNumLabel = (ZBmNumLabel*)pRes->FindWidget("Lobby_ClanInfoRanking"); pNumLabel->SetIndexOffset(16); // 아래쪽 색다른 글씨로 찍는다 MWidget *pUnranked = pRes->FindWidget("Lobby_ClanInfoUnranked"); if(nRanking == 0) { pNumLabel->Show(false); if ( pUnranked) pUnranked->Show(true); }else { pNumLabel->Show(true); pNumLabel->SetNumber(nRanking); if ( pUnranked) pUnranked->Show(false); } /* // UI상에 보여줘야 하지만 지금은 준비가 안되어있는 관계로 채팅창에 뿌린다. char szText[256]; sprintf(szText, "클랜명: %s", pClanInfo->szClanName); ZChatOutput(MCOLOR(ZCOLOR_CHAT_CLANMSG), szText); sprintf(szText, "레벨: %d", pClanInfo->nLevel); ZChatOutput(MCOLOR(ZCOLOR_CHAT_CLANMSG), szText); sprintf(szText, "경험치: %d", pClanInfo->nXP); ZChatOutput(MCOLOR(ZCOLOR_CHAT_CLANMSG), szText); sprintf(szText, "포인트: %d", pClanInfo->nPoint); ZChatOutput(MCOLOR(ZCOLOR_CHAT_CLANMSG), szText); sprintf(szText, "마스터: %s", pClanInfo->szMaster); ZChatOutput(MCOLOR(ZCOLOR_CHAT_CLANMSG), szText); sprintf(szText, "전적: %d승 %d패", pClanInfo->nWins, pClanInfo->nLoses); ZChatOutput(MCOLOR(ZCOLOR_CHAT_CLANMSG), szText); sprintf(szText, "클랜원정보: 총 %d명중 %d명 접속함", pClanInfo->nTotalMemberCount, pClanInfo->nConnedMember); ZChatOutput(MCOLOR(ZCOLOR_CHAT_CLANMSG), szText); */ }
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; }
/*********************************************************************** DrawPage : protected desc : 페이지를 그린다 arg : none ret : none ************************************************************************/ void ZMonsterBookInterface::DrawPage( void) { // 페이지 정보를 가져온다 ZMonsterBookPageItr itr = m_mapMonsterBookPage.find( m_nCurrentPageNum); ZMonsterBookPageInfo* pPageInfo; if ( itr != m_mapMonsterBookPage.end()) pPageInfo = (*itr).second; else pPageInfo = new ZMonsterBookPageInfo; // Get resource pointer ZIDLResource* pResource = ZApplication::GetGameInterface()->GetIDLResource(); // 배경 이미지 로딩 if ( m_pBookBgImg != NULL) { delete m_pBookBgImg; m_pBookBgImg = NULL; } m_pBookBgImg = new CCBitmapR2; if ( m_nCurrentPageNum == 0) ((CCBitmapR2*)m_pBookBgImg)->Create( "monsterIllust.png", RGetDevice(), "interface/MonsterIllust/book_firstbg.jpg"); else ((CCBitmapR2*)m_pBookBgImg)->Create( "monsterIllust.png", RGetDevice(), "interface/MonsterIllust/book_bg.jpg"); if ( m_pBookBgImg) { // 읽어온 비트맵 이미지 포인터를 해당 위젯에 넘겨줘서 표시한다 CCPicture* pPicture = (CCPicture*)pResource->FindWidget( "MonsterBook_BookBG"); if ( pPicture) pPicture->SetBitmap( m_pBookBgImg->GetSourceBitmap()); } // 해당 몬스터의 일러스트 이미지를 업데이트 한다 if ( m_pIllustImg) { delete m_pIllustImg; m_pIllustImg = NULL; } CCPicture* pPicture = (CCPicture*)pResource->FindWidget( "MonsterBook_MonsterIllust"); if ( pPicture) pPicture->SetBitmap( NULL); m_pIllustImg = new CCBitmapR2; char szFileName[ 256]; sprintf( szFileName, "interface/MonsterIllust/monster_Illust%02d.jpg", pPageInfo->m_nID); ((CCBitmapR2*)m_pIllustImg)->Create( "monsterIllust.png", RGetDevice(), szFileName); if ( m_pIllustImg) { CCPicture* pPicture = (CCPicture*)pResource->FindWidget( "MonsterBook_MonsterIllust"); if ( pPicture) pPicture->SetBitmap( m_pIllustImg->GetSourceBitmap()); } // 해당 몬스터의 이름을 업데이트 한다 CCLabel* pLabel = (CCLabel*)pResource->FindWidget( "MonsterBook_MonsterName"); if (pLabel) { pLabel->SetText( m_nCurrentPageNum ? pPageInfo->m_strName.data() : ""); pLabel->Show( true); } // 해당 몬스터의 등급을 업데이트 한다 pLabel = (CCLabel*)pResource->FindWidget( "MonsterBook_MonsterGrade"); if ( pLabel) { char szGrade[ 64] = { 0, }; if ( m_nCurrentPageNum) { sprintf( szGrade, "%s : ", ZMsg(MSG_WORD_GRADE)); switch ( pPageInfo->m_nGrade) { case NPC_GRADE_REGULAR : strcat( szGrade, ZMsg(MSG_WORD_REGULAR)); break; case NPC_GRADE_LEGENDARY : strcat( szGrade, ZMsg(MSG_WORD_LEGENDARY)); break; case NPC_GRADE_BOSS : strcat( szGrade, ZMsg(MSG_WORD_BOSS)); break; case NPC_GRADE_ELITE : strcat( szGrade, ZMsg(MSG_WORD_ELITE)); break; case NPC_GRADE_VETERAN : strcat( szGrade, ZMsg(MSG_WORD_VETERAN)); break; } } pLabel->SetText( szGrade); pLabel->Show( true); } // 해당 몬스터의 설명을 업데이트 한다 CCTextArea* pTextArea = (CCTextArea*)pResource->FindWidget( "MonsterBook_MonsterDesc"); if ( pTextArea) { pTextArea->Clear(); pTextArea->AddText( m_nCurrentPageNum ? pPageInfo->m_strDesc.data() : "", sColor( 0xFF321E00)); pTextArea->Show(); } // 해당 몬스터의 HP를 업데이트 한다 pLabel = (CCLabel*)pResource->FindWidget( "MonsterBook_MonsterHP"); if ( pLabel) { char szHP[ 128] = { 0, }; if ( m_nCurrentPageNum) { strcpy( szHP, "HP : "); if ( pPageInfo->m_nHP > 200) strcat( szHP, ZMsg(MSG_WORD_VERYHARD)); else if ( pPageInfo->m_nHP > 120) strcat( szHP, ZMsg(MSG_WORD_HARD)); else if ( pPageInfo->m_nHP > 80) strcat( szHP, ZMsg(MSG_WORD_NORAML)); else if ( pPageInfo->m_nHP > 30) strcat( szHP, ZMsg(MSG_WORD_WEAK)); else strcat( szHP, ZMsg(MSG_WORD_VERYWEAK)); } pLabel->SetText( szHP); pLabel->Show( true); } // 해당 몬스터의 특수기를 업데이트 한다 pTextArea = (CCTextArea*)pResource->FindWidget( "MonsterBook_Attacks"); if ( pTextArea) { pTextArea->Clear(); for ( list<string>::iterator itrSkill = pPageInfo->m_Skill.begin(); itrSkill != pPageInfo->m_Skill.end(); itrSkill++) pTextArea->AddText( (*itrSkill).data(), sColor( 0xFF321E00)); } // 드롭 아이템 업데이트 list<ZDropItemInfo*>::iterator itrDropItem = pPageInfo->m_DropItem.begin(); for ( int i = 0; i < 10; i++) { char szWidgetName[ 50]; sprintf( szWidgetName, "MonsterBook_DropItem%d", i); CCPicture* pPicture = (CCPicture*)pResource->FindWidget( szWidgetName); if ( pPicture) { if ( itrDropItem != pPageInfo->m_DropItem.end()) { pPicture->AttachToolTip( (*itrDropItem)->m_strName.data()); pPicture->SetBitmap( (*itrDropItem)->m_pIcon); pPicture->Show( true); itrDropItem++; } else { pPicture->Show( false); } } } // 페이지 번호를 업데이트 한다 pLabel = (CCLabel*)pResource->FindWidget( "MonsterBook_PageNumber"); if ( pLabel) { char szPageNum[ 20] = { 0, }; if ( m_nCurrentPageNum) sprintf( szPageNum, "- %d -", m_nCurrentPageNum); pLabel->SetText( szPageNum); } // 달성률을 표시한다 pLabel = (CCLabel*)ZApplication::GetGameInterface()->GetIDLResource()->FindWidget( "MonsterBook_Complete"); if ( pLabel) { char szComplete[ 128] = { 0, }; if ( m_nCurrentPageNum == 0) sprintf( szComplete, "%s : %.1f%%", ZMsg(MSG_WORD_RATE), m_fCompleteRate); pLabel->SetText( szComplete); } // 이전 페이지 CCWidget* pWidget = pResource->FindWidget( "MonsterBook_PrevPageButton"); if ( pWidget) pWidget->Show( (m_nCurrentPageNum > 0) ? true : false); // 다음 페이지 pWidget = pResource->FindWidget( "MonsterBook_NextPageButton"); if ( pWidget) pWidget->Show( (m_nCurrentPageNum < m_nTotalPageNum) ? true : false); // 메모리 삭제 if ( itr == m_mapMonsterBookPage.end()) delete pPageInfo; }
void ZShopEquipInterface::SelectEquipmentTab(int nTabIndex) { if (nTabIndex == -1) nTabIndex = m_nEquipTabNum; ZIDLResource* pResource = GetIDLResource(); SetKindableItem( MMIST_NONE); // Set filter MComboBox* pComboBox = (MComboBox*)pResource->FindWidget( "Equip_AllEquipmentFilter"); if(pComboBox) { int sel = pComboBox->GetSelIndex(); ZMyItemList* pil = ZGetMyInfo()->GetItemList(); if ( pil) { pil->m_ListFilter = sel; pil->Serialize(); } } // EQUIPMENTLISTBOX MWidget* pWidget = pResource->FindWidget("EquipmentList"); if (pWidget != NULL) pWidget->Show(nTabIndex==0 ? true:false); pWidget = pResource->FindWidget("AccountItemList"); if (pWidget != NULL) pWidget->Show(nTabIndex==0 ? false:true); // 탭 버튼 MButton* pButton = (MButton*)pResource->FindWidget( "Equip"); if ( pButton) { pButton->Show( false); pButton->Enable( false); } pButton = (MButton*)pResource->FindWidget( "SendAccountItemBtn"); if ( pButton) { pButton->Show( false); pButton->Enable( false); } pButton = (MButton*)pResource->FindWidget( "BringAccountItemBtn"); if ( pButton) { pButton->Show( false); pButton->Enable( false); } pButton = (MButton*)pResource->FindWidget( "BringAccountSpendableItemConfirmOpen"); if ( pButton) { pButton->Show( false); pButton->Enable( false); } if ( nTabIndex == 0) { pButton = (MButton*)pResource->FindWidget( "Equip"); if (pButton) pButton->Show(true); pButton = (MButton*)pResource->FindWidget( "SendAccountItemBtn"); if (pButton) pButton->Show(true); } else if ( nTabIndex == 1) { pButton = (MButton*)pResource->FindWidget( "BringAccountItemBtn"); if ( pButton) pButton->Show( true); pButton = (MButton*)pResource->FindWidget( "BringAccountSpendableItemConfirmOpen"); if ( pButton) pButton->Show( false); } pButton = (MButton*)pResource->FindWidget("Equipment_CharacterTab"); if (pButton) pButton->Show( nTabIndex==0 ? false : true); pButton = (MButton*)pResource->FindWidget("Equipment_AccountTab"); if (pButton) pButton->Show( nTabIndex==1 ? false : true); // 탭 라벨 MLabel* pLabel; pLabel = (MLabel*)pResource->FindWidget("Equipment_FrameTabLabel1"); if ( pLabel) pLabel->Show( nTabIndex==0 ? true : false); pLabel = (MLabel*)pResource->FindWidget("Equipment_FrameTabLabel2"); if ( pLabel) pLabel->Show( nTabIndex==1 ? true : false); // 탭 리스트 MPicture* pPicture; pPicture = (MPicture*)pResource->FindWidget("Equip_ListLabel1"); if ( pPicture) pPicture->Show( nTabIndex==0 ? true : false); pPicture = (MPicture*)pResource->FindWidget("Equip_ListLabel2"); if ( pPicture) pPicture->Show( nTabIndex==1 ? true : false); // 프레임 탭 pPicture = (MPicture*)pResource->FindWidget("Equip_TabLabel"); MBitmap* pBitmap; if ( pPicture) { if ( nTabIndex == 0) pBitmap = MBitmapManager::Get( "framepaneltab1.tga"); else pBitmap = MBitmapManager::Get( "framepaneltab2.tga"); if ( pBitmap) pPicture->SetBitmap( pBitmap); } // 중앙은행 if (nTabIndex == 1) { ZGetMyInfo()->GetItemList()->ClearAccountItems(); ZGetMyInfo()->GetItemList()->SerializeAccountItem(); } // 아이템 슬롯 Enable/Disable for(int i = 0; i < MMCIP_END; i++) { ZItemSlotView* pItemSlot = (ZItemSlotView*)GetIDLResource()->FindWidget( GetItemSlotName( "Equip", i)); if( pItemSlot ) pItemSlot->EnableDragAndDrop( nTabIndex==0 ? true : false); } m_nEquipTabNum = nTabIndex; DrawCharInfoText(); }
void ZShopEquipInterface::SelectEquipmentFrameList( const char* szName, bool bOpen) { if (szName == NULL) { SelectEquipmentFrameList("Shop", bOpen); SelectEquipmentFrameList("Equip", bOpen); return; } char szTemp[256]; ZIDLResource* pResource = GetIDLResource(); // Frame open/close background image MPicture* pPicture; strcpy( szTemp, szName); strcat( szTemp, "_ArmorBGListFrameOpen"); pPicture = (MPicture*)pResource->FindWidget( szTemp); if(pPicture != NULL) { if( bOpen && GetArmorWeaponTabIndex() == 0 ) { pPicture->Show(true); } else { pPicture->Show(false);} } strcpy( szTemp, szName); strcat( szTemp, "_ArmorBGListFrameClose"); pPicture = (MPicture*)pResource->FindWidget( szTemp); if(pPicture != NULL) { if( !bOpen && GetArmorWeaponTabIndex() == 0 ) { pPicture->Show(true); } else { pPicture->Show(false);} } // Frame open/close background image strcpy( szTemp, szName); strcat( szTemp, "_WeaponBGListFrameOpen"); pPicture = (MPicture*)pResource->FindWidget( szTemp); if(pPicture != NULL) { if( bOpen && GetArmorWeaponTabIndex() == 1 ) { pPicture->Show(true); } else { pPicture->Show(false);} } strcpy( szTemp, szName); strcat( szTemp, "_WeaponBGListFrameClose"); pPicture = (MPicture*)pResource->FindWidget( szTemp); if(pPicture != NULL) { if( !bOpen && GetArmorWeaponTabIndex() == 1 ) { pPicture->Show(true); } else { pPicture->Show(false);} } // Frame open/close image MButton* pButton; strcpy( szTemp, szName); strcat( szTemp, "_EquipListFrameCloseButton"); pButton = (MButton*)pResource->FindWidget( szTemp); if ( pButton != NULL) pButton->Show( bOpen); strcpy( szTemp, szName); strcat( szTemp, "_EquipListFrameOpenButton"); pButton = (MButton*)pResource->FindWidget( szTemp); if ( pButton != NULL) pButton->Show( !bOpen); // Resize item slot char szWidgetName[ 256]; sprintf( szWidgetName, "%s_EquipmentSlot_Head", szName); MWidget* itemSlot = (MWidget*)pResource->FindWidget( szWidgetName); if (itemSlot) { MRECT rect = itemSlot->GetRect(); int nWidth; if ( bOpen) nWidth = 220.0f * (float)RGetScreenWidth() / 800.0f; else nWidth = min( rect.w, rect.h); for ( int i = 0; i < MMCIP_END; i++) { itemSlot = (MWidget*)pResource->FindWidget( GetItemSlotName( szName, i)); if (itemSlot) { if(GetArmorWeaponTabIndex() == GetArmorWeaponTabIndexContainItemParts((MMatchCharItemParts)i)) { rect = itemSlot->GetRect(); itemSlot->SetBounds( rect.x, rect.y, nWidth, rect.h); itemSlot->Show(true); } else { itemSlot->Show(false); } } } } // 상점과 장비창의 탭 버튼 눌림 상태를 동기화해주자 -_-; MBmButton* pTabBtn; if (GetArmorWeaponTabIndex() == 0) { pTabBtn = (MBmButton*)pResource->FindWidget("Shop_ArmorEquipmentTab"); if (pTabBtn) pTabBtn->SetCheck(true); pTabBtn = (MBmButton*)pResource->FindWidget("Equip_ArmorEquipmentTab"); if (pTabBtn) pTabBtn->SetCheck(true); } else if (GetArmorWeaponTabIndex() == 1) { pTabBtn = (MBmButton*)pResource->FindWidget("Shop_WeaponEquipmentTab"); if (pTabBtn) pTabBtn->SetCheck(true); pTabBtn = (MBmButton*)pResource->FindWidget("Equip_WeaponEquipmentTab"); if (pTabBtn) pTabBtn->SetCheck(true); } }