Anasayfa
UO Sunucular
Forumlar
Profilim
Target Kullanımı

@Targon events açıklandı TARGETF işlevi açıklandı.

Bu olaylardan dördü var:

• @TargOn_Item
• @TargOn_Char
• @TargOn_Ground
• @TargOn_Cancel

Bu oldukça açıklayıcı görünüyor, değil mi? Etkinlik, bir oyuncu _ karakterinden sonra belirtilen nesne türünü hedeflediğinde tetiklenir. (Örneğin, bir oyuncu bir öğeyi hedef aldığında @TargOn_Item tetiklenir.) Bu çok açık olduğu için bu bölüm çok kısa olacak.

Bir @TargOn olayı tetiklendiğinde, aşağıdaki nesneler oluşturulur:

SRC: Hedeflemeyi yapan oyuncu.
ARGO (ARGO): SRC'nin hedeflediği öğe veya karakter.
[default]: Bu betiğin üzerinde bulunduğu öğe.

Not: SRC.TARG'de kullanabilirsiniz. ARGO yerine TANG.

Bunun bir örnek bile gerektirmediğine inanıyorum, ama yine de bir tane vereceğim. Bu aynı zamanda çok basit, nispeten kullanışlı bir örnek.
[ITEMDEF i_hitching_post]
NAME=Hitching Post
ID=014e7
WEIGHT=500

ON=@DClick
SRC.SYSMESSAGE Target the creature to hitch.
TARGET

ON=@TargOn_Item
SRC.SYSMESSAGE Items can not be hitched!
RETURN 1

ON=@TargOn_Char
IF (<ARGO.BODY> == c_man) || (<ARGO.BODY> == c_woman)
SRC.SYSMESSAGE You can not hitch a human!
RETURN 1
ELSEIF (<ARGO.FLAGS> & 040000) && (<ARGO.ISMYPET>)
ARGO.FLAGS = <ARGO.FLAGS> &~ 040000
SRC.SYSMESSAGE You have released <ARGO.NAME> from the hitching post!
RETURN 1
ELSE
ARGO.FLAGS = <ARGO.FLAGS> | 040000
SRC.SYSMESSAGE <ARGO.NAME> is hitched!
RETURN 1
ENDIF
Yukarıdaki senaryoyu analiz edelim.

[ITEMDEF i_hitching_post]

@Dclick
Event üzerinde @DClick olayını tetiklediğinizde, size hangi yaratığı hitching post bağlamak istediğinizi sorar. Ardından, hedefi ekranınızda belirir. SRC değil TARGET kullanıldığına dikkat edin. TARGET Bunu denerseniz, SRC'yi göreceksiniz. TARGET size "Hedeflenen öğe gitti ??" gibi komik hatalar veriyor. Ardından, biri öğeler ve diğeri karakterler için olmak üzere iki @TargOn etkinliği gelir.

@TargOn_Item
Bu tetikleyici, kullanıcıya bu komut dosyasıyla bir öğeyi hedefleyemeyeceğini bildirmek için vardır. Bu olay olmasaydı ve kullanıcı bir öğeyi hedefleseydi, "Bu öğeyi kullanmanın bir yolunu düşünemezsiniz" gibi bir mesaj alırdı ki bu onun için çok net değil. Sadece bilgi almak için, hedeflemelerini istemediğiniz şeyler için de @TargOn etkinlikler koymak daha iyidir.

@TargOn_Char
Oyuncu bir karakteri hedef aldığında, önce yaratğın bir c_man mi yoksa c_woman mi olduğunu kontrol eder. Bunlardan herhangi biriyse, hemen betikten çıkar, böylece oyuncuları ve NPC insanlarını bağlayamayız. İnsanlarla evlenmek oldukça insanlık dışı görünüyor, değil mi?

Bir ELSEIF (ELIF ile aynıdır) ifadesiyle ayrılan bir sonraki bölüm, yaratığın kullanıcının evcil hayvanı olup olmadığını VE (&&) yaratığın zaten gönderiye bağlanıp bağlanmadığını kontrol eder. Her ikisi de doğruysa, hayvanı serbest bırakır. Burada scriptte küçük bir hata var. Bulabilir misin? Makalenin sonunda size ne olduğunu anlatacağım.

ELSE'den sonraki bölüm, yukarıdakilerin hiçbiri doğru değilse ne olacağını gösterir. Evcil hayvanınızın direğe bağlandığı yer burasıdır. FLAGS 040000'in bir yaratığı yerinde tutan ve onun sihir tarafından felç edilmemesini önleyen statf_stone olduğuna inanıyorum. Flag'ları değiştirdiğimizde SRC'ye değil ARGO'ya atıfta bulunduğumuza dikkat edin. Evcil hayvanını hedef alan kullanıcının yalnızca kendisini gönderiye bağlanmış bulmasını istemiyoruz!

Her neyse, bu hem @TargOn_Item hem de @TargOn_Char kapsar. İşte test maddelerimden biri olan @TargOn_Ground için benzer bir örnek. Aynı zamanda bir işlev kullanır.
[ITEMDEF i_test_targetg]
ID=01828
NAME=test targetg

ON=@DClick
TARGETG Select ground
RETURN 1

ON=@TargOn_Ground
POINT_INFO <ARGO.P>
SRC.SYSMESSAGE The point you targetted was: <VAR.TI_P>
DOSWITCH <VAR.TI_LOS>
SRC.SYSMESSAGE The point is not in your line of sight.
SRC.SYSMESSAGE The point is in your line of sight.
ENDDO
SRC.SYSMESSAGE The distance between you and that point is <EVAL <VAR.TI_DISTANCE>> tiles.
RETURN 1

[FUNCTION point_info]
IF !<ARGS>
VAR.TI = 0 // Başarısız
RETURN 0
ENDIF
SERV.NEWNPC = c_man
NEW.FLAGS = 04
NEW.P = <ARGS>
NEW.FIX
VAR.TI = 1 // Başarılı
VAR.TI_P = <NEW.P>
VAR.TI_X = <NEW.P.X>
VAR.TI_Y = <NEW.P.Y>
VAR.TI_Z = <NEW.P.Z>
VAR.TI_LOS = <NEW.CanSeeLOS>
VAR.TI_SEE = <NEW.CanSee>
VAR.TI_RFLAGS = <NEW.REGION.FLAGS>
VAR.TI_DISTANCE = <NEW.DISTANCE>
NEW.REMOVE
VAR.TI_TEMP =
RETURN 0
Tüm test öğelerimin bu küçük alchemist karoları olduğunu fark edeceksiniz. 01828'i hatırlamayı kolay buluyorum, bu yüzden test ettiğim hemen hemen her şey için kullanıyorum. Ya bu ya da henüz tartışmadığımız i_memory.

Bu oldukça karmaşık bir komut dosyasıdır. özellikle de function'dır. Bu bir @TargOn_Ground function'u her kullanmak istediğimde tüm bunları tekrar tekrar yazmak zorunda kalmamamı sağlıyor. Aslında, pek çok şey için çok faydalıdır. Çünkü bir noktayı kendi bilgilerine ayırır.

Fonksiyondan VAR değişkenlerinde döndürülen bilgiler şu şekildedir:

VAR. Tİ
Başarılı olup olmadığına bağlı olarak 1 veya 0 (TI = hedef bilgi)

VAR. TI_P
<P> Hedeflenen noktanın stil koordinatı (X, Y, Z, M)

VAR. TI_X
X koordinatı

VAR. TI_Y
Y koordinatı

VAR. TI_Z
Z koordinatı

VAR. TI_LOS
Hedeflenen konum, kullanıcının görüş alanı içinde mi?

VAR. TI_SEE
Kullanıcının ekranında hedeflenen öğe mi?

VAR. TI_RFLAGS
Zeminin hedef alındığı bölgedeki bayraklar.

VAR. TI_DISTANCE
Kullanıcı ile hedeflenen nokta arasındaki karolardaki mesafe

Gördüğünüz gibi, bu son derece yararlı bir bilgidir ve sizi bir dizi yeni işlevle tanıştırabilir. Distance sayısal bir değer döndürür ve CANSEE/CANSEELOS 1/0 bölü değerleri döndürür. Ama yoldan çıkıyoruz. Bunları daha sonra tartışacağız. Ürünümüzün ne yaptığını görelim.

İlk olarak, başka bir yeni komutla bir hedef getirir: TARGETG... temel olarak, "target ground". Bu, cliente yalnızca öğeler ve karakterler yerine zemin döşemelerini hedeflemenize izin verildiğini söyler. Kullanıcı gerçekten yeri hedeflediğinde, gerçekleşen ilk şey [FUNCTION point_info] öğesinin çağrılmasıdır. Bu, o harika VAR'ları bizim noktamızla ilgili verilerle dolduruyor.

NOT: Bir harita konumu hakkında kaynak veya öğe türü verileri toplamak istiyorsanız, okumaya devam edin, sonraki bölümlerden birinde bunu nasıl elde edeceğinize dair bir yöntem olacaktır (SERV. MAPS).

Kodun geri kalanını açıklamama gerek olduğunu sanmıyorum. @TargOn_Ground olayından alabileceğiniz veriler ve nesneler hakkında daha fazla bilgi için dördüncü bölümdeki olaylar tablosuna bakın.

@TargOn_Cancel
Bu tetikleyici, bir oyuncu kaçış (ESC) tuşuna basarak hedefi iptal ettiğinde çağrılır.

TARGETIF
Bu, bir şeyi veya birini hedeflemenin en güçlü yoludur. Artık hedefleme için herhangi bir bellek öğesine ihtiyacınız yok.

İki tür TARGETF işlevi vardır:

• TARGETF f_myfunction - Yalnızca karakterleri ve statik olmayan öğeleri hedeflemenizi sağlar.
• TARGETFG f_myfunction - Karakterleri, öğeleri ve zemini hedeflemenizi sağlar.
• TARGETFW f_myfunction - Yalnızca karakterleri ve statik olmayan öğeleri hedeflemenize olanak tanır ve cezai işlemlere karşı uyarır

Hedeflemeden sonra, ARGO'nun hedeflenen öğeye/NPC'ye referans olmasıyla f_myfunction çağrılacak ve istemci toprağı hedefleyebiliyorsa, bu konum işlevde TARGP olacaktır. Ayrıca, diğer işlevlerde olduğu gibi işleve bağımsız değişkenler de
ON=@Start
TARGETFG F_MYFUNCTION <SRC.UID>, <SRC.ACTION>, <SRC.KILLS>, <SRC.ACCOUNT.LASTIP>

[FUNCTION f_myfunction]
SERV.B <name> targeted <argo.name>. Arguments are: UID <ARGV[0]> ACTION <ARGV[1]> KILLS <ARGV[2]> LASTIP <ARGV[3]> 
[/default]

UO-Dev SPONSOR

UO-Dev SPONSOR

Henüz yorum yapılmamış. Yorum yazabilmek için giriş yapmanız gerekir.

Üyelerin oylama ortalaması (10 dışında) :

Henüz Oylanmamış

Oylar: 0