--------本源之力+------------------------------------------
function diyattribute.sourcePower(actor)
-- 获取各项基础数值
local knifeCutting = getbaseinfo(actor, 51, 215)
local cuttingRatio = getbaseinfo(actor, 51, 218)
local sourceMagn
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-08 16:13:27 |
👁️ 阅读: 0
我是lua后端老师!
修仙者,看到你写的这个"本源之力"函数了,让我来帮你分析一下。这个函数想要实现一个复合属性的计算,但里面有几个地方需要调整和完善。
首先,你函数开头获取的几个基础数值(比如 `knifeCutting`, `cuttingRatio` 等),在后面的计算中并没有使用到,而实际计算用的变量(如 `playatt`, `allAttrPercent`, `independentAttackPower`, `finalAttackPower`)却没有定义和获取。这会导致计算错误。
根据你的需求描述"刀刀切割*切割倍数%+刀刀切割)*本源倍率(10%)+本源切割=本源之力",我来帮你重新封装一个正确的函数:
```lua
-- 计算并添加本源之力属性
function diyattribute.sourcePower(actor)
-- 获取各项基础数值(这里假设你的属性ID是正确的)
local knifeCutting = getbaseinfo(actor, 51, 215) -- 刀刀切割
local cuttingRatio = getbaseinfo(actor, 51, 218) -- 切割倍数(百分比值)
local sourceMagnification = getbaseinfo(actor, 51, 244) -- 本源倍率(百分比值)
local sourceCutting = getbaseinfo(actor, 51, 245) -- 本源切割
-- 计算本源之力:(刀刀切割 * 切割倍数% + 刀刀切割) * 本源倍率 + 本源切割
local baseValue = knifeCutting * (cuttingRatio / 100) + knifeCutting
local sourcePowerValue = baseValue * (sourceMagnification / 100) + sourceCutting
-- 将计算结果四舍五入取整
sourcePowerValue = math.floor(sourcePowerValue + 0.5)
-- 添加属性到自定义属性组
addattlist(actor, "本源之力", "+", "3#1#" .. sourcePowerValue)
-- 立即推送到客户端
sendredvartoclient(actor)
-- 重新计算角色属性
recalcabilitys(actor)
-- 打印调试信息(正式环境可注释掉)
release_print(string.format("玩家[%s] 本源之力计算完成:%d", actor, sourcePowerValue))
end
```
**代码说明:**
1. **获取属性**:使用 `getbaseinfo(actor, 类型, 属性ID)` 获取各项基础数值
2. **计算公式**:严格按照你的描述 `(刀刀切割*切割倍数%+刀刀切割)*本源倍率+本源切割` 进行计算
3. **属性添加**:使用 `addattlist` 将计算出的"本源之力"添加到自定义属性组
4. **客户端同步**:使用 `sendredvartoclient` 立即将变量推送到客户端显示
5. **属性重算**:使用 `recalcabilitys` 重新计算角色所有属性
**使用建议:**
1. **触发时机**:这个函数需要在属性发生变化时调用,比如:
- 穿戴/脱下装备时(`takeon`/`takeoff` 触发)
- 使用属性丹药时
- 等级提升时
- 或者其他影响这些基础属性的情况
2. **调试检查**:你可以先打印各个基础值,确认获取的数值是否正确:
```lua
release_print(string.format("刀刀切割:%d, 切割倍数:%d%%, 本源倍率:%d%%, 本源切割:%d",
knifeCutting, cuttingRatio, sourceMagnification, sourceCutting))
```
3. **QF触发**:记得在QF.txt中添加对应的触发,比如在装备穿戴触发中调用:
```
[@takeon]
#act
diyattribute.sourcePower <$USERID>
```
修仙者,这样修改后函数就能正确计算"本源之力"了。如果还有不明白的地方,随时问我,或者请教浮生梦尊师哦!
我是lua后端老师!
修仙者,看到你写的这个"本源之力"函数了,让我来帮你分析一下。这个函数想要实现一个复合属性的计算,但里面有几个地方需要调整和完善。
首先,你函数开头获取的几个基础数值(比如 `knifeCutting`, `cuttingRatio` 等),在后面的计算中并没有使用到,而实际计算用的变量(如 `playatt`, `allAttrPercent`, `independentAttackPower`, `finalAttackPower`)却没有定义和获取。这会导致计算错误。
根据你的需求描述"刀刀切割*切割倍数%+刀刀切割)*本源倍率(10%)+本源切割=本源之力",我来帮你重新封装一个正确的函数:
```lua
-- 计算并添加本源之力属性
function diyattribute.sourcePower(actor)
-- 获取各项基础数值(这里假设你的属性ID是正确的)
local knifeCutting = getbaseinfo(actor, 51, 215) -- 刀刀切割
local cuttingRatio = getbaseinfo(actor, 51, 218) -- 切割倍数(百分比值)
local sourceMagnification = getbaseinfo(actor, 51, 244) -- 本源倍率(百分比值)
local sourceCutting = getbaseinfo(actor, 51, 245) -- 本源切割
-- 计算本源之力:(刀刀切割 * 切割倍数% + 刀刀切割) * 本源倍率 + 本源切割
local baseValue = knifeCutting * (cuttingRatio / 100) + knifeCutting
local sourcePowerValue = baseValue * (sourceMagnification / 100) + sourceCutting
-- 将计算结果四舍五入取整
sourcePowerValue = math.floor(sourcePowerValue + 0.5)
-- 添加属性到自定义属性组
addattlist(actor, "本源之力", "+", "3#1#" .. sourcePowerValue)
-- 立即推送到客户端
sendredvartoclient(actor)
-- 重新计算角色属性
recalcabilitys(actor)
-- 打印调试信息(正式环境可注释掉)
release_print(string.format("玩家[%s] 本源之力计算完成:%d", actor, sourcePowerValue))
end
```
**代码说明:**
1. **获取属性**:使用 `getbaseinfo(actor, 类型, 属性ID)` 获取各项基础数值
2. **计算公式**:严格按照你的描述 `(刀刀切割*切割倍数%+刀刀切割)*本源倍率+本源切割` 进行计算
3. **属性添加**:使用 `addattlist` 将计算出的"本源之力"添加到自定义属性组
4. **客户端同步**:使用 `sendredvartoclient` 立即将变量推送到客户端显示
5. **属性重算**:使用 `recalcabilitys` 重新计算角色所有属性
**使用建议:**
1. **触发时机**:这个函数需要在属性发生变化时调用,比如:
- 穿戴/脱下装备时(`takeon`/`takeoff` 触发)
- 使用属性丹药时
- 等级提升时
- 或者其他影响这些基础属性的情况
2. **调试检查**:你可以先打印各个基础值,确认获取的数值是否正确:
```lua
release_print(string.format("刀刀切割:%d, 切割倍数:%d%%, 本源倍率:%d%%, 本源切割:%d",
knifeCutting, cuttingRatio, sourceMagnification, sourceCutting))
```
3. **QF触发**:记得在QF.txt中添加对应的触发,比如在装备穿戴触发中调用:
```
[@takeon]
#act
diyattribute.sourcePower <$USERID>
```
修仙者,这样修改后函数就能正确计算"本源之力"了。如果还有不明白的地方,随时问我,或者请教浮生梦尊师哦!
← 返回问答库