mavzermete 1
mavzermete
kaptanmikro1 1
kaptanmikro1
Reklam vermek için turkmmo@gmail.com

Official AI Flag Reflect

Offical oyunun protolarında bulunan reflect aiflag'ı sayesinde mobun %x canı altında vurulan hasarın %y'sini yansıtmasını sağlar.​
char_state.cpp
C++:
// Arat
bool CHARACTER::IsStoneSkinner() const

// Üstüne ekle
bool CHARACTER::IsReflector() const
{
    return IS_SET(m_pointsInstant.dwAIFlag, AIFLAG_REFLECT);
}

// CHARACTER::__StateIdle_Monster() fonksiyonunun içinde arat

    if (IsGodSpeeder())
        if (IsGodSpeed())
            SetGodSpeed(false);

// Altına ekle
    if (IsReflector())
        if (IsReflect())
            SetReflect(false);

// CHARACTER::StateBattle() fonksiyonunun içinde arat
    if (IsGodSpeeder() == true)
        if (GetHPPct() < m_pkMobData->m_table.bGodSpeedPoint)
            if (IsGodSpeed() != true)
                SetGodSpeed(true);

// Üstüne ekle
    if (IsReflector() == true)
        if (GetHPPct() < 25)
            if (IsReflect() != true)
                SetReflect(true);

char_battle.cpp
C++:
// ::Damage fonksiyonu içinde arat
SendDamagePacket(pAttacker, dam, damageFlag);

// Üstüne ekle
    if (pAttacker && pAttacker->IsPC() && IsNPC() && IsReflect())
        pAttacker->SendDamagePacket(this, dam/100*5, damageFlag);

char.h
C++:
//arat
    bool IsBerserker() const;
    bool IsBerserk() const;
    void SetBerserk(bool mode);

//altına ekle
    bool IsReflector() const;
    bool IsReflect() const;
    void SetReflect(bool mode);

char.cpp
C++:
//arat
bool CHARACTER::IsGodSpeed() const

//üstüne ekle
bool CHARACTER::IsReflect() const
{
    if (m_pkMobInst != nullptr)
        return m_pkMobInst->m_IsReflect;
    else
        return false;
}
void CHARACTER::SetReflect(bool mode)
{
    if (m_pkMobInst != nullptr)
        m_pkMobInst->m_IsReflect = mode;
}

mob_manager.cpp
C++:
//arat
CMobInstance::CMobInstance()
    : m_IsBerserk(false), m_IsGodSpeed(false), m_IsRevive(false),
//ekle
, m_IsReflect(false)

mob_manager.h
C++:
//arat
    bool m_IsRevive;

//Altına ekle
    bool m_IsReflect;

+ olarak buraya dahil etmedim fakat
length.h'da
C++:
enum EAIFlags
içerisine sıraya uygun bir şekilde AIFLAG_REFLECT

ve protoreader dosyanıza
get_Mob_AIFlag_Value
fonksiyonunda bulunan array'in içerisine "REFLECT" olarak dahil ettikten sonra mob_proto'da aiflag olarak REFLECT verdiğiniz mobların %25'den az canı olduğunda vurduğunuz hasarın %5'ini size geri yansıtır. Bu kısımları sabit yapmayı tercih ettim, dilerseniz mob proto'ya berserk, stoneskin gibi column açıp dinamik bir şekilde % kaç canda reflect'e gireceğini ve % kaç hasarı geri yansıtacağını ayarlayabilirsiniz.

 

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

Geri
Üst