Da in einem anderen Thread dannach gefragt wurde hier:
WndField.Cpp
WndField.h
DPClient.cpp
DPClient.h
DPSrvr.cpp
&
DPSrvr.cpp
soo
was ihr machen müsst sind die resourcen vom fenster
undzwar so
und euer packet
in msghdr definieren da ihc nicht weiß ob meine packets eure überschreiben müsst ihr das selber machen
und die koordinaten in wndfield angeben für widc_custom1 damit das slot hintergrund richtig angezeigt wird.
WndField.Cpp
Code:
CWndUnbind::CWndUnbind void )
{
m_pItemElem = NULL;
m_pTexture = NULL;
}
CWndUnbind::~CWndUnbind( void )
{
if( m_pItemElem != NULL )
{
if( !g_pPlayer->m_vtInfo.IsTrading( m_pItemElem ))
m_pItemElem->SetExtra(0);
}
m_pItemElem = NULL;
m_pTexture = NULL;
DeleteDeviceObjects();
}
BOOL CWndUnbind::Initialize( CWndBase* pWndParent, DWORD dwType )
{
return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), APP_UNBIND, 0, CPoint( 0, 0 ), pWndParent );
}
BOOL CWndUnbind::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
{
return CWndNeuz::OnCommand( nID, dwMessage, pWndBase );
}
void CWndUnbind:OnDraw( C2DRender* p2DRender )
{
CPoint point;
CTexture* slot;
slot = CWndBase::m_textureMng.AddTexture( D3DDEVICE, MakePath( DIR_THEME, "WndChgElemItem.bmp" ), 0xffff00ff );// pfad zu dem Weißen Slot Icon
if(slot != NULL)
{
point.y = 25;//y koordinate für weißen hintergrund des waffenslots, also y von WIDC_CUSTOM1
point.x = 20;//x koordinate für weißen hintergrund des waffenslots, also x von WIDC_CUSTOM1
slot->Render( &g_Neuz.m_2DRender, point );
}
if( m_pTexture )
{
LPWNDCTRL wndCtrl = GetWndCtrl( WIDC_CUSTOM1 );
if( wndCtrl && wndCtrl->rect )
{
m_pTexture->Render( p2DRender, CPoint( wndCtrl->rect.left, wndCtrl->rect.top ) );// waffen icon auf WIDC_CUSTOM1 rendern
}
}
}
BOOL CWndUnbind::OnDropIcon( LPSHORTCUT pShortcut, CPoint point )
{
LPWNDCTRL pWndCtrl = GetWndCtrl( WIDC_CUSTOM1 );
CRect rect = pWndCtrl->rect;
if( rect && rect.PtInRect( point ) )
{
CItemElem *pItemElem = (CItemElem*)g_pPlayer->GetItemId( pShortcut->m_dwId );
if( pItemElem && pItemElem->GetProp() && pItemElem->GetProp()->dwItemKind1 == IK1_WEAPON || pItemElem && pItemElem->GetProp() && pItemElem->GetProp()->dwItemKind1 == IK1_ARMOR )
{
if( m_pItemElem )
{
m_pItemElem = NULL;
}
m_pItemElem = pItemElem;
m_pTexture = CWndBase::m_textureMng.AddTexture( D3DDEVICE, MakePath( DIR_ITEM, m_pItemElem->GetProp()->szIcon ), 0xffff00ff );
CWndButton* unbind = (CWndButton*)GetDlgItem(WIDC_UNBIND_IT);
unbind->EnableWindow(TRUE);
if( m_pTexture)
m_pItemElem->SetExtra(1);
}else{
SetForbid( TRUE );
}
}else{
SetForbid( TRUE );
}
return TRUE;
}
void CWndUnbind::OnSize( UINT nType, int cx, int cy )
{
CWndNeuz::OnSize( nType, cx, cy );
}
void CWndUnbind::OnLButtonUp( UINT nFlags, CPoint point )
{
}
void CWndUnbind::OnLButtonDown( UINT nFlags, CPoint point )
{
}
void CWndUnbind::OnDraw( C2DRender* p2DRender )
{
}
HRESULT CWndUnbind::RestoreDeviceObjects()
{
CWndNeuz::RestoreDeviceObjects();
return S_OK;
}
HRESULT CWndUnbind::InvalidateDeviceObjects()
{
CWndNeuz::InvalidateDeviceObjects();
return S_OK;
}
HRESULT CWndUnbind::DeleteDeviceObjects()
{
CWndNeuz::DeleteDeviceObjects();
InvalidateDeviceObjects();
return S_OK;
}
void CWndUnbind::OnInitialUpdate( void )
{
CWndNeuz::OnInitialUpdate();
RestoreDeviceObjects();
CRect rectRoot = m_pWndRoot->GetLayoutRect();
CRect rectWindow = GetWindowRect();
CPoint point( rectRoot.right - rectWindow.Width(), 110 );
Move( point );
MoveParentCenter();
}
BOOL CWndUnbind::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult )
{
switch (nID)
{
case WIDC_UNBIND_IT:// BUTTON drücken
{
itemid = m_pItemElem->m_dwObjId;
g_DPlay.SendUnbind( itemid ); // packet senden
Destroy();//Fenster schließen Lassen
break;
}
}
return CWndNeuz::OnChildNotify( message, nID, pLResult );
}
Code:
class CWndUnbind : public CWndNeuz
{
public:
CItemElem* m_pItemElem;
CTexture* m_pTexture;
CWndUnbind( void );
~CWndUnbind( void );
int itemid;
virtual HRESULT RestoreDeviceObjects();
virtual HRESULT InvalidateDeviceObjects();
virtual HRESULT DeleteDeviceObjects();
public:
virtual BOOL Initialize( CWndBase* pWndParent = NULL, DWORD nType = MB_OK );
virtual BOOL OnChildNotify( UINT message, UINT nID, LRESULT* pLResult );
virtual void OnDraw( C2DRender* p2DRender );
virtual void OnInitialUpdate();
virtual BOOL OnDropIcon( LPSHORTCUT pShortcut, CPoint point );
virtual BOOL OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase );
virtual void OnSize( UINT nType, int cx, int cy );
virtual void OnLButtonUp( UINT nFlags, CPoint point );
virtual void OnLButtonDown( UINT nFlags, CPoint point );
};
DPClient.cpp
Code:
void CDPClient::SendUnbind( int itemid )
{
BEFORESENDSOLE( ar, PACKETTYPE_NEWUNBIND, DPID_UNKNOWN );
ar << itemid;
SEND( ar, this, DPID_SERVERPLAYER );
}
Code:
void SendUnbind( int itemid );
Code:
ON_MSG( PACKETTYPE_NEWUNBIND, OnUnbind );
Code:
void CDPSrvr::OnUnbind( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
{
DWORD itemid;
ar >> itemid;
CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
CItemElem * pItemElem = pUser->m_Inventory.GetAt(itemid);
if(pItemElem->IsFlag(CItemElem::binds))
{
pItemElem->ResetFlag(CItemElem::binds);
pUser->UpdateItem( (BYTE)( pItemElem->m_dwObjId ), UI_FLAG, MAKELONG( pItemElem->m_dwObjIndex, pItemElem->m_byFlag ) );
pUser->AddText("Successfull unbinded!");
}
else
{
pUser->AddText("Unbind is not available!");
return;
}
}
Code:
void OnUnbind( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE, u_long);
was ihr machen müsst sind die resourcen vom fenster
undzwar so
Code:
APP_UNBIND // id definition der app WIDC_UNBIND_IT // button definition WIDC_CUSTOM1 // platz für den waffen slot
Code:
PACKETTYPE_NEWUNBIND
und die koordinaten in wndfield angeben für widc_custom1 damit das slot hintergrund richtig angezeigt wird.