くまのてサーバー

0から始める7Days To Die server用Mod作成

0.はじめに(参考にしたもの)

https://7dtd.illy.bz

にあるDirect SVN access(https:/svn.illy.bz/7dtd)にあったソースコード

https://seesaawiki/rimworld/ RimWorld私的wiki様

にある「DLLを用いたMod作成」のページ

断片的に7daysのmod作成の資料はあったが判ってる人間じゃないと

判らないものばかりだったが、この2つのページを読んで作れそうな気がしたので

やってみた

0からと言っていますが本稿は別の言語をそれなりに習得はしているがC#については完全素人かつ

ゲームのDLL型modを一切作ったことのないの人間が割と適当に

C#をふんわりと感覚的に勉強していってるのを記録した物になります。

なので何も基礎が無い方は一度、C#入門本やサイトを読んでHelloWorldを

出力出来るくらい進めてから読んだ方がいいかもしれません。

あと7dtdのxmlベースのmod作成・改造を行った経験がある方をターゲットにしています。



1.開発環境の準備


「visual studio」のキーワードで検索して

https://visualstudio.microsoft.com/ja/

にいく。


ここで「VisualStudioCommunity」のダウンロードを行う。


今(2022年5月上旬)だと、無料版の

「VisualStudioCommunity2022」

をダウンロードして利用できる。


VisualStudioSetup.exe がダウンロード出来たと思う。

ダウンロードしたインストーラーを起動

「.NETデスクトップ開発」をチェックしてインストール

DLL開発ではそれ以外は無くてもok



2.プロジェクト作成開始

「VisualStudio2022」を起動したら

「新しいプロジェクトの作成」を選択


「クラスライブラリ(.NET Framework)」を選択して「次へ」ボタンを押す


少し下へスクロールした先にあるが、すぐに表示されている

「クラスライブラリ」は違うので注意

初回はこれに嵌ってしばらく時間を無駄にしました。



1.プロジェクト名

なんでもいいけど念のために英数小文字のみで書いておいた方が無難かもしれない。

ここでは「practice001」と入力


2.場所

他の場所でも問題ないかもしれないけど、一応念のために

【7 Days to Die Dedicated Serverインストール場所】の下にModsというディレクトリを作成しその下にさらに任意の名前

ここでの例:C:\Program Files (x86)\Steam\steamapps\common\7 Days to Die Dedicated Server\Mods\test001


3.ソリューション名

なんでもいいけど1のプロジェクト名を入れると連動して自動で3にも同じものが入力されるので

1と3を同じにそろえておくと無難なのかもしれない

一般的な流儀とかよく分かんない。


4.フレームワーク

何もしていない状態だと「.Net Framework 4.8」が選ばれてそれしか選べないけど

この4.8のままでok

.NET Framework 4.6.1 とか .NET Framework4.7.2 とか別で入れていて選択できる場合は

どちらでも問題なく実行できるけどとりあえずは.Net Framework4系の最新版っぽいのを使えばいいのかもしれない

(4.6を使えという文献もあったが、日付を見たら古い記事だったので当時では最新版を使えという意味だったのだろうと思う)


ここまで入力出来たら

5の「作成」ボタンをポチ


プロジェクトの作成が完了したら

最初に「Class1.cs」というソースコードが準備されている。

VisualStudioにサインインしろとかのwindowが出るかもしれないけど「閉じる」でok

開くたびに出るかもしれないけど無視しても登録してもok

自分は登録せずにいつも閉じています。


右側の画面のソリューションエクスプローラーで「Class1.cs」を右クリックし

名前の変更を選び「API.css」に変更しエンター、確認画面が出るが「はい」で続行



画面上の「プロジェクトのタブ」→「参照の追加」

開いた画面の下の方にに「参照」ボタンがあるのでクリック

【7 Days to Die Dedicated Serverインストール場所】にある「7DaysToDieServer_Data」の中の「Managed」のディレクトリを選択

例:C:\Program Files (x86)\Steam\steamapps\common\7 Days to Die Dedicated Server\7DaysToDieServer_Data\Managed


Managedの中にある

Assembly-CSharp.dll

を選択して追加

同じことを

Assembly-CSharp-firstpass.dll

LogLibrary.dll

UnityEngine.dll

についても追加を行い最後に「参照マネージャー」の下にある「OK」を押す


System.dll

System.Xml.dll

mscorlib.dll

についても行えとある資料もあるがこれらは自動的に読まれるらしいのでしなくてもok


将来的にいろいろ書けるようになると追加で使いたい関数とか出てくるだろうから

その際は追加で参照を増やすことになると思います。

(そのくらいになってればなにをどう追加したらいいか判ると思う。多分。)



API.csのサンプルソースコード


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace practice001
{
    public class API : IModApi
    {
        public void InitMod(Mod _modInstance)
        {
            ModEvents.GameShutdown.RegisterHandler(GameShutdown);
        }

        public void GameShutdown()
        {
            Log.Out("Test Dayomon");
        }
    }
}

「ビルド」タブの「ソリューションのビルド」を行うとコンパイルが行われる。

デフォルトでDebugリビジョンでのビルドなので

C:\\Program Files (x86)\\Steam\\steamapps\\common\\7 Days to Die Dedicated Server\\test001\\practice001\\practice001\\obj\\Debug

以下にClassLibrary1.dllが生成されている。


「ビルド」→「構成マネージャー」の「アクティブソリューション構成」のDebugをReleaseに変更すればRelease版としてビルド出来る。



これを7daysのサーバーのModsディレクトリにmod名ディレクトリを作成し

7days serverのインストール先/Mods/practice001

この中に今ビルドを行ったdll

practice001.dll

Modinfo.xml

を置いてやる

Modinf.xmlの中身


<?xml version="1.0" encoding="UTF-8" ?>
<xml>
<ModInfo>
    <Name value="practice001" />
    <Description value="." />
    <Author value="作者名" />
    <Version value="1.0" />
</ModInfo>
</xml>

として設置して7dtdサーバーを起動し、practice001のmodのロードが失敗していないことを確認。

このmodはサーバーシャットダウン時にログに「test Dayomon」とだけ出力するだけのもの。

シャットダウンしてログにメッセージが書き込まれていれば成功。



自分メモ

API : IModApiクラスを積んだmodが別々にいくつあっても問題はないが

1つのmodディレクトリに入れると干渉し合う。