void CInputDB::PlayerCreateSuccess(LPDESC d, const char* data)
{
if (!d)
return;
TPacketDGCreateSuccess* pPacketDB = (TPacketDGCreateSuccess*)data;
if (pPacketDB->bAccountCharacterIndex >= PLAYER_PER_ACCOUNT)
{
d->Packet(encode_byte(HEADER_GC_CHARACTER_CREATE_FAILURE), 1);
return;
}
long lIndex = 0;
if (!CMapLocation::instance().Get(pPacketDB->player.x,
pPacketDB->player.y,
lIndex,
pPacketDB->player.lAddr,
pPacketDB->player.wPort))
{
sys_err("InputDB::PlayerCreateSuccess: cannot find server for mapindex %d %d x %d (name %s)",
lIndex,
pPacketDB->player.x,
pPacketDB->player.y,
pPacketDB->player.szName);
}
TAccountTable& r_Tab = d->GetAccountTable();
r_Tab.players[pPacketDB->bAccountCharacterIndex] = pPacketDB->player;
TPacketGCPlayerCreateSuccess pack;
pack.header = HEADER_GC_CHARACTER_CREATE_SUCCESS;
pack.bAccountCharacterIndex = pPacketDB->bAccountCharacterIndex;
pack.player = pPacketDB->player;
#ifdef ENABLE_NEWSTUFF
if (!g_stProxyIP.empty())
pack.player.lAddr = inet_addr(g_stProxyIP.c_str());
#endif
d->Packet(&pack, sizeof(TPacketGCPlayerCreateSuccess));
TPlayerItem t;
memset(&t, 0, sizeof(t));
t.window = INVENTORY;
t.count = 1;
t.owner = r_Tab.players[pPacketDB->bAccountCharacterIndex].dwID;
struct SInitialItem
{
BYTE pos;
DWORD dwVnum;
DWORD count;
long socket0;
long socket1;
long socket2;
long socket3;
long socket4;
long attr_type0;
long attr_value0;
long attr_type1;
long attr_value1;
long attr_type2;
long attr_value2;
long attr_type3;
long attr_value3;
long attr_type4;
long attr_value4;
};
const int MAX_INITIAL_ITEM = 10;
static SInitialItem initialItems[JOB_MAX_NUM][MAX_INITIAL_ITEM] =
{
{
{0, 11279, 0, 0, 0, 1,3000, 53,50, 23,10, 9,20, 39,15}, // Zirh Savaşçı
{1, 12249, 0, 0, 0, 21,20, 18,20, 22,20, 12,8, 7,8}, // Kafalik
{2, 15209, 0, 0, 0, 1,3000, 15,10, 7,8, 43,20, 44,20}, // Ayakkabi
{3, 14209, 0, 0, 0, 1,3000, 16,10, 23,10, 21,20, 22,20}, // Bilezik
{4, 299, 0, 0, 0, 72,45, 5,12, 6,12, 15,10, 16,10}, // Silah
{5, 16209, 0, 0, 0, 1,3000, 15,10, 10,30, 43,20, 44,20}, // Kolye
{6, 17109, 0, 0, 0, 8,20, 17,10, 45,20, 21,20, 22,20}, // Küpe
{10, 13049, 0, 0, 0, 5,12, 6,12, 43,20, 44,20, 17,10}, // Kalkan
},
{
{0, 11479, 0, 0, 0, 1,3000, 53,50, 23,10, 9,20, 39,15}, // Zirh Ninja
{1, 12389, 0, 0, 0, 21,20, 18,20, 22,20, 12,8, 7,8}, // Kafalik
{2, 15209, 0, 0, 0, 1,3000, 15,10, 7,8, 43,20, 44,20}, // Ayakkabi
{3, 14209, 0, 0, 0, 1,3000, 16,10, 23,10, 21,20, 22,20}, // Bilezik
{4, 1179, 0, 0, 0, 72,45, 5,12, 6,12, 15,10, 16,10}, // Silah
{5, 16209, 0, 0, 0, 1,3000, 15,10, 10,30, 43,20, 44,20}, // Kolye
{6, 17109, 0, 0, 0, 8,20, 17,10, 45,20, 21,20, 22,20}, // Küpe
{10, 13049, 0, 0, 0, 5,12, 6,12, 43,20, 44,20, 17,10}, // Kalkan
},
{
{0, 11679, 0, 0, 0, 1,3000, 53,50, 23,10, 9,20, 39,15}, // Zirh Sura
{1, 12529, 0, 0, 0, 21,20, 18,20, 22,20, 12,8, 7,8}, // Kafalik
{2, 15209, 0, 0, 0, 1,3000, 15,10, 7,8, 43,20, 44,20}, // Ayakkabi
{3, 14209, 0, 0, 0, 1,3000, 16,10, 23,10, 21,20, 22,20}, // Bilezik
{4, 299, 0, 0, 0, 72,45, 5,12, 6,12, 15,10, 16,10}, // Silah
{5, 16209, 0, 0, 0, 1,3000, 15,10, 10,30, 43,20, 44,20}, // Kolye
{6, 17109, 0, 0, 0, 8,20, 17,10, 45,20, 21,20, 22,20}, // Küpe
{10, 13049, 0, 0, 0, 5,12, 6,12, 43,20, 44,20, 17,10}, // Kalkan
},
{
{0, 11879, 0, 0, 0, 1,3000, 53,50, 23,10, 9,20, 39,15}, // Zirh Şaman
{1, 12669, 0, 0, 0, 21,20, 18,20, 22,20, 12,8, 7,8}, // Kafalik
{2, 15209, 0, 0, 0, 1,3000, 15,10, 7,8, 43,20, 44,20}, // Ayakkabi
{3, 14209, 0, 0, 0, 1,3000, 16,10, 23,10, 21,20, 22,20}, // Bilezik
{4, 5119, 0, 0, 0, 72,45, 5,12, 6,12, 15,10, 16,10}, // Silah
{5, 16209, 0, 0, 0, 1,3000, 15,10, 10,30, 43,20, 44,20}, // Kolye
{6, 17109, 0, 0, 0, 8,20, 17,10, 45,20, 21,20, 22,20}, // Küpe
{10, 13049, 0, 0, 0, 5,12, 6,12, 43,20, 44,20, 17,10}, // Kalkan
}, // Şaman
};
unsigned job = pPacketDB->player.byJob;
RaceToJob(job, &job);
for (int i = 0; i < MAX_INITIAL_ITEM; i++)
{
if (initialItems[job][i].dwVnum == 0)
continue;
t.id = ITEM_MANAGER::instance().GetNewID();
t.pos = initialItems[job][i].pos;
t.count = initialItems[job][i].count;
t.vnum = initialItems[job][i].dwVnum;
t.alSockets[0] = initialItems[job][i].socket0;
t.alSockets[1] = initialItems[job][i].socket1;
t.alSockets[2] = initialItems[job][i].socket2;
t.aAttr[0].bType = initialItems[job][i].attr_type0;
t.aAttr[0].sValue = initialItems[job][i].attr_value0;
t.aAttr[1].bType = initialItems[job][i].attr_type1;
t.aAttr[1].sValue = initialItems[job][i].attr_value1;
t.aAttr[2].bType = initialItems[job][i].attr_type2;
t.aAttr[2].sValue = initialItems[job][i].attr_value2;
t.aAttr[3].bType = initialItems[job][i].attr_type3;
t.aAttr[3].sValue = initialItems[job][i].attr_value3;
t.aAttr[4].bType = initialItems[job][i].attr_type4;
t.aAttr[4].sValue = initialItems[job][i].attr_value4;
db_clientdesc->DBPacketHeader(HEADER_GD_ITEM_SAVE, 0, sizeof(TPlayerItem));
db_clientdesc->Packet(&t, sizeof(TPlayerItem));
}
LogManager::instance().CharLog(pack.player.dwID, 0, 0, 0, "CREATE PLAYER", "", d->GetHostName());
}