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:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View File

@@ -0,0 +1,561 @@
// GiveEventReward.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"
#pragma warning(disable:4800)
#include <vector>
#include <map>
#include <boost/pool/pool_alloc.hpp>
#include <RylDBLibrary/RylDBLibrary.h>
#include <RylDBLibrary/RylDBCharCommand.h>
#include <RylDBLibrary/RylDBStoreCommand.h>
#include <Item/ItemMgr.h>
#include <Item/Container/ContainerConstant.h>
#include <Item/RebalanceConvert/ContainerChecker.h>
#include <Network/Packet/PacketStruct/ServerInfo.h>
#include <Log/ServerLog.h>
#include <Utility/Setup/ServerSetup.h>
class CGiveEventReward :
public IDBCharItemProcess,
public IDBCharItemExProcess,
public IDBStoreProcess
{
public:
typedef std::pair<unsigned long, unsigned long> EventItem;
typedef std::vector<EventItem> EventItemList;
typedef std::pair<unsigned long, std::pair<const Item::ItemInfo*, unsigned char> > GiveItem;
typedef std::vector<GiveItem> GiveItemList;
typedef std::multimap<unsigned long, GiveItem, std::less<unsigned long>,
boost::fast_pool_allocator<std::pair<unsigned long, GiveItem> > > GiveItemMap;
CGiveEventReward(CDBItemSerialMgr& dbItemSerialMgr, Item::CItemMgr& newItemMgr);
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);
bool LoadScript(const char* szScriptFileName);
// <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> ī<><C4AB><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
void RemoveItemFromContainer(unsigned long dwUID, unsigned long dwCID,
RebalanceLib::CItemChecker* lpItemChecker, const char* szPosition,
const char* szData_In, unsigned long dwDataSize_In,
char* szData_Out, unsigned long& dwDataSize_Out);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>Ƽ<EFBFBD> <20>־<EFBFBD> <20>ش<EFBFBD>.
void GiveItemToContainer(unsigned long dwUID, unsigned long dwCID,
RebalanceLib::CItemChecker& itemChecker, const char* szPosition,
char* szData_InOut, unsigned long& dwDataSize_InOut,
unsigned long dwMaxDataSize, bool bLastChance = false);
private:
CDBItemSerialMgr& m_DBItemSerialMgr;
Item::CItemMgr& m_newItemMgr;
EventItemList m_EventItemList; // first : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID / second : <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Key
GiveItemList m_GiveItemList; // first : <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Key / second : <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> / <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
GiveItemMap m_CIDGiveItemMap; // first : CID / second : <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> / <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
GiveItemMap m_UIDGiveItemMap; // first : UID / second : <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> / <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
};
void PrintUsage()
{
printf("usage : GiveEventReward.exe DBAddress DBName DBAccount DBPassword "
"ServerGroupNum(0~9) RewardScriptName \n");
}
int _tmain(int argc, _TCHAR* argv[])
{
if(7 != argc)
{
PrintUsage();
return -1;
}
int nServerGroup = atoi(argv[5]);
const char* szRewardScriptName = argv[6];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ <20>ε<EFBFBD>
if(!Item::CItemMgr::GetInstance().LoadItemProtoType("./NewItemScript.txt"))
{
printf("NewItemScript.txt load failed\n");
return -1;
}
CDBItemSerialMgr dbItemSerialMgr;
CGiveEventReward giveEventReward(dbItemSerialMgr, Item::CItemMgr::GetInstance());
// <20>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ <20>ε<EFBFBD>
if(!giveEventReward.LoadScript(szRewardScriptName))
{
printf("%s load failed\n", szRewardScriptName);
return -1;
}
CoInitialize(0);
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;
#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.LoadItemSerialDB(Session, serverID.dwID)))
{
LOG_CONVERT1("Insert itemSerial failed : hr:0x%08X", hr);
}
else
{
CRylDBProcess rylDBProcess(Session);
CConsoleCounter consoleCounter(1000);
if (!rylDBProcess.UnifiedStore1(giveEventReward, consoleCounter))
{
LOG_CONVERT1("UnifiedStore1 process failed : hr:0x%08X", hr);
}
else if (!rylDBProcess.UnifiedStore2(giveEventReward, consoleCounter))
{
LOG_CONVERT1("UnifiedStore2 process failed : hr:0x%08X", hr);
}
else if (!rylDBProcess.CharItem(giveEventReward, consoleCounter))
{
LOG_CONVERT1("CharItem process failed : hr:0x%08X", hr);
}
else if (!rylDBProcess.CharItemEx(giveEventReward, consoleCounter))
{
LOG_CONVERT1("CharItemEx process failed : hr:0x%08X", hr);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
else if(FAILED(hr = dbItemSerialMgr.SaveItemSerialDB(Session, serverID.dwID)))
{
LOG_CONVERT1("ItemSerial save failed : hr:0x%08X", hr);
}
}
INFLOG0(g_Log, "Give Complete");
Session.Close();
dataSource.Close();
CoUninitialize();
return 0;
}
CGiveEventReward::CGiveEventReward(CDBItemSerialMgr& dbItemSerialMgr, Item::CItemMgr& newItemMgr)
: m_DBItemSerialMgr(dbItemSerialMgr), m_newItemMgr(newItemMgr)
{
}
ConvertResult CGiveEventReward::operator()(RylDBCommand::CCharItem& charItem_InOut)
{
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));
RebalanceLib::CItemArrayChecker<
ContainerConstant::INVENTORY_WIDTH,
ContainerConstant::INVENTORY_HEIGHT,
ContainerConstant::MAX_INVENTORY_TAB> inven_checker(TakeType::TS_INVEN);
RemoveItemFromContainer(0, dwCID, 0, "EQUIP", equip_In.Data, equip_In.dwSize, equip_Out.Data, equip_Out.dwSize);
RemoveItemFromContainer(0, dwCID, &inven_checker, "INVEN", inven_In.Data, inven_In.dwSize, inven_Out.Data, inven_Out.dwSize);
RemoveItemFromContainer(0, dwCID, 0, "EXTRA", extra_In.Data, extra_In.dwSize, extra_Out.Data, extra_Out.dwSize);
GiveItemToContainer(0, dwCID, inven_checker, "INVEN", inven_Out.Data, inven_Out.dwSize, INVEN::MAX_INVEN_SIZE);
charItem_InOut.SetEquip(equip_Out);
charItem_InOut.SetInven(inven_Out);
charItem_InOut.SetExtra(extra_Out);
return CONVERT_SUCCEEDED;
}
ConvertResult CGiveEventReward::operator()(RylDBCommand::CCharItemEx& charItemEx_InOut)
{
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));
RebalanceLib::CItemListChecker<Item::MAX_TEMP_INVEN_ITEM_NUM>
tempInvenChecker(TakeType::TS_TEMPINVEN);
RemoveItemFromContainer(0, dwCID, 0, "EXCHANGE",
exchange_In.Data, exchange_In.dwSize, exchange_Out.Data, exchange_Out.dwSize);
RemoveItemFromContainer(0, dwCID, &tempInvenChecker, "TEMPINVEN",
tempInven_In.Data, tempInven_In.dwSize, tempInven_Out.Data, tempInven_Out.dwSize);
// LAST Chance!
GiveItemToContainer(0, dwCID, tempInvenChecker, "TEMPINVEN",
tempInven_Out.Data, tempInven_Out.dwSize, TEMPINVEN::MAX_TEMPINVEN_SIZE, true);
charItemEx_InOut.SetExchange(exchange_Out);
charItemEx_InOut.SetTempInven(tempInven_Out);
return CONVERT_SUCCEEDED;
}
ConvertResult CGiveEventReward::operator()(RylDBCommand::CUnifiedStore1& unifiedStore1_InOut)
{
unsigned long dwUID = unifiedStore1_InOut.GetUID();
const STORE& store_In = unifiedStore1_InOut.GetStore();
STORE store_Out;
memset(&store_Out, 0, sizeof(STORE));
RebalanceLib::CItemArrayChecker<
ContainerConstant::DEPOSIT_WIDTH,
ContainerConstant::DEPOSIT_HEIGHT,
ContainerConstant::MAX_DEPOSIT_TAB> depositChecker(TakeType::TS_DEPOSIT);
depositChecker.FillTab(2);
depositChecker.FillTab(3);
RemoveItemFromContainer(dwUID, 0, &depositChecker, "UNIFIED_STORE_01",
store_In.Data, store_In.dwSize, store_Out.Data, store_Out.dwSize);
GiveItemToContainer(dwUID, 0, depositChecker, "UnifiedStore1",
store_Out.Data, store_Out.dwSize, STORE::MAX_STORE_SIZE);
unifiedStore1_InOut.SetStore(store_Out);
return CONVERT_SUCCEEDED;
}
ConvertResult CGiveEventReward::operator()(RylDBCommand::CUnifiedStore2& unifiedStore2_InOut)
{
unsigned long dwUID = unifiedStore2_InOut.GetUID();
const STORE& store_In = unifiedStore2_InOut.GetStore();
STORE store_Out;
memset(&store_Out, 0, sizeof(STORE));
RebalanceLib::CItemArrayChecker<
ContainerConstant::DEPOSIT_WIDTH,
ContainerConstant::DEPOSIT_HEIGHT,
ContainerConstant::MAX_DEPOSIT_TAB> depositChecker(TakeType::TS_DEPOSIT);
depositChecker.FillTab(0);
depositChecker.FillTab(1);
RemoveItemFromContainer(dwUID, 0, &depositChecker, "UNIFIED_STORE_02",
store_In.Data, store_In.dwSize, store_Out.Data, store_Out.dwSize);
GiveItemToContainer(dwUID, 0, depositChecker, "UnifiedStore2",
store_Out.Data, store_Out.dwSize, STORE::MAX_STORE_SIZE);
unifiedStore2_InOut.SetStore(store_Out);
return CONVERT_SUCCEEDED;
}
bool CGiveEventReward::LoadScript(const char* szScriptFileName)
{
/*
# <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> - <20>ּ<EFBFBD><D6BC>Դϴ<D4B4>.
REMOVE:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID:Key
GIVE:Key:<3A><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID:<3A><><EFBFBD><EFBFBD>
GIVE:Key:<3A><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID:<3A><><EFBFBD><EFBFBD>
GIVE:Key:<3A><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID:<3A><><EFBFBD><EFBFBD>
...
*/
FILE* lpFile = fopen(szScriptFileName, "rt");
if (0 != lpFile)
{
const int MAX_BUFFER = 1024;
char szBuffer[MAX_BUFFER];
const char* szDelimiter = "\r\n\t: ";
while(fgets(szBuffer, MAX_BUFFER - 1, lpFile))
{
// <20><> <20><><EFBFBD>ξ<EFBFBD> <20>о<EFBFBD><D0BE><20>Ľ<EFBFBD><C4BD><EFBFBD> <20>Ѵ<EFBFBD>.
char* szType = strtok(szBuffer, szDelimiter);
if(0 != szType && '#' != szType[0])
{
strupr(szType);
if (0 == strcmp(szType, "REMOVE"))
{
char* szRemoveItem = strtok(0, szDelimiter);
char* szGiveItemKey = strtok(0, szDelimiter);
if (0 != szRemoveItem && 0 != szGiveItemKey)
{
m_EventItemList.push_back(
EventItem(atoi(szRemoveItem), atoi(szGiveItemKey)));
}
}
else if (0 == strcmp(szType, "GIVE"))
{
char* szGiveItemKey = strtok(0, szDelimiter);
char* szGiveItem = strtok(0, szDelimiter);
char* szGiveItemNum = strtok(0, szDelimiter);
if (0 != szGiveItemKey && 0 != szGiveItem && 0 != szGiveItemNum)
{
GiveItem giveItem;
const Item::ItemInfo* lpItemInfo = m_newItemMgr.GetItemInfo(atoi(szGiveItem));
if (0 != lpItemInfo)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۸<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
giveItem.first = atoi(szGiveItemKey);
giveItem.second.first = lpItemInfo;
giveItem.second.second = atoi(szGiveItemNum);
m_GiveItemList.push_back(giveItem);
}
}
}
}
}
std::sort(m_EventItemList.begin(), m_EventItemList.end());
std::sort(m_GiveItemList.begin(), m_GiveItemList.end());
fclose(lpFile);
return true;
}
return false;
}
struct CheckFirstOnly
{
bool operator () (
const CGiveEventReward::EventItem& lhs,
const CGiveEventReward::EventItem& rhs)
{ return lhs.first < rhs.first; }
bool operator () (
const CGiveEventReward::GiveItem& lhs,
const CGiveEventReward::GiveItem& rhs)
{ return lhs.first < rhs.first; }
};
// <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> ī<><C4AB><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
void CGiveEventReward::RemoveItemFromContainer(unsigned long dwUID, unsigned long dwCID,
RebalanceLib::CItemChecker* lpItemChecker,
const char* szPosition,
const char* szData_In, unsigned long dwDataSize_In,
char* szData_Out, unsigned long& dwDataSize_Out)
{
const char* szDataPos = szData_In;
const char* szDataEnd = szData_In + dwDataSize_In;
char* szDataPos_Out = szData_Out;
EventItemList::iterator pos;
EventItemList::iterator end = m_EventItemList.end();
std::pair<GiveItemList::iterator, GiveItemList::iterator> give_range;
GiveItem giveItem;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȸ<EFBFBD>ϸ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>̳ʸ<CCB3> ä<><C3A4><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD> ä<><C3A4><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
for (; szDataPos + sizeof(Item::ItemData) <= szDataEnd; )
{
const Item::ItemData* lpItemData = reinterpret_cast<const Item::ItemData*>(szDataPos);
const Item::ItemInfo* lpItemInfo = m_newItemMgr.GetItemInfo(lpItemData->m_usProtoTypeID);
if (0 == lpItemInfo)
{
ERRLOG6(g_Log, "UID:%10u / CID:%10u / ItemUID:%016I64X / PrototypeID:%6u / Num:%d / %s / "
"<EFBFBD><EFBFBD>ũ<EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̾ <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.",
dwUID, dwCID, lpItemData->m_dwUID, lpItemData->m_usProtoTypeID,
lpItemData->m_cNumOrDurability, szPosition);
}
else
{
pos = std::lower_bound(m_EventItemList.begin(), end,
EventItem(lpItemData->m_usProtoTypeID, 0), CheckFirstOnly());
if (pos != end && pos->first == lpItemData->m_usProtoTypeID)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD>. ī<><C4AB><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
giveItem.first = pos->second; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Key
giveItem.second.first = 0;
giveItem.second.second = 0;
give_range = std::equal_range(m_GiveItemList.begin(),
m_GiveItemList.end(), giveItem, CheckFirstOnly());
for(; give_range.first != give_range.second; ++give_range.first)
{
for(int nCount = 0; nCount < lpItemData->m_cNumOrDurability; ++nCount)
{
if (0 != dwUID)
{
m_UIDGiveItemMap.insert(GiveItemMap::value_type(dwUID, *give_range.first));
}
else if(0 != dwCID)
{
m_CIDGiveItemMap.insert(GiveItemMap::value_type(dwCID, *give_range.first));
}
}
}
INFLOG5(g_Log, "UID:%10u / CID:%10u / PrototypeID:%6u / Num:%d / %s / "
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̳ʿ<CCB3><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>",
dwUID, dwCID, lpItemData->m_usProtoTypeID, lpItemData->m_cNumOrDurability, szPosition);
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. üĿ<C3BC><C4BF> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>׳<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
if (0 != lpItemChecker)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> üĿ<C3BC><C4BF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20≯<EFBFBD> <20><><EFBFBD><EFBFBD>
lpItemChecker->Set(lpItemData->m_ItemPos,
lpItemInfo->m_DetailData.m_cXSize,
lpItemInfo->m_DetailData.m_cYSize);
}
// <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
memcpy(szDataPos_Out, lpItemData, lpItemData->m_cItemSize);
szDataPos_Out += lpItemData->m_cItemSize;
}
}
szDataPos += lpItemData->m_cItemSize;
}
dwDataSize_Out = static_cast<unsigned long>(szDataPos_Out - szData_Out);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>Ƽ<EFBFBD> <20>־<EFBFBD> <20>ش<EFBFBD>.
void CGiveEventReward::GiveItemToContainer(unsigned long dwUID, unsigned long dwCID,
RebalanceLib::CItemChecker& itemChecker, const char* szPosition,
char* szData_InOut, unsigned long& dwDataSize_InOut,
unsigned long dwMaxDataSize, bool bLastChance)
{
unsigned long dwKey = 0;
GiveItemMap* lpGiveItemMap = 0;
if (0 != dwUID)
{
dwKey = dwUID;
lpGiveItemMap = &m_UIDGiveItemMap;
}
else if (0 != dwCID)
{
dwKey = dwCID;
lpGiveItemMap = &m_CIDGiveItemMap;
}
if (0 != dwKey && 0 != lpGiveItemMap)
{
std::pair<GiveItemMap::iterator, GiveItemMap::iterator>
find_range = lpGiveItemMap->equal_range(dwKey);
for(; find_range.first != find_range.second; )
{
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD>ߴ<EFBFBD>.
const Item::ItemInfo* lpItemInfo = find_range.first->second.second.first;
unsigned char cItemNum = find_range.first->second.second.second;
// <20>ɰ<EFBFBD><C9B0><EFBFBD> <20>ִ´ٴ<C2B4><D9B4><EFBFBD> <20>ϴ<EFBFBD> <20><> <20>ڵ<EFBFBD><DAB5>δ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>. (<28><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEB0A1>)
Item::ItemPos emptyPos;
if (dwDataSize_InOut + sizeof(Item::ItemData) <= dwMaxDataSize &&
itemChecker.FindEmptyPos(emptyPos,
lpItemInfo->m_DetailData.m_cXSize, lpItemInfo->m_DetailData.m_cYSize))
{
Item::ItemData* lpItemData =
reinterpret_cast<Item::ItemData*>(szData_InOut + dwDataSize_InOut);
lpItemData->m_dwUID = m_DBItemSerialMgr.GetNewItemSerial();
lpItemData->m_usProtoTypeID = lpItemInfo->m_usProtoTypeID;
lpItemData->m_ItemPos = emptyPos;
lpItemData->m_cItemSize = sizeof(Item::ItemData);
lpItemData->m_cNumOrDurability = cItemNum;
dwDataSize_InOut += sizeof(Item::ItemData);
itemChecker.Set(emptyPos,
lpItemInfo->m_DetailData.m_cXSize, lpItemInfo->m_DetailData.m_cYSize);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
find_range.first = lpGiveItemMap->erase(find_range.first);
INFLOG7(g_Log, "UID:%10u / CID:%10u / PrototypeID:%6u / Num:%d / %s / Pos:%d / Index:0x%04X / "
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.",
dwUID, dwCID, lpItemInfo->m_usProtoTypeID, cItemNum, szPosition,
emptyPos.m_cPos, emptyPos.m_cIndex);
}
else
{
if(bLastChance)
{
// <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
ERRLOG5(g_Log, "UID:%10u / CID:%10u / PrototypeID:%6u / Num:%d / %s / "
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><> á<>ų<EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>",
dwUID, dwCID, lpItemInfo->m_usProtoTypeID, cItemNum, szPosition);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20>׳<EFBFBD> <20><><EFBFBD><EFBFBD>.
++find_range.first;
}
}
}
}

View File

@@ -0,0 +1,161 @@
<?xml version="1.0" encoding="ks_c_5601-1987"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="7.10"
Name="GiveEventReward"
ProjectGUID="{023C302D-BB9F-4D5B-8809-4636313342EF}"
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"
OutputFile="$(OutDir)/GiveEventReward.exe"
LinkIncremental="2"
GenerateDebugInformation="TRUE"
ProgramDatabaseFile="$(OutDir)/GiveEventReward.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"
OutputFile="$(OutDir)/GiveEventReward.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=".\GiveEventReward.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=".\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>

View File

@@ -0,0 +1,32 @@
========================================================================
<20>ܼ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α׷<CEB1> : GiveEventReward <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
========================================================================
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>α׷<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7BFA1> <20><> GiveEventReward <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
<EFBFBD><EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> GiveEventReward <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>.
GiveEventReward.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>.
GiveEventReward.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>
GiveEventReward.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>.
/////////////////////////////////////////////////////////////////////////////

View 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>.
// GiveEventReward.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>.

View 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>.