Arrdream

Yönetici
Root Administrator
Çaylak Üye
Katılım
14 Aralık 2024
Mesajlar
119
Tepkime puanı
20
Puan
18
Konum
Milkyway Galaxy
u seride doğrudan Metin2'den tersine mühendislik(reverse engineering) ile sökülmüş veya Metin2'ye sağdık kalınarak yazılmış sistemleri paylaşacağım.
Sistemler 2014 yılında sızdırılan kraizy.tgz arşivindeki mainline için yazılmıştır. Siz başka server dosyaları kullanıyorsanız aradığınız bazı kodları bulamayabilir veya birtakım hatalarla karşılaşabilirsiniz.

Sistem sahibi metin2.dev'den xP3NG3Rx'dir.
Sistemi aldığım asıl konu: How To Storing Affects for Check later

6- Storing Affects: Karakter üzerindeki her affecti kontrol edebilmenize olanak sağlayan sistem.
  • Metin2 bu sistemi Otomatik Av sistemiyle beraber şebnemlerin ve diğer potların sürlerini kontrol etmek için ekledi.
  • Bu sistem, [Loot Filter] sisteminin bir ön gereksinimidir.
Nasıl yapılır:

1 - Client/UserInterface/PythonPlayer.h dosyasını açın.
C++:
    protected:
        typedef std::vector<TPacketAffectElement> TAffectDataVector;
        TAffectDataVector    m_mapAffectData;
    public:
        void    AddAffect(DWORD dwType, TPacketAffectElement kElem);
        void    RemoveAffect(DWORD dwType, BYTE bApplyOn);
        int        GetAffectDataIndex(DWORD dwType, BYTE bApplyOn);
        TPacketAffectElement GetAffectData(DWORD dwType, BYTE bApplyOn);

Bu kodu CPythonPlayer class'ının en sonuna ekleyin

2 - Client/UserInterface/PythonPlayer.cpp dosyasını açın.

CPythonPlayer::Clear fonksiyonunu bulun ve en altına bu satırı ekleyin:
C++:
    m_mapAffectData.clear();

CPythonNetworkStream::RecvAffectRemovePacket fonksiyonunda return'un üzerine ekleyin:
C++:
    CPythonPlayer::instance().RemoveAffect(kAffectRemove.dwType, kAffectRemove.bApplyOn);

4 - Client/UserInterface/PythonPlayerModule.cpp dosyasını açın.
Fonksiyonu istediğiniz uygun bir yere ekleyin:
C++:
PyObject * playerCheckAffect(PyObject* poSelf, PyObject* poArgs)
{
    DWORD dwType;
    if (!PyTuple_GetUnsignedLong(poArgs, 0, &dwType))
        return Py_BadArgument();

    BYTE bApplyOn;
    if (!PyTuple_GetByte(poArgs, 1, &bApplyOn))
        return Py_BadArgument();

    int iAffIndex = CPythonPlayer::Instance().GetAffectDataIndex(dwType, bApplyOn);
    return Py_BuildValue("b", iAffIndex != -1);
}

void initPlayer() içinde en sona ekleyin:

C++:
        { "CheckAffect",                            playerCheckAffect,                            METH_VARARGS },
 
Son düzenleme:
Geri
Üst