Dread Hunger ローカルサーバー出航ツールを作った

DreadHunger Local Server Launcher

機能

  • コマンドラインから直接起動しないといけないローカルでのサーバーを簡単に建てられる
  • frida内蔵でpatchesディレクトリ内にあるjsファイルを選んでサーバー側MODを設定できる
  • サーバー側の旧広漠MODを簡単にON/OFFできる

変更履歴

0.0.1 リリース

ダウンロード

dhlsl_0.0.1
ここから落としてお好きなフォルダに解凍する。

事前準備

必要なら、旧広漠MOD(制作は中国のMod作成チームSeptenary Gods、感謝しよう!)を下記からDLして、両方ともmodsディレクトリ内に置く。
Old_Expanse_p.pak
Old_Expanse_p.sig
file
↑ここに入れる
旧広漠Modにはこれとdaijia_pってファイル名のやつが出回ってるんだけど今のところ上記のやつにしか対応してない

画面説明とつかいかた

file
起動するとこんな感じの画面になる、時折真っ白な画面から先に進まないことがあるっぽいけどそういう時は閉じてもっかい試す
以下細かい説明

プリセットから設定

file
よくある設定を一纏めにして事前にプリセット化してある、今のところ一人出航トレモと石炭燃焼1.2倍のみの設定

Game Directory/ゲームのインストール先

file
通常は初回起動時に自動でDread Hungerのインストール先を探してくるんだけど、それが上手くいかなかった場合は手動でlocateボタンからDread Hungerのフォルダを選択する。
自動で探してくる機能はauto detectボタンを押しても手動で実行できる。

Game Settings/ゲーム設定

file
サーバー起動時の設定を行える。ゲーム内の出航画面で行うものと同じ。
一番下の「port」だけは特殊で、このゲームは一度ゲームを終えたあと再起動等せずにロビーに戻った際、なぜか同じIPに対し接続に失敗するという意味不明なバグがある。
なのでアドレスのうちportだけ変えることでこの問題に対処できる。

Server Options/サーバー側MOD

