自動戦闘時に使用するスキルの評価値を変更するプラグイン – FTKR_AISkillEvaluate.js

タイトル
自動戦闘時に使用するスキルの評価値を変更するプラグイン
作者名
ヘルプ
-----------------------------------------------------------------------------
概要
-----------------------------------------------------------------------------
自動戦闘時に使用するスキルを選択するための評価値計算を個別に設定できます。

また、行動評価のモデル(簡易的な作戦)を作成することができます。

設定した行動評価モデル(簡易的な作戦)をゲーム内で変更する専用画面の表示コマンドを
メニューコマンドおよびバトルのパーティーコマンドに追加できます。
プラグインパラメータ Menu Command および Party Command で設定してください。


プラグインの使い方は、下のオンラインマニュアルページを見てください。
https://github.com/futokoro/RPGMaker/blob/master/FTKR_AISkillEvaluate.ja.md


-----------------------------------------------------------------------------
設定方法
-----------------------------------------------------------------------------
1.「プラグインマネージャー(プラグイン管理)」に、本プラグインを追加して
ください。

2. 以下のプラグインと組み合わせる場合は、プラグイン管理の順番に注意してください。

FTKR_AISkillEvaluate.js
↓このプラグインよりも下に登録↓
FTKR_ExBattleCommand.js


-----------------------------------------------------------------------------
スキルごとの評価値計算式の設定
-----------------------------------------------------------------------------
スキルのメモ欄に以下のタグを追記すると、自動戦闘時に使用するスキルを
選択する評価値計算を個別に設定することができます。

<ASE_評価値式:>
<ASE_EBARUATE:>
に計算式を入力

計算式には、ダメージ計算式と同様の記述が可能です。
a : 使用者(a.hp で使用者の現在HP)
b : 対象者(b.hp で対象者の現在HP)
item : 使用するスキル(item.mpCost でスキルの消費MP)
number : スキルで対象者に与える予定のダメージ量

上記の評価値式を設定しない場合は、MVデフォルトの評価値計算式(※)を使用します。
※後述


-----------------------------------------------------------------------------
自動戦闘時の評価値計算式
-----------------------------------------------------------------------------
MVのデフォルトでは、自動戦闘時には以下のルールに従い使用可能なスキルを
選択可能な対象ごとに評価値を計算し、その評価値がもっとも高くなる相手に
対してスキルを使用します。

1. ダメージタイプが「HPダメージ、HP回復、HP吸収」以外のスキルは評価値0
2. HPダメージの場合は、与えるダメージと相手の残りHPの比が評価値になる
3. HP回復の場合は、回復量と相手の最大HPの比が評価値になる
4. 全体を対象とするスキルは、すべての対象の評価値を合計する
5. 連続回数が設定されている場合は、算出した評価値に回数の数値をかける
6. ルール5までで評価値が 0 でなければ、その値にランダムで 0 ~ 1 を加算する
 

上記ルールを見て分かるとおりに、ダメージタイプがMP系や
ダメージタイプなしで使用効果のみ設定したスキルは、自動戦闘では
MVのデフォルトでは絶対に使用しないことになります。


当プラグインを使い、タグで評価値式をそれらのスキルに設定することで
自動戦闘でも使用する可能性がでるようになります。


-----------------------------------------------------------------------------
評価値式の記述について
-----------------------------------------------------------------------------
基本的に、全体スキルや複数回攻撃スキルを除き、スキルの評価値は 0 ~ 1 の間に
収まります。全体スキルや複数回攻撃スキルはその数倍です。

そのため、当プラグインで設定する評価値式の結果も、特別な理由がない限りは
同等の値に収まるように設定する必要があります。

例えば、攻撃力を下げるスキルに評価値式を設定する場合
 <ASE_評価値式:b.atk>
としてしまうと、ほぼ確実にそのスキルしか使用しなくなってしまいます。
また、同じ相手に何度も掛けてしまうことも考えられます。

この場合、自分の防御力と比較させるなどすると、自分の防御力よりも攻撃力が
低い相手に対しては評価値が下がるため、うまく他のスキルにも分散するように
なると思います。
 例) <ASE_評価値式:b.atk / (a.def2)>


また、ステートや弱体・強化を掛けた相手に再度掛けないようにする場合は
相手がステートが掛かっている場合に、評価値を 0 にする計算を加えます。
 例) <ASE_評価値式:b.aseState(n)b.atk / (a.def2)>

b.aseState(n) は ステートID n のステートが掛かっていると 0
掛かっていないと 1 になるスクリプトです。

自身に掛ける場合は、b.aseの部分を a.aseに変えてください。

同様に弱体や強化が掛かっているときに 0、掛かっていないときに 1 になる
スクリプトは以下の通りです。
なお、n の値は以下の通りです。
0:最大HP、1:最大MP、2:攻撃力、3:防御力
4:魔法攻撃、5:魔法防御、6:敏捷性、7:運

1. 弱体が掛かっている
b.aseDebuff(n)

2. 弱体が2段階で掛かっている
b.aseMaxDebuff(n)

3. 強化が掛かっている
b.aseBuff(n)

4. 強化が2段階で掛かっている
b.aseMaxBuff(n)


また、ステートや弱体は、戦闘のターンが進めば進むほど効果が薄くなります。
そこで経過ターン数で評価値を変動させるという方法もあります。
経過ターン数は $gameTroop.turnCount()+1 で取得できます。

 例)<ASE_評価値式:1 / ($gameTroop.turnCount() + 1)>

この場合、1ターン目で評価値が 1、2ターン目で 0.5、とターンが経過するごとに
どんどん評価値小さくなります。

※スキル選択時は、まだターンが経過していないため
 $gameTroop.turnCount()は 0 から始まります。


同一ターン内で同じスキルを使わせたくない場合には、自分の前までのキャラが
指定したスキルを選択したかどうか調べる必要があります。

$gamePary.aseSkill(n) はスキルID n のスキルを
自分の前までのキャラが選択していた場合に 0、
だれも選択していない場合は 1 になるスクリプトです。

 例)<ASE_評価値式:$gamePary.aseSkill(10)>


-----------------------------------------------------------------------------
行動評価のモデル(簡易的な作戦)について
-----------------------------------------------------------------------------
評価値式の設定とは別に、大まかな行動タイプ(1)毎にレーティングを決めて
そのタイプ全体の評価値を変動させることができます。

(1)HPダメージ系のスキルや、HP回復系、強化付与系などスキルの効果が近いものの分類

プラグインパラメータ<Evaluate Models>で設定します。
モデルは複数作成することができ、それらをアクターに別々に設定することができます。

例えば、攻撃を重視するアクターや回復行動を重視するアクターなどを
同じスキルを覚えていてもスキルの評価をアクター毎に変えることが出来ます。


1.プラグインパラメータ<Evaluate Models>の構成
プラグインパラメータはリスト形式になっており、このリスト番号が評価モデルIDに
なります。(後述のアクターのメモ欄にはこの番号を使用する)

モデル名(name)と行動評価リスト(evaluate)を設定します。


2.行動評価リスト(evaluate)の構成
この中で、具体的に行動タイプ毎にレーティングや条件を設定します。
基本的には、敵キャラに設定する行動と同じ仕組みです。
ここに設定した行動タイプに属するスキルのみ使用します。
行動毎に以下のパラメータを設定します。

行動タイプ(actionType)
:セレクトボックスから設定した行動タイプを選択します。
:なお、テキスト入力モードに変更し、直接別の数値を入力しても
:問題ありません。(後述:スキルへの行動タイプ設定)
条件(conditions)
:その行動タイプを使用するための条件を設定します。
:ダメージ計算式と同様の記述を使って判定式を入力します。
:空欄にした場合は、常に使用可能と判断します。
レーティング(rating)
:その行動タイプを選択する頻度を設定します。
:1~9の値を設定し、この値が評価値に掛けられます。

!!注意!!
リストには、常に行動可能なスキルがある行動タイプを最低1つ
設定してください。
ここでの常に行動可能なスキルとは、評価値が 0 にならず
コストを消費せずに使用可能なスキルのことです。
 例)行動タイプ:通常攻撃



3.スキルへの行動タイプの設定
スキルのメモ欄に以下のタグを設定することで、行動タイプを設定できます。
<ASE_行動タイプ:n>
n は行動評価リストで選択した行動タイプの数字に合わせてください。

なお、以下の設定のスキルは、上記タグを使用しなくても、プラグイン側で
行動タイプを設定します。ただし、タグ設定が優先です。
1 :スキルID1 の攻撃
2 :スキルID2 の防御
11 :ダメージのタイプが HPダメージ
12 :ダメージのタイプが HP回復
13 :ダメージのタイプが HP吸収
21 :ダメージのタイプが MPダメージ
22 :ダメージのタイプが MP回復
23 :ダメージのタイプが MP吸収
31 :使用効果に強化を設定したスキル
41 :使用効果に弱体を設定したスキル
51 :使用効果にステート解除、弱体解除を設定したスキル


4.アクターへの評価モデルの設定
アクターのメモ欄に以下のタグを設定することで、評価モデルを設定できます。
<ASE_評価モデル:n>
n : 評価モデルIDを設定します。
\v[x]でゲーム変数を設定できます。
なお、 0 でMVデフォルトの自動戦闘、 -1 で手動戦闘になります。

また、以下のスクリプトでアクターID n の評価モデル名を取得できます。
$gameActors.actor(n).evalModelname()


