Register for your free account! | Forgot your password?

You last visited: Today at 01:12

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

Advertisement



[Release] Ingame UserPanel

Discussion on [Release] Ingame UserPanel within the Flyff PServer Guides & Releases forum part of the Flyff Private Server category.

Reply
 
Old   #1
 
.Crash's Avatar
 
elite*gold: 40
Join Date: Feb 2011
Posts: 1,886
Received Thanks: 582
[Release] Ingame UserPanel

Hab irgendwo gelesen dass das wer verkaufen will daher mal

User Panel mit Buffer + 3 Links hoffe mal ich habe nichts vergessen.

Credits ka


Ctrl.h

public:
Code:
#ifdef	__USER_PANEL
	void			DoBuff( DWORD dwSkill, int nLevel, CCtrl *pTarget);
#endif

Ctrl.cpp

Code:
#ifdef	__USER_PANEL
void CCtrl::DoBuff( DWORD dwSkill, int nLevel, CCtrl *pTarget)
{
	ItemProp* pSkillProp;
	AddSkillProp* pAddSkillProp;
	GetSkillProp( &pSkillProp, &pAddSkillProp, dwSkill, nLevel, "DoActiveSkill" );
	if(	pAddSkillProp->dwSkillTime > 1000)
		pAddSkillProp->dwSkillTime = 9999999;

	 DoApplySkill( pTarget, pSkillProp, pAddSkillProp, 0, 0, FALSE, 0 );
}
#endif

WndField.h

Code:
#ifdef __USER_PANEL
class CWndCharInfoTab : public CWndNeuz
{

public:
	CWndButton		m_wndChangeJob;
//	CWndChangeJob*	m_pWndChangeJob;
	BOOL			m_fWaitingConfirm;
	BOOL			m_bExpert;
	int				m_nDisplay;

	CWndButton m_wndStrPlus, m_wndStrMinus;
	CWndButton m_wndStaPlus, m_wndStaMinus;
	CWndButton m_wndDexPlus, m_wndDexMinus;
	CWndButton m_wndIntPlus, m_wndIntMinus;
	
	CWndButton m_wndApply, m_wndReset;
	
	CWndEdit m_editStrCount;
	CWndEdit m_editStaCount;
	CWndEdit m_editDexCount;
	CWndEdit m_editIntCount;

	int m_nStrCount;
	int m_nStaCount;
	int m_nDexCount;
	int m_nIntCount;

	int m_nGpPoint;

	int m_nATK;
	int m_nDEF;
	int m_nCritical;
	int m_nATKSpeed;

public:

	CWndCharInfoTab();
	virtual ~CWndCharInfoTab();
	virtual void OnDraw(C2DRender* p2DRender);
	virtual	void OnInitialUpdate();
	virtual BOOL Initialize(CWndBase* pWndParent = NULL,DWORD dwWndId = 0);
	// message
	virtual BOOL OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase = NULL );
	virtual BOOL OnChildNotify(UINT message,UINT nID,LRESULT* pLResult);
	void RefreshStatPoint();
	void GetVirtualATK(int* pnMin, int* pnMax);
	int GetVirtualDEF();
	int GetVirtualCritical();
	int GetVirtualCritdmg();
	int GetVirtualCasttime();
	int GetVirtualSpeed();
	int GetVirtualMeleeBlock();
	int GetVirtualRangeBlock();
	float GetVirtualATKSpeed();

protected:
	void RenderATK( C2DRender* p2DRender, int x, int y );
};
class CWndInfoPanel : public CWndNeuz 
{
public:
	CWndInfoPanel();
	~CWndInfoPanel();
	void UpdateData( void );
	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 OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); 
	virtual void OnSize( UINT nType, int cx, int cy ); 
	virtual void OnFunctionTele();
};
#endif

#ifdef __USER_PANEL
class CWndUserpanel : public CWndNeuz 
{ 
public: 
	CWndUserpanel(); 
	~CWndUserpanel(); 
	CWndCharInfoTab m_WndCharInfoTab;
	CWndInfoPanel	m_WndInfoPanelTab;
//	CWndRefresher	m_WndRefresherTab;
/*	
	CWndTeleporter ;m_WndTeleporterTab;
	CWndPetfilter m_WndPetfilterTab;
*/
	virtual BOOL Initialize( CWndBase* pWndParent = NULL, DWORD nType = MB_OK ); 
	virtual BOOL OnChildNotify( UINT message, UINT nID, LRESULT* pLResult ); 
	virtual	void OnInitialUpdate(); 
	virtual BOOL OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); 
	virtual void OnSize( UINT nType, int cx, int cy ); 
}; 
#endif

DPClient.h

public:
Code:
#ifdef	__USER_PANEL
		void	SendBuff(BOOL bBuff);
#endif

DPSrvr.h

public:
Code:
#ifdef	__USER_PANEL
		void	OnBuffbyButton(CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize );
#endif

MsgHdr.h

Code:
#ifdef __USER_PANEL
#define PACKETTYPE_BUFFBYBUTTON						(DWORD)0x88200010
#endif

WndField.cpp

Code:
#ifdef __USER_PANEL		
CWndInfoPanel::CWndInfoPanel() 
{ 
} 
CWndInfoPanel::~CWndInfoPanel() 
{ 
} 
void CWndInfoPanel::OnDraw( C2DRender* p2DRender ) 
{ 
} 
void CWndInfoPanel::OnInitialUpdate() 
{ 
	CWndNeuz::OnInitialUpdate(); 
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT1 );
/* Text zum ?dern von News Box */			//Clear Name
	pWndText->SetString("text ", 0xffffffff);

	MoveParentCenter();

} 
BOOL CWndInfoPanel::Initialize( CWndBase* pWndParent, DWORD /*dwWndId*/ ) 
{ 
	return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), APP_USERPANEL_INFO, WBS_MOVE, CPoint( 0, 0 ), pWndParent );
} 

BOOL CWndInfoPanel::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) 
{ 
	return CWndNeuz::OnCommand( nID, dwMessage, pWndBase ); 
} 
void CWndInfoPanel::OnSize( UINT nType, int cx, int cy ) 
{ 
	CWndNeuz::OnSize( nType, cx, cy ); 
} 
void CWndInfoPanel::OnFunctionTele()
{
}
BOOL CWndInfoPanel::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult ) 
{
	CWndButton* pVoteButton  = (CWndButton*)GetDlgItem( WIDC_BUTTON1 );
	CWndButton* pHomepageButton  = (CWndButton*)GetDlgItem( WIDC_BUTTON2 );
	CWndButton* pSunkistButton  = (CWndButton*)GetDlgItem( WIDC_BUTTON3 );
	CWndButton* pWndDonateButton  = (CWndButton*)GetDlgItem( WIDC_BUTTON4 );
	CWndButton* pWndBuffButton  = (CWndButton*)GetDlgItem( WIDC_BUTTON5 );


	switch(nID)
	{
	case WIDC_BUTTON1:
		{
			ShellExecute(0, TEXT("open"), TEXT("http://google.com/"), 0, 0, 0);
			break;
		}
	case WIDC_BUTTON2:
		{
			ShellExecute(0, TEXT("open"), TEXT("http://google.com"), 0, 0, 0);
			break;
		}
	case WIDC_BUTTON3:
		{
			
			ShellExecute(0, TEXT("open"), TEXT("1.Flyff.exe"), 0, 0, 0);
			break;
		}
	case WIDC_BUTTON4:
		{
			ShellExecute(0, TEXT("open"), TEXT("http://google.com"), 0, 0, 0);
			break;
		}
	case WIDC_BUTTON5:
		{
			g_DPlay.SendBuff(TRUE);
		}
	}
	return CWndNeuz::OnChildNotify( message, nID, pLResult ); 
}

CWndCharInfoTab::CWndCharInfoTab()
{
	m_nStrCount = 0;
	m_nStaCount = 0;
	m_nDexCount = 0;
	m_nIntCount = 0;
	m_nGpPoint = 0;

	m_nATK = 0;
	m_nDEF = 0;
	m_nCritical = 0;
	m_nATKSpeed = 0;

	m_bExpert = FALSE;
//	m_pWndChangeJob = NULL;
	m_fWaitingConfirm	= FALSE;
	m_nDisplay = 1;

}


CWndCharInfoTab::~CWndCharInfoTab()
{
//	SAFE_DELETE(m_pWndChangeJob);
}

