Otomatik Yenileme/Sıcak Yükleme
Otomatik Yenileme Nedir?
Garry's Mod 13'ten beri tüm Lua betikleri diskte değiştirildiğinde "canlı" olarak yeniden yüklenir. Bu, kodlama yapıyorsanız kullanışlıdır çünkü değişiklikleriniz kaydettiğiniz anda anında görünür.
Kısıtlamalar
Otomatik yenileme her zaman çalışmaz. Bu kısıtlamaları bilmemek kafa karışıklığına yol açabilir. Bilinen mevcut sınırlamalar şunlardır:
- Yalnızca oyun modu tarafından otomatik olarak dahil edilen, autorun, effects, entities ve weapons klasörlerindeki dosyaları destekler.
- Özellikle, SWEP/SENT temel dosyalarını düzenlerken, bu temeli kullanan SWEP'ler/SENT'ler kendileri yenilenene kadar yenilenmez.
- OSX'te çalışmaz
- Sublime Text'in "Atomic Save" özelliği etkinse çalışmaz
- Visual Studio ile çalışmaz, ancak VS Code ile sorunsuz çalışır
- Dinamik olarak dahil edilen / AddCSLuaFile ile eklenen içeriklerle çalışmaz - ya tümü için ya da belirli durumlar için. (Ancak, ana cl_init.lua veya init.lua dosyalarını düzenlemek bunu tetikleyecektir ya da bu dosyalardan dahil edilen herhangi bir dosya; fakat dinamik olarak eklenen hiçbir şey bu olayı tetiklemez - mevcut test senaryosu, sh_init.lua içinde çağrılan bir fonksiyon içindeki include kuralları ve cl_init / init'in sh_init'i ve AddCSLuaFile'ı dahil etmesiyle ilgilidir)
- Oyun, Steam'deki Proton uyumluluk katmanı üzerinden çalıştırılıyorsa çalışmaz.
- Linux'ta (Ubuntu 20.04.1 LTS üzerinde test edilmiştir), oyun dosya değişikliklerini algılamak için inotify izleyicilerini kullanır. Bu izleyiciler, izlenen klasör sayısına (kullanıcı başına, örn. pterodactyl) bağlı olarak sınırlara ulaşabilir ve bu da belirli dosyaların otomatik olarak yenilenmemesine neden olabilir. Bir çözüm burada bulunabilir. Varsayılan değer, dağıtıma bağlı olarak 8192 olabilir ve birden fazla sunucu barındıran ortamlarda düzgün çalışması için bu değerin artırılması gerekebilir!
İşlenmemiş bir lua yenilemesi sorun teşkil etmez ve çalıştığı anlamına gelir.
Kodun Bozulması
Kod yenilendiğinde, dosyanın tamamının yeniden çalıştırıldığını unutmayın. Bu, global verilerin, özellikle de tabloların üzerine yazılması durumunda sorunlara neden olabilir. Bu tür bir durumun olmasını önlemek için, dinamik global değişkenleri aşağıdaki gibi kendileri veya bir değişmez (literal) olarak bildirin:
Ayrıca, eski dosyanız hook.Add'e referans veriyorsa ve yeni dosyanız bu referansı kaldırmışsa, hook.Remove kullanmadığınız sürece orijinal hook yerinde kalacaktır. Aynısı, net.Receive, usermessage.Hook ve concommand.Add dahil olmak üzere herhangi bir geri arama (callback) fonksiyonu için de geçerlidir.
Otomatik Yenilemeyi Devre Dışı Bırakma
Belirli Lua dosyaları düzenlendiğinde otomatik yenileme sunucuda gecikmeye (lag) neden olabilir. Bu durum, yenileme işleminin basamaklı (cascade) bir şekilde yayılmasıyla meydana gelir. Bu, canlı bir sunucuda büyük bir projenin betiklerini düzenlerken istenmeyen bir davranış olabilir.
Otomatik yenilemeyi devre dışı bırakmak için, başlatma komut satırına
ekleyin ve sunucunuzu yeniden başlatın.
Manuel Yenileme
Daha önce dahil edilmişlerse, aşağıdaki komutu kullanarak dosyaları manuel olarak yenileyebilirsiniz:
Kodum yenilediğimde çalışmıyor ama oyuna yeniden girdiğimde çalışıyor, neden?
Bu genellikle yenilenen betiğin bunu destekleyecek şekilde yazılmadığı anlamına gelir
Bunun birçok nedeni olabilir, işte birkaçı:
- Verilerin taşınmaması (yerel değişkenler sıfırlanır, tablolar boşaltılabilir/yeniden kurulabilir vb.)
- Yenilenen betik başka bir betiğe dahil edilmiş olabilir, bu durumda değişiklikleri yansıtmak için o betiğin de yenilenmesi gerekir.
- Yükleme sırası. Yenilenen betik, oyunun normal yüklenmesi sırasında aksi takdirde üzerine yazmayacağı işlevselliğin üzerine yazabilir (düzgün çalışması için gerekenden önce veya sonra yüklenebilir). Yenilenen betikler "üste eklenir", hiçbir şey kaldırılmaz, sadece yeniden çalıştırılır.
Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord