Имена событий

Программист Ruby Организатор конкурсов Даритель Стимкея 2 место Сбитая кодировка Переводчик 2 место
Больше
11 года 2 мес. назад - 10 года 8 мес. назад #77814 от strelokhalfer
strelokhalfer создал тему: Имена событий
Имена событий
Информация:
Автор: Я, то есть Strelokhalfer
Версия: 1.1
Тип: Компонент для работы с именами у событий.

Описание:
Данный скрипт позволяет считывать, проверять и менять имена
у определенных событий. А так же, выводить имена в сообщениях.
Код:
Code:
=begin Имена событий Автор: strelokhalfer Требования: Мозг и прямые руки :) Описание: Данный скрипт позволяет считывать, проверять и менять имена у определенных событий. А так же, выводить имена в сообщениях. Лицензия: Скрипт защищён лицензией CC BY-NC-ND 4.0, что означает: Вы МОЖЕТЕ распространять скрипт, использовать в проектах, НО: Вы ОБЯЗАНЫ указать моё авторство. Вы НЕ МОЖЕТЕ использовать скрипт в коммерческих проектах, но вы МОЖЕТЕ узнать стоимость разрешения, написав мне на strelokhalfer@gmail.com Вы НЕ МОЖЕТЕ изменять данный скрипт или делать свой на основе этого. Использование: Для вывода в сообщении: \En[maps_id][event_id] Где: maps_id - номер карты event_id - номер события Для вызова скрипта или для условия: Events.get_name(maps_id, event_id) - получает или сравнивает имя Где: maps_id - номер карты event_id - номер события Events.set_name(maps_id, event_id, name) - устанавливает имя Где: maps_id - номер карты event_id - номер события name - новое имя события Events.enter_eventname(map_id, event_id, maxchar) - ввод имени Где: maps_id - номер карты event_id - номер события maxchar - максимальная длина имени, необязателен, стандартно 10. =end $imported = {} if $imported.nil? $imported["Halfer_events"] = true class Window_Base alias halfer_convert_escape_characters convert_escape_characters def convert_escape_characters(text, *args, &block) new_text = text.to_s.clone #Зато я наконец-то разобрался с регулярками new_text.gsub!(/\\/) { "\e" } new_text.gsub!(/\e\e/) { "\\" } new_text.gsub!(/\eEn\[(\d+)\]\[(\d+)\]/i) { Events.get_name($1.to_i, $2.to_i) } halfer_convert_escape_characters(new_text, *args, &block) end end module Events def self.get_name(maps_id, event_id) return "" if maps_id == 0 || event_id == 0 evname = load_data(format("Data/Map%03d.rvdata2", maps_id)) return evname.events[event_id].name end def self.set_name(maps_id, event_id, name) evname = load_data(format("Data/Map%03d.rvdata2", maps_id)) evname.events[event_id].name = name save_data(evname, format("Data/Map%03d.rvdata2", maps_id)) end def self.enter_eventname(map_id, event_id, maxchar = 10) SceneManager.call(Scene_Eventname) SceneManager.scene.prepare(map_id, event_id, maxchar) Fiber.yield end end #Копируем класс ввода имени class Scene_Eventname < Scene_MenuBase def prepare(mapid, eventid, maxchar) @mapid = mapid @eventid = eventid @maxchar = maxchar end def start super @event = Events.get_name(@mapid, @eventid) @edit_window = Window_EventEdit.new(@event, @maxchar) @input_window = Window_NameInput.new(@edit_window) @input_window.set_handler(:ok, method(:on_input_ok)) end def on_input_ok Events.set_name(@mapid, @eventid, @edit_window.name) return_scene end end #Пришлось полностью скопировать класс ввода имени и править class Window_EventEdit < Window_Base #-------------------------------------------------------------------------- # * Атрибуты #-------------------------------------------------------------------------- attr_reader :name # name attr_reader :index # cursor position attr_reader :max_char # maximum number of characters #-------------------------------------------------------------------------- # * Инициализация #-------------------------------------------------------------------------- def initialize(actor, max_char) x = (Graphics.width - 360) / 2 y = (Graphics.height - (fitting_height(4) + fitting_height(9) + 8)) / 2 super(x, y, 360, fitting_height(4)) @actor = actor @max_char = max_char @default_name = @name = actor#.name[0, @max_char] @index = @name.size deactivate refresh end #-------------------------------------------------------------------------- # * Веруть предыдущее(если нажать ОК при пустом окне) #-------------------------------------------------------------------------- def restore_default @name = @default_name @index = @name.size refresh return !@name.empty? end #-------------------------------------------------------------------------- # * Добавить букву #-------------------------------------------------------------------------- def add(ch) return false if @index >= @max_char @name += ch @index += 1 refresh return true end #-------------------------------------------------------------------------- # * Сдвиг назад на 1 #-------------------------------------------------------------------------- def back return false if @index == 0 @index -= 1 @name = @name[0, @index] refresh return true end #-------------------------------------------------------------------------- # * Ширина графики лица NEED TO EXTERMINATE, ну или сделать отрисовку лица #-------------------------------------------------------------------------- #~ def face_width #~ return 96 #~ end #-------------------------------------------------------------------------- # * Ширина буквы #-------------------------------------------------------------------------- def char_width text_size($game_system.japanese? ? "あ" : "A").width end #-------------------------------------------------------------------------- # * Get Coordinates of Left Side for Drawing Name #-------------------------------------------------------------------------- def left name_center = (contents_width) / 2 #~ name_center = (contents_width + face_width) / 2 - ВРЕМЕННО ОСТАВИТЬ! name_width = (@max_char + 1) * char_width return [name_center - name_width / 2, contents_width - name_width].min end #-------------------------------------------------------------------------- # * Получить прямоугольник отображаемых предметов #-------------------------------------------------------------------------- def item_rect(index) Rect.new(left + index * char_width, 36, char_width, line_height) end #-------------------------------------------------------------------------- # * Прямоугольник линии(ну называется так) #-------------------------------------------------------------------------- def underline_rect(index) rect = item_rect(index) rect.x += 1 rect.y += rect.height - 4 rect.width -= 2 rect.height = 2 rect end #-------------------------------------------------------------------------- # * Получить цвет линии #-------------------------------------------------------------------------- def underline_color color = normal_color color.alpha = 48 color end #-------------------------------------------------------------------------- # * Нарисовать подчеркивающую линию #-------------------------------------------------------------------------- def draw_underline(index) contents.fill_rect(underline_rect(index), underline_color) end #-------------------------------------------------------------------------- # * Нарисовать текст #-------------------------------------------------------------------------- def draw_char(index) rect = item_rect(index) rect.x -= 1 rect.width += 4 change_color(normal_color) draw_text(rect, @name[index] || "") end #-------------------------------------------------------------------------- # * Обновить #-------------------------------------------------------------------------- def refresh contents.clear @max_char.times {|i| draw_underline(i) } @name.size.times {|i| draw_char(i) } cursor_rect.set(item_rect(@index)) end end
Скачать:
Демо - Архив 7z, 1.3мб.

"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Последнее редактирование: 10 года 8 мес. назад пользователем strelokhalfer.
Спасибо сказали: I_LORD, DeadElf79, Ren310, Демий, Bloknot

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

Больше
11 года 2 мес. назад #78505 от Bloknot
Bloknot ответил в теме Имена событий
Спасибо!Интересненький скрипт.

. А так же, выводить имена в сообщениях.

Каким образом?

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

Даритель Стимкея Проект месяца 2 место 1 место в Готв 3 место Готв 3 место Ветеран
Больше
11 года 2 мес. назад #78515 от MaltonTheWarrior
MaltonTheWarrior ответил в теме Имена событий
Да ты прочти описание скрипта, там же все написано.

Для вывода в сообщении:
\En[maps_id][event_id]
Где:
maps_id - номер карты
event_id - номер события

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

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