カテゴリー: Minecraftプラグイン
AIチームでマイクラサーバーを作る#3数値×10、12時間の経験値曲線、クラス6種のシミュレーション! 📊
この記事は韓国語の原文から翻訳したものです。
ひと目でわかる要点
「ダメージも体力も豪快に」という一言を実際の数値に変えていく過程です。すべての設定を10倍にしつつ運営者が変えた値には触れない1回限りの移行、Excelで直せる経験値テーブル、そして「基本武器が強すぎる」という意見をシミュレーションで検証したら、原因は計算式ではなく武器の攻撃速度だったという話。
- Paper 1.21.11 · サーバー設定ファイル · 2026-09-28〜30 実際に適用・シミュレーション
- ×10移行は「旧デフォルト値のままの項目だけ」を一度だけ変更し number-scale: 10 を記録 — 運営者が変えた値は保持
- 経験値曲線の目標:1→30レベルで約12時間、序盤は速く · 区間ごとに平坦な区間
- クラス間DPS差±40%の主な原因は計算式ではなく武器の攻撃速度の差(斧 0.8回/秒 vs 剣 1.6回/秒)
目次9項目
こんにちは!Mojangcamです 😎
前回の#2では、プラグインの構造と 1000029 ダメージ事件を扱いました。今回はゲームの数値の話です。
RPGサーバーを作っていると、こんな声が出てきます。
「ダメージも豪快に入って、体力も豪快に増えてほしいです。」
良い方向性ですが、これを実際の数値に落とし込むのはなかなか厄介です。今回は
- 🔢 体力・ダメージをまとめて10倍にした方法
- 📈 「30レベルまで12時間」の経験値曲線づくり
- ⚖️ 「基本武器が強すぎる」という意見をシミュレーションで検証した結果
をまとめます。数値を決めるのは企画チームAI、コードに組み込むのは各開発チーム、選ぶのは人間です。
📌 ステップ1 - 数値×10:「見える数値」を大きくする 🔢
何を10倍にするか
| 10倍にする(固定値) | そのまま(割合・その他) |
|---|---|
| 体力、攻撃力、魔法攻撃力 | %オプション、倍率 |
| 武器の基本ダメージ、固定追加ダメージ | 防御力(割合の式なので) |
| ポーションの固定回復量、モブの体力・ダメージ | マナ、経験値、金貨 |
防御力を10倍にしてはいけない理由が面白いんです。防御の式が 방어 / (방어 + 100)(防御 / (防御 + 100))なので、防御25(20%軽減)を250にすると71%軽減になってしまいます。割合の式に入る値をいじると、バランスが崩れます。
すでに動いているサーバーでどう変えるか
一番難しかったのはすでに設定ファイルがあるサーバーでした。運営者がゲーム内でモブの体力を直接変えているかもしれないからです。そこで、すべてのモジュールが同じルールで一度だけ移行するようにしました。
# 各モジュールがサーバー起動時に一度だけ行う処理(実際はJava、流れだけPythonで)
if config.get("number-scale", 1) != 10:
backup(config_file) # 1) 変更前にバックアップ
for key, old_default in OLD_DEFAULTS.items():
if config[key] == old_default: # 2) 旧デフォルト値「そのまま」のものだけ
config[key] = old_default * 10 # 10倍に
else:
log(f"{key} は運営者が変更した値なのでそのまま")
config["number-scale"] = 10 # 3) 記録 → 次回からはもう実行しない
save(config)一つずつ見ていきましょう 💡
- number-scale の記録:サーバーを2回起動しても100倍にならないようにします。
- 旧デフォルト値だけ変更:運営者が触った値には意図があるとみなして残します。その代わりログに一覧を残して、人が直接確認できるようにします。
- バックアップが先:移行が失敗しても元に戻せます。
実際にサーバーを一度再起動すると、core・戦闘・アイテム・レベル・モブの各モジュールがすべてログに「×10移行」を残し、エラーは0件でした。
あわせて決めた補正もあります。
| 項目 | 値 |
|---|---|
| クリティカル倍率 | ×1.5 → ×2.0 |
| 通常モブの体力 | ランク倍率 1.0 → 0.9(通常攻撃4発で倒せるように) |
| モブが自分よりレベルが高いときのダメージ | 差 ≤2: 100% · 3: 80% · 4: 50% · 5以上: 固定 1 |
| ラストヒット経験値の上限 | 自分のレベル +4 のモブの経験値まで(高レベルモブのラストヒット稼ぎ防止) |
📌 ステップ2 - 経験値曲線:1→30レベルで12時間 📈
目標は1→30レベルで約12時間、そして序盤は速くでした。序盤が遅いと人が離れていくからです。
最初はなめらかな曲線で作りましたが、企画チームAIに「区間ごとに感触が違う曲線」を改めて依頼しました。結果はこんな形です。
| 区間 | 形 | 意図 |
|---|---|---|
| Lv 1〜9 | 人が直接決めた値、とても速い | 最初の30分で何度もレベルアップ |
| Lv 10〜14 | 平坦な区間 | 新しい狩場に慣れる |
| Lv 15〜29 | レベルごとに×1.2程度で上昇 | 成長を実感できる |
| Lv 30以降 | 5レベルごとに平坦 + 倍率が徐々に小さくなる(×1.08 → ×1.075 → …) | 際限なく急にならないように |
- 結果:1→30の累計12.0時間、総経験値281,150
- ファイルは
exp_table.csv1つだけなので、Excelで開いて直して/리로드 level(リロードコマンド)を打てばすぐ反映されます
ここにレベル差による経験値ペナルティを付けました。自分よりかなり低いレベルのモブを倒すと、経験値が減ります。
| モブが自分より低いレベル差 | 0〜3 | 4 | 5 | 6 | 7 | 8 | 9 | 10+ |
|---|---|---|---|---|---|---|---|---|
| もらえる経験値 | 100% | 90% | 60% | 45% | 30% | 20% | 15% | 10% |
📌 ステップ3 - 「基本武器が強すぎる」→ シミュレーション ⚖️
テストしていた人たちの間で「クラスの基本武器が強すぎる」という意見が出ました。望んでいる方向はこうでした。
武器ダメージは序盤に強く、後半は攻撃力・貫通・クラスステータスのほうがずっと重要になってほしい。
チームリーダーが計算式の草案を作り、企画チームAIにクラス6種 × レベル7段階 × ステータス配分2通り × 計算式3通り = 252通りを計算させました。
提案した計算式(草案)
# 攻撃力:レベル・装備・ステータスが積み上がる側
ATK = (base_attack + growth_attack(level) + gear_flat_attack) \
* (1 + main_stat * 0.005 + sub_stat * 0.002)
# 基準ダメージ:武器ダメージはステータスの影響を受けない
B = weapon_damage + ATK
# 防御:レベルが上がると、同じ防御力の効率が少しずつ下がる
effective_def = max(0, defense - flat_pen) * (1 - pct_pen) # 貫通は固定値が先、次に%
K = 100 + attacker_level * 5
damage = B * K / (K + effective_def)シミュレーション結果
| 項目 | 今の計算式 | 計算式だけ変更 | 計算式 + 攻撃速度の調整(おすすめ) |
|---|---|---|---|
| 武器が占める割合 Lv1 → Lv30 | 100% → 14〜21% | 45〜58% → 10〜16% | 58% → 7% |
| クラス間のDPS差 | −41% 〜 +43% | −43% 〜 +44% | −7% 〜 +11% |
| 通常攻撃で通常モブを倒す攻撃回数 | Lv15で5発 | Lv15で5発 | 全レベルで4発 |
面白いのは真ん中の列です。計算式だけ変えてもDPS差はそのままなんです。原因を掘り下げてみると、計算式ではなく武器の攻撃速度でした。
- 斧:毎秒0.8回
- 剣・短剣:毎秒1.6回
- 魔法弾:毎秒1.67回
一撃のダメージをいくら揃えても、斧は半分しか攻撃できないので、DPSが開くのは当然ですよね。そこでおすすめ案はまず攻撃速度を揃える(斧・弓 1.0回、剣・短剣・魔法弾 1.25回)でした。
人が「基本武器が強い」と感じたのは、実は序盤はダメージの100%が武器から出ていて、ステータスは10ポイントにつき1%しか上がらないので、武器以外に実感できるものがなかったからでした。感覚は正しかったけれど、原因は別のところにあったわけです。
⚠️ この計算式v2はまだ提案段階です。最初の統合テストは今の計算式で行い、決定したら適用する予定です。
📌 AI企画チームを使って感じたこと 💬
- 「感覚」を数値に翻訳するのが得意です。 「豪快に」を「Lv1で一撃101 → Lv30で1,937、通常攻撃4発」のような表に変えてくれます。
- 前提を必ず書かせる必要があります。 攻撃速度、装備の強化段階、狩りの速度などを自分で決めて計算するので、レポートに「前提」の表がないと結果を信じにくいです。
- 決めるのは人間の役目です。 AIはおすすめ案をいくつも作り、影響を受けるモジュールまで整理してくれますが、何を選ぶかはゲームを作る人が決めるべきです。
📌 まとめ
- 数値×10は固定値だけ、移行は一度だけ、運営者が変えた値は保持
- 経験値はExcelで直せる表1つ、1→30レベルで12時間
- バランスへの不満の原因は、計算式ではなく攻撃速度でした — シミュレーションがなければ、計算式ばかりいじり続けていたはずです
次回は絵の話です。ChatGPTにGUI・アイコン・武器の絵を任せてClaudeが検品するパイプラインで、検品が見つけた事故(名前が入れ替わった弓、表示されない背景、ノイズが走る弓)を取り上げます。お楽しみに 🙌
この記事は私が方向性を決め、Claudeと一緒にまとめました。このサーバーは個人プロジェクトであり、マインクラフトの公式コンテンツではなく、Mojang・Microsoftとは関係ありません。
連載 · 全5回中3回目
