Ikarus OfflineShop 3.slot (2 nolu) slot sorunu çözümü

xxabubaxx

Üye
Üye
Mesaj
28
Çözümler
1
Beğeni
42
Puan
333
Ticaret Puanı
0
Merhaba arkadaşlar bugün serverimde uzun süredir mevcut olan sorunun peşine düştüm ve tek tek logladım. Sorunun client tarafında olduğunu tespit ettim. Sorun tamamen SendSpecial fonksiyonu ile alakalı olduğunu tespit ettim sorunun sebebi aslında komediymiş.
Orjinal kod:
Genişlet Daralt Kopyala
bool CPythonNetworkStream::SendSpecial(int nLen, void* pvBuf)
{
    if (nLen <= 0)
        return true;
   
    BYTE bHeader = *(BYTE*)pvBuf;

    switch (bHeader)
    {
    case HEADER_CG_ATTACK:
    {
        TPacketCGAttack* pkPacketAtk = (TPacketCGAttack*)pvBuf;
        pkPacketAtk->bCRCMagicCubeProcPiece = GetProcessCRCMagicCubePiece();
        pkPacketAtk->bCRCMagicCubeFilePiece = GetProcessCRCMagicCubePiece();

        return CNetworkStream::Send(nLen, (const char*)pvBuf);
    }
    break;
    }

    return CNetworkStream::Send(nLen, (const char*)pvBuf);
}

gördüğünüz üzere kod bu muhtemelen herkesin client sourcesinde bu kod vardır. İkarus bu kod üzerindne servere packetleri gönderiyor fakat gördüğnüüz üzere case HEADER_CG_ATTACK kısmı olayı bozuyor src pos yani itemin yer değiştirirken bulunuduğu konum 2 ise HEADER_CG_ATTACK 2 değerine eşit olduğu için server tarafına bozuk veri gidiyor bu sebeple 3. slottan başka slota taşıma olmuyor. Bunun çözümünü sizlerle paylaşıyorum. Hiç orjinal kod bloğuna bulaşmadan bu şekilde çözüme ulaştım.
ekleyin:
PythonNetworkStream.h:
Genişlet Daralt Kopyala
#ifdef ENABLE_IKASHOP_RENEWAL
    bool SendIkarusSpecial(int nLen, void* pvBuf);
   
    bool SendIkarus(int nLen, const void* pvBuf) {
        return SendIkarusSpecial(nLen, const_cast<void*>(pvBuf));
    }
    template <typename S>
    bool SendIkarus(const S& rPacket) {
        return SendIkarusSpecial(sizeof(S), (void*)&rPacket);
    }
#endif
PythonNetworkStreamPhaseGame.cpp:
Genişlet Daralt Kopyala
// sendspecial fonksiyonun altına ekleyin
bool CPythonNetworkStream::SendIkarusSpecial(int nLen, void* pvBuf)
{
    if (nLen <= 0)
        return true;

    return CNetworkStream::Send(nLen, (const char*)pvBuf);
}

ardından PythonNetworkStreamIkarusShop.cpp dosyasını açın notepad ile CTRL+F yapıp değiştir kısmına gelin: aranan kısma " (!Send( " yazın sonra değiştir kısmına "(!SendIkarus( " yazın tümünü değiştir diyin. Sorun çözülecektir. Ben nolur nolmaz diye orjinal fonksiyona dokunmak istemedim isteyen ayarlayabilir. Benzer bir sorunla karşı karşıyasanız büyük ihitmalle bunla alakalı olabilir! Yani milyonda bir ihtimal benim başıma gelmiş :)
 
Son düzenleme:
Geri
Üst