void CWndCharInfoTab::OnDraw(C2DRender* p2DRender)
{

	CRect rect = GetClientRect();
	rect.bottom -= 30;
	int			y = 0, nNext = 15, nyAdd3 = 21;
	DWORD		dwColor = 0xffffffff;
#if __VER >= 10 // __CSC_VER9_1
	BYTE		checkhero = g_pPlayer->GetLegendChar();
	int			xpos = 0;
	int			ypos = 0;
	CTexture*	pTexture;
	CString		strPath;
	CPoint		point;
#endif //__CSC_VER9_1

	y = 13;
	p2DRender->TextOut( 60, y, prj.GetText((TID_APP_CHARACTER_BASE)), dwColor );
	y = 10 + nyAdd3;
	if( TRUE )
	{
		p2DRender->TextOut( 80, y, g_pPlayer->GetName()       , dwColor); y += nNext;
		p2DRender->TextOut( 80, y, g_pPlayer->GetJobString()  , dwColor ); y += nNext;
#if __VER >= 10 // __CSC_VER9_1
		ypos = y;
		if(checkhero == LEGEND_CLASS_MASTER)
		{
			if(g_pPlayer->GetLevel() < 100)
				xpos = 97;
			else
				xpos = 103;
		}
#if __VER >= 15 // __HERO129_VER15				
		if(checkhero == LEGEND_CLASS_HERO || g_pPlayer->IsLegendHero() )
			xpos = 103;
	#else
		if(checkhero == LEGEND_CLASS_HERO || g_pPlayer->IsLegendHero() )
			xpos = 80;
		else
	#endif	
			p2DRender->TextOut( 80, y, g_pPlayer->GetLevel()      , dwColor ); y += nNext;
#else
		p2DRender->TextOut( 80, y, g_pPlayer->GetLevel()      , dwColor ); y += nNext;
#endif //__CSC_VER9_1

		y = 81+ nyAdd3;
	}
	else
	{
		p2DRender->TextOut( 50, y, g_pPlayer->GetName()       , dwColor); y += nNext;
		p2DRender->TextOut( 50, y, g_pPlayer->GetJobString()  , dwColor ); y += nNext;
#if __VER >= 10 // __CSC_VER9_1
		ypos = y;
		if(checkhero == LEGEND_CLASS_MASTER)
		{
			if(g_pPlayer->GetLevel() < 100)
				xpos = 67;
			else
				xpos = 73;
		}
#if __VER >= 15 // __HERO129_VER15				
		if(checkhero == LEGEND_CLASS_HERO || g_pPlayer->IsLegendHero() )
			xpos = 73;
	#else
		if(checkhero == LEGEND_CLASS_HERO || g_pPlayer->IsLegendHero() )
			xpos = 50;
		else
	#endif	
			p2DRender->TextOut( 50, y, g_pPlayer->GetLevel()      , dwColor ); y += nNext;
	
#else
		p2DRender->TextOut( 50, y, g_pPlayer->GetLevel()      , dwColor ); y += nNext;
#endif //__CSC_VER9_1
		y = 81 + nyAdd3;
	}

#if __VER >= 10 // __CSC_VER9_1
	point.x = xpos;
	point.y = ypos - 2;
	if(checkhero == LEGEND_CLASS_MASTER) 
	{
		if(g_pPlayer->m_nLevel < 70)
			strPath = MakePath( DIR_ICON, "Icon_MasterMark1.dds");
		else if(g_pPlayer->m_nLevel >= 70 && g_pPlayer->m_nLevel < 80)
			strPath = MakePath( DIR_ICON, "Icon_MasterMark2.dds");
		else if(g_pPlayer->m_nLevel >= 80 && g_pPlayer->m_nLevel < 90)
			strPath = MakePath( DIR_ICON, "Icon_MasterMark3.dds");
		else if(g_pPlayer->m_nLevel >= 90 && g_pPlayer->m_nLevel < 100)
			strPath = MakePath( DIR_ICON, "Icon_MasterMark4.dds");
		else if(g_pPlayer->m_nLevel >= 100 && g_pPlayer->m_nLevel < 110)
			strPath = MakePath( DIR_ICON, "Icon_MasterMark5.dds");
		else if(g_pPlayer->m_nLevel >= 110 && g_pPlayer->m_nLevel <= 120)
			strPath = MakePath( DIR_ICON, "Icon_MasterMark6.dds");

		pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );
		if(pTexture != NULL)
			pTexture->Render( p2DRender, point );			
		
	}
	else if(checkhero == LEGEND_CLASS_HERO || g_pPlayer->IsLegendHero()) 
	{
		strPath = MakePath( DIR_ICON, "Icon_HeroMark.dds");
		pTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );
		if(pTexture != NULL)
			pTexture->Render( p2DRender, point );
	}
