#div(start,noteblue)
このページは整備中です.有識者の方は編集にご協力いただけると幸いです.
#div(end)

#contents

* はじめに [#i8ee35b9]
&imgfolder(16/world_go.png); [[Simutrans-Squirrel-APIリファレンス>http://dwachs.github.com/simutrans-sqapi-doc/]]

Simutransでは,Squirrel(すくわーる)というスクリプト言語を用いてAIプレイヤー,シナリオ,ツールを記述することができます.

Squirrelの言語仕様については以下が参考になります.
&imgfolder(16/world_go.png); [[Squirrel本家>http://www.squirrel-lang.org/]]
&imgfolder(16/world_go.png); [[Squirrel 3.0 Reference Manual>http://www.squirrel-lang.org/doc/squirrel3.html]] (Squirrel本家)
&imgfolder(16/world_go.png); [[Squirrel 2.1 リファレンスマニュアル>http://wikiwiki.jp/lua/?Squirrel_Lang%2Ftoc]]
* AIプレイヤー [#s74f7f35]
&imgfolder(16/world_go.png); [[AI interface>http://dwachs.github.io/simutrans-sqapi-doc/group__ai__skel.html]]
* シナリオ [#s19b9901]
[[設定ファイル/シナリオ]]を参照してください.

* ツール [#m6886100]
** 呼び出しかた [#q7ec6505]
スクリプトツールの動作には,simutrans/script/にtool_base.nutが必要です.[[standard 122.0>https://sourceforge.net/projects/simutrans/files/simutrans/122-0/]]以降に同梱されています.[[ココ>https://raw.githubusercontent.com/aburch/simutrans/master/simutrans/script/tool_base.nut]]から単体でダウンロードすることもできます.

スクリプトツールは,以下2通りの呼び方で呼び出せます.
- dialog_tool[34](スクリプトツールの読込)を使う ... pakXXX/tool/下にあるスクリプトツールの一覧が表示されます.アイコンやmenuconfの設定がされていないツールも呼び出し可能です.
- メニューバーでアイコンを選択する ... 予めdescription.tabでアイコンを設定し,menuconfの設定が必要です.

** 必要なファイル [#n9c8e55c]
スクリプトツールには,以下の2つのファイルが必要です.
- tool.nut ... Squirrelコード本体
- description.tab ... 設定ファイル(plain text)

ツールの名前を「my_tool」とするとき,2つのファイルはともに,
 pak-something/tool/mytool/
に配置します.

toolディレクトリにはpakファイルは配置できません.pakファイルを配置できるのは
 pak-something/
ディレクトリ直下のみです.
** description.tab [#g7214b1a]
description.tabは,ツールのタイトルやタイプなどを定義するtabファイルです.
|RIGHT:~title|Name of tool to be shown in tool selection dialog|
|RIGHT:~type|one_click or two_click|
|RIGHT:~tooltip|ツールバーのアイコンに表示される説明文|
|RIGHT:~restart|0のとき,メニューバーから呼び出されたツールの場合はツールを終了しても変数の状態が保持されます.dialog_tool[34]から呼び出された場合はこの値に関わらず毎回変数の状態がリセットされます.|
|RIGHT:~menu|Parameter that can be used to load tools with menuconf.tab|
|RIGHT:~icon|Name of cursor object (loaded from some pak-file), used images: 0 = cursor, 1 = icon, 2 = marker image|

description.tabの例
 title=my_tool
 type=one_click
 tooltip=A scripting tool for testing
 restart=0
 menu=my-tools
 icon=one_click_test

この場合,menuconf.tabで
 toolbar[X][Y]=scripts(my-tools)
(X,Yは適当な数字)のように,menuパラメータの値を指定することでツールバーにスクリプトツールを表示させることができます.スクリプトツールをメニューバーに出すにはiconを正しく指定することが必要です.

 icon=one_click_test
となっているので,pak-something/直下のcursor.one_click_test.pakがアイコン・カーソル画像のpakとして使われます.
** tool.nut [#mf7c696e]
&imgfolder(16/world_go.png); [[Tool interface>http://dwachs.github.io/simutrans-sqapi-doc/group__tool__skel.html]]
&imgfolder(16/world_go.png); [[Tool only functions>http://dwachs.github.io/simutrans-sqapi-doc/group__tool__only.html]]

1クリックツールの場合は
-bool 	init (player_x pl) ... ツール起動時に呼ばれる関数
-bool 	exit (player_x pl) ... ツール終了時に呼ばれる関数
-string 	work (player_x pl, coord3d pos) ... クリックされたときに呼ばれる関数

2クリックツールの場合は
-bool 	init (player_x pl)
-bool 	exit (player_x pl)
-string 	do_work (player_x pl, coord3d start, coord3d end)
-void 	mark_tiles (player_x pl, coord3d start, coord3d end)
-void 	is_valid_pos (player_x pl, coord3d pos, coord3d start)

を実装します.

一部の関数のみ記述した場合でも動作しますが,ユーザーのsimutrans実行ディレクトリ下にscript/tool_base.nutが配置されていることが必要です.

**その他Tips [#l8898588]
スクリプトツールは,ネットワークゲームにおけるpak一致検査の対象外です.ネットワークゲームでもプレイヤーは自由にスクリプトを追加し,実行することができます.
*ツールの試作品を貼るコーナー [#q6664af6]
''&color(#ff0000){スクリプトツールの動作には,simutrans/script/にtool_base.nutが配置されていることが必要です.};''~
tool_base.nutは,standard 122.0以降に同梱されています.[[ココ>https://raw.githubusercontent.com/aburch/simutrans/master/simutrans/script/tool_base.nut]]から単体でダウンロードすることもできます.

|[Type]Title/題名|Author/作者|Date/投稿日|h
|Thumbnail/画像|Game Versions/対応Ver.|Download/ダウンロード|h
|>|>|Comment/コメント|h
|~海面浅くするクン|ひめし|2020/10/25|
|&ref(make_sea_shallow_tmb.png,nolink);|122.0〜|&ref(make_sea_shallow.zip);|
|>|>|海の深さを浅くして高架などを建てられるようにするスクリプトです.&br;アイコンやmenuconfのキーなどは設定していないので,スクリプトツール読込ウィンドウ(dialog_tool[34])より呼び出してください.|
|~ワンクリックでタービン型JCT|ひめし|2020/10/25|
|&ref(turbine_jct_tmb.png,nolink);|122.0〜|&ref(turbine_jct.zip);|
|>|>|ワンクリックで26x22マスのタービン型JCTを建設するスクリプトです.&br;tool.nutの8行目,9行目で,地上道路と高架道路のアドオン名を指定してから使用してください.|
|~ひめしツールキット|ひめし|2020/11/8|
|&ref(tmb_hm_toolkit.png,nolink);|122.0〜|&ref(hm_toolkit_v1.zip);|
|>|>|線路や駅舎などをワンクリックで建設するツールを簡単に書けるようにしたライブラリです.|
|~らくらく景観線路|ひめし|2020/11/17|
|&ref(tmb_rakuraku_keikan.png,nolink);|122.0〜|&ref(rakuraku_keikan_senro.zip);|
|>|>|線路のFront / Backを手動で切り替えることなく上の画像のように景観線路を建設できるツールです.&br;tool.nutの2行目と3行目で,景観線路のアドオン名を指定してから使用してください.|