++++ Hỏi - Đáp mọi thứ liên quan đến make game(engine, script, event...)++++

Thảo luận trong 'Game Development' bắt đầu bởi ken10, 23/11/06.

  1. Lloyd - Raine

    Lloyd - Raine Youtube Master Race

    Tham gia ngày:
    23/9/07
    Bài viết:
    5
    Thế cái script battle minkoff ở đâu vậy ? Và phải copy nó vào đâu ?
    Và cái script đi thẳng hàng (giống Chorno Cross) cũng phải copy vào đâu nhỉ ?

    À , mình có cái event này mà mình làm hoài chẳng được . Có ai chỉ mình tí đi !

    Vấn đề 1 .
    _Nhân vật chính nói chuyện với người canh giữ cổng . Người canh giữ cổng nói muốn ra ngoài thì phải làm nhiệm vụ do bà chủ Inn đưa ra .
    _Nói chuyện với bà chủ Inn ( mình nghĩ bây giờ event của bà chủ Inn sẽ được kích hoạt bằng nút gì đó nhưng hổng biết )
    _Bà chủ bảo xuống tầng hầm diệt quái vật . => xuống tầng hầm .

    Vấn đề 2 ( tiếp theo )
    _Xuống tầng hầm tìm quái vật . ( bây giờ event quái vật tầng hầm sẽ được kích hoạt bằng nút gì đó ...)
    _Đánh xong . Lên nói chuyện với bà chủ ( rắc rối chỗ này nè ) .
    _Xong nói chuyện với người gác cổng => người gác cổng cho qua . ( không làm được )

    Vấn đề 3
    _Ra ngoài , gặp nhân vật chính 2 .
    _Nhân vật chính 2 bảo muốn nó đi theo phải đánh với nó 1 trận .
    _Lao vào đánh nhau .
    _Đánh xong , nói chuyện một hồi -> nhân vật chính 2 theo mình . ( chỗ này chưa làm được T_T :o)

    Có ai giúp mình với ! :x

    PS : Còn cái cần hỏi . "Var" là gì ? Mình có nghe nói tới nhưng hổng hiểu ...
     
  2. giang loves game

    giang loves game Mario & Luigi

    Tham gia ngày:
    22/8/04
    Bài viết:
    715
    Nơi ở:
    Ho Chi Minh City
    Mấy tuần nay mình đang tập tành với RPG Maker XP, tuy tài liệu rất nhiều, nhưng có vài vấn đề mà mình cần các bạn giúp đỡ:

    1. Làm sao để thể hiện 1 event như thế này: 3 nhân vật A,B và C cùng bước vào map, cả ba cùng dừng lại, nhân vật A quay qua nhân vật B rồi chạm 1 cái, nhân vật B đi đến bên nhân vật C và chạm 1 cái rồi nhân vật C chạy đi.
    Làm sao để sắp xếp các Event?

    2.Trong trận đấu, RPG Maker XP thể hiện các nhân vật khá là tệ, mình thấy trong trò của bạn Dương thì các nhân vật được thể hiện rất tốt, đối thủ ở bên trái và nhân vật ở bên phải. Làm thế nào để thể hiện như thế?

    3.Mình chưa biết cách để vật dụng chuyển động, VD như 1 bồn nước chảy róc rách, phải sắp xếp Event như thế nào để bồn nước đứng yên 1 chổ nhưng vẫn thể hiện chuyển động?

    Rất mong các bạn giúp đỡ.
     
  3. DarkPaladin

    DarkPaladin Youtube Master Race

    Tham gia ngày:
    23/3/06
    Bài viết:
    90
    Nơi ở:
    Bạc Liêu
    @Floyd: các vấn đề bạn muốn làm là một chuỗi những event đc liên kết với nhau bằng lệnh switch, chỉ cần bạn nghiên cứu sử dụng lệnh này thành thạo thì coi như giải quyết xong xuôi gọn nhẹ

    @giang:
    1. tạo thêm 1 event riêng với trigger là auto play hay paralell process, trong đó sử dụng kết hợp giữa move event + wait

    2.tìm scritp Custom Battler System ( CBS ) của Minkoff là có ngay

    3. chỗ event bồn nước bạn chọn stoping animation, dưới đó có 2 dòng nữa chọn tốc độ chuyển động của nó ( từ slow tới fastest gì đó ko nhớ rõ ) là có ngay 1 bồn nước chảy ... róc rách :D
     
  4. Lloyd - Raine

    Lloyd - Raine Youtube Master Race

    Tham gia ngày:
    23/9/07
    Bài viết:
    5
    À , thì ra nó liên quan đến switch đó . Thú thật mình cũng chưa tìm hiểu kĩ tường tận về nó . ( vì nó quá khó hiểu ) .
    Có ai đó chưa sẻ một tí kinh nghiệm về switch coi ?

    Tại vì khi là sai thì hay thường xảy ra nhiều việc không hay . ( nói thật mình đây thất bại 5 lần rồi -> chưa nản đấy )
     
  5. giang loves game

    giang loves game Mario & Luigi

    Tham gia ngày:
    22/8/04
    Bài viết:
    715
    Nơi ở:
    Ho Chi Minh City
    Mình đã tìm kiếm nhưng không thấy scritp này đâu cả. Bạn có thể chỉ link hay forum nào có không?
     
  6. Lloyd - Raine

    Lloyd - Raine Youtube Master Race

    Tham gia ngày:
    23/9/07
    Bài viết:
    5
    À , làm sao để hiện hình nhân vật lúc đối thoại , nói chuyện ? Như mấy cái game khác hiện nay ấy ?

    Nếu nó là script thì xin hãy cho biết chính xác . Chứ chỉ nói không thôi thì làm sao biết mà làm ?
    Nếu cần download , xin hãy cho biết địa chỉ chính xác luôn hén ?
     
  7. Xx_Ice_Dragon_xX

    Xx_Ice_Dragon_xX Donkey Kong

    Tham gia ngày:
    19/4/06
    Bài viết:
    345
    Nơi ở:
    Đến từ chỗ ấy
    muốn hiện hình nhân vật khi nói chuyện thì dùng script AMS dưới đây
    PHP:
    #===================================================
    # Advanced Message Script
    #===================================================
    # MAKE GAME VIET NAM
    # Website: http://www.bolobala.net 
    # Y!M: master_tinh89
    # Mail: tinh.mgv@gmail.com
    #===================================================


    LETTER_BY_LETTER_MODE true   #Set the letter by letter mode ON/OFF          

    #===================================================
    # ▼ CLASS AMS Begins
    #===================================================
    class AMS
     
     attr_accessor 
    :name_box_x_offset
     attr_accessor 
    :name_box_y_offset 
     attr_accessor 
    :font_type
     attr_accessor 
    :name_font_type
     attr_accessor 
    :font_size
     attr_accessor 
    :name_font_size
     attr_accessor 
    :message_box_opacity 
     attr_accessor 
    :name_box_skin
     attr_accessor 
    :name_box_text_color
     attr_accessor 
    :message_box_text_color
     attr_accessor 
    :message_box_skin
     attr_accessor 
    :name_box_width
     attr_accessor 
    :name_box_height
     attr_accessor 
    :message_width
     attr_accessor 
    :message_height
     attr_accessor 
    :message_x
     attr_accessor 
    :message_y_bottom
     attr_accessor 
    :message_y_middle
     attr_accessor 
    :message_y_top
     attr_accessor 
    :event_message_x_ofset
     attr_accessor 
    :event_message_y_ofset
      
    def initialize
      
     
    @name_box_x_offset 0       #Choose the X axis offset of the name bos. default= 0
     
    @name_box_y_offset = -10    #Choose the Y axis offset of the name bos. default= -10
     
    @name_box_width 8           #Choose the width of the Name Box. default= 8  
     
    @name_box_height 26        #Choose the height of the Name Box. default= 26
     
     
    @font_type = [".VnArial"".VnTimes"".VnLincoln"".VnLincolnH"".VnLinus"".VnLinusH"".VnMonotype"]           #Choose the Font Name (Case Sensitive) for message box
     
    @name_font_type = [".VnArial"".VnTimes"".VnLincoln"".VnLincolnH"".VnLinus"".VnLinusH"".VnMonotype"#Choose the Font Name (Case Sensitive) for Name Box
     
    @font_size 21                      #Choose the default Font Size for message box text
     
    @name_font_size 21            #Choose the deafault Font Size for Name Box text
     
    @name_box_text_color=0        #Choose the Text Color of the Name Box
     
    @message_box_text_color=0   #Choose the Text Color of the Message Box
     
     
    @message_box_opacity 160            #Choose the opacity of the message window. Default=160
     
    @message_box_skin "001-Blue01"   #Choose the WindowSkin for the Message Box
     
    @name_box_skin "001-Blue01"       #Choose the WindowSkin for the Name Box
     
     
    @message_width 480          #Choose the width size of the message box. Default=480
     
    @message_height 160         #Choose the height size of the message box. Default=160
     
    @message_x 80                  #Choose the X position of the message box. Default=80
     
    @message_y_bottom 304    #Choose the Y bottom position of the message box. Default=304
     
    @message_y_middle 160    #Choose the Y middle position of the message box. Default=160
     
    @message_y_top 16           #Choose the Y top position of the message box. Default=16
     
     
    @event_message_x_ofset 0   #Choose the X position offset of the event message. Default=0
     
    @event_message_y_ofset 48   #Choose the Y position offset of the event message. Default=48
     
    end
    end
    #===================================================
    # ▲ CLASS AMS Ends
    #===================================================


    #===================================================
    # ▼ Class Window_Message Begins
    #===================================================
    class Window_Message Window_Selectable   

    alias xrxs9_initialize initialize

    def initialize

    @alex_skip false

    xrxs9_initialize

    if $soundname_on_speak == nil then
      $soundname_on_speak 
    ""
    end

    $gaiji_file 
    "./Graphics/Gaiji/sample.png"

    if FileTest.exist?($gaiji_file)
      @
    gaiji_cache Bitmap.new($gaiji_file)
    else
      @
    gaigi_cache nil
    end
    @opacity_text_buf Bitmap.new(3232)
    end


    #--------------------------------------------------------------------------

    alias xrxs9_terminate_message terminate_message

    def terminate_message
     
    if @name_window_frame != nil
      
    @name_window_frame.dispose
      
    @name_window_frame nil
    end

    if @name_window_text  != nil
      
    @name_window_text.dispose
      
    @name_window_text  nil
    end
    xrxs9_terminate_message
    end

    #--------------------------------------------------------------------------

    def refresh
     
    self
    .contents.clear
    self
    .contents.font.color text_color($ams.message_box_text_color)
    self.contents.font.name "Tahoma"#$ams.font_type
    self.contents.font.size $ams.font_size
    self
    .windowskin RPG::Cache.windowskin($ams.message_box_skin)
    @
    = @= @max_x = @max_y = @indent = @lines 0
    @face_indent 0
    @opacity 255
    @cursor_width 0
    @write_speed 0
    @write_wait 0
    @mid_stop false
    @face_file nil
    @popchar = -2

    if $game_temp.choice_start == 0
      
    @8
    end

    if $game_temp.message_text != nil
      
    @now_text $game_temp.message_text
      
    if (/\A\\[Ff]\[(.+?)\]/.match(@now_text))!=nil then
         
    @face_file = $".png"
         
    @= @face_indent 128
        
    if FileTest.exist?("Graphics/Pictures/" + $".png")
          
    self.contents.blt(1616RPG::Cache.picture(@face_file), Rect.new(009696))
        
    end
        
    @now_text.gsub!(/\\[Ff]\[(.*?)\]/) { "" }
      
    end
    if (/\A\\[Ll]\[(.+?)\]/.match(@now_text))!=nil then
        
    @face_file "face" + ($game_party.actors[$1.to_i].id.to_s) + ".png"
        
    @= @face_indent 128
       
    if FileTest.exist?("Graphics/Pictures/" +  @face_file)
         
    self.contents.blt(1616RPG::Cache.picture(@face_file), Rect.new(009696))
       
    end
       
    @now_text.gsub!(/\\[Ll]\[(.*?)\]/) { "" }
     
    end
     
      begin
      last_text 
    = @now_text.clone
      @
    now_text.gsub!(/\\[Vv]\[([IiWwAaSs]?)([0-9]+)\]/) { convart_value($1, $2.to_i) }
      
    end until @now_text == last_text
      
    @now_text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
       
    $game_party.actors[$1.to_i] != nil $game_party.actors[$1.to_i].name ""
      
    end
      
    #NEW
      #Dubealex's Stop Skip Text ON-OFF
      
    @now_text.gsub!(/\\[%]/) { "\100" }
      
    #End new command
       
      #NEW
      #Dubealex's Show Monster Name Feature
       
    @now_text.gsub!(/\\[Mm]\[([0-9]+)\]/) do
       
    $data_enemies[$1.to_i] != nil $data_enemies[$1.to_i].name ""
       
    end
       
    #End new command
       
      #NEW
      #Dubealex's Show Item Price Feature
       
    @now_text.gsub!(/\\[Pp]rice\[([0-9]+)\]/) do
       
    $data_items[$1.to_i] != nil $data_items[$1.to_i].price ""
       
    end
       
    #End new command
       
      #NEW
      #Dubealex's Show Hero Class Name Feature
       
    @now_text.gsub!(/\\[Cc]lass\[([0-9]+)\]/) do
       
    $data_classes[$data_actors[$1.to_i].class_id] != nil $data_classes[$data_actors[$1.to_i].class_id].name ""
       
    end
       
    #End new command
       
      #NEW
      #Dubealex's Show Current Map Name Feature
       
    @now_text.gsub!(/\\[Mm]ap/) do
       
    $game_map.name    != nil $game_map.name    ""
       
    end
       
    #End new command
       
      #NEW
      #Dubealex's Choose Name Box Text Color
       
    @now_text.gsub!(/\\[Zz]\[([0-9]+)\]/) do
       
    $ams.name_box_text_color=$1.to_i
       
    @now_text.sub!(/\\[Zz]\[([0-9]+)\]/) { "" }
       
    end
       
    #End new command
       
      
    name_window_set false
      
    if (/\\[Nn]ame\[(.+?)\]/.match(@now_text)) != nil
        name_window_set 
    true
        name_text 
    = $1
        
    @now_text.sub!(/\\[Nn]ame\[(.*?)\]/) { "" }
      
    end

      
    if (/\\[Pp]\[([-1,0-9]+)\]/.match(@now_text))!=nil then
        
    @popchar = $1.to_i
        
    if @popchar == -1
          
    @= @indent 48
          
    @4
        end
        
    @now_text.gsub!(/\\[Pp]\[([-1,0-9]+)\]/) { "" }
      
    end

      
    @max_choice_x 0
      
    if @popchar >= 0
        
    @text_save = @now_text.clone
        @
    max_x 0
        
    @max_y 4
        
    for i in 0..3
          line 
    = @now_text.split(/\n/)[3-i]
          @
    max_y -= if line == nil and @max_y <= 4-i
          next 
    if line == nil
          line
    .gsub!(/\\\w\[(\w+)\]/) { "" }
          
    cx contents.text_size(line).width
          
    @max_x cx if cx > @max_x
          
    if >= $game_temp.choice_start
            
    @max_choice_x cx if cx > @max_choice_x
          end
        end
        self
    .width = @max_x 32 + @face_indent
        self
    .height = (@max_y 1) * 32 64
        
    @max_choice_x -= 68
        
    @max_choice_x -= @face_indent*216/128
      
    else
        @
    max_x self.width 32 - @face_indent
        
    for i in 0..3
          line 
    = @now_text.split(/\n/)[i]
          
    next if line == nil
          line
    .gsub!(/\\\w\[(\w+)\]/) { "" }
          
    cx contents.text_size(line).width
          
    if >= $game_temp.choice_start
            
    @max_choice_x cx if cx > @max_choice_x
          end
        end
        
    @max_choice_x += 8
      end
      
    @cursor_width 0
      
    @now_text.gsub!(/\\\\/) { "\000" }
      @
    now_text.gsub!(/\\[Cc]\[([0123456789ABCDEF#]+)\]/) { "\001[#{$1}]" }
      
    @now_text.gsub!(/\\[Gg]/) { "\002" }
      @
    now_text.gsub!(/\\[Ss]\[([0-9]+)\]/) { "\003[#{$1}]" }
      @
    now_text.gsub!(/\\[Aa]\[(.*?)\]/) { "\004[#{$1}]" }
      
       
    #NEW 
       #Dubealex's Permanent Color Change
       
    @now_text.gsub!(/\\[Cc]olor\[([0-9]+)\]/) do
         
    $ams.message_box_text_color= $1.to_i
        
    @now_text.sub!(/\\[Cc]\[([0-9]+)\]/) { "" }
         
    end
       
    #End of new command
       
       #NEW 
       #Dubealex's Font Change Feature
        
    @now_text.gsub(/\\[Tt]\[(.*?)\]/) do
         
    buftxt = $1.to_s
         $ams
    .font_type buftxt
         
    @now_text.sub!(/\\[Tt]\[(.*?)\]/) { "" }
         
    end
       
    #End of new command
       
      
    @now_text.gsub!(/\\[.]/) { "\005" }
      @
    now_text.gsub!(/\\[|]/) { "\006" }
      @
    now_text.gsub!(/\\[>]/) { "\016" }
      @
    now_text.gsub!(/\\[<]/) { "\017" }
      @
    now_text.gsub!(/\\[!]/) { "\020" }
      @
    now_text.gsub!(/\\[~]/) { "\021" }
      @
    now_text.gsub!(/\\[Ee]\[([0-9]+)\]/) { "\022[#{$1}]" }
      @
    now_text.gsub!(/\\[Ii]/) { "\023" }
      @
    now_text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\024[#{$1}]" }
      @
    now_text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "\025[#{$1}]" }
      @
    now_text.gsub!(/\\[Bb]\[([0-9]+)\]/) { "\026[#{$1}]" }
      @
    now_text.gsub!(/\\[Rr]\[(.*?)\]/) { "\027[#{$1}]" }
      
      
    reset_window
      
      
    if name_window_set
        color
    =$ams.name_box_text_color
        off_x 
    =  $ams.name_box_x_offset
        off_y 
    =  $ams.name_box_y_offset
        space 
    2
        x 
    self.off_x space 2
        y 
    self.off_y space 2
        w 
    self.contents.text_size(name_text).width $ams.name_box_width space
        h 
    $ams.name_box_height space
        
    @name_window_frame Window_Frame.new(xywh)
        @
    name_window_frame.self.1
        x 
    self.off_x 4
        y 
    self.off_y
        
    @name_window_text  Air_Text.new(xyname_textcolor)
        @
    name_window_text.self.2
      end
    end

    reset_window

    if $game_temp.choice_max 0
      
    @item_max $game_temp.choice_max
      self
    .active true
      self
    .index 0
    end

    if $game_temp.num_input_variable_id 0
      digits_max 
    $game_temp.num_input_digits_max
      number 
    $game_variables[$game_temp.num_input_variable_id]
      @
    input_number_window Window_InputNumber.new(digits_max)
      @
    input_number_window.number number
      
    @input_number_window.self.8
      
    @input_number_window.self.$game_temp.num_input_start 32
    end
    end

    #--------------------------------------------------------------------------

    def update
     
    super

    if @fade_in
      self
    .contents_opacity += 24
      
    if @input_number_window != nil
        
    @input_number_window.contents_opacity += 24
      end
      
    if self.contents_opacity == 255
        
    @fade_in false
      end
      
    return
    end
    @now_text nil if @now_text == "" 

    if @now_text != nil and @mid_stop == false
      
    if @write_wait 0
        
    @write_wait -= 1
        
    return
      
    end
      text_not_skip 
    LETTER_BY_LETTER_MODE
      
    while true
        
    @max_x = @if @max_x < @x
        
    @max_y = @if @max_y < @y
        
    if (= @now_text.slice!(/./m)) != nil
          
    if == "\000"
            
    "\\"
          
    end
          
          
    if == "\001"
            
    @now_text.sub!(/\[([0123456789ABCDEF#]+)\]/, "")
            
    temp_color = $1
            color 
    temp_color.to_i
            leading_x 
    temp_color.to_s.slice!(/./m)
            if 
    leading_x == "#"
              
    self.contents.font.color hex_color(temp_color)
              
    next
            end
            
    if color >= and color <= 7
              self
    .contents.font.color text_color(color)
            
    end
            next
          end

          
    if == "\002"
            
    if @gold_window == nil and @popchar <= 0
              
    @gold_window Window_Gold.new
              @
    gold_window.560 - @gold_window.width
              
    if $game_temp.in_battle
                
    @gold_window.192
              
    else
                @
    gold_window.self.>= 128 32 384
              end
              
    @gold_window.opacity self.opacity
              
    @gold_window.back_opacity self.back_opacity
            end
            c 
    ""
          
    end

          
    if == "\003"
            
    @now_text.sub!(/\[([0-9]+)\]/, "")
            
    speed = $1.to_i
            
    if speed >= and speed <= 19
              
    @write_speed speed
            end
            c 
    ""
          
    end

          
    if == "\004"
            
    @now_text.sub!(/\[(.*?)\]/, "")
            
    buftxt = $1.dup.to_s
            
    if buftxt.match(/\//) == nil and buftxt != "" then
              
    $soundname_on_speak "Audio/SE/" buftxt
            
    else
              
    $soundname_on_speak buftxt.dup
            end
            c 
    ""
          
    elsif c == "\004" 
            
    ""
          
    end
          
          
    if == "\005"
            
    @write_wait += 5
            c 
    ""
          
    end
          
          
    if == "\006"
            
    @write_wait += 20
            c 
    ""
          
    end
          
          
    if == "\016"
            
    text_not_skip false
            c 
    ""
          
    end
          
          
    if == "\017"
            
    text_not_skip true
            c 
    ""
          
    end
          
          
    if == "\020"
            
    @mid_stop true
            c 
    ""
          
    end
          
          
    if == "\021"
            
    terminate_message
            
    return
          
    end
          
          
    if == "\023"
            
    @indent = @x
            c 
    ""
          
    end

          
    if == "\024"
            
    @now_text.sub!(/\[([0-9]+)\]/, "")
            @
    opacity = $1.to_i
            color 
    self.contents.font.color
            self
    .contents.font.name $ams.font_type
            self
    .contents.font.size $ams.font_size
            self
    .contents.font.color Color.new(color.redcolor.greencolor.bluecolor.alpha * @opacity 255)
            
    ""
          
    end

          
    if == "\025"
            
    @now_text.sub!(/\[([0-9]+)\]/, "")
            
    self.contents.font.size = [[$1.to_i6].max32].min
            c 
    ""
          
    end

          
    if == "\026"
            
    @now_text.sub!(/\[([0-9]+)\]/, "")
            @
    += $1.to_i
            c 
    ""
          
    end
          
          
    if == "\027"
            
    @now_text.sub!(/\[(.*?)\]/, "")
            @
    += ruby_draw_text(self.contents, @x, @line_height + (line_height self.contents.font.size), $1, @opacity)
            if 
    $soundname_on_speak != ""
              
    Audio.se_play($soundname_on_speak)
            
    end
          c 
    ""
          
    end

          
    if == "\030"
            
    @now_text.sub!(/\[(.*?)\]/, "")
            
    self.contents.blt(@, @line_height 8RPG::Cache.icon($1), Rect.new(002424))
            if 
    $soundname_on_speak != ""
              
    Audio.se_play($soundname_on_speak)
            
    end
            
    @+= 24
            c 
    ""
          
    end

          
    if == "\n"
            
    @lines += 1
            
    @+= 1
            
    @+ @indent + @face_indent
            
    if @lines >= $game_temp.choice_start
              
    @+ @indent + @face_indent
              
    @cursor_width = @max_choice_x
            end
            c 
    ""
          
    end
          
          
    if == "\022"
            
    @now_text.sub!(/\[([0-9]+)\]/, "")
            @
    += gaiji_draw(+ @x, @line_height + (line_height self.contents.font.size), $1.to_i)
            
    ""
          
    end
          
          
    #NEW
          #Dubealex's Text Skip On/OFF Command
           
    if == "\100"
              
    if @alex_skip==false
                 
    @alex_skip=true
              
    else
                @
    alex_skip=false
              end
             c 
    ""
           
    end  
           
    #end of new command
                                       
          
    if != ""
            
    self.contents.draw_text(0+@x32 * @y4032c)
            @
    += self.contents.text_size(c).width
            
    if $soundname_on_speak != "" then
              Audio
    .se_play($soundname_on_speak)
            
    end
          end
          
    #SKIP_TEXT_CODE

    # B = Escape, 0 (On The NumPad), X 
    # C = Enter, Space Bar and C
    # A = Shift, Z 

      
    if Input.press?(Input::C# <-- Change the value on that line
        
    if @alex_skip==false      
        text_not_skip 
    false
        end
          end
        
    else
          
    text_not_skip true
          
    break
        
    end
        
        
    if text_not_skip
          
    break
        
    end
      end
      
    @write_wait += @write_speed
      
    return
    end

    if @input_number_window != nil
      
    @input_number_window.update
      
    if Input.trigger?(Input::C)
        
    $game_system.se_play($data_system.decision_se)
        
    $game_variables[$game_temp.num_input_variable_id] =
          @
    input_number_window.number
        $game_map
    .need_refresh true
        
    @input_number_window.dispose
        
    @input_number_window nil
        terminate_message
      end
      
    return
    end

    if @contents_showing
      
    if $game_temp.choice_max == 0
        self
    .pause true
      end
      
      
    if Input.trigger?(Input::B)
        if 
    $game_temp.choice_max and $game_temp.choice_cancel_type 0
          $game_system
    .se_play($data_system.cancel_se)
          
    $game_temp.choice_proc.call($game_temp.choice_cancel_type 1)
          
    terminate_message
        end
      end
      
      
    if Input.trigger?(Input::C)
        if 
    $game_temp.choice_max 0
          $game_system
    .se_play($data_system.decision_se)
          
    $game_temp.choice_proc.call(self.index)
        
    end
        
    if @mid_stop
          
    @mid_stop false
          
    return
        else
          
    terminate_message
        end
      end
      
    return
    end

    if @fade_out == false and $game_temp.message_text != nil
      
    @contents_showing true
      $game_temp
    .message_window_showing true
      refresh
      Graphics
    .frame_reset
      self
    .visible true
      self
    .contents_opacity 0
      
    if @input_number_window != nil
        
    @input_number_window.contents_opacity 0
      end
      
    @fade_in true
      
    return
    end

    if self.visible
      
    @fade_out true
      self
    .opacity -= 48
      
    if self.opacity == 0
        self
    .visible false
        
    @fade_out false
        $game_temp
    .message_window_showing false
      end
      
    return
    end
    end

    #--------------------------------------------------------------------------

    def get_character(parameter)

    case 
    parameter
    when 0  
      
    return $game_player
    else 
      
    events $game_map.events
      
    return events == nil nil events[parameter]
    end
    end

    #--------------------------------------------------------------------------

    def reset_window

    #MESSAGE_SIZE
    #MESSAGE_POSITION

    if @popchar >= 0
      events 
    $game_map.events
      
    if events != nil
        character 
    get_character(@popchar)
        
    = [[character.screen_x -  $ams.event_message_x_ofset self.width 24].max636 self.width].min
        y 
    = [[character.screen_y $ams.event_message_y_ofset self.height4].max476 self.height].min
        self
    .x
        self
    .y
      end
    elsif 
    @popchar == -1
      self
    .= -4
      self
    .= -4
      self
    .width 648
      self
    .height 488
    else
      if 
    $game_temp.in_battle
        self
    .16
      
    else
        case 
    $game_system.message_position
        when 0  
          self
    .$ams.message_y_top
        when 1  
          self
    .$ams.message_y_middle
        when 2  
          self
    .$ams.message_y_bottom
        end
        self
    .$ams.message_x
        
    if @face_file == nil
          self
    .width $ams.message_width
          self
    .$ams.message_x
        
    else
          if 
    self.width <= 600
            self
    .width 600
            self
    .-=60
           end 
        end
        self
    .height $ams.message_height
      end
    end
    self
    .contents Bitmap.new(self.width 32self.height 32)
    self.contents.font.color text_color($ams.message_box_text_color)
    self.contents.font.name $ams.font_type
     self
    .contents.font.size $ams.font_size
    if @face_file != nil
      self
    .contents.blt(1616RPG::Cache.picture(@face_file), Rect.new(00124120))
    end
    if @popchar == -1
      self
    .opacity 255
      self
    .back_opacity 0
    elsif $game_system
    .message_frame == 0
      self
    .opacity 255
      self
    .back_opacity $ams.message_box_opacity
    else
      
    self.opacity 0
      self
    .back_opacity $ams.message_box_opacity
    end
    end

    #--------------------------------------------------------------------------

    def gaiji_draw(xynum)

    if @
    gaiji_cache == nil
      
    return 0
    else
      if @
    gaiji_cache.width num 24
        
    return 0
      end

      
    if self.contents.font.size >= 20 and self.contents.font.size <= 24
        size 
    24
      
    else
        
    size self.contents.font.size 100 24 2200
      end

      self
    .contents.stretch_blt(Rect.new(xysizesize), @gaiji_cacheRect.new(num 2402424))

      if 
    $soundname_on_speak != "" then
        Audio
    .se_play($soundname_on_speak)
      
    end
      
    return size
    end
    end

    #--------------------------------------------------------------------------

    def line_height
    return 32

    if self.contents.font.size >= 20 and self.contents.font.size <= 24
      
    return 32
    else
      return 
    self.contents.font.size 15 10
    end
    end

    #--------------------------------------------------------------------------

    def ruby_draw_text(targetxystr,opacity)

    sizeback target.font.size
    target
    .font.size 32 rubysize 32 target.font.size rubysize target.font.size 2
    rubysize 
    = [rubysize6].max
    opacity 
    = [[opacity0].max255].min
    split_s 
    str.split(/,/)
    split_s[0] == nil split_s[0] = "" nil
    split_s
    [1] == nil split_s[1] = "" nil

    height 
    sizeback rubysize
    width  
    target.text_size(split_s[0]).width

    target
    .font.size rubysize
    ruby_width 
    target.text_size(split_s[1]).width
    target
    .font.size sizeback

    buf_width 
    = [target.text_size(split_s[0]).widthruby_width].max

    width 
    ruby_width != sub_x = (width ruby_width) / sub_x 0

    if opacity == 255
      target
    .font.size rubysize
      target
    .draw_text(sub_xtarget.font.sizetarget.text_size(split_s[1]).widthtarget.font.sizesplit_s[1])
      
    target.font.size sizeback
      target
    .draw_text(xywidthtarget.font.sizesplit_s[0])
      return 
    width
    else
      if @
    opacity_text_buf.width buf_width or @opacity_text_buf.height height
        
    @opacity_text_buf.dispose
        
    @opacity_text_buf Bitmap.new(buf_widthheight)
      else
        @
    opacity_text_buf.clear
      end
      
    @opacity_text_buf.font.size rubysize
      
    @opacity_text_buf.draw_text(0buf_widthrubysizesplit_s[1], 1)
      @
    opacity_text_buf.font.size sizeback
      
    @opacity_text_buf.draw_text(rubysizebuf_widthsizebacksplit_s[0], 1)
      if 
    sub_x >= 0
        target
    .blt(xrubysize, @opacity_text_bufRect.new(00buf_widthheight), opacity)
      else
        
    target.blt(sub_xrubysize, @opacity_text_bufRect.new(00buf_widthheight), opacity)
      
    end
      
    return width
    end
    end

    #--------------------------------------------------------------------------

    def convart_value(optionindex)
    option == nil option "" nil
    option
    .downcase!

    case 
    option
    when 
    "i"
      
    unless $data_items[index].name == nil
        r 
    sprintf("\030[%s]%s"$data_items[index].icon_name$data_items[index].name)
      
    end
    when 
    "w"
      
    unless $data_weapons[index].name == nil
        r 
    sprintf("\030[%s]%s"$data_weapons[index].icon_name$data_weapons[index].name)
      
    end
    when 
    "a"
      
    unless $data_armors[index].name == nil
        r 
    sprintf("\030[%s]%s"$data_armors[index].icon_name$data_armors[index].name)
      
    end
    when 
    "s"
      
    unless $data_skills[index].name == nil
        r 
    sprintf("\030[%s]%s"$data_skills[index].icon_name$data_skills[index].name)
      
    end
    else
      
    $game_variables[index]
    end

    == nil "" nil
    return r
    end

    #--------------------------------------------------------------------------

    def dispose
    terminate_message

    if @gaiji_cache != nil
      unless 
    @gaiji_cache.disposed?
        @
    gaiji_cache.dispose
      end
    end

    unless 
    @opacity_text_buf.disposed?
      @
    opacity_text_buf.dispose
    end

    $game_temp
    .message_window_showing false
    if @input_number_window != nil
      
    @input_number_window.dispose
    end
    super
    end

    #--------------------------------------------------------------------------

    def update_cursor_rect
    if @index >= 0
      n 
    $game_temp.choice_start + @index
      self
    .cursor_rect.set(+ @indent + @face_indent32, @cursor_width32)
    else
      
    self.cursor_rect.empty
    end
    end
    end
    #=========================================
    # ▲ CLASS Window_Message Ends
    #=========================================


    #=========================================
    # ▼ Class Window_Frame Begins
    #=========================================
    class Window_Frame Window_Base

    def initialize
    (xywidthheight)
    super(xywidthheight)
    self.windowskin RPG::Cache.windowskin($ams.name_box_skin)
    self.contents nil
    end

    #--------------------------------------------------------------------------

    def dispose
    super
    end
    end
    #=========================================
    # ▲ CLASS Window_Frame Ends
    #=========================================


    #=========================================
    # ▼ CLASS Game_Map Additional Code Begins
    #=========================================
    class Game_Map

    #Dubealex's Addition (from XRXS) to show Map Name on screen
    def name
     $map_infos
    [@map_id]
    end
    end
    #=========================================
    # ▲ CLASS Game_Map Additional Code Ends
    #=========================================


    #=========================================
    # ▼ CLASS Scene_Title Additional Code Begins
    #=========================================
    class Scene_Title

    #Dubealex's Addition (from XRXS) to show Map Name on screen
     
    $map_infos load_data("Data/MapInfos.rxdata")
     for 
    key in $map_infos.keys
       $map_infos
    [key] = $map_infos[key].name
     end
     
     
    #Dubealex's addition to save data from the AMS in the save files
     
    $ams AMS.new
     
    end
    #=========================================
    # ▲ CLASS Scene_Title Additional Code Ends
    #=========================================


    #=========================================
    # ▼ CLASS Window_Base Additional Code Begins
    #=========================================
    class Window_Base Window

    #Dubealex Addition (from Phylomorphis) to use HTML Hex Code Colors
    def hex_color(string)
      
    red 0
      green 
    0
      blue 
    0
      
    if string.size != 6
        
    print("Hex strings must be six characters long.")
        print(
    "White text will be used.")
        return 
    Color.new(255255255255)
      
    end
      
    for i in 1..6
        s 
    string.slice!(/./m)
        if 
    == "#"
          
    print("Hex color string may not contain the \"#\" character.")
          print(
    "White text will be used.")
          return 
    Color.new(255255255255)
        
    end
        value 
    hex_convert(s)
        if 
    value == -1
          
    print("Error converting hex value.")
          print(
    "White text will be used.")
          return 
    Color.new(255255255255)
        
    end
        
    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(redgreenblue255)
    end

    #--------------------------------------------------------------------------

    def hex_convert(character)
      case 
    character
       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
       end
      
    return -1
    end
    end
    #=========================================
    # ▲ CLASS Window_Base Additional Code Ends
    #=========================================


    #=========================================
    # ▼ Class Air_Text Begins 
    #=========================================
    class Air_Text Window_Base

    def initialize
    (xydesignate_textcolor=0)
     
    super(x-16y-1632 designate_text.size 1256)
    self.opacity      0
    self
    .back_opacity 0
    self
    .contents Bitmap.new(self.width 32self.height 32)
    self.contents.width
    self.contents.height
    self
    .contents.font.name $ams.name_font_type
    self
    .contents.font.size $ams.name_font_size
    self
    .contents.font.color text_color(color)
    self.contents.draw_text(00whdesignate_text)
    end

    #--------------------------------------------------------------------------

    def dispose
    self
    .contents.clear
    super
    end
    end 
    #==========================================
    # ▲ CLASS Air_Text  Ends
    #==========================================


    #===================================================
    # ▼ CLASS Scene_Save Additional Code Begins
    #===================================================
    class Scene_Save Scene_File
     
     alias ams_original_write_save_data write_save_data
     
     def write_save_data
    (file)
       
    ams_original_write_save_data(file)
       
    Marshal.dump($amsfile)
     
    end
     
    end
    #===================================================
    # ▲ CLASS Scene_Save Additional Code Ends
    #=================================================== 
    #===================================================
    # ▼ CLASS Scene_Load Additional Code Begins
    #===================================================
    class Scene_Load Scene_File
      
    #--------------------------------------------------------------------------
      # œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
      #--------------------------------------------------------------------------
      
    def initialize
        
    # ƒeƒ“ƒ|ƒ‰ƒŠƒIƒuƒWƒFƒNƒg‚ðÄì¬
        
    $game_temp Game_Temp.new
        
    # ƒ^ƒCƒ€ƒXƒ^ƒ“ƒv‚ªÅV‚̃tƒ@ƒCƒ‹‚ð‘I‘ð
        
    $game_temp.last_file_index 0
        latest_time 
    Time.at(0)
        (
    KGC::TPS_PAGE_NUMBER 8).times { |i|
          
    filename make_filename(i)
          if 
    FileTest.exist?(filename)
            
    file File.open(filename"r")
            if 
    file.mtime latest_time
              latest_time 
    file.mtime
              $game_temp
    .last_file_index i
            end
            file
    .close
          end
        
    }
        
    super("Chän File cÇn ch¬i tiÕp")
      
    end
    end
    #===================================================
    # ▲ CLASS Scene_Load Additional Code Ends
    #===================================================
    =begin
    Dưới đây là cách sử dụng nó
    :

    Đổi màu chữ \c[mã màu] (VDđen:#000000; đỏ:#FF0000; xanh lá:#00FF00)

    Đổi màu chữ vĩnh viễn \color[mã màu] (sau khi lưu lạimàu chữ vẫn giữ nguyên)

    Đổi Font \t[tên Font]

    Cỡ chữ \h[cỡ] (từ 6-32)

    Độ mờ của chữ \o[số] (từ 0-255)

    Tốc độ chạy chữ \s[tốc độ] (từ 0-190 là nhanh nhất)

    Chạy chữ có âm thanh \a[tên file âm thanh trong SE] (dùng lệnh \a[] để tắt)

    Face Graphic \f[file name

    Hiện tên bản đồ \map

    Hiện giá tiền 
    \price[thứ tự của món đồ]

    Hiện tên nghề nghiệp \class[thứ tự nghề nghiệp]

    Hiển thị tiền đang có trong khung \g

    Hiển thị tên nhân vật 
    \n[thứ tự nhân vật]

    Hiển thị tên quái vật \m[thứ tự quái vật]

    Hiển thị tên trên đầu Message \name[tên] (có thể đưa vào tên nhân vật bằng cách đặt lệnh \n[thứ tự nhân vậtbên trong)

    Đổi màu tên trên đầu Message \z[mã màu]

    Message trên đầu nhân vậtEvent \p[số thứ tự Event] (0hiện trên đầu người chơi, -1bỏ bảng hội thoạichỉ hiện chữ)

    Varible \v[vID]

    Items \v[iID

    Skills \v[sID]

    Armor \v[aID

    Weapons \v[wID]

    Khoảng cách giữa các lời thoại \|: 1 giây, \. 0.25 giây

    Mở tắt chức năng chạy chữ 
    \>: mở, \<: tắt

    Mở tắt cho phép bỏ qua chạy chữ 
    \%

    Nhấn nút mới hiện tiếp lời thoại \!

    Cắt ngang lời thoại ngay lâkp tức \~

    Số có mũ \r[số]

    Mở lớn Message Call Script


    $ams.message_width=640
    $ams
    .message_x=0
    =end 
    sau đó thì khi cho lệnh show text thì bạn dùng lệnh \f[tên file],mà bạn xem cuối script có h.d = tiếng việt đó
     
  8. giang loves game

    giang loves game Mario & Luigi

    Tham gia ngày:
    22/8/04
    Bài viết:
    715
    Nơi ở:
    Ho Chi Minh City
    Cho mình hỏi, Khi đặt tên nhân vật ở đầu game, làm cách nào để tên đó hiện lên trong các câu đối thoại?
     
  9. Xx_Ice_Dragon_xX

    Xx_Ice_Dragon_xX Donkey Kong

    Tham gia ngày:
    19/4/06
    Bài viết:
    345
    Nơi ở:
    Đến từ chỗ ấy
    thì cũng dùng script AMS trên đó
    \n[thứ tự của nhân vật]
     
  10. giang loves game

    giang loves game Mario & Luigi

    Tham gia ngày:
    22/8/04
    Bài viết:
    715
    Nơi ở:
    Ho Chi Minh City
    Cảm ơn bạn... Thế là hơn 1 tháng làm quen với RMXP.
    Mình còn 1 thắc mắc nữa là ta có thể hiển thị đối thoại trong battle được không?
     
  11. Xx_Ice_Dragon_xX

    Xx_Ice_Dragon_xX Donkey Kong

    Tham gia ngày:
    19/4/06
    Bài viết:
    345
    Nơi ở:
    Đến từ chỗ ấy
    được,cái đó thì F9 rồi chọn mục Troops,ở dưới đó có 1 bảng lệnh trong battle đó
     
  12. Nickky9x

    Nickky9x Mega Man Lão Làng GVN

    Tham gia ngày:
    8/4/06
    Bài viết:
    3,272
    Nơi ở:
    Đào viên
    Cho mình xin vài cái titleset 3D của RPGXP đi :D!
     
  13. giang loves game

    giang loves game Mario & Luigi

    Tham gia ngày:
    22/8/04
    Bài viết:
    715
    Nơi ở:
    Ho Chi Minh City
    http://www.box.net/shared/qshv0zh3i5

    [​IMG]

    Đây là Demo mình tạo bởi RPG Maker XP, các bạn text thử xem, phần battle mình phân vân quá, không biết chọn kiểu battle nào.
     
  14. manicsoul

    manicsoul Youtube Master Race

    Tham gia ngày:
    7/9/07
    Bài viết:
    6
    cho hỏi lập trình rpg maker xp viết bằng VB hay C dzậy
     
  15. kim_minh

    kim_minh Donkey Kong

    Tham gia ngày:
    24/2/06
    Bài viết:
    432
    rpg maker xp sử dụng ngôn ngữ kịch bản là RUBY bạn à.
     
  16. bumbui

    bumbui Guest

    Tham gia ngày:
    11/3/05
    Bài viết:
    1,379
    Mình cần tạo chỗ save, Ngoài ra khi mình xài RM 2k3 thì khi đánh Mes cho nhân vật hơi dài thì tự nhiên nó mất khúc luôn không thể hiện đủ, và chỉ dùm cách làm một kịch bản bắt buộc :
    (vd : sôn gô ku đi vô nhà thì tự động sẽ có những mes xuất hiện theo thứ tự như "bunma : a con cậu đó hả", sau đó sôn gô ku đi tới chỗ Bun ma...hiện giờ mình chưa làm được đoạn cutscene như vầy nữa chứ đừng nói đặt lời thoại theo thứ tự). Ngoài ra còn đặt BG cho cảnh chiến đấu nữa, nó cứ cho mãi một BG chứ ko cho muỗn Group một BG. Phải làm được Cutscene mới mong tạo phần nhiệm vụ...:( còn nữa, ai có mấy cái font việt hóa hay avatar quái, những thứ linh tinh khác thì cho tớ link down nhé (chủ yếu là kiếm avatar người chết, Resident Evil, zombie để làm RMXP)
     
  17. [K]een

    [K]een Youtube Master Race

    Tham gia ngày:
    27/6/08
    Bài viết:
    12
    Làm sao set cho event di chuyển từ xa đến player , rồi mới nói 1 câu nào đó nhỉ????
    Mình làm đủ cách mà nó vẫn vừa đi vừa nói T T T T...
     
  18. fairyhell

    fairyhell Youtube Master Race

    Tham gia ngày:
    7/4/07
    Bài viết:
    69
    Các bạn ở đây chỉ dùng RPG Maker thôi ah`, có ai sử dụng Game Maker ko?. Nếu ai ở cấp bật Advance thì có thể chỉ mình chỗ nào có hướng dẫn sử dụng ngôn ngữ GML trong GM ko? Thanks
     
  19. Just_Only_You

    Just_Only_You Youtube Master Race

    Tham gia ngày:
    5/8/04
    Bài viết:
    8
    Cho mình hỏi 1 câu: Vấn đề xảy ra khi không cho double input ( ví dụ không thể nhấn nút up và tới để đi chéo ) là gì và cách giải quyết ^^. Thanks trước nha.
     
  20. finalsword3

    finalsword3 Youtube Master Race

    Tham gia ngày:
    5/10/08
    Bài viết:
    2
    @ Keen: Ban chọn lệnh Set Move Route trong bảng lệnh thứ 2, cho nhân vật Move Down
    hoặc Up hoặc trái phải, xong chọn tiếp lệnh Wait to move Complete ngay dưới lệnh Set
    Move Route ( Lệnh Wait này là chờ cho event Move xong), sau đó mới chèn hội thoại,vậy là nó đi xong thì mới nói chuyện

    @ Just_Only_You: Của bạn đây
    http://atelier-rgss.com/RGSS/System/XP_Sys01.html
    ấn vào Web đó, kéo xuống chứ DOwnload (nhẹ mà), sẽ có thứ bạn cần, còn hay hơn
    thé ::).
     

Chia sẻ trang này