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

#contents

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

**[プレイヤー向け] スクリプトツールの導入のしかた [#l492526b]
この節は非開発者向けにスクリプトツールの導入方法を説明するものです.
***準備(初回のみ) [#jb73de96]
+実行ファイルがあるディレクトリから見て,script/tool_base.nutがあることを確認する.(古いバージョンからの継ぎ足し環境では存在しないことがあります.)
+pak/config/menuconf.tabで,dialog_tool[34]にキーを割り当てる.例えば,「dialog_tool[34]=,O」と追記する.(一部のメニューバーでは既に設定されています.)

***配布されているツールの導入方法 [#hefcfdf2]
+配布されているツールをダウンロードし,zipを解凍します.
+解凍してできたフォルダまるごと, pak/tools/ に配置します.

ツールの配置は,Simutrans本体を再起動しなくても反映されます.
** 呼び出しかた [#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|アイコンをツールバーに表示させるための,menuconf.tabで定義されたキー|
|RIGHT:~icon|Name of cursor object (loaded from some pak-file), used images: 0 = cursor, 1 = icon, 2 = marker image|
|RIGHT:~cursor_area|カーソルサイズ(x,y).サイズは(1,1)以上. r9506以降.|
|RIGHT:~cursor_offset|カーソル中心のオフセット(x,y).r9506以降.|

description.tabの例(=の前後に空白文字がないことに注意)
 title=my_tool
 type=one_click
 tooltip=A scripting tool for testing
 restart=0
 menu=my-tools
 icon=one_click_test
 cursor_area=3,4
 cursor_offset=1,2

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

 icon=one_click_test
となっているので,pak-something/直下のcursor.one_click_test.pakがアイコン・カーソル画像のpakとして使われます.

*** menu項目の命名規則 [#ofd8c8fb]
''&color(#ff0000){以下の命名規則は、nightly版r9534及びOTRPv29_4以降に限り正常に表示されます。122.0及びOTRPv29_3以前では、menu項目に")"が含まれているとメニューバーにアイコンが表示されないため、以下の命名規則では正常に表示されません。};''~
description.tabのmenu項目は,ツールバー定義に基づいて指定してください.
例えば,地上線路を建設するスクリプトであれば,地上線路アドオンの付近にアドオンを表示したいので,
 menu=ways(2,0)
と記述してください.

鉄道用駅舎を建設するスクリプトであれば,
 menu=buildings(34,2)
となるでしょう.

スロープツールに関連したスクリプトは,
 menu=slope
を用いてください.

ツールバー定義の書式は, [[設定ファイル/menuconf.tab#q56b1334]]にあります.

scriptツール対応のmenuconf.tabを作るときは,各ツールバー定義に対応したスクリプトツールの配置を定義してください.例えば,道路アドオンのツールバーでは,下のように,アドオン属性に対応したscript配置を定義します.
 toolbar[3][0]=general_tool[17],27,q,1 #Remove Way
 toolbar[3][1]=ways(1,0)
 toolbar[3][2]=scripts(ways(1,0))
 toolbar[3][3]=ways(1,1)
 toolbar[3][4]=scripts(ways(1,1))
 toolbar[3][5]=general_tool[14],,s,1

スロープツールのツールバーでは,下のように記述してスクリプトを呼び出してください.
 toolbar[1][0]=scripts(slope)
** 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一致検査の対象外です.ネットワークゲームでもプレイヤーは自由にスクリプトを追加し,実行することができます.
スクリプトツールまでの&color(#ff0000){パスに全角文字が入っていると動かない};可能性があるので注意してください。

その他のコーディング上のノウハウについては[[スクリプト開発/Tips集]]を参照してください.

*ツールの試作品を貼るコーナー [#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]]から単体でダウンロードすることもできます.
nighlty r10077で更新されています。継ぎ足し環境の場合、r10077以降の環境で使用する際は更新が必要です。

|[Type]Title/題名|Author/作者|Date/投稿日|h
|Thumbnail/画像|Game Versions/対応Ver.|Download/ダウンロード|h
|>|>|Comment/コメント|h
|~海面浅くするクン|ひめし|2020/11/28 第二版に更新|
|~海面浅くするクン|ひめし|2021/10/3 第三版に更新|
|&ref(make_sea_shallow_tmb.png,nolink);|122.0〜|&ref(make_sea_shallow.zip);|
|>|>|海の深さを浅くして高架などを建てられるようにするスクリプトです.&br;スクリプト対応のmenuconf.tabを導入している場合,スロープツールとしてアイコンが表示されます.|
|~ワンクリックでタービン型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);|
|~ひめしツールキット|ひめし|2021/4/14 v3に更新|
|&ref(tmb_hm_toolkit.png,nolink);|122.0〜|[[ダウンロードページ:https://github.com/teamhimeh/hm_toolkit/releases]];|
|>|>|線路や駅舎などをワンクリックで建設するツールを簡単に書けるようにしたライブラリです.|
|~らくらく景観線路|ひめし|2020/11/17|
|&ref(tmb_rakuraku_keikan.png,nolink);|122.0〜|&ref(rakuraku_keikan_senro.zip);|
|>|>|線路のFront / Backを手動で切り替えることなく上の画像のように景観線路を建設できるツールです.&br;tool.nutの2行目と3行目で,景観線路のアドオン名を指定してから使用してください.|
|&ref(tmb_rakuraku_keikan.png,nolink);|122.0〜|[[ダウンロードページ:https://simutrans.sakura.ne.jp/portal/articles/rakuraku_keikan_senro]]|
|>|>|線路のFront / Backを手動で切り替えることなく上の画像のように景観線路を建設できるツールです.|
|~ワンクリック国鉄型配線|きたすみなるみん|2020/11/28|
|&ref(scr_KSN-script_JNR-style-station_set01.png,nolink);|122.01〜|&ref(KSN-script_JNR-style-station_set01(v10).zip);|
|>|>|国鉄型配線をワンクリックで建設するスクリプトです。&br;本スクリプトは  ひめしツールキット v1  を使用して作成しております。ひめし様に感謝申し上げます。|
|~トンネル入口スロープツール|下市|2020/12/06|
|&ref(tunnel_entrance_slope.png,nolink);|122.0〜|&ref(tunnel_entrance_slope.zip);|
|>|>|tile_heightが8のpaksetで平行な地平からトンネル接続に必要なスロープを作るスクリプトです。&br;スクリプト作成にあたりまして、ひめし様のスクリプトを参考にさせていただきました。感謝申し上げます。|
|~人口らくらく増やすくん|下市|2020/12/07|
|&ref(./increase_population.jpg,nolink,500x300);|122.0〜|&ref(increase_population.zip);|
|>|>|ワンクリックで指定した人口まで増やします。&br;tool.nutの2行目に都市の増やした後の人口を入力してください。|
|~トンネル入口スロープツール|下市|2020/12/05&br;2021/12/23 更新|
|&ref(tunnel_entrance_slope.png,nolink);|122.0〜&br;OTRPv30.1〜|[[tunnel_entrance_slope_v4.1:https://github.com/KU-TANS/tunnel_entrance_slope/releases/download/v4.1/tunnel_entrance_slope_v4.1.zip]]&br;[[tunnel_entrance_slope_v5.0:https://github.com/KU-TANS/tunnel_entrance_slope/releases/download/v5.0/tunnel_entrance_slope_v5.0.zip]]|
|>|>|tile_height=8のpakset(pak.nipponなど)で平行な地平からトンネル接続に必要なスロープを作るスクリプトです。&br;v5以降はnightly版かOTRPv30.1以降のみ実行可能です。各自の環境に合わせて選択してください。|
|~人口らくらく増やすくん|下市|2020/12/05&br;2021/07/26 v2.1に更新|
|&ref(./increase_population.jpg,nolink,450x275);|122.0〜|[[increase_population:https://github.com/KU-TANS/increase_population/releases/download/v2.1/increase_population.zip]]|
|>|>|ワンクリックで指定した人口まで増やします。&br;v2.0から人口の指定方法が変更されています。詳しくはreadmeをご確認ください。|
|~ワンクリック駅アプローチ配線セット(分岐方向指定タイプ景観線路用)|きたすみなるみん|2021/01/28&br;最終更新 2021/03/06|
|&ref(scr_KSN-script_STA-ENT-forETrail_set001.png,nolink);|122.01〜|&ref(KSN-script_STA-ENT-forETrail_set001_v10.zip);|
|>|>|駅前後の配線をワンクリックで建設するスクリプトです。景観線路各種にも対応します。&br;本スクリプトは  ひめしツールキット v2  を使用して作成しております。ひめし様に感謝申し上げます。|
|~駅統計取得ツール|大和階梯|最終更新 2021/05/23|
|&ref(station_statistics_thumbnail.png,nolink);|OTRP29.5〜/122.0〜|&ref(駅統計取得ツール.zip,nolink);|
|>|>|マップ内の駅の乗降客者数ランキング等の各種統計情報を取得します。テキストファイル出力機能はOTRP29.5〜のみ対応です。詳しくはreadmeをご覧ください。|

* AIプレーヤー [#ge2728e6]
|[Type]Title/題名|Author/作者|Date/投稿日|h
|Thumbnail/画像|Game Versions/対応Ver.|Download/ダウンロード|h
|>|>|Comment/コメント|h
|~AIプレーヤー α版|koa|2022/05/12|
|画像なし|123.0.1~|&ref(sqai_koa.zip);|
|>|>|デフォのAIは2都市間の路線しか作らない、公共駅があっても使わないなどの&br;問題があります.そこで、このAIプレーヤーは以下の特徴を持たせました.&br;&br;・複数都市を一度に結ぶ路線を作成&br;・公共駅があれば、積極的に活用&br;・タイル上の隣接駅が公共駅になれば、自バス停も公共化&br;・経営が順調なら町を誘致&br;&br;現時点でバスしか動かすことができません.&br;また、α版ですのでバグも多いです.&br;バグ報告は日本語フォーラムを使用ください. |