ページ 11

【解決済み】プレイ状況に応じてランダムに回答するキャラ

Posted: 2025年5月12日(月) 21:07
by ninjaman
ゲームのプレイ状況に応じて回答内容の候補が減少する、ランダム会話キャラの作り方を教えてほしいです。

具体的にやりたい事は、プレイヤーが所持していないアイテムのうちランダムで1つだけ取得方法を教えてくれるキャラを作りたいです。例えば、プレイヤーが全50種のアイテムのうち20種取得済みなら、未所持の30種のうちランダムで1つだけ取得方法を教えてくれるようなキャラです。

『ランダムで回答内容が変わる』『アイテムの入手状況に応じて回答候補が減少する』という部分が難しいです。
おそらく以下のような流れでスクリプトを組めばいいと思うのですが、具体的な内容が分からないため質問させて頂きました。
1.全50種それぞれに対して所持・未所持の条件分岐を行い、未所持のアイテムのIDを配列に格納していく。
2.その配列の中からランダムに1つのIDを抽出し、IDに該当する回答内容を表示する。

Re: プレイ状況に応じてランダムに回答するキャラ

Posted: 2025年5月13日(火) 03:50
by Plasma Dark
アイテムの所持判定は

コード: 全て選択

$gameParty.hasItem(item, includeEquip)
で行うことができます。
第1引数はアイテム・武器・防具いずれかのデータ
第2引数は装備しているものを含めて探すかどうかの真偽値です。

まず、50種類あるという全体のアイテムIDを配列にし、filterによって未所持のアイテムID一覧にしたら、後はランダムにそのどれかを取り出して分岐するだけです。

以下の条件でサンプルコードを置いておきます。
  • 対象の50種類がアイテムのみ
  • パーティのアイテム欄以外にアイテムを所持できる仕組み(倉庫など)が導入されていない
  • ランダムに抽出したアイテムIDを変数に格納する

コード: 全て選択

const itemIds = [1, 2, ..., 50];  // 50個アイテムIDを列挙
const candidates = itemIds
  .filter(itemId => !$gameParty.hasItem($dataItems[itemId], false));

const variableId = 1; // ランダムに1つ抽出したアイテムIDを格納する変数
$gameVariables.setValue(
  variableId,
  candidates.length > 0 ? candidates[Math.randomInt(candidates.length)] : -1
);
公式の講座を参考にプラグインコマンドにしてしまうとかすれば、扱いやすくなるんじゃないかと思います。
@argで型をitem[]とか、variableとかにした引数を書けば、エディタのUI上から50種類のアイテムやら変数やらを指定できます。
https://rpgmakerofficial.com/product/mz ... shiki.html

Re: プレイ状況に応じてランダムに回答するキャラ

Posted: 2025年5月15日(木) 12:23
by ninjaman
Plasma Dark 様

ご回答いただきありがとうございます!
回答頂いた内容で実現したかった内容を実装することができました!
これでプレイヤーがアイテムコンプをスムーズにできることになると思います。
誠にありがとうございました!