drive.Register

  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 name
Sürüş modunun/yönteminin adı.
2 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.
3 string base = nil
Kodun miras alınacağı bir sürüş modunun/yönteminin adı.

Örnek

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

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" );

Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord