周りのActorを探して何かする

Modを作ろう

プレイヤーの周辺にいるActorを探して何かする実装をまとめます。 目次 クエストを使う方法Questを作るQuestを動かすサンプルスクリプトスペルを使う方法Magic EffectSpell配布の仕方SKSEプラグイ […]

プレイヤーの周辺にいるActorを探して何かする実装をまとめます。

クエストを使う方法

動作が格段に速く、おそらくですが負荷も少ないのでオススメです。

Questを作る

CKでQuestを作ります。Start Game EnabledとRun Onceはオフにしておきます。

Reference Aliasを作ります。Optionalをオンにします。死体も含める場合はAllow Deadもオンにします。Fill TypeはFind Matching Referenceを選び、In Load AreaとClosestをオンにします。

必要であればさらにMatch Conditionsに条件を追加していきます。プレイヤーとの距離であるとか、雇用中のフォロワーであるとかです。

Reference AliasをDuplicateで複製して数を増やします。多くすればそれだけ一度に多く検知できます。

Questを動かす

このQuestをStartさせると、条件に合ったActorがReference Aliasに埋まります。Closestがオンになっているので、Reference Aliasの上から、プレイヤーから近い順に埋まっていきます。

Reference AliasにたいしてGetActorReferenceでActorを取得できます。埋まらなかったReference AliasはNoneが返ってきますので、これで埋まった個数を特定できます。

用が済んだらQuestをStopさせます。

サンプルスクリプト

プレイヤーの周囲にある死体を検知するQuestを作ったときの例です。

Actorを探す (papyrus)

Scriptname hpQuestCorpseScript Extends Quest


Int Function GetCorpseCount()
    Alias[] kAliasList = GetAliases()
    Int i
    Int c

    while i < kAliasList.Length
        if (kAliasList[i] as ReferenceAlias).GetActorReference()
            c += 1
        else
            return c
        endif

        i += 1
    endwhile

    return c
EndFunction


Actor Function GetClosestCorpse()
    return (GetAlias(0) as ReferenceAlias).GetActorReference()
EndFunction

スペルを使う方法

プレイヤーがCloakスペルを使用する方法です。この方法のメリットは、周囲にActorが何人いようが気にせずスペルをばら撒くことができる点です。

周囲のActorにScriptをひたすら配り続ける例を説明します。

Magic Effect

3つ必要になります。

名前CloakDeliverEntry
役割Deliverスペルを周囲にばらまくActorにEntryスペルを配布Actorに持たせたいスペル
フラグNo Hit Event
Painless
Hide in UI
Power Affects Magnitude
No Hit Event
Painless
No Hit Event
Painless
ArchtypeCloakScriptScript
Casting TypeFire and ForgetConcentrationConstant Effect
DeliverySelfAimedSelf
ScriptなしDeliverScriptEntryScript
その他Assoc. ItemにDeliver Spellを指定Conditionに「Entry Spellを持たない」を設定 

Spell

Magic Effectに合わせてSpellも3つ用意します。

Cloak SpellはDeliver SpellをばらまくSpellです。ゲームの中では炎のマントに使われています。炎のマントはダメージを与えるSpellをばらまいているわけです。Magnitudeで配布範囲を決めます。

Deliver SpellはCloak SpellでばらまかれるSpellです。Cast TypeがConcentrationでないとCloak SpellのAssoc. Itemに設定できません。DeliverScriptでは対象のActorにEntry Spellを持たせます。

Entry Spellは対象のActorに付与されるSpellです。

配布の仕方

PlayerがCloak SpellをCastすると周囲のActorにEntry Spellが配布されます。常に配布を続ける場合は、PlayerをQuestのReferenceAliasに入れるなどして、OnUpdateイベントを利用して定期的にCastします。

Cloak SpellのMagic EffectをConstant Effectに、SpellをAbilityにすると、PlayerにCloak Spellを持たせるだけで常時配布を続けるSpell(Ability)になります。便利に思えますが、Deliver SpellのConcentration効果がひたすら周囲のActorに着弾しつづけるため、場合によっては高負荷の原因となります。Magic EffectはFire and Forgetにして、SpellのDurationを0秒にしておけば、Castした直後に1回だけConcentration効果が着弾するだけなので、負荷を最小限に抑えることができます。

SKSEプラグインを使う方法

Papyrus Utilには周囲のActorを配列で取得する関数が用意されています。

Spell Perk Item DistributorというModはSpell、Perk、Itemなどをゲームの起動時に配布できます。このModを使って実装した例としてCold Region Behavior - Beta Testがあります。

タイトルとURLをコピーしました