ElepanSkyrim’s めも

SkyrimMOD関連の個人的なメモをまとめています。

オブジェクト指向的な値の保持はPapyrusUtil SEで!

Papyrusオブジェクト指向言語ではないですが、それっぽい値の保持ができたら楽だよなぁと思っていたところ、便利なものがあることを知りました。それがPapyrusUtil です。SKSEプラグインでユーティリティ系のMODとして見かけたことがある人も多いかと思われる有名なMODの一つですね。必要要件のMODとしてもよく見かけるMODです。

skyrimspecialedition.2game.info

 StorageUtilを使おう

PapyrusUtil SEの中にあるStorageUtilというスクリプトがあります。これはオブジェクトと文字列キーをユニークキーとして、様々な値を永続的に保持させることができる優れもの。ゲームを終了してもセーブデータにちゃんと格納されているので、キャラクターの状態やステータス的な追加情報を持たせたい時などに非常に便利に使えます。

StorageUtil.FormListAdd(actor, "key", form1)
Form[] list = StorageUtil.FormListToArray(actor, "key")

こんな感じで例えばアクターとキー名をキーとして値を格納したり取り出したり出来ます。

第一引数はオブジェクトなので、Actor以外にもいろんなものを指定できます。Formもいろんなオブジェクト(装備など)の親クラス的なものなので、例えばアクターに現在装備中のアイテムのリストをインベントリとは全く別の領域に保持する、なんてこともこれでできちゃいます。例えばNPCに特定の着替えをさせようとするとnpcの自動装備の都合上最も強力な装備を自動でしてしまうという厄介の動きも、それぞれの装備リストをStorageUtilに保持させて出し入れさせることで実現できたりします。(付呪効果まで保持できるかは確認していないのでわかりませんが…できなかったら隠しストレージをck上で作るしかないでしょうね…)

こんな感じで、あらゆるオブジェクト毎にあらゆる変数を定義できるわけですね。

StorageUtilなしで同じようなことをする場合、かなり面倒くさいことをしないといけないのですが、(CKでFormListを作り登録したオブジェクトのスクリプトにプロパティでいちいち設定しないといけない)

StorageUtilならコードだけで完結するのでとても楽です。

SKSEプラグインなので速度も速いですし、使わない理由はないですね!