Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

[Resolved]Need help about ccoa tutorial

Status
Not open for further replies.

rutix

Member

Hi all im a bit new to rmxp and im following tutorials. Well i followed ccoa's tutorial and everything went fine till i got to the part for making window.

I got this error.
http://img256.imageshack.us/img256/4130/error3yx.png[/IMG]

This is the code
Code:
#==============================================================================
# ** Window_Message
#------------------------------------------------------------------------------
#  This message window is used to display text.
#==============================================================================

class Window_Message < Window_Selectable
# ------------------------------------
  def initialize
    super(80, 304, 480, 160)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
    self.z = 9998
    @update_text = true
    @fade_in = false
    @fade_out = false
    @contents_showing = false
    @cursor_width = 0
    self.active = false
    self.index = -1
  end
# ------------------------------------
  def dispose
    terminate_message
    $game_temp.message_window_showing = false
    if @input_number_window != nil
      @input_number_window.dispose
    end
    super
  end
# ------------------------------------
  def terminate_message
    self.active = false
    self.pause = false
    self.index = -1
    self.contents.clear
    @update_text = true
    @contents_showing = false
    if $game_temp.message_proc != nil
      $game_temp.message_proc.call
    end
    $game_temp.message_text = nil
    $game_temp.message_proc = nil
    $game_temp.choice_start = 99
    $game_temp.choice_max = 0
    $game_temp.choice_cancel_type = 0
    $game_temp.choice_proc = nil
    $game_temp.num_input_start = 99
    $game_temp.num_input_variable_id = 0
    $game_temp.num_input_digits_max = 0
    if @gold_window != nil
      @gold_window.dispose
      @gold_window = nil
    end
  end
# ------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    @x = @y = 0
    @cursor_width = 0
    if $game_temp.choice_start == 0
      @x = 8
    end
    if $game_temp.message_text != nil
      @text = $game_temp.message_text
      begin
        last_text = @text.clone
        @text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
      end until @text == last_text
      @text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      @text.gsub!(/\\[Ee]\[([0-9]+)\]/) do
        self.y = $game_map.events[$1.to_i].screen_y - self.height - 64
        self.x = $game_map.events[$1.to_i].screen_x - self.width / 2
        if self.y < 0 
          self.y = 0
        elsif self.y > 480 - self.height
          self.y = 480 - self.height
        end
        if self.x < 0 
          self.x = 0
        elsif self.x > 680 - self.width - 64
          self.x = 640 - self.width
        end
        ""
      end
      @text.gsub!(/\\\\/) { "\000" }
      @text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
      @text.gsub!(/\\[Gg]/) { "\002" }
    end
  end
# ------------------------------------
  def reset_window
    if $game_temp.in_battle
      self.y = 16
    else
      case $game_system.message_position
      when 0
        self.y = 16
      when 1
        self.y = 160
      when 2
        self.y = 304
      end
    end
    if $game_system.message_frame == 0
      self.opacity = 255
    else
      self.opacity = 0
    end
    self.back_opacity = 160
  end
# ------------------------------------
  def update_text
    if @text != nil
      while ((c = @text.slice!(/./m)) != nil)
        if c == "\000"
          c = "\\"
        end
        if c == "\001"
          @text.sub!(/\[([0-9]+)\]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end
        end
        if c == "\002"
          if @gold_window == nil
            @gold_window = Window_Gold.new
            @gold_window.x = 560 - @gold_window.width
            if $game_temp.in_battle
              @gold_window.y = 192
            else
              @gold_window.y = self.y >= 128 ? 32 : 384
            end
            @gold_window.opacity = self.opacity
            @gold_window.back_opacity = self.back_opacity
          end
          next
        end
        if c == "\n"
          if @y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, @x].max
          end
          @y += 1
          @x = 0
          if @y >= $game_temp.choice_start
            @x = 8
          end
          next
        end
        self.contents.draw_text(4 + @x, 32 * @y, 40, 32, c)
        @x += self.contents.text_size(c).width
        $game_system.se_play($data_system.decision_se)
        return
      end
    end
    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.x = self.x + 8
      @input_number_window.y = self.y + $game_temp.num_input_start * 32
    end
    @update_text = false #�š
  end
# ------------------------------------
  def update
    super
    if @fade_in
      self.contents_opacity = 255
      if @input_number_window != nil
        @input_number_window.contents_opacity = 255
      end
      if self.contents_opacity == 255
        @fade_in = false
      end
    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 @update_text
        update_text
        return
      end
      if $game_temp.choice_max == 0
        self.pause = true
      end
      if self.pause == true && Input.dir4 != 0
        terminate_message
      end
      if Input.trigger?(Input::B)
        if $game_temp.choice_max > 0 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
        terminate_message if self.pause == true
      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
        terminate_message
      end
      return
    end
    if @fade_out == false and $game_temp.message_text != nil
      @contents_showing = true
      $game_temp.message_window_showing = true
      reset_window
      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 = 0
      if self.opacity == 0
        self.visible = false
        @fade_out = false
        $game_temp.message_window_showing = false
      end
      return
    end
  end
# ------------------------------------
  def update_cursor_rect
    if @index >= 0
      n = $game_temp.choice_start + @index
      self.cursor_rect.set(8, n * 32, @cursor_width, 32)
    else
      self.cursor_rect.empty
    end
  end
end

And this is the line where it is about

Code:
      @text.gsub!(/\\[Ee]\[([0-9]+)\]/) do
        self.y = $game_map.events[$1.to_i].screen_y - self.height - 64
        self.x = $game_map.events[$1.to_i].screen_x - self.width / 2
        if self.y < 0 
          self.y = 0
        elsif self.y > 480 - self.height
          self.y = 480 - self.height
        end

Can someone help me?
 
You might've accidentially deleted the screen_x and screen_y definitions... insert these (default ones) somewhere reasonable inside class Game_Character:
Code:
  #--------------------------------------------------------------------------
  # * Get Screen X-Coordinates
  #--------------------------------------------------------------------------
  def screen_x
    # Get screen coordinates from real coordinates and map display position
    return (@real_x - $game_map.display_x + 3) / 4 + 16
  end
  #--------------------------------------------------------------------------
  # * Get Screen Y-Coordinates
  #--------------------------------------------------------------------------
  def screen_y
    # Get screen coordinates from real coordinates and map display position
    y = (@real_y - $game_map.display_y + 3) / 4 + 32
    # Make y-coordinate smaller via jump count
    if @jump_count >= @jump_peak
      n = @jump_count - @jump_peak
    else
      n = @jump_peak - @jump_count
    end
    return y - (@jump_peak * @jump_peak - n * n) / 2
  end
 
BlueScope if it was that then the error would've said

undefined method 'screen_y' for Game_Character:Class

or something like that

actually the event you are trying to reference does not exist
 

Anonymous

Guest

In whatever event you used the message code in (\e), change the number to an event that actually exists.

Although, there are much better message scripts out there. This was only in the tutorial to give people a little bit of an insight into scripting. My own UMS has many more features and is easier to install.
 
This topic has been resolved. If rutix or any other users have any questions or further problems regarding this topic, please create a new thread about them.

Thank you!
 
Status
Not open for further replies.

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top