FiveM VS Code kurulumu: Lua language server, natives, yanlış uyarı yok
VS Code FiveM Lua'da 'Undefined global' uyarılarıyla dolu mü? Lua language server'ı, natives typings'i, workspace ayarlarını, formatter'ı ve hızlı natives aramasını kurun.
VS Code'da mükemmel bir script açarsınız ve şöyle görünür:
Undefined global `PlayerPedId`.Her native, exports, ESX ve QBCore sarı alt çizgi alır ve gerçek hatalar gürültüde boğulur. Bu kılavuz VS Code'u kurar, böylece FiveM Lua'yı anlar ve yalnızca gerçekten yanlış olan şeyler hakkında sizi uyarır.
Lua language server kurun
Extensions panelinde, bir Lua language server uzantısı kurun. Yaygın olarak kullanılan sumneko tarafından "Lua" uzantısıdır, bu Lua Language Server (LuaLS) üzerinde inşa edilmiştir. Tamamlama, tanıma git, yeniden adlandırma ve diagnostics verir.
Kaynaklar klasörünü workspace olarak açın (tek dosya değil), böylece server her script'i ve eklemek üzere olduğunuz ayarları görebilir.
FiveM native'leri tanımlarını ekleyin
Sade LuaLS GetEntityCoords ne alacağı hakkında hiçbir fikri yok. Topluluk FiveM / CfxLua için typing'leri tutar: native'leri, Cfx.re global'larını ve FiveM'in izin verdiği ekstra Lua söz dizimini açıklayan bir dizi ek dosya. Extensions panelinde "CfxLua" veya "FiveM natives" araştırın veya LuaLS ek yöneticisinde "FiveM" ek'ini arayın ve aktif olarak sürdürülen birini seçin.
Kurulduktan sonra yazarken imzalar alırsınız:
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)Bir native'nin üzerinde gezinin ve parametreleri ve dönüş türleri gösterir. Çoğu typing'ler de exports, lib ek açıklamaları (ox_lib tanımlarını eklerseniz) ve cache tablosunu içerir.
İpucu: Uzantı adları ve ayarlar zaman içinde değişir. Aşağıdaki bir ayar sürümünüzde mevcut değilse, uzantının kendi README'sini kontrol edin, bu her zaman bir eğitimden daha güncel.
Workspace ayarları
Kaynaklar klasörünüzün kökünde .vscode/settings.json oluşturun. Bu ayarları projeyle tutarlar, bu nedenle onu açan herkes aynı davranışı alır:
{
"Lua.runtime.version": "Lua 5.4",
"Lua.runtime.nonstandardSymbol": [
"/**/", "`", "+=", "-=", "*=", "/=", "<<=", ">>=", "&=", "|=", "^="
],
"Lua.diagnostics.globals": [
"ESX", "QBCore", "Config", "Locales", "PlayerData",
"lib", "cache", "exports"
],
"Lua.workspace.checkThirdParty": false,
"Lua.workspace.ignoreDir": [".vscode", "node_modules", "dist"]
}Her bölümün ne yaptığı:
Lua.runtime.versionfxmanifest.luaiçindelua54 'yes'eşleşir.nonstandardSymbolayrıştırıcısına FiveM'in bileşik atama (x += 1) ve backtick hash'lerinin geçerli olduğunu söyler. Bunu olmadan, mükemmel iyi kod söz dizimi hatası olarak işaretlenir.Lua.diagnostics.globalsscript'in server'ın izini süremediği yerde tanımladığı adları listeler. Kendinizi ekleyin:ESX,QBCore, birconfig.luatablodan birConfigtablosu. Bir typing uzantısı zatenlibveexportstanımlamışsa, bunları listeden bırakabilirsiniz.
Yalnızca gerçek global'ları ekleyin. Her şeyi sessiz yaparsanız, editörün sizin için yaptığı en iyi şeylerden biri olan yanlış yazılan değişkeni yakalamak uyarısını kaybedersiniz.
Gerçek olan uyarıları düzeltme
Bazı uyarılar editörün işini yapıyor:
local players = ESX.GetPlayers()
for i = 1, #player do -- 'player' is not defined: should be 'players'
endLua.diagnostics.globals kısa ve kasıtlı bir listeye çevirin ve kalan her Undefined global, bir yazım hatası veya eksik local dır. Ayrıca, resmon kılavuzu bir performans ve hata kaynağı olarak listeleyen kazara global'ları bulmanın en hızlı yoludur.
Tek seferlik durumlar için, global ayar yerine satır içi yorum daha iyidir:
---@diagnostic disable-next-line: undefined-global
local x = SomeOtherResourceGlobalKendi kodunuza açıklama ekleyin
LuaLS ---@ yorum okur. Birkaç satır kendi fonksiyonlarınızı kendini belgelemesini sağlar ve çağrılanlara otomatik tamamlama verir:
---@param plate string
---@param coords vector3
---@return boolean
local function isPlateNear(plate, coords)
-- ...
endDiğer script'ler exports aracılığıyla çağıran bir kütüphane inşa ederseniz, bu ek açıklamaları dışa aktarılan fonksiyonlara koymak en çok ödeme yapar.
Kaydet'te biçimle
StyLua (StyLua formatter uzantısı) kurun veya language server'ının kendi formatter'ını kullanın. StyLua için kaynakların yanında bir stylua.toml ekleyin:
column_width = 120
indent_type = "Spaces"
indent_width = 4
quote_style = "AutoPreferSingle"Ardından VS Code ayarlarında:
{
"[lua]": {
"editor.defaultFormatter": "JohnnyMorganz.stylua",
"editor.formatOnSave": true
}
}Tetiklenmezse Extensions panelinde formatter'ın kimliğini kontrol edin. StyLua backtick hash'leri gibi FiveM-only söz dizimini beğenmeyebilir, bu nedenle script'leriniz ağır bir şekilde kullanıyorsa önce bir kopyada çalıştırın.
Native'leri arayın
Editör imzayı söyler; resmi native'leri referansı native'in gerçekten ne yaptığını söyler, diğer geliştiricilerden notlar ile. Native'leri sayfaları docs.fivem.net/natives adresindedir ve arama kutusu bir native'yi ad veya açıklama ile bulur. İki alışkanlık yardımcı olur:
- Tam adına göre değil, istediğiniz şeye göre arayın: "en yakın araç al", "ped kemiği".
- Cfx.re native'i önce okuyun, sonra GTA V referans metnini, bazı native'ler FiveM yapısında farklı davrandığından dolayı.
Client/server detayları için client ve server olaylarına ve Wait ve thread'lere bakın.
Kontrol listesi
| Belirti | Fix |
|---|---|
Her native'de Undefined global |
Native'leri Lua language server'ı için (CfxLua / FiveM ek'i) typing'lerini kurun |
ESX veya QBCore altı çizili |
Bunları .vscode/settings.json içinde Lua.diagnostics.globals öğesine ekleyin |
x += 1 söz dizimi hatası olarak gösterilir |
Bileşik operatörleri Lua.runtime.nonstandardSymbol öğesine ekleyin |
| Backtick hash işaretlendi | Backtick'i nonstandardSymbol öğesine ekleyin |
| Sessiz yaptıktan sonra her yerde uyarılar | Global'lar listesini kısa tutun, böylece yazım hataları yine de gösterilir |
| Formatter hiçbir şey yapmıyor | [lua] için editor.defaultFormatter ayarlayın ve kaydet'te biçimle etkinleştirin |
Kısa yanıtlar
VS Code neden PlayerPedId gibi natives için 'Undefined global' diyor?
Lua language server'ı yalnızca standart Lua'yı bilir. FiveM native'leri, exports, ESX veya QBCore hiçbir şekilde duyduğu global'lar değildir. Native'ler için typing'leri ekleyin ve framework global'larınızı Lua.diagnostics.globals içinde listeleyin.
Ayarlar içinde Lua sürümünü değiştirmem gerekiyor mu?
Lua.runtime.version öğesini Lua 5.4 olarak ayarlayın, çünkü manifesto içinde lua54 'yes' ile FiveM script'leri üzerinde çalışan budur. Ayrıca editörü FiveM'in kabul ettiği söz dizimini bayraklıyor.
FiveM Lua için hangi formatter'ı kullanmalıyım?
StyLua iyi çalışır ve depo içinde küçük bir stylua.toml ile yapılandırılır. Lua language server'ında yerleşik formatter, daha az uzantı istiyorsanız da çalışır.
Bu sorunu yaşatmayan scriptler
Item Creator V2Animasyonlar, proplar, efektler ve daha fazlasıyla kullanılabilir eşyalar oluşturun — kod yazmadan.Scripti gör →
Quest CreatorGörevler ve NPC diyalogları için oyun içinde düğüm düğüm kurulan görsel editör.Scripti gör →
Shop CreatorBir dakikadan kısa sürede dükkân kurun — sahipler, çalışanlar, kasalar ve soygunlar dahil.Scripti gör →