📄 pkmanager.cpp
字号:
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 + -