Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- # [RGSS 2] Mana Shield
- # Version : 1.1
- # Author : LowlingLife
- #==============================================================================
- # Membuat state yang membuat damage di-deal ke SP, bukan ke HP.
- #==============================================================================
- # CHANGELOG :
- # V. 1.0 | Initial Release
- # V. 1.1 | Re-make from zero. Add Half Damage State.
- #=============================================================================
- module ManaShield
- # ID dari State yang akan mengalihkan damage ke SP secara Full.
- FULL_STATE = [17, 18, 19]
- # ID dari State dimana separuh damage dialihkan ke SP dan separuh lagi
- # dialihkan ke HP.
- HALF_STATE = [20, 21, 22]
- # ID dari State dimana hanya separuh damage yang dialihkan ke SP tapi
- # separuhnya tidak dialihkan ke HP.
- HALF_DAMAGE_STATE = [23, 24, 25]
- # Set ke true jika ingin memakai fitur Overflow. Jika Damage yang di-deal
- # lebih besar daripada SP, sisanya akan di deal ke HP.
- OVERFLOW = false
- # Set ke true jika ingin Mana Shield State otomatis di-remove setelah
- # mendapat damage yang lebih besar dari pada SP.
- # NOTE : Uncheck Release Condition :
- # at the end of battle jika menggunakan opsi ini.
- AUTO_REMOVE = true
- # Set ke true jika ingin agar Mana Shield tetap men-deal damage yang
- # disebabkan Skill ke SP.
- SKILL_PROTECTION = true
- #==============================================================================
- # EDITING BEYOND THIS LINE CAN CAUSE DAMAGE TO YOUR GAME. THEREFORE, EDIT
- # WITH YOUR OWN RISK!
- #==============================================================================
- class Game_Battler
- include ManaShield
- attr_accessor :overflow
- #----------------------------------------------------------------------------
- # INITIALIZE
- #----------------------------------------------------------------------------
- alias mana_shield_initialize initialize unless $@
- def initialize
- mana_shield_initialize
- @overflow = 0
- end
- #----------------------------------------------------------------------------
- # CHECH MANA SHIELD
- #----------------------------------------------------------------------------
- def check_mana_shield
- if FULL_STATE.any?{|s| @states.include?(s)}
- @mp_damage = damage
- if @mp_damage > self.mp
- if OVERFLOW
- @overflow = damage - self.mp
- @mp_damage = damage - @overflow
- @hp_damage = @overflow
- else
- @overflow = damage - self.mp
- @mp_damage = damage - @overflow
- end
- for s in FULL_STATE
- @states.delete(s) if AUTO_REMOVE
- @states_turn.delete(s) if AUTO_REMOVE
- end
- end
- elsif HALF_STATE.any?{|s| @states.include?(s)}
- @mp_damage = damage / 2
- @hp_damage = damage / 2
- if @mp_damage > self.mp
- if OVERFLOW
- @overflow = damage - self.mp
- @mp_damage = damage - @overflow
- @hp_damage = @overflow
- else
- @overflow = damage - self.mp
- @mp_damage = damage - @overflow
- end
- for s in HALF_STATE
- @states.delete(s) if AUTO_REMOVE
- @states_turn.delete(s) if AUTO_REMOVE
- end
- end
- elsif HALF_DAMAGE_STATE.any?{|s| @states.include?(s)}
- @mp_damage = damage / 2
- if @mp_damage > self.mp
- if OVERFLOW
- @overflow = damage - self.mp
- @mp_damage = damage - @overflow
- @hp_damage = @overflow
- else
- @overflow = damage - self.mp
- @mp_damage = damage - @overflow
- end
- for s in HALF_DAMAGE_STATE
- @states.delete(s) if AUTO_REMOVE
- @states_turn.delete(s) if AUTO_REMOVE
- end
- end
- else
- @hp_damage = damage
- end
- end
- #--------------------------------------------------------------------------
- # * Calculation of Damage From Normal Attack
- #--------------------------------------------------------------------------
- def make_attack_damage_value(attacker)
- damage = attacker.atk * 4 - self.def * 2 # base calculation
- damage = 0 if damage < 0 # if negative, make 0
- damage *= elements_max_rate(attacker.element_set) # elemental adjustment
- damage /= 100
- if damage == 0 # if damage is 0,
- damage = rand(2) # half of the time, 1 dmg
- elsif damage > 0 # a positive number?
- @critical = (rand(100) < attacker.cri) # critical hit?
- @critical = false if prevent_critical # criticals prevented?
- damage *= 3 if @critical # critical adjustment
- end
- damage = apply_variance(damage, 20) # variance
- damage = apply_guard(damage) # guard adjustment
- check_mana_shield
- end
- #--------------------------------------------------------------------------
- # * Calculation of Damage Caused by Skills or Items
- #--------------------------------------------------------------------------
- def make_obj_damage_value(user, obj)
- damage = obj.base_damage # get base damage
- if damage > 0 # a positive number?
- damage += user.atk * 4 * obj.atk_f / 100 # Attack F of the user
- damage += user.spi * 2 * obj.spi_f / 100 # Spirit F of the user
- unless obj.ignore_defense # Except for ignore defense
- damage -= self.def * 2 * obj.atk_f / 100 # Attack F of the target
- damage -= self.spi * 1 * obj.spi_f / 100 # Spirit F of the target
- end
- damage = 0 if damage < 0 # If negative, make 0
- elsif damage < 0 # a negative number?
- damage -= user.atk * 4 * obj.atk_f / 100 # Attack F of the user
- damage -= user.spi * 2 * obj.spi_f / 100 # Spirit F of the user
- end
- damage *= elements_max_rate(obj.element_set) # elemental adjustment
- damage /= 100
- damage = apply_variance(damage, obj.variance) # variance
- damage = apply_guard(damage) # guard adjustment
- if obj.damage_to_mp
- @mp_damage = damage # damage MP
- else
- check_mana_shield if SKILL_PROTECTION # damage HP
- end
- end
- end
- #==============================================================================
- # END OF SCRIPT
- #==============================================================================
- end
Advertisement
Add Comment
Please, Sign In to add comment