ゲームシステム

ゲーム内ストア:棚、商品、価格

iDos Games の既製ストアの仕組み。商品が入れ替わる棚、ゲーム内通貨や現金での価格、無料ギフト、購入上限、そしてダッシュボードでコードなしに設定する方法。

ストアは既製システムです。ゲームのショップ画面と、購入のサーバー側の処理がセットになっています。 棚と商品は ダッシュボードで設定し、購入のたびにサーバーが価格、上限、入れ替えを自分で確認します。ゲーム側から購入をごまかす ことはできず、ストアに自前のサーバーは要りません。

プレイヤーに見えるもの

  • タブになった棚。 棚の最初のセクションはカルーセル、残りはカードのグリッドです。
  • 受け取るまで光る無料の本日のギフト。
  • カードのタイマー:「更新まで」「開始まで」「売り切れ」。
  • 購入確認のポップアップ(スマホでは下から出るシート)。
  • 「獲得」のアニメーション:報酬が残高のカウンターへ飛んでいきます。
  • 無料商品が待っているときのストアのタブのバッジ。
ショップ
12 450
320
デイリー1
通貨
パック
本日のおすすめ 更新まで 15:40:12
本日のギフト
無料
ヒーローの剣
1 200
装備の宝箱
90
売り切れ
500コイン
$0.99
お得1 200コイン
$1.99
初回購入 x2
ショップの棚はタブ。バッジは受け取れる無料商品の数。
入れ替えタイマー。時間が来るとサーバーがスロットの商品を入れ替えます。
無料の本日のギフトは受け取るまで光ります。
「売り切れ」:この期間の上限に達しました。
リボンと初回購入ボーナスは商品の設定から決まります。
例. プレイヤーに見えるショップ画面(標準デザイン)。デザインは src/ui.config.ts で変更します。

ストアの構造

ストアはツリーです:棚 → セクション → スロット → 商品。

  • 商品:売るもの。価格、報酬、上限、リボン(「お得」「x2」)。商品は1つのカタログにあります。
  • スロット:棚の上の場所。商品はスロットを通してしか買えず、どのスロットにもない商品はまったく売られません。
  • 入れ替え:スロットはプールから商品を表示し、スケジュールで入れ替えられます。本日のショップのように。 入れ替えはサーバーが計算するので、プレイヤーはどの端末でも同じストアを見ます。
ショップの棚「本日のショップ」
セクション「本日のおすすめ」
スロット
スロット1:常に本日のギフト
スロット2:6商品のうち1つ、24時間ごとに入れ替え
スロット3:期間が始まるまで空
商品カタログ価格、報酬、上限
どのスロットにもない商品は販売されません
例. ダッシュボードでのショップの組み方。商品はスロットを通してのみ販売されます。

価格

プレイヤーが払うもの仕組み
ゲーム内通貨、アイテムプレイヤーの残高から差し引き
現金アプリストアでの購入。レシートはサーバーが確認
広告視聴プレイヤーが獲得した広告視聴を使う(広告のあるビルド)
なし無料商品。上限が必須で、ないとサーバーは販売しない

取り消し線の「元の」価格を表示でき、割引率はサーバーが計算します。1つの商品に複数の価格オプションを付けることも できます。たとえばコインかジェム。

購入上限

  • 通算:たとえばスターターパックは1回。
  • 1日ごと:UTC の午前0時にリセット。
  • クールダウン:決まった時間が過ぎると次の購入。
  • 入れ替え期間ごと:この商品が棚にある間のスロットの上限。

「初回購入」「売り切れ」の表示とタイマーは、プレイヤーごとにサーバーが計算します。

ステップ 01プロジェクトにストアを追加する

放置 RPG テンプレートには、サンプルの棚付きのストアがすでにあります。ほかの プロジェクトでは AI コーダーが追加します。チャットに「ショップを追加して」と書いてください。ストアを一から書かず、 既製システムを入れます。ストアのタブは、売るものができた時点でプレイヤーに表示されます。

ステップ 02商品と棚を設定する

ダッシュボードを開き、プロジェクトを選んで ライブ運営 → v2 → ストア へ。

  • 商品タブで商品を作ります:名前、価格、プレイヤーが得るもの、上限。
  • 棚タブで棚を作り、セクションとスロットを追加して、スロットに商品を置きます。
  • プリセットは、多くの商品にまとめて適用できる共通の設定です。

ダッシュボードはスロットのない商品と上限のない無料商品を警告します。ページの AI ボタンでアシスタントが開きます。 売りたいものを説明すると(「0.99ドルで500コインのパックと、毎日の無料の宝箱」)、変更を提案してくれるので、 確認して保存を押します。

ステップ 03テストしてリリースする

アプリのテスト版でストアを確かめます。設定は別の操作で本番アプリに送られるので、コードのリリースが設定を上書きする ことはありません。詳しくは公開とリンクを参照してください。

開発者向け

ストアは @idosgames/core の client.store で動きます。画面は getStorefront() から描きます。これはこの プレイヤー向けにすでに計算された棚(入れ替え、上限、タイマー)です。getDefinitions() は全員に共通の設定にすぎません。

TypeScript
const res = await client.store.getStorefront()
if (!res.ok) return showError(res.error)

for (const store of res.data.Stores ?? [])
  for (const section of store.Sections ?? [])
    for (const slot of section.Slots ?? []) {
      // 空のスロットは Offer === null で届きます:棚がずれないよう空の枠を描きます。
      if (!slot.Offer) continue
      drawCard(slot.Offer, slot.RefreshesAtUtc)
    }

const buy = await client.store.purchase(offer.OfferID, 1, {
  selectedOptionID: option.OptionID,
  slot: { storeID: store.StoreID, sectionID: section.SectionID, slotID: slot.SlotID },
})
  • 購入が OFFER_NOT_IN_ROTATION を返したら、棚が変わっています。エラーを出さずに読み込み直します。
  • リクエスト中は「購入」ボタンを無効にします。purchase の呼び出し1回が1回の購入です。
  • タイマーは端末の時計ではなく、応答の ServerTimeUtc から数えます。
  • 残りの上限が null なら「上限なし」、0 なら「売り切れ」です。

すべてのフィールドは、SDK の MCP サーバーが配るスキル store-system に説明があります。

よくある質問

カタログにあるのに買えない商品があるのはなぜですか?

商品は棚のスロットを通してしか買えません。どのスロットにもなければ、まったく買えません。ダッシュボードはそうした商品を「どの棚にもない」という警告の下にまとめて表示します。

無料の本日のギフトは作れますか?

はい。価格のない商品はふつうの無料商品ですが、1日1回のような上限が必要です。上限のない無料商品はサーバーが販売しません。

購入を自分のサーバーで検証する必要はありますか?

いいえ。購入のたびに iDos Games のサーバーが価格、上限、入れ替えを確認します。ゲームは棚を表示して購入を頼むだけです。

プレミアムの割引は適用されますか?

はい。プレミアムのランクの割引やボーナスはサーバーが自動で適用します。実際に引かれたものと付与されたものは、ゲームが購入の応答から読み取ります。

関連ページ

自分のゲームを作ろう

アイデアを一文で書くだけで AI コーダーが作り、ゲームは専用リンクで公開されます。