# Gecikmeler ve Bekleme Süreleri

- **İngilizce aslı:** https://wiki.facepunch.com/gmod/Delays_and_Cooldowns
- **Çeviri tarihi:** 2025-09-08

## Hakkında

Bir bekleme süresi (cooldown), bir olayın yalnızca son gerçekleşmesinden bu yana belirli bir süre geçtiğinde tetiklenmesini sağlar.

Bir olay için bekleme süresi birkaç farklı yolla oluşturulabilir ve bu, zamana dayalı bir koşul belirlenerek yapılır.

```lua
function myFunc()
	if funcNotOnCooldown then
		-- İşlemleri yap
	end
end
```

## CurTime

[CurTime](https://gmod.tr/wiki/Global.CurTime), bir olay için gecikme ayarlamak adına kullanışlı bir araçtır. Fonksiyon, sunucunun aktif kalma süresini saniye cinsinden döndürür. Bu da, döndürülen değeri kaydedip ardından tekrar çağırarak geçen süreyi takip edebileceğimiz anlamına gelir.

İşte CurTime kullanılarak yapılmış bir bekleme süresi örneği:

```lua
local delay = 2
local lastOccurance = -delay -- İlk tetikleme denemesinin çalışacağından emin olun
local function myFunc()
	local timeElapsed = CurTime() - lastOccurance
	if timeElapsed < delay then -- Son olaydan bu yana geçen süre 2 saniyeden azsa
		print( "Olay bekleme süresinde ve tetiklenmedi" )
	else
		print( "Olay tetiklendi!" )
		lastOccurance = CurTime()
	end
end
```

> **NOT:** Eğer olayınız oyun içi olaylarla ilgili değilse, sunucu zamanı yerine her zaman gerçek dünya saatiyle senkronize olan [RealTime](https://gmod.tr/wiki/Global.RealTime) fonksiyonunu kullanmayı düşünebilirsiniz.

Yukarıdaki örnekte, son olayın ne zaman gerçekleştiğini anlamak için [CurTime](https://gmod.tr/wiki/Global.CurTime) kullandık. Bunun yerine, **bir sonraki** olayın ne zaman gerçekleşmesi gerektiğini belirlemek için de kullanabiliriz.

```lua
local delay = 5
local nextOccurance = 0

local function myFunc()
	local timeLeft = nextOccurance - CurTime()
	if timeLeft < 0 then -- Zaman, bir sonraki gerçekleşme zamanını geçtiyse
		print( "Olay tetiklendi!" )
		nextOccurance = CurTime() + delay
	end
end
```

## Zamanlayıcılar

Gecikme ayarlamanın bir başka yöntemi de [timer](https://gmod.tr/wiki/timer) kütüphanesini kullanmaktır.

```lua
local delay = 2
local shouldOccur = true

local function myFunc()
	if shouldOccur then
		print( "Olay tetiklendi!" )
		shouldOccur = false
		timer.Simple( delay, function() shouldOccur = true end )
	else
		print( "Olay hala bekleme süresinde" )
	end
end
```

> **NOT:** Zamanlayıcının bitmesine ne kadar süre kaldığını bilmek isterseniz, [timer.Create](https://gmod.tr/wiki/timer.Create) ve [timer.TimeLeft](https://gmod.tr/wiki/timer.TimeLeft) fonksiyonlarını kullanın.

> **NOT:** [GM:Think](https://gmod.tr/wiki/GM:Think) ve [GM:HUDPaint](https://gmod.tr/wiki/GM:HUDPaint) gibi her karede/tick'te çalışan hook'ların içinde zamanlayıcı kullanmamanız önerilir.

## Gerçek Dünya Zamanı

Harita değişiklikleri ve hatta sunucu yeniden başlatmaları arasında devam etmesi gereken uzun bekleme süreleriyle uğraşıyorsanız, bekleme süresini ayarlamak için gerçek dünya zamanını kullanmanız gerekir. Gerçek dünya zamanını [os.time](https://gmod.tr/wiki/os.time) ve [os.date](https://gmod.tr/wiki/os.date) ile kullanabiliriz.

Harita değişiklikleri ve sunucu yeniden başlatmaları arasında bilgiyi kaydetmenin farklı yolları vardır. Aşağıdaki örnekte, fonksiyonum için 24 saatlik bir bekleme süresi ayarlamak amacıyla [cookie](https://gmod.tr/wiki/cookie) kütüphanesini kullanacağım.

```lua
local cooldown = 86400 -- Saniye cinsinden 24 saat (24*60*60)

local function myFunc()
	local nextUse = cookie.GetNumber( "myFuncNextUse", 0 )
	local time = os.time()

	if time < nextUse then
		print( "Olay bekleme süresinde ve tetiklenmedi" )
		local nextUseString = os.date( "%Y/%m/%d - %H:%M:%S" , nextUse ) -- Bir sonraki kullanım zamanını güzelce biçimlendir
		print( "Olayın tekrar kullanılabileceği tarih: " .. nextUseString )
	else
		print( "Olay başarıyla tetiklendi!" )
		cookie.Set( "myFuncNextUse", time + cooldown )
	end
end
```

- [GMod Wiki ana sayfası](https://gmod.tr/wiki)

---

[Tüm sunucular](https://gmod.tr/) · [GmodTR Launcher](https://gmod.tr/launcher) · [Rehber](https://gmod.tr/rehber) · [GMod Wiki](https://gmod.tr/wiki) · [GmodTR nedir?](https://gmod.tr/hakkinda) · [Sunucu ekle](https://gmod.tr/sunucu-ekle) · [Discord](https://discord.gg/gmodtr)

Kaynak: https://gmod.tr/wiki/Delays_and_Cooldowns
