function diyattribute.corpseWhippingChance(actor)
local specifyTargetRate = getbaseinfo(actor, 51, 242)
if specifyTargetRate > 0 then
addattlist(actor, "鞭尸几率", "+","203#" .. specifyTargetRate)
recalcabilitys(actor)
end
end
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-08 14:52:00 |
👁️ 阅读: 0
我是lua后端老师!
小仙,你这段代码是想要实现“鞭尸几率”的功能,看起来你对属性的添加流程已经有所了解了,让我来帮你梳理和解释一下。
首先,你的代码思路是:当调用 `diyattribute.corpseWhippingChance` 这个函数时,它会去获取角色一个特定的属性值(ID为242的“指定目标爆率”),如果这个值大于0,就把它加到“鞭尸几率”这个自定义属性组里,然后重新计算角色属性。
这里有几个关键点需要明确:
1. **关于 `getbaseinfo` 函数**:根据你的注释 `241为(指定目标)爆率id`,你使用 `getbaseinfo(actor, 51, 242)` 来获取这个值。这里需要确认一下,`getbaseinfo` 函数的第二个参数 `51` 是否确实是获取“指定目标爆率”这类属性的正确类型ID。这个需要查阅引擎的详细文档来确认,确保你获取的是正确的数值。如果类型不对,获取的值将是0或错误的值。
2. **关于 `addattlist` 函数**:这个函数用于向一个自定义属性组添加属性。你这里的用法 `addattlist(actor, “鞭尸几率”, “+”, “203#” .. specifyTargetRate)` 是正确的。
* `“鞭尸几率”`:这是你自定义的属性组名称,需要在引擎中预先配置好。
* `“+”`:表示操作符为增加。
* `“203#” .. specifyTargetRate`:这是属性的具体内容。`203` 是“打怪爆率”的属性ID,`specifyTargetRate` 是你从 `getbaseinfo` 获取到的数值。这个字符串表示“增加 203号属性(打怪爆率) `specifyTargetRate` 点”。
3. **关于 `recalcabilitys` 函数**:在修改了角色的属性列表(`addattlist`)之后,**必须**调用 `recalcabilitys(actor)` 来通知引擎重新计算角色的所有属性,这样刚才添加的“鞭尸几率”才会真正生效。你这里做得很好。
**总结一下你的代码逻辑**:
> 将角色自身的“指定目标爆率”属性值,等额地附加到“鞭尸几率”这个自定义属性上,从而实现在杀死特定目标(怪物)时,有额外几率触发再次掉落。
**一个重要的提醒**:
“鞭尸”功能通常需要配合 **QF触发文件**(比如 `@killmon` 怪物死亡触发)来使用。仅仅在属性上增加了“鞭尸几率”,还需要在怪物死亡时,有相应的脚本逻辑去判断这个几率并执行再次掉落物品的操作。你的这段代码只是完成了“属性添加”的部分。
如果你想让这个属性在特定条件下(比如穿戴某件装备、获得某个BUFF时)才生效,记得在条件消失时,使用 `delattlist(actor, “鞭尸几率”)` 来移除这个属性组,并再次调用 `recalcabilitys(actor)`。
希望这个解释对你有帮助!如果对属性ID或者 `getbaseinfo` 的具体类型有疑问,可以再问我。
我是lua后端老师!
小仙,你这段代码是想要实现“鞭尸几率”的功能,看起来你对属性的添加流程已经有所了解了,让我来帮你梳理和解释一下。
首先,你的代码思路是:当调用 `diyattribute.corpseWhippingChance` 这个函数时,它会去获取角色一个特定的属性值(ID为242的“指定目标爆率”),如果这个值大于0,就把它加到“鞭尸几率”这个自定义属性组里,然后重新计算角色属性。
这里有几个关键点需要明确:
1. **关于 `getbaseinfo` 函数**:根据你的注释 `241为(指定目标)爆率id`,你使用 `getbaseinfo(actor, 51, 242)` 来获取这个值。这里需要确认一下,`getbaseinfo` 函数的第二个参数 `51` 是否确实是获取“指定目标爆率”这类属性的正确类型ID。这个需要查阅引擎的详细文档来确认,确保你获取的是正确的数值。如果类型不对,获取的值将是0或错误的值。
2. **关于 `addattlist` 函数**:这个函数用于向一个自定义属性组添加属性。你这里的用法 `addattlist(actor, “鞭尸几率”, “+”, “203#” .. specifyTargetRate)` 是正确的。
* `“鞭尸几率”`:这是你自定义的属性组名称,需要在引擎中预先配置好。
* `“+”`:表示操作符为增加。
* `“203#” .. specifyTargetRate`:这是属性的具体内容。`203` 是“打怪爆率”的属性ID,`specifyTargetRate` 是你从 `getbaseinfo` 获取到的数值。这个字符串表示“增加 203号属性(打怪爆率) `specifyTargetRate` 点”。
3. **关于 `recalcabilitys` 函数**:在修改了角色的属性列表(`addattlist`)之后,**必须**调用 `recalcabilitys(actor)` 来通知引擎重新计算角色的所有属性,这样刚才添加的“鞭尸几率”才会真正生效。你这里做得很好。
**总结一下你的代码逻辑**:
> 将角色自身的“指定目标爆率”属性值,等额地附加到“鞭尸几率”这个自定义属性上,从而实现在杀死特定目标(怪物)时,有额外几率触发再次掉落。
**一个重要的提醒**:
“鞭尸”功能通常需要配合 **QF触发文件**(比如 `@killmon` 怪物死亡触发)来使用。仅仅在属性上增加了“鞭尸几率”,还需要在怪物死亡时,有相应的脚本逻辑去判断这个几率并执行再次掉落物品的操作。你的这段代码只是完成了“属性添加”的部分。
如果你想让这个属性在特定条件下(比如穿戴某件装备、获得某个BUFF时)才生效,记得在条件消失时,使用 `delattlist(actor, “鞭尸几率”)` 来移除这个属性组,并再次调用 `recalcabilitys(actor)`。
希望这个解释对你有帮助!如果对属性ID或者 `getbaseinfo` 的具体类型有疑问,可以再问我。
← 返回问答库