I have a mouse script I'm using:
But, unforchantly, it clicks far to the right and a little down... Any way to fix this?
Code:
#----------------------------------------------------------------------------
#Credits: This is an adaptation from a script created by shun ([url=http://simp.nobody.jp/]http://simp.nobody.jp/[/url])
#Also looked at Cybersam's work and Astro_mech and Mr.Mo's mouse script edits to
#learn how onmouse events work.
#----------------------------------------------------------------------------
# TO USE:
# In each map event, put the name of the cursor you want to show as a comment.
# The comment must be the first event command. Make sure that you put the cursor
# in your Icons directory (name in comment and icon name must match exactly)
#----------------------------------------------------------------------------
Â
Â
module Input
 #--------------------------------------------------------------------------
 # ◠get winAPIs
 #--------------------------------------------------------------------------
 #gsm = Win32API.new('user32', 'GetSystemMetrics', 'i', 'i')
 @mouse_status = [[0, 1], [0, 2], [0, 4]] #left, right, middle mouse
 @gaks = Win32API.new('user32', 'GetAsyncKeyState', 'i', 'i')
 @cursor_pos = Win32API.new('user32', 'GetCursorPos', 'p', 'i')
 @scr2cli = Win32API.new('user32', 'ScreenToClient', %w(l p), 'i')
 @client_rect = Win32API.new('user32', 'GetClientRect', %w(l p), 'i')
 @readini = Win32API.new('kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l')
 @findwindow = Win32API.new('user32', 'FindWindowA', %w(p p), 'l')
 show_cursor = Win32API.new('user32', 'ShowCursor', 'l', 'l')
 @last_pos = [0, 0].pack('ll') Â
 @pos_x = @pos_y = 0
 @width = 0
 @height = 0
 n = (true ? 0 : 1)
 show_cursor.call(n)
 module_function
 Â
 #--------------------------------------------------------------------------
 # ◠get the window
 #--------------------------------------------------------------------------
 def hwnd
  game_name = "\0" * 256
  @readini.call('Game', 'Title', '', game_name, 255, ".\\Game.ini")
  game_name.delete!("\0")
  h = @findwindow.call('RGSS Player', game_name)
  if h == 0
   n = 0
   while h == 0
    h = @findwindow.call('RGSS Player', "#{game_name} - #{n} FPS")
    n += 1
   end
  end
  return h
 end
Â
 #--------------------------------------------------------------------------
 # ◠get the global position of the mouse
 #--------------------------------------------------------------------------
 def global_pos
  pos = [0, 0].pack('ll')
  if @cursor_pos.call(pos) != 0
   return pos.unpack('ll')
  else
   return nil
  end
 end
 Â
 #--------------------------------------------------------------------------
 # ◠Position of the mouse in the game
 #   catch_anywhere : get position if mouse is outside of game screen
 #--------------------------------------------------------------------------
 def pos(catch_anywhere = true)
    Â
  if (global_pos != @last_pos)
  Â
   @last_pos = *global_pos
  Â
   string = global_pos.to_s + " " + @last_pos.to_s
   $debug_string = string.to_s
  Â
   @pos_x, @pos_y = screen_to_client(*global_pos)
   @width, @height = client_size
  Â
  end
 Â
  if (@pos_x >= 0 and @pos_y >= 0 and @pos_x < @width and @pos_y < @height) Â
   return @pos_x, @pos_y
  else
   return 0, 0
  end
 Â
 end
Â
 #--------------------------------------------------------------------------
 # ◠Position of the mouse on screen
 #   x : x coordinate
 #   y : y coordinate
 #--------------------------------------------------------------------------
 def screen_to_client(x, y)
  return nil unless x and y
  pos = [x, y].pack('ll')
  if @scr2cli.call(hwnd, pos) != 0
   return pos.unpack('ll')
  else
   return nil
  end
 end
Â
 #--------------------------------------------------------------------------
 # ◠Size of the game window
 #--------------------------------------------------------------------------
 def client_size
  rect = [0, 0, 0, 0].pack('l4')
  @client_rect.call(hwnd, rect)
  right, bottom = rect.unpack('l4')[2..3]
  return right, bottom
 end
Â
 #--------------------------------------------------------------------------
 # ◠Check to see if the mouse is over an event
 #-------------------------------------------------------------------------- Â
 def check_event(x, y)
 Â
  for event in $game_map.events.values
   # change icon if an event is encountered
   if (event.x == x or event.x == (x-1)) and (event.y == y or event.y == (y+1))
    if event.list && event.list[0].code == 108
      icon = event.list[0].parameters
      icon = icon.to_s
      if icon == "Arrow2" || icon == "Arrow3" || icon == "Arrow4" || icon == "Arrow5" || icon == "Arrow6"
       $mouse_icon = icon.to_s
      end
    end
    break
   end
  Â
   # if even is not encountered, use default icon
   $mouse_icon = "Arrow"
  end
Â
 end Â
Â
 def icon_name(name)
  $msg = name.to_s
  $mouse_icon = name.to_s
 end
Â
 #--------------------------------------------------------------------------
 # ◠watch for left mouse actions
 #   id : Mouse (0:Left, 1:Right, 2:Center)
 #--------------------------------------------------------------------------
 def mouse_press?(id = 0)
  if $scene.is_a?(Scene_Map)
   # get the icon to display
   if @mouse_status[id][0] <= 0
    $hoverx = (pos[0] + $game_map.display_x / 4) / 32
    $hovery = (pos[1] + $game_map.display_y / 4) / 32
    icon = check_event($hoverx,$hovery)
   end Â
   # move character when mouse is pressed
   if @mouse_status[id][0] > 0
    $mousex = pos[0] + $game_map.display_x / 4
    $mousey = pos[1] + $game_map.display_y / 4
    $move = 1
   end
   # don't move character if message window showing
   if $game_temp.message_window_showing
    $move = 0
   end
  end
  return @mouse_status[id][0] > 0
 end
Â
 #--------------------------------------------------------------------------
 # ◠Watch for mouse button actions (especially right mouse button)
 #   id : mouse (0:Left, 1:Right, 2:Center)
 #--------------------------------------------------------------------------
 def mouse_trigger?(id = 0) Â
  return @mouse_status[id][0] == 1  Â
 end
Â
 #--------------------------------------------------------------------------
 # ◠Check to see if a mouse action was repeated
 #   id : mouse (0:Left, 1:Right, 2:Center)
 #--------------------------------------------------------------------------
 def mouse_repeat?(id = 0)
  if @mouse_status[id][0] <= 0
   return false
  else
   result = @mouse_status[id][0] % 5 == 1 and @mouse_status[id][0] % 5 != 2
   return result
  end
 end
Â
 #--------------------------------------------------------------------------
 # ◠Update the mouse
 #--------------------------------------------------------------------------
 def mouse_update
  for i in @mouse_status
   n = @gaks.call(i[1])
   if n == 0 or n == 1
    i[0] = (i[0] > 0 ? i[0] * -1 : 0)
   else
    i[0] = (i[0] > 0 ? i[0] + 1 : 1)
   end
  end
 end
end
Â
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
class << Input
 #--------------------------------------------------------------------------
 # ◠Update old input calls
 #--------------------------------------------------------------------------
 alias old_update update unless $@
 def Input.update
  old_update
  mouse_update
  $mouse.update
 end
 #--------------------------------------------------------------------------
 # ◠Update old input triggers
 #   num : A, B, C
 #--------------------------------------------------------------------------
 alias old_trigger? trigger? unless $@
 def Input.trigger?(num)
  return old_trigger?(num) if Input.pos(false) == nil
  case num
  when Input::A
   return (old_trigger?(num) or mouse_trigger?(2))
  when Input::B
   return (old_trigger?(num) or mouse_trigger?(1))
  when Input::C
   return (old_trigger?(num) or mouse_trigger?)
  else
   return old_trigger?(num)
  end
 end
 #--------------------------------------------------------------------------
 # ◠Check to see if an old input call was repeated
 #   num : B
 #--------------------------------------------------------------------------
 alias old_repeat? repeat? unless $@
 def repeat?(num)
  return old_repeat?(num) if Input.pos(false) == nil
  if num == Input::B
   return (old_repeat?(num) or mouse_repeat?(1))
  else
   return old_repeat?(num)
  end
 end
end
Â
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
class Game_Player < Game_Character
 #--------------------------------------------------------------------------
 # ◠Move the player toward the mouse
 #--------------------------------------------------------------------------
 alias mouse_update update
 def update
 Â
  rx = $mousex = (@real_x / 4 + 16)
  ry = $mousey = (@real_y / 4 + 16) Â
 Â
  # if an arrow key is pressed, stop path finding
  $move = 0 if Input.dir4 != 0
 Â
  # move to a specified area on the map, using the mouse
  if $move == 1
    unless moving? or $game_system.map_interpreter.running? or
      @move_route_forcing or $game_temp.message_window_showing or
      (rx.abs <= 16 and ry.abs <= 16)
     rad = -(Math.atan2(ry, rx) / Math::PI * 180)
     case rad
     when -157.5...-112.5
      move_lower_left
     when -112.5...-67.5
      move_down
     when -67.5...-22.5
      move_lower_right
     when -22.5...22.5
      move_right
     when 22.5...67.5
      move_upper_right
     when 67.5...112.5
      move_up
     when 112.5...157.5
      move_upper_left
     else
      move_left
     end
    end
   Â
    # if the path has been reached, stop moving
    if (rx.abs <= 16 and ry.abs <= 16)
     $move = 0
    end
   Â
  end
 Â
  #update the mouse
  mouse_update
 Â
 end
Â
end
Â
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
class Sprite_Mouse < Sprite
 #--------------------------------------------------------------------------
 # ◠Initialize the mouse
 #--------------------------------------------------------------------------
 def initialize
  super
  self.bitmap = RPG::Cache.icon($mouse_icon.to_s)
  self.z = 10001
  self.ox, self.oy = [16, 0]
  self.visible = false
  self.src_rect.set(0, 0, 32, 32)
  update
 end
 #--------------------------------------------------------------------------
 # ◠Dispose of the mouse
 #--------------------------------------------------------------------------
 def dispose
  if self.bitmap != nil
   self.bitmap.dispose
  end
  super
 end
 #--------------------------------------------------------------------------
 # ◠Update the mouse
 #--------------------------------------------------------------------------
 def update
  super
  self.bitmap = RPG::Cache.icon($mouse_icon.to_s)  Â
  self.visible = true if self.visible == false and $scene != nil
  self.x, self.y = Input.pos
  if Input.mouse_press?
   self.src_rect.set(0, 0, 32, 32)  Â
  end
  return
 end
Â
end
Â
$mouse = Sprite_Mouse.new
Â
class Window_Selectable < Window_Base
 #--------------------------------------------------------------------------
 # ◠Initialize the mouse
 #--------------------------------------------------------------------------
 alias mouse_initialize initialize
 def initialize(x, y, width, height)
  mouse_initialize(x, y, width, height)
  @scroll_wait = 0
 end
 #--------------------------------------------------------------------------
 # ◠Update the mouse
 #--------------------------------------------------------------------------
 alias mouse_update update
 def update
  mouse_update
  mouse_operation if self.active
 end
 #--------------------------------------------------------------------------
 # ○ Perform mouse operations
 #--------------------------------------------------------------------------
 def mouse_operation
  mx = Input.pos[0] - (self.x - self.ox + 16)
  my = Input.pos[1] - (self.y - self.oy + 16)
  width = self.width / @column_max - 32
  height = 32
Â
  for index in 0...@item_max
   x = index % @column_max * (width + 32)
   y = index / @column_max * 32
   if mx > x and
     mx < x + width and
     my > y and
     my < y + height
    mouse_cursor(index)
    break
   end
  end
 end
 #--------------------------------------------------------------------------
 # ○ Track the position of the mouse cursor
 #--------------------------------------------------------------------------
 def mouse_cursor(index)
  return if @index == index
  @scroll_wait -= 1 if @scroll_wait > 0
  row1 = @index / @column_max
  row2 = index / @column_max
  bottom = self.top_row + (self.page_row_max - 1)
  if row1 == self.top_row and row2 < self.top_row
   return if @scroll_wait > 0
   @index = [@index - @column_max, 0].max
   @scroll_wait = 4
  elsif row1 == bottom and row2 > bottom
   return if @scroll_wait > 0
   @index = [@index + @column_max, @item_max - 1].min
   @scroll_wait = 4
  else
   @index = index
  end
  $game_system.se_play($data_system.cursor_se)
 end
end
Â
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
Â
class Window_MenuStatus < Window_Selectable
 def mouse_operation Â
  return if @index < 0
  mx = Input.pos[0] - (self.x - self.ox + 16)
  my = Input.pos[1] - (self.y - self.oy + 16)
  x = 0
  width = self.width - 32
  height = 96
  for index in 0...@item_max
   y = index * 116
   if mx > x and
     mx < x + width and
     my > y and
     my < y + height
    mouse_cursor(index)
    break
   end
  end
 end
end
Â
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
Â
class Window_Target < Window_Selectable
 def mouse_operation
  return if @index <= -1
  mx = Input.pos[0] - (self.x - self.ox + 16)
  my = Input.pos[1] - (self.y - self.oy + 16)
  x = 0
  width = self.width - 32
  height = 96
  for index in 0...@item_max
   y = index * 116
   if mx > x and
     mx < x + width and
     my > y and
     my < y + height
    mouse_cursor(index)
    break
   end
  end
 end
