farkmt2official 1
farkmt2official
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Bvural41 1
Bvural41
Hikaye Ekle

Genel paket hataları düzeltmesi

Merhaba, Genel olarak çoğu source dosyalarında bulunan bazı paket sorunları yaşatan hataları düzeltmeyi göstericem.

Öncelikle sorundan bahsetmek gerekirse, client ve server da ki paketlerin bazılarını gönderirken ya da alırken boyutları farklı olduğundan dolayı bu paketler(HEADER_GC_MALL_SET, HEADER_GC_SAFEBOX_SET, GUILD_SUBHEADER_GC_GUILD_INVITE) işlendikten sonra oyunda paket kayması yaşanıp daha sonra hatalı veriler işlenmekte ve bir süre sonra oyun kapanmakta ya da sorun çıkmakta.

bExKykd.png

Xw9i76S.png

KcEw2uU.png

2c7ZNAU.png

Çözüm için:

ClientSource/UserInterface/PythonNetworkStreamPhaseGameItem.cpp dosyasını açın.

Aşağıdaki fonksiyonu bulun.
Kod:
bool CPythonNetworkStream::RecvSafeBoxSetPacket()
{
    TPacketGCItemSet2 kItemSet;
    if (!Recv(sizeof(kItemSet), &kItemSet))
        return false;

    TItemData kItemData;
    kItemData.vnum    = kItemSet.vnum;
    kItemData.count = kItemSet.count;
    kItemData.flags = kItemSet.flags;
    kItemData.anti_flags = kItemSet.anti_flags;
    for (int32_t isocket=0; isocket<ITEM_SOCKET_SLOT_MAX_NUM; ++isocket)
        kItemData.alSockets[isocket] = kItemSet.alSockets[isocket];
    for (int32_t iattr=0; iattr<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iattr)
        kItemData.aAttr[iattr] = kItemSet.aAttr[iattr];

    CPythonSafeBox::Instance().SetItemData(kItemSet.Cell.cell, kItemData);

    __RefreshSafeboxWindow();

    return true;
}

ve bu şekilde değiştirin.
Kod:
bool CPythonNetworkStream::RecvSafeBoxSetPacket()
{
    TPacketGCItemSet kItemSet;
    if (!Recv(sizeof(kItemSet), &kItemSet))
        return false;

    TItemData kItemData;
    kItemData.vnum    = kItemSet.vnum;
    kItemData.count = kItemSet.count;
    for (int32_t isocket=0; isocket<ITEM_SOCKET_SLOT_MAX_NUM; ++isocket)
        kItemData.alSockets[isocket] = kItemSet.alSockets[isocket];
    for (int32_t iattr=0; iattr<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iattr)
        kItemData.aAttr[iattr] = kItemSet.aAttr[iattr];

    CPythonSafeBox::Instance().SetItemData(kItemSet.Cell.cell, kItemData);

    __RefreshSafeboxWindow();

    return true;
}

Aynı değişikliği RecvMallItemSetPacket fonksiyonu içinde yapın.

Kod:
bool CPythonNetworkStream::RecvMallItemSetPacket()
{
    TPacketGCItemSet kItemSet;
    if (!Recv(sizeof(kItemSet), &kItemSet))
        return false;

    TItemData kItemData;
    kItemData.vnum = kItemSet.vnum;
    kItemData.count = kItemSet.count;
    for (int32_t isocket=0; isocket<ITEM_SOCKET_SLOT_MAX_NUM; ++isocket)
        kItemData.alSockets[isocket] = kItemSet.alSockets[isocket];
    for (int32_t iattr=0; iattr<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iattr)
        kItemData.aAttr[iattr] = kItemSet.aAttr[iattr];

    CPythonSafeBox::Instance().SetMallItemData(kItemSet.Cell.cell, kItemData);

    __RefreshMallWindow();

    return true;
}


ClientSource/UserInterface/PythonNetworkStreamPhaseGame.cpp dosyasını açın.

Aratın:
Kod:
        case GUILD_SUBHEADER_GC_GUILD_INVITE:
        {
            uint32_t dwGuildID;
            if (!Recv(sizeof(dwGuildID), &dwGuildID))
                return false;
            char szGuildName[GUILD_NAME_MAX_LEN+1];
            if (!Recv(GUILD_NAME_MAX_LEN, &szGuildName))
                return false;

Değiştirin:
Kod:
        case GUILD_SUBHEADER_GC_GUILD_INVITE:
        {
            uint32_t dwGuildID;
            if (!Recv(sizeof(dwGuildID), &dwGuildID))
                return false;
            char szGuildName[GUILD_NAME_MAX_LEN+1];
            if (!Recv(GUILD_NAME_MAX_LEN + 1, &szGuildName))
                return false;
 
Merhaba, Genel olarak çoğu source dosyalarında bulunan bazı paket sorunları yaşatan hataları düzeltmeyi göstericem.

Öncelikle sorundan bahsetmek gerekirse, client ve server da ki paketlerin bazılarını gönderirken ya da alırken boyutları farklı olduğundan dolayı bu paketler(HEADER_GC_MALL_SET, HEADER_GC_SAFEBOX_SET, GUILD_SUBHEADER_GC_GUILD_INVITE) işlendikten sonra oyunda paket kayması yaşanıp daha sonra hatalı veriler işlenmekte ve bir süre sonra oyun kapanmakta ya da sorun çıkmakta.

bExKykd.png

Xw9i76S.png

KcEw2uU.png

2c7ZNAU.png

Çözüm için:

ClientSource/UserInterface/PythonNetworkStreamPhaseGameItem.cpp dosyasını açın.

Aşağıdaki fonksiyonu bulun.
Kod:
bool CPythonNetworkStream::RecvSafeBoxSetPacket()
{
    TPacketGCItemSet2 kItemSet;
    if (!Recv(sizeof(kItemSet), &kItemSet))
        return false;

    TItemData kItemData;
    kItemData.vnum    = kItemSet.vnum;
    kItemData.count = kItemSet.count;
    kItemData.flags = kItemSet.flags;
    kItemData.anti_flags = kItemSet.anti_flags;
    for (int32_t isocket=0; isocket<ITEM_SOCKET_SLOT_MAX_NUM; ++isocket)
        kItemData.alSockets[isocket] = kItemSet.alSockets[isocket];
    for (int32_t iattr=0; iattr<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iattr)
        kItemData.aAttr[iattr] = kItemSet.aAttr[iattr];

    CPythonSafeBox::Instance().SetItemData(kItemSet.Cell.cell, kItemData);

    __RefreshSafeboxWindow();

    return true;
}

ve bu şekilde değiştirin.
Kod:
bool CPythonNetworkStream::RecvSafeBoxSetPacket()
{
    TPacketGCItemSet kItemSet;
    if (!Recv(sizeof(kItemSet), &kItemSet))
        return false;

    TItemData kItemData;
    kItemData.vnum    = kItemSet.vnum;
    kItemData.count = kItemSet.count;
    for (int32_t isocket=0; isocket<ITEM_SOCKET_SLOT_MAX_NUM; ++isocket)
        kItemData.alSockets[isocket] = kItemSet.alSockets[isocket];
    for (int32_t iattr=0; iattr<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iattr)
        kItemData.aAttr[iattr] = kItemSet.aAttr[iattr];

    CPythonSafeBox::Instance().SetItemData(kItemSet.Cell.cell, kItemData);

    __RefreshSafeboxWindow();

    return true;
}

Aynı değişikliği RecvMallItemSetPacket fonksiyonu içinde yapın.

Kod:
bool CPythonNetworkStream::RecvMallItemSetPacket()
{
    TPacketGCItemSet kItemSet;
    if (!Recv(sizeof(kItemSet), &kItemSet))
        return false;

    TItemData kItemData;
    kItemData.vnum = kItemSet.vnum;
    kItemData.count = kItemSet.count;
    for (int32_t isocket=0; isocket<ITEM_SOCKET_SLOT_MAX_NUM; ++isocket)
        kItemData.alSockets[isocket] = kItemSet.alSockets[isocket];
    for (int32_t iattr=0; iattr<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iattr)
        kItemData.aAttr[iattr] = kItemSet.aAttr[iattr];

    CPythonSafeBox::Instance().SetMallItemData(kItemSet.Cell.cell, kItemData);

    __RefreshMallWindow();

    return true;
}


ClientSource/UserInterface/PythonNetworkStreamPhaseGame.cpp dosyasını açın.

Aratın:
Kod:
        case GUILD_SUBHEADER_GC_GUILD_INVITE:
        {
            uint32_t dwGuildID;
            if (!Recv(sizeof(dwGuildID), &dwGuildID))
                return false;
            char szGuildName[GUILD_NAME_MAX_LEN+1];
            if (!Recv(GUILD_NAME_MAX_LEN, &szGuildName))
                return false;

Değiştirin:
Kod:
        case GUILD_SUBHEADER_GC_GUILD_INVITE:
        {
            uint32_t dwGuildID;
            if (!Recv(sizeof(dwGuildID), &dwGuildID))
                return false;
            char szGuildName[GUILD_NAME_MAX_LEN+1];
            if (!Recv(GUILD_NAME_MAX_LEN + 1, &szGuildName))
                return false;

Yine bir Koray klasiği 😅 Paylaşım için teşekkürler.
 
Merhaba, Genel olarak çoğu source dosyalarında bulunan bazı paket sorunları yaşatan hataları düzeltmeyi göstericem.

Öncelikle sorundan bahsetmek gerekirse, client ve server da ki paketlerin bazılarını gönderirken ya da alırken boyutları farklı olduğundan dolayı bu paketler(HEADER_GC_MALL_SET, HEADER_GC_SAFEBOX_SET, GUILD_SUBHEADER_GC_GUILD_INVITE) işlendikten sonra oyunda paket kayması yaşanıp daha sonra hatalı veriler işlenmekte ve bir süre sonra oyun kapanmakta ya da sorun çıkmakta.

bExKykd.png

Xw9i76S.png

KcEw2uU.png

2c7ZNAU.png

Çözüm için:

ClientSource/UserInterface/PythonNetworkStreamPhaseGameItem.cpp dosyasını açın.

Aşağıdaki fonksiyonu bulun.
Kod:
bool CPythonNetworkStream::RecvSafeBoxSetPacket()
{
    TPacketGCItemSet2 kItemSet;
    if (!Recv(sizeof(kItemSet), &kItemSet))
        return false;

    TItemData kItemData;
    kItemData.vnum    = kItemSet.vnum;
    kItemData.count = kItemSet.count;
    kItemData.flags = kItemSet.flags;
    kItemData.anti_flags = kItemSet.anti_flags;
    for (int32_t isocket=0; isocket<ITEM_SOCKET_SLOT_MAX_NUM; ++isocket)
        kItemData.alSockets[isocket] = kItemSet.alSockets[isocket];
    for (int32_t iattr=0; iattr<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iattr)
        kItemData.aAttr[iattr] = kItemSet.aAttr[iattr];

    CPythonSafeBox::Instance().SetItemData(kItemSet.Cell.cell, kItemData);

    __RefreshSafeboxWindow();

    return true;
}

ve bu şekilde değiştirin.
Kod:
bool CPythonNetworkStream::RecvSafeBoxSetPacket()
{
    TPacketGCItemSet kItemSet;
    if (!Recv(sizeof(kItemSet), &kItemSet))
        return false;

    TItemData kItemData;
    kItemData.vnum    = kItemSet.vnum;
    kItemData.count = kItemSet.count;
    for (int32_t isocket=0; isocket<ITEM_SOCKET_SLOT_MAX_NUM; ++isocket)
        kItemData.alSockets[isocket] = kItemSet.alSockets[isocket];
    for (int32_t iattr=0; iattr<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iattr)
        kItemData.aAttr[iattr] = kItemSet.aAttr[iattr];

    CPythonSafeBox::Instance().SetItemData(kItemSet.Cell.cell, kItemData);

    __RefreshSafeboxWindow();

    return true;
}

Aynı değişikliği RecvMallItemSetPacket fonksiyonu içinde yapın.

Kod:
bool CPythonNetworkStream::RecvMallItemSetPacket()
{
    TPacketGCItemSet kItemSet;
    if (!Recv(sizeof(kItemSet), &kItemSet))
        return false;

    TItemData kItemData;
    kItemData.vnum = kItemSet.vnum;
    kItemData.count = kItemSet.count;
    for (int32_t isocket=0; isocket<ITEM_SOCKET_SLOT_MAX_NUM; ++isocket)
        kItemData.alSockets[isocket] = kItemSet.alSockets[isocket];
    for (int32_t iattr=0; iattr<ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iattr)
        kItemData.aAttr[iattr] = kItemSet.aAttr[iattr];

    CPythonSafeBox::Instance().SetMallItemData(kItemSet.Cell.cell, kItemData);

    __RefreshMallWindow();

    return true;
}


ClientSource/UserInterface/PythonNetworkStreamPhaseGame.cpp dosyasını açın.

Aratın:
Kod:
        case GUILD_SUBHEADER_GC_GUILD_INVITE:
        {
            uint32_t dwGuildID;
            if (!Recv(sizeof(dwGuildID), &dwGuildID))
                return false;
            char szGuildName[GUILD_NAME_MAX_LEN+1];
            if (!Recv(GUILD_NAME_MAX_LEN, &szGuildName))
                return false;

Değiştirin:
Kod:
        case GUILD_SUBHEADER_GC_GUILD_INVITE:
        {
            uint32_t dwGuildID;
            if (!Recv(sizeof(dwGuildID), &dwGuildID))
                return false;
            char szGuildName[GUILD_NAME_MAX_LEN+1];
            if (!Recv(GUILD_NAME_MAX_LEN + 1, &szGuildName))
                return false;
Paylaşım için teşekkürler.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Benzer konular

Geri
Üst