Skip to content

角色 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。

GOW-Next 引擎开发手册 · 原版 API 兼容列表持续核验中