# Oyun Modu Oluşturma

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

## Oyun Modu İçeriği

Haritalar, modeller ve sesler gibi oyun modu içerikleri `gamemodes/content/` klasörüne yerleştirilmelidir. (ör. `gamemodes/content/models/..`).

## Oyun Modu Klasörü

Yeni bir oyun modu oluşturmak için gamemodes klasöründe yeni bir klasör oluşturmanız gerekir. Klasör, oyun modunuzun adını almalıdır. Bu klasörün içinde, klasörünüzle aynı ada sahip bir metin dosyası olmalıdır.

Örneğin, oyun modumun adı `SuperKillers` olsaydı, `garrysmod/gamemodes/` içinde `superkillers` adında bir klasör oluştururdum. Ardından bu klasörün içinde `superkillers.txt` adında bir metin dosyası oluştururdum.

Garry's Mod'un önceki sürümlerinde bu dosyanın her zaman `info.txt` olarak adlandırıldığını, ancak Sürüm 13'te içerikteki değişiklikleri yansıtacak şekilde değiştirildiğini unutmayın.

## Oyun Modu Metin Dosyası

Oluşturduğunuz `.txt` dosyası bir [keyvalues](https://developer.valvesoftware.com/wiki/KeyValues_class) dosyası olmalıdır.

```lua
"superkillers"
{
	"base"		    "base"
	"title"		    "Super Killers"
	"maps"		    "^sk_"
	"category"	    "other"
	"menusystem"	"1"
	"workshopid"	"15895"

	"settings"
	{
		1
		{
			"name"		"sk_maxfrags"
			"text"		"Maksimum Frag"
			"help"		"Harita değişmeden önceki maksimum frag sayısı"
			"type"		"Numeric"
			"default"	"20"
		}

		2
		{
			"name"		"sk_grenades"
			"text"		"El Bombalarına İzin Ver"
			"help"		"Etkinleştirilirse el bombaları etkinleştirilir"
			"type"		"CheckBox"
			"default"	"1"
		}
	}
}
```

| anahtar | açıklama |
|---|---|
| title | Oyun modunuzun 'güzel' başlığı. Boşluklar ve büyük harfler içerebilir. |
| maps | Oyun modunuz için harita filtresi. Bu, harita seçicide haritaları doğru şekilde kategorize etmek için kullanılır. Yalnızca haritalar oyun modunuza özgüyse ayarlanmalıdır. |
| category | Oyun modunuzun ait olduğu kategori. Ayrıntılar için aşağıya bakın. |
| menusystem | Bu oyun modunun ana menüden seçilebilir olması gerekiyorsa ekleyin ve 1'e ayarlayın. |
| workshopid | İsteğe bağlı. Oyun modunuz Atölye'de (Workshop) ise, bu dosyanın workshopid'si olmalıdır. (Yükleyene kadar bir workshopid'niz olmayacak - bu yüzden bunu bir güncellemede ayarlamanız gerekecektir) |
| settings | Ayrıntılar için aşağıya bakın. |

### Kategori

Oyun modunuz aşağıdaki seçeneklerden yalnızca bir kategoriye sahip olabilir:

- `rp` - Rol Yapma (Roleplay) - Oyun modunuz Rol Yapma unsurları içerir. Oyun modunuzun adında "RP" varsa, bu kategori tam size göre.
- `pvp` - Oyun modunuz **çoğunlukla** Oyuncuya Karşı Oyuncu (Player versus Player) savaşına dayanır; bu bir rekabet veya sadece bir nişancı (shooter) oyun modu olabilir.
- `pve` - Oyun modunuz daha çok hayatta kalma (survival) veya senaryo (campaign) oyun modları gibi Oyuncuya Karşı Çevre (Player versus Environment) savaşına dayanır. Bu, PvP'yi dışlamaz.
- `other` - Oyun modunuz, örneğin sandbox veya takılma (hangout) türü oyun modları gibi yukarıdaki kategorilerden hiçbirine uymuyor.

### Ayarlar

Ayarlar tablosu, oyun modunuz için sunucu yapılandırma [convar](https://gmod.tr/wiki/ConVar)'ları oluşturmanıza olanak tanır. Tamamen isteğe bağlıdır. Metin dosyanızın bir ayarlar bölümü olmak zorunda değildir.

GMod'un önceki sürümlerinde bu bölümün `gamemode/<gamemode>/content/settings/server_settings/` içinde kendi dosyası vardı. Yükleme sürelerini azaltmak için kök klasöre taşındı.

Bu ayarlar GMod'daki ana menüden yapılandırılabilir. Her girişin bir dizi alanı vardır.

| anahtar | açıklama |
|---|---|
| text | Bu convar'ı tanımlamak için oyun içinde gösterilecek metin. |
| help | Convar üzerinde gösterilecek yardım metni (konsolda). |
| type | Text, CheckBox veya Numeric'ten biri. Bunlar büyük/küçük harfe duyarlıdır! |
| default | Convar için varsayılan değer. |
| singleplayer | Bu convar'ın tek oyunculu modda görünüp görünmeyeceği, sadece bu anahtarın var olması onu etkinleştirir, değerinin ne olduğu önemli değildir. |
| replicate | Bu convar'ın istemcilere otomatik olarak kopyalanıp (ağ üzerinden gönderilip) gönderilmeyeceği. Varsayılan değer `1`'dir. |
| dontcreate | Bu convar'ın oluşturulmaması, ancak yine de kullanıcı arayüzünde listelenmesi gerekip gerekmediği. Motor (engine) convar'ları için kullanışlıdır. Varsayılan değer `0`'dır. |

## Menü Arka Plan Resimleri

Oyun modunuza arka planlar eklemek istiyorsanız bunları `gamemodes/<yourgamemode>/backgrounds/` klasörüne yerleştirin. Hepsi jpg formatında resimler olmalıdır.

## Menü Logo Resmi

Bir menü logo resmi sağlamak için `gamemodes/<yourgamemode>/logo.png` konumuna bir `.png` dosyası yerleştirin. Bu resim 128 piksel yüksekliğinde ve 1024 piksele kadar genişlikte olmalıdır. Varsayılan logo 288 x 128 boyutundadır.

## Menü İkonu

Bir menü ikonu sağlamak için `gamemodes/<yourgamemode>/icon24.png` konumuna bir `.png` dosyası yerleştirin. Bu resim ideal olarak 24x24 piksel olmalıdır ancak 32x32'ye kadar olabilir. Sunucu listesi ikonları 24x24 olarak gösterirken oyun modu seçimi 32x32 kullanır. İşte görüneceği yer:

![](https://gmod.tr/api/uploads/wiki/a221825fd1a6c290c40e.jpg)

## Init ve Shared Dosyaları

Oyun modunuzun düzgün çalışması için üç dosya gereklidir. Bunlar `<gamemode>/gamemode/` klasörünüze yerleştirilir.

Lütfen unutmayın, aşağıdaki örnekte `shared.lua` kullanıyor olsak da, bu tamamen isteğe bağlıdır. `init.lua` ve `cl_init.lua` ise **zorunludur**!

### init.lua

Bu dosya, sunucu oyun modunu yüklediğinde çağrılır. Aşağıdaki örnek, kaynak sistemine iki dosyayı istemciye göndermesini söyler ve ardından `shared.lua` dosyasını yükler.

```lua
AddCSLuaFile( "cl_init.lua" )
AddCSLuaFile( "shared.lua" )

include( "shared.lua" )
```

### shared.lua

Bu dosya bazı ortak değişkenleri ayarlar ve Initialize fonksiyonunu oluşturur. Bu, tanımlamanız GEREKEN tek fonksiyondur. Diğer hepsi temel oyun modundan çağrılacaktır.

```lua
GM.Name = "Super Killers"
GM.Author = "N/A"
GM.Email = "N/A"
GM.Website = "N/A"

function GM:Initialize()
	-- Bir şeyler yap
end
```

### cl_init.lua

Bu dosya, istemci oyun modunu yüklediğinde çağrılır. İstemciye özgü şeyleri buraya koyarsınız. shared.lua dosyasını yüklüyoruz. Unutmayın ki burada yalnızca sunucuda [AddCSLuaFile](https://gmod.tr/wiki/Global.AddCSLuaFile) ile kaydedilmiş dosyaları [include](https://gmod.tr/wiki/Global.include) edebilirsiniz.

```lua
include( "shared.lua" )
```

### GAMEMODE.FolderName

Bu, çalıştırılan oyun modunun mevcut klasör adını döndürecek bir değişkendir.

Örneğin, `Trouble In Terrorist Town` oyun modunu oynuyorsanız bu değişken `terrortown`'a eşit olacaktır.

## Oyun Modlarını Türetme

Oyun modunuzu 'base' dışında bir şeyden türetiyorsanız, motora bunu bildirmek için bu fonksiyonu kullanın.

Fonksiyonu hem istemcide hem de sunucuda çağırmalısınız ve `shared.lua` dosyamız hem `cl_init.lua` hem de `init.lua`'dan dahil edildiği için bunu bir kez `shared.lua` içinde yapabiliriz.

Aşağıdaki örnekte, oyun modumuzu sandbox'tan türettiğimizi varsayalım, bu yüzden bunu `shared.lua` dosyamıza ekliyoruz; tüm fonksiyon tanımlarının üzerinde bir yer iyi bir seçimdir:

```lua
DeriveGamemode( "sandbox" )
```

## Oyun Modlarını Modlama

Bir oyun modunu düzenlemek istiyor ancak sunucu tarayıcısında farklı bir kategori altında görünmesini istemiyorsanız ve düzenlenmiş sürümün orijinalinin üzerine yazmasını istemiyorsanız, örneğin bir oyun güncellemesinin düzenlemelerinizi geri alabileceği `Trouble In Terrorist Town`'u düzenleme gibi durumlarda, oyun modunu her zamanki gibi kopyalayabilir ve oyun modunun klasör adına (örneğin `terrortown_modded`) ve oyun modu klasöründeki `.txt` dosyasına `_modded` ekini ekleyebilirsiniz.

Sunucunuzda bunu hala `terrortown_modded` olarak yüklersiniz, ancak dünyanın geri kalanına `terrortown` olarak görünür.

## Sık Karşılaşılan Hatalar

### Oyun modu yükleme hatası: info.Valid

Oyun Modu Metin Dosyanız geçersiz veya bulunamadı.

### Oyun modu yükleme hatası: !IsValidGamemode

Oyun, oyun modunuzun `cl_init.lua` veya `init.lua` dosyasını bulamadı. Bu dosyaların doğru yerde olduğundan emin olun:

- `gamemodes/oyunmodunuzunadı/gamemode/init.lua`
- `gamemodes/oyunmodunuzunadı/gamemode/cl_init.lua`

### Ölümde oyunun çökmesi/donması

Oyuncuya bir oyuncu modeli (playermodel) atamadınız.

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