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:

text
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:

lua
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:

json
{
  "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.version fxmanifest.lua içinde lua54 'yes' eşleşir.
  • nonstandardSymbol ayrış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.globals script'in server'ın izini süremediği yerde tanımladığı adları listeler. Kendinizi ekleyin: ESX, QBCore, bir config.lua tablodan bir Config tablosu. Bir typing uzantısı zaten lib ve exports tanı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:

lua
local players = ESX.GetPlayers()
for i = 1, #player do   -- 'player' is not defined: should be 'players'
end

Lua.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:

lua
---@diagnostic disable-next-line: undefined-global
local x = SomeOtherResourceGlobal

Kendi 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:

lua
---@param plate string
---@param coords vector3
---@return boolean
local function isPlateNear(plate, coords)
    -- ...
end

Diğ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:

toml
column_width = 120
indent_type = "Spaces"
indent_width = 4
quote_style = "AutoPreferSingle"

Ardından VS Code ayarlarında:

json
{
  "[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 →

Okumaya devam edin