# Durumlar ve Alemler

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

Garry's Mod'da 'realm' (alan) olarak da bilinen Lua durumları, birbirleriyle yalnızca `net` ve `file` kütüphaneleri gibi dolaylı yollarla etkileşime girebilen ve iletişim kurabilen Lua dilinin ayrı örnekleridir. Ayrı Lua durumları oldukları için, bir durumdaki global değişkenler dolaylı iletişim yöntemleri kullanılmadan başka bir durumda alınamaz.

Durumlar, özel fonksiyonlarını ve geri çağrılarını (callback), oyun motoru tarafından dahil edilen Lua dosyaları aracılığıyla yükler. Aşağıda her bir durum altında açıkça listelenenler dışındaki tüm dosyaların kullanılabilmesi için Lua'dan [dahil edilmesi](https://gmod.tr/wiki/Global.include) gerekir.

Garry's Mod'da 3 adet Lua durumu bulunur:

## İstemci (Client)

![image.png](https://gmod.tr/api/uploads/wiki/c01de488cc91a14f7b05.png)

**İstemci (client)** durumu, oyun istemcisini temsil eden Lua durumudur. Oyuncu girdisini alır ve sunucuya gönderirken, diğer varlıklar ve oyuncular hakkındaki verileri alır, ardından tüm bu bilgileri [Tahmin (Prediction)](https://gmod.tr/wiki/Prediction) için kullanır. İstemci, varlıkları sunucunun tickrate'i ile senkronize olarak simüle eder, ancak her karede (frame) [görüntü işleme (rendering)](https://gmod.tr/wiki/Render_Order) gerçekleştirir.

**İstemci (client)** durumu, **sunucu (server)** durumuyla [net](https://gmod.tr/wiki/net) kütüphanesi ve [sunucu taraflı concommand'leri çalıştırarak](https://gmod.tr/wiki/Global.RunConsoleCommand) etkileşim kurabilir ve iletişim kurabilir.

Lua kodu, `CLIENT` global değişkeninin `true` olup olmadığını kontrol ederek **istemci (client)** durumunda çalışıp çalışmadığını tespit edebilir.

**Oyun Motoru Lua Dosyaları - İstemci (Client)**

- `lua/includes/init.lua`
- `lua/derma/init.lua`
- `lua/gamemodes/base/gamemode/cl_init.lua` (bu, ayarlanan oyun modundan bağımsız olarak her zaman yüklenir)
- `lua/autorun/*.lua`
- `lua/autorun/client/*.lua`
- `lua/postprocess/*.lua`
- `lua/vgui/*.lua`
- `lua/matproxy/*.lua`
- `lua/skins/default.lua`
- `lua/gamemodes/<gamemode_name>/gamemode/cl_init.lua`
- `lua/gamemodes/base/entities/entities/*.lua`
- `lua/gamemodes/base/entities/entities/*/cl_init.lua`
- `lua/gamemodes/base/entities/weapons/*.lua`
- `lua/gamemodes/base/entities/weapons/*/cl_init.lua`
- `lua/entities/*.lua`
- `lua/entities/*/cl_init.lua`
- `lua/weapons/*.lua`
- `lua/weapons/*/cl_init.lua`
- `lua/gamemodes/<gamemode_name>/entities/entities/*.lua`
- `lua/gamemodes/<gamemode_name>/entities/entities/*/cl_init.lua`
- `lua/gamemodes/<gamemode_name>/entities/weapons/*.lua`
- `lua/gamemodes/<gamemode_name>/entities/weapons/*/cl_init.lua`

## Sunucu (Server)

![image.png](https://gmod.tr/api/uploads/wiki/c8e51ef9a540768ff6b3.png)

**Sunucu (server)** durumu, oyun sunucusunu temsil eden Lua durumudur. Bir Listen Server aracılığıyla oyun istemcisiyle aynı sistemde veya bir Dedicated Server olarak ayrı bir sistemde olabilir. Oyuncu girdilerini alır, statik bir tickrate'de fizik ve varlık simülasyonu gerçekleştirir, ardından sonucu bağlı olan tüm oyunculara ağ üzerinden gönderir.

**Sunucu (server)** durumu, **istemci (client)** durumuyla [net](https://gmod.tr/wiki/net) kütüphanesi (ve eskiden [umsg](https://gmod.tr/wiki/umsg) kütüphanesi) aracılığıyla etkileşim kurabilir ve iletişim kurabilir.

Lua kodu, `SERVER` global değişkeninin `true` olup olmadığını kontrol ederek **sunucu (server)** durumunda çalışıp çalışmadığını tespit edebilir.

**Oyun Motoru Lua Dosyaları - Sunucu (Server)**

- `lua/includes/init.lua`
- `lua/gamemodes/base/gamemode/init.lua` (bu, ayarlanan oyun modundan bağımsız olarak her zaman yüklenir)
- `lua/autorun/*.lua`
- `lua/autorun/server/*.lua`
- `lua/gamemodes/<gamemode_name>/gamemode/init.lua`
- `lua/gamemodes/base/entities/entities/*.lua`
- `lua/gamemodes/base/entities/entities/*/init.lua`
- `lua/gamemodes/base/entities/weapons/*.lua`
- `lua/gamemodes/base/entities/weapons/*/init.lua`
- `lua/entities/*.lua`
- `lua/entities/*/init.lua`
- `lua/weapons/*.lua`
- `lua/weapons/*/init.lua`
- `lua/gamemodes/<gamemode_name>/entities/entities/*.lua`
- `lua/gamemodes/<gamemode_name>/entities/entities/*/init.lua`
- `lua/gamemodes/<gamemode_name>/entities/weapons/*.lua`
- `lua/gamemodes/<gamemode_name>/entities/weapons/*/init.lua`

## Menü (Menu)

![image.png](https://gmod.tr/api/uploads/wiki/43a048d18d2f2d6a621b.png)

**Menü (menu)** durumu, oyun istemcisindeki izole edilmiş dahili bir Lua durumudur ve yalnızca ana menü için kullanılır. **İstemci (client)** durumunda bulunmayan ekstra fonksiyonlara sahiptir. Menü modifikasyonları ve eklentileri resmi olarak desteklenmez, bu nedenle **menü (menu)** durumu kodunu çalıştırmak, oyun motorunun Lua dosyalarından birinin üzerine yazmayı gerektirir. Bu nedenle, kasıtlı olarak bir şeyin üzerine yazmıyorsanız, kodunuzu **menüde** çalışacak şekilde ayarlama konusunda endişelenmenize gerek yoktur.

**Menü (menu)** durumu, **istemci (client)** veya **sunucu (server)** durumlarıyla etkileşime giremez; yani, **menü (menu)** durumu, **istemci** veya **sunucu** üzerinde bir geri çağrı (callback) oluşmasına neden olacak herhangi bir fonksiyonu çalıştıramaz. **İstemci (client)** ve **menü (menu)** durumları, her zaman ortak bir dosya sistemini paylaştıkları için [file](https://gmod.tr/wiki/file) kütüphanesi aracılığıyla dolaylı olarak iletişim kurabilirler.

Lua kodu, `MENU_DLL` global değişkeninin `true` olup olmadığını kontrol ederek **menü (menu)** durumunda çalışıp çalışmadığını tespit edebilir.

**Oyun Motoru Lua Dosyaları**

- `lua/includes/init_menu.lua`
- `lua/derma/init.lua`
- `lua/menu/menu.lua`
- `lua/vgui/*.lua`

## Diğer

Bunlar gerçek durumlar değildir; daha ziyade, temsil ettikleri fonksiyonun veya kancanın (hook), belirtilen durumlarından herhangi birinde yürütülebileceğini belirtirler:

- Paylaşılan (Shared) (İstemci ve Sunucu)

![image.png](https://gmod.tr/api/uploads/wiki/360b55b374f1102383ec.png)

- İstemci ve Menü

![image.png](https://gmod.tr/api/uploads/wiki/dcd3358f1f61899d4279.png)

- Paylaşılan (Shared) ve Menü (tüm durumlar - İstemci, Sunucu ve Menü)

![image.png](https://gmod.tr/api/uploads/wiki/8eb6ff8474a3cbf04a7f.png)

Bu, fonksiyonun/kancanın (hook) farklı durumlarda aynı değerleri döndüreceği veya aynı şeyi yapacağı anlamına gelmez. Örneğin, [Entity:GetPos](https://gmod.tr/wiki/Entity:GetPos) fonksiyonu hem Sunucuda hem de İstemcide çağrılabildiğinden "paylaşılan" (shared) olarak kabul edilir. [undo.GetTable](https://gmod.tr/wiki/undo.GetTable) da paylaşılan bir fonksiyondur, ancak açıklamasında belirtildiği gibi İstemci ve Sunucuda farklı çalışır. Öte yandan, [math](https://gmod.tr/wiki/math) ve [string](https://gmod.tr/wiki/string) gibi kütüphaneler 3 durumda da aynı işlevselliğe sahiptir.

## "Paylaşılan (Shared)" bir durum değildir

**Sunucu (Server)** ve **İstemci (Client)** durumlarının (halk arasında "Paylaşılan (Shared)" olarak bilinir) çalışma zamanında tamamen ayrı olduğunu ve bir arada var olamayacaklarını hatırlamak önemlidir. Yani, şunun gibi bir şey:

```lua
if SERVER and CLIENT then   -- her zaman false...
end
```

hiçbir anlam ifade etmez, çünkü `SERVER and CLIENT` koşulu, her iki durumun karşılıklı olarak birbirini dışlaması nedeniyle her zaman `false` döndürecektir. Herhangi bir anda ikisinden yalnızca biri doğru (true) olabilir.

Bu yüzden, "Paylaşılan durum (Shared state)" sizi yanıltmasın; bu aslında bir durum değildir. "Paylaşılan (Shared)", `CLIENT` ve `SERVER`'ın aynı anda `true` olacağı anlamına gelmez - bu sadece bir kod parçasının herhangi bir anda Sunucuda *veya* İstemcide çalıştırılabileceğini, ancak her ikisinde "aynı anda" çalıştırılamayacağını ifade etmenin kısa bir yoludur.

- [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/States
