Взлом замков

Программист Ruby Организатор конкурсов Даритель Стимкея 2 место Сбитая кодировка Переводчик 2 место
Больше
11 года 1 мес. назад #78955 от strelokhalfer
strelokhalfer создал тему: Взлом замков
Взлом замков
Информация:
Автор: Neonblack
Версия: 1.12
Тип: Мини игра аля TES или Fallout.

Описание:
Добавляет мини-игру про взлом замков.
Вся необходимая графика есть в демо.
ЧИТАЙТЕ ШАПКУ СКРИПТА!
Там разъяснен принцип работы со скриптом и его настройки.
Код:
Code:
###--------------------------------------------------------------------------### # Lockpick script - Отмычка # # Версия 1.2 # # # # Благодарности: # # Оригинальный код: Neonblack # # Модифицирован: Jesse120 # # Переведён: strelokhalfer для rpg-maker.info # # # # Данный скрипт лицензирован Creative Commons Attribution-NonCommercial # # 3.0 Unported License. Для информации, посетите ссылку ниже: # # http://creativecommons.org/licenses/by-nc/3.0/. # # Разрешения, выходящие за рамки данной лицензии, доступны на: # # http://cphouseset.wordpress.com/liscense-and-terms-of-use/. # # # # Связь: # # NeonBlack - neonblack23@live.com (e-mail) или "neonblack23" в skype # ###--------------------------------------------------------------------------### ###--------------------------------------------------------------------------### # Информация о версиях: # # V.Alpha - 2.11.2012 # # Главный скрипт # # V1.0 - 2.12.2012 # # Отлажен, отполирован, и снабжён инструкцией # # V1.1 - 4.7.2012 # # Тперь поломка отмычки зависит от переключателя # # V1.2 - 4.15.2012 # # Добавлена "Золотая отмычка" # # Модификации Jesse # # Добавлены "сломанные замки" # # Мелкие правки # ###--------------------------------------------------------------------------### ###--------------------------------------------------------------------------### # Совместимость: # # Так как это новая сцена, конфоиктовать ни с чем не должно. # ###--------------------------------------------------------------------------### ###--------------------------------------------------------------------------### # Инструкции: # # Расположите скрипт в "Материалах", но выше main. # # Этот скрипт НЕ "plug and play"(подключил-играй), требует дополнительные # # ресурсы и базовую настройку. Не забудте добавить графику в ваш проект! # # # # Для вызова сцены, используйте скрипт: # # lockpick(diff, dura) # # "diff" - сложность взлома замка. Чем меньше число, тем проще взломать. # # Советуем использовать числа от 2 до 8, так как 1 проще простого, # # а 9 уже практически невозможно взломать. # # "dura" - прочность замка, необязательный параметр. # # Это номер переменной, которая хранит прочность замка. # # Если в переменно хранится число 0, то за прочность возмется # # прочность отмычки. Если её значение меньше -1, замок сломан. # # # # # В зависимости от результата, возвращается одно из трёх чисел: # # 1 - Если игрок взломал замок. # # 2 - Если игрок отменил взлом. # # 3 - Если замок сломался или кончились отмычки. # # # # Для взлома, как ни странно, нужена отмычка, простая или золотая. # ###--------------------------------------------------------------------------### ###--------------------------------------------------------------------------### module CP # Не трожь # module LOCKPICK # Меня тоже # # # ###----- -----### # Главные настройки скрипта. # # # module SETTINGS # Не редактировать # # # # Номер предмета в базе данных, для обычной отмычки. # PICK_ITEM = 22 # Стандарт = 22 # # # # Настройка золотых отмычек. Золотые не ломаются. # # Имеют приоритет над обычными. Можете отключчить, если хотите. # USE_G_PICK = true # Стандарт = true # G_PICK_ITEM = 23 # Стандарт = 23 - номер предмета в базе данных # # # # Номер переменной, в которой хранится результат. # VARIABLE = 1 # Стандарт = 1 # # # # Звук, громкость и его тон, когда взлом начался. # LOCK_SOUND = "Switch2" # Стандарт = "Switch2" # LOCK_VOLUME = 60 # Стандарт = 60 # LOCK_PITCH = 110 # Стандарт = 110 # # # # Звук, громкость и его тон, когда замок разблокирован. # UNLOCK_SOUND = "Key" # Стандарт = "Key" # UNLOCK_VOLUME = 80 # Стандарт = 80 # UNLOCK_PITCH = 100 # Стандарт = 100 # # # # Звук, громкость и его тон, когда замок сломан. # BREAK_SOUND = "Sword2" # Стандарт = "Sword2" # BREAK_VOLUME = 60 # Стандарт = 60 # BREAK_PITCH = 130 # Стандарт = 130 # # # # Номер переключателя, отвечающего за прочность переключателя. # # Прочность - чем выше значение, тем прочнее. Если переключатель включен, # # то отмычки будут ломаться. Если "BREAK_PICKS" установлен на true, # # переключатель будет включен по умолчанию.(ПРОВЕРИТЬ!) # BREAK_PICK_SWITCH = 1 # Стандарт = 1 # BREAK_PICKS = true # Стандарт = true # DURABILITY = 90 # Стандарт = 90 # # # # Окошко, с количеством оставшихся отмычек. # # Можете поменять текст или отключить его. # SHOW_REMAINING = true # Стандарт = true # ITEM_NAME = "Отмычек:" # Стандарт = "Lockpicks:" # # # end # И эту строку не трож. # # # ###----- -----### # Настройки графики. Имя файла и смещение, относительно центра экрана. # # Все кртинки должны лежать в папке "Pictures". # # # module LOCK # Не трож эту линию # # # # Графика замка # X_OFFSET = 0 # Стандарт = 0 # Y_OFFSET = 0 # Стандарт = 0 # GRAPHIC = "Lock" # Стандарт = "Lock" # # # end # Не трож # module PICK # Эти две линии # # # # Графика отмычки. # X_OFFSET = 0 # Стандарт = 0 # Y_OFFSET = 30 # Стандарт = 0 # GRAPHIC = "Pick" # Стандарт = "Pick" # # # end # Не трож # module KEY # эти линиию # # # # Графика ключа. # X_OFFSET = 0 # Стандарт = 0 # Y_OFFSET = -20 # Стандарт = 0 # GRAPHIC = "Key" # Стандарт = "Key" # # # end # Не трож # end # эти три # end # линии # ###--------------------------------------------------------------------------### ###--------------------------------------------------------------------------### # Сам код. Так как вам разрешена модификация, делайте это аккуратно, а то # # поломаете и не будет работать. Модифицируйте на стой страх и риск! # ###--------------------------------------------------------------------------### $imported = {} if $imported == nil $imported["CP_LOCKPICK"] = true ##----- ## Удобный доступ к команде из события. ##----- class Game_Interpreter def lockpick(diffi, door = nil) scene = Scene_Lockpick.new(diffi, door) SceneManager.call_scene(scene) end end module SceneManager def self.call_scene(scene) @stack.push(@scene) @scene = scene end end ##----- ## Окошко с количеством отмычек. ##----- class Window_Picks < Window_Base def initialize super(0, 360, 160, line_height + 32) refresh end def draw_picks(value, x, y, width) pick_name = CP::LOCKPICK::SETTINGS::ITEM_NAME cx = contents.text_size(pick_name).width self.contents.font.color = normal_color self.contents.draw_text(x+cx+2, y, width-cx-2, line_height, value) self.contents.font.color = system_color self.contents.draw_text(x, y, width, line_height, pick_name) end def refresh self.contents.clear itemnum = CP::LOCKPICK::SETTINGS::PICK_ITEM draw_picks($game_party.item_number($data_items[itemnum]), 4, 0, 120) end end ##----- ## Самая мякоть скрипта. ##----- class Scene_Lockpick < Scene_Base ##----- ## Инициализация. Сложность взлома и прочее. ##----- def initialize(diffi, door = nil) @diffi = diffi @door = nil @door = $game_variables[door] unless door == nil @doorvar = door @door = CP::LOCKPICK::SETTINGS::DURABILITY if @door == 0 @key_rotation = 0 @pick_rotation = 90 @zone = rand(90) * 2 @wobble = 0 @durability = CP::LOCKPICK::SETTINGS::DURABILITY @did_turn = false picksnum = CP::LOCKPICK::SETTINGS::PICK_ITEM gpicknum = CP::LOCKPICK::SETTINGS::G_PICK_ITEM usegp = CP::LOCKPICK::SETTINGS::USE_G_PICK @haspicks = true if $game_party.has_item?($data_items[picksnum]) @haspicks = true if $game_party.has_item?($data_items[gpicknum]) and usegp @haspicks = false if @door == -1 end ##----- ## Запуск сцены. Отрисовка. ##----- def start super create_background @picks_window = Window_Picks.new if CP::LOCKPICK::SETTINGS::SHOW_REMAINING @picks_window.z = 4 if CP::LOCKPICK::SETTINGS::SHOW_REMAINING create_lock create_key create_pick if @haspicks key_math end ##----- ## Закрытие сцены. Удаления её с экрана. ##----- def terminate super dispose_background @picks_window.dispose if CP::LOCKPICK::SETTINGS::SHOW_REMAINING @lock_sprite.dispose @key_sprite.dispose @pick_sprite.dispose if @haspicks end #-------------------------------------------------------------------------- # * Создать фон #-------------------------------------------------------------------------- def create_background @background_sprite = Sprite.new @background_sprite.bitmap = SceneManager.background_bitmap @background_sprite.color.set(16, 16, 16, 128) end #-------------------------------------------------------------------------- # * Удалить фон #-------------------------------------------------------------------------- def dispose_background @background_sprite.dispose end ##----- ## Обновление сцены. ##----- def update super update_pick_command update_key_position update_pick_position if @haspicks end ##----- ## Отрисовка замка. ##----- def create_lock @lock_sprite = Sprite.new(@viewport1) @lock_sprite.bitmap = Cache.picture(CP::LOCKPICK::LOCK::GRAPHIC) @lock_sprite.ox = @lock_sprite.width/2 @lock_sprite.oy = @lock_sprite.height/2 @lock_sprite.x = Graphics.width/2 + CP::LOCKPICK::LOCK::X_OFFSET @lock_sprite.y = Graphics.height/2 + CP::LOCKPICK::LOCK::Y_OFFSET @lock_sprite.z = 1 end ##----- ## Отрисовка ключа. ##----- def create_key @key_sprite = Sprite.new(@viewport1) @key_sprite.bitmap = Cache.picture(CP::LOCKPICK::KEY::GRAPHIC) @key_sprite.ox = @key_sprite.width/2 @key_sprite.oy = @key_sprite.height/2 @key_sprite.x = Graphics.width/2 + CP::LOCKPICK::KEY::X_OFFSET @key_sprite.y = Graphics.height/2 + CP::LOCKPICK::KEY::Y_OFFSET @key_sprite.z = 3 @k_rotate = @key_rotation @key_sprite.angle = @k_rotate * -1 end ##----- ## Обновить положение ключа. ##----- def update_key_position return if @key_rotation == @k_rotate @k_rotate = @key_rotation @key_sprite.angle = @k_rotate * -1 end ##----- ## Отрисовка отмычки. ##----- def create_pick @pick_sprite = Sprite.new(@viewport1) @pick_sprite.bitmap = Cache.picture(CP::LOCKPICK::PICK::GRAPHIC) @pick_sprite.ox = @pick_sprite.width/2 @pick_sprite.oy = @pick_sprite.width/2 @pick_sprite.x = Graphics.width/2 + CP::LOCKPICK::PICK::X_OFFSET @pick_sprite.y = Graphics.height/2 + CP::LOCKPICK::PICK::Y_OFFSET @pick_sprite.z = 2 @p_rotate = @pick_rotation @pick_sprite.angle = @p_rotate - 90 end ##----- ## Обновление положения отмычки. ##----- def update_pick_position return if @pick_rotation == @p_rotate and @wobble == @shake @p_rotate = @pick_rotation @shake = @wobble @pick_sprite.angle = @p_rotate - 90 + @shake end ##----- ## Проверка, что метод wait работает. ##----- def update_basic Graphics.update Input.update end ##----- ## Вышеупомянутый метод wait ##----- def wait(dur) for i in 0...dur update_basic end end ##----- ## Если взлом удачен. ##----- def lock_picked variable = CP::LOCKPICK::SETTINGS::VARIABLE $game_variables[@doorvar] = @door unless @door == nil $game_variables[variable] = 1 update_key_position wait(20) picking_end end ##----- ## Если взлом отменен. ##----- def lock_stopped Sound.play_cancel variable = CP::LOCKPICK::SETTINGS::VARIABLE $game_variables[@doorvar] = @door unless @door == nil $game_variables[variable] = 2 picking_end end ##----- ## MЕсли взлом невозможен. ##----- def no_picks variable = CP::LOCKPICK::SETTINGS::VARIABLE $game_variables[@doorvar] = @door unless @door == nil $game_variables[variable] = 3 picking_end end ##----- ## Возврат к карте. ##----- def picking_end SceneManager.return # $scene = Scene_Map.new end ##----- ## Привязка кнопок к действиям. ##----- def update_pick_command if Input.trigger?(Input::B) ##----- Отмена lock_stopped elsif Input.trigger?(Input::C) ##----- Клавиша @did_turn = true if @haspicks lsnd = CP::LOCKPICK::SETTINGS::LOCK_SOUND lvol = CP::LOCKPICK::SETTINGS::LOCK_VOLUME lpit = CP::LOCKPICK::SETTINGS::LOCK_PITCH Audio.se_play("Audio/SE/" + lsnd, lvol, lpit) else no_picks end elsif Input.press?(Input::C) and @did_turn unless @key_rotation > @max_turn - 2 @key_rotation += 2 else pick_dura end if @key_rotation == 90 lsnd = CP::LOCKPICK::SETTINGS::UNLOCK_SOUND lvol = CP::LOCKPICK::SETTINGS::UNLOCK_VOLUME lpit = CP::LOCKPICK::SETTINGS::UNLOCK_PITCH Audio.se_play("Audio/SE/" + lsnd, lvol, lpit) lock_picked end else ##----- Движение отмычки @wobble = 0 unless @wobble == 0 @key_rotation -= 2 unless @key_rotation == 0 @key_rotation = 0 if @key_rotation < 0 if Input.press?(Input::RIGHT) @pick_rotation += 2 unless @pick_rotation == 180 key_math elsif Input.press?(Input::LEFT) @pick_rotation -= 2 unless @pick_rotation == 0 key_math end end end ##----- ## Поворот ##----- def key_math if ((@zone-4)..(@zone+4)) === @pick_rotation @max_turn = 90 else check_spot = @pick_rotation - @zone check_spot *= -1 if check_spot < 0 check_spot -= 4 check_spot *= @diffi @max_turn = 90 - check_spot @max_turn = 0 if @max_turn < 0 end end ##----- ## Проверка прочности. ##----- def pick_dura @wobble = rand(5) - 2 if @door != nil @door -= @diffi snap_pick if @door < 1 and @door > -100 elsif $game_switches[CP::LOCKPICK::SETTINGS::BREAK_PICK_SWITCH] gpicknum = CP::LOCKPICK::SETTINGS::G_PICK_ITEM usegp = CP::LOCKPICK::SETTINGS::USE_G_PICK unless $game_party.has_item?($data_items[gpicknum]) and usegp @durability -= @diffi snap_pick if @durability < 1 end end end ##----- ## Если прочность 0 или меньше ##----- def snap_pick lsnd = CP::LOCKPICK::SETTINGS::BREAK_SOUND lvol = CP::LOCKPICK::SETTINGS::BREAK_VOLUME lpit = CP::LOCKPICK::SETTINGS::BREAK_PITCH Audio.se_play("Audio/SE/" + lsnd, lvol, lpit) for i in 0...5 @pick_sprite.y += 3 update_basic end wait(10) unless @door == nil @door = -1 if @door < 1 return no_picks end change_pick end ##----- ## Удаляет отмычку и готовит новую. ##----- def change_pick itemnum = CP::LOCKPICK::SETTINGS::PICK_ITEM $game_party.lose_item($data_items[itemnum], 1) @picks_window.refresh if CP::LOCKPICK::SETTINGS::SHOW_REMAINING unless $game_party.has_item?($data_items[itemnum]) and @door != -1 no_picks else new_pick end end ##----- ## Новая отмычка, если возможно. ##----- def new_pick @key_rotation = 0 @pick_rotation = 90 @wobble = 0 @durability = CP::LOCKPICK::SETTINGS::DURABILITY @pick_sprite.dispose create_pick update_key_position wait(10) end end class Scene_Title < Scene_Base #-------------------------------------------------------------------------- # * Начать взлом #-------------------------------------------------------------------------- alias cp_lp_start start unless $@ def start cp_lp_start onoroff = CP::LOCKPICK::SETTINGS::BREAK_PICKS $game_switches[CP::LOCKPICK::SETTINGS::BREAK_PICK_SWITCH] = onoroff end end ##----------------------------------------------------------------------------## ## КОНЕЦ СКРИПТА ## ##----------------------------------------------------------------------------##
Скачать:
Демо - Архив 7z, 1.4мб.

"Стрелок, что-то ты неочень похож на свой аватар..."(с)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.094 секунд
Работает на Kunena форум