Merhaba, Hoşgeldin!

VSRO.org, Silkroad Online, Knight Online, Metin2 ve diğer çevrimiçi oyunlar için öncü bir yardım ve geliştirme platformudur. Misyonumuz, bilgi ve deneyim sahibi bireyleri, bilgiye ihtiyaç duyanlarla bir araya getirerek, zengin bir etkileşim ortamı yaratmak ve farklı bakış açılarını birleştirmektir. Topluluğumuzda güçlü bir işbirliği ve öğrenme kültürü oluşturarak, herkesin değerli katkılarda bulunmasını sağlıyoruz.

KO Paylaşım Hera Süresinin Bitmesine Rağmen Oyunda Kaybolmaması KO

Thor

WTB Mjolnir
.
Elite
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

SQL:
İçeriği görebilmek için Giriş yap ya da üye ol.


Ş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.

SQL:
İçeriği görebilmek için Giriş yap ya da üye ol.


şimdi bu kod bloğu içerisine ben toplamda 4 adet

SQL:
İçeriği görebilmek için Giriş yap ya da üye ol.

ş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;


SQL:
İçeriği görebilmek için Giriş yap ya da üye ol.

fonksiyonumuz bu koddan ileri geçemiyor. Buradan geri dönüyor. Yani bizim
SQL:
İçeriği görebilmek için Giriş yap ya da üye ol.

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

SQL:
İçeriği görebilmek için Giriş yap ya da üye ol.


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ı.

SQL:
İçeriği görebilmek için Giriş yap ya da üye ol.
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;


SQL:
İçeriği görebilmek için Giriş yap ya da üye ol.

yukarıdaki kodu silip yerine

SQL:
İçeriği görebilmek için Giriş yap ya da üye ol.
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.
 
Geri
Üst Alt