v19 Taskbar Cooldown Fix

09/14/2014 02:25 Sanctuary'#1
Einfach die void CWndTaskBar::OnDraw Funktion in der WndTaskbar.cpp mit dieser ersetzen:
PHP Code:
void CWndTaskBar::OnDrawC2DRenderp2DRender )
{
    if( 
NULL == g_pPlayer )
        return;

    
DWORD dwCur g_tmCurrent;
    
CRect rect GetWindowRect();
    
CRect rectSkillQueue;

    
CD3DFontpOldFont p2DRender->GetFont();
    
p2DRender->SetFontCWndBase::m_Theme.m_pFontWndTitle );
     
    if( 
m_nPosition == TASKBAR_TOP || m_nPosition == TASKBAR_BOTTOM )
    {
        
rectSkillQueue.SetRectrect.Width() - 32 60rect.Width(), rect.Height() );
    }
    else
    if( 
m_nPosition == TASKBAR_LEFT || m_nPosition == TASKBAR_RIGHT )
    {
        
rectSkillQueue.SetRect0rect.Height() - 32 6rect.Width(), rect.Height() );
    }

    
// µå·¡±× ÇÏÀ̶óÀÌÆ® ½½·Ô Ç¥½Ã
    
if( m_GlobalShortcut.IsEmpty() == FALSE )
    {
        
DWORD dwColor;
        if( 
m_dwHighAlpha 128 )
            
dwColor D3DCOLOR_ARGBm_dwHighAlpha00255 );
        else
            
dwColor D3DCOLOR_ARGB128 - ( m_dwHighAlpha 128 ), 00255 );

        
LPWNDCTRL pApplet GetWndCtrlWIDC_CUSTOM1 );
        
LPWNDCTRL pItem   GetWndCtrlWIDC_CUSTOM2 );
        
LPWNDCTRL pSkill  GetWndCtrlWIDC_CUSTOM3 );

        
CRect rectApplet pApplet->rect;
        
CRect rectItem pItem->rect;
        
CRect rectSkill pSkill->rect;

        
rectApplet.top 42;
        
rectApplet.bottom 47;
        
rectApplet.left -= 6;
        
rectApplet.right += 6;
        
rectItem.top 42;
        
rectItem.bottom 47;
        
rectItem.left -= 6;
        
rectItem.right += 6;
        
rectSkill.top 42;
        
rectSkill.bottom 47;
        
rectSkill.left -= 3;
        
rectSkill.right += 4;
     
        switch( 
m_GlobalShortcut.m_dwShortcut )
        {
            case 
SHORTCUT_APPLET:
            case 
SHORTCUT_ITEM:
            case 
SHORTCUT_MOTION:
                
p2DRender->RenderFillRectrectAppletdwColor );
                
p2DRender->RenderFillRectrectItemdwColor );
                break;
            case 
SHORTCUT_SKILL:
                if( 
m_GlobalShortcut.m_dwType == )
                {
                    
DWORD dwSkill g_pPlayer->GetSkill0m_GlobalShortcut.m_dwId )->dwSkill;
                    
DWORD dwComboStyleSrc prj.GetSkillPropdwSkill )->dwComboStyle;
                    if( 
dwComboStyleSrc == CT_STEP  || dwComboStyleSrc == CT_GENERAL  )        // ½ºÅÜÀ̳ª Á¦³×·²À̸é ÇÕ°Ý
                        
p2DRender->RenderFillRectrectItemdwColor );     
                    
p2DRender->RenderFillRectrectSkilldwColor );
                }
                else
                    
p2DRender->RenderFillRectrectItemdwColor );
                break;
        }     
    }

    
// ¾ÖÇ÷¿ ¾ÆÀÌÄÜ Ãâ·Â
    
CPoint point POINT_APPLET;
    for( 
int i 0m_nMaxSlotAppleti++ )
    {
        
LPSHORTCUT lpShortcut = &m_aSlotApplet] ;
        if( !
lpShortcut->IsEmpty() )
        {
            if( 
lpShortcut->m_pTexture )
                
p2DRender->RenderTexturepointlpShortcut->m_pTexture );
            if( 
lpShortcut->m_dwShortcut == SHORTCUT_ITEM )
            {
                
CItemBasepItemBase g_pPlayer->GetItemIdlpShortcut->m_dwId );
                
