Risk of Rain 2
You are viewing a potentially older version of this package. View Latest Version
Install

Details

Date Uploaded
12 hours ago
Downloads
97
Size
88KB
Dependency string
OchaDashiMan-MultiDPS-1.0.0

MultiDPS

Risk of Rain 2 用のクライアントサイド MOD。プレイヤーごとの DPS を HUD に並べて表示する。

既存の DPSMeter はダメージを「自分 / 自分のミニオン / 他プレイヤー全員の合計 / チーム全体」の 4 つに集約してしまうため、誰が何 DPS 出しているかの内訳が取れない。MultiDPS はそれを プレイヤー単位に分解する。

Alice        Railgunner      1,240  38%
You          Loader            902  28%
Bob          Engineer          640  20% (+180)
------------------------------------
TEAM                        3,232

計測方法

フロア単位の累計平均で計算する。

DPS = そのフロアで与えた総ダメージ / フロアに入ってからの経過時間
  • 直近 N 秒のローリングウィンドウ(瞬間火力)ではない。何もしない時間が続けば数値は下がっていく
  • 分母は全員共通なので、プレイヤー間の比較は公平になる
  • 新しいフロアに入ると無条件で全リセットされる。ステージの種類(隠しステージかどうか)も ループ回数も見ていないので、Bazaar やゴールドショアも普通に 1 フロアとして扱われる
  • 前のフロアの記録は保持しない

時計

分母は素の実時間(Time.unscaledTime)で、フロアに入った瞬間からの差分を取る。

画面右上のランタイマー(Run.GetRunStopwatch())は使わない。 あれは Run.ShouldUpdateRunStopwatch の条件により、シーンが Stage でも TimedIntermission でもないとき(Bazaar、ゴールドショアなどの Intermission)に止まる。 ゴールドショアは「タイマーが止まったまま戦うステージ」なので、 タイマー基準にするとあの戦闘が丸ごと計測対象外になってしまう。

その代わり、ポーズ中も分母は進む。長時間ポーズすると全員の DPS が下がって見える。

(+180) はタレット・ドローン・召喚物が出したぶん。所有者を最大 4 段まで遡って持ち主に紐付ける。

仕組み

ダメージは GlobalEventManager.onClientDamageNotified から拾っている。 このイベントの元になる DamageDealtMessage は、サーバーが NetworkServer.SendToAll全クライアントへ無条件にブロードキャストしているため、

  • ホストでもクライアントでも全プレイヤーのダメージを観測できる
  • 他のプレイヤーや、ホストが MOD を入れている必要はない
  • ネットワークへは何も送信しないので、バニラサーバーでも安全に動く

数値は DamageReport.damageDealt(実際に通ったダメージ)なので、オーバーキル分は含まれない。 「理論火力」ではなく「実効 DPS」の指標になる。

操作

操作 既定
表示 / 非表示 F9

その他の設定は Risk of Options の設定画面、または BepInEx/config/main3.multidps.cfg から変更できる。 位置・サイズ・文字サイズ・色・各列の表示有無・名前の桁数などを調整できる。

列がずれる場合は Monospace Width を微調整する(フォント幅に対する等幅指定の値)。

ビルド

Directory.Build.props にゲームと MOD プロファイルのパスが書いてある。環境が違う場合はここを直す。

dotnet build MultiDPS.sln -c Release

ビルドが通ると MultiDPS.dll はプロファイルの BepInEx/plugins/MultiDPS/ へ自動配置される。

パスをその場で上書きすることもできる。

dotnet build MultiDPS.sln -c Release /p:RoR2Dir="D:\Games\Risk of Rain 2"

参照している DLL はすべてゲームと BepInEx に既にあるものなので、NuGet パッケージの追加は不要。 ターゲットは netstandard2.1RoR2.dllUnityEngine.UI.dll が netstandard 2.1 を参照しているため、 2.0 では CS1705 で通らない)。

構成

ファイル 役割
Plugin.cs BepInEx のエントリポイント。イベント購読と Harmony パッチの適用
Attribution.cs 攻撃者の GameObject から、帰属させるべきプレイヤーを割り出す
PlayerDps.cs 1 人分の累計ダメージ
DpsTracker.cs 全体の集計とフロア単位のリセット
ScoreboardView.cs HUD 上の描画
ScoreboardBootstrap.cs HUD の初期化順が噛み合わなかったときの取り付け再試行
ModConfig.cs 設定と Risk of Options 連携
Patches/HudPatch.cs HUD.Awake にフックしてスコアボードを生成
Patches/ChatBoxPatch.cs チャット入力中を検知してトグルキーを無効化
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.