Çözüldü Hamle ve Hava Kılıcı Sorunu Hk. Tartışma

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

Kaiser

⋞ 〈 ☪ 〉 ⋟
Site yetkilisi
Admin
Premium Üye
Geliştirici
Yardımsever Üye
Mesaj
3.696
Çözümler
345
Beğeni
3.590
Puan
1.849
Ticaret Puanı
0
Arkadaşlar kolay gelsin, öncelikle bu konuda, bilgili olanların sunacağı bilgiler sayesinde bu camiada sır gibi saklanan bu sorunlara çözümler bulunmasını diliyorum.

Sorunlar şunlar;

Ads-z.jpg


1- Hava kılıcının öldükten sonra etkisinin(yani verdiği güç) kaybolmasına rağmen görüntü olarak yanmaya devam ediyor olması. (Zaman zaman değil, her defasında)
Tabi karakteri tekrar ayağa kaldırdığımızda her şey olması gerektiği gibi oluyor.. Ve işin garip yanı, 2 tane client açık olduğunda yan çar olan hesaptan bakıldığında hiç bir problem yok. Ancak savaşçının clientinde böyle bir sorun oluşuyor.

Bu konuyla alakalı olarak RemoveAffect ve __ClearAffect başta olmak üzere hem client hemde server hemde python tarafında karşılaştırmadığım kod kalmadı. Mainline fileste denedim sorun aynı, marty son sürümde denedim ve sonuç yine aynı. Bu konuya ilişkin sanıyorum ki bir püf nokta var fakat bir türlü bulamadım. Ben biraz titiz çalışmayı sevdiğim için çoğu kişiye göre göz ardı edilebilen bu tarz şeyleri ben es geçemiyorum maalesef. Bu sorun, laf arasında test etmesini rica ettiğim @Reached arkadaşımız da da mevcut. Yani çözülemese bile, insanı gerçekten meraklandıran bir durum.


2- Meşhur hamle atınca hp düşmesi. Razunning v4 de de bu sorun mevcut, ve yine marty filesınde de bu sorun mevcut. Bu sorunun yaşanmadığı bir filesten, değerli bir kaç insan sayesinde temin ettiğim char set dosyalarını inceledim, ComputePoints() fonksiyonunu tamamen alıp bendekiyle değiştirdim (tabi uyumlu hale getirerek)
Yetmedi PointChange() fonksiyonunu da komple çektim ve uyarladım ama maalesef sonuç aynı. Bide şu herkesin ilk olarak söylediği çözümü bilirsiniz, UpdatePacket(); üstüne yada altına eklenen if blokları.. O da bir işe yaramadı. Skill_proto ya kadar aklıma gelen her şeyi değiştirdim.
Karakterin canı yükseldikçe, hamle attığında düşen hp miktarı da yükseliyor.

Yani; ben oyunumda 5000HP efsun kullanıyorum ve karakterin canı itemlerle beraber 22k. Hamle attığımda ise 3-4K kadar bir düşüş oluyor. Can 38K iken hamle atıldığında düşen HP miktarı ise tam +10K civarı. Fakat karakterin canını 14-15K ya çekip denediğimde bu sefer 1-2k düşme yaşanıyor.

Benim bu konuyu açmamdaki asıl sebep, sadece "birileri el atsın da çözülsün" den ziyade, benim bu bütün denemelerime karşılık vermeyen o gözden uzak olan şeyin ne olduğunu öğrenmek. Yani dediğim gibi, bu sorunlar çözülmese bile ya da metin2 işini bıraksam bile bu iki olayın sebebini merak ediyor olacağım.
Bu yüzden sizlerle tartışmak için böyle bir konu açmak istedim, umarım konu amacına ulaşır...

Eğer burda bunu başarabilirsek, inanıyorum ki hem yabancı hemde Türk forumları arasında belki de ilk kaynak burası olacak. Çünkü aklınıza gelen her forum sitesini didik didik aradım taradım, her birinde gösterilen yolu denedim ama hiç biri maalesef yardımcı olmadı.
 
Çözüm
Merhabalar tekrardan, konuda belirttiğim sorunları çözmüş bulunmaktayım. Daha doğrusu hamle atarken hp düşmesinin fixi @mazeah321 aittir. Konusunun linki: Hamle HP DÜŞME Fix

Diğer sorun ise, yani karakter ölünce hava kılıcının etkisinin kaybolmasına rağmen, görüntü olarak yanıyor görünmesini de kodları didik didik ederek çözümünü buldum.
Sorun görseli:
ads-z-jpg.7358


