#============================================================================== # ■ RGSS3 ステート重複判定特徴 Ver1.01 by 星潟 #------------------------------------------------------------------------------ # 通常はステートの効果は1つにつき1つ分しか判定されませんが # 指定数分付与されているような処理を行える特徴を作成できるようになります。 # なお、このスクリプトによって重複判定されたステートから再判定して # 更に重複してされるという事はありません。 # (例.ステートAがステートBを1回分、ステートBがステートAを1回分重複判定する場合 # 互いに重複加算し続けて無限回数の加算になる事は無い。 # この場合、通常分を含めてステートAは2回、ステートBは2回の判定となる) # なお、当方のステート重複付与禁止とは直接関係はありません。 #============================================================================== # 特徴を有する項目(アクター・職業・装備・ステート・エネミー等)のメモ欄に設定。 # 行を分けて記入する事で複数ステートの指定が可能です。 #------------------------------------------------------------------------------ # <ステート重複判定:2,1> # # ステートID2が付与されている場合の特徴の判定を追加でもう1回行います。 # (デフォルトでは毒なので、毒のスリップダメージを2回分受けます) #------------------------------------------------------------------------------ # <ステート重複判定:2,9> # # ステートID2が付与されている場合の特徴の判定を追加でもう9回行います。 # (デフォルトでは毒なので、毒のスリップダメージを10回分受けます) #============================================================================== module OverlapState Word = "ステート重複判定" end class Game_BattlerBase #-------------------------------------------------------------------------- # 重複判定ステートの配列 #-------------------------------------------------------------------------- def state_overlap(fs) h = {} a = [] fs.each {|f| f.overlap_states.each {|k,v| h[k] = h[k] ? h[k] + v : v}} h.each {|k,v| next unless @states.include?(k) a += [$data_states[k]] * v} a end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # 特徴 #-------------------------------------------------------------------------- alias feature_objects_state_overlap feature_objects def feature_objects fs = feature_objects_state_overlap fs + state_overlap(fs) end end class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # 特徴 #-------------------------------------------------------------------------- alias feature_objects_state_overlap feature_objects def feature_objects fs = feature_objects_state_overlap fs + state_overlap(fs) end end class RPG::BaseItem #-------------------------------------------------------------------------- # ステート重複判定ハッシュ #-------------------------------------------------------------------------- def overlap_states @overlap_states ||= create_overlap_states end #-------------------------------------------------------------------------- # ステート重複判定ハッシュ作成 #-------------------------------------------------------------------------- def create_overlap_states h = {} w = OverlapState::Word note.each_line {|l| if /<#{w}[::](\d+),(\d+)>/ =~ l k = $1.to_i h[k] ||= 0 h[k] += $2.to_i end} h end end