Çözüldü packet hatası

  • Konuyu açan Konuyu açan enes turan
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 12
  • Gösterim Gösterim 121
Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

enes turan

Yardımsever Üye
Yardımsever Üye
MT Üye
Mesaj
559
Çözümler
35
Beğeni
281
Puan
909
Ticaret Puanı
0
merhabalar aura sistemi ile alakalı bir packet hatası veriyor bir türlü sebebini bulamadım

oyunda aura yükseltme yada bonus aktarım penceresini açıp aurayı slota sürüklediğimde veriyor

clientsyser:
Genişlet Daralt Kopyala
Phase Game does not handle this header (header: 216, last: 3, 216)

216 atamış olduğum sistem ise

Kod:
Genişlet Daralt Kopyala
#ifdef ENABLE_AURA_SYSTEM
        HEADER_GC_AURA = 216,
#endif

C++:
Genişlet Daralt Kopyala
typedef struct SPacketGCAura
{
    SPacketGCAura() : bHeader(HEADER_GC_AURA) {}
    BYTE bHeader;
    WORD wSize;
    BYTE bSubHeader;
} TPacketGCAura;

sistemin ekli olduğu farklı bir files ile TPacketGCAura tüm srcde aratıp karşılaştırma yaptığımda kodlar aynı sorun gözükmüyor

syseeri verdiğinde oyundan atma veya core felanda yok server tarafında da herhangi bir syseer yok
 

Dosya Eklentileri

Çözüm
GameType.h dosyanı aç ve orada TItemData struct yapının içindeki herşeyi(daha doğrusu GC_SET_ITEM’de olmayanları) bu auranın GC_SET_ITEM içine ekle sorunun düzelir. Aynı şekilde Game/Packet.h içindeki TItemData structun içindeki olmayan değişkenleri de GameType.h içinden al ekle. char_aura.cpp aç ve TItemDatadan alıp GC paketi ile gidecek değişkenlere ata. Eğer yapamazsan sabah uyanınca yardımcı olurum çok basit sorun.
server tarafına ait ilgili dosyaları yükler misin?
 
Bunlarda bir şey fark edemedim açıkçası. Ancak bahsettiğin senaryoya dayanarak; PythonNetworkStreamPhaseGame.cpp ve input_main.cpp dosyalarıni incelemeni öneririm.(eğer input_main.cpp de ilgili kodlar varsa.)
 
Bunlarda bir şey fark edemedim açıkçası. Ancak bahsettiğin senaryoya dayanarak; PythonNetworkStreamPhaseGame.cpp ve input_main.cpp dosyalarıni incelemeni öneririm.(eğer input_main.cpp de ilgili kodlar varsa.)
Adsız.webp


debug modda denedim itemi sürükleyince bu hatayı veriyor

Kod:
Genişlet Daralt Kopyala
    case AURA_SUBHEADER_GC_SET_ITEM:
    {
        if (iPacketSize > 0)
        {
            TSubPacketGCAuraSetItem kSubPacket;
            assert(iPacketSize % sizeof(TSubPacketGCAuraSetItem) == 0 && "AURA_SUBHEADER_GC_SET_ITEM");
            if (!Recv(sizeof(TSubPacketGCAuraSetItem), &kSubPacket))
                return false;

            TItemData kItemData;
            kItemData.vnum = kSubPacket.pItem.vnum;
            kItemData.count = kSubPacket.pItem.count;
            for (int iSocket = 0; iSocket < ITEM_SOCKET_SLOT_MAX_NUM; ++iSocket)
                kItemData.alSockets[iSocket] = kSubPacket.pItem.alSockets[iSocket];
            for (int iAttr = 0; iAttr < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iAttr)
                kItemData.aAttr[iAttr] = kSubPacket.pItem.aAttr[iAttr];

            if (kSubPacket.Cell.IsValidCell() && !kSubPacket.Cell.IsEquipCell())
                CPythonPlayer::instance().SetActivatedAuraSlot(BYTE(kSubPacket.AuraCell.cell), kSubPacket.Cell);

            CPythonPlayer::instance().SetAuraItemData(BYTE(kSubPacket.AuraCell.cell), kItemData);
        }
        else
            TraceError(" RecvAuraPacket Error 0x040%uBABE", kAuraPacket.bSubHeader);

        break;
    }
 
