CLuaLocomotion:Approach

  CLuaLocomotion:Approach( Vector goal, number goalWeight )

Açıklama

NextBot'u, belirtilen hedef konuma kademeli olarak yaklaştırır.

Bu fonksiyon her çağrıldığında, NextBot, daha önce 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 kancası (hook) içinde çağrılmasıyla gerçekleştirilir.

Argümanlar

1 Vector goal
Ulaşmak istediğimiz vektör.
2 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, Oyuncu 1'i (Player 1) takip eder ve Oyuncu 2'ye (Player 2) ateş eder (eğer mümkünse). NextBot bir Navigasyon Ağı (Navigation Mesh) gerektirmez.

Approach fonksiyonunun Think kancasında (hook) iken, botun animasyonunu ve yönünü kontrol eden fonksiyonların RunBehavior kancasında (hook) olduğuna dikkat edin.

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

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