「SKSEプラグイン」の編集履歴(バックアップ)一覧に戻る

SKSEプラグイン - (2023/09/28 (木) 10:09:41) のソース

#contents

* SKSE
外部拡張スクリプトであるSkyrim Script Extender(SKSE)の情報です。 

**SKSEの特徴
SKSEは2つの機能があって、ひとつはPapyrus言語そのものを拡張すること、ふたつめはプラグインで拡張することです。

***Papyrus関数拡張
ひとつめはPapyrus言語で使える関数を増やします。
例えば、Get(Set)WeaponSpeed()は武器の振る速度を取得したりセットしたりできます。
スキルレベルに応じて武器速度を変えたりといったような応用できます。
Papyrusでは武器そのものの速度を扱うことはできません。

SKSEの関数一覧
[[https://www.creationkit.com/index.php?title=Category:SKSE]]

単に関数を書くだけで使えるので使用は容易ですがPapyrusの実行速度がボトルネックになる為、後述のプラグイン拡張よりは遅いです。

***プラグイン拡張
C/C++のコードをコンパイルしてdllファイルにし、Data->SKSE->Pluginsに入れて動くものです。
C/C++の速度で動くのでPapyrusに比べて駆動自体は圧倒的に速いですが、Papyrusの関数を呼び出すときはその関数の速度でしか動きません。
また資料が少なく難解で膨大なSKSEのAPIを理解していないとプラグインの作成が難しいのがデメリットです。

***SKSE開発情報&サンプル
-[[SKSE64プラグイン開発環境構築手順]]
-[[Papyrus関数追加サンプル]]

**Papyrus関数拡張SKSE
以下のSKSEを導入しておけば標準ではできない事のほとんどがスクリプトで行えるようになるため可能ならば全て導入しておく事を推奨。(変数の保存、ファイル読み書きについてはPapyrusUtilかJContainersのどちらか好みで)
***PapyrusUtil
・TFC、TMコマンドの実行、アクターのAI Packageの上書き、指定したアクター・オブジェクトから一定範囲内にいるオブジェクト・アクターの検索等、多機能の関数を追加する
・オブジェクト、アクター毎に変数の保存、読込が行える。(これによりスクリプトでアクターの状態、フラグの保存にダミーのFactionを作って変数代わりに設定する必要が無くなる。)
・Jsonファイルにデータを保存、読込が可能になる(ファイル読み書きを行うものとしてFISSがあるが検証によるとPapyrusUtilの方が高機能、またFISSは自動ロード等で一斉に読み込もうとするとCTDの要因になるとの事でファイル保存・読込関連はPapyrusUtil、または後述のJContainersを使うのを推奨)
・AE対応済み
ダウンロード([[LE>https://www.nexusmods.com/skyrim/mods/58705]] / [[SE>https://www.nexusmods.com/skyrimspecialedition/mods/13048]])

***ConsoleUtil
・コンソールコマンドをPapyrusから実行する事が可能になる、コンソールのメッセージの取得も可能
・一部のコンソールコマンドはPapyrus側には存在しないため、それを実行するために必要(NPCのレベルを設定するSetLevel等)
・AE対応済み
ダウンロード([[LE>https://www.nexusmods.com/skyrim/mods/66257]] / [[SE>https://www.nexusmods.com/skyrimspecialedition/mods/24858]])

***powerofthree's Papyrus Extender(ドキュメントあり)
・PapyrusUtil同様、多機能の関数を実装。特にアクター関係の関数に関しては随一
・Oblivionでは存在したがSkyrimでは存在しない関数と同機能の関数が使えるようになる(IsActorInWater、GetCombatTargets、GetActorsByProcessingLevel等)
・アクター、エイリアス、マジックエフェクトのスクリプトで受信できるEventを拡張する事が可能
・このSKSEのAddBasePerk関数はNPCに対してゲーム中にPerkを付与させられる唯一の手段となる
・AE対応済み
・機能ピックアップ
・・戦闘にて指定したアクターの味方のアクター、敵のアクターの一覧を習得
・・水に浸かっているか、または水中にいるか判定
・・パークを動的に習得
・・死亡時アイテムを動的に設定
・・関数一つで肌テクスチャを変える(このSKSEを使用しない場合、かなり面倒)
・・キルムーブの首刎ねモーションなしで首と胴体を分離
・・所有しているパークの数、一覧を取得
・・フォームのエディターIDの取得
・・エディターIDを指定してフォームを取得
[[ドキュメント>https://github.com/powerof3/PapyrusExtenderSSE/wiki]]
ダウンロード([[LE>https://www.nexusmods.com/skyrim/mods/95017]] / [[SE>https://www.nexusmods.com/skyrimspecialedition/mods/22854]])

***JContainers
・Papyrusでクラスやスクリプトのインスタンスを実現するため、JSONベースのデータ構造を用いてPapyrusを拡張する
・PapyrusUtil同様に変数の保存、読込が可能、外部にデータをファイルとして保存する機能も搭載されている
・AE対応済み
※これを追記した筆者はあまり使ってないため、詳しい人が居ましたら追記お願いします
ダウンロード([[LE>https://www.nexusmods.com/skyrim/mods/49743]] / [[SE>https://www.nexusmods.com/skyrimspecialedition/mods/16495]])

***SUP SKSE
・文字列に関する関数が豊富で置換や部分削除等を行える他、検索と置換を正規表現で行える関数も用意されている
・一時的な値の設定・読込を行う関数が用意されている。一時的に保持した値はゲーム終了時に破棄される(OblivionのModLocalDataと同機能のものが使える)
・スカイリムのインストールフォルダのパスを取得、ダイアログを開いてファイルを選択、スクリーンショットを取るなど、他のPapyrus拡張SKSEにない独特の関数が用意されてる
[[ダウンロード(SE)>https://www.nexusmods.com/skyrimspecialedition/mods/58133]]
[[ドキュメント>https://www.nexusmods.com/skyrimspecialedition/articles/3528]]

***Papyrus MessageBox - SKSE NG
・このSKSEで追加した関数一つで選択肢付きメッセージボックスを表示させられるようになるSKSE
・従来では選択肢付きメッセージボックスを出す場合はCKやxEditでMessageレコードを作成して、スクリプトから参照する必要があったがそれが不要になる
・また、特定の条件下でメッセージの内容を変えるという事をやる場合、条件の数だけMessageレコードを作成する必要があったり、 選択肢をCondition Functionsではなくスクリプト内で条件を絞り込みたい場合、このSKSEを用いる事で表示させるメッセージや選択肢をスクリプト内で動的に制御できるようになる
[[ダウンロード(SE・AE)>https://www.nexusmods.com/skyrimspecialedition/mods/83578]]
**開発や動作の補助をするSKSE
主に有名所なModでの使用や現在のMod環境では導入が前提である事が多かったり、
Mod開発者にとっても利用する事による利点が非常に大きいSKSEプラグインの一群を記載。
なお、ほとんどのSKSEはSE版が安定した後に制作されたものであるため
&bold(){LE版には存在しないものがほとんど}なので注意。
([[こちら>https://w.atwiki.jp/skyrim_mod/pages/18.html#id_148ac90b]]で記述してますが特に初心者はLE・SE両用ではなくSE版のみのModを作る事を&bold(){強く推奨します})

利用しなくてもMod開発自体はできるがSPID、KID、FLM、IPMは
ユーザーにとっても開発側にとっても&color(#F54738){利用しない事によるデメリット(特にフォームの競合による動作不良)が非常に大きいため、}
Modをリリースを行いたいという人は一通り目を通しておく事。

***Spell Perk Item Distributor (SPID)
・設定ファイルを用いる事でNPCにアビリティやPerk、アイテムを事前に付与させる事が可能になるSKSE
・付与対象の条件絞り込みが可能
・最新バーションでは一定レベルによる付与の設定はNPCの現在のレベルを参照に動的に付与されるようになった(以前は一定レベルによる付与は初期レベル依存だった)
・NPCのレコードを汚さずにアビリティやPerkを持たせられるため、競合による不具合やマージを行わずにすむようになる。
・クロークを使用して周りのNPCにスクリプト付きスペルを付与するという事をやらずに済むため負荷も少なくなる
・上記の理由によりNPCにスクリプト付アビリティを持たせるModではSPIDを用いるのが主流…どころか&color(#F54738){&bold(){現Mod環境において数多くのModはこれを導入した環境が大前提となるためこれが未導入の環境はまず考慮しなくても良い。SPIDで処理できるものならばSPIDで処理する事で競合による問題が無くなるので扱いこなす事を強く推奨}}
・LE版は一部機能が使えないため注意(対象をエディターIDで指定する等が使えない)
ダウンロード([[LE>https://www.nexusmods.com/skyrim/mods/105121]] / [[SE・AE>https://www.nexusmods.com/skyrimspecialedition/mods/36869]])

***Keyword Item Distributor(KID)
・アイテムや魔法エフェクト等、NPC以外のデータにキーワードを事前に付与させる事が可能になるSKSE(NPCはSPIDで付与可能)
・SPIDが導入されていた場合、KIDの付与処理実行後にSPIDの付与処理が実行される
・エンチャントであるか、攻撃的な効果であるか(Hostileフラグがあるか)等の条件で絞ってキーワード付与が可能
・魔法やパークを作成時にCondition Functionsで詳細な条件で絞り込みたい時に非常に有用。例えばこのSKSEでHostileフラグのある全Magic Effectにキーワード付与を行う事で従来ではできなかった「攻撃的な魔法のみ対象」といった判定条件が行えるようになる
・SPID程ではないが&color(#F54738){&bold(){現Mod環境ではこれを導入した環境が当たり前となってるためバニラの既存レコードの編集をする時にキーワードを追加したいだけの場合はKIDで処理する事を強く推奨}}
ダウンロード([[SE・AE>https://www.nexusmods.com/skyrimspecialedition/mods/55728]])

***FormList Manipulator - FLM
・設定ファイルを使用してフォームリストをゲーム起動時に動的に追加するSKSE
・Espの編集で既存のフォームリストに追加したいものがある場合、別のModでそのフォームリストの編集があると競合して編集内容が正常に反映されない危険性があるがFLMを使用する事により競合を回避する事ができる
・バニラのフォームリストの変更を行うModを作る場合はこれを使用する事を&bold(){強く推奨}
ダウンロード([[SE・AE>https://www.nexusmods.com/skyrimspecialedition/mods/74037]])

***Item Property Manipulator - IPM
・設定ファイルを使用してアイテムのフォームデータをゲーム起動時やロード時、あるいはスクリプトから動的に変更するSKSE
・アイテム名、価格、ダメージ値や重量などを変更する事ができる
・バニラのアイテムを変更するModを作る場合はこれを使用する事を&bold(){強く推奨}
ダウンロード([[SE・AE>https://www.nexusmods.com/skyrimspecialedition/mods/95795]])

***Papyrus Tweaks NG
・スクリプト処理のアルゴリズムを修正し、パフォーマンスを劇的に改善するSKSEDLL
・一度に処理できるタスク(命令数)が100までだったのを500まで増加(設定で変更可能)。これにより一度に処理できる命令数が低いせいで大規模戦闘等でFPSが下がる(スクリプト処理速度も低下する)状況下だと処理待ち命令が増えて行き、最終的にフリーズするという現象を回避しやすくなる
・実験的な処理高速化の機能として一部の命令をメインスレッド上で処理する機能を追加。これにより命令処理する度に一々同期処理してた事による処理遅延(1命令0.01~0.1秒、FPSが低いほど長くなる)が消える、すなわちスクリプトの処理速度が実質FPS依存となってた問題が消えるため処理速度が大幅に向上(例として10秒ほど掛かる処理が1~2秒、0.5秒ほど処理が掛かるものが一瞬で終わるほどに短縮)
・仕組み上の問題で実質一度に処理できるスクリプト処理の上限が設けられた上にその上限自体が低く上限設定も不可能であったようなものであったため、パソコンのCPUを高性能化してもスクリプト処理に対する恩恵がほとんど得れなかったが、このSKSEプラグインによる大幅改善によりCPU高性能化の恩恵がかなり得られるようになった(特に処理高速化はCPUが強力である程効果大)
・処理高速化によるスクリプトの高速処理はCTDやフリーズのリスクを大幅に軽減してくれるがスクリプトの記述の仕方によっては正常に動作しない事もある。そのため、これの処理高速化の機能をONにした環境で正常に動作するスクリプトを作成する事を&color(#F54738){&bold(){強く推奨}}
[[ダウンロード>https://www.nexusmods.com/skyrimspecialedition/mods/77779]]

***Payload Interpreter
・モーションに無敵時間の発生や魔法効果の発動等の命令を仕込む事ができるようになるSKSE
・モーションの特定のタイミングでスクリプト処理を実行させる事が可能になる
・モーションに仕込まれた命令は実行する前にモーションが中断された場合は実行されない。このため、従来の必殺技系のModでは処理が全部スクリプトで制御されてたためにモーションが何かしらの要因で中断されてしまった後も処理が続くという問題がPayload Interpreterを使う事で無くせる
・これを使ったModを作成する場合は基本的に[[DAR>https://skyrimspecialedition.2game.info/detail.php?id=33746]]や[[OAR>https://skyrimspecialedition.2game.info/detail.php?id=92109]]等の条件に応じた動的なアニメーション変更Modとの併用が前提となる
[[ダウンロード>https://www.nexusmods.com/skyrimspecialedition/mods/65089]]

***Skyrim Platform
&color(#F54738){注:バージョンによっては動作が不安定だったりするため上級者向け}
・JavaScriptのコードからSkyrimの動作を制御するという革命的なSKSE
・DLLファイルがJavaScriptのコードを解析、処理を行うため圧倒的な速度で処理を行える(PapyrusとSkyrim Platformの両方でほぼ同じアルゴリズムを使用して、552個のアイテムをプレーヤーからチェストに転送が完了するまで計測した所、Papyursで130秒ほど掛かるものが、Skyrim Platformだと1秒以内に終わる[ModページのPostより])
・Skyrim起動中にJavaScriptのコードが更新されると再読み込みが行われ、コードの内容が即座に反映されるためデバッグが非常に容易
・このSKSEに使用するJavaScriptのコードは、配布元のツールからTypeScriptをコンパイルして変換する必要がある。(コンパイル方法はダウンロードした圧縮ファイルのPlatform/plugin-example/のReadme.mdを確認する事。またコンパイルにはnpmのインストールが必須)
・2022/4/11のVer2.6にてAE対応(ただし2.5以降は不安定で安定版はAE未対応の2.4のため注意)
・&s(){2022年4月から更新が無いためAE版の場合は注意}2023年6月に更新されたため現AEのバージョンに対応
[[ダウンロード>https://www.nexusmods.com/skyrimspecialedition/mods/54909]]
Papyrus関数拡張SKSEの関数をSkyrim Platformで使用するための定義ファイルのダウンロードは[[こちら>https://www.nexusmods.com/skyrimspecialedition/mods/56916]]
目安箱バナー