Önce client src ye daldım ama daha sonra at üstündeyken ve hava kılıcı yanıyorken karakter öldüğünde böyle bir sorunun yaşanmadığını görünce sorunun client ile alakalı olmadığını anladım. Ancak maalesef bunu çok sonra fark ettim :)
Bende char_horse.cpp dosyasında StopRiding() fonksiyonuna...
Şimdi bende kendi filesimde denedim. Bende şu şekilde oluyor. Soldaki anlık hp sağdakide max hp değerimiz ya bende sağdaki max hp değeri 3 5 k anlık düşüp çıkıyor ama anlık hp değerimde düşüş olmuyor.
Bende char.cpp den düzenleme yaparak en fazla o noktaya kadar gelebildim :D Ordan ötesi resmen bilinmezlik..
tables.h den skill_proto ya kadar her şeyi elden geçirdim ama nafile
 
Bende char.cpp den düzenleme yaparak en fazla o noktaya kadar gelebildim :D Ordan ötesi resmen bilinmezlik..
tables.h den skill_proto ya kadar her şeyi elden geçirdim ama nafile
Anlık hp düşmediği sürece max hpnin anlık düşmesinin sorun yaratacağını düşünmüyorum. Bunun çözümü elbette vardır ama kimse paylaşmaz zaten bilenler ancak kendine saklar.
 
Char.cpp'de yaptığın değişikliği hatırlıyor musun?
Sorunsuz dediğim filesten;

C++:
case POINT_HP:

case POINT_MAX_HP:

case POINT_MAX_HP_PCT:

bloklarını çekmiştim. Ve son olarak;
C++:
    if (GetHP() > GetMaxHP())
        PointChange(POINT_HP, GetMaxHP() - GetHP());

    if (GetSP() > GetMaxSP())
        PointChange(POINT_SP, GetMaxSP() - GetSP());

Şu zımbırtıyı UpdatePacket(); ' in önce üstüne, sonra olmayınca altına koyarak denemiştim.
Ayrıca marty son sürüm src den @fixme118 çektim uyguladım. Ama dediğim gibi hiç biri kesin çözüm sağlamadı.
 
Sorunsuz dediğim filesten;

C++:
case POINT_HP:

case POINT_MAX_HP:

case POINT_MAX_HP_PCT:

bloklarını çekmiştim. Ve son olarak;
C++:
    if (GetHP() > GetMaxHP())
        PointChange(POINT_HP, GetMaxHP() - GetHP());

    if (GetSP() > GetMaxSP())
        PointChange(POINT_SP, GetMaxSP() - GetSP());

Şu zımbırtıyı UpdatePacket(); ' in önce üstüne, sonra olmayınca altına koyarak denemiştim.
Ayrıca marty son sürüm src den @fixme118 çektim uyguladım. Ama dediğim gibi hiç biri kesin çözüm sağlamadı.
fix118 bende almıştım hatta tüm mart fixlerini temiz sourcesinden kendi sourceme geçirdim ben. fix 118 de o şekilde bende ekli ayrıca updatepacket üstünde olmadı demişsinde bende üstünde zaten.


Kod:
    if (GetHP() > GetMaxHP())
        PointChange(POINT_HP, GetMaxHP() - GetHP());

    if (GetSP() > GetMaxSP())
        PointChange(POINT_SP, GetMaxSP() - GetSP());

    ComputeSkillPoints();

    RefreshAffect();

#ifdef FIX_118
    if (IsPC())
    {
        if (this->GetHP() != iCurHP)
            this->PointChange(POINT_HP, iCurHP - this->GetHP());
        if (this->GetSP() != iCurSP)
            this->PointChange(POINT_SP, iCurSP - this->GetSP());
    }
#else
    for (TMapBuffOnAttrs::iterator it = m_map_buff_on_attrs.begin(); it != m_map_buff_on_attrs.end(); it++)
    {
        it->second->GiveAllAttributes();
    }
#endif

    UpdatePacket();
}
 
fix118 bende almıştım hatta tüm mart fixlerini temiz sourcesinden kendi sourceme geçirdim ben. fix 118 de o şekilde bende ekli ayrıca updatepacket üstünde olmadı demişsinde bende üstünde zaten.


Kod:
    if (GetHP() > GetMaxHP())
        PointChange(POINT_HP, GetMaxHP() - GetHP());

    if (GetSP() > GetMaxSP())
        PointChange(POINT_SP, GetMaxSP() - GetSP());

    ComputeSkillPoints();

    RefreshAffect();

#ifdef FIX_118
    if (IsPC())
    {
        if (this->GetHP() != iCurHP)
            this->PointChange(POINT_HP, iCurHP - this->GetHP());
        if (this->GetSP() != iCurSP)
            this->PointChange(POINT_SP, iCurSP - this->GetSP());
    }
#else
    for (TMapBuffOnAttrs::iterator it = m_map_buff_on_attrs.begin(); it != m_map_buff_on_attrs.end(); it++)
    {
        it->second->GiveAllAttributes();
    }
#endif

    UpdatePacket();
}
Evet. Ben her iki şekilde de denedim yani demek istediğim oydu. Altına ya da üstüne koymam hiç bir şey ifade etmemişti.
 
Evet. Ben her iki şekilde de denedim yani demek istediğim oydu. Altına ya da üstüne koymam hiç bir şey ifade etmemişti.
Bi fileste şöyle for eklenmiş

C++:
    ComputeSkillPoints();

    for (int i = 0; i < WEAR_MAX_NUM; i++)
    {
        LPITEM pItem = GetWear(i);
        if (pItem)
        {
            pItem->ModifyPoints(true);
            SET_BIT(m_pointsInstant.dwImmuneFlag, GetWear(i)->GetImmuneFlag());
        }
    }

    RefreshAffect();
 
En son bir moderatör tarafından düzenlenmiş:
Bi fileste şöyle for eklenmiş

C++:
    ComputeSkillPoints();

    for (int i = 0; i < WEAR_MAX_NUM; i++)
    {
        LPITEM pItem = GetWear(i);
        if (pItem)
        {
            pItem->ModifyPoints(true);
            SET_BIT(m_pointsInstant.dwImmuneFlag, GetWear(i)->GetImmuneFlag());
        }
    }

    RefreshAffect();
Bu blok bende de mevcut şu an. Ama durum aynı maalesef.
Olayı daha ilginç kılan şu paylaşıma bakar mısın:
Linkleri görebilmek için giriş yap veya kayıt ol.


Mainline srcde de denedim ama çözülmedi, bu insanlarda nasıl çözülüyor gerçekten çok tuhaf :D
 
Neymiş bunun sırrı şimdi ? o_O
Türkmmo gezerken gördüm.

C++:
pkVictim->AddAffect(pkSk->dwVnum,
                    pkSk->bPointOn,
                    iAmount,
                    pkSk->dwAffectFlag,
                    iDur,
                    (long)pkSk->kDurationSPCostPoly.Eval(),
                    // ADD_GRANDMASTER_SKILL
                    !bAdded);
                // END_OF_ADD_GRANDMASTER_SKILL
            }

            bAdded = true;
        }
        else
        {
            if (!pkSk->IsChargeSkill())
                pkVictim->PointChange(pkSk->bPointOn, iAmount);
/*
            if (pkSk->bPointOn2 != POINT_NONE)
            {
                pkVictim->RemoveAffect(pkSk->dwVnum);

                int iDur2 = (int)pkSk->kDurationPoly2.Eval();

                if (iDur2 > 0)
                {
                    iDur2 += GetPoint(POINT_PARTY_BUFFER_BONUS);

                    if (pkSk->IsChargeSkill())
                        pkVictim->AddAffect(pkSk->dwVnum, pkSk->bPointOn2, iAmount2, AFF_TANHWAN_DASH, iDur2, 0, false);
                    else
                        pkVictim->AddAffect(pkSk->dwVnum, pkSk->bPointOn2, iAmount2, pkSk->dwAffectFlag2, iDur2, 0, false);
                }
                else
                {
                    pkVictim->PointChange(pkSk->bPointOn2, iAmount2);
                }
            }
            */
        }

Burada gördüğün kısımı kapatınca sorun kalmıyor. Fakat kapatmak ne gibi soruna yol açar kimse bir şey yazmamış. Bir sorun gördüm konuyada yazılmış zaten. Biraz mesafeli moba tıklayıp hamle basarsak karakter hızlı koşuyor gidiyor ama hamle vurmuyor koşmaya devam ediyor.
 
Türkmmo gezerken gördüm.

C++:
pkVictim->AddAffect(pkSk->dwVnum,
                    pkSk->bPointOn,
                    iAmount,
                    pkSk->dwAffectFlag,
                    iDur,
                    (long)pkSk->kDurationSPCostPoly.Eval(),
                    // ADD_GRANDMASTER_SKILL
                    !bAdded);
                // END_OF_ADD_GRANDMASTER_SKILL
            }

            bAdded = true;
        }
        else
        {
            if (!pkSk->IsChargeSkill())
                pkVictim->PointChange(pkSk->bPointOn, iAmount);
/*
            if (pkSk->bPointOn2 != POINT_NONE)
            {
                pkVictim->RemoveAffect(pkSk->dwVnum);

                int iDur2 = (int)pkSk->kDurationPoly2.Eval();

                if (iDur2 > 0)
                {
                    iDur2 += GetPoint(POINT_PARTY_BUFFER_BONUS);

                    if (pkSk->IsChargeSkill())
                        pkVictim->AddAffect(pkSk->dwVnum, pkSk->bPointOn2, iAmount2, AFF_TANHWAN_DASH, iDur2, 0, false);
                    else
                        pkVictim->AddAffect(pkSk->dwVnum, pkSk->bPointOn2, iAmount2, pkSk->dwAffectFlag2, iDur2, 0, false);
                }
                else
                {
                    pkVictim->PointChange(pkSk->bPointOn2, iAmount2);
                }
            }
            */
        }

Burada gördüğün kısımı kapatınca sorun kalmıyor. Fakat kapatmak ne gibi soruna yol açar kimse bir şey yazmamış. Bir sorun gördüm konuyada yazılmış zaten. Biraz mesafeli moba tıklayıp hamle basarsak karakter hızlı koşuyor gidiyor ama hamle vurmuyor koşmaya devam ediyor.
Buna benzer bir çözüm bende bulmuştum. Beraberinde bahsettiğin sorun ve 2-3 defa üst üste hamle vurma sorunu(hepsi dmg atıyor) ortaya çıkmıştı bu sefer de. Bir dener misin acaba üst üste hamle atıyor mu ?
 
Buna benzer bir çözüm bende bulmuştum. Beraberinde bahsettiğin sorun ve 2-3 defa üst üste hamle vurma sorunu(hepsi dmg atıyor) ortaya çıkmıştı bu sefer de. Bir dener misin acaba üst üste hamle atıyor mu ?
Skill yükleme süresini diyorsun sanırım. Öyle sorun yok hamle atıyor yükleme süresi bitene kadar kullanamazsın uyarısı veriyor yine.
 
Skill yükleme süresini diyorsun sanırım. Öyle sorun yok hamle atıyor yükleme süresi bitene kadar kullanamazsın uyarısı veriyor yine.
Şimdi hatırladım, bu işlemin daha kısa yolunu keşfetmiştim ben. İkisi de aynı işi yapıyor sadece biri src biri navicat.
O da şu şekildeydi; Navicat - > skill_proto -> 5 no lu skill (sanırım hamleydi) - > szDurationPloy2 sütunda 2 yada 3 yazıyordu onu 0 yapınca hp düşmesi ortadan kalkıyor. Ama bu sefer de aynı belirttiğin sorun ortaya çıkıyor.

Tabi bütün bu örnekleri sorunsuz dediğim files ile karşılaştırdım. Skill proto da dahil. Hiç bir şekilde benim denediğim yollar onda uygulanmamış.
 
Şimdi hatırladım, bu işlemin daha kısa yolunu keşfetmiştim ben. İkisi de aynı işi yapıyor sadece biri src biri navicat.
O da şu şekildeydi; Navicat - > skill_proto -> 5 no lu skill (sanırım hamleydi) - > szDurationPloy2 sütunda 2 yada 3 yazıyordu onu 0 yapınca hp düşmesi ortadan kalkıyor. Ama bu sefer de aynı belirttiğin sorun ortaya çıkıyor.

Tabi bütün bu örnekleri sorunsuz dediğim files ile karşılaştırdım. Skill proto da dahil. Hiç bir şekilde benim denediğim yollar onda uygulanmamış.
Bilmiyorum ama ben bir çözüm yapmayacağım bunun çözümünü bilenler söylemiyor dediğim gibi pek umrumda değil zaten maksimum hp düşmediği sürece sorun yok düzgün çözüm bulursak yaparım elbette. Şu sorun olmayan files hangi files bakabilirim belki bişeyler bulurum.
 
Bilmiyorum ama ben bir çözüm yapmayacağım bunun çözümünü bilenler söylemiyor dediğim gibi pek umrumda değil zaten maksimum hp düşmediği sürece sorun yok düzgün çözüm bulursak yaparım elbette. Şu sorun olmayan files hangi files bakabilirim belki bişeyler bulurum.
Bahsettiğim filesı(daha doğrusu sadece server src ve ekstradan bu durumla alakalı 1-2 dosya) elden temin etmiştim, paylaşılmış bir files değil maalesef.
Dediğin gibi bu işi bilen biri açıklığa kavuşturmadığı sürece böyle kalacak gibi.. sağlık olsun :)
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst