BOOL CWearedExDialog::AddItem(WORD relPos, cIcon * InIcon) { CHero* pHero = OBJECTMGR->GetHero(); if( ! AddIcon(relPos, InIcon) ) { return FALSE; } CItem * item = (CItem * )InIcon; pHero->SetWearedItemIdx(relPos, item->GetItemIdx()); pHero->SetCurComboNum(SKILL_COMBO_NUM); APPEARANCEMGR->AddCharacterPartChange(pHero->GetID(), eCHAPPEAR_INIT); CHARCALCMGR->AddItem( pHero, item->GetItemBaseInfo()); //CHARCALCMGR->Initialize( pHero ); GAMEIN->GetCharacterDialog()->RefreshInfo(); RefreshSetItem( item->GetItemBaseInfo()); DWORD dwArmor = HERO->GetWearedItemIdx( eWearedItem_Dress ); DWORD dwBoots = HERO->GetWearedItemIdx( eWearedItem_Shoes ); DWORD dwGlove = HERO->GetWearedItemIdx( eWearedItem_Glove ); DWORD dwItem = item->GetItemIdx(); if( dwArmor == dwItem || dwBoots == dwItem || dwGlove == dwItem ) HERO->DoGetDefenseRate(); RefreshArmorItem(); //---------------------------------- return TRUE; }
BOOL CWearedExDialog::DeleteItem(WORD relPos, cIcon ** outIcon) { CHero* pHero = OBJECTMGR->GetHero(); //KES 031128 ¹«°ø¾ÆÀÌÅÛ ÀåÂø°¡´É ÅøÆÁ º¯°æ if( ! DeleteIcon(relPos, outIcon) ) { return FALSE; } pHero->SetWearedItemIdx(relPos, 0); pHero->SetCurComboNum(SKILL_COMBO_NUM); APPEARANCEMGR->AddCharacterPartChange(pHero->GetID(), eCHAPPEAR_INIT); CItem* item = ( CItem* )( *outIcon ); if( ! item ) { return FALSE; } CHARCALCMGR->RemoveItem( pHero, item->GetItemBaseInfo() ); //CHARCALCMGR->Initialize( pHero ); GAMEIN->GetCharacterDialog()->RefreshInfo(); RefreshSetItem( item->GetItemBaseInfo()); item->SetImageRGB( ICONCLR_USABLE); item->SetDeffenceTooltip( FALSE); HERO->DoGetDefenseRate(); RefreshArmorItem(); //---------------------------------- return TRUE; }
//========================================================================= // 아이템을 습득했을 때 튜토리얼 진행 여부를 체크하는 함수. //========================================================================= void cTutorialManager::Check_GetItem(CItem* pItem) // 아이템을 습득했을 때 튜토리얼 진행 여부를 체크하는 함수. { if( !pItem ) // 인자로 넘어온 아이템 정보가 유효하지 않으면, { #ifdef _GMTOOL_ MessageBox(NULL, PERR_MSG3, __FUNCTION__, MB_OK); #endif return; } if( !m_bActiveTutorial ) return ; // 튜토리얼이 비활성화 상태면, return 처리를 한다. if(m_bUpdated) return ; // 튜토리얼 이벤트가 업데이트 되었으면, return 처리를 한다. cTutorial* pCurTutorial ; // 현재 튜토리얼 정보를 담을 포인터를 선언한다. int nCondition1 ; // 튜토리얼의 발동 조건을 담을 변수를 선언한다. int nCondition2 ; // 두번째 발동 조건을 담을 변수를 선언한다. PTRLISTPOS pos = NULL ; // 튜토리얼 위치 정보를 받을 포인터를 선언하고 null 처리를 한다. pos = m_Tutorial_List.GetHeadPosition() ; // 튜토리얼 리스트를 헤드로 세팅하고 위치 정보를 받는다. while(pos) // 위치 정보가 유효할 동안 whlie문을 돌린다. { pCurTutorial = NULL ; // 튜토리얼 정보를 받을 포인터를 null 처리를 한다. pCurTutorial = (cTutorial*)m_Tutorial_List.GetNext(pos) ; // 위치에 해당하는 튜토리얼 정보를 받고, 위치를 다음으로 세팅한다. if( !pCurTutorial ) continue ; // 튜토리얼 정보가 유효하지 않으면 continue 처리를 한다. if( pCurTutorial->Is_Completed() ) continue ; // 완료한 튜토리얼이면, 건너뛴다. nCondition1 = -1 ; // 발동 조건 변수를 -1로 세팅한다. nCondition1 = pCurTutorial->Get_StartCondition1() ; // 현재 튜토리얼의 발동 조건을 받는다. if( nCondition1 != e_GET_ITEM ) continue ; // 아이템 습득시 발동하는 튜토리얼이 아니면 continue 처리를 한다. nCondition2 = -1 ; // 두번째 발동 조건을 -1로 세팅한다. nCondition2 = pCurTutorial->Get_StartCondition2() ; // 두번째 발동 조건을 받는다. if( nCondition2 == e_GET_STACK_ITEM ) // 두번째 발동 조건이 스택 아이템일 경우, { CInventoryExDialog* pInven = NULL ; // 인벤토리 정보를 받을 포인터를 선언하고 null 처리를 한다. pInven = GAMEIN->GetInventoryDialog() ; // 인벤토리 정보를 받는다. if( !pInven ) { #ifdef _GMTOOL_ MessageBox(NULL, PERR_MSG4, __FUNCTION__, MB_OK); #endif continue; } CItem* pCheckItem = NULL ; // 체크 아이템을 담을 포인터를 선언하고 null 처리를 한다. pCheckItem = pInven->GetItemForIdx( pItem->GetItemIdx() ) ; // 인벤으로 들어온 아이템의 인덱스로 체크 아이템을 받는다. if( !pCheckItem ) continue ; // 인벤토리에서 체크 아이템을 찾지 못하면, continue 처리를 한다. if(pCheckItem->GetItemBaseInfo().Durability > 1) // 체크 아이템의 개수가 1개 이상이면, { Start_CurTutorial(pCurTutorial) ; // 현재 튜토리얼을 시작한다. return ; // return 처리를 한다. } } else // 두번째 발동 조건이 스택 아이템이 아닐 경우, { Start_CurTutorial(pCurTutorial) ; // 현재 튜토리얼을 시작한다. return ; // return 처리를 한다. } } }
void CNoteManager::NetworkMsgParse(BYTE Protocol,void* pMsg) { switch(Protocol) { case MP_NOTE_RECEIVENOTE: { if(GAMEIN->GetNoteDialog()->IsActive() == TRUE) { NoteListSyn(GAMEIN->GetNoteDialog()->GetSelectedNotePge()); } CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(933)); } break; case MP_NOTE_NEW_NOTE: { CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(934)); if(GAMEIN->GetNoteDialog()->IsActive() == TRUE) NoteListSyn(1); } break; case MP_NOTE_SENDNOTE_ACK: { MSG_NAME *pmsg = (MSG_NAME*) pMsg; GAMEIN->GetMiniNoteDialogWrite()->SetActive(FALSE); CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(935), pmsg->Name ); } break; case MP_NOTE_NOTELIST_ACK: { MSG_FRIEND_NOTE_LIST* pmsg = (MSG_FRIEND_NOTE_LIST*) pMsg; GAMEIN->GetNoteDialog()->SetNoteList(pmsg); } break; case MP_NOTE_DELNOTE_ACK: { MSG_FRIEND_DEL_NOTE* pmsg = (MSG_FRIEND_DEL_NOTE*)pMsg; if(pmsg->bLast) { NoteListSyn(GAMEIN->GetNoteDialog()->GetSelectedNotePge(), GAMEIN->GetNoteDialog()->GetMode()); } if(pmsg->NoteID == GAMEIN->GetMiniNoteDialogRead()->GetNoteID()) { GAMEIN->GetMiniNoteDialogRead()->SetActive(FALSE); } GAMEIN->GetMiniNoteDialogWrite()->SetActive(FALSE); } break; case MP_NOTE_SAVENOTE_ACK: { MSG_DWORD2* pmsg = (MSG_DWORD2*)pMsg; if(pmsg->dwData2) { NoteListSyn(GAMEIN->GetNoteDialog()->GetSelectedNotePge(), GAMEIN->GetNoteDialog()->GetMode()); } GAMEIN->GetMiniNoteDialogWrite()->SetActive(FALSE); } break; case MP_NOTE_READNOTE_ACK: { MSG_FRIEND_READ_NOTE * pmsg = (MSG_FRIEND_READ_NOTE*)pMsg; { CMiniNoteDialogRead* dialog = GAMEIN->GetMiniNoteDialogRead(); ASSERT( dialog ); // desc_hseos_농장시스템_01 // S 농장시스템 추가 added by hseos 2008.01.16 if (stricmp(pmsg->FromName, "<SYSTEM>") == 0) { int nMsgID = atoi(pmsg->Note); if (nMsgID && CHATMGR->GetChatMsg(nMsgID)) { SafeStrCpy(pmsg->Note, CHATMGR->GetChatMsg(nMsgID), MAX_NOTE_LENGTH - 1); } } // E 농장시스템 추가 added by hseos 2008.01.16 char* pSendDate = NULL; char* pTitle = NULL; CNoteDialog* noteDialog = GAMEIN->GetNoteDialog(); if(noteDialog) { pSendDate = noteDialog->GetSendDate(pmsg->NoteID); pTitle = noteDialog->GetTitle(pmsg->NoteID); } dialog->SetMiniNote(pTitle, pSendDate, pmsg->FromName, pmsg->Note, pmsg->ItemIdx); dialog->SetPackageInfo(pmsg->dwPackageMoney, NULL, NULL); dialog->SetNoteID(pmsg->NoteID); dialog->SetActive(TRUE); noteDialog->Refresh( pmsg->NoteID ); } } break; case MP_NOTE_READNOTE_WITH_PACKAGE_ACK: { MSG_FRIEND_READ_NOTE_WITH_PACKAGE * pmsg = (MSG_FRIEND_READ_NOTE_WITH_PACKAGE*)pMsg; CMiniNoteDialogRead* dialog = GAMEIN->GetMiniNoteDialogRead(); ASSERT( dialog ); char* pSendDate = NULL; char* pTitle = NULL; CNoteDialog* noteDialog = GAMEIN->GetNoteDialog(); if(noteDialog) { pSendDate = noteDialog->GetSendDate(pmsg->NoteID); pTitle = noteDialog->GetTitle(pmsg->NoteID); } dialog->SetMiniNote(pTitle, pSendDate, pmsg->FromName, pmsg->Note, pmsg->ItemIdx); dialog->SetPackageInfo(pmsg->PackageMoney, &pmsg->ItemInfo, &pmsg->OptionInfo); dialog->SetNoteID(pmsg->NoteID); dialog->SetActive(TRUE); noteDialog->Refresh( pmsg->NoteID ); } break; case MP_NOTE_GETPACKAGE_NACK: { MSG_DWORD* pmsg = (MSG_DWORD*)pMsg; switch(pmsg->dwData) { case eConsignmentERR_PoorSlot: { CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(1520) ); } break; case eConsignmentERR_GoldOver: { CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(475) ); } break; } } break; case MP_NOTE_GETPACKAGE_ACK: { ITEMOBTAINARRAY * pmsg = (ITEMOBTAINARRAY *)pMsg; // 아이템 획득 정보를 담을 포인터를 선언하고 메시지를 받는다. CItem* pItem = NULL; // 아이템 정보를 담을 포인터를 선언하고 null처리를 한다. for(WORD i = 0; i < pmsg->ItemNum; ++i ) { ITEMBASE& itemBase = pmsg->ItemInfo[ i ]; pItem = GAMEIN->GetInventoryDialog()->GetItemForPos( pmsg->GetItem(i)->Position); ITEMBASE prevItemBase; ZeroMemory( &prevItemBase, sizeof( prevItemBase ) ); if(pItem) { if( pItem->GetDBIdx() == itemBase.dwDBIdx ) { prevItemBase = pItem->GetItemBaseInfo(); } pItem->SetItemBaseInfo( itemBase ); // 아이템 기본 정보를 세팅한다. } else // 아이템 정보가 유효하지 않으면, { pItem = ITEMMGR->MakeNewItem(pmsg->GetItem(i),"MP_NOTE_GETPACKAGE_ACK"); // 새로 아이템을 생성해 포인터로 받는다. const ITEM_INFO* pInfo = ITEMMGR->GetItemInfo( pItem->GetItemIdx() ) ; if( !pInfo ) continue; if( pInfo->wSeal == eITEM_TYPE_SEAL ) { itemBase.nSealed = eITEM_TYPE_SEAL ; itemBase.nRemainSecond = pInfo->dwUseTime ; pItem->SetItemBaseInfo( itemBase ) ; } GAMEIN->GetInventoryDialog()->AddItem(pItem); } } if( pItem ) { ITEMMGR->ItemDropEffect( pItem->GetItemIdx() ); } QUICKMGR->RefreshQickItem(); } break; case MP_NOTE_GETPACKAGE_NOTIFY: { MSG_DWORD4* pmsg = (MSG_DWORD4*)pMsg; const ITEM_INFO* pInfo = ITEMMGR->GetItemInfo( pmsg->dwData3 ) ; if(pInfo) { if( pInfo->Stack ) CHATMGR->AddMsg( CTC_GETITEM, CHATMGR->GetChatMsg( 1112 ), pInfo->ItemName, pmsg->dwData4 ); else CHATMGR->AddMsg( CTC_GETITEM, CHATMGR->GetChatMsg( 101 ), pInfo->ItemName ); } DWORD dwNoteID = 0; CMiniNoteDialogRead* pReadDlg = GAMEIN->GetMiniNoteDialogRead(); if(pReadDlg) { dwNoteID = pReadDlg->GetNoteID(); pReadDlg->SetPackageInfo(0, NULL, NULL); } CNoteDialog* pNoteDlg = GAMEIN->GetNoteDialog(); if(pNoteDlg) { pNoteDlg->ClearPackageInfo(dwNoteID); pNoteDlg->Refresh(dwNoteID); } } break; ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //nack case MP_NOTE_SENDNOTE_NACK: { MSG_NAME_WORD * pmsg = (MSG_NAME_WORD *)pMsg; if(pmsg->wData == 2) //invalid user CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(936) ); else if(pmsg->wData == 3) //full list CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(937), pmsg->Name ); } break; } }