Skip to content

范围伤害 GOW-Next 专用接口 ​

向指定坐标周围的可攻击目标造成伤害,可附加一种状态,并指定本次伤害的飘字样式。

格式 ​

pascal
procedure InitAreaDamageOptions(var Options: TAreaDamageOptions);
procedure ApplyAreaDamage(Actor: TCreature; X, Y, Range: Integer;
  Damage: Int64; const Options: TAreaDamageOptions);

两者均无返回值。使用前调用 InitAreaDamageOptions,它会清空样式并将整数选项设为 0。

参数 ​

参数说明
Actor伤害来源对象;使用其当前地图和攻击模式,是否使用加成由 UseBonus 控制
X、Y当前地图内的有效中心坐标,不额外限制来源对象与中心的距离
Range方形半径,0..20,包含边界;0 表示同一坐标上的目标
Damage正整数基础伤害,类型为 Int64,不会再次随机基础攻击力
Options下表中的选项记录,枚举字段直接填写整数
Options 字段取值与含义默认值
DamageMode0 物理,1 魔法,2 固定0
UseBonus0 不使用施法者加成,1 使用施法者当前加成;固定伤害不受此选项影响0
TargetType0 全部,1 人物(含英雄、宝宝),2 怪物(不含宝宝)0
MaxTargets0 使用上限 256;否则填写 1..2560
Status0 无,1 麻痹,2 红毒,3 绿毒0
StatusDurationMs状态持续毫秒数,0..65534000;附加状态时必须大于 00
EffectId目标特效编号,0 不播放,否则 1..21474836470
DamageStyle自定义飘字样式名,按 GBK 编码最多 128 字节,不含 NUL;空字符串使用标准样式''

结算规则 ​

  • 排除自身,遵守正常攻击规则;按距中心的距离从近到远选取,同距顺序稳定。达到选中数上限后,免疫、无扣血等情况不会补选。
  • 物理、魔法分别计算目标物防、魔防,并保留目标减伤、格挡、护盾等规则;本接口不进行命中和闪避判定。
  • UseBonus=0 时,不叠加施法者的伤害附加、对不死系加成、暴击、倍攻、伤害增加及额外切割等;UseBonus=1 时使用施法者当前加成。目标侧防御和保护不受此开关影响。此开关只作用于本次范围伤害,不改变触发脚本的原攻击;在攻击触发中调用时,两笔伤害会分别结算和显示。
  • 固定伤害跳过攻防、暴击、普通增减伤和额外切割,保留免疫、魔法盾、护身及现有保命机制。因此固定输入不保证等于实际扣血。
  • 只有主伤害实际扣血,且目标仍存活,才尝试附加状态。切割不计入此条件;致死后回调复活不会补加旧状态。
  • 状态时长向上取整到秒,再受现有抗性调整。例如 1500 毫秒先按 2 秒处理;调整后不在 1..65534 秒内时不附加状态。麻痹、毒的免疫和覆盖规则沿用引擎现有行为;绿毒采用最低有效强度 1,未受其他修正时每跳扣 2 点血。
  • 主伤害扣血后尝试播放 EffectId,不要求附加状态成功。编号对应 skillMagic.json.effectID,沿用技能释放表现。特效发给目标附近可见玩家;客户端缺少施放者时,普通落点和飞行技能可只播放命中特效,依赖施放者位置、朝向或职业专属帧的效果可能跳过。需要配套客户端支持。
  • DamageStyle 只替换主伤害数字,切割、反伤、后续毒伤使用各自表现。客户端缺少该样式或将其禁用时回退标准数字;零伤害不产生自定义飘字。

非法参数会报告脚本错误;没有可攻击目标或实际扣血为零时正常结束。

最小示例 ​

pascal
var Options: TAreaDamageOptions;
begin
  InitAreaDamageOptions(Options);
  Options.DamageMode := 2;
  Options.TargetType := 2;
  Options.Status := 3;
  Options.StatusDurationMs := 1500;
  ApplyAreaDamage(This_Player, 100, 100, 2, 1000, Options);
end;

在当前地图 (100,100) 周围半径 2 的方形内,对可攻击怪物造成固定伤害;实际扣血且仍存活的目标尝试附加 2 秒绿毒,再按其抗性处理。实际使用时将中心替换为玩法需要的有效地图坐标。

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