112 lines
2.6 KiB
C++
112 lines
2.6 KiB
C++
/// 1.) Search at the begin of the file
|
|
|
|
#include "map_location.h"
|
|
|
|
#include "DragonSoul.h"
|
|
|
|
// and add under, this:
|
|
|
|
#ifdef ENABLE_START_ITEMS
|
|
#include "start_item.h"
|
|
#endif
|
|
|
|
/// 2.) Scroll a bit down and look for
|
|
|
|
extern void gm_insert(const char * name, BYTE level);
|
|
extern BYTE gm_get_level(const char * name, const char * host, const char* account);
|
|
extern void gm_host_insert(const char * host);
|
|
|
|
// and add under, this:
|
|
|
|
#ifdef ENABLE_START_ITEMS
|
|
extern bool RaceToJob(unsigned race, unsigned* ret_job);
|
|
#endif
|
|
|
|
/// 3.) Search:
|
|
|
|
void CInputDB::PlayerCreateSuccess(LPDESC d, const char * data)
|
|
{
|
|
[...]
|
|
}
|
|
|
|
// and add UPPER, this:
|
|
|
|
#ifdef ENABLE_START_ITEMS
|
|
static void PlayerCreateGiveBasicItems(const DWORD dwPlayerID, const BYTE byJob)
|
|
{
|
|
// extract real job
|
|
unsigned int real_job = 0;
|
|
RaceToJob(byJob, &real_job);
|
|
|
|
// helper lambda to give items
|
|
auto fnGiveItem = [&](const BaseItem& item)
|
|
{
|
|
if (!item.vnum)
|
|
return;
|
|
|
|
TPlayerItem t{};
|
|
t.id = ITEM_MANAGER::instance().GetNewID();
|
|
t.owner = dwPlayerID;
|
|
t.window = item.is_equipment ? EQUIPMENT : INVENTORY;
|
|
t.pos = item.pos;
|
|
t.vnum = item.vnum;
|
|
t.count = item.count;
|
|
|
|
std::copy(item.sockets.begin(), item.sockets.end(), t.alSockets);
|
|
std::copy(item.attrs.begin(), item.attrs.end(), t.aAttr);
|
|
|
|
db_clientdesc->DBPacketHeader(HEADER_GD_ITEM_SAVE, 0, sizeof(t));
|
|
db_clientdesc->Packet(&t, sizeof(t));
|
|
};
|
|
|
|
// items giving
|
|
for (const auto& item : g_vecCommonItems)
|
|
fnGiveItem(item);
|
|
|
|
for (const auto& item : g_vecSharedItems)
|
|
fnGiveItem(item);
|
|
|
|
if (auto it = g_umapJobItems.find(real_job); it != g_umapJobItems.end())
|
|
{
|
|
for (const auto& item : it->second)
|
|
fnGiveItem(item);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
/// 3.) Search always inside void CInputDB::PlayerCreateSuccess(LPDESC d, const char * data):
|
|
|
|
TPacketGCPlayerCreateSuccess pack{};
|
|
|
|
pack.header = HEADER_GC_CHARACTER_CREATE_SUCCESS;
|
|
pack.bAccountCharacterIndex = pPacketDB->bAccountCharacterIndex;
|
|
pack.player = pPacketDB->player;
|
|
|
|
d->Packet(&pack, sizeof(TPacketGCPlayerCreateSuccess));
|
|
|
|
|
|
// and add under (like before the function end), this:
|
|
|
|
#ifdef ENABLE_START_ITEMS
|
|
// Base items
|
|
PlayerCreateGiveBasicItems(pPacketDB->player.dwID, pPacketDB->player.byJob);
|
|
#endif
|
|
|
|
// like:
|
|
/*
|
|
....
|
|
pack.header = HEADER_GC_CHARACTER_CREATE_SUCCESS;
|
|
pack.bAccountCharacterIndex = pPacketDB->bAccountCharacterIndex;
|
|
pack.player = pPacketDB->player;
|
|
|
|
d->Packet(&pack, sizeof(TPacketGCPlayerCreateSuccess));
|
|
|
|
#ifdef ENABLE_START_ITEMS
|
|
// Base items
|
|
PlayerCreateGiveBasicItems(pPacketDB->player.dwID, pPacketDB->player.byJob);
|
|
#endif
|
|
|
|
LogManager::instance().CharLog(pack.player.dwID, 0, 0, 0, "CREATE PLAYER", "", d->GetHostName());
|
|
}
|
|
*/
|