Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Flyff > Flyff Private Server
You last visited: Today at 14:52

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Source TUT]Scroll of Unbinding

Discussion on [Source TUT]Scroll of Unbinding within the Flyff Private Server forum part of the Flyff category.

Reply
 
Old   #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.
Jopsi332 is offline  
Thanks
1 User
Old 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?
Flash! is offline  
Old 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! View Post
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
Jopsi332 is offline  
Old 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
guardianangel is offline  
Old 02/13/2012, 19:12   #5

 
Flyff_Service's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 680
Received Thanks: 337
1. Wozu ein Tutorial dafür?
2. Wieso nicht OnDoUseItemTarget
Flyff_Service is offline  
Thanks
3 Users
Old 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 View Post
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 View Post
Danke sehr ...
Endlich ein Normaler unter Primaten
Höchstens ein Primat unter %EPVPUSERCOUNT% anderen.
yannickFlyff is offline  
Thanks
4 Users
Old 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::OnDoUseItemTargetCAr arDPID dpidCacheDPID dpidUserLPBYTE lpBufu_long uBufSize)
{
    
DWORD dwMaterialdwTarget;
    
ar >> dwMaterial >> dwTarget;
    
CUserpUser    g_UserMng.GetUserdpidCachedpidUser );
    if( 
IsValidObjpUser ) )
    {
        
CItemElempMaterial    = (CItemElem*)pUser->GetItemIddwMaterial );
        
CItemElempTarget    = (CItemElem*)pUser->GetItemIddwTarget );
        if( !
IsUsableItempMaterial ) || !IsUsableItempTarget ) )
            return;
        if( 
pUser->m_Inventory.IsEquipdwTarget ) )
        {
            
pUser->AddDefinedTextTID_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:
                {
                    
CPetpPet    pTarget->m_pPet;
                    if( !
pPet || !pTarget->IsFlagCItemElem::expired ) )
                    {
                        
pUser->AddDefinedTextTID_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->AddDefinedTextTID_GAME_PETRESURRECTION_WRONG_TARGET_02 );
                        }
                        else
                        {
                            
PutItemLogpUser"r""::PetResurrection"pTarget );

                            
pTarget->ResetFlagCItemElem::expired );
                            
pUser->UpdateItem( (BYTE)( pTarget->m_dwObjId ), UI_FLAGMAKELONGpTarget->m_dwObjIndexpTarget->m_byFlag ) );
                            
pPet->SetLife);
                            
pPet->SetEnergypPet->GetMaxEnergy() / );
                            
pUser->AddPetStatepTarget->m_dwObjIdpPet->GetLife(), pPet->GetEnergy(), pPet->GetExp() );
                            
pUser->AddDefinedTextTID_GAME_PETRESURRECTION_SUCCESS );
                            
b    TRUE;
                        }
                    }
                    break;
                }
            case 
II_SYS_SYS_SCR_AWAKECANCEL:
            case 
II_SYS_SYS_SCR_AWAKECANCEL02:
                
b    DoUseItemTarget_InitializeRandomOptionpUserpTargetCRandomOptionProperty::eAwakening,
                    
TID_GAME_AWAKECANCEL_INFOTID_GAME_AWAKECANCEL,
                    
"r""::AwakeCancel" );
                break;
            case 
II_SYS_SYS_SCR_AWAKE:
                
b    DoUseItemTarget_GenRandomOptionpUserpTargetCRandomOptionProperty::eAwakening
                    
0TID_GAME_INVALID_TARGET_ITEMTID_GAME_AWAKE_OR_BLESSEDNESS01,
                    
"r""::Awake" );
                break;
            case 
II_SYS_SYS_SCR_BLESSEDNESS:
            case 
II_SYS_SYS_SCR_BLESSEDNESS02:
                
b    DoUseItemTarget_GenRandomOptionpUserpTargetCRandomOptionProperty::eBlessing
                    
0TID_GAME_USE_BLESSEDNESS_INFOTID_GAME_BLESSEDNESS_INVALID_ITEM,
                    
"r""::Blessedness" );
                break;
#if __VER >= 12 // __PET_0519
            
case II_SYS_SYS_SCR_EATPETAWAKE:    // ¸ÔÆê °¢¼º
                
b    DoUseItemTarget_GenRandomOptionpUserpTargetCRandomOptionProperty::eEatPet,
                    
TID_GAME_PETAWAKE_S00TID_GAME_PETAWAKE_E00TID_GAME_PETAWAKE_E00,
                    
"r""EATPETAWAKE" );
                break;
            case 
II_SYS_SYS_SCR_PETAWAKE:    // ½Ã½ºÅÛ Æê °¢¼º
                
b    DoUseItemTarget_GenRandomOptionpUserpTargetCRandomOptionProperty::eSystemPet
                    
TID_GAME_PETAWAKE_S00TID_GAME_PETAWAKE_E00TID_GAME_PETAWAKE_E00,
                    
"r""PETAWAKE" );
                break;
            case 
II_SYS_SYS_SCR_PETAWAKECANCEL:        // ½Ã½ºÅÛ Æê °¢¼º Ãë¼Ò
                
b    DoUseItemTarget_InitializeRandomOptionpUserpTargetCRandomOptionProperty::eSystemPet,
                    
TID_GAME_PETAWAKECANCEL_S00TID_GAME_PETAWAKECANCEL_E00,
                    
"r""PETAWAKECANCEL" );
                break;
#endif    // __PET_0519
            
case II_SYS_SYS_SCR_LEVELDOWN01:
            case 
II_SYS_SYS_SCR_LEVELDOWN02:
                
b    DoUseItemTarget_ItemLevelDownpUserpMaterialpTarget );
                break;
                
// Scroll of Unbind
            
case II_SYS_SYS_SCR_BINDREMV:
                
Unbind Funktion;
                break;
            default:
                break;
        }
        if( 
)
        {
            
pUser->AddPlaySoundSND_INF_UPGRADESUCCESS );
            if( 
pUser->IsModeTRANSPARENT_MODE ) == )
                
g_UserMng.AddCreateSfxObjpUserXI_INT_SUCCESSpUser->GetPos().xpUser->GetPos().ypUser->GetPos().);

            
PutItemLogpUser"u""OnDoUseItemTarget"pMaterial );

            
pUser->UpdateItem( (BYTE)( pMaterial->m_dwObjId ), UI_NUMpMaterial->m_nItemNum );    
        }
    }

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
Incestus is offline  
Thanks
6 Users
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.