外观
角色 Attr 属性
属性来源、计算关系及 ID 表见统一 Attr 属性体系。
本页记录角色 Attr 属性的永久和临时加成函数。函数读写的是加成值;最终属性仍通过 This_Player.MaxHP、This_Player.DC、This_Player.MaxDC 等既有属性读取。
通用约定
永久与临时加成使用同一组 Attr 属性 ID(AttrId),各自保存,互不覆盖。这里的编号不与 AddPlayerAbil 状态号通用。
设置与生效
Value 允许负值。ID 1–12 在 Int32 数值模式下接受有符号 Int32,在 Int64 模式下接受有符号 Int64;ID 13–19 接受 -65535..65535,ID 20 接受 -32768..32767。已支持的 ID 100 及以上接受有符号 Int32 万分比贡献;具体编号见属性说明。
设置或清除后,调用一次 RefreshAbil 重算并通知客户端;连续修改多项时可最后统一刷新。限时加成到期时引擎会自动重算。
永久加成随角色保存。临时加成每个 ID 只保留一份,死亡和跨图期间继续计时,离线期间暂停剩余期限,未到期的记录随角色保存。这组函数只用于在线主号玩家。
Set 覆盖旧值,不累加;Value=0 等同清除。读取无效 ID 会报脚本参数错误;设置或清除返回 True 表示已受理,参数无效或无法受理时返回 False。
API 列表
| 函数 | 用途 |
|---|---|
| GetPermAttr | 读取永久加成输入 |
| SetPermAttr | 覆盖永久加成输入 |
| ClearPermAttr | 清除永久加成输入 |
| GetTempAttr | 读取当前有效的临时加成输入 |
| SetTempAttr | 覆盖临时加成及期限 |
| ClearTempAttr | 清除临时加成输入 |
读取永久属性加成
用途: 读取指定属性的永久加成输入。
pascal
function GetPermAttr(AttrId: Integer): Int64;参数: AttrId 为Attr 属性 ID 表中的有效编号。返回值: 当前永久加成;未设置返回 0。
pascal
Bonus := This_Player.GetPermAttr(4); // 攻击上限的永久加成设置永久属性加成
用途: 设置指定属性的永久加成。
pascal
function SetPermAttr(AttrId: Integer; Value: Int64): Boolean;参数: AttrId 为Attr 属性 ID 表中的有效编号;Value 遵守本页取值范围。返回值: 是否已受理。
pascal
if This_Player.SetPermAttr(4, 30) then
This_Player.RefreshAbil;清除永久属性加成
用途: 清除指定属性的永久加成,不影响临时加成。
pascal
function ClearPermAttr(AttrId: Integer): Boolean;参数: AttrId 为Attr 属性 ID 表中的有效编号。返回值: 是否已受理;原本没有加成时也可返回 True。
pascal
if This_Player.ClearPermAttr(4) then
This_Player.RefreshAbil;读取临时属性加成
用途: 读取指定属性当前有效的临时加成输入。
pascal
function GetTempAttr(AttrId: Integer): Int64;参数: AttrId 为Attr 属性 ID 表中的有效编号。返回值: 当前临时加成;未设置或已到期返回 0。
pascal
Bonus := This_Player.GetTempAttr(1); // 生命上限的临时加成设置临时属性加成
用途: 设置指定属性的临时加成;再次设置会覆盖旧值并重新计时。
pascal
function SetTempAttr(AttrId: Integer; Value: Int64;
DurationSeconds: Integer): Boolean;参数: AttrId 为Attr 属性 ID 表中的有效编号;Value 遵守本页取值范围;DurationSeconds 为 1..65534 秒。返回值: 是否已受理。
pascal
// 伤害增幅 +50%,持续 60 秒
if This_Player.SetTempAttr(100, 5000, 60) then
This_Player.RefreshAbil;同时设置多项时,最后统一刷新。例如设置 60 秒的必定格挡,每次格挡减伤 25%:
pascal
This_Player.SetTempAttr(106, 10000, 60);
This_Player.SetTempAttr(107, 2500, 60);
This_Player.RefreshAbil;清除临时属性加成
用途: 清除指定属性的临时加成,不影响永久加成。
pascal
function ClearTempAttr(AttrId: Integer): Boolean;参数: AttrId 为Attr 属性 ID 表中的有效编号。返回值: 是否已受理;原本没有加成时也可返回 True。
pascal
if This_Player.ClearTempAttr(1) then
This_Player.RefreshAbil;刷新玩家属性
用途: 重新计算当前玩家属性并发送能力刷新。
pascal
procedure RefreshAbil;参数: 无。返回值: 无。连续修改多项属性后,统一调用一次即可。
pascal
This_Player.SetPermAttr(4, 30);
This_Player.RefreshAbil;对应全局入口为 GN_Player_RefreshAbil。
刷新英雄属性
用途: 重新计算当前玩家的出战英雄属性。
pascal
procedure RefreshHeroAbil;参数: 无。返回值: 无。无出战英雄时报告目标不可用,不自动召唤或加载英雄。
pascal
if GN_ItemAttr_SetEquipped(This_Player, 1, True, 'attr', '4', 30) then
This_Player.RefreshHeroAbil;对应全局入口为 GN_Hero_RefreshAbil。