「Papyrus関数追加サンプル」の編集履歴(バックアップ)一覧に戻る
Papyrus関数追加サンプル」を以下のとおり復元します。
執筆中です。

#contents

-サンプル:&ref(ExampleAddFunctionBySKSE)(動かした方は中にある readme.txt を参照のこと)

*目的

SKSE プラグインによって Papyrus で使える関数を追加する''最小サンプル''を提供することが目的です。

関数の追加方法を覚えることで、適宜、用途・要求速度などの状況に応じて Papyrus と C/C++ とを組み合わせてスクリプトが書けるようになります。

*前提

[[SKSEプラグイン開発環境構築手順]]にて、skse 本体のコンパイルができる状態にあることが前提となります。

プラグインのサンプルプロジェクトである plugin_example を元に Papyrus 関数を追加するよう書き換えます。

*手順概要

まずは作業手順についてですが、以下の手順を踏みます。

+CK を使って追加する関数を Papyrus スクリプトで定義し、psc/pex ファイルを用意する。
+プロジェクトを準備する。
+追加関数を実装する。
+追加関数を Papyrus 関数として使えるよう登録する実装を追加する。
+dll をコンパイルし、配置する。
+skse_loader.exe で Skyrim を起動する。

細かく1つ1つ順を追って説明していきます。

*手順詳細
**psc/pex ファイルの準備

CK を起動し、適当なオブジェクトを対象にしていいのでスクリプトを作成します。

#ref(create_psc.png);

サンプルプラグインの名前は「Calculator」とします。また、Sum 関数は v1 と v2 の値を足した値を返すこととします。要はよくある計算機の例です。

以下、ソースの事例です。

 Scriptname Calculator
 
 int Function Sum(int v1, int v2) global native 

ポイントは、

-''native'' と書いてあること。
-関数本体が無いこと。

です。

必要最小限ということで今回は未 extends/global の関数を事例に挙げますが、extends/global 以外の関数も定義可能です。

このソースを保存すると普通にコンパイルでき、pex ファイルが作成されるので「Skyrim\Data\Scripts」フォルダを確認してみて下さい。psc ファイルは「Skyrim\Data\Scripts\Source」フォルダにあります。

**プロジェクトの準備
***dll ファイル名称の変更

plugin_example プロジェクトを活用しますが、そのままコンパイルするとできあがるプラグイン dll ファイルが plugin_example.dll になってしまいます。

独自の名称の dll ファイルを作成するため「ソリューションエクスプローラ」で「plugin_example」プロジェクトを選択し、F2 キーを押してプロジェクトの名称を変更してください。

ここでは「Calculator」とします。

#ref(rename_project_name.png);

**追加関数の実装

以下に追加する Add 関数の例を示します。

 // SInt32 や StaticFunctionTag などを使うために必要になる。
 #include "skse/PapyrusNativeFunctions.h"
 
 // ... 省略 ...
 
 SInt32 Add(StaticFunctionTag* self, SInt32 v1, SInt32 v2)
 {
 	return v1 + v2;
 }

Calculator.psc と比較してみてください。ポイントは以下の通りです。

-skse/PapyrusNativeFunctions.h をインクルードしている。
-int には SInt32 を使う。
-第一引数に self を追加する(global の場合は StaticFunctionTag*)。
-関数の中身をしっかりと実装する。

**Papyrus 関数として使えるよう登録する実装

**コンパイルとできた dll の配置

復元してよろしいですか?

目安箱バナー