/// 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()); } */