いつもお世話になっております。
VXaceには特殊能力値として『TPチャージ率』というものがありますが
デフォルトだと一つのパラメーターで一括管理している為
TPチャージ率の上がる装備品を1個身に付けただけで、物理攻撃が命中しても
魔法攻撃が命中しても逆に自分が被弾した時も全て倍率がかかってしまうので
いささか万能すぎる様な気がします。
これを
1.命中タイプ物理・命中タイプ魔法・命中タイプ必中(回復魔法などHPの数字を変えるもの)
・命中タイプ必中(バフデバフなど数字を変えないもの)・被弾に分け
それぞれ別の装備品を身に付けないとチャージ率が上がらない様にしたい。
2.デフォルトでは攻撃を回避した場合、回避した側もされた側もTPに影響が出ないので
これらの行動時にもTPが上がる様にしたい。
3.上記2.に対しても回避した場合とされた場合とで別々の装備品でチャージ率が上がる様にしたい。
…という風に改良を加えたいのですが、どの様にしたら良いのでしょうか?
【RGSS3】TPチャージ率の細分化
Re: 【RGSS3】TPチャージ率の細分化
せくもんさん、こんばんは。
1はメモ欄からそれぞれのチャージ率を取得できるようにでもして
それぞれの場面でそれを集計したものを乗算すればいいかと思います。
2はスキル/アイテムの効果を適用する時に回避していたらTPを増やす処理を行えばいいかと思います。
3は2の時に1と同じようにすればいいかと思います。
※回避時に得るTPの量をどう設定したいのか分からなかったのでスキル/アイテムで設定するようにしています。
1はメモ欄からそれぞれのチャージ率を取得できるようにでもして
それぞれの場面でそれを集計したものを乗算すればいいかと思います。
2はスキル/アイテムの効果を適用する時に回避していたらTPを増やす処理を行えばいいかと思います。
3は2の時に1と同じようにすればいいかと思います。
コード: 全て選択
=begin
・細分化したTPチャージ率の設定方法
特徴を持つオブジェクトのメモ欄に
物理TPチャージ率 :<物理TPチャージ率:チャージ率>
魔法TPチャージ率 :<魔法TPチャージ率:チャージ率>
必中(HP変動)TPチャージ率 :<必中TPチャージ率:チャージ率>
必中(HP不動)TPチャージ率 :<非HP必中TPチャージ率:チャージ率>
被ダメージのTPチャージ率 :<被弾TPチャージ率:チャージ率>
回避した時のTPチャージ率 :<回避TPチャージ率:チャージ率>
回避された時のTPチャージ率 :<被回避TPチャージ率:チャージ率>
を記述してください。
※チャージ率はパーセンテージで設定してください。
20%増にしたいときは120と記述してください。
※チャージ率は乗算です
※元のTPチャージ率は無効化していないので
最終的なチャージ率は「元のTPチャージ率 * それぞれのチャージ率」です。
・回避時の得TPの個別設定方法
スキル/アイテムのメモ欄に
回避した時 :<回避得TP:得TP>
回避された時 :<被回避得TP:得TP>
を記述してください。
=end
module TP_GAIN
#回避した時のデフォルト得TP
EVA_TP_GAIN = 1
#回避された時のデフォルト得TP
MISS_TP_GAIN = 1
end
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ● スキル/アイテムの効果適用
#--------------------------------------------------------------------------
alias org_item_apply item_apply
def item_apply(user, item)
org_item_apply(user, item)
if @result.evaded
charge_tp_by_evaded(item)
user.charge_tp_by_missed(item)
end
end
#--------------------------------------------------------------------------
# ● スキル/アイテムの使用者側への効果(再定義)
#--------------------------------------------------------------------------
def item_user_effect(user, item)
type = item.certain? && @result.hp_damage == 0 ? 3 : item.hit_type
user.tp += item.tp_gain * user.tcr * user.hit_tcr(type)
end
#--------------------------------------------------------------------------
# ● 被ダメージによる TP チャージ(再定義)
#--------------------------------------------------------------------------
def charge_tp_by_damage(damage_rate)
self.tp += 50 * damage_rate * tcr * damage_tcr
end
#--------------------------------------------------------------------------
# ● 回避による TP チャージ
#--------------------------------------------------------------------------
def charge_tp_by_evaded(item)
self.tp += item.evaded_tp_gain * tcr * evaded_tcr
end
#--------------------------------------------------------------------------
# ● 被回避による TP チャージ
#--------------------------------------------------------------------------
def charge_tp_by_missed(item)
self.tp += item.missed_tp_gain * tcr * missed_tcr
end
#--------------------------------------------------------------------------
# ● 被弾時のTPチャージ率
#--------------------------------------------------------------------------
def damage_tcr
feature_objects.inject(1.0) {|r, i| r *= i.damage_tcr }
end
#--------------------------------------------------------------------------
# ● 命中時のTPチャージ率
#--------------------------------------------------------------------------
def hit_tcr(type)
feature_objects.inject(1.0) {|r, i| r *= i.hit_tcr[type] }
end
#--------------------------------------------------------------------------
# ● 回避した時のTPチャージ率
#--------------------------------------------------------------------------
def evaded_tcr
feature_objects.inject(1.0) {|r, i| r *= i.evaded_tcr }
end
#--------------------------------------------------------------------------
# ● 回避された時のTPチャージ率
#--------------------------------------------------------------------------
def missed_tcr
feature_objects.inject(1.0) {|r, i| r *= i.missed_tcr }
end
end
class RPG::UsableItem < RPG::BaseItem
#--------------------------------------------------------------------------
# ● 回避した時に得るTP
#--------------------------------------------------------------------------
def evaded_tp_gain
return @evaded_tp_gain if @evaded_tp_gain
@evaded_tp_gain = /<回避得TP:(\d+)>/ =~ note ? $1.to_i : TP_GAIN::EVA_TP_GAIN
@evaded_tp_gain
end
#--------------------------------------------------------------------------
# ● 回避された時に得るTP
#--------------------------------------------------------------------------
def missed_tp_gain
return @missed_tp_gain if @missed_tp_gain
@missed_tp_gain = /<被回避得TP:(\d+)>/ =~ note ? $1.to_i : TP_GAIN::MISS_TP_GAIN
@missed_tp_gain
end
end
class RPG::BaseItem
#--------------------------------------------------------------------------
# ● 被弾時のTPチャージ率
#--------------------------------------------------------------------------
def damage_tcr
return @damage_tcr if @damage_tcr
@damage_tcr = /<被弾TPチャージ率:(\d+)>/ =~ note ? $1.to_i / 100.0 : 1.0
@damage_tcr
end
#--------------------------------------------------------------------------
# ● 命中時のTPチャージ率
#--------------------------------------------------------------------------
def hit_tcr
return @hit_tcr if @hit_tcr
@hit_tcr = []
[/<必中TPチャージ率:(\d+)>/,/<物理TPチャージ率:(\d+)>/,/<魔法TPチャージ率:(\d+)>/,/<非HP必中TPチャージ率:(\d+)>/].each do |exp|
@hit_tcr << (exp =~ note ? $1.to_i / 100.0 : 1.0)
end
@hit_tcr
end
#--------------------------------------------------------------------------
# ● 回避した時のTPチャージ率
#--------------------------------------------------------------------------
def evaded_tcr
return @evaded_tcr if @evaded_tcr
@evaded_tcr = /<回避TPチャージ率:(\d+)>/ =~ note ? $1.to_i / 100.0 : 1.0
@evaded_tcr
end
#--------------------------------------------------------------------------
# ● 回避された時のTPチャージ率
#--------------------------------------------------------------------------
def missed_tcr
return @missed_tcr if @missed_tcr
@missed_tcr = /<被回避TPチャージ率:(\d+)>/ =~ note ? $1.to_i / 100.0 : 1.0
@missed_tcr
end
end
Re: 【RGSS3】TPチャージ率の細分化
ぽんぽこねるそん様、ご返答ありがとうございます。
はじめは命中率の計算式の様に if item.physical? や if item.magical? を用いれば
判別できるかな?とも思いましたが、確かにメモ欄を活用した方が
複数のチャージ率を併せ持つ装備等が簡単に作れるので
この方法のほうが汎用性は高そうですね。
こちらで作っていただいたスクリプトを試してみたところ物理攻撃や魔法攻撃
被弾などでそれぞれチャージ率を個別に設定できる事が確認できました。
ただ回避に関してはした時もされた時もTPの数字の増加は確認できませんでした。
EVA_TP_GAIN = 100 にしたり
<被回避得TP:100>にしたり
def charge_tp_by_missed(item)
self.tp += 100
end
などの様に書き換えても回避時や被回避時にTPの数値が変わらないのですが
恐縮ですが、チャージ率を乗算する前のデフォルトの得TP値はどの様に設定すれば良いのでしょうか?
はじめは命中率の計算式の様に if item.physical? や if item.magical? を用いれば
判別できるかな?とも思いましたが、確かにメモ欄を活用した方が
複数のチャージ率を併せ持つ装備等が簡単に作れるので
この方法のほうが汎用性は高そうですね。
こちらで作っていただいたスクリプトを試してみたところ物理攻撃や魔法攻撃
被弾などでそれぞれチャージ率を個別に設定できる事が確認できました。
ただ回避に関してはした時もされた時もTPの数字の増加は確認できませんでした。
EVA_TP_GAIN = 100 にしたり
<被回避得TP:100>にしたり
def charge_tp_by_missed(item)
self.tp += 100
end
などの様に書き換えても回避時や被回避時にTPの数値が変わらないのですが
恐縮ですが、チャージ率を乗算する前のデフォルトの得TP値はどの様に設定すれば良いのでしょうか?
Re: 【RGSS3】TPチャージ率の細分化
スクリプトが競合している可能性が高いので
お手数ですがスクリプトエディタでitem_applyで全件検索して
このスクリプトより下のセクションでHitするものがあると思うので
それよりも下に配置してみてください。
お手数ですがスクリプトエディタでitem_applyで全件検索して
このスクリプトより下のセクションでHitするものがあると思うので
それよりも下に配置してみてください。
Re: 【RGSS3】TPチャージ率の細分化
すいません、原因が判明しました。
viewtopic.php?f=43&t=7913
↑
以前、上記トピックでお話したとおり命中率と回避率の計算式を一本化しており
Game_Battlerのスキル/アイテムの回避率計算を
と改変してある為、回避率の高いアクターやエネミーが回避している様に見えるのは実際には
命中率計算の結果であり、そもそもゲーム内で計算上の回避成功・被回避の状態が
発生していないのが原因でした。
お騒がせして申し訳ありませんでした。
viewtopic.php?f=43&t=7913
↑
以前、上記トピックでお話したとおり命中率と回避率の計算式を一本化しており
Game_Battlerのスキル/アイテムの回避率計算を
コード: 全て選択
def item_eva(user, item)
return 0
end
命中率計算の結果であり、そもそもゲーム内で計算上の回避成功・被回避の状態が
発生していないのが原因でした。
お騒がせして申し訳ありませんでした。
Re: 【RGSS3】TPチャージ率の細分化
経過報告です。
ぽんぽこねるそんさんのスクリプト内の『スキル/アイテムの効果適用』の部分を
と書き換える事で、『成功率-回避率』の計算結果による『攻撃失敗』を
擬似的に『回避成功』と置き換えて処理すれば
スクリプトはそのまま使えるみたいです。
ぽんぽこねるそんさんのスクリプト内の『スキル/アイテムの効果適用』の部分を
コード: 全て選択
#--------------------------------------------------------------------------
# ● スキル/アイテムの効果適用
#--------------------------------------------------------------------------
alias org_item_apply item_apply
def item_apply(user, item)
org_item_apply(user, item)
if @result.missed #←改変箇所
charge_tp_by_evaded(item)
user.charge_tp_by_missed(item)
end
end
擬似的に『回避成功』と置き換えて処理すれば
スクリプトはそのまま使えるみたいです。