|
You last visited: Today at 14:52
Advertisement
[Source TUT]Scroll of Unbinding
Discussion on [Source TUT]Scroll of Unbinding within the Flyff Private Server forum part of the Flyff category.
02/13/2012, 18:11
|
#1
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
[Source TUT]Scroll of Unbinding
Da in einem anderen Thread dannach gefragt wurde hier:
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 );
}
WndField.h
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 );
}
DPClient.h
Code:
void SendUnbind( int itemid );
DPSrvr.cpp
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;
}
}
DPSrvr.cpp
Code:
void OnUnbind( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE, u_long);
soo
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
und euer packet
Code:
PACKETTYPE_NEWUNBIND
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.
|
|
|
02/13/2012, 18:28
|
#2
|
elite*gold: 455
Join Date: Jun 2009
Posts: 1,601
Received Thanks: 1,103
|
Na suppi.
Das ist aber nicht die "originale " Unbind-Scroll kann das sein?
|
|
|
02/13/2012, 18:31
|
#3
|
elite*gold: 4
Join Date: Mar 2010
Posts: 3,148
Received Thanks: 1,535
|
Quote:
Originally Posted by Marvin!
Na suppi.
Das ist aber nicht die "originale " Unbind-Scroll kann das sein?
|
ja, aber ist der selbe effekt.
Spiele kein offi weiß nicht wie die offi aufgebaut ist.
Es ging mir um den effekt -> unbinden
|
|
|
02/13/2012, 18:37
|
#4
|
elite*gold: 0
Join Date: Oct 2008
Posts: 275
Received Thanks: 68
|
Danke sehr ...
Endlich ein Normaler unter Primaten
|
|
|
02/13/2012, 19:12
|
#5
|
elite*gold: 0
Join Date: Oct 2008
Posts: 680
Received Thanks: 337
|
1. Wozu ein Tutorial dafür?
2. Wieso nicht OnDoUseItemTarget
|
|
|
02/13/2012, 21:34
|
#6
|
elite*gold: 0
Join Date: Dec 2011
Posts: 206
Received Thanks: 224
|
Was ich komisch finde. Bei SendUnbind benutzt er den datentype int für itemtype.
Bei der annehme des Packets in der OnUnbind benutzt er plötzlich den datentype DWORD.
Njoa kommt davon wenn man scheis Variablen namen benutzt wie "itemid". Offi macht nicht umsonst die abkürzung des datentypes vor dem variablen namen like "dwItemId" "nItemId".
Quote:
Originally Posted by Flyff_Service
2. Wieso nicht OnDoUseItemTarget
|
Lass ihn Schatz. Er ist langsam.
Eventuell kann er bis jetzt nur Windows in Flyff adden. Wie man komplexere/größere Funktionen in Flyff erweitert hat er wohl noch nicht gelernt.
Was ich am Code lustig finde:
Code:
CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
CItemElem * pItemElem = pUser->m_Inventory.GetAt(itemid);
5000 senden und bb server
Quote:
Originally Posted by guardianangel
Danke sehr ...
Endlich ein Normaler unter Primaten
|
Höchstens ein Primat unter %EPVPUSERCOUNT% anderen.
|
|
|
02/14/2012, 07:33
|
#7
|
elite*gold: 0
Join Date: Oct 2010
Posts: 271
Received Thanks: 206
|
Ich frag mich wieso ihr immer alles so kompliziert macht? lol
PHP Code:
void CDPSrvr::OnDoUseItemTarget( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize) { DWORD dwMaterial, dwTarget; ar >> dwMaterial >> dwTarget; CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser ); if( IsValidObj( pUser ) ) { CItemElem* pMaterial = (CItemElem*)pUser->GetItemId( dwMaterial ); CItemElem* pTarget = (CItemElem*)pUser->GetItemId( dwTarget ); if( !IsUsableItem( pMaterial ) || !IsUsableItem( pTarget ) ) return; if( pUser->m_Inventory.IsEquip( dwTarget ) ) { pUser->AddDefinedText( TID_GAME_EQUIPPUT ); return; } BOOL b = FALSE; switch( pMaterial->m_dwItemId ) { case II_SYS_SYS_QUE_PETRESURRECTION02_S: case II_SYS_SYS_QUE_PETRESURRECTION02_A: case II_SYS_SYS_QUE_PETRESURRECTION02_B: { CPet* pPet = pTarget->m_pPet; if( !pPet || !pTarget->IsFlag( CItemElem::expired ) ) { pUser->AddDefinedText( TID_GAME_PETRESURRECTION_WRONG_TARGET_01 ); } else { BYTE nLevel = pPet->GetLevel(); if( ( nLevel == PL_B && pMaterial->m_dwItemId != II_SYS_SYS_QUE_PETRESURRECTION02_B ) || ( nLevel == PL_A && pMaterial->m_dwItemId != II_SYS_SYS_QUE_PETRESURRECTION02_A ) || ( nLevel == PL_S && pMaterial->m_dwItemId != II_SYS_SYS_QUE_PETRESURRECTION02_S ) || ( nLevel < PL_B ) ) { pUser->AddDefinedText( TID_GAME_PETRESURRECTION_WRONG_TARGET_02 ); } else { PutItemLog( pUser, "r", "::PetResurrection", pTarget ); pTarget->ResetFlag( CItemElem::expired ); pUser->UpdateItem( (BYTE)( pTarget->m_dwObjId ), UI_FLAG, MAKELONG( pTarget->m_dwObjIndex, pTarget->m_byFlag ) ); pPet->SetLife( 0 ); pPet->SetEnergy( pPet->GetMaxEnergy() / 2 ); pUser->AddPetState( pTarget->m_dwObjId, pPet->GetLife(), pPet->GetEnergy(), pPet->GetExp() ); pUser->AddDefinedText( TID_GAME_PETRESURRECTION_SUCCESS ); b = TRUE; } } break; } case II_SYS_SYS_SCR_AWAKECANCEL: case II_SYS_SYS_SCR_AWAKECANCEL02: b = DoUseItemTarget_InitializeRandomOption( pUser, pTarget, CRandomOptionProperty::eAwakening, TID_GAME_AWAKECANCEL_INFO, TID_GAME_AWAKECANCEL, "r", "::AwakeCancel" ); break; case II_SYS_SYS_SCR_AWAKE: b = DoUseItemTarget_GenRandomOption( pUser, pTarget, CRandomOptionProperty::eAwakening, 0, TID_GAME_INVALID_TARGET_ITEM, TID_GAME_AWAKE_OR_BLESSEDNESS01, "r", "::Awake" ); break; case II_SYS_SYS_SCR_BLESSEDNESS: case II_SYS_SYS_SCR_BLESSEDNESS02: b = DoUseItemTarget_GenRandomOption( pUser, pTarget, CRandomOptionProperty::eBlessing, 0, TID_GAME_USE_BLESSEDNESS_INFO, TID_GAME_BLESSEDNESS_INVALID_ITEM, "r", "::Blessedness" ); break; #if __VER >= 12 // __PET_0519 case II_SYS_SYS_SCR_EATPETAWAKE: // ¸ÔÆê °¢¼º b = DoUseItemTarget_GenRandomOption( pUser, pTarget, CRandomOptionProperty::eEatPet, TID_GAME_PETAWAKE_S00, TID_GAME_PETAWAKE_E00, TID_GAME_PETAWAKE_E00, "r", "EATPETAWAKE" ); break; case II_SYS_SYS_SCR_PETAWAKE: // ½Ã½ºÅÛ Æê °¢¼º b = DoUseItemTarget_GenRandomOption( pUser, pTarget, CRandomOptionProperty::eSystemPet, TID_GAME_PETAWAKE_S00, TID_GAME_PETAWAKE_E00, TID_GAME_PETAWAKE_E00, "r", "PETAWAKE" ); break; case II_SYS_SYS_SCR_PETAWAKECANCEL: // ½Ã½ºÅÛ Æê °¢¼º Ãë¼Ò b = DoUseItemTarget_InitializeRandomOption( pUser, pTarget, CRandomOptionProperty::eSystemPet, TID_GAME_PETAWAKECANCEL_S00, TID_GAME_PETAWAKECANCEL_E00, "r", "PETAWAKECANCEL" ); break; #endif // __PET_0519 case II_SYS_SYS_SCR_LEVELDOWN01: case II_SYS_SYS_SCR_LEVELDOWN02: b = DoUseItemTarget_ItemLevelDown( pUser, pMaterial, pTarget ); break; // Scroll of Unbind case II_SYS_SYS_SCR_BINDREMV: b = Unbind Funktion; break; default: break; } if( b ) { pUser->AddPlaySound( SND_INF_UPGRADESUCCESS ); if( pUser->IsMode( TRANSPARENT_MODE ) == 0 ) g_UserMng.AddCreateSfxObj( pUser, XI_INT_SUCCESS, pUser->GetPos().x, pUser->GetPos().y, pUser->GetPos().z ); PutItemLog( pUser, "u", "OnDoUseItemTarget", pMaterial ); pUser->UpdateItem( (BYTE)( pMaterial->m_dwObjId ), UI_NUM, pMaterial->m_nItemNum - 1 ); } } }
Und das wars lol
Eine eigne Funktion wird nicht mal benötigt, nur ist übersichtlicher, lul.
Der kommt hier mit Fenster etc was kaputt
Aber naja, jetzt hat wieder jeder Noob Server Scroll of Unbind in der nächsten Server Wartung xD
|
|
|
Similar Threads
|
[Source Request] Scroll of Unbinding
02/13/2012 - Flyff Private Server - 10 Replies
Moin Community,
Ich hab da mal 'ne Frage: Hat wer von euch die Unbinding Scroll
und rückt sie (auch ggn. Bezahlung) raus?
Nein, die von Etioom funktioniert nicht.
Das ist auch eindeutig zu wenig Quelltext meiner Meinung nach.
|
Problems with Scroll of Unbinding
11/18/2011 - Flyff - 0 Replies
Hellow a pleasant day to everyone how to fix scroll of unbinding in source?since when I use it nothing happens
|
Scroll of Unbinding
10/24/2011 - Flyff Private Server - 3 Replies
deleted
|
All times are GMT +2. The time now is 14:52.
|
|