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:
32
Server/DBProcess/RebalanceConverter/ReadMe.txt
Normal file
32
Server/DBProcess/RebalanceConverter/ReadMe.txt
Normal file
@@ -0,0 +1,32 @@
|
||||
========================================================================
|
||||
<20>ܼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1> : RebalanceConverter <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
========================================================================
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD>翡<EFBFBD><E7BFA1> <20><> RebalanceConverter <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
<EFBFBD><EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> RebalanceConverter <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ԵǾ<D4B5> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>.
|
||||
|
||||
|
||||
RebalanceConverter.vcproj
|
||||
<20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD>縦 <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> VC++ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20>⺻ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
||||
<20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Visual C++<2B><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD>翡<EFBFBD><E7BFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>ɿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֽ<EFBFBD><D6BD>ϴ<EFBFBD>.
|
||||
|
||||
RebalanceConverter.cpp
|
||||
<20>⺻ <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1> <20>ҽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
<EFBFBD><EFBFBD>Ÿ ǥ<><C7A5> <20><><EFBFBD><EFBFBD>:
|
||||
|
||||
StdAfx.h <20><> StdAfx.cpp<70><70>
|
||||
RebalanceConverter.pch<63><68><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> PCH(<28≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD>) <20><><EFBFBD>ϰ<EFBFBD>
|
||||
StdAfx.obj<62><6A><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>˴ϴ<CBB4>.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
<EFBFBD><EFBFBD>Ÿ <20><><EFBFBD><EFBFBD>:
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD>翡<EFBFBD><E7BFA1> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> "TODO:" <20>ּ<EFBFBD><D6BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20>߰<EFBFBD><DFB0>ϰų<CFB0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>ϴ<EFBFBD>
|
||||
<EFBFBD>ҽ<EFBFBD> <20>ڵ<EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD>ϴ<EFBFBD>.
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
721
Server/DBProcess/RebalanceConverter/Rebalance.cpp
Normal file
721
Server/DBProcess/RebalanceConverter/Rebalance.cpp
Normal file
@@ -0,0 +1,721 @@
|
||||
#include "stdafx.h"
|
||||
#include "Rebalance.h"
|
||||
|
||||
#include <Item/ItemMgr.h>
|
||||
#include <Item/Container/ContainerConstant.h>
|
||||
#include <Item/RebalanceConvert/RebalanceItem.h>
|
||||
#include <Item/RebalanceConvert/ContainerChecker.h>
|
||||
#include <Item/RebalanceConvert/OldItemMgr.h>
|
||||
|
||||
#include <Network/Packet/PacketStruct/ServerInfo.h>
|
||||
#include <Log/ServerLog.h>
|
||||
|
||||
#include <Skill/SkillMgr.h>
|
||||
|
||||
#include <RylDBLibrary/RylDBCharCommand.h>
|
||||
#include <RylDBLibrary/RylDBStoreCommand.h>
|
||||
|
||||
|
||||
namespace RebalanceLib
|
||||
{
|
||||
|
||||
CServerLog g_ItemLog("ItemUID");
|
||||
CServerLog g_GoldLog("GivenGold");
|
||||
CServerLog g_SkillBookLog("GivenSkillBook");
|
||||
|
||||
// <20><>ų <20>б<EFBFBD>
|
||||
CDBReadSkill::CDBReadSkill(SkillDataMap& CIDSkillDataMap, bool bClearSkill)
|
||||
: m_CIDSkillDataMap(CIDSkillDataMap), m_bClearSkill(bClearSkill)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
ConvertResult CDBReadSkill::operator()(RylDBCommand::CSkillData& charSkillData_InOut)
|
||||
{
|
||||
SkillBookInfo skillData;
|
||||
memset(&skillData, 0, sizeof(SkillBookInfo));
|
||||
|
||||
const SKILL& skill_In = charSkillData_InOut.GetSkill();
|
||||
|
||||
for(int nSkillCount = 0; nSkillCount < skill_In.wSlotNum; ++nSkillCount)
|
||||
{
|
||||
const SKILLSLOT& skillSlot = skill_In.SSlot[nSkillCount];
|
||||
|
||||
if (skillSlot.SKILLINFO.cLockCount < CSkillMgr::MAX_SKILL_LOCKCOUNT &&
|
||||
skillSlot.SKILLINFO.cSkillLevel <= CSkillMgr::MAX_SKILL_LEVEL)
|
||||
{
|
||||
// <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
for(int nLockCount = 0; nLockCount < skillSlot.SKILLINFO.cLockCount; ++nLockCount)
|
||||
{
|
||||
skillData.m_dwBookNum[nLockCount] += CSkillMgr::MAX_SKILL_LEVEL;
|
||||
}
|
||||
|
||||
skillData.m_dwBookNum[skillSlot.SKILLINFO.cLockCount] +=
|
||||
skillSlot.SKILLINFO.cSkillLevel;
|
||||
}
|
||||
else
|
||||
{
|
||||
ERRLOG4(g_Log, "CID:%10u / Skill_ID:0x%04X / LockCount:%6d / Level:%6d / <20><> <20><> <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD>Դϴ<D4B4>.",
|
||||
charSkillData_InOut.GetCID(), skillSlot.SKILLINFO.wSkill,
|
||||
skillSlot.SKILLINFO.cLockCount, skillSlot.SKILLINFO.cSkillLevel);
|
||||
}
|
||||
}
|
||||
|
||||
if(m_bClearSkill)
|
||||
{
|
||||
SKILL skill_Out;
|
||||
memset(&skill_Out, 0, sizeof(SKILL));
|
||||
charSkillData_InOut.SetSkill(skill_Out);
|
||||
}
|
||||
|
||||
m_CIDSkillDataMap.insert(std::make_pair(charSkillData_InOut.GetCID(), skillData));
|
||||
return m_bClearSkill ? CONVERT_SUCCEEDED : CONVERT_DO_NOT_WRITE;
|
||||
}
|
||||
|
||||
|
||||
// <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD> <20><> ī<><C4AB><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
CDBItemConvert::CDBItemConvert(CDBItemSerialMgr& dbItemSerialMgr,
|
||||
Item::CItemMgr& newItemMgr, OldItem::CItemMgr& oldItemMgr,
|
||||
SkillDataMap* lpUIDSkillDataMap, SkillDataMap* lpCIDSkillDataMap,
|
||||
bool bConvertRebalanceItem, bool bRenumberingItemUID)
|
||||
: m_DBItemSerialMgr(dbItemSerialMgr),
|
||||
m_newItemMgr(newItemMgr), m_oldItemMgr(oldItemMgr),
|
||||
m_lpUIDSkillDataMap(lpUIDSkillDataMap), m_lpCIDSkillDataMap(lpCIDSkillDataMap),
|
||||
m_bConvertRebalanceItem(bConvertRebalanceItem),
|
||||
m_bRenumberingItemUID(bRenumberingItemUID)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
ConvertResult CDBItemConvert::operator()(RylDBCommand::CCharItem& charItem_InOut)
|
||||
{
|
||||
CItemArrayChecker<
|
||||
ContainerConstant::INVENTORY_WIDTH,
|
||||
ContainerConstant::INVENTORY_HEIGHT,
|
||||
ContainerConstant::MAX_INVENTORY_TAB> invenChecker(TakeType::TS_INVEN);
|
||||
|
||||
unsigned long dwCID = charItem_InOut.GetCID();
|
||||
|
||||
const EQUIP& equip_In = charItem_InOut.GetEquip();
|
||||
const INVEN& inven_In = charItem_InOut.GetInven();
|
||||
const EXTRA& extra_In = charItem_InOut.GetExtra();
|
||||
|
||||
EQUIP equip_Out;
|
||||
INVEN inven_Out;
|
||||
EXTRA extra_Out;
|
||||
|
||||
memset(&equip_Out, 0, sizeof(EQUIP));
|
||||
memset(&inven_Out, 0, sizeof(INVEN));
|
||||
memset(&extra_Out, 0, sizeof(EXTRA));
|
||||
|
||||
equip_Out.dwSize = EQUIP::MAX_EQUIP_SIZE;
|
||||
inven_Out.dwSize = INVEN::MAX_INVEN_SIZE;
|
||||
extra_Out.dwSize = EXTRA::MAX_EXTRA_SIZE;
|
||||
|
||||
if(!ConvertData(0, dwCID, 0,
|
||||
equip_In.Data, equip_In.dwSize, equip_Out.Data, equip_Out.dwSize))
|
||||
{
|
||||
ERRLOG1(g_Log, "CID:%10u / Equip convert failed", dwCID);
|
||||
}
|
||||
else if(!ConvertData(0, dwCID, 0,
|
||||
extra_In.Data, extra_In.dwSize, extra_Out.Data, extra_Out.dwSize))
|
||||
{
|
||||
ERRLOG1(g_Log, "CID:%10u / Extra convert failed", dwCID);
|
||||
}
|
||||
else if(!ConvertData(0, dwCID, &invenChecker,
|
||||
inven_In.Data, inven_In.dwSize, inven_Out.Data, inven_Out.dwSize))
|
||||
{
|
||||
ERRLOG1(g_Log, "CID:%10u / Inventory convert failed", dwCID);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(0 != m_lpCIDSkillDataMap)
|
||||
{
|
||||
SkillDataMap::iterator pos = m_lpCIDSkillDataMap->find(dwCID);
|
||||
SkillDataMap::iterator end = m_lpCIDSkillDataMap->end();
|
||||
|
||||
// <20>κ<EFBFBD>, â<><C3A2>, Tempâ<70><C3A2> <20><><EFBFBD>쿡, 3, 4<>ܰ<EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD> <20>ش<EFBFBD>.
|
||||
if(pos != end)
|
||||
{
|
||||
unsigned long dwDataSize = INVEN::MAX_INVEN_SIZE - inven_Out.dwSize;
|
||||
|
||||
GiveSkillBook(0, dwCID, m_DBItemSerialMgr, pos->second,
|
||||
invenChecker, "[INVEN]", inven_Out.Data + inven_Out.dwSize, dwDataSize);
|
||||
|
||||
inven_Out.dwSize += dwDataSize;
|
||||
}
|
||||
}
|
||||
|
||||
charItem_InOut.SetEquip(equip_Out);
|
||||
charItem_InOut.SetInven(inven_Out);
|
||||
charItem_InOut.SetExtra(extra_Out);
|
||||
|
||||
return CONVERT_SUCCEEDED;
|
||||
}
|
||||
|
||||
return CONVERT_FAILED;
|
||||
}
|
||||
|
||||
ConvertResult CDBItemConvert::operator()(RylDBCommand::CCharItemEx& charItemEx_InOut)
|
||||
{
|
||||
CItemListChecker<Item::MAX_TEMP_INVEN_ITEM_NUM> tempInvenChecker(TakeType::TS_TEMPINVEN);
|
||||
|
||||
unsigned long dwCID = charItemEx_InOut.GetCID();
|
||||
|
||||
const EXCHANGE& exchange_In = charItemEx_InOut.GetExchange();
|
||||
const TEMPINVEN& tempInven_In = charItemEx_InOut.GetTempInven();
|
||||
|
||||
EXCHANGE exchange_Out;
|
||||
TEMPINVEN tempInven_Out;
|
||||
|
||||
memset(&exchange_Out, 0, sizeof(EXCHANGE));
|
||||
memset(&tempInven_Out, 0, sizeof(TEMPINVEN));
|
||||
|
||||
exchange_Out.dwSize = EXCHANGE::MAX_EXCHANGE_SIZE;
|
||||
tempInven_Out.dwSize = TEMPINVEN::MAX_TEMPINVEN_SIZE;
|
||||
|
||||
if(!ConvertData(0, dwCID, 0,
|
||||
exchange_In.Data, exchange_In.dwSize, exchange_Out.Data, exchange_Out.dwSize))
|
||||
{
|
||||
ERRLOG1(g_Log, "CID:%10u / Exchange convert failed", dwCID);
|
||||
}
|
||||
else if(!ConvertData(0, dwCID, &tempInvenChecker,
|
||||
tempInven_In.Data, tempInven_In.dwSize, tempInven_Out.Data, tempInven_Out.dwSize))
|
||||
{
|
||||
ERRLOG1(g_Log, "CID:%10u / TempInven convert failed", dwCID);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(0 != m_lpCIDSkillDataMap)
|
||||
{
|
||||
SkillDataMap::iterator pos = m_lpCIDSkillDataMap->find(dwCID);
|
||||
SkillDataMap::iterator end = m_lpCIDSkillDataMap->end();
|
||||
|
||||
// <20>κ<EFBFBD>, â<><C3A2>, Tempâ<70><C3A2> <20><><EFBFBD>쿡, 3, 4<>ܰ<EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD> <20>ش<EFBFBD>.
|
||||
if(pos != end)
|
||||
{
|
||||
unsigned long dwDataSize = TEMPINVEN::MAX_TEMPINVEN_SIZE - tempInven_Out.dwSize;
|
||||
|
||||
GiveSkillBook(0, dwCID, m_DBItemSerialMgr, pos->second,
|
||||
tempInvenChecker, "[TEMPINVEN]",
|
||||
tempInven_Out.Data + tempInven_Out.dwSize, dwDataSize);
|
||||
|
||||
tempInven_Out.dwSize += dwDataSize;
|
||||
}
|
||||
}
|
||||
|
||||
charItemEx_InOut.SetExchange(exchange_Out);
|
||||
charItemEx_InOut.SetTempInven(tempInven_Out);
|
||||
|
||||
return CONVERT_SUCCEEDED;
|
||||
}
|
||||
|
||||
return CONVERT_FAILED;
|
||||
}
|
||||
|
||||
ConvertResult CDBItemConvert::operator()(RylDBCommand::CUnifiedStore1& unifiedStore1_InOut)
|
||||
{
|
||||
CItemArrayChecker<
|
||||
ContainerConstant::DEPOSIT_WIDTH,
|
||||
ContainerConstant::DEPOSIT_HEIGHT,
|
||||
ContainerConstant::MAX_DEPOSIT_TAB> storeChecker(TakeType::TS_DEPOSIT);
|
||||
|
||||
storeChecker.FillTab(2);
|
||||
storeChecker.FillTab(3);
|
||||
|
||||
unsigned long dwUID = unifiedStore1_InOut.GetUID();
|
||||
|
||||
const STORE& store_In = unifiedStore1_InOut.GetStore();
|
||||
STORE store_Out;
|
||||
memset(&store_Out, 0, sizeof(STORE));
|
||||
|
||||
store_Out.dwSize = STORE::MAX_STORE_SIZE;
|
||||
|
||||
if(!ConvertData(dwUID, 0, &storeChecker,
|
||||
store_In.Data, store_In.dwSize, store_Out.Data, store_Out.dwSize))
|
||||
{
|
||||
ERRLOG2(g_Log, "UID:%10u / OldServerGroupID:%d / UnifiedStore convert failed",
|
||||
dwUID, unifiedStore1_InOut.GetOldServerGroupID());
|
||||
}
|
||||
else
|
||||
{
|
||||
if(0 != m_lpUIDSkillDataMap)
|
||||
{
|
||||
SkillDataMap::iterator pos = m_lpUIDSkillDataMap->find(dwUID);
|
||||
SkillDataMap::iterator end = m_lpUIDSkillDataMap->end();
|
||||
|
||||
// <20>κ<EFBFBD>, â<><C3A2>, Tempâ<70><C3A2> <20><><EFBFBD>쿡, 3, 4<>ܰ<EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD> <20>ش<EFBFBD>.
|
||||
if(pos != end)
|
||||
{
|
||||
unsigned long dwDataSize = STORE::MAX_STORE_SIZE - store_Out.dwSize;
|
||||
|
||||
GiveSkillBook(dwUID, 0, m_DBItemSerialMgr, pos->second,
|
||||
storeChecker, "[UNIFIED_STORE1]", store_Out.Data + store_Out.dwSize, dwDataSize);
|
||||
|
||||
store_Out.dwSize += dwDataSize;
|
||||
}
|
||||
}
|
||||
|
||||
unifiedStore1_InOut.SetStore(store_Out);
|
||||
return CONVERT_SUCCEEDED;
|
||||
}
|
||||
|
||||
return CONVERT_FAILED;
|
||||
}
|
||||
|
||||
ConvertResult CDBItemConvert::operator()(RylDBCommand::CUnifiedStore2& unifiedStore2_InOut)
|
||||
{
|
||||
CItemArrayChecker<
|
||||
ContainerConstant::DEPOSIT_WIDTH,
|
||||
ContainerConstant::DEPOSIT_HEIGHT,
|
||||
ContainerConstant::MAX_DEPOSIT_TAB> storeChecker(TakeType::TS_DEPOSIT);
|
||||
|
||||
storeChecker.FillTab(0);
|
||||
storeChecker.FillTab(1);
|
||||
|
||||
unsigned long dwUID = unifiedStore2_InOut.GetUID();
|
||||
|
||||
const STORE& store_In = unifiedStore2_InOut.GetStore();
|
||||
|
||||
STORE store_Out;
|
||||
memset(&store_Out, 0, sizeof(STORE));
|
||||
|
||||
store_Out.dwSize = STORE::MAX_STORE_SIZE;
|
||||
|
||||
if(!ConvertData(dwUID, 0, &storeChecker,
|
||||
store_In.Data, store_In.dwSize, store_Out.Data, store_Out.dwSize))
|
||||
{
|
||||
ERRLOG2(g_Log, "UID:%10u / OldServerGroupID:%d / Store convert failed",
|
||||
dwUID, unifiedStore2_InOut.GetOldServerGroupID());
|
||||
}
|
||||
else
|
||||
{
|
||||
if(0 != m_lpUIDSkillDataMap)
|
||||
{
|
||||
SkillDataMap::iterator pos = m_lpUIDSkillDataMap->find(dwUID);
|
||||
SkillDataMap::iterator end = m_lpUIDSkillDataMap->end();
|
||||
|
||||
// <20>κ<EFBFBD>, â<><C3A2>, Tempâ<70><C3A2> <20><><EFBFBD>쿡, 3, 4<>ܰ<EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD> <20>ش<EFBFBD>.
|
||||
if(pos != end)
|
||||
{
|
||||
unsigned long dwDataSize = STORE::MAX_STORE_SIZE - store_Out.dwSize;
|
||||
|
||||
GiveSkillBook(dwUID, 0, m_DBItemSerialMgr, pos->second,
|
||||
storeChecker, "[UNIFIED_STORE2]", store_Out.Data + store_Out.dwSize, dwDataSize);
|
||||
|
||||
store_Out.dwSize += dwDataSize;
|
||||
}
|
||||
}
|
||||
|
||||
unifiedStore2_InOut.SetStore(store_Out);
|
||||
return CONVERT_SUCCEEDED;
|
||||
}
|
||||
|
||||
return CONVERT_FAILED;
|
||||
}
|
||||
|
||||
|
||||
bool CDBItemConvert::ConvertData(unsigned long dwUID, unsigned long dwCID, CItemChecker* lpItemChecker,
|
||||
const char* szOriginalData, unsigned long dwOriginalSize,
|
||||
char* szChangedData, unsigned long& dwChangedSize_InOut)
|
||||
{
|
||||
const char* szPos = szOriginalData;
|
||||
const char* szEnd = szOriginalData + dwOriginalSize;
|
||||
|
||||
char* szResultPos = szChangedData;
|
||||
char* szResultEnd = szChangedData + dwChangedSize_InOut;
|
||||
|
||||
Item::Grade::GradeInfo convertedGrade;
|
||||
|
||||
if(0 != dwUID || 0 != dwCID)
|
||||
{
|
||||
unsigned long dwKey = (0 != dwUID) ? dwUID : dwCID;
|
||||
SkillDataMap* lpSkillDataMap = (0 != dwUID) ? m_lpUIDSkillDataMap : m_lpCIDSkillDataMap;
|
||||
|
||||
SkillDataMap::iterator pos;
|
||||
SkillDataMap::iterator end;
|
||||
|
||||
if(0 != lpSkillDataMap)
|
||||
{
|
||||
pos = lpSkillDataMap->find(dwKey);
|
||||
if(pos == lpSkillDataMap->end())
|
||||
{
|
||||
SkillBookInfo skillData;
|
||||
memset(&skillData, 0, sizeof(SkillBookInfo));
|
||||
|
||||
pos = lpSkillDataMap->insert(std::make_pair(dwKey, skillData)).first;
|
||||
}
|
||||
}
|
||||
|
||||
for(; szPos < szEnd && szResultPos < szResultEnd; )
|
||||
{
|
||||
const Item::ItemData* lpItemData = reinterpret_cast<const Item::ItemData*>(szPos);
|
||||
Item::ItemData* lpResultItemData = reinterpret_cast<Item::ItemData*>(szResultPos);
|
||||
|
||||
const Item::ItemInfo* lpNewItemInfo = m_newItemMgr.GetItemInfo(lpItemData->m_usProtoTypeID);
|
||||
const OldItem::ItemInfo* lpOldItemInfo = m_oldItemMgr.GetItemInfo(lpItemData->m_usProtoTypeID);
|
||||
|
||||
if(0 == lpNewItemInfo || 0 == lpOldItemInfo)
|
||||
{
|
||||
ERRLOG4(g_Log, "UID:%10u / CID:%10u / Serial:0x%016I64X / ProtoType:%6d / Script has not this item",
|
||||
dwUID, dwCID, lpItemData->m_dwUID, lpItemData->m_usProtoTypeID);
|
||||
}
|
||||
else if(m_bConvertRebalanceItem &&
|
||||
0 != (lpNewItemInfo->m_DetailData.m_dwFlags & Item::DetailData::EQUIP) &&
|
||||
sizeof(Item::ItemData) + sizeof(Item::EquipmentInfo) <= lpItemData->m_cItemSize)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
unsigned long dwDataSize_InOut =
|
||||
static_cast<unsigned long>(szResultEnd - szResultPos);
|
||||
|
||||
if(ConvertRebalanceItem(dwUID, dwCID, lpItemData, *lpNewItemInfo, *lpOldItemInfo,
|
||||
szResultPos, dwDataSize_InOut, convertedGrade))
|
||||
{
|
||||
CItemGrade::GetInstance().AddGradeItemNum(convertedGrade.m_eItemGrade);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
if(0 != lpItemChecker)
|
||||
{
|
||||
lpItemChecker->Set(reinterpret_cast<Item::ItemData*>(szResultPos)->m_ItemPos,
|
||||
lpNewItemInfo->m_DetailData.m_cXSize, lpNewItemInfo->m_DetailData.m_cYSize);
|
||||
}
|
||||
|
||||
if(m_bRenumberingItemUID)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned __int64 dwNewItemSerial = m_DBItemSerialMgr.GetNewItemSerial();
|
||||
|
||||
INFLOG4(g_ItemLog, "UID:%10u / CID:%10u / OldItemSerial:0x%016I64X / NewItemSerial:0x%016I64X / Changed item serial",
|
||||
dwUID, dwCID, lpItemData->m_dwUID, dwNewItemSerial);
|
||||
|
||||
lpResultItemData->m_dwUID = dwNewItemSerial;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD><EFBFBD>
|
||||
szResultPos += dwDataSize_InOut;
|
||||
}
|
||||
else
|
||||
{
|
||||
ERRLOG4(g_Log, "UID:%10u / CID:%10u / Serial:0x%016I64X / ProtoType:%6d / Item recreation failed",
|
||||
dwUID, dwCID, lpItemData->m_dwUID, lpItemData->m_usProtoTypeID);
|
||||
}
|
||||
}
|
||||
else if(0 != lpSkillDataMap &&
|
||||
Item::ItemType::SKILL_BOOK == lpNewItemInfo->m_DetailData.m_cItemType)
|
||||
{
|
||||
// <20><>ȯ<EFBFBD><C8AF> <20>迭<EFBFBD><E8BFAD> ī<><C4AB><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
||||
pos->second.m_dwBookNum[lpNewItemInfo->m_UseItemInfo.m_usSkill_LockCount] +=
|
||||
lpItemData->m_cNumOrDurability;
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
if(0 != lpItemChecker)
|
||||
{
|
||||
lpItemChecker->Set(lpItemData->m_ItemPos,
|
||||
lpNewItemInfo->m_DetailData.m_cXSize, lpNewItemInfo->m_DetailData.m_cYSize);
|
||||
}
|
||||
|
||||
// <20>׳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
memcpy(szResultPos, lpItemData, lpItemData->m_cItemSize);
|
||||
szResultPos += lpItemData->m_cItemSize;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if(m_bRenumberingItemUID)
|
||||
{
|
||||
unsigned __int64 dwNewItemSerial = m_DBItemSerialMgr.GetNewItemSerial();
|
||||
|
||||
INFLOG4(g_ItemLog, "UID:%10u / CID:%10u / OldItemSerial:0x%016I64X / NewItemSerial:0x%016I64X / Changed item serial",
|
||||
dwUID, dwCID, lpItemData->m_dwUID, dwNewItemSerial);
|
||||
|
||||
lpResultItemData->m_dwUID = dwNewItemSerial;
|
||||
}
|
||||
}
|
||||
|
||||
szPos += lpItemData->m_cItemSize;
|
||||
}
|
||||
}
|
||||
|
||||
dwChangedSize_InOut = static_cast<unsigned long>(szResultPos - szChangedData);
|
||||
return true;
|
||||
}
|
||||
|
||||
void CDBItemConvert::ChangeSkillBookToGold(SkillDataMap& skillDataMap, GoldDataMap& goldDataMap)
|
||||
{
|
||||
const unsigned long dw1stSkillBookGold = 1000;
|
||||
const unsigned long dw2ndSkillBookGold = 10000;
|
||||
|
||||
SkillDataMap::iterator skill_pos = skillDataMap.begin();
|
||||
SkillDataMap::iterator skill_end = skillDataMap.end();
|
||||
|
||||
GoldDataMap::iterator gold_pos;
|
||||
GoldDataMap::iterator gold_end;
|
||||
|
||||
for(; skill_pos != skill_end; ++skill_pos)
|
||||
{
|
||||
unsigned long dwKey = skill_pos->first;
|
||||
SkillBookInfo& skillData = skill_pos->second;
|
||||
|
||||
unsigned long dwGold =
|
||||
skillData.m_dwBookNum[0] * dw1stSkillBookGold +
|
||||
skillData.m_dwBookNum[1] * dw2ndSkillBookGold;
|
||||
|
||||
// <20><>ȯ<EFBFBD><C8AF> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ.
|
||||
skillData.m_dwBookNum[0] = 0;
|
||||
skillData.m_dwBookNum[1] = 0;
|
||||
|
||||
if(0 < dwGold)
|
||||
{
|
||||
gold_pos = goldDataMap.lower_bound(dwKey);
|
||||
gold_end = goldDataMap.end();
|
||||
|
||||
if(gold_pos != gold_end && gold_pos->first == dwKey)
|
||||
{
|
||||
// <20>̹<EFBFBD> <20>ִ<EFBFBD>.
|
||||
gold_pos->second += dwGold;
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
goldDataMap.insert(gold_pos, std::make_pair(dwKey, dwGold));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CDBItemConvert::GiveSkillBook(unsigned long dwUID, unsigned long dwCID,
|
||||
CDBItemSerialMgr& DBItemSerialMgr, SkillBookInfo& skillData,
|
||||
CItemChecker& itemChecker, const char* szPosition,
|
||||
char* szData_InOut, unsigned long& dwDataSize_InOut)
|
||||
{
|
||||
// <20>̹<EFBFBD> ItemChecker<65><72> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>õǾ<C3B5> <20>ִ<EFBFBD> <20><>Ȳ<EFBFBD>̴<EFBFBD>.
|
||||
|
||||
Item::ItemPos itemPos;
|
||||
|
||||
char* szDataPos = szData_InOut;
|
||||
const char* szDataEnd = szData_InOut + dwDataSize_InOut;
|
||||
|
||||
// 3<>ܰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
while (0 < skillData.m_dwBookNum[2] &&
|
||||
szDataPos + sizeof(Item::ItemData) < szDataEnd &&
|
||||
itemChecker.FindEmptyPos(itemPos, 1, 1))
|
||||
{
|
||||
Item::ItemData skillBook3rd;
|
||||
memset(&skillBook3rd, 0, sizeof(Item::ItemData));
|
||||
|
||||
unsigned char cAmount = 0;
|
||||
|
||||
if (100 < skillData.m_dwBookNum[2])
|
||||
{
|
||||
cAmount = 100;
|
||||
skillData.m_dwBookNum[2] -= 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
cAmount = static_cast<unsigned char>(skillData.m_dwBookNum[2]);
|
||||
skillData.m_dwBookNum[2] = 0;
|
||||
}
|
||||
|
||||
skillBook3rd.m_dwUID = DBItemSerialMgr.GetNewItemSerial();
|
||||
skillBook3rd.m_usProtoTypeID = 3401;
|
||||
skillBook3rd.m_ItemPos = itemPos;
|
||||
skillBook3rd.m_cNumOrDurability = static_cast<unsigned char>(cAmount);
|
||||
skillBook3rd.m_cItemSize = sizeof(Item::ItemData);
|
||||
|
||||
memcpy(szDataPos, &skillBook3rd, sizeof(Item::ItemData));
|
||||
szDataPos += sizeof(Item::ItemData);
|
||||
|
||||
itemChecker.Set(itemPos, 1, 1);
|
||||
|
||||
INFLOG8(g_SkillBookLog, "%s / UID:%10u / CID:%10u / ItemUID:0x%016I64X / PrototypeID:%6d / "
|
||||
"ItemPos:(%d:0x%03X) / Num:%3d / <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||
szPosition, dwUID, dwCID, skillBook3rd.m_dwUID, skillBook3rd.m_usProtoTypeID,
|
||||
skillBook3rd.m_ItemPos.m_cPos, skillBook3rd.m_ItemPos.m_cIndex,
|
||||
skillBook3rd.m_cNumOrDurability);
|
||||
}
|
||||
|
||||
// 4<>ܰ<EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD>
|
||||
while (0 < skillData.m_dwBookNum[3] &&
|
||||
szDataPos + sizeof(Item::ItemData) < szDataEnd &&
|
||||
itemChecker.FindEmptyPos(itemPos, 1, 1))
|
||||
{
|
||||
Item::ItemData skillBook4th;
|
||||
memset(&skillBook4th, 0, sizeof(Item::ItemData));
|
||||
|
||||
unsigned char cAmount = 0;
|
||||
|
||||
if (100 < skillData.m_dwBookNum[3])
|
||||
{
|
||||
cAmount = 100;
|
||||
skillData.m_dwBookNum[3] -= 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
cAmount = static_cast<unsigned char>(skillData.m_dwBookNum[3]);
|
||||
skillData.m_dwBookNum[3] = 0;
|
||||
}
|
||||
|
||||
skillBook4th.m_dwUID = DBItemSerialMgr.GetNewItemSerial();
|
||||
skillBook4th.m_usProtoTypeID = 3402;
|
||||
skillBook4th.m_ItemPos = itemPos;
|
||||
skillBook4th.m_cNumOrDurability = static_cast<unsigned char>(cAmount);
|
||||
skillBook4th.m_cItemSize = sizeof(Item::ItemData);
|
||||
|
||||
memcpy(szDataPos, &skillBook4th, sizeof(Item::ItemData));
|
||||
szDataPos += sizeof(Item::ItemData);
|
||||
|
||||
itemChecker.Set(itemPos, 1, 1);
|
||||
|
||||
INFLOG8(g_SkillBookLog, "%s / UID:%10u / CID:%10u / ItemUID:0x%016I64X / PrototypeID:%6d / "
|
||||
"ItemPos:(%d:0x%03X) / Num:%3d / <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||
szPosition, dwUID, dwCID, skillBook4th.m_dwUID, skillBook4th.m_usProtoTypeID,
|
||||
skillBook4th.m_ItemPos.m_cPos, skillBook4th.m_ItemPos.m_cIndex,
|
||||
skillBook4th.m_cNumOrDurability);
|
||||
}
|
||||
|
||||
dwDataSize_InOut = static_cast<unsigned long>(szDataPos - szData_InOut);
|
||||
}
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD>Ϳ<EFBFBD> <20><> <20>־<EFBFBD><D6BE>ֱ<EFBFBD>
|
||||
CDBAddCharGold::CDBAddCharGold(GoldDataMap& CIDGoldDataMap)
|
||||
: m_CIDGoldDataMap(CIDGoldDataMap)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
ConvertResult CDBAddCharGold::operator()(RylDBCommand::CCharData& charData_InOut)
|
||||
{
|
||||
GoldDataMap::iterator pos = m_CIDGoldDataMap.find(charData_InOut.GetCID());
|
||||
GoldDataMap::iterator end = m_CIDGoldDataMap.end();
|
||||
|
||||
if(pos != end)
|
||||
{
|
||||
unsigned long dwGold = pos->second;
|
||||
unsigned long dwOldGold = charData_InOut.GetGold();
|
||||
unsigned long dwNewGold = dwOldGold;
|
||||
|
||||
if(dwOldGold < ULONG_MAX - dwGold)
|
||||
{
|
||||
dwNewGold += dwGold;
|
||||
}
|
||||
else
|
||||
{
|
||||
INFLOG4(g_Log, "CID:%10u / Gold:%10u / AddGold:%10u / AddGold Overflow. Gold To %10u",
|
||||
charData_InOut.GetCID(), dwOldGold, dwGold, ULONG_MAX);
|
||||
|
||||
dwNewGold = ULONG_MAX;
|
||||
}
|
||||
|
||||
INFLOG4(g_GoldLog, "CID:%10u / OldGold:%10u / NewGold:%10u / AddGold:%10u / Added inventory gold",
|
||||
charData_InOut.GetCID(), dwOldGold, dwNewGold, dwGold);
|
||||
|
||||
charData_InOut.SetGold(dwNewGold);
|
||||
pos->second = 0;
|
||||
|
||||
return CONVERT_SUCCEEDED;
|
||||
}
|
||||
|
||||
return CONVERT_DO_NOT_WRITE;
|
||||
}
|
||||
|
||||
|
||||
// <20><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD> â<><C3A2><EFBFBD><EFBFBD> <20><> <20>־<EFBFBD><D6BE>ֱ<EFBFBD>
|
||||
CDBAddUnifiedStoreGold::CDBAddUnifiedStoreGold(GoldDataMap& UIDGoldDataMap)
|
||||
: m_UIDGoldDataMap(UIDGoldDataMap)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
ConvertResult CDBAddUnifiedStoreGold::operator()(RylDBCommand::CUnifiedStore1& unifiedStore1_InOut)
|
||||
{
|
||||
GoldDataMap::iterator pos = m_UIDGoldDataMap.find(unifiedStore1_InOut.GetUID());
|
||||
GoldDataMap::iterator end = m_UIDGoldDataMap.end();
|
||||
|
||||
if(pos != end)
|
||||
{
|
||||
unsigned long dwGold = pos->second;
|
||||
unsigned long dwOldGold = unifiedStore1_InOut.GetGold();
|
||||
unsigned long dwNewGold = dwOldGold;
|
||||
|
||||
if(dwOldGold < ULONG_MAX - dwGold)
|
||||
{
|
||||
dwNewGold += dwGold;
|
||||
}
|
||||
else
|
||||
{
|
||||
INFLOG5(g_Log, "UID:%10u / ServerGroupID:%d / Gold:%10u / AddGold:%10u / AddGold Overflow. Gold To %10u",
|
||||
unifiedStore1_InOut.GetUID(), unifiedStore1_InOut.GetOldServerGroupID(),
|
||||
dwOldGold, dwGold, ULONG_MAX);
|
||||
|
||||
dwNewGold = ULONG_MAX;
|
||||
}
|
||||
|
||||
INFLOG5(g_GoldLog, "UID:%10u / ServerGroupID:%d / OldGold:%10u / NewGold:%10u / AddGold:%10u / Added store gold",
|
||||
unifiedStore1_InOut.GetUID(), unifiedStore1_InOut.GetOldServerGroupID(),
|
||||
dwOldGold, dwNewGold, dwGold);
|
||||
|
||||
unifiedStore1_InOut.SetGold(dwNewGold);
|
||||
pos->second = 0;
|
||||
|
||||
return CONVERT_SUCCEEDED;
|
||||
}
|
||||
|
||||
return CONVERT_DO_NOT_WRITE;
|
||||
}
|
||||
|
||||
|
||||
ConvertResult CDBAddUnifiedStoreGold::operator()(RylDBCommand::CUnifiedStore2& unifiedStore2_InOut)
|
||||
{
|
||||
return CONVERT_DO_NOT_WRITE;
|
||||
}
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20>α<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LogRemainSkillBook(SkillDataMap& SkillDataMap, const char* szHeader)
|
||||
{
|
||||
SkillDataMap::iterator pos = SkillDataMap.begin();
|
||||
SkillDataMap::iterator end = SkillDataMap.end();
|
||||
|
||||
for(; pos != end; ++pos)
|
||||
{
|
||||
unsigned long dwKey = pos->first;
|
||||
SkillBookInfo& data = pos->second;
|
||||
|
||||
if (0 != data.m_dwBookNum[0] || 0 != data.m_dwBookNum[1] ||
|
||||
0 != data.m_dwBookNum[2] || 0 != data.m_dwBookNum[3])
|
||||
{
|
||||
INFLOG6(g_Log, "Remain skillBook(%s/%10u) : %3d / %3d / %3d / %3d",
|
||||
szHeader, dwKey, data.m_dwBookNum[0], data.m_dwBookNum[1],
|
||||
data.m_dwBookNum[2], data.m_dwBookNum[3]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20>α<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LogRemainGold(GoldDataMap& GoldDataMap, const char* szHeader)
|
||||
{
|
||||
GoldDataMap::iterator pos = GoldDataMap.begin();
|
||||
GoldDataMap::iterator end = GoldDataMap.end();
|
||||
|
||||
for(; pos != end; ++pos)
|
||||
{
|
||||
unsigned long dwKey = pos->first;
|
||||
unsigned long dwGold = pos->second;
|
||||
|
||||
if (0 != dwGold)
|
||||
{
|
||||
INFLOG3(g_Log, "Remain Gold(%s/%10u) : %10u",
|
||||
szHeader, dwKey, dwGold);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
147
Server/DBProcess/RebalanceConverter/Rebalance.h
Normal file
147
Server/DBProcess/RebalanceConverter/Rebalance.h
Normal file
@@ -0,0 +1,147 @@
|
||||
#ifndef _RYL_REBALANCE_LIB_REBALANCE_H_
|
||||
#define _RYL_REBALANCE_LIB_REBALANCE_H_
|
||||
|
||||
#pragma once
|
||||
#pragma warning(disable:4800)
|
||||
|
||||
#include <map>
|
||||
#include <boost/pool/pool_alloc.hpp>
|
||||
#include <RylDBLibrary/RylDBLibrary.h>
|
||||
#include <Item/RebalanceConvert/RebalanceItem.h>
|
||||
|
||||
// forward decl.
|
||||
class CSkillMgr;
|
||||
|
||||
namespace Item
|
||||
{
|
||||
// forward decl.
|
||||
class CItemMgr;
|
||||
}
|
||||
|
||||
namespace OldItem
|
||||
{
|
||||
// forward decl.
|
||||
class CItemMgr;
|
||||
}
|
||||
|
||||
namespace RebalanceLib
|
||||
{
|
||||
|
||||
// forward decl.
|
||||
class CItemChecker;
|
||||
|
||||
|
||||
// Key <20><> UID Ȥ<><C8A4> CID
|
||||
// Value <20><> <20><>ų <20><><EFBFBD><EFBFBD>
|
||||
typedef std::map<unsigned long, SkillBookInfo, std::less<unsigned long>,
|
||||
boost::fast_pool_allocator<std::pair<unsigned long, SkillBookInfo> > > SkillDataMap;
|
||||
|
||||
// Key <20><> UID Ȥ<><C8A4> CID
|
||||
// Value <20><> <20>߰<EFBFBD><DFB0><EFBFBD> <20>ݾ<EFBFBD>
|
||||
typedef std::map<unsigned long, unsigned long, std::less<unsigned long>,
|
||||
boost::fast_pool_allocator<std::pair<unsigned long, unsigned long> > > GoldDataMap;
|
||||
|
||||
|
||||
// <20><>ų <20>б<EFBFBD>
|
||||
class CDBReadSkill : public IDBCharSkillProcess
|
||||
{
|
||||
public:
|
||||
|
||||
CDBReadSkill(SkillDataMap& CIDSkillDataMap, bool bClearSkill = false);
|
||||
virtual ConvertResult operator()(RylDBCommand::CSkillData& charSkillData_InOut);
|
||||
|
||||
private:
|
||||
|
||||
SkillDataMap& m_CIDSkillDataMap;
|
||||
bool m_bClearSkill;
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20>α<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LogRemainSkillBook(SkillDataMap& SkillDataMap, const char* szHeader);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><> <20>α<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void LogRemainGold(GoldDataMap& GoldDataMap, const char* szHeader);
|
||||
|
||||
|
||||
// <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD> <20><> ī<><C4AB><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
class CDBItemConvert :
|
||||
public IDBCharItemProcess,
|
||||
public IDBCharItemExProcess,
|
||||
public IDBStoreProcess
|
||||
{
|
||||
public:
|
||||
|
||||
// SkillDataMap<61><70> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
CDBItemConvert(
|
||||
CDBItemSerialMgr& dbItemSerialMgr,
|
||||
Item::CItemMgr& newItemMgr, OldItem::CItemMgr& oldItemMgr,
|
||||
SkillDataMap* lpUIDSkillDataMap, SkillDataMap* lpCIDSkillDataMap,
|
||||
bool bConvertRebalanceItem = true, bool bRenumberingItemUID = true);
|
||||
|
||||
virtual ConvertResult operator()(RylDBCommand::CCharItem& charItem_InOut);
|
||||
virtual ConvertResult operator()(RylDBCommand::CCharItemEx& charItemEx_InOut);
|
||||
virtual ConvertResult operator()(RylDBCommand::CUnifiedStore1& unifiedStore1_InOut);
|
||||
virtual ConvertResult operator()(RylDBCommand::CUnifiedStore2& unifiedStore2_InOut);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>̳ʸ<CCB3> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD>Ѵ<EFBFBD>.
|
||||
bool ConvertData(unsigned long dwUID, unsigned long dwCID,
|
||||
CItemChecker* lpItemChecker,
|
||||
const char* szOriginalData, unsigned long dwOriginalSize,
|
||||
char* szChangedData, unsigned long& dwChangedSize_InOut);
|
||||
|
||||
// 1/2<>ܰ<EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD> <20>ش<EFBFBD>.
|
||||
static void ChangeSkillBookToGold(SkillDataMap& skillDataMap, GoldDataMap& goldDataMap);
|
||||
|
||||
// 3/4<>ܰ<EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>̳ʿ<CCB3> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
static void GiveSkillBook(unsigned long dwUID, unsigned long dwCID,
|
||||
CDBItemSerialMgr& DBItemSerialMgr, SkillBookInfo& skillData,
|
||||
CItemChecker& itemChecker, const char* szPosition,
|
||||
char* szData_InOut, unsigned long& dwDataSize_InOut);
|
||||
|
||||
private:
|
||||
|
||||
CDBItemSerialMgr& m_DBItemSerialMgr;
|
||||
Item::CItemMgr& m_newItemMgr;
|
||||
OldItem::CItemMgr& m_oldItemMgr;
|
||||
|
||||
SkillDataMap* m_lpUIDSkillDataMap;
|
||||
SkillDataMap* m_lpCIDSkillDataMap;
|
||||
|
||||
bool m_bConvertRebalanceItem;
|
||||
bool m_bRenumberingItemUID;
|
||||
};
|
||||
|
||||
|
||||
// ij<><C4B3><EFBFBD>Ϳ<EFBFBD> <20><> <20>־<EFBFBD><D6BE>ֱ<EFBFBD>
|
||||
class CDBAddCharGold : public IDBCharInfoProcess
|
||||
{
|
||||
public:
|
||||
|
||||
CDBAddCharGold(GoldDataMap& CIDGoldDataMap);
|
||||
virtual ConvertResult operator()(RylDBCommand::CCharData& charData_InOut);
|
||||
|
||||
private:
|
||||
|
||||
GoldDataMap& m_CIDGoldDataMap;
|
||||
};
|
||||
|
||||
|
||||
// <20><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD> â<><C3A2><EFBFBD><EFBFBD> <20><> <20>־<EFBFBD><D6BE>ֱ<EFBFBD>
|
||||
class CDBAddUnifiedStoreGold : public IDBStoreProcess
|
||||
{
|
||||
public:
|
||||
|
||||
CDBAddUnifiedStoreGold(GoldDataMap& UIDGoldDataMap);
|
||||
|
||||
virtual ConvertResult operator()(RylDBCommand::CUnifiedStore1& unifiedStore1_InOut);
|
||||
virtual ConvertResult operator()(RylDBCommand::CUnifiedStore2& unifiedStore2_InOut);
|
||||
|
||||
private:
|
||||
|
||||
GoldDataMap& m_UIDGoldDataMap;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
170
Server/DBProcess/RebalanceConverter/RebalanceConverter.cpp
Normal file
170
Server/DBProcess/RebalanceConverter/RebalanceConverter.cpp
Normal file
@@ -0,0 +1,170 @@
|
||||
// RebalanceConverter.cpp : <20>ܼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "Rebalance.h"
|
||||
#include <RylDBLibrary/RylDBLibrary.h>
|
||||
#include <Item/RebalanceConvert/RebalanceItem.h>
|
||||
|
||||
#include <Item/ItemMgr.h>
|
||||
#include <Skill/SkillMgr.h>
|
||||
#include <Item/RebalanceConvert/OldItemMgr.h>
|
||||
|
||||
#include <Network/Packet/PacketStruct/ServerInfo.h>
|
||||
#include <Utility/Setup/ServerSetup.h>
|
||||
#include <Log/ServerLog.h>
|
||||
|
||||
void PrintUsage()
|
||||
{
|
||||
printf("usage : RebalanceConverter DBAddress DBName DBAccount DBPassword "
|
||||
"ServerGroupNum(0~9) RenumberingUID(0/1)\n");
|
||||
}
|
||||
|
||||
int _tmain(int argc, _TCHAR* argv[])
|
||||
{
|
||||
if(7 != argc)
|
||||
{
|
||||
PrintUsage();
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(!Item::CItemMgr::GetInstance().LoadItemProtoType("./NewItemScript.txt"))
|
||||
{
|
||||
printf("NewItemScript.txt load failed\n");
|
||||
return -1;
|
||||
}
|
||||
else if(!OldItem::CItemMgr::GetInstance().LoadItemProtoType("./OldItemScript.txt"))
|
||||
{
|
||||
printf("OldItemScript.txt load failed\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
using namespace RebalanceLib;
|
||||
|
||||
CoInitialize(0);
|
||||
|
||||
int nServerGroup = atoi(argv[5]);
|
||||
bool bRenumberingUID = (1 == atoi(argv[6]));
|
||||
|
||||
SERVER_ID serverID;
|
||||
|
||||
serverID.sID.Type = CServerSetup::AuthServer;
|
||||
serverID.sID.Group = nServerGroup;
|
||||
serverID.sID.Channel = 0;
|
||||
serverID.sID.ID = 0;
|
||||
|
||||
HRESULT hr = S_OK;
|
||||
|
||||
ATL::CDataSource dataSource;
|
||||
ATL::CSession Session;
|
||||
|
||||
CDBItemSerialMgr dbItemSerialMgr;
|
||||
|
||||
#define LOG_CONVERT0(str) { ERRLOG0(g_Log, (str)); printf(str "\n"); }
|
||||
#define LOG_CONVERT1(str, arg1) { ERRLOG1(g_Log, (str), (arg1)); printf(str "\n", (arg1)); }
|
||||
#define LOG_CONVERT2(str, arg1, arg2) { ERRLOG2(g_Log, (str), (arg1), (arg2)); printf(str "\n", (arg1), (arg2)); }
|
||||
|
||||
if(FAILED(hr = CRylDBProcess::ConnectDB(dataSource, argv[1], argv[2], argv[3], argv[4])))
|
||||
{
|
||||
LOG_CONVERT1("Connect DB failed : hr:0x%08X", hr);
|
||||
}
|
||||
else if(FAILED(hr = Session.Open(dataSource)))
|
||||
{
|
||||
LOG_CONVERT1("Open session failed : hr:0x%08X", hr);
|
||||
}
|
||||
else if(FAILED(hr = dbItemSerialMgr.ClearAllSerialDB(Session)))
|
||||
{
|
||||
LOG_CONVERT1("Clear itemSerial failed : hr:0x%08X", hr);
|
||||
}
|
||||
else if(FAILED(hr = dbItemSerialMgr.LoadItemSerialDB(Session, serverID.dwID)))
|
||||
{
|
||||
LOG_CONVERT1("Insert itemSerial failed : hr:0x%08X", hr);
|
||||
}
|
||||
else
|
||||
{
|
||||
CRylDBProcess rylDBProcess(Session);
|
||||
CConsoleCounter consoleCounter(1000);
|
||||
|
||||
SkillDataMap UIDSkillDataMap;
|
||||
SkillDataMap CIDSkillDataMap;
|
||||
|
||||
CDBReadSkill readDBSkill(CIDSkillDataMap, true);
|
||||
|
||||
CDBItemConvert convertDBItem(dbItemSerialMgr,
|
||||
Item::CItemMgr::GetInstance(), OldItem::CItemMgr::GetInstance(),
|
||||
&UIDSkillDataMap, &CIDSkillDataMap, true, bRenumberingUID);
|
||||
|
||||
// <20><>ų <20>б<EFBFBD>
|
||||
if(FAILED(hr = rylDBProcess.CharSkill(readDBSkill, consoleCounter)))
|
||||
{
|
||||
LOG_CONVERT1("Skill process failed : hr:0x%08X", hr);
|
||||
}
|
||||
// CharItem<65><6D><EFBFBD><EFBFBD>Ʈ
|
||||
else if(FAILED(hr = rylDBProcess.CharItem(convertDBItem, consoleCounter)))
|
||||
{
|
||||
LOG_CONVERT1("CharItem process failed : hr:0x%08X", hr);
|
||||
}
|
||||
// CharItemEx<45><78><EFBFBD><EFBFBD>Ʈ
|
||||
else if(FAILED(hr = rylDBProcess.CharItemEx(convertDBItem, consoleCounter)))
|
||||
{
|
||||
LOG_CONVERT1("CharItemEx process failed : hr:0x%08X", hr);
|
||||
}
|
||||
// <20><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
else if(FAILED(hr = rylDBProcess.UnifiedStore1(convertDBItem, consoleCounter)))
|
||||
{
|
||||
LOG_CONVERT1("UnifiedStore1 process failed : hr:0x%08X", hr);
|
||||
}
|
||||
else if(FAILED(hr = rylDBProcess.UnifiedStore2(convertDBItem, consoleCounter)))
|
||||
{
|
||||
LOG_CONVERT1("UnifiedStore2 process failed : hr:0x%08X", hr);
|
||||
}
|
||||
else
|
||||
{
|
||||
GoldDataMap UIDGoldDataMap;
|
||||
GoldDataMap CIDGoldDataMap;
|
||||
|
||||
CDBItemConvert::ChangeSkillBookToGold(UIDSkillDataMap, UIDGoldDataMap);
|
||||
CDBItemConvert::ChangeSkillBookToGold(CIDSkillDataMap, CIDGoldDataMap);
|
||||
|
||||
CDBAddUnifiedStoreGold addUnifiedStoreGold(UIDGoldDataMap);
|
||||
CDBAddCharGold addCharGold(CIDGoldDataMap);
|
||||
|
||||
if(FAILED(hr = rylDBProcess.UnifiedStore1(addUnifiedStoreGold, consoleCounter)))
|
||||
{
|
||||
LOG_CONVERT1("Add store gold process failed : hr:0x%08X", hr);
|
||||
}
|
||||
else if(FAILED(hr = rylDBProcess.CharInfo(addCharGold, consoleCounter)))
|
||||
{
|
||||
LOG_CONVERT1("Add character gold process failed : hr:0x%08X", hr);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE>.
|
||||
LogRemainSkillBook(UIDSkillDataMap, "UIDBook");
|
||||
LogRemainSkillBook(CIDSkillDataMap, "CIDBook");
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE>.
|
||||
LogRemainGold(UIDGoldDataMap, "UIDGold");
|
||||
LogRemainGold(CIDGoldDataMap, "CIDGold");
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
if(FAILED(hr = dbItemSerialMgr.SaveItemSerialDB(Session, serverID.dwID)))
|
||||
{
|
||||
LOG_CONVERT1("ItemSerial save failed : hr:0x%08X", hr);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
CItemGrade::GetInstance().WriteGradeNum();
|
||||
INFLOG2(g_Log, "MaxUID : (0x%08X / %016I64X)",
|
||||
serverID.dwID, dbItemSerialMgr.GetItemSerial());
|
||||
}
|
||||
}
|
||||
|
||||
INFLOG0(g_Log, "Convert Complete");
|
||||
|
||||
Session.Close();
|
||||
dataSource.Close();
|
||||
|
||||
CoUninitialize();
|
||||
return 0;
|
||||
}
|
||||
|
||||
169
Server/DBProcess/RebalanceConverter/RebalanceConverter.vcproj
Normal file
169
Server/DBProcess/RebalanceConverter/RebalanceConverter.vcproj
Normal file
@@ -0,0 +1,169 @@
|
||||
<?xml version="1.0" encoding="ks_c_5601-1987"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.10"
|
||||
Name="RebalanceConverter"
|
||||
ProjectGUID="{4AEC21B2-025C-421E-AB4E-BC93E6B191AF}"
|
||||
SccProjectName="SAK"
|
||||
SccAuxPath="SAK"
|
||||
SccLocalPath="SAK"
|
||||
SccProvider="SAK"
|
||||
Keyword="Win32Proj">
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"/>
|
||||
</Platforms>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="../Executable/$(ConfigurationName)"
|
||||
IntermediateDirectory="../Intermediate/$(ProjectName)/$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
UseOfATL="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="../;../../RylServerProject;../../RylServerProject/BaseLibrary;../../RylServerProject/RylServerLibrary;../../RylServerProject/RylGameLibrary"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||
MinimalRebuild="TRUE"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="2"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="4"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib"
|
||||
OutputFile="$(OutDir)/RebalanceConverter.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile="$(OutDir)/RebalanceConverter.pdb"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="../Executable/$(ConfigurationName)"
|
||||
IntermediateDirectory="../Intermediate/$(ProjectName)/$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
UseOfATL="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="../;../../RylServerProject;../../RylServerProject/BaseLibrary;../../RylServerProject/RylServerLibrary;../../RylServerProject/RylGameLibrary"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||
RuntimeLibrary="0"
|
||||
UsePrecompiledHeader="2"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib"
|
||||
OutputFile="$(OutDir)/RebalanceConverter.exe"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="TRUE"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="<22>ҽ<EFBFBD> <20><><EFBFBD><EFBFBD>"
|
||||
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
||||
<File
|
||||
RelativePath=".\Rebalance.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RebalanceConverter.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\stdafx.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UsePrecompiledHeader="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
UsePrecompiledHeader="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||
<File
|
||||
RelativePath=".\Rebalance.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\stdafx.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="<22><><EFBFBD>ҽ<EFBFBD> <20><><EFBFBD><EFBFBD>"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath=".\ReadMe.txt">
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
8
Server/DBProcess/RebalanceConverter/stdafx.cpp
Normal file
8
Server/DBProcess/RebalanceConverter/stdafx.cpp
Normal file
@@ -0,0 +1,8 @@
|
||||
// stdafx.cpp : ǥ<><C7A5> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>ҽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
||||
// RebalanceConverter.pch<63><68> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˴ϴ<CBB4>.
|
||||
// stdafx.obj<62><6A><EFBFBD><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ե˴ϴ<CBB4>.
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
// TODO: <20>ʿ<EFBFBD><CABF><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD> STDAFX.H<><48><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
15
Server/DBProcess/RebalanceConverter/stdafx.h
Normal file
15
Server/DBProcess/RebalanceConverter/stdafx.h
Normal file
@@ -0,0 +1,15 @@
|
||||
// stdafx.h : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD>
|
||||
// ǥ<><C7A5> <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
#include <iostream>
|
||||
#include <tchar.h>
|
||||
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // <20>Ϻ<EFBFBD> CString <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>˴ϴ<CBB4>.
|
||||
|
||||
#include <atlbase.h>
|
||||
|
||||
// TODO: <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E2BFA1> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
Reference in New Issue
Block a user