外观
范围伤害 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 字段 | 取值与含义 | 默认值 |
|---|---|---|
DamageMode | 0 物理,1 魔法,2 固定 | 0 |
UseBonus | 0 不使用施法者加成,1 使用施法者当前加成;固定伤害不受此选项影响 | 0 |
TargetType | 0 全部,1 人物(含英雄、宝宝),2 怪物(不含宝宝) | 0 |
MaxTargets | 0 使用上限 256;否则填写 1..256 | 0 |
Status | 0 无,1 麻痹,2 红毒,3 绿毒 | 0 |
StatusDurationMs | 状态持续毫秒数,0..65534000;附加状态时必须大于 0 | 0 |
EffectId | 目标特效编号,0 不播放,否则 1..2147483647 | 0 |
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 秒绿毒,再按其抗性处理。实际使用时将中心替换为玩法需要的有效地图坐标。