#============================================================================== # ■ 敵對心腳本@ネ実ツクールスレ #------------------------------------------------------------------------------ # VX ACE敵対心設定。 # (可通過HP變動設定累積仇恨。) #------------------------------------------------------------------------------ # ■ 規格 # ・給予損害,將HP恢復等增加敵對。 # ※100傷害 or HP100回復時敵対心100増加。 # ・受到傷害時,會降低敵對心。 # ・[敵對]×的[狙撃率]值最大的角色將是敵人的目標。 # ・若[敵對]×的[狙撃率]值最大的結果是多個時,靠前的角色會成為目標。 # ・如果影響範圍是隨機的,會忽略敵意,狙撃率。 # ・若隊員全員的敵対心都是0時、會和原本乱数決定目標。 # ・戦闘不能時敵対心歸0。 #------------------------------------------------------------------------------ # ■ 使用方法 -一- # ◆制作産生敵對値但無傷害的技能。 # ・在技能的備註中設定敵對値。 # 例)増加敵對値100。 # <敵対心 100> # ◆制作減少敵對値害的技能。 # ・在技能的備註中現設定敵對値。 # ※敵対心減少以数値百分比計算。 # 例)減少敵対心50%。 # <敵対心 -50> # ◆可在傷害中計算式中使用敵対心。 # ・計算式用“a.hat”書式、來參照現在的敵対心。 # 例)ロイエ的傷害計算式 # a.hat * a.tp * 0.001 #------------------------------------------------------------------------------ # ■ 使用方法 -二- # ◆制作將自方隊員的敵對値轉移到自己身上。 # ①在資料庫中制作一個状態。 # a.任意制作一個状態名。 # 例)敵意減、敵対心下降等 # b.状態解除条件設定最短解除。 # 例)自動解除時間:回合完結時 # 継続回合数:0 ~ 0 # c.把信息設定自方隊員得到這状態。 # 例)から敵対心を盗んだ。 # ②在資料庫制作以下的轉移敵対心的技能。 # a.効果範囲:設定成自方隊員単体。 # b.使用可能時:設定成戦鬥時。 # c.使用効果設定成付加①所作成状態。 # d.附註成盗取敵対心。数値為盗取敵対心的比例(%)。 # 例)盗取敵対心50%。 # <盗む敵対心 50> #------------------------------------------------------------------------------ # ■ 使用方法 -三- # ◆目の前のパーティメンバーに敵対心をなすり付けるスキルを作る。 # ※並び順にて使用者の直前の生存メンバーが対象になります。 # ①データベースでステートを以下のように作成します。 # a.名前に“だまし討ち”が含まれるステートを作成します。 # b.ステートの解除条件を以下のように設定します。 # 例)自動解除のタイミング:行動終了時 # 継続ターン数:1 ~ 1 # c.この状態jaが解除されたときのメッセージを設定します。 # 例)は、だまし討ちの効果がきれた。 # ②データベースでだまし討ちステートを付加するスキルを作成します。 # a.効果範囲:使用者 に設定します。 # b.使用可能時:バトルのみ に設定します。 # c.使用効果に①で作ったステート付加を設定します。 #------------------------------------------------------------------------------ # ■ 使用方法 -四- # ◆設定被傷害時敵対心下降的特徴。 # ・装備、状態等的附註進行以下的設定。 # 例)敵対心減少量10%下降。 # <敵対心減少量-10> # ※各装備、技能効果可累積。 # ◆設定技能/道具使用時敵対心上升量減小的特徴。 # ・装備、状態等的附註進行以下的設定。 # 例)敵対心上昇量50%低下(半減)。 # <敵対心上昇量-50> # ※各装備、技能効果可累積。 #============================================================================== class Game_BattlerBase #-------------------------------------------------------------------------- # ● 敵対心の上限の設定 #-------------------------------------------------------------------------- # 累積ヘイトの上限 MAX_HATE = 99999999 #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :hat # ヘイト #-------------------------------------------------------------------------- # ● オブジェクト初期化 ※エイリアス #-------------------------------------------------------------------------- alias enmity_initialize initialize def initialize enmity_initialize @hat = 0 end #-------------------------------------------------------------------------- # ● だまし討ちのステート ID を取得 #-------------------------------------------------------------------------- def damashi_state_id $data_states.find {|state| return state.id if state.name.include?("だまし討ち") if state != nil} end end class RPG::BaseItem #-------------------------------------------------------------------------- # ● 敵対心減少量を取得 #-------------------------------------------------------------------------- def hate_down_depth /<敵対心減少量-(\d+)>/ =~ note ? $1.to_i * 0.01 : 0 end #-------------------------------------------------------------------------- # ● 敵対心上昇量を取得 #-------------------------------------------------------------------------- def hate_up_depth /<敵対心上昇量-(\d+)>/ =~ note ? $1.to_i * 0.01 : 0 end end class RPG::UsableItem #-------------------------------------------------------------------------- # ● メモから敵対心を取得 #-------------------------------------------------------------------------- def add_hate /<敵対心\s*(\S+)>/ =~ note ? $1.to_i : 0 end #-------------------------------------------------------------------------- # ● メモから盗む敵対心を取得 #-------------------------------------------------------------------------- def steal_hate /<盗む敵対心\s*(\d+)>/ =~ note ? $1.to_i : 0 end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # ● ヘイトのクリア #-------------------------------------------------------------------------- def clear_hate self.hat = 0 end #-------------------------------------------------------------------------- # ● 戦闘不能になる ※エイリアス #-------------------------------------------------------------------------- alias enmity_die die def die enmity_die clear_hate end #-------------------------------------------------------------------------- # ● ヘイトの処理 #-------------------------------------------------------------------------- def execute_enmity(user, item) item.add_hate < 0 ? user.hat *= (item.add_hate * -0.01) : user.hat += item.add_hate if user.state?(damashi_state_id) ta_target = $game_party.alive_members.index(user) -1 ta_target = 0 if ta_target < 1 $game_party.alive_members[ta_target].hat += @result.hp_damage.abs else user.hat += @result.hp_damage.abs * (1 - user.hate_up_plus) end self.hat -= @result.hp_damage * (1 - self.hate_down_plus) if @result.hp_damage > 0 if item.steal_hate > 0 steal_hates = self.hat * (item.steal_hate * 0.01) user.hat += steal_hates self.hat -= steal_hates end user.hat = MAX_HATE if user.hat > MAX_HATE self.hat = 0 if self.hat < 0 end #-------------------------------------------------------------------------- # ● スキル/アイテムの使用者側への効果 ※エイリアス #-------------------------------------------------------------------------- alias enmity_item_user_effect item_user_effect def item_user_effect(user, item) enmity_item_user_effect(user, item) execute_enmity(user, item) end #-------------------------------------------------------------------------- # ● 戦闘開始処理 ※エイリアス #-------------------------------------------------------------------------- alias enmity_on_battle_start on_battle_start def on_battle_start enmity_on_battle_start clear_hate end #-------------------------------------------------------------------------- # ● 敵対心減少量の合計 #-------------------------------------------------------------------------- def hate_down_plus feature_objects.inject(0.0){|r,i| r + i.hate_down_depth} end #-------------------------------------------------------------------------- # ● 敵対心上昇量の合計 #-------------------------------------------------------------------------- def hate_up_plus feature_objects.inject(0.0){|r,i| r + i.hate_up_depth} end end class Game_Unit #-------------------------------------------------------------------------- # ● タゲを取得 #-------------------------------------------------------------------------- def top_hat if hat_sum > 0 alive_members.sort {|a,b| b.hat * b.tgr - a.hat * a.tgr}[0] else random_target end end #-------------------------------------------------------------------------- # ● ヘイトの合計を計算 #-------------------------------------------------------------------------- def hat_sum alive_members.inject(0) {|r, member| r + member.hat } end #-------------------------------------------------------------------------- # ● ターゲットのランダムな決定(敵対心無視) #-------------------------------------------------------------------------- def random_target_true return alive_members[rand(alive_members.size)] end end class Game_Action #-------------------------------------------------------------------------- # ● 敵に対するターゲット ※再定義 #-------------------------------------------------------------------------- def targets_for_opponents if item.for_random? Array.new(item.number_of_targets) { opponents_unit.random_target_true } elsif item.for_one? num = 1 + (attack? ? subject.atk_times_add.to_i : 0) if @target_index < 0 [opponents_unit.top_hat] * num else [opponents_unit.smooth_target(@target_index)] * num end else opponents_unit.alive_members end end end
1.44 MB, 下载次数: 73
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |