《以撒的结合》模组报错“attempt to perform arithmetic on nil value”求助
《以撒的结合》模组Speed为nil报错的原因与修复
为什么player.Speed会是nil?
《以撒的结合》的Lua API对Player对象的属性访问有严格限制,Speed并不是一个可以直接读写的公共属性。在MC_EVALUATE_CACHE回调触发时,游戏尚未完成玩家速度属性的初始化流程,直接访问player.Speed自然会拿到nil,而不是你预想的默认速度1。游戏的基础属性都是通过内部逻辑维护的,必须用官方提供的API方法来交互。
修复后的代码
替换直接操作player.Speed的逻辑,改用API提供的GetSpeed()和SetSpeed()方法:
local sodamod = RegisterMod("soda mod", 1) local soda = Isaac.GetItemIdByName("Soda Bottle") local speedgive = 0.5 function sodamod:EvaluateCache(player, cacheflags) if cacheflags & CacheFlag.CACHE_SPEED == CacheFlag.CACHE_SPEED then local itemcount = player:GetCollectibleNum(soda) local addspeed = speedgive * itemcount -- 用官方方法获取并设置速度 local current_speed = player:GetSpeed() player:SetSpeed(current_speed + addspeed) end end sodamod:AddCallback(ModCallbacks.MC_EVALUATE_CACHE, sodamod.EvaluateCache)
新手避坑提示
不光是速度,以撒API中玩家的核心属性(伤害、射速、射程等)几乎都需要用对应的GetXXX()和SetXXX()方法操作,直接访问属性字段要么返回nil,要么修改后不生效。比如修改伤害要用到GetDamage()和SetDamage(),修改射速用GetFireRate()和SetFireRate()。
内容的提问来源于stack exchange,提问作者askiere
相关产品推荐
相关产品推荐

