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:
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:
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:
add_ace group.admin command.heal allow
add_principal identifier.license:your_license_here group.adminBunu 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:
falsekomutu 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:
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:
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:
- Oyunculara söyleyin Ayarlar > Tuş Bağlamaları > FiveM'de yeniden bağlarsınız. Güncelleme notlarınıza koyun.
- Eylem için yeni komut adı kullanın, örneğin
garageyerinegarage_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. - 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:
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.