-----------------------------------------------------------------------------
作戦画面について
-----------------------------------------------------------------------------
設定した行動評価モデル(簡易的な作戦)をゲーム内で変更する専用画面の表示コマンドを
メニューコマンドおよびバトルのパーティーコマンドに追加できます。

プラグインパラメータ Menu Command および Party Command で設定してください。

この時、各アクターが選択可能な作戦のリストは、アクターのメモ欄に
以下のタグを記載することで設定します。

<ASE_作戦リスト:n1,n2,...>
n1,n2,...には、プラグインパラメータEvaluate Modelsで設定した
作戦のリスト番号、MVデフォルトの自動戦闘の 0 から任意の数を
記載できます。

例)
<ASE_作戦リスト:0,1,2>

なお、実際の作戦画面には、これらに加えて「手動戦闘」を追加して表示します。


-----------------------------------------------------------------------------
本プラグインのライセンスについて(License)
-----------------------------------------------------------------------------
本プラグインはMITライセンスのもとで公開しています。
This plugin is released under the MIT License.

Copyright (c) 2017,2018 Futokoro
http://opensource.org/licenses/mit-license.php


プラグイン公開元
https://github.com/futokoro/RPGMaker/blob/master/README.md


-----------------------------------------------------------------------------
変更来歴
-----------------------------------------------------------------------------

v1.2.6 - 2018/12/11 : 競合回避、不具合修正。
1. FTKR_AlternatingTurnBattleとの競合回避。
2. デフォルトの自動戦闘に変更できない不具合を修正。

v1.2.5 - 2018/10/20 : 競合回避
1. 作戦画面のレイアウトが、メニュー画面の表示レイアウトに影響されないように
修正。

v1.2.4 - 2018/03/10 : 不具合修正
1. アクターの特徴で自動戦闘を追加していないと、作戦画面で作戦を変更しても
正しく更新されない不具合を修正。
2. バトル中に使用可能なスキルが何もない場合にエラーになる不具合を修正。

v1.2.3 - 2018/02/28 : ヘルプ追記
1. 作戦の設定方法をヘルプに追記。

v1.2.2 - 2018/02/28 : 不具合修正
1. プラグインパラメータEvaluate Modelsの初期値が空欄の場合に
エラーになる不具合を修正。

v1.2.1 - 2018/02/28 : ヘルプ修正、機能追加
1. ヘルプ内の誤字を修正。
2. 自分の前までのキャラが指定したスキルを選択したかどうか
調べるスクリプト$gameParty.aseSkill(n)を追加。

v1.2.0 - 2018/01/11 : 機能追加
1. ゲーム中にパーティーメンバーの評価モデル(簡易的な作戦)を変更する
画面を追加。メニューコマンドとバトルのパーティーコマンドに追加可能。
2. パーティー全員が自動戦闘になっていても、パーティーコマンドを
スキップしないようにする機能を追加。

v1.1.0 - 2018/01/08 : 機能追加
1. 評価モデル(簡易的な作戦)をアクターに設定する機能を追加。

v1.0.1 - 2018/01/07 : 機能追加、ヘルプ追記
1. 評価値式に予想ダメージ量を参照するコードを追加
2. 評価値をコンソールログに出力する機能を追加
3. ステートや強化、弱体が掛かっているかどうかによって 0 か 1 を返す
スクリプトを追加

v1.0.0 - 2018/01/06 : 初版作成

-----------------------------------------------------------------------------
パラメータ
param Skill Evaluate Log
desc 評価値の計算結果をコンソールログに出力する
type boolean
on 有効
off 無効
default false

param Evaluate Models
desc 行動評価のモデル(簡易的な作戦)を作成します
ここで設定した評価モデルをアクターに反映できます
type struct<auto>[]
default []

param Manual Mode Name
desc 自動戦闘を使わない場合の作戦名称を設定します。
default 手動戦闘

param Default Tactics Name
desc MVデフォルトの自動戦闘時の作戦名称を設定します。
default 自動戦闘

param Skip Party Command
desc パーティーメンバー全員が自動戦闘の場合に、パーティーコマンドをスキップするか
type select
option スキップする(MVデフォルト)
value 0
option スキップしない
value 1
option 1ターン目だけスキップしない
value 2
default 0

param Menu Command
desc メニューコマンドに作戦コマンドを追加するか
type struct<command>
default

param Party Command
desc バトル時のパーティーコマンドに作戦コマンドを追加するか
type struct<command>
default

param Title Texts
desc 作戦画面のタイトルウィンドウに表示する文字列を設定する
type struct<title>
default {"party":"パーティー","tactics":"作戦リスト"}

ライセンス表記
本プラグインのライセンスについて(License)
本プラグインはMITライセンスのもとで公開しています。
This plugin is released under the MIT License.
Copyright (c) 2017,2018 Futokoro
http://opensource.org/licenses/mit-license.php

紹介ページ https://github.com/futokoro/RPGMaker