=begin
Этот скрипт позволяет игроку совершать прыжок на определённое расстояние.
На данный момент прыжок учитывает регионы(любой регион считается непроходимым), край карты и наличие ивентов.
Возможно когда-нибудь сделаю ещё и проверку на разные регионы.
Измените строку: "stat = 0", что бы изменить дальность прыжка. Через $game_actors[1].def - можно привязать её к параметру.
=end
class De_Jumps
def start
@actor = $game_actors[1]
@orig_g = @actor.character_name #автоматически сохраняет обычную графику перса.
@orig_i = @actor.character_index
@a = "Actor4" #Эта строка отвечает за файл графики спрайта в прыжке. 0 - отлкючить.
@b = 1 #Сюда пишется айди спрайта в прыжке, помните, что отчёт начинатся с нуля.
@but = :C #кнопка отвечающая за прыжок, указывается как и в проверке условия у ивента.
@se = "Jump1" #укажите название файла звука, который проигрывается при прыжке. 0 = отключить.
@vol = 70 #укажите громкость звука.
end
def chek
start if @actor == nil
graph if @a != 0
jump if Input.press?(@but) && !$game_player.jumping?
end
def graph
z = [@actor.character_name,@actor.character_index]
if $game_player.jumping?
a = @a
b = @b
end
if $game_player.stopping? || $game_player.moving?
a = @orig_g
b = @orig_i
end
d = [a,b]
if z != d
@actor.set_graphic(a, b, a, 0)
$game_player.refresh
end
end
def jump
Audio.se_play('Audio/SE/' + @se, @vol, 100) if @se != 0
i = 0
x = $game_player.x
y = $game_player.y
stat = 0 #Строка отвечающая за дальность прыжка.
space = [1] #массив заполняется 0 и 1, в зависимости от проходимости тайлов.
case $game_player.direction
when 2
while i != stat
i += 1
if $game_map.event_id_xy(x, y+i) == 0 && y+i < $game_map.height && $game_map.region_id(x, y+i) == 0 #строка вышла длинная, но я не нашёл другого пути проверить сразу на три условия.
space.push 1 #собственно, пишем 1 - если клетка проходима.
else
space.push 0 #и 0, если нет.
end
end
i = space.rindex(1) #присваем i индекс последнего в массиве элемента, со значением "1".
$game_player.jump(0, i)
when 4
while i != -stat #не нашёл варианта сравнить числа по модулю.
i -= 1
if $game_map.event_id_xy(x+i, y) == 0 && x+i >= 0 && $game_map.region_id(x+i, y) == 0
space.push 1
else
space.push 0
end
end
i = -space.rindex(1) #прыгаем в отрицательную сторону же
$game_player.jump(i, 0)
when 6
while i != stat
i += 1
if $game_map.event_id_xy(x+i, y) == 0 && x+i < $game_map.width && $game_map.region_id(x+i, y) == 0
space.push 1
else
space.push 0
end
end
i = space.rindex(1)
$game_player.jump(i, 0)
when 8
while i != -stat
i -= 1
if $game_map.event_id_xy(x, y+i) == 0 && y-i >= 0 && $game_map.region_id(x, y+i) == 0
space.push 1
else
space.push 0
end
end
i = -space.rindex(1)
$game_player.jump(0, i)
end
end
end
$dj = De_Jumps.new
class Scene_Map < Scene_Base
alias re_update_scene update_scene
def update_scene
re_update_scene
update_jump_player unless scene_changing?
end
def update_jump_player
$dj.chek
end
end