Skript'te değişkenler

Mr_Obliviate

Play.BlokDunyasi.Net
Mesajlar
1,002
En iyi cevaplar
18
Beğeniler
749
Puanları
1,480
Ruh hali
Merhabalar, bu konuda sizlere Skript eklentisi için değişkenleri anlatacağım.Bu konunun aynısını başka forumlarda da paylaştım. Konu kesinlikle eleştiriye açıktır eğer konuyu biliyorsanız fikirlerinizi belirtmenizi rica ediyorum.

Değişkenlerin İngilizce ismi Variable'dır. Değişkenler plugins>skript>variables dosyasında kayıtlı tutulurlar ve süslü parantez arasında adlandırılırlar örneğin {Deneme} gibi.. Değişkenleri farklı tiplerde tutabilirsiniz. Bir değişkenin tipini değiştirebilirsiniz şimdi değişken tiplerine geçiyoruz.


En sık kullanılan değişken tipleri

Date:
Tarih tipi
Number: Sayı tipi
Text: Yazı tipi
Player: Çervim içi oyuncu tipi
Offline Player: Oyuncu tipi
Color: Renk tipi
Money: Para tipi (Para birimiyle beraber)
Item: Eşya tipi
Location: Yer, koordinat tipi
Boolean: Olumlu/Olumsuz belirteç tipi
Entity: Varlık tipi
Object: Tüm tipler (Bir koşulda(if) tüm tipleri kabul eder.)

Tüm tipleri burada göstermediğimi unutmayın. Şimdi gerçekten değişkenlere başlıyoruz. sıkılmayın!



Değişken işlemleri

Deneme değişkenine merhaba deyin! {Deneme} bu değişkeni henüz tanımlamadık. Olduğu yerde duruyor hiçbir işlevi yok. Şimdi onunla biraz oynayalım.
Bu değişken henüz tanımlanmadığı için her türlü tipi hemen kabul edecek. Çünkü tanımlanmak istiyor :D

Kod:
add 10 to {Deneme}
Burada {Deneme} değişkenine 10 artırdık. Bu işlem sadece Number tipi için geçerli ama bu değişken tanımsız olduğundan dolayı sayı tipine geçti. Dediğim gibi, tanımsız olduğu için her tipi hemen kabul ediyor. Şu anda bu değişken Number tipinde!

Kod:
set {Variable} to "Bu bir yazı olduğundan tırnak içine yazıldı"
Buradaki değişken artık Text tipine geçti zaten bir tipi yoktu onu daha tanımlamamıştık. Şimdi bu değişken üzerinde toplama yapmayı deneyelim.

Kod:
add 10 to {Variable}
Eğer denediyseniz bu işlemin olmadığını göreceksiniz. Çünkü artık bu değişkenin bir tipi var ve dört işlemi desteklemeyen bir tipte. Bu kod hata vermez ama işlemi de yapamayacağını bilmeniz gerekiyor.

Not: UTF-8 kullanmıyorsanız değişken üstünde Ü,Ğ,İ,Ç ve Ö gibi ingilizcenin desteklemediği harfler kullanmanızı tavsiye etmiyorum.

Şimdi değişkenlerin ne işe yaradığını anlamanız için bir örnek gösterelim. Sonra matematik dersinde ki "Hocam bunlar ne işimize yarayacak? Allah aşkına söyleyin." gibi olsun istemem :D.

Kod:
command /ElimdekiEşyayıKaydet:
    trigger:
        set {esya} to player's tool
        send "Esyaniz basariyla kaydedildi."
Burada elimizdeki eşyayı(Player's tool) {esya} değişkenine kaydettik. Buradaki değişken({esya}) Item tipinde. Şimdi o eşyayı bize vermesini isteyelim!

Kod:
command /EsyamiVer:
    trigger:
        give {esya} to player
        send "Esyaniz basariyla verildi."
Bu kod ile eşyanızı kendinize verebilirsiniz ama siz yine de farenin orta tuşunu kullanın.

Çoklu değişkenler(Liste)

Çoklu değişkenlere bir örnek verelim {liste::*} bu bir değişken ama içerisinde pek çok değişken var ::* kısmı onun bir Çoklu değişken olduğunu ve Başka değişkenleri temsil ettiğini gösteriyor. {liste::deneme} bu bir tekil değişken. Başta öğrendiğimizi hatırlayın {Deneme}=10 ve {liste::deneme}=10 farklı ama aynı işlevi görebilecek değişkenler yani sırf içinde :: var diye kafanız karışmasın.

Eğer tanımlanmışsa {liste::*} değişkeninin içerisinde {liste::XXX} olabilir. XXX yerine her türlü yazı biçimi(Her şey) getirilebilir.

Çoklu değişkenleri toplu halde tutarsınız yani bir listeyi döngüye aldığınızda içerisindeki değişkenleri de döngüye(loop) alırken işiniz kolaylaşacaktır.


Neden çoklu değişkenler?
Çünkü çoklu değişkenler disk depolamayı daha düzenli yapar.
Çünkü çoklu değişkenler tek yerde depolandığından aynı anda birçok değişkeni kontrol edebilirsin. (Kısacası Loop kullanabilirsiniz ve bu çok önemli)
Çünkü çoklu değişkenlerle işiniz bittiğinde hepsini tek efekt ile silebilirsiniz delete {_variable::*}
Çünkü çoklu değişkenler adamdır.
Ayrıca çoklu değişkenlere bir şey kaydetmek de oldukça kolay çünkü normal değişkenlerden hiçbir farkı yok. (Kaydederken farklı bir efekt falan kullanmıyorsunuz demek istedim. set {SuperSystem::counter::%player%} to 1 gibi)

Unutmayın!
{Kills.%player%} yazınca bir şey değişmiyor. {Kills%player%}'dan hiçbir farkı yok.
{Kills::%player%} yazdığınızda tüm öldürme sayılarını {Kills::*} değişkeninde toplamış olursunuz ve döngüye alabilirsiniz. Mesela en çok kim öldürmüş diye merak ettiğinizde tüm öldürme sayılarını döngüye almanız gerekiyor. Burada bunu yapabilirsiniz fakat {Kills.%player%} yazınca hiçbir şey yapamazsınız sadece o değişkeni çekebilirsiniz. Oldukça alternatifler ve yapmanız gereken tek şey o "." işareti yerine tane "::" koymak. Bu hatayı yapan 1 trilyon kişi gördüm. Lütfen siz siz olun {Kills::%player%} yazın.

Bir değişkeni döngüye almak
Tekil bir değişkeni döngüye alamazsınız. Zaten döngüye neden alasınız ki? çok miktarda olan verileri ayırmak için döngü kullanırız. Bu yüzden {degisken::deneme} veya {isim} gibi tekil yani bir değişken yerine bir veriyi temsil eden değişkenleri döngüye alamazsınız. {degisken::*} ise bir Çoklu değişkendir ve başka değişkenleri temsil eder içerisinde başka değişkenler vardır. Şimdi döngüye aldığımızda olanları gözlemleyelim.


Bir listeyi döngüye aldığınızda 2 şey elde edilir loop-index ve loop-value. set {kills::Slayer} to 300 set {kills::Killer} to 12650 her iki efektin çalıştırıldığını ve {kills::*}'in içerisinde {kills::Slayer} ile {kills::Killer}'ın mevcut olduğunu varsayalım.

Kod:
loop {kills::*}:
    send "%loop-value%"
    send "%loop-index%"
Her zaman döngüde olduğu gibi tek tek işlem yapacak.


Kod:
Kills::*
    kills::Slayer = 300
    kills::Killer = 12650

Döngüye alınan liste
    Döngüye alınan liste::Döngüde olan değişken = Döngüde olan değişkenin değeri
    Döngüye alınan liste::Döngüde olan değişken = Döngüde olan değişkenin değeri

Looping list
    looping list::loop-index = loop-value
    looping list::loop-index = loop-value
Tam olarak bu gerçekleşiyor. value değer. index değişken ismi. bunlarla istediğinizi yapabilirsiniz.

{items::*} değişkenine farklı eşyalar kaydettiniz ve aşağıdaki kodu kullandınız.
Kod:
set {sayi} to 0  #değişkeni 0 yap
loop {item::*}: # listeyi döngüye al
    if loop-value is diamond sword: # eğer döngü'deki değer elmas kılıç ise
        add 1 to {sayi} # değişkene 1 ekle
send "listede %{sayi}% adet elmas kılıç var." # oyuncuya mesaj gönder.

her elmas kılıç bulduğunda {sayi} değişkenine 1 ekler böylece kaç tane elmas kılıç olduğunu anlayabiliriz.


Kod:
command /bedwars [<text>] [<text>]:
    trigger:
        if arg 1 is "create":
            if arg 2 is set:
                if {BedWars::arenaList::%arg 2%} is set:
                    set {BedWars::arenaList::%arg 2%} to true
                else:
                    send "Bu isimde bir arena zaten oluşturulmuş."
            else:
                send "Bir arena ismi belirlemelisin."
Özellikle büyük skriptlerde liste değişkenleri çok iyi bilmeniz gerekiyor. Kodu iyice anladıysanız şu komutları kullanalım:
/bedwars create Arena1
/bedwars create Arena2
/bedwars create ÖzelArena
/bedwars create DenemeArena

Kod:
BedWars:
    arenaList:
        Arena1=Hazır
        Arena2=Hazır
        ÖzelArena=Hazır
        DenemeArena=Hazır
Değişkenler bu şekilde gözükür. (Anlamanız için bu şekilde gösterdim. Bu değişkenler iç içedir. {bedwars::*} değişkeni hepsini kapsar ve bu değişkeni silerseniz tüm değişkenler silinir.)


Kod:
command /bedwars [<text>] [<text>]:
    trigger:
        if arg 1 is "create":
            if arg 2 is set:
                if {BedWars::arenaList::%arg 2%} is set:
                    set {BedWars::arenaList::%arg 2%} to true
                else:
                    send "Bu isimde bir arena zaten oluşturulmuş."
            else:
                send "Bir arena ismi belirlemelisin."
        if arg 1 is "join":
            if arg 2 is set:
                {BedWars::arenaList::%arg 2%} is set:
                    add player to {BedWars::arenaPlayers::%arg 2%::*}
                    send "Arenaya katıldın"
                else:
                    send "Bu isimde bir arena yok."
            else:
                send "Bir arena ismi belirtmelisin."
Şimdi bu halinde de şu komutları kullanalım. (iki farklı oyuncu kullanıyor isimleri, XKillerX ve ProHunter)
/bedwars join Arena1
Kod:
BedWars:
    arenaList:
        Arena1=Hazır
        Arena2=Hazır
        ÖzelArena=Hazır
        DenemeArena=Hazır
    arenaPlayers:
        Arena1:
            1=XKillerX
            2=ProHunter
        Arena2:
        ÖzelArena:
        DenemeArena:
Burada da değişkenler bu şekilde gözükecektir. add ile bir liste değişkene element(herhangi bir şey) eklediğinizde. index'i 1 yapar eğer 1 varsa 2. 2 varsa 3... bu şekilde sonsuza kadar gider.


Yerel değişkenler(Local variable)
Bir kod tamamlandığında otomatik olarak silinen değişkenlerdir. Yerel değişken oluşturmak için isimlerinin başlarına "_" eklemeniz yeterli. örneğin {_n} bu benim en çok kullandığım yerel değişken ismi.


Kod:
on join: #oyuncu katıldığında.
    set {_n} to 1 #değişkeni 1 yap.
    send "%{_n}%" #değişkeni oyuncuya gönder.
    #Değişken silindi.



Skript'i daha iyi öğrenmek için Discord - Skript Topluluğu Discord grubuna gelebilirsiniz.
 


Son düzenleme:

MinS_

Ağaç Yumruklayıcı
Mesajlar
20
En iyi cevaplar
0
Beğeniler
16
Puanları
40
Güzel anlatmışsın, teşekkürler.
 

Thraenkost

Lapis Toplayıcısı
Mesajlar
936
En iyi cevaplar
1
Beğeniler
400
Puanları
990
Ruh hali
Güzel bir konu. Ellerine sağlık :)
 

Blueyescat

Bedrock Kaşifi
Mesajlar
1,656
En iyi cevaplar
0
Beğeniler
1,177
Puanları
3,120
Ruh hali
Anlatım iyi ama konu düzeni biraz karışık, mesela başlıkları büyütürsen daha iyi olur.
Ayrıca değişken isimlerinde nokta kullanmanın hiçbir şey değiştirmediğini, zararlarını ve liste değişkene çevirme örneklerini, faydalarını anlatmalısın.
 
Son düzenleme:

Mr_Obliviate

Play.BlokDunyasi.Net
Mesajlar
1,002
En iyi cevaplar
18
Beğeniler
749
Puanları
1,480
Ruh hali
KONU GÜNCEL
 
Son düzenleme:

LifeMCServer

Nether Yerlisi
Mesajlar
2,410
En iyi cevaplar
98
Beğeniler
2,461
Puanları
10,250
Ruh hali
Anlatım iyi ama konu düzeni biraz karışık, mesela başlıkları büyütürsen daha iyi olur.
Ayrıca değişken isimlerinde nokta kullanmanın hiçbir şey değiştirmediğini, zararlarını ve liste değişkene çevirme örneklerini, faydalarını anlatmalısın.

Tek veya sabit bir değişken için liste değişkeni kullanmanın da bir mantığı yok, adı üstünde liste bir den çok veri olmayacak ise anlamı kalmaz. Yani her durumda liste değişkeni kullanılmalıdır diye bir şey yok. İhtiyaca göre kullanılır.

Hem alternatifler daha fazla oluyor hem de disk tasarrufu sağlıyor ve yapmanız gereken tek şey o "." işareti yerine 2 tane ":" koymak. Bu hatayı yapan Zirilyon tane kişi gördüm. Lütfen siz siz olun {Kills::%player%} yazın.

Nasıl disk tasarrufu sağlıyor bunu biraz açar mısın? Depoladığın veri her türlü aynı.
 

Mr_Obliviate

Play.BlokDunyasi.Net
Mesajlar
1,002
En iyi cevaplar
18
Beğeniler
749
Puanları
1,480
Ruh hali
Tek veya sabit bir değişken için liste değişkeni kullanmanın da bir mantığı yok, adı üstünde liste bir den çok veri olmayacak ise anlamı kalmaz. Yani her durumda liste değişkeni kullanılmalıdır diye bir şey yok. İhtiyaca göre kullanılır.
Nasıl disk tasarrufu sağlıyor bunu biraz açar mısın? Depoladığın veri her türlü aynı.
Disk tasarrufu sağlamıyor daha düzenli depolanıyor. Biraz yanlış olmuş haklısın. Saol uyarı için.
 

bayoreo

the lord of oreos
Mesajlar
426
En iyi cevaplar
11
Beğeniler
787
Puanları
1,060
Ruh hali
Yararlı bir konu ellerinize sağlık. (İtiraf ediyorum sırf değişkenler yüzünden skript yazmayı bıraktım :D)
 

YuzbasiTr

Kömür Madencisi
Mesajlar
109
En iyi cevaplar
1
Beğeniler
111
Puanları
270
Ruh hali
Çok iyi bir anlatım olmuş, gerçekten yararlı bir konu.
 

Üst