CItemElempItemElem = (CItemElem*)pItemBase;
                if( 
pItemElem )
                {
                    if( 
pItemElem->GetProp()->dwPackMax )
                    {
                        
TCHAR szTemp32 ];
#if __VER >= 8    // __JEFF_VER_8
                        
_stprintfszTemp"%d"g_pPlayer?g_pPlayer->m_Inventory.GetItemCountpItemElem->m_dwItemId ): );
#else    // __JEFF_VER_8
                        
_stprintfszTemp"%d"pItemElem->m_nItemNum );
#endif    // __JEFF_VER_8
                        
CSize size m_p2DRender->m_pFont->GetTextExtentszTemp );
                        
p2DRender->TextOutpoint.32 size.cxpoint.32 size.cyszTemp0xfff6cc4d );
                        
p2DRender->TextOutpoint.31 size.cxpoint.31 size.cyszTemp0xfff6cc4d );
                    }
                    
DWORD dwGroup g_pPlayer->m_cooltimeMgr.GetGrouppItemElem->GetProp() );
                    if( 
dwGroup )
                    {
                        
DWORD dwEnd g_pPlayer->m_cooltimeMgr.GetTimedwGroup );        // À̺¥Æ® Á¾·á ½Ã°¢
                        
if( dwEnd != && dwEnd dwCur )
                        {
                            
DWORD dwBase g_pPlayer->m_cooltimeMgr.GetBasedwGroup );    // À̺¥Æ® ½ÃÀÛ ½Ã°¢
                            
RenderRadarp2DRenderpointdwCur dwBasedwEnd dwBase );
                        }
                    }
                }
                else
                {
#if __VER >= 8    // __JEFF_VER_8
                    
ItemProppItemProp    prj.GetItemProplpShortcut->m_dwItemId );
                    if( 
pItemProp && pItemProp->dwPackMax )    // º´ÇÕ °¡´ÉÇÑ ¾ÆÀÌÅÛÀ̸é?
                    
{
                        
DWORD dwId    g_pPlayer->m_Inventory.FindlpShortcut->m_dwItemId );
                        if( 
dwId != NULL_ID )    // °°Àº Á¾·ùÀÇ ¾ÆÀÌÅÛÀÌ ÀÖ´Ù¸é?
                        
{
                            
lpShortcut->m_dwId    dwId;
                            
g_DPlay.SendAddAppletTaskBarilpShortcut );
                        }
                        else
                        {
                            
lpShortcut->Empty();
                            
g_DPlay.SendRemoveAppletTaskBar);
                        }
                    }
                    else
                    {
                        
lpShortcut->Empty();
                        
g_DPlay.SendRemoveAppletTaskBar);
                    }
#else    // __JEFF_VER_8
                    
lpShortcut->Empty();
                    
g_DPlay.SendRemoveAppletTaskBar);
#endif    // __JEFF_VER_8
                
}
            }
            else
            if( 
lpShortcut->m_dwShortcut == SHORTCUT_APPLET )
            {
                
AppletFuncpAppletFunc g_WndMng.GetAppletFunclpShortcut->m_dwId );
                if( 
pAppletFunc && pAppletFunc->m_cHotkey )
                {
                    
CPoint ptHotkeypoint.8point.);
                    
DRAW_HOTKEYp2DRenderptHotkeypAppletFunc->m_cHotkey );
                }
            }
            else if( 
lpShortcut->m_dwShortcut == SHORTCUT_SKILL && lpShortcut->m_dwType != //±Ø´Ü½ºÅ³Àº ÄðŸÀÓ °ü·Ã Render¸¦ ÇÏÁö ¾Ê´Â´Ù.
            
{
                
RenderCollTimepointlpShortcut->m_dwIdp2DRender );
            }
        
#if __VER >= 12 // __LORD
            
else if( lpShortcut->m_dwShortcut == SHORTCUT_LORDSKILL)
            {
                    
RenderLordCollTimepointlpShortcut->m_dwIdp2DRender );
            }
        
#endif
            
else
            if( 
lpShortcut->m_dwShortcut == SHORTCUT_MOTION )
            {
                if( 
lpShortcut->m_dwId == MOT_BASE_ESCAPE )
                {
                    
ItemProppItem prj.GetItemPropg_AddSMMode.dwSMItemID[SM_ESCAPE] );
                 
                    if( 
pItem && g_pPlayer )
                    {
                        
CTimeSpan ctg_pPlayer->m_dwSMTime[SM_ESCAPE] );
                     
                        if( 
ct.GetTotalSeconds() )
                        {
                            
point.-= 1;
                            
point.+= 1;
                            
RenderRadarm_p2DRenderpoint, (DWORD)( pItem->dwCircleTime ct.GetTotalSeconds() ), pItem->dwCircleTime );
                        }
                    }
                }
            } 
        }
        
point += CPointICON_SIZE);
    }
    
// ¾ÆÀÌÅÛ ¾ÆÀÌÄÜ Ãâ·Â
    
point POINT_ITEM;
    for( 
0MAX_SLOT_ITEMi++ )
    {
        
LPSHORTCUT lpShortcut = &m_paSlotItem] ;
        if( !
lpShortcut->IsEmpty() )
        {
            if( 
lpShortcut->m_pTexture )
                
p2DRender->RenderTexturepointlpShortcut->m_pTexture );
            if( 
lpShortcut->m_dwShortcut == SHORTCUT_ITEM )
            {
                
CItemBasepItemBase g_pPlayer->GetItemIdlpShortcut->m_dwId );
                
CItemElempItemElem = (CItemElem*)pItemBase;
                if( 
pItemElem  )
                {
                    if( 
pItemElem->GetProp()->dwPackMax )
                    {
                        
TCHAR szTemp32 ];
#if __VER >= 8    // __JEFF_VER_8
                        
_stprintfszTemp"%d"g_pPlayer?g_pPlayer->m_Inventory.GetItemCountpItemElem->m_dwItemId ): );
#else    // __JEFF_VER_8
                        
_stprintfszTemp"%d"pItemElem->m_nItemNum );
#endif    // __JEFF_VER_8
                        
CSize size m_p2DRender->m_pFont->GetTextExtentszTemp );
                        
p2DRender->TextOutpoint.32 size.cxpoint.32 size.cyszTemp0xfff6cc4d );
                        
p2DRender->TextOutpoint.31 size.cxpoint.31 size.cyszTemp0xfff6cc4d );
                    }
                }

                
DWORD dwGroup g_pPlayer->m_cooltimeMgr.GetGrouppItemElem->GetProp() );
                if( 
dwGroup )
                {
                    
DWORD dwEnd g_pPlayer->m_cooltimeMgr.GetTimedwGroup );        // À̺¥Æ® Á¾·á ½Ã°¢
                    
if( dwEnd != && dwEnd dwCur )
                    {
                        
DWORD dwBase g_pPlayer->m_cooltimeMgr.GetBasedwGroup );    // À̺¥Æ® ½ÃÀÛ ½Ã°¢
                        
RenderRadarp2DRenderpointdwCur dwBasedwEnd dwBase );
                    }
                }
            }
            else if( 
lpShortcut->m_dwShortcut == SHORTCUT_SKILL && lpShortcut->m_dwType != //±Ø´Ü½ºÅ³Àº ÄðŸÀÓ °ü·Ã Render¸¦ ÇÏÁö ¾Ê´Â´Ù.
            
{
                
RenderCollTimepointlpShortcut->m_dwIdp2DRender );
            }
        
#if __VER >= 12 // __LORD
            
else if( lpShortcut->m_dwShortcut == SHORTCUT_LORDSKILL)
            {
                    
RenderLordCollTimepointlpShortcut->m_dwIdp2DRender );
            }
        
#endif
            
else
            if( 
lpShortcut->m_dwShortcut == SHORTCUT_MOTION )
            {
                if( 
lpShortcut->m_dwId == MOT_BASE_ESCAPE )
                {
                    
ItemProppItem prj.GetItemPropg_AddSMMode.dwSMItemID[SM_ESCAPE] );

                    if( 
pItem && g_pPlayer )
                    {
                        
CTimeSpan ctg_pPlayer->m_dwSMTime[SM_ESCAPE] );
                     
                        if( 
ct.GetTotalSeconds() )
                        {
                            
point.-= 1;
                            
point.+= 1;
                            
RenderRadarm_p2DRenderpoint, (DWORD)( pItem->dwCircleTime ct.GetTotalSeconds() ), pItem->dwCircleTime );
                        }
                    }
                }
            }

             
        }
        
