加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 jianyulei 于 2017-12-2 14:08 编辑
例如我在某特性栏里备注 <伤害 $game_actors[1].atk*0.2> 然后在回合结束阶段调取这个计算公式让其作为回合损伤,请问我在脚本里该如何调取这个公式最终得到准确的数字? 我只会用调取准确的数字,如<伤害 50>,但看别人的脚本里似乎能使用公式,自己又研究不出来,特来请教。 别人的脚本A [pre lang="ruby"]# ■ RGSS3 反撃無効率設定 Ver1.01 by 星潟
# 反撃を無効化する確率と反撃を無効にできる属性を設定します。
# なお、反撃無効率は全て加算されます。
# ★特徴の反撃無視率設定例
#(特徴を有する項目のメモ欄に設定します。
# PS_AVがtrueの場合、スキルのメモ欄に書き込むことで
# 行動後反撃率を有するパッシブスキルとして有効となります)
# 複数の項目に設定されている場合、全て加算されます。
#------------------------------------------------------------------------------
# <反撃無効パッシブ:50>
#
# この場合、全ての行動に反撃無効率50%を付与。
#------------------------------------------------------------------------------
# <反撃無効パッシブ:a.tp>
#
# この場合、TP分の値の反撃無効率を付与。
#------------------------------------------------------------------------------
# <反撃無効パッシブ:a.hp_rate*100>
#
# この場合、HP割合分の反撃無効率を付与。
#------------------------------------------------------------------------------
# <反撃無効パッシブ:a.agi-b.agi>
#
# この場合、相手と自分の敏捷性の差分分の反撃無効率を付与。
#==============================================================================
# ★アイテム/スキルの反撃無視率設定例
# アイテム・スキルのメモ欄に以下のように記入
# <反撃無効率:100>
# この場合、このアイテム・スキルに反撃無効率100%を付与。
#------------------------------------------------------------------------------
# <反撃無効率:a.tp>
#
# この場合、このアイテム・スキルにTP分の値の反撃無効率を付与。
#------------------------------------------------------------------------------
# <反撃無効率:a.hp_rate*100>
#
# この場合、このアイテム・スキルにHP割合分の反撃無効率を付与。
#------------------------------------------------------------------------------
# <反撃無効率:a.agi-b.agi>
#
# この場合、このアイテム・スキルに相手と自分の敏捷性の差分分の反撃無効率を付与。
#==============================================================================
# Ver1.01 キャッシュ化による軽量化を施しました。
# また、無効率判定に計算式を使えるようになりました。
#==============================================================================
module CNT_BREAK
#反撃無視属性(設定しない場合は ELEMENT = nil とする)
ELEMENT = [nil]
#反撃無視確率を付与するパッシブスキルを作成するか(true→作成する/false→作成しない)
PS_AV = false
#特徴もしくはパッシブスキルのメモ欄に反撃無効率を記入する為のキーワード
#(パッシブスキルはアクターのみ有効)
WORD1 = "反撃無効パッシブ"
#攻撃スキルのメモ欄に反撃無効率を記入する為のキーワード
WORD2 = "反撃無効率"
end
class Game_BattlerBase
#--------------------------------------------------------------------------
# ● パッシブスキル特徴判定
#--------------------------------------------------------------------------
def cntb_feature_objects
feature_objects
end
#--------------------------------------------------------------------------
# ● 反撃無視率計算
#--------------------------------------------------------------------------
def cntb_rate(target, item)
a = self
b = target
cntb_feature_objects.inject(0) {|r, f| r += eval(f.cntb_rate1)}
end
end
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# ● スキル/アイテムの反撃率計算
#--------------------------------------------------------------------------
alias item_cnt_cntb item_cnt
def item_cnt(user, item)
if item.damage.element_id < 0
user.atk_elements.each {|i| return 0 if CNT_BREAK::ELEMENT.include?(i)} if CNT_BREAK::ELEMENT != nil && !CNT_BREAK::ELEMENT.empty?
else
return 0 if CNT_BREAK::ELEMENT != nil && !CNT_BREAK::ELEMENT.empty? && CNT_BREAK::ELEMENT.include?(item.damage.element_id)
end
a = user
b = self
return 0 if rand(100) < eval(item.cntb_rate2) + user.cntb_rate(self, item)
item_cnt_cntb(user, item)
end
end
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● パッシブスキル特徴判定
#--------------------------------------------------------------------------
def cntb_feature_objects
CNT_BREAK::PS_AV ? super + skills : super
end
end
class RPG::BaseItem
#--------------------------------------------------------------------------
# ● 反撃無視率計算
#--------------------------------------------------------------------------
def cntb_rate1
return @cntb_rate1 if @cntb_rate1 != nil
memo = self.note.scan(/<#{CNT_BREAK::WORD1}[::](\S+)>/).flatten
@cntb_rate1 = memo != nil && !memo.empty? ? memo[0] : "0"
@cntb_rate1
end
end
class RPG::UsableItem < RPG::BaseItem
#--------------------------------------------------------------------------
# ● 反撃無視率計算
#--------------------------------------------------------------------------
def cntb_rate2
return @cntb_rate2 if @cntb_rate2 != nil
memo = self.note.scan(/<#{CNT_BREAK::WORD2}[::](\S+)>/).flatten
@cntb_rate2 = memo != nil && !memo.empty? ? memo[0] : "0"
@cntb_rate2
end
end[/pre]
别人的脚本B[pre lang="ruby"]
#==============================================================================
# ■ RGSS3 スキル・アイテムへの追加属性 Ver1.00 by 星潟
#------------------------------------------------------------------------------
# 一定確率で指定したスキル・アイテム使用時のダメージ属性が
# 本来エディタ上で指定された物から更に追加されるようにします。
# 使い方によっては特定スキル・アイテムに
# 一定確率で他の属性を追加する特徴が作成できるようにもなります。
#
# 例.スキルのメモ欄に
# <追加属性:3>
# 100%の確率でそのスキル・アイテムに
# 属性ID3の属性が追加される。
#
# <追加属性:4,50>
# 50%の確率でそのスキル・アイテムに
# 属性ID4の属性が追加される。
#
# <追加属性:5,user.element_rate(17)*100-100>
# 使用者の属性ID17の属性有効度から100を引いた確率で
# そのスキル・アイテムに属性ID5の属性が追加される。
#------------------------------------------------------------------------------
# ももまるLabs様のXPスタイルバトルと併用される場合
# XPスタイルバトルより上に配置して下さい。
# そうする事で、弱点/耐性ダメージ表示が正常に稼働します。
#
# 数値指定の2番目は確率処理ですが、evalを用いているので
# 上のuser.element_rate(17)*100-100等のように、計算式を用いる事が可能です。
# 装備品等で追加属性を設定する際は、これをうまく利用して下さい。
#==============================================================================
module EX_ELEM
#追加属性で弱点や耐性が発生した時の属性計算方法の指定
#0……各属性で最も高い有効度を属性有効度として扱う。
#1……全属性の有効度の乗算を属性有効度として扱う。
#2……基本有効度を0とし、全属性の有効度から100を引いた値を
# 基本有効度に加算した値を属性有効度として扱う。
TYPE = 0
#追加属性として同じ属性が多重付与された場合の処理
#true……全て有効にする。
#false……一回分のみ有効とする。
#なお、TYPEが0の場合は、強制的にfalseになります。
DUAL1 = false
#スキル・アイテムと同じ属性が多重付与された場合の処理
#true……有効にする。
#false……無効とする。
#なお、TYPEが0の場合は、強制的にfalseになります。
DUAL2 = false
#属性有効度下限
#(負の値も指定可能。
# ただし、TYPEを2にしない限り、通常環境下では0以下にはならない。
# 設定しない場合、nilを指定)
BTM = 0
#属性有効度上限
#(設定しない場合、nilを指定)
TOP = 10000
#設定用キーワード(変更不要)
WORD = "追加属性"
end
class Game_Battler < Game_BattlerBase
alias item_element_rate_extra_element item_element_rate
def item_element_rate(user, item)
@exelem = []
data = item_element_rate_extra_element(user, item)
#追加属性がない時は処理を飛ばす
if !item.extra_element.empty?
#追加属性を確率で判定
for i in 0...item.extra_element.size
next unless eval(item.extra_element[1]) > rand(100)
@exelem.push(item.extra_element[0].to_i)
end
#多重付与された追加属性を削除(設定による)
@exelem.uniq! if !EX_ELEM::DUAL1 or EX_ELEM::TYPE == 0
#追加属性内から、元々スキル・アイテム内にある属性を削除(設定による)
if !EX_ELEM::DUAL2 or EX_ELEM::TYPE == 0
if item.damage.element_id < 0 && !user.atk_elements.empty?
user.atk_elements.each do |i|
@exelem.delete(i) if @exelem.include?(i)
end
else
@exelem.delete(item.damage.element_id) if @exelem.include?(item.damage.element_id)
end
end
#追加属性がある場合、タイプ別に属性有効度計算処理
if !@exelem.empty?
for i in @exelem
data2 = element_rate(i)
if EX_ELEM::TYPE == 0
data = data2 if data < data2
elsif EX_ELEM::TYPE == 1
data *= data2
elsif EX_ELEM::TYPE == 2
data += data2 - 1.0
end
end
end
end
#属性有効度最大値チェック
data = [data, EX_ELEM::TOP / 100.0].min if EX_ELEM::TOP != nil
#属性有効度最低値チェック
data = [data, EX_ELEM::BTM / 100.0].max if EX_ELEM::BTM != nil
return data
end
end
class RPG::UsableItem < RPG::BaseItem
def extra_element
#キャッシュがある場合は読み込み処理を飛ばす
return @extra_element if @extra_element != nil
data = []
#メモ欄から読み込み
self.note.each_line { |line|
memo = line.scan(/<#{EX_ELEM::WORD}[::](\S+)>/)
memo = memo.flatten
if memo != nil and not memo.empty?
memo = memo[0].split(/\s*,\s*/)
#2番目の値がない場合は100%追加
memo.push("100") if memo[1] == nil
data.push(memo)
end
}
@extra_element = data
return @extra_element
end
end
[/pre]
|