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:

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

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

lua
-- 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
lua
-- any script, server
if Player(targetSrc).state.isDead then
    -- allow the revive action
end

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

  1. playerDropped üzerine oyuncunun ölü olup olmadığını kontrol edin ve karakterle veritabanında kaydedin.
  2. Karakter yüklendiğinde bayrağı okuyun ve ölü veya son direniş durumuna geri koyun.
  3. Respawn zamanlayıcı tekrar başlatın veya sıkıysa kalan zamanı tutun.
lua
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.

Bu sorunu yaşatmayan scriptler

Mic PhoneTablete dönüşen katlanabilir bir telefon; oyuncunun gerçek telefonuna da taşınır.Scripti gör →Item Creator V2Animasyonlar, proplar, efektler ve daha fazlasıyla kullanılabilir eşyalar oluşturun — kod yazmadan.Scripti gör →

Okumaya devam edin