スキル・アイテム使用時にメニュー画面でもメッセージ

アバター
シンゴビッチ
記事: 11
登録日時: 2020年5月25日(月) 03:12

スキル・アイテム使用時にメニュー画面でもメッセージ

投稿記事by シンゴビッチ » 2020年5月28日(木) 04:06

アイテム、、スキルをメニュー画面で使用した時も戦闘時と同様のメッセージをメニューで出したいです。

考えたのがバトルログをそのままメニュー画面に持ってくることでしたが、バトルログがメッセージを出す動作がどこにあるか解らずに断念しました。

次にフトコロ様のメニュー内コモンイベントプラグインを活用してみましたが、スキルを使った効果量の取得に難航したのど、メッセージにアクター名の%1がそのまま文字で出る。それを避けるにはスキルのメモ欄の記述が必要なので、この手段は避けたいです)

自分自身でプラグインも探してみましたが見つからなかったので、もしそう言うプラグインを知っているかもしくは、バトルログのメッセージを出す場所のスクリプトが書いてある場所を知っていたら教えて下さい。

アバター
剣崎 宗二
記事: 425
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: スキル・アイテム使用時にメニュー画面でもメッセージ

投稿記事by 剣崎 宗二 » 2020年5月28日(木) 11:49

Window_BattleLog.prototype.displayActionResultsを見て見てください。
ダメージポップアップなど今回のご要望と関係のない部分もありますが、displayDamage等が実際にメッセージを構築している部分にはなります。

プログラムが書ける方だと見受けられますので、他はヒントだけ置いていきます。
・該当Sceneのuser()が使用した(subject)、itemTargetActors()が使用された(target。単体ではなく配列)キャラクターたちです。(Scene_ItemBase.prototype.useItem/Scene_ItemBase.prototype.applyItem参照)
・applyによる効果量結果などはtargetとなったキャラクターの.result()に入ってます。

ざっくりチェックなのでミスがあったら申し訳ございません。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
アバター
シンゴビッチ
記事: 11
登録日時: 2020年5月25日(月) 03:12

Re: スキル・アイテム使用時にメニュー画面でもメッセージ

投稿記事by シンゴビッチ » 2020年5月29日(金) 22:43

>剣崎 宗二さん
回答ありがとうございます。
色々助言を基にスクリプト書いてみました。現状ではアイテム効果の数値以外は取ることが出来ました。

ですが、アイテムの数値は文字化けして[object obeject]で出ます。何故でしょうか?
HPかMPかを指示しないと出ないとかですか、ここだけ助言をもう一ついただけたら助かります。

現状のスクリプトはこんな感じです。


Scene_ItemBase.prototype.applyItem = function() {
var action = new Game_Action(this.user());
action.setItemObject(this.item());
var act1 = this.user().actorId();
var ItemActor = $gameActors.actor(act1).name();
//アイテムはメッセージがないためメモ欄m0に逃げる
var ItemMes0 = this.item().meta['m0']
if (ItemMes0 != "" ) {
$gameMessage.add(ItemActor + ItemMes0 );
} else {
var ItemMes1 = this.item().message1.format();
var ItemMes2 = this.item().message2.format();
$gameMessage.add(ItemActor + ItemMes0 );
if (ItemMes2 != "" ){
$gameMessage.add(ItemMes2);
}
}
//直接効果を記述すると文字化けするので、メモ欄m1,m2に逃げる
var ItemMes3 = this.item().meta['m1']
var ItemMes4 = this.item().meta['m2']
if (action.isForAll()) {
for (var i = 0; i < $gameParty.size(); i++) {
var alnam = $gameParty.members()[i].name();
$gameMessage.add(alnam + ItemMes4 );
}
} else {
var TrgActor = $gameParty.targetActor().name();
if(ItemMes4 != "" ) {
   //数値効果があるものに数値を代入する。
var ItemRes = $gameParty.targetActor().result();
$gameMessage.add(TrgActor + ItemMes3 + ItemRes + ItemMes4 );
} else {
$gameMessage.add(TrgActor + ItemMes3 );
}
}
this.itemTargetActors().forEach(function(target) {
for (var i = 0; i < action.numRepeats(); i++) {
action.apply(target);
}
}, this);
アバター
剣崎 宗二
記事: 425
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: スキル・アイテム使用時にメニュー画面でもメッセージ

投稿記事by 剣崎 宗二 » 2020年6月01日(月) 11:30

.result()の返却型は数値や文字列ではなくGame_ActionResultです。
該当型の詳細をご覧になった上で再度必要なデータを引き出して試してみてください。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
アバター
シンゴビッチ
記事: 11
登録日時: 2020年5月25日(月) 03:12

Re: スキル・アイテム使用時にメニュー画面でもメッセージ

投稿記事by シンゴビッチ » 2020年6月02日(火) 02:23

剣崎 宗二 さん

回答ありがとうございます。Game_ActionResult の場所は見つける事が出来ました。
Hpdamageのパラメーターを入れれば行けるかな?と思いましたが上手く行きませんでした。
Game__ActionResultはバトル専用なのかな?と推察してますがもう少し自力で解読してみます。

最悪、バトル用とコモン用にアイテムを分けてバトルとマップの切り替え時にアイテムを差し替えて
マップ用はコモンイベントで対応するという強引なやり方も考えられますが、今回のRPG作りは
自分のプログラミングスキル(ついでにイラストと文章構成技術も。このアイコンは自分で描きましたw)
向上を目的とした勉強でもあるのでもう少し頑張ってみます。

また解らなくなったら御指南お願いします。ありがとうございます。

(ちなみにjavascriptは今回初めて触ります。python c++ vbの経験を頼りにやってます)
アバター
剣崎 宗二
記事: 425
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: スキル・アイテム使用時にメニュー画面でもメッセージ

投稿記事by 剣崎 宗二 » 2020年6月02日(火) 15:24

私も元はC#側のエンジニアであり、javascriptはツクールに入るに際して自分でコアスクリプトを読んで解析し学んだので、お気持ちは分かります。
一応以下に「実現できた」物を作っておきましたので、答え合わせ用としてでもお使いください。
(ステート関連まで詰め込みましたが、バフデバフ関係は面倒になって省略してます)
kz_MenuUseItemMessage.js
(4.21 KiB) ダウンロード数: 9 回
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
アバター
シンゴビッチ
記事: 11
登録日時: 2020年5月25日(月) 03:12

Re: スキル・アイテム使用時にメニュー画面でもメッセージ

投稿記事by シンゴビッチ » 2020年6月08日(月) 09:40

剣崎様

ありがとうございます!昨日答えを見ました。
変数の代入の仕方が良くわかる解りやすいコードで大変助かりました。

自分はitemtypeに書き込んでるのでそのままでは使えませんが参考にさせていただきます!

“MV:質問” へ戻る