sycnlimitlemesiyle alakalı

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 55

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
// 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
Metin2 Sunucularında Sync Limiti Nedir ve Neden Önemlidir?

Metin2 özel sunucu geliştirme süreçlerinde, özellikle PvP sistemlerin yoğun olduğu sunucularda sync limiti kavramı oldukça kritik bir rol oynar. Bu yazıda, sync limiti nedir, nasıl ayarlanır, neden önemli olduğu ve Metin2 özel sunucularında bu konunun nasıl ele alınması gerektiği hakkında detaylı bilgiler vereceğiz.

Sync Limiti Nedir?

Sync terimi, genellikle ağ üzerinden veri senkronizasyonu anlamına gelir. Metin2 özel sunucularda, oyuncuların eylemleri sunucuyla senkronize edilmek zorundadır. Bu senkronizasyonun miktarı belirli sınırlar dahilinde tutulmalıdır. Aksi takdirde, cheat veya hile algılayan sistemler yanlış pozitif sonuçlar verebilir ya da sunucuda istikrarsızlıklar oluşabilir. İşte bu noktada sync limiti devreye girer.

Sync Limiti Ayarları ve Güvenlik

Metin2 sunucu yapılandırmasında, genellikle game core içinde yer alan bazı ayarlar sayesinde sync limiti belirlenir. Bu ayarlar genellikle C++ tabanlı source code dosyalarında düzenlenir. Örneğin, game/src/char/char.cpp gibi dosyalarda bulunan sync mekanizmaları incelenerek, bu değerler ayarlanabilir. Martysama gibi geliştirici kaynaklarında bu tür ayarlamalar için örnek kodlar da bulunabilir.

Neden Sync Limiti Önemlidir?

Oyuncuların hızlı hareket etmesi, ani yön değiştirmesi gibi durumlarda sync değerleri artar. Eğer bu değerler çok yüksek olursa, sunucu bu oyuncuyu hile kullandığı için engelleyebilir. Bu da kullanıcı deneyimini ciddi anlamda etkiler. Bu yüzden doğru ayarlanmış bir sync limiti, hem güvenliği sağlarken hem de adil bir oyun ortamı sunar.

Python ve C++ Tabanlı Sistemlerde Sync Kontrolü

Bazı gelişmiş Metin2 sunucularında, Python tabanlı script sistemleri de sync kontrolünü yapabilir. Özellikle py root ve uiscript dosyalarıyla entegre çalışan sistemlerde, gerçek zamanlı olarak sync değerleri izlenebilir ve gerekirse müdahale edilebilir. Ancak bu işlemler genellikle C++ tabanlı core üzerinde daha stabil çalışır.

Sync Limitini Nasıl Optimize Edebiliriz?

Sunucu sahipleri, oyuncu trafiğine göre sync limitlerini düzenlemelidir. Özellikle PvP odaklı sunucularda, oyuncuların savaş sırasında hızlı hareket etmesi kaçınılmazdır. Bu yüzden çok düşük sync limiti ayarlamak, hatalı engellemelere yol açabilir. Tersine, çok yüksek limitler ise hile riskini artırır. Uzman geliştiriciler, bu ayarları test ederek optimize edebilirler.

Sonuç

Metin2 özel sunucularında sync limiti, güvenlik ve performans dengesinin sağlanmasında önemli bir rol oynar. Doğru yapılandırılmış bir sync sistemi, hem hile kullanımını azaltır hem de kullanıcıların daha keyifli bir oyun deneyimi yaşamasını sağlar. Geliştiricilerin bu konuya dikkat etmesi, uzun vadede sunucunun kalitesini doğrudan etkiler.


What is Sync Limit in Metin2 Servers and Why Is It Important?

In Metin2 private server development processes, especially on servers with high PvP activity, the concept of sync limit plays a critical role. In this article, we will provide detailed information about what sync limit is, how it is configured, why it is important, and how this topic should be handled on Metin2 private servers.

What is Sync Limit?

Sync generally refers to data synchronization over a network. On Metin2 private servers, player actions must be synchronized with the server. This synchronization must remain within certain limits. Otherwise, cheat-detection systems might trigger false positives or cause instability on the server. That's where sync limit comes into play.

Sync Limit Settings and Security

In Metin2 server configurations, sync limit is typically defined through settings found within the game core. These settings are usually edited in C++ based source code files. For example, sync mechanisms found in files like game/src/char/char.cpp can be adjusted accordingly. Sample codes for such adjustments may also be available in developer resources such as Martysama.

Why Is Sync Limit Important?

When players move quickly, change direction suddenly, or perform rapid actions, their sync values increase. If these values become too high, the server may flag the player for cheating. This significantly affects user experience. Therefore, properly configured sync limits ensure both security and fair gameplay.

Sync Control in Python and C++ Based Systems

On some advanced Metin2 servers, Python-based script systems can also monitor sync control. Particularly in systems integrated with py root and uiscript files, sync values can be monitored in real-time and corrected if necessary. However, such operations typically run more stably on C++-based core implementations.

How Can We Optimize Sync Limits?

Server owners should adjust sync limits according to player traffic. Especially on PvP-oriented servers, quick movements during combat are inevitable. Therefore, setting very low sync limits may result in false bans. Conversely, setting limits too high increases the risk of cheating. Expert developers can test and optimize these settings accordingly.

Conclusion

In Metin2 private servers, sync limit plays an important role in balancing security and performance. Properly configured sync systems reduce cheating while allowing players to enjoy a better gaming experience. Developers who pay attention to this topic directly impact the long-term quality of their server.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt