-
DK
-
-
Вне сайта
-
Светлый дракон
-
-
DKPlugins
- Сообщений: 946
- Спасибо получено: 1129
-
-
|
Можете, пожалуйста, скинуть демку, а то все мои попытки получить такой баг безуспешны.
Небольшое обновление 1.31
Что нового:
Добавлены следующие вызовы скрипта: use_all_energy_bar, dont_use_all_energy_bar, change_use_all_energy_bar(flag),change_all_energy_bar_parameter(type, value). Их действие распространяется на все полосы, а делают они тоже самое, что и use_energy_bar(index), dont_use_energy_bar(index), change_use_energy_bar(index, flag), change_energy_bar_parameter(index, type, value). Подробное описание в шапке скрипта!
Скрипт 1.31:
=begin
###############################################################################
# #
# Восстанавливающаяся полоса #
# #
###############################################################################
Автор: Денис Кузнецов (http://vk.com/id8137201)
Версия: 1.31
Релиз от: 07.04.15
Инструкция:
используйте вызов скрипта, чтобы создать полосу:
start_new_energy_bar(text, max, use_speed, restore_speed, color, inverse = false, button = -1)
text - текст в ковычках ""
max - максимальное значение
use_speed - скорость убывания шкалы
restore_speed - скорость восстановления шкалы
color - цвет полосы (используется цвет текста)
inverse - true/false - инвентирование полосы (увеличение значения вместо уменьшения)
button - символ клавиши, которая отвечает за уменьшение шкалы (когда вы ее жмете),
вы можете не использовать клавишу (просто не указывайте ничего)
Если вы не используете клавишу для изменения шкалы, то вызывайте слудующие скрипты:
use_energy_bar(index) - чтобы уменьшать шкалу (index - индекс полосы)
dont_use_energy_bar(index) - чтобы восстанавливать шкалу
change_use_energy_bar(index, flag) - чтобы явно указать, что делать со шкалой
flag = true/false (уменьшать/восстановливать)
index - индекс полосы
Чтобы изменить сразу все полосы, используйте:
### Добавлено в версии 1.31 от 07.05.15
use_all_energy_bar
dont_use_all_energy_bar
change_use_all_energy_bar(flag)
### Добавлено в версии 1.31 от 07.05.15
если не уверены какой index использовать, вызовите скрипт:
get_energy_bar_index(text, max)
этим вы получите index нужной вам полосы (укажите текст в ковычках и максимальное значение)
Изменение шкалы:
change_energy_bar_parameter(index, type, value)
type - символ, что менять
Возможно - :text, :max, :now, :use_speed, :restore_speed, :color, :button, :inverse
### Добавлено в версии 1.31 от 07.05.15
change_all_energy_bar_parameter(type, value) чтобы поменять параметр для всех полос
### Добавлено в версии 1.31 от 07.05.15
Проверка шкалы:
check_energy_bar(index) - вернет true, если шкала = 0, иначе false
check_value_energy_bar(index) - вернет текущее значение шкалы
Уничтожение:
dispose_one_energy_bar(index) - убрать конкретную полосу
dispose_all_energy_bar - убрать все полосы
=end
module Energy_Bar_Settings
# координата X окна
ENERGY_BAR_WINDOW_X = 0
# координата Y окна
ENERGY_BAR_WINDOW_Y = 0
# Ширина окна
ENERGY_BAR_WINDOW_WIDTH = 200
# Отображать проценты вместо текущего значения ?
USE_ENERGY_BAR_WINDOW_PERCENT = true
# Использовать минимальный стиль отображения полосы ?
USE_MINIMAL_WINDOW_STYLE = true
# Кнопка показа/скрытия окна
# -1, чтобы не использовать
ENERGY_BAR_BUTTON = :Z
end
$ENERGY_BAR_ARRAY = []
$imported = {} if $imported.nil?
$imported["DenKyz_EnergyBar"] = true
class Scene_Map < Scene_Base
attr_reader :create_energy_bar_window
attr_accessor :fix_show_energy_bar_window
alias denis_kyznetsov_energy_bar_scn_map_start start
def start
dispose_energy_bar_window
@create_energy_bar_window = nil
# если false, то окно испаряется, если восстанавливается (при клавише)
# если true, то пользователь явно указывает, что хочет видеть окно на экране
@fix_show_energy_bar_window = false
create_energy_bar if !$ENERGY_BAR_ARRAY.empty? # создаем окно, если есть полосы
denis_kyznetsov_energy_bar_scn_map_start
end
def create_energy_bar
@create_energy_bar_window = Energy_Bar_Window.new
@fix_show_energy_bar_window = true
end
def start_new_energy_bar(text, max, use_speed, restore_speed, color, inverse, button)
$ENERGY_BAR_ARRAY.push({ :text => text, :max => max, :now => inverse ? 0 : max, :use_speed => use_speed, :restore_speed => restore_speed,
:color => color, :button => button, :inverse => inverse, :auto => button.is_a?(Symbol) ? false : true })
if @create_energy_bar_window == nil
create_energy_bar
else
@create_energy_bar_window.change_window_height
end
end
def energy_bar_array_update
$ENERGY_BAR_ARRAY.each do |index|
next if index == nil
if index[:button].is_a?(Symbol) # если у нас символ кнопки
if Input.press?(index[:button]) # если жмем кнопку
energy_bar_animation_update(true)
index[:inverse] == false ? decrease_value_energy_bar(index) : increase_value_energy_bar(index)
else # Input.press?(index[:button])
energy_bar_animation_update(false)
index[:inverse] == false ? increase_value_energy_bar(index) : decrease_value_energy_bar(index)
end
else # if index[:button].is_a?(Symbol)
if index[:auto] # если у нас автоматическое использование
#~ energy_bar_animation_update(true)
index[:inverse] == false ? decrease_value_energy_bar(index) : increase_value_energy_bar(index)
else
#~ energy_bar_animation_update(false)
index[:inverse] == false ? increase_value_energy_bar(index) : decrease_value_energy_bar(index)
end
end # if index[:button].is_a?(Symbol)
end # $ENERGY_BAR_ARRAY.each do |index|
end
def energy_bar_animation_update(mode)
return if @fix_show_energy_bar_window
if mode
@create_energy_bar_window.opacity += 15
@create_energy_bar_window.contents_opacity += 15
@create_energy_bar_window.visible = true
else
@create_energy_bar_window.opacity -= 10
@create_energy_bar_window.contents_opacity -= 10
if @create_energy_bar_window.opacity <= 0
@create_energy_bar_window.opacity = 0
@create_energy_bar_window.contents_opacity = 0
@create_energy_bar_window.visible = false
end
end
end
alias denis_kyznetsov_energy_bar_scn_map_update update
def update
denis_kyznetsov_energy_bar_scn_map_update
if @create_energy_bar_window != nil # если у нас есть окно на экране
if !Energy_Bar_Settings::ENERGY_BAR_BUTTON.is_a?(Integer) # если кнопка используется
if Input.trigger?(Energy_Bar_Settings::ENERGY_BAR_BUTTON) # если нажата кнопка
# явно указываем, что хотим видеть окно на экране (не будет испаряться)
@fix_show_energy_bar_window = !@create_energy_bar_window.visible
@create_energy_bar_window.opacity = 255
@create_energy_bar_window.contents_opacity = 255
@create_energy_bar_window.visible = !@create_energy_bar_window.visible
end
end
energy_bar_array_update
end
end
def dispose_one_energy_bar(index)
$ENERGY_BAR_ARRAY[index] = nil
$ENERGY_BAR_ARRAY = $ENERGY_BAR_ARRAY.compact
return dispose_energy_bar_window if $ENERGY_BAR_ARRAY.empty?
@create_energy_bar_window.change_window_height
end
def dispose_energy_bar_window
$ENERGY_BAR_ARRAY.clear
return if @create_energy_bar_window.nil?
@create_energy_bar_window.dispose
@create_energy_bar_window = nil
end
def increase_value_energy_bar(index)
index[:now] += index[:restore_speed]
index[:now] = index[:max] if index[:now] >= index[:max]
end
def decrease_value_energy_bar(index)
index[:now] -= index[:use_speed]
index[:now] = 0 if index[:now] <= 0
end
end
class Energy_Bar_Window < Window_Base
include Energy_Bar_Settings
def initialize
@optimal_window_height = 72
@optimal_window_height = 48 if USE_MINIMAL_WINDOW_STYLE
super(ENERGY_BAR_WINDOW_X, ENERGY_BAR_WINDOW_Y, ENERGY_BAR_WINDOW_WIDTH, @optimal_window_height)
change_window_height
end
def draw_rect
rect = Rect.new
rect.x = 0
rect.y = 0
rect.width = contents_width
rect.height = 24
rect
end
def change_window_height
# с одной полосой окно занимает 72 при стандартной отрисовке (24 на отступы + 48 на содержимое)
self.height = @optimal_window_height + ($ENERGY_BAR_ARRAY.size - 1) * (@optimal_window_height - 2 * standard_padding)
create_contents
end
def update
super
contents.clear
i = 0
$ENERGY_BAR_ARRAY.each do |index|
next if index == nil
rect = draw_rect # получаем rect для текста
rect.y += i * (@optimal_window_height - 2 * standard_padding) # i-ой полосы
if USE_MINIMAL_WINDOW_STYLE # рисуем текст
draw_text(rect, index[:text])
else
draw_text(rect, index[:text], 1)
end
if USE_MINIMAL_WINDOW_STYLE # рисуем полосу
rect.x = contents_width/2
rect.y += 4
rect.width = index[:now] * (contents_width - rect.x)/index[:max]
else
rect.y += rect.height
rect.width = index[:now] * contents_width/index[:max]
end
rect.height = 16
contents.fill_rect(rect, text_color(index[:color]))
# рисуем значение
rect.y -= 4
rect.width = contents_width
rect.height = 24
text = USE_ENERGY_BAR_WINDOW_PERCENT ? (((index[:now].to_f/index[:max] * 100).to_i).to_s + "%") : (index[:now].to_i.to_s + "/" + index[:max].to_i.to_s)
if USE_MINIMAL_WINDOW_STYLE
rect.x = 0
draw_text(rect, text, 2)
else
draw_text(rect, text, 1)
end
i += 1
end # $ENERGY_BAR_ARRAY.each do |index|
end
end # class Energy_Bar_Window < Window_Base
class Game_Interpreter
def start_new_energy_bar(text, max, use_speed, restore_speed, color, inverse = false, button = -1)
return if !SceneManager.scene.is_a?(Scene_Map)
SceneManager.scene.start_new_energy_bar(text, max, use_speed, restore_speed, color, inverse, button)
end
def get_energy_bar_index(text, max)
return -1 if !SceneManager.scene.is_a?(Scene_Map) || SceneManager.scene.create_energy_bar_window.nil? || $ENERGY_BAR_ARRAY.empty?
index = 0
$ENERGY_BAR_ARRAY.each do |ind|
return index if ind[:text] == text && ind[:max] == max
index += 1
end
return -1
end
def change_energy_bar_parameter(index, type, value)
return if !SceneManager.scene.is_a?(Scene_Map) || SceneManager.scene.create_energy_bar_window.nil? || $ENERGY_BAR_ARRAY.empty? || $ENERGY_BAR_ARRAY[index].nil?
$ENERGY_BAR_ARRAY[index][type] = value
$ENERGY_BAR_ARRAY[index][:auto] = true if type == :button && !value.is_a?(Symbol)
end
def change_all_energy_bar_parameter(type, value)
return if !SceneManager.scene.is_a?(Scene_Map) || SceneManager.scene.create_energy_bar_window.nil? || $ENERGY_BAR_ARRAY.empty?
for index in 0..$ENERGY_BAR_ARRAY.size - 1
change_energy_bar_parameter(index, type, value)
end
end
def use_energy_bar(index)
return if !SceneManager.scene.is_a?(Scene_Map) || SceneManager.scene.create_energy_bar_window.nil? || $ENERGY_BAR_ARRAY.empty? || $ENERGY_BAR_ARRAY[index].nil?
$ENERGY_BAR_ARRAY[index][:auto] = true
end
def use_all_energy_bar
return if !SceneManager.scene.is_a?(Scene_Map) || SceneManager.scene.create_energy_bar_window.nil? || $ENERGY_BAR_ARRAY.empty?
for index in 0..$ENERGY_BAR_ARRAY.size - 1
use_energy_bar(index)
end
end
def dont_use_energy_bar(index)
return if !SceneManager.scene.is_a?(Scene_Map) || SceneManager.scene.create_energy_bar_window.nil? || $ENERGY_BAR_ARRAY.empty? || $ENERGY_BAR_ARRAY[index].nil?
$ENERGY_BAR_ARRAY[index][:auto] = false
end
def dont_use_all_energy_bar
return if !SceneManager.scene.is_a?(Scene_Map) || SceneManager.scene.create_energy_bar_window.nil? || $ENERGY_BAR_ARRAY.empty?
for index in 0..$ENERGY_BAR_ARRAY.size - 1
dont_use_energy_bar(index)
end
end
def change_use_energy_bar(index, flag)
return if !SceneManager.scene.is_a?(Scene_Map) || SceneManager.scene.create_energy_bar_window.nil? || $ENERGY_BAR_ARRAY.empty?
$ENERGY_BAR_ARRAY[index][:auto] = flag
end
def change_use_all_energy_bar(flag)
return if !SceneManager.scene.is_a?(Scene_Map) || SceneManager.scene.create_energy_bar_window.nil? || $ENERGY_BAR_ARRAY.empty?
for index in 0..$ENERGY_BAR_ARRAY.size - 1
change_use_energy_bar(index, flag)
end
end
def check_energy_bar(index)
return -1 if !SceneManager.scene.is_a?(Scene_Map) || SceneManager.scene.create_energy_bar_window.nil? || $ENERGY_BAR_ARRAY.empty? || $ENERGY_BAR_ARRAY[index].nil?
value = $ENERGY_BAR_ARRAY[index][:now].to_i
type = $ENERGY_BAR_ARRAY[index][:inverse] ? $ENERGY_BAR_ARRAY[index][:max].to_i : 0
return value == type ? true : false
end
def check_value_energy_bar(index)
return -1 if !SceneManager.scene.is_a?(Scene_Map) || SceneManager.scene.create_energy_bar_window.nil? || $ENERGY_BAR_ARRAY.empty? || $ENERGY_BAR_ARRAY[index].nil?
return $ENERGY_BAR_ARRAY[index][:now].to_i
end
def dispose_one_energy_bar(index)
return if !SceneManager.scene.is_a?(Scene_Map) || SceneManager.scene.create_energy_bar_window.nil? || $ENERGY_BAR_ARRAY.empty? || $ENERGY_BAR_ARRAY[index].nil?
SceneManager.scene.dispose_one_energy_bar(index)
end
def dispose_all_energy_bar
return if !SceneManager.scene.is_a?(Scene_Map) || SceneManager.scene.create_energy_bar_window.nil?
SceneManager.scene.dispose_energy_bar_window
end
end # class Game_Interpreter
module DataManager
class << self
alias denis_kyznetsov_energy_bar_dt_mngr_make_save_contents make_save_contents
def make_save_contents
contents = denis_kyznetsov_energy_bar_dt_mngr_make_save_contents
contents[:ENERGY_BAR_ARRAY] = $ENERGY_BAR_ARRAY
contents
end
alias denis_kyznetsov_energy_bar_dt_mngr_extract_save_contents extract_save_contents
def extract_save_contents(contents)
denis_kyznetsov_energy_bar_dt_mngr_extract_save_contents(contents)
$ENERGY_BAR_ARRAY = contents[:ENERGY_BAR_ARRAY]
end
end
end # module DataManager
|