- 黄金
- 92.95G
发生肾摸逝了?
原始问题,如果你也这样描述问题,请看《提问的智慧》、《如何向开源社区提问题》 和 《如何有效地报告 Bug》、《如何向开源项目提交无法解答的问题》总结:消耗品插件使用物品只能降低压力值不能增加护甲值,插件无报错,玩家在服务器时手动重启插件可以正常增加护甲值,后加入服务器的玩家不能正常增加。(后面补充提示可以正常显示)弄了个消耗品插件和mhud对接缓解压力 顺便加护甲 弄好了 但是现在有个问题就是 比如我服务器刚重启完 一个玩家都没有 然后开始进来玩家 这个时候他们喝酒 只能缓解压力 却不能加护甲 插件没有报错 我必须手动重启一次插件 才会有加护甲的效果 后面进来的玩家也是没效果 得重启 反正就是在我插件开启的时候 后面进来的 都没效果 必须重启一次 目前在游戏内的 才能有效果
问题代码
这是简化之后的伪代码,看看你能不能根据他的描述猜到问题
Lua:
-- client.lua
CreateThread(function()
for k, v in pairs(Config.Items) do
local event = 'heist_consumables:' .. v.name
local playerPed = PlayerPedId()
RegisterNetEvent(event)
AddEventHandler(event, function()
local notify = '你使用了 ' .. v.label
ESX.ShowNotification(notify)
-- Armor
if v.armour then
local currentarmour = GetPedArmour(playerPed)
local maxarmour = 100
local newarmour = currentarmour + v.armour
if newarmour > maxarmour then
newarmour = maxarmour
end
SetPedArmour(playerPed, newarmour)
-- 触发HUD系统的护甲耐久度更新
TriggerServerEvent('hud:server:UpdateArmour', newarmour)
-- 添加护甲恢复通知
local armourAddedAmount = newarmour - currentarmour
ESX.ShowNotification('护甲恢复了 ' .. armourAddedAmount .. ' 点')
end
-- 压力相关逻辑
-- ...
end)
end
end)
问题出在哪里?
是不是SetPedArmour
函数传入的 newarmour
变量类型不对?加个取整操作?有些原生函数确实会存在这样的问题,似乎和
use_experimental_fxv2_oal 'yes'
也有关系,还有待进一步研究。但
SetPedArmour
这个函数,如果你尝试传入小数,如 1.1 或其他任何小数,玩家的护甲值将被设置为 100。所以到底发生了什么?请看下图:
ox_lib cache 文档:https://overextended.dev/ox_lib/Modules/Cache/Client
修复后的代码
需要按照文档在资源清单中引入 ox_lib。文档:https://overextended.dev/ox_lib#usage
Lua:
-- client.lua
CreateThread(function()
for k, v in pairs(Config.Items) do
local event = 'heist_consumables:' .. v.name
RegisterNetEvent(event)
AddEventHandler(event, function()
local notify = '你使用了 ' .. v.label
ESX.ShowNotification(notify)
-- Armor
if v.armour then
local currentarmour = GetPedArmour(cache.ped)
local maxarmour = 100
local newarmour = currentarmour + v.armour
if newarmour > maxarmour then
newarmour = maxarmour
end
SetPedArmour(cache.ped, newarmour)
-- 触发HUD系统的护甲耐久度更新
TriggerServerEvent('hud:server:UpdateArmour', newarmour)
-- 添加护甲恢复通知
local armourAddedAmount = newarmour - currentarmour
ESX.ShowNotification('护甲恢复了 ' .. armourAddedAmount .. ' 点')
end
-- 压力相关逻辑
-- ...
end)
end
end)
Lua:
-- client.lua
CreateThread(function()
for k, v in pairs(Config.Items) do
local event = 'heist_consumables:' .. v.name
RegisterNetEvent(event)
AddEventHandler(event, function()
local playerPed = PlayerPedId()
local notify = '你使用了 ' .. v.label
ESX.ShowNotification(notify)
-- Armor
if v.armour then
local currentarmour = GetPedArmour(playerPed)
local maxarmour = 100
local newarmour = currentarmour + v.armour
if newarmour > maxarmour then
newarmour = maxarmour
end
SetPedArmour(playerPed, newarmour)
-- 触发HUD系统的护甲耐久度更新
TriggerServerEvent('hud:server:UpdateArmour', newarmour)
-- 添加护甲恢复通知
local armourAddedAmount = newarmour - currentarmour
ESX.ShowNotification('护甲恢复了 ' .. armourAddedAmount .. ' 点')
end
-- 压力相关逻辑
-- ...
end)
end
end)
Lua:
-- client.lua
CreateThread(function()
for k, v in pairs(Config.Items) do
local event = 'heist_consumables:' .. v.name
RegisterNetEvent(event)
AddEventHandler(event, function()
local notify = '你使用了 ' .. v.label
ESX.ShowNotification(notify)
-- Armor
if v.armour then
local currentarmour = GetPedArmour(PlayerPedId())
local maxarmour = 100
local newarmour = currentarmour + v.armour
if newarmour > maxarmour then
newarmour = maxarmour
end
SetPedArmour(PlayerPedId(), newarmour)
-- 触发HUD系统的护甲耐久度更新
TriggerServerEvent('hud:server:UpdateArmour', newarmour)
-- 添加护甲恢复通知
local armourAddedAmount = newarmour - currentarmour
ESX.ShowNotification('护甲恢复了 ' .. armourAddedAmount .. ' 点')
end
-- 压力相关逻辑
-- ...
end)
end
end)
最后编辑: