本节中,我们先实现1-4。理论上,我们可以直接FreeObject、DoHarmToMajor、CreateObjectByReference一套带走,最后为爆炸效果做一个手动动画;不过,奥汀已经预先编写了一些函数,可以简化我们的代码。
我们将用到以下系统函数:
void SetObjectFadeOut (int objectHandle, int fraction, int frames);
该函数用于为物件创建淡出效果,初始为100%的不透明度,然后每过frames Tick,不透明度下降100%的fraction分之一。待完全淡出后,自动将物件销毁。该函数不会阻断脚本的运行,调用该函数后,照常直接执行下面的代码,不会等待淡出结束。在这里,我们希望在2 Tick之内将箭支彻底淡出掉,因此我们可以使用:
SetObjectFadeOut(arrow, 2, 1);
亦即每1 Tick将不透明度下调1/2。
紧接着,我们将对主将造成伤害。我们直接调用magic点cpp里预置的Hurt函数,它同时完成三个功能,即造成伤害、清除物件打击主将标记,以及播放击中的音效:
void Hurt (int object, int targetMajor, int attackValue);
该函数的含义是,使用武将技物件object打击主将targetMajor,造成attackValue点伤害。因此我们可以直接写下:
Hurt(arrow, intvDefenderMajor, intvMagicAttackValue / 3);
最后,我们希望创建击中的“爆炸效果”。这一部分我们可以直接调用预置的HitGenereal函数。它的定义如下:
void HitGeneral (int magicObject, int target, int effectSequence, int ballType, int zOffset, int delayTime);
这个函数有6个参数。其中,第一、第二个参数表示造成伤害的物件和被击中的主将;第三个参数effectSequence表示爆炸效果物件在Things点ini中的原型的sequence,该函数会自动创建多个这样的爆炸效果物件;第四个参数ballType表示以何种方式创建爆炸产生的“小光球”(见下图中橙黄色的碎屑),填1、2、3分别表示三种不同的方式,填0则表示不创建“小光球”。第五个参数zOffset表示爆炸效果距地面的高度。最后一个参数是爆炸效果拖延的“时间”,即该效果结束之后多少时间内,新的HitGeneral函数造成的效果无效。

对于我们的需求而言,我们已经定义好了爆炸的绿色特效物件原型(即13102号“毒箭爆炸的光”),并且希望看到飞泻的小碎屑(这样可以反映“击中”的伤害),因此我们只需写下:
HitGeneral(arrow, target, 13102, 1, 60, 0);