ミニゲーム: ログインボーナス
概要
「ログインボーナス」ミニゲームは、日付ごとに設定された報酬をカレンダーから受け取れる
ユーティリティ MOD です。月間カレンダー、当日の報酬詳細、受取履歴のサマリーを 1 画面にまとめ、
プレイヤーの EXP やアイテム、SP を自動で付与します。受け取り情報はブラウザの
localStorage
(キー: mini_login_bonus_claims_v1
)に保存され、ページ再読込後も保持されます。
画面構成
-
ヘッダー — タイトルとサブタイトルに加え、
「累計受け取り回数」「表示月の受け取り回数」を表示します。回数はローカライズ対応の
Intl.NumberFormat
で整形されます。【F:games/login_bonus.js†L530-L611】 - カレンダーカード — 月表示、前月/翌月ボタン、曜日行、日付セルを表示します。 日付セルには報酬ラベルと受取済みバッジが描画され、当日は文字色がハイライトされます。 セルをクリックすると右側の詳細が更新されます。【F:games/login_bonus.js†L548-L704】【F:games/login_bonus.js†L724-L799】
- 詳細カード — 選択した日の長い日付表示、報酬名、効果説明、特別タグ、受取ステータス、 「今日のボーナスを受け取る」ボタン、結果メッセージログを表示します。 ステータスは「受取済み」「本日受け取れます」「期間終了」「まだ受け取れません」を切り替えます。【F:games/login_bonus.js†L786-L878】
報酬ローテーション
報酬は 7 種類の基本報酬と 3 種類の特別報酬で構成され、日付に応じて切り替わります。名称や説明文は ローカライズ API に対応しており、プレースホルダーには報酬量を渡します。【F:games/login_bonus.js†L5-L138】
- 基本報酬 — 経験値(333/777/1300/2000)、回復アイテムセット、SP 回復などを 1 週間周期で巡回します。
- 特別報酬 — 日曜日は回復アイテム 10 個、月末は EXP 2500、1 月 1 日は EXP 10000 を授与します。特別日はバッジ表示も行います。【F:games/login_bonus.js†L140-L208】【F:games/login_bonus.js†L348-L413】
受取フロー
- カレンダーで当日が自動選択されます。別日をクリックすると詳細を確認できます。
- 当日分のみ受取ボタンが有効になります。過去分は履歴確認のみ、未来分はロック表示です。【F:games/login_bonus.js†L808-L839】
- 受取ボタンを押すと
grantReward()
が呼ばれ、報酬の種類別にプレイヤー API を介して成果を反映します。結果はメッセージログに逐次表示されます。【F:games/login_bonus.js†L880-L976】【F:games/login_bonus.js†L1010-L1066】 - 受け取った日付は
state.claims
に記録され、即座にカレンダーとサマリーが再描画されます。【F:games/login_bonus.js†L909-L930】
セッション中に獲得した EXP は state.sessionXp
に加算され、
MiniExp のスコアとして返却されます(getScore()
)。【F:games/login_bonus.js†L217-L227】【F:games/login_bonus.js†L1079-L1103】
保存とローカライズ
受取履歴は localStorage
に JSON で保存されます。破損したデータは読み込み時に排除され、
受取日時は ISO 形式(YYYY-MM-DD)で管理されます。ロケール変更イベントを購読し、タイトルやボタンなどを再翻訳します。【F:games/login_bonus.js†L210-L337】【F:games/login_bonus.js†L1121-L1134】
プレイヤー API との連携
オプション引数 opts.player
に MiniExp 本編のプレイヤー API を渡すと、
以下のフックでゲーム内リソースを操作します。いずれも例外は握り潰さずログ出力し、失敗時はフォールバックのメッセージを表示します。【F:games/login_bonus.js†L214-L227】【F:games/login_bonus.js†L872-L1066】
awardXp(amount, meta)
— 経験値報酬。戻り値の EXP をセッション加算に使用。awardItems(map, meta)
/adjustItems(map, meta)
— アイテム付与。成功時は実際に加算された個数をメッセージに反映。fillSp(meta)
/adjustSp(amount, meta)
— SP 回復または変化。結果値でメッセージを切り替え。
アイテム名は ITEM_DEFS
によるラベル定義を参照し、
.format.itemSummary
などのローカライズキーを通じて多言語化されます。【F:games/login_bonus.js†L30-L109】【F:games/login_bonus.js†L238-L288】
カスタマイズのヒント
-
報酬の追加や差し替えは
BASE_REWARD_DEFS
とSPECIAL_REWARD_DEFS
を編集します。 特別タグ(specialTag
)を設定すると詳細カードにバッジが表示されます。【F:games/login_bonus.js†L32-L209】【F:games/login_bonus.js†L820-L836】 -
受取条件を変更したい場合は
canClaim()
やgrantReward()
内のロジックを拡張してください。 現在は「当日分のみ受け取り可能」で固定されています。【F:games/login_bonus.js†L194-L205】【F:games/login_bonus.js†L880-L939】 -
受取履歴をリセットするには、ブラウザのストレージから
mini_login_bonus_claims_v1
を削除します。