file
旧広漠MODのオンオフと、patchesディレクトリ内のサーバー側プラグインのオンオフを切り替えられる。
patchesディレクトリの中のjsファイルを自動で読み込んで表示するので、もし自分だけのスクリプトを持っている場合はただフォルダに放り込めば実行時に有効化できる。
標準で同梱しているのは以下の通り(割と中国勢の開発者から貰ったやつをほぼそのままで同梱してる、感謝

  • rand_role_win64.js … 役職が選択によらずランダムで振り分けられる
  • spell_cast_start_win64.js … ゲーム開始時、レベル1相当の沈黙が発動する
  • spell_charge_fix_win64.js … ゲーム開始時、闇の傀儡の初期マナが0.06増加する(公式サーバー終了前の仕様相当)
  • spell_custom_win64.js … 闇の傀儡が5つ全ての呪文を使える
  • train_mode_win64.js … 練習モード、後述

なお、旧広漠MODを有効化しても、MODが有効化されるのはサーバー側のみなので、クライアント側のMODは別個自分で入れる必要がある。
これは他のMODツールとの競合を防ぐためなので、需要があるならゲームクライアント側も抜き差しできるようにするけど今は無理

コントローラ

file
BEGINボタンを押すと、現在の設定でサーバーが起動する。
誤って起動したり、さっさと落としたい場合はKILLボタンを押すと即座にサーバープロセスが停止する。
実行中は起動時の設定がRunning Process/実行中のゲームに表示される。

練習モードについて

一人でこのゲームのサーバーを立てる一番の意義。以下の機能が使える。

  • 銃弾と矢をリロードした際、残数が減らない。たまにバグって捨てられなくなるがその場合他インベントリとかと行き来させると治るらしい
  • 開始と同時にマスケットが開く
  • 闇の傀儡は常にレベル1相当のマナが溜まった状態になり、各スペルのクールダウンが0になる(副作用で幽体の残り時間が見えない、未修正)
  • 注射を打っても無くならない
  • 全てのクラフト(円形のゲージが表示されるタイプの作業全般)時間がゼロ

出航のしかた

「そもそもローカルサーバー建てられたから何!?」という人向けの説明。
サーバーを建てた状態(BEGINボタンを押した状態)になったら、ゲーム内の出航画面へ進む。
実はこのゲームはサーバーにさえ繋げられればゲーム側の設定はほとんど見られていないので、「Public」「Create Server」のチェックだけ外したら適当に出航すれば良い。
file

そしたら出向してIP入力画面で127.0.0.1:7777と入れればゲームに繋がる。127.0.0.1というのは必ず自分自身を指すIPなので、自鯖が立ってるならどんな場合でもこれでつながる。
もしもHamachiのようなVPNを使っている場合はhamachi上の自分のIPを入れれば良い。

後ろの7777の部分は、ゲームオプションで設定したportを入力する。

なんかあったらコメントかツイッタでおしえてね

カテゴリー: IT | コメントする

WSLでWindowsのファイルシステム内をマウントするとWineがコケる

WSLでWineを使う時はちゃんとWSL用にファイルシステムを初期化した仮想ドライブでやろうね

カテゴリー: IT | コメントする

WSL2のUbuntu 22.04 LTSにWineがインストールできない

$ sudo apt install --install-recommends winehq-stable
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 winehq-stable : Depends: wine-stable (= 9.0.0.0~jammy-1)
E: Unable to correct problems, you have held broken packages.

んでwinehq-stable : Depends: wine-stable (= 9.0.0.0~jammy-1)とかいうからじゃあsudo apt install wine-stableしてやろうじゃんとかすると、

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 libgphoto2-6:i386 : Depends: libgd3:i386 (>= 2.1.0~alpha~) but it is not installable

公式ドキュメントに従ってんのにこれ
で良く見ると公式のFAQにUbuntuではよくあることと記載がある
https://gitlab.winehq.org/wine/wine/-/wikis/FAQ#how-do-i-solve-dependency-errors-when-trying-to-install-wine

ざっくり訳

ubuntuだとあるパケの64bit版と32bit版(パケ名が~:i386になってるやつ)を同時に入れようとした場合、両方同じパッケージじゃないといけない決まりがあるよ
んで例えば公式リポに上がってるライブラリがアーキテクチャ毎にバージョン違ったりすると、片方入れたら自動でもう片方がアンインストールされたりするよ
PPAとかでよく起こるやつだけど、これが起きたらリポ設定弄って適切なパッケージが入るようにしてね

で上の例だと更にlibgd3:i386が入らんとか言われてるわけだが、実際にこれを入れようとすると勝手にlibgd3の64bit版がアンインストールされる。
それぞれのパケがどこからどう入るようになってるか調べると、

$ apt policy libgd3
libgd3:
  Installed: (none)
  Candidate: 2.3.3-12+ubuntu22.04.1+deb.sury.org+1
  Version table:
     2.3.3-12+ubuntu22.04.1+deb.sury.org+1 500
        500 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main amd64 Packages
     2.3.0-2ubuntu2 500
        500 http://archive.ubuntu.com/ubuntu jammy/main amd64 Packages

$ apt policy libgd3:i386
libgd3:i386:
  Installed: 2.3.3-6+ubuntu22.04.1+deb.sury.org+1
  Candidate: 2.3.3-6+ubuntu22.04.1+deb.sury.org+1
  Version table:
 *** 2.3.3-6+ubuntu22.04.1+deb.sury.org+1 500
        500 https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy/main i386 Packages
        100 /var/lib/dpkg/status
     2.3.0-2ubuntu2 500
        500 http://archive.ubuntu.com/ubuntu jammy/main i386 Packages

つまり64bitが2.3.3-12…で32bitが2.3.3-6…だからどっちか一方しか入らんよと。
恐らく理想はバージョンのあってる最新版のリポを入れる事なんだろうけど、めんどいので第二候補の2.3.0-2ubuntu2とやらを入れてしまう。

sudo apt install libgd3=2.3.0-2ubuntu2 libgd3:i386=2.3.0-2ubuntu2

したらあとはsudo apt install –install-recommends winehq-◯◯叩き直して勝ち。

カテゴリー: IT | コメントする

3線改造式AOM5024で本格バイノーラルマイクを作ろう with 3Dプリンタ

美耳・改

https://github.com/DrRoot-github/bimimi-5024

続きを読む

カテゴリー: 電子工作, 音響関係 | コメントする

Typescript + Sequelizeをちゃんと動かすには

typescriptでSequelizeを使う

概要

TypescriptにおけるORMの選択肢は俺の知る限り3つメジャーなものがある。
typeorm、Prisma、Sequelizeである。
何れも試した結果、一番マシなものはSequelizeという結論に達した。
軽く触れておくと、2023年11月現在、typeormには設定一つでデッドロックを起こして即死させる致命的なバグがあり、一回プロダクションでやらかしてえらい目にあった。
一方機能面で非常に優れているPrismaだが、何故かsqliteのmemoryモードが使えないという仕様があり、テストが非常に書きにくいという問題がある。
というわけで消去法的に選んだSequelizeだが、これもこれで中々問題があり、まともにCRUD操作ができるようになるまで苦労したので動くまでの記録を示す。

前提

今回試した環境は以下。

  • typescript 4.9.4
  • electron 22.0.0
  • vite 4.0.3
  • sequelize 6.33.0
  • sequelize-typescript 2.1.5
    electron-vue-viteライブラリでボイラープレートを生成しており、この他にもelectronなのでvueとか使ってレンダラープロセスを書いているが割愛。
    本体のsequelizeはjavascriptベースのライブラリであり、typescript向けのラッパーとしてsequelize-typescriptを用いている。
    この「sequelizeはなまじ古くてtsに対する対応が甘め」という欠点をラッパーライブラリでゴリ押しているのが2023年現在の現状である。tsの公式対応がアナウンスされている7系はまだalphaだ。

結論

ts-configのcompilerOptionsに"useDefineForClassFields": falseを追加する。
これはts 3.7から導入された機能で、現在ではデフォルトがtrueになっている。
これをしないとどうなるかというと、sequelizeでgetしてきたオブジェクトの中身がgetterの動的な注入を阻害してundefinedになる。
具体的に言うとこんなコード↓を書いても通らないということだ。

const res = await User.create({name: "testit"});
expect(res.name).toBe("testit");

思うこと

ts碌なORMが無い
sequelize 7系はよ
TypeORMは開発がやる気なくて駄目だ
あんなもんをNestJSは公式で推すなバカ

追記
色々試した結果体外Sequelizeもゴミだった
Typeormがマシとか思いもよらんかった

カテゴリー: IT | コメントする

CCFOLIAのカスタムCSSを書いた

https://github.com/DrRoot-github/ccfolia-css

あとでドキュメントもっとかく
ちなみに頼まれて作ったものなので俺は全くCCFOLIAを使っていない なんだそれは

カテゴリー: IT | コメントする

ロックマンエグゼ6 改造カードシミュレーターをつくってみた

gaiyou

エグゼ6の改造カードをがちゃがちゃ出来る

https://drroot-github.github.io/mmbn6-modcards/

こんごのかだい

保存と復帰みたいなのはできるようにしたい
バグがあったらこの記事にコメントよろしく
ナビカスシミュもつくりたい

リポジトリ
https://github.com/DrRoot-github/mmbn6-modcards
一番手っ取り早いのはPR出すこと

カテゴリー: IT | 8件のコメント

壊れたアケコンを修理してみた!

アケコンのレバーが効かなくなったので、レバー単体で交換してみました。
今回はそのレポート記事になります!

交換に用いるのはこちらのレバー。4000円とお高いですが、クリアなボールがかっこいい!
file

アケコンを分解してレバーをつけかえていくのですが、若干異なる規格に沿っているので一度お互い分解しないと取り付けができません。
分解中にネジがナメてしまったので、ネジ外し(1700円)と電動ドリル(6500円)を急遽発注。
file


分解したら機械油のついた部品が弾け飛んでホコリまみれになり元に戻らなくなる


不燃ゴミ

file

総評
4000円で買ったものをそのまま燃えないゴミにすると辛い
本来いらなかった余計な出費が2万近くなった
二度とやらない
カス

カテゴリー: 雑記 | コメントする

yarn devみたいなノリでts-node + watchを実現するには

英語が読める?じゃあこれ読んで終わりな!
https://stackoverflow.com/questions/58187115/typescript-paths-not-working-in-an-express-project

(っ◞‸◟c)

何が問題なのか

expressみたいな鯖をnode + tsとかで自前で環境入れていくと、vue-cliでやってくれるようなdevコマンド一発でホットリロードつきビルドが標準で出来ない。
でnodemon使って自前でそのあたりのスクリプト書くんだけど微妙にnodemonのドキュメントが不親切で情報がとっちらかってるのでまとめておく。

結論

devDepenciesにnodemon, ts-node, tsconfig-pathsを追加して、プロジェクトのルートにnodemon.jsonを作成する。
tsconfig-pathsはtsconfigでpathsを使わない(インポート時のパスを@/とかから始められるエイリアス的なやつ)ならいらないけどあると便利だよ
jsonの中身はこんな感じ

{
  "ignore": [
    "**/*.test.ts",
    "**/*.spec.ts",
    ".git",
    "node_modules"
  ],
  "watch": [
    "src"
  ],
  "exec": "node -r tsconfig-paths/register -r ts-node/register ./src/index.ts",
  "ext": "ts, js"
}

あとはpackage.json内のscriptで"dev":"yarn nodemon"とでも書いておけばよろし。

余談

nodemonは何処にも書いてないんだがどうも標準でts-nodeを使ってくれるらしく、前述のパスの問題が気にならないなら
yarn nodemon src/index.tsとかで一発らしいよ。びっくりだね。ドキュメント書いとけ。

カテゴリー: IT | コメントする

しばいぬAPI

https://drroot.page/wp/wp-content/uploads/2022/09/shibes.html

https://shibe.online/
しばいぬAPIのクライアントページを作成した。
公式サイトでも出来る事だが、ボタン一つで更新をかけられるようになっている。

カテゴリー: IT | コメントする