Files
Client/Server/RylServerProject/RylGameLibrary/Creature/Character/CharacterQuickSlot.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

125 lines
3.4 KiB
C++

#include "stdafx.h"
#include <Item/Item.h>
#include <Skill/SkillMgr.h>
#include "Character.h"
void CCharacter::UpdateQuickSlotSkill(SKILLSLOT Slot)
{
for (int nQSlot = 0; nQSlot < QUICK::MAX_QUICK_NUM; ++nQSlot)
{
QUICKSLOT& QuickSlot = m_DBData.m_Quick.Slots[nQSlot];
if (QUICKSLOT::SKILL == QuickSlot.nType
&& QuickSlot.wID == Slot.SKILLINFO.wSkill)
{
QuickSlot.nSkillLevel = Slot.SKILLINFO.cSkillLevel;
QuickSlot.nSkillLockCount = Slot.SKILLINFO.cLockCount;
}
}
}
bool CCharacter::MoveQuickSlot(const TakeType takeType, const unsigned short usSkillID, unsigned char cLockCount, unsigned char cSkillLevel)
{
bool bResult = 0;
if (QUICK::MAX_QUICK_NUM <= takeType.m_dstPos.m_cIndex)
{
ERRLOG3(g_Log, "CID:%10u 퀵슬롯 이동 이상. 퀵슬롯 인덱스 위치가 이상합니다."
"Dst(%2d,%2d)", m_dwCID, takeType.m_dstPos.m_cPos, takeType.m_dstPos.m_cIndex);
return false;
}
switch (takeType.m_srcPos.m_cPos)
{
case TakeType::TS_INVEN:
case TakeType::TS_TEMP:
{
Item::CItem* pItem = GetItem(takeType.m_srcPos);
if (NULL == pItem)
{
ERRLOG3(g_Log, "CID:%10u 퀵슬롯 이동 이상. 아이템을 얻어올 수 없습니다. Src(%2d,%2d)",
m_dwCID, takeType.m_srcPos.m_cPos, takeType.m_srcPos.m_cIndex);
}
else if (pItem->IsSet(Item::DetailData::QUICKSLOT_IN))
{
m_DBData.m_Quick.Slots[takeType.m_dstPos.m_cIndex] =
QUICKSLOT(QUICKSLOT::ITEM, 0, 0, pItem->GetPrototypeID());
return true;
}
} break;
case TakeType::TS_SSLOT:
{
if (SKILL::MAX_SLOT_NUM <= takeType.m_srcPos.m_cIndex)
{
ERRLOG3(g_Log, "CID:%10u 옮기려는 스킬 위치가 이상합니다. Src(%2d,%2d)",
m_dwCID, takeType.m_srcPos.m_cPos, takeType.m_srcPos.m_cIndex);
}
else if (TakeType::TS_QSLOT == takeType.m_dstPos.m_cPos)
{
const Skill::ProtoType* lpProtoType = CSkillMgr::GetInstance().GetSkillProtoType(usSkillID);
if (NULL == lpProtoType)
{
ERRLOG2(g_Log, "CID:%10u 옮기려는 스킬의 아이디가 존재하지 않습니다. ID:0x%04x", m_dwCID, usSkillID);
return false;
}
unsigned char cSkillLockCount = 0;
unsigned char cSkillCurLevel = 1;
// 액션 스크립트이면
if(lpProtoType->m_eSkillType == Skill::Type::ACTION)
{
cSkillLockCount = cLockCount;
cSkillCurLevel = cSkillLevel;
}
else
{
SKILLSLOT SkillSlot = m_DBData.m_Skill.SSlot[takeType.m_srcPos.m_cIndex];
if (false == lpProtoType->m_bIsClassSkill)
{
cSkillLockCount = SkillSlot.SKILLINFO.cLockCount;
cSkillCurLevel = SkillSlot.SKILLINFO.cSkillLevel;
}
}
m_DBData.m_Quick.Slots[takeType.m_dstPos.m_cIndex] =
QUICKSLOT(QUICKSLOT::SKILL, cSkillLockCount, cSkillCurLevel, usSkillID);
return true;
}
} break;
case TakeType::TS_QSLOT:
{
if (QUICK::MAX_QUICK_NUM <= takeType.m_srcPos.m_cIndex)
{
ERRLOG2(g_Log, "CID:%10u 옮기려는 퀵슬롯 위치가 이상합니다. 스킬 위치 %d",
m_dwCID, takeType.m_srcPos.m_cIndex);
}
else
{
if (TakeType::TS_QSLOT == takeType.m_dstPos.m_cPos)
{
std::swap(m_DBData.m_Quick.Slots[takeType.m_srcPos.m_cIndex],
m_DBData.m_Quick.Slots[takeType.m_dstPos.m_cIndex]);
}
else
{
m_DBData.m_Quick.Slots[takeType.m_srcPos.m_cIndex] =
QUICKSLOT(QUICKSLOT::NONE, 0, 0, 0);
}
return true;
}
} break;
}
return false;
}