# CLuaLocomotion:Approach

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

```lua
CLuaLocomotion:Approach( Vector goal, number goalWeight )
```

## Açıklama

[NextBot](https://gmod.tr/wiki/NextBot)'u, belirtilen hedef konuma kademeli olarak yaklaştırır.

Bu fonksiyon her çağrıldığında, [NextBot](https://gmod.tr/wiki/NextBot), daha önce [CLuaLocomotion:SetDesiredSpeed](https://gmod.tr/wiki/CLuaLocomotion:SetDesiredSpeed) ile ayarlanan miktar kadar, argüman olarak iletilen hedef pozisyona doğru hareket eder.

Akıcı bir hareket elde etmek için bu fonksiyonun sık sık çağrılması gerekir.
Bu genellikle, fonksiyonun [ENTITY:Think](https://gmod.tr/wiki/ENTITY:Think) kancası (hook) içinde çağrılmasıyla gerçekleştirilir.

## Argümanlar

1. [Vector](https://gmod.tr/wiki/Vector) **goal**: Ulaşmak istediğimiz vektör.
2. [number](https://gmod.tr/wiki/number) **goalWeight**: Varlığın fiziksel hareketleri arasında bu fonksiyonun birden çok kez çağrılması durumunda hareketin ne kadar etkili olması gerektiğini belirtir. Emin değilseniz bunu `1` olarak ayarlayın.

### Örnek

Bir [NextBot](https://gmod.tr/wiki/NextBot), `Oyuncu 1`'i (Player 1) takip eder ve `Oyuncu 2`'ye (Player 2) ateş eder (eğer mümkünse). [NextBot](https://gmod.tr/wiki/NextBot) bir [Navigasyon Ağı](https://gmod.tr/wiki/navmesh) (Navigation Mesh) gerektirmez.

`Approach` fonksiyonunun [Think](https://gmod.tr/wiki/ENTITY:Think) kancasında (hook) iken, botun animasyonunu ve yönünü kontrol eden fonksiyonların [RunBehavior](https://gmod.tr/wiki/NEXTBOT:RunBehaviour) kancasında (hook) olduğuna dikkat edin.

```lua
AddCSLuaFile()

ENT.Type = "nextbot"
ENT.Base = "base_nextbot"

if CLIENT then
	return
end

util.PrecacheModel( "models/police.mdl" )
util.PrecacheModel( "models/combine_soldier.mdl" )

function ENT:Initialize()
	self.BotTeam = math.random( 1, 2 )
	self:SetCollisionGroup( COLLISION_GROUP_WORLD )
	self:SetHealth( 100 )
	self:AddFlags( FL_OBJECT )
	self:SetNWInt( "BotTeam", self.BotTeam )

	if self.BotTeam == 1 then
		self:SetModel( "models/police.mdl" )
	else
		self:SetModel( "models/combine_soldier.mdl" )
	end

	self.WeaponMount = self:LookupAttachment( "anim_attachment_RH" ) -- Botun silahı, botun eline monte edilecek.
	self.WeaponPosition = self:GetAttachment( self.WeaponMount ) -- Ebeveyn atamasından önce; botun silahı, botun elinin yönüne ve pozisyonuna ayarlanacak.

	self.Weapon = ents.Create( "prop_dynamic" ) -- Bot, kendi adına mermi ateşleyecek silah görünümlü bir varlık tutacak.
	self.Weapon:SetPos( self.WeaponPosition.Pos )
	self.Weapon:SetAngles( self.WeaponPosition.Ang )
	self.Weapon:SetModel( "models/weapons/w_smg1.mdl" )
	self.Weapon:Spawn()
	self.Weapon:SetParent( self, self.WeaponMount )

	self:StartActivity( ACT_IDLE_SMG1 )

	self.head = self:LookupBone( "ValveBiped.Bip01_Head1" ) -- Botun kafası, görüşü simüle etmek için kullanılacak.
	self.Active = true -- Bot öldüğünde döngüleri kırmak için kullanılır.

	self.loco:SetDesiredSpeed( 100 )
end

function ENT:Think()
	self.targetLocation = Entity( 1 ) -- Geçici; farklı bir kod bloğu botun hedef konumunu belirleyecek.
	self.targetEnemy = Entity( 2 ) -- Geçici; gelecekte farklı bir kod bloğu botun düşmanını belirleyecek.

	if self.targetLocation then -- Eğer botun bir hedef konumu (yani bir müttefik) varsa, ona doğru git.
		self.loco:Approach( self.targetLocation:GetPos(), 1 )
	end

	if IsValid( self.targetEnemy ) then -- Eğer bot bir müttefiki takip ederken bir düşmana ateş ediyorsa, poz parametreleri uygun şekilde canlandırılması için güncellenmelidir.
		self.faceDir = self:GetForward() -- Bot şu anda nereye bakıyor?
		self.moveDir = self:WorldToLocal( self.targetEnemy:GetBonePosition( self.head ) ) -- Bot şu anda nereye yönelmiş durumda? (Bot, müttefiki takip ederken düşmana ateş ettiği için yan yan yürüyor olabilir.)
		self.yaw = self.moveDir:AngleEx( self.faceDir ) -- Bu yönler arasındaki fark nedir?

		self:SetPoseParameter( "move_yaw", self.yaw.yaw )
		self:SetPoseParameter( "aim_pitch", self.yaw.pitch )
		self:SetPoseParameter( "aim_yaw", self.yaw.yaw )

		self.Weapon:FireBullets( {
			Attacker = self,
			Callback = DisplayTurretDamageInfo,
			Damage = 5,
			Force = 1,
			Distance = 2400,
			HullSize = 1,
			Num = 2,
			Tracer = 4,
			AmmoType = "smg1",
			TracerName = "MuzzleEffect",
			Dir = self.Weapon:GetForward(),
			Spread = vector_origin,
			Src = self.Weapon:GetPos(),
			IgnoreEntity = self
		}, true )
	else -- Eğer bot sadece bir müttefiki takip ediyorsa, müttefike dönecektir. Poz parametreleri, botun animasyonunun baktığı yer ile hareket ettiği yer arasında her zaman tutarlı olmasını sağlamak için kullanılacaktır.
		self.faceDir = self:GetForward() -- Bot şu anda nereye bakıyor?
		self.moveDir = self:WorldToLocal( self.targetLocation:GetPos() ) -- Bot şu anda nereye yönelmiş durumda? (Botun müttefikine tam olarak dönmesi birkaç kare sürebilir.)
		self.yaw = self.moveDir:AngleEx( self.faceDir ) -- Bu yönler arasındaki fark nedir?

		self:SetPoseParameter( "move_yaw", self.yaw.yaw )
	end
end

function ENT:RunBehaviour()
	repeat
		-- Şimdi nextbot'un animasyonu güncelleniyor...
		if self.targetLocation && self:GetActivity() != ACT_RUN_RIFLE then -- Eğer bot bir şeyi kovalıyorsa (bir hedefi varsa) ve bot zaten uygun şekilde canlandırılmamışsa...
			self:StartActivity( ACT_RUN_RIFLE ) -- ...animasyonunu ayarla.
		elseif !self.targetLocation && self:GetActivity() != ACT_IDLE_SMG1 then -- Görünüşe göre, bot hiçbir şeyi kovalamıyor. Eğer animasyonu zaten ayarlanmamışsa...
			self:StartActivity( ACT_IDLE_SMG1 ) -- ...şimdi yap.
		end

		-- Şimdi nextbot'un yönü güncelleniyor...
		if IsValid( self.targetEnemy ) then
			self.loco:FaceTowards( self.targetEnemy:GetPos() ) -- Düşmana dön.
		else
			self.loco:FaceTowards( self.targetLocation:GetPos() ) -- Müttefike dön.
		end

		coroutine.wait( 0.1 )
	until ( !self.Active )
end

function ENT:OnKilled()
	self:StartActivity( ACT_DIERAGDOLL )

	local drop = ents.Create( "weapon_smg1" )
	drop:SetPos( self.Weapon:GetPos() )
	drop:Spawn()

	self.Active = false -- NEXTBOT:RunBehaviour() şimdi sonlanacak.
	self:AddFlags( FL_KILLME )

	self.Weapon:Remove()
	self:Remove()
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/CLuaLocomotion:Approach
