--------全属性+% ++++------------------------------------------
function diyattribute.allAttributes(actor)
local butes = getbaseinfo(actor, 51, 214)
local attackTheDemonPath = getbaseinfo(actor, 51, 203)
local physicalDefense = getbaseinfo(
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-08 13:33:05 |
👁️ 阅读: 0
哈喽,我是Lua后端老师!小仙,你的代码思路基本正确,但是有几个地方需要调整,让咱们来优化一下。
首先,你提到的`addattlist`函数格式有点问题。这个函数是用来添加一组属性加成的,格式应该是`属性组名称|属性1|属性2...`,每个属性内部用`#`分隔。你的写法里管道符`|`的位置和字符串拼接需要修正。
其次,`攻魔道`(203)这个属性ID是一个复合属性,代表攻击、魔法、道术的下限和上限。`物理防御`(233)和`魔法防御`(234)也是复合属性。直接对它们进行百分比加成是没问题的。
根据你的需求,修改后的函数如下:
```lua
function diyattribute.allAttributes(actor)
-- 获取玩家的“全属性”百分比值
local allAttrPercent = getbaseinfo(actor, 51, 214)
-- 获取玩家当前的攻魔道属性值
local attackMagicTao = getbaseinfo(actor, 51, 203)
-- 获取玩家当前的物理防御属性值
local physicalDef = getbaseinfo(actor, 51, 233)
-- 获取玩家当前的魔法防御属性值
local magicDef = getbaseinfo(actor, 51, 234)
-- 如果全属性百分比大于0,则进行计算和加成
if allAttrPercent > 0 then
-- 计算攻魔道应增加的数值(向下取整)
local addAttackMagicTao = math.floor(attackMagicTao * allAttrPercent / 100)
-- 计算物理防御应增加的数值
local addPhysicalDef = math.floor(physicalDef * allAttrPercent / 100)
-- 计算魔法防御应增加的数值
local addMagicDef = math.floor(magicDef * allAttrPercent / 100)
-- 使用addattlist添加属性加成列表
-- 格式:属性组名称|属性类型#属性ID#加成值|属性类型#属性ID#加成值...
-- 属性类型3代表对基础属性进行加成
local attrListStr = "全属性加成|3#203#" .. addAttackMagicTao .. "|3#233#" .. addPhysicalDef .. "|3#234#" .. addMagicDef
addattlist(actor, "全属性", attrListStr)
end
-- 重新计算玩家属性,使加成生效
recalcabilitys(actor)
end
```
**修改点说明:**
1. **变量命名**:我把变量名改得更易懂了一些,比如`butes`改成`allAttrPercent`,这样一眼就知道是“全属性百分比”。
2. **`addattlist`参数修正**:第二个参数是属性组的索引名(比如你这里用的`"全属性"`),第三个参数是一个完整的属性列表字符串。我按照`属性组显示名|属性1|属性2...`的格式重新拼接了。
3. **字符串拼接**:使用`..`运算符正确连接了字符串和变量。
**使用建议:**
* 这个函数应该在角色属性发生变化时调用,比如穿上装备、升级后,或者在`sendability`(属性改变时触发)这个QF事件里调用,确保加成实时更新。
* `addattlist`添加的属性加成是叠加的,如果你多次调用,需要先清理旧的加成,或者确保逻辑上不会重复添加。
小仙,如果还有哪里不明白,或者运行起来有问题,随时再来问我!跟着浮生梦尊师和我的指引,你一定能修炼成后端高手的!
哈喽,我是Lua后端老师!小仙,你的代码思路基本正确,但是有几个地方需要调整,让咱们来优化一下。
首先,你提到的`addattlist`函数格式有点问题。这个函数是用来添加一组属性加成的,格式应该是`属性组名称|属性1|属性2...`,每个属性内部用`#`分隔。你的写法里管道符`|`的位置和字符串拼接需要修正。
其次,`攻魔道`(203)这个属性ID是一个复合属性,代表攻击、魔法、道术的下限和上限。`物理防御`(233)和`魔法防御`(234)也是复合属性。直接对它们进行百分比加成是没问题的。
根据你的需求,修改后的函数如下:
```lua
function diyattribute.allAttributes(actor)
-- 获取玩家的“全属性”百分比值
local allAttrPercent = getbaseinfo(actor, 51, 214)
-- 获取玩家当前的攻魔道属性值
local attackMagicTao = getbaseinfo(actor, 51, 203)
-- 获取玩家当前的物理防御属性值
local physicalDef = getbaseinfo(actor, 51, 233)
-- 获取玩家当前的魔法防御属性值
local magicDef = getbaseinfo(actor, 51, 234)
-- 如果全属性百分比大于0,则进行计算和加成
if allAttrPercent > 0 then
-- 计算攻魔道应增加的数值(向下取整)
local addAttackMagicTao = math.floor(attackMagicTao * allAttrPercent / 100)
-- 计算物理防御应增加的数值
local addPhysicalDef = math.floor(physicalDef * allAttrPercent / 100)
-- 计算魔法防御应增加的数值
local addMagicDef = math.floor(magicDef * allAttrPercent / 100)
-- 使用addattlist添加属性加成列表
-- 格式:属性组名称|属性类型#属性ID#加成值|属性类型#属性ID#加成值...
-- 属性类型3代表对基础属性进行加成
local attrListStr = "全属性加成|3#203#" .. addAttackMagicTao .. "|3#233#" .. addPhysicalDef .. "|3#234#" .. addMagicDef
addattlist(actor, "全属性", attrListStr)
end
-- 重新计算玩家属性,使加成生效
recalcabilitys(actor)
end
```
**修改点说明:**
1. **变量命名**:我把变量名改得更易懂了一些,比如`butes`改成`allAttrPercent`,这样一眼就知道是“全属性百分比”。
2. **`addattlist`参数修正**:第二个参数是属性组的索引名(比如你这里用的`"全属性"`),第三个参数是一个完整的属性列表字符串。我按照`属性组显示名|属性1|属性2...`的格式重新拼接了。
3. **字符串拼接**:使用`..`运算符正确连接了字符串和变量。
**使用建议:**
* 这个函数应该在角色属性发生变化时调用,比如穿上装备、升级后,或者在`sendability`(属性改变时触发)这个QF事件里调用,确保加成实时更新。
* `addattlist`添加的属性加成是叠加的,如果你多次调用,需要先清理旧的加成,或者确保逻辑上不会重复添加。
小仙,如果还有哪里不明白,或者运行起来有问题,随时再来问我!跟着浮生梦尊师和我的指引,你一定能修炼成后端高手的!
← 返回问答库