1
0
forked from metin2/server
server/game/src/over9refine.cpp

111 lines
2.5 KiB
C++
Raw Normal View History

2022-03-05 12:44:06 +02:00
#include "stdafx.h"
#include "constants.h"
#include "log.h"
#include "char.h"
#include "item_manager.h"
#include "item.h"
#include "over9refine.h"
void COver9RefineManager::enableOver9Refine(DWORD dwVnumFrom, DWORD dwVnumTo)
{
m_mapItem.insert(std::make_pair(dwVnumFrom, dwVnumTo));
}
int COver9RefineManager::canOver9Refine(DWORD dwVnum)
{
OVER9ITEM_MAP::iterator iter = m_mapItem.find(dwVnum);
if (iter != m_mapItem.end())
return 1;
if (dwVnum % 10 == 9)
return 0;
dwVnum -= dwVnum % 10;
for (iter = m_mapItem.begin(); iter != m_mapItem.end(); ++iter)
if (iter->second == dwVnum)
return 2;
return 0;
}
bool COver9RefineManager::Change9ToOver9(LPCHARACTER pChar, LPITEM item)
{
OVER9ITEM_MAP::iterator iter = m_mapItem.find(item->GetVnum());
if (iter == m_mapItem.end())
return false;
DWORD dwVnum = iter->second;
LPITEM over9 = ITEM_MANAGER::instance().CreateItem(dwVnum, 1);
if (over9 == NULL)
return false;
item->CopySocketTo(over9);
item->CopyAttributeTo(over9);
int iEmptyCell = pChar->GetEmptyInventory(over9->GetSize());
if (iEmptyCell == -1)
return false;
item->RemoveFromCharacter();
over9->AddToCharacter(pChar, TItemPos(INVENTORY, iEmptyCell));
char szBuf[256];
snprintf(szBuf, sizeof(szBuf), "SUCCESS %u %s %u", over9->GetID(), over9->GetName(), over9->GetOriginalVnum());
LogManager::instance().ItemLog(pChar, item, "REFINE OVER9", szBuf);
return true;
}
bool COver9RefineManager::Over9Refine(LPCHARACTER pChar, LPITEM item)
{
DWORD dwVnum = item->GetRefinedVnum();
if (dwVnum == 0)
return false;
LPITEM over9 = ITEM_MANAGER::instance().CreateItem(dwVnum, 1);
if (over9 == NULL)
return false;
item->CopySocketTo(over9);
item->CopyAttributeTo(over9);
int iEmptyCell = pChar->GetEmptyInventory(over9->GetSize());
if (iEmptyCell == -1)
return false;
item->RemoveFromCharacter();
over9->AddToCharacter(pChar, TItemPos(INVENTORY, iEmptyCell));
char szBuf[256];
snprintf(szBuf, sizeof(szBuf), "SUCCESS %u %s %u", over9->GetID(), over9->GetName(), over9->GetOriginalVnum());
LogManager::instance().ItemLog(pChar, item, "REFINE OVER9", szBuf);
return true;
}
DWORD COver9RefineManager::GetMaterialVnum(DWORD baseVnum)
{
OVER9ITEM_MAP::iterator iter = m_mapItem.find(baseVnum);
if (iter != m_mapItem.end())
return (baseVnum - (baseVnum % 10));
baseVnum -= baseVnum % 10;
for (iter = m_mapItem.begin(); iter != m_mapItem.end(); ++iter)
if (iter->second == baseVnum)
return (iter->first - (iter->first % 10));
return 0;
}