Best Studio 1
Best Studio
Agora Metin2 1
Agora Metin2
raderde 1
raderde
Cannn6161 1
Cannn6161
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Mt2Hizmet 1
Mt2Hizmet
melankolıa18 1
melankolıa18
romegames 1
romegames
Krutzo 1
Krutzo
shrpnl 1
shrpnl
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

[C++] Nadir CoreDowner Fix

MT2Dev

Cplusplus
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye
Fahri Üye
TM Üye
Katılım
30 Ocak 2020
Konular
50
Mesajlar
812
Çözüm
6
Online süresi
26d 15h
Reaksiyon Skoru
735
Altın Konu
1
Başarım Puanı
184
MmoLira
8,746
DevLira
123
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

Merhaba TurkMMO

Tahminimce bu zamana kadar çok az kişinin başına gelmiş bir coredownerın fixini paylaşacağım, fixi yapan Gurgarath adlı arkadaşımız 10 yılı aşkın süredir ilk defa başına geldiğini söylüyor, nadir dememin sebebi budur.

Nedir Bu CoreDowner ?

Çok sevgili Ymir yazılımcılarının özensiz kodlamalarının sebep verdiği sıkıntılardan biri olan sorunun kaynağı bir quest fonksiyonu olan get_leader_vid(). Bu fonksiyonu kullanan bir questi oyuna eklediğiniz zaman eğer oyun içinde karakter bir grupta olmadığı halde bu fonksiyonu tetiklerse oyunun core vermesine sebep oluyor, anlıyacağınız çok sevgili Ymir bir kontrol koymayı akıl edememiş.Küçük bir dipnot eğer questin içine kontrol eklerseniz ( if not party.is_party() gibi ) buda sorunu engeller fakat ben src taraflı fixin daha etkili olacağı kanaatindeyim.

Nasıl Fixleriz ?

questlua_npc.cpp
açılır ve npc_get_leader_vid fonksiyonu bulunur ;

Normalde bu şekilde olması gerekir ;

C++:
{
        CQuestManager& q = CQuestManager::instance();
        LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();

        LPPARTY party = npc->GetParty();
        LPCHARACTER leader = party->GetLeader();

        if (leader)
            lua_pushnumber(L, leader->GetVID());
        else
            lua_pushnumber(L, 0);


        return 1;
    }

Bir kontrol ekleyip bu şekilde değiştiriyoruz ;

C++:
{
        CQuestManager& q = CQuestManager::instance();
        LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();

        LPPARTY party = npc->GetParty();

        if (!party)
        {
            sys_err("npc_get_leader_vid: Function triggered without party");
            return 1; //CoreDowner Fix
        }

        LPCHARACTER leader = party->GetLeader();

        if (leader)
            lua_pushnumber(L, leader->GetVID());
        else
            lua_pushnumber(L, 0);


        return 1;
    }


Metin2Dev Gurgarath'dan Alıntıdır.
 
Lider offline mı diye kontrol koyan adamlar, partinin var olup olmadığını kontrol etmemişler. Oyunun dosyaları mayın tarlası gibi.
 
Ymir ve Webzen ile sidi* yarıştırıyorsunuz ya helal olsun. :D
 
Ymir ve Webzen ile sidi* yarıştırıyorsunuz ya helal olsun. :D

Öyle demeyelim, bizim elimizdeki dosyalar 2013 yılından kalma sene 2020 oldu muhtemelen bizim senelerdir fixlemeye uğraştığımız çoğu şeyi ve daha fazlasını çoktan halletmiştir Ymir fakat eldekilerde bu kadar enteresan eksikler olunca sitem etmemek mümkün değil sırf bıraktıkları null pointerler bile +1000 online da baş ağrıtmaya yeter.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst