ГлавнаяФорумRPG MakerСкрипты/ПлагиныRPG Maker VX ACEУлучшающие или добавляющее новое скриптыВосстанавливающаяся полоса v 1.43
Войти на сайт
×
ТЕМА: Восстанавливающаяся полоса v 1.43
Восстанавливающаяся полоса 9 года 7 мес. назад #79827
|
Ты просто сделай return, если клавиша у полосы есть.
|
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: NettySvit
|
Восстанавливающаяся полоса 9 года 7 мес. назад #79828
|
strelokhalfer пишет:
dont_use_energy_bar(0) Ставил по началу без кнопки, а потом убрать забыл. Зачем всунул? |
Администратор запретил публиковать записи гостям.
|
Восстанавливающаяся полоса 9 года 7 мес. назад #79829
|
Там все равно никакого влияния не будет от этих use и dont_use
|
Администратор запретил публиковать записи гостям.
|
Восстанавливающаяся полоса 9 года 7 мес. назад #79830
|
Ну, в прошлыйх версиях как оказалось было)
|
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: NettySvit
|
Восстанавливающаяся полоса 9 года 7 мес. назад #79831
|
Не, не было, я там другое фиксил)
|
Администратор запретил публиковать записи гостям.
|
Восстанавливающаяся полоса 9 года 7 мес. назад #79871
|
И снова я тут! @^~^@ Вылез новый баг. Создаём полоску, любуемся ей и радуемся, а потом открываем меню и закрываем его. Упс, полоска убежала от нас! ХД
|
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DK
|
Восстанавливающаяся полоса 9 года 7 мес. назад #79873
|
Да, действительно. Баг версии 1.31.
Вот фикс: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] =begin
###############################################################################
# #
# Восстанавливающаяся полоса #
# #
###############################################################################
Автор: Денис Кузнецов (http://vk.com/id8137201)
Версия: 1.32
Релиз от: 09.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
@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
class Scene_Title < Scene_Base
alias denis_kyznetsov_energy_bar_scn_title_start start
def start
denis_kyznetsov_energy_bar_scn_title_start
$ENERGY_BAR_ARRAY.clear
end
end # class Scene_Title < Scene_Base
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 |
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Демий
|
Восстанавливающаяся полоса 9 года 7 мес. назад #79884
|
Новая версия: 1.4 beta
Внимание! Возможны баги и непонятное описание в шапке Ставьте, чтобы протестировать/побаловаться Что нового: energy_bar_inversed?(index) по индексу полосы вернет true (если полоса inverse), иначе false; get_energy_bar_parameter(index, type) вернет по индексу и символу параметра текущее значения параметра; set_energy_bar_value(index, value) - установит по индексу конкретное значение (value) для полосы; set_all_energy_bar_value(value) - установит всем полосам значение; increase_energy_bar_value(index, value) увеличить полосе значение; increase_all_energy_bar_value(value) увеличить всем полосам значение; decrease_energy_bar_value(index, value) уменьшить значение полосе; decrease_all_energy_bar_value(value) уменьшить значения всем полосам; check_energy_bar(index, inverse) если inverse true, то вернет равенство полосы максимальному значению, если inverse false, то вернет равенство 0; get_energy_bar_value(index) - узнать текущее значение полосы Более подробное описание будет позже, вместе с демкой, когда выйдет из версии beta. Скрипт: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] =begin
###############################################################################
# #
# Восстанавливающаяся полоса #
# #
###############################################################################
Автор: Денис Кузнецов (http://vk.com/id8137201)
Версия: 1.4
Релиз от: 10.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
# Отображать проценты вместо текущего значения ? true - да, false - нет
USE_ENERGY_BAR_WINDOW_PERCENT = true
# Использовать минимальный стиль отображения полосы ? true - да, false - нет
USE_MINIMAL_WINDOW_STYLE = true
# Кнопка показа/скрытия окна
# -1, чтобы не использовать
ENERGY_BAR_BUTTON = :Z
ENERGY_BAR_EVENTS = [
# тип (переменная), номер, что делать(увеличить, уменьшить, равно), значение, что делать после(ничего, удалить полосу, увеличить значение полосы, общее событие ?), на сколько увеличить полосу или номер события
[1, 1, 3, 10, 2, 50], # Переменная
# тип (переключатель), номер, значение (да, нет, инвертировать), что делать после(ничего, удалить полосу, увеличить значение полосы, общее событие ?), на сколько увеличить полосу или номер события
[2, 1, 1, 1], # Переключатель
# тип (общее событие), номер, что делать после(ничего, удалить полосу, увеличить значение полосы, общее событие ?), на сколько увеличить полосу или номер события
[3, 1, 1] # Общее событие
]
end
$ENERGY_BAR_ARRAY = []
$imported = {} if $imported.nil?
$imported["DenKyz_EnergyBar"] = true
class Scene_Map < Scene_Base
include Energy_Bar_Settings
attr_reader :create_energy_bar_window
attr_accessor :fix_show_energy_bar_window
alias denis_kyznetsov_energy_bar_scn_map_start start
def start
@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, event, button)
$ENERGY_BAR_ARRAY.push({ :text => text, :max => max, :now => inverse ? 0 : max, :use_speed => use_speed, :restore_speed => restore_speed,
:color => color, :inverse => inverse, :event => (event >= 0 && event < ENERGY_BAR_EVENTS.size) ? ENERGY_BAR_EVENTS[event] : [],
:event_ok => :event == [] ? false : true, :button => button, :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 ? update_decrease_value_energy_bar(index) : update_increase_value_energy_bar(index)
else # Input.press?(index[:button])
energy_bar_animation_update(false)
index[:inverse] == false ? update_increase_value_energy_bar(index) : update_decrease_value_energy_bar(index)
end
else # if index[:button].is_a?(Symbol)
if index[:auto] # если у нас автоматическое использование
index[:inverse] == false ? update_decrease_value_energy_bar(index) : update_increase_value_energy_bar(index)
else
index[:inverse] == false ? update_increase_value_energy_bar(index) : update_decrease_value_energy_bar(index)
end
end # if index[:button].is_a?(Symbol)
check_energy_bar_event_ok(index)
check_energy_bar_event(index)
end # $ENERGY_BAR_ARRAY.each do |index|
end
def check_energy_bar_event_ok(index)
return index[:event_ok] = false if index[:event] == []
if index[:inverse]
index[:event_ok] = true if (index[:now].to_f/index[:max] * 100).to_i < 99
else
index[:event_ok] = true if (index[:now].to_f/index[:max] * 100).to_i > 0
end
end
def check_energy_bar_event(index)
return if index[:event] == []
return if !index[:event_ok]
if index[:inverse]
return if index[:now].to_i != index[:max].to_i
else
return if index[:now].to_i != 0
end
event_list = index[:event]
process_value = 0 # номер переменной, с которой начинается обработка после
case event_list[0] # переменная, переключатель, общее событие
when 1 # переменная
case event_list[2]
when 1 # увеличить переменную
$game_variables[event_list[1]] += event_list[3]
when 2 # уменьшить переменную
$game_variables[event_list[1]] -= event_list[3]
when 3 # установить переменную
$game_variables[event_list[1]] = event_list[3]
end
process_value = 4
when 2
case event_list[2]
when 1
$game_switches[event_list[1]] = !$game_switches[event_list[1]]
when 2
$game_switches[event_list[1]] = true
when 3
$game_switches[event_list[1]] = false
end
process_value = 3
when 3
$game_temp.reserve_common_event(event_list[1])
process_value = 2
end
case event_list[process_value] # обработка после
when 1 # удалить полосу
return dispose_one_energy_bar(find_id_from_index(index))
when 2 # увеличить полосу
index[:inverse] == false ? increase_energy_bar_value(index, event_list[process_value + 1]) : decrease_energy_bar_value(index, event_list[process_value + 1])
when 3 # общее событие
$game_temp.reserve_common_event(event_list[process_value + 1])
end
index[:event_ok] = false
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 check_energy_bar_value_range(index)
index[:now] = 0 if index[:now].to_i < 0
index[:now] = index[:max] if index[:now].to_i > index[:max].to_i
end
def set_energy_bar_value(index, value)
index[:now] = value
check_energy_bar_value_range(index)
end
def increase_energy_bar_value(index, value)
index[:now] += value
check_energy_bar_value_range(index)
end
def decrease_energy_bar_value(index, value)
index[:now] -= value
check_energy_bar_value_range(index)
end
def update_increase_value_energy_bar(index)
increase_energy_bar_value(index, index[:restore_speed])
end
def update_decrease_value_energy_bar(index)
decrease_energy_bar_value(index, index[:use_speed])
end
def find_id_from_index(index)
return if index == nil
for i in 0..$ENERGY_BAR_ARRAY.size - 1
return i if index[:text] == $ENERGY_BAR_ARRAY[i][:text] && index[:max].to_i == $ENERGY_BAR_ARRAY[i][:max].to_i && index[:now].to_i == $ENERGY_BAR_ARRAY[i][:now].to_i
end
return -1
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
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, event = -1, button = -1)
return if !SceneManager.scene.is_a?(Scene_Map)
SceneManager.scene.start_new_energy_bar(text.to_s, max, use_speed, restore_speed, color, inverse, event, 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?
return if !type.is_a?(Symbol)
$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 energy_bar_inversed?(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][:inverse]
end
def get_energy_bar_parameter(index, type)
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 -1 if !type.is_a?(Symbol)
return $ENERGY_BAR_ARRAY[index][type]
end
def set_energy_bar_value(index, 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?
return SceneManager.scene.set_energy_bar_value(index, 0) if value < 0
SceneManager.scene.set_energy_bar_value(index, value)
end
def set_all_energy_bar_value(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
set_energy_bar_value(index, flag)
end
end
def increase_energy_bar_value(index, 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?
SceneManager.scene.increase_energy_bar_value(index, value)
end
def increase_all_energy_bar_value(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
increase_energy_bar_value(index, value)
end
end
def decrease_energy_bar_value(index, 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?
SceneManager.scene.deacrease_energy_bar_value(index, value)
end
def decrease_all_energy_bar_value(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
decrease_energy_bae_value(index, value)
end
end
def check_energy_bar(index, inverse = false)
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 = inverse ? $ENERGY_BAR_ARRAY[index][:max].to_i : 0
return value == type
end
def get_energy_bar_value(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
class Scene_Title < Scene_Base
alias denis_kyznetsov_energy_bar_scn_title_start start
def start
denis_kyznetsov_energy_bar_scn_title_start
$ENERGY_BAR_ARRAY.clear
end
end # class Scene_Title < Scene_Base
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 |
Последнее редактирование: 9 года 7 мес. назад от DK.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Демий
|
Восстанавливающаяся полоса 9 года 7 мес. назад #79886
|
Я бы все проверки объединил бы в одну комманду, с приемом параметра что проверять.
|
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Администратор запретил публиковать записи гостям.
|
Восстанавливающаяся полоса 9 года 7 мес. назад #79889
|
Стрелок, ты забываешь, что это ты - скриптёр. Большинство не поймет даже того, что ты сказал ^_^ Пусть останется как есть ^_^
|
Администратор запретил публиковать записи гостям.
|
Восстанавливающаяся полоса 9 года 7 мес. назад #79906
|
Новая версия: 1.41
Что нового: В шапке скрипта обновлена вся инструкция! Пытался максимально просто объяснить вещи, которые мне трудно объяснять Демо: Демо 1.41 Скрипт: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] =begin
###############################################################################
# #
# Восстанавливающаяся полоса #
# #
###############################################################################
Автор: Денис Кузнецов (http://vk.com/id8137201)
Версия: 1.41
Релиз от: 10.04.15
Инструкция:
используйте вызов скрипта, чтобы создать полосу:
start_new_energy_bar(text, max, use_speed, restore_speed, color, inverse, event, button)
text - текст в ковычках ""
max - максимальное значение
use_speed - скорость убывания шкалы
restore_speed - скорость восстановления шкалы
color - цвет полосы (используется цвет текста)
inverse - true/false - инвентирование полосы (увеличение значения вместо уменьшения)
event - номер обработки события (см. ниже) # Добавлено в версии 1.41 от 10.04.15
button - символ клавиши, которая отвечает за уменьшение шкалы (когда вы ее жмете),
вы можете не использовать клавишу (просто не указывайте ничего)
Если вы не используете клавишу для изменения шкалы, то вызывайте слудующие скрипты:
use_energy_bar(index) - чтобы уменьшать шкалу (index - индекс полосы)
dont_use_energy_bar(index) - чтобы восстанавливать шкалу
change_use_energy_bar(index, flag) - чтобы явно указать, что делать со шкалой
flag = true/false (уменьшать/восстанавливать)
index - индекс полосы (все индексы начинаются с 0)
Чтобы изменить сразу все полосы, используйте:
### Добавлено в версии 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, :now, :max, :use_speed, :restore_speed, :color, :inverse, :event, :button
### Добавлено в версии 1.31 от 07.05.15
change_all_energy_bar_parameter(type, value) чтобы поменять параметр для всех полос
### Добавлено в версии 1.31 от 07.05.15
### Добавлено в версии 1.41 от 10.05.15
get_energy_bar_parameter(index, type) по индексу и символу (type см. выше) вернет
значение параметра. Вернет -1, если возникла какая-то ошибка
set_energy_bar_value(index, value) установит значение (value) для полосы
set_all_energy_bar_value(value) устновит значение всем полосам
increase_energy_bar_value(index, value) увеличит полосу по индексу на value
increase_all_energy_bar_value(value) увеличит все полосы на value
decrease_energy_bar_value(index, value) уменьшит полосу по индексу на value
decrease_all_energy_bar_value(value) уменьшит все полосы на value
### Добавлено в версии 1.41 от 10.05.15
Проверка шкалы:
check_energy_bar(index, inverse) если inverse указать false,
то вернет true, когда полоса = 0, иначе false
если inverse будет true, то вернет true, когда полоса = максимальному значению,
иначе false
### Добавлено в версии 1.41 от 10.05.15
energy_bar_inversed?(index) провека полосы на inverse. Вернет true (да), если
полоса inverse, иначе false (нет)
get_energy_bar_value(index) узнать текущее значение полосы по индексу
### Добавлено в версии 1.41 от 10.05.15
Уничтожение:
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
# Останавливать полосы, если на экране сообщение
ENERGY_BAR_MESSAGE_STOP = true
# Скорость изменения полос (от 2 до 30), -1, чтобы не использовать
ENERGY_BAR_SPEED = 10
# Отображать проценты вместо текущего значения ? true - да, false - нет
USE_ENERGY_BAR_WINDOW_PERCENT = true
# Использовать минимальный стиль отображения полосы ? true - да, false - нет
USE_MINIMAL_WINDOW_STYLE = true
# Кнопка показа/скрытия окна
# -1, чтобы не использовать
ENERGY_BAR_BUTTON = :Z
# Номера событий (индексы при создания полосы начинаются с 0 (event = 0, 1, 2, 3...)
ENERGY_BAR_EVENTS = [
# тип (переменная), номер, действие, значение, действие после, номер после
[1, 1, 3, 10, 2, 50], # Приравняет третью переменную к 10, после увеличит значение полосы на 50
# тип (переключатель), номер, значение, действие после, номер после
[2, 1, 1, 1], # Вкл. первый переключатель и удалим полосу
# тип (общее событие), номер, действие после, номер после
[3, 2, -1] # Вызовем второе общее событие и больше ничего не сделаем
]
# Инструкция:
# если хотите использовать переменную
# [тип, номер, действие, значение, действие после, номер после]
# если хотите поменять переключатель
# [тип, номер, значение, действие после, номер после]
# если хотите вызвать общее событие
# [тип, номер, действие после, номер после]
# тип: 1 - переменная, 2 - переключатель, 3 - событие
# номер: номер переменной, переключателя, события
# значение: для переменной (1 - увеличить, 2 - уменьшить, 3 - равно)
# для переключателя (1 - вкл, 2 - выкл, 3 - переключить)
# действие после: 1 - удалить полосу, 2 - увеличить значение полосы, 3 - общее событие
# номер после: если увеличиваете значение полосы, то значение увеличения,
# если вызываете общее событие, то номер события
end
$ENERGY_BAR_ARRAY = []
$imported = {} if $imported.nil?
$imported["DenKyz_EnergyBar"] = true
class Scene_Map < Scene_Base
include Energy_Bar_Settings
attr_reader :create_energy_bar_window
attr_accessor :fix_show_energy_bar_window
alias denis_kyznetsov_energy_bar_scn_map_start start
def start
@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, event, button)
$ENERGY_BAR_ARRAY.push({ :text => text, :max => max, :now => inverse ? 0 : max, :use_speed => use_speed, :restore_speed => restore_speed,
:color => color, :inverse => inverse, :event => (event >= 0 && event < ENERGY_BAR_EVENTS.size) ? ENERGY_BAR_EVENTS[event] : [],
:event_ok => :event == [] ? false : true, :button => button, :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
return if $game_message.busy? && ENERGY_BAR_MESSAGE_STOP
if ENERGY_BAR_SPEED != -1
return if Graphics.frame_count % ENERGY_BAR_SPEED == 0
end
$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 ? update_decrease_value_energy_bar(index) : update_increase_value_energy_bar(index)
else # Input.press?(index[:button])
energy_bar_animation_update(false)
index[:inverse] == false ? update_increase_value_energy_bar(index) : update_decrease_value_energy_bar(index)
end
else # if index[:button].is_a?(Symbol)
if index[:auto] # если у нас автоматическое использование
index[:inverse] == false ? update_decrease_value_energy_bar(index) : update_increase_value_energy_bar(index)
else
index[:inverse] == false ? update_increase_value_energy_bar(index) : update_decrease_value_energy_bar(index)
end
end # if index[:button].is_a?(Symbol)
check_energy_bar_event_ok(index)
check_energy_bar_event(index)
end # $ENERGY_BAR_ARRAY.each do |index|
end
def check_energy_bar_event_ok(index)
return if index[:event] == []
if index[:inverse]
index[:event_ok] = true if (index[:now].to_f/index[:max] * 100).to_i < 99
else
index[:event_ok] = true if (index[:now].to_f/index[:max] * 100).to_i > 0
end
end
def check_energy_bar_event(index)
return if index[:event] == []
return if !index[:event_ok]
if index[:inverse]
return if index[:now].to_i != index[:max].to_i
else
return if index[:now].to_i != 0
end
event_list = index[:event]
process_value = 0 # номер переменной, с которой начинается обработка после
case event_list[0] # переменная, переключатель, общее событие
when 1 # переменная
case event_list[2]
when 1 # увеличить переменную
$game_variables[event_list[1]] += event_list[3]
when 2 # уменьшить переменную
$game_variables[event_list[1]] -= event_list[3]
when 3 # установить переменную
$game_variables[event_list[1]] = event_list[3]
end
process_value = 4
when 2 # переключатель
case event_list[2]
when 1
$game_switches[event_list[1]] = true
when 2
$game_switches[event_list[1]] = false
when 3
$game_switches[event_list[1]] = !$game_switches[event_list[1]]
end
process_value = 3
when 3 # общее событие
$game_temp.reserve_common_event(event_list[1])
process_value = 2
end
case event_list[process_value] # обработка после
when 1 # удалить полосу
return dispose_one_energy_bar(find_id_from_index(index))
when 2 # увеличить полосу
index[:inverse] == false ? increase_energy_bar_value(index, event_list[process_value + 1]) : decrease_energy_bar_value(index, event_list[process_value + 1])
when 3 # общее событие
$game_temp.reserve_common_event(event_list[process_value + 1])
end
index[:event_ok] = false
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 check_energy_bar_value_range(index)
index = $ENERGY_BAR_ARRAY[index] if index.is_a?(Integer)
index[:now] = 0 if index[:now] < 0
index[:now] = index[:max].to_i if index[:now] > index[:max]
end
def set_energy_bar_value(index, value)
index = $ENERGY_BAR_ARRAY[index] if index.is_a?(Integer)
index[:now] = value
check_energy_bar_value_range(index)
end
def increase_energy_bar_value(index, value)
index = $ENERGY_BAR_ARRAY[index] if index.is_a?(Integer)
index[:now] += value
check_energy_bar_value_range(index)
end
def decrease_energy_bar_value(index, value)
index = $ENERGY_BAR_ARRAY[index] if index.is_a?(Integer)
index[:now] -= value
check_energy_bar_value_range(index)
end
def update_increase_value_energy_bar(index)
increase_energy_bar_value(index, index[:restore_speed])
end
def update_decrease_value_energy_bar(index)
decrease_energy_bar_value(index, index[:use_speed])
end
def find_id_from_index(index)
return if index == nil
for i in 0..$ENERGY_BAR_ARRAY.size - 1
return i if index[:text] == $ENERGY_BAR_ARRAY[i][:text] && index[:max].to_i == $ENERGY_BAR_ARRAY[i][:max].to_i && index[:now].to_i == $ENERGY_BAR_ARRAY[i][:now].to_i
end
return -1
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
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)
self.height = Graphics.height if self.height > Graphics.height
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, event = -1, button = -1)
return if !SceneManager.scene.is_a?(Scene_Map)
SceneManager.scene.start_new_energy_bar(text.to_s, max, use_speed, restore_speed, color, inverse, event, 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].to_i == 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?
return if !type.is_a?(Symbol)
$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 energy_bar_inversed?(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][:inverse]
end
def get_energy_bar_parameter(index, type)
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 -1 if !type.is_a?(Symbol)
return $ENERGY_BAR_ARRAY[index][type]
end
def set_energy_bar_value(index, 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?
return SceneManager.scene.set_energy_bar_value(index, 0) if value < 0
SceneManager.scene.set_energy_bar_value(index, value)
end
def set_all_energy_bar_value(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
set_energy_bar_value(index, flag)
end
end
def increase_energy_bar_value(index, 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?
SceneManager.scene.increase_energy_bar_value(index, value)
end
def increase_all_energy_bar_value(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
increase_energy_bar_value(index, value)
end
end
def decrease_energy_bar_value(index, 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?
SceneManager.scene.deacrease_energy_bar_value(index, value)
end
def decrease_all_energy_bar_value(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
decrease_energy_bae_value(index, value)
end
end
def check_energy_bar(index, inverse = false)
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 = inverse ? $ENERGY_BAR_ARRAY[index][:max].to_i : 0
return value == type
end
def get_energy_bar_value(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 energy_bar_exist?(text, max)
return -1 if !SceneManager.scene.is_a?(Scene_Map) || SceneManager.scene.create_energy_bar_window.nil? || $ENERGY_BAR_ARRAY.empty?
return get_energy_bar_index(text, max) != -1 ? true : false
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
class Scene_Title < Scene_Base
alias denis_kyznetsov_energy_bar_scn_title_start start
def start
denis_kyznetsov_energy_bar_scn_title_start
$ENERGY_BAR_ARRAY.clear
end
end # class Scene_Title < Scene_Base
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 |
Последнее редактирование: 9 года 7 мес. назад от DK.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Демий
|
Восстанавливающаяся полоса 9 года 7 мес. назад #80012
|
Версия 1.42
Что нового: Адаптированно для Глобальных настроек Аддон Скрипт: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] =begin
###############################################################################
# #
# Восстанавливающаяся полоса #
# #
###############################################################################
Автор: Денис Кузнецов (http://vk.com/id8137201)
Версия: 1.42
Релиз от: 13.04.15
Инструкция:
используйте вызов скрипта, чтобы создать полосу:
start_new_energy_bar(text, max, use_speed, restore_speed, color, inverse, event, button)
text - текст в ковычках ""
max - максимальное значение
use_speed - скорость убывания шкалы
restore_speed - скорость восстановления шкалы
color - цвет полосы (используется цвет текста)
inverse - true/false - инвентирование полосы (увеличение значения вместо уменьшения)
event - номер обработки события (см. ниже) # Добавлено в версии 1.41 от 10.04.15
button - символ клавиши, которая отвечает за уменьшение шкалы (когда вы ее жмете),
вы можете не использовать клавишу (просто не указывайте ничего)
Если вы не используете клавишу для изменения шкалы, то вызывайте слудующие скрипты:
use_energy_bar(index) - чтобы уменьшать шкалу (index - индекс полосы)
dont_use_energy_bar(index) - чтобы восстанавливать шкалу
change_use_energy_bar(index, flag) - чтобы явно указать, что делать со шкалой
flag = true/false (уменьшать/восстанавливать)
index - индекс полосы (все индексы начинаются с 0)
Чтобы изменить сразу все полосы, используйте:
### Добавлено в версии 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, :now, :max, :use_speed, :restore_speed, :color, :inverse, :event, :button
### Добавлено в версии 1.31 от 07.05.15
change_all_energy_bar_parameter(type, value) чтобы поменять параметр для всех полос
### Добавлено в версии 1.31 от 07.05.15
### Добавлено в версии 1.41 от 10.05.15
get_energy_bar_parameter(index, type) по индексу и символу (type см. выше) вернет
значение параметра. Вернет -1, если возникла какая-то ошибка
set_energy_bar_value(index, value) установит значение (value) для полосы
set_all_energy_bar_value(value) устновит значение всем полосам
increase_energy_bar_value(index, value) увеличит полосу по индексу на value
increase_all_energy_bar_value(value) увеличит все полосы на value
decrease_energy_bar_value(index, value) уменьшит полосу по индексу на value
decrease_all_energy_bar_value(value) уменьшит все полосы на value
### Добавлено в версии 1.41 от 10.05.15
Проверка шкалы:
check_energy_bar(index, inverse) если inverse указать false,
то вернет true, когда полоса = 0, иначе false
если inverse будет true, то вернет true, когда полоса = максимальному значению,
иначе false
### Добавлено в версии 1.41 от 10.05.15
energy_bar_inversed?(index) провека полосы на inverse. Вернет true (да), если
полоса inverse, иначе false (нет)
get_energy_bar_value(index) узнать текущее значение полосы по индексу
### Добавлено в версии 1.41 от 10.05.15
Уничтожение:
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
# Останавливать полосы, если на экране сообщение
$ENERGY_BAR_MESSAGE_STOP = true
# Скорость изменения полос (от 2 до 30), -1, чтобы не использовать
$ENERGY_BAR_SPEED = 10
# Отображать проценты вместо текущего значения ? true - да, false - нет
$USE_ENERGY_BAR_WINDOW_PERCENT = true
# Использовать минимальный стиль отображения полосы ? true - да, false - нет
$USE_MINIMAL_ENERGY_BAR_STYLE = true
# Кнопка показа/скрытия окна
# -1, чтобы не использовать
ENERGY_BAR_BUTTON = :Z
# Номера событий (индексы при создания полосы начинаются с 0 (event = 0, 1, 2, 3...)
ENERGY_BAR_EVENTS = [
# тип (переменная), номер, действие, значение, действие после, номер после
[1, 1, 3, 10, 2, 50], # Приравняет третью переменную к 10, после увеличит значение полосы на 50
# тип (переключатель), номер, значение, действие после, номер после
[2, 1, 1, 1], # Вкл. первый переключатель и удалим полосу
# тип (общее событие), номер, действие после, номер после
[3, 2, -1] # Вызовем второе общее событие и больше ничего не сделаем
]
# Инструкция:
# если хотите использовать переменную
# [тип, номер, действие, значение, действие после, номер после]
# если хотите поменять переключатель
# [тип, номер, значение, действие после, номер после]
# если хотите вызвать общее событие
# [тип, номер, действие после, номер после]
# тип: 1 - переменная, 2 - переключатель, 3 - событие
# номер: номер переменной, переключателя, события
# значение: для переменной (1 - увеличить, 2 - уменьшить, 3 - равно)
# для переключателя (1 - вкл, 2 - выкл, 3 - переключить)
# действие после: 1 - удалить полосу, 2 - увеличить значение полосы, 3 - общее событие
# номер после: если увеличиваете значение полосы, то значение увеличения,
# если вызываете общее событие, то номер события
end
$ENERGY_BAR_ARRAY = []
$imported = {} if $imported.nil?
$imported["DenKyz_EnergyBar"] = true
class Scene_Map < Scene_Base
include Energy_Bar_Settings
attr_reader :create_energy_bar_window
attr_accessor :fix_show_energy_bar_window
alias denis_kyznetsov_energy_bar_scn_map_start start
def start
@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
#~ binding.bug
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, event, button)
$ENERGY_BAR_ARRAY.push({ :text => text, :max => max, :now => inverse ? 0 : max, :use_speed => use_speed, :restore_speed => restore_speed,
:color => color, :inverse => inverse, :event => (event >= 0 && event < ENERGY_BAR_EVENTS.size) ? ENERGY_BAR_EVENTS[event] : [],
:event_ok => :event == [] ? false : true, :button => button, :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
return if $game_message.busy? && $ENERGY_BAR_MESSAGE_STOP
if $ENERGY_BAR_SPEED != -1
return if Graphics.frame_count % $ENERGY_BAR_SPEED == 0
end
$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 ? update_decrease_value_energy_bar(index) : update_increase_value_energy_bar(index)
else # Input.press?(index[:button])
energy_bar_animation_update(false)
index[:inverse] == false ? update_increase_value_energy_bar(index) : update_decrease_value_energy_bar(index)
end
else # if index[:button].is_a?(Symbol)
if index[:auto] # если у нас автоматическое использование
index[:inverse] == false ? update_decrease_value_energy_bar(index) : update_increase_value_energy_bar(index)
else
index[:inverse] == false ? update_increase_value_energy_bar(index) : update_decrease_value_energy_bar(index)
end
end # if index[:button].is_a?(Symbol)
check_energy_bar_event_ok(index)
check_energy_bar_event(index)
end # $ENERGY_BAR_ARRAY.each do |index|
end
def check_energy_bar_event_ok(index)
return if index[:event] == []
if index[:inverse]
index[:event_ok] = true if (index[:now].to_f/index[:max] * 100).to_i < 99
else
index[:event_ok] = true if (index[:now].to_f/index[:max] * 100).to_i > 0
end
end
def check_energy_bar_event(index)
return if index[:event] == []
return if !index[:event_ok]
if index[:inverse]
return if index[:now].to_i != index[:max].to_i
else
return if index[:now].to_i != 0
end
event_list = index[:event]
process_value = 0 # номер переменной, с которой начинается обработка после
case event_list[0] # переменная, переключатель, общее событие
when 1 # переменная
case event_list[2]
when 1 # увеличить переменную
$game_variables[event_list[1]] += event_list[3]
when 2 # уменьшить переменную
$game_variables[event_list[1]] -= event_list[3]
when 3 # установить переменную
$game_variables[event_list[1]] = event_list[3]
end
process_value = 4
when 2 # переключатель
case event_list[2]
when 1
$game_switches[event_list[1]] = true
when 2
$game_switches[event_list[1]] = false
when 3
$game_switches[event_list[1]] = !$game_switches[event_list[1]]
end
process_value = 3
when 3 # общее событие
$game_temp.reserve_common_event(event_list[1])
process_value = 2
end
case event_list[process_value] # обработка после
when 1 # удалить полосу
return dispose_one_energy_bar(find_id_from_index(index))
when 2 # увеличить полосу
index[:inverse] == false ? increase_energy_bar_value(index, event_list[process_value + 1]) : decrease_energy_bar_value(index, event_list[process_value + 1])
when 3 # общее событие
$game_temp.reserve_common_event(event_list[process_value + 1])
end
index[:event_ok] = false
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 check_energy_bar_value_range(index)
index = $ENERGY_BAR_ARRAY[index] if index.is_a?(Integer)
index[:now] = 0 if index[:now] < 0
index[:now] = index[:max].to_i if index[:now] > index[:max]
end
def set_energy_bar_value(index, value)
index = $ENERGY_BAR_ARRAY[index] if index.is_a?(Integer)
index[:now] = value
check_energy_bar_value_range(index)
end
def increase_energy_bar_value(index, value)
index = $ENERGY_BAR_ARRAY[index] if index.is_a?(Integer)
index[:now] += value
check_energy_bar_value_range(index)
end
def decrease_energy_bar_value(index, value)
index = $ENERGY_BAR_ARRAY[index] if index.is_a?(Integer)
index[:now] -= value
check_energy_bar_value_range(index)
end
def update_increase_value_energy_bar(index)
increase_energy_bar_value(index, index[:restore_speed])
end
def update_decrease_value_energy_bar(index)
decrease_energy_bar_value(index, index[:use_speed])
end
def find_id_from_index(index)
return if index == nil
for i in 0..$ENERGY_BAR_ARRAY.size - 1
return i if index[:text] == $ENERGY_BAR_ARRAY[i][:text] && index[:max].to_i == $ENERGY_BAR_ARRAY[i][:max].to_i && index[:now].to_i == $ENERGY_BAR_ARRAY[i][:now].to_i
end
return -1
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
end
class Energy_Bar_Window < Window_Base
include Energy_Bar_Settings
def initialize
@optimal_window_height = 72
@optimal_window_height = 48 if $USE_MINIMAL_ENERGY_BAR_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)
self.height = Graphics.height if self.height > Graphics.height
create_contents
end
def window_setup
self.x = $ENERGY_BAR_WINDOW_X if self.x != $ENERGY_BAR_WINDOW_X
self.y = $ENERGY_BAR_WINDOW_Y if self.y != $ENERGY_BAR_WINDOW_Y
if self.width != $ENERGY_BAR_WINDOW_WIDTH
self.width = $ENERGY_BAR_WINDOW_WIDTH
create_contents
end
end
def update
super
contents.clear
window_setup
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_ENERGY_BAR_STYLE # рисуем текст
draw_text(rect, index[:text])
else
draw_text(rect, index[:text], 1)
end
if $USE_MINIMAL_ENERGY_BAR_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_ENERGY_BAR_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, event = -1, button = -1)
return if !SceneManager.scene.is_a?(Scene_Map)
SceneManager.scene.start_new_energy_bar(text.to_s, max, use_speed, restore_speed, color, inverse, event, 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].to_i == 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?
return if !type.is_a?(Symbol)
$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 energy_bar_inversed?(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][:inverse]
end
def get_energy_bar_parameter(index, type)
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 -1 if !type.is_a?(Symbol)
return $ENERGY_BAR_ARRAY[index][type]
end
def set_energy_bar_value(index, 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?
return SceneManager.scene.set_energy_bar_value(index, 0) if value < 0
SceneManager.scene.set_energy_bar_value(index, value)
end
def set_all_energy_bar_value(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
set_energy_bar_value(index, flag)
end
end
def increase_energy_bar_value(index, 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?
SceneManager.scene.increase_energy_bar_value(index, value)
end
def increase_all_energy_bar_value(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
increase_energy_bar_value(index, value)
end
end
def decrease_energy_bar_value(index, 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?
SceneManager.scene.deacrease_energy_bar_value(index, value)
end
def decrease_all_energy_bar_value(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
decrease_energy_bae_value(index, value)
end
end
def check_energy_bar(index, inverse = false)
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 = inverse ? $ENERGY_BAR_ARRAY[index][:max].to_i : 0
return value == type
end
def get_energy_bar_value(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 energy_bar_exist?(text, max)
return -1 if !SceneManager.scene.is_a?(Scene_Map) || SceneManager.scene.create_energy_bar_window.nil? || $ENERGY_BAR_ARRAY.empty?
return get_energy_bar_index(text, max) != -1 ? true : false
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
class Scene_Title < Scene_Base
alias denis_kyznetsov_energy_bar_scn_title_start start
def start
denis_kyznetsov_energy_bar_scn_title_start
$ENERGY_BAR_ARRAY.clear
end
end # class Scene_Title < Scene_Base
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[:ENERGY_BAR_WINDOW_X] = $ENERGY_BAR_WINDOW_X
contents[:ENERGY_BAR_WINDOW_Y] = $ENERGY_BAR_WINDOW_Y
contents[:ENERGY_BAR_WINDOW_WIDTH] = $ENERGY_BAR_WINDOW_WIDTH
contents[:ENERGY_BAR_MESSAGE_STOP] = $ENERGY_BAR_MESSAGE_STOP
contents[:ENERGY_BAR_SPEED] = $ENERGY_BAR_SPEED
contents[:USE_ENERGY_BAR_WINDOW_PERCENT] = $USE_ENERGY_BAR_WINDOW_PERCENT
contents[:USE_MINIMAL_ENERGY_BAR_STYLE] = $USE_MINIMAL_ENERGY_BAR_STYLE
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]
$ENERGY_BAR_WINDOW_X = contents[:ENERGY_BAR_WINDOW_X]
$ENERGY_BAR_WINDOW_Y = contents[:ENERGY_BAR_WINDOW_Y]
$ENERGY_BAR_WINDOW_WIDTH = contents[:ENERGY_BAR_WINDOW_WIDTH]
$ENERGY_BAR_MESSAGE_STOP = contents[:ENERGY_BAR_MESSAGE_STOP]
$ENERGY_BAR_SPEED = contents[:ENERGY_BAR_SPEED]
$USE_ENERGY_BAR_WINDOW_PERCENT = contents[:USE_ENERGY_BAR_WINDOW_PERCENT]
$USE_MINIMAL_ENERGY_BAR_STYLE = contents[:USE_MINIMAL_ENERGY_BAR_STYLE]
end
end
end # module DataManager |
Последнее редактирование: 9 года 7 мес. назад от DK.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Alex711
|
Восстанавливающаяся полоса 9 года 7 мес. назад #80015
|
При выборе полоса останавливается
Как от этого избавиться? |
Администратор запретил публиковать записи гостям.
|
Восстанавливающаяся полоса 9 года 7 мес. назад #80020
|
О каком выборе идет речь ?
|
Администратор запретил публиковать записи гостям.
|
Восстанавливающаяся полоса 9 года 7 мес. назад #80022
|
Судя по другой его теме, он имеет ввиду, что когда он в игре вызывает окно выбора, у него полоса перестаёт двигаться, а по его задумке должна двигаться постоянно
|
Администратор запретил публиковать записи гостям.
|
Восстанавливающаяся полоса 9 года 7 мес. назад #80023
|
Green-Leo пишет:
Судя по другой его теме, он имеет ввиду, что когда он в игре вызывает окно выбора, у него полоса перестаёт двигаться, а по его задумке должна двигаться постоянно Но плюшка в том, что полоса вроде как постоянно двигается. Во всяком случае сейчас я попробовал открыть окно выбора и полоса двигалась. Даже если активация по кнопке. P.S. И даже если открыто диалоговое окно. Кстати, у меня вот возник вопрос. Можно ли как-то сделать что бы полоска по разному реагировала на разные кнопки? Например, зажимая шифт мы отнимаем от неё по единичке за тик, а нажимая S сразу десятку отнимаем разово. |
Последнее редактирование: 9 года 7 мес. назад от Демий.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: strelokhalfer
|
Восстанавливающаяся полоса 9 года 7 мес. назад #80027
|
в шапке скрипта есть настройки. если $ENERGY_BAR_MESSAGE_STOP = true, то полоса не будет двигаться при окне сообщения или выборе, если $ENERGY_BAR_MESSAGE_STOP = false, то полосы будут двигаться.
Что касается отдельных кнопок, то такое не предусмотрено. И делать ли это я не знаю. Для этого надо будет еще больше загромождать скрипт start energy bar, который и без того слишком наполнен. Как вариант, можно эвентом отслеживать нажата ли клавиша и вызывать скрипт для увеличения/уменьшения полосы |
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Демий, CreepyPasta
|
Восстанавливающаяся полоса 9 года 5 мес. назад #82984
|
Обновил скрипт до версии 1.43. Добавил пару вызовов скрипта и сделал небольшие исправления. Желательно обновиться
|
Администратор запретил публиковать записи гостям.
|
Восстанавливающаяся полоса 9 года 2 мес. назад #84534
|
Вопрос
Можно ли создать условие:Если значение полосы по индексу 0 меньше или равно 50, то сработает евент. |
Мне лень что-то писать
Последнее редактирование: 9 года 2 мес. назад от Koteuka.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DK
|
Восстанавливающаяся полоса 9 года 2 мес. назад #84537
|
В событии выбираете условие, там пункт скрипт, введи скрипт для получения значения полосы по индексу (в шапке скрипта есть)
|
Администратор запретил публиковать записи гостям.
|
Модераторы: NeKotZima
Время создания страницы: 0.460 секунд