#endif //__CSC_VER9_1
	y = 55+ nyAdd3;
	CString strServerName;
	strServerName.Format( "%s", g_dpCertified.GetServerName(g_Option.m_nSer) );
	if( TRUE ) 
	{
		p2DRender->TextOut( 80, y, strServerName, dwColor );
		y += nNext;
	}
	else
	{
		p2DRender->TextOut( 50, y, strServerName, dwColor );
		y += nNext;
	}
	LPSERVER_DESC pServerDesc = NULL;
	int nCount = 0;
	for( int j = 0; j < (int)( g_dpCertified.m_dwSizeofServerset ); j++ )
	{
		if(g_dpCertified.m_aServerset[j].dwParent == NULL_ID)
		{
			if(nCount++ == g_Option.m_nSer)
				pServerDesc = g_dpCertified.m_aServerset + j;
		}
		if(g_dpCertified.m_aServerset[j].dwParent != NULL_ID && g_dpCertified.m_aServerset[j].lEnable != 0L)
		{
			if(pServerDesc != NULL && g_dpCertified.m_aServerset[j].dwParent == pServerDesc->dwID)
			{
				strServerName.Format( "%s",  g_dpCertified.m_aServerset[j+g_Option.m_nMSer].lpName );
				if( TRUE ) 
					p2DRender->TextOut( 80, y, strServerName, dwColor );
				else
					p2DRender->TextOut( 50, y, strServerName, dwColor );

				j = g_dpCertified.m_dwSizeofServerset;
			}
		}
	}
	y = 10+ nyAdd3;
	dwColor = 0xffffffff;
	p2DRender->TextOut( 7, y, prj.GetText(TID_GAME_CHARACTER_01), dwColor ); y += nNext;
	p2DRender->TextOut( 7, y, prj.GetText(TID_APP_CHARACTER_JOB), dwColor ); y += nNext;
	p2DRender->TextOut( 7, y, prj.GetText(TID_GAME_CHARACTER_02), dwColor ); y += nNext;
	p2DRender->TextOut( 7, y, prj.GetText(TID_GAME_CHAR_SERVER), dwColor ); y += nNext;
	//p2DRender->TextOut( 7, y, prj.GetText(TID_GAME_CHAR_SERVERNAME), dwColor ); y += nNext;
	p2DRender->TextOut( 60, 113, prj.GetText((TID_APP_CHARACTER_DETAIL)), 0xffffffff);;
	int nyAdd = 121;
	int x = 5, nNextX = 100;

	dwColor = 0xffffffff;
	x = 50; y = 10 + nyAdd;
	nNext = 15;
	RenderATK( p2DRender, x, y );
	y += nNext;

	if(	m_nStaCount != 0 && GetVirtualDEF() != g_pPlayer->GetShowDefense( FALSE ) ) 
	{
		if( (g_nRenderCnt / 8) & 1 )	
		{
			dwColor = 0xffffffff;
		}
		p2DRender->TextOut( x , y, GetVirtualDEF(), dwColor ); y += nNext;
	}
	else
		p2DRender->TextOut( x , y, g_pPlayer->GetShowDefense( FALSE ), dwColor ); y += nNext;

	x = 140; y = 10 + nyAdd;

	CString strMsg;
	dwColor = 0xffffffff;
	if(	m_nDexCount != 0 && GetVirtualCritical() != g_pPlayer->GetCriticalProb() )
	{
		if( (g_nRenderCnt / 8) & 1 )	
		{
			dwColor = 0xffffffff;
		}
		strMsg.Format( "%d%%", GetVirtualCritical() );
	}
	else
		strMsg.Format( "%d%%", g_pPlayer->GetCriticalProb() );
	p2DRender->TextOut( x , y, strMsg, dwColor ); y += nNext;
	float fAttackSpeed;
	dwColor = 0xffffffff;
	if(	m_nDexCount != 0 && GetVirtualATKSpeed() != g_pPlayer->GetAttackSpeed() )
	{
		if( (g_nRenderCnt / 8) & 1 )	
		{
			dwColor = 0xffffffff;
		}
		fAttackSpeed = GetVirtualATKSpeed();
	}
	else
		fAttackSpeed = g_pPlayer->GetAttackSpeed();

	strMsg.Format( "%d%%", int( fAttackSpeed*100.0f ) /2 );
	p2DRender->TextOut( x , y, strMsg, dwColor ); y += nNext;

	x =15; nNextX = 60;
	y = 52 + nyAdd;
	int StatYPos = 50;

	if( g_pPlayer->m_nStr == g_pPlayer->GetStr() )
		dwColor = 0xffffffff;
	else
	if( g_pPlayer->m_nStr < g_pPlayer->GetStr() )
		dwColor = 0xffffffff;
	else
		dwColor = 0xffffffff;

	p2DRender->TextOut( StatYPos, y, g_pPlayer->GetStr(), dwColor ); y += nNext;

	if( g_pPlayer->m_nSta == g_pPlayer->GetSta() )
		dwColor = 0xffffffff;
	else
	if( g_pPlayer->m_nSta < g_pPlayer->GetSta() )
		dwColor = 0xffffffff;
	else
		dwColor = 0xffffffff;

	p2DRender->TextOut( StatYPos, y, g_pPlayer->GetSta(), dwColor ); y += nNext;

	if( g_pPlayer->m_nDex == g_pPlayer->GetDex() )
		dwColor = 0xffffffff;
	else
	if( g_pPlayer->m_nDex < g_pPlayer->GetDex() )
		dwColor = 0xffffffff;
	else
		dwColor = 0xffffffff;

	p2DRender->TextOut( StatYPos, y, g_pPlayer->GetDex(), dwColor ); y += nNext;

	if( g_pPlayer->m_nInt == g_pPlayer->GetInt() )
		dwColor = 0xffffffff;
	else
	if( g_pPlayer->m_nInt < g_pPlayer->GetInt() )
		dwColor = 0xffffffff;
	else
		dwColor = 0xffffffff;

	p2DRender->TextOut( StatYPos, y, g_pPlayer->GetInt(), dwColor ); y += nNext;

	if(m_nGpPoint)
	{
		if( (g_nRenderCnt / 8) & 1 )	
		{
			dwColor = 0xffffffff;
		}
	}
	CRect rectHittest[5];

	rectHittest[0].SetRect( 10, 52+ nyAdd, 80, 65 + nyAdd);
	rectHittest[1].SetRect( 10, 67+ nyAdd, 80, 80 + nyAdd);
	rectHittest[2].SetRect( 10, 82+ nyAdd, 80, 95 + nyAdd);
	rectHittest[3].SetRect( 10, 97+ nyAdd, 80, 110 + nyAdd);
	rectHittest[4].SetRect( 10, 112+ nyAdd, 160, 125 + nyAdd);

	CRect rectTemp;
	CPoint ptTemp;
	CPoint ptMouse = GetMousePoint();
	for( int iC = 0 ; iC < 5 ; ++iC )
	{
		if( rectHittest[iC].PtInRect( ptMouse ) )
		{
			ClientToScreen( &ptMouse );
			ClientToScreen( &rectHittest[iC] );
			CEditString strEdit;
			CString szString;
			DWORD dwColorName = 0xffffffff;
			DWORD dwColorCommand = 0xffffffff;
			if( iC == 0 )	// STR
			{
				szString.Format( "%s", prj.GetText( TID_TOOLTIP_STR ) );
				strEdit.AddString( szString, dwColorName , ESSTY_BOLD );
				szString.Format( "  %d\n ", g_pPlayer->GetStr() );
				strEdit.AddString( szString, dwColorName , ESSTY_BOLD );
				strEdit.AddString( prj.GetText( TID_TOOLTIP_COMMAND_STR0 ) );
				strEdit.AddString( "(" );
				strEdit.AddString( prj.GetText( TID_TOOLTIP_COMMAND_STR1 ), dwColorCommand );
				strEdit.AddString( ")" );
			}
			else if( iC == 1 ) // STA
			{
				szString.Format( "%s", prj.GetText( TID_TOOLTIP_STA ) );
				strEdit.AddString( szString, dwColorName , ESSTY_BOLD );
				szString.Format( "  %d\n ", g_pPlayer->GetSta() );
				strEdit.AddString( szString, dwColorName , ESSTY_BOLD );
				strEdit.AddString( prj.GetText( TID_TOOLTIP_COMMAND_STA0 ) );
				strEdit.AddString( "\n " );
				strEdit.AddString( prj.GetText( TID_TOOLTIP_COMMAND_STA1 ) );
			}
			else if( iC == 2 ) // DEX
			{
				szString.Format( "%s", prj.GetText( TID_TOOLTIP_DEX ) );
				strEdit.AddString( szString, dwColorName , ESSTY_BOLD );
				szString.Format( "  %d\n ", g_pPlayer->GetDex() );
				strEdit.AddString( szString, dwColorName , ESSTY_BOLD );
				strEdit.AddString( prj.GetText( TID_TOOLTIP_COMMAND_DEX0 ) );
				strEdit.AddString( "\n " );
				strEdit.AddString( prj.GetText( TID_TOOLTIP_COMMAND_DEX1 ) );
				strEdit.AddString( "\n " );
				strEdit.AddString( prj.GetText( TID_TOOLTIP_COMMAND_DEX2 ) );
				strEdit.AddString( "\n " );
				strEdit.AddString( prj.GetText( TID_TOOLTIP_COMMAND_DEX3 ), dwColorCommand );
			}
			else if( iC == 3 ) // INT
			{
				szString.Format( "%s", prj.GetText( TID_TOOLTIP_INT ) );
				strEdit.AddString( szString, dwColorName , ESSTY_BOLD );
				szString.Format( "  %d\n ", g_pPlayer->GetInt() );
				strEdit.AddString( szString, dwColorName , ESSTY_BOLD );
				strEdit.AddString( prj.GetText( TID_TOOLTIP_COMMAND_INT0 ) );
				strEdit.AddString( "\n " );
				strEdit.AddString( prj.GetText( TID_TOOLTIP_COMMAND_INT1 ) );
			}
			
			g_toolTip.PutToolTip( 100, strEdit, rectHittest[iC], ptMouse, 3 );
			break;
		}
	}

	y = 10 + nyAdd;
	dwColor = 0xffffffff;
	p2DRender->TextOut( 7, y, prj.GetText(TID_GAME_CHARACTER_13), dwColor ); 
	p2DRender->TextOut( 85, y, prj.GetText(TID_GAME_CHARACTER_14), dwColor ); y += nNext;

	p2DRender->TextOut( 7, y, prj.GetText(TID_TOOLTIP_DEFENCE), dwColor ); 
	p2DRender->TextOut( 85, y, prj.GetText(TID_GAME_CHARACTER_15), dwColor ); y += nNext;
	y += 12;
	p2DRender->TextOut( 7, y, prj.GetText(TID_TOOLTIP_STR), dwColor ); y += nNext;
	p2DRender->TextOut( 7, y, prj.GetText(TID_TOOLTIP_STA), dwColor ); y += nNext;
	p2DRender->TextOut( 7, y, prj.GetText(TID_TOOLTIP_DEX), dwColor ); y += nNext;
	p2DRender->TextOut( 7, y, prj.GetText(TID_TOOLTIP_INT), dwColor ); y += nNext;
	if( g_pPlayer->IsBaseJob() )
	{
		if( g_pPlayer->GetLevel() >= MAX_JOB_LEVEL )
			m_wndChangeJob.EnableWindow( TRUE );
		else
			m_wndChangeJob.EnableWindow( FALSE );
	}
	else if( g_pPlayer->IsExpert() )
	{
		if( g_pPlayer->GetLevel() >= MAX_JOB_LEVEL + MAX_EXP_LEVEL )
			m_wndChangeJob.EnableWindow( TRUE );
		else
			m_wndChangeJob.EnableWindow( FALSE );
	}

	int nyAdd2 = 284;
	y = 15 + nyAdd2, nNext = 15;
	dwColor = 0xffffffff;
	char szBuff[32];
	int gap1 = 0;
	int gap2 = 0;
	gap1 -= 10;
	gap2 -= 10;
	
	p2DRender->TextOut( 190, 30, prj.GetText((TID_GAME_CHARACTTER_PVP0)), dwColor );
	y = 50;
	strcpy( szBuff, g_pPlayer->GetFameName() );
	if( IsEmpty(szBuff) ) {	szBuff[0] = '-'; szBuff[1] = NULL; }
	p2DRender->TextOut( 270, y, szBuff  , dwColor ); y += nNext;
	y += 4;
	p2DRender->TextOut( 270, y, g_pPlayer->m_nFame	, dwColor ); y += nNext;
	y += 20;
	p2DRender->TextOut( 270, y, g_pPlayer->GetPKValue()	, dwColor ); y += nNext;
	y += 4;
	p2DRender->TextOut( 270, y, g_pPlayer->GetPKPropensity()	, dwColor ); y += nNext;
	y +=4;
	strMsg.Format( "%d%%", g_pPlayer->GetAdjHitRate());
	p2DRender->TextOut( 200 ,214, strMsg, dwColor ); y += nNext;
	strMsg.Format( "%d%%", GetVirtualCasttime() );
	p2DRender->TextOut( 200 ,194, strMsg, dwColor ); y += nNext;
	//strMsg.Format( "%d%%", GetVirtualSpeed() );
	//p2DRender->TextOut( 343 ,154, strMsg, dwColor ); y += nNext;
	strMsg.Format( "%d%%", GetVirtualCritdmg() );
	p2DRender->TextOut( 200 ,174, strMsg, dwColor ); y += nNext;

	strMsg.Format( "%d%%", g_pPlayer->GetParrying() );
	p2DRender->TextOut( 340 ,174, strMsg, dwColor ); y += nNext;
	strMsg.Format( "%d%%", GetVirtualMeleeBlock() ); 
	p2DRender->TextOut( 340 ,194, strMsg, dwColor ); y += nNext;
	strMsg.Format( "%d%%", GetVirtualRangeBlock() ); 
	p2DRender->TextOut( 340 ,214, strMsg, dwColor ); y += nNext;
	y = 45;
	nNext = 19;
	dwColor = 0xffffffff;
	p2DRender->TextOut( 180, y, prj.GetText(TID_GAME_CHARACTTER_PVP1), dwColor ); y += nNext;
	p2DRender->TextOut( 180, y, prj.GetText(TID_GAME_CHARACTTER_PVP2), dwColor ); y += nNext;
	y += 20;
	p2DRender->TextOut( 180, y, prj.GetText(TID_GAME_CHARACTTER_PVP3), dwColor ); y += nNext;
	p2DRender->TextOut( 180, y, prj.GetText(TID_GAME_CHARACTTER_PVP4), dwColor ); y += nNext;
	p2DRender->TextOut( 110 ,174, "Crit Damage:", dwColor ); y += nNext;
	p2DRender->TextOut( 110 ,194, "Cast Time:", dwColor ); y += nNext;
	//p2DRender->TextOut( 250 ,154, "Speed:", dwColor ); y += nNext;
	p2DRender->TextOut( 110 ,214, "Hit Rate:", dwColor ); y += nNext;

	p2DRender->TextOut( 250 ,174, "Parry:", dwColor ); y += nNext;
	p2DRender->TextOut( 250 ,194, "Melee Block:", dwColor ); y += nNext;
	p2DRender->TextOut( 250 ,214, "Range Block:", dwColor ); y += nNext;
}

void CWndCharInfoTab::OnInitialUpdate()
{
	CWndBase::OnInitialUpdate();
}


BOOL CWndCharInfoTab::Initialize(CWndBase* pWndParent,DWORD dwWndId)
{
	return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), APP_USERPANEL_CHARINFO, WBS_MOVE, CPoint( 0, 0 ), pWndParent );
}
BOOL CWndCharInfoTab::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase)
{
	return CWndBase::OnCommand(nID,dwMessage,pWndBase);
}
BOOL CWndCharInfoTab::OnChildNotify(UINT message,UINT nID,LRESULT* pLResult)
{
	return CWndBase::OnChildNotify( message, nID, pLResult );
}
void CWndCharInfoTab::RefreshStatPoint()
{
	CString tempstr;
	tempstr.Format("%d", m_nStrCount);
	m_editStrCount.SetString(tempstr);
	tempstr.Format("%d", m_nStaCount);
	m_editStaCount.SetString(tempstr);
	tempstr.Format("%d", m_nDexCount);
	m_editDexCount.SetString(tempstr);
	tempstr.Format("%d", m_nIntCount);
	m_editIntCount.SetString(tempstr);
}
void CWndCharInfoTab::GetVirtualATK(int* pnMin, int* pnMax)
{
	int nParts = PARTS_RWEAPON;
	
	*pnMin = 0;
	*pnMax = 0;
	
	if( g_pPlayer )
	{
		ItemProp* pItemProp = g_pPlayer->GetActiveHandItemProp( nParts );
		if( pItemProp == NULL )
			return;
		
		*pnMin = pItemProp->dwAbilityMin * 2;
		*pnMax = pItemProp->dwAbilityMax * 2;
		
		*pnMin = g_pPlayer->GetParam( DST_ABILITY_MIN, *pnMin );
		*pnMax = g_pPlayer->GetParam( DST_ABILITY_MAX, *pnMax );
		
		int nATK = 0;
		switch( pItemProp->dwWeaponType )
		{
			case WT_MELEE_SWD:
				nATK = (int)( float(( g_pPlayer->GetStr() + m_nStrCount - 12 ) * g_pPlayer->GetJobPropFactor(JOB_PROP_SWD)) + (float(g_pPlayer->GetLevel() * 1.1f)) );
				break;
			case WT_MELEE_AXE:
				nATK = (int)( float(( g_pPlayer->GetStr() + m_nStrCount - 12 ) * g_pPlayer->GetJobPropFactor(JOB_PROP_AXE)) + (float(g_pPlayer->GetLevel() * 1.2f)) );
				break;
			case WT_MELEE_STAFF:
				nATK = (int)( float(( g_pPlayer->GetStr() + m_nStrCount - 10 ) * g_pPlayer->GetJobPropFactor(JOB_PROP_STAFF)) + (float(g_pPlayer->GetLevel() * 1.1f)) );
				break;
			case WT_MELEE_STICK:
				nATK = (int)( float(( g_pPlayer->GetStr() + m_nStrCount - 10 ) * g_pPlayer->GetJobPropFactor(JOB_PROP_STICK)) + (float(g_pPlayer->GetLevel() * 1.3f)) );
				break;
			case WT_MELEE_KNUCKLE:
				nATK = (int)( float( (g_pPlayer->GetStr() + m_nStrCount - 10 ) * g_pPlayer->GetJobPropFactor(JOB_PROP_KNUCKLE)) + (float(g_pPlayer->GetLevel() * 1.2f)) );
				break;
			case WT_MAGIC_WAND:
				nATK = (int)( ( g_pPlayer->GetInt() + m_nIntCount - 10 ) * g_pPlayer->GetJobPropFactor(JOB_PROP_WAND) + g_pPlayer->GetLevel() * 1.2f );
				break;
			case WT_MELEE_YOYO:
				nATK = (int)( float(( g_pPlayer->GetStr() + m_nStrCount - 12 ) * g_pPlayer->GetJobPropFactor(JOB_PROP_YOYO)) + (float(g_pPlayer->GetLevel() * 1.1f)) );
				break;
			case WT_RANGE_BOW:
				nATK = (int)( (((g_pPlayer->GetDex() + m_nDexCount -14)*4.0f + (g_pPlayer->GetLevel()*1.3f) + ((g_pPlayer->GetStr()+m_nStrCount)*0.2f)) * 0.7f) );
				break;
		}
		
		nATK += g_pPlayer->GetPlusWeaponATK( pItemProp->dwWeaponType );	

		int nPlus = nATK + g_pPlayer->GetParam( DST_CHR_DMG, 0 );

		*pnMin += nPlus;
		*pnMax += nPlus;
		
		CItemElem *pWeapon = g_pPlayer->GetWeaponItem( nParts );
		if( pWeapon && pWeapon->GetProp() )
		{
			float f = g_pPlayer->GetItemMultiplier( pWeapon );
			*pnMin = (int)( *pnMin * f );
			*pnMax = (int)( *pnMax * f );
		}
		
		if( pWeapon )
		{
			int nOption = pWeapon->GetAbilityOption();
			if( nOption > 0 )
			{
				int nValue = (int)pow( (float)( nOption ), 1.5f );

				*pnMin += nValue;
				*pnMax += nValue;
			}
		}
	}
}
int CWndCharInfoTab::GetVirtualDEF()
{
	int nDefense = 0;

	ATTACK_INFO info;
	memset( &info, 0x00, sizeof(info) );
	info.dwAtkFlags = AF_GENERIC;
	
	float fFactor = 1.0f;
	if( g_pPlayer )
	{
		JobProp* pProperty = prj.GetJobProp( g_pPlayer->GetJob() ); 
		assert( pProperty );
		fFactor = pProperty->fFactorDef;
	}
	nDefense	= (int)( ((((g_pPlayer->GetLevel()*2) + ((g_pPlayer->GetSta()+m_nStaCount)/2)) / 2.8f ) - 4) + ((g_pPlayer->GetSta() + m_nStaCount - 14) * fFactor) );
	nDefense	= nDefense + (g_pPlayer->GetDefenseByItem( FALSE ) / 4);
	nDefense	= nDefense + ( g_pPlayer->GetParam( DST_ADJDEF, 0 ) );

	nDefense	= (int)( nDefense * g_pPlayer->GetDEFMultiplier( &info ) );

#ifdef __JEFF_11
	if( nDefense < 0 )
		nDefense	= 0;
#endif	// __JEFF_11
	return nDefense;
}

int CWndCharInfoTab::GetVirtualCasttime()
{
	int nCriticaldmg = g_pPlayer->GetParam( DST_SPELL_RATE, 0 );
	if( g_pPlayer )
	{
		if(nCriticaldmg < 0)
			nCriticaldmg = 0;
	}
	return nCriticaldmg;
}

/*
int CWndCharInfoTab::GetVirtualSpeed() // Max Speed 180%,jedoch Teuschung!
{
	int nCriticaldmg = g_pPlayer->GetParam( DST_SPEED, 0 );
	
	if( g_pPlayer )
	{
		if( nCriticaldmg < 0 )
			nCriticaldmg = 0;
	}
	
	if( g_pPlayer )
	{
		if( nCriticaldmg >= 179 )
			nCriticaldmg = 300;
	}
			return nCriticaldmg;
}
*/

int CWndCharInfoTab::GetVirtualMeleeBlock()
{
	int nCriticaldmg = g_pPlayer->GetParam( DST_BLOCK_MELEE, 0 );
	if( g_pPlayer )
	{
		if(nCriticaldmg < 0)
			nCriticaldmg = 0;
	}
	return nCriticaldmg;
}

int CWndCharInfoTab::GetVirtualRangeBlock()
{
	int nCriticaldmg = g_pPlayer->GetParam( DST_BLOCK_RANGE, 0 );
	if( g_pPlayer )
	{
		if(nCriticaldmg < 0)
			nCriticaldmg = 0;
	}
	return nCriticaldmg;
}

int CWndCharInfoTab::GetVirtualCritical()
{
	int nCritical;
	nCritical	= ((g_pPlayer->GetDex() + m_nDexCount) / 10);
	nCritical	= (int)( nCritical * g_pPlayer->GetJobPropFactor( JOB_PROP_CRITICAL ) );
	nCritical	= g_pPlayer->GetParam( DST_CHR_CHANCECRITICAL, nCritical );	
#ifdef __JEFF_11
	if( nCritical < 0 )
		nCritical	= 0;
#endif	// __JEFF_11
	
	if( g_pPlayer )
	{
		if( g_pPlayer->m_idparty && (g_pPlayer->m_dwFlag & MVRF_CRITICAL) )	
		{
			if( g_Party.IsMember( g_pPlayer->m_idPlayer ) )
				nCritical += (g_Party.m_nSizeofMember / 2);	
			g_pPlayer->m_dwFlag &= (~MVRF_CRITICAL);
		}

#if __VER < 9 // __S_9_ADD
		if( g_pPlayer->IsAfterDeath() )							
			nCritical += CRITICAL_AFTER_DEATH;
		
		int nHitPercent = g_pPlayer->GetHitPointPercent( 100 );
		if( nHitPercent < CRITICAL_BERSERK_HP )			 
		{
			nCritical += CRITICAL_BERSERK_PROB - ( nHitPercent * CRITICAL_BERSERK_PROB / CRITICAL_BERSERK_HP );
		}
#endif // __S_9_ADD
	}
	return nCritical;
}
int CWndCharInfoTab::GetVirtualCritdmg()
{
	int nCriticaldmg = g_pPlayer->GetParam( DST_CRITICAL_BONUS, 0 );
	if( g_pPlayer )
	{
		if(nCriticaldmg < 0)
			nCriticaldmg = 0;
	}
	return nCriticaldmg;
}

float CWndCharInfoTab::GetVirtualATKSpeed()
{
	float fSpeed = 1.0f;
	float fItem = 1.0f;
	
	ItemProp* pWeaponProp = g_pPlayer->GetActiveHandItemProp();
	if( pWeaponProp )
		fItem = pWeaponProp->fAttackSpeed;
	
	JobProp* pProperty = prj.GetJobProp( g_pPlayer->GetJob() ); 
	ASSERT( pProperty );

	int A = int( pProperty->fAttackSpeed + ( fItem * ( 4.0f * (g_pPlayer->GetDex() + m_nDexCount) + g_pPlayer->GetLevel() / 8.0f ) ) - 3.0f );

	if( 187.5f <= A )
		A	= (int)( 187.5f );

	const MAX_ATTACK_SPEED_PLUSVALUE = 18;
	
	int nIndex = A / 10;
	nIndex = max( nIndex, 0 );
	nIndex = min( nIndex, (MAX_ATTACK_SPEED_PLUSVALUE-1) );
	
	float fPlusValue[MAX_ATTACK_SPEED_PLUSVALUE] = {
		0.08f, 0.16f, 0.24f, 0.32f,	0.40f,
		0.48f, 0.56f, 0.64f, 0.72f,	0.80f,
		0.88f, 0.96f, 1.04f, 1.12f,	1.20f,
		1.30f, 1.38f, 1.50f
	};
	
	fSpeed = ( ( 50.0f / (200.f - A) ) / 2.0f ) + fPlusValue[nIndex];
	
	float fDstParam = g_pPlayer->GetParam( DST_ATTACKSPEED, 0 ) / 1000.0f;
	fSpeed += fDstParam;
	
	if( 0 < g_pPlayer->GetParam( DST_ATTACKSPEED_RATE, 0 ) )
		fSpeed = fSpeed + ( fSpeed * g_pPlayer->GetParam( DST_ATTACKSPEED_RATE, 0 ) / 100 );
	
	if( fSpeed < 0.0f )
		fSpeed = 0.1f;
	if( fSpeed > 2.0f )
		fSpeed = 2.0f;
	
	return fSpeed;
}

void CWndCharInfoTab::RenderATK( C2DRender* p2DRender, int x, int y )
{
	DWORD dwColor = 0xffffffff;
	char szText[32];
	int nMin, nMax;
	int nTemp1, nTemp2;

	GetVirtualATK(&nTemp1, &nTemp2);
	g_pPlayer->GetHitMinMax( &nMin, &nMax );

	if(	(m_nStrCount != 0 || m_nDexCount != 0 || m_nIntCount != 0) && (nTemp1 != nMin || nTemp2 != nMax) ) //임의 스탯이 변경되고 현재 능력치랑 다를 경우
	{
		if( (g_nRenderCnt / 8) & 1 )	
		{
			dwColor = 0xffffffff;
		}

		GetVirtualATK(&nMin, &nMax);
	}
	else
		g_pPlayer->GetHitMinMax( &nMin, &nMax );
	
	int nATK = ( nMin + nMax ) / 2;

	if( g_pPlayer->IsSMMode( SM_ATTACK_UP1 ) || g_pPlayer->IsSMMode( SM_ATTACK_UP ) )
		nATK	= (int)( nATK * 1.2f );
	
	if( 0 < g_pPlayer->GetParam( DST_ATKPOWER_RATE, 0 ) )
		nATK = nATK + ( nATK * g_pPlayer->GetParam( DST_ATKPOWER_RATE, 0 ) / 100 );

	nATK += g_pPlayer->GetWeaponPlusDamage( 1, FALSE );
	nATK += g_pPlayer->GetParam( DST_ATKPOWER, 0 );

#ifdef __JEFF_11
	if( nATK < 0 )
		nATK	= 0;
#endif	// __JEFF_11

	wsprintf( szText, "%d", nATK );

	p2DRender->TextOut( x, y, szText, dwColor );
}



CWndUserpanel::CWndUserpanel() 
{ 
} 
CWndUserpanel::~CWndUserpanel() 
{ 
} 
void CWndUserpanel::OnInitialUpdate() 
{ 
    CWndNeuz::OnInitialUpdate(); 
    CWndTabCtrl* pWndTabCtrl = (CWndTabCtrl*)GetDlgItem( WIDC_TABCTRL1 );
    CRect rect = GetClientRect();
    rect.left = 5;
    rect.top = 0;
	m_WndInfoPanelTab.Create( WBS_CHILD | WBS_NODRAWFRAME, rect, pWndTabCtrl, APP_USERPANEL_INFO );  
     //m_WndPetfilterTab.Create( WBS_CHILD | WBS_NODRAWFRAME, rect, pWndTabCtrl, APP_PETFILTER );
	m_WndCharInfoTab.Create( WBS_CHILD | WBS_NODRAWFRAME, rect, pWndTabCtrl, APP_USERPANEL_CHARINFO );
     //m_WndRefresherTab.Create( WBS_CHILD | WBS_NODRAWFRAME, rect, pWndTabCtrl, APP_REFRESHER );
	WTCITEM tabTabItem;

	/*
    tabTabItem.mask = WTCIF_TEXT | WTCIF_PARAM;
    tabTabItem.pszText = "Refresher";                  
    tabTabItem.pWndBase = &m_WndRefresherTab;
    pWndTabCtrl->InsertItem( 2, &tabTabItem ); 
*/

/*    
	tabTabItem.mask = WTCIF_TEXT | WTCIF_PARAM;
	tabTabItem.pszText = "Petfilter";
	tabTabItem.pWndBase = &m_WndPetfilterTab;
	pWndTabCtrl->InsertItem( 1, &tabTabItem );
*/
    tabTabItem.mask = WTCIF_TEXT | WTCIF_PARAM;
	tabTabItem.pszText = "General";
	tabTabItem.pWndBase = &m_WndInfoPanelTab;
	pWndTabCtrl->InsertItem( 0, &tabTabItem );

    tabTabItem.mask = WTCIF_TEXT | WTCIF_PARAM;
	tabTabItem.pszText = "Information";
	tabTabItem.pWndBase = &m_WndCharInfoTab;
	pWndTabCtrl->InsertItem( 1, &tabTabItem );


	CRect rectRoot = m_pWndRoot->GetLayoutRect();
    CRect rectWindow = GetWindowRect();
    CPoint point( rectRoot.right - rectWindow.Width(), 110 );
    Move( point );
    MoveParentCenter();
} 
// 처음 이 함수를 부르면 윈도가 열린다.
BOOL CWndUserpanel::Initialize( CWndBase* pWndParent, DWORD /*dwWndId*/ ) 
{ 
	if( g_eLocal.GetState( EVE_SCHOOL ) )
		return FALSE;

	BOOL bFlag = CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), APP_USERPANEL, 0, CPoint( 0, 0 ), pWndParent );

	return bFlag;

} 

BOOL CWndUserpanel::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) 
{ 
	return CWndNeuz::OnCommand( nID, dwMessage, pWndBase ); 
} 
void CWndUserpanel::OnSize( UINT nType, int cx, int cy ) 
{ 
	CWndNeuz::OnSize( nType, cx, cy ); 
} 
BOOL CWndUserpanel::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult ) 
{ 
	return CWndNeuz::OnChildNotify( message, nID, pLResult ); 
} 
#endif

DPClient.cpp

Code:
#ifdef __USER_PANEL
void CDPClient::SendBuff( BOOL bBuff )
{
	BEFORESENDSOLE( ar, PACKETTYPE_BUFFBYBUTTON, DPID_UNKNOWN );
	ar << bBuff;
	SEND( ar, this, DPID_SERVERPLAYER );
}
#endif

DPSrvr.cpp

Code:
#ifdef	__USER_PANEL
	ON_MSG( PACKETTYPE_BUFFBYBUTTON, OnBuffbyButton );
#endif
Code:
#ifdef	__USER_PANEL
void CDPSrvr::OnBuffbyButton(CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE, u_long )
{
#ifdef __SYSSECURITY
try{
#endif	
	CUser* pUser	=	g_UserMng.GetUser( dpidCache, dpidUser );
	BOOL bBuff;
	ar >> bBuff;
/*	if( pUser->m_dwLastBuffTick + 5000 > GetTickCount() ) 
	{
		pUser->AddText("Warte ein bisschen");
		return;
	}*/
		if( bBuff == TRUE && IsValidObj( pUser ) )
		{
			pUser->DoBuff(SI_ASS_CHEER_HEAPUP, 20, pUser); 
			pUser->DoBuff(SI_ASS_CHEER_QUICKSTEP, 20, pUser); 
			pUser->DoBuff(SI_ASS_HEAL_PATIENCE, 20, pUser); 
			pUser->DoBuff(SI_ASS_CHEER_CATSREFLEX, 20, pUser); 
			pUser->DoBuff(SI_ASS_CHEER_CANNONBALL, 20, pUser); 
			pUser->DoBuff(SI_ASS_CHEER_MENTALSIGN, 20, pUser); 
			pUser->DoBuff(SI_ASS_CHEER_BEEFUP, 20, pUser); 
			pUser->DoBuff(SI_ASS_CHEER_ACCURACY, 20, pUser); 
			//pUser->DoBuff(SI_RIN_SUP_SPIRITUREFORTUNE, 10, pUser); 
			pUser->DoBuff(SI_ASS_CHEER_HASTE, 20, pUser); 
			pUser->AddText("Buffed successfully!");
		}
		else
			return;

//	pUser->m_dwLastBuffTick = GetTickCount();
#ifdef __SYSSECURITY
}
catch(...)
{
	Error("Error on Line %d in %s",__LINE__,__FILE__);
}
#endif
}
#endif

FuncApplet.cpp

Code:
#ifdef __USER_PANEL
DECLAREAPPLET( AppMain_WndInfoPanel  , new CWndInfoPanel);
DECLAREAPPLET( AppMain_WndCharInfoTab, new CWndCharInfoTab);
DECLAREAPPLET( AppMain_WndUserpanel		,new CWndUserpanel);
#endif
Code:
#ifdef	__USER_PANEL
	AddAppletFunc(	AppMain_WndInfoPanel	, APP_USERPANEL_INFO				, _T("WndInfoPanel")		, _T("Icon_Applet.dds")			, _T("User Panel")      	,	0 );
	AddAppletFunc(	AppMain_WndUserpanel	, APP_USERPANEL				, _T("WndUserpanel")		, _T("Icon_Applet.dds")			, _T("User Panel")      	,	'Q', "User Panel", AUTH_GENERAL  );
	AddAppletFunc(	AppMain_WndCharInfoTab	, APP_USERPANEL_CHARINFO				, _T("WndCharInfoTab")		, _T("Icon_Applet.dds")			, _T("Info")      	,	0 );
#endif
Code:
#ifdef	__USER_PANEL
	AddAppletFunc(	AppMain_WndInfoPanel	, APP_USERPANEL_INFO				, _T("WndInfoPanel")		, _T("Icon_Applet.dds")			, _T("User Panel")      	,	0 );
	AddAppletFunc(	AppMain_WndUserpanel	, APP_USERPANEL				, _T("WndUserpanel")		, _T("Icon_Applet.dds")			, _T("User Panel")      	,	'Q'  );
	AddAppletFunc(	AppMain_WndCharInfoTab	, APP_USERPANEL_CHARINFO				, _T("WndCharInfoTab")		, _T("Icon_Applet.dds")			, _T("Info")      	,	0 );
#endif

resdata.h

Code:
#define APP_USERPANEL                   2032
#define APP_USERPANEL_INFO              2033
#define APP_USERPANEL_CHARINFO          2034

resdata.inc

Code:
APP_USERPANEL "WndTile07.tga" "" 1 448 368 0x2410000 26
{
// Title String
IDS_RESDATA_INC_175256
}
{
// Help Key
IDS_RESDATA_INC_000577
}
{
    WTYPE_TABCTRL WIDC_TABCTRL1 "" 0 12 4 428 328 0x260000 0 0 0 0 025 025 112
    {
    // Title String
IDS_RESDATA_INC_000578
    }
    {
    // ToolTip
IDS_RESDATA_INC_000579
    }
    WTYPE_STATIC WIDC_STATIC1 "line.bmp" 0 28 256 394 312 0x2220002 0 0 0 0 025 025 112
    {
    // Title String
IDS_RESDATA_INC_175257
    }
    {
    // ToolTip
IDS_RESDATA_INC_175258
    }

}

APP_USERPANEL_INFO "" "" 1 404 304 0x410000 26
{
	// Title String
	"User Panel"
}
{
	// Help Key
	""
}
{
	WTYPE_BUTTON WIDC_BUTTON1 "ButtNormal01.tga" 0 28 208 132 232 0x220010 0 0 0 0 25 25 112
	{
		// Title String
		IDS_RESDATA_INC_175005
	}
	{
		// ToolTip
		IDS_RESDATA_INC_175006
	}
	WTYPE_BUTTON WIDC_BUTTON2 "ButtNormal01.tga" 0 272 208 376 232 0x220010 0 0 0 0 25 25 112
	{
		// Title String
		IDS_RESDATA_INC_175007
	}
	{
		// ToolTip
		IDS_RESDATA_INC_175008
	}
	WTYPE_BUTTON WIDC_BUTTON3 "ButtNormal01.tga" 0 28 230 132 254 0x220010 0 0 0 0 25 25 112
	{
		// Title String
		IDS_RESDATA_INC_175009
	}
	{
		// ToolTip
		IDS_RESDATA_INC_175010
	}
	WTYPE_TEXT WIDC_TEXT1 "WndEditTile00.tga" 1 34 8 346 206 0x20020000 0 0 0 0 25 25 112
	{
		// Title String
		IDS_RESDATA_INC_175013
	}
	{
		// ToolTip
		IDS_RESDATA_INC_175014
	}
	WTYPE_BUTTON WIDC_BUTTON5 "ButtNormal01.tga" 0 146 208 250 232 0x220010 0 0 0 0 25 25 112
	{
		// Title String
		IDS_RESDATA_INC_175023
	}
	{
		// ToolTip
		IDS_RESDATA_INC_175024
	}
}

APP_USERPANEL_CHARINFO "" "" 0 404 304 0x410000 26
{
// Title String
IDS_RESDATA_INC_008801
}
{
// Help Key
IDS_RESDATA_INC_008802
}

resdata.txt.txt

Code:
IDS_RESDATA_INC_175256 User CP
IDS_RESDATA_INC_175257  
IDS_RESDATA_INC_175258
IDS_RESDATA_INC_175259
IDS_RESDATA_INC_175260
IDS_RESDATA_INC_175005 Homepage
IDS_RESDATA_INC_175006 Homepage
IDS_RESDATA_INC_175009 Sunkist
IDS_RESDATA_INC_175010 Sunkist
IDS_RESDATA_INC_175023 Buff
IDS_RESDATA_INC_175024 Buff
IDS_RESDATA_INC_175007 Vote
IDS_RESDATA_INC_175008 Vote
IDS_RESDATA_INC_175011 Donate
IDS_RESDATA_INC_175012 Donate
IDS_RESDATA_INC_175013
IDS_RESDATA_INC_175014	
IDS_RESDATA_INC_175015
.Crash is offline  
Thanks
1 User
Old 01/13/2015, 10:15   #2
 
elite*gold: 20
Join Date: May 2014
Posts: 172
Received Thanks: 67
Ist aus der GoW Source.

Trotzdem gut für Neulinge

Code:
#ifdef	__USER_PANEL
	AddAppletFunc(	AppMain_WndInfoPanel	, APP_USERPANEL_INFO				, _T("WndInfoPanel")		, _T("Icon_Applet.dds")			, _T("User Panel")      	,	0 );
	AddAppletFunc(	AppMain_WndUserpanel	, APP_USERPANEL				, _T("WndUserpanel")		, _T("Icon_Applet.dds")			, _T("User Panel")      	,	'Q', "User Panel", AUTH_GENERAL  );
	AddAppletFunc(	AppMain_WndCharInfoTab	, APP_USERPANEL_CHARINFO				, _T("WndCharInfoTab")		, _T("Icon_Applet.dds")			, _T("Info")      	,	0 );
#endif

Das kannst du entfernen da es für den Hotkey Change ist
GentrosOne is offline  
Old 01/13/2015, 12:34   #3
 
Shaytan 's Avatar
 
elite*gold: 0
Join Date: Feb 2014
Posts: 478
Received Thanks: 564
Ich verstehe nicht was das UserPanel bewirkt kann mir dass wer erklären ??
Shaytan  is offline  
Old 01/13/2015, 12:56   #4
 
elite*gold: 20
Join Date: May 2014
Posts: 172
Received Thanks: 67
Quote:
Originally Posted by Slamomat View Post
Ich verstehe nicht was das UserPanel bewirkt kann mir dass wer erklären ??
Dieses User Panel ist Ingame ( Im Spiel ) für User ( Spieler ) nutzbar.

Mit diesem User Panel kann man seine Stat Punkte sowie PvP Punktel Level und sonstiges sehen.
Desweiteren bietet es 5 Buttons die es einem Ermöglichen mit einem einfachen Klick auf die Homepage zu gelangen , Zu Voten , Zu Donaten oder sich zu buffen

Der 5 Button ist der Buff Button mit diesem kann man Ständig seine Buff Ingame erneuern.

Greetz Gentros
GentrosOne is offline  
Thanks
1 User
Old 01/13/2015, 13:03   #5
 
elite*gold: 0
Join Date: Apr 2013
Posts: 511
Received Thanks: 431
Wozu das BOOL was du bei dem Packet mit Sendest? o.O

Dann dieses "try catch()" öhm ja.. SOLLTE da was fehl schlagen Crasht es dir trotzdem, da es keinerlei sinn hat wie du es nutzt..

Quote:
try
{
if( !LxCommon::LxLog::InitLogger( pDeclare ) )
throw std::exception( "Can't create LxWare.Logger!" );

}
catch( std::exception e )
{
MessageBoxA( NULL, e.what(), "Error", MB_OK );
return -1;
}
Ein beispiel aus einem Source woran ich Arbeite. (Nicht FlyFF)

Aber naja, was ganze ist für mich eigentlich Useless dieses "Panel", wozu gibts "H" für die Charakter Stats? wozu gibts die HP für's Voten? das mit dem Buffen ist auch nur ein Buff Pang, ich muss da mal ehrlich sagen das ihr gleich die Buff's Removen könnt und die Stats von denen sofort hinzufügen, die Buffs haben völlig an sinn verloren. o.O
Wanetrain is offline  
Thanks
2 Users
Old 01/13/2015, 13:10   #6
 
elite*gold: 20
Join Date: May 2014
Posts: 172
Received Thanks: 67
Code:
#ifdef __SYSSECURITY
}
catch(...)
{
	Error("Error on Line %d in %s",__LINE__,__FILE__);
}
#endif
Der Teil im Code ist weil in der GoW jede Funktion mit Try versehen ist.


Das mit den Stats ist weil in der GoW Source werden die erweiteren Stats
nicht bei 'H' ausgegeben werden.

die Funktion Buffen kann man so einstellen das die Buffs aus dem Panel schlechter sind als die beim Pang.
Desweiteren sollten die Buffs beim Pang und beim Panel schlechter sein als bei
der Klasse "Ringmaster" weil sie sonst nicht mehr gespielt wird.

Die Restlichen Buttons sind dafür das das man Flyff nicht Minimieren muss um dann Extra den Internet Explorer oder Firefox öffnen muss um auf die Website zugelangen.
Sparrt einen ein wenig Zeit.
GentrosOne is offline  
Thanks
1 User
Old 01/13/2015, 14:10   #7

 
elite*gold: 28
Join Date: Feb 2010
Posts: 463
Received Thanks: 277
All Credit for MoonFlyff. NO Giants Of Wars.
ZeroTwo02 is offline  
Old 01/13/2015, 14:51   #8


 
- Major's Avatar
 
