Lua Kodlama Ders 3



Lua Kodlama Ders 3



Tüm scriptler nerededir?

MTA Server klasörüne gidin ve aşağıdaki yolu izleyin:
server/mods/deathmatch/resources

Burada bir çok .zip dosyalarını göreceksiniz. Hepsi sıkıştırılmış bir dosyadır ve oyunu başlatıldığında hepsi sunucu tarafından yüklenecektir. Biz bu ders için "script1" kullanacağız.

Şimdi bu dizinin altında olmalıdır:
server/mods/deathmatch/resources/script1/

_________________________________________________________________________________

Meta Dosyası

Kaynaktaki dosyaları belirlemek için bir meta.xml oluşturulmuştur. Şimdi bir meta.xml dosyası oluşturalım. Bunun için notepad   kullanabilirsiniz.

meta.xml dosyasına aşağıdaki kodları girin:


 
<meta>
     <info author="ZoRRoM" type="script" name="Can-Armor" description="Benim 1. scriptim" />
     <script src="ders_c.lua" type="client" />
     <script src="ders_s.lua" type="server" />
</meta>

Author= Script Yapımcısını belirtir
 Type= Scriptin türünü belirtir 
Name= Scriptin adını belirtir 
Descripton= Scriptin açıklamasını belirtir




 .<meta> </meta>= meta dosyasını belirtir 


tagında script ile ilgili bilgiler bulunur.
addEventHandler("onClientResourceStart", resourceRoot, function() dersWindow = guiCreateWindow(368, 265, 223, 119, "#LUA Ders 1 /// By ZoRRoM", false) guiWindowSetSizable(dersWindow, false) guiSetVisible(dersWindow, false) canButon = guiCreateButton(10, 36, 86, 34, "Can", false, dersWindow) guiSetFont(canButon, "default-bold-small") addEventHandler ( "onClientGUIClick", canButon, canClick, false ) armorButon = guiCreateButton(128, 36, 85, 34, "Armor", false, dersWindow) guiSetFont(armorButon, "default-bold-small") addEventHandler ( "onClientGUIClick", armorButon, armorClick, false ) kapat = guiCreateButton(53, 88, 116, 21, "Kapat", false, dersWindow) guiSetFont(kapat, "default-bold-small") end ) function ackapa() if (guiGetVisible (dersWindow) == true) then guiSetVisible(dersWindow, false) showCursor(false) elseif (guiGetVisible (dersWindow) == false) then guiSetVisible(dersWindow, true) showCursor(true) end end bindKey ("L", "down", ackapa) function kapatTusu() if source == kapat then guiSetVisible ( dersWindow,false ) showCursor(false) end end addEventHandler("onClientGUIClick",root,kapatTusu ) function canClick() if (getPlayerMoney(source) >= 50) then triggerServerEvent ( "canAl", localPlayer) else outputChatBox("#9c0000[Bilgi]; #185e1bMalesef ki paran yetersiz. Gerekli para 50$!", source, 255, 0, 0, true) end end function armorClick() if (getPlayerMoney(source) >= 60) then triggerServerEvent ( "armorAl", localPlayer) else outputChatBox("#9c0000[Bilgi]; #185e1bMalesef ki paran yetersiz. Gerekli para 60$!", source, 255, 0, 0, true) end end





Şimdi de bunu kopyalayıp ders_s.lua'nın içine yapıştırın:

 function can ()
  if ( 200 > getElementHealth(source) ) then
    takePlayerMoney ( source, 50 )
    setElementHealth ( source, 200)
    outputChatBox("#9c0000[Bilgi]; #185e1bSatın Alındı!", source, 255, 0, 0, true)
  else
    outputChatBox("#9c0000[Bilgi]; #185e1bZaten canın full!", source, 255, 0, 0, true)
  end
end
addEvent ("canAl", true)
addEventHandler ( "canAl", getRootElement(), can )

function armor ()
  if ( 100 > getPedArmor(source) ) then
    takePlayerMoney ( source, 60 )
    setPedArmor ( source, 100)
    outputChatBox("#9c0000[Bilgi]; #185e1bSatın Alındı!", source, 255, 0, 0, true)
  else
    outputChatBox("#9c0000[Bilgi]; #185e1bZaten armorun full!", source, 255, 0, 0, true)
  end
end
addEvent ("armorAl", true)
addEventHandler ( "armorAl", getRootElement(), armor ) 



Şimdi bunlar ne anlama geliyormuş bir bakalım...

İlk önce ders_c.lua;

Scriptin bu bölümü görüntü ile alakalıdır. Burada ilk önce panelin görüntüsünü oluşturacağız...

 addEventHandler("onClientResourceStart", resourceRoot,
    function()
        dersWindow = guiCreateWindow(368, 265, 223, 119, "#LUA Ders 3 ///  By ZoRRoM", false)
        guiWindowSetSizable(dersWindow, false)
    guiSetVisible(dersWindow, false)

        canButon = guiCreateButton(10, 36, 86, 34, "Can", false, dersWindow)
        guiSetFont(canButon, "default-bold-small")
    addEventHandler ( "onClientGUIClick", canButon, canClick, false )
    
    
        armorButon = guiCreateButton(128, 36, 85, 34, "Armor", false, dersWindow)
        guiSetFont(armorButon, "default-bold-small")
    addEventHandler ( "onClientGUIClick", armorButon, armorClick, false )
    
    
        kapat = guiCreateButton(53, 88, 116, 21, "Kapat", false, dersWindow)
        guiSetFont(kapat, "default-bold-small")    
    end
)


__________________________________________________________

addEventHandler("onClientResourceStart", resourceRoot,
function() 


addEventHandler ile scripte zaman ekliyoruz. Zaman ekimiz "onClientResourceStart". Yani bu script başlatıldığında. Ardından yeni bir function oluşturuyoruz.

_________________________________________________________________________________

 dersWindow = guiCreateWindow(368, 265, 223, 119, "#LUA Ders 3 ///  By ZoRRoM", false)
        guiWindowSetSizable(dersWindow, false)
    guiSetVisible(dersWindow, false)

guiCreateWindow --> Pencere oluşturur.
Kullanımı --> guiCreateWindow(x koordinatı, y koordinati, x uzunluğu, y uzunluğu, "Pencereye yazılacak yazı", false)

guiWindowSetSizable --> Pencerenin uzunluğunun değiştirilememesi sağlar.
Kullanımı --> guiWindowSetSizable(pencerenin adı, false veya true yani sırasıyla "Değiştirilmesin" veya "Değiştirilsin")

guiSetVisible --> Pencerenin kapalı veya açık olmasını sağlar.
Kullanımı --> guiSetVisible(pencerenin adı,  false veya true yani sırasıyla "Açık" veya "Kapalı")

Satırları sırasıyla;
Bir pencere oluşturuyoruz ve adını dersWindow koyuyoruz.
Boyutunun değiştirilip, değiştirilemeyeceğini ayarlıyoruz.
Kapalı ve açık olduğunu ayarlıyoruz.

_________________________________________________________________________________


 canButon = guiCreateButton(10, 36, 86, 34, "Can", false, dersWindow)
        guiSetFont(canButon, "default-bold-small")
    addEventHandler ( "onClientGUIClick", canButon, canClick, false ) 

guiCreateButton --> Buton oluşturur.
Kullanımı --> guiCreateButton(x koordinatı, y koordinatı, x uzunluğu, y uzunluğu, "Butona yazılacak yazı", false, neyin üzerinde olduğu)

guiSetFont --> Herhangi bir gui elementinin (pencere-buton-label...) yazı stilini değiştirir.
Kullanımı --> guiSetFont(guielementinin adı, "yazı stili")
Orijinal gui fontlarına buradan ulaşabilirsiniz.

onClientGUIClick --> Gui elementine tıklanıldığında anlamını taşır.
addEventHandler ( "onClientGUIClick", button ismi, butona tıklanıldığında yapılacak şeylerin olduğu function ismi, false )

Aynı şey aşağıdaki kodlar içinde geçerlidir;

 armorButon = guiCreateButton(128, 36, 85, 34, "Armor", false, dersWindow)
        guiSetFont(armorButon, "default-bold-small")
    addEventHandler ( "onClientGUIClick", armorButon, armorClick, false )
    
    
        kapat = guiCreateButton(53, 88, 116, 21, "Kapat", false, dersWindow)
        guiSetFont(kapat, "default-bold-small") 


Kapat butonuna onClientGUIClick eklemedik. Aşağıda ekliyeceğiz... Ardından kodu bitiriyoruz...

_________________________________________________________________________________

Scriptin bu bölümü Pencereyi açıp kapama ile ilgilidir. Burada açma kapama harfini ve kapatma butonunu ayarlıyacağız.

 function ackapa()
    if (guiGetVisible (dersWindow) == true) then
    guiSetVisible(dersWindow, false)
    showCursor(false)
    elseif (guiGetVisible (dersWindow) == false) then
    guiSetVisible(dersWindow, true)
    showCursor(true)
    end
end
bindKey ("L", "down", ackapa)

function kapatTusu()
        if source == kapat then
        guiSetVisible ( dersWindow,false )
        showCursor(false)
        end
    end
addEventHandler("onClientGUIClick",root,kapatTusu ) 



_________________________________________________________________________________


guiGetVisible --> Gui elementinin kapalı olup olmadığını alır.
Kullanımı --> guiGetVisible(gui elementinin adı)

showCursor --> Mouse ayarıdır. Mouseyi bu kod ile açıp kapatacağız.
Kullanımı --> showCursor (false veya true "kapalı veya açık"

bindKey --> Herhangi bir koda açıp kapamak için harf atamaya yarar.
Kullanımı --> bindKey ("Hangi tuşla açılacağı", "up - down - both (açıklaması aşağıda)", funciton adı)

up --> Basılan tuş serbest bırakıldığında işlev gerçekleşir.
down --> Tuşa basıldığında işlev gerçekleşir.
both --> Tuşa basıldığında veya bırakıldığında işlev gerçekleşir.
 function ackapa() -- Function oluşturulur.
    if (guiGetVisible (dersWindow) == true) then -- Eğer dersWindow açıksa...
    guiSetVisible(dersWindow, false) -- dersWindow'u kapat.
    showCursor(false) -- Mouse'yi kapat.
    elseif (guiGetVisible (dersWindow) == false) then -- Yada dersWindow kapalıysa
    guiSetVisible(dersWindow, true) -- dersWindow'u aç.
    showCursor(true) -- Mouse'yi aç.
    end -- Kod bitirilir
end -- Kod bitirilir
bindKey ("L", "down", ackapa). 
 function kapatTusu() -- Yeni funtion oluşturulur.
        if source == kapat then -- Eğer değişken "kapat" ise
        guiSetVisible ( dersWindow,false ) -- dersWindow'u kapat.
        showCursor(false) -- Mouse'yi kapat
        end -- Kod bitirilir
    end -- Kod bitirilir
addEventHandler("onClientGUIClick",root,kapatTusu ) -- Herhangi bir şeye tıklayınca 
Herhangi bir şeye tıklayınca ancak function içinde eğer değiken kapat ise dedik. Dikkat!


________________________________________________________________

Scriptin bu bölümü yukarıda belirttiğimiz

 addEventHandler ( "onClientGUIClick", canButon, canClick, false ) 


kodu ile ilgilidir. Oradaki function adına ne yazdıysanız buradaki function'un adıda aynı olmalıdır.
 function canClick()
  if (getPlayerMoney(source) >= 50) then
    triggerServerEvent ( "canAl", localPlayer)
  else
  outputChatBox("#9c0000[Bilgi]; #185e1bMalesef ki paran yetersiz. Gerekli para 50$!", source, 255, 0, 0, true)
  end
end


getPlayerMoney --> Oyuncunun parasının kaç olduğunu alır.
Kullanımı --> getPlayerMoney(source)

triggerServerEvent --> LUA kodlamada kodlar ikiye ayrılmıştır. Bi server kodu, birde client kodu. Oyuncunun canını değiştirme kodu server eventi olduğu için, triggerServerEvent kullanıcağız. 

Peki bu ne işe yarar?
Bu kod sayesinde iki ayrı yerde bulunan farklı tipteki ( server - client ) kodları, tek kod içindeymişçesine birbirine bağlar. Yani server'da yapacağımız şey bu kodun içindeymiş gibi olacak.
Kullanımı --> triggerServerEvent ( "Karşı tarafa yollayacağımız isim. Bunun çalışması için karşı taraftada aynı isim kullanılmalıdır.", localPlayer)

 function canClick() -- Yeni bir funtion oluşturuyoruz.
  if (getPlayerMoney(source) >= 50) then -- Eğer oyuncunun parası 50'den büyük veya 50'ye eşit ise
    triggerServerEvent ( "canAl", localPlayer) -- Servere gönder
  else -- Eğer oyuncunun parası 50'den büyük veya 50'ye eşit değil ise
  outputChatBox("#9c0000[Bilgi]; #185e1bMalesef ki paran yetersiz. Gerekli para 50$!", source, 255, 0, 0, true) -- Chatbox'a yazı gönderir.
  end -- Kodu bitiriyoruz.
end -- Kodu bitiriyoruz. 



Aynı şey bu kod içinde geçerlidir;
 function can ()
  if ( 200 > getElementHealth(source) ) then
    takePlayerMoney ( source, 50 )
    setElementHealth ( source, 200)
    outputChatBox("#9c0000[Bilgi]; #185e1bSatın Alındı!", source, 255, 0, 0, true)
  else
    outputChatBox("#9c0000[Bilgi]; #185e1bZaten canın full!", source, 255, 0, 0, true)
  end
end
addEvent ("canAl", true)
addEventHandler ( "canAl", getRootElement(), can ) 


getElementHealth --> Elementin canının kaç olduğunu alır.
Kullanımı --> getElementHealth(source)

takePlayerMoney --> Oyuncunun parasını alır.
Kullanımı --> takePlayerMoney ( source, alınacak para miktarı)

setElementHealth --> Elementin canını değiştirir.
Kullanımı --> setElementHealth ( source, miktar)

addEvent --> Client'de kullandığımız triggerServerEvent'i burada karşılar.
Kullanımı --> addEvent ("Client'den gönderdiğimiz isim adı", true)
Kullanımı --> addEventHandler ( "Client'den gönderdiğimiz isim adı", getRootElement(), function adı)
 function can () -- Yeni bir funtion oluşturuyoruz ve adını koyuyoruz.
  if ( 200 > getElementHealth(source) ) then Eğer 200, değişken olayı tetikleyenin (oyuncunun) canından fazlaysa
    takePlayerMoney ( source, 50 ) -- Oyuncunun ... parasını al.
    setElementHealth ( source, 200) -- Oyuncunun canını ... yap.
    outputChatBox("#9c0000[Bilgi]; #185e1bSatın Alındı!", source, 255, 0, 0, true) -- Chatbox'a yazı gönder
  else -- Eğer 200, oyuncunun canından az veya eşit ise
    outputChatBox("#9c0000[Bilgi]; #185e1bZaten canın full!", source, 255, 0, 0, true) -- Chatbox'a yazı gönder
  end -- Kodu bitiriyoruz.
end -- Kodu bitiriyoruz.
addEvent ("canAl", true) -- triggerServerEventi karşılar.
addEventHandler ( "canAl", getRootElement(), can ) -- triggerServerEvent buraya gönderildiğinde "can" adlı functionu başlat anlamı taşır. 


__________________________________________________________________________________________________________________________________________________________________


 function armor ()
  if ( 100 > getPedArmor(source) ) then
    takePlayerMoney ( source, 60 )
    setPedArmor ( source, 100)
    outputChatBox("#9c0000[Bilgi]; #185e1bSatın Alındı!", source, 255, 0, 0, true)
  else
    outputChatBox("#9c0000[Bilgi]; #185e1bZaten armorun full!", source, 255, 0, 0, true)
  end
end
addEvent ("armorAl", true)
addEventHandler ( "armorAl", getRootElement(), armor ) 


getPedArmor --> Ped veya player'in canını alır. Kullanımına göre...
Kullanım --> getPedArmor(source)

setPedArmor --> Ped veya player'in canını değiştirir.
Kullanım --> setPedArmor( source, miktar)


 function armor () -- Yeni funciton oluşturuyoruz ve isim koyuyoruz.
  if ( 100 > getPedArmor(source) ) then -- Eğer 100, oyunucun armorundan fazla ise
    takePlayerMoney ( source, 60 ) -- Oyuncunun parasını alır.
    setPedArmor ( source, 100) -- Armoru değiştirir.
    outputChatBox("#9c0000[Bilgi]; #185e1bSatın Alındı!", source, 255, 0, 0, true) -- Chatbox'a yazı gönderir
  else -- Eğer 100, oyunucun armorundan fazla değil veya eşit ise
    outputChatBox("#9c0000[Bilgi]; #185e1bZaten armorun full!", source, 255, 0, 0, true) -- Chatbox'a yazı gönderir
  end -- Kodu bitirir.
end -- Kodu bitirir.
addEvent ("armorAl", true) -- triggerServerEvent'i karşılıyoruz.
addEventHandler ( "armorAl", getRootElement(), armor ) -- triggerServerEvent buraya gönderildiğinde "armor" adlı functionu başlat anlamı taşır. 


Anlatım pwpwar509'a aittir

Yorum Gönder

0 Yorumlar

-