*ネットワークゲーム [#db7c0610]
ネットワーク機能は現在テスト中で、ナイトリー版のみに含まれています。まだこの機能を含む安定版はありません。

#contents

RIGHT:&size(10){''更新履歴''};
RIGHT:&size(10){新規作成 2010/12/03};

*ゲームに参加する(nightly版 r3991以降) [#l161d180]
ネットワークゲームに参加するためには、あらかじめホストサーバーのIPアドレス/ホスト名を知っておく必要があります。
また、simutransのバージョン(リビジョン)とpakセットの種類、バージョンが一致する必要がありますので、これも事前に確認します。
#div(start,notegreen)
pakフォルダにアドオンなどの余分なpakがあってもいけません。
通常のpakフォルダとは別に、ネットワークゲーム専用のpakフォルダを作っておくとよいかもしれません。
#div(end)

&imgfolder(16/disk.png); 以下の説明で使用した日本語化ファイル(simutrans\text\ja.tab)はこちら。
&ref(ja_20101203.zip);
**サーバーに接続し、ゲームの情報を取得する [#c913a3a3]

+r3991以降のナイトリー版では起動時に次のような画面が表示されますので、「ネットゲームに参加」(join game)をクリックします。
&ref(net_01.png,nolink);
+「ゲームの情報」(Game info)ウィンドウが開きます。
&ref(net_11.png,nolink);
左下にゲームエンジン本体とpakセットのリビジョン情報が表示されています。現在あなたが起動しているゲームの情報です。
--上段はゲームエンジン本体のリビジョン番号です。「リビジョン: 0」(Revision: 0)と表示されている場合には情報がありません。
現在ナイトリーサイトで配布されているゲーム本体には、ここで使用されるリビジョン番号が付加されていませんが、タイトルバーでリビジョン番号を確認できます。
&ref(net_25.png,nolink);
--下段はpakセットのリビジョン情報です。pakセットによって、数字以外の一意の名前が付けられている場合もあります。現在ナイトリーサイトで配布されているpak64,pak128にはこの情報がありますが、空白の場合には情報がありません。
+それでは、IPアドレス/ホスト名を入力または選択して、ホストサーバーのゲームの情報を取得しましょう。
-''A. IPアドレス/ホスト名を入力する''
あらかじめIPアドレス/ホスト名がわかっている場合には、「サーバーを追加」(add server)をクリックします。
&ref(net_24.png,nolink);
テキスト入力フィールドに「Enter address」と表示されますので、ここにIPアドレスまたはホスト名を入力し、[Enter/Return]キーを押します。
&ref(net_09.png,nolink);
#div(start,notegreen)
テキストの入力では、クリップボード操作(Ctrl+X,Ctrl+C,Ctrl+V)やテキスト操作(Ctrl+A, Ctrl+カーソルキー,Shift+カーソルキー,Ctrl+Shift+カーソルキー)のショートカットキーが使えます
#div(end)
-''B. 公開テストサーバーから選ぶ''
いくつかのテストサーバーがリストに表示されている場合、ここからサーバーを選択することもできます。
&ref(net_10.png,nolink);
このリストはhttp://simutrans-germany.com/serverlist/data/serverlist.txtから取得されます。また、これらの公開サーバーの情報は、英語フォーラムの[[Game Servers>http://forum.simutrans.com/index.php?board=78.0]]ボードやhttp://simutrans-germany.com/serverlist/も参照してください。ゲームに必要なpakセットの情報などがあります。
&imgfolder(16/comment.png); しかし実際のところリストは適切に更新されていないため、ホストサーバーが稼動しているかどうかは接続してみるまではわかりません。
--''全てを表示''のチェックをはずすと、本体、pakセットが完全に一致するサーバーのみを表示します。ただしサーバー側、クライアント側にリビジョン情報がない場合には正しく比較できません。
----
#div(start,notegreen)
この「ゲームの情報」ウィンドウは、pak64では「n」キーに割り当てられています。「n」キーを押せば、いつでも表示できます。
表示できない場合には「(pakセット)\config\menuconf.tab」に以下の1行を追加してください。
 dialog_tool[28]=,n
#div(end)


**ゲームの情報を確認する [#u22fa362]

+サーバーが動作している場合、ゲームの情報が表示されます。
&ref(net_26.png,nolink);
--「現在利用できません」(Server did not respond!)と表示された場合はサーバーが動作していません。
&ref(net_21.png,nolink);
+pakセットのチェックに成功すると、「ネットゲームに参加」(join game)ボタンが操作できるようになります。ボタンをクリックする前に左下に表示されているsimutrans本体のリビジョンが一致するか。もう一度確認しておきましょう。
--上でも書きましたが、現在ナイトリーサイトで配布されているsimutrans本体には、リビジョンチェックのための情報がありません。このためsimutrans本体のリビジョンの確認が行われず、実際には一致していなくても、「ネットゲームに参加」(join game)ボタンが有効になってしまいます。
--「リビジョン: 0」(Revision: 0)と表示されている場合はサーバー側にもリビジョンチェックのための情報がありません。わからない場合にはゲームサーバーの設置者に確認してください。
--&imgfolder(16/alert.png); simutrans本体のリビジョンが異なると、ログインに成功しても時間とともに同期が取れなくなり、強制切断される原因にもなります。
+問題がなければ、「ネットゲームに参加」(join game)をクリックして、ゲームにログインします。
+ゲームの転送が始まりますので、しばらく待ちます。
#div(start,noteblue)
転送されたゲームは、ユーザーディレクトリのルートに「client1-network.sve」という名前で保存されます。
これ以降、新しく誰かがゲームにログインすると、再度ゲームが転送し直されます。
#div(end)
+無事に転送が終わりゲームが始まると、現在のログイン人数を表示するメッセージが表示されます。人数はクライアントの数で、ゲームサーバーから操作している人がいたとしても、それは含まれません。
&ref(net_28.png,nolink);
このメッセージは、誰かが入退場する度にログインプレイヤー全員に送られます。メッセージの言語は、サーバー側のゲームの言語設定によって異なりますので、日本語ではないかもしれません。
いまのところログイン人数以外を知る方法はありません。現在どのプレイヤーがログインしているのかや、誰が入退場したのかはわかりませんので、後述する[[メッセージ機能>#x954b276]]などをうまく使うといいでしょう。
***Pakセットの差異(Pakset differences) [#oa64bed6]
&ref(net_15.png,nolink);
pakファイルが一致しなかった場合には、「ネットゲームに参加」(join game)ボタンは有効になりません。「差異を表示」(find mismatch)をクリックして、違いを表示します。
&imgfolder(16/alert.png); 条件によって非常に長い時間がかかる場合があります。

&ref(net_12.png,nolink);
-''違いが多いため、11個以上は表示を省略しています。''(Only first 11 differing paks reported. There are probably more.)
pakの違いが多い場合すべては表示されません。違いが多い場合はpakセットが間違っているかもしれません。サーバー側のpakセットの種類やリビジョンを再確認してください。
-''サーバーにはない余分なpak''(Pak(s) not on server)
サーバー側にないpakです。取り除いてください。
-''名前が同じで内容が異なるpak''(Pak(s) different)
価格や性能が違うと同期できません。リビジョンを再確認し、サーバー側と同じものに置き換えてください。
-''不足しているpak''(Pak(s) missing on client)
サーバー側のみにあるpakです。pakフォルダに入れてください。

&imgfolder(16/info.png);pakの変更はsimutransの再起動後に有効になります。

**プレイヤーとして参加する [#i3724528]

接続に成功し、無事にゲームがスタートしたら「ライバル会社一覧」ウィンドウを開いてみましょう。
&ref(net_14.png,nolink);
-&color(#cc0000){■};赤い四角ボタンはそのプレイヤー会社がパスワードで保護されロックされています。パスワードを入力して解除しなければプレイできません。
しかしパスワードを知らなくても、ロックされているプレイヤーに切り替えると、その会社の一覧、路線、車庫ウィンドウなどを表示することはできます。
間違って何か操作をしようとすると、パスワード入力ウィンドウが開きますので安全です。この場合は何も入力せずウィンドウを閉じます。
&ref(net_30.png,nolink);
#div(start,noteyellow)
後述するように、文字数0のパスワードが設定できてしまうようですので、キーボードでパスワードウィンドウを閉じる場合は、Enter/Returnキーは使わないほうがよいでしょう。偶然ロックが解除されてしまう可能性があります。代わりにEscキーで閉じます。
#div(end)
-&color(#00ff00){■};緑の場合はロックされていません。誰かがパスワードを設定し忘れたのかもしれませんので、同意がない場合は触らないほうが無難です。

+''新規プレイヤーを作る''
プレイヤーとして参加するには通常のプレイの場合と同じように、空きスロットを選び、リストから「プレイヤー(人間)」を選択し、左端の■ボタンをクリックして有効にします。
&ref(net_27.png,nolink);
+&imgfolder(16/exclamation.png);''会社名とパスワードを設定する''
新規プレイヤーを有効にしたらすぐに右側の&color(#00ff00){■};緑の四角ボタンをクリックします。
開いたウィンドウで会社名とパスワードを一緒に設定し、最後に[Enter/Return]を入力します。
&ref(net_19.png,nolink);
~&imgfolder(16/info.png);パスワードはプレイヤーのロックが解除されている状態であれば、あとからいつでも変更できます。上の場合と同様に&color(#00ff00){■};緑の四角ボタンをクリックし、パスワードウィンドウで新しいパスワードを入力し、[Enter/Return]を押します。
#div(start,notered)
''あとから会社名を変更する場合''
あとから会社名を変更する場合には注意が必要です。
パスワードウィンドウで会社名のみを変更して、パスワード欄が空白のまま[Enter/Return]を押すと、文字数0のパスワードに変更されてしまいます。
つまりロックはされますが、パスワードは何も入力せず[Enter/Return]を押すだけで解除されてしまいます。
~ですので、%%%あとから会社名を変更する場合にも必ずパスワードも一緒に入力する必要があります。%%%
#div(end)
#div(start,noteyellow)
''公共事業プレイヤーとパスワード''
公共事業プレイヤーは万能プレイヤーです。公共事業プレイヤーは、他のプレイヤーがロックされていても、&color(#cc0000){■};赤い四角ボタンをクリックし、パスワードウィンドウからパスワードを変更することができます。
~パスワードを変更する意図がない場合には、一般プレイヤーに変更してから操作するほうが安全です。
#div(end)
+ログアウトする
特にログアウトする方法はないようです。普通にsimutransを終了して大丈夫です。
+再ログインする
再ログイン後は、ライバル会社一覧で自分のプレイヤーに切り替え、&color(#cc0000){■};赤い四角ボタンをクリックし、パスワードウィンドウからパスワードを入力します。
&ref(net_30.png,nolink);
***メッセージの送信 [#x954b276]
「メッセージ表」からログイン中の参加者全員(傍観者を含む)にメッセージを送信することができます。特定の個人のみに送信することはできません。
&ref(net_16.png,nolink);
~&ref(net_17.png,nolink);

''バグ対策''
日本語も送信可能ですが、バグのため、1文字目は必ず半角英数記号にしなければ送信できません。1文字目は半角空白でも構いません。

''メッセージの表示設定''
このメッセージは「メッセージ設定」では「他社」に分類されます。表示しない設定にしているとメッセージを受け取ることができません。「メッセージ設定」を適切に変更しておくといいでしょう。
&ref(net_18.png,nolink);
----
メッセージは保存されませんし、あまり十分な機能はありませんので、別途IMやチャットを用意し、それを併用したほうがよい場合もあるかもしれません。

***エラー [#hace3092]
&ref(net_32.png,nolink);
何らかの原因で通信エラーが出ると、ゲームサーバーから切断されてしまいます。
切断されるとステータスバーのオンラインアイコンは消えます。
&ref(net_31.png,nolink);
再接続できない場合には、また別の機会にしましょう。
*ネットワークゲームの制限事項 [#r69d49a2]

**言語の制限 [#n76f6f3c]
ユーザーインターフェイスは日本語を選択できますが、一部の機能はサーバー側の言語設定によって制限を受けます。日本語以外のゲームサーバーに参加する場合には注意が必要です。(以下の説明の例はサーバー側が英語、クライアント側が日本語の場合です)



-''乗り物の名前''はサーバー側の言語になります。''車庫で表示される名前''もサーバー側の言語です。
-''路線作成時の名前''は日本語で「(1)路線」などと表示されますが、そのまま名前を変更しない場合、一度ログアウトし再ログインすると「(1) Line」のようにサーバー側の言語に戻ってしまいます。
|クライアント|サーバー&br;クライアント(再ログイン後)|h
|&ref(net_03.png,nolink);|&ref(net_04.png,nolink);|
-新規に建設した''駅名''はサーバー側の言語になります
-産業施設の近くに建設した駅名は「Renton 薬局 yard」のように日本語交じりで表示されますが、そのまま名前を変更しない場合、一度ログアウトし再ログインすると「Renton Pharmacy yard」のようにサーバー側の言語に戻ってしまいます。
|クライアント|サーバー&br;クライアント(再ログイン後)|h
|&ref(net_05.png,nolink);|&ref(net_06.png,nolink);|
-駅名、乗り物の名前、路線名、会社名などは自由に変更できますが、日本語を使用すると、日本語を使用しないプレイヤーには読めなくなってしまいます。
|クライアント|サーバー|h
|&ref(net_07.png,nolink);|&ref(net_08.png,nolink);|
-''サーバーからのメッセージ''はサーバー側の言語で送られてきます。

**その他の制限 [#d573335c]
-プレイヤーの色を変更しても、サーバー側に反映されません。ログインし直すとデフォルトの色に戻ります。
-マップの回転はできません
-マップの拡張はできません
-2クリックツールをドラッグで開始することができません。したがって信号の自動設置もできません。
-早送りやゲームスピードの変更は使用できません。
-現在一時停止は誰でも使用できる状態にありますが、一時停止状態では誰もサーバーにログインできなくなります。使用しないでください。
-乗降客、歩行者の表示/非表示は変更できません。
-交通量の変更もできません。
*サーバーを立てる [#jc1704aa]

Simutransをサーバーモードで起動するには、コマンドラインに「-server」をつけて起動します。([[メモ/ショートカットの作り方]])

書式
 -server [TCPポート番号]
ポート番号は省略できます。省略した場合のデフォルトは13353です。

起動後は新規マップを作成するか、既存のゲームを読み込みます。
なお「server-network.sve」というファイルがすでに存在する場合は、このゲームファイルが自動的に読み込まれます。

''新規ゲーム作成前の注意''
-''言語の設定''
新規ゲームを開始する場合、必ずゲームで使用したい言語に変更してから新規ゲームを開始します。この言語の設定はセーブデータ内に保存され、ゲームの途中で変更することはできません。
[[言語の制限>#n76f6f3c]]でも書いたように、ここで設定した言語はプレイヤーに様々な影響があります。
-''その他のゲーム設定''
ネットワークで同期を取るため、すべてのゲーム設定はゲーム内部に保存され、ゲーム作成後は途中で変更できません。あらかじめ適切に設定しておきます。
特に通常のゲームと違い、以下の項目はゲーム開始後に変更できません。
--乗降客、歩行者の表示/非表示
--交通量の設定
--産業の発生時期
--年代設定
--cityルール
--forestルール
-%%自動保存の設定%%
ゲームは%%%新規マップの作成時%%%と%%%プレイヤーのログイン時%%%のみに自動保存されます。(ユーザーディレクトリのルートに「server-network.sve」という名前で保存されます)
それ以外では自動保存されません。%%ので、定期的なバックアップのために自動保存を適当な間隔で設定しておいたほうがよいかもしれません。%%
クラッシュした場合、最後にプレイヤーがログインしてから以降に行った作業はすべて失われてしまいます。
&imgfolder(16/exclamation.png); 自動保存では保存ゲームのバージョンが違うため、%%%会社名、パスワードなどが保存されない%%%との指摘を受けました。また、自動保存中に同期が失われるおそれもあるようです。保存は自動保存ではなく、クライアントからログインすることで、server-network.sveを作らせるしかなさそうです。

''ゲーム開始直後にすること''
-''公共事業のロック''
公共事業は万能プレイヤーですので安全のために必ずロックします。
-''プレイヤー会社(プレイヤー1)のロック''
また、ログイン時には常に「プレイヤー会社」が選択されています。誰かが間違ってプレイしてしまわないためにも、プレイヤー会社(プレイヤー1)もロックしておいたほうがいいでしょう。

ゲームは一人もプレイヤーがログインしていない状態でも常に進行しています。OpenTTDのように一時停止状態で待機させることはできません。
また一時停止状態にすると、誰もプレイヤーがログインできなくなってしまいます。

**ゲームの情報ウィンドウでリビジョン情報を表示させるには [#j90ef03f]
ゲームの情報ウィンドウでサーバー側のリビジョン情報を表示させるためには、ソースコードのコンパイル時に指定する必要があります。
&imgfolder(16/pencil.png); リビジョン情報はサーバーを立てる場合に必ずしも必要なものではありません。参加プレイヤーがサーバーと同じリビジョンのゲームエンジン本体とpakセットが入手できれば、それで問題ありません。


***ゲームエンジン本体 [#y024f077]
svnのリビジョン番号(数値のみ)です。gitのハッシュなどは利用できません。

フラグにREVISIONをつけて、コンパイルします。
 FLAGS =  -DREVISION="3991"
svnを使用している場合は
 WITH_REVISION = 1
で自動的に付加してくれるらしいです。
詳しくは「config.template」ファイル内に記述されています。

***pakセット [#xc483229]
pakセットの場合は、.datファイルで「ground.Outside.pak」のcopyrightに、識別するための文字列を設定します。


 obj=ground
 name=Outside
 copyright=pak64 r333M
 # hangtyp * animation
 image[0][0]=outside.0.0

*(参考)gift.physik.tu-berlin.deについて [#i6871174]
サーバーリストに表示されているgift.physik.tu-berlin.deは、simutransの開発者がデバッグ目的に公開しているテストサーバーです。pak64を使用しています。

デバッグ目的ですので、定期的にリセットされたり、本体やpakセットのリビジョンが最新のものに変更されたりする可能性がありますが、本体やpakセットはナイトリーサイトで入手できる可能性が高いです。
ただし言語にドイツ語が設定されていますので、車庫ウィンドウや乗り物の名前などで、ちょっと戸惑うかもしれません。
このサーバーの最新情報は、[[英語フォーラム:5877]]にあります。

*(参考)Battle Simutransのフォーラム [#kfef18b9]
Battle Simutransのフォーラムにネットワークゲーム関連のスレがあったのでリンクさせておきます。
[[http://bb2.atbb.jp/battlesimutrans/viewforum.php?f=5&sid=2a74c16c0e423fe6368a5abd9667940b]]
[[http://bb2.atbb.jp/battlesimutrans/viewforum.php?f=5&sid=2a74c16c0e423fe6368a5abd9667940b>http://bb2.atbb.jp/battlesimutrans/viewforum.php?f=5&sid=2a74c16c0e423fe6368a5abd9667940b]]