GM:StartCommand

  GM:StartCommand( Player ply, CUserCmd ucmd )
Bu hook öngörülebilirdir. 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'in paylaşılan (shared) bir versiyonudur.

Bu hook öngörülebilirdir, ancak alışılagelmiş yollarla değil; istemcide bir 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 ply
Oyuncu
2 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.

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 )

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