Files
Client/Server/RylServerProject/RylGameServer/Commands/DropItemCommand.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

64 lines
1.4 KiB
C++

#include "stdafx.h"
#include "Commands.h"
#include <Creature/CreatureManager.h>
#include <Creature/Character/Character.h>
#include <Map/FieldMap/Cell.h>
#include <Item/ItemFactory.h>
CConsoleCommand* CCMDDropItem::Clone(const char* szCommand, size_t nCommandLength)
{
const int MAX_BUFFER = 256;
char szBuffer[MAX_BUFFER + 1];
const char* szDelimiter = " \t\r\n";
_snprintf(szBuffer, MAX_BUFFER, "%s", szCommand);
szBuffer[MAX_BUFFER] = '\0';
char* token = strtok(szBuffer, szDelimiter);
CCMDDropItem* lpCMD = new CCMDDropItem;
if (NULL != lpCMD)
{
token = strtok(NULL, szDelimiter);
_snprintf(lpCMD->m_szName, MAX_NAME, "%s", token);
lpCMD->m_szName[MAX_NAME] = '\0';
token = strtok(NULL, szDelimiter);
lpCMD->m_usItemProtoTypeID = (NULL == token) ? 0 : atoi(token);
}
return lpCMD;
}
bool CCMDDropItem::DoProcess()
{
CCharacter* lpCharacter = CCreatureManager::GetInstance().GetCharacter(m_szName);
if (NULL != lpCharacter)
{
Item::CItem* lpItem = Item::CItemFactory::GetInstance().CreateItem(m_usItemProtoTypeID);
if (NULL != lpItem)
{
if (false == lpCharacter->GiveItem(lpItem))
{
DELETE_ITEM(lpItem);
}
// GievItem À¸·Î ½ºÅÃµÈ °æ¿ì
if (NULL != lpItem)
{
if (lpItem->IsSet(Item::DetailData::STACKABLE) && 0 == lpItem->GetNumOrDurability())
{
DELETE_ITEM(lpItem);
}
}
}
}
return true;
}