Cooldown animation for skill missing

12/03/2018 08:53 cansasboy#1
Hi im new and i just converted my version15 theme to v19 theme and its working great so far now the problem is whenever i use skills i cant see the cooldown thing in my v19 taskbar but i can see the cooldown time. I know someone from here can help us.
12/03/2018 11:39 Knusper02#2
In WndTaskBar.cpp
Search for:
Code:
void CWndTaskBarInterface::OnDraw(C2DRender* p2DRender)
Replace the whole function with:
Code:
void CWndTaskBarInterface::OnDraw(C2DRender* p2DRender)
{
	if (IsValidObj(g_pPlayer))
	{
		CPoint point;
		DWORD dwCur = g_tmCurrent;

		if (m_GlobalShortcut.IsEmpty() == FALSE)
		{
			for (int i = 0; i < MAX_SLOT_ITEM; i++)
			{
				DWORD dwColor = D3DCOLOR_ARGB(15, 20, 0, 200);
				CRect Rectskill = wndCtrl[i]->rect;

				switch (m_GlobalShortcut.m_dwShortcut)
				{
				case SHORTCUT_APPLET:
				case SHORTCUT_ITEM:
				case SHORTCUT_MOTION:
					p2DRender->RenderFillRect(Rectskill, dwColor);
					p2DRender->RenderFillRect(Rectskill, dwColor);
					break;
				case SHORTCUT_SKILL:
					if (m_GlobalShortcut.m_dwType == 0)
					{
						DWORD dwSkill = g_pPlayer->GetSkill(0, m_GlobalShortcut.m_dwId)->dwSkill;
						DWORD dwComboStyleSrc = prj.GetSkillProp(dwSkill)->dwComboStyle;
						if (dwComboStyleSrc == CT_STEP || dwComboStyleSrc == CT_GENERAL)
							p2DRender->RenderFillRect(Rectskill, dwColor);
						p2DRender->RenderFillRect(Rectskill, dwColor);
					}
					else
						p2DRender->RenderFillRect(Rectskill, dwColor);
					break;
				case SHORTCUT_SKILLFUN:
					p2DRender->RenderFillRect(Rectskill, dwColor);
					break;
				}

			}
		}

		for (int i = 0; i < MAX_SLOT_ITEM; i++)
		{
			if (!m_bCtrlVisible[i])
				continue;

			point = CPoint(wndCtrl[i]->rect.left, wndCtrl[i]->rect.top);
			LPSHORTCUT lpShortcut = m_pSlotItem[i];


			if (!lpShortcut->IsEmpty())
			{
				if (lpShortcut->m_pTexture)
					p2DRender->RenderTexture(point, lpShortcut->m_pTexture);


				if (lpShortcut->m_dwShortcut == SHORTCUT_ITEM)
				{
					CItemBase* pItemBase = g_pPlayer->GetItemId(lpShortcut->m_dwId);
					CItemElem* pItemElem = (CItemElem*)pItemBase;
					if (pItemElem)
					{
						if (pItemElem->GetProp()->dwPackMax > 1)
						{
							CD3DFont* pOldFont = p2DRender->GetFont();
							p2DRender->SetFont(CWndBase::m_Theme.m_pFontWndNewTitle);

							TCHAR szTemp[32];
							_stprintf(szTemp, "%d", g_pPlayer ? g_pPlayer->m_Inventory.GetItemCount(pItemElem->m_dwItemId) : 0);
							CSize size = m_p2DRender->m_pFont->GetTextExtent(szTemp);
	
							p2DRender->TextOut(point.x + 31 - size.cx, point.y + 31 - size.cy + 4, szTemp, 0xFF85FF8A);
							p2DRender->SetFont(pOldFont);
							//p2DRender->TextOut(point.x + 31 - size.cx, point.y + 31 - size.cy, szTemp, 0xAA3364AC);
						}
						DWORD dwGroup = g_pPlayer->m_cooltimeMgr.GetGroup(pItemElem->GetProp());
						if (dwGroup)
						{
							DWORD dwEnd = g_pPlayer->m_cooltimeMgr.GetTime(dwGroup);        // AIº¥Æ® A¾·a ½A°¢
							if (dwEnd != 0 && dwEnd > dwCur)
							{
								DWORD dwBase = g_pPlayer->m_cooltimeMgr.GetBase(dwGroup);    // AIº¥Æ® ½AAU ½A°¢
								RenderRadar(p2DRender, point, dwCur - dwBase, dwEnd - dwBase);
							}
						}
					}
					else
					{
						ItemProp* pItemProp = prj.GetItemProp(lpShortcut->m_dwItemId);
						if (pItemProp && pItemProp->dwPackMax > 1)    // º´CO °¡´ECN ¾ÆAIAUAI¸e?
						{
							DWORD dwId = g_pPlayer->m_Inventory.Find(lpShortcut->m_dwItemId);
							if (dwId != NULL_ID)    // °°Aº A¾·uAC ¾ÆAIAUAI AO´U¸e?
							{
								lpShortcut->m_dwId = dwId;
								g_DPlay.SendAddAppletTaskBar(i, lpShortcut);
							}
							else
							{
								lpShortcut->Empty();
								g_DPlay.SendRemoveAppletTaskBar(i);
							}
						}
						else
						{
							lpShortcut->Empty();
							g_DPlay.SendRemoveAppletTaskBar(i);
						}
					}
				}
				else if (lpShortcut->m_dwShortcut == SHORTCUT_APPLET)
				{
					AppletFunc* pAppletFunc = g_WndMng.GetAppletFunc(lpShortcut->m_dwId);
					if (pAppletFunc && pAppletFunc->m_cHotkey)
					{
						CPoint ptHotkey(point.x + 8, point.y - 9);
						DRAW_HOTKEY(p2DRender, ptHotkey, pAppletFunc->m_cHotkey);
					}
				}
				else if (lpShortcut->m_dwShortcut == SHORTCUT_SKILL && lpShortcut->m_dwType != 2) //±Ø´U½ºA³Aº AðA¸AO °u·A Render¸| CIAo ¾E´A´U.
				{
					RenderCollTime(point, lpShortcut->m_dwId, p2DRender);
				}
#if __VER >= 12 // __LORD
				else if (lpShortcut->m_dwShortcut == SHORTCUT_LORDSKILL)
				{
					RenderLordCollTime(point, lpShortcut->m_dwId, p2DRender);
				}
#endif
				else if (lpShortcut->m_dwShortcut == SHORTCUT_MOTION)
				{
					if (lpShortcut->m_dwId == MOT_BASE_ESCAPE)
					{
						ItemProp* pItem = prj.GetItemProp(g_AddSMMode.dwSMItemID[SM_ESCAPE]);

						if (pItem && g_pPlayer)
						{
							CTimeSpan ct(g_pPlayer->m_dwSMTime[SM_ESCAPE]);

							if (ct.GetTotalSeconds())
							{
								point.y -= 1;
								point.x += 1;
								RenderRadar(m_p2DRender, point, (DWORD)(pItem->dwCircleTime - ct.GetTotalSeconds()), pItem->dwCircleTime);
							}
						}
					}
				}
				else if (lpShortcut->m_dwShortcut == SHORTCUT_SKILLFUN)
				{
					CWndNewSkillSlot* m_SkillSL = (CWndNewSkillSlot*)g_WndMng.GetWndBase(APP_SLOT);
					if (clock() < m_SkillSL->m_tmCoolDown || m_SkillSL->m_bStopCoolDown)
					{
						//	float fPercent = (float)dwValue / (float)dwDivisor;
						//	int nDrawIndex = (fPercent * 127);
						// dwvalue * 127 / dwValue m_SkillSL->m_tmStartCoolDown
						// m_SkillSL->m_tmCoolDown (18) * 127
						RenderRadar(m_p2DRender, point, DWORD(m_SkillSL->m_tmCoolDown), m_SkillSL->m_tmStartCoolDown);
					}
				}
			}
		}
	}
	for (int i = 0; i < 10; i++)
	{
		if (!m_bCtrlVisible[i])
			continue;
		if (slot1[i] != NULL)
		{
			slot1[i]->Render(p2DRender, CPoint(wndCtrl[i]->rect.left - 3, wndCtrl[i]->rect.top - 3));
		}
		if ((m_USEFIRE[i] != NULL) && (!m_pSlotItem[i]->IsEmpty()))
		{
			m_USEFIRE[i]->Render(p2DRender, CPoint(wndCtrl[i]->rect.left, wndCtrl[i]->rect.top), m_USEFireALPHA[i]);
		}

	}
}
#if __VER >= 12 // __LORD
	void CWndTaskBarInterface::RenderLordCollTime( CPoint pt, DWORD dwSkillId, C2DRender* p2DRender )
	{
		CCLord* pLord									= CCLord::Instance();
		CLordSkillComponentExecutable* pComponent		= pLord->GetSkills()->GetSkill(dwSkillId);
		if(!pComponent) return;
		DWORD dwDelay = 0;
		if(pComponent->GetTick() > 0)
			RenderRadar( p2DRender, pt, pComponent->GetCooltime() - pComponent->GetTick(), pComponent->GetCooltime() );	
	}
#endif
In WndTaskBar.h
Search for:
Code:
static bool IsLock(){ return m_bLock; }
Add under:
Code:
#if __VER >= 12 // __LORD
	void RenderLordCollTime(CPoint pt, DWORD dwSkillId, C2DRender* p2DRender);
#endif