- Mesaj
- 196
- Çözümler
- 12
- Beğeni
- 266
- Puan
- 804
- Ticaret Puanı
- 0
Merhaba arkadaşlar, bir sorum olacaktı. Ben karakterimin itemlerini efsunlu ve üstüne giyili bir şekilde başlamasını istiyorum. input_db.cpp dosyasında gerekli düzenlemeyi yaptım, (forumdaki geliştirici serisindeki altyapı filesi kullanıyorum bu arada), efsun kodlarınıda girdim, build ederken hiç bir hata almıyorum, oyundada zaten efsunlar görünüyor ama envantere geliyorlar giyilmemiş halde. input_db.cpp dosyasındaki gerekli fonksiyonda bu şekilde düzenledim. Hatayı nerde yaptım acaba ? Teşekkürler şimdiden.
Ek olarak, ilk başta efsunları eklemeden build etmiştim ve o zaman giyiliydi fakat efsunları ekledikten sonra envantere düştü. Efsun eklerken mi bir yerde hata var acaba ?
C++:
void CInputDB::PlayerCreateSuccess(LPDESC d, const char * data)
{
/* old code
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;
d->Packet(&pack, sizeof(TPacketGCPlayerCreateSuccess));
// ±âº» ¹«±â¿Í ±ÍȯºÎ¸¦ Áö±Ş
TPlayerItem t;
memset(&t, 0, sizeof(t));
if (china_event_server)
{
t.window = INVENTORY;
t.count = 1;
t.owner = r_Tab.players[pPacketDB->bAccountCharacterIndex].dwID;
//¹«»ç: ÀÚÀΰ©+3,öÆíÅõ±¸+3,±İÆí½Å¹ß+3,³²¸¸µµ+3,¹é±İ¸ñ°ÉÀÌ+3, Èæ´Ü±Í°ÉÀÌ+3, ¼Ò»êºÎ+3, ¿À°¢ÆĞ+3, Èæ´ÜÆÈÂî+3
//ÀÚ°´£º¿µ¸°+3,¿¬È¯µÎ°Ç+3,±İÆí½Å¹ß+3,¸¶¾Èµµ+3,ȾȱÃ+3,¿Á¸ñ°ÉÀÌ+3, ¿Á±Í°ÉÀÌ+3, ¿À°¢ÆĞ+3, Èæ´ÜÆÈÂî+3
//¼ö¶ó£ºÀ½¾ç°©+3,¾ÖÈñÅõ±¸+3,±İÆí½Å¹ß+3,³²¸¸µµ+3,ÁøÁÖ¸ñ°ÉÀÌ+3, ¹é±İ±Í°ÉÀÌ+3, ¿À°¢ÆĞ+3, Èæ´ÜÆÈÂî+3
//¹«´ç£º¼ÃµÀÇ+3,ÅÂÀ»¸ğ+3,±İÆí½Å¹ß+3,ÀÚ¸°¼±+3,¸ÅÈ·É+3,ÁøÁÖ¸ñ°ÉÀÌ+3, ¹é±İ±Í°ÉÀÌ+3, ¿À°¢ÆĞ+3, Èæ´ÜÆÈÂî+3
struct SInitialItem
{
DWORD dwVnum;
BYTE pos;
};
const int MAX_INITIAL_ITEM = 9;
static SInitialItem initialItems[JOB_MAX_NUM][MAX_INITIAL_ITEM] =
{
{ {11243, 2}, {12223, 3}, {15103, 4}, { 93, 1}, {16143, 8}, {17103, 9}, { 3083, 0}, {13193, 11}, {14103, 12}, },
{ {11443, 0}, {12363, 3}, {15103, 4}, { 1053, 2}, { 2083, 1}, {16083, 7}, {17083, 8}, {13193, 9}, {14103, 10}, },
{ {11643, 0}, {12503, 2}, {15103, 3}, { 93, 1}, {16123, 4}, {17143, 7}, {13193, 8}, {14103, 9}, { 0, 0}, },
{ {11843, 0}, {12643, 1}, {15103, 2}, { 7083, 3}, { 5053, 4}, {16123, 6}, {17143, 7}, {13193, 8}, {14103, 9}, },
};
int job = pPacketDB->player.byJob;
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.vnum = initialItems[job][i].dwVnum;
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());
*/
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;
d->Packet(&pack, sizeof(TPacketGCPlayerCreateSuccess));
TPlayerItem t;
memset(&t, 0, sizeof(t));
//baslangic item verme
t.owner = r_Tab.players[pPacketDB->bAccountCharacterIndex].dwID;
struct SInitialItem
{
BYTE window;
BYTE pos;
DWORD count;
DWORD dwVnum;
long socket0;
long socket1;
long socket2;
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;
long attr_type5;
long attr_value5;
long attr_type6;
long attr_value6;
};
const int MAX_INITIAL_ITEM = 10;
static SInitialItem initialItems[JOB_MAX_NUM][MAX_INITIAL_ITEM] =
{
// {window_type, envanterdeki yeri, adeti, item_vnum, socket0, socket1, socket2, socket3, socket4, socket5, socket6}
{
// WARRIOR
{EQUIPMENT, 0, 1, 11279, 0, 0, 0, 1,3000, 53,50, 23,10, 9,20, 39,15}, // Zirh
{EQUIPMENT, 1, 1, 12249, 0, 0, 0, 21,20, 18,20, 22,20, 12,8, 7,8}, // Kafalik
{EQUIPMENT, 2, 1, 15209, 0, 0, 0, 1,3000, 15,10, 7,8, 43,20, 44,20}, // Ayakkabi
{EQUIPMENT, 3, 1, 14209, 0, 0, 0, 1,3000, 16,10, 23,10, 21,20, 22,20}, // Bilezik
{EQUIPMENT, 4, 1, 299, 0, 0, 0, 72,45, 5,12, 6,12, 15,10, 16,10}, // Silah
{EQUIPMENT, 5, 1, 16209, 0, 0, 0, 1,3000, 15,10, 10,30, 43,20, 44,20}, // Kolye
{EQUIPMENT, 6, 1, 17109, 0, 0, 0, 8,20, 17,10, 45,20, 21,20, 22,20}, // Küpe
{EQUIPMENT, 10, 1, 13049, 0, 0, 0, 5,12, 6,12, 43,20, 44,20, 17,10}, // Kalkan
},
{
// ASSASSIN
{EQUIPMENT, 0, 1, 11479, 0, 0, 0, 1,3000, 53,50, 23,10, 9,20, 39,15}, // Zirh
{EQUIPMENT, 1, 1, 12389, 0, 0, 0, 21,20, 18,20, 22,20, 12,8, 7,8}, // Kafalik
{EQUIPMENT, 2, 1, 15209, 0, 0, 0, 1,3000, 15,10, 7,8, 43,20, 44,20}, // Ayakkabi
{EQUIPMENT, 3, 1, 14209, 0, 0, 0, 1,3000, 16,10, 23,10, 21,20, 22,20}, // Bilezik
{EQUIPMENT, 4, 1, 1179, 0, 0, 0, 72,45, 5,12, 6,12, 15,10, 16,10}, // Silah
{EQUIPMENT, 5, 1, 16209, 0, 0, 0, 1,3000, 15,10, 10,30, 43,20, 44,20}, // Kolye
{EQUIPMENT, 6, 1, 17109, 0, 0, 0, 8,20, 17,10, 45,20, 21,20, 22,20}, // Küpe
{EQUIPMENT, 10, 1, 13049, 0, 0, 0, 5,12, 6,12, 43,20, 44,20, 17,10}, // Kalkan
},
{
// SURA
{EQUIPMENT, 0, 1, 11679, 0, 0, 0, 1,3000, 53,50, 23,10, 9,20, 39,15}, // Zirh
{EQUIPMENT, 1, 1, 12529, 0, 0, 0, 21,20, 18,20, 22,20, 12,8, 7,8}, // Kafalik
{EQUIPMENT, 2, 1, 15209, 0, 0, 0, 1,3000, 15,10, 7,8, 43,20, 44,20}, // Ayakkabi
{EQUIPMENT, 3, 1, 14209, 0, 0, 0, 1,3000, 16,10, 23,10, 21,20, 22,20}, // Bilezik
{EQUIPMENT, 4, 1, 299, 0, 0, 0, 72,45, 5,12, 6,12, 15,10, 16,10}, // Silah
{EQUIPMENT, 5, 1, 16209, 0, 0, 0, 1,3000, 15,10, 10,30, 43,20, 44,20}, // Kolye
{EQUIPMENT, 6, 1, 17109, 0, 0, 0, 8,20, 17,10, 45,20, 21,20, 22,20}, // Küpe
{EQUIPMENT, 10, 1, 13049, 0, 0, 0, 5,12, 6,12, 43,20, 44,20, 17,10}, // Kalkan
},
{
// SHAMAN
{EQUIPMENT, 0, 1, 11879, 0, 0, 0, 1,3000, 53,50, 23,10, 9,20, 39,15}, // Zirh
{EQUIPMENT, 1, 1, 12669, 0, 0, 0, 21,20, 18,20, 22,20, 12,8, 7,8}, // Kafalik
{EQUIPMENT, 2, 1, 15209, 0, 0, 0, 1,3000, 15,10, 7,8, 43,20, 44,20}, // Ayakkabi
{EQUIPMENT, 3, 1, 14209, 0, 0, 0, 1,3000, 16,10, 23,10, 21,20, 22,20}, // Bilezik
{EQUIPMENT, 4, 1, 5119, 0, 0, 0, 72,45, 5,12, 6,12, 15,10, 16,10}, // Silah
{EQUIPMENT, 5, 1, 16209, 0, 0, 0, 1,3000, 15,10, 10,30, 43,20, 44,20}, // Kolye
{EQUIPMENT, 6, 1, 17109, 0, 0, 0, 8,20, 17,10, 45,20, 21,20, 22,20}, // Küpe
{EQUIPMENT, 10, 1, 13049, 0, 0, 0, 5,12, 6,12, 43,20, 44,20, 17,10}, // Kalkan
//{INVENTORY, 0, 1, 50213, 0, 0, 0, 0, 0, 0}, //Cirak sandigi
}
};
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.window = initialItems[job][i].window;
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;
t.aAttr[5].bType = initialItems[job][i].attr_type5;
t.aAttr[5].sValue = initialItems[job][i].attr_value5;
t.aAttr[6].bType = initialItems[job][i].attr_type6;
t.aAttr[6].sValue = initialItems[job][i].attr_value6;
db_clientdesc->DBPacketHeader(HEADER_GD_ITEM_SAVE, 0, sizeof(TPlayerItem));
db_clientdesc->Packet(&t, sizeof(TPlayerItem));
}
//baslangic item verme bitis
LogManager::instance().CharLog(pack.player.dwID, 0, 0, 0, "CREATE PLAYER", "", d->GetHostName());
}
Ek olarak, ilk başta efsunları eklemeden build etmiştim ve o zaman giyiliydi fakat efsunları ekledikten sonra envantere düştü. Efsun eklerken mi bir yerde hata var acaba ?