Skip to content

装备归属与找回 GOW-Next 专用接口 ​

使用约定 ​

本页接口均为 TPlayer 方法,通过 This_Player.ItemRecovery_* 调用,不需要另传玩家参数。

本组接口登记装备的找回归属,与普通绑定、禁止交易、死亡不掉落等标记独立。仅支持主号登记非堆叠装备;ClientItemID 必须来自该主号当前背包或身上装备。

绑定保存当时的完整装备实例。绑定时攻击加点为 30,后来强化到 35,找回仍恢复 30;幸运、耐久及自定义附加属性同样取绑定时的值。物品数据库模板本身不会被冻结。

绑定期间可反复找回,不限于死亡掉落。旧件被交易、回收、销毁或存仓库不会自动解绑。找回生成新件,旧件在持有人上线、周期检查或仓库打开等入口清理,英雄也会清理;不保证立即从所有位置消失,不追回清理前的收益。

找回成功后还会通知清理地面上的旧件。清理并非全服同步完成,通知处理后才被丢到地上的旧件不保证立即消失;地面清理通知失败不影响本次找回。

物品白名单、数量、收费、作为升级材料的限制由脚本决定。引擎不负责扣费或退款。异常停服可能产生回档或登记与实物不一致,不提供自动补发、补偿。

RegistrationId 由引擎自动生成,是正 Int64 登记编号,可用 SetB/GetB 保存;与实物 UID 不同。同一主号可登记多件装备,包括同名装备,不需要脚本生成编号或维护登记位。解除后重新登记会生成新编号;Revision 是版本号,找回成功后递增。

通用返回值 ​

六个方法均返回 Integer。仅 1 表示成功;业务失败时 var 输出清空或归零。玩家句柄失效、调用参数类型错误等仍按脚本运行错误处理。

值含义
1成功
0没有有效登记
-1参数错误
-2服务或数据库暂不可用
-3登记冲突,或登记编号/版本已变化
-4登记或快照数据损坏
-5查询的实物已过期
-6物品无效、不支持绑定,或原模板不可用
-7背包已满
-8暂时无法分配新物品身份
-9登记已更新,但本次交付失败
-10数据库提交结果未确认

收到 -9 或 -10 不要循环重试或自行补发装备。先重新查询登记并提示管理员检查,避免把未确认结果当作“完全没发生”。

查询实物归属 ​

pascal
function ItemRecovery_Query(ClientItemID: Integer;
  var RegistrationId: Int64; var OwnerArea: Integer; var OwnerId: Int64;
  var Revision: Int64): Integer;

用途: 查询玩家当前可访问的实物是否已登记或过期。成功时返回原登记人的区域和角色编号、登记编号及版本;当前持有人不一定是登记人。0 表示未登记,-5 表示旧件已过期。

查询自己的登记 ​

pascal
function ItemRecovery_Get(const RegistrationId: Int64;
  var Revision: Int64; var ItemIndex: Integer; var ItemName: string): Integer;

用途: 按编号读取该主号的有效登记,不要求实物仍在身上。ItemIndex 返回快照模板编号,ItemName 返回当前模板名称;模板已删除时名称为空。其他角色的编号、已解除或不存在的登记返回 0。

遍历自己的登记 ​

pascal
function ItemRecovery_Next(const AfterRegistrationId: Int64;
  var RegistrationId: Int64; var Revision: Int64;
  var ItemIndex: Integer; var ItemName: string): Integer;

用途: 按登记编号顺序返回当前主号的下一条有效登记,用于列表和分页菜单。首次传 0,后续传上次返回的编号。返回 0 表示没有更多记录,其他非 1 返回值表示失败。不要用列表行号代替登记编号。

pascal
Cursor := 0;
Code := This_Player.ItemRecovery_Next(Cursor, RegId, Rev, ItemIndex, ItemName);
while Code = 1 do
begin
  { 将 RegId、Rev、ItemName 加入菜单;分页时限制每页条数 }
  Cursor := RegId;
  Code := This_Player.ItemRecovery_Next(Cursor, RegId, Rev, ItemIndex, ItemName);
end;

列表反映每次调用时的有效登记,不是冻结快照。操作后可从第一页刷新;游标对应记录已解除时仍可继续读取后续记录。

绑定当前装备 ​

pascal
function ItemRecovery_Register(ClientItemID: Integer;
  var RegistrationId: Int64; var Revision: Int64): Integer;

用途: 将指定装备登记给该主号,并保存绑定快照。不会修改装备本身;已登记的物品或已经过期的旧件不能再次绑定。

pascal
Code := This_Player.ItemRecovery_Register(SelectedClientItemID, RegId, Rev);

SelectedClientItemID 来自版本已有的选物或提交物品界面,不是物品模板编号。

解除登记 ​

pascal
function ItemRecovery_Unregister(const RegistrationId: Int64;
  ExpectedRevision: Int64): Integer;

用途: 解除该主号的有效登记。无需找出当前实物,不删除当前有效件,也不复活此前已过期的旧件。登记编号和版本须与当前登记一致。

找回绑定快照 ​

pascal
function ItemRecovery_Recover(const RegistrationId: Int64;
  ExpectedRevision: Int64; var NewClientItemID: Integer; var NewRevision: Int64): Integer;

用途: 为该主号恢复绑定快照,将新件放入背包。成功时返回新件的 ClientItemID 和新版本;上一个有效件进入过期清理范围。即使有效件仍在本人背包或身上,也不会因此禁止找回。

最小示例(RegId 来自登记列表;变量类型:ItemName: string,RegId, Rev, NewRev: Int64,其余为 Integer):

pascal
Code := This_Player.ItemRecovery_Get(RegId, Rev, ItemIndex, ItemName);
if Code = 1 then
begin
  Code := This_Player.ItemRecovery_Recover(RegId, Rev, NewItemID, NewRev);
  if Code = 1 then
    This_Player.PlayerNotice('装备已找回。', 2);
end;

有确认界面的版本,应保留展示时取得的登记编号与版本,确认时传回;遇到 -3 重新展示,不自动改用新版本再次执行。收费流程由版本自行安排。

兼容状态: GOW-Next 原生扩展;不等同于眼神 BindFuc,也不会读取其历史绑定记录。

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