18694 eklentisini görüntüle

debug modda denedim itemi sürükleyince bu hatayı veriyor

Kod:
Genişlet Daralt Kopyala
    case AURA_SUBHEADER_GC_SET_ITEM:
    {
        if (iPacketSize > 0)
        {
            TSubPacketGCAuraSetItem kSubPacket;
            assert(iPacketSize % sizeof(TSubPacketGCAuraSetItem) == 0 && "AURA_SUBHEADER_GC_SET_ITEM");
            if (!Recv(sizeof(TSubPacketGCAuraSetItem), &kSubPacket))
                return false;

            TItemData kItemData;
            kItemData.vnum = kSubPacket.pItem.vnum;
            kItemData.count = kSubPacket.pItem.count;
            for (int iSocket = 0; iSocket < ITEM_SOCKET_SLOT_MAX_NUM; ++iSocket)
                kItemData.alSockets[iSocket] = kSubPacket.pItem.alSockets[iSocket];
            for (int iAttr = 0; iAttr < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iAttr)
                kItemData.aAttr[iAttr] = kSubPacket.pItem.aAttr[iAttr];

            if (kSubPacket.Cell.IsValidCell() && !kSubPacket.Cell.IsEquipCell())
                CPythonPlayer::instance().SetActivatedAuraSlot(BYTE(kSubPacket.AuraCell.cell), kSubPacket.Cell);

            CPythonPlayer::instance().SetAuraItemData(BYTE(kSubPacket.AuraCell.cell), kItemData);
        }
        else
            TraceError(" RecvAuraPacket Error 0x040%uBABE", kAuraPacket.bSubHeader);

        break;
    }
Bu hatayı vermesi normal. Çünkü paketi alamıyor.
C++:
Genişlet Daralt Kopyala
if (iPacketSize > 0)
{

Bu kısmı şu şekilde değiştirmeyi dene:
C++:
Genişlet Daralt Kopyala
if (iPacketSize == sizeof(TPacketGCAura) + sizeof(TSubPacketGCAuraSetItem))
{
    TraceError("Olumlu.");

Eğer syserr'a Olumlu mesajını yazarsa sorunsuz çalışması gerek.
 
Bu hatayı vermesi normal. Çünkü paketi alamıyor.
C++:
Genişlet Daralt Kopyala
if (iPacketSize > 0)
{

Bu kısmı şu şekilde değiştirmeyi dene:
C++:
Genişlet Daralt Kopyala
if (iPacketSize == sizeof(TPacketGCAura) + sizeof(TSubPacketGCAuraSetItem))
{
    TraceError("Olumlu.");

Eğer syserr'a Olumlu mesajını yazarsa sorunsuz çalışması gerek.
C++:
Genişlet Daralt Kopyala
RecvAuraPacket Error 0x0402BABE

böyle bir hata verdi dediğiniz şekilde yapınca
 
C++:
Genişlet Daralt Kopyala
RecvAuraPacket Error 0x0402BABE

böyle bir hata verdi dediğiniz şekilde yapınca
O halde serverdan gelen pakette bir sorun var. Dikkatimi çeken noktayı aşağıda gösteriyorum, buna uygun şekilde düzenleme yapmayı deneyebilirsin.

Server tarafında char_aura.cpp içinde:
C++:
Genişlet Daralt Kopyala
            TPacketGCAura pack;
            TSubPacketGCAuraSetItem sub;
            pack.wSize = sizeof(TPacketGCAura) + sizeof(TSubPacketGCAuraSetItem);
            pack.bSubHeader = AURA_SUBHEADER_GC_SET_ITEM;

            sub.Cell = ItemCell;
            sub.AuraCell = AuraCell;
            sub.pItem.vnum = pItem->GetVnum();
            sub.pItem.count = pItem->GetCount();
            sub.pItem.flags = pItem->GetFlag(); // BURASI
            sub.pItem.anti_flags = pItem->GetAntiFlag(); // VE BURASI
            thecore_memcpy(sub.pItem.alSockets, pItem->GetSockets(), sizeof(sub.pItem.alSockets));
            thecore_memcpy(sub.pItem.aAttr, pItem->GetAttributes(), sizeof(sub.pItem.aAttr));
GetFlag ve GetAntiFlag verileri pakete dahil edilmiş. (3-4 farklı yerde.)

Ancak clientte:
C++:
Genişlet Daralt Kopyala
    case AURA_SUBHEADER_GC_SET_ITEM:
    {
        if (iPacketSize > 0)
        {
            TSubPacketGCAuraSetItem kSubPacket;
            assert(iPacketSize % sizeof(TSubPacketGCAuraSetItem) == 0 && "AURA_SUBHEADER_GC_SET_ITEM");
            if (!Recv(sizeof(TSubPacketGCAuraSetItem), &kSubPacket))
                return false;

            TItemData kItemData;
            kItemData.vnum = kSubPacket.pItem.vnum;
            kItemData.count = kSubPacket.pItem.count;
            for (int iSocket = 0; iSocket < ITEM_SOCKET_SLOT_MAX_NUM; ++iSocket)
                kItemData.alSockets[iSocket] = kSubPacket.pItem.alSockets[iSocket];
            for (int iAttr = 0; iAttr < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iAttr)
                kItemData.aAttr[iAttr] = kSubPacket.pItem.aAttr[iAttr];

            if (kSubPacket.Cell.IsValidCell() && !kSubPacket.Cell.IsEquipCell())
                CPythonPlayer::instance().SetActivatedAuraSlot(BYTE(kSubPacket.AuraCell.cell), kSubPacket.Cell);

            CPythonPlayer::instance().SetAuraItemData(BYTE(kSubPacket.AuraCell.cell), kItemData);
        }
        else
            TraceError(" RecvAuraPacket Error 0x040%uBABE", kAuraPacket.bSubHeader);

        break;
    }
flag ve antiflag'a dair hiçbir işlem ve veri yok. Dolayısıyla serverdan cliente gelen paketin boyutu, clientin beklediğinden daha büyük olabilir.
Server tarafından flag ve antfilag satırlarını kaldırmayı veya client tarafına da aynı şekilde ekleme yaparak deneyebilirsin.
 
O halde serverdan gelen pakette bir sorun var. Dikkatimi çeken noktayı aşağıda gösteriyorum, buna uygun şekilde düzenleme yapmayı deneyebilirsin.

Server tarafında char_aura.cpp içinde:
C++:
Genişlet Daralt Kopyala
            TPacketGCAura pack;
            TSubPacketGCAuraSetItem sub;
            pack.wSize = sizeof(TPacketGCAura) + sizeof(TSubPacketGCAuraSetItem);
            pack.bSubHeader = AURA_SUBHEADER_GC_SET_ITEM;

            sub.Cell = ItemCell;
            sub.AuraCell = AuraCell;
            sub.pItem.vnum = pItem->GetVnum();
            sub.pItem.count = pItem->GetCount();
            sub.pItem.flags = pItem->GetFlag(); // BURASI
            sub.pItem.anti_flags = pItem->GetAntiFlag(); // VE BURASI
            thecore_memcpy(sub.pItem.alSockets, pItem->GetSockets(), sizeof(sub.pItem.alSockets));
            thecore_memcpy(sub.pItem.aAttr, pItem->GetAttributes(), sizeof(sub.pItem.aAttr));
GetFlag ve GetAntiFlag verileri pakete dahil edilmiş.

Ancak clientte:
C++:
Genişlet Daralt Kopyala
    case AURA_SUBHEADER_GC_SET_ITEM:
    {
        if (iPacketSize > 0)
        {
            TSubPacketGCAuraSetItem kSubPacket;
            assert(iPacketSize % sizeof(TSubPacketGCAuraSetItem) == 0 && "AURA_SUBHEADER_GC_SET_ITEM");
            if (!Recv(sizeof(TSubPacketGCAuraSetItem), &kSubPacket))
                return false;

            TItemData kItemData;
            kItemData.vnum = kSubPacket.pItem.vnum;
            kItemData.count = kSubPacket.pItem.count;
            for (int iSocket = 0; iSocket < ITEM_SOCKET_SLOT_MAX_NUM; ++iSocket)
                kItemData.alSockets[iSocket] = kSubPacket.pItem.alSockets[iSocket];
            for (int iAttr = 0; iAttr < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iAttr)
                kItemData.aAttr[iAttr] = kSubPacket.pItem.aAttr[iAttr];

            if (kSubPacket.Cell.IsValidCell() && !kSubPacket.Cell.IsEquipCell())
                CPythonPlayer::instance().SetActivatedAuraSlot(BYTE(kSubPacket.AuraCell.cell), kSubPacket.Cell);

            CPythonPlayer::instance().SetAuraItemData(BYTE(kSubPacket.AuraCell.cell), kItemData);
        }
        else
            TraceError(" RecvAuraPacket Error 0x040%uBABE", kAuraPacket.bSubHeader);

        break;
    }
flag ve antiflag'a dair hiçbir işlem ve veri yok. Dolayısıyla serverdan cliente gelen paketin boyutu, clientin beklediğinden daha büyük olabilir.
Server tarafından flag ve antfilag satırlarını kaldırmayı veya client tarafına da aynı şekilde ekleme yaparak deneyebilirsin.
şuan denedim fakat sonuç aynı sistemi ilk eklediğimde böyle bir problem yoktu galiba sonra eklediğim sistemler ile alakalı olabilir biraz ona yoğunlaşayım
C++:
Genişlet Daralt Kopyala
#define ENABLE_SHOW_CHEST_DROP                    // sandık aynası modulu
#define ENABLE_LARGE_DYNAMIC_PACKET                // Large dynamic packet Utility
#define ENABLE_TARGET_INFORMATION_SYSTEM        // Moblardan du?enleri gorme
#define ENABLE_CONQUEROR_LEVEL                    // Official Yohara Update
#define __ITEM_APPLY_RANDOM__                    // Apply Random Individual Attributes
#define __PENDANT_SYSTEM__                        // Talisman Elements
#define __GLOVE_SYSTEM__                        // Glove Equipement
#define __ELEMENT_SYSTEM__                        // official Element System

biraz geç farkettim geriyede dönemiyorum ama bu sistemlerden kaynaklanabilirmi onuda bilmiyorum tek tek kontrol edeceğim yardımın için teşekkür ederim :)
 
şuan denedim fakat sonuç aynı sistemi ilk eklediğimde böyle bir problem yoktu galiba sonra eklediğim sistemler ile alakalı olabilir biraz ona yoğunlaşayım
C++:
Genişlet Daralt Kopyala
#define ENABLE_SHOW_CHEST_DROP                    // sandık aynası modulu
#define ENABLE_LARGE_DYNAMIC_PACKET                // Large dynamic packet Utility
#define ENABLE_TARGET_INFORMATION_SYSTEM        // Moblardan du?enleri gorme
#define ENABLE_CONQUEROR_LEVEL                    // Official Yohara Update
#define __ITEM_APPLY_RANDOM__                    // Apply Random Individual Attributes
#define __PENDANT_SYSTEM__                        // Talisman Elements
#define __GLOVE_SYSTEM__                        // Glove Equipement
#define __ELEMENT_SYSTEM__                        // official Element System

biraz geç farkettim geriyede dönemiyorum ama bu sistemlerden kaynaklanabilirmi onuda bilmiyorum tek tek kontrol edeceğim yardımın için teşekkür ederim :)
Eğer durum böyleyse her şey mümkün. Son eklenenleri sırayla devre dışı bırakıp denemen gerekiyor.
 
GameType.h dosyanı aç ve orada TItemData struct yapının içindeki herşeyi(daha doğrusu GC_SET_ITEM’de olmayanları) bu auranın GC_SET_ITEM içine ekle sorunun düzelir. Aynı şekilde Game/Packet.h içindeki TItemData structun içindeki olmayan değişkenleri de GameType.h içinden al ekle. char_aura.cpp aç ve TItemDatadan alıp GC paketi ile gidecek değişkenlere ata. Eğer yapamazsan sabah uyanınca yardımcı olurum çok basit sorun.
 
Son düzenleme:
Çözüm
GameType.h dosyanı aç ve orada TItemData struct yapının içindeki herşeyi(daha doğrusu GC_SET_ITEM’de olmayanları) bu auranın GC_SET_ITEM içine ekle sorunun düzelir. Aynı şekilde Game/Packet.h içindeki TItemData structun içindeki olmayan değişkenleri de GameType.h içinden al ekle. char_aura.cpp aç ve TItemDatadan alıp GC paketi ile gidecek değişkenlere ata. Eğer yapamazsan sabah uyanınca yardımcı olurum çok basit sorun.
evet dediğiniz gibi çözdüm sorunu apply_random sisteminin uyarlanması gerekiyormuş aura sistemine

server tarafı:
packet.h:
Genişlet Daralt Kopyala
typedef struct SItemData
{
    DWORD    vnum;
    BYTE    count;
    DWORD    flags;
    DWORD    anti_flags;
    long    alSockets[ITEM_SOCKET_MAX_NUM];
#if defined(__ITEM_APPLY_RANDOM__) //eksikti eklendi
    TPlayerItemAttribute aApplyRandom[ITEM_APPLY_MAX_NUM];
#endif
    TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
} TItemData;

char_aura.cpp:
Genişlet Daralt Kopyala
            sub.Cell = ItemCell;
            sub.AuraCell = AuraCell;
            sub.pItem.vnum = pItem->GetVnum();
            sub.pItem.count = pItem->GetCount();
            sub.pItem.flags = pItem->GetFlag();
            sub.pItem.anti_flags = pItem->GetAntiFlag();
            thecore_memcpy(sub.pItem.alSockets, pItem->GetSockets(), sizeof(sub.pItem.alSockets));
            thecore_memcpy(sub.pItem.aAttr, pItem->GetAttributes(), sizeof(sub.pItem.aAttr));
#if defined(__ITEM_APPLY_RANDOM__)//eksikti eklendi
            thecore_memcpy(sub.pItem.aApplyRandom, pItem->GetAttributes(), sizeof(sub.pItem.aApplyRandom));
#endif

client tarafı:
GameType.h:
Genişlet Daralt Kopyala
typedef struct packet_item
{
    DWORD       vnum;
    BYTE        count;
    DWORD        flags;
    DWORD        anti_flags;
    long        alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
#if defined(ENABLE_APPLY_RANDOM)
    TPlayerItemAttribute aApplyRandom[ITEM_APPLY_RANDOM_SLOT_MAX_NUM];
#endif
    TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
} TItemData;

PythonNetworkStreamPhaseGame.cpp:
Genişlet Daralt Kopyala
    case AURA_SUBHEADER_GC_SET_ITEM:
    {
        if (iPacketSize > 0)
        {
            TSubPacketGCAuraSetItem kSubPacket;
            assert(iPacketSize % sizeof(TSubPacketGCAuraSetItem) == 0 && "AURA_SUBHEADER_GC_SET_ITEM");
            if (!Recv(sizeof(TSubPacketGCAuraSetItem), &kSubPacket))
                return false;

            TItemData kItemData;
            kItemData.vnum = kSubPacket.pItem.vnum;
            kItemData.count = kSubPacket.pItem.count;
            for (int iSocket = 0; iSocket < ITEM_SOCKET_SLOT_MAX_NUM; ++iSocket)
                kItemData.alSockets[iSocket] = kSubPacket.pItem.alSockets[iSocket];
            for (int iAttr = 0; iAttr < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++iAttr)
                kItemData.aAttr[iAttr] = kSubPacket.pItem.aAttr[iAttr];
#if defined(ENABLE_APPLY_RANDOM)//eksikti eklendi.
            for (int iAttr = 0; iAttr < ITEM_APPLY_RANDOM_SLOT_MAX_NUM; ++iAttr)
                kItemData.aApplyRandom[iAttr] = kSubPacket.pItem.aApplyRandom[iAttr];
#endif
            if (kSubPacket.Cell.IsValidCell() && !kSubPacket.Cell.IsEquipCell())
                CPythonPlayer::instance().SetActivatedAuraSlot(BYTE(kSubPacket.AuraCell.cell), kSubPacket.Cell);

            CPythonPlayer::instance().SetAuraItemData(BYTE(kSubPacket.AuraCell.cell), kItemData);
        }
        else
            TraceError(" RecvAuraPacket Error 0x040%uBABE", kAuraPacket.bSubHeader);

        break;

@hasanmacit bu apply_random daha ne bela açacak görecez :D :D sende eklede aura sistemin bozuk kalmasın :)
 
Son düzenleme:
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst