Yardım Client alta alınca kapanıyor

  • Konuyu açan Konuyu açan Happy Way
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 15
  • Gösterim Gösterim 122
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

Happy Way

Üye
Üye
Mesaj
143
Çözümler
14
Beğeni
56
Puan
749
Ticaret Puanı
0
Adsız.webp


clienti alta aldığımda arada şu şekilde hata verip client kapanıyor ilgili kod bloğu
statemanager.cpp:
Genişlet Daralt Kopyala
void CStateManager::RestoreTransform(D3DTRANSFORMSTATETYPE Type)
{
#ifdef _DEBUG
    if (!m_bTransformSavingFlag[Type])
    {
        Tracef(" CStateManager::RestoreTransform - This transform was not saved [%d]\n", Type);
        StateManager_Assert(!" This render state was not saved!");
    }
    m_bTransformSavingFlag[Type] = FALSE;
#endif _DEBUG

    SetTransform(Type, &m_CopyState.m_Matrices[Type]);
}

// Don't cache-check the transform.  To much to do
void CStateManager::SetTransform(D3DTRANSFORMSTATETYPE Type, const D3DMATRIX* pMatrix)
{
    if (m_bScene)
    {
        m_lpD3DDev->SetTransform(Type, pMatrix);
    }
    else
    {
        assert(D3DTS_VIEW == Type || D3DTS_PROJECTION == Type || D3DTS_WORLD == Type);
    }

    m_CurrentState.m_Matrices[Type] = *pMatrix;
}
 
ENABLE_FIX_MOBS_LAG sisteminden kaynaklı olduğunu düşünüyorum şu bloktan şüpeleniyorum şüpelendiğim kısım ise tam olarak
Kod:
Genişlet Daralt Kopyala
0, bytes, DXLOCKTYPE & dst, D3DLOCK_DISCARD
C++:
Genişlet Daralt Kopyala
    TPDTVertex* dst;
    if (FAILED(vb->Lock(0, bytes, DXLOCKTYPE & dst, D3DLOCK_DISCARD)))
    {
        STATEMANAGER.SetStreamSource(0, NULL, 0);
        return false;
    }
orjinali şu şekilde

C++:
Genişlet Daralt Kopyala
    if (FAILED(
        plpd3dFillRectVB->Lock(0, sizeof(TPDTVertex) * uVtxCount, (BYTE**)&pDstVertices, D3DLOCK_DISCARD)
    ))
    {
        STATEMANAGER.SetStreamSource(0, NULL, 0);
        return false;
    }
burayı nasıl düzenlemeliyim sizce

Local_inch'den şu değeri çekiyor
Kod:
Genişlet Daralt Kopyala
#define DXLOCKTYPE                    (BYTE**)
 
C++:
Genişlet Daralt Kopyala
void CStateManager::SetTransform(D3DTRANSFORMSTATETYPE Type, const D3DMATRIX* pMatrix)
{
    TraceError("%s, %d", Type, Type);

Şeklinde oyunu alta alınca gelen Type değerini yazdırmayı dene. Muhtemelen beklenmeyen bir type değeri geliyor. Sonrasında ise bu değere göre kontroller sağlarsın.
Ama en son çare olarak sorunu çözemezsen; bu ciddi bir problem yaratmaz. Çünkü assert çağrısı sadece debug modda işleme alınır. Dist ve Release de sorun olmaz.
 
C++:
Genişlet Daralt Kopyala
void CStateManager::SetTransform(D3DTRANSFORMSTATETYPE Type, const D3DMATRIX* pMatrix)
{
    TraceError("%s, %d", Type, Type);

Şeklinde oyunu alta alınca gelen Type değerini yazdırmayı dene. Muhtemelen beklenmeyen bir type değeri geliyor. Sonrasında ise bu değere göre kontroller sağlarsın.
Ama en son çare olarak sorunu çözemezsen; bu ciddi bir problem yaratmaz. Çünkü assert çağrısı sadece debug modda işleme alınır. Dist ve Release de sorun olmaz.
Farklı bir yöntem denedim alta alınca 256 değeri dönüp kapanıyor normal de 3-2 değerleri dönüyor
 
D3DTTFF_PROJECTED bu değeri arattığımda source üzerinde birşey çıkmıyor extern üzerinden directx'de çıkıyor ordada 256 değerini görüyorum yani bu kodun işlenmesinde bir problem oluşuyor çünkü client 256 değerini görünce kapanıyordu
 
D3DTTFF_PROJECTED bu değeri arattığımda source üzerinde birşey çıkmıyor extern üzerinden directx'de çıkıyor ordada 256 değerini görüyorum yani bu kodun işlenmesinde bir problem oluşuyor çünkü client 256 değerini görünce kapanıyordu
Eğer src içinde sonuç yoksa sorunu farklı şekilde ele almak gerekiyor. Extern ile alakası yok.
Src içindeki SetTransform çağrılarının hepsini tek tek kontrol et ve karşılaştırmayı dene.
Özellikle EterLib/GameLib/UserInterface üzerine ağırlık verebilirsin. İlgili kısımları gözden geçir, buradan net bir yer belirlemek zor. Bu yüzden komple incelemen gerekiyor.
 
Eğer src içinde sonuç yoksa sorunu farklı şekilde ele almak gerekiyor. Extern ile alakası yok.
Src içindeki SetTransform çağrılarının hepsini tek tek kontrol et ve karşılaştırmayı dene.
Özellikle EterLib/GameLib/UserInterface üzerine ağırlık verebilirsin. İlgili kısımları gözden geçir, buradan net bir yer belirlemek zor. Bu yüzden komple incelemen gerekiyor.
Şuan eklediğim bir sistemden kaynaklı olup olmadığını anlamak için sistemlerin definelarını devre dışı bırakıp denicem eğer sistemlerdeyse sorunu çözerim kolaylıkla büyük ihtimal bir sistem ile alakalı daha önceden yoktu.
 
Şuan eklediğim bir sistemden kaynaklı olup olmadığını anlamak için sistemlerin definelarını devre dışı bırakıp denicem eğer sistemlerdeyse sorunu çözerim kolaylıkla büyük ihtimal bir sistem ile alakalı daha önceden yoktu.
Eğer sen harici olarak bir düzenleme vb. yapmadıysan evet sistemlerden kaynaklı olma ihtimali yüksek. Grafiksel işlemlere sahip sistemler buna sebep olabilir. Render Target, Mob lag fix vb.
 
Bu client kapanma sorunu tetikleyen define
Kod:
Genişlet Daralt Kopyala
#define ENABLE_EFFECT_LOOP_FIX                    // Blocks the loop of the effects
buymuş fakat neden kapanıyor anlamış değilim 4 satır kod
Kod:
Genişlet Daralt Kopyala
#ifdef ENABLE_EFFECT_LOOP_FIX
void CPythonApplication::RenderSpecial() {
    m_kEftMgr.Update();
    m_kChrMgr.Render();
    m_pyItem.Render();
    m_FlyingManager.Render();
}
#endif
Kod:
Genişlet Daralt Kopyala
#ifdef ENABLE_EFFECT_LOOP_FIX
            RenderSpecial();
#endif
Kod:
Genişlet Daralt Kopyala
#ifdef ENABLE_EFFECT_LOOP_FIX
    void RenderSpecial();
#endif
Define içeriği bu kadar neden yapar sizce ?
 
Bu client kapanma sorunu tetikleyen define
Kod:
Genişlet Daralt Kopyala
#define ENABLE_EFFECT_LOOP_FIX                    // Blocks the loop of the effects
buymuş fakat neden kapanıyor anlamış değilim 4 satır kod
Kod:
Genişlet Daralt Kopyala
#ifdef ENABLE_EFFECT_LOOP_FIX
void CPythonApplication::RenderSpecial() {
    m_kEftMgr.Update();
    m_kChrMgr.Render();
    m_pyItem.Render();
    m_FlyingManager.Render();
}
#endif
Kod:
Genişlet Daralt Kopyala
#ifdef ENABLE_EFFECT_LOOP_FIX
            RenderSpecial();
#endif
Kod:
Genişlet Daralt Kopyala
#ifdef ENABLE_EFFECT_LOOP_FIX
    void RenderSpecial();
#endif
Define içeriği bu kadar neden yapar sizce ?
Fonksiyonu yanlış aşamada çağırıyor olabilirsin
 
Üst