// hotkey Ãâ·Â
        
CHAR cHotkey = ( == ) ? '0' '1' i;
        
CPoint ptHotkeypoint.8point.);
        
//DRAW_HOTKEY( p2DRender, ptHotkey, cHotkey );
        
point += CPointICON_SIZE);
    }
 
    
point CPointPOINT_QUEUE_X ICON_SIZE 5POINT_QUEUE_Y );
    
p2DRender->RenderTexturepointm_pTexture );

    
// ½ºÅ³ Å¥
    
point POINT_QUEUE;
    
//p2DRender->TextOut( point.x - 5, point.y - 16, "ACTION SLOT" );
    
for( 0m_nCurQueueNumi++ )
    {
        
LPSHORTCUT lpShortcut = &m_aSlotQueue] ;
        if( !
lpShortcut->IsEmpty() )
        {
            if( 
lpShortcut->m_pTexture )
            {
                
p2DRender->RenderTexturepointlpShortcut->m_pTexture );
//                LPSKILL pSkill = g_pPlayer->GetSkill( lpShortcut->m_dwType, lpShortcut->m_dwId );
//                if( g_pPlayer->m_nReUseDelay[ lpShortcut->m_dwId ] > 0 )
//                    p2DRender->TextOut( point.x, point.y, g_pPlayer->m_nReUseDelay[ lpShortcut->m_dwId ] );

            
}
        }
        
point += CPointSKILL_SIZE);
    }

    if( !( 
g_pPlayer->IsSMModeSM_ACTPOINT ) ) )
    {
    
#define LV2MAXAP    10        // 2´Ü°è ½ºÅ³ÀÌ ´ÙÂ÷´Âµ¥ ÇÊ¿äÇÑ action point
    #define LV3MAXAP    25     
    #define LV4MAXAP    50
    #define LV5MAXAP    100

        
point POINT_QUEUE;
        
point.+= SKILL_SIZE;    // ½ºÅ³ 2¹øÂ°ÄºÎÅÍ ½¦À̵åµÈ´Ù.
        
{
            
int nAP2Size;    // ¾×¼ÇÆ÷ÀÎÆ®¸¦ ÇÏÀ̶óÀÌÆ®¾çÀ¸·Î º¯È¯ÇѰª.
            
if( m_nActionPoint >= LV4MAXAP )    // LV4MAXAP¸¦ ³Ñ¾î¼¸é 5´Ü°è ½ÃÀÛ.
                
nAP2Size = (SKILL_SIZE 3) + (((m_nActionPoint LV4MAXAP) * SKILL_SIZE) / (LV5MAXAP LV4MAXAP));
            else if( 
m_nActionPoint >= LV3MAXAP )
                
nAP2Size = (SKILL_SIZE 2) + (((m_nActionPoint LV3MAXAP) * SKILL_SIZE) / (LV4MAXAP LV3MAXAP));
            else if( 
m_nActionPoint >= LV2MAXAP )
                
nAP2Size = (SKILL_SIZE 1) + (((m_nActionPoint LV2MAXAP) * SKILL_SIZE) / (LV3MAXAP LV2MAXAP));
            else
                
nAP2Size = (m_nActionPoint SKILL_SIZE) / LV2MAXAP;
         
            
p2DRender->m_pd3dDevice->SetRenderStateD3DRS_ALPHABLENDENABLETRUE );
            
p2DRender->m_pd3dDevice->SetRenderStateD3DRS_ALPHATESTENABLEFALSE );
            
point.+= nAP2Size;
            
nAP2Size = (SKILL_SIZE 4) - nAP2Size;
            
p2DRender->RenderFillRectCRect(point.xpoint.y,  point.nAP2Sizepoint.SKILL_SIZE 2),
                                        
