Войти на сайт
×
Правила раздела:
1 Задавайте конкретные вопросы. Для болтовни есть свободный раздел.
2 По возможности давайте конкретные ответы.
3 Один вопрос=одна тема. Если хотите задать ещё вопрос, то начинайте новую тему.
4 Название темы должно составлять сам вопрос, и быть максимально конкретным. Рекомендуется начинать тему словами "Как", "Что", "Почему". А первый пост повторяет вопрос и даёт расширенные сведения.
5 Рекомендуется указывать версию мейкера (2000, 2003, RMXP, RMVX, ACE, IGM, и.т.д.. Это важно, и всё равно ведь спросят.
6 Темы "Пара вопросов", "Помогите", и подобные им - самый лёгкий путь к бану.
7 Поиск находится вверху справа.
А. Названия подразделов этого раздела уточняются. Советы принимаются.
1 Задавайте конкретные вопросы. Для болтовни есть свободный раздел.
2 По возможности давайте конкретные ответы.
3 Один вопрос=одна тема. Если хотите задать ещё вопрос, то начинайте новую тему.
4 Название темы должно составлять сам вопрос, и быть максимально конкретным. Рекомендуется начинать тему словами "Как", "Что", "Почему". А первый пост повторяет вопрос и даёт расширенные сведения.
5 Рекомендуется указывать версию мейкера (2000, 2003, RMXP, RMVX, ACE, IGM, и.т.д.. Это важно, и всё равно ведь спросят.
6 Темы "Пара вопросов", "Помогите", и подобные им - самый лёгкий путь к бану.
7 Поиск находится вверху справа.
А. Названия подразделов этого раздела уточняются. Советы принимаются.
|
ТЕМА: Где найти и скачать скрипты?
Где найти и скачать скрипты? 13 года 11 мес. назад #37875
|
не он у меня уже давно есть но я так и непонял как им пользоватся
Мне надо что бы игрок сам мог сделать из представленных волос костюмов и лиц героя и что-бы была возможность автовыбора подходящего лица для него (ну наверно это сложно) - хотя можно и что-бы уже из готовых можно было вибирать |
Администратор запретил публиковать записи гостям.
|
Где найти и скачать скрипты? 13 года 11 мес. назад #37887
|
Учи английский или пользуйся гуглом-- в поснении к скипту всё написано, дальше немного поэкспериментировать-- и он уже осовен )
Скрипт, наиболее близкий к тому, что ты сказал, вот: rpg-maker.info/download/Скрипты/RGSS/Скр...sy-Caracter-Creator/ Кинула в архив форума ) Это старый злобный VisEquip с генерителем персонажей. Позволят выбрать пол, класс, имя; затем-- волосы, кожу, глаза и одежду; затем-- способности и инвентарь. Предупреждение: некорректно работает с caterpillar-ом. Игра не виснет, но сопартийцы отображаться отказываются. Ещё один минус: если не ращбираешься в сриптах достаточно, чтобы вырубить визуальное отображение доспехов, придётся озаботиться графикой для них. |
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Scorpio
|
Где найти и скачать скрипты? 13 года 11 мес. назад #37890
|
Nalia спасибо за скрипт но плохо что он для XP а не для Vx (
|
Администратор запретил публиковать записи гостям.
|
Где найти и скачать скрипты? 13 года 11 мес. назад #37893
|
*зевок*
Visual Equipement (VX) |
Администратор запретил публиковать записи гостям.
|
Где найти и скачать скрипты? 13 года 11 мес. назад #37906
|
может хватит мне один и тот же скрипт довать всё врямя он у меня давно есть
Мне нужен скрипт который дала Nalia только для VX что бы там было меню такое-же простое как и там (наилегчайшее я бы сказал) |
Администратор запретил публиковать записи гостям.
|
Где найти и скачать скрипты? 13 года 11 мес. назад #37907
|
Могу еще раз дать ссылку на тот же скрипт. Для прикола.
А так на ВХ нет подобного скрипта. |
Администратор запретил публиковать записи гостям.
|
Где найти и скачать скрипты? 13 года 11 мес. назад #37911
|
Scorpio пишет:
помогите найти скрипт для создания мини карты а то нашёл какой-то но он не работает Миникарту написал чарли. Есть хороший рабочий скрипт. Картинок не просит. если надо кому могу дать.Я лично на ивентах писал миникарту. Это легко и работает без багов. не хуже скрипта |
Администратор запретил публиковать записи гостям.
|
Где найти и скачать скрипты? 13 года 11 мес. назад #37912
|
тоесть эта карта будет показыватся во время игры (игрок её невызывает она висит в правом верхнем углу) ?
|
Администратор запретил публиковать записи гостям.
|
Где найти и скачать скрипты? 13 года 11 мес. назад #37914
|
Так. Верёмся к истокам.
Мне надо что бы игрок сам мог сделать из представленных волос костюмов и лиц героя и что-бы была возможность автовыбора подходящего лица для него (ну наверно это сложно) - хотя можно и что-бы уже из готовых можно было вибирать Знаешь, либо ты учишься пользоваться VisEquip, либо создаёшь некое количество уже готовых болванок на все варианты выбора. По-моему, первое проще. Сам экран создания персонажа можно сделать на событиях. Думакешь чистую карту, ставишь какую-нибудь однотонную панораму, в центр карты-- героя. Сначала-- голенькую болванку. Внизу, сообщениями, поочерёдно предлагаешь выбор: пол? (в зависимости от этого меняется болванка) Цвет волос? (тут можно ещё картинкой аватар высветить в уголочке) Верхняя часть костюма? Нижняя часть костюма? Если постараться, поманипулировать с картинками и поэкспериментировать, то может получиться даже не уродски. |
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Scorpio
|
Где найти и скачать скрипты? 13 года 11 мес. назад #37915
|
А в поисках подходящих скпитов советую посмотреть
rmrk.net/index.php/topic,31844.0.html Здесь хороший индекс ВХных скриптов. |
Администратор запретил публиковать записи гостям.
|
Где найти и скачать скрипты? 13 года 11 мес. назад #37977
|
rmrk.net/index.php/topic,38134.0.html - В скрипте этого меню какие строчки надо поправить что бы отодвинуть правую часть на растояние , просто во -первых оно заходинт на надписи во-вторых у меня стоит скрипт на увеличения разрешения и там справа стоновится много свободного простаранства
rmrk.net/index.php/topic,33028.0.html - Где можно найти такой скрипт а то я там никак зарегатся не могу |
Администратор запретил публиковать записи гостям.
|
Где найти и скачать скрипты? 13 года 11 мес. назад #37978
|
|
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Scorpio
|
Где найти и скачать скрипты? 13 года 11 мес. назад #38087
|
Как добавить изображение 4 кнопки в этот скрипт ?
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] #============================================================================== # ** Сцена_ГлавноеМеню (Scene_Title) # # Этот класс обрабатывает экран главного меню. #============================================================================== # VS СценарийГлавноеМеню (VS Title Script) class Scene_Title < Scene_Base attr_accessor :titleloop attr_accessor :cursorreset attr_accessor :symbolreset attr_accessor :sparkcount # # * инициализация # def initialize @titleloop = 1 @cursorreset = false @symbolreset = false @sparkcount = 350 end # # * главная функция # def main if $BTEST # если тест битвы battle_test # начать тест битвы else # если обычная игра super # обычная главная функция end end # # * функция начала # def start super load_database # загрузить базу данных create_game_objects # создать объекты игры check_continue # определить, если доступно "продолжить" create_title_graphic # создать изображение главного меню create_command_window # создать окно команд play_title_music # играть музыку экрана главного меню end # # * выполнить переход # def perform_transition Graphics.transition(20) end # # * функция после начала # def post_start super open_command_window end # # * функция перед завершением # def pre_terminate super close_command_window end # # * функция завершения # def terminate super dispose_command_window snapshot_for_background dispose_title_graphic end # # * обновить кадр # def update super #=======анимация волны========= @wave.update #=======анимация символа========= @symbol.ox -= 1 if @symbolreset == true && @symbol.opacity == 0 @symbolreset = false elsif @symbol.opacity != 255 @symbol.opacity += 3 end #=======анимация вспышки======== @spark01.x += 10 @spark02.x -= 10 if @sparkcount != 0 @sparkcount -= 1 else @sparkcount = 350 @spark01.x = -172 @spark02.x = 640 end if @spark01.opacity != 255 @spark01.opacity += 20 @spark02.opacity += 20 end #=======анимация фона========= if @sprite.oy != 0 @sprite.oy -= 1 elsif @sprite.oy == 0 @sprite.ox += 1 end if @wave.oy != 0 @wave.oy -= 1 elsif @wave.oy == 0 if @titleloop == 1 && @wave.ox != 1289 @wave.ox += 1 else @titleloop == 2 end if @titleloop == 2 && @wave.ox != -1189 @wave.ox -= 1 else @titleloop == 1 end end #=======анимация меню========= case @command_window.index when 0 @spark01.y = 280 @spark02.y = 300 @symbol.oy = 403 @strike1.y = 300 @strike2.y = 300 if @menu01.opacity != 255 @menu01.opacity += 20 @menu02.opacity -= 20 @menu03.opacity -= 20 end if @cursor.y != 300 @cursor.y -= 5 end when 1 @spark01.y = 325 @spark02.y = 345 @symbol.oy = 358 @strike1.y = 345 @strike2.y = 345 if @menu02.opacity != 255 @menu02.opacity += 20 @menu01.opacity -= 20 @menu03.opacity -= 20 end if @cursor.y != 345 && @cursor.y < 345 @cursor.y += 5 elsif @cursor.y != 345 && @cursor.y > 345 @cursor.y -= 5 end when 2 @spark01.y = 365 @spark02.y = 385 @symbol.oy = 317 @strike1.y = 385 @strike2.y = 385 if @menu03.opacity != 255 @menu03.opacity += 20 @menu02.opacity -= 20 @menu01.opacity -= 20 end if @cursor.y != 385 @cursor.y += 5 end end @command_window.update #=======анимация курсора========= if @strike1.x != 0 @strike1.x += 11 end if @strike2.x != 308 @strike2.x -= 12 end check_menu if Input.trigger?(Input::C) case @command_window.index when 0 #новая игра command_new_game when 1 # продолжить command_continue when 2 # выйти из игры command_shutdown end end end # # * проверить текущее меню # def check_menu if Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN) @sparkcount = 350 @spark01.x = -172 @spark02.x = 640 @spark01.opacity -= 255 @spark02.opacity -= 255 @symbol.opacity -= 255 @symbolreset = true case @command_window.index when 0 @spark01.y = 280 @spark02.y = 300 @symbol.oy = 403 @strike1.y = 300 @strike2.y = 300 @strike1.x = -330 @strike2.x = 680 when 1 @spark01.y = 325 @spark02.y = 345 @symbol.oy = 358 @strike1.y = 345 @strike2.y = 345 @strike1.x = -330 @strike2.x = 680 when 2 @spark01.y = 365 @spark02.y = 385 @symbol.oy = 317 @strike1.y = 385 @strike2.y = 385 @strike1.x = -330 @strike2.x = 680 end end end # # * загрузить базу данных # def load_database $data_actors = load_data("Data/Actors.rvdata") $data_classes = load_data("Data/Classes.rvdata") $data_skills = load_data("Data/Skills.rvdata") $data_items = load_data("Data/Items.rvdata") $data_weapons = load_data("Data/Weapons.rvdata") $data_armors = load_data("Data/Armors.rvdata") $data_enemies = load_data("Data/Enemies.rvdata") $data_troops = load_data("Data/Troops.rvdata") $data_states = load_data("Data/States.rvdata") $data_animations = load_data("Data/Animations.rvdata") $data_common_events = load_data("Data/CommonEvents.rvdata") $data_system = load_data("Data/System.rvdata") $data_areas = load_data("Data/Areas.rvdata") end # # * загрузить базу данных теста битвы # def load_bt_database $data_actors = load_data("Data/BT_Actors.rvdata") $data_classes = load_data("Data/BT_Classes.rvdata") $data_skills = load_data("Data/BT_Skills.rvdata") $data_items = load_data("Data/BT_Items.rvdata") $data_weapons = load_data("Data/BT_Weapons.rvdata") $data_armors = load_data("Data/BT_Armors.rvdata") $data_enemies = load_data("Data/BT_Enemies.rvdata") $data_troops = load_data("Data/BT_Troops.rvdata") $data_states = load_data("Data/BT_States.rvdata") $data_animations = load_data("Data/BT_Animations.rvdata") $data_common_events = load_data("Data/BT_CommonEvents.rvdata") $data_system = load_data("Data/BT_System.rvdata") end # # * создать объекты игры # def create_game_objects $game_temp = Game_Temp.new $game_message = Game_Message.new $game_system = Game_System.new $game_switches = Game_Switches.new $game_variables = Game_Variables.new $game_self_switches = Game_SelfSwitches.new $game_actors = Game_Actors.new $game_party = Game_Party.new $game_troop = Game_Troop.new $game_map = Game_Map.new $game_player = Game_Player.new end # # * определить, доступно ли "продолжить" # def check_continue @continue_enabled = (Dir.glob('Сохранение*.rvdata').size > 0) end # # * создать изображение главного меню # def create_title_graphic @viewport1 = Viewport.new(0, 0, 1288, 891) @viewport2 = Viewport.new(0, 0, 824, 480) @viewport2.z = 10 @sprite = Plane.new(@viewport1) @sprite.bitmap = Cache.system("TitleBGLoop") @sprite.oy = 371 @sprite.ox = 100 @sprite.z = -100 @wave = Sprite.new(@viewport1) @wave.bitmap = Cache.system("TitleBGSprite") @wave.oy = 371 @wave.ox = 100 @wave.wave_amp = 50 @wave.wave_length = 440 @wave.wave_speed = 1250 @wave.opacity = 125 @wave.z = 5 @logo = Sprite.new @logo.bitmap = Cache.system("TitleLogo") @logo.x = 50 @logo.y = 10 @logo.z = 10 @menu01 = Sprite.new @menu01.bitmap = Cache.system("TitleMenu01") @menu01.x = 240 @menu01.y = 300 @menu02 = Sprite.new @menu02.bitmap = Cache.system("TitleMenu02") @menu02.x = 240 @menu02.y = 300 @menu02.opacity = 0 @menu03 = Sprite.new @menu03.bitmap = Cache.system("TitleMenu03") @menu03.x = 240 @menu03.y = 300 @menu03.opacity = 0 @cursor = Sprite.new @cursor.bitmap = Cache.system("TitleCursor") @cursor.x = 240 @cursor.y = 300 @cursor.z = 12 @strike1 = Sprite.new @strike1.bitmap = Cache.system("CursorStrike01") @strike1.x = 0 @strike1.y = 300 @strike1.z = 9 @strike2 = Sprite.new @strike2.bitmap = Cache.system("CursorStrike02") @strike2.x = 308 @strike2.y = 300 @strike2.z = 9 @symbol = Plane.new(@viewport2) @symbol.bitmap = Cache.system("TitleSymbol") @symbol.oy = 403 @symbol.ox = 100 @spark01 = Sprite.new @spark01.bitmap = Cache.system("TitleSpark01") @spark01.y = 280 @spark01.x = -172 @spark01.z = 12 @spark02 = Sprite.new @spark02.bitmap = Cache.system("TitleSpark02") @spark02.y = 300 @spark02.x = 640 @spark02.z = 12 @menu01.z = @menu02.z = @menu03.z = 13 if @continue_enabled @menu01.opacity = 0 @menu02.opacity = 255 @cursor.y = 345 @strike1.y = 345 @strike2.y = 345 @symbol.oy = 358 end end # # * расположить изображение главного меню # def dispose_title_graphic @sprite.dispose @wave.dispose @logo.dispose @menu01.dispose @menu02.dispose @menu03.dispose @cursor.dispose @strike1.dispose @strike2.dispose @symbol.dispose @spark01.dispose @spark02.dispose @wave.bitmap.dispose @logo.bitmap.dispose @menu01.bitmap.dispose @menu02.bitmap.dispose @menu03.bitmap.dispose @cursor.bitmap.dispose @strike1.bitmap.dispose @strike2.bitmap.dispose @spark01.bitmap.dispose @spark02.bitmap.dispose end # # * создать окно команд # def create_command_window s1 = Vocab::new_game s2 = Vocab::continue s3 = Vocab::shutdown @command_window = Window_Command.new(172, [s1, s2, s3]) @command_window.x = (640 - @command_window.width) / 2 @command_window.y = 998 if @continue_enabled # если доступно "продолжить" @command_window.index = 1 # двигать курсор над командой else # если недоступно @command_window.draw_item(1, false) # сделать команду полупрозрачной end @command_window.openness = 0 @command_window.open end # # * расположить окно команд # def dispose_command_window @command_window.dispose end # # * открыть окно команд # def open_command_window @command_window.open begin @command_window.update Graphics.update end until @command_window.openness == 255 end # # * закрыть окно команд # def close_command_window @command_window.close begin @command_window.update Graphics.update end until @command_window.openness == 0 end # # * играть музыку экрана главного меню # def play_title_music $data_system.title_bgm.play RPG::BGS.stop RPG::ME.stop end # # * проверить существование начального положения игрока # def confirm_player_location if $data_system.start_map_id == 0 print "Player start location not set." #начальное положение игрока не задано exit end end # # * команда: новая игра # def command_new_game confirm_player_location Sound.play_decision $game_party.setup_starting_members # нначальная партия $game_map.setup($data_system.start_map_id) # начальная позиция карты $game_player.moveto($data_system.start_x, $data_system.start_y) $game_player.refresh $scene = Scene_Map.new RPG::BGM.fade(1500) close_command_window Graphics.fadeout(60) Graphics.wait(40) Graphics.frame_count = 0 RPG::BGM.stop $game_map.autoplay end # # * команда: продолжить # def command_continue if @continue_enabled Sound.play_decision $scene = Scene_File.new(false, true, false) else Sound.play_buzzer end end # # * команда: выйти из игры # def command_shutdown Sound.play_decision RPG::BGM.fade(800) RPG::BGS.fade(800) RPG::ME.fade(800) $scene = nil end # # * тест битвы # def battle_test load_bt_database # загрузить базу данных теста битвы create_game_objects # создать объекты игры Graphics.frame_count = 0 # инициализировать время игры $game_party.setup_battle_test_members $game_troop.setup($data_system.test_troop_id) $game_troop.can_escape = true $game_system.battle_bgm.play $game_system.bb = "bg_001.jpg" snapshot_for_background $scene = Scene_Battle.new end end |
Администратор запретил публиковать записи гостям.
|
Где найти и скачать скрипты? 13 года 11 мес. назад #38088
|
Вот скрипт для появления большого изображения героя сообщении
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] #=============================================================== # + [VX] [ NMS - Neo Message System 3.0 Beta ] + # # >> Автор Woratana [Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.] # >> Thaiware RPG Maker Community # >> Особые благодарности: Mako, Yatzumo, Straycat, Erzengel, RPG, # Dubalex, Modern Algebra, Equilibrium Keeper # # Дата выпуска: 07/06/2008 (D-M-Y) # # Включает: NEO-FACE SYSTEM ADVANCE (Version 3.0) by Woratana #=============================================================== # Заметки: # - Сценарий начал писаться еще до выхода VX English, # так что некоторые комментарии все еще на японском # - Сценарий включает новейшую версию Neo-Face System, # так что Вам следует удалить старую версию Neo-Face System, если она у Вас есть. =begin ============================================= + NMS 3 Beta + [07/06/2008] - добавил 'список удаленного текста' - временное изменение размеров и положения окна - теперь сценарий можно вызвать: $game_message.create_nms_data для переустановки данных NMS или создания данных NMS для старого файла сохранения - исправлена ошибка с написанием имени класса актера - исправлена ошибка с выходом поля имени за пределы экрана - добавил NAMEBOX_Y_PLUS_TOP для исправления имени за экраном при показе сообщения сверху - установка непрозрачности поля имени для разных фонов сообщений - автоисправление, если окно сообщения за пределами экрана - Вы можете изменить размер лица или нарисовать новое лицо во время сообщения ============================================= ============================================= + NMS 2.3 + [11/03/2008 - 06/04/2008] - Remove Color for [WRITE TEXT] features - 'Quick Text' feature - Animated Face - Play SE/ME - Typing Sound - Scroll Text Vertically and Horizontally - Auto-cut text (Not work perfectly) - Hex Color (Special Thanks: RPG & Erzengel) - Pop Message (Work in Progress) - Add the script code in comment of some settings, so user can change it in game by call script. ============================================= ============================================= + NMS 2.1 + [11/03/2008]: исправлена ошибка поля имени ============================================= ===================================== + NMS 2.0 СПИСОК ОСОБЕННОСТЕЙ + ===================================== Используйте эти особенности поля сообщения >> NMS ОСОБЕННОСТИ СООБЩЕНИЙ >> [SPECIAL CALL] PART \ce[Common Event ID] << немедленно играть обычное событие \ani[Animation ID] << показать анимацию "этого события" \bal[Balloon ID] << Show Ballon on 'This Event' * Примечание: Это событие = Событие, показывающее сообщение >> [MESSAGE WINDOW] PART * временные свойства, используемые однократно \wx[x] << Set temporary X to x \wy[y] << Set temporary Y to y \ww[width] << Set temporary Width to width \wh[height] << Set temporary Height to height >> +[ POP TEXT ]+ текст Pop это окно сообщения, отображаемое над персонажем в размере, равном размеру сообщения Его можно вызвать, вставив это в сообщение: \p[character] * character: персонаж, над которым должно отображаться сообщение~ 0 для игрока -1 для этого события 1 или больше для №№события >> +[ QUICK TEXT ]+ a.k.a. Shortcut Добавьте & Вызов Вашего очень длинного текста (или) часто используемого - ярлыком. Туда можно вставлять специальные символы, напр. 'Welcome to \c[10]Syria Village\c[0] $nms.qt[Quick Text ID] = 'Text you want' << Add Quick Text \qt[Quick Text ID] << Call Quick Text from message box >> [DRAW IMAGE] Нарисовать изображение \dw[weapon ID] << нарисовать иконку оружия + имя оружия \da[armor ID] << нарисовать иконку доспеха + имя доспеха \di[item ID] << нарисовать иконку вещи + имя вещи \ds[skill ID] << нарисовать иконку навыка + имя навыка \ic[icon ID] << нарисовать иконку \dp[image_name] << нарисовать изображение из папки 'System' >> [WRITE TEXT] Написать текст \map << нарисовать название карты \nc[actor ID] << написать класс актера \np[1 to 4 (order in party)] << написать имя актера в этом порядке \nm[monster ID] << написать название существа \nt[troop ID] << написать имя труппы (врагов) \nw[weapon ID] << написать название оружия \na[armor ID] << написать название доспеха \ns[skill ID] << написать название навыка \ni[item ID] << написать название вещи \price[item ID] << написать цену вещи >> [TEXT EFFECT] Текстовые эффекты \fn[Font Name] (or) << поменять название шрифта \fs[Font Size] << поменять размер шрифта \delay[Delay] << поменять задержку текста по буквам (в кадрах, 60 кадров = около 1 секунды) \ref << Reset Font Name \res << Reset Font Size \red << Reset text Delay \b << вкл/выкл жирный шрифт \i << вкл/выкл курсив \sh << вкл/выкл тень текста \lbl << вкл/выкл режим текста по буквам (по умолчанию ВКЛ) >> [NAME BOX & FACE] Поле имени и лицо \nb[Name] << показать поле имени в текущем окне сообщения \rnb[Name] (or) $nms._name = 'Name' << повторить поле имени: поле имени с этим именем будет снова повторяться в следующих сообщениях до сообщения с \nb[Name] или ввода \rnb[] \sd[side] (or) $nms.side = side << Change Face Side: (0: Left Side Normal Face | -1: Right Side Normal Face) (1: Left Side Neo Face | 2: Right Side Neo Face) $nms.color = [Red,Green,Blue] << сменить текст шрифта имени: Put RGB Color in, e.g. [255,100,200] \fa[face_file_name, face_index] (or) \fa[face_file_name, face_index, new_side] << нарисовать новое лицо во время показа сообщения~ face_file_name: имя изображения лица face_index: указатель лица на изображении (0 - 7) new_side: сторона, с которой хотите отобразить лицо >> [SOUND] Звук \se[filename] << играть звуковой эффект \me[filename] << играть музыкальный эффект \bgm[filename] << игррать фоновую музыку \typ << вкл/выкл звук печатаемого текста >> [Misc.] Разное \cb << вкл/выкл возможность пропуска игроком текста путем нажатия[Enter] \nl << начать новую строку \sc[x] << создать пустое место длиной x пикселей \w[x] << ждать x кадров \c[#XXXXXX] << Use Hex Color for text >> VX DEFAULT MESSAGE FEATURES \v[variable ID] << написать значение переменной \n[actor ID] << написать имя актера \c[color ID] << сменить цвет текста (Color ID is from Down-right corner in Windowskin) \g << показать окно золота \. << ждать 15 кадров (около 1/4 секунды) \| << ждать 60 кадров (около 1 секунды) \! << ждать нажатия игроком кнопки, чтобы продолжить сообщение \> << пропустить вывод по буквам в текущей строке \< << остановить 'пропуск вывода по буквам' а текущей строке \^ << немедленно закрыть окно сообщения \\ << написать '\' =end class Window_Base # # [START] SETUP SCRIPT PART # # # ? MESSAGE SYSTEM # NMS_FONT_NAME = Font.default_name # имя шрифта по умолчанию NMS_FONT_SIZE = 20 # размер шрифта по умолчанию # COLOR_ID is from Windowskin image in down-right corder NMS_ITEM_NAME_COLOR_ID = 5 NMS_WEAPON_NAME_COLOR_ID = 10 NMS_ARMOR_NAME_COLOR_ID = 4 NMS_SKILL_NAME_COLOR_ID = 2 NMS_DELAY_PER_LETTER = 0 # задержка между буквами при показе текста по буквам # задержка в кадрах, 60 кадров = 1 секунда # $nms.text_delay = (number) TEXT_X_PLUS = 0 # двигать текст по горизонтали CHOICE_INPUT_X_PLUS = 0 # двигать текст вариантов выбора и текст ввода чисел по горизонтали # [NEW SETTING] # NMS_MSGWIN_X = 0 # окно сообщений X по умолчанию # $nms.msg_x = (number) NMS_MSGWIN_WIDTH = 640 # ширина окна сообщений по умолчанию # $nms.msg_w = (number) NMS_MSGWIN_MIN_HEIGHT = 128 # высота окна сообщений по умолчанию и минимальная # $nms.msg_h_user = (number) NMS_MAX_LINE = 4 # максимальное число строк сообщения на странице # $nms.max_line = (number) NMS_GET_NEXT_LINE = false # брать сообщения из следующей команды сообщения, если поле не заполнено полностью # $nms.next_msg = true/false NMS_MSG_BACK = "MessageBack" # имя файла фонового изображения сообщения (для 'Dim Background' Message) # (должно быть в папке 'System') # $nms.mback = 'Image Name' NMS_MSG_BACK_OPACITY = 255 # непрозрачность фона сообщения # $nms.mback_opac = (0 - 255) NMS_TEXT_SCROLL = false # использовать вертикальную прокрутку текста? # $nms.txt_scrl = true/false NMS_TEXT_AUTO_CUT = false # текст автоматически начнет новую строку, если эта строка заполнена # (Some bug, может резать слова посередине..) # $nms.txt_cut = true/false NMS_TEXT_AUTO_SCROLL_HORIZONTAL = false # текст автоматически прокручивается влево, если строка заполнена # не работает, если NMS_TEXT_AUTO_CUT равно true # $nms.txt_scrl_hori = true/false NMS_TEXT_AUTO_SCROLL_HORIZONTAL_DELAY = 1 # задержка прокрутки (в кадрах) # $nms.txt_scrl_hori_delay = (number) NMS_USER_NEW_LINE = false # текст идет на другую строку ТОЛЬКО при вводе \nl # (удобно для Text Auto Cut) # $nms.txt_unl = true/false NMS_REMOVE_LIST = [] # список текста, который Вы хотите убрать из сообщения # например, NMS_REMOVE_LIST = '] # уберет из текста 'test' и '[MS]' перед показом сообщения # Обратите внимание, что эта функция НЕ различает строчные и прописные буквы. # # ? FACE SYSTEM # # # ** BOTH FACE SYSTEMS SETUP # DEFAULT_FACE_SIDE = 0 # Сторона лица по умолчанию в начале игры~ # (0: Left Side Normal Face | -1: Right Side Normal Face) # (1: Left Side Neo Face | 2: Right Side Neo Face) # $nms.side = (side no.) FACE_X_PLUS = 0 # двигать лицо по горизонтали (влево: -, вправо: +) FACE_Y_PLUS = 0 # двигать лицо по вертикали (вверх: -, вниз: +) MOVE_TEXT = true # (true/false) # двигать текст вправо от лица при показе лица слева. # # **SHOW FACE EFFECT # * For both Face Systems * # FADE_EFFECT = true # вкл/выкл эффект затухания (true/false) # $nms.face_fade = true/false FADE_SPEED = 20 # скорость эффекта затухания изображения лица FADE_ONLY_FIRST = true # использовать эффект затухания только в первом окне сообщения? MOVE_EFFECT = true # Turn on/off "move in" effect (true/false) # $nms.face_move = true/false MOVE_SPEED = 10 # Speed up face's "move in" effect by increase this number MOVE_ONLY_FIRST = true # Use Move Effect only in first message window? FADE_MOVE_WHEN_USE_NEW_FACE = true # Use Fade and Move effect when change Face graphic # (In case using FADE_ONLY_FIRST and MOVE_ONLY_FIRST) # # ** NEO FACE SYSTEM # EightFaces_File = false # использовать 8 лиц в файле (или) 1 лицо в файле (true/false) # # ** ANIMATED FACE SYSTEM # ANIMATE_FACE_DELAY = 6 # Face animate every _ frame # $nms.animf_delay = (number) ANIMATE_FACE_CONTINUE = false # продолжить анимацию лица после остановки написания текста? # $nms.animf_cont = (true/false) # # ? NAME BOX SYSTEM # NAMEBOX_SKIN = 'Window' # Windowskin of Name Box (In folder 'Graphics/System') NAMEBOX_OPACITY = 255 # непрозрачность поля имени при использовании сообщения с 'обычным фоном' # (Lowest 0 - 255 Highest) NAMEBOX_OPACITY_DIM_BG = 0 # непрозрачность поля имени при 'размытом фоне' NAMEBOX_OPACITY_NO_BG = 0 # непрозрачность поля имени при 'прозрачном' фоне NAMEBOX_BACK_OPACITY = 180 # фоновая непрозрачность поля имени NAMEBOX_X_PLUS_NOR = 100 # Additional Name Box X [Horizontal] for Normal Face Name Box NAMEBOX_X_PLUS_NEO = 180 # Additional Name Box X for Neo Face Name Box NAMEBOX_Y_PLUS = -9 # Move Name Box & Text Vertically NAMEBOX_Y_PLUS_TOP = 140 # Move Name Box & Text Vertically if message box is on Top NAMEBOX_TEXT_FONT = Font.default_name # название шрифта текста имени NAMEBOX_TEXT_SIZE = Font.default_size # размер шрифта текста имени NAMEBOX_TEXT_HEIGHT_PLUS = 2 # увеличить высоту текста имени (For Big Size Text) NAMEBOX_TEXT_BOLD = false # текст в поле имени - курсивом NAMEBOX_TEXT_OUTLINE = false # Make Black Outline around Text (Good with Opacity = 0) NAMEBOX_TEXT_DEFAULT_COLOR = [255,255,255]#[255,255,255] # [Red,Green,Blue]: Name Text Color (RGB) # You can easily find color code for RGB (Red Green Blue) color in Google # You are allow to change color in game by call script: # $nms.color = [Red,Green,Blue] NAMEBOX_TEXT_AFTER_NAME = "" # добавить текст после имени, для отключения оставьте "". NAMEBOX_BOX_WIDTH_PLUS = 6 # увеличить ширину поля имени NAMEBOX_BOX_HEIGHT_PLUS = 7 # увеличить высоту поля имени MOVE_NAMEBOX = true # (true/false) двигать поле текста вправо при показе лица справа. # # ? TEXT TYPING SOUND SYSTEM # TYPING_SOUND = false # использовать звук печатающей машинки? # $nms.typ_se = true/false TYPING_SOUND_FILE = 'Open1' # имя файла звука печати (должен быть в папке 'Audio/SE') # $nms.typ_file = 'filename' TYPING_SOUND_VOLUME = 40 # громкость звука печати # $nms.typ_vol = 0 - 100 TYPING_SOUND_SKIP = 4 # сколько кадров пропустить перед новым проигрыванием звука печати? # $nms.typ_skip = (число кадров) # # [END] SETUP SCRIPT PART # end $worale = {} if $worale == nil $worale["NMS"] = true class Window_Message < Window_Selectable # # ? ALIAS # alias wor_nms_winmsg_ini initialize def initialize wor_nms_winmsg_ini $nms = $game_message contents.font.name = $nms.nms_fontname contents.font.size = $nms.nms_fontsize @face = Sprite.new @face.z = self.z + 5 @nametxt = Sprite.new @nametxt.z = self.z + 15 @namebox = nil @ori_x = 0 @name_text = nil @showtime = 0 # To check if this is first time it shows message (For face) @face_data = Array.new(3) @face_data_old = Array.new(3) #NMS 2++ self.width = $nms.msg_w self.height = $nms.msg_h update_window_size(true) self.x = $nms.msg_x @typse_count = 0 @delay_text = 0 @no_press_input = false @biggest_text_height = 0 @all_text_width = 0 @animf_dl = 0 # Animation Face Delay @animf = false # Using Animation Face? @animf_ind = 0 # Animation Face Index @pop = nil # Pop ID end # # ? ?? # def dispose super dispose_gold_window dispose_number_input_window dispose_back_sprite end # # ? EDITED # def update super if self.visible == true update_back_sprite update_gold_window update_number_input_window update_show_fast update_window_size update_animate_face if @animf @typse_count -= 1 if @typse_count > 0 if @name_text != nil draw_name(@name_text,self.x,self.y) end if @face.bitmap != nil # UPDATE FADE IN EFFECT if @face.opacity < 255 @face.opacity += FADE_SPEED end # UPDATE MOVE IN EFFECT if $nms.face_move and @ori_x != @face.x if (@ori_x > @face.x and @face.x + MOVE_SPEED < @ori_x) or (@ori_x < @face.x and @face.x - MOVE_SPEED > @ori_x) @face.x += MOVE_SPEED if @ori_x > @face.x @face.x -= MOVE_SPEED if @ori_x < @face.x else @face.x = @ori_x end end end end unless @opening or @closing if @wait_count > 0 @wait_count -= 1 elsif self.pause input_pause elsif self.active input_choice elsif @number_input_window.visible input_number elsif @text != nil if @delay_text > 0 @delay_text -= 1 else update_message end elsif continue? @showtime += 1 start_message open $game_message.visible = true else close @showtime = 0 if @face.bitmap != nil @face.bitmap.dispose end clear_namebox if @namebox != nil $game_message.visible = @closing end end end # # ? NEW # def update_window_size(direct = false, create_bitmap = true) if (self.width != $nms.msg_w or self.height != $nms.msg_h) or direct self.width = $nms.msg_w if $nms.msg_w > 32 self.height = $nms.msg_h if $nms.msg_h > 32 create_contents if create_bitmap end end # # ? ??????????? # def create_gold_window @gold_window = Window_Gold.new(384, 0) @gold_window.openness = 0 end # # ? ???????????? # def create_number_input_window @number_input_window = Window_NumberInput.new @number_input_window.visible = false end # # ? ?????????? # def create_back_sprite @back_sprite = Sprite.new @back_sprite.bitmap = @old_mback = Cache.system($game_message.mback) @back_sprite.opacity = @old_mback_opac = $game_message.mback_opac @back_sprite.visible = (@background == 1) @back_sprite.z = 190 end # # ? ??????????? # def dispose_gold_window @gold_window.dispose end # # ? ???????????? # def dispose_number_input_window @number_input_window.dispose end # # ? ?????????? # def dispose_back_sprite @back_sprite.dispose end # # ? ??????????? # def update_gold_window @gold_window.update end # # ? ???????????? # def update_number_input_window @number_input_window.update end # # ? ?????????? # def update_back_sprite @back_sprite.visible = (@background == 1) @back_sprite.y = y - 16 @back_sprite.opacity = $nms.mback_opac > openness ? openness : $nms.mback_opac @back_sprite.update end # # ? ????????? # def update_show_fast if self.pause or self.openness < 255 @show_fast = false elsif Input.trigger?(Input::C) and @wait_count < 2 and !@no_press_input @show_fast = true elsif not Input.press?(Input::C) @show_fast = false end if @show_fast and @wait_count > 0 @wait_count -= 1 end end # # ? ???????????????????? # def continue? return true if $game_message.num_input_variable_id > 0 return false if $game_message.texts.empty? if self.openness > 0 and not $game_temp.in_battle return false if @background != $game_message.background return false if @position != $game_message.position end return true end # # ? EDITED: NMS 2.2+ # def start_message @all_text_width = 0 @pop = nil @text = "" @text_line = $game_message.texts.size < $game_message.max_line ? $game_message.texts.size + 1 : MAX_LINE + 1 for i in 0...$game_message.texts.size # Change " " to "" (Spacing for choice) @text += "" if i >= $game_message.choice_start @text += $game_message.texts.clone + "\x00" end @item_max = $game_message.choice_max convert_special_characters reset_window update_window_size new_page end # # ? EDITED # def new_page @animf = false contents.clear if @face.bitmap != nil @face.bitmap.dispose end if $game_message.face_name.empty? @contents_x = TEXT_X_PLUS else nms_draw_new_face # CHECK FOR MOVE EFFECT @ori_x = @face.x if $nms.face_move and ((MOVE_ONLY_FIRST and @showtime <= 1) or (MOVE_ONLY_FIRST == false)) if $game_message.side == 0 or $game_message.side == 1 @face.x = 0 - @face.width else @face.x = Graphics.width end end @contents_x = get_x_face end @main_contents_x = @contents_x @contents_y = 0 @line_count = 0 @typse_count = 0 @show_fast = false @line_show_fast = false @pause_skip = false contents.font.color = text_color(0) @contents_x += CHOICE_INPUT_X_PLUS if $game_message.choice_max > 00 if @old_mback != Cache.system($nms.mback) or @old_mback_opac != $nms.mback_opac dispose_back_sprite; create_back_sprite end @no_press_input = false self.oy = 0 end # # ? EDITED # def new_line biggest = @biggest_text_height > WLH ? @biggest_text_height : WLH @contents_y += biggest if $nms.txt_scrl and @contents_y >= contents.height and @text != "" rect = Rect.new(0, biggest, contents.width, contents.height - biggest) cont_s = Bitmap.new(contents.width,contents.height) cont_s.blt(0, 0, contents, rect) rect_s = Rect.new(0,0,contents.width,contents.height) contents.clear_rect(0, 0, contents.width, contents.height) contents.blt(0, 0, cont_s, rect_s) @contents_y = rect.height cont_s.dispose @show_fast = false @no_press_input = true end @contents_x = @main_contents_x @contents_x += CHOICE_INPUT_X_PLUS if $game_message.choice_max > 0 @biggest_text_height = WLH @line_count += 1 @line_show_fast = false end # # ? EDITED # def convert_special_characters clear_namebox if @namebox != nil # Woratana's :: Quick Text @text.gsub!(/\\QT\[([0-9]+)\]/i) { $nms.qt[$1.to_i] } # # DEFAULT FEATURES # @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] } @text.gsub!(/\\N\[([0-9]+)\]/i) { $game_actors[$1.to_i].name } @text.gsub!(/\\C\[(.*?)\]/i) { "\x01{#{$1}}" } @text.gsub!(/\\G/i) { "\x02" } @text.gsub!(/\\\./) { "\x03" } @text.gsub!(/\\\|/) { "\x04" } @text.gsub!(/\\!/) { "\x05" } @text.gsub!(/\\>/) { "\x06" } @text.gsub!(/\\</) { "\x07" } @text.gsub!(/\\\^/) { "\x08" } @text.gsub!(/\\\\/) { "\\" } # # * NMS FEATURES!! # # Woratana's :: Draw Weapon Name + Icon @text.gsub!(/\\DW\[([0-9]+)\]/i) { "\x83[#{$data_weapons[$1.to_i].icon_index}]\x01{#{NMS_WEAPON_NAME_COLOR_ID}}\\nw[#{$1.to_i}]\x01{#{$nms.last_color}}"} # Woratana's :: Draw Item Name + Icon @text.gsub!(/\\DI\[([0-9]+)\]/i) { "\x83[#{$data_items[$1.to_i].icon_index}]\x01{#{NMS_ITEM_NAME_COLOR_ID}}\\ni[#{$1.to_i}]\x01{#{$nms.last_color}}" } # Woratana's :: Draw Armor Name + Icon @text.gsub!(/\\DA\[([0-9]+)\]/i) { "\x83[#{$data_armors[$1.to_i].icon_index}]\x01{#{NMS_ARMOR_NAME_COLOR_ID}}\\na[#{$1.to_i}]\x01{#{$nms.last_color}}"} # Woratana's :: Draw Skill Name + Icon @text.gsub!(/\\DS\[([0-9]+)\]/i) { "\x83[#{$data_skills[$1.to_i].icon_index}]\x01{#{NMS_ITEM_NAME_COLOR_ID}}\\ns[#{$1.to_i}]\x01{#{$nms.last_color}}"} # Woratana's :: Call Animation @text.gsub!(/\\ANI\[([0-9]+)\]/i) { "\x80[#{$1}]" } # Woratana's :: Call Balloon @text.gsub!(/\\BAL\[([0-9]+)\]/i) { "\x81[#{$1}]" } # Woratana's :: Call Common Event @text.gsub!(/\\CE\[([0-9]+)\]/i) { "\x82[#{$1}]" } # Woratana's :: Draw Icon @text.gsub!(/\\IC\[([0-9]+)\]/i) { "\x83[#{$1}]" } # Woratana's :: Map Name @text.gsub!(/\\MAP/i) { nms_get_map_name } # Woratana's :: Actor Class Name @text.gsub!(/\\NC\[([0-9]+)\]/i) { $data_classes[$game_actors[$1.to_i].class_id].name } # Woratana's :: Party Actor Name @text.gsub!(/\\NP\[([0-9]+)\]/i) { $game_party.members[($1.to_i - 1)].name } # Woratana's :: Monster Name @text.gsub!(/\\NM\[([0-9]+)\]/i) { $data_enemies[$1.to_i].name } # Woratana's :: Troop Name @text.gsub!(/\\NT\[([0-9]+)\]/i) { $data_troops[$1.to_i].name } # Woratana's :: Item Name @text.gsub!(/\\NI\[([0-9]+)\]/i) { $data_items[$1.to_i].name } # Woratana's :: Weapon Name @text.gsub!(/\\NW\[([0-9]+)\]/i) { $data_weapons[$1.to_i].name } # Woratana's :: Armor Name @text.gsub!(/\\NA\[([0-9]+)\]/i) { $data_armors[$1.to_i].name } # Woratana's :: Skill Name @text.gsub!(/\\NS\[([0-9]+)\]/i) { $data_skills[$1.to_i].name } # Woratana's :: Item Price @text.gsub!(/\\PRICE\[([0-9]+)\]/i) { $data_items[$1.to_i].price.to_s } # Woratana's :: Font Name Change @text.gsub!(/\\FN\[(.*?)\]/i) { "\x84[#{$1}]" } # Woratana's :: Font Size Change @text.gsub!(/\\FS\[(.*?)\]/i) { "\x85[#{$1}]" } # Woratana's :: Reset Font Name @text.gsub!(/\\REF/i) { "\x86" } # Woratana's :: Reset Font Size @text.gsub!(/\\RES/i) { "\x87" } # Woratana's :: BOLD Text @text.gsub!(/\\B/i) { "\x88" } # Woratana's :: ITALIC Text @text.gsub!(/\\I/i) { "\x89" } # Woratana's :: Text DELAY @text.gsub!(/\\DELAY\[([0-9]+)\]/i) { "\x90[#{$1}]"} # Woratana's :: Reset Text Delay @text.gsub!(/\\RED/i) { "\x91" } # Woratana's :: Turn On/Off Letter by Letter @text.gsub!(/\\LBL/i) { "\x92" } # Woratana's NeoFace System @text.scan(/\\SD\[([-,0-9]+)\]/i) if $1.to_s != "" $game_message.side = $1.to_i @text.sub!(/\\SD\[([-,0-9]+)\]/i) {} end # Woratana's :: Name Box @text.scan(/\\NB\[(.*?)\]/i) if $1.to_s != "" n_text = $1.to_s.gsub(/\x01\{(.*?)\}/i) {} # Clear If there's Color @name_text = n_text @text.sub!(/\\NB\[(.*?)\]/i) {} end # Woratana's :: Repeat Name Box @text.gsub!(/\\RNB\[(.*?)\]/i) do $game_message._name = $1.to_s a = "" end # NMS 2++ # Woratana's :: SHADOW Text @text.gsub!(/\\SH/i) { "\x93" } # Woratana's :: Cancel Skip Text Button @text.gsub!(/\\CB/i) { "\x94" } # Woratana's :: Wait X Frame @text.gsub!(/\\W\[([0-9]+)\]/i) { "\x95[#{$1}]" } # Woratana's :: Add Space X Pixel @text.gsub!(/\\SC\[([0-9]+)\]/i) { "\x96[#{$1}]" } # Woratana's :: Play SE @text.gsub!(/\\SE\[(.*?)\]/i) { "\x97[#{$1}]" } # Woratana's :: Play ME @text.gsub!(/\\ME\[(.*?)\]/i) { "\x98[#{$1}]" } # Woratana's :: Play BGM @text.gsub!(/\\BGM\[(.*?)\]/i) { "\x99[#{$1}]" } # Woratana's :: Start New Line @text.gsub!(/\\NL/i) { "\x09" } # Woratana's :: Turn ON/OFF Typing Sound @text.gsub!(/\\TYP/i) { "\x10" } # Woratana's :: Draw Picture @text.gsub!(/\\DP\[(.*?)\]/i) { "\x11[#{$1}]" } # Woratana's :: Draw Face @text.gsub!(/\\FA\{(.*?)\}/i) { "\x12{#{$1}}" } # Woratana's :: Temporary Width @text.scan(/\\WW\[([-,0-9]+)\]/i) if $1.to_s != '' $nms.msg_temp_w = $1.to_i @text.sub!(/\\WW\[([-,0-9]+)\]/i) {} end # Woratana's :: Temporary Height @text.scan(/\\WH\[([-,0-9]+)\]/i) if $1.to_s != '' $nms.msg_temp_h = $1.to_i @text.sub!(/\\WH\[([-,0-9]+)\]/i) {} end # Woratana's :: Temporary X @text.scan(/\\WX\[([-,0-9]+)\]/i) if $1.to_s != '' $nms.msg_temp_x = $1.to_i @text.sub!(/\\WX\[([-,0-9]+)\]/i) {} end # Woratana's :: Temporary Y @text.scan(/\\WY\[([-,0-9]+)\]/i) if $1.to_s != '' $nms.msg_temp_y = $1.to_i @text.sub!(/\\WY\[([-,0-9]+)\]/i) {} end # Woratana's :: Remove text list NMS_REMOVE_LIST.each {|i| @text.gsub!(/#{i}/i) {} } # Woratana's :: Pop Text @text.scan(/\\P\[(.*?)\]/i) if $1.to_s != "" @pop = $1.to_i contents.font.name = $nms.nms_fontname if contents.font.name != $nms.nms_fontname contents.font.size = $nms.nms_fontsize if contents.font.size != $nms.nms_fontsize a = @text.split(/\x00/) for i in 0..(a.size - 1) text_width = contents.text_size(a).width @all_text_width = text_width if @all_text_width < text_width end nms_draw_new_face if @face.bitmap != nil if get_x_face == 0 and MOVE_TEXT @all_text_width += (@face.width + TEXT_X_PLUS) else @all_text_width += get_x_face end @face.bitmap.dispose @face.bitmap = nil end @text.sub!(/\\P\[(.*?)\]/i) {} end @name_text = $game_message._name if @name_text == nil and $game_message._name != "" end # # ? EDIT: NMS 2.2++ # def reset_window @background = $game_message.background @position = $game_message.position if @background == 0 self.opacity = 255 else self.opacity = 0 end # Calculate Window X/Y and Size depends on Pop or normal message if @pop != nil $nms.msg_h = [((@text_line * WLH) + 8), $nms.msg_h_user].min $nms.msg_w = @all_text_width + 32 case @pop when 0 # Player set_window_xy($game_player) when -1 # This Event set_window_xy($game_map.events[$game_message.event_id]) else # Event ID set_window_xy($game_map.events[@pop]) end else $nms.msg_h = ((((@text_line * WLH) + 8) > $nms.msg_h_user) and ($nms.txt_scrl == false)) ? ((@text_line * WLH) + 8) : $nms.msg_h_user $nms.msg_w = NMS_MSGWIN_WIDTH self.x = $nms.msg_x case @position when 0 # Down self.y = 0 @gold_window.y = 360 when 1 # Middle self.y = ((Graphics.height - $nms.msg_h) / 2) @gold_window.y = 0 when 2 # Up self.y = Graphics.height - $nms.msg_h @gold_window.y = 0 end end # Temporary Size & Position if !$nms.msg_temp_w.nil? $nms.msg_w = $nms.msg_temp_w $nms.msg_temp_w = nil end if !$nms.msg_temp_h.nil? $nms.msg_h = $nms.msg_temp_h $nms.msg_temp_h = nil end if !$nms.msg_temp_x.nil? self.x = $nms.msg_temp_x $nms.msg_temp_x = nil end if !$nms.msg_temp_y.nil? self.y = $nms.msg_temp_y $nms.msg_temp_y = nil end # Fix Window Position if it's out of screen self.x = 0 if self.x < 0 self.x = Graphics.width - $nms.msg_w if (self.x + $nms.msg_w) > Graphics.width self.y = 0 if self.y < 0 self.y = Graphics.height - $nms.msg_h if (self.y + $nms.msg_h) > Graphics.height end # # ? SET Window XY for Pop Message # def set_window_xy(chara) char_x = chara.screen_x char_y = chara.screen_y self.x = char_x - ($nms.msg_w / 2) self.y = ((char_y - 32 - $nms.msg_h) >= 0) ? (char_y - 32 - $nms.msg_h) : (char_y + 32) end # # ? ???????? # def terminate_message self.active = false self.pause = false self.index = -1 @gold_window.close @number_input_window.active = false @number_input_window.visible = false $game_message.main_proc.call if $game_message.main_proc != nil $game_message.clear end # # ? EDITED # def update_message loop do c = @text.slice!(/./m) case c when nil finish_message break when "\x00" new_line if !$nms.txt_unl if @line_count >= $game_message.max_line unless @text.empty? self.pause = true break end end when "\x80" @text.sub!(/\[([0-9]+)\]/, "") $game_map.events[$game_message.event_id].animation_id = $1.to_i when "\x81" @text.sub!(/\[([0-9]+)\]/, "") $game_map.events[$game_message.event_id].balloon_id = $1.to_i when "\x82" @text.sub!(/\[([0-9]+)\]/, "") a = $game_map.interpreter.params[0] $game_map.interpreter.params[0] = $1.to_i $game_map.interpreter.command_117 $game_map.interpreter.params[0] = a when "\x83" @text.sub!(/\[([0-9]+)\]/, "") bitmap = Cache.system("Iconset") icon_index = $1.to_i # Check for Auto Cut new_line if $nms.txt_cut and (@contents_x + 24 > contents.width) # Draw ICON draw_icon(icon_index, @contents_x, @contents_y, true) @contents_x += 24 when "\x84" @text.sub!(/\[(.*?)\]/, "") $nms.nms_fontname = $1.to_s next when "\x85" @text.sub!(/\[([0-9]+)\]/, "") $nms.nms_fontsize = $1.to_i; next when "\x86" $nms.nms_fontname = NMS_FONT_NAME; next when "\x87" $nms.nms_fontsize = NMS_FONT_SIZE; next when "\x88" contents.font.bold = contents.font.bold == true ? false : true next when "\x89" contents.font.italic = contents.font.italic == true ? false : true next when "\x90" @text.sub!(/\[([0-9]+)\]/, "") $nms.text_delay = $1.to_i; next when "\x91" $nms.text_delay = NMS_DELAY_PER_LETTER; next when "\x92" $nms.lbl = $nms.lbl == true ? false : true; next when "\x93" contents.font.shadow = contents.font.shadow == true ? false : true next when "\x94" @no_press_input = @no_press_input == true ? false : true next when "\x95" @text.sub!(/\[([0-9]+)\]/, "") @wait_count = $1.to_i break when "\x96" @text.sub!(/\[([0-9]+)\]/, "") @contents_x += $1.to_i next when "\x97" @text.sub!(/\[(.*?)\]/, "") RPG::SE.new($1).play when "\x98" @text.sub!(/\[(.*?)\]/, "") RPG::ME.new($1).play when "\x99" @text.sub!(/\[(.*?)\]/, "") RPG::BGM.new($1).play when "\x09" new_line when "\x10" $nms.typ_se = !$nms.typ_se when "\x11" @text.sub!(/\[(.*?)\]/, "") bitmap = Cache.system($1.to_s) rect = Rect.new(0,0,0,0) rect.width = bitmap.width rect.height = bitmap.height # Check for Auto Cut & Scroll if (@contents_x + bitmap.width > contents.width) if $nms.txt_cut; new_line elsif $nms.txt_scrl_hori; nms_scroll_hori(bitmap.width) end end # Draw Image self.contents.blt(@contents_x, @contents_y, bitmap, rect) @contents_x += bitmap.width @biggest_text_height = bitmap.height if bitmap.height > @biggest_text_height bitmap.dispose when "\x12" @text.sub!(/\{(.*?)\}/, "") a = $1.to_s.split(',') $nms.face_name = a[0] $nms.face_index = a[1].to_i $nms.side = a[2].to_i unless a[2].nil? nms_draw_new_face @ori_x = @face.x when "\x01" @text.sub!(/\{(.*?)\}/, "") color_code = $1.to_s if color_code.include?('#') color_code.sub!(/([0123456789ABCDEF]+)/, "") contents.font.color = get_hex($1) else $nms.last_color = color_code.to_i contents.font.color = text_color($nms.last_color) end next when "\x02" @gold_window.refresh @gold_window.open when "\x03" @wait_count = 15 break when "\x04" @wait_count = 60 break when "\x05" self.pause = true break when "\x06" @line_show_fast = true when "\x07" @line_show_fast = false when "\x08" @pause_skip = true else contents.font.name = $nms.nms_fontname if contents.font.name != $nms.nms_fontname contents.font.size = $nms.nms_fontsize if contents.font.size != $nms.nms_fontsize c_width = contents.text_size(c).width # Check for Text Cut & Scroll Horizontal if (@contents_x + c_width > contents.width) if $nms.txt_cut; new_line elsif $nms.txt_scrl_hori nms_scroll_hori(c_width) @wait_count = $nms.txt_scrl_hori_delay @text = c + @text return end end nms_line_height = contents.text_size(c).height contents.draw_text(@contents_x, @contents_y, 40, nms_line_height, c) @contents_x += c_width # Change Biggest Text Height @biggest_text_height = nms_line_height if nms_line_height > @biggest_text_height # Play Typing Sound if $nms.typ_se and @typse_count <= 0 RPG::SE.new($nms.typ_file, $nms.typ_vol).play @typse_count += $nms.typ_skip end #Show Fast & Text Delay @show_fast = true if $nms.lbl == false @delay_text += $nms.text_delay end break unless @show_fast or @line_show_fast end end # # ? ?????????? # def finish_message if $game_message.choice_max > 0 start_choice elsif $game_message.num_input_variable_id > 0 start_number_input elsif @pause_skip terminate_message else self.pause = true end @wait_count = 10 @text = nil end # # ? ?????? # def start_choice self.active = true self.index = 0 end # # ? EDITED # def start_number_input digits_max = $game_message.num_input_digits_max number = $game_variables[$game_message.num_input_variable_id] @number_input_window.digits_max = digits_max @number_input_window.number = number if $game_message.face_name.empty? or MOVE_TEXT == false @number_input_window.x = x - 23 else case $game_message.side when 0 @number_input_window.x = (x + 112) - 23 when 1 @number_input_window.x = (x + text_x) - 23 when 2 @number_input_window.x = x - 23 when -1 @number_input_window.x = x - 23 end end @number_input_window.x += CHOICE_INPUT_X_PLUS @number_input_window.y = y + @contents_y @number_input_window.active = true @number_input_window.visible = true @number_input_window.update end # # ? EDITED # def update_cursor if @index >= 0 if $game_message.face_name.empty? x = TEXT_X_PLUS else x = get_x_face end y = ($game_message.choice_start + @index) * WLH # CHANGE WIDTH OF CURSOR FOR CHOICE SELECT if $game_message.face_name.empty? or MOVE_TEXT == false facesize = x else facesize = get_x_face facesize += @face.width if $game_message.side == 2 facesize += @face.width + 16 if $game_message.side == -1 end self.cursor_rect.set(x, y, contents.width - facesize, WLH) else self.cursor_rect.empty end end # # ? ????????? # def input_pause if Input.trigger?(Input:: or Input.trigger?(Input::C) self.pause = false if @text != nil and not @text.empty? new_page if @line_count >= $game_message.max_line else terminate_message end end end # # ? ???????? # def input_choice if Input.trigger?(Input:: if $game_message.choice_cancel_type > 0 Sound.play_cancel $game_message.choice_proc.call($game_message.choice_cancel_type - 1) terminate_message end elsif Input.trigger?(Input::C) Sound.play_decision $game_message.choice_proc.call(self.index) terminate_message end end # # ? ??????? # def input_number if Input.trigger?(Input::C) Sound.play_decision $game_variables[$game_message.num_input_variable_id] = @number_input_window.number $game_map.need_refresh = true terminate_message end end end #============================================================================== # NMS +[ADD ON]+ WINDOW_MESSAGE_CLASS # #============================================================================== class Window_Message < Window_Selectable # Return X for Text def get_x_face if MOVE_TEXT == true case $game_message.side when 0 return 112 + TEXT_X_PLUS when 1 return text_x when 2 return TEXT_X_PLUS else return TEXT_X_PLUS end else return TEXT_X_PLUS end end def text_x return @face.width + TEXT_X_PLUS end # Clear Name Box & Name Text def clear_namebox @nametxt.bitmap.dispose @namebox.dispose @namebox = nil @name_text = nil end def nms_get_map_name mapdata = load_data("Data/MapInfos.rvdata") map_id = $game_map.map_id return mapdata[map_id].name end # # DRAW FACE [Both Systems] METHOD # def draw_face2(face_name, x, y, index = 0, animf = false, animf_index = 0, animf_max = 1, nofade = false) if animf # Use Animated Face bitmap = Cache.face(face_name) rect = Rect.new(0,0,0,0) rect.width = (bitmap.width / animf_max) rect.height = bitmap.height rect.x = animf_index * rect.width rect.y = 0 @face.bitmap = Bitmap.new(rect.width,rect.height) @face.bitmap.blt(0,0,bitmap,rect) bitmap.dispose elsif $game_message.side == 0 or $game_message.side == -1 or EightFaces_File # USE 8 FACES PER FILE bitmap = Cache.face(face_name) rect = Rect.new(0,0,0,0) rect.width = (bitmap.width / 4) rect.height = (bitmap.height / 2) rect.x = index % 4 * rect.width rect.y = index / 4 * rect.height @face.bitmap = Bitmap.new(rect.width,rect.height) @face.bitmap.blt(0,0,bitmap,rect) bitmap.dispose else # USE 1 FACES PER FILE @face.bitmap = Cache.face(face_name) end # SET X/Y OF FACE DEPENDS ON FACE SIDE if $game_message.side == 1 @face.mirror = false @face.x = x + 6 @face.y = y - 6 + height - @face.height elsif $game_message.side == 2 @face.mirror = true @face.x = x + ((self.width - 6) - @face.width) @face.y = y - 6 + height - @face.height elsif $game_message.side == 0 @face.mirror = false @face.x = x + 16 @face.y = y - 16 + height - @face.height elsif $game_message.side == -1 @face.mirror = true @face.x = x + self.contents.width - @face.width + 16 @face.y = y - 16 + height - @face.height end @face.x += FACE_X_PLUS @face.y += FACE_Y_PLUS @face_data = [face_name, index, $game_message.side] if @face_data != @face_data_old and FADE_MOVE_WHEN_USE_NEW_FACE; @showtime = 1; @face_data_old = @face_data; end @face.opacity = 0 if !nofade and ($nms.face_fade == true and ((FADE_ONLY_FIRST and @showtime <= 1) or (FADE_ONLY_FIRST == false))) end # # DRAW NAME BOX METHOD # def draw_name(name,x,y) name = name + NAMEBOX_TEXT_AFTER_NAME a = Bitmap.new(33,33) a.font.name = NAMEBOX_TEXT_FONT a.font.size = NAMEBOX_TEXT_SIZE rect = a.text_size(name) a.dispose @nametxt.bitmap = Bitmap.new(16 + rect.width, rect.height + NAMEBOX_TEXT_HEIGHT_PLUS) @nametxt.x = x + 8 if $game_message.side == 1 or $game_message.side == 2 @nametxt.x += NAMEBOX_X_PLUS_NEO else @nametxt.x += NAMEBOX_X_PLUS_NOR end @nametxt.y = y - 20 + ($game_message.position == 0 ? NAMEBOX_Y_PLUS_TOP : NAMEBOX_Y_PLUS) namebox_x_plus = ($game_message.side == 1 or $game_message.side == 2) ? NAMEBOX_X_PLUS_NEO : NAMEBOX_X_PLUS_NOR @nametxt.x = ((self.x + $nms.msg_w) - namebox_x_plus - @nametxt.width) if MOVE_NAMEBOX and ($game_message.side == 2 or $game_message.side == -1) @namebox = Window.new @namebox.windowskin = Cache.system(NAMEBOX_SKIN) @namebox.z = self.z + 10 @namebox.opacity = case @background when 0; NAMEBOX_OPACITY when 1; NAMEBOX_OPACITY_DIM_BG when 2; NAMEBOX_OPACITY_NO_BG end @namebox.back_opacity = NAMEBOX_BACK_OPACITY @namebox.openness = 255 @namebox.x = @nametxt.x - NAMEBOX_BOX_WIDTH_PLUS @namebox.y = @nametxt.y - NAMEBOX_BOX_HEIGHT_PLUS @namebox.width = @nametxt.bitmap.width + (NAMEBOX_BOX_WIDTH_PLUS * 2) @namebox.height = @nametxt.bitmap.height + (NAMEBOX_BOX_HEIGHT_PLUS * 2) # Fixed position bug @namebox.x = 0 if @namebox.x < 0 @namebox.x = (Graphics.width - @namebox.width) if (@namebox.x + @namebox.width) > Graphics.width @nametxt.bitmap.font.name = NAMEBOX_TEXT_FONT @nametxt.bitmap.font.size = NAMEBOX_TEXT_SIZE @nametxt.bitmap.font.bold = NAMEBOX_TEXT_BOLD if NAMEBOX_TEXT_OUTLINE == true # MAKE TEXT OUTLINE old_shadow = @nametxt.bitmap.font.shadow @nametxt.bitmap.font.color = Color.new(0,0,0) @nametxt.bitmap.draw_text(0,2,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1) @nametxt.bitmap.draw_text(0,0,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1) @nametxt.bitmap.draw_text(2,0,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1) @nametxt.bitmap.draw_text(2,2,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1) @nametxt.bitmap.font.shadow = old_shadow end @nametxt.bitmap.font.color = Color.new($game_message.color[0],$game_message.color[1],$game_message.color[2]) @nametxt.bitmap.draw_text(1,1,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1) @name_text = nil end # # DRAW NEW FACE # def nms_draw_new_face # Setup Face Name / Index name = $game_message.face_name index = $game_message.face_index animf_test = name.sub(/\[([0-9]+)\]/, "") # Animated? @animf = $1.to_i > 0 ? true : false @animf_maxind = $1.to_i @animf_ind = 0 @animf_dl = $nms.animf_delay # CALL DRAW FACE METHOD draw_face2(name, self.x, self.y, index, @animf, @animf_ind, @animf_maxind) end # # UPDATE ANIMATION FACE # def update_animate_face if (!self.pause or $nms.animf_cont) @animf_dl -= 1 if @animf_dl <= 0 @animf_ind = (@animf_ind + 1) % @animf_maxind @animf_dl = $nms.animf_delay draw_face2($game_message.face_name, self.x, self.y, index, @animf, @animf_ind, @animf_maxind, true) end elsif @animf_ind != 0 @animf_ind = 0 draw_face2($game_message.face_name, self.x, self.y, index, @animf, @animf_ind, @animf_maxind, true) end end # # SCROLL TEXT HORIZONTAL # def nms_scroll_hori(scr_width) biggest = @biggest_text_height > WLH ? @biggest_text_height : WLH rect = Rect.new(0, @contents_y, contents.width, biggest) bitmap = Bitmap.new(rect.width, rect.height) bitmap.blt(0, 0, contents, rect) contents.clear_rect(rect) rect = Rect.new(0, 0, rect.width, rect.height) contents.blt(0 - scr_width, @contents_y, bitmap, rect) contents.clear_rect(0, 0, @face.width, @face.height) if @face.bitmap != nil bitmap.dispose @contents_x = @contents_x - scr_width end # # GET HEX COLOR by RPG & ERZENGEL # def get_hex(n) red = 0 green = 0 blue = 0 if n.size != 6 print("Hex triplets must be six characters long!\nNormal color will be used.") return normal_color end for i in 1..6 sliced = n.slice!(/./m) value = hexconvert(sliced) case i when 1; red += value * 16 when 2; red += value when 3; green += value * 16 when 4; green += value when 5; blue += value * 16 when 6; blue += value end end return Color.new(red, green, blue) end def hexconvert(n) case n when "0"; return 0 when "1"; return 1 when "2"; return 2 when "3"; return 3 when "4"; return 4 when "5"; return 5 when "6"; return 6 when "7"; return 7 when "8"; return 8 when "9"; return 9 when "A"; return 10 when "B"; return 11 when "C"; return 12 when "D"; return 13 when "E"; return 14 when "F";return 15 else; return -1 end end end # CLASS END #============================================================================== # NMS +[ADD ON]+ OTHER CLASS # #============================================================================== # STORE variables here~* class Game_Message attr_accessor :nms_fontname, :nms_fontsize, :event_id, :side, :color, :_name, :last_color, :text_delay, :lbl, :msg_w, :msg_h, :msg_x, :max_line, :nms_face_name, :nms_face_index, :next_msg, :typ_se, :typ_file, :typ_skip, :typ_vol, :mback, :mback_opac, :qt, :txt_scrl, :msg_h_user, :animf_delay, :animf_cont, :txt_cut, :txt_unl, :txt_scrl_hori, :txt_scrl_hori_delay, :face_fade, :face_move, :msg_temp_y, :msg_temp_x, :msg_temp_h, :msg_temp_w alias wor_nms_old_ini initialize def initialize create_nms_data wor_nms_old_ini end def create_nms_data # NFS @side = Window_Base::DEFAULT_FACE_SIDE @_name = "" @color = Window_Base::NAMEBOX_TEXT_DEFAULT_COLOR # NMS @last_color = 0 @nms_fontname = Window_Base::NMS_FONT_NAME @nms_fontsize = Window_Base::NMS_FONT_SIZE @event_id = 0 @text_delay = Window_Base::NMS_DELAY_PER_LETTER @lbl = true @msg_w = Window_Base::NMS_MSGWIN_WIDTH @msg_h = @msg_h_user = Window_Base::NMS_MSGWIN_MIN_HEIGHT @msg_x = Window_Base::NMS_MSGWIN_X @max_line = Window_Base::NMS_MAX_LINE @nms_face_name = "" @nms_face_index = 1 @next_msg = false @typ_se = Window_Base::TYPING_SOUND @typ_file = Window_Base::TYPING_SOUND_FILE @typ_skip = Window_Base::TYPING_SOUND_SKIP @typ_vol = Window_Base::TYPING_SOUND_VOLUME @mback = Window_Base::NMS_MSG_BACK @mback_opac = Window_Base::NMS_MSG_BACK_OPACITY @qt = Array.new @txt_scrl = Window_Base::NMS_TEXT_SCROLL @animf_delay = Window_Base::ANIMATE_FACE_DELAY @animf_cont = Window_Base::ANIMATE_FACE_CONTINUE @txt_cut = Window_Base::NMS_TEXT_AUTO_CUT @txt_scrl_hori = Window_Base::NMS_TEXT_AUTO_SCROLL_HORIZONTAL @txt_scrl_hori_delay = Window_Base::NMS_TEXT_AUTO_SCROLL_HORIZONTAL_DELAY @txt_unl = Window_Base::NMS_USER_NEW_LINE @face_fade = Window_Base::FADE_EFFECT @face_move = Window_Base::MOVE_EFFECT @msg_temp_x = nil @msg_temp_y = nil @msg_temp_h = nil @msg_temp_w = nil end end class Game_Map attr_accessor :interpreter end class Game_Interpreter attr_accessor :params end class Game_Interpreter def command_101 unless $game_message.busy $game_message.event_id = @event_id $game_message.face_name = @params[0] $game_message.face_index = @params[1] $game_message.background = @params[2] $game_message.position = @params[3] next_msg = true loop do if @list[@index].code == 101 and $game_message.max_line > $game_message.texts.size and next_msg @index += 1 else break end next_msg = false while @list[@index].code == 401 and $game_message.max_line > $game_message.texts.size next_msg = $game_message.next_msg $game_message.texts.push(@list[@index].parameters[0]) @index += 1 end end if @list[@index].code == 102 setup_choices(@list[@index].parameters) elsif @list[@index].code == 103 setup_num_input(@list[@index].parameters) end set_message_waiting end return false end def setup_choices(params) if $game_message.texts.size <= $game_message.max_line - params[0].size $game_message.choice_start = $game_message.texts.size $game_message.choice_max = params[0].size for s in params[0] $game_message.texts.push(s) end $game_message.choice_cancel_type = params[1] $game_message.choice_proc = Proc.new { |n| @branch[@indent] = n } @index += 1 end end end В сообщение добавить \sd[2] и указать лицо героя (оно должно лежать в папку Face)(внимание изображения из стандартного набора не будут работать если они будут идти пачкой) |
Администратор запретил публиковать записи гостям.
|
|
Время создания страницы: 1.076 секунд