Anasayfa
UO Sunucular
Forumlar
Profilim
Script Hata Ayıklama (Debug)

Bir Trigger Problemini Anlamak

Yani bir senaryoyla ilgili bir sorununuz var ve nereye başvuracağınızı bilmiyor musunuz? Ya da konuştuğunuz herkes aradığınız cevaplara sahip değil mi? Saçınızı yolmaya başlamak üzeresiniz, kendinizi yalnız ve kaybolmuş hissediyorsunuz ve kimse size yardım edemiyor gibi görünüyor. Artık endişelenme, kendine yardım etmek üzeresin! Komut dosyanızda hata ayıklama hakkında konuşalım

Onları çözümlerine yönlendirecek yararlı bilgileri nasıl elde edebileceklerini açıklamak için burada bazı örnekleri inceleyeceğiz. Her durumun, sorunu çözmek için elinizdeki araçları kullanmanıza yardımcı olacak veya daha yararlı bilgiler bulmanız için size rehberlik edecek kendine özgü yöntemleri olacaktır.

MalucoBeleza'nın işaret ettiği gibi, bu uygulama bir tetikleyici ile çalışmak için uygun bilgiyi elde etmek için gereklidir
Sizin için yeni olan bir tetikleyici ile uğraşırken Wiki'yi kontrol etmek ve bunun gibi testler yapmak çok önemlidir:
ON=@Kill
SERV.LOG NAME: <NAME>
SERV.LOG I.NAME: <I.NAME>
SERV.LOG SRC.NAME: <SRC.NAME>
SERV.LOG ARGO.NAME: <ARGO.NAME>
SERV.LOG <NAME> (<UID>) HAVE JUST KILLED <ARGO.NAME> (<ARGO>)
Bir Tetikleyiciyi Sorunlarını Anlamak

Bir tetikleyicinin nasıl çalıştığından emin değil misiniz?
Bu, bir tetikleyicinin hangi nesnelere başvurduğuna dair daha fazla bilgi edinmek için sonuçlarınızı konsola kapatma kavramını gösteren MalucoBeleza'dan harika bir örnektir. Bu, oyunda doğru nesneye atıfta bulunduğunuzdan ve ardından gelen her şeyin beklendiği gibi davranacağından emin olmanıza yardımcı olabilir.

Diyelim ki birini öldürdüğünüzde ateşleyecek bir tetik kullanmak istiyorsunuz ve o kişiyi öldürdüğünüzde katile bazı deneyim puanları vermek istiyorsunuz. Hem öldürülen kişiye hem de onu öldüren kişiye atıfta bulunmanız gerekir.

Bu örnekteki tetikleyici @Kill'dir. Katil olarak varsayılan nesne I'i kullanacakları ve öldürülen kişinin SRC olacağı düşünülebilir. ya da ACT'nin öldürülen kişi olacağını. Ancak, bu tetikleyicilerden herhangi birinin herhangi bir nesne referansını diğeriyle aynı, hatta benzer bir tetikleyiciyle aynı şekilde kullanacağını varsaymamak en iyisidir. En iyi uygulama, kendinizi Spherewiki'ye götürmek (zaten sahip olduğunuz gibi) ve Nesneler > Karakterler > Referans Özeti altında aradığınız tetiği çekmektir, bu size o tetikleyicide hangi referansları yapabileceğiniz konusunda çok iyi bir fikir verecektir. Bu bilgilere sahip olduğunuzda, neyle çalışabileceğinizi ve bunlarla nasıl çalışabileceğinizi görmeye başlayabilirsiniz.

Hata ayıklama, hesaplamalar yaparken de harika bir araçtır. Diyelim ki kendi savaş sisteminizi oluşturmak istiyorsunuz, örneğin:
ON=@Hit
   SERV.LOG <NAME> HAVE JUST HIT <SRC.NAME>
   IF (<WEAPON>)
       SERV.LOG A WEAPON WAS USED: <WEAPON.NAME>
       SERV.LOG <WEAPON.NAME>'S DAMAGE IS <WEAPON.DAM.LO> - <WEAPON.DAM.HI>
   ELSE
       SERV.LOG NO WEAPON WAS USED.
       SERV.LOG <NAME>'S DAMAGE IS <DAM>
   ENDIF
   
   SERV.LOG DAMAGE STARTED AS <ARGN1>
   
   SERV.LOG THE SKILL USED IN THIS ATTACK IS <ACTION>
   IF (<ACTION> == WRESTLING) || (<ACTION> == MACEFIGHTING)
       ARGN1 = <EVAL <ARGN1> + (<STR>/8)> // FORMÜLÜNÜZÜ BURAYA GİRİN
   
   ELIF (<ACTION> == ARCHERY) || (<ACTION> == FENCING)
       ARGN1 = <EVAL <ARGN1> + (<DEX>/8)>
   
   ELIF (<ACTION> == SWORDSMANSHIP)
       ARGN1 = <EVAL <ARGN1> + (<DEX>/16) + (<STR>/16)>
   
   ENDIF
   
   SERV.LOG DAMAGE AFTER STATS BONUS ACCORDING TO THE SKILL IS <ARGN1>
   
   IF (<SRC.ISPLAYER>) // OYUNCU BAŞKA BIR OYUNCUYA VURUR
       SERV.LOG THE ARMOR OF THE DEFENDANT IS <SRC.ARMOR>
       LOCAL.DAMAGE_REDUCTION = <EVAL <SRC.ARMOR>/20> // FORMÜLÜNÜZÜ BURAYA UYGULAYIN       
   ELSE // OYUNCU BIR NPC'YE VURUR
       SERV.LOG THE ARMOR OF THE DEFENDANT IS <SRC.AC>
       LOCAL.DAMAGE_REDUCTION = <EVAL <SRC.AC>/20> // FORMÜLÜNÜZÜ BURAYA UYGULAYIN   
   ENDIF
   ARGN1 -= <LOCAL.DAMAGE_REDUCTION>
   SERV.LOG AFTER DAMAGE REDUCTION OF <LOCAL.DAMAGE_REDUCTION>, DAMAGE IS <ARGN1>
Komut Dosyalarıyla İlgili Konsol Hataları

Konsolunuzda hatalar alıyorsunuz ve size bir komut dosyası hakkında bilgi veriyor ancak ne yapacağınızdan tam olarak emin değilsiniz. Örnek olarak bir tane görelim:
00:17:ERROR:(i_dye_tubs.scp,52)Range isn't closed by a '}' character.
Tamam, bu hatadan 'i_dye_tubs' dosya adını görebiliriz ve satır numarası 52'dir. Hata şu ki, 'Aralık bir '}' karakteriyle kapatılmadı.' öyleyse bu satırın neye benzediğini ve uygun satır düzeltmesinin ne olduğunu görelim:

İşte i_dye_tubs.scp'den 52. satır şöyle görünüyor:

[code] color={047e 049a [code]

Yukarıda, tıpkı konsol hatasının bize bildirdiği gibi, sonunda bir } eksik olduğunu görebiliriz. Düzeltme, eksik } değerini eklemektir.
Bu çok temel bir örnektir, ancak bu, bir konsol hatasını parçalama sürecini açıklar. Bu komut dosyası hataları için her zaman aynıdır: "dosya adı, satır numarası, hata açıklaması". Büyük, karmaşık sistemlerde, konsol hatanızın tam doğasına dikkat etmek, hatayı nasıl düzelteceğinizi anlamanıza yardımcı olacaktır.[/code][/code]

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