Geriye atma sorununa farklı bir çözüm yolu

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Başlıktanda anlaşılacağı üzere fix geriye atma sorunuyla alakalıdır eklediğiniz bir binek mi var ? ve geriye atıyorsa doğru yere geldiğinizi tam olarak söyleyebilirim sanırım :)
Yanlışım var ise düzeltmenizi rica ediyorum aksi halde küfür veyahutta hakarete gerek yoktur.
O mobla ilgili klasörü bulamayınca atıyormuş bunun için mob protoda o klasör yolunu belirtmeniz gerekiyormuş
Kaynak veremem çünkü başka bir forumda paylaşıldı isimde veremem reklama girer oyüzden sadece fixi veriyorum
motion.cpp açın ve kaldıracağınız kod aşağıdadır komple kaldırınız.

Kod:
if ('\0' != t->szFolder[0])         {             CMotionSet * pkMotionSet = M2_NEW CMotionSet;             m_map_pkMotionSet.insert(TContainer::value_type(t->dwVnum, pkMotionSet));             LoadMotion(pkMotionSet, t, MOTION_WALK);             LoadMotion(pkMotionSet, t, MOTION_RUN);             LoadMotion(pkMotionSet, t, MOTION_NORMAL_ATTACK);             LoadSkillMotion(pkMotionSet, pkMob, MOTION_SPECIAL_1);             LoadSkillMotion(pkMotionSet, pkMob, MOTION_SPECIAL_2);             LoadSkillMotion(pkMotionSet, pkMob, MOTION_SPECIAL_3);             LoadSkillMotion(pkMotionSet, pkMob, MOTION_SPECIAL_4);             LoadSkillMotion(pkMotionSet, pkMob, MOTION_SPECIAL_5);             float normalAttackDuration = MOB_GetNormalAttackDuration(t);             sys_log(0, "mob_normal_attack_duration:%d:%s:%.2f", t->dwVnum, t->szFolder, normalAttackDuration);             m_map_normalAttackDuration.insert(std::map<DWORD, float>::value_type(t->dwVnum, normalAttackDuration));         }


Geriye Atma Sorununa Farklı Bir Çözüm Yolu

Metin2 özel sunucularında karşılaşılan en yaygın ve oyuncu deneyimini olumsuz etkileyen problemlerden birisi de geriye atma mekanizmasıdır. Özellikle PvP sistemlerinde, hatalı pozisyonlama veya kodsal aksaklıklar sebebiyle karakterlerin beklenmedik şekilde geriye doğru itilmesi, savaş akışını bozar ve adil bir mücadele ortamı sunulmasını engeller. Bu yazıda, Metin2 özel sunucularında karşılaşılan geriye atma sorununa yönelik farklı bir C++ tabanlı çözüm yaklaşımı ele alınacaktır.

Geriye Atma Nedir?

Oyun içinde iki karakter çarpıştığında, fiziksel temas sonucunda birbirlerine göre konumlarını korumak veya geriye itilmek gibi durumlar oluşabilir. Bu tür etkileşimler genellikle oyun motorunun fizik hesaplamalarıyla yönetilir. Ancak Metin2'nin orijinal yapısı, bazı özel sunucu yapılandırmalarında bu konularda eksik kalabiliyor. Özellikle game server programming sırasında yapılan küçük değişiklikler, bu tür fiziksel davranışları bozabilir.

Problemin Kaynağı

Geriye atma problemi genellikle client src ve server src arasında senkronizasyon eksikliğinden doğar. Oyuncu tarafından gönderilen hareket verileri sunucuya ulaşırken, sunucu bu verileri işlerken pozisyon güncellemeleri sırasında hata yaparsa, karakterler beklenmedik şekilde geriye doğru itilebilir. Bu durum, PvP maçlarında özellikle kritik anlarda büyük dezavantajlar yaratabilir.

Alternatif Bir Yaklaşım: Pozisyon Kontrolü

Geleneksel olarak bu tür sorunlar, movement.cpp veya benzeri dosyalarda yer alan pozisyon kontrol algoritmalarında yapılan ayarlamalarla giderilmeye çalışılır. Ancak bu yöntem genellikle sadece belirli senaryoları çözebilir. Daha kapsamlı bir çözüm için, C++ seviyesinde bir hook sistemi kurmak ve pozisyon güncellemelerini daha sık ve detaylı kontrol etmek gerekebilir.

Örneğin, her oyuncunun pozisyonu, belli aralıklarla sunucu tarafında loglanabilir ve beklenmeyen pozisyon sıçramaları tespit edildiğinde, o karakterin pozisyonu manuel olarak düzeltilerek oyun akışı korunabilir. Bu işlem için Python destekli bir script de kullanılabilir. Py root dosyalarında, pozisyon verilerini analiz eden bir modül yazmak mümkündür.

Kod Örneği: Basit Pozisyon Kontrol Sistemi

Aşağıda basit bir pozisyon kontrol mekanizmasının C++[/BR] tabanlı temsili verilmiştir:

Kod:
[COLOR=#9365b8]void CheckAndCorrectPosition(LPCHARACTER ch) {[/COLOR][BR][/BR][COLOR=#9365b8]    if (!ch) return;[/COLOR][BR][/BR][COLOR=#9365b8]    int currentX = ch->GetX();[/COLOR][BR][/BR][COLOR=#9365b8]    int currentY = ch->GetY();[/COLOR][BR][/BR][COLOR=#9365b8]    int lastX = ch->GetLastValidX();[/COLOR][BR][/BR][COLOR=#9365b8]    int lastY = ch->GetLastValidY();[/COLOR][BR][/BR][COLOR=#9365b8]    int dist = DISTANCE(currentX, currentY, lastX, lastY);[/COLOR][BR][/BR][COLOR=#9365b8]    if (dist > MAX_ALLOWED_DISTANCE) {[/COLOR][BR][/BR][COLOR=#9365b8]        ch->SetPosition(lastX, lastY);[/COLOR][BR][/BR][COLOR=#9365b8]    }[/COLOR][BR][/BR][COLOR=#9365b8]}[/COLOR]


Sonuç

Geriye atma sorunu, Metin2[/BR] özel sunucularında sıklıkla görülen ve PvP[/BR] deneyimini ciddi anlamda bozan bir durumdur. Ancak bu sorunun çözümü için sadece klasik fiziksel ayarlamalarla yetinmek yerine, daha derin source edit[/BR] işlemleri ve C++[/BR] seviyesinde pozisyon kontrol mekanizmaları geliştirilerek daha etkili çözümler üretilebilir. Bu tarz sistemler, hem game[/BR] hem de auth[/BR] katmanında uygulanabilir ve sunucu kararlılığını artırmaya yardımcı olur.

Daha fazla Metin2[/BR] geliştirme kaynağı ve örnek sistemler için Metin2Lobby üzerinden güncel konuları takip edebilirsiniz.


A Different Solution Approach to Backward Push Issue

In Metin2 private servers, one of the most common issues affecting player experience is the backward push mechanism. Especially in PvP systems, incorrect positioning or code flaws may cause characters to unexpectedly be pushed backward, disrupting combat flow and hindering a fair fight environment. In this article, we will discuss a different C++-based solution approach for the backward push issue encountered in Metin2 private servers.

What is Backward Push?

During in-game character collisions, physical contact may result in position adjustments such as pushing each other backward. These interactions are typically handled by the game engine's physics calculations. However, Metin2's original structure may sometimes fall short in certain custom server configurations. Particularly during game server programming, small changes made can disrupt these types of physical behaviors.

Root of the Problem

The backward push issue usually stems from synchronization errors between client src and server src. When movement data sent by the player reaches the server, if the server makes mistakes while updating positions, characters may be unexpectedly pushed backward. This situation can cause significant disadvantages during critical moments in PvP matches.

Alternative Approach: Position Control

Traditionally, these issues are resolved by adjusting algorithms in files like movement.cpp. However, this method often only solves specific scenarios. For a more comprehensive solution, creating a hook system at the C++ level and checking position updates more frequently and in detail may be necessary.

For example, every player's position can be logged on the server side at regular intervals. If unexpected position jumps are detected, the character's position can be manually corrected to maintain gameplay flow. A Python-supported script can also be used for this purpose. A module analyzing position data can be written within Py root files.

Code Example: Simple Position Control System

Below is a C++-based representation of a simple position control mechanism:

Kod:
[COLOR=#9365b8]void CheckAndCorrectPosition(LPCHARACTER ch) {[/COLOR][BR][/BR][COLOR=#9365b8]    if (!ch) return;[/COLOR][BR][/BR][COLOR=#9365b8]    int currentX = ch->GetX();[/COLOR][BR][/BR][COLOR=#9365b8]    int currentY = ch->GetY();[/COLOR][BR][/BR][COLOR=#9365b8]    int lastX = ch->GetLastValidX();[/COLOR][BR][/BR][COLOR=#9365b8]    int lastY = ch->GetLastValidY();[/COLOR][BR][/BR][COLOR=#9365b8]    int dist = DISTANCE(currentX, currentY, lastX, lastY);[/COLOR][BR][/BR][COLOR=#9365b8]    if (dist > MAX_ALLOWED_DISTANCE) {[/COLOR][BR][/BR][COLOR=#9365b8]        ch->SetPosition(lastX, lastY);[/COLOR][BR][/BR][COLOR=#9365b8]    }[/COLOR][BR][/BR][COLOR=#9365b8]}[/COLOR]


Conclusion

The backward push issue is frequently seen in Metin2 private servers and significantly disrupts the PvP experience. However, instead of limiting solutions to traditional physics adjustments, more effective solutions can be developed by implementing deeper source edit operations and developing position control mechanisms at the C++ level. Such systems can be applied in both game and auth layers, helping improve server stability.

For more Metin2 development resources and example systems, you can follow up-to-date topics at Metin2Lobby.
 

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

Benzer konular

Geri
Üst Alt