end
Â
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
Â
class Window_NameInput < Window_Base
 #--------------------------------------------------------------------------
 # ◠Update the position of the mouse
 #--------------------------------------------------------------------------
 alias mouse_update update
 def update
  mouse_update
  mouse_operation if self.active
 end
 #--------------------------------------------------------------------------
 # ◠Perform mouse operations
 #--------------------------------------------------------------------------
 def mouse_operation
  last_index = @index
  mx = Input.pos[0] - (self.x - self.ox + 16)
  my = Input.pos[1] - (self.y - self.oy + 16)
  width = 28
  height = 32
  for index in 0...180
   x = 4 + index / 5 / 9 * 152 + index % 5 * 28
   y = index / 5 % 9 * 32
   if mx > x and
     mx < x + width and
     my > y and
     my < y + height
    @index = index
    break
   end
  end
  x = 544
  y = 9 * 32
  width = 64
  if mx > x and
    mx < x + width and
    my > y and
    my < y + height
   @index = 180
  end
  $game_system.se_play($data_system.cursor_se) unless @index == index
 end
end
Â
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
Â
class Window_Message < Window_Selectable
 #--------------------------------------------------------------------------
 # ◠Perform mouse operations
 #--------------------------------------------------------------------------
 def mouse_operation
  mx = Input.pos[0] - (self.x - self.ox + 16)
  my = Input.pos[1] - (self.y - self.oy + 16)
  x = 8
  width = 128
  height = 32
  for index in 0...@item_max
   y = ($game_temp.choice_start + index) * 32
    Â
   if mx > x and mx < x + width and my > y and my < y + height
    mouse_cursor(index)
    break
   end
  end
 end
end
Â
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
Â
class Window_PartyCommand < Window_Selectable
 def mouse_operation
  mx = Input.pos[0] - (self.x - self.ox + 16)
  my = Input.pos[1] - (self.y - self.oy + 16)
  y = 0
  width = 128
  height = 32
  for index in 0...@item_max
   x = 160 + index * 160
   if mx > x and
     mx < x + width and
     my > y and
     my < y + height
    mouse_cursor(index)
    break
   end
  end
 end
end
Â
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
Â
class Window_MenuPosition < Window_Selectable
 def mouse_operation
  mx = Input.pos[0] - (self.x - self.ox + 16)
  my = Input.pos[1] - (self.y - self.oy + 16)
  y = 0
  width = self.contents.width / @item_max - 10
  height = 32
  for index in 0...@item_max
   x = self.contents.width / (@item_max) * index + 4
   if mx > x and
     mx < x + width and
     my > y and
     my < y + height
    mouse_cursor(index)
    break
   end
  end
 end
end
Â
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
Â
class Arrow_Base < Sprite
 alias mouse_update update
 def update
  mouse_update
  mouse_operation
 end
end
Â
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
Â
class Arrow_Enemy < Arrow_Base
 def mouse_operation
  mx, my = Input.pos
  for index in 0...$game_troop.enemies.size
   enemy = $game_troop.enemies[index]
   bitmap = RPG::Cache.battler(enemy.battler_name, 0)
   width = bitmap.width
   height = bitmap.height
   x = enemy.screen_x - width / 2
   y = enemy.screen_y - height
   if mx > x and
     mx < x + width and
     my > y and
     my < y + height
    break if @index == index
    @index = index
    $game_system.se_play($data_system.cursor_se)
    break
   end
  end
 end
end
Â
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
Â
class Arrow_Actor < Arrow_Base
 def mouse_operation
  mx, my = Input.pos
  for index in 0...$game_party.actors.size
   index = $game_party.actors.size - index - 1
   actor = $game_party.actors[index]
   bitmap = RPG::Cache.battler(actor.battler_name, 0)
   width = bitmap.width
   height = bitmap.height
   x = actor.screen_x - width / 2
   y = actor.screen_y - height
   if mx > x and
     mx < x + width and
     my > y and
     my < y + height
    break if @index == index
    @index = index
    $game_system.se_play($data_system.cursor_se)
    break
   end
  end
 end
end
Â
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
Â
class Scene_File
 #--------------------------------------------------------------------------
 # ◠Update the mouse
 #--------------------------------------------------------------------------
 alias mouse_update update
 def update
  mouse_update
  save = false
  mx, my = Input.pos
  x = 0
  width = (save ? 160 : 640)
  height = 104
  for index in 0...4
   y = 64 + index % 4 * 104
   if mx > x and
     mx < x + width and
     my > y and
     my < y + height
    break if @file_index == index
    @savefile_windows[@file_index].selected = false
    @file_index = index
    @savefile_windows[@file_index].selected = true
    $game_system.se_play($data_system.cursor_se)
    break
   end
  end
 end
end