Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Взлом замков

Взлом замков 9 года 9 мес. назад #78955

  • strelokhalfer
  • strelokhalfer аватар
  • Вне сайта
  • Архитектор Миров
  • Знатный грамотей
  • Сообщений: 1640
  • Спасибо получено: 1078
  • Даритель Стимкея2 место Сбитая кодировка2 место Организатор конкурсовПрограммист RubyПереводчик
Взлом замков
Информация:
Автор: Neonblack
Версия: 1.12
Тип: Мини игра аля TES или Fallout.

Описание:
Добавляет мини-игру про взлом замков.
Вся необходимая графика есть в демо.
ЧИТАЙТЕ ШАПКУ СКРИПТА!
Там разъяснен принцип работы со скриптом и его настройки.
Код:
###--------------------------------------------------------------------------###
#  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 - [email protected] (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мб.
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: I_LORD, Sypherot, Ren310, Демий, Fiolet79, kam1kazy, peter8031983, Moony White, Фред Канниг
Модераторы: NeKotZima
Время создания страницы: 0.259 секунд