Tahmin Örnekleri
{{Delete}} Prediction sayfasını zaten okuduğunuzu ve ne olduğu hakkında genel bir fikriniz olduğunu varsayacağım. Bu tahmin örneklerinin çoğu, bir silah/varlık kodlamanın temellerini bildiğinizi ve sürücü sisteminin (drive system) ne olduğunu bildiğinizi varsayar.
Bu sayfa, o devasa metin yığınını kullanmak ve pratikte neler olup bittiğini açıklamak için hazırlanmıştır.
Daha önce açıklandığı gibi, tahminin (prediction) ana prensibi, sunucudan önce ne olacağına dair bir simülasyona sahip olmaktır, yani her şeyi paylaşımlı (shared) olarak çağırırsınız (birkaç istisna dışında).
Eğer yeterince açık değilse, tahmin (prediction) kolayca bozulabilir ve varlıklar (ve silahlar) söz konusu olduğunda, bir oyuncu tarafından herhangi bir anda yalnızca bir tanesi tahmin edilebilir.
Normal değişkenleri kullanmak sorun değildir, ancak tahmin (prediction) durumunda tahmin hataları (prediction errors) nedeniyle yeterli olmazlar.
Bu durumda, Ağ Değişkenlerini (Network Vars) (dahili olarak dt vars olarak adlandırılır) kullanmanız gerekir. Tüm motor varlıkları (engine entities) bunları ağ iletişimi (networking) ve tahmin (prediction) için kullanır.
Aslında, daha önce betikli (scripted) bir silah yaptıysanız, muhtemelen onları zaten kullanıyorsunuzdur. Weapon:SetNextPrimaryFire, Player:RemoveAmmo gibi fonksiyonlar, motorda tanımlanmış olan tahmin edilen DT değişkenlerine (predicted DT vars) erişir.
Silah Tahmini (Weapon Prediction)
Bu oldukça basittir. Başlamak için, yukarıdaki sayfada açıklandığı gibi ihtiyacınız olan Ağ Değişkenlerini (Network Vars) tanımlayacaksınız.
Hareket Tahmini (Movement Prediction)
Sürücü sistemi (drive system) ne kadar iyi olursa olsun, kodlanma şekli nedeniyle aynı anda yalnızca bir hareket geçersiz kılmasına (movement override) izin verir.
Hareket kancalarını (movement hooks) doğrudan kullanmak, davranışı değiştirmemize ve diğer eklentilerle bir şekilde uyumlu hale getirmemize olanak tanır.
Bunu, tahmin edilen bir varlıkla (örneğin bir silah veya başka bir örnek için aşağıya bakın) birleştirmek en iyisidir, çünkü örneğin bir jetpack'te yakıtı yönetmek isteyebiliriz.
Oyuncu üzerine değişken kaydetmek (yakıt gibi varlığa özgü şeyler, varlık referansları sorun değildir) yalnızca son çare olarak kullanılmalıdır, özellikle de bundan kaçınılabiliyorsa.
Varlık Tahmini (Entity Prediction)
Not: Bu konu biraz ileri düzeydir.
Bu tür bir tahmin, silahlar için dahili olarak zaten kullanılmaktadır, ancak burada daha fazla özgürlüğe sahip olabiliriz; örneğin, herhangi bir zamanda kullanılabilecek silah benzeri bir varlık oluşturabilme gibi.
Tahmini yapma şeklimiz, mantığı varlığın Think'i aracılığıyla değil, Oyuncunun Tick kancasında (Player's Tick hook) çalıştırmak olacaktır.
Bir varlığı gerçekten tahmin edilebilir (predictable) olarak işaretlemek ve bir tahmin hatası (prediction error) durumunda DT değişkenlerinin geri yüklenmesine izin vermek için, üzerinde tahmini etkinleştirmek istediğimiz istemcide Entity:SetPredictable kullanmamız gerekir.
Şu anda bir varlığın zaten tahmin edilebilir olup olmadığını bilmek için bir alıcı (getter) fonksiyonu yoktur ve fonksiyon her çağrıldığında DT değişkenlerinin sıfırlanmasını önlemek için buna ihtiyacımız var, bu yüzden aşağıdaki kaba çözümü mazur görün.
Bu, türetebileceğiniz veya doğrudan kullanabileceğiniz, tahmin edilen bir varlık tabanı (predicted entity base) için bir örnektir.
Bu aynı zamanda hareket kancalarıyla (movement hooks) birleştirilebilir, bu da bize tahmin edilen jetpack'lere veya diğer hareket değiştirici varlıklara sahip olma olanağı tanır.
Sürücü Sistemi Tahmini (Drive System Prediction)
Bu, Varlık Tahmini'nin (Entity Prediction) bir kopyası olarak kabul edilebilir. Aradaki fark, sürücü sisteminin (drive system) bir varlığı yalnızca bir araçmış gibi kontrol etmek için iyi olmasıdır; HENÜZ oyuncu ile birlikte hiçbir şey çalıştırılamaz.
Sürücü sistemi (drive) ile motordan hiçbir oyuncu hareket mantığı çalıştırılmaz ve bu nedenle çarpışmaları kendi başımıza halletmemiz gerekir.
Ayrıca varlık üzerinde tahmini etkinleştirme gibi işlemler zaten dahili olarak halledilmektedir.
TODO: Bu arada Entity_Driving sayfasını ziyaret edin.
Tahmin sırasında Ses Çıkarma
Tahmin edilen varlık örneğini kullandıysanız, seslerin sanki tahmin (prediction) onları ayıklamamış gibi hala iki kez çıktığını fark etmiş olabilirsiniz.
Bu aslında, bir noktada düzeltilecek olan Entity:EmitSound fonksiyonundaki bir sorundur.
Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord