İlan
04 Haz 2026 22 çevrimiçi üye Duyurular
Ana Sayfa C++ / C# / Python
Ana Sayfa Forum C++ / C# / Python - Güvenli alanlara giren canavarlar için ödülü dev...
İlan Yan banner placeholder

- Güvenli alanlara giren canavarlar için ödülü devre dışı bırak (Orijinalin kaynağı Gameforge'tir)

beetle_juice 17.04.2026 02:29 1.1K görüntüleme 4 cevap
Son Mesaj
beetle_juice
Üye
Üye
Katılım28 Ara 2025
Konular10
Mesajlar74
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
17.04.2026 02:29 #1

gyazo

game\src\char.h (public add):
        void            CheckSafeZoneForMonster();


game\src\char.cpp (add global namespace):
void CHARACTER::CheckSafeZoneForMonster()
{
    if (!IsMonster())
        return;

    if (IsDead())
        return;

    LPSECTREE sectree = GetSectree();
    if (!sectree)
        return;

    if (sectree->IsAttr(GetX(), GetY(), ATTR_BANPK))
    {
        M2_DESTROY_CHARACTER(this);
        return;
    }
}

game\src\char.cpp (chane function):
void CHARACTER::UpdateStateMachine(DWORD dwPulse)
{
    if (dwPulse < m_dwNextStatePulse)
        return;

    if (IsDead())
        return;

    CheckSafeZoneForMonster();

    if (IsDead())
        return;

    Update();
    m_dwNextStatePulse = dwPulse + m_dwStateDuration;
}
beetle_juice
Üye
Üye
Katılım28 Ara 2025
Konular10
Mesajlar74
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
17.04.2026 17:51 #2
Hello, thanks for sharing. However, this method is performance-heavy for the processor. Using M2_DESTROY_CHARACTER in this logic is not recommended and may lead to server crashes (game.core). This is because it force-deletes the object without proper cleanup, potentially leaving behind corrupted pointers or dangling data.
In any case, this is another way.

C++:
void CHARACTER::OnMove(bool bIsAttack)
{
    m_dwLastMoveTime = get_dword_time();

    if (bIsAttack)
    {
        m_dwLastAttackTime = m_dwLastMoveTime;

        if (IsAffectFlag(AFF_REVIVE_INVISIBLE))
            RemoveAffect(AFFECT_REVIVE_INVISIBLE);

        if (IsAffectFlag(AFF_EUNHYUNG))
        {
            RemoveAffect(SKILL_EUNHYUNG);
            SetAffectedEunhyung();
        }
        else
        {
            ClearAffectedEunhyung();
        }
    }

    // MINING
    mining_cancel();
    // END_OF_MINING

    // @LunCode003 Begin
    SECTREE* sectree = GetSectree();
    if (IsMonster() && sectree && sectree->IsAttr(GetX(), GetY(), ATTR_BANPK))
        DeadNoReward();
    // @LunCode003 End

}

DeadNoReward
Available at Source martysama
bilalern10
Üye
Üye
Katılım13 Mar 2026
Konular7
Mesajlar59
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
02.05.2026 20:46 #3
Hello, thanks for sharing. However, this method is performance-heavy for the processor. Using M2_DESTROY_CHARACTER in this logic is not recommended and may lead to server crashes (game.core). This is because it force-deletes the object without proper cleanup, potentially leaving behind corrupted pointers or dangling data.
In any case, this is another way.

C++:
void CHARACTER::OnMove(bool bIsAttack)
{
    m_dwLastMoveTime = get_dword_time();

    if (bIsAttack)
    {
        m_dwLastAttackTime = m_dwLastMoveTime;

        if (IsAffectFlag(AFF_REVIVE_INVISIBLE))
            RemoveAffect(AFFECT_REVIVE_INVISIBLE);

        if (IsAffectFlag(AFF_EUNHYUNG))
        {
            RemoveAffect(SKILL_EUNHYUNG);
            SetAffectedEunhyung();
        }
        else
        {
            ClearAffectedEunhyung();
        }
    }

    // MINING
    mining_cancel();
    // END_OF_MINING

    // @LunCode003 Begin
    SECTREE* sectree = GetSectree();
    if (IsMonster() && sectree && sectree->IsAttr(GetX(), GetY(), ATTR_BANPK))
        DeadNoReward();
    // @LunCode003 End

}

DeadNoReward
Available at Source martysama
amirali
astrafizik
Üye
Üye
Katılım01 Oca 2026
Konular8
Mesajlar54
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
05.05.2026 05:22 #4
Paylaşım için teşekkürler
Prostavaryo
Üye
Üye
Katılım19 Nis 2026
Konular7
Mesajlar32
Elmas Konular0
Başarım0
ZirveCoin 0
Ticaret Puanı
+0 -0
05.05.2026 11:54 #5

gyazo

game\src\char.h (public add):
        void            CheckSafeZoneForMonster();


game\src\char.cpp (add global namespace):
void CHARACTER::CheckSafeZoneForMonster()
{
    if (!IsMonster())
        return;

    if (IsDead())
        return;

    LPSECTREE sectree = GetSectree();
    if (!sectree)
        return;

    if (sectree->IsAttr(GetX(), GetY(), ATTR_BANPK))
    {
        M2_DESTROY_CHARACTER(this);
        return;
    }
}

game\src\char.cpp (chane function):
void CHARACTER::UpdateStateMachine(DWORD dwPulse)
{
    if (dwPulse < m_dwNextStatePulse)
        return;

    if (IsDead())
        return;

    CheckSafeZoneForMonster();

    if (IsDead())
        return;

    Update();
    m_dwNextStatePulse = dwPulse + m_dwStateDuration;
}
Thanks dude
EPİNKO
Bu konuyu görüntüleyenler
1 misafir
Cevap yazmak için giriş yapın.
Benzer Konular
6 cevap
2K görüntüleme
9 cevap
1.9K görüntüleme
4 cevap
1.9K görüntüleme
8 cevap
1.9K görüntüleme
İlan Yan banner placeholder