
游戏开发插件系统【免费下载链接】REPENTOGONScript extender for The Binding of Isaac: Repentance项目地址https://gitcode.com/gh_mirrors/re/REPENTOGON点击查看免费下载ProceduralEffectActionType是 REPENTOGON《以撒的结合忏悔》脚本扩展在 Lua 接口中暴露的枚举用于描述程序化道具Procedural Item效果触发后要执行的动作类型。配合 ProceduralEffect 类的GetActionType()与GetActionProperty()Mod 开发者可以逐条解析故障道具glitch item内部随机生成的效果链判断它到底会使用主动道具、转化实体、造成范围伤害还是生成新实体。读完本文你将掌握该枚举全部 6 个取值、每个取值对应的参数结构以及如何从底层数据结构理解其真实行为。枚举定义一览ProceduralEffectActionType定义在 docs/docs/enums/ProceduralEffectActionType.md共 6 个取值全部为从 0 开始的连续整数ValueEnumerator含义0USE_ACTIVE_ITEM使用一个主动道具1ADD_TEMPRORY_EFFECT临时获得一个道具效果注意官方拼写即为此处的TEMPRORY2CONVERT_ENTITIES将房间内的实体转换为另一种实体3AREA_DAMAGE在效果点造成范围伤害4SPAWN_ENTITY生成一个指定类型/变体的实体5FART触发一次放屁式气体爆发带击退/伤害的视觉特效在 Lua 中该枚举以同名全局表的形式暴露来自 repentogon/resources/scripts/enums_ex.luaProceduralEffectActionType { USE_ACTIVE_ITEM 0, ADD_TEMPRORY_EFFECT 1, CONVERT_ENTITIES 2, AREA_DAMAGE 3, SPAWN_ENTITY 4, FART 5, }因此在实际脚本中既可以直接写ProceduralEffectActionType.USE_ACTIVE_ITEM也可以直接比较整数0两种写法等价。枚举与 ProceduralEffect 类的配合方式该枚举的典型消费方是 ProceduralEffect 类的GetActionType()方法其签名如下ProceduralEffectActionType GetActionType()它返回效果被触发后要做什么与返回效果在什么时机被触发的GetConditionType()类型为 ProceduralEffectConditionType共同构成一个效果的两大要素条件Condition何时触发 动作Action触发后做什么。从源码实现看GetActionType()在 repentogon/LuaInterfaces/ProcedualItems/LuaProceduralEffect.cpp#L12-L16 中只是把ProceduralEffect结构体里的effectActionType整型字段直接压栈返回LUA_FUNCTION(Lua_PEGetActionType) { ProceduralEffect* pi *lua::GetRawUserdataProceduralEffect**(L, 1, lua::metatables::ProceduralEffectMT); lua_pushinteger(L, pi-effectActionType); return 1; }这印证了枚举本质上就是ProceduralEffect对象在偏移0x4处的int effectActionType字段见 libzhl/functions/ProceduralEffect.zhl#L84-L85Lua 层的枚举名只是该字段可读性的包装。各动作类型的参数结构GetActionProperty确定动作类型后应调用GetActionProperty()获取该动作的详细参数表。官方文档docs/docs/ProceduralEffect.md#L18-L63按动作类型分别给出了返回表的字段动作类型返回表字段类型说明USE_ACTIVE_ITEMidint要使用的主动道具collectibleIDADD_TEMPRORY_EFFECTidint临时添加的道具 IDSPAWN_ENTITYtype、variantint, int要生成的实体类型与变体CONVERT_ENTITIESfromType、fromVariant、toType、toVariantint, int, int, int从什么实体转换为目标实体AREA_DAMAGEradius、damagefloat, float伤害半径与伤害量FARTscale、radiusfloat, float气体爆发的规模与半径底层数据布局佐证这些字段并非凭空定义而是直接映射自 libzhl/functions/ProceduralEffect.zhl 中通过逆向还原的 C 结构体struct ProceduralEffect_ActionData_UseActiveItem { int collectibleId : 0x0; } : 0x4; struct ProceduralEffect_ActionData_AddTemproryEffect { int collectibleId : 0x0; } : 0x4; struct ProceduralEffect_ActionData_SpawnEntity { short variant : 0x0; short type : 0x2; } : 0x4; struct ProceduralEffect_ActionData_ConvertEntities { short fromVariant : 0x0; short fromType : 0x2; short toVariant : 0x4; short toType : 0x6; } : 0x8; struct ProceduralEffect_ActionData_AreaDamage { float radius : 0x8; float damage : 0xc; long long flags1 : 0x10; long long flags2 : 0x18; } : 0x20; struct ProceduralEffect_ActionData_Fart { float fartScale : 0x0; float radius : 0xc; } : 0x10;这些动作数据以**联合体unionActionData**形式存储在ProceduralEffect对象偏移0x10处ProceduralEffect.zhl#L63-L77同一片内存按当前effectActionType解释为不同结构。值得注意的是每个动作的数据体大小不同从 4 字节到 32 字节不等说明程序化道具的生成逻辑会按动作类型分配对应内存布局官方文档中的枚举名CONVERT_ENTITIES复数与GetActionProperty文档里出现的CONVERT_ENTITY单数在个别页面写法不完全一致实际以枚举定义CONVERT_ENTITIES为准CONVERT_ENTITIES的注释 target type / target variant 表明toType/toVariant是转换的目标。源码中未写入文档的额外字段与换算阅读 Lua 层实现 repentogon/LuaInterfaces/ProcedualItems/LuaProceduralEffect.cpp#L32-L79 可以发现GetActionProperty()实际返回的字段比官方文档更丰富且存在数值换算Mod 开发者需要特别注意AREA_DAMAGE 额外返回flags1与flags2文档只列出radius和damage但实现同时把底层areaDamage.flags1long long与flags2写入返回表。这两个字段对应底层结构体偏移0x10与0x18的 64 位标志位可用于判断伤害类型等附加属性。FART 的scale/radius是换算后的值底层存储的是fart.fartScale与fart.radiusLua 层返回时做了系数换算scale fartScale * 6radius fartRadius * 6.0 / 85.0这意味着若你在调试中直接观察底层内存看到的是原始值与GetActionProperty()的返回值不同。数值类型差异id、type、variant等字段用lua_pushinteger推送整数而radius、damage、scale用lua_pushnumber推送浮点数做运算前建议显式tonumber处理。完整使用流程示例枚举与动作参数解析的实际调用链为ProceduralItemManager.GetProceduralItem()拿到程序化道具 →ProceduralItem.GetEffect()拿到单条效果 →GetActionType()/GetActionProperty()解析动作。下面的示例遍历第一个程序化道具的所有效果并输出其动作类型与参数local pItem ProceduralItemManager.GetProceduralItem(0) if pItem then for i 0, pItem:GetEffectCount() - 1 do local effect pItem:GetEffect(i) local actionType effect:GetActionType() if actionType ProceduralEffectActionType.USE_ACTIVE_ITEM then local prop effect:GetActionProperty() print(string.format(Effect %d: 使用主动道具 id%d, i, prop.id)) elseif actionType ProceduralEffectActionType.CONVERT_ENTITIES then local prop effect:GetActionProperty() print(string.format(Effect %d: 转换实体 %d.%d - %d.%d, i, prop.fromType, prop.fromVariant, prop.toType, prop.toVariant)) elseif actionType ProceduralEffectActionType.AREA_DAMAGE then local prop effect:GetActionProperty() print(string.format(Effect %d: 范围伤害 radius%f damage%f, i, prop.radius, prop.damage)) end end end若想以动作为线索筛选效果直接比较枚举值即可if effect:GetActionType() ProceduralEffectActionType.SPAWN_ENTITY then local prop effect:GetActionProperty() -- 生成 EntityType.prop.type、变体 prop.variant 的实体 end获取程序化道具与效果的入口函数CreateProceduralItem、GetProceduralItem、GetProceduralItemCount注册在 repentogon/LuaInterfaces/ProcedualItems/LuaProceduralItemManager.cpp#L14-L53GetEffect/GetEffectCount见 repentogon/LuaInterfaces/ProcedualItems/LuaProceduralItem.cpp#L59-L79其全局表定义见 docs/docs/ProceduralItemManager.md。注意ProceduralItemManager是全局表而非实例方法调用时必须使用点号而非冒号例如ProceduralItemManager.GetProceduralItem(0)。与 ProceduralEffectConditionType 的配合动作枚举只有在结合触发条件枚举 ProceduralEffectConditionType 时才有完整语义条件决定什么时候触发如TEAR_FIRE、ENEMY_HIT、ENEMY_KILL、ROOM_CLEAR、ENTITY_SPAWN、CHAIN等 9 种动作决定触发后做什么即本文的 6 种。从 LuaProceduralEffect.cpp#L81-L100 的实现可以看到两者在游戏逻辑中的联动GetTriggerChance()会依据effectConditionType对触发概率施加硬编码系数TEAR_FIRE/ENEMY_HIT/ENTITY_SPAWN乘0.05ENEMY_KILL乘0.2。也就是说同一个动作在不同触发条件下实际生效概率并不相同调试 Mod 逻辑时不应忽略这一点。小结ProceduralEffectActionType是理解 REPENTOGON 程序化道具效果链的关键入口之一。本文归纳的要点6 个枚举值对应 6 种动作使用主动道具、临时附加道具效果、转化实体、范围伤害、生成实体、气体爆发动作参数统一由GetActionProperty()返回字段随动作类型不同而不同且AREA_DAMAGE在实现中额外暴露flags1/flags2FART的scale/radius返回值经过底层系数换算直接对照内存原始值时需注意差异枚举底层是 ProceduralEffect.zhl 中int effectActionType字段与union ActionData联合体的 Lua 化封装实际使用中建议结合 ProceduralEffectConditionType 与GetTriggerChance()一起判断效果的完整行为。赞分享游戏开发插件系统【免费下载链接】REPENTOGONScript extender for The Binding of Isaac: Repentance项目地址https://gitcode.com/gh_mirrors/re/REPENTOGON点击查看免费下载相关推荐REPENTOGON UseActiveItemResultFlag 枚举详解主动道具使用结果的位掩码判定REPENTOGON UseActiveItemResultFlag 枚举详解主动道具使用结果的位掩码判定 UseActiveItemResultFlag 是游戏开发插件系统YOLOv8 实时目标检测模型全解析架构特性、模型变体与训练推理实战YOLOv8 实时目标检测模型全解析架构特性、模型变体与训练推理实战 YOLOv8 是 YOLO 实时目标检测系列的最新迭代版本以精度与速度的最优平衡为游戏开发插件系统REPENTOGON 枚举 ImGuiData 全解析用 ImGui.UpdateData 动态更新 UI 元素的七种数据类型REPENTOGON 枚举 ImGuiData 全解析用 ImGui.UpdateData 动态更新 UI 元素的七种数据类型 ImGuiData 是 REP游戏开发插件系统上一篇终极指南5分钟快速掌握Browser MCP浏览器自动化神器下一篇Internet Archive下载器终极指南解锁数字图书馆的完整使用技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考