Skip to content
Permalink
master
Go to file
 
 
Cannot retrieve contributors at this time
117 lines (98 sloc) 3.78 KB
# Manashield
# This will make a manashield state which allow actor takes damage to mana
# instead of health points.
# Usage: use this notetag inside a state <manashield: X, Y%>
# X is damage absorb per mana point.
# Y is damage percentage which can be absorbed.
# Free for all using purposes.
# Credit: Archeia Nessiah for the allowance.
module REGEXP
module MANASHIELD
MANASHIELD = /<manashield:[ ]*(\d+),[ ]*(\d+)[%“]?>/i
end # MANASHIELD
end # REGEXP
#==============================================================================
# ¡ DataManager
#==============================================================================
module DataManager
#--------------------------------------------------------------------------
# alias method: load_database
#--------------------------------------------------------------------------
class <<self; alias load_database_manashield load_database; end
def self.load_database
load_database_manashield
initialize_manashield
end
#--------------------------------------------------------------------------
# new method: initialize_manashield
#--------------------------------------------------------------------------
def self.initialize_manashield
groups = [$data_states]
groups.each { |group|
group.each { |obj|
next if obj.nil?
obj.initialize_manashield
}
}
end
end # DataManager
#==============================================================================
# ¡ RPG::BaseItem
#==============================================================================
class RPG::BaseItem
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :manashield
#--------------------------------------------------------------------------
# new method: initialize_manashield
#--------------------------------------------------------------------------
def initialize_manashield
#---
self.note.split(/[\r\n]+/).each { |line|
case line
when REGEXP::MANASHIELD::MANASHIELD
@manashield = [$1.to_i, [$2.to_i, 100].min]
end
}
end
end # RPG::BaseItem
#==============================================================================
# ¡ Game_ActionResult
#==============================================================================
class Game_ActionResult
#--------------------------------------------------------------------------
# alias method: make_damage
#--------------------------------------------------------------------------
alias manashield_make_damage make_damage
def make_damage(value, item)
manashield_make_damage(value, item)
#---
if @battler.manashield && @battler.mp > 0
dpm = @battler.manashield[0]
percent = @battler.manashield[1]
shield = (@hp_damage * percent.to_f) / 100.0
shield = shield / dpm.to_f
shield = [shield, @battler.mp.to_f].min
@hp_damage -= (shield * dpm.to_f).to_i
@mp_damage += shield.to_i
end
end
end # Game_ActionResult
#==============================================================================
# ¡ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# new method: manashield
#--------------------------------------------------------------------------
def manashield
mns = nil
states.each { |state|
next unless state.manashield
mns = state.manashield
break
}
return mns ? mns : false
end
end # Game_Battler
You can’t perform that action at this time.