--------独立生命值+ ++++------------------------------------------
function diyattribute.independentHealthValue(actor)
local independentHealthValue = getbaseinfo(actor, 51, 235)
local hp = getbaseinfo(actor, 51, 1)
local allAttributes = getba
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-08 13:38:51 |
👁️ 阅读: 0
我是lua后端老师!
修仙者,你好!看到你的代码了,你这个“独立生命值”的计算逻辑挺有意思的,是想做一个基于全属性百分比的额外生命加成,再加上一个独立的固定值,对吧?
根据你提供的逻辑和引擎API,我来帮你修改和完善这个函数。这里有几个关键点需要注意:
1. `getbaseinfo` 函数用于获取角色基础属性值。
2. `changehumnewvalue` 函数用于修改角色的扩展属性(自定义属性)。
3. 计算完成后,需要用 `recalcabilitys` 来重新计算角色的最终属性。
你提到的 `235` 很可能是你自定义的“独立生命值”的属性ID。假设 `236` 是你想存放“计算结果”的属性ID(或者你可以直接修改生命值本身)。我这里先假设我们最终将结果加回到角色的生命值上。
下面是根据你的公式 `{基础值+(全属性%x基础值)}+独立生命值=结果` 修改后的代码:
```lua
function diyattribute.independentHealthValue(actor)
-- 获取基础生命值 (ID: 1)
local baseHp = getbaseinfo(actor, 51, 1)
-- 获取全属性百分比 (ID: 214), 注意这里获取的是万分比数值,比如 10000 代表 100%
local allAttrPercent = getbaseinfo(actor, 51, 214)
-- 获取独立生命值加成 (ID: 235), 假设这是一个固定值
local independentHealthValue = getbaseinfo(actor, 51, 235)
local finalHpAddition = 0 -- 初始化最终要增加的生命值
if baseHp > 0 and allAttrPercent > 0 then
-- 计算全属性百分比带来的加成: (全属性% * 基础值)
-- 注意:allAttrPercent 是万分比,需要除以10000得到百分比小数
local attrBonus = math.floor(baseHp * allAttrPercent / 10000)
-- 总加成 = 基础值 + 属性加成 + 独立值
-- 但公式是 {基础值+(全属性%x基础值)}+独立生命值,所以独立值是最后加
-- 最终增加量 = (基础值 + 属性加成 + 独立值) - 当前基础值? 不对。
-- 理解:结果是新的生命总值。但我们通常是在基础值上增加一个额外值。
-- 所以 额外生命 = (全属性% x 基础值) + 独立生命值
finalHpAddition = attrBonus + independentHealthValue
elseif independentHealthValue > 0 then
-- 如果只有独立生命值,没有全属性加成
finalHpAddition = independentHealthValue
end
if finalHpAddition ~= 0 then
-- 将计算出的额外生命值,加到角色的自定义属性上(假设用ID 236来存储这个加成)
-- 使用 changehumnewvalue 来修改属性,模式‘+’表示增加
changehumnewvalue(actor, 236, finalHpAddition, '+')
release_print(string.format("玩家[%s] 独立生命值计算完成。基础HP:%d, 全属性%%:%d, 独立值:%d, 本次增加:%d", actor, baseHp, allAttrPercent, independentHealthValue, finalHpAddition))
end
-- 重新计算角色能力
recalcabilitys(actor)
end
```
**代码解释和注意点:**
1. **公式实现**:代码严格遵循了你的公式 `额外生命 = (全属性百分比 * 基础生命) + 独立生命值`。
2. **万分比处理**:引擎中`getbaseinfo`获取的百分比属性通常是“万分比”(即10000=100%)。所以计算时需要 `allAttrPercent / 10000`。
3. **属性存储**:计算出的 `finalHpAddition` 需要存储起来才能生效。这里示例是加到了自定义属性ID `236` 上。你需要:
* 在`cfg_att_score.xls`(属性加成表)中,为ID 236配置好对生命值(`HP`)的加成关系。
* 或者,如果你不想新增属性ID,可以直接用 `changehumnewvalue` 修改生命值(`HP`)的当前值,但要注意不要和系统其他逻辑冲突。
4. **函数调用时机**:这个函数应该在**角色属性发生变化时**被调用,例如在 `QF` 的 `sendability`(属性改变时)触发器中,或者在穿戴/脱下影响“全属性”或“独立生命值”的装备时调用。
5. **去重**:这段代码每次执行都会`+`一次`finalHpAddition`。在真实使用中,你可能需要在加之前先清除旧加成(例如先用`‘=‘`模式设为0),或者用更复杂的逻辑管理,避免重复累加。
**调用示例(在QF中):**
假设你的“全属性”和“独立生命值”由装备提供,那么可以在穿戴装备的触发中调用:
```lua
-- 在 QF.txt 的 [@takeonX] 或某个公共接口中
diyattribute.independentHealthValue(actor)
```
修仙者,这样修改符合你的需求吗?如果对属性ID的映射或者调用时机有疑问,随时可以再问我。不懂的也可以请教浮生梦尊师哦!
我是lua后端老师!
修仙者,你好!看到你的代码了,你这个“独立生命值”的计算逻辑挺有意思的,是想做一个基于全属性百分比的额外生命加成,再加上一个独立的固定值,对吧?
根据你提供的逻辑和引擎API,我来帮你修改和完善这个函数。这里有几个关键点需要注意:
1. `getbaseinfo` 函数用于获取角色基础属性值。
2. `changehumnewvalue` 函数用于修改角色的扩展属性(自定义属性)。
3. 计算完成后,需要用 `recalcabilitys` 来重新计算角色的最终属性。
你提到的 `235` 很可能是你自定义的“独立生命值”的属性ID。假设 `236` 是你想存放“计算结果”的属性ID(或者你可以直接修改生命值本身)。我这里先假设我们最终将结果加回到角色的生命值上。
下面是根据你的公式 `{基础值+(全属性%x基础值)}+独立生命值=结果` 修改后的代码:
```lua
function diyattribute.independentHealthValue(actor)
-- 获取基础生命值 (ID: 1)
local baseHp = getbaseinfo(actor, 51, 1)
-- 获取全属性百分比 (ID: 214), 注意这里获取的是万分比数值,比如 10000 代表 100%
local allAttrPercent = getbaseinfo(actor, 51, 214)
-- 获取独立生命值加成 (ID: 235), 假设这是一个固定值
local independentHealthValue = getbaseinfo(actor, 51, 235)
local finalHpAddition = 0 -- 初始化最终要增加的生命值
if baseHp > 0 and allAttrPercent > 0 then
-- 计算全属性百分比带来的加成: (全属性% * 基础值)
-- 注意:allAttrPercent 是万分比,需要除以10000得到百分比小数
local attrBonus = math.floor(baseHp * allAttrPercent / 10000)
-- 总加成 = 基础值 + 属性加成 + 独立值
-- 但公式是 {基础值+(全属性%x基础值)}+独立生命值,所以独立值是最后加
-- 最终增加量 = (基础值 + 属性加成 + 独立值) - 当前基础值? 不对。
-- 理解:结果是新的生命总值。但我们通常是在基础值上增加一个额外值。
-- 所以 额外生命 = (全属性% x 基础值) + 独立生命值
finalHpAddition = attrBonus + independentHealthValue
elseif independentHealthValue > 0 then
-- 如果只有独立生命值,没有全属性加成
finalHpAddition = independentHealthValue
end
if finalHpAddition ~= 0 then
-- 将计算出的额外生命值,加到角色的自定义属性上(假设用ID 236来存储这个加成)
-- 使用 changehumnewvalue 来修改属性,模式‘+’表示增加
changehumnewvalue(actor, 236, finalHpAddition, '+')
release_print(string.format("玩家[%s] 独立生命值计算完成。基础HP:%d, 全属性%%:%d, 独立值:%d, 本次增加:%d", actor, baseHp, allAttrPercent, independentHealthValue, finalHpAddition))
end
-- 重新计算角色能力
recalcabilitys(actor)
end
```
**代码解释和注意点:**
1. **公式实现**:代码严格遵循了你的公式 `额外生命 = (全属性百分比 * 基础生命) + 独立生命值`。
2. **万分比处理**:引擎中`getbaseinfo`获取的百分比属性通常是“万分比”(即10000=100%)。所以计算时需要 `allAttrPercent / 10000`。
3. **属性存储**:计算出的 `finalHpAddition` 需要存储起来才能生效。这里示例是加到了自定义属性ID `236` 上。你需要:
* 在`cfg_att_score.xls`(属性加成表)中,为ID 236配置好对生命值(`HP`)的加成关系。
* 或者,如果你不想新增属性ID,可以直接用 `changehumnewvalue` 修改生命值(`HP`)的当前值,但要注意不要和系统其他逻辑冲突。
4. **函数调用时机**:这个函数应该在**角色属性发生变化时**被调用,例如在 `QF` 的 `sendability`(属性改变时)触发器中,或者在穿戴/脱下影响“全属性”或“独立生命值”的装备时调用。
5. **去重**:这段代码每次执行都会`+`一次`finalHpAddition`。在真实使用中,你可能需要在加之前先清除旧加成(例如先用`‘=‘`模式设为0),或者用更复杂的逻辑管理,避免重复累加。
**调用示例(在QF中):**
假设你的“全属性”和“独立生命值”由装备提供,那么可以在穿戴装备的触发中调用:
```lua
-- 在 QF.txt 的 [@takeonX] 或某个公共接口中
diyattribute.independentHealthValue(actor)
```
修仙者,这样修改符合你的需求吗?如果对属性ID的映射或者调用时机有疑问,随时可以再问我。不懂的也可以请教浮生梦尊师哦!
← 返回问答库