D3DCOLOR_ARGB0x7f00) );
         
            if( 
m_nCurQueueNum )
            {
                
int show 1;
             
                if( 
m_nActionPoint >= LV2MAXAP )
                    
show 2;
                if( 
m_nActionPoint >= LV3MAXAP )
                    
show 3;
                if( 
m_nActionPoint >= LV4MAXAP )
                    
show 4;
                if( 
m_nActionPoint >= LV5MAXAP )
                    
show 5;
             
                if( 
m_nCurQueueNum <= show )
                    
show m_nCurQueueNum;
             
                
CPoint Point CPointPOINT_QUEUE_XPOINT_QUEUE_Y+);

                
RenderOutLineLampPOINT_QUEUE_XPOINT_QUEUE_Y+1showSKILL_SIZE );
            }
        }
    }

    
CWndButtonpWndButton = (CWndButton*)GetDlgItemWIDC_UP );
    
rect pWndButton->GetWindowRectTRUE );
    
rect.top rect.bottom 2;
    
p2DRender->TextOutrect.leftrect.topm_nSlotIndex 10xffffffff );
    
p2DRender->SetFontpOldFont );


Dann noch sichergehen das m_nActionPoint in eurer WndTaskbar.h definiert ist und alles sollte funktionieren.
PHP Code:
int              m_nActionPoint
Credits : 100% Hostille
09/14/2014 07:10 wns24987#2
lol...thanke :)
09/14/2014 12:57 Sanctuary'#3
It's for the cooldown animation in the taskbar..
09/14/2014 13:30 .S0ulSeller#4
Danke, auch wenn das nicht deine Arbeit war...^^
09/14/2014 13:32 Burdenz2007#5
So basically the skill cooldown will rotate with this fix?
09/15/2014 03:08 Elusively#6
Thanks for giving credits ;)

As for those curious as to what this fixes, this fixes the display of the cooldown on items and(or) skills in the taskbar like retail.

All the public releases have this disabled for god knows what reason, but yea this will fix that.

As for activation problems it's more then likely due to the same reason. Simply keep following it, what i did find interesting when i "fixed" this is how the define was hidden between ifndef which shows this was done intentionally.
10/27/2014 14:53 Rodopushin#7
Quote:
Originally Posted by Sanctuary' View Post
Einfach die void CWndTaskBar::OnDraw Funktion in der WndTaskbar.h
Du meintest oben wohl WndTaskBar.cpp und nicht .h^^

Habe das gemacht (verwende derzeit Virtuos Files), allerdings spuckt er Errors aus, dass m_nActionPoint nicht definiert ist. Ich habe wie du beschrieben hattest in der WndTaskBar.h geschaut, ob es definiert ist und dort steht folgender Eintrag:


Wenn ich nun das #ifndef __NEW_TASKBAR_V19 rausnehme, dann sind die Fehlermeldungen weg. Jetzt könnte man meinen, ich hätte __NEW_TASKBAR_V19 nicht definiert, ich habe das in allen relevanten VersionCommon.h geprüft und überall ist es definiert.

Als ich das #ifndef überall entfernt hatte, was mit der V19 Taskbar zutun hat, bekomme ich zwar keine Fehlermeldungen, aber im Spiel wird immernoch kein Cooldown angezeigt.

Kann mir jemand helfen?

EDIT: Er wird nur bei Skills nicht angezeigt!
10/28/2014 01:19 Spheromany#8
Quote:
Originally Posted by xXXKillianXXx View Post
Du meintest oben wohl WndTaskBar.cpp und nicht .h^^

Habe das gemacht (verwende derzeit Virtuos Files), allerdings spuckt er Errors aus, dass m_nActionPoint nicht definiert ist. Ich habe wie du beschrieben hattest in der WndTaskBar.h geschaut, ob es definiert ist und dort steht folgender Eintrag:


Wenn ich nun das #ifndef __NEW_TASKBAR_V19 rausnehme, dann sind die Fehlermeldungen weg. Jetzt könnte man meinen, ich hätte __NEW_TASKBAR_V19 nicht definiert, ich habe das in allen relevanten VersionCommon.h geprüft und überall ist es definiert.

Als ich das #ifndef überall entfernt hatte, was mit der V19 Taskbar zutun hat, bekomme ich zwar keine Fehlermeldungen, aber im Spiel wird immernoch kein Cooldown angezeigt.

Kann mir jemand helfen?

EDIT: Er wird nur bei Skills nicht angezeigt!
Du weist schon das "#ifndef" für "if not defined" steht oder? Sprich: #wennnichtdefiniert __NEW_TASKBAR_V19

