Ребят а нет некакого скрипта для прокачки оружия.
Ну например.
Оружие получает опыт или что нить вроде этого.
Ребят а нет некакого скрипта для прокачки оружия.
Ну например.
Оружие получает опыт или что нить вроде этого.
Привет, может кто подсказать где можно найти скрип: Суть в том, чтобы при получение уровня можно было выбрать 1 из X способностей? add:на VX Ace
Последний раз редактировалось Po4ka; 04.04.2012 в 22:39.
Здрасте всем, я нуб, работаю в VX, пока делаю все стандартным набором, но нужен скрипт, который меняет диалоговое окно, или хотя бы скрипт, который будет показывать портрет текущего пероснажа, чем проще тем лучше.
ЗЫ посоветуйте ПРОСТУЮ интересную боевку и с чего начать систему освещения ?
спасибо заранее ))
вот скрипт сообщенийКод:#=============================================================== # + [VX] [ NMS - Neo Message System 3.0 Beta ] + #-------------------------------------------------------------- # >> by Woratana [woratana@hotmail.com] # >> Thaiware RPG Maker Community # >> Special Thanks: Mako, Yatzumo, Straycat, Erzengel, RPG, # Dubalex, Modern Algebra, Equilibrium Keeper #-------------------------------------------------------------- # Released on: 07/06/2008 (D-M-Y) #-------------------------------------------------------------- # Include: NEO-FACE SYSTEM ADVANCE (Version 3.0) by Woratana #=============================================================== # Note: # - This script started when VX English is not coming out yet, # so some of comments here are still be Japanese :) # - This script is included newest version of Neo-Face System, # so you have to remove old Neo-Face System if you have it. =begin ============================================= + NMS 3 Beta + [07/06/2008] - Add 'Text Remove List' - Change window size & position temporarily - You can now call script: $game_message.create_nms_data to reset NMS data or create NMS data for old save file - Fixed bug for write actor's class name - Fixed bug for out-of-screen name box - Add NAMEBOX_Y_PLUS_TOP to fix out-of-screen name box when show message on Top - Set name box's opacity for different types of message background - Auto fix if message window is out of screen - You can draw new face while message is running, and also set new face size ============================================= ============================================= + 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]: Fixed Name Box Bug ============================================= ===================================== + NMS 2.0 FEATURES LIST + ===================================== Use these features in message box ---------------------------------- >> NMS MESSAGE FEATURES ---------------------------------- -------------------------- >> [SPECIAL CALL] PART -------------------------- \ce[Common Event ID] << Run Common Event immediately \ani[Animation ID] << Show Animation on 'This Event' \bal[Balloon ID] << Show Ballon on 'This Event' * Note: This Event = Event that show this message -------------------------- >> [MESSAGE WINDOW] PART -------------------------- * temporary properties will be using only one time \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 text is the message box that will show over character and has size equal to message size You can call pop text by put this in message \p[character] * character: Character you want to show message box over~ 0 for Player -1 for This Event 1 or more for that event ID ---------------------------------------- >> +[ QUICK TEXT ]+ a.k.a. Shortcut ---------------------------------------- Add & Call your very long text (or) text that you use many times by shortcut. You can put special syntax in it, e.g. '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] PART -------------------------- \dw[weapon ID] << Draw Weapon Icon + Weapon Name \da[armor ID] << Draw Armor Icon + Armor Name \di[item ID] << Draw Item Icon + Item Name \ds[skill ID] << Draw Skill Icon + Skill Name \ic[icon ID] << Draw Icon \dp[image_name] << Draw Image from folder 'System' -------------------------- >> [WRITE TEXT] PART -------------------------- \map << Write Map Name \nc[actor ID] << Write Class of Actor \np[1 to 4 (order in party)] << Write Name of actor in that order \nm[monster ID] << Write Monster Name \nt[troop ID] << Write Troop Name \nw[weapon ID] << Write Weapon Name \na[armor ID] << Write Armor Name \ns[skill ID] << Write Skill Name \ni[item ID] << Write Item Name \price[item ID] << Write Item Price -------------------------- >> [TEXT EFFECT] PART -------------------------- \fn[Font Name] (or) << Change Font Name \fs[Font Size] << Change Font Size \delay[Delay] << Change text Delay per letter (in frame, 60 frames = about 1 sec) \ref << Reset Font Name \res << Reset Font Size \red << Reset text Delay \b << Turn on/off BOLD text \i << Turn on/off ITALIC text \sh << Turn on/off SHADOW text \lbl << Turn on/off LETTER-BY-LETTER Mode (default is ON) -------------------------- >> [NAME BOX & FACE] PART -------------------------- \nb[Name] << Show Name Box in current message window \rnb[Name] (or) $nms._name = 'Name' << Repeat Name Box: Name Box with this name will show again and again in next messages unless there is \nb[Name] in that message, or you've stop this option by type \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] << Change Name Text Color: Put RGB Color in, e.g. [255,100,200] \fa[face_file_name, face_index] (or) \fa[face_file_name, face_index, new_side] << Draw new face while message is running~ face_file_name: Face image's name face_index: Index of the face in image (0 - 7) new_side: Face side you want to change to -------------------------- >> [SOUND] PART -------------------------- \se[filename] << Play SE \me[filename] << Play ME \bgm[filename] << Play BGM \typ << Turn on/off typing sound -------------------------- >> [Misc.] PART -------------------------- \cb << Turn on/off cancel skip text feature (Player can/can't press [Enter] to skip text) \nl << Start new line \sc[x] << Create blank space x pixel \w[x] << Wait x frames \c[#XXXXXX] << Use Hex Color for text ---------------------------------- >> VX DEFAULT MESSAGE FEATURES ---------------------------------- \v[variable ID] << Write value from variable \n[actor ID] << Write actor's name \c[color ID] << Change text color (Color ID is from Down-right corner in Windowskin) \g << Show gold window \. << Wait 15 frames (about 1/4 sec) \| << Wait 60 frames (about 1 sec) \! << Wait for player to press button to continue message \> << Skip letter-by-letter in current line \< << Stop 'skip letter-by-letter' in current line \^ << Close message box immediately \\ << Write '\' =end class Window_Base #--------------------------------- # [START] SETUP SCRIPT PART #------------------------------- #--------------------------------- # ? MESSAGE SYSTEM #------------------------------- NMS_FONT_NAME = "ArbatDi" # Default Font Name NMS_FONT_SIZE = 20 # Default Font Size # 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 # Delay between letter when showing text letter-by-letter # Delay is in frame, 60 frames = 1 second # $nms.text_delay = (number) TEXT_X_PLUS = 0 # Move Text Horizontally CHOICE_INPUT_X_PLUS = 0 # Move Choices Text and Input Number Text Horizontally # [NEW SETTING] # NMS_MSGWIN_X = 0 # Default Message Window X # $nms.msg_x = (number) NMS_MSGWIN_WIDTH = 544 # Default Message Window Width # $nms.msg_w = (number) NMS_MSGWIN_MIN_HEIGHT = 128 # Default & Minimum Message Window Height # $nms.msg_h_user = (number) NMS_MAX_LINE = 4 # Max Message Lines to display per page # $nms.max_line = (number) NMS_GET_NEXT_LINE = false # Get messages from next message command, if box is not full # $nms.next_msg = true/false NMS_MSG_BACK = "MessageBack" # Message Back Image File Name (For 'Dim Background' Message) # (Must be in folder 'System') # $nms.mback = 'Image Name' NMS_MSG_BACK_OPACITY = 255 # message Back's Opacity # $nms.mback_opac = (0 - 255) NMS_TEXT_SCROLL = false # Use Vertical Text Scroll? # $nms.txt_scrl = true/false NMS_TEXT_AUTO_CUT = false # Text will automatically start new line if that line is full # (Some bug, it may cut in the middle of word..) # $nms.txt_cut = true/false NMS_TEXT_AUTO_SCROLL_HORIZONTAL = false # Text will automatically scroll to the left if line is full # This will not work if NMS_TEXT_AUTO_CUT is true # $nms.txt_scrl_hori = true/false NMS_TEXT_AUTO_SCROLL_HORIZONTAL_DELAY = 1 # Scroll Delay (in frame) # $nms.txt_scrl_hori_delay = (number) NMS_USER_NEW_LINE = false # Text will goes in new line ONLY when type \nl # (Good for Text Auto Cut) # $nms.txt_unl = true/false NMS_REMOVE_LIST = [] # List of text that you want to remove from message # for example, NMS_REMOVE_LIST = ['test', '[MS]'] # will remove text 'test' and '[MS]' before show message # Note that this is NOT case sensitive #--------------------------------- # ? FACE SYSTEM #------------------------------- #------------------------------------------------ # ** BOTH FACE SYSTEMS SETUP #---------------------------------------------- DEFAULT_FACE_SIDE = 0 # Default Face Side when game start~ # (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 # Move Face Horizontally (Left: -, Right: +) FACE_Y_PLUS = 0 # Move Face Vertically (Up: -, Down: +) MOVE_TEXT = true # (true/false) # Move text to right side of face, when showing face in left side. #------------------------------------- # **SHOW FACE EFFECT # * For both Face Systems * #---------------------------------- FADE_EFFECT = true # Turn on/off fade effect (true/false) # $nms.face_fade = true/false FADE_SPEED = 20 # Speed up face's fade effect by increase this number FADE_ONLY_FIRST = true # Use Fade Effect only in first message window? 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 = false # 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 # Use 8 Faces per file (or) 1 Face per file (true/false) #------------------------------- # ** ANIMATED FACE SYSTEM #---------------------------- ANIMATE_FACE_DELAY = 6 # Face animate every _ frame # $nms.animf_delay = (number) ANIMATE_FACE_CONTINUE = false # Face continue to animate after text stop writing? # $nms.animf_cont = (true/false) #------------------------------------ # ? NAME BOX SYSTEM #---------------------------------- NAMEBOX_SKIN = 'Window' # Windowskin of Name Box (In folder 'Graphics/System') NAMEBOX_OPACITY = 255 # Name Box Opacity when using 'Normal Background' message # (Lowest 0 - 255 Highest) NAMEBOX_OPACITY_DIM_BG = 0 # Name Box Opacity when using 'Dim Background' NAMEBOX_OPACITY_NO_BG = 0 # Name Box Opacity when using 'Transparent' Background NAMEBOX_BACK_OPACITY = 180 # Name Box Background Opacity NAMEBOX_X_PLUS_NOR = 104 # Additional Name Box X [Horizontal] for Normal Face Name Box NAMEBOX_X_PLUS_NEO = 160 # Additional Name Box X for Neo Face Name Box NAMEBOX_Y_PLUS = 0 # Move Name Box & Text Vertically NAMEBOX_Y_PLUS_TOP = 140 # Move Name Box & Text Vertically if message box is on Top NAMEBOX_TEXT_FONT = "ArbatDi" # Name Text Font's Name NAMEBOX_TEXT_SIZE = 19 # Name Text Font's Size NAMEBOX_TEXT_HEIGHT_PLUS = 2 # Increase Name Text Height (For Big Size Text) NAMEBOX_TEXT_BOLD = false # Make Text in Name Box Bold NAMEBOX_TEXT_OUTLINE = true # 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 = ":" # Add Text after Name, leave "" to disable. NAMEBOX_BOX_WIDTH_PLUS = 6 # Increase Name Box Width NAMEBOX_BOX_HEIGHT_PLUS = 7 # Increase Name Box Height MOVE_NAMEBOX = true # (true/false) Move Text Box to Right Side if showing Face in Right side. #--------------------------------- # ? TEXT TYPING SOUND SYSTEM #------------------------------- TYPING_SOUND = true # Use Typing Sound? # $nms.typ_se = true/false TYPING_SOUND_FILE = 'Open1' # Sound File Name for Typing Sound (Must be in Folder 'Audio/SE') # $nms.typ_file = 'filename' TYPING_SOUND_VOLUME = 20 # Typing Sound's Volume # $nms.typ_vol = 0 - 100 TYPING_SOUND_SKIP = 4 # How many frames you want to skip before play typing sound again? # $nms.typ_skip = (no. of frames) #--------------------------------- # [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[i].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[i]).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::B) 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::B) 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
а вот скрипт освещение
Код:=begin Thomas Edison VX Version: 0.1 Author: BulletXt (bulletxt@gmail.com) Date: 12/06/2009 Script based upon Kylock's (http://www.rpgmakervx.net/index.php?showtopic=2432) Description: To make an event glow, put a Comment inside event with one of the following light modes. When importing this script to a new project, be sure to copy Graphics/Pictures/le.png to your project. Light Modes: GROUND - Medium steady white light. GROUND2 - Medium white light with slight flicker. GROUND3 - Small steady red light. GROUND4 - Medium steady green light. GROUND5 - Medium steady blue light. FIRE - Large red light with a slight flicker. LIGHT - Small steady white light. LIGHT2 - X-Large steady white light. LIGHT3 - Small white light with slight flicker. TORCH - X-Large red light with a heavy flicker. TORCH2 - X-Large red light with a sleight flicker. TORCH3 - Large white light with a slight flicker. You can make a specific light type turn off/on by turning one of the following switches id ON/off. By default, the switches are off so the lights will show. Of course, turning all switches to ON will make all light types go off. =end #id switch that if ON turns off FIRE mode lights #applies only to light mode: FIRE FIRE = 87 #id switch that if ON turns off LIGHT mode lights #applies to light mode: LIGHT, LIGHT2, LIGHT3 LIGHT = 86 #id switch that if ON turns off GROUND mode lights #applies to light mode: GROUND, GROUND2, GROUND3, GROUND4, GROUND5 GROUND = 85 #id switch that if ON turns off TORCH mode lights #applies to light mode: TORCH, TORCH2, TORCH3 TORCH = 84 # this value can be true or false. If true, it enables compatibility with # KGC_DayNight script. When it's night, lights will automatically go on, when # morning comes back lights will go off. If you set this to true, be sure to # place this script below KGC_DayNight script in the Scripting Editor of VX. ENABLE_KGC_DAY_NIGHT_SCRIPT = false =begin This value must be exactly the same of "PHASE_VARIABLE" setting in KGC_DayNight script. By default the script sets it to 11. To make the event light go on/off with DayNight system, set the event page to be triggered with this variable id and set it to be 1 or above. =end KGC_DAY_NIGHT_SCRIPT_VARIABLE = 11 =begin Tips and tricks: You can't make a single specific light inside event go on/off if a condition applies, for example if a switch is ON. For the moment, you can achieve this by doing a script call immediatley after you make the condition apply. If for example the light event must go on if switch 100 is ON, after you turn on the switch do this call script: $scene = Scene_Map.new Be aware that doing this call script will make game freeze for 30 milliseconds. ################################################################################ =end $bulletxt_day_check = 0 class Spriteset_Map alias bulletxt_spriteset_map_initalize initialize def initialize @light_effects = [] initialize_lights bulletxt_spriteset_map_initalize update end alias bulletxt_spriteset_map_dispose dispose def dispose bulletxt_spriteset_map_dispose for effect in @light_effects effect.light.dispose end @light_effects = [] end alias bulletxt_spriteset_map_update update def update bulletxt_spriteset_map_update check_day_night if ENABLE_KGC_DAY_NIGHT_SCRIPT update_light_effects end def check_day_night #if night if $bulletxt_day_check == 0 if $game_variables[KGC_DAY_NIGHT_SCRIPT_VARIABLE] == 1 $scene = Scene_Map.new $bulletxt_day_check = 1 end else #if morning if $game_variables[KGC_DAY_NIGHT_SCRIPT_VARIABLE] == 3 $game_variables[KGC_DAY_NIGHT_SCRIPT_VARIABLE] = -1 $scene = Scene_Map.new $bulletxt_day_check = 0 end end end def initialize_lights for event in $game_map.events.values next if event.list == nil for i in 0...event.list.size if event.list[i].code == 108 and event.list[i].parameters == ["FIRE"] type = "FIRE" light_effects = Light_Effect.new(event,type) light_effects.light.zoom_x = 300 / 100.0 light_effects.light.zoom_y = 300 / 100.0 light_effects.light.opacity = 100 @light_effects.push(light_effects) end if event.list[i].code == 108 and event.list[i].parameters == ["LIGHT"] type = "LIGHT" light_effects = Light_Effect.new(event,type) light_effects.light.zoom_x = 1 light_effects.light.zoom_y = 1 light_effects.light.opacity = 150 @light_effects.push(light_effects) end if event.list[i].code == 108 and event.list[i].parameters == ["LIGHT2"] type = "LIGHT2" light_effects = Light_Effect.new(event,type) light_effects.light.zoom_x = 6 light_effects.light.zoom_y = 6 light_effects.light.opacity = 150 @light_effects.push(light_effects) end if event.list[i].code == 108 and event.list[i].parameters == ["LIGHT3"] type = "LIGHT3" light_effects = Light_Effect.new(event,type) light_effects.light.zoom_x = 1 light_effects.light.zoom_y = 1 light_effects.light.opacity = 150 @light_effects.push(light_effects) end if event.list[i].code == 108 and event.list[i].parameters == ["TORCH"] type = "TORCH" light_effects = Light_Effect.new(event,type) light_effects.light.zoom_x = 6 light_effects.light.zoom_y = 6 light_effects.light.opacity = 150 @light_effects.push(light_effects) end if event.list[i].code == 108 and event.list[i].parameters == ["TORCH2"] type = "TORCH2" light_effects = Light_Effect.new(event,type) light_effects.light.zoom_x = 6 light_effects.light.zoom_y = 6 light_effects.light.opacity = 150 @light_effects.push(light_effects) end if event.list[i].code == 108 and event.list[i].parameters == ["TORCH3"] type = "TORCH3" light_effects = Light_Effect.new(event,type) light_effects.light.zoom_x = 300 / 100.0 light_effects.light.zoom_y = 300 / 100.0 light_effects.light.opacity = 100 @light_effects.push(light_effects) end if event.list[i].code == 108 and event.list[i].parameters == ["GROUND"] type = "GROUND" light_effects = Light_Effect.new(event,type) light_effects.light.zoom_x = 2 light_effects.light.zoom_y = 2 light_effects.light.opacity = 100 @light_effects.push(light_effects) end if event.list[i].code == 108 and event.list[i].parameters == ["GROUND2"] type = "GROUND2" light_effects = Light_Effect.new(event,type) light_effects.light.zoom_x = 2 light_effects.light.zoom_y = 2 light_effects.light.opacity = 100 @light_effects.push(light_effects) end if event.list[i].code == 108 and event.list[i].parameters == ["GROUND3"] type = "GROUND3" light_effects = Light_Effect.new(event,type) light_effects.light.zoom_x = 2 light_effects.light.zoom_y = 2 light_effects.light.opacity = 100 @light_effects.push(light_effects) end if event.list[i].code == 108 and event.list[i].parameters == ["GROUND4"] type = "GROUND4" light_effects = Light_Effect.new(event,type) light_effects.light.zoom_x = 2 light_effects.light.zoom_y = 2 light_effects.light.opacity = 100 @light_effects.push(light_effects) end if event.list[i].code == 108 and event.list[i].parameters == ["GROUND5"] type = "GROUND5" light_effects = Light_Effect.new(event,type) light_effects.light.zoom_x = 2 light_effects.light.zoom_y = 2 light_effects.light.opacity = 100 @light_effects.push(light_effects) end end end for effect in @light_effects case effect.type when "FIRE" effect.light.x = (effect.event.real_x - 600 - $game_map.display_x) / 8 + rand(6) - 3 effect.light.y = (effect.event.real_y - 600 - $game_map.display_y) / 8 + rand(6) - 3 effect.light.tone = Tone.new(255,-100,-255, 0) effect.light.blend_type = 1 when "LIGHT" effect.light.x = (-0.25 / 2 * $game_map.display_x) + (effect.event.x * 32) - 15 effect.light.y = (-0.25 / 2 * $game_map.display_y) + (effect.event.y * 32) - 15 effect.light.blend_type = 1 when "LIGHT2" effect.light.x = (effect.event.real_x - 1200 - $game_map.display_x) / 8 - 20 effect.light.y = (effect.event.real_y - 1200 - $game_map.display_y) / 8 effect.light.blend_type = 1 when "LIGHT3" effect.light.x = (-0.25 / 2 * $game_map.display_x) + (effect.event.x * 32) - 15 effect.light.y = (-0.25 / 2 * $game_map.display_y) + (effect.event.y * 32) - 15 effect.light.blend_type = 1 when "TORCH" effect.light.x = (effect.event.real_x - 1200 - $game_map.display_x) / 8 - 20 effect.light.y = (effect.event.real_y - 1200 - $game_map.display_y) / 8 effect.light.tone = Tone.new(255,-100,-255, 0) effect.light.blend_type = 1 when "TORCH2" effect.light.x = (effect.event.real_x - 1200 - $game_map.display_x) / 8 - 20 effect.light.y = (effect.event.real_y - 1200 - $game_map.display_y) / 8 effect.light.tone = Tone.new(255,-100,-255, 0) effect.light.blend_type = 1 when "TORCH3" effect.light.x = (effect.event.real_x - 600 - $game_map.display_x) / 8 + rand(6) - 3 effect.light.y = (effect.event.real_y - 600 - $game_map.display_y) / 8 + rand(6) - 3 effect.light.blend_type = 1 when "GROUND" effect.light.x = (effect.event.real_x - 400 - $game_map.display_x) / 8 effect.light.y = (effect.event.real_y - 400 - $game_map.display_y) / 8 effect.light.blend_type = 1 when "GROUND2" effect.light.x = (effect.event.real_x - 400 - $game_map.display_x) / 8 effect.light.y = (effect.event.real_y - 400 - $game_map.display_y) / 8 effect.light.blend_type = 1 when "GROUND3" effect.light.x = (effect.event.real_x - 400 - $game_map.display_x) / 8 effect.light.y = (effect.event.real_y - 400 - $game_map.display_y) / 8 effect.light.tone = Tone.new(255,-255,-255, 255) effect.light.blend_type = 1 when "GROUND4" effect.light.x = (effect.event.real_x - 400 - $game_map.display_x) / 8 effect.light.y = (effect.event.real_y - 400 - $game_map.display_y) / 8 effect.light.tone = Tone.new(-255,255,-255, 100) effect.light.blend_type = 1 when "GROUND5" effect.light.x = (effect.event.real_x - 400 - $game_map.display_x) / 8 effect.light.y = (effect.event.real_y - 400 - $game_map.display_y) / 8 effect.light.tone = Tone.new(-255,255,255, 100) effect.light.blend_type = 1 end end end def update_light_effects ################################################################################ # handle FIRE if $game_switches[FIRE] for effect in @light_effects next if effect.type != "FIRE" effect.light.visible = false end else for effect in @light_effects next if effect.type != "FIRE" effect.light.visible = true end end # handle LIGHT if $game_switches[LIGHT] for effect in @light_effects next if effect.type != "LIGHT" && effect.type != "LIGHT2" && effect.type != "LIGHT3" effect.light.visible = false end else for effect in @light_effects next if effect.type != "LIGHT" && effect.type != "LIGHT2" && effect.type != "LIGHT3" effect.light.visible = true end end # handle GROUND if $game_switches[GROUND] for effect in @light_effects next if effect.type != "GROUND" && effect.type != "GROUND2" && effect.type != "GROUND3" && effect.type != "GROUND4" && effect.type != "GROUND5" effect.light.visible = false end else for effect in @light_effects next if effect.type != "GROUND" && effect.type != "GROUND2" && effect.type != "GROUND3" && effect.type != "GROUND4" && effect.type != "GROUND5" effect.light.visible = true end end # handle TORCH if $game_switches[TORCH] for effect in @light_effects next if effect.type != "TORCH" && effect.type != "TORCH2" && effect.type != "TORCH3" effect.light.visible = false end else for effect in @light_effects next if effect.type != "TORCH" && effect.type != "TORCH2" && effect.type != "TORCH3" effect.light.visible = true end end ################################################################################ for effect in @light_effects case effect.type when "FIRE" effect.light.x = (effect.event.real_x - 600 - $game_map.display_x) / 8 + rand(6) - 3 effect.light.y = (effect.event.real_y - 600 - $game_map.display_y) / 8 + rand(6) - 3 effect.light.opacity = rand(10) + 90 when "LIGHT" effect.light.x = (-0.25 / 2 * $game_map.display_x) + (effect.event.x * 32) - 15 effect.light.y = (-0.25 / 2 * $game_map.display_y) + (effect.event.y * 32) - 15 when "LIGHT2" effect.light.x = (effect.event.real_x - 1200 - $game_map.display_x) / 8 - 20 effect.light.y = (effect.event.real_y - 1200 - $game_map.display_y) / 8 when "LIGHT3" effect.light.x = (-0.25 / 2 * $game_map.display_x) + (effect.event.x * 32) - 15 effect.light.y = (-0.25 / 2 * $game_map.display_y) + (effect.event.y * 32) - 15 effect.light.opacity = rand(10) + 90 when "TORCH" effect.light.x = (effect.event.real_x - 1200 - $game_map.display_x) / 8 - 20 + rand(20) - 10 effect.light.y = (effect.event.real_y - 1200 - $game_map.display_y) / 8 + rand(20) - 10 effect.light.opacity = rand(30) + 70 when "TORCH2" effect.light.x = (effect.event.real_x - 1200 - $game_map.display_x) / 8 - 20 effect.light.y = (effect.event.real_y - 1200 - $game_map.display_y) / 8 effect.light.opacity = rand(10) + 90 when "TORCH3" effect.light.x = (effect.event.real_x - 600 - $game_map.display_x) / 8 + rand(6) - 3 effect.light.y = (effect.event.real_y - 600 - $game_map.display_y) / 8 + rand(6) - 3 effect.light.opacity = rand(10) + 90 when "GROUND" effect.light.x = (effect.event.real_x - 400 - $game_map.display_x) / 8 effect.light.y = (effect.event.real_y - 400 - $game_map.display_y) / 8 when "GROUND2" effect.light.x = (effect.event.real_x - 400 - $game_map.display_x) / 8 effect.light.y = (effect.event.real_y - 400 - $game_map.display_y) / 8 effect.light.opacity = rand(10) + 90 when "GROUND3" effect.light.x = (effect.event.real_x - 400 - $game_map.display_x) / 8 effect.light.y = (effect.event.real_y - 400 - $game_map.display_y) / 8 when "GROUND4" effect.light.x = (effect.event.real_x - 400 - $game_map.display_x) / 8 effect.light.y = (effect.event.real_y - 400 - $game_map.display_y) / 8 when "GROUND5" effect.light.x = (effect.event.real_x - 400 - $game_map.display_x) / 8 effect.light.y = (effect.event.real_y - 400 - $game_map.display_y) / 8 end end #close def end #close class end class Light_Effect attr_accessor :light attr_accessor :event attr_accessor :type def initialize(event, type) @light = Sprite.new @light.bitmap = Cache.picture("le.png") @light.visible = true @light.z = 1000 @event = event @type = type end end
Спасибо огромное, пытаюсь поставить )))
поставил скрипт для сообщений, но не могу найти команду, что бы выдавала в диалоге портрет текущего персонажа по типу:
\np [1] Привет!
только не имя, а портрет
а по свету, не могу понять как включать\выключать (((
Последний раз редактировалось krimwand; 05.04.2012 в 23:43.
Ты имеешь ввиду вот так:
ййй.jpg
Если я тебя правильно понял, то скажу, что система на это, насколько знаю, не способна. Это нужно делать через оператор Show Picture/Erase Picture (Показать рисунок / Удалить рисунок). То есть сначала ты показываешь портрет, потом сообщение, потом удаляешь картинку,
Show Picture
Show Message
Erase Picture
Примерно так. Или показываешь оба портрета сразу, но указываешь имена. Просто поточнее разъясни, как ты хочешь сделать.
Свет нужно сделать так: выбираешь команду Комментарий (Comment) и там прописываешь, какой нужен источник света:
GROUND - Medium steady white light.
GROUND2 - Medium white light with slight flicker.
GROUND3 - Small steady red light.
GROUND4 - Medium steady green light.
GROUND5 - Medium steady blue light.
FIRE - Large red light with a slight flicker.
LIGHT - Small steady white light.
LIGHT2 - X-Large steady white light.
LIGHT3 - Small white light with slight flicker.
TORCH - X-Large red light with a heavy flicker.
TORCH2 - X-Large red light with a sleight flicker.
TORCH3 - Large white light with a slight flicker.
Если хочешь контролировать свет, выключать/включать его, то создай две страницы в событии. Одну - пустую, а вторую с комментарием с нужным светом. В условиях запуска события надо указать переключатель, которым ты хочешь включать/выключать свет, назови его соответственно. И когда надо - просто включаешь его.
лол
по поводу портретов:
в моем проекте игрок может выбрать 4 различных портрета, я хочу что бы тот портрет, который был выбран игроком подставлялся в диалог через команду, по типу подставления имени игрока (как я написал в примере "\np[1], привет" будет выглядеть как "Ваня, привет". Надеюсь что есть команда \nf[1] показывающая портрет текущего игрока; ведь где-то хранится информация о том какой в данный момент портрет у первого персонажа?)
по поводу света:
я создаю две страницы, но или свет все время горит или вообще не горит, включение выключение переключателя не помогает ((
(счас скрины попробую выложить)
kamin.jpg
Последний раз редактировалось krimwand; 06.04.2012 в 12:42.
Что-то я сплоховал. Вот это код из скрипта. Выделенные жирным числа - номера переменных, которые отвечают за включение/выключение определенных видов освещения. Эти числа ты можешь задать сам. Можешь вообще одно для всех установить - тогда будут включаться/выключаться все события освещения сразу.Код:#id switch that if ON turns off FIRE mode lights #applies only to light mode: FIRE FIRE = 87 #id switch that if ON turns off LIGHT mode lights #applies to light mode: LIGHT, LIGHT2, LIGHT3 LIGHT = 86 #id switch that if ON turns off GROUND mode lights #applies to light mode: GROUND, GROUND2, GROUND3, GROUND4, GROUND5 GROUND = 85 #id switch that if ON turns off TORCH mode lights #applies to light mode: TORCH, TORCH2, TORCH3 TORCH = 84
Итак, первая строчка - синтаксис команды. Как использовать - первый параметр - название файла, который содержит фейс, далее номер (от 0 до 7). И последний параметр использовать необязательно. Придется создавать много страниц сообщений, для каждого фейса.Код:\fa[face_file_name, face_index] (or) \fa[face_file_name, face_index, new_side] << Draw new face while message is running~ face_file_name: Face image's name face_index: Index of the face in image (0 - 7) new_side: Face side you want to change to
Или есть вариант, но не знаю, работоспособен он или нет.
1. Создай Faceset (набор лиц) с лицами героев, идущих подряд. Назовие его, например, actor_face.
2. Когда игрок выбирает лицо, пусть задается значение переменной. Ноль - если первый фейс, единица - второй, двойка - третий, тройка - четвертый. Пусть это будет переменная с номером N.
3. В сообщении прописывай команду \fa[actor_face, \V[N]] . Команда \V[N] должна подставлять значение переменной N. незнаю, работает ли.
лол
Спасибо, Joker, попробую с лицами вечерком похимичить, а со светом я эти строчки нашел, но не понял куда и как вписывать эти числа?
Эту тему просматривают: 16 (пользователей: 0 , гостей: 16)
Социальные закладки