Fix - esx_inventoryhud Modem Fiş Çekme vb. ile Eşya Kopyalama Çözümü

Fivem.com.tr

Fivem.com.tr
Katılım
1 Eki 2022
Mesajlar
5,891
Tepki
112
Başlık yeterince anlaşılır olmasına rağmen bahsettiğim kopyalama hakkında ufak bir bilgi vereceğim. Bu esx_inventoryhud da yapılıyor genelde. Kişi modem fişini çekip araç bagajına, moteline vs. arka arkaya eşyalar koyuyor fakat server tarafından yanıt almadığı için üzerinde eşya kalmaya devam ediyor. Arka arkaya bu şekilde eşya koyma komutu yolladıktan sonra internete tekrar bağlandığında stacklenen tüm bu verileri bi anda servera yolluyor. Dolayısıyla 1 adet olan eşyayı defalarca kez ikinci envantere koyma komutu yolluyor ve eşya bu şekilde çoğaltılmış oluyor. Aşağıya bunun için getirdiğim çözüm kodlarını paylaşacağım. Bu çözüm sadece modem fişi çekme yöntemi değil server tarafına arka arkaya komut yollayıp kopyalama yapılabilmesini sağlayan tüm yöntemleri engelleyecektir. Eğer kodlarda bir eksik, gözümden kaçan noktalar vs. varsa yorumlarda belirtirseniz onları da gidermek için çalışmalar yapabilirim. Bu kodlar bir sunucuda haftalardır test ediliyor ve şimdiye kadar herhangi bir sorunla karşılaşılmadı.



Öncelikle esx_inventoryhud\server.main.lua da istediğiniz bir yere aşağıdaki kodları ekleyin:





Kod:


Kod:
local sayac = 0

ESX.RegisterServerCallback('ExeLds:checkSpam', function(source, cb)
    if sayac == 0  then
        cb(0)
        sayac = sayac + 1
        Citizen.Wait(1000)
        sayac = 0
    else
        cb(1)
    end
end)



Sonrasında esx_inventoryhud\client içerisindeki glovebox, trunk, property, motels vb. gibi içerisinde örnek PutIntoTrunk ve TakeFromTrunk gibi RegisterNUICallback olan tüm luaları aşağıda vereceğim trunk örneğindeki gibi düzenleyin.



Örnek: (esx_inventoryhud\client\trunk.lua)







Kod:


Kod:
local sayac = 0

RegisterNUICallback(
    "PutIntoTrunk",
    function(data, cb)
        if IsPedSittingInAnyVehicle(playerPed) then
            return
        end

        if type(data.number) == "number" and math.floor(data.number) == data.number then
            local count = tonumber(data.number)

            if data.item.type == "item_weapon" then
                count = GetAmmoInPedWeapon(PlayerPedId(), GetHashKey(data.item.name))
            end
            sayac = sayac + 1    
            ESX.TriggerServerCallback('ExeLds:checkSpam', function(callback)
                sayac = callback
                if sayac == 0 then
                    TriggerServerEvent("esx_trunk:putItem", trunkData.plate, data.item.type, data.item.name, count, trunkData.max, trunkData.myVeh, data.item.label)
                end
           
            end)        
        end

        Wait(250)
        loadPlayerInventory()

        cb("ok")
    end
)

RegisterNUICallback(
    "TakeFromTrunk",
    function(data, cb)
        if IsPedSittingInAnyVehicle(playerPed) then
            return
        end

        if type(data.number) == "number" and math.floor(data.number) == data.number then
            sayac = sayac + 1
            ESX.TriggerServerCallback('ExeLds:checkSpam', function(callback)
                sayac = callback
                if sayac == 0 then
                    TriggerServerEvent("esx_trunk:getItem", trunkData.plate, data.item.type, data.item.name, tonumber(data.number), trunkData.max, trunkData.myVeh)
                end        
            end)          
        end

        Wait(250)
        loadPlayerInventory()

        cb("ok")
    end
)





Eğer bi eksik yapmadan düzenlemeleri yaptıysanız bu checkSpam ServerCallBack sayesinde kişi internet bağlantısını koparıp 1 den fazla eşya koyma komutu yollasa bile sadece ilk komut işleme alınacaktır. Dolayısıyla kopyalama girişimi başarısız olacaktır.



Not: Sizin envanter scriptinizdeki RegisterNUICallback isimleri farklı olabilir. Örneğin PutIntoTrunk yerine toTrunk veya TakeFromTrunk yerine fromTrunk vb. gibi. İsminin farklı olması herhangi bir soruna sebep olmaz. Siz de bu çözümü aynen uygulayabilirsiniz.


Mutluluk basittir. Onu bulmak için yaptığımız her şey karışıktır. -Karen Maezen Miller

Konu alıntıdır, yanlış veya hatalı bir bilgi/paylaşım var ise yanıtlayabilir veya bizimle iletişime geçebilirsiniz.
 

Şu anda bu konu'yu okuyan kullanıcılar

Benzer konular

Üst