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