FiveM ölüm ve canlandırma sistemi: son direniş, respawn ve durum çantaları
FiveM ölüm sistemi nasıl çalışır: son direniş vs ölü, respawn zamanlayıcı, yönetici veya EMS'den canlandırma, durum çantalarıyla ölü durumun senkronizasyonu ve savaş günlüğünü düzeltme.
Belirti: oyuncu ölür ve respawn seçeneği görmez veya canlandırılamaz veya ölü iken çıkış yapıp tam sağlıkta geri gelir.
FiveM'de ölüm bir özellik değildir. Oyun sadece ped'in sağlığının sıfır olduğunu bilir. Diğer her şey (düşmüş animasyon, zamanlayıcı, canlandırma) framework'ünüz ve ambulans kaynağı tarafından oluşturulur. Bu makale hangisinin kırıldığını bulabilmek için hareketli parçaları açıklar.
Oyunun ne bildiği
Motor ped'in ölü olduğunu söyler, hepsi bu. Kaynaklar bunu yerli kontrol veya hasar oyun olayı ile algılar, ardından devralır:
-- client
CreateThread(function()
local wasDead = false
while true do
Wait(500)
local dead = IsEntityDead(PlayerPedId())
if dead and not wasDead then
TriggerServerEvent('myjob:playerDied')
end
wasDead = dead
end
end)ESX çekirdeği betiklerin dinlemesi için bir ölüm olayı ateşler ve QBCore oyuncunun meta verilerinde bayrakları tuttuğu. Her ikisinde de, ambulans kaynağınız ölümü dinler ve geri kalanını çalıştırır.
Son direniş vs ölüm
Birçok kurulum iki aşamaya sahiptir:
| Durum | Oyuncunun yapabilecekleri | Nasıl sona erer |
|---|---|---|
| Son direniş (yıkılmış) | Sürün, yardım çağır, bekle | EMS tarafından canlandırıldı veya zamanlayıcı tükendi ve ölürler |
| Ölü | Hiçbir şey, ekran respawn zamanlayıcı gösterir | Hastanede respawn veya canlandırma |
QBCore tarzı kurulumlar bunu ayrı bayraklar olarak ortaya çıkarır (son direniş bayrağı ve ölü bayrağı). ESX kurulumları genellikle sadece ölü durumuna sahiptir. Sunucunuzun neye ihtiyacı olduğunu seçin ve iki ambulans kaynağını karıştırmayın, çünkü her biri kendi bayraklarını takip eder ve ped'in arkasında savaşırlar.
Respawn zamanlayıcı
Zamanlayıcı arkasında bir sunucu kuralı olan istemci sayılı düşüşüdür. En önemli iki ayar:
- Respawn süresi: oyuncunun respawn'a basması gerekene kadar ne kadar süre.
- Kan kaybı süresi (son direniş kullanıyorsanız): yıkılmış oyuncunun ölüne kadarki süre.
Respawn tuşu hiçbir şey yapmıyorsa, neden hemen hemen her zaman ölü bayrağı hiçbir zaman ayarlanmadığı için zamanlayıcı hiçbir zaman başlamazsa. Ölüm anında konsolu hatalara karşı kontrol edin.
Respawn çeşitli şeyleri bir arada sıfırlamalı: sağlık, ölü bayrağı, ölüm animasyonu, ekran efektleri ve hastanedeki konum. Sadece sağlığı sıfırlarsanız oyuncu ölü animasyon içinden kalkar.
Yönetici veya EMS'den canlandırma
Çoğu framework ve ambulans kaynakları yöneticiler için bir /revive stil komutu ve iş üzerinde oyuncular için EMS aksiyonu gönderir. Hepsi istemci üzerinde aynı şeyi yapar:
-- client: bring the local player back at their current position
local ped = PlayerPedId()
local coords = GetEntityCoords(ped)
NetworkResurrectLocalPlayer(coords.x, coords.y, coords.z, GetEntityHeading(ped), true, false)
ClearPedTasksImmediately(ped)
SetEntityHealth(ped, GetEntityMaxHealth(ped))
ClearPedBloodDamage(ped)Ardından kaynak ölü bayrağını temizler. Sadece yerli olanları çağırırsanız ve bayrağı atlarsanız, oyuncu dünyada canlı, ancak framework için hala "ölü" ve respawn ekranı açık kalır. Mümkün olduğunca ambulans kaynağınızın canlandırma işlevini kullanın ve sadece onu değiştirilirken kendinize yazın.
Dikkat: canlandırma komutu izin ve EMS sürümü için işle kısıtlanmalı. ACE izinleri yönetici tarafı için bakın.
Durum çantalarıyla ölü durumun senkronizasyonu
Diğer oyuncular ve diğer betikler birinin ölü olduğunu bilmesi gerekir: EMS blipleri, "ölü oyuncuyu soyma" kontrolü, açılmayı reddeden envanter. Her istemciyi yoklamak yavaş. Durum çantası doğal uydudur, çünkü geç katılanlar bunu da görürler:
-- server
RegisterNetEvent('myjob:playerDied', function()
local src = source
Player(src).state:set('isDead', true, true)
end)
local function revive(src)
Player(src).state:set('isDead', false, true)
TriggerClientEvent('myjob:revive', src)
end-- any script, server
if Player(targetSrc).state.isDead then
-- allow the revive action
endDiğer betiklerin de okuduğu bir ad kullanın veya bayrak kimseye yardımcı olmaz. Bazı framework'ler zaten oyuncu verilerinde ölü bayrağı tuttuğu, bu nedenle önce bunu kontrol edin ve bunun yerine okuyun, ikinci gerçeğin kaynağını yapmayın.
Savaş günlüğü
Ölü veya yıkılmış iken bağlantısı kesilen, ardından yeniden bağlanan oyuncu yine ölü olmalı. Bunu yapılmadığında birini öldürmek hiçbir şey yapmaz.
playerDroppedüzerine oyuncunun ölü olup olmadığını kontrol edin ve karakterle veritabanında kaydedin.- Karakter yüklendiğinde bayrağı okuyun ve ölü veya son direniş durumuna geri koyun.
- Respawn zamanlayıcı tekrar başlatın veya sıkıysa kalan zamanı tutun.
AddEventHandler('playerDropped', function()
local src = source
if Player(src).state.isDead then
-- save the dead flag for this character
end
end)Bayrağın kaydedildiği yer framework'ünüze bağlıdır. Birçok ambulans kaynağı zaten veritabanında ölü bayrağı tutuğu, bu nedenle ikincisini eklemeden önce arayın. Ayrıca tersin karşısında korunun: bir çökmeden sonra sıkışmış ölü oyuncu yönetici canlandırma gerekir, bu nedenle yukarıdaki komut var olmalıdır.
Kontrol Listesi
| Belirtisi | Düzeltme |
|---|---|
| Respawn tuşu hiçbir şey yapmıyor | Ölü bayrağı hiçbir zaman ayarlanmadı: ölüm anında betik hatası araması |
| Oyuncu canlandırıldı ama ekran yine ölü söylüyor | Framework'ün ölü bayrağını temizleyin, sadece sağlığı değil |
| Oyuncu ölüm animasyonundan kalkar | Görevleri temizleyin ve respawndan sonra ped'i sıfırlayın |
| İki ambulans betiği savaşıyor | Sadece bir ölüm sistemi çalıştırın |
| Diğerleri kimin ölü olduğunu göremez | Oyuncu üzerinde çoğaltılmış durum çantası ayarlayın |
| Oyuncu çıkış yaptıktan sonra canlı geri gelir | Ölü bayrağını playerDropped üzerinde kaydedin ve yüklemede geri yükleyin |
Kısa yanıtlar
Yönetici olarak oyuncuyu nasıl canlandırırım?
Çoğu framework ve ambulans kaynakları /revive stil yönetici komutu içerir. Ad ve ihtiyaç duyduğu izin kaynağınıza bağlıdır, bu nedenle ambulans veya yönetici menü kaynağınızı kontrol edin.
Son direniş ile ölü arasındaki fark nedir?
Son direniş oyuncunun sürünebileceği veya yardım için bekleyebileceği yıkılmış durumdur. Ölü, sadece respawn veya canlandırma onları geri getirir. Kimi başlangıç noktası ikisine de sahip değildir.
Oyuncuların ölü iken savaş günlüğünü nasıl önlerim?
Oyuncu ayrıldığında ölü durumunu kaydedin ve tekrar yüklediklerinde tekrar uygulayın. Ölü bayrağı saklanmıyorsa oyuncu tam sağlıkta geri gelir.

