Войти на сайт
×
ТЕМА: Взлом замков
Взлом замков 9 года 9 мес. назад #78955
|
Взлом замков
Информация:Автор: 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 секунд