- Katılım
- 5 yıl 7 ay 11 gün
- Mesajlar
- 245
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:
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)
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.
Öncelikle esx_inventoryhud\server.main.lua da istediğiniz bir yere aşağıdaki kodları ekleyin:
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:
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.
Son düzenleme: