RunDrownImpact(int, object)

ウォーターエレメンタルが相手の肺に水を満たし、溺死させることを可能にする。

void RunDrownImpact(
    int nSecondsRemaining,
    object oTarget
);

Parameters

nSecondsRemaining

残り秒数(6の倍数でないと意味がない)

oTarget

水に浸かる生物


Description

この関数は回帰的呼び出しで、この関数自体を呼び出す。

oTargetはラウンドごとに頑健セービングスローを行い、セービングスロー失敗の場合、呼び出し人のレベル、4レベルごとに1〜4のダメージが与えられる。



Remarks

この関数はSoUを未導入の場合のみ使えます。
SoUではRunDrownImpact関数はDrownと呼ばれる関数に置き換えられています。この効果は単純に溺れた者(頑健セーブに失敗)にEffectDeathを適用するだけです。


nw_s1_pulsdrwn.nss の 17 行目

インクルードファイルではないため、通常の方法では使用できないが、コピーして使うことができる。

バグがあるため、nw_s1_pulsdrwnのスクリプトを使ったほうがいい。


Known Bugs

テストすると、非常に不完全な作りということがわかる。

実際の流れは以下のようになる。

1、nSecondsRemaining÷6の余りが0の場合はダメージを与える。

2、余りが0以外の時はnSecondsRemainingに0がセットされる。

3、nSecondsRemainingから1引かれる。

4、nSecondsRemainingが1より大きい場合、1秒ディレイして、この関数自身を呼び出す。

5、1以下なら終了

テスト

nSecondsRemainingが6、12、18・・・など6の倍数の場合

 ・6で割った余りが0のため、1回ダメージを与える

 ・nSecondsRemainingがマイナスされ、5、11、17・・・になる。

 ・2以上のため最初に戻る。

 ・6で割った余りが5になるため、nSecondsRemainingは0になる。

 ・nSecondsRemainingがマイナスされ-1になる。

 ・1以下なので終了

nSecondsRemainingが1、2、3、4、5、7、8、9・・・など6の倍数以外の場合

 ・6で割った余りが0でないので、nSecondsRemainingは0になる。

 ・nSecondsRemainingがマイナスされ-1になる。

 ・1以下なので終了

結果:どんな数を指定しても2回目のダメージは存在しない。


Version

1.28

Example

void RunDrownImpact(int nSecondsRemaining, object oTarget)
{
    int nCount = GetHitDice(OBJECT_SELF) + 10;
    int nDice = nCount/4;
    if (GetIsDead(oTarget) == FALSE)
    {
       if (nSecondsRemaining % 6 == 0)
       {
            if(!MySavingThrow(SAVING_THROW_FORT, oTarget, nCount))
            {
                // ダメージを算出
                int nDamage = d4(nDice);
                // メタマジックを調べる
                effect eDam = EffectDamage(nDamage);
                effect eVis = EffectVisualEffect(VFX_IMP_POISON_S);
                ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
                ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
            }
// ここはコメントアウトしている方がよい
    /*        else
            {
                nSecondsRemaining = 0;
            }  */
       }
       --nSecondsRemaining;
       if (nSecondsRemaining > 0)
       {
          DelayCommand(1.0f,RunDrownImpact(nSecondsRemaining,oTarget));
       }
   }
}

See Also

categories: Effects Functions | Private Functions Functions | Spell Casting Effects Functions


author: Lilac Soul, additional contributor(s): Lilac Soul, JP team: geshi, ngtaicho
Send comments on this topic.