ページ 1 / 2
≪解決済み≫覚えているだけでスキル威力を一律で上げるスキルを作りたい
Posted: 2024年12月31日(火) 11:51
by miyomi
大変お世話になっております。
現在制作中のゲームで『覚えていると○○カテゴリのスキル威力のみ一律で10%上昇する』といったようなスキルを作りたいです。この○○カテゴリというのはスキルタイプでも構いませんし、メモに記載したタグによって分類する形でももちろんかまいません。
いろいろと調べてみたところ、やな様の『○○の知識』を使えばそれは再現できそうなのですが、こちらのプラグインはYEP Item Coreと競合してしまうようで、上記プラグインとともに実行するとスキルの威力が上がらなくなってしまいます。
ですので、他にカテゴリごとに一括でスキルの威力を上げられるようなプラグインをご存じであれば、教えていただけませんでしょうか。
もしくは、この二つの競合を回避する方法があれば、教えていただきたいです。
何卒、宜しくお願い致します。
Re: 覚えているだけでスキル威力を一律で上げるスキルを作りたい
Posted: 2025年1月01日(水) 20:31
by 虚構の城跡
該当するアクターに
(a.atk * 4 - b.def * 2)*(a.isLearnedSkill(10) ? 1000 : 1)
という計算式を利用すれば、
使用者がスキル10番習得いたら威力が千倍になりますから、この式を参考に構築してください。
Re: 覚えているだけでスキル威力を一律で上げるスキルを作りたい
Posted: 2025年1月02日(木) 11:48
by miyomi
虚構の城跡さま、回答ありがとうございます。
計算式は確かに様々な状況に対応できる有用な方法だと思うのですが、今回作りたい威力増加スキルは1種類ではなく、様々な倍率の強化スキルを数十種類作りたいのです。
一応、事前に覚えているスキル数をカテゴリごとに変数に代入し、その変数をダメージ計算式に組み込む方法も考えたのですが、倍率が違うスキルが複数出てくると、一つ一つの計算式が膨大になってしまいます。
ですので、可能なら計算式ではなく、プラグインなどで簡単に制御できればなぁと考えていた次第です。
先にそちらを伝えておくべきでした、申し訳ありません。
ただ、もしも他に解決方法がなさそうであれば、計算式には頼らせていただくつもりです。
ご回答、本当にありがとうございました。
Re: 覚えているだけでスキル威力を一律で上げるスキルを作りたい
Posted: 2025年1月02日(木) 21:31
by WTR
○○の知識って https://plugin.fungamemake.com/archives/2012 ですよね?
これ本当に競合しますか?
YEP のほうは持ってないので見てないんですが
makeDamageValue を全く経由しないような改造をされてない限り
反映されなくなるってことはなさそうな作りに見えます。
実は〇〇の知識を導入してみて最初、あれ、効かない?と思ったんですが
新規プロジェクトに最初から入ってる回復アイテムのような
ダメージタイプがなく使用効果で回復効果が設定されているようなものには効かないというオチでした。
同じようなミスをしてたりしないでしょうか。
Re: 覚えているだけでスキル威力を一律で上げるスキルを作りたい
Posted: 2025年1月02日(木) 22:38
by miyomi
WTRさま、大変お世話になっております。
プラグインのURLを貼り忘れていました、大変申し訳ございません。
やな様 ○○の知識
https://plugin.fungamemake.com/archives/2012
YEP item core
https://plugin.fungamemake.com/archives/10569
本当に競合するのか? とのことでしたので、改めてテストをしてみました。
上記2つ以外のプラグインをOFFにしたテストプロジェクトで、
実際に「攻撃」のメモ欄にテストと記載し、初期装備の剣のメモ欄に<テストの知識:+1000%>
これで○○の知識プラグインのみをONにして攻撃したところ、ダメージが500前後になるのに対し、item coreのほうもONにするとダメージが50前後にまで減少してしまいました。
ダメージタイプが存在せず、
使用効果で回復効果が設定されている場合は効果がないというのは初耳で驚きましたが、
今回はそれとはまた別の原因があるのではないのかと思います。
Item coreのほうがかなり特殊な作りをしているということなのですかね、、、
お手数おかけし申し訳ありませんが、もしまた何かわかりましたら教えてくださると幸いです。
Re: 覚えているだけでスキル威力を一律で上げるスキルを作りたい
Posted: 2025年1月02日(木) 23:28
by WTR
YEP item core もいれてやってみました。たしかに効かなくなりますね…
原因がなんとなくわかったのですが
YEP item core のプラグインパラメータの最後にある Midgame Note Parsing を true にすると回避できそうです。
非推奨とされているのでどの程度影響があるのかわからないのですが
セーブデータが肥大化してしまう模様。
* ============================================================================
* Independent Items and Midgame Note Parsing
* ============================================================================
*
* The "Midgame Note Parsing" option in the plugin parameters is made for any
* plugins that may only parse notetags midgame as opposed to at the loading of
* the game. This is an option that you should enable AT YOUR OWN RISK.
*
* Why is it at your own risk? Because enabling this option means independent
* items will keep their notedata, thus, increasing the file sizes of your save
* files several times bigger, and it can cause lag midgame, too.
〇〇の知識はアイテム等の note を参照しようとしてますが
YEP item core により生成された個別アイテムには note が存在しないのが問題で
オプションを true にすることで回避できるけど
YEP item core 側では要らないと思ってる note も複製するようになり
そのぶんセーブデータを圧迫する というようなことかと思います。
Re: 覚えているだけでスキル威力を一律で上げるスキルを作りたい
Posted: 2025年1月03日(金) 00:19
by WTR
それか、BattleKnowledge.js を書き換えてしまうか。
3か所で上のコードを下のものに置き換える。これなら YEP 側のオプションは推奨値のままで大丈夫かと思います。
100-101行目
コード: 全て選択
BattleKnowledgeManager.initCond = function(note){
var texts = obj.note.split('\n');
BattleKnowledgeManager.initCond = function(meta){
var texts = Object.entries(meta).map(([key, value]) => `<${key}:${value}>`);
170行目
コード: 全て選択
obj._knowledge = this.initCond(obj.note);
obj._knowledge = this.initCond(obj.meta);
248行目
コード: 全て選択
var texts = item.note.split('/n');
var texts = Object.entries(item.meta).map(([key, value]) => `<${key}:${value}>`);
Re: 覚えているだけでスキル威力を一律で上げるスキルを作りたい
Posted: 2025年1月03日(金) 12:22
by miyomi
WTRさま、回答ありがとうございます。
Midgame Note Parsing を true にする、という方法で競合の回避を確認できました!
まさかこんなところに解決策が隠れているとは、、、本当にありがとうございます。
ただ、セーブデータの圧迫というのは気になるところです。ですので、あとから教えていただいたBattleKnowledge.js の書き換えというのを行ってみたのですが、これをするとプラグイン自体が無効になり、○○の知識単体でもスキルの威力が上がらなくなってしまいました。
エラーなどは出ませんが、競合時と同じように○○の知識を入れていないときと同様の挙動になってしまいます。
他のプラグインをOFFにした状態で数回試しても同じ結果だったのですが、
書き換えというのはjsフォルダ上のBattleKnowledge.jsを編集ツールで開き、
170行目であれば
obj._knowledge = this.initCond(obj.note);
を
obj._knowledge = this.initCond(obj.meta);
に変更する、といった形で問題ないのでしょうか?
何度も何度も申し訳ありませんが、ご教授いただければ幸いです。
Re: 覚えているだけでスキル威力を一律で上げるスキルを作りたい
Posted: 2025年1月03日(金) 13:43
by ecf5DTTzl6h6lJj02
こんにちは。
横から失礼します。
miyomi さんが書きました:WTRさま、回答ありがとうございます。
Midgame Note Parsing を true にする、という方法で競合の回避を確認できました!
まさかこんなところに解決策が隠れているとは、、、本当にありがとうございます。
ただ、セーブデータの圧迫というのは気になるところです。ですので、あとから教えていただいたBattleKnowledge.js の書き換えというのを行ってみたのですが、これをするとプラグイン自体が無効になり、○○の知識単体でもスキルの威力が上がらなくなってしまいました。
エラーなどは出ませんが、競合時と同じように○○の知識を入れていないときと同様の挙動になってしまいます。
他のプラグインをOFFにした状態で数回試しても同じ結果だったのですが、
書き換えというのはjsフォルダ上のBattleKnowledge.jsを編集ツールで開き、
170行目であれば
obj._knowledge = this.initCond(obj.note);
を
obj._knowledge = this.initCond(obj.meta);
に変更する、といった形で問題ないのでしょうか?
何度も何度も申し訳ありませんが、ご教授いただければ幸いです。
BattleKnowledge.js の書き換えは、
BattleKnowledgeManager の initialize メソッドの内容を、
YEP_ItemCore が導入されている場合は、ベースのアイテムを取得して、
そのアイテムのノートを参照するように書き換えるだけで済みそうな気がします。
168行目あたりにある、BattleKnowledgeManager.initialize というメソッドを
コード: 全て選択
BattleKnowledgeManager.initialize = function(obj) {
if (!obj._knowledge) {
if ($plugins.some(plugin => plugin.name === 'YEP_ItemCore' && plugin.status)) {
obj._knowledge = this.initCond(DataManager.getBaseItem(obj).note)
} else {
obj._knowledge = this.initCond(obj.note);
}
}
};
と書き換えてみて、きちんと動作するか確認してみてください。
一応こちらの簡易チェックでは、動作しているように見えてますが、
きちんと確認してないので、動作しなかったらごめんなさい。
Re: 覚えているだけでスキル威力を一律で上げるスキルを作りたい
Posted: 2025年1月03日(金) 13:57
by WTR
getBaseItem ってなんだろう…と思ったら YEP item core のメソッドがあるんですね。
たしかにこれ使って initialize だけで済ませるのがよさそうですね。