So, this can use bActionSlot thingy in Propskill if you change it. But official servers seem to have it all set to true regardless.
So you could do this:
WorldServer\dpSrvr.cpp
- CDPSrvr::OnSkillTaskBar
Code:
SHORTCUT temp; LPSKILL lpSkill;
ItemProp* iSkill = NULL;
for (int i = 0; i < nCount; ++i)
{
unsigned char nIndex;
ar >> nIndex;
if (nIndex >= MAX_SLOT_QUEUE){ return; }
ar >> temp.m_dwShortcut >> temp.m_dwId >> temp.m_dwType >> temp.m_dwIndex >> temp.m_dwUserId >> temp.m_dwData;
if (temp.m_dwShortcut == SHORTCUT_SKILL)
{
Either from here you could grab the skill id, and check if it is asal, or do what the client does, up to you.
What Client does:
Code:
lpSkill = pUser->GetSkill(0, temp.m_dwId);
iSkill = prj.GetSkillProp(lpSkill->dwSkill);
AddSkillProp* pAddSkillProp = prj.GetAddSkillProp(iSkill->dwSubDefine, lpSkill->dwLevel);
if (pAddSkillProp->dwCooldown > 0 || !iSkill->bCanUseActionSlot)
{
QueryDestroyPlayer(pUser->m_Snapshot.dpidCache, pUser->m_Snapshot.dpidUser, pUser->m_dwSerial, pUser->m_idPlayer);
return;
}
}
pUser->m_playTaskBar.m_aSlotQueue[nIndex] = temp;
}
if you only care about asal, you can remove the addskillprop and then check the skillid
Code:
if (lpSkill->dwSkill == SI_BIL_PST_ASALRAALAIKUM || !iSkill->bCanUseActionSlot)
Then if you want bCanUseActionSlot on client just for people who aren't cheating, just add it to CWndTaskBar::SetSkillQueue.