- Katılım
- 4 Ocak 2016
- Konular
- 203
- Mesajlar
- 929
- Çözüm
- 7
- Online süresi
- 2mo 2h
- Reaksiyon Skoru
- 900
- Altın Konu
- 73
- Başarım Puanı
- 214
- MmoLira
- 8,463
- DevLira
- 18
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
Bu konuda başlangıç itemlerini source üzerinden verme mantığını paylaşıyorum. Diğer paylaşımlarda süreli item verme yoktu.
Sistem süreli itemleri de destekler, yani verilen itemler envantere girer girmez silinmez.
Bu yöntemle:
tam sorunsuz şekilde karaktere verilir.
Süreli itemlerde expire zamanı socket’e yazıldığı için itemin süresi düzgün başlar.
Sistem 4 socket sayısına göre ayarlıdır kendi filesinize göre ayarlayın lütfen.
game/src/input_db.cpp dosyasını açın.
Aşağıdaki fonksiyonu bulun:
[CODE title="input_db.cpp"]void CInputDB:
layerCreateSuccess(LPDESC d, const char * data)[/CODE]
Üstüne ekleyin
[CODE title="input_db.cpp"]extern bool RaceToJob(unsigned race, unsigned* ret_job);[/CODE]
Tekrar fonksiyonun içinde şu satırı bulun:
[CODE title="input_db.cpp"]d->Packet(&pack, sizeof(TPacketGCPlayerCreateSuccess));[/CODE]
d->Packet(&pack, sizeof(TPacketGCPlayerCreateSuccess));
bu satırın altındaki tüm kodları, fonksiyon bitişine kadar aşağıdaki kod ile değiştirin.
[CODE title="input_db.cpp"] // =====================================================
// BASLANGIC İTEM SİSTEMİ ( GİYİLİ/EFSUNLU/SÜRELİ İTEMLİ )
// =====================================================
TPlayerItem t;
memset(&t, 0, sizeof(TPlayerItem));
t.window = INVENTORY;
t.owner = r_Tab.players[pPacketDB->bAccountCharacterIndex].dwID;
t.count = 1;
struct SInitialItem
{
BYTE window; // EQUIPMENT / INVENTORY
short pos; // WEAR_* veya inventory slot
DWORD count;
DWORD dwVnum;
DWORD duration;
long socket0;
long socket1;
long socket2;
long socket3;
BYTE attr_type0; short attr_value0;
BYTE attr_type1; short attr_value1;
BYTE attr_type2; short attr_value2;
BYTE attr_type3; short attr_value3;
BYTE attr_type4; short attr_value4;
};
const int MAX_INITIAL_ITEM = 17;
static SInitialItem initialItems[JOB_MAX_NUM][MAX_INITIAL_ITEM] =
{
// WARRIOR
{
{EQUIPMENT, WEAR_BODY, 1, 9001, 0,0,0,0, 0,0,0,0,0,0,0,0},
{EQUIPMENT, WEAR_HEAD, 1, 12209, 0,0,0,0, 7,8,0,0,0,0,0,0},
{EQUIPMENT, WEAR_FOOTS, 1, 15009, 0,0,0,0, 15,10,0,0,0,0,0,0},
{EQUIPMENT, WEAR_WRIST, 1, 14009, 0,0,0,0, 1,2000,0,0,0,0,0,0},
{EQUIPMENT, WEAR_WEAPON, 1, 19, 0,0,0,0, 15,10,0,0,0,0,0,0},
{EQUIPMENT, WEAR_NECK, 1, 16009, 0,0,0,0, 0,0,0,0,0,0,0,0},
{EQUIPMENT, WEAR_EAR, 1, 17009, 0,0,0,0, 0,0,0,0,0,0,0,0},
{EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0,0,0,0,0,0,0},
{INVENTORY, 0, 1, 27053, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
{INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
},
// ASSASSIN
{
{EQUIPMENT, WEAR_BODY, 1, 9002, 0,0,0,0, 0,0,0,0,0,0,0,0},
{EQUIPMENT, WEAR_HEAD, 1, 12349, 0,0,0,0, 7,8,0,0,0,0,0,0},
{EQUIPMENT, WEAR_FOOTS, 1, 15009, 0,0,0,0, 15,10,0,0,0,0,0,0},
{EQUIPMENT, WEAR_WRIST, 1, 14009, 0,0,0,0, 1,2000,0,0,0,0,0,0},
{EQUIPMENT, WEAR_WEAPON, 1, 1009, 0,0,0,0, 15,10,0,0,0,0,0,0},
{EQUIPMENT, WEAR_NECK, 1, 16009, 0,0,0,0, 0,0,0,0,0,0,0,0},
{EQUIPMENT, WEAR_EAR, 1, 17009, 0,0,0,0, 0,0,0,0,0,0,0,0},
{EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0,0,0,0,0,0,0},
{INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
{INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
},
};
unsigned job = pPacketDB->player.byJob;
RaceToJob(job, &job);
for (int i = 0; i < MAX_INITIAL_ITEM; ++i)
{
if (initialItems[job].dwVnum == 0)
continue;
memset(&t, 0, sizeof(TPlayerItem));
t.id = ITEM_MANAGER::instance().GetNewID();
t.owner = r_Tab.players[pPacketDB->bAccountCharacterIndex].dwID;
t.window = initialItems[job].window;
t.vnum = initialItems[job].dwVnum;
t.count = initialItems[job].count;
t.pos = initialItems[job].pos;
t.alSockets[0] = initialItems[job].socket0;
t.alSockets[1] = initialItems[job].socket1;
t.alSockets[2] = initialItems[job].socket2;
t.alSockets[3] = initialItems[job].socket3;
// Süreli item desteği
if (initialItems[job].duration > 0)
t.alSockets[0] = time(0) + initialItems[job].duration;
t.aAttr[0].bType = initialItems[job].attr_type0;
t.aAttr[0].sValue = initialItems[job].attr_value0;
t.aAttr[1].bType = initialItems[job].attr_type1;
t.aAttr[1].sValue = initialItems[job].attr_value1;
t.aAttr[2].bType = initialItems[job].attr_type2;
t.aAttr[2].sValue = initialItems[job].attr_value2;
t.aAttr[3].bType = initialItems[job].attr_type3;
t.aAttr[3].sValue = initialItems[job].attr_value3;
t.aAttr[4].bType = initialItems[job].attr_type4;
t.aAttr[4].sValue = initialItems[job].attr_value4;
if ((t.window == INVENTORY && t.pos >= 0 && t.pos < INVENTORY_MAX_NUM) ||
(t.window == EQUIPMENT))
{
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());
}
[/CODE]
Örnek kod bloğunu bırakıyorum bakarakta anlayabilirsiniz.
Sistem süreli itemleri de destekler, yani verilen itemler envantere girer girmez silinmez.
Bu yöntemle:
- Başlangıçta verilen equipment ve inventory itemleri
- Süreli (expire’lı) itemler
- Efsunlu itemler
tam sorunsuz şekilde karaktere verilir.
Süreli itemlerde expire zamanı socket’e yazıldığı için itemin süresi düzgün başlar.
Sistem 4 socket sayısına göre ayarlıdır kendi filesinize göre ayarlayın lütfen.
game/src/input_db.cpp dosyasını açın.
Aşağıdaki fonksiyonu bulun:
[CODE title="input_db.cpp"]void CInputDB:
layerCreateSuccess(LPDESC d, const char * data)[/CODE]Üstüne ekleyin
[CODE title="input_db.cpp"]extern bool RaceToJob(unsigned race, unsigned* ret_job);[/CODE]
Tekrar fonksiyonun içinde şu satırı bulun:
[CODE title="input_db.cpp"]d->Packet(&pack, sizeof(TPacketGCPlayerCreateSuccess));[/CODE]
d->Packet(&pack, sizeof(TPacketGCPlayerCreateSuccess));
bu satırın altındaki tüm kodları, fonksiyon bitişine kadar aşağıdaki kod ile değiştirin.
[CODE title="input_db.cpp"] // =====================================================
// BASLANGIC İTEM SİSTEMİ ( GİYİLİ/EFSUNLU/SÜRELİ İTEMLİ )
// =====================================================
TPlayerItem t;
memset(&t, 0, sizeof(TPlayerItem));
t.window = INVENTORY;
t.owner = r_Tab.players[pPacketDB->bAccountCharacterIndex].dwID;
t.count = 1;
struct SInitialItem
{
BYTE window; // EQUIPMENT / INVENTORY
short pos; // WEAR_* veya inventory slot
DWORD count;
DWORD dwVnum;
DWORD duration;
long socket0;
long socket1;
long socket2;
long socket3;
BYTE attr_type0; short attr_value0;
BYTE attr_type1; short attr_value1;
BYTE attr_type2; short attr_value2;
BYTE attr_type3; short attr_value3;
BYTE attr_type4; short attr_value4;
};
const int MAX_INITIAL_ITEM = 17;
static SInitialItem initialItems[JOB_MAX_NUM][MAX_INITIAL_ITEM] =
{
// WARRIOR
{
{EQUIPMENT, WEAR_BODY, 1, 9001, 0,0,0,0, 0,0,0,0,0,0,0,0},
{EQUIPMENT, WEAR_HEAD, 1, 12209, 0,0,0,0, 7,8,0,0,0,0,0,0},
{EQUIPMENT, WEAR_FOOTS, 1, 15009, 0,0,0,0, 15,10,0,0,0,0,0,0},
{EQUIPMENT, WEAR_WRIST, 1, 14009, 0,0,0,0, 1,2000,0,0,0,0,0,0},
{EQUIPMENT, WEAR_WEAPON, 1, 19, 0,0,0,0, 15,10,0,0,0,0,0,0},
{EQUIPMENT, WEAR_NECK, 1, 16009, 0,0,0,0, 0,0,0,0,0,0,0,0},
{EQUIPMENT, WEAR_EAR, 1, 17009, 0,0,0,0, 0,0,0,0,0,0,0,0},
{EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0,0,0,0,0,0,0},
{INVENTORY, 0, 1, 27053, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
{INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
},
// ASSASSIN
{
{EQUIPMENT, WEAR_BODY, 1, 9002, 0,0,0,0, 0,0,0,0,0,0,0,0},
{EQUIPMENT, WEAR_HEAD, 1, 12349, 0,0,0,0, 7,8,0,0,0,0,0,0},
{EQUIPMENT, WEAR_FOOTS, 1, 15009, 0,0,0,0, 15,10,0,0,0,0,0,0},
{EQUIPMENT, WEAR_WRIST, 1, 14009, 0,0,0,0, 1,2000,0,0,0,0,0,0},
{EQUIPMENT, WEAR_WEAPON, 1, 1009, 0,0,0,0, 15,10,0,0,0,0,0,0},
{EQUIPMENT, WEAR_NECK, 1, 16009, 0,0,0,0, 0,0,0,0,0,0,0,0},
{EQUIPMENT, WEAR_EAR, 1, 17009, 0,0,0,0, 0,0,0,0,0,0,0,0},
{EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0,0,0,0,0,0,0},
{INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
{INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
},
};
unsigned job = pPacketDB->player.byJob;
RaceToJob(job, &job);
for (int i = 0; i < MAX_INITIAL_ITEM; ++i)
{
if (initialItems[job].dwVnum == 0)
continue;
memset(&t, 0, sizeof(TPlayerItem));
t.id = ITEM_MANAGER::instance().GetNewID();
t.owner = r_Tab.players[pPacketDB->bAccountCharacterIndex].dwID;
t.window = initialItems[job].window;
t.vnum = initialItems[job].dwVnum;
t.count = initialItems[job].count;
t.pos = initialItems[job].pos;
t.alSockets[0] = initialItems[job].socket0;
t.alSockets[1] = initialItems[job].socket1;
t.alSockets[2] = initialItems[job].socket2;
t.alSockets[3] = initialItems[job].socket3;
// Süreli item desteği
if (initialItems[job].duration > 0)
t.alSockets[0] = time(0) + initialItems[job].duration;
t.aAttr[0].bType = initialItems[job].attr_type0;
t.aAttr[0].sValue = initialItems[job].attr_value0;
t.aAttr[1].bType = initialItems[job].attr_type1;
t.aAttr[1].sValue = initialItems[job].attr_value1;
t.aAttr[2].bType = initialItems[job].attr_type2;
t.aAttr[2].sValue = initialItems[job].attr_value2;
t.aAttr[3].bType = initialItems[job].attr_type3;
t.aAttr[3].sValue = initialItems[job].attr_value3;
t.aAttr[4].bType = initialItems[job].attr_type4;
t.aAttr[4].sValue = initialItems[job].attr_value4;
if ((t.window == INVENTORY && t.pos >= 0 && t.pos < INVENTORY_MAX_NUM) ||
(t.window == EQUIPMENT))
{
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());
}
[/CODE]
Örnek kod bloğunu bırakıyorum bakarakta anlayabilirsiniz.
[CODE title="input_db.cpp"]extern bool RaceToJob(unsigned race, unsigned* ret_job);
void CInputDB:
layerCreateSuccess(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;
#ifdef ENABLE_MOVE_CHANNEL
if (!CMapLocation::instance().Get(pPacketDB->pl#ifdefPacke#ifdeflayer.y, lIndex, pPacketDB->player.lAddr, pPacketDB->player.wPort, g_bChannel))
#else
if (!CMapLocation::instance().Get(pPacketDB->player.x, pPacketDB->pl#else lInd#elsePacketDB->player.lAddr, pPacketDB->player.wPort))
#endif
{
sys_err("InputDB:
layerCreateSuccess: cannot find server#endifndex #endifx %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#ifdefad#ifdeftProxyIP.c_str());
#endif
d->Packet(&pack, sizeof(TPacketGCPlayerCreateSuccess));
// ===#endif=====#endif==============================
// BASLANGIC İTEM SİSTEMİ ( GİYİLİ/EFSUNLU/SÜRELİ İTEMLİ )
// =====================================================
TPlayerItem t;
memset(&t, 0, sizeof(TPlayerItem));
t.window = INVENTORY;
t.owner = r_Tab.players[pPacketDB->bAccountCharacterIndex].dwID;
t.count = 1;
struct SInitialItem
{
BYTE window; // EQUIPMENT / INVENTORY
short pos; // WEAR_* veya inventory slot
DWORD count;
DWORD dwVnum;
DWORD duration;
long socket0;
long socket1;
long socket2;
long socket3;
BYTE attr_type0; short attr_value0;
BYTE attr_type1; short attr_value1;
BYTE attr_type2; short attr_value2;
BYTE attr_type3; short attr_value3;
BYTE attr_type4; short attr_value4;
};
const int MAX_INITIAL_ITEM = 17;
static SInitialItem initialItems[JOB_MAX_NUM][MAX_INITIAL_ITEM] =
{
// WARRIOR
{////////////// ?TEM T?P? //// ?TEM VNUM //// EFSUN VNUM VE ORANLARI ////
{EQUIPMENT, WEAR_BODY, 1, 9001, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_HEAD, 1, 12209, 0,0,0,0, 7,8, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_FOOTS, 1, 15009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WRIST, 1, 14009, 0, 0,0,0,0, 1,2000, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WEAPON, 1, 19, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_NECK, 1, 16009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_EAR, 1, 17009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0, 0,0,0,0,0,0},
{INVENTORY, 0, 1, 27053, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{INVENTORY, 1, 1, 71044, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 2, 1, 71045, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 3, 1, 72031, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 4, 1, 72034, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 5, 1, 72037, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 6, 1, 72040, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
{INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
},
// ASSASSIN
{////////////// ?TEM T?P? //// ?TEM VNUM //// EFSUN VNUM VE ORANLARI ////
{EQUIPMENT, WEAR_BODY, 1, 9002, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_HEAD, 1, 12349, 0,0,0,0, 7,8, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_FOOTS, 1, 15009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WRIST, 1, 14009, 0, 0,0,0,0, 1,2000, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WEAPON, 1, 1009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_NECK, 1, 16009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_EAR, 1, 17009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0, 0,0,0,0,0,0},
{INVENTORY, 0, 1, 27053, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{INVENTORY, 1, 1, 71044, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 2, 1, 71045, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 3, 1, 72031, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 4, 1, 72034, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 5, 1, 72037, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 6, 1, 72040, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
{INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
},
// SURA
{////////////// ?TEM T?P? //// ?TEM VNUM //// EFSUN VNUM VE ORANLARI ////
{EQUIPMENT, WEAR_BODY, 1, 9003, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_HEAD, 1, 12489, 0,0,0,0, 7,8, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_FOOTS, 1, 15009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WRIST, 1, 14009, 0, 0,0,0,0, 1,2000, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WEAPON, 1, 19, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_NECK, 1, 16009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_EAR, 1, 17009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0, 0,0,0,0,0,0},
{INVENTORY, 0, 1, 27053, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{INVENTORY, 1, 1, 71044, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 2, 1, 71045, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 3, 1, 72031, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 4, 1, 72034, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 5, 1, 72037, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 6, 1, 72040, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
{INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
},
// SHAMAN
{////////////// ?TEM T?P? //// ?TEM VNUM //// EFSUN VNUM VE ORANLARI ////
{EQUIPMENT, WEAR_BODY, 1, 9004, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_HEAD, 1, 12629, 0,0,0,0, 7,8, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_FOOTS, 1, 15009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WRIST, 1, 14009, 0, 0,0,0,0, 1,2000, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WEAPON, 1, 7009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_NECK, 1, 16009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_EAR, 1, 17009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0, 0,0,0,0,0,0},
{INVENTORY, 0, 1, 27053, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{INVENTORY, 1, 1, 71044, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 2, 1, 71045, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 3, 1, 72031, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 4, 1, 72034, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 5, 1, 72037, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 6, 1, 72040, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
{INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
},
};
unsigned job = pPacketDB->player.byJob;
RaceToJob(job, &job);
for (int i = 0; i < MAX_INITIAL_ITEM; ++i)
{
if (initialItems[job].dwVnum == 0)
continue;
memset(&t, 0, sizeof(TPlayerItem));
t.id = ITEM_MANAGER::instance().GetNewID();
t.owner = r_Tab.players[pPacketDB->bAccountCharacterIndex].dwID;
t.window = initialItems[job].window;
t.vnum = initialItems[job].dwVnum;
t.count = initialItems[job].count;
// ?? HEM EQUIPMENT HEM INVENTORY AYNI MANTIK
t.pos = initialItems[job].pos;
// SOCKET
t.alSockets[0] = initialItems[job].socket0;
t.alSockets[1] = initialItems[job].socket1;
t.alSockets[2] = initialItems[job].socket2;
t.alSockets[3] = initialItems[job].socket3;
if (initialItems[job].duration > 0)
{
// Guvenli expire socket
t.alSockets[0] = time(0) + initialItems[job].duration;
}
// ATTR (efsunu BOZMADIK)
t.aAttr[0].bType = initialItems[job].attr_type0;
t.aAttr[0].sValue = initialItems[job].attr_value0;
t.aAttr[1].bType = initialItems[job].attr_type1;
t.aAttr[1].sValue = initialItems[job].attr_value1;
t.aAttr[2].bType = initialItems[job].attr_type2;
t.aAttr[2].sValue = initialItems[job].attr_value2;
t.aAttr[3].bType = initialItems[job].attr_type3;
t.aAttr[3].sValue = initialItems[job].attr_value3;
t.aAttr[4].bType = initialItems[job].attr_type4;
t.aAttr[4].sValue = initialItems[job].attr_value4;
if ((t.window == INVENTORY && t.pos >= 0 && t.pos < INVENTORY_MAX_NUM) ||
(t.window == EQUIPMENT))
{
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());
}[/CODE]
void CInputDB:
layerCreateSuccess(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;
#ifdef ENABLE_MOVE_CHANNEL
if (!CMapLocation::instance().Get(pPacketDB->pl#ifdefPacke#ifdeflayer.y, lIndex, pPacketDB->player.lAddr, pPacketDB->player.wPort, g_bChannel))
#else
if (!CMapLocation::instance().Get(pPacketDB->player.x, pPacketDB->pl#else lInd#elsePacketDB->player.lAddr, pPacketDB->player.wPort))
#endif
{
sys_err("InputDB:
layerCreateSuccess: cannot find server#endifndex #endifx %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#ifdefad#ifdeftProxyIP.c_str());
#endif
d->Packet(&pack, sizeof(TPacketGCPlayerCreateSuccess));
// ===#endif=====#endif==============================
// BASLANGIC İTEM SİSTEMİ ( GİYİLİ/EFSUNLU/SÜRELİ İTEMLİ )
// =====================================================
TPlayerItem t;
memset(&t, 0, sizeof(TPlayerItem));
t.window = INVENTORY;
t.owner = r_Tab.players[pPacketDB->bAccountCharacterIndex].dwID;
t.count = 1;
struct SInitialItem
{
BYTE window; // EQUIPMENT / INVENTORY
short pos; // WEAR_* veya inventory slot
DWORD count;
DWORD dwVnum;
DWORD duration;
long socket0;
long socket1;
long socket2;
long socket3;
BYTE attr_type0; short attr_value0;
BYTE attr_type1; short attr_value1;
BYTE attr_type2; short attr_value2;
BYTE attr_type3; short attr_value3;
BYTE attr_type4; short attr_value4;
};
const int MAX_INITIAL_ITEM = 17;
static SInitialItem initialItems[JOB_MAX_NUM][MAX_INITIAL_ITEM] =
{
// WARRIOR
{////////////// ?TEM T?P? //// ?TEM VNUM //// EFSUN VNUM VE ORANLARI ////
{EQUIPMENT, WEAR_BODY, 1, 9001, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_HEAD, 1, 12209, 0,0,0,0, 7,8, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_FOOTS, 1, 15009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WRIST, 1, 14009, 0, 0,0,0,0, 1,2000, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WEAPON, 1, 19, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_NECK, 1, 16009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_EAR, 1, 17009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0, 0,0,0,0,0,0},
{INVENTORY, 0, 1, 27053, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{INVENTORY, 1, 1, 71044, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 2, 1, 71045, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 3, 1, 72031, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 4, 1, 72034, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 5, 1, 72037, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 6, 1, 72040, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
{INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
},
// ASSASSIN
{////////////// ?TEM T?P? //// ?TEM VNUM //// EFSUN VNUM VE ORANLARI ////
{EQUIPMENT, WEAR_BODY, 1, 9002, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_HEAD, 1, 12349, 0,0,0,0, 7,8, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_FOOTS, 1, 15009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WRIST, 1, 14009, 0, 0,0,0,0, 1,2000, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WEAPON, 1, 1009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_NECK, 1, 16009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_EAR, 1, 17009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0, 0,0,0,0,0,0},
{INVENTORY, 0, 1, 27053, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{INVENTORY, 1, 1, 71044, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 2, 1, 71045, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 3, 1, 72031, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 4, 1, 72034, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 5, 1, 72037, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 6, 1, 72040, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
{INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
},
// SURA
{////////////// ?TEM T?P? //// ?TEM VNUM //// EFSUN VNUM VE ORANLARI ////
{EQUIPMENT, WEAR_BODY, 1, 9003, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_HEAD, 1, 12489, 0,0,0,0, 7,8, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_FOOTS, 1, 15009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WRIST, 1, 14009, 0, 0,0,0,0, 1,2000, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WEAPON, 1, 19, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_NECK, 1, 16009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_EAR, 1, 17009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0, 0,0,0,0,0,0},
{INVENTORY, 0, 1, 27053, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{INVENTORY, 1, 1, 71044, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 2, 1, 71045, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 3, 1, 72031, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 4, 1, 72034, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 5, 1, 72037, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 6, 1, 72040, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
{INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
},
// SHAMAN
{////////////// ?TEM T?P? //// ?TEM VNUM //// EFSUN VNUM VE ORANLARI ////
{EQUIPMENT, WEAR_BODY, 1, 9004, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_HEAD, 1, 12629, 0,0,0,0, 7,8, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_FOOTS, 1, 15009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WRIST, 1, 14009, 0, 0,0,0,0, 1,2000, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_WEAPON, 1, 7009, 0,0,0,0, 15,10,0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_NECK, 1, 16009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_EAR, 1, 17009, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{EQUIPMENT, WEAR_SHIELD, 1, 13009, 0,0,0,0, 6,0, 0,0,0,0,0,0},
{INVENTORY, 0, 1, 27053, 0,0,0,0, 0,0, 0,0, 0,0, 0,0},
{INVENTORY, 1, 1, 71044, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 2, 1, 71045, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 3, 1, 72031, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 4, 1, 72034, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 5, 1, 72037, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 6, 1, 72040, 0,0,0,0, 0,0,0,0,0,0,0,0},
{INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
{INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
},
};
unsigned job = pPacketDB->player.byJob;
RaceToJob(job, &job);
for (int i = 0; i < MAX_INITIAL_ITEM; ++i)
{
if (initialItems[job].dwVnum == 0)
continue;
memset(&t, 0, sizeof(TPlayerItem));
t.id = ITEM_MANAGER::instance().GetNewID();
t.owner = r_Tab.players[pPacketDB->bAccountCharacterIndex].dwID;
t.window = initialItems[job].window;
t.vnum = initialItems[job].dwVnum;
t.count = initialItems[job].count;
// ?? HEM EQUIPMENT HEM INVENTORY AYNI MANTIK
t.pos = initialItems[job].pos;
// SOCKET
t.alSockets[0] = initialItems[job].socket0;
t.alSockets[1] = initialItems[job].socket1;
t.alSockets[2] = initialItems[job].socket2;
t.alSockets[3] = initialItems[job].socket3;
if (initialItems[job].duration > 0)
{
// Guvenli expire socket
t.alSockets[0] = time(0) + initialItems[job].duration;
}
// ATTR (efsunu BOZMADIK)
t.aAttr[0].bType = initialItems[job].attr_type0;
t.aAttr[0].sValue = initialItems[job].attr_value0;
t.aAttr[1].bType = initialItems[job].attr_type1;
t.aAttr[1].sValue = initialItems[job].attr_value1;
t.aAttr[2].bType = initialItems[job].attr_type2;
t.aAttr[2].sValue = initialItems[job].attr_value2;
t.aAttr[3].bType = initialItems[job].attr_type3;
t.aAttr[3].sValue = initialItems[job].attr_value3;
t.aAttr[4].bType = initialItems[job].attr_type4;
t.aAttr[4].sValue = initialItems[job].attr_value4;
if ((t.window == INVENTORY && t.pos >= 0 && t.pos < INVENTORY_MAX_NUM) ||
(t.window == EQUIPMENT))
{
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());
}[/CODE]
SÜRELİ OLAN İTEMLER AŞAĞIDADIR.
{INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
{INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
{INVENTORY, 7, 1, 52045, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
{INVENTORY, 8, 1, 72702, 60*60*24*7, 0,0,0,0, 0,0,0,0,0,0,0},
Son düzenleme:
En Çok Reaksiyon Alan Mesajlar
eline sağlık paylaşım için teşekkürler.
Paylaşım için teşekkürler.
Eline saglik
Eline sağlık, paylaşım için teşekkürler.
- Katılım
- 15 May 2013
- Konular
- 1,224
- Mesajlar
- 7,358
- Çözüm
- 6
- Online süresi
- 2mo 16d
- Reaksiyon Skoru
- 5,996
- Altın Konu
- 422
- Başarım Puanı
- 349
- MmoLira
- 3,714
- DevLira
- 6
eline sağlık paylaşım için teşekkürler.
- Katılım
- 4 Ocak 2016
- Konular
- 203
- Mesajlar
- 929
- Çözüm
- 7
- Online süresi
- 2mo 2h
- Reaksiyon Skoru
- 900
- Altın Konu
- 73
- Başarım Puanı
- 214
- MmoLira
- 8,463
- DevLira
- 18
Rica ederim.eline sağlık paylaşım için teşekkürler.
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 3
- Görüntüleme
- 84
- Cevaplar
- 33
- Görüntüleme
- 2K
- Cevaplar
- 12
- Görüntüleme
- 2K
- Soru
- Cevaplar
- 1
- Görüntüleme
- 242
- Cevaplar
- 37
- Görüntüleme
- 2K














