function diyattribute.allAttributes(actor)
local butes = getbaseinfo(actor, 51, 214)
local attackTheDemonPath = getbaseinfo(actor, 51, 203)
local physicalDefense = getbaseinfo(actor, 51, 233)
local basicAttackPower = getbaseinfo(actor
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-08 13:32:04 |
👁️ 阅读: 0
我是lua后端老师!
小仙,我看你的代码是想实现“全属性加成百分比”的功能,思路是有了,但写法上需要调整。我来帮你修改一下,让它能正确运行。
首先,你的代码里有一个变量 `bonusPercent` 没有定义,我猜你是想用 `butes` 这个变量(也就是从 `getbaseinfo` 获取的百分比值)来作为加成百分比。
其次,`addattlist` 函数的最后一个参数 `type` 是可选的,但根据你的需求(增加百分比属性),我们需要使用 `type=1` 来增加固定值,避免循环计算。
最后,属性字符串的拼接语法需要修正。
修改后的代码如下:
```lua
function diyattribute.allAttributes(actor)
-- 获取全属性加成百分比
local bonusPercent = getbaseinfo(actor, 51, 214)
-- 获取攻魔道基础值
local attackTheDemonPath = getbaseinfo(actor, 51, 203)
-- 获取物理防御基础值
local physicalDefense = getbaseinfo(actor, 51, 233)
-- 获取魔法防御基础值
local basicAttackPower = getbaseinfo(actor, 51, 234)
-- 如果加成百分比大于0,则计算加成
if bonusPercent > 0 then
-- 计算攻魔道的加成值
local addValue = math.floor(attackTheDemonPath * bonusPercent / 100)
-- 计算物理防御的加成值
local addValue1 = math.floor(physicalDefense * bonusPercent / 100)
-- 计算魔法防御的加成值
local addValue2 = math.floor(basicAttackPower * bonusPercent / 100)
-- 构建属性字符串并添加属性
-- 注意:这里使用 type=1 表示增加固定值,不参与百分比循环计算
addattlist(actor, "全属性", "+", "3#2#"..addValue.."|3#233#"..addValue1.."|3#234#"..addValue2, 1)
end
-- 重新计算角色属性
recalcabilitys(actor)
end
```
**修改说明:**
1. **变量修正**:将未定义的 `bonusPercent` 替换为从 `getbaseinfo` 正确获取的 `bonusPercent` 变量。
2. **属性字符串拼接**:修正了字符串连接语法,使用 `..` 运算符正确连接各部分。
3. **`addattlist` 参数**:补充了 `type` 参数为 `1`,这很重要!它确保我们添加的是计算后的固定数值,而不是一个会再次参与百分比计算的属性描述,避免了属性无限叠加的BUG。
4. **注释增强**:添加了详细的注释,说明每个步骤的作用,方便你和其他开发者理解。
**使用建议:**
* **时机**:这个函数应该在角色属性发生变化时调用,比如穿戴装备、升级、使用丹药后。
* **清理**:如果你多次调用这个函数,记得在重新计算前,先使用 `delattlist(actor, "全属性")` 清除旧的加成,再添加新的,否则属性会重复累加。
* **测试**:修改后,务必在游戏内测试一下,穿上带“全属性+10%”的装备,看看属性面板是否正确增加了。
如果还有不明白的,随时问我,或者去请教我师傅浮生梦尊师!
我是lua后端老师!
小仙,我看你的代码是想实现“全属性加成百分比”的功能,思路是有了,但写法上需要调整。我来帮你修改一下,让它能正确运行。
首先,你的代码里有一个变量 `bonusPercent` 没有定义,我猜你是想用 `butes` 这个变量(也就是从 `getbaseinfo` 获取的百分比值)来作为加成百分比。
其次,`addattlist` 函数的最后一个参数 `type` 是可选的,但根据你的需求(增加百分比属性),我们需要使用 `type=1` 来增加固定值,避免循环计算。
最后,属性字符串的拼接语法需要修正。
修改后的代码如下:
```lua
function diyattribute.allAttributes(actor)
-- 获取全属性加成百分比
local bonusPercent = getbaseinfo(actor, 51, 214)
-- 获取攻魔道基础值
local attackTheDemonPath = getbaseinfo(actor, 51, 203)
-- 获取物理防御基础值
local physicalDefense = getbaseinfo(actor, 51, 233)
-- 获取魔法防御基础值
local basicAttackPower = getbaseinfo(actor, 51, 234)
-- 如果加成百分比大于0,则计算加成
if bonusPercent > 0 then
-- 计算攻魔道的加成值
local addValue = math.floor(attackTheDemonPath * bonusPercent / 100)
-- 计算物理防御的加成值
local addValue1 = math.floor(physicalDefense * bonusPercent / 100)
-- 计算魔法防御的加成值
local addValue2 = math.floor(basicAttackPower * bonusPercent / 100)
-- 构建属性字符串并添加属性
-- 注意:这里使用 type=1 表示增加固定值,不参与百分比循环计算
addattlist(actor, "全属性", "+", "3#2#"..addValue.."|3#233#"..addValue1.."|3#234#"..addValue2, 1)
end
-- 重新计算角色属性
recalcabilitys(actor)
end
```
**修改说明:**
1. **变量修正**:将未定义的 `bonusPercent` 替换为从 `getbaseinfo` 正确获取的 `bonusPercent` 变量。
2. **属性字符串拼接**:修正了字符串连接语法,使用 `..` 运算符正确连接各部分。
3. **`addattlist` 参数**:补充了 `type` 参数为 `1`,这很重要!它确保我们添加的是计算后的固定数值,而不是一个会再次参与百分比计算的属性描述,避免了属性无限叠加的BUG。
4. **注释增强**:添加了详细的注释,说明每个步骤的作用,方便你和其他开发者理解。
**使用建议:**
* **时机**:这个函数应该在角色属性发生变化时调用,比如穿戴装备、升级、使用丹药后。
* **清理**:如果你多次调用这个函数,记得在重新计算前,先使用 `delattlist(actor, "全属性")` 清除旧的加成,再添加新的,否则属性会重复累加。
* **测试**:修改后,务必在游戏内测试一下,穿上带“全属性+10%”的装备,看看属性面板是否正确增加了。
如果还有不明白的,随时问我,或者去请教我师傅浮生梦尊师!
← 返回问答库