Oto-Tamamlama Eğitimi

# Tanıtım

Oto-tamamlama birkaç DarkRP komutunu gösterecektir.

Oto-tamamlama konsol komutu kelimeleri tahmin ederek konsol kullanımını kolaylaştıran bir özelliktir. Genellikle Garry's Mod, size varolan konsol komutlarından bazı oto-tamamlama seçeneklerini gösterecektir fakat (bir şekilde) bu seçenekleri kolayca genişletebilirsiniz.

Bu eğitim size hem istemci-taraflı hem de (daha ileri düzey olan) sunucu-taraflı konsol komutlarını oto-tamamlama ile yaratmanıza yardımcı olacaktır.

# İstemci-taraflı Konsol Komutları

## Başlayalım

"rp\_steamid" adında oyuncunun takma adını girip SteamID'sini bulduğumuz, istemci-taraflı bir konsol komutu oluşturacağız. Bu oldukça basit bir örnek ama oto-tamamlama yardımıyla bunu güzel ve hızlı biçimde tamamlayabiliriz.

```
local function GetSteamID( ply, cmd, args )
	local nick = args[1]
	nick = string.lower( nick )

	for k, v in pairs( player.GetAll() ) do
		if string.find( string.lower( v:Nick() ), nick ) then
			MsgN( "SteamID: " .. v:SteamID() )
			return
		end
	end

	MsgN( "Couldn't find player." )
end
concommand.Add( "rp_steamid", GetSteamID )

```

Basit bir yakalama scripti bu şekildedir. Şimdi şunu yazabiliriz:

```
rp_steamid Donkie

```

Ve karşımıza da şu veri çıkacaktır:

```
> SteamID: STEAM_0:0:16436609

```

Fakat resimde de gördüğünüz üzere, Don adlı kişinin sunucuda kim olduğuna dair bir ipucumuz yoktur. Sunucuda benzer isimli ve hatta değişik ve kopyala yapıştır yöntemi ile de kopyalanamayan karakterler içeren isimlere sahip oyuncular da bulunabilir, bu da doğru SteamID'yi bulmamızda büyük bir problem yaratabilir.

Oto-tamamlamayı etkin hale getirmek için kullanıcıya göstermemiz gerekenleri belirten bize ait fonksiyonu yaratmamız gereklidir. Şu şekilde yapılır:

```
local function AutoComplete( cmd, stringargs )
	print( cmd, stringargs )
end
concommand.Add( "rp_steamid", GetSteamID, AutoComplete )

```

Şimdi, kullanıcı konsol girdisi olarak konsola her karakter yazıp sildiğinde, Oto-tamamlama fonksiyonu parametrelerle birlikte çağrılacaktır.

* cmd: Her zaman komut olacaktır, şu anda bizim için kullanışlı değildir. ("rp\_steamid"yi verir).
* stringargs: Geri kalan girdiyi verir. "rp\_steamid Don" yazmak,stringargs'ı " Don" olarak değiştirir.

Bu fonksiyonda tablo adında birşey döndürmemiz gerekmektedir. Bu tablo, oto-tamamlama kutusu içinde kullanıcıya göstermek istediğimiz değer dizilerini barındırmalıdır.

```
local function AutoComplete( cmd, stringargs )
	print( cmd, stringargs )

	local tbl = {}

	table.insert( tbl, "Test 1" )
	table.insert( tbl, "Test 2" )
	table.insert( tbl, "Test 3" )
	return tbl
end

```

Bize aşağıdaki resimdeki

sonucu verir ve bu sonuç bize tam olarak ana fikri sunmaktadır. Şimdi tüm yapmamız gereken şey "Don" değeriyle uyuşan tüm oyuncuları birkaç test değeri yerine döndürmektir.

```
local function AutoComplete( cmd, stringargs )
	print( cmd, stringargs )

	stringargs = string.Trim( stringargs ) -- Oncesi ve sonrasindki boslukları siliniz.
	stringargs = string.lower( stringargs )

	local tbl = {}

	for k, v in pairs( player.GetAll() ) do
		local nick = v:Nick()
		if string.find( string.lower( nick ), stringargs ) then
			nick = "\"" .. nick .. "\"" -- Oyuncularin isimlerinde bosluklar bulunuyorsa tinak isareti kullaniriz.
			nick = "rp_steamid " .. nick -- Duzgun calismasi icin onune cmd koymamiz gerekir.

			table.insert(( tbl, nick )
		end
	end

	return tbl
end

```

Ve şimdi de dönen değerlerden birine tıklayarak o kişinin SteamID'sini elde edebiliriz.

# Sunucu-taraflı Konsol Komutları

Sunucu evreninde oluşturulan konsol komutları sunucuya bağlanan istemciler için görünmeyecektir ve bu tür komutların istemcilerde oto-tamamlanması için zaten bir gerek yoktur.

Yukarıdaki yöntemle yine de yapabilirsiniz ancak sadece birisi oyun istemcisinden sunucu (bir dinleyici sunucu) sunması gibi özel durumda kullanılabilir olacaktır. Oto-tamamlama sadece sunucuyu sunanlar için komut onlara göründüğnde geçerli olacaktır. Aynısı tek oyunculu oyunlar için de geçerlidir.