⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pkmanager.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				ITEMMGR->AddItemOption(&pmsg->sOptionInfo);

			CItem* pItem = ITEMMGR->MakeNewItem(&pmsg->ItemInfo,"MP_PK_LOOTING_ITEMLOOTING");
			GAMEIN->GetInventoryDialog()->AddItem(pItem);
			QUICKMGR->RefreshQickItem();

			CPKLootingDialog* pDlg = m_htLootingDlg.GetData( pmsg->dwDiePlayerIdx );
			if( pDlg )
			{
				pDlg->ChangeIconImage( pmsg->wAbsPosition, eLIK_ITEM, pmsg->ItemInfo.wIconIdx );
				pDlg->AddLootingItemNum();
				pDlg->SetMsgSync( FALSE );
			}

			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg( 563 ), 
				ITEMMGR->GetItemInfo(pmsg->ItemInfo.wIconIdx)->ItemName );
		}
		break;

	case MP_PK_LOOTING_ITEMLOOTED:
		{
			MSG_EXCHANGE_REMOVEITEM* pmsg = (MSG_EXCHANGE_REMOVEITEM*)pMsg;
			WORD wTableIdx = ITEMMGR->GetTableIdxForAbsPos( pmsg->wAbsPosition );
			const ITEMBASE* pItemInfo = ITEMMGR->GetItemInfoAbsIn( HERO, pmsg->wAbsPosition );
			ITEMMGR->DeleteItemofTable( wTableIdx, pmsg->wAbsPosition );
			QUICKMGR->RefreshQickItem();
			
			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg( 564 ), 
				ITEMMGR->GetItemInfo(pItemInfo->wIconIdx)->ItemName );
		}
		break;

	case MP_PK_LOOTING_MOENYLOOTING:
		{
			MSG_DWORD3* pmsg = (MSG_DWORD3*)pMsg;
			CPKLootingDialog* pDlg = m_htLootingDlg.GetData( pmsg->dwData1 );
			if( pDlg )
			{
				pDlg->ChangeIconImage( pmsg->dwData2, eLIK_MONEY );
				pDlg->AddLootingItemNum();
				pDlg->SetMsgSync( FALSE );
			}
			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg( 565 ), AddComma( pmsg->dwData3 ) );
		}
		break;

	case MP_PK_LOOTING_MOENYLOOTED:
		{
			MSG_DWORD3* pmsg = (MSG_DWORD3*)pMsg;

			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg( 566 ), AddComma( pmsg->dwData3 ) );
		}
		break;

	case MP_PK_LOOTING_EXPLOOTING:
		{
			MSG_DWORD3* pmsg = (MSG_DWORD3*)pMsg;
			CPKLootingDialog* pDlg = m_htLootingDlg.GetData( pmsg->dwData1 );
			if( pDlg )
			{
				pDlg->ChangeIconImage( pmsg->dwData2, eLIK_EXP );
				pDlg->AddLootingItemNum();
				pDlg->SetMsgSync( FALSE );
			}
			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg( 567 ), pmsg->dwData3 );
		}
		break;

	case MP_PK_LOOTING_EXPLOOTED:
		{
			MSG_DWORD3* pmsg = (MSG_DWORD3*)pMsg;
			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg( 568 ), pmsg->dwData3 );
		}
		break;

	case MP_PK_LOOTING_NOLOOTING:
		{
			MSG_DWORD2* pmsg = (MSG_DWORD2*)pMsg;
			CPKLootingDialog* pDlg = m_htLootingDlg.GetData( pmsg->dwData1 );
			if( pDlg )
			{
				pDlg->ChangeIconImage( pmsg->dwData2, eLIK_NONE );	//ºó°ÍÀ¸·Î
				pDlg->SetMsgSync( FALSE );
			}
		}
		break;
		
	case MP_PK_LOOTING_NOINVENSPACE:
		{
			MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg( 569 ) );
			CPKLootingDialog* pDlg = m_htLootingDlg.GetData( pmsg->dwData );
			if( pDlg )
				pDlg->SetMsgSync( FALSE );
		}
		break;

	case MP_PK_LOOTING_ENDLOOTING:
		{
			MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
			if( pmsg->dwData == HEROID )
			{
				SetPKLooted( FALSE );
			}
			else
			{
				CPKLootingDialog* pDlg = m_htLootingDlg.GetData( pmsg->dwData );
				if( pDlg )
				{
					pDlg->SetLootingEnd( TRUE );
					CloseLootingDialog( pDlg, FALSE );
				}
			}
		}
		break;

	case MP_PK_DESTROY_ITEM:
		{
			MSG_ITEM_DESTROY* pmsg = (MSG_ITEM_DESTROY*)pMsg;

			WORD wTableIdx = ITEMMGR->GetTableIdxForAbsPos( pmsg->wAbsPosition );
			const ITEMBASE* pItemInfo = ITEMMGR->GetItemInfoAbsIn( HERO, pmsg->wAbsPosition );

			if( pItemInfo == NULL ) return;
			ITEMMGR->DeleteItemofTable( wTableIdx, pmsg->wAbsPosition );
			QUICKMGR->RefreshQickItem();
			
			ITEM_INFO* pInfo = ITEMMGR->GetItemInfo( pItemInfo->wIconIdx );
			if( pInfo )
			{
				if( pmsg->cbReason == 0 )
					CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg( 569 ), pInfo->ItemName );
				else
					CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg( 688 ), pInfo->ItemName );
			}
		}
		break;
	case MP_PK_LOOTING_ERROR:
		{
			MSG_DWORD2* pmsg = (MSG_DWORD2*)pMsg;
			CPKLootingDialog* pDlg = m_htLootingDlg.GetData( pmsg->dwData1 );
			if( pDlg )
				pDlg->SetMsgSync( FALSE );

			//¿¡·¯
			switch( pmsg->dwData2 )
			{
			case eLOOTINGERROR_OVER_DISTANCE:
				CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg( 561 ) ); //°Å¸®°¡ ³Ê¹« ¸Ö¾î.
				break;
			default:
				break;
			}
		}
		break;
	case MP_PK_PKALLOW_CHANGED:
		{
			MSG_BYTE* pmsg = (MSG_BYTE*)pMsg;
			PKMGR->SetPKAllow( (BOOL)pmsg->bData );

			//¸ðµç Ç÷¹À̾îÀÇ PK¸ðµå ²ô±â.
			if( PKMGR->IsPKAllow() )
			{
				CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(627) );
			}
			else
			{
				OBJECTMGR->AllPlayerPKOff();
				CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(626) );
			}
		}
		break;
	}
}


//--------------
//ÀÎÅÍÆäÀ̽º °ü·Ã
CPKLootingDialog* CPKManager::CreateLootingDlg( DWORD dwDiePlayerIdx )
{
	//¸Å¹ø ÆÄÀÏ¿¡¼­ Àоî¿Â´Ù...?
#ifdef _FILE_BIN_	
	CPKLootingDialog* pLootDlg = (CPKLootingDialog*)WINDOWMGR->GetDlgInfoFromFile( "./image/Looting.bin", "rb" );
#else
	CPKLootingDialog* pLootDlg = (CPKLootingDialog*)WINDOWMGR->GetDlgInfoFromFile( "./image/Looting.txt" );
#endif
	pLootDlg->Linking();

	LONG x = ( 1024 - 251 ) / 2;
	LONG y = ( 768 - 275 ) / 2;

	//Ç¥Áö¼ÇÀÌ °ãÄ¡´Â dlg°¡ ÀÖÀ¸¸é À§Ä¡Á¶Á¤
	PositioningDlg( x, y );

	pLootDlg->InitPKLootDlg( AllocWindowId(), x, y, dwDiePlayerIdx );
	WINDOWMGR->AddWindow( pLootDlg );
	
	pLootDlg->SetActive(TRUE);


//ÀÌ¹Ì Á¸ÀçÇϴ°¡ Çѹø º¸ÀÚ	//¹Ýµå½Ã ÀÌÀ§Ä¡. À§¿¡¼­ ¸ÕÀú °Ë»çÇÏ¸é ¾ÈµÈ´Ù. À©µµ¿ì ¾ÆÀ̵ð¹®Á¦.
	CPKLootingDialog* pLootTempDlg = m_htLootingDlg.GetData( dwDiePlayerIdx );
	if( pLootTempDlg )
		CloseLootingDialog( pLootTempDlg, FALSE );

	m_htLootingDlg.Add( pLootDlg, dwDiePlayerIdx );

	return pLootDlg;
}

void CPKManager::PositioningDlg( LONG& rX, LONG& rY )
{
	int nCount = 0;
	m_htLootingDlg.SetPositionHead();
	CPKLootingDialog* pLootDlg = NULL;
	while( pLootDlg = m_htLootingDlg.GetData() )
	{
		if( (LONG)pLootDlg->GetAbsX() == rX )
		if( (LONG)pLootDlg->GetAbsY() == rY )
		{
			rX += 20;
			rY += 20;
			if( ++nCount >= 10 )//ÇѾøÀÌ ³»·Á°¡´Â°Í ¹æÁö
			{
				rX -= 200;
				rY -= 200;
				nCount = 0;
			}
		}
	}
}


void CPKManager::CloseLootingDialog( CPKLootingDialog* pLootingDlg, BOOL bMsgToServer )
{
	pLootingDlg->SetDisable( FALSE );		//^^ disableÀ롂 acitve°¡ ¾È¸Ô¾î.
	pLootingDlg->SetActiveRecursive( FALSE );
	pLootingDlg->ReleaseAllIcon();
	pLootingDlg->SetDisable( TRUE );
	m_htLootingDlg.Remove( pLootingDlg->GetDiePlayerIdx() );
	FreeWindowId( pLootingDlg->GetID() );
	WINDOWMGR->AddListDestroyWindow( pLootingDlg );

	if( m_htLootingDlg.GetDataNum() == 0 )
	{
		SetPKLooting( FALSE );	//¼­¹ö¿Í ¸ÂÃß¾î¾ß ÇÒÅÙµ¥
	}

	if( bMsgToServer )
	{
		MSG_DWORD	msg;
		msg.Category	= MP_PK;
		msg.Protocol	= MP_PK_LOOTING_ENDLOOTING;
		msg.dwObjectID	= HEROID;
		msg.dwData		= pLootingDlg->GetDiePlayerIdx();

		NETWORK->Send( &msg, sizeof(msg) );
	}
}

int CPKManager::GetLootingChance( DWORD dwBadFame )
{
	if( dwBadFame < 100000 )
		return 3;
	else if( dwBadFame < 500000 )
		return 4;
	else if( dwBadFame < 1000000 )
		return 5;
	else if( dwBadFame < 5000000 )
		return 6;
	else if( dwBadFame < 10000000 )
		return 7;
	else if( dwBadFame < 50000000 )
		return 8;
	else if( dwBadFame < 100000000 )
		return 9;
	else
		return 10;
}

int CPKManager::GetLootingItemNum( DWORD dwBadFame )
{
	if( dwBadFame < 100000000 )
		return 1;
	else if( dwBadFame < 400000000 )
		return 2;
	else if( dwBadFame < 700000000 )
		return 3;
	else if( dwBadFame < 1000000000 )
		return 4;
	else
		return 5;
}

/*
void CPKManager::RemoveAllLootingDlg()
{
	m_htLootingDlg.SetPositionHead();

	CPKLootingDialog* pLootDlg = NULL;
	while( pLootDlg = m_htLootingDlg.GetData() )
	{
		WINDOWMGR->AddListDestroyWindow( pLootDlg );	//delete´Â ¸Å´ÏÁ®°¡ ÇØÁØ´Ù
		
	}
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -