トピック名の通り、アクターの名前から検索してアクターIDを変数に代入したいのですが
どのような方法でやればいいのでしょうか
例えば
0001テレーゼ
0002マーシャ
0003ハロルド
0004ルキウス
の中からアクター名ハロルドで検索して、変数に3の値を代入したいです
またアクター名が同じものが複数存在する場合はできればIDの数字が小さいほうを優先して代入したいです
やりかたが分かる方、どうかご教授ください。
【解決済み】名前からアクターIDを特定する方法
【解決済み】名前からアクターIDを特定する方法
最後に編集したユーザー oronamin [ 2021年12月13日(月) 00:21 ], 累計 1 回
Re: 名前からアクターIDを特定する方法
どうもこんばんは
「変数の操作」の最下部にあるスクリプト欄に
と入力するのが一番手っ取り早いと思います。ヒットしなかった場合は-1が入ります。
一応処理内容を説明すると$dataActorsというのはデータベース「アクター」の情報が格納されているデータ配列。
findIndexは()内の条件が見つかった場合、配列の添え字を返すメソッド。(見つからなかった場合-1)
データ配列の添え字とIDは連動しているので事実上のアクターIDを探すメソッドです。
そして(actor => actor && actor.name === "ハロルド")という条件文は
要素が有効であり名前が一致するか調べています。
配列先頭にはnullが入ってるのでそれを弾く為にactor &&という条件を加えています。
「変数の操作」の最下部にあるスクリプト欄に
コード: 全て選択
$dataActors.findIndex(actor => actor && actor.name === "ハロルド")
一応処理内容を説明すると$dataActorsというのはデータベース「アクター」の情報が格納されているデータ配列。
findIndexは()内の条件が見つかった場合、配列の添え字を返すメソッド。(見つからなかった場合-1)
データ配列の添え字とIDは連動しているので事実上のアクターIDを探すメソッドです。
そして(actor => actor && actor.name === "ハロルド")という条件文は
要素が有効であり名前が一致するか調べています。
配列先頭にはnullが入ってるのでそれを弾く為にactor &&という条件を加えています。
Re: 名前からアクターIDを特定する方法
返信ありがとうございます!
原理まで説明してくださってありがとうございます!
助かりました!!
追記:
質問なのですが、教えてもらったスクリプトでは003のハロルドを、名前入力の処理で名前を変更しても、変数は3になってしまいました、名前入力の処理で変更した場合は変数が-1になるようにはできないでしょうか?
原理まで説明してくださってありがとうございます!
助かりました!!
追記:
質問なのですが、教えてもらったスクリプトでは003のハロルドを、名前入力の処理で名前を変更しても、変数は3になってしまいました、名前入力の処理で変更した場合は変数が-1になるようにはできないでしょうか?
Re: 名前からアクターIDを特定する方法
あー確かにこんな処理が必要って事は名前変更してますよね
失念してました
アクターを扱うデータ配列には$dataActorsと$gameActorsの二種類があります。
前者は静的データ。
データベースで入力した値がそのまま保管されている領域でゲーム中に書き換わる事はありません。
そして後者が動的データ。
ゲーム中でアクターに関して変更される可能性を持つ一切のデータが管理されている領域です。
初期ネームに関しては$dataActorsを参照すれば事足りますが現在のネームは後者を参照する必要があります。
それで基本的には$gameActorsでも似たような方法でアクセスする事が出来ます。
まず$dataActorsではなく$gameActors._data。
そしてactor.nameではなくactor.name()と間違い探しのように細部が違う点に注意してください。
そして一番の注意点なんですけど
一度もアクセスした事がないアクターは$gameActorsにデータが生成されません。
必要がないセーブデータの削減が目的だと思います。
「アクセス」とは初期加入及びイベントコマンド「メンバーの入れ替え」で加入したり
イベントコマンド欄「アクター」枠のコマンド(HPの増減等)で干渉した経験の有無です。
これを理解しておかないと何故かヒットしたりしなかったりすると思うので気を付けてください。
失念してました
アクターを扱うデータ配列には$dataActorsと$gameActorsの二種類があります。
前者は静的データ。
データベースで入力した値がそのまま保管されている領域でゲーム中に書き換わる事はありません。
そして後者が動的データ。
ゲーム中でアクターに関して変更される可能性を持つ一切のデータが管理されている領域です。
初期ネームに関しては$dataActorsを参照すれば事足りますが現在のネームは後者を参照する必要があります。
それで基本的には$gameActorsでも似たような方法でアクセスする事が出来ます。
コード: 全て選択
$gameActors._data.findIndex(actor => actor && actor.name() === "ハロルド")
そしてactor.nameではなくactor.name()と間違い探しのように細部が違う点に注意してください。
そして一番の注意点なんですけど
一度もアクセスした事がないアクターは$gameActorsにデータが生成されません。
必要がないセーブデータの削減が目的だと思います。
「アクセス」とは初期加入及びイベントコマンド「メンバーの入れ替え」で加入したり
イベントコマンド欄「アクター」枠のコマンド(HPの増減等)で干渉した経験の有無です。
これを理解しておかないと何故かヒットしたりしなかったりすると思うので気を付けてください。
Re: 名前からアクターIDを特定する方法
返信ありがとうございます!
一応自分でもなんとかしてみようと思って$gameActorsに換えてみたりしていたんですが、$gameActors._dataやactor.name()にしないといけなかったんですね。とても勉強になります。
注意点等も教えて頂いてとてもありがたいです。
お陰でやりたいことはなんとかできそうです!ありがとうございます!
一応自分でもなんとかしてみようと思って$gameActorsに換えてみたりしていたんですが、$gameActors._dataやactor.name()にしないといけなかったんですね。とても勉強になります。
注意点等も教えて頂いてとてもありがたいです。
お陰でやりたいことはなんとかできそうです!ありがとうございます!