Merhaba arkadaşlar,
Bir çoğumuz oyun içinde uzaklık sorgusunu DISTANCE komutu ile yapıyoruz. Eğer SphereX kullanıyor ve NoDiagonalCheck flag'ı açık kullanıyorsanız, bu size her zaman doğru sonucu verebilir. Ancak daha eski sürümlerde emulatör kullanıyor veya Combat sisteminin saçmalamaması için NoDiagonalCheck flag kullanmıyorsanız maalesef DISTANCE komutu çapraz yönlerde doğru sonuç vermez.

Yanlış Sonuç Örneği
Örneğin, ekranın ortasında duran bir karakter ekranın üst orta kısmına doğru 9 kare görebilir ancak DISTANCE sorgusu buraya 12 kare sonucu verir. Emulatör içindeki uzaklık sorgusunda yuvarlama mantığı vardır. Yani eğer uzaklık 8.1 ise bu uzaklık 9 olarak sayılır. Bu durumda, kesin uzaklık bilgisine ihtiyacınız olan bir sistem yazıyorsanız aşağıda paylaşacağım komut işinizi görecektir.


Gerçek Uzaklığı Veren Komut
// GERÇEK DİSTANCEYİ VEREN KOMUT
[FUNCTION REALDISTANCE]
REF1=<ARGV[0]>
REF2=<ARGV[1]>
LOCAL.XDIF=<EVAL SQRT(<EVAL (<REF1.P.X>-<REF2.P.X>) * (<REF1.P.X>-<REF2.P.X>)>)>
LOCAL.YDIF=<EVAL SQRT(<EVAL (<REF1.P.Y>-<REF2.P.Y>) * (<REF1.P.Y>-<REF2.P.Y>)>)>
IF (<DLOCAL.XDIF> > <DLOCAL.YDIF>)
RETURN <DLOCAL.XDIF>
ELSE
RETURN <DLOCAL.YDIF>
ENDIF
Komut Kullanım Şekli
if (<realdistance <src>,<hedef>> > 2)
src.sysmessage <hedef> konuma 2 kareden uzaksın
else
src.sysmessage <hedef> konuma 2 kare veya daha yakınsın
endif
Umarım işinize yarayacak bir komut olur. İnternette softdistance diye benzer bir komut karşınıza çıkabilir. Bu komut çok eski emulatör sürümlerinde yazılmış olduğundan, direkt güncel şeklini kullanmak daha iyi olacaktır.
Başarılar dilerim!


