fix: weggegebene Ausruestung beendet den Tauchgang
Gleiche Bug-Klasse wie bei der Flasche, nur hatte mein Fix davor ausschliesslich
die Flasche geprueft: wer diving_gear im Tauchgang weggab, blieb ausgeruestet
und atmete weiter.
Die Besitzpruefung deckt jetzt beides ab. verifyTank heisst verifyGear und gibt
{ gear, tank } zurueck - fehlt eines von beidem, kommt die Ausruestung ab, mit
der passenden Meldung. Umsortieren im Inventar bindet weiterhin nur auf den
neuen Slot um.
Die Item-Namen stehen jetzt als gearItem/fillItem in config/shared.lua, statt
verteilt als Zeichenketten im Server-Code.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+16
-10
@@ -118,20 +118,26 @@ end
|
||||
|
||||
lib.callback.register('d4rk_divegear:server:getTanks', getTankList)
|
||||
|
||||
--- Prüft, ob der Spieler die getragene Flasche überhaupt noch hat.
|
||||
--- Ohne das konnte man die Flasche im Tauchgang weggeben und trotzdem
|
||||
--- weiteratmen - der Client hielt nur eine Slot-Nummer, die niemand mehr prüfte.
|
||||
--- @return number? slot aktueller Slot, nil wenn die Flasche weg ist
|
||||
lib.callback.register('d4rk_divegear:server:verifyTank', function(source, slotId, name)
|
||||
--- Prüft, ob der Spieler Ausrüstung und Flasche überhaupt noch besitzt.
|
||||
--- Ohne das konnte man beides im Tauchgang weggeben und trotzdem weiteratmen -
|
||||
--- der Client hielt nur eine Slot-Nummer, die niemand mehr gegenprüfte.
|
||||
--- @return { gear: boolean, tank: number? }
|
||||
lib.callback.register('d4rk_divegear:server:verifyGear', function(source, slotId, name)
|
||||
local gearCount = exports.ox_inventory:Search(source, 'count', shared.gearItem)
|
||||
local slot = getTankSlot(source, slotId)
|
||||
|
||||
if slot and slot.name == name then return slotId end
|
||||
if slot and slot.name == name then
|
||||
return { gear = (gearCount or 0) > 0, tank = slotId }
|
||||
end
|
||||
|
||||
-- Nur umsortiert? Dann dieselbe Flaschensorte woanders im Inventar suchen,
|
||||
-- sonst kostet jedes Verschieben im Inventar die Ausrüstung.
|
||||
local found = shared.tankByName[name] and exports.ox_inventory:Search(source, 'slots', name)
|
||||
|
||||
return found and found[1] and found[1].slot or nil
|
||||
return {
|
||||
gear = (gearCount or 0) > 0,
|
||||
tank = found and found[1] and found[1].slot or nil
|
||||
}
|
||||
end)
|
||||
|
||||
lib.callback.register('d4rk_divegear:server:syncTank', function(source, slotId, oxygen)
|
||||
@@ -148,11 +154,11 @@ AddEventHandler('playerDropped', function()
|
||||
lastSync[source] = nil
|
||||
end)
|
||||
|
||||
exports.qbx_core:CreateUseableItem('diving_gear', function(source)
|
||||
exports.qbx_core:CreateUseableItem(shared.gearItem, function(source)
|
||||
TriggerClientEvent('d4rk_divegear:client:useGear', source)
|
||||
end)
|
||||
|
||||
exports.qbx_core:CreateUseableItem('diving_fill', function(source)
|
||||
exports.qbx_core:CreateUseableItem(shared.fillItem, function(source)
|
||||
local tanks = getTankList(source)
|
||||
|
||||
if #tanks == 0 then
|
||||
@@ -169,7 +175,7 @@ exports.qbx_core:CreateUseableItem('diving_fill', function(source)
|
||||
if not slot then return end
|
||||
|
||||
-- Nach dem Progressbar nochmal prüfen: das Item kann in der Zwischenzeit weg sein.
|
||||
if not exports.ox_inventory:RemoveItem(source, 'diving_fill', 1) then return end
|
||||
if not exports.ox_inventory:RemoveItem(source, shared.fillItem, 1) then return end
|
||||
|
||||
writeTank(source, slot, tankConfig, tankConfig.capacity)
|
||||
lastSync[source] = os.time()
|
||||
|
||||
Reference in New Issue
Block a user