Cannot find tree/sync fixed

  • Konuyu açan Konuyu açan Tengrist
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 7
  • Gösterim Gösterim 285

Tengrist

MT Üye
MT Üye
Mesaj
696
Çözümler
25
Beğeni
516
Puan
809
Ticaret Puanı
0
char.cpp de bul bu kodu:
Genişlet Daralt Kopyala
arat:
bool CHARACTER::Sync(long x, long y)

içinde bul:
    if (!new_tree)
    {
        if (GetDesc())
        {
            sys_err("cannot find tree at %d %d (name: %s)", x, y, GetName());
            GetDesc()->SetPhase(PHASE_CLOSE);
        }
        else
        {
            sys_err("no tree: %s %d %d %d", GetName(), x, y, GetMapIndex());
            Dead();
        }

        return false;
    }
    
Değiştir:
    if (!new_tree)
    {
        if (GetDesc())
        {
            sys_err("cannot find tree at %d %d (name: %s)", x, y, GetName());
#ifdef ENABLE_KICK_SYNC_FIX
            x = GetX();
            y = GetY();
            new_tree = GetSectree();
#else
            GetDesc()->SetPhase(PHASE_CLOSE);
#endif
        }
        else
        {
            sys_err("no tree: %s %d %d %d", GetName(), x, y, GetMapIndex());
            Dead();
        }

        return false;
    }
    
common: service.h ya da commondefines hangisini kullanıyorsan ekle:
#define ENABLE_KICK_SYNC_FIX                                                        // Cannot find tree/sync fixed

valiant2 filesında ne var ne yok bakarken gördüm forumda yoktu sanırım paylaşmak istedim.
Sıkıntı çıkarsa yazın çözeriz, bu hata sanırım karakterler kick yiyince çıkıyordu loglarda
 
Bu fixi hatırlıyorum bi kaç yere daha uygulanması lazım.
 
Bu fixi hatırlıyorum bi kaç yere daha uygulanması lazım.
Az önce bununla ilgili kodlara biraz baktım ve Sync fonksiyonu tüm çağrı hiyerarşisinin kesişim noktası. Yani sadece burada yapılan düzenlemenin yeterli olması lazım.
Ama emin değilim, test etmedim.
 
Az önce bununla ilgili kodlara biraz baktım ve Sync fonksiyonu tüm çağrı hiyerarşisinin kesişim noktası. Yani sadece burada yapılan düzenlemenin yeterli olması lazım.
Ama emin değilim, test etmedim.
Pcye tekrar geçince hocam kurcalarım bu can sıkıcı bir olay karakterler bazen oyundan atılıyordu enlemesine bakılması gerektiğini düşünüyorum olaya
 
oyuncu move olduğu zaman haritanın sekronizasyonuyla ilgili haritanın bölümüne veya sektörüne giderken sektör null ise yani bulunmamış ise gelen x ve y ye karakterin o anki x ve y sini veriyor. Böylelikle x ve y tekrar bir yere jump edilirken yeni x ve y ile değil karakterin o anki x ve y si ile jump ediyor. İşteyim Sync’ye bakmadan ancak bu kadar yorumlayabildim. :) :)
 
Bu düzenlemenin amacı aşırı hızlı bineklerin & arttırılmış maksimum hareket hızının sonucu olarak ortaya çıkan problemi çözmek, olası senaryolar aşırı hızlı bir binek ve kötü internet hızı veya kötü pc ile oyundan atılmak, aşırı hızlı bineğin koordinatlarının int sınırları dışına çıkarak hesaplanamaz hale gelmesi ve oyundan atılmak, ben Marty'nin çözümünü kullanıyorum, bir kaç ufak farkla.

C++:
Genişlet Daralt Kopyala
bool CHARACTER::Sync (long x, long y)
{
    if (!GetSectree())
    {
        return false;
    }

    if (IsPC() && IsDead())   // DevFix 27 - Dead players not needed sync.. - [MT2Dev Note] - 01/04/2024
    {
        return false;
    }

    LPSECTREE new_tree = SECTREE_MANAGER::instance().Get (GetMapIndex(), x, y);
    if (!new_tree)   // DevFix 29 - Necessary arrangement for scenarios where sync is not possible. - [MT2Dev Note] - 01/04/2024
    {                //             We don't want to kick players because of they ride fast mounts with slow internet speed or weak PCs.
        if (GetDesc())
        {
            sys_err ("NEW - Cannot Find Tree at - X:%d Y:%d (Name: %s)", x, y, GetName());
            x = GetX();
            y = GetY();
            new_tree = GetSectree();
            if (!new_tree)
            {
                //GetDesc()->SetPhase (PHASE_CLOSE);
                sys_err ("OLD - Cannot Find Tree at - X:%d Y:%d (Name: %s)", x, y, GetName());
            }
        }
        else
        {
            sys_err ("No Tree: %s %d %d %d", GetName(), x, y, GetMapIndex());
            Dead();  // ???
        }

        return false;
    }
 
bu düzenleme eski bir
Linkleri görebilmek için giriş yap veya kayıt ol.
fixiydi, sync paketi ile oyuncuyu map dışına kadar ittikten sonra dc yemesi sağlanıyordu. aynı olayı mob için kullanıncada direkt olarak full canla bile 1sn içerisinde öldürülebiliyordu. bu çözüm oyuncunun dc yemesini engeller ancak mob kısmına bir yararı olmaz, alt kısmındaki dead bölmünüde drop atmayacak şekilde düzenlerseniz daha sağlıklı olur
 
Üst