Çö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.697
Çözümler
346
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...
@Yeniceri pes etmek yok. Bu kodları denermisiniz rica etsem.

Source/Server/game/src/char_affect.cpp:
arat;

bool CHARACTER::UpdateAffect()
{
Source/Server/game/src/char_affect.cpp:
altına ekle;

    if (!GetWear(WEAR_WEAPON))
    {
        if (IsAffectFlag(AFF_GEOMGYEONG))
        {
            RemoveAffect(SKILL_GEOMKYUNG);
        }

        if (IsAffectFlag(AFF_GWIGUM))
        {
            RemoveAffect(SKILL_GWIGEOM);
        }
    }

Source/Server/game/src/char_skill.cpp:
arat;

bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaster)
{
Source/Server/game/src/char_skill.cpp:
altına ekle ve derle;

    if ((dwVnum == SKILL_GEOMKYUNG || dwVnum == SKILL_GWIGEOM) && !GetWear(WEAR_WEAPON))
        return false;

Hamle vurunça hp düşmesi hakkında pek fazla bilgim yok ama tahmini hp absorbe veya hp çalmayla ilgili olabilir. Denemden bilemeyiz açıkcası. ;)

HP-SP ABSORBE

Source/Server/game/src/char_battle.cpp:
arat;

            if (pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) && number(0, 4) > 0) // 80% È®·ü
            {
                int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100;


                if (i)
                {
                    CreateFly(FLY_HP_SMALL, pAttacker);
                    pAttacker->PointChange(POINT_HP, i);
                }
            }


            // Ä¥ ¶§¸¶´Ù SPȸº¹
            if (pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) && number(0, 4) > 0) // 80% È®·ü
            {
                int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) / 100;


                if (i)
                {
                    CreateFly(FLY_SP_SMALL, pAttacker);
                    pAttacker->PointChange(POINT_SP, i);
                }
            }
Source/Server/game/src/char_battle.cpp:
değiştir;

            int iAbsoHP_ptr = pAttacker->GetPoint(POINT_HIT_HP_RECOVERY);
            if (iAbsoHP_ptr)
            {
                if (number(1, 100) <= iAbsoHP_ptr)
                {
                    int iHPAbso = MIN(dam, GetHP()) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100;

                    if ((pAttacker->GetHP() > 0) && (pAttacker->GetHP() + iHPAbso < pAttacker->GetMaxHP()) && (GetHP() > 0) && (iHPAbso > 0))
                    {
                        CreateFly(FLY_HP_SMALL, pAttacker);
                        pAttacker->PointChange(POINT_HP, iHPAbso);
                    }
                }
            }


            // Ä¥ ¶§¸¶´Ù SPȸº¹
            int iAbsoSP_ptr = pAttacker->GetPoint(POINT_HIT_SP_RECOVERY);
            if (iAbsoSP_ptr)
            {
                if (number(1, 100) <= iAbsoSP_ptr)
                {
                    int iSPAbso = MIN(dam, GetSP()) * pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) / 100;

                    if ((pAttacker->GetSP() > 0) && (pAttacker->GetSP() + iSPAbso < pAttacker->GetMaxSP()) && (GetSP() > 0) && (iSPAbso > 0))
                    {
                        CreateFly(FLY_SP_SMALL, pAttacker);
                        pAttacker->PointChange(POINT_SP, iSPAbso);
                    }
                }
            }
Source/Server/game/src/char.cpp:
arat;

        sys_err("POINT_ERROR: %s type %d val %d (max: %d)", GetName(), val, max_val);
Source/Server/game/src/char.cpp:
değiştir;

        sys_err("POINT_ERROR: %s type %d val %d (max: %d)", GetName(), type, val, max_val);
Source/Server/game/src/char.cpp:
arat;

        sys_err("POINT_ERROR: %s type %d val %d (max: %d)", GetName(), val, max_val);
Source/Server/game/src/char.cpp:
değiştir ve derle;

        sys_err("POINT_ERROR: %s type %d val %d (max: %d)", GetName(), type, val, max_val);
Syserr hatası verirse görmek için sys_err kodlarını lütfen ekleyiniz.

HP-SP ÇALMA

Source/Server/game/src/char_battle.cpp:
arat;

            if (pAttacker->GetPoint(POINT_STEAL_HP))
            {
                int pct = 1;

                if (number(1, 10) <= pct)
                {
                    int iHP = MIN(dam, MAX(0, iCurHP)) * pAttacker->GetPoint(POINT_STEAL_HP) / 100;

                    if (iHP > 0 && GetHP() >= iHP)
                    {
                        CreateFly(FLY_HP_SMALL, pAttacker);
                        pAttacker->PointChange(POINT_HP, iHP);
                        PointChange(POINT_HP, -iHP);
                    }
                }
            }

            // SP ½ºÆ¿
            if (pAttacker->GetPoint(POINT_STEAL_SP))
            {
                int pct = 1;

                if (number(1, 10) <= pct)
                {
                    int iCur;

                    if (IsPC())
                        iCur = iCurSP;
                    else
                        iCur = iCurHP;

                    int iSP = MIN(dam, MAX(0, iCur)) * pAttacker->GetPoint(POINT_STEAL_SP) / 100;

                    if (iSP > 0 && iCur >= iSP)
                    {
                        CreateFly(FLY_SP_SMALL, pAttacker);
                        pAttacker->PointChange(POINT_SP, iSP);

                        if (IsPC())
                            PointChange(POINT_SP, -iSP);
                    }
                }
            }
Source/Server/game/src/char_battle.cpp:
değiştir ve derle;

            int iStealHP_ptr = pAttacker->GetPoint(POINT_STEAL_HP);
            if (iStealHP_ptr)
            {
                if (number(1, 100) <= iStealHP_ptr)
                {
                    int iHP = MIN(dam, MAX(0, GetHP())) * pAttacker->GetPoint(POINT_STEAL_HP) / 100;


                    if ((pAttacker->GetHP() > 0) && (pAttacker->GetHP() + iHP < pAttacker->GetMaxHP()) && (GetHP() > 0) && (iHP > 0))
                    {
                        CreateFly(FLY_HP_MEDIUM, pAttacker);


                        pAttacker->PointChange(POINT_HP, iHP);
                        PointChange(POINT_HP, -iHP);
                    }
                }
            }


            // SP ½ºÆ¿
            int iStealSP_ptr = pAttacker->GetPoint(POINT_STEAL_SP);
            if (iStealSP_ptr)
            {
                if (IsPC() && pAttacker->IsPC())
                {
                    if (number(1, 100) <= iStealSP_ptr)
                    {
                        int iSP = MIN(dam, MAX(0, GetSP())) * pAttacker->GetPoint(POINT_STEAL_SP) / 100;


                        if ((pAttacker->GetSP() > 0) && (pAttacker->GetSP() + iSP < pAttacker->GetMaxSP()) && (GetSP() > 0) && (iSP > 0))
                        {
                            CreateFly(FLY_SP_MEDIUM, pAttacker);
                            pAttacker->PointChange(POINT_SP, iSP);


                            PointChange(POINT_SP, -iSP);
                        }
                    }
                }
            }
 
@Yeniceri pes etmek yok. Bu kodları denermisiniz rica etsem.

Source/Server/game/src/char_affect.cpp:
arat;

bool CHARACTER::UpdateAffect()
{
Source/Server/game/src/char_affect.cpp:
altına ekle;

    if (!GetWear(WEAR_WEAPON))
    {
        if (IsAffectFlag(AFF_GEOMGYEONG))
        {
            RemoveAffect(SKILL_GEOMKYUNG);
        }

        if (IsAffectFlag(AFF_GWIGUM))
        {
            RemoveAffect(SKILL_GWIGEOM);
        }
    }

Source/Server/game/src/char_skill.cpp:
arat;

bool CHARACTER::UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaster)
{
Source/Server/game/src/char_skill.cpp:
altına ekle ve derle;

    if ((dwVnum == SKILL_GEOMKYUNG || dwVnum == SKILL_GWIGEOM) && !GetWear(WEAR_WEAPON))
        return false;

Hamle vurunça hp düşmesi hakkında pek fazla bilgim yok ama tahmini hp absorbe veya hp çalmayla ilgili olabilir. Denemden bilemeyiz açıkcası. ;)

HP-SP ABSORBE

Source/Server/game/src/char_battle.cpp:
arat;

            if (pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) && number(0, 4) > 0) // 80% È®·ü
            {
                int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100;


                if (i)
                {
                    CreateFly(FLY_HP_SMALL, pAttacker);
                    pAttacker->PointChange(POINT_HP, i);
                }
            }


            // Ä¥ ¶§¸¶´Ù SPȸº¹
            if (pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) && number(0, 4) > 0) // 80% È®·ü
            {
                int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) / 100;


                if (i)
                {
                    CreateFly(FLY_SP_SMALL, pAttacker);
                    pAttacker->PointChange(POINT_SP, i);
                }
            }
Source/Server/game/src/char_battle.cpp:
değiştir;

            int iAbsoHP_ptr = pAttacker->GetPoint(POINT_HIT_HP_RECOVERY);
            if (iAbsoHP_ptr)
            {
                if (number(1, 100) <= iAbsoHP_ptr)
                {
                    int iHPAbso = MIN(dam, GetHP()) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100;

                    if ((pAttacker->GetHP() > 0) && (pAttacker->GetHP() + iHPAbso < pAttacker->GetMaxHP()) && (GetHP() > 0) && (iHPAbso > 0))
                    {
                        CreateFly(FLY_HP_SMALL, pAttacker);
                        pAttacker->PointChange(POINT_HP, iHPAbso);
                    }
                }
            }


            // Ä¥ ¶§¸¶´Ù SPȸº¹
            int iAbsoSP_ptr = pAttacker->GetPoint(POINT_HIT_SP_RECOVERY);
            if (iAbsoSP_ptr)
            {
                if (number(1, 100) <= iAbsoSP_ptr)
                {
                    int iSPAbso = MIN(dam, GetSP()) * pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) / 100;

                    if ((pAttacker->GetSP() > 0) && (pAttacker->GetSP() + iSPAbso < pAttacker->GetMaxSP()) && (GetSP() > 0) && (iSPAbso > 0))
                    {
                        CreateFly(FLY_SP_SMALL, pAttacker);
                        pAttacker->PointChange(POINT_SP, iSPAbso);
                    }
                }
            }
Source/Server/game/src/char.cpp:
arat;

        sys_err("POINT_ERROR: %s type %d val %d (max: %d)", GetName(), val, max_val);
Source/Server/game/src/char.cpp:
değiştir;

        sys_err("POINT_ERROR: %s type %d val %d (max: %d)", GetName(), type, val, max_val);
Source/Server/game/src/char.cpp:
arat;

        sys_err("POINT_ERROR: %s type %d val %d (max: %d)", GetName(), val, max_val);
Source/Server/game/src/char.cpp:
değiştir ve derle;

        sys_err("POINT_ERROR: %s type %d val %d (max: %d)", GetName(), type, val, max_val);
Syserr hatası verirse görmek için sys_err kodlarını lütfen ekleyiniz.

HP-SP ÇALMA

Source/Server/game/src/char_battle.cpp:
arat;

            if (pAttacker->GetPoint(POINT_STEAL_HP))
            {
                int pct = 1;

                if (number(1, 10) <= pct)
                {
                    int iHP = MIN(dam, MAX(0, iCurHP)) * pAttacker->GetPoint(POINT_STEAL_HP) / 100;

                    if (iHP > 0 && GetHP() >= iHP)
                    {
                        CreateFly(FLY_HP_SMALL, pAttacker);
                        pAttacker->PointChange(POINT_HP, iHP);
                        PointChange(POINT_HP, -iHP);
                    }
                }
            }

            // SP ½ºÆ¿
            if (pAttacker->GetPoint(POINT_STEAL_SP))
            {
                int pct = 1;

                if (number(1, 10) <= pct)
                {
                    int iCur;

                    if (IsPC())
                        iCur = iCurSP;
                    else
                        iCur = iCurHP;

                    int iSP = MIN(dam, MAX(0, iCur)) * pAttacker->GetPoint(POINT_STEAL_SP) / 100;

                    if (iSP > 0 && iCur >= iSP)
                    {
                        CreateFly(FLY_SP_SMALL, pAttacker);
                        pAttacker->PointChange(POINT_SP, iSP);

                        if (IsPC())
                            PointChange(POINT_SP, -iSP);
                    }
                }
            }
Source/Server/game/src/char_battle.cpp:
değiştir ve derle;

            int iStealHP_ptr = pAttacker->GetPoint(POINT_STEAL_HP);
            if (iStealHP_ptr)
            {
                if (number(1, 100) <= iStealHP_ptr)
                {
                    int iHP = MIN(dam, MAX(0, GetHP())) * pAttacker->GetPoint(POINT_STEAL_HP) / 100;


                    if ((pAttacker->GetHP() > 0) && (pAttacker->GetHP() + iHP < pAttacker->GetMaxHP()) && (GetHP() > 0) && (iHP > 0))
                    {
                        CreateFly(FLY_HP_MEDIUM, pAttacker);


                        pAttacker->PointChange(POINT_HP, iHP);
                        PointChange(POINT_HP, -iHP);
                    }
                }
            }


            // SP ½ºÆ¿
            int iStealSP_ptr = pAttacker->GetPoint(POINT_STEAL_SP);
            if (iStealSP_ptr)
            {
                if (IsPC() && pAttacker->IsPC())
                {
                    if (number(1, 100) <= iStealSP_ptr)
                    {
                        int iSP = MIN(dam, MAX(0, GetSP())) * pAttacker->GetPoint(POINT_STEAL_SP) / 100;


                        if ((pAttacker->GetSP() > 0) && (pAttacker->GetSP() + iSP < pAttacker->GetMaxSP()) && (GetSP() > 0) && (iSP > 0))
                        {
                            CreateFly(FLY_SP_MEDIUM, pAttacker);
                            pAttacker->PointChange(POINT_SP, iSP);


                            PointChange(POINT_SP, -iSP);
                        }
                    }
                }
            }
Hepsini uyguladım fakat sorunla alakalı olarak hiç bir değişiklik olmadı maalesef.
 
Aklıma şöyle bir çözüm geldi. Oyuna yeni skill eklemek sadece denemek için eklemeniz gerek. Yeni skill dediğim kılıç cervirme veya üç yönlü olabilir, kodlar çakışmayacak şekilde skillerin bir tanesini sourceden kobyalayınız. Yeni skill'i test edip, daha sonra eklediğiniz skili görünüşü , efek , ses , simge ve skilin özelliklerini değiştiriniz. ( Hava kılıcı veya hamle ) bence denemeniz gerekiyor, bir çok forumlarda gereksiz kodlar gereksiz bilgiler paylaşılmış ancak çözüm olarak hiç bir netice yok. Eğer sorunu bu şekilde çözerseniz, Dünya'da bir ilk konu olur. :D
 
Aklıma şöyle bir çözüm geldi. Oyuna yeni skill eklemek sadece denemek için eklemeniz gerek. Yeni skill dediğim kılıç cervirme veya üç yönlü olabilir, kodlar çakışmayacak şekilde skillerin bir tanesini sourceden kobyalayınız. Yeni skill'i test edip, daha sonra eklediğiniz skili görünüşü , efek , ses , simge ve skilin özelliklerini değiştiriniz. ( Hava kılıcı veya hamle ) bence denemeniz gerekiyor, bir çok forumlarda gereksiz kodlar gereksiz bilgiler paylaşılmış ancak çözüm olarak hiç bir netice yok. Eğer sorunu bu şekilde çözerseniz, Dünya'da bir ilk konu olur. :D
saçma olur çünkü çoğu skilin bir ayarı var adına göre yani sourceden denemelik 1 skill ekleyeyim diye eklememiş ymir çalışanları
 
saçma olur çünkü çoğu skilin bir ayarı var adına göre yani sourceden denemelik 1 skill ekleyeyim diye eklememiş ymir çalışanları
Ne gibi ayarı var ? Her skilin özellikleri farklı source kodları hemen hemen aynı kodlar özelliklerini ayarlıyabilirsin. Her skilin kodlama mantığı aynı.
 
Aklıma şöyle bir çözüm geldi. Oyuna yeni skill eklemek sadece denemek için eklemeniz gerek. Yeni skill dediğim kılıç cervirme veya üç yönlü olabilir, kodlar çakışmayacak şekilde skillerin bir tanesini sourceden kobyalayınız. Yeni skill'i test edip, daha sonra eklediğiniz skili görünüşü , efek , ses , simge ve skilin özelliklerini değiştiriniz. ( Hava kılıcı veya hamle ) bence denemeniz gerekiyor, bir çok forumlarda gereksiz kodlar gereksiz bilgiler paylaşılmış ancak çözüm olarak hiç bir netice yok. Eğer sorunu bu şekilde çözerseniz, Dünya'da bir ilk konu olur. :D
Okurken bile içim daraldı, bir de bunu uygulamaya dökmek.. :D
 
Aklıma şöyle bir çözüm geldi. Oyuna yeni skill eklemek sadece denemek için eklemeniz gerek. Yeni skill dediğim kılıç cervirme veya üç yönlü olabilir, kodlar çakışmayacak şekilde skillerin bir tanesini sourceden kobyalayınız. Yeni skill'i test edip, daha sonra eklediğiniz skili görünüşü , efek , ses , simge ve skilin özelliklerini değiştiriniz. ( Hava kılıcı veya hamle ) bence denemeniz gerekiyor, bir çok forumlarda gereksiz kodlar gereksiz bilgiler paylaşılmış ancak çözüm olarak hiç bir netice yok. Eğer sorunu bu şekilde çözerseniz, Dünya'da bir ilk konu olur. :D
Anlamadığım bunu yaptığında ne olacak? Hadi yaptı diyelim bir skilli çoğalttı ee sonrasında ne olacak?
 
Anlamadığım bunu yaptığında ne olacak? Hadi yaptı diyelim bir skilli çoğalttı ee sonrasında ne olacak?
o skil çalışınca hamleyle onu yer değiştiricen hamleyi silicen xdd

Ne gibi ayarı var ? Her skilin özellikleri farklı source kodları hemen hemen aynı kodlar özelliklerini ayarlıyabilirsin. Her skilin kodlama mantığı aynı.
aynen knk hepsi aynı sen dediğini yap çalışırsa paylaş bizimle
 
Bu sorunu sağlam bi hata ayıklama ile tespit etmek mümkün ne kadar zaman alır bilmiyorum.
Hata ayıklamaktan kastım şu.
Mesela hava kılıcı çalışırken çalışan tüm kodlara ne değerler geliyor ne değerler döndürüyor tek tek bir şeye yazdırılarak kontrol edilmesi gerekiyor.
 
Anlamadığım bunu yaptığında ne olacak? Hadi yaptı diyelim bir skilli çoğalttı ee sonrasında ne olacak?
Çoğaltdığı skilin ses , icon, efek , animasyonunu değiştirecek. Örnek olarark hava kılıcın dosyalarını çoğaltdığı skile ekleyip hata varmı yokmu test edilip. Hata varsa çoğaltığı kodlar doğru ise animasyon'da sıkıntı var deriz.

Okurken bile içim daraldı, bir de bunu uygulamaya dökmek.. :D
Bence mantıklı çözüm, ançak zahmetli iş senin yerinde olsam bu işe @Whistle pası atardım.
 
Bu sorunu sağlam bi hata ayıklama ile tespit etmek mümkün ne kadar zaman alır bilmiyorum.
Hata ayıklamaktan kastım şu.
Mesela hava kılıcı çalışırken çalışan tüm kodlara ne değerler geliyor ne değerler döndürüyor tek tek bir şeye yazdırılarak kontrol edilmesi gerekiyor.
Ben açıkcası bu sorunun sadece skil ile alakalı olduğunu sanmıyorum. Affect olayları veya genel olarak oyunun hp hesaplaması ile alakalı olduğu fikri daha ağır basıyor. Çünkü char.cpp dosyasındaki bununla ilgili case bloklarında oynama yapınca her ne kadar sorunu çözmese de, oyun içinde değişikliğe sebep oluyor. Yani atıyorum düzenlemeden önce 4k düşüyorsa düzenledikten sonra 2 | 2.5k düşüyor. gibi.. Öyle bir sorun ki, nereden tutsan oraya götürüyor adamı.
 
Bir süre filese ara vermiştim ve dün itibari ile tekrar uğraşmaya karar verdim. Hamle konusuyla ilgili olarak çok güzel bir noktaya vardım şu an.
Özetleyecek olursam;

- Mesafeli moblara hamle vururken herhangi bir takılma olmuyor
- 30k HP ye sahip bir karakter ile 10-15vb. hamleden 1 tanesinde düşüş yaşanıyor. Düşüş miktarı ve şekli sabit değil, fakat orjinalinde olduğu kadar göze batacak derecede değil. Şu an tuhafıma giden tek şey bu, sebebini lag'a bağlıyorum ama emin değilim. (zaten lag sorunu yaşıyordum ve makineyi değiştireceğim. Bu makineyi ben biraz hırpaladım :) )

Sonradan gelen edit:
- 20 adet yabani köpekle denedim ve hp düşüşü olmadı.
- Hava kılıcı öfke açıkken de bir sorun oluşmuyor.
- Öfke açılırken hp düşüşü zaten olmuyordu, hala bir problem yok.

Umarım kesin bir sonuca ulaşırım ve marifetmiş gibi saklanan bu gereksiz sorunun çözümünü paylaşırı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 göz attım ve sonunda UpdatePacket(); çağrıldığını gördüm.

Buna bağlı olarak şu düzenlemeyi yapınca sorun kalmadı:

char_battle.cpp aç ve arat;
C++:
void CHARACTER::Dead

İçinde bul:
C++:
        if (IsHorseRiding())
        {
            StopRiding();
        }
        else if (GetMountVnum())
        {
            RemoveAffect(AFFECT_MOUNT_BONUS);
            m_dwMountVnum = 0;
            UnEquipSpecialRideUniqueItem();

            UpdatePacket();
        }

else if bloğunun altına ekle:
C++:
        else
        {
            UpdatePacket();
        }

Yardımcı olan ve olmaya çalışan herkese teşekkürler.
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst