#include "SunClientPrecompiledHeader.h" #include "uiEventItemSelect.h" #include "uiEventMan/uiEventMan.h" #include "SunEventInfoParser.h" #include "ItemInfoParser.h" #include "Hero.h" #include "globalfunc.h" #include "interfacemanager.h" #include "uiSystemMan/uiSystemMan.h" static CODETYPE g_dwEventID = 0; void _Confirm_RequestRegItem(bool bYes) { if(bYes) { uiEventMan* pEventMan = static_cast(g_InterfaceManager.GetUserInterfaceManager(UIMAN_EVENT)); if(pEventMan) { pEventMan->RequestEventItemReg(g_dwEventID); } } else { g_dwEventID = 0; } } //------------------------------------------------------------------------------ WzID uiEventItemSelect::m_wzId[DIALOG_MAX] = { StrToWzID("B999"), //DLGPOS_BTN_EXIT // Á¾·á¹öư StrToWzID("ST00"), //DLGPOS_TXT_ITEM // Àç·á StrToWzID("ST01"), //DLGPOS_TXT_COUNT // Âü°¡È½¼ö StrToWzID("ST02"), //DLGPOS_TXT_ITEM2 StrToWzID("B003"), //DLGPOS_BTN_OK // È®ÀÎ StrToWzID("B004"), //DLGPOS_BTN_CANCEL // Ãë¼Ò StrToWzID("T999"), //DLGPOS_TXT_TITLE // Á¦¸ñ StrToWzID("L001"), //DLGPOS_LIST //¸®½ºÆ® StrToWzID("VS00"), //DLGPOS_VSCROLL // ½ºÅ©·Ñ¹Ù }; //------------------------------------------------------------------------------ /** */ uiEventItemSelect::uiEventItemSelect(InterfaceManager *pUIMan) : uiBase(pUIMan), m_bControlsInitialized(false) { this->m_pEventMan = static_cast(this->GetUIMan()->GetUserInterfaceManager(UIMAN_EVENT)); assert (m_pEventMan); if (!this->m_pEventMan) { #ifdef _DEBUG uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM); if(pSystemMan) pSystemMan->Sys_VerifyLock(_T("m_pEventManÀÌ ¾ø½À´Ï´Ù.")); #endif this->ShowInterface(FALSE); return; } m_pListControl = NULL; for(int i=0; i<2; ++i) { m_vecEventList[i].clear(); } for(int a=0; aRelease(); } //------------------------------------------------------------------------------ /** */ void uiEventItemSelect::Init(CDrawBase* pDrawBase) { uiBase::Init(pDrawBase); this->InitControls(); } //------------------------------------------------------------------------------ /** */ void uiEventItemSelect::Release() { for(int i=0; i<2; ++i) { m_vecEventList[i].clear(); } } //------------------------------------------------------------------------------ /** */ void uiEventItemSelect::InitControls() { this->m_pListControl = static_cast(this->getControl(DLGPOS_LIST)); assert (this->m_pListControl); for(int i=0; im_pTxtControl[i] = static_cast(this->getControl(DLGPOS_TXT_ITEM+i)); } this->m_bControlsInitialized = true; CCtrlVScrollWZ *list_scroll_ = static_cast (this->getControl(DLGPOS_VSCROLL)); SUN_ASSERT(list_scroll_); if (list_scroll_) { list_scroll_->ShowWindowWZ(WZ_HIDE); } _initList(); } //------------------------------------------------------------------------------ void uiEventItemSelect::OnShowWindow( BOOL val ) { if (val) { _initList(); SolarDialog::MoveCenter(); if (!this->m_bControlsInitialized) { this->ShowInterface(FALSE); return; } for(int a=0; aShowWindowWZ(WZ_HIDE); } if(GetManager()->GetEventMode() == eEVENT_REGITEM_GETITEM) { // Àç·á, Âü°¡È½¼ö º¸¿©ÁØ´Ù if(m_pTxtControl[TXT_ITEM]) { m_pTxtControl[TXT_ITEM]->ShowWindowWZ(WZ_SHOW); } if(m_pTxtControl[TXT_COUNT]) { m_pTxtControl[TXT_COUNT]->ShowWindowWZ(WZ_SHOW); } } else if(GetManager()->GetEventMode() == eEVENT_REGITEM_RANDREWARD) { // Àç·á¸¸ º¸¿©ÁØ´Ù. if(m_pTxtControl[TXT_ITEM2]) { m_pTxtControl[TXT_ITEM2]->ShowWindowWZ(WZ_SHOW); } } m_pListControl->SetCurSel(-1); UpdateList(); // keyMsg msg; ZeroMemory(&msg,sizeof(msg)); msg.dwType = eDoType_dialog_event_item_select_window; msg.wParam = IM_EVENT_MANAGER::EVENT_ITEM_SELECT; msg.DoSomething = GlobalFunc::DoShowWindowEx; g_KeyQueueManager.PushBack(msg); } else { g_KeyQueueManager.DeleteMsg(eDoType_dialog_event_item_select_window); } } //------------------------------------------------------------------------------ /** */ void uiEventItemSelect::MessageProc( SI_MESSAGE * pMessage ) { if (!_isEnable()) return; TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,}; TCHAR szTemp[INTERFACE_STRING_LENGTH] = {0,}; TCHAR szName[INTERFACE_STRING_LENGTH] = {0,}; switch( pMessage->eResultMsg ) { case RT_MSG_LBUTTONCLICK: { switch( getCtrlIDToPos( pMessage->dwCtrlID ) ) { case DLGPOS_BTN_EXIT: { this->ShowInterface(FALSE); GetManager()->ShowEventWindow(TRUE); } break; case DLGPOS_BTN_OK: { int cursel = m_pListControl->GetCurSel(); if (cursel < 0) { const int c_string = 4014; GetUIMan()->GetInterfaceString(c_string, szMessage, INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); return; } int iIndex = 0; if(GetManager()->GetEventMode() == eEVENT_REGITEM_GETITEM) { iIndex = 0; if(!m_vecEventList[iIndex].size()) break; EVENT_INFO_LIST info = m_vecEventList[iIndex][cursel]; GetUIMan()->GetInterfaceString( info.m_iNameString[0], szName, INTERFACE_STRING_LENGTH); GetUIMan()->GetInterfaceString( eST_EVENT_REGITEM_GETITEM_STRING, szTemp, INTERFACE_STRING_LENGTH); g_dwEventID = info.m_dwEventID; Snprintf (szMessage, INTERFACE_STRING_LENGTH-1, szTemp, szName); uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM); if(pSystemMan) pSystemMan->Sys_Confirm(szMessage, _Confirm_RequestRegItem); } else if(GetManager()->GetEventMode() == eEVENT_REGITEM_RANDREWARD) { iIndex = 1; if(!m_vecEventList[iIndex].size()) break; EVENT_INFO_LIST info = m_vecEventList[iIndex][cursel]; GetUIMan()->GetInterfaceString( info.m_iNameString[0], szName, INTERFACE_STRING_LENGTH); GetUIMan()->GetInterfaceString( eST_EVENT_REGITEM_RANDREWARD_STRING, szTemp, INTERFACE_STRING_LENGTH); g_dwEventID = info.m_dwEventID; Snprintf (szMessage, INTERFACE_STRING_LENGTH-1, szTemp, szName); uiSystemMan * pSystemMan = (uiSystemMan *)g_InterfaceManager.GetUserInterfaceManager(UIMAN_SYSTEM); if(pSystemMan) pSystemMan->Sys_Confirm(szMessage, _Confirm_RequestRegItem); } } break; case DLGPOS_BTN_CANCEL: { this->ShowInterface(FALSE); GetManager()->ShowEventWindow(TRUE); } break; } } break; default: { SolarDialog::MessageProc( pMessage ); } break; } } //------------------------------------------------------------------------------ /** */ BOOL uiEventItemSelect::_isEnable() { if(GENERALPARAM->IsNet()) { if (this->IsLock()) return FALSE; if(!g_pHero) return FALSE; if( g_pHero && g_pHero->IsShowFullMap() ) return FALSE; if(!GetManager()) return FALSE; return TRUE; } else { return TRUE; } } //------------------------------------------------------------------------------ int uiEventItemSelect::_getEventListIndex() { int iEventMode = GetManager()->GetEventMode(); int iIndex = -1; if(GetManager()->GetEventMode() == eEVENT_REGITEM_GETITEM) { iIndex = 0; } else if(GetManager()->GetEventMode() == eEVENT_REGITEM_RANDREWARD) { iIndex = 1; } return iIndex; } //------------------------------------------------------------------------------ void uiEventItemSelect::_initList() { if (!GetManager()) return; for(int i=0; i<2; ++i) { m_vecEventList[i].clear(); } EVENT_SUB_INFO_ITER it; EVENTINFO_MAP_ITER eventinfo_itr; SYSTEMTIME Current_systemTime; util::TimeSync::GetLocalTime(&Current_systemTime); std::pair range; // m_vecEventList[0] ¼¼ÆÃ range = SunEventInfoParser::Instance()->GetEventSubInfoMap()->equal_range(eEVENT_REGITEM_GETITEM); int iIndex = 0; for(it=range.first; it!=range.second; ++it) { EVENT_SUB_INFO info = (*it).second; EVENT_INFO_LIST inputInfo; ZeroMemory(&inputInfo, sizeof(EVENT_INFO_LIST)); inputInfo.m_byCountMax = info.m_byCountMax; inputInfo.m_byEventMode = info.m_byEventMode; inputInfo.m_dwEventID = info.m_dwEventID; for(int i=0; i<5; ++i) { inputInfo.m_dwRegisterItemIndex[i] = info.m_dwRegisterItemIndex[i]; inputInfo.m_wRegisterItemNum[i] = info.m_wRegisterItemNum[i]; BASE_ITEMINFO * pItemInfo = ItemInfoParser::Instance()->GetItemInfo( inputInfo.m_dwRegisterItemIndex[i] ); if(pItemInfo) { inputInfo.m_iNameString[i] = pItemInfo->m_NCode; } } eventinfo_itr = SunEventInfoParser::Instance()->GetEventInfoMap()->find(info.m_dwEventID); EVENT_INFO Eventinfo = (*eventinfo_itr).second; if( Eventinfo.CheckEvent( GetManager()->GetCurTime() ) ) m_vecEventList[0].push_back(inputInfo); ++iIndex; } // m_vecEventList[1] ¼¼ÆÃ range = SunEventInfoParser::Instance()->GetEventSubInfoMap()->equal_range(eEVENT_REGITEM_RANDREWARD); iIndex = 0; for(it=range.first; it!=range.second; ++it) { EVENT_SUB_INFO info = (*it).second; EVENT_INFO_LIST inputInfo; ZeroMemory(&inputInfo, sizeof(EVENT_INFO_LIST)); inputInfo.m_byCountMax = info.m_byCountMax; inputInfo.m_byEventMode = info.m_byEventMode; inputInfo.m_dwEventID = info.m_dwEventID; for(int i=0; i<5; ++i) { inputInfo.m_dwRegisterItemIndex[i] = info.m_dwRegisterItemIndex[i]; inputInfo.m_wRegisterItemNum[i] = info.m_wRegisterItemNum[i]; BASE_ITEMINFO * pItemInfo = ItemInfoParser::Instance()->GetItemInfo( inputInfo.m_dwRegisterItemIndex[i] ); if(pItemInfo) { inputInfo.m_iNameString[i] = pItemInfo->m_NCode; } } eventinfo_itr = SunEventInfoParser::Instance()->GetEventInfoMap()->find(info.m_dwEventID); EVENT_INFO Eventinfo = (*eventinfo_itr).second; if( Eventinfo.CheckEvent( GetManager()->GetCurTime() ) ) m_vecEventList[1].push_back(inputInfo); ++iIndex; } } //------------------------------------------------------------------------------ void uiEventItemSelect::UpdateList() { if (!GetManager()) return; _refreshList(); // ¼­¹ö¿¡ ¿äû GetManager()->RequestEventStatus(); } //------------------------------------------------------------------------------ void uiEventItemSelect::_refreshList() { if (!GetManager()) return; if(NULL == m_pListControl) return; DWORD c_dwTextColor = RGBA(255, 255, 255, 255); DWORD c_dwSelTextColor = RGBA(0,220,0,255); DWORD c_dwBackColor = RGBA (0,0,0,0); TCHAR szTemp[INTERFACE_STRING_LENGTH] = {0,}; TCHAR szTemp2[INTERFACE_STRING_LENGTH] = {0,}; TCHAR szTemp3[INTERFACE_STRING_LENGTH] = {0,}; TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,}; int current_sell_index = m_pListControl->GetCurSel(); m_pListControl->DeleteItemAll(); m_pListControl->SetBeginDrawIndex(0); int iIndex = _getEventListIndex(); if(iIndex < 0) return; int idx = 0; for(int i=0; i!=m_vecEventList[iIndex].size(); ++i) { EVENT_INFO_LIST info = m_vecEventList[iIndex][i]; if(GetManager()->GetEventMode() == eEVENT_REGITEM_GETITEM) // %d/%d Çü½Ä { GetUIMan()->GetInterfaceString(info.m_iNameString[0] ,szTemp ,INTERFACE_STRING_LENGTH); Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, _T("%-21s %-2ld / %-2ld ") ,szTemp ,info.m_iCurRegItemNum[0], info.m_byCountMax); } else if(GetManager()->GetEventMode() == eEVENT_REGITEM_RANDREWARD) // %d Çü½Ä { GetUIMan()->GetInterfaceString(info.m_iNameString[0] ,szTemp ,INTERFACE_STRING_LENGTH); Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, _T(" %-27s") ,szTemp); } idx = m_pListControl->InsertItemBack(); GlobalFunc::SetItemText( m_pListControl, idx ,szMessage); m_pListControl->SetItemFontID( idx, 0, StrToWzID("m212")); m_pListControl->SetItemTextColor( idx, 0, c_dwTextColor ); m_pListControl->SetItemBKColor( idx, 0, c_dwBackColor ); m_pListControl->SetItemSelTextColor( idx, 0, c_dwSelTextColor ); } if (current_sell_index > static_cast(m_vecEventList[iIndex].size())) { current_sell_index = m_vecEventList[iIndex].size(); } m_pListControl->SetCurSel(current_sell_index); } //------------------------------------------------------------------------------ /** */ void uiEventItemSelect::SuccessItemReg(CODETYPE dwEventID) { TCHAR szMessage[INTERFACE_STRING_LENGTH] = {0,}; TCHAR szTemp[INTERFACE_STRING_LENGTH] = {0,}; EVENT_INFO *pInfo = SunEventInfoParser::Instance()->FindEventInfo(dwEventID); if(!pInfo) { Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, _T("À̺¥Æ® À妽º°¡ À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù.")); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); return; } BASE_ITEMINFO * pItemInfo = ItemInfoParser::Instance()->GetItemInfo( pInfo->m_dwRegisterItemIndex[0] ); if(pItemInfo) { // %s ¾ÆÀÌÅÛÀ» µî·ÏÇß½À´Ï´Ù. GetUIMan()->GetInterfaceString( eST_EVENT_REGITEM_STRING, szTemp, INTERFACE_STRING_LENGTH); g_InterfaceManager.GetItemName( pItemInfo->m_Code, pItemInfo->m_pszName ); Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, szTemp, pItemInfo->m_pszName); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); int iIndex = 0; if(pInfo->m_byEventMode == eEVENT_REGITEM_GETITEM) { iIndex = 0; } else if(pInfo->m_byEventMode == eEVENT_REGITEM_RANDREWARD) { iIndex = 1; } else { // À¯È¿ÇÑ À̺¥Æ® ¸ðµå°¡ ¾Æ´Ï´Ù.. return; } int iRegNum = 0; int iMaxNum = 0; std::vector::iterator it; for(it = m_vecEventList[iIndex].begin(); it != m_vecEventList[iIndex].end(); ++it) { if((*it).m_dwRegisterItemIndex[0] == pInfo->m_dwRegisterItemIndex[0]) { iRegNum = (*it).m_iCurRegItemNum[0]; iMaxNum = (*it).m_byCountMax; iRegNum++; if(iRegNum) { int iSub = iMaxNum - iRegNum; if(iSub > 0) { //4019 "%s" ¾ÆÀÌÅÛ %d°³¸¦ //4020 ´õ ¸ðÀ¸½Ã¸é À̺¥Æ®¿¡ ÀÀ¸ð ÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. GetUIMan()->GetInterfaceString( eST_EVENT_RANDREWARD_MSG1, szTemp, INTERFACE_STRING_LENGTH); Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, szTemp, pItemInfo->m_pszName, iSub); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); GetUIMan()->GetInterfaceString( eST_EVENT_RANDREWARD_MSG2, szMessage, INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } else if(iSub == 0) { //4016 "%s" %d°³¸¦ //4017 ¸ðµÎ ¸ð¾Æ ¿ÀÇÁ¶óÀÎ À̺¥Æ®¿¡ ÀÚµ¿ ÀÀ¸ð µÇ¼Ì½À´Ï´Ù. //4018 À̺¥Æ® Á¾·á ÈÄ, °ø½Ä ȨÆäÀÌÁö¸¦ ÅëÇØ ´ã÷ÀÚ È®ÀÎÀ» ÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. GetUIMan()->GetInterfaceString( eST_EVENT_OFFLINE_MSG1, szTemp, INTERFACE_STRING_LENGTH); Snprintf(szMessage, INTERFACE_STRING_LENGTH-1, szTemp, pItemInfo->m_pszName, iMaxNum); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); GetUIMan()->GetInterfaceString( eST_EVENT_OFFLINE_MSG2, szMessage, INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); GetUIMan()->GetInterfaceString( eST_EVENT_OFFLINE_MSG3, szMessage, INTERFACE_STRING_LENGTH); GlobalFunc::OutputMsg_Notice(eOUTPUT_MSG_CHAT, szMessage); } } break; } } } } //------------------------------------------------------------------------------ /** */ void uiEventItemSelect::SetEventItemStatusList(MSG_BASE * pMsg) { MSG_CG_EVENT_ITEM_STATUS_ACK *pRecvPacket = (MSG_CG_EVENT_ITEM_STATUS_ACK *)pMsg; for(int i=0; i < pRecvPacket->m_wEventNum; ++i) { EVENT_STATUS status = pRecvPacket->m_EventStatus[i]; //ÀÓ½Ã: ƯÁ¤ À̺¥Æ®(uiEventItemSelect¸¦ »ç¿ëÇÏÁö ¾Ê´Â.)´Â ½ºÅµ. DWORD dwEventNpcType[c_dw_Special_Event_Num] = {c_dw_Donation_NPC_Type, c_dw_SoloCouple_NPC_Type, c_dw_Santa_NPC_Type, c_dw_Buff_Event_NPC_Type }; BOOL bVal = FALSE; for(int i = 0; i < c_dw_Special_Event_Num; ++i) { EVENT_INFO_VEC* pEventInfoVec = SunEventInfoParser::Instance()->FindEventInfoFromNpcType(dwEventNpcType[i]); if(NULL != pEventInfoVec) { int iCnt = pEventInfoVec->size(); for(int j = 0; j < iCnt; ++j) { if((*pEventInfoVec)[j]) { if(status.m_dwEventID == (*pEventInfoVec)[j]->m_dwEventID) { bVal = TRUE; break; } } } } } if(TRUE == bVal) { continue; } EVENT_INFO *pInfo = SunEventInfoParser::Instance()->FindEventInfo(status.m_dwEventID); if(pInfo) { int iIndex = 0; if(pInfo->m_byEventMode == eEVENT_REGITEM_GETITEM) { iIndex = 0; } else if(pInfo->m_byEventMode == eEVENT_REGITEM_RANDREWARD) { iIndex = 1; } else { // À¯È¿ÇÑ À̺¥Æ® ¸ðµå°¡ ¾Æ´Ï´Ù.. continue; } std::vector::iterator it; for(it = m_vecEventList[iIndex].begin(); it != m_vecEventList[iIndex].end(); ++it) { if((*it).m_dwRegisterItemIndex[0] == pInfo->m_dwRegisterItemIndex[0]) { (*it).m_iCurRegItemNum[0] = status.m_wRegisterCnt; break; } } } } _refreshList(); } //------------------------------------------------------------------------------ /** */ void uiEventItemSelect::NetworkProc( MSG_BASE * pMsg ) { }