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>
This commit is contained in:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View File

@@ -0,0 +1,336 @@
#include "stdafx.h"
#include <Creature/Character/Character.h>
#include <Item/Container/ContainerConstant.h>
#include "InventoryContainer.h"
using namespace Item;
CInventoryContainer::CInventoryContainer()
: m_bAdminToolFlag(false)
{
}
CInventoryContainer::~CInventoryContainer()
{
}
bool CInventoryContainer::SetItem(ItemPos itemPos, CItem* lpItem)
{
if (false == m_bAdminToolFlag)
{
CCharacter* lpCharacter = CCreatureManager::GetInstance().GetCharacter(m_dwCID);
if (NULL == lpCharacter)
{
return false;
}
// <20><><EFBFBD><EFBFBD>Ʈ Ʈ<><C6AE><EFBFBD><EFBFBD> <20>ߵ<EFBFBD>
short wCount = (true == lpItem->IsSet(Item::DetailData::STACKABLE)) ? lpItem->GetNumOrDurability() : 1;
lpCharacter->CheckTrigger(Quest::TRIGGER_PICK, lpItem->GetPrototypeID(), Position(), wCount);
}
if (NULL == lpItem)
{
ERRLOG1(g_Log, "CID:%10u <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NULL<4C>Դϴ<D4B4>.", m_dwCID);
return false;
}
unsigned char cX, cY, cTab;
itemPos.GetPos(cX, cY, cTab);
// <20><><EFBFBD><EFBFBD>Ʈ <20><> üũ
unsigned char cItemType = lpItem->GetItemInfo().m_DetailData.m_cItemType;
/*
// edith 2008.06.04 <20>κ<EFBFBD><CEBA><20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
if ((Item::ItemType::QUEST_ITEM == cItemType && ContainerConstant::QUEST_INVENTORY_TAB != cTab) ||
(Item::ItemType::QUEST_ITEM != cItemType && ContainerConstant::QUEST_INVENTORY_TAB == cTab))
{
ERRLOG4(g_Log, "CID:%10u <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20>´<EFBFBD> <20>ùٸ<C3B9> <20><><EFBFBD><EFBFBD> <20>ƴմϴ<D5B4>. ItemType:%d, Tab:%d/%d",
m_dwCID, cItemType, cTab, m_nTabNum);
return false;
}
*/
unsigned char cXSize = lpItem->GetItemInfo().m_DetailData.m_cXSize;
unsigned char cYSize = lpItem->GetItemInfo().m_DetailData.m_cYSize;
if (m_nXSize < static_cast<size_t>(cX + cXSize) ||
m_nYSize < static_cast<size_t>(cY + cYSize) || m_nTabNum <= cTab)
{
ERRLOG9(g_Log, "CID:%10u <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><> ũ<><20>ùٸ<C3B9><D9B8><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. "
"X:%d/%d, Y:%d/%d, Tab:%d/%d, Xũ<58><C5A9>:%d, Yũ<59><C5A9>:%d",
m_dwCID, cX, m_nXSize, cY, m_nYSize, cTab, m_nTabNum, cXSize, cYSize);
return false;
}
CItem** lppItemYIndexPastEnd = m_lppItems + m_nSizePerTab * cTab + m_nXSize * (cY + cYSize);
CItem **lppItemYIndex, **lppItemXIndex, **lppItemXIndexPastEnd;
for (lppItemYIndex = m_lppItems + m_nSizePerTab * cTab + cY * m_nXSize;
lppItemYIndex != lppItemYIndexPastEnd; lppItemYIndex += m_nXSize)
{
lppItemXIndexPastEnd = lppItemYIndex + cX + cXSize;
for (lppItemXIndex = lppItemYIndex + cX;
lppItemXIndex != lppItemXIndexPastEnd; ++lppItemXIndex)
{
if (0 != *lppItemXIndex)
{
ERRLOG4(g_Log, "CID:%10u (%d,%d,%d) <20>̹<EFBFBD> <20><> <20><><EFBFBD>ҿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>.",
m_dwCID, cX, cY, cTab);
return false;
}
}
}
for (lppItemYIndex = m_lppItems + m_nSizePerTab * cTab + cY * m_nXSize;
lppItemYIndex != lppItemYIndexPastEnd; lppItemYIndex += m_nXSize)
{
lppItemXIndexPastEnd = lppItemYIndex + cX + cXSize;
for (lppItemXIndex = lppItemYIndex + cX;
lppItemXIndex != lppItemXIndexPastEnd; ++lppItemXIndex)
{
*lppItemXIndex = m_lpNullItem;
}
}
m_lppItems[m_nSizePerTab * cTab + m_nXSize * cY + cX] = lpItem;
lpItem->MoveItem(itemPos);
return true;
}
bool CInventoryContainer::TestItem(ItemPos itemPos, unsigned short usProtoTypeID, unsigned char cNum)
{
const Item::ItemInfo* lpItemInfo = CItemMgr::GetInstance().GetItemInfo(usProtoTypeID);
if (NULL == lpItemInfo)
{
ERRLOG2(g_Log, "CID:%10u <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ID<49><44> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>. usProtoTypeID:%d",
m_dwCID, usProtoTypeID);
return false;
}
unsigned char cX, cY, cTab;
itemPos.GetPos(cX, cY, cTab);
// <20><><EFBFBD><EFBFBD>Ʈ <20><> üũ
unsigned char cItemType = lpItemInfo->m_DetailData.m_cItemType;
/*
// edith 2008.06.04 <20>κ<EFBFBD><CEBA><20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
if ((Item::ItemType::QUEST_ITEM == cItemType && ContainerConstant::QUEST_INVENTORY_TAB != cTab) ||
(Item::ItemType::QUEST_ITEM != cItemType && ContainerConstant::QUEST_INVENTORY_TAB == cTab))
{
ERRLOG4(g_Log, "CID:%10u <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20>´<EFBFBD> <20>ùٸ<C3B9> <20><><EFBFBD><EFBFBD> <20>ƴմϴ<D5B4>. ItemType:%d, Tab:%d/%d",
m_dwCID, cItemType, cTab, m_nTabNum);
return false;
}
*/
unsigned char cXSize = lpItemInfo->m_DetailData.m_cXSize;
unsigned char cYSize = lpItemInfo->m_DetailData.m_cYSize;
if (m_nXSize < static_cast<size_t>(cX + cXSize) ||
m_nYSize < static_cast<size_t>(cY + cYSize) || m_nTabNum <= cTab)
{
ERRLOG9(g_Log, "CID:%10u <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><> ũ<><20>ùٸ<C3B9><D9B8><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>. "
"X:%d/%d, Y:%d/%d, Tab:%d/%d, Xũ<58><C5A9>:%d, Yũ<59><C5A9>:%d",
m_dwCID, cX, m_nXSize, cY, m_nYSize, cTab, m_nTabNum, cXSize, cYSize);
return false;
}
CItem** lppItemYIndexPastEnd = m_lppItems + m_nSizePerTab * cTab + m_nXSize * (cY + cYSize);
CItem **lppItemYIndex, **lppItemXIndex, **lppItemXIndexPastEnd;
for (lppItemYIndex = m_lppItems + m_nSizePerTab * cTab + cY * m_nXSize;
lppItemYIndex != lppItemYIndexPastEnd; lppItemYIndex += m_nXSize)
{
lppItemXIndexPastEnd = lppItemYIndex + cX + cXSize;
for (lppItemXIndex = lppItemYIndex + cX;
lppItemXIndex != lppItemXIndexPastEnd; ++lppItemXIndex)
{
CItem* lpPreItem = *lppItemXIndex;
if (NULL != lpPreItem)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if (true == lpPreItem->IsSet(DetailData::STACKABLE))
{
if (lpPreItem->GetItemInfo().m_usProtoTypeID == usProtoTypeID)
{
if (lpPreItem->GetNumOrDurability() + cNum <= lpPreItem->GetMaxNumOrDurability())
{
return true;
}
}
}
ERRLOG4(g_Log, "CID:%10u (%d,%d,%d) <20>̹<EFBFBD> <20><> <20><><EFBFBD>ҿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ְ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.",
m_dwCID, cX, cY, cTab);
return false;
}
}
}
return true;
}
bool CInventoryContainer::RemoveItem(ItemPos itemPos)
{
CItem* lpItem = GetItem(itemPos);
if (NULL == lpItem)
{
return false;
}
if (false == m_bAdminToolFlag)
{
CCharacter* lpCharacter = CCreatureManager::GetInstance().GetCharacter(m_dwCID);
if (NULL == lpCharacter)
{
return false;
}
// <20><><EFBFBD><EFBFBD>Ʈ Ʈ<><C6AE><EFBFBD><EFBFBD> <20>ߵ<EFBFBD>
short wCount = (true == lpItem->IsSet(Item::DetailData::STACKABLE)) ? lpItem->GetNumOrDurability() * (-1) : -1;
lpCharacter->CheckTrigger(Quest::TRIGGER_PICK, lpItem->GetPrototypeID(), Position(), wCount);
}
return CArrayContainer::RemoveItem(itemPos);
}
ItemPos CInventoryContainer::GetBlankPos(unsigned short wProtoTypeID, unsigned char cNum, bool bStack, CItem** ppPrevItem)
{
Item::ItemPos DstPos;
DstPos.m_cPos = TakeType::TS_NONE;
const Item::ItemInfo* lpItemInfo = Item::CItemMgr::GetInstance().GetItemInfo(wProtoTypeID);
if (NULL != lpItemInfo)
{
unsigned char cHeight, cWidth, cTab;
unsigned char cXSize = lpItemInfo->m_DetailData.m_cXSize;
unsigned char cYSize = lpItemInfo->m_DetailData.m_cYSize;
// <20><><EFBFBD><EFBFBD>Ʈ <20><> üũ
unsigned char cItemType = lpItemInfo->m_DetailData.m_cItemType;
unsigned char cStartTab = 0;
unsigned char cEndTab = m_nTabNum;
/*
// edith 2008.06.04 <20>κ<EFBFBD><CEBA><20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
unsigned char cEndTab = m_nTabNum - 1;
if (Item::ItemType::QUEST_ITEM == cItemType)
{
cStartTab = m_nTabNum - 1;
cEndTab = m_nTabNum;
}
*/
if (DetailData::STACKABLE == (lpItemInfo->m_DetailData.m_dwFlags & DetailData::STACKABLE) && true == bStack)
{
// <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ°<D6B4> ã<>´<EFBFBD>.
for (cTab = cStartTab; cTab < cEndTab; ++cTab)
{
for (cHeight = 0; cHeight < m_nYSize; ++cHeight)
{
if (cHeight + cYSize> m_nYSize)
{
// YSize<7A><65> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EEB3AA> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
break;
}
for (cWidth = 0; cWidth < m_nXSize; ++cWidth)
{
if (cWidth + cXSize > m_nXSize)
{
// XSize<7A><65> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EEB3AA> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
break;
}
CItem* lpItem = m_lppItems[m_nSizePerTab * cTab + m_nXSize * cHeight + cWidth];
if (NULL != lpItem)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>.
if (false == lpItem->IsSet(DetailData::EQUIP))
{
// <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>, ȹ<><C8B9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD>, Max <20><><EFBFBD><EFBFBD> <20>ƴ϶<C6B4><CFB6><EFBFBD>,
// <20>ش<EFBFBD> <20>ڸ<EFBFBD><DAB8><EFBFBD> <20><><EFBFBD>ý<EFBFBD>Ų<EFBFBD><C5B2>.
if (lpItem->GetItemInfo().m_usProtoTypeID == wProtoTypeID)
{
if (lpItem->GetNumOrDurability() + cNum <= lpItem->GetMaxNumOrDurability())
{
*ppPrevItem = lpItem;
DstPos.m_cPos = TakeType::TS_INVEN;
DstPos.SetPos(cWidth, cHeight, cTab);
return DstPos;
}
}
}
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ų<EFBFBD>, <20>ٸ<EFBFBD><D9B8>ų<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>´<EFBFBD>.
}
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>´<EFBFBD>.
for (cTab = cStartTab; cTab < cEndTab; ++cTab)
{
for (cHeight = 0; cHeight < m_nYSize; ++cHeight)
{
if (cHeight + cYSize> m_nYSize)
{
// YSize<7A><65> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EEB3AA> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
break;
}
for (cWidth = 0; cWidth < m_nXSize; ++cWidth)
{
if (cWidth + cXSize > m_nXSize)
{
// XSize<7A><65> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EEB3AA> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
break;
}
CItem* lpItem = m_lppItems[m_nSizePerTab * cTab + m_nXSize * cHeight + cWidth];
if (NULL == lpItem)
{
unsigned char cX, cY;
lpItem = NULL;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ĭ<≯<EFBFBD> ũ<><20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD> üũ
for (cX = cWidth; cX < cWidth + cXSize; ++cX)
{
for (cY = cHeight; cY < cHeight + cYSize; ++cY)
{
lpItem = m_lppItems[m_nSizePerTab * cTab + m_nXSize * cY + cX];
if (NULL != lpItem)
{
break;
}
}
if (NULL != lpItem)
{
break;
}
}
if (NULL == lpItem)
{
DstPos.m_cPos = TakeType::TS_INVEN;
DstPos.SetPos(cWidth, cHeight, cTab);
return DstPos;
}
}
}
}
}
}
return DstPos;
}