#------------------------------------------------------------------------------#
# Only the jump bonus for the party leader and his/her equips are calculated
#------------------------------------------------------------------------------#
# SCRIPT CALL:
# You can change an actor's jump bonus (that was set with the notetag) during
# the game with a script call:
#
# jump_bonus(actor_id,jump_bonus)
#
# EXAMPLE:
# jump_bonus(3,2) # Changes actor 3's jump bonus to 2
#------------------------------------------------------------------------------#
($imported ||= {})["Galvs_Jump_Ability"] = true
module Galv_Jump
#------------------------------------------------------------------------------#
# SCRIPT SETUP OPTIONS
#------------------------------------------------------------------------------#
DISABLE_SWITCH = 41 # Cannot jump when this switch is ON
BUTTON = :X # Button to press to jump. :X is "a" key.
DEFAULT_DISTANCE = 2 # Distance player can jump with no bonuses
SPRINT_BONUS = 1 # Distance increased with a running jump
JUMP_SE = ["Jump1", 80, 120]
MAX_JUMP_BONUS = 3 # The maximum bonus you can get from equips/actors
NO_JUMP_REGIONS = [1,2,3] # Region ID's that the player cannot jump over
#------------------------------------------------------------------------------#
# END SCRIPT SETUP OPTIONS
#------------------------------------------------------------------------------#
end
class RPG::BaseItem
def jump_bonus
if @jump_bonus.nil?
if @note =~ /<jump_bonus: (.*)>/i
@jump_bonus = $1.to_i
else
@jump_bonus = 0
end
end
@jump_bonus
end
end # RPG::BaseItem
class Game_Player < Game_Character
attr_accessor
riority_type
alias galv_jump_player_initialize initialize
def initialize
galv_jump_player_initialize
@jump_equip_bonus = 0
end
alias galv_jump_player_refresh refresh
def refresh
get_jump_equip_bonus
galv_jump_player_refresh
end
def get_jump_equip_bonus
bonus = 0 + $game_party.leader.jump_bonus
$game_party.leader.equips.each { |eq| bonus += eq.jump_bonus if !eq.nil?}
@jump_equip_bonus = [bonus,Galv_Jump::MAX_JUMP_BONUS].min
end
alias galv_jump_move_by_input move_by_input
def move_by_input
return if jumping?
@priority_type = 1 if !jumping?
galv_jump_move_by_input
if !$game_switches[Galv_Jump:
ISABLE_SWITCH] && Input.trigger?(Galv_Jump::BUTTON)
do_jump if !$game_map.interpreter.running? && !jumping? && normal_walk?
end
end
def do_jump
get_bonuses
@distance = Galv_Jump:
EFAULT_DISTANCE + @jump_bonus
check_region
check_distance
if @can_jump
RPG::SE.new(Galv_Jump::JUMP_SE[0], Galv_Jump::JUMP_SE[1], Galv_Jump::JUMP_SE[2]).play
jump(@jump_x, @jump_y)
@followers.each { |f| f.jump(@x - f.x, @y - f.y) }
end
end
def get_bonuses
@jump_bonus = 0 + @jump_equip_bonus
@jump_bonus += Galv_Jump::SPRINT_BONUS if dash? && moving?
end
def check_region
@max_x = 0
@max_y = 0
case @direction
when 2
@max_y = @distance
(@distance+1).times { |i| return @max_y = i if stopper?(@x, @y+i+1) }
when 4
@max_x = -@distance
(@distance+1).times { |i| return @max_x = -i if stopper?(@x-i-1, @y) }
when 6
@max_x = @distance
(@distance+1).times { |i| return @max_x = i if stopper?(@x+i+1, @y) }
when 8
@max_y = -@distance
(@distance+1).times { |i| return @max_y = -i if stopper?(@x, @y-i-1) }
end
end
def stopper?(x,y)
Galv_Jump::NO_JUMP_REGIONS.include?($game_map.regi on_id(x,y)) ||
!$game_map.stopper_event?(x,y)
end
def canpass?(x,y)
map_passable?(x, y, @direction) &&
$game_map.blocking_event?(x,y) ||
Galv_Jump::NO_JUMP_REGIONS.include?($game_map.regi on_id(x,y))
end
def check_distance
@jump_x = 0
@jump_y = 0
ch = []
@can_jump = true
case @direction
when 2
@jump_y = @distance
@distance.times { |i| ch << @jump_y - i if canpass?(@x, @y + @jump_y - i) }
ch.delete_if {|x| x > @max_y }
@jump_y = ch.max if !ch.empty?
when 4
@jump_x = -@distance
@distance.times { |i| ch << @jump_x + i if canpass?(@x + @jump_x + i, @y) }
ch.delete_if {|x| x < @max_x }
@jump_x = ch.min if !ch.empty?
when 6
@jump_x = @distance
@distance.times { |i| ch << @jump_x - i if canpass?(@x + @jump_x - i, @y) }
ch.delete_if {|x| x > @max_x }
@jump_x = ch.max if !ch.empty?
when 8
@jump_y = -@distance
@distance.times { |i| ch << @jump_y + i if canpass?(@x, @y + @jump_y + i) }
ch.delete_if {|x| x < @max_y }
@jump_y = ch.min if !ch.empty?
end
if ch.empty?
@jump_y = 0
@jump_x = 0
@can_jump = false
end
end
def jump(x_plus, y_plus)
@priority_type = 1.5
super
end
end # Game_Player < Game_Character
class Game_Map
def blocking_event?(x,y)
events_xy(x,y).each { |e| return false if e.priority_type == 1 }
return true
end
def stopper_event?(x,y)
events_xy(x,y).each { |e|
next if e.list.nil?
return false if e.list[0].code == 108 && e.list[0].parameters[0] == "<block>"
}
return true
end
end # Game_Map
class Game_Actor < Game_Battler
attr_accessor :jump_bonus
alias galv_jump_actor_initialize initialize
def initialize(actor_id)
galv_jump_actor_initialize(actor_id)
@jump_bonus = $data_actors[actor_id].jump_bonus
end
end # Game_Actor < Game_Battler
class Scene_Menu < Scene_MenuBase
def return_scene
$game_player.refresh
super
end
end # Scene_Menu < Scene_MenuBase
class Game_Interpreter
def jump_bonus(actor,bonus)
$game_actors[actor].jump_bonus = bonus
$game_player.refresh
end
end # Game_Interpreter
Социальные закладки