ショップシステム
EliteMobsには、プレイヤーがEliteMobsの装備や矢に対してエリートコイン(EliteMobsの通貨)を使ったり稼いだりできる、組み込みのショップシステムが付属しています。ショップは通常、冒険者ギルドの鍛冶屋や商人NPCを通じてアクセスしますが、コマンドで開くこともできます。
通常のショップ利用では、EconomySettings.ymlのenableEconomy: trueを維持してください。ダイナミックショップとカスタムショップの入口メニューはこの設定を確認しますが、管理者の直接メニューコマンドや売却・矢ショップNPCの経路には同じ確認がありません。すべてのアクセスを制御するスイッチではありません。Vault連携が正常に動作していれば、残高はEliteMobsの通貨データベースではなくVaultプロバイダーを使用します。
通貨
デフォルトの通貨はエリートコイン(EconomySettings.ymlのcurrencyName)と呼ばれます。プレイヤーは主にエリートを倒すこと(通貨のシャワー)と、EliteMobsのルートを売却することで獲得します。残高の確認や支払いは、標準のマネーコマンドで行えます。
/em money check– 自分の残高を確認する(/em walletというコマンドは存在しません。一部の設定ファイルのコメントには、いまだにこの古い名前で書かれている箇所があります)/em pay <player> <amount>– 他のプレイヤーに支払う(playerToPlayerPaymentTaxesの対象)
管理者は/em money add|remove|setなどで残高を管理できます。
ショップ
ダイナミックショップ(プロシージャル生成の装備)
/em shop dynamicを実行するか、鍛冶屋NPC(elitemobs.shop.dynamic.npc)と話します。プレイヤー用コマンドは、agTeleportが有効で、ギルドがインストール済みで、プレイヤーがelitemobs.adventurersguild.teleportを持つ場合にギルドへ転送します。それ以外は購入/売却メニューを開きます。NPCはこのメニューを直接開きます。
ダイナミックショップは、54スロットのメニュー内で設定された商品スロットに、プロシージャル生成のEliteMobs武器と防具を並べます。商品のレベルはそのアイテム種別に対応するあなたのスキルレベルに従い、(skillLevel - 5)からskillLevelの間を1〜100に制限して抽選します。スキルレベル105以上では、そのスキルの商品はすべてレベル100になります。対応するスキルがない素材は、全スキル種別の平均XPから求めたレベルを使用します。
- アイテムをクリックすると計算された価値で購入できます。十分な残高、収納用の空きスロット、および該当する装備スキル要件を満たすことが必要です。スキル確認は装備制限の設定と、レベル20以下のアイテムなどの例外に従います。
- リロールボタンを使うと、提供される在庫を更新できます(2秒の短いクールダウンあり)。
- 購入時にも在庫が更新されます。
カスタムショップ(特別なアイテム)
/em shop customを実行するか、スペシャル鍛冶屋NPC(elitemobs.shop.custom.npc)と話します。プレイヤー用コマンドはダイナミックショップと同じギルド転送規則に従い、NPCは購入/売却メニューを直接開きます。
カスタムショップは、対象のカスタムアイテムからランダムに商品を選びます。itemType: CUSTOMが対象で、UNIQUE、DROPPABLE、CLASS_LOOTは除外されます。ソウルバインドが有効なら、商品のコピーは購入者にソウルバインドされます。対象アイテムを最低1つ用意してください。現在の商品選択処理は空の候補一覧に対応していません。
購入には十分な残高と収納用の空きスロットが必要です。このメニューはダイナミックショップのスキル確認を行わないため、購入できても装備できるとは限りません。リロールのクールダウンは2秒で、購入時にも在庫が更新されます。
アイテムの売却
売却は、(ダイナミックショップまたはカスタムショップを開いたあとの)購入/売却メニューの売却オプションから行うか、管理者が/em shop sell <player>(elitemobs.shop.sell.other)で直接開きます。アイテムを売却する鍛冶屋NPCはelitemobs.shop.sell.npc権限を使用します。
売却メニューでは次のように操作します。
- インベントリのEliteMobsアイテムをクリックして、そのスタックを売却スロットへ移します。バニラアイテムは売却できません。未帰属のEliteMobsアイテムと自分にソウルバインドされたアイテムを売却できます。他人に帰属するアイテムは、帰属確認が無効な場合、またはバイパス権限を持つ場合に限り売却できます。
- 確認ボタンには現在の合計が表示されます。クリックするとすべて売却してエリートコインを受け取ります。
- 売却額はアイテムに保存された価値の一定割合です。保存値がない場合は計算された価値を使います。割合は
EconomySettings.ymlのitemResaleValueで設定します(デフォルト5%)。支払額にはスタック数が掛けられます。 - 売却収入はまず未返済のギャンブル負債に充てられ、残りだけが利用可能な残高に加算されます。
- 各スタックは個別に入金されます。経済プロバイダーが入金を拒否した場合、そのスタックはプレイヤーに返却され、売却は中止されて
shopTransactionFailedMessageが表示されます。それまでに入金されたスタックは売却済みのままです。
矢ショップ
矢ショップNPC(elitemobs.shop.arrow.npc)と話して開きます。
矢ショップはエリートコインで弾薬を販売します。デフォルトの在庫には次のものが含まれます。
- 通常の矢(小さなスタックと大きなスタック)
- 分光の矢
- 毒、鈍化、弱化、負傷、治癒の効果の矢
各商品の数量と価格はmenus/arrow_shop_menu.ymlで設定します。矢をクリックして購入するには、十分な残高と空きスロットが必要です。他のスロットに矢を重ねられる場合も空きが必要です。商品スロットの位置は実装で固定されています。価格、数量、商品名を変更した後は再起動してください。商品一覧はメニュークラスの初回読み込み時にキャッシュされます。
コマンドと権限
| コマンド | 権限 | デフォルト | 説明 |
|---|---|---|---|
/em shop dynamic | elitemobs.shop.dynamic | true | ダイナミックショップの入口メニューを開くか、ギルドへの転送を要求する |
/em shop procedural <player> | elitemobs.* | op | 他のプレイヤーのためにダイナミック(プロシージャル)ショップを開く |
/em shop custom | elitemobs.shop.command | コード内のみ | カスタムショップの入口メニューを開くか、ギルドへの転送を要求する。必要なら、宣言だけで未使用のelitemobs.shop.customではなく、この実際のコマンド権限を付与する |
/em shop custom <player> | elitemobs.shop.custom.other | op | 他のプレイヤーのためにカスタムショップを開く |
/em shop sell <player> | elitemobs.shop.sell.other | op | 他のプレイヤーのために売却メニューを開く |
NPCインタラクション権限(elitemobs.userバンドルを通じてデフォルトでプレイヤーに付与):
| 権限 | NPC |
|---|---|
elitemobs.shop.dynamic.npc | 鍛冶屋(ダイナミックショップ) |
elitemobs.shop.custom.npc | スペシャル鍛冶屋(カスタムショップ) |
elitemobs.shop.sell.npc | アイテムの売却 |
elitemobs.shop.arrow.npc | 矢ショップ |
設定
ショップ経済はEconomySettings.ymlで設定します。主なキー:
| キー | デフォルト | 効果 |
|---|---|---|
enableEconomy | true | 通常の経済機能への入口を有効化する。すべての直接ショップ経路を遮断するわけではない |
currencyName | Elite Coins | 通貨の表示名 |
useVault | false | EliteMobsのデータベースの代わりにVaultを通じて残高をやり取りする |
itemResaleValue | 5 | 売却時に支払われる、アイテムの全価値に対する割合 |
playerToPlayerPaymentTaxes | 0.2 | /em payの送金に適用される税率(0.0〜1.0、0.2 = 20%) |
enableCurrencyShower | true | エリートが死亡時にコインを落とすかどうか |
currencyShowerTierMultiplier | 1.0 | ドロップ通貨の倍率(2.0は2倍) |
materialWorth.defaultMaterialWorth | 1 | 独自のmaterialWorth.<MATERIAL>エントリを持たない素材に使われる価値 |
materialWorth.<MATERIAL> はプラグインの素材ティアに基づく固定の初期値を使います。ネザライトは18、ダイヤモンドとトライデントは17、鉄は16、石とチェーンメイルは15、金・木・革は13です。これらのティアはコード内の定数であり、設定項目ではありません。ショップ価格を変えるには、EconomySettings.yml の各 materialWorth 項目を編集してください。
各ショップのメニューレイアウト(スロット、アイテムアイコン、名前、メッセージ)は、EliteMobsのメニュー設定ファイル(例えば購入/売却、カスタムショップ、プロシージャルショップ、売却、矢ショップの各メニュー設定)にあります。
購入価値の計算は素材、エンチャント、ポーション効果の価値を合計し、基本値1を加えます。そのため価格設定を変更すると、保存済みの売却価値と新たに計算される購入価格が異なる場合があります。
すべての購入では、まず代金を引き落とし、経済プロバイダーが支払いを受け付けた後にだけアイテムを渡します。プロバイダーが支払いを拒否した場合、プレイヤーには残高不足のメッセージが表示され、何も渡されません。取引が途中で失敗した場合、プレイヤーにはshopTransactionFailedMessageが表示され、サーバーログには価格、引き落としが受け付けられたかどうか、アイテムが記録されるため、管理者が精算できます。
関連ページ
- 冒険者ギルドワールド — ショップNPCがいる場所
- ソウルバインド — 所有者の確認と例外
- スキルシステム — スキルレベルが装備を制限し、ダイナミックショップをスケーリングする仕組み
- Vault連携 — サーバー全体の経済を使う
- アイテムの作成 — カスタムショップへのカスタムアイテムの追加