Hook Kütüphanesi Kullanımı

Hook kütüphanesi nedir?

Hook kütüphanesi, betiklerin oyun veya kullanıcı tarafından oluşturulan olaylarla (event) etkileşime girmesine olanak tanır. hook.Run veya hook.Call ile oluşturulan bir olaya bir fonksiyonu "takmanıza" (hook) ve bu olay gerçekleştiğinde bağımsız olarak çalışan veya olayın argümanlarını değiştiren bir kod çalıştırmanıza izin verir. Bu yöntem, kendi kodunuzu eklemek için fonksiyonları geçersiz kılmak (override) yerine tercih edilen yöntemdir.

Hook kütüphanesini kullanma

Hook ekleme

hook.Add fonksiyonunu kullanarak bir hook ekleyebilirsiniz. Bu fonksiyon aşağıdaki argümanları alır:

  1. Olay Adı (Event Name) - Hook'unuzu çalıştıracağınız olayın adıdır.
  2. Hook ID - Eklediğiniz hook'a özgü bir tanımlayıcıdır ve daha sonra hook'u kaldırmak için kullanılabilir.
  3. Hook Fonksiyonu (Hook Function) - Olay gerçekleştiğinde çalıştırılan fonksiyondur.

Aşağıda, bir oyuncu her doğduğunda konsola yazı yazdırmak için bir hook ekleme örneği bulunmaktadır:

hook.Add("PlayerSpawn", "Spawn_Notification", function(ply) print(ply:Name() .. " has spawned!") end)

Bu şekilde de yazılabilir:

local function spawnPrint(ply) print(ply:Name() .. " has spawned!") end hook.Add("PlayerSpawn", "Spawn_Notification", spawnPrint)

Bu, bir oyuncu her doğduğunda konsola "{OyuncuAdı} doğdu!" yazdıracaktır.

Hook ID'leri string, panel veya entity olabilir. Eğer bir panel veya entity verilirse ve geçersiz hale gelirse, hook kaldırılır.
hook.Add ile eklenen hook'lar herhangi bir şekilde sıralanmaz.

Hook fonksiyonları

Bir hook çağrıldığında, olayına özgü argümanlar verilir. Her hook hakkındaki bilgilere bu wiki'de ve adreslerinde bulunabilir. Bazı hook'lara ise hiçbir argüman verilmez.

Oyun Modları ve hook'lar

GM (veya GAMEMODE) tablosu altındaki fonksiyonlar da hook olarak kabul edilir. Bir olay çalıştırıldığında, hook.Add kullanılarak tanımlanan tüm hook'lar, Oyun Modu (Gamemode) fonksiyonundan önce çağrılır.

Bu, bir oyun modu içindeki aşağıdaki kodun da bir oyuncu her doğduğunda konsola yazı yazdıracağı anlamına gelir:

function GM:PlayerSpawn(ply) print(ply:Name() .. " has spawned!") end

Hook'lardan değer döndürme

Bir hook'tan bir değer döndürüldüğünde, aynı olay için olan diğer hook'lar çalışmaz. Bu, diğer hook'ları ve oyun modu fonksiyonlarını geçersiz kılabileceğiniz (override) anlamına gelir.

Değerleri yalnızca gerektiğinde döndürmelisiniz, return ve return false farklıdır.

Hook'tan döndürülen değerin onu etkileyip etkilemeyeceğini görmek için, o hook'un wiki sayfasında Returns bölümü olmalıdır.

Bu örnek, SANDBOX:PlayerSpawnProp olayının kullanımını gösterir. Bu olay, oyuncunun bir prop oluşturmasına izin veriliyorsa hook'ların true, aksi takdirde false döndürmesini bekler. Hiçbir şey döndürülmezse, bir sonraki hook'u çalıştırır.

hook.Add("PlayerSpawnProp", "Admin_Props", function(ply, model) if (ply:IsAdmin()) then return true end return false end)

Bu kod yalnızca adminlerin prop oluşturmasına izin verecektir. Her zaman bir değer döndürdüğü için diğer hook'ları geçersiz kılar.

Kendi olaylarınızı ekleme

Sadece hook.Run veya hook.Call'u çağırarak kendi olaylarınızı ekleyebilirsiniz. Eklentilerinizde meydana gelen her olay için bir hook oluşturmanıza gerek yoktur çünkü bu gereksiz olur; ancak bir oyun modunun harita değişikliğini kontrol etmesi gibi önemli şeyler veya harici betiklerin düzenlemesini istediğiniz olaylar için hook'lar olmalıdır.

Aşağıdaki örnek, "PerformMultiplication" olayına takılı olan tüm hook'ları çağırır ve her hook'a bir argüman sağlar.

hook.Add("PerformMultiplication", "Multiply_Obob", function(a, b) return (a * b) end) local returnedValue = hook.Run("PerformMultiplication", 3, 4) print(returnedValue)

Bu örnek 12 çıktısı verecektir.

Ne yaptığınızı bilmiyorsanız, varsayılan hook'ları tetiklememeniz tavsiye edilir.

Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord