forked from metin2/server
111 lines
2.5 KiB
C++
111 lines
2.5 KiB
C++
#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;
|
|
}
|
|
|