Ders 1 LUA Temelleri

Oner · 12 · 1752

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı Oner

  • Yeni Üye
  • *
    • İleti: 4
: 19 Mayıs 2020, 21:02:02
Bu rehberimde LUA'ya yeni başlamış kişilere LUA hakkında ve genel kodlama hakkında bilgiler vereceğim. Öncelikle Assembly gibi dillerin haricinde çoğu kodlama dilinin mantığı aynıdır, sadece yazımı farklıdır. Yani LUA öğrenerek diğer dilleri daha çabuk öğrenebilirsiniz. Önce LUA den bahsederek MTA'da nasıl script yazacağınızı göstereceğim.

MTA'daki tüm function ve eventler farklı olduğu için (anlatacağım) kodlama yapılırken hiç bir MTA scripterı LUA'nın resmi wikisini kullanmaz. Bunun yerine kodları alabileceğiniz ve detayları öğrenebileceğiniz Linki görebilmek için Kayıt olun yada Giriş yapın. adresi bulunur. Script yazmadan önce scriptle ilgili temel şeyleri öğrenmelisiniz.

Script Oluşturma
MTA Dizini > server > mods > deathmatch > resources bölümüne girin ve Türkçe karakter, boşluk veya değişik karakterler içermeyen bir klasör açın. Klasörün içinde script dosyalarınız, resimleriniz/videolarınız (opsiyonel, kullanılacaksa) olur. Ancak meta.xml dosyası olmazsa o script tanıtılmamış olacaktır.

Meta
Tüm scriptlerde gördüğünüz meta.xml dosyasıdır. Bu dosya yazılan scriptlerin tanıtılmasını sağlar.

Kod
<meta>
     <info author="Oner" name="İlk scriptim" description="Bu benim ilk scriptim" />
     <script src="client.lua" type="client" />
     <script src="server.lua" type="server" />
</meta>

Şimdi bu dosyada yazanları tanıyalım.

<meta>: meta dosyasının açıldığını ve kapandığını gösterir. Kodlamada bir şey kapatılmak için en sona aynı şey yazılarak / koyulur. Burada metayı kapatmak için </meta> kullandık.
Info Author (Opsiyonel: Script başkaları tarafından kullanılırsa yapımcısını göstermek için kullanılır.
Name: Scriptinize bir ad belirlemek için kullanılır.
Description: Scriptinize açıklama yazmak için kullanılır.
Metada daha fazlası var, sadece temel olarak yazdım. Detaylara MTA wikiden kısa bir araştırma sonucu ulaşabilirsiniz. Ayrıca meta tagları ve dosyalarınız haricindekiler (author, name vs.) koyulması şart değildir. Yani yorulmak istemezseniz şunu da yazıp bırakabilirsiniz:

Kod
<meta>
    <script src="client.lua" type="client" />
    <script src="server.lua" type="server" />
</meta>

Client dosyalarının sonuna type="client", server dosyalarının sonuna ise aynı şekilde type="server" yazılmalıdır. Böylece oyuna onun server yada client dosyası olduğu tanımlanır. (Client ve serverin anlamını anlatacağım.) Ayrıca scriptinizde resim, video veya .lua harici dosyalar kullandıysanız sunucu bunu algılamaz. Onu algılatmak için ise script alta <file src="konum"/> eklemeliyiz. Eğer dosyalarınız çıkmıyorsa bir klasör açıp dosyaları içine eklemeyi deneyin. Meta ise şöyle düzeltilecektir: <file src="klasoradi/resim.png"/> Artık meta kullanımını öğrenmiş olmalıyız, yavaş yavaş kodlamaya geçelim. Tabii ki direkt sistem yazamayacaksınız. Önce ne nedir, ne işe yarar onu öğreneceğiz.

Function ve Event
Script dosyanızın içerisinde bir scripti başlatmak için fonksiyon kullanılır. Fonksiyonun işlev anlamına geldiğini biliyorsunuzdur. MTA Wiki'den bir kod alıp function olarak kullanacağız. Şimdi karışık olarak kullanımı öğrenirken bir script yazacağız. Tek tek açıklayacağım, bu scriptin işlevi ise oyuncuya oyuna girdiğinde mesaj yazmak olacak. Dikkat, fonksiyonlarda Türkçe karakter ve değişik harfler, boşluk kullanılmaz.

Event ise gerçekleştirmek istenen eylemin başlangıcının nasıl tetikleneceğini belirtir. Örneği incelediğinizde daha iyi anlayacaksınız.

Kod
function hosgeldin()
Burada fonksiyonumuzu çağırarak scripti başlattık.

Kod
oyuncuadi = getPlayerName(source)
Evet, hoşgeldin mesajında oyuncunun adını vermesini istiyoruz. Bu yüzden denklem kullanıyoruz. Bu kod getPlayerName(source)'un -source işlemi gerçekleştiren oyuncu demektir- karşılığıdır ve ileride oyuncuadi nı kullanacağız.

Kod
outputChatBox ("==========================", source,255,255,255,true)
outputChatBox ("#CC0000 [STARFALL CnR] #009900 Aramıza hoş geldin, " ..oyuncuadi.. ".", source,255,255,255,true)
outputChatBox ("==========================", source,255,255,255,true)

Böyle yapma zorunluluğunuz yok ama görsellik için yaptım. Şimdi ise yazanları açıklayayım:

outputChatBox chate bir şey yazdırmaya yarar. Daha sonra () açıyoruz ve içerisine iki tane " koyarak araya gitmesini istediğimiz yazıyı yazıyoruz. Türkçe karakter ve benzeri bu bölgede serbesttir.
source ise bu yazılanın sadece en altta yazılacak -sonra göreceksiniz- eventi gerçekleştiren (yani oyuna giren) oyuncuya verilmesini sağlar. Başkalarına görünmesi için Linki görebilmek için Kayıt olun yada Giriş yapın. adlı MTA yazısına bakabilirsiniz.
255, 255, 255 yazısı ise rengi temsil eder. MTAnın ana rengi budur. Kalmasını tavsiye ederim çünkü tüm yazının rengini değiştirmektedir. Yazıda teker teker renk değiştirmek isterseniz "" ın arasındaki yazıda renk değişmesi istenen yerlere Linki görebilmek için Kayıt olun yada Giriş yapın. koyabilirsiniz.
Kod
"#CC0000 [STARFALL CnR] #009900 Aramıza hoş geldin, "
..oyuncuadi.. burada ise daha önceden oyuncuadi nı getPlayerName(source) -oyuncunun adını çekme-ye tanımlamıştık. Burada dikkat etmemiz gereken bunlarda belirtilen yeni nesnenin başına ve sonuna .. koymak. (..oyuncuadi.. şeklinde) Ayrıca bunu yazarken " " ın içine yazmamanız gerektiğini bilmelisiniz. Sonradan devam edecekseniz yeniden " " açarak cümleyi devam ettirebilirsiniz.
true nin Türkçe meali ise doğrudur, en sona true yazarsanız görünür, false yazarsanız görünmez.

Fonksiyonlarımızı bitirince ise sadece düz end yazarak bitirildiğini oyuna bildiriyoruz. Kod şöyle görünmeli:
Kod
function hosgeldin()
oyuncuadi = getPlayerName(source)
outputChatBox ("==========================", source,255,255,255,true)
outputChatBox ("#CC0000 [STARFALL CnR] #009900 Aramıza hoş geldin, " ..oyuncuadi.. ".", source,255,255,255,true)
outputChatBox ("==========================", source,255,255,255,true)

end

Ama hala bitmedi, henüz oyuncunun ne yaptığında bu mesajı görmesi gerektiğini ayarlamadık. End son anlamına gelse de bu fonksiyonun sonudur. Burada ise event devreye girer.
Kod
addEventHandler ( "onPlayerJoin", root, hosgeldin )
yazarız, şimdi ise anlamlarına tek tek bakalım:

addEventHandler bir event eklemek için yapılması gerekeni anlatır.
onPlayerJoin ise oyuncunun sunucuya girişinde tetiklemesini sağlar
root ise hangi oyuncu katılırsa katılsın bu mesajı sadece kendisine vermesini sağlar. Source yaparsanız bu mesaj kendisine dahil kimseye gitmez.
hosgeldin yazarak ta fonksiyonumuzu belirtip kapatıyoruz.



Kod
function hosgeldin()
oyuncuadi = getPlayerName(source)
outputChatBox ("==========================", source,255,255,255,true)
outputChatBox ("#CC0000 [STARFALL CnR] #009900 Aramıza hoş geldin, " ..oyuncuadi.. ".", source,255,255,255,true)
outputChatBox ("==========================", source,255,255,255,true)

end
addEventHandler ( "onPlayerJoin", root, hosgeldin )

Çıktımız ise böyle, tabii bunun tetiklenmesi için oyuna tekrar girmemiz gerekiyor. Bu örnekte start yaptıktan sonra reconnect atmayı unutmamalısınız.

Ayrıca Sublime Text adlı programı da kullanmanızı öneririm. Daha iyi bir görünüm sağlar ve açılan tagları kapatmanızda yardım eder. Örneğin <meta> yazarsanız kendisi mesaj ekleyerek </meta> yazar. Aynısı başka diller için de geçerlidir.
« Son Düzenleme: 26 Mayıs 2020, 00:14:34 Gönderen: Narkoz »
 


MTASATURK

Ders 1 LUA Temelleri
« : 19 Mayıs 2020, 21:02:02 »

Çevrimdışı TahaGG

  • Bilgin Üye
  • *
    • İleti: 228
Başarılı sağ ol ama ilk başlayıp hiçbir şey bilmeyenler için  Visual Studio Code öneririm. MTA LUA eklentisi var otomatik tamamlıyor. Adlarını veya içine neler yazılıyor hepsini belirtiyor ve açıklaması da var. Şiddetle öneririm.
"Türk olmak zordur, çünkü dünya ile savaşırsın. Türk olmamak daha zordur çünkü, Türk ile savaşırsın."
 


Çevrimdışı Oner

  • Yeni Üye
  • *
    • İleti: 4
Visual Studio Code ben de öneriyorum ancak Sublime Text daha iyi bir başlangıç olabilir. Oyuncu yanlış yaptığı yerleri mesela bir dizini yanlış yazarsa oyun onu algılamayacaktır. Araştırarak daha iyi öğrenebilir.
 


Çevrimdışı ertrldtcu

  • Uzman Üye
  • *
    • İleti: 589
Alıntı
root ise hangi oyuncu katılırsa katılsın bu mesajı sadece kendisine vermesini sağlar. Source yaparsanız bu mesaj kendisine dahil kimseye gitmez.
addEventHandler fonksiyonunun 2. argümanı eventin hangi element ve çocukları tarafından tetiklenebileceğini belirtmek içindir. Yani root yazdığımızda tüm elementler için tetiklenirken source yazdığında (yazdığın yere göre değişir) hiç bir element için tetiklenmez. Burda mesajın sadece sunucuya giren oyuncuda çıkmasını sağlayan kısım addEventHandler'da hedefi root yapman değil outputChatBox'ta hedefi source yapman ile alakalı bi durum.

MTA'da kodlamaya ilk başladığım zamanlar neredeyse her öğrendiğim bilgi parçacığı için gidip bi ders konusu açıyordum. Biraz yol katedince anlıyosun ki o dersler bilmeyenler için pekte faydalı değil. Senin kadar bilgisi olmayanlar için sadece kafa karışıklığından ibaret. Benim gibi dönüp arkana baktığında 'ben nası bi kafa yaşıyomuşum' dememek için biraz daha geliştikten sonra ders konusu açmanı tavsiye ederim. Yine de yaptığın şey gayet hoş, bu yolda başarılar dilerim.
system
 


Çevrimdışı Oner

  • Yeni Üye
  • *
    • İleti: 4
Teşekkür ederim ancak tek bildiğim bunlar değil. Yavaş yavaş belirli aralıklarla dersler yazacağım. Adam daha ne nedir bilmeden operatörlere geçiyorsunuz rehberlerde, adam nasıl yapacağını bile bilmiyor. Yorumun için teşekkürler. Ekleme: Örnekle açıklayarak daha iyi anlayabileceklerini düşündüm. İyi geceler.
« Son Düzenleme: 20 Mayıs 2020, 05:06:01 Gönderen: Oner »
 


Çevrimdışı Ghostemane

  • real muthaphuckkin' g
  • Acemi Üye
  • *
    • İleti: 179
Yeni başlayanlar için gayet iyi bir ders.
 


MTASATURK

Ynt: DERS 1: LUA Temelleri (Meta, Function, Event, İlk Script)
« Yanıtla #5 : 20 Mayıs 2020, 12:22:00 »

Çevrimdışı Narkoz

  • Kurucu
  • *
    • İleti: 507
  • SH Gaming
Yanıtla #6 : 26 Mayıs 2020, 00:15:37
Yeni başlayanlar için gayet açıklayıcı bir ders olmuş eline sağlık kardeşim.
 


Çevrimdışı MarkeloF

  • Admin
  • *
    • İleti: 901
  • Maybe later.
Yanıtla #7 : 26 Mayıs 2020, 00:44:24
Daha genelleme içeren bir metaryeli anlatman daha yararlı olurdu örneğin etkinlik  açma etkinliği tetikleme gibi. Bu konunun birilerinin işine yarayacağını sanmıyorum.

Çabana sağlık : )
« Son Düzenleme: 26 Mayıs 2020, 00:46:36 Gönderen: MarkeloF »
 


Çevrimdışı #Ceo

  • Acemi Üye
  • *
    • İleti: 100
  • Mekan Gaming
Yanıtla #8 : 26 Mayıs 2020, 01:31:14
Eline sağlık.
« Son Düzenleme: 26 Mayıs 2020, 01:33:22 Gönderen: #Ceo »
 


Çevrimdışı Oguzhanko

  • Yeni Üye
  • *
    • İleti: 0
Yanıtla #9 : 26 Mayıs 2020, 07:07:49
Linki görebilmek için Kayıt olun yada Giriş yapın.
Daha genelleme içeren bir metaryeli anlatman daha yararlı olurdu örneğin etkinlik  açma etkinliği tetikleme gibi. Bu konunun birilerinin işine yarayacağını sanmıyorum.

Çabana sağlık : )
benim işime yaradı, artık sanabilirsin :D
 


Çevrimdışı MarkeloF

  • Admin
  • *
    • İleti: 901
  • Maybe later.
Yanıtla #10 : 26 Mayıs 2020, 12:50:25
Linki görebilmek için Kayıt olun yada Giriş yapın.
benim işime yaradı, artık sanabilirsin :D
İçi boş bir fonksiyon açtı sanırım :)
İşine yaradıysa güzel
 


Çevrimdışı Oner

  • Yeni Üye
  • *
    • İleti: 4
Yanıtla #11 : 06 Haziran 2020, 18:03:55
Linki görebilmek için Kayıt olun yada Giriş yapın.
Daha genelleme içeren bir metaryeli anlatman daha yararlı olurdu örneğin etkinlik  açma etkinliği tetikleme gibi. Bu konunun birilerinin işine yarayacağını sanmıyorum.

Çabana sağlık : )
Linki görebilmek için Kayıt olun yada Giriş yapın.
Eline sağlık.

Linki görebilmek için Kayıt olun yada Giriş yapın.
benim işime yaradı, artık sanabilirsin :D
Linki görebilmek için Kayıt olun yada Giriş yapın.
Yeni başlayanlar için gayet açıklayıcı bir ders olmuş eline sağlık kardeşim.

Herkese teşekkürler, bir dahakine dikkat edeceğim