- Katılım
- 22 Tem 2023
- Mesajlar
- 931
- Çözümler
- 10
- Tepkime puanı
- 2,869
- Puanları
- 93
- Yaş
- 31
- Konum
- İstanbul
- Web sitesi
- www.vsro.org
- Türk Lirası
- 64.00₺
Şimdi sorunumuz Hera Scroll süresi bitse dahi karakter üzerinden gitmiyor. Bu işlemi öncelikle source içerisinde neresi kontrol ediyor onu bilmemiz ya da bulmamız gerekecek.
Hera bir transform scroll olduğu için Magic6 içerisinde yer alan bir skill koduna sahip. Bu yüzden de bu skili kontrol eden fonksiyonlar source içerisindeki
Şimdi gelelim sorunlu yeri nasıl tespit ettiğimize;
Paylaşımda olan sourceler içerisindeki fonksiyon aşağıdaki gibi. Dolayısı ile biz bu fonksiyonda işlemler nereye kadar ilerliyor ona bakacağız.
şimdi bu kod bloğu içerisine ben toplamda 4 adet
şeklinde konsol çıktısı ekledim. Peki neden 4 tane ve neden buralara ekledim, Çünkü Eklenilen yerleri fonksiyon içerisindeki Return değerleri belirliyor. Bu kodu var olan kodunuzun yerine sourceye ekleyip, dosyaları build alıp oyuna girdiğinizde ve Hera scroll basıp bitmesini beklediğinizde buradaki konsol çıktıları çalışacak ve GameServer içerisinde size bilgi verecek. Ki eğer sizin dosyalarınızda sistem sorunlu olduğu için ekrana
%s: Type6Cancel is working 1 ve %s: Type6Cancel is working 2 komutları gelecek ve devamı gelmeyecektir. Bu da bize şunun bilgisini verir;
fonksiyonumuz bu koddan ileri geçemiyor. Buradan geri dönüyor. Yani bizim
buradaki nSkillID değeri 0 olarak(boş) geldiği için sistem hangi skili sileceğini belirleyemiyor.
Artık sorunu bulduk, gelelim çözüme;
(Belki daha yetkin arkadaşlarımız, çok daha sağlıklı çözümler üretebilir, varsa ekstra çözümler method olarak konu altına yolunu yazarsanız farklı geliştirmeler yapılabilir.)
Bizim buradaki değeri fonksiyona manuel olarak tanımlamamız gerekiyor.
Dolayısı ile fonksiyon başlığını MagicInstance.h içerisinde
bu şekilde değiştirirsek fonksiyonu gönderen kod bloklarından direkt olarak iSkillID bilgisini çekebiliriz.
Bu şekilde sadece başlığı değiştirirsek sonuç değişmeyeceği için fonksiyonumuzun içinde de ufak bir güncelleme yapıyoruz. Fonksiyonun son hali aşağıdaki gibi olmalı.
peki biz burada ekstradan ne yaptık. Manuel olarak gelen iSkillID değerini de Magic6 datası içerisinde kontrol ettirip hem bizim manuel çektiğimiz iSkillID hem de zaten fonksiyonda bulunan nSkillID değerlerinin ikisinin de aynı anda boş olduğu şartlarda fonksiyon çalışmasın diğer şartlarda çalışsın diye bir düzenleme yaptık.
Bu şekilde düzenlememizi yaptıktan sonra son aşamaya geliyoruz. Bu fonksiyonu nerden gönderiyor source onu bulacağız.
En basit şekilde source içerisinde Type6Cancel( şeklinde arama yaptığımızda karşımıza birçok Type6Cancel(true) ve bir tane de Type6Cancel(false) şekilde yer gelecek. True olan yerler zorla silme işlemi demek yani ya biz fare ile tıklayıp sildik ya da Sundriesten alınan Transformation gibi yaratıklara ölünce kendisi silindi.
O zaman bizi ilgilendiren süresi bitince kendiliğinden silinen False değerinin olduğu yer. Yani CMagicProcess::CheckExpiredType6Skills( fonksiyonu.
Bu fonksiyon içerisinde çok ufak bir ekleme ile sorunu halletmiş olacağız. Bu düzenleme de şu şekilde;
yukarıdaki kodu silip yerine
kodunu yazıyoruz. Bu kod ile artık bu fonksiyon nSkillID değerini manuel olarak diğer fonksiyona aktarmış oluyor.
Eminim ki bu yazıyı okumayıp direk kodları alarak yoluna devam edecek birçok kişi olacaktır. Ama bir kişi de olsa burada yazılanlardan bir şeyler kaparak kendisi de buna benzer yollar ile sorunları çözme gayesini kendisine amaç edinirse ne mutlu bana.
Hera bir transform scroll olduğu için Magic6 içerisinde yer alan bir skill koduna sahip. Bu yüzden de bu skili kontrol eden fonksiyonlar source içerisindeki
Şimdi gelelim sorunlu yeri nasıl tespit ettiğimize;
Paylaşımda olan sourceler içerisindeki fonksiyon aşağıdaki gibi. Dolayısı ile biz bu fonksiyonda işlemler nereye kadar ilerliyor ona bakacağız.
şimdi bu kod bloğu içerisine ben toplamda 4 adet
şeklinde konsol çıktısı ekledim. Peki neden 4 tane ve neden buralara ekledim, Çünkü Eklenilen yerleri fonksiyon içerisindeki Return değerleri belirliyor. Bu kodu var olan kodunuzun yerine sourceye ekleyip, dosyaları build alıp oyuna girdiğinizde ve Hera scroll basıp bitmesini beklediğinizde buradaki konsol çıktıları çalışacak ve GameServer içerisinde size bilgi verecek. Ki eğer sizin dosyalarınızda sistem sorunlu olduğu için ekrana
%s: Type6Cancel is working 1 ve %s: Type6Cancel is working 2 komutları gelecek ve devamı gelmeyecektir. Bu da bize şunun bilgisini verir;
fonksiyonumuz bu koddan ileri geçemiyor. Buradan geri dönüyor. Yani bizim
buradaki nSkillID değeri 0 olarak(boş) geldiği için sistem hangi skili sileceğini belirleyemiyor.
Artık sorunu bulduk, gelelim çözüme;
(Belki daha yetkin arkadaşlarımız, çok daha sağlıklı çözümler üretebilir, varsa ekstra çözümler method olarak konu altına yolunu yazarsanız farklı geliştirmeler yapılabilir.)
Bizim buradaki değeri fonksiyona manuel olarak tanımlamamız gerekiyor.
Dolayısı ile fonksiyon başlığını MagicInstance.h içerisinde
bu şekilde değiştirirsek fonksiyonu gönderen kod bloklarından direkt olarak iSkillID bilgisini çekebiliriz.
Bu şekilde sadece başlığı değiştirirsek sonuç değişmeyeceği için fonksiyonumuzun içinde de ufak bir güncelleme yapıyoruz. Fonksiyonun son hali aşağıdaki gibi olmalı.
peki biz burada ekstradan ne yaptık. Manuel olarak gelen iSkillID değerini de Magic6 datası içerisinde kontrol ettirip hem bizim manuel çektiğimiz iSkillID hem de zaten fonksiyonda bulunan nSkillID değerlerinin ikisinin de aynı anda boş olduğu şartlarda fonksiyon çalışmasın diğer şartlarda çalışsın diye bir düzenleme yaptık.
Bu şekilde düzenlememizi yaptıktan sonra son aşamaya geliyoruz. Bu fonksiyonu nerden gönderiyor source onu bulacağız.
En basit şekilde source içerisinde Type6Cancel( şeklinde arama yaptığımızda karşımıza birçok Type6Cancel(true) ve bir tane de Type6Cancel(false) şekilde yer gelecek. True olan yerler zorla silme işlemi demek yani ya biz fare ile tıklayıp sildik ya da Sundriesten alınan Transformation gibi yaratıklara ölünce kendisi silindi.
O zaman bizi ilgilendiren süresi bitince kendiliğinden silinen False değerinin olduğu yer. Yani CMagicProcess::CheckExpiredType6Skills( fonksiyonu.
Bu fonksiyon içerisinde çok ufak bir ekleme ile sorunu halletmiş olacağız. Bu düzenleme de şu şekilde;
yukarıdaki kodu silip yerine
kodunu yazıyoruz. Bu kod ile artık bu fonksiyon nSkillID değerini manuel olarak diğer fonksiyona aktarmış oluyor.
Eminim ki bu yazıyı okumayıp direk kodları alarak yoluna devam edecek birçok kişi olacaktır. Ama bir kişi de olsa burada yazılanlardan bir şeyler kaparak kendisi de buna benzer yollar ile sorunları çözme gayesini kendisine amaç edinirse ne mutlu bana.