こちらの記事は一応a19(最近追ってないので間違いあるかも)の情報です。
Ubuntu版は
こちらをご覧ください。
最終更新日: 2021/12/15
これら一式を担う
サーバソフトを公開しています。そちらもご検討ください。
はじめに
まず、サーバを建てるための前提スキルとして
- 自分で解決できる能力
- 使用しているOSを問題なく使える
- ネットワークに関する最低限の知識
が必要であるということを把握しておいてください。
また、PC初心者を対象とした記事ではないため基礎的内容の細かい説明は省きます。
わからない部分は各自でお調べください。
Youtube動画版解説
Youtubeにて実演動画をアップロードしておきました。
サーバの種類
まず、7dtdサーバには2通り、細かく分けて3通りあります。
- ゲーム内からサーバを建てるサーバ
- ゲームクライアントを独立させたサーバ
- 完全サーバ専用の独立サーバ
まず1つ目が様々なゲームでも用いられている「
ゲーム内からサーバを建てるサーバ」です。
これは普通にプレイするだけでサーバが開けられるというものですごく簡単です。
ただし、デメリットもあるため注意が必要です。(後述)
次に「
独立させたサーバ」です。
一般的にサーバといえばこの方法を用います。 独立しているため安定性が高く、やり方によればカスタマイズも可能です。 ただし、こちらにもデメリットがあります。(後述)
さらに詳しく見てみましょう。
ゲーム内サーバ
-
非常に簡単にマルチプレイができる方法です。
設定も簡単に行えることからスキルがなくてもサーバ構築することができます。
ただし、ゲーム自体をサーバとするためエラーなどによる強制終了で、データのロールバックや破損が起こる可能性があります。
また、ホストが抜けるとサーバも終了します。
ゲームを独立させたサーバ
-
こちらはゲーム内サーバと違い、独立したサーバで、Dedicated Serverといいます。
ゲームとは別で動作するため、ホストが抜けようがエラー落ちしようが終了することはありません。
ただし、ゲームをするマシンと同一のマシンで行う場合はマシンスペックに注意が必要です。
ゲームとサーバを2つ動かすことになるのでメモリの大消費などが懸念されます。
完全独立サーバとの違いはゲームクライアントを使用する点です。
そのため、サーバ用Modが提供されていない場合はゲーム環境にModを入れて、こちらの方法でサーバを構築するとModサーバが立てられます。
完全独立サーバ
-
こちらも上のサーバと同じです。
違うところとしては完全サーバ専用であり、Server Fixes(Modのようなもの)の使用も可能です。
サーバ専用のModが提供されていない場合はこちらでは動作しません。
なお、こちらは64bit OS専用となります。
クライアントの独立サーバよりこちらを使うメリットと言えば現状64bitなのとServer Fixesのマップくらいしか思いつきませんが、今後サーバ用途はこちらに一本化するとかどっかで見かけた気がする。
今回は一番下の「
完全独立サーバ」を使用した解説を行います。
なお、ゲームを独立させたサーバもゲーム本体でやるだけなので全く同じです。
下準備
まずDedicatedサーバのインストールを行います。
Steamのツールより7 Days to Die Dedicated Serverのインストールを行ってください。
下準備はこれで完了です。
ただし、こちらのサーバは64bit OS専用であるため32bit OSの場合はこの手順を飛ばしてゲームクライアントにて同様の動作を行ってください。
どちらでも動きます。
ポート開放と転送の必要性
サーバを構築し、外部に公開(友達を誘って遊ぶ場合も)する場合に必ず出てくるワードがポート開放と転送です。
一般的にはどちらもポート開放と表現されることが多いのですが、ここではファイアウォールの設定をポート開放とし、ルータの設定をポート転送とします。
なお、技術的な話は可能な限り省いているので本当の動作としてはここまで単純な動作ではありません。
ポート開放
まずはポート開放です。
Windows OSには標準でファイアウォールが導入されており、密かに不正な通信を防御しています。
通常使用の範囲内であれば特に気にすることはないはずですが、サーバとなると他者から接続されることになります。
この時、外部に公開しないサービスが動作していると悪意のある者に接続されて情報が抜かれたり破壊されたり、踏み台にされるわけです。
そんな状況を防止するのがこのファイアウォールという機能で、許可されていない通信は全て遮断されるのが一般的です。
しかしながら、それではサーバを立てても外部に公開できないので、立てたいサーバの条件だけファイアウォールに追加し、許可するように設定します。
こうすることでクラッキングの脅威を最小限に抑えることができます。
間違ってもファイアウォールをオフにするなんてことはしてはいけませんよ。
ちなみに、ハマチなどのVPN技術を使うとこのファイアウォールは迂回されます。(もちろん設定によるが)
次に述べるポート転送もVPNでは迂回されるので安易に使用することは推奨しません。
本当に身内同士で安心できる間で使うなら、一通りポート開放・転送ができてVPNも理解した上で使うと良いでしょう。
ポート転送
そしてここが大抵詰まるポイントです。
ポート転送はポート開放と同じ振る舞いをするように見えますが、実は全く原理が異なります。
なお、モデムやONU(光回線終端装置)だけで運用している場合はポート転送は必要ありません。
また、IPv6でも話は変わってくるので以下のポート転送はIPv4のみの説明です。
まずはインターネットの仕組みを解説しないといけません。
例えば、Googleの検索サイトを見ているとしましょう。
まずは検索サイトの情報が光回線に乗って自宅まで届きます。
その後、そのままパソコンに繋がるのではなく、一度ONU(ADSLはモデム)に届けられます。
光はいわゆるアナログ信号なので一度デジタル信号に変換する必要があり、ONUは光をデジタル信号に変換する役割を担います。
あとはパソコンに繋げれば検索結果が見られるわけですね。
というのは過去の話で、一台だけならこれで済むんですよ。
しかしながら、近年はスマホだったりパソコン自体複数持つのが当たり前になったため一つの光回線を複数台で共有する必要が出てきました。
じゃあ数増やして挿せば動くんじゃねーかって気がしますが、そんな甘くはないんですよね。
光回線にはIPアドレスというインターネット上の住所みたいなもの(グローバルIPアドレス)が一つだけ割り当てられるのですが、それを複数台で繋げると住所が複数存在することになり、受信がうまくできないんです。(実際は送信すらできないと思うけど)
そこで出てくるのがルータです。
ルータはまず、スマホなどの複数端末にルータ内だけで使えるIPアドレスを割り当てます。(この時のIPアドレスをローカルIPアドレスと言い、ルータ内だけのネットワークをローカルエリアネットワークと言います)
これで各端末それぞれに唯一のIPアドレスが割り当てられることになります。
あとはルータにONUの光回線を繋ぐことでルータに光回線のIPアドレスが割り当てられることになり、ルータはスマホなどのLANからの通信をいい感じに変換(NATやNAPT)し、外部との通信を実現します。
じゃあサーバもいい感じにやってくれるかっていうとそう甘くはありません。
LAN内から外部への接続の場合は始まりの端末がわかるためいい感じに変換ができますが、外からの接続の場合は光回線のIPアドレスを指定するだけになるため、複数台あるうちのどれが対象のサーバかわかりません。
そこでルータのポート転送にてどのサーバへ接続を転送するかを設定することで初めてサーバへ通信が飛んできます。
ちなみに、自分のサーバに入るのに友達に教えるグローバルIPアドレスではなく、ローカルIPアドレスになるのは正にルータがあるからなんです。
ルータ内のローカルネットワークで完結するため、ルータから外には出ず、ローカルIPでしか繋がりません。
NATループバックという機能でルータが対応していればグローバルIPでローカルに接続することができます。
グローバルIPで参加するメリットはフレンドリストにグローバルIPで登録されるので、参加者がわざわざIPを直打ちして参加する必要がありません。
7dtdではドメイン名での参加ができるのでドメインを保有しているならhosts書き換えでも対応できるのでどちらにせよ同じことはできたり。
ちょっと逸れますが、L4D2なんかはIP以外受け付けないのでNATループバックが対応されていないとコンソールから入って貰う必要があってかなりめんどくさいです。
ポート開放 (ファイアウォール)
サーバに付き物なのがこのポート開放・転送設定です。
こちらをしなければローカルネットワーク外からの接続はできません。
通常は
サーバを初めて起動するとアラートが出て(プライベートかパブリックを選ぶやつ)、そのまま許可をしていれば設定されているので既にある場合はスルーでいいでしょう。
ポート転送含めてやったものの繋がらず、
ファイアウォールを一時的にオフにすると繋がる場合はファイアウォールの設定が必要です。
やり方は知ってるけれど、プロトコルがわからない方は以下を参考に。
なお、ポートの各用途は「
https://7dtd.illy.bz/wiki/Ports」にて掲載されています。
TCP |
26900 |
UDP |
26900, 26901 |
UDP |
26902 (RakNetを使用する場合 a17以降は不要) |
UDP |
26903 (UNETを使用する場合 a17以降は不要) |
ポート開放はファイアウォールで行います。
ファイアウォールを開き、詳細設定を開いてください。
受信の規則に7 Days to Dieの規則が無ければ「新しい規則」で規則の追加を行います
「プログラム」を選択して次へ。
「このプログラムのパス」に7daystodie.exeのパスを。
「接続を許可する」
こちらは任意ですが、プライベートでいいでしょう。
あとは適当に名前を付けてOK。
ポート転送 (ポートフォワード)
一応自宅で使ってるルータ(Archer C7)の設定方法だけ載せますが、あくまで参考例としてご覧ください。
ルータの機種によって設定が異なり、最悪の場合こういったポートフォワードの設定ができない場合もあるので注意してください。
詳細設定より、「
NAT転送 -> 仮想サーバ」を開きます。
この辺りは機器によって表記が異なり、昔使ってたCoregaのCG-WLBARAGNDは「バーチャルサーバ」でした。
その他にもNTTのモデム内蔵ルータとかは「静的IPマスカレード」って表記みたい。
技術的にはPort ForwardingもしくはPort Mappingと言うのでポートフォワードと説明しますが、いずれも同じです。
設定を開くと外部ポート・内部IP・内部ポート・プロトコルの設定があるため、適当に入力します。
この辺りは設定できるルータならほぼ変わりませんが、外部と内部ポートが別れてないなど細かい違いはあるかと思います。
外部ポート |
外部から接続されるポート番号。
要するに外部からアクセスする際に指定するポート番号のことです。
|
内部ポート |
ローカルネットワーク内のポート番号。
基本的には外部ポート番号と内部ポート番号は同一で問題ありませんが、異なるポート番号を指定することも可能です。
例えば、サーバ内だけで動作するプロセスにて26900ポートがすでに使われており、27900を割り当てたとします。でも外部からは26900でアクセスして欲しい場合は外部ポートに26900を指定し、内部ポートには27900を指定します。
要するに、「外部ポート -> 内部ポート」へと変換します。
|
内部IP |
パケットを転送する端末のローカルIPアドレスを指定します。
サーバのローカルIPを指定すればOK。
内部ポートも合わせて、「グローバルIP:外部ポート」から「内部IP:内部ポート」へ転送されることになります。
|
プロトコル |
TCP/UDPいずれかもしくはAll(両方)を指定します。
|
あとは以下の手順よりサーバ起動してCMAN社の提供する「
ポートチェック【外部からポート開放確認】」などを利用して繋がるかどうか確認します。
ちなみにUDPはチェックここではできず、するにしても結構めんどくさいのでTCPだけ繋がってたら問題ないでしょう。
サーバ設定
続いてサーバ設定を行います。
先程インストールした
7 Days to Die Dedicated Serverの保存されている場所を開けてください。
serverconfig.xmlをテキストエディタなどで開き、以下の設定を行います。
記述内容についてですが、xmlで記述されています。
<property name="XXX" value="YYY" />
こうあるとすれば、YYYを書き換えることで設定の変更ができます。
XXXはプロパティ名です。
※アップデートで項目が消えたり増えたりして収拾つかなくなったので以下のテーブルは更新してません。
ServerPort |
数値
(範囲の詳細はポート番号の種類を参照)
|
待機するポート番号(def: 26900) |
ServerIsPublic |
true/false |
ConnectToServerのサーバ一覧に表示するかしないか。trueだと表示されます。(def: true) |
ServerName |
文字列
(1バイト文字以外はおそらく使用不可)
|
サーバ名。サーバリストに表示される名前です。 |
ServerPassword |
文字列
(1バイト文字以外はおそらく使用不可)
|
サーバのパスワード。設定すると接続の際にパスワード認証が行われます。 |
ServerMaxPlayerCount |
数値 |
サーバに接続できる最大人数(def: 8) |
ServerReservedSlots |
数値 |
a16より追加
特権を割り当てることができるプレイヤーの予約数です。MaxPlayerCountには含まれないようです。
原文: Out of the MaxPlayerCount this many slots can only be used by players with a specific permission level
|
ServerReservedSlotsPermission |
数値 |
a16より追加
ServerReservedSlotsの予約済みスロットを使用するために必要な権限レベル。
原文: Required permission level to use reserved slots above
|
ServerAdminSlots |
数値 |
a16より追加
管理者専用予約スロット数。管理者は参加者数がMaxPlayerCountに達していても参加することが可能です。
原文: This many admins can still join even if the server has reached MaxPlayerCount
|
ServerAdminSlotsPermission |
数値 |
a16より追加
ServerAdminSlotsの予約済みスロットを使用するために必要な権限レベル。
原文: Required permission level to use the admin slots above
|
ServerDescription |
|
サーバの説明文 |
ServerWebsiteURL |
文字列
(1バイト文字以外はおそらく使用不可)
|
サーバのウェブサイトURL |
ServerDisabledNetworkProtocols |
UNET
RakNet
SteamNetworking
|
a16より追加
Unityにおけるネットワークシステムで使わない物がある場合指定すると無効化されるようです。必要性がいまいち感じないのでデフォルトでも問題ないでしょう。
原文: Networking protocols that should not be used. Separated by comma. Possible values: UNET, RakNet, SteamNetworking. Ex: "unet,steamnetworking"
|
GameWorld |
・Navezgane
・MP Wasteland Horde
・MP Wasteland Skirmish
・MP Wasteland War
・Random Gen
|
ワールドの種類を設定します。
いくつか値がありますが、普通にサバイバルするのであればNavezgane/Random Genを選びましょう。
そのほかはクリエイティブ専用だそうです。(def: Navezgane)
|
GameName |
文字列
(1バイト文字以外はおそらく使用不可)
|
ワールドの名前です。 GameWorldでRandom Genを指定している場合はこれがシード値になります。 |
GameDifficulty |
0, 1, 2, 3, 4 |
ゲームの難易度です。 0-4まで指定できるようで、0が最も低く、4が最も高くなります。(def: 2) |
GameMode |
・GameModeSurvivalMP
・GameModeSurvivalSP
|
ゲームモードです。
2つありますが、GameModeSurvivalMPを入れておきましょう。(def GameModeSurvivalMP)
|
ZombiesRun |
0, 1, 2 |
ゾンビが走るか走らないかの設定です。
0だと夜間だけ走り、1だと走りません。
2は昼夜問わず走ります。
|
BuildCreate |
true/false |
チートモードです。
いわゆるクリエイティブモード。
|
DayNightLength |
数値(分単位) |
ゲーム内での一日の時間です。
リアルタイム指定で、60であればリアルタイム1時間でゲーム内日付が変わります。
|
DayLightLength |
数値(時間) |
太陽が出ている時間を設定します。
ゲーム内時間で時間刻みで設定することができます。
18であればゲーム内時間で18時間太陽が出ています。
|
FriendlyFire |
true/false |
プレイヤー同士での攻撃にダメージ判定を与えるか与えないかです。
trueにするとプレイヤーキルができます。
|
PersistentPlayerProfiles |
true/false |
falseにしておくとプレイヤープロフィールの変更が可能で、trueにしておくとそのサーバに初めに参加したときのプロフィールが使用されます。
|
PlayerSafeZoneLevel |
|
a11より追加
おそらくプレイヤーがスポーンした時敵性生物を配置しない距離でしょうか?
レベルの定義が不明です。
(If a player is less or equal this level he will create a safe zone (no enemies) when spawned)
|
PlayerSafeZoneHours |
|
a11より追加
PlayerSafeZoneLevelが有効な時間です。
ゲーム内時間で設定した時間(Hour)だけ有効になります。
|
DropOnDeath |
0, 1, 2, 3 |
死亡時の所持アイテムドロップの設定です。
0は所持品全てをその場に
1はツールベルトのみ
2はバックパックのみ
3は所持品の消去
|
DropOnQuit |
0, 1, 2, 3 |
サーバ退出時の所持アイテムドロップの設定です。
0は何もドロップしない
1は全て
2はツールベルトのみ
3はバックパックのみ
|
BloodMoonEnemyCount |
整数値
|
a16より追加
ホードの間に湧くゾンビの数です。プレイヤー毎に適用されるようで、この数字 x プレイヤーの数が出現数でしょうか。
The number of zombies spawned during blood moons per player.
|
EnemySenseMemory |
数値(秒) |
a16より削除
ゾンビが警戒モードに入ってから見失うまでの時間・・・かな?
|
EnemySenseMemory |
数値(秒) |
敵が出現する割合。
0 = 0%
1 = 50%
2 = 75%
3 = 100%
4 = 125%
5 = 150%
|
EnemyDifficulty |
0, 1 |
敵の凶暴さ・・・?イマイチ分かりません。 |
BlockDurabilityModifier |
数値(%) |
ブロックの硬さの割合。
100%を基準とした割合です。
ゾンビに対する耐久も含まれている模様。
|
LootAbundance |
数値(%) |
探索時に回収できる物資の量の割合。
|
LootRespawnDays |
数値(日) |
探索物から得られるアイテムの復活する間隔。
|
LandClaimSize |
数値(ブロック) |
LandClaimの有効範囲。 |
LandClaimDeadZone |
数値(ブロック) |
LandClaim同士配置できない距離 |
LandClaimExpiryTime |
数値(日) |
オフラインでも保護される時間。 |
LandClaimDecayMode |
0, 1, 2 |
LandClaimの効果の減衰を示すようですが、イマイチわかりませんでした。 |
LandClaimOnline DurabilityModifier |
数値(倍数) |
LandClaimの範囲内(LandClaimSize)におけるブロックの硬さ。 |
AirDropFrequency |
数値(時間) |
航空支援投下の間隔、ゲーム内時間で設定します。 |
MaxSpawnedZombies |
数値(数) |
ゾンビの最大湧き数
増やしすぎるとメモリ消費が大きくなるため注意が必要。
|
MaxSpawnedAnimals |
数値(数) |
a11.3より追加
動物の最大湧き数
|
BedrollDeadZoneSize |
数値 |
a16より追加
ベッドロールの付近安全地帯サイズの設定です。詳しい単位はわかりません。
原文: Size of bedroll deadzone, no zombies will spawn inside this area, and any cleared sleeper volumes that touch a bedroll deadzone will not spawn after they've been cleared.
|
ControlPanelEnabled |
true/false |
ウェブコントロールパネルを有効にします。
後ほど出てくるTelnetを使う方法もありますが、コンソールがこの二つしかないためTrueにしておいてもいいでしょう。
ただし、管理コンソールであるため、ポート開放は注意です。
|
ControlPanelPort |
数値
(範囲の詳細はポート番号の種類を参照)
|
コントロールパネルが待機するポート番号。(def: 8080)
|
ControlPanelPassword |
文字列
(1バイト文字以外はおそらく使用不可)
|
コントロールパネルにアクセスする際に問われるパスワードです。
|
TelnetEnabled |
true/false |
Telnetを有効にします。
ウェブコントロールパネル同様数少ない管理用コンソールアクセス方法であるため有効にしておきましょう。
ただし、ウェブコントロールパネル同様ポート開放は要注意。
また、7dtdのTelnetは暗号化が行われていません。
平文でパスワードがやり取りされている点も要注意。
|
TelnetPort |
数値
(範囲の詳細はポート番号の種類を参照)
|
Telnetが待機するポート番号(def: 8081) |
TelnetPassword |
文字列
(1バイト文字以外はおそらく使用不可)
|
Telnetにアクセスする際に問われるパスワードです。 |
AdminFileName |
文字列(相対/絶対パス?) |
管理者やホワイトリストなどのデータを格納するxmlファイルの指定
相対で指定した場合はAppData以下の7DaysToDieディレクトリがルートとなります。
|
EACEnabled |
true/false |
EAC(Easy Anti Cheat)を有効にするかしないか。
主に海賊版やチートMOD対策です。
|
HideCommandExecutionLog |
数値 |
a16より追加
コマンドを実行した際にログ上にその旨を表示するかどうか。
0: すべて表示
1: TelnetあるいはControlPanelからのコマンド実行のみ非表示
2: [1]に加えてゲームクライアントからのコマンド実行も非表示
3: すべて非表示
原文: Hide logging of command execution. 0 = show everything, 1 = hide only from Telnet/ControlPanel, 2 = also hide from remote game clients, 3 = hide everything
|
MaxUncoveredMapChunksPerPlayer |
数値 |
a16より追加
各プレイヤーがどれだけの範囲でチャンクを描写するかどうかを設定します。 プレイヤーあたりの最大マップファイルサイズは512バイトにこの値を掛けたものです。
標準値は131072で、ゲーム内で32km²を表します。 最小単位は4096/km²でしょうか。
原文: Override how many chunks can be uncovered on the ingame map by each player. Resulting max map file size per player is 512 Bytes times this value. Default 131072 means max 32 km² can be uncovered at any time
|
SaveGameFolder |
文字列(絶対パス) |
サーバデータの保存先を指定します。
オプションであるためコメントアウト化されているので使用する場合はコメントを外しましょう。
|
サーバ起動
設定が終了しましたら起動していきます。
serverconfig.xmlと同一のディレクトリにstartdedicated.batというファイルがあるため、そちらを実行。
パスワード入力画面が出ましたら完了です。
ただし、環境によってはこの画面に行き着かない場合があります。
その場合は
次の項をご覧下さい。
パスワード入力に行きつかない
スペックの事情やTelnetの有無によってパスワード入力に行き着かない場合が多々あります。
私もその口です。
これはbatがサーバ起動させたあとに15秒間待機し、Telnet接続を試みるといった単純な処理が書かれているために起こります。
15秒間の間にサーバが起動していなければTelnet接続は失敗します。
Telnetクライアントが未インストールであれば起動が完了していても失敗します。
なお、記事執筆当時の話なので2020年4月1日現在はもうちょっと複雑なバッチファイルになっていますのでマシにはなってるのかも。
この場合はとりあえずTelnetがインストールされているか確認しましょう。
確認方法は「
Windowsキー + R⇒telnetでエンター」で
こちらのようなエラーが出た場合はTelnetがインストールされていません。
*当環境にはインストールされているため敢えて打ち間違えています。
その場合はTelnetをインストールしましょう。
Telnetクライアントのインストール方法については
WindowsにおけるTelnetのセットアップをご覧下さい。
なお、XPには元からTelnetクライアントはインストールされています。
別でTelnetをインストールしている場合は各自設定をしてください。
スペックの問題や別のTelnetがある場合はTelnet接続エラーの後コマンドラインを閉じ、起動が完了してからTelnetクライアントにて接続を試みてください。
Telnetコマンドの例は以下のとおりです。
telnet [host] [port]
例:telnet localhost 8081
目安としてはおおよそ7DaysToDie.exeが1.5-2.0GBほどのメモリを使用していると起動が完了しています。
ただし、環境によっては異なる値を示すため何度かトライしてみましょう。
はじめに
こちらからはサーバ拡張作業になります。
必ず必要な手順ではないため省いても問題ありませんが、通常のサーバでは物足りない部分や不具合が修正されているので筆者は導入をおすすめします。
ただし、こちらからは拡張であるためリネームなどの作業は各自必要だと思った場合行ってください。
その説明は一切しません。
サーバ環境に関する注意
こちらの拡張はゲームクライアント版のDedicatedサーバでは一切動作しません。
SteamのツールにあるDedicatedサーバをベースに行いましょう。
基礎の導入
こちらから
server_fixes.tar.gzをダウンロードします。
※tar.gzファイルはWindows標準のソフトウェアでは展開できないため、WinRARや7zipなどを用意しておきましょう。
ダウンロードしてきたファイルを展開し、出てきたModsフォルダをそのまま7 Days To Die Dedicated Serverに移動させます。
これでインストールが完了しました。
このままサーバを起動して問題なく起動できたら完了です。
マップを開く
マップは解凍時にModsフォルダ内の
Allocs_WebAndMapRenderingを導入した場合のみ利用できます。
まず、serverconfig.xmlのTelnetPortのポート番号を控えておきましょう。
次に、ウェブブラウザにて「
http://127.0.0.1:TelnetPort + 1」にアクセスします。
ポート番号には先程控えておいたポート番号に1を足したものになります。
8080なら、「http://127.0.0.1:8082」となります。
なお、初期設定ではSteamアカウントでログインしていないと利用できないため、必要な場合は
マップの設定を御覧ください。
マップの設定
マップは7dtdサーバと同じく、以下の設定ファイルにてパーミッション管理がされています。
「
C:\Users\*UserName*\AppData\Roaming\7DaysToDie\Saves\webpermissions.xml」
なお、AppDataは隠しファイルですので表示設定を行うか「ファイル名を指定して実行」にて「%AppData%」と入力してください。
設定ファイルの中はXMLで記述されており、7dtd本体のサーバ設定と同じ言語が用いられています。
また、すべてコメントアウトされていますが、恐らくこれが初期設定であると考えられます。
パーミッションですが、1000まではゲーム内のAdminまたはWhitelistのパーミッションと同期しています。
何も設定していないかパーミッションレベルを1000で設定している場合1000として扱われ、こちらのマップでも1000として扱われます。
また、1000までの場合Steamアカウントでのログインが必要となります。
全く関係のない第三者の場合は2000として扱われ、2000としたものに関してはログインの必要はありません。
permissions
web.map |
マップ表示に関する権限 |
webapi.getlog |
サーバコンソールのログの表示に関する権限 |
webapi.executeconsolecommand |
プロパティ名から推測するとコンソールコマンドを実行する権限 |
webapi.getstats |
|
webapi.getplayersonline |
オンラインのプレイヤーを取得する権限 |
webapi.getplayerslocation |
プレイヤーの位置を取得する権限 |
webapi.viewallplayers |
|
webapi.getlandclaims |
LandClaimを取得する権限 |
webapi.viewallclaims |
|
webapi.getplayerinventory |
プレイヤーのインベントリを取得する権限 |
webapi.gethostilelocation |
ゾンビの位置を取得する権限 |
webapi.getanimalslocation |
動物の位置を取得する権限 |
コマンドの.(ドット)以前を見るとwebとwebapiがありますが、webはウェブブラウザ上で表示されるもので、webapiの場合はウェブブラウザ上のマップでも反映されますが、それ以前にウェブAPIとして機能しているため外部アプリケーションやプログラム制御でデータだけの取得が可能です。
なお、Web APIは成功時にJSONで戻ってきます。
Web API
ここからは情報がほぼないのでちょくちょく解析してるデータを書いていきます。
正確性が微妙なので正常に動作しない場合もあるかもしれませんのでご注意ください。
Web APIはwebpermissions.xmlのパーミッションに基づいて動作します。
今回は例として全部0で動作してることにします。
今回はすべて権限内で動作するのでトークンの発行が必要となります。
トークンはadmintokensタグの子要素のtokenタグで設定します。
なお、2000の場合はトークンの発行は必要ありません。
admintokens
name |
トークンの名前です。
トークン判別で利用するので判別可能な名称をつけてください。
|
token |
トークン本体です。
パスワードといった認識でいいと思います。
|
permission_level |
パーミッションレベルです。
0から1000で指定します。
|
今回は「
<token name="adminuser1" token="supersecrettoken" permission_level="0" />」とします。
設定が終わりましたら試しにアクセスしてみましょう。
ウェブブラウザで「http://127.0.0.1:8082/api/getstats?adminuser=adminuser1&admintoken=supersecrettoken」でアクセスしてみてください。
getstats.jsonで以下の様なデータが取れたとおもいます。
{
"gametime":{
"days":1,
"hours":9,
"minutes":22
},
"players":0,
"hostiles":0,
"animals":0
}
こちらのデータの扱いは今回述べないとして、取得方法がパターン化されているのでURLを分解していきます。
公式ページでも書かれていますが、
「
http://[Address]:[Port]/api/[property]?adminuser=[name]&admintoken=[token]」といった形で取得します。
アドレスとポートは既知であるとして、[property]はwebapi.
[ここ]の[ここ]の部分が当てはまります。
今回の例だとwebapi.getstatsをターゲットにしていたのでgetstatsが入りました。
次に、adminuser=[name]ですが、先ほど設定したtokenタグの
name属性の値が入ります。
更に、それのセットとして、admintoken=[token]には
token属性の値が入ります。
これを指定することでログインなしに指定されたパーミッションでjsonの取得ができます。
これを応用すると、同じように他のjsonも取得することができます。
例えば、プレイヤーの位置を取得したい場合は
「
http://127.0.0.1:8082/api/getplayerslocation?adminuser=adminuser1&admintoken=supersecrettoken」
で取得することができます。
ここまで書きましたが、結構わからない部分が多いので分かり次第追記していきます。