Auf gut deutsch: er benutzt die Variable/Pointer/whatever wenn die neue Taskbar NICHT definiert ist.
10/28/2014 01:39 Avalion#9
Quote:
Originally Posted by jayjei14 View Post
what does it mean for this fix?
it is for radar or for activation potion?
Activition potion, like this, is an extremely easy fix.


Anyway, this can't be exactly copied or pasted. Just analyze the differences with CWndTaskbarInterface and work with it. GG, fixed cooldown.
10/28/2014 02:56 Rodopushin#10
Quote:
Originally Posted by Spheromany View Post
Du weist schon das "#ifndef" für "if not defined" steht oder? Sprich: #wennnichtdefiniert __NEW_TASKBAR_V19

Auf gut deutsch: er benutzt die Variable/Pointer/whatever wenn die neue Taskbar NICHT definiert ist.
Ja, hab ich nichtmehr dran gedacht. Kleiner Denkfehler von mir, aber egal wie ich es mache, ob nun ifdef oder ifndef, ob mit oder ohne den Code, bei Skills wird der Cooldown tortzdem nicht angezeigt :D
10/28/2014 11:52 Burdenz2007#11
So anyone Tested this code? Does it really works?
10/30/2014 13:42 max982#12
There's a much easier way to do this.
02/04/2019 04:57 adeilson123#13
Code:
int	CUserTaskBar::SetNextSkill( CUser *pUser )
{
	m_nUsedSkillQueue ++;		// Å¥À妽º ´ÙÀ½À¸·Î...
	
#ifdef __V19_TASKBAR
	int nAP = 100;
#else//__V19_TASKBAR
	int nAP = m_nActionPoint;
	if( !( pUser->IsSMMode( SM_ACTPOINT ) ) )
	{
		switch( m_nUsedSkillQueue )
		{
		case 1:	nAP -= 6;	break;		// ¾×¼Ç Æ÷ÀÎÆ® ¼Ò¸ð·®. ´ÙÀ½½½·ÔÀ» »ç¿ëÇÒ¼öÀÖ´ÂÁö ¹Ì¸® ¾Ë¾Æº¸±â À§ÇÔ.
		case 2:	nAP -= 8;	break;
		case 3:	nAP -= 11;	break;
		case 4:	nAP -= 30;	break;
		}
	}
#endif//__V19_TASKBAR
	LPSHORTCUT pShortcut = &m_aSlotQueue[ m_nUsedSkillQueue ];
	BOOL bResult = nAP < 0;
	if( ( m_nUsedSkillQueue >= MAX_SLOT_QUEUE) || pShortcut->IsEmpty() || (nAP < 0) )	// Å¥ÁøÇàÀÌ ³¡±îÁö °¬°Å³ª || Å¥°¡ ºñ¾ú°Å³ª || AP°¡ ¾ø°Å³ª.
	{
		OnEndSkillQueue( pUser );
		return 0;		// Å¥½ÇÇà ³¡.
	} else
	{
#ifndef __V19_TASKBAR
		if( nAP < 0 )	nAP = 0;
		m_nActionPoint = nAP;
#endif//__V19_TASKBAR
		pUser->AddSetActionPoint( nAP );		// ¾×¼ðÆ÷ÀÎÆ® Ŭ¶ó¿¡ °»½Å.
		OBJID idTarget = pUser->m_idSetTarget;
		TRACE( "´ÙÀ½½ºÅ³»ç¿ë ½Ãµµ%d, ", pShortcut->m_dwId );
		if( pUser->CMD_SetUseSkill( idTarget, pShortcut->m_dwId, SUT_QUEUEING ) == 0 )		// ½ÇÇàÇÒ ¸í·ÉÀ» ¼ÂÆÃ. À̵¿ + ½ºÅ³»ç¿ëÀÌ ÇÕÃÄÁø ¸í·É.
		{
			TRACE( "´ÙÀ½½ºÅ³»ç¿ë ½ÇÆÐ %d, ", pShortcut->m_dwId );
			SetNextSkill( pUser );	// ½ºÅ³»ç¿ë¿¡ ½ÇÆÐÇß´Ù¸é ´ÙÀ½ ½ºÅ³ »ç¿ëÇϵµ·Ï ³Ñ¾î°¨.
		}
		return 1;
	}

	return 1;
}