# drive.Register

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

```lua
drive.Register( string name, table data, string base = nil )
```

## Açıklama

Yeni bir varlık sürüş modu/yöntemi kaydeder.

## Argümanlar

1. [string](https://gmod.tr/wiki/string) **name**: Sürüş modunun/yönteminin adı.
2. [table](https://gmod.tr/wiki/table) **data**: Sürüş modunu/yöntemini oluşturmak için gereken veri. Bu, sürüş tarafından kullanılan fonksiyonları içerir. Bkz. [DRIVE_Hooks](https://gmod.tr/wiki/DRIVE_Hooks).
3. [string](https://gmod.tr/wiki/string) **base** = nil: Kodun miras alınacağı bir sürüş modunun/yönteminin adı.

### Örnek

Bir noclip sürüş türü ekler.

```lua
drive.Register( "drive_noclip",
{
	--
	-- Her hareketten önce çağrılır. Varlığınızı ve cmd'yi kullanarak
	-- mv'yi hareketiniz için ihtiyacınız olan bilgilerle doldurmalısınız.
	--
	StartMove =  function( self, mv, cmd )

		--
		-- Hareket pozisyonunu ve hızını varlığımızdan güncelle
		--
		mv:SetOrigin( self.Entity:GetNetworkOrigin() )
		mv:SetVelocity( self.Entity:GetAbsVelocity() )

	end,

	--
	-- Gerçek hareketi çalıştırır. İstemcide tahmin
	-- hataları olduğunda bu birden çok kez çalıştırılabilir.
	-- Sadece mv'yi değiştirmeye çalışmalısınız.
	--
	Move = function( self, mv )

		--
		-- Bir hız ayarla, shift tuşuna basılı tutulursa daha hızlı git
		--
		local speed = 0.0005 * FrameTime()
		if ( mv:KeyDown( IN_SPEED ) ) then speed = 0.005 * FrameTime() end

		--
		-- Hareket verisinden (movedata) bilgi al
		--
		local ang = mv:GetMoveAngles()
		local pos = mv:GetOrigin()
		local vel = mv:GetVelocity()

		--
		-- Hızları ekle. Bu karmaşık görünebilir. İlk satırda
		-- temel olarak ileri vektörünü al, sonra onu
		-- ileri hızımızla çarp (W'ye basıyorsak > 0, S'ye basıyorsak < 0
		-- ve ikisine de basmıyorsak 0 olacak) - ve bunu hıza ekle diyoruz.
		-- Bunu sağ ve yukarı için de yapıyoruz, bu da bize serbest hareketimizi sağlıyor.
		--
		vel = vel + ang:Forward() * mv:GetForwardSpeed() * speed
		vel = vel + ang:Right() * mv:GetSideSpeed() * speed
		vel = vel + ang:Up() * mv:GetUpSpeed() * speed

		--
		-- Hızımızın kontrolden çıkmasını istemediğimiz için biraz
		-- hava direnci uyguluyoruz. Hiçbir tuşa basılmıyorsa daha fazla
		-- direnç uygulayarak daha fazla yavaşlamasını sağlıyoruz.
		--
		if ( math.abs(mv:GetForwardSpeed()) + math.abs(mv:GetSideSpeed()) + math.abs(mv:GetUpSpeed()) < 0.1 ) then
			vel = vel * 0.90
		else
			vel = vel * 0.99
		end

		--
		-- Hızı pozisyona ekle (hareket budur)
		--
		pos = pos + vel

		--
		-- Yeni hesaplanan değerleri varlığın kendisine ayarlamıyoruz,
		-- bunun yerine onları hareket verisinde (movedata) saklıyoruz. Bunlar FinishMove'da uygulanır.
		--
		mv:SetVelocity( vel )
		mv:SetOrigin( pos )

	end,

	--
	-- Hareket tamamlandı. Yeni pozisyonları ayarlamak için mv'yi kullanın,
	-- varlıklarınız/oyuncularınız üzerinde.
	--
	FinishMove =  function( self, mv )

		--
		-- Varlığımızı güncelle!
		--
		self.Entity:SetNetworkOrigin( mv:GetOrigin() )
		self.Entity:SetAbsVelocity( mv:GetVelocity() )
		self.Entity:SetAngles( mv:GetMoveAngles() )

		--
		-- Eğer bir fizik nesnemiz varsa onu da güncelle. Ama sadece sunucuda.
		--
		if ( SERVER && IsValid( self.Entity:GetPhysicsObject() ) ) then

			self.Entity:GetPhysicsObject():EnableMotion( true )
			self.Entity:GetPhysicsObject():SetPos( mv:GetOrigin() );
			self.Entity:GetPhysicsObject():Wake()
			self.Entity:GetPhysicsObject():EnableMotion( false )

		end

	end,

	--
	-- Varlığı sürerken görünümü hesaplar
	--
	CalcView =  function( self, view )

		--
		-- Bize 3. şahıs görünümü vermek için drive_base.lua'daki yardımcı metodu kullan
		--
		local idealdist = math.max( 10, self.Entity:BoundingRadius() ) * 4

		self:CalcView_ThirdPerson( view, idealdist, 2, { self.Entity } )

	end,

}, "drive_base" );
```

- [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/drive.Register
