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 처리를 한다.
		}
	}
}
Beispiel #4
0
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;
	}

}