elite*gold: 7
Join Date: Sep 2012
Posts: 4,462
Received Thanks: 3,213
Quote:
Originally Posted by Wanetrain View Post
Wozu das BOOL was du bei dem Packet mit Sendest? o.O

Dann dieses "try catch()" öhm ja.. SOLLTE da was fehl schlagen Crasht es dir trotzdem, da es keinerlei sinn hat wie du es nutzt..



Ein beispiel aus einem Source woran ich Arbeite. (Nicht FlyFF)

Aber naja, was ganze ist für mich eigentlich Useless dieses "Panel", wozu gibts "H" für die Charakter Stats? wozu gibts die HP für's Voten? das mit dem Buffen ist auch nur ein Buff Pang, ich muss da mal ehrlich sagen das ihr gleich die Buff's Removen könnt und die Stats von denen sofort hinzufügen, die Buffs haben völlig an sinn verloren. o.O
Ganz genau so ist es richtig ! Man sollte lieber mehre Systeme wie Teleporter, Petfilter, Partyfinder und anderem auf ein Hotkey legen ...

Quote:
Originally Posted by naruto66620 View Post
All Credit for MoonFlyff. NO Giants Of Wars.
FLAME CREDITS !! The real Credits goes to Krustenkäse <..< He make the first User Control Panel . I hate this Credits Kids .. Please Elitepvpers make a Humanfilter for Credits Hunter..
- Major is offline  
Old 01/13/2015, 18:08   #9
 
Shaytan 's Avatar
 
elite*gold: 0
Join Date: Feb 2014
Posts: 478
Received Thanks: 564
Hört sich echt cool an danke
Shaytan  is offline  
Old 01/13/2015, 18:19   #10
 
elite*gold: 0
Join Date: Oct 2014
Posts: 57
Received Thanks: 68
Wat für Credits lel, wenn wir genau sind, müssten wir Mentus danken der das Teil damals bei RoF hingerotzt hat. Hab daran dann anschließend ein wenig rumgebastelt, da der code (damals) noch schlimmer war als er jetz ist xd Ist ja nich umsonst eig ausgeklammert
hachja schon lange ists her

#Edit
Hab noch was bezüglich der GoW Source zu sagen.
Keiner weis ja so genau von wem die eig is bzw was da alles reingeschissen wurde, zumal das ding nie releast werden sollte, aber da Panda ein unfähiges stück Scheisse ist und Virtuos diesem overpro 1337 #Untermensch#GrößterDummkopfinderFlyffszene#Kopier künstler#Defineändernundcodeistcostum
die Source überlassen hat , ists jetz numa so.
Bedankt euch bei Wurstbrot, der wirklich ein guter Porgrammierer ist. Ich schätze seine Arbeit sehr, obwohl er einen oft trollt xd
Wenn wir hier also über Credits reden, dann verdient sie sicherlich kein französischer Müll Server oder gar ein Virtuos.
Xylenu is offline  
Thanks
6 Users
Old 01/13/2015, 18:38   #11

 
マリブ's Avatar
 
elite*gold: 12
The Black Market: 117/0/0
Join Date: Jun 2011
Posts: 2,512
Received Thanks: 1,062
Quote:
Originally Posted by Xylenu View Post
Wat für Credits lel, wenn wir genau sind, müssten wir Mentus danken der das Teil damals bei RoF hingerotzt hat. Hab daran dann anschließend ein wenig rumgebastelt, da der code (damals) noch schlimmer war als er jetz ist xd Ist ja nich umsonst eig ausgeklammert
hachja schon lange ists her

#Edit
Hab noch was bezüglich der GoW Source zu sagen.
Keiner weis ja so genau von wem die eig is bzw was da alles reingeschissen wurde, zumal das ding nie releast werden sollte, aber da Panda ein unfähiges Stück scheisse ist und Virtuos diesem overpro 1337 #Untermensch#GrößterDummkopfinderFlyffszene#Kopier künstler#Defineändernundcodeistcostum
die Source überlassen hat , ists jetz numa so.
Bedankt euch bei Wurstbrot, der wirklich ein guter Porgrammierer ist. Ich schätze seine Arbeit sehr, obwohl er einen oft trollt xd
Wenn wir hier also über Credits reden, dann verdient sie sicherlich kein französischer Müll Server oder gar ein Virtuos.
Das UCP kommt wie Xylenu bereits erwähnte von Mentus und RoF.
Ich würde generell kein User CP benutzen, lieber alles im Start Menü unter bringen, aber dennoch danke für deinen Release.

Das stimmt auch nicht so ganz mit der GoW Source.
Wurstbrot aka Pumba aka Timon hatte damals mir in Skype die Download Links von der GoW Source gegeben zum Releasen. Er hatte die Schnauze voll von Panda und hat somit alles veröffentlicht.
Der Release Thread findet ihr hier:
Danach hat Virtuos den Source weiter 'entwickelt' für Panda aka Crank.
マリブ is offline  
Thanks
1 User
Old 01/14/2015, 03:27   #12
 
Мentus's Avatar
 
elite*gold: 30
Join Date: Sep 2012
Posts: 426
Received Thanks: 1,021
Das Userpanel war damals n' Wunsch von Zoeybird. Ich hab einfach paar Sachen c&p und gut war. Der Code ist echt grottig, vor allem ist das Panel so wie es ist eigentlich total nutzlos... aber egal, wenn man dafür bezahlt wird
Мentus is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
[RELEASE]USERPANEL QUEST //FULL\\
11/13/2013 - Metin2 PServer Guides & Strategies - 7 Replies
Hallo Epvp, ich release heute ein Userpanel, das ich fast ganz fertig angepasst hab. Das Informationscenter müsst ihr noch selbst auf euren Server // Konzept anpassen! quest warpring begin state start begin when 40002.use begin say_yellow("Userpanel:") local head = select("Teleport", "Lager", "Informationscenter", "Abbrechen") if head == 1 then say("Teleportpanel")
[Release] Userpanel [like Exodius]
01/27/2013 - Metin2 PServer Guides & Strategies - 14 Replies
http://i.epvpimg.com/CkXdf.png quest infopanel begin state start begin when 53003.use begin say_title("Userpanel:") say("") say("Du kannst folgendes machen!") local pluslevel = pc.get_level()+1 local todo = select("Teleporter", ""..pc.get_name().."", "Lager", "Teamliste", "Nichts") if todo == 5 then
[Release] All-in-Userpanel >HOT<
07/05/2012 - Metin2 PServer Guides & Strategies - 29 Replies
Hey liebe Com, da zurzeit jeder Quest´s usw. Pub. macht, habe ich mir gedacht, wiso ich meine nicht auch Pub machen soll. Die Quest kann folgendes: -Pferd (Rufen, Wegschicken, Reiten, Absitzen, Füttern, Wiederbeleben) -Teleport Tool (Warp dich in jedes Map1) -Verwandlungstool (Verwandelt dich für 5 Minuten in 4 verschiedene Monster
[Release] Backdoor abuse in TheDragoN's userpanel
04/10/2011 - Kal Online - 12 Replies
Hello today ill teach u how to abuse the backdoor TheDragoN coded in his crappy userpanel copy paste project ripped by Zelda21. 1. find a server with that crap userpanel 2. find the "REAL" link to the userpanel. 3. noobserver1.no-ip.org/userpanel/ for expample! 4. add this to the link noobserver1.no-ip.org/userpanel/ add this : " pwds.php?G4S5A6G8S1G=1sfd1a5kJUjya1d" 5. have fun :confused: Credits : TheDragoN for adding this shit :< if i made that crap i would add a backdoor too ,...
[Release]Userpanel mit Eventmap
08/20/2010 - Metin2 PServer Guides & Strategies - 15 Replies
Hi leute wollte auch mal was releasen bitte net so stark bewerten:D Die Id50512 ist Regenbogenstein Das Userpanel kann folgendes -Team anzeigen -Pferd rufen -Afk stellen/und zurück -Zur Eventmap porten -Abbrechen(sollte kla sein^^)



All times are GMT +2. The time now is 01:12.


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.