入手したアイテムIDに対応したアクターを加入させたい

マダガスカラナイ
記事: 5
登録日時: 2022年4月09日(土) 18:58

入手したアイテムIDに対応したアクターを加入させたい

投稿記事by マダガスカラナイ » 2022年4月09日(土) 19:35

ツクールMZでゲームを作っています

ソシャゲのようなガチャ要素を作っていて、ガチャはmaguros様の簡易ガチャプラグイン(https://plugin-mz.fungamemake.com/archives/2562)を使っています。
「アイテムID1 ドラゴン」を入手したら「アクターID1 ドラゴン」を加入、のような入手したアイテムIDに対応したアクターを加入させたいです
しかし、簡易ガチャプラグインでは入手したアイテムをIDではなく文字列で変数に代入するため、入手したアイテムのIDを変数で使えません。

アイテム名からIDを取得する方法、アクターの名前を指定して加入させる方法など、いろいろ考えましたがスクリプトの知識が乏しくうまくいきませんでした。

どうかお知恵をお貸しいただけると幸いです。

アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: 入手したアイテムIDに対応したアクターを加入させたい

投稿記事by ムノクラ » 2022年4月09日(土) 20:42

マダガスカラナイ さんが書きました:ツクールMZでゲームを作っています

ソシャゲのようなガチャ要素を作っていて、ガチャはmaguros様の簡易ガチャプラグイン(
https://plugin-mz.fungamemake.com/archives/2562
)を使っています。
「アイテムID1 ドラゴン」を入手したら「アクターID1 ドラゴン」を加入、のような入手したアイテムIDに対応したアクターを加入させたいです
しかし、簡易ガチャプラグインでは入手したアイテムをIDではなく文字列で変数に代入するため、入手したアイテムのIDを変数で使えません。

アイテム名からIDを取得する方法、アクターの名前を指定して加入させる方法など、いろいろ考えましたがスクリプトの知識が乏しくうまくいきませんでした。

どうかお知恵をお貸しいただけると幸いです。

予想ですが、こちらのゲームのようなシステムを想定されているでしょうか?
https://game.nicovideo.jp/atsumaru/games/gm9445
(ちょっと触っただけなのと、かなり古い記憶なので、怪しいところがあります)

プラグインの改造方法を伝えるのは難しくなさそうですが、その後に不具合が起こってもサポートできません。
ですので、このプラグインでなんとかするのではなく、仕様を固めれば、どなたか作ってくださるかも知れません。

ゲーム画面を~して欲しいとか付けるとハードルが上がるので、基本仕様だけにするのが受けてもらえるコツと思います。
あとは、仕様を出来るだけ具体的に箇条書きにすることですね。

上記ゲームの薄っすらとした記憶では
・ガチャを引く
・アクターが当たる
・同じアクターを引くとレベルが上がる
みたいな仕様だったと思います。

工夫次第で、イベントコマンドの変数と乱数で実装できると思います。

例えば、こんな感じ

コード: 全て選択

◆変数の操作:#0001 レアリティ = 乱数 1..10
◆条件分岐:レアリティ ≥ 10
  ◆変数の操作:#0002 アクターID = 乱数 10..10
  ◆
:分岐終了
◆条件分岐:レアリティ ≥ 8
  ◆変数の操作:#0002 アクターID = 乱数 8..10
  ◆
:分岐終了
◆条件分岐:レアリティ ≥ 7
  ◆変数の操作:#0002 アクターID = 乱数 5..7
  ◆
:分岐終了
◆条件分岐:レアリティ ≥ 1
  ◆変数の操作:#0002 アクターID = 乱数 1..4
  ◆
:分岐終了
◆スクリプト://変数2に入っているIDのアクターを参加させる
:     :$gameParty.addActor($gameVariables.value(2));

2000で実装できる内容です。
http://yado.tk/2k/06_map/015_takara_ran/
プラグインはこういった設定を省略するためのものが多いです。

ツクールMVでメンバーの入れ替えをスクリプトで行うなら以下の通りです。
http://rpgmaker-script-wiki.xyz/member_mv.php

//アクターを追加
$gameParty.addActor(アクターID)

//アクターを除名
$gameParty.removeActor(アクターID)




余計なこと
URLは改行して単独行にすると、自動リンクされるので、お勧めです。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
マダガスカラナイ
記事: 5
登録日時: 2022年4月09日(土) 18:58

Re: 入手したアイテムIDに対応したアクターを加入させたい

投稿記事by マダガスカラナイ » 2022年4月09日(土) 21:23

ガチャのシステムはそちらのゲームにあるようなものを想定しています

やはり簡単なスクリプトで解決できるものではないのですね
プラグインの作成をお願いするのは時間も手間もおかけしますし、ガチャシステムは自作して続きを作っていこうと思います

お早い返答ありがとうございました
名無し蛙
記事: 305
登録日時: 2015年11月23日(月) 02:46

Re: 入手したアイテムIDに対応したアクターを加入させたい

投稿記事by 名無し蛙 » 2022年4月10日(日) 07:27

マダガスカラナイ さんが書きました:アイテム名からIDを取得する方法、アクターの名前を指定して加入させる方法など、いろいろ考えましたがスクリプトの知識が乏しくうまくいきませんでした。

ご希望通りのものならfindIndexを使えば実現出来そうですね。
これは配列の条件に最初にヒットした要素のインデックスを返す、というメソッドです。
$dataItemsのインデックスとIDは同義ですのでIDを返すという事になります。
もしもヒットしなかった場合は-1が入ります。

コード: 全て選択

const itemName = $gameVariables.value(11);
const itemId = $dataItems.findIndex(item => !!item && item.name === itemName);
$gameVariables.setValue(12, itemId);

これで変数11に格納されたアイテム名からアイテムIDを逆引きし、変数12に代入するという処理になります。
$dataItemsを$dataWeaponsや$dataArmorsに変える事で武器防具も検索可能です。
そして$dataActorsに変える事でアクターIDも同様です。

コード: 全て選択

const actorName = $gameVariables.value(11);
const actorId = $dataActors.findIndex(actor => !!actor && actor.name === actorName);
if (1 <= actorId) {
    $gameParty.addActor(actorId);
}

既に別の方法で実装を始めているかもしれませんが一応参考までに。
アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: 入手したアイテムIDに対応したアクターを加入させたい

投稿記事by ムノクラ » 2022年4月10日(日) 12:59

趣味でレベルの低いコードですが、プラグインを作りました。
https://raw.githubusercontent.com/munok ... ActorMZ.js
(自分のレベルでは、作業は半日くらいですが、熟練者なら1時間程度ではないかと予想します)

お試しいただければ幸いです。


--
すぐに書けるレベルのコードに収めたので、非常に雑多になっています。
リファクタリングや機能追加・変更の提案をいただけると幸いです。
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
マダガスカラナイ
記事: 5
登録日時: 2022年4月09日(土) 18:58

Re: 入手したアイテムIDに対応したアクターを加入させたい

投稿記事by マダガスカラナイ » 2022年4月10日(日) 21:19

名無し蛙 さんが書きました:ご希望通りのものならfindIndexを使えば実現出来そうですね。
これは配列の条件に最初にヒットした要素のインデックスを返す、というメソッドです。
$dataItemsのインデックスとIDは同義ですのでIDを返すという事になります。
もしもヒットしなかった場合は-1が入ります。

コード: 全て選択

const itemName = $gameVariables.value(11);
const itemId = $dataItems.findIndex(item => !!item && item.name === itemName);
$gameVariables.setValue(12, itemId);

これで変数11に格納されたアイテム名からアイテムIDを逆引きし、変数12に代入するという処理になります。
$dataItemsを$dataWeaponsや$dataArmorsに変える事で武器防具も検索可能です。
そして$dataActorsに変える事でアクターIDも同様です。

コード: 全て選択

const actorName = $gameVariables.value(11);
const actorId = $dataActors.findIndex(actor => !!actor && actor.name === actorName);
if (1 <= actorId) {
    $gameParty.addActor(actorId);
}

既に別の方法で実装を始めているかもしれませんが一応参考までに。


返信遅くなり申し訳ありません。
このようなスクリプトを求めていました!別な箇所でも応用して使えそうですので大変助かりました!
ありがとうございます
マダガスカラナイ
記事: 5
登録日時: 2022年4月09日(土) 18:58

Re: 入手したアイテムIDに対応したアクターを加入させたい

投稿記事by マダガスカラナイ » 2022年4月10日(日) 21:41

ムノクラ さんが書きました:趣味でレベルの低いコードですが、プラグインを作りました。
https://raw.githubusercontent.com/munok ... ActorMZ.js
(自分のレベルでは、作業は半日くらいですが、熟練者なら1時間程度ではないかと予想します)

お試しいただければ幸いです。


--
すぐに書けるレベルのコードに収めたので、非常に雑多になっています。
リファクタリングや機能追加・変更の提案をいただけると幸いです。


返信遅くなり申し訳ありません。
プラグインまで作っていただきありがとうございます!
試したところ、欲しい機能は全て備わっていたので機能追加等の要望は無いです
本当にありがとうございます!

“MZ:質問” へ戻る