RegisterCommand ve RegisterKeyMapping: FiveM'de yeniden bağlanabilir tuşlar

FiveM komutları oluşturun ve oyunculara yeniden bağlanmalarına izin verin: ACE ile RegisterCommand, RegisterKeyMapping, +/- komutları ile eylem tutma ve neden yeni varsayılan tuş yoksayılır.

/garage gibi herkesin yazabileceği bir komut, aynı şeyi yapan E gibi bir tuş ve her oyuncunun o tuşu değiştirebileceği bir yol istiyorsunuz. FiveM size komut için RegisterCommand ve tuş için RegisterKeyMapping verir. Bu makale her ikisini, bir komutu adminlere nasıl kısıtlayacağınızı, bir tuş tutulmuşken çalışan bir eylemi nasıl yapacağınızı ve neden daha sonra varsayılan tuşu değiştirmek mevcut oyuncular için hiçbir şey yapmamasını gösterir.

Basit komut

Komut bir ad ve bir işlevdir:

lua
RegisterCommand('garage', function(source, args, rawCommand)
    print('garage opened')
end, false)

İstemcide, source faydalı değil. args tablosu komuttan sonra yazılan kelimeleri tutar, rawCommand tam metindir. Sunucuda, source oyuncu kimliği veya komut sunucu konsolundan geldiğinde 0'dır.

Sunucuda aynı, bir argüman ile:

lua
RegisterCommand('heal', function(source, args)
    local target = tonumber(args[1]) or source
    TriggerClientEvent('my_script:heal', target)
end, true)

Bir komutu ACE ile kısıtlayın

RegisterCommand'in son argümanı restricted'dır. true ile, command.<name> ACE izni tutmadığı sürece hiç kimse komutu çalıştıramaz. server.cfg'de adminlerinize verin:

cfg
add_ace group.admin command.heal allow
add_principal identifier.license:your_license_here group.admin

Bunu olmayan oyuncular izin hatası alır ve komut hiçbir zaman çalışmaz. ACE grupları ve ilkelerin nasıl çalıştığı ACE permissions for FiveM admins bölümünde anlatılır.

Dikkat: false komutu herkes tarafından yazılabilir, hileciler de dahil olmak üzere. Hiçbir zaman istemci tarafı komutuna değerli bir şeyi korumak için güvenmeyin. Gerçek izin kontrolünü sunucuda yapın.

Komutu bir tuşa bağlayın

RegisterKeyMapping bir komutu bir tuşa bağlar, istemcide. Komut mevcut olmalı, bu nedenle ikisini de kaydedin:

lua
RegisterCommand('garage', function()
    print('garage opened')
end, false)

RegisterKeyMapping('garage', 'Open the garage', 'keyboard', 'F5')

Dört argüman komut adı, oyuncuya gösterilen açıklama, giriş cihazı (burada 'keyboard') ve varsayılan tuşttur. Tuş adı E, F5 veya LSHIFT gibi yazılır.

Oyuncular şimdi F5 tuşuna basabilir veya /garage yazabilir ve ikisi de aynı şeyi yapar.

Oyuncuların yeniden bağladığı yer

Varsayılan tuş yalnızca bir öneridir. Oyuncular oyunun Ayarları > Tuş Bağlamaları > FiveM'sini açar ve eyleminizi orada bulur, açıklama metni tarafından listelenir. Tuşu beğendikleri herhangi bir şeye değiştirebilirler.

Net bir açıklama yazın ('Open the garage', 'garage' değil), çünkü bu oyuncunun gördüğü her şeydir. Kısa ve benzersiz tutun, böylece iki betik aynı etiketi göstermez.

+ ve - komutları ile tuş tutulmuş eylemler

Bir tuş tutulmuşken devam eden şey için, örneğin push-to-talk veya ip gibi bir komut çifti kaydedin: biri + ile ve biri - ile başlayan. Oyun tuş ineğinde +name ve çıktığında -name çalıştırır:

lua
local holding = false

RegisterCommand('+my_hold', function()
    holding = true
end, false)

RegisterCommand('-my_hold', function()
    holding = false
end, false)

RegisterKeyMapping('+my_hold', 'Hold to aim the tool', 'keyboard', 'G')

CreateThread(function()
    while true do
        if holding then
            -- do the held action here
            Wait(0)
        else
            Wait(250)
        end
    end
end)

+ adını haritayın. Hem + hem de - komutu kaydedilmelidir, yoksa yayın asla görülmez.

Neden yeni varsayılan tuş hiçbir şey yapmaz

Bu birçok geliştiriciye yakalanır. Sürüm 1'i 'F5' ile yayınlıyor, sonra sürüm 2'de 'F6''ya geçersiniz. Sürüm 1'i zaten çalıştıran oyuncular yine F5 tuşuna basarlar.

Nedeni: RegisterKeyMapping'den varsayılan tuş yalnızca ilk kez oyun bu eşlemeyi gördüğünde uygulanır. Bundan sonra bağlama oyuncunun kendi ayarlarında yaşar ve yeni varsayılan kullanılmaz. Yani:

  • Yeni oyuncular yeni tuşu alır.
  • Mevcut oyuncular eski olanı veya kendileri seçtiği her şeyi tutar.

Zaten bağlamaya sahip oyunculara bir tuş zorlamanın temiz bir yolu yok. Seçenekleriniz:

  1. Oyunculara söyleyin Ayarlar > Tuş Bağlamaları > FiveM'de yeniden bağlarsınız. Güncelleme notlarınıza koyun.
  2. Eylem için yeni komut adı kullanın, örneğin garage yerine garage_v2. Yeni bir eşlemedir, bu nedenle yeni varsayılan geçerli olur. Oyuncular eski olanı kaldırılana kadar her iki girişi de görecek.
  3. Varsayılana güvenmeyin. Sabit bir harfin yerine UI'nizde gerçek tuşu gösterin veya oyunculara yeniden nasıl bağlanacağını söyleyin.

Bu aynı zamanda tuş değişikliklerini yeni bir profilde veya ayarlarda bağlamayı kaldırdıktan sonra neden test etmeniz gerektiğidir. Aksi takdirde eski tuşu test etmeye devam edersiniz.

Komut mantığını küçük tutun

Bir komut işleyicisi bir şey yapmalıdır: bir işlevi çağırın. Sonra tuş, komut ve hedef etkileşim (bkz. ox_target: how to add targets) hepsi aynı işlevi çağırır:

lua
local function openGarage()
    print('garage opened')
end

RegisterCommand('garage', openGarage, false)
RegisterKeyMapping('garage', 'Open the garage', 'keyboard', 'F5')

Başka şeylerin zaten kullandığı tuşlardan kaçının. Eşlenmiş komutla aynı tuş için bir döngüde IsControlJustPressed'ı kontrol etmek her ikisini de ateşler. Eşlemeyi tek başına kullanın.

Kontrol listesi

Belirtisi Çözüm
Komut herkese çalışır Üçüncü argüman olarak true iletin ve command.<name> ile add_ace verin
Tuş hiçbir şey yapmaz Komut önce kaydedin, sonra aynı adla RegisterKeyMapping
Tuş tutulmuş eylem hiçbir zaman yayın değil Hem +name hem de -name kaydedin, + adını haritayın
Değiştirilen varsayılan tuş yoksayıldı Varsayılanlar bir kez geçerli: oyuncular yeniden bağlarlar veya yeni komut adı kullanırlar
Oyuncular bağlamayı bulamaz Ayarlar > Tuş Bağlamaları > FiveM; net açıklama kullanın
Sunucu komutu konsolda bozulur source orada 0'dır; bu durumu işleyin

Kısa yanıtlar

Oyuncular RegisterKeyMapping ile ayarlanmış bir tuşu nerede değiştirir?

Oyunun Ayarlarında, Tuş Bağlamaları altında, FiveM bölümü. Açıklama metniniz orada gördükleri etiketdir.

Betiğimde varsayılan tuşu değiştirdim ancak oyuncular hala eski olanı kullanıyor. Neden?

Varsayılan yalnızca eşlemenin ilk kez kaydedildiğinde uygulanır. Bundan sonra oyuncunun kendi saklı bağlama kazanır. Ya oyunculara yeniden bağlanmasını isteyin ya da eylemi yeni bir komut adı altında kaydedin.

Bir komutu adminlere kısıtlayabilirim?

RegisterCommand'in üçüncü argümanı olarak true iletin, ardından admin grubunuza server.cfg'de add_ace ile ACE command.yourcommand'ı verin.

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 →Shop CreatorBir dakikadan kısa sürede dükkân kurun — sahipler, çalışanlar, kasalar ve soygunlar dahil.Scripti gör →

Okumaya devam edin