KGuard Rekovery XP
by Kyonides
Introduction
This script will allow you to gain HP or SP or even both if guarding, but it depends on luck or a random number to be precise.
There are several CONSTANTS embedded in the script that seemed to be repeating themselves. That is totally fine. Just go configure them at any given time to suit your guarding needs.
All values stand for percentages. Never add their % symbols!
Accepted Range of Values: 0 through 100.
Since version
1.1.0 you can also add or remove or clear
Guard States !
Warning
Scene_Battle#make_basic_action_result has been overwritten.
It won't work in old saved games! You got to delete them.
The Script
Spoiler: KGuard Rekovery XP
Ruby: # * KGuard Rekovery XP * # # Scripter : Kyonides # v1.1.0 - 2025-05-15 # This script will allow you to gain HP or SP or even both if guarding. # There are several CONSTANTS that seemed to be repeating themselves. That is # totally fine. Just go configure them first to suit your guarding needs. # All values stand for percentages. Never add their % symbols! # Accepted Range of Values: 0 through 100. # * Optional Script Calls * # # - Add or Clear Guard States # For Heroes: # actors = $game_party.actors # actors[ActorIndex].add_guard_states_plus(StateID1, etc.) # actors[ActorIndex].add_guard_states_minus(StateID1, etc.) # actors[ActorIndex].clear_guard_states_plus # actors[ActorIndex].clear_guard_states_minus # For Enemies in Battle: # enemies = $game_troop.enemies # enemies[EnemyIndex].add_guard_states_plus(StateID1, etc.) # enemies[EnemyIndex].add_guard_states_minus(StateID1, etc.) # enemies[EnemyIndex].clear_guard_states_plus # enemies[EnemyIndex].clear_guard_states_minus # * Warning * # # Scene_Battle#make_basic_action_result has been overwritten. module KGuard module LifeGain ACTOR_PERCENT = 7 ACTOR_CHANCE = 50 ENEMY_PERCENT = 5 ENEMY_CHANCE = 25 end module ManaGain ACTOR_PERCENT = 7 ACTOR_CHANCE = 50 ENEMY_PERCENT = 5 ENEMY_CHANCE = 25 end end class Game_Battler include KGuard alias :kyon_kguard_rek_gm_btlr_init :initialize alias :kyon_kguard_rek_gm_btlr_atk_fx :attack_effect alias :kyon_kguard_rek_gm_btlr_skl_fx :skill_effect attr_accessor :guard_life_rate, :guard_life_chance attr_accessor :guard_mana_rate, :guard_mana_chance def initialize kyon_kguard_rek_gm_btlr_init setup_guard_gain_points setup_guard_states end def setup_guard_states @guard_states_plus = [] @guard_states_minus = [] end def guard_regain_life points = guard_life_gain * maxhp / 100 self.hp += points @damage = -points end def guard_regain_mana points = guard_mana_gain * maxsp / 100 self.sp += points @damage = -points end def guard_regain_points guard_regain_life if guard_gain_life? guard_regain_mana if guard_gain_mana? end def guard_life_gain @guard_life_rate end def guard_mana_gain @guard_mana_rate end def guard_gain_life? rand(100) <= @guard_life_chance end def guard_gain_mana? rand(100) <= @guard_mana_chance end def add_guard_states_plus(*new_states) @guard_states_plus += new_states @guard_states_plus = @guard_states_plus.uniq.sort end def add_guard_states_minus(*new_states) @guard_states_minus += new_states @guard_states_minus = @guard_states_minus.uniq.sort end def clear_guard_states_plus @guard_states_plus.clear end def clear_guard_states_minus @guard_states_minus.clear end def guard_trigger_states n = rand(@guard_states_plus.size) state_id = @guard_states_plus[n] add_state(state_id) if state_id n = rand(@guard_states_minus.size) state_id = @guard_states_minus[n] remove_state(state_id) if state_id end def attack_effect(attacker) guard_trigger_states if guarding? kyon_kguard_rek_gm_btlr_atk_fx(attacker) end def skill_effect(user, skill) guard_trigger_states if guarding? kyon_kguard_rek_gm_btlr_skl_fx(user, skill) end def attack? @current_action.basic == 0 end def wanna_escape? @current_action.basic == 2 end def do_nothing? @current_action.basic == 3 end def actor? @actor_id != nil end def enemy? @enemy_id != nil end end class Game_Actor def setup_guard_gain_points @guard_life_rate = LifeGain::ACTOR_PERCENT @guard_life_chance = LifeGain::ACTOR_CHANCE @guard_mana_rate = ManaGain::ACTOR_PERCENT @guard_mana_chance = ManaGain::ACTOR_CHANCE end end class Game_Enemy def setup_guard_gain_points @guard_life_rate = LifeGain::ENEMY_PERCENT @guard_life_chance = LifeGain::ENEMY_CHANCE @guard_mana_rate = ManaGain::ENEMY_PERCENT @guard_mana_chance = ManaGain::ENEMY_CHANCE end end class Scene_Battle def make_basic_action_result if @active_battler.attack? prepare_basic_attack process_attack_action return end if @active_battler.guarding? prepare_guard_action return end if @active_battler.enemy? and @active_battler.wanna_escape? prepare_escape_action return end do_nothing if @active_battler.do_nothing? end def prepare_basic_attack @animation1_id = @active_battler.animation1_id @animation2_id = @active_battler.animation2_id if @active_battler.enemy? if @active_battler.restriction == 3 target = $game_troop.random_target_enemy elsif @active_battler.restriction == 2 target = $game_party.random_target_actor else index = @active_battler.current_action.target_index target = $game_party.smooth_target_actor(index) end end if @active_battler.actor? if @active_battler.restriction == 3 target = $game_party.random_target_actor elsif @active_battler.restriction == 2 target = $game_troop.random_target_enemy else index = @active_battler.current_action.target_index target = $game_troop.smooth_target_enemy(index) end end @target_battlers = [target].compact end def process_attack_action @target_battlers.each {|target| target.attack_effect(@active_battler) } end def prepare_guard_action @help_window.set_text($data_system.words.guard, 1) @active_battler.guard_regain_points end def prepare_escape_action @help_window.set_text("Escape", 1) @active_battler.escape end def do_nothing $game_temp.forcing_battler = nil @active_battler.guard_regain_points if @active_battler.enemy? @phase4_step = 1 end end 复制代码
Terms & Conditions
Free for use in ANY game.
Due credit is mandatory.
Mention this forum in your game credits as well.
That's it!
本贴来自国际rpgmaker官方论坛作者:kyonides处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:
https://forums.rpgmakerweb.com/threads/kguard-rekovery-xp.166489/