forked from metin2/server
86 lines
2.0 KiB
C++
86 lines
2.0 KiB
C++
|
|
||
|
#include "stdafx.h"
|
||
|
#include "desc_client.h"
|
||
|
#include "item_manager.h"
|
||
|
|
||
|
int touch(const char *path)
|
||
|
{
|
||
|
FILE *fp;
|
||
|
|
||
|
if ( !(fp = fopen(path, "a")) )
|
||
|
{
|
||
|
sys_err("touch failed");
|
||
|
return (-1);
|
||
|
}
|
||
|
|
||
|
fclose(fp);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
DWORD ITEM_MANAGER::GetNewID()
|
||
|
{
|
||
|
assert(m_dwCurrentID != 0);
|
||
|
|
||
|
if ( m_dwCurrentID >= m_ItemIDRange.dwMax )
|
||
|
{
|
||
|
if ( m_ItemIDSpareRange.dwMin == 0 || m_ItemIDSpareRange.dwMax == 0 || m_ItemIDSpareRange.dwUsableItemIDMin == 0 )
|
||
|
{
|
||
|
for ( int i=0; i < 10; i++ ) sys_err("ItemIDRange: FATAL ERROR!!! no more item id");
|
||
|
touch(".killscript");
|
||
|
thecore_shutdown();
|
||
|
return 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sys_log(0, "ItemIDRange: First Range is full. Change to SpareRange %u ~ %u %u",
|
||
|
m_ItemIDSpareRange.dwMin, m_ItemIDSpareRange.dwMax, m_ItemIDSpareRange.dwUsableItemIDMin);
|
||
|
|
||
|
db_clientdesc->DBPacket(HEADER_GD_REQ_SPARE_ITEM_ID_RANGE, 0, &m_ItemIDRange.dwMax, sizeof(DWORD));
|
||
|
|
||
|
SetMaxItemID(m_ItemIDSpareRange);
|
||
|
|
||
|
m_ItemIDSpareRange.dwMin = 0;
|
||
|
m_ItemIDSpareRange.dwMax = 0;
|
||
|
m_ItemIDSpareRange.dwUsableItemIDMin = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return (m_dwCurrentID++);
|
||
|
}
|
||
|
|
||
|
bool ITEM_MANAGER::SetMaxItemID(TItemIDRangeTable range)
|
||
|
{
|
||
|
m_ItemIDRange = range;
|
||
|
|
||
|
if ( m_ItemIDRange.dwMin == 0 || m_ItemIDRange.dwMax == 0 || m_ItemIDRange.dwUsableItemIDMin == 0 )
|
||
|
{
|
||
|
for ( int i=0; i < 10; i++ ) sys_err("ItemIDRange: FATAL ERROR!!! ITEM ID RANGE is not set.");
|
||
|
touch(".killscript");
|
||
|
thecore_shutdown();
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
m_dwCurrentID = range.dwUsableItemIDMin;
|
||
|
|
||
|
sys_log(0, "ItemIDRange: %u ~ %u %u", m_ItemIDRange.dwMin, m_ItemIDRange.dwMax, m_dwCurrentID);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
bool ITEM_MANAGER::SetMaxSpareItemID(TItemIDRangeTable range)
|
||
|
{
|
||
|
if ( range.dwMin == 0 || range.dwMax == 0 || range.dwUsableItemIDMin == 0 )
|
||
|
{
|
||
|
for ( int i=0; i < 10; i++ ) sys_err("ItemIDRange: FATAL ERROR!!! Spare ITEM ID RANGE is not set");
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
m_ItemIDSpareRange = range;
|
||
|
|
||
|
sys_log(0, "ItemIDRange: New Spare ItemID Range Recv %u ~ %u %u",
|
||
|
m_ItemIDSpareRange.dwMin, m_ItemIDSpareRange.dwMax, m_ItemIDSpareRange.dwUsableItemIDMin);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|