Best Studio 1
Best Studio
BlackFullMoon 1
BlackFullMoon
NovaLst 1
NovaLst
SLyFeLLowTR 1
SLyFeLLowTR
xranzei 1
xranzei
InfernoShade 1
InfernoShade
shrpnl 1
shrpnl
D 1
delimuratt
noisiv 1
noisiv
Manwe Work 1
Manwe Work
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

sycnlimitlemesiyle alakalı

  • Konuyu başlatan Konuyu başlatan apikomt2
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 3
  • Görüntüleme Görüntüleme 670

apikomt2

Level 6
Uzman
Katılım
11 May 2023
Konular
270
Mesajlar
1,144
Çözüm
2
Online süresi
1mo 25d
Reaksiyon Skoru
746
Altın Konu
1
Başarım Puanı
199
MmoLira
1,258
DevLira
381
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

// Senkronizasyon sahibi ile mesafe 250 birimden fazla ise, senkronizasyon yapılmaz
if (DISTANCE_APPROX(GetX() - ch->GetX(), GetY() - ch->GetY()) > 2000)
{
sys_log(1, "SetSyncOwner distance over than 250 %s %s", GetName(), ch->GetName());

if (m_pkChrSyncOwner == ch)
return true;

return false;
}

2000 sizde 250 yazar

şöyleki

a karakter birine saldırınca b kıpırdamadan duruyorsa b karakteri ileri atar doğru.
a kakrateri b karakteri 500 600 mesafeyi iter ama damage işlemesi halen devam eder doğru.
ama a karakter b karater 500 600 mesafe ileri atsada öldürsede 500 600 mesafe ilerde.
b karater oyunu baslat dirilme dediğinde baslangıc pozisyonunda doğuyor.

hata bu

bu durum b karaterin sync girmediği içindir görünürde hareketsiz kaldığı içindir
buna karakter kayması diyip düzeltelim çabasına giren çok oldu aslında mesafeyi aşınca sync kapatma işlevi varmış



Kod:
bool CHARACTER::SetSyncOwner(LPCHARACTER ch, bool bRemoveFromList)
{
    // TRENT_MONSTER: Özel bir kısıtlama (hareket etmeyen karakterler)
    if (IS_SET(m_pointsInstant.dwAIFlag, AIFLAG_NOMOVE))
        return false;
    // END_OF_TRENT_MONSTER

    // Senkronizasyon yapılacak karakter var mı?
    if (ch)
    {
        // Eğer hedef karakterle savaş yapılabilir değilse, senkronizasyon yapılmaz
        if (!battle_is_attackable(ch, this))
        {
            SendDamagePacket(ch, 0, DAMAGE_BLOCK);
            return false;
        }
    }

    // Eğer kendisiyle senkronize olmaya çalışıyorsa, işlem yapılmaz
    if (ch == this)
    {
        sys_err("SetSyncOwner owner == this (%p)", this);
        return false;
    }

    // Eğer senkronizasyon yapılacak karakter yoksa
    if (!ch)
    {
        // Senkronizasyon sahibini kaldırma işlemi
        if (bRemoveFromList && m_pkChrSyncOwner)
        {
            m_pkChrSyncOwner->m_kLst_pkChrSyncOwned.remove(this);
        }

        // Senkronizasyon sahibi varsa loglama yaparak sıfırlama işlemi
        if (m_pkChrSyncOwner)
            sys_log(1, "SyncRelease %s %p from %s", GetName(), this, m_pkChrSyncOwner->GetName());

        m_pkChrSyncOwner = NULL;
    }
    else
    {
        // Eğer hedef karakter senkronizasyon sahibi olamazsa, işlem yapılmaz
        if (!IsSyncOwner(ch))
            return false;

        // Senkronizasyon sahibi ile mesafe 250 birimden fazla ise, senkronizasyon yapılmaz
        if (DISTANCE_APPROX(GetX() - ch->GetX(), GetY() - ch->GetY()) > 2000)
        {
            sys_log(1, "SetSyncOwner distance over than 250 %s %s", GetName(), ch->GetName());

            if (m_pkChrSyncOwner == ch)
                return true;

            return false;
        }

        // Eğer mevcut senkronizasyon sahibi farklıysa
        if (m_pkChrSyncOwner != ch)
        {
            // Önceki senkronizasyon sahibinden çıkarma
            if (m_pkChrSyncOwner)
            {
                sys_log(1, "SyncRelease %s %p from %s", GetName(), this, m_pkChrSyncOwner->GetName());
                m_pkChrSyncOwner->m_kLst_pkChrSyncOwned.remove(this);
            }

            // Yeni senkronizasyon sahibini ayarlama
            m_pkChrSyncOwner = ch;
            m_pkChrSyncOwner->m_kLst_pkChrSyncOwned.emplace_back(this);

            // Senkronizasyon zamanını sıfırlama
            static const timeval zero_tv = {0, 0};
            SetLastSyncTime(zero_tv);

            sys_log(1, "SetSyncOwner set %s %p to %s", GetName(), this, ch->GetName());
        }

        // Senkronizasyon zamanını güncelleme
        m_fSyncTime = get_float_time();
    }

    // Senkronizasyon paketini oluşturma
    TPacketGCOwnership pack;
    pack.bHeader    = HEADER_GC_OWNERSHIP;
    pack.dwOwnerVID = ch ? ch->GetVID() : 0;
    pack.dwVictimVID = GetVID();

    // Paket çevredeki karakterlere gönderilir
    PacketAround(pack);
    return true;
}


Sync nedir?

Karakterlerin birbirine yaptığı davranış etkileri.
Yani x karakter y karakteri iterse bu bilgi karşı tarafa gider. Burda sync işlevi gerçekleşir.

Bu konunun oluşmasında %90 yapay zeka yardımcı oldu.

Kodun ne işe yaradığını bilmiyorsan kodu yapay zekaya yapıştır kodu detaylı Türkçeleştir yaz hepsini açıklıyor
Bu konudaki kodda yapay zeka turkcelestirdi
 
Son düzenleme:
paylaşım için teşekkürler.
 
paylaşım için teşekkürler.
 

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

Geri
Üst