Hikayeler

Reklam vermek için turkmmo@gmail.com

Krallık Koruyucu NPC (GuardNPC)

  • Konuyu başlatan Rien
  • Başlangıç tarihi
  • Cevaplar 6
  • Görüntüleme 386

Rien

Yönetici
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye
Yönetici
Dergi Editörü
Yönetici
Turnuva
Admin
Yarışma
VIP Üye
Paylaşım
Katılım
19 Kas 2009
Konular
1,185
Mesajlar
4,186
Online süresi
26g 11277s
Reaksiyon Skoru
2,666
Altın Konu
32
Başarım Puanı
344
TM Yaşı
16 Yıl 5 Ay 5 Gün
MmoLira
18,398
DevLira
90

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!

GuardNPC olan npcler kendi krallığından olmayan oyunculara saldırıp anında öldürüyor.

1.gif


char.cpp:
bool CHARACTER::IsGuardNPC() const
{
    return IsNPC() && (GetRaceNum() == 11000 || GetRaceNum() == 11001 || GetRaceNum() == 11002 || GetRaceNum() == 11003 || GetRaceNum() == 11004 || GetRaceNum() == 11005);
}

//GetRaceNum() == xxxx --> xxx alanı npc vnum'udur. İstediğiniz kadar npcyi || ile ayırıp ekleyebilirsiniz.

char_state.cpp:
void CHARACTER::__StateIdle_NPC() üstüne ekle.

class FuncGuardFindVictim
{
public:
    FuncGuardFindVictim(LPCHARACTER pkChr) :
        m_pkChr(pkChr),
        m_pkVictim(nullptr),
        m_iMaxDistance(pkChr->GetMobAttackRange())
    {}

    void operator()(LPENTITY ent)
    {
        if (!ent->IsType(ENTITY_CHARACTER))
            return;

        LPCHARACTER pkChr = static_cast<LPCHARACTER>(ent);

        if (pkChr->IsPC() && pkChr->GetEmpire() != m_pkChr->GetEmpire())
        {
            int iDistance = DISTANCE_APPROX(m_pkChr->GetX() - pkChr->GetX(), m_pkChr->GetY() - pkChr->GetY());

            if (iDistance <= m_iMaxDistance)
            {
                m_pkVictim = pkChr;
            }
        }
    }

    LPCHARACTER GetVictim() const
    {
        return m_pkVictim;
    }

private:
    LPCHARACTER m_pkChr;
    LPCHARACTER m_pkVictim;
    int m_iMaxDistance;
};

else if (IsGuardNPC()) bu else ifi komple aşağıdaki ile değiştir.
  
    else if (IsGuardNPC())
    {
        if (!quest::CQuestManager::instance().GetEventFlag("noguard"))
        {
            FuncGuardFindVictim f(this);

            if (GetSectree())
            {
                GetSectree()->ForEachAround(f);
            }

            LPCHARACTER victim = f.GetVictim();

            if (victim)
            {
                m_dwStateDuration = passes_per_sec / 2;

                if (CanBeginFight())
                {
                    BeginFight(victim);
                }
            }
        }
    }
 
Eline sağlık
 
Paylaşım için Teşekkürler
 
paylaşım için teşekkürler
 
Paylaşım için teşekkürler.
 

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

Geri
Üst