CWndAwakeTrans::CWndAwakeTrans()
{
for( int i = 0; i < 3; i++ )
{
m_pItemElem[i] = NULL;
m_pTexture[i] = NULL;
}
}
CWndAwakeTrans::~CWndAwakeTrans()
{
for( int i = 0; i < 3; i++ )
{
if( m_pItemElem[i] != NULL )
{
if( !g_pPlayer->m_vtInfo.IsTrading( m_pItemElem[i] ))
m_pItemElem[i]->SetExtra(0);
}
}
for( int i = 0; i < 3; i++ )
{
m_pItemElem[i] = NULL;
m_pTexture[i] = NULL;
}
}
BOOL CWndAwakeTrans::Initialize( CWndBase* pWndParent, DWORD dwType )
{
return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), APP_TRANSFER, 0, CPoint( 0, 0 ), pWndParent );
}
BOOL CWndAwakeTrans::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
{
return CWndNeuz::OnCommand( nID, dwMessage, pWndBase );
}
void CWndAwakeTrans::OnSize( UINT nType, int cx, int cy )
{
CWndNeuz::OnSize( nType, cx, cy );
}
//Window
void CWndAwakeTrans::OnDraw( C2DRender* p2DRender )
{
LPWNDCTRL wndCtrl[3];
wndCtrl[0] = GetWndCtrl( WIDC_STATIC1 );
wndCtrl[1] = GetWndCtrl( WIDC_STATIC2 );
wndCtrl[2] = GetWndCtrl( WIDC_STATIC3 );
for( int i = 0; i < 3; i++ )
{
if( m_pItemElem[i] && m_pTexture[i] )
m_pTexture[i]->Render( p2DRender, CPoint( wndCtrl[i]->rect.left, wndCtrl[i]->rect.top));
if ( m_pItemElem[0] && m_pItemElem[1] && m_pItemElem[2] )
{
m_pTexture[2] = CWndBase::m_textureMng.AddTexture( D3DDEVICE, MakePath( DIR_ITEM, m_pItemElem[2]->GetProp()->szIcon ), 0xffff00ff );
m_pTexture[2]->Render( p2DRender, CPoint( wndCtrl[2]->rect.left, wndCtrl[2]->rect.top));
}
}
}
BOOL CWndAwakeTrans::OnDropIcon( LPSHORTCUT pShortcut, CPoint point )
{
LPWNDCTRL pCtrl = GetWndCtrl( WIDC_STATIC1 );
CItemElem *pItem = (CItemElem*)g_pPlayer->GetItemId( pShortcut->m_dwId );
if(! pItem )
return FALSE;
if( pCtrl && pCtrl->rect.PtInRect( point ) )
{
if( pItem->GetRandomOptItemId() > 0 )
{
m_pItemElem[0] = pItem;
pItem->SetExtra(1);
m_pTexture[0] = CWndBase::m_textureMng.AddTexture( D3DDEVICE, MakePath( DIR_ITEM, m_pItemElem[0]->GetProp()->szIcon ), 0xffff00ff);
return TRUE;
}
}
pCtrl = GetWndCtrl( WIDC_STATIC2 );
if( pCtrl && pCtrl->rect.PtInRect( point ) )
{
if( pItem->GetRandomOptItemId() <= 0 )
{
m_pItemElem[1] = pItem;
pItem->SetExtra(1);
m_pTexture[1] = CWndBase::m_textureMng.AddTexture( D3DDEVICE, MakePath( DIR_ITEM, m_pItemElem[1]->GetProp()->szIcon ), 0xffff00ff);
return TRUE;
}
}
pCtrl = GetWndCtrl( WIDC_STATIC3 );
if( pCtrl && pCtrl->rect.PtInRect( point ))
{
/* if( pItem->GetProp()->dwID == II_SYS_SRC_TRANSAWAKE )
{*/
m_pItemElem[2] = pItem;
pItem->SetExtra(1);
m_pTexture[2] = CWndBase::m_textureMng.AddTexture( D3DDEVICE, MakePath( DIR_ITEM, m_pItemElem[2]->GetProp()->szIcon ), 0xffff00ff );
return TRUE;
/* } */
}
return TRUE;
}
BOOL CWndAwakeTrans::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult )
{
switch( nID)
{
case WIDC_OK:
if( m_pItemElem[0] && m_pItemElem[1] && m_pItemElem[2] )
{
g_DPlay.SendTransferAwake( m_pItemElem[1]->m_dwObjId, m_pItemElem[0]->m_dwObjId, m_pItemElem[2]->m_dwObjId );
Destroy();
}
else
g_WndMng.PutString( "Unable to transfer awake!" );
break;
}
return CWndNeuz::OnChildNotify( message, nID, pLResult );
}
void CWndAwakeTrans::OnInitialUpdate( void )
{
CWndNeuz::OnInitialUpdate();
MoveParentCenter();
}
//DPSrvr
void CDPSrvr::OnSendTransferAwake( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE, u_long )
{
CUser *pUser = g_UserMng.GetUser( dpidCache, dpidUser );
if( IsInvalidObj( pUser ) )
return;
DWORD dwDest, dwSource, dwScroll;
ar >> dwDest >> dwSource, dwScroll;
CItemElem *pDest = NULL, *pSource = NULL, *pScroll = NULL;
pSource = pUser->m_Inventory.GetAtId( dwSource ); // Original awake
pDest = pUser->m_Inventory.GetAtId( dwDest ); // Transfer awake
pScroll = pUser->m_Inventory.GetAtId( dwScroll ); // Transfer scroll
if( !pDest || !pSource /*|| !pScroll*/ )
return;
if( g_xRandomOptionProperty->GetRandomOptionKind( pDest) > 0 &&
( pDest->GetProp()->dwItemKind3 != IK3_HAT
&& pDest->GetProp()->dwItemKind3 != IK3_CLOTH
&& pDest->GetProp()->dwItemKind3 != IK3_GLOVE
&& pDest->GetProp()->dwItemKind3 != IK3_SHOES
&& pDest->GetProp()->dwItemKind3 != IK3_CLOAK) )
{
pUser->AddText( "Destination item must not be awake!" );
return;
}
else if( g_xRandomOptionProperty->GetRandomOptionKind( pSource ) < 0 )
{
pUser->AddText( "Principal item must have an awake!" );
return;
}
else if( pScroll->GetProp()->dwID != II_SYS_SRC_TRANSAWAKE )
{
pUser->AddText( "Please insert an Scroll of Transfer Awakening!" );
return;
}
else if( pDest->GetProp()->dwItemKind3 != pSource->GetProp()->dwItemKind3 &&
( pDest->GetProp()->dwItemKind2 != IK2_WEAPON_DIRECT
&& pDest->GetProp()->dwItemKind2 != IK2_WEAPON_MAGIC ) )
{
pUser->AddText( "Item kind must be the same!" );
return;
}
else
{
pDest->SetRandomOptItemId( pSource->GetRandomOptItemId() ); // Get awake from source to destination
g_xRandomOptionProperty->InitializeRandomOption( pSource->GetRandomOptItemIdPtr() ); // unawake source
pUser->UpdateItem( (BYTE) pScroll->m_dwObjId, UI_NUM, pScroll->m_nItemNum - 1 ); // Update scroll item count
pUser->UpdateItemEx( (BYTE) pDest->m_dwObjId, UI_RANDOMOPTITEMID, pDest->GetRandomOptItemId() ); // Update destination
pUser->UpdateItemEx( (BYTE) pSource->m_dwObjId, UI_RANDOMOPTITEMID, pSource->GetRandomOptItemId() ); // Update source
pUser->AddText( "Awake transfer completed!" );
}
}
//DPClient
void CDPClient::SendTransferAwake( DWORD pItemElemMain, DWORD pItemElemDestroy, DWORD pItemScroll )
{
BEFORESENDSOLE( ar, PACKETTYPE_TRANSFERAWAKE, DPID_UNKNOWN );
ar << pItemElemMain << pItemElemDestroy << pItemScroll;
SEND( ar, this, DPID_SERVERPLAYER );
}