# GM:StartCommand

- **Ortam:** İstemci, Sunucu
- **İngilizce aslı:** https://wiki.facepunch.com/gmod/GM:StartCommand
- **Çeviri tarihi:** 2025-09-08

```lua
GM:StartCommand( Player ply, CUserCmd ucmd )
```

> **NOT:** Bu hook [öngörülebilirdir](https://gmod.tr/wiki/Prediction). Bu, tek oyunculu modda, İstemci (Client) alanında **çağrılmayacağı** anlamına gelir.

## Açıklama

Oyuncunun girdilerini sunucu tarafından işlenmeden önce değiştirmenize olanak tanır. Bu fonksiyon aynı zamanda botlar için de çağrılır, bu da onu botları kontrol etmek için en iyi çözüm haline getirir.

Bu temel olarak [GM:CreateMove](https://gmod.tr/wiki/GM:CreateMove)'in paylaşılan (shared) bir versiyonudur.

> **NOT:** Bu hook öngörülebilirdir, ancak alışılagelmiş yollarla değil; istemcide bir [CUserCmd](https://gmod.tr/wiki/CUserCmd) oluşturulduğunda ve sunucuda alındığında çağrılır. Bu nedenle bu hook'un tek oyunculu modda bile istemci tarafında çağrılması gerekir.

## Argümanlar

1. [Player](https://gmod.tr/wiki/Player) **ply**: Oyuncu
2. [CUserCmd](https://gmod.tr/wiki/CUserCmd) **ucmd**: Kullanıcı komutu (usercommand)

### Örnek

Bu hook'u kullanarak bir botu nasıl kontrol edeceğinize dair bir örnek.

Örnek, tüm botların levye (crowbar) ile ulaşabildikleri tüm oyuncuları öldürmeye gitmesine neden olur.

```lua
hook.Add( "StartCommand", "StartCommandExample", function( ply, cmd )

	-- Eğer oyuncu bir bot değilse veya bot ölmüşse, hiçbir şey yapma
	-- TODO: Belki bot öldüyse burada manuel olarak yeniden doğdurulabilir
	if ( !ply:IsBot() or !ply:Alive() ) then return end

	-- Tüm varsayılan hareketleri veya eylemleri temizle
	cmd:ClearMovement()
	cmd:ClearButtons()

	-- Botun düşmanı yok, bir tane bulmaya çalış
	if ( !IsValid( ply.CustomEnemy ) ) then
		-- Tüm oyuncuları tara ve ölü olmayan birini seç
		for id, pl in ipairs( player.GetAll() ) do
			if ( !pl:Alive() or pl == ply ) then continue end -- Ölü oyuncuları veya kendini düşman olarak seçme
			ply.CustomEnemy = pl
		end
		-- TODO: Belki botların hedeflerine ulaşmak için duvarlara yürümemesi için bir Görüş Hattı (Line of Sight) kontrolü eklenebilir
		-- Veya botların düşmanlarına giden yolu bulabilmesi için yol bulma (path finding) eklenebilir
	end

	-- Bir düşman bulamadık, hiçbir şey yapma
	if ( !IsValid( ply.CustomEnemy ) ) then return end

	-- Botun normal yürüme hızında ileri hareket et
	cmd:SetForwardMove( ply:GetWalkSpeed() )

	-- Düşmanımıza nişan al
	if ( ply.CustomEnemy:IsPlayer() ) then
		cmd:SetViewAngles( ( ply.CustomEnemy:GetShootPos() - ply:GetShootPos() ):GetNormalized():Angle() )
		ply:SetEyeAngles( ( ply.CustomEnemy:GetShootPos() - ply:GetShootPos() ):GetNormalized():Angle() )
	else
		cmd:SetViewAngles( ( ply.CustomEnemy:GetPos() - ply:GetShootPos() ):GetNormalized():Angle() )
		ply:SetEyeAngles( ( ply.CustomEnemy:GetPos() - ply:GetShootPos() ):GetNormalized():Angle() )
	end

	-- Eğer botun henüz bir levyeye sahip değilse, ona bir levye ver
	if ( SERVER and !ply:HasWeapon( "weapon_crowbar" ) ) then ply:Give( "weapon_crowbar" ) end

	-- Levyeyi seç
	cmd:SelectWeapon( ply:GetWeapon( "weapon_crowbar" ) )

	-- Botun saldırmasını sağlamak için Fare 1'i basılı tut
	cmd:SetButtons( IN_ATTACK )

	-- Düşman öldü, yeni bir tane edinebilmek için düşmanımızı temizle
	if ( !ply.CustomEnemy:Alive() ) then
		ply.CustomEnemy = nil
	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/GM:StartCommand
