じ☆ve冰风 发表于 2026-7-17 19:56:23

Super Simple Mouse Script

SUPER SIMPLE MOUSE SCRIPT

Author- Shaz, Near Fantastica, SephirothSpawn, Amaranth

Introduction

This script will let you play your RMXP game with the keyboard or a mouse.

Features


[*]Pathfinding
[*]Icons on events
[*]Custom mouse cursors
[*]Mouse-enabled menus
Screenshots



Enter the icon name as a comment on the first line. The mouse pointer will change to this icon when it moves over the event.

Other options go on the second line (if using both the Mouse and the Name option, Name must come second):


[*]Mouse will make the PC walk to the offset, then turn and interact with the event
[*]So, Mouse will make the player walk one tile to the right and two tiles below the event, turn up, and trigger the event.
[*]Useful for reading signposts, mailboxes, bookshelves, etc, where you want the player to approach from a specific direction
[*]Name abc def will make the name appear next to the event when you move the mouse over it




How to Use

Add the following scripts above Main.

Demo

SuperSimpleMouseSystem.zip

Mod Note: The above demo does not work anymore. You can find a working demo here.

Scripts

Start Game

Spoilermodule StartGame   $game_mouse = true   end



Mouse 1

Spoiler#============================================================================== # ** Modules.Mouse Input (7.0)            By Near Fantastica & SephirothSpawn#==============================================================================module Mouse#--------------------------------------------------------------------------# * Mouse to Input Triggers##   key => Input::KeyCONSTANT (key: 0 - Left, 1 - Middle, 2 - Right)#--------------------------------------------------------------------------Mouse_to_Input_Triggers = {0 => Input::C, 1 => Input::B, 2 => Input::A}#--------------------------------------------------------------------------# * API Declaration#--------------------------------------------------------------------------GAKS          = Win32API.new('user32',    'GetAsyncKeyState', 'i',   'i')GSM         = Win32API.new('user32',    'GetSystemMetrics', 'i',   'i')Cursor_Pos    = Win32API.new('user32',    'GetCursorPos',   'p',   'i')$ShowCursor   = Win32API.new('user32',    'ShowCursor',       'i',   'l')Scr2cli       = Win32API.new('user32',    'ScreenToClient',   %w(l p), 'i')Client_rect   = Win32API.new('user32',    'GetClientRect',    %w(l p), 'i')Findwindow    = Win32API.new('user32',    'FindWindowA',      %w(p p), 'l')Readini       = Win32API.new('kernel32','GetPrivateProfileStringA',                              %w(p p p p l p), 'l')                                 # if graphical effects turned on, show fancy cursor$ShowCursor.call($game_mouse ? 0 : 1)    @triggers   =   [, , ]   @old_pos      =   0@pos_i      =   0      #--------------------------------------------------------------------------# * Mouse Grid Position#--------------------------------------------------------------------------def self.grid      # Return Nil if Position is Nil    return nil if @pos.nil?      # Get X & Y Locations      x = (@pos + $game_map.display_x / 4) / 32    y = (@pos + $game_map.display_y / 4) / 32      # Vehicle Stuff    $mouse_x = x    $mouse_y = y         # Return X & Y    return       end#--------------------------------------------------------------------------# * Mouse Position#--------------------------------------------------------------------------def self.position    return @pos == nil ? : @posend#--------------------------------------------------------------------------# * Mouse Global Position#--------------------------------------------------------------------------def self.global_pos    # Packs 0 Position    pos = .pack('ll')    # Returns Unpacked Cursor Position Call    return Cursor_Pos.call(pos) == 0 ? nil : pos.unpack('ll')end    #--------------------------------------------------------------------------# * Screen to Client#--------------------------------------------------------------------------def self.screen_to_client(x=0, y=0)    pos = .pack('ll')    return Scr2cli.call(self.hwnd, pos) == 0 ? nil : pos.unpack('ll')end      #--------------------------------------------------------------------------# * Mouse Position#--------------------------------------------------------------------------   def self.pos    global_pos = .pack('ll')      gx, gy = Cursor_Pos.call(global_pos) == 0 ? nil : global_pos.unpack('ll')    local_pos = .pack('ll')    x, y = Scr2cli.call(self.hwnd, local_pos) == 0 ? nil : local_pos.unpack('ll')      # Begins Test    begin      # Return X & Y or Nil Depending on Mouse Position      if (x >= 0 && y >= 0 && x <= 640 && y <= 480)      return x, y      else      return -20, -20      end    rescue      return 0, 0 #nil    end      end      #--------------------------------------------------------------------------# * Update Mouse Position#--------------------------------------------------------------------------def self.update      # Update Position    old_pos = @pos    @pos = self.pos      # agf = hide system mouse    if !$mouse_sprite.visible && old_pos != @pos      $mouse_sprite.visible = true    end      # when mouse leaves game window, show system mouse    if old_pos != [-20, -20] && @pos == [-20, -20]      $ShowCursor.call(1)    # when mouse is in game window, show custom mouse if it's turned on    elsif old_pos == [-20, -20] && @pos != [-20, -20]      $ShowCursor.call($game_mouse ? 0 : 1)    end    # Update Triggers    for i in @triggers      # Gets Async State      n = GAKS.call(i)      # If 0 or 1      if .include?(n)      i = (i > 0 ? i * -1 : 0)      else      i = (i > 0 ? i + 1 : 1)      end    end      end#--------------------------------------------------------------------------# * Trigger?#   id : 0:Left, 1:Right, 2:Center#--------------------------------------------------------------------------def self.trigger?(id = 0)      #only user trigger if in range of screen    pos = self.pos    if pos != [-20,-20]      case id      when 0# Left      return @triggers == 1      when 1# Right (only when menu enabled)      if @triggers == 1 && !$game_system.menu_disabled          return @triggers == 1            end      when 2# Center      return @triggers == 1    end            end      end#--------------------------------------------------------------------------# * Repeat?#   id : 0:Left, 1:Right, 2:Center#--------------------------------------------------------------------------def self.repeat?(id = 0)    if @triggers <= 0      return false    else      return @triggers % 5 == 1 && @triggers % 5 != 2    endend#--------------------------------------------------------------------------# * Screen to Client#--------------------------------------------------------------------------def self.screen_to_client(x=0, y=0)    # Pack X & Y    pos = .pack('ll')    # Return Unpacked Position or Nil    return Scr2cli.call(self.hwnd, pos) == 0 ? nil : pos.unpack('ll')end#--------------------------------------------------------------------------# * Hwnd - window handle#--------------------------------------------------------------------------def self.hwnd    if @hwnd.nil?      # Finds Game Name from ini file      game_name = "\0" * 256      Readini.call('Game', 'Title', '', game_name, 255, ".\\Game.ini")      game_name.delete!("\0")      # Finds Window      @hwnd = Findwindow.call('RGSS Player', game_name)    end    return @hwndend#--------------------------------------------------------------------------# * Client Size#--------------------------------------------------------------------------def self.client_size    # Packs Empty Rect    rect = .pack('l4')    # Gets Game Window Rect    Client_rect.call(self.hwnd, rect)    # Unpacks Right & Bottom    right, bottom = rect.unpack('l4')    # Returns Right & Bottom    return right, bottomendend#==============================================================================# ** Input#==============================================================================class << Input#------------------------------------------------------------------------# * Alias Listings#------------------------------------------------------------------------unless self.method_defined?
seph_mouse_input_update)    alias_method :seph_mouse_input_update,   :update    alias_method :seph_mouse_input_trigger?, :trigger?    alias_method :seph_mouse_input_repeat?,:repeat?end#------------------------------------------------------------------------# * Frame Update#------------------------------------------------------------------------def update    # Update Mouse    Mouse.update    # Original Update    seph_mouse_input_updateend#--------------------------------------------------------------------------# * Trigger? Test#--------------------------------------------------------------------------def trigger?(constant)    # Return true if original test is true    return true if seph_mouse_input_trigger?(constant)    # If Mouse Position isn't Nil    unless Mouse.pos.nil?      # If Mouse Trigger to Input Trigger Has Constant      if Mouse::Mouse_to_Input_Triggers.has_value?(constant)      # Return True if Mouse Triggered      mouse_trigger = Mouse::Mouse_to_Input_Triggers.index(constant)      return true if Mouse.trigger?(mouse_trigger)            end    end    # Return False    return falseend#--------------------------------------------------------------------------# * Repeat? Test#--------------------------------------------------------------------------def repeat?(constant)    # Return true if original test is true    return true if seph_mouse_input_repeat?(constant)    # If Mouse Position isn't Nil    unless Mouse.pos.nil?      # If Mouse Trigger to Input Trigger Has Constant      if Mouse::Mouse_to_Input_Triggers.has_value?(constant)      # Return True if Mouse Triggered      mouse_trigger = Mouse::Mouse_to_Input_Triggers.index(constant)             return true if Mouse.repeat?(mouse_trigger)      end    end    # Return False    return falseendend#==============================================================================#¦ Path Finding#==============================================================================# Near Fantastica# Version 1# 29.11.05#==============================================================================class Game_Character    #--------------------------------------------------------------------------    alias nf_pf_game_character_initialize initialize    alias nf_pf_game_character_update update    #--------------------------------------------------------------------------    attr_accessor :map    attr_accessor :runpath    attr_accessor
vrdest    #--------------------------------------------------------------------------    def initialize      nf_pf_game_character_initialize      @map = nil      @runpath = false      @ovrdest = false    end    #--------------------------------------------------------------------------    def update      run_path if @runpath == true      nf_pf_game_character_update    end    #--------------------------------------------------------------------------    def run_path      return if moving?      step = @map[@x,@y]      if step == 1      @map = nil      @runpath = false      return      end            dir = rand(2)      case dir      when 0      move_right if @map[@x+1,@y] == step - 1 and step != 0      move_down if @map[@x,@y+1] == step - 1 and step != 0      move_left if @map[@x-1,@y] == step -1 and step != 0      move_up if @map[@x,@y-1] == step - 1 and step != 0      when 1      move_up if @map[@x,@y-1] == step - 1 and step != 0      move_left if @map[@x-1,@y] == step -1 and step != 0      move_down if @map[@x,@y+1] == step - 1 and step != 0      move_right if @map[@x+1,@y] == step - 1 and step != 0      end    end    #--------------------------------------------------------------------------    def find_path(x,y, force = true)      sx, sy = @x, @y      result = setup_map(sx,sy,x,y)            @runpath = result      @map = result      @map = result if result != nil      $game_player.ignore_movement = @runpath ? force : false    end    #--------------------------------------------------------------------------    def clear_path      @map = nil      @runpath = false      @ovrdest = false      $game_player.ignore_movement = false    end    #--------------------------------------------------------------------------    def setup_map(sx,sy,ex,ey)      map = Table.new($game_map.width, $game_map.height)      # Shaz - adding this comment to the second line of the event commands      #   Mouse      # will cause the player to go to the tile BELOW the event, turn up,      # and interact with the event ( is x+0, y+1)      tx = ex      ty = ey      event = $game_map.event_at(ex, ey)      if !event.nil? && !event.list.nil? && !event.erased &&         event.list.size > 1 && event.list.code == 108      text = event.list.parameters.to_s      text.gsub!(/\[([-,0-9]+),([-,0-9]+)\]/) do          tx = ex + $1.to_i          ty = ey + $2.to_i          map = 999          @ovrdest = true      end      end            update_counter = 0      map = 1      old_positions = []      new_positions = []      old_positions.push()      depth = 2      $path_allow = false      depth.upto(100){|step|      loop do          break if old_positions == nil          x,y = old_positions.shift          return if x == sx and y == sy          if map == 0 and $game_player.passable?(x, y, 2, step, tx, ty)             map = step            new_positions.push()          end          if map == 0 and $game_player.passable?(x, y, 4, step, tx, ty)             map = step            new_positions.push()          end          if map == 0 and $game_player.passable?(x, y, 6, step, tx, ty)             map = step            new_positions.push()          end          if map == 0 and $game_player.passable?(x, y, 8, step, tx, ty)             map = step            new_positions.push()          end                  # If we've checked quite a few tiles, allow graphics and input          # to update - to avoid the 'script hanging' error          update_counter += 1          if update_counter > 100            Graphics.update            update_counter = 0          end      end                old_positions = new_positions      new_positions = []      }            @ovrdest = false      return                   endend    class Game_Map    #--------------------------------------------------------------------------    alias pf_game_map_setup setup    #--------------------------------------------------------------------------    def setup(map_id)      pf_game_map_setup(map_id)      $game_player.clear_path    endend    class Game_Player    attr_accessor :ignore_movement    #--------------------------------------------------------------------------    alias pf_game_player_update update    #--------------------------------------------------------------------------    def update      $game_player.clear_path if Input.dir4 != 0      pf_game_player_update    endend    class Interpreter    #--------------------------------------------------------------------------    def event      return $game_map.events[@event_id]    endendMouse 2
                Code:       
#==============================================================================# ** MouseCursor#==============================================================================module MouseCursor    Default_Cursor = 'Arrow'    Event_Cursor   = 'Arrow3'    Actor_Cursor   = 'Arrow'    Enemy_Cursor   = 'Arrow4'    Item_Cursor    = true    Skill_Cursor   = true    Dummy = Bitmap.new(32, 32)end#==============================================================================# ** Sprite_Mouse#==============================================================================class Sprite_Mouse < Sprite#--------------------------------------------------------------------------# * Object Initialization#--------------------------------------------------------------------------def initialize    super    self.z = 10100    self.ox = 4    updateend#--------------------------------------------------------------------------# ** Frame Update#--------------------------------------------------------------------------def update    super      # Update Visibility    self.visible = $scene != nil      # If Visible    if self.visible            # If Non-nil Mouse Position      if Mouse.position != nil                # Gets Mouse Position      mx, my = *Mouse.position                # Update POsition      self.x = mx unless mx.nil?      self.y = my unless my.nil?                  end            # If Scene changes or Mouse is Triggered      if @scene != $scene.class || Mouse.trigger?                # Update Scene Instance      @scene = $scene.class                # Update Bitmap      set_bitmap(MouseCursor::Default_Cursor)      end          end      end#--------------------------------------------------------------------------# ** Set Bitmap#--------------------------------------------------------------------------def set_bitmap(cursor, xNPCname = nil)      # show fancy cursor only if custom mouse on    if $game_mouse                   # If Cursor Info matches      if (@_cursor == cursor) && (@_NPCname == xNPCname)      return      end            # Reset Cursor Info      @_cursor      = cursor      @_NPCname   = xNPCname            # Gets Dummy      dummy = MouseCursor::Dummy            # Gets Item Cursor Bitmap      item_cursor = cursor.nil? ? MouseCursor::Default_Cursor : cursor            # Start Cursor Bitmap      bitmap = RPG::Cache.icon(item_cursor) if item_cursor != ''      # Show NPC name      if @_NPCname != nil      # Get name width      w = dummy.text_size(@_NPCname).width      h = dummy.font.size      b = RPG::Cache.icon(item_cursor)      # Create New Bitmap      bitmap = Bitmap.new((bitmap.nil? ? w : 40 + w), .max)      bitmap.font.size = dummy.font.size      bitmap.blt(0, 0, b, b.rect)      # Draw NPC Name      x = item_cursor == '' ? 0 : 32      bitmap.font.color = Color.new(0, 0, 0, 255) # black      bitmap.draw_text(b.width + 9, 0, w, h, @_NPCname) # 0      bitmap.draw_text(b.width + 11, 0, w, h, @_NPCname) # 0         bitmap.draw_text(b.width + 10, -1, w, h, @_NPCname) # -1      bitmap.draw_text(b.width + 10, 1, w, h, @_NPCname) # 1      bitmap.font.color = Color.new(255, 255, 255, 255) # white      bitmap.draw_text(b.width + 10, 0, w, h, @_NPCname)      end          # Set Bitmap      self.bitmap = bitmap          elsif self.bitmap      @_cursor = nil      self.bitmap = nil          end      end#--------------------------------------------------------------------------# ** Frame Update : Update Event Cursors#--------------------------------------------------------------------------def update_event_cursors      # If Nil Grid Position    if Mouse.grid.nil?      # Set Default Cursor      set_bitmap(MouseCursor::Default_Cursor)      return    end      # Gets Mouse Position    x, y = *Mouse.grid      # Gets Mouse Position    mx, my = *Mouse.position            # Gets Mouse Event    event = $game_map.event_at(x, y)      # If Non-Nil Event or not over map HUD    unless event.nil?       # If Not Erased or Nil List      if event.list != nil && event.erased == false && event.list.code == 108      # Get the cursor to show      icon = event.list.parameters         icon = icon.to_s      if !((icon == "Arrow2") ||            (icon == "Arrow3") ||            (icon == "Arrow4") ||            (icon == "Arrow5") ||            (icon == "Arrow6") ||         (icon == "Arrow7"))         icon = MouseCursor::Default_Cursor      end                xNPCname = nil         if event.list.size > 1 && event.list.code == 108          text = event.list.parameters.to_s          text.gsub!(/ (.*)/) do            xNPCname = $1.to_s          end      end      set_bitmap(icon, xNPCname)            return      end      return    end      # Set Default Cursor    set_bitmap(MouseCursor::Default_Cursor)      endend#==============================================================================# ** Input#==============================================================================class << Input#------------------------------------------------------------------------# * Alias Listings#------------------------------------------------------------------------unless self.method_defined?(:sephlamchop_mousesys_input_update)    alias_method :sephlamchop_mousesys_input_update,   :updateend#------------------------------------------------------------------------# * Frame Update#--------------------------------------------------------------------------def update    $mouse_sprite.update if $mouse_sprite.visible    # Original Update    sephlamchop_mousesys_input_updateendend





Mouse 3 (Part 1)

SpoilerWORLD_MAP_ID = 1#==============================================================================# ** Game_Map#==============================================================================class Game_Map#--------------------------------------------------------------------------# * Event At#--------------------------------------------------------------------------def event_at(x, y)    for event in @events.values      return event if event.x == x && event.y == y    end    return nilend    #--------------------------------------------------------------------------# * Events At (returns multiple events at the same position in an array)#--------------------------------------------------------------------------def events_at(x, y)    eventarray = []    for event in @events.values      eventarray.push event if event.x == x && event.y == y    end    return eventarray if eventarray.size > 0    return nilendend#==============================================================================# ** Game_Event#==============================================================================class Game_Event#--------------------------------------------------------------------------# * Public Instance Variables#--------------------------------------------------------------------------attr_reader   :erased                  # triggerattr_accessor :mouse_autostart         # mouse autostart booleanattr_accessor :mouse_cursor_icon       # mouse cursor iconattr_accessor :mouse_cursor_desc       # mouse cursor descattr_reader   :name                  # name of event#--------------------------------------------------------------------------# * Alias Listings#--------------------------------------------------------------------------alias_method :sephlamchop_mousesys_gmevt_refresh, :refresh#--------------------------------------------------------------------------# * Start Event#--------------------------------------------------------------------------def start    # If list of event commands is not empty    if @list && @list.size > 1      @starting = true    endend    #--------------------------------------------------------------------------# * Refresh#--------------------------------------------------------------------------    def refresh    # Original Refresh    sephlamchop_mousesys_gmevt_refresh    # Click triggers event for action button, player or event touch    @mouse_autostart   = .include?(@Trigger)    @mouse_cursor_icon = MouseCursor::Event_Cursor    @mouse_cursor_desc = nil    # Return if Erased or Nil List    #return if @erased || @list.nil?      endend#==============================================================================# ** Game_Character#==============================================================================class Game_Character    def passable?(x, y, d, step = 999, tx = nil, ty = nil)      # Get new coordinates    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)      # If coordinates are outside of map    unless $game_map.valid?(new_x, new_y)      return false    end      # If through is ON    if @through      return true    end      # Able to leave current tile in desired direction?    # SHAZ: for counter, must be old, counter, new, in a straight line    unless $game_map.passable?(x, y, d, self) || (step == 2 && $game_map.event_at(x, y)) ||      (step == 3 && $game_map.counter?(x, y) && tx != nil && ty != nil &&      new_x - x == x - tx && new_y - y == y - ty)      return false    end      # Able to enter adjoining tile in current direction?    unless $game_map.passable?(new_x, new_y, 10 - d) ||      (step == 2 && $game_map.counter?(new_x, new_y))      return false    end    # SHAZ - ignore events sitting on a counter next to the destination    if step != 2 || !$game_map.counter?(new_x, new_y)                # Loop all events      for event in $game_map.events.values      # If event coordinates are consistent with move destination      if event.x == new_x and event.y == new_y          @state = true          # If through is OFF          unless event.through            # If self is event            if self != $game_player            return false            end            # With self as the player and partner graphic as character            if event.character_name != ""            return false            end          end      end      end    end      # If on world map, don't allow to go through events.Otherwise,    # the event will be triggered while the PC is walking    if $game_map.map_id == WORLD_MAP_ID && @state == false      return false    end          # If player coordinates are consistent with move destination    if $game_player.x == new_x && $game_player.y == new_y && self != $game_player      # If through is OFF      unless $game_player.through      # If your own graphic is the character      if @character_name != ""          return false      end      end    end    return true      endend#==============================================================================# ** Game_Player#==============================================================================class Game_Player < Game_Character#--------------------------------------------------------------------------# * Alias Listings#--------------------------------------------------------------------------alias_method :sephlamchop_mousesys_gmplyr_update, :update#--------------------------------------------------------------------------# * Frame Update#--------------------------------------------------------------------------def update    # Unless Interpreter Running, Forcing a Route or Message Showing    unless $game_system.map_interpreter.running? or         @move_route_forcing or $game_temp.message_window_showing               # Find Path If Mouse Triggered      if Mouse.trigger?(0) && Mouse.grid != nil      # Check if mouse is over HUD on map         screen_x,screen_y = Mouse.pos                # Gets Mouse X & Y      mx, my = *Mouse.grid                # Turn Character in direction      newd_x = (@x - mx).abs      newd_y = (@y - my).abs                if @x > mx             turn_left if newd_x >= newd_y         elsif @x < mx            turn_right if newd_x >= newd_y         end                      if @y > my            turn_up if newd_x < newd_y         elsif @y < my            turn_down if newd_x < newd_y         end         # Run Pathfinding      find_path(mx, my, false)                # Gets Event      @eventarray = @runpath ? $game_map.events_at(mx, my) : nil      # If Event At Grid Location      unless @eventarray.nil?          @eventarray.each do |event|            # If Event Autostart            if !event.mouse_autostart            @eventarray.delete(event)            end          end          @eventarray = nil if @eventarray.size == 0      end            end    end      if @move_route_forcing      clear_path      @eventarray = nil    end      # Original Update    sephlamchop_mousesys_gmplyr_update    # If Non-nil Event Autostarter    if @eventarray != nil && !moving? &&      (!@ovrdest || @map.nil? || @map[@x,@y] == 1)      # Gets Event      @eventarray.each do |event|            # If Event Within Range      if event and (@x == event.x or @y == event.y)          # SHAZ - trigger event when:          # - Action button and standing on or beside, or with a counter between          # - player/event touch and standing as close as possible (on, if possible)          distance = Math.hypot(@x - event.x, @y - event.y)          dir = @x < event.x ? 6 : @x > event.x ? 4 : @y < event.y ? 2 : @y > event.y ? 8 : 0          if (event.trigger == 0 and (distance < 2 or (distance == 2 and             $game_map.counter?((@x+event.x)/2, (@y+event.y)/2)))) or             (.include?(event.trigger) and ((distance == 0 and             $game_player.passable?(@x, @y, dir)) or (distance == 1 and            !$game_player.passable?(@x, @y, dir))))            # Turn toward Event            if @x == event.x            turn_up if @y > event.y            turn_down if @y < event.y            else            turn_left if @x > event.x            turn_right if @x < event.x            end            # Start Event            clear_path            event.start            @eventarray.delete(event)            @eventarray = nil if @eventarray.size == 0          end      end            end          endend    def passable?(x1, y1, d, step = 999, tx = nil, ty = nil)    superendend#==============================================================================# ** Mouse Selectable Windows#------------------------------------------------------------------------------# SephirothSpawn# Version 2.1#==============================================================================#==============================================================================# ** Window_Base#==============================================================================class Window_Base#--------------------------------------------------------------------------# * Frame Update : Mouse Cursor - Item#--------------------------------------------------------------------------def update_mouse_cursors_item(item, cursor, show)    # Return if not Active    return unless self.active    # Return if nil Position    return if Mouse.position.nil?    # Gets Mouse Position    mx, my = Mouse.position    # Gets Cursor Position    cr = self.cursor_rect    cx, cy = cr.x + self.x + 16, cr.y + self.y + 16    cw, ch = cr.width, cr.height    # If Not on Item    if mx.between?(self.x, self.x + self.width) == false ||       my.between?(self.y, self.y + self.height) == false || item.nil? ||       @item_max == 0 || mx.between?(cx, cx + cw) == false ||       my.between?(cy, cy + ch) == false      # Clear Mouse Index      @mouse_index = nil      # Set Mouse to Default Cursor      $mouse_sprite.set_bitmap(MouseCursor:
efault_Cursor)      return    end    # If Index is different than mouse index and window active    if @mouse_index != @index      # Reset Index      @mouse_index = @index      # set to item icon if cursor is true      cursor = item.icon_name if cursor      # Set Bitmap      $mouse_sprite.set_bitmap(cursor)   endendendclass Window_Selectable#--------------------------------------------------------------------------# * Default Settings#--------------------------------------------------------------------------Default_Mouse_Selectable = trueDefault_Window_Padding   = 16#--------------------------------------------------------------------------# * Public Instance Variables#--------------------------------------------------------------------------attr_accessor :mouse_selectableattr_accessor :window_padding#--------------------------------------------------------------------------# * Alias Listings#--------------------------------------------------------------------------alias_method :seph_mouseselectable_wndslct_init,   :initializealias_method :seph_mouseselectable_wndslct_update, :update#--------------------------------------------------------------------------# * Object Initialization#--------------------------------------------------------------------------def initialize(x, y, width, height)    # Original Initialization    seph_mouseselectable_wndslct_init(x, y, width, height)    # Set Mouse Selectable Flag    @mouse_selectable = Default_Mouse_Selectable    @window_padding   = Default_Window_Paddingend#--------------------------------------------------------------------------# * Frame Update#--------------------------------------------------------------------------def update      # agf = hide mouse    if $mouse_sprite.visible == true      # If Mouse Selectable, Active, at Least 1 Item and Non-negitive index    if self.mouse_selectable && self.active && @item_max > 0 && @index >= 0      # Gets Mouse Position      mouse_x, mouse_y = *Mouse.position            # If Mouse Within Window             if mouse_x.between? (self.x, self.x + self.width) &&         mouse_y.between? (self.y, self.y + self.height)      # Calculates Mouse X and Y Position Within Window      mouse_x -= self.x; mouse_y -= self.y      # Subtracts Window Padding      mouse_x -= @window_padding; mouse_y -= @window_padding      # Subtracts Mouse Oh      mouse_y -= self.mouse_oh      # Gets Cursor Width      cursor_width = (self.width / @column_max - 32)      # Passes Through Item Max      for i in 0...@item_max          # Calculates Index Position          x = i % @column_max * (cursor_width + 32)          y = i / @column_max * self.oh - self.oy          # If Mouse Between Rect          if mouse_x.between?(x, x + cursor_width) &&            mouse_y.between?(y, y + self.oh)            # Set Index            prev_index = @index            @index = i            if prev_index != @index            $game_system.se_play($data_system.cursor_se)            end            break          end      end      end    end      end      # Original Update    seph_mouseselectable_wndslct_updateend#--------------------------------------------------------------------------# * Oh#--------------------------------------------------------------------------def oh    return 32end#--------------------------------------------------------------------------# * Mouse Oh#--------------------------------------------------------------------------def mouse_oh    return 0end    end



Mouse 3 (Part 2)

Spoiler(Attach the following to the end of the previous script - I had to split it into two as I couldn't add it as a spoiler otherwise. ~Shaz)

#==============================================================================# ** Window_MenuStatus#==============================================================================class Window_MenuStatus < Window_Selectable#--------------------------------------------------------------------------# * Oh#--------------------------------------------------------------------------def oh    return 60   endend#==============================================================================# ** Window_Target#==============================================================================class Window_Target < Window_Selectable#--------------------------------------------------------------------------# * Oh#--------------------------------------------------------------------------def oh    return 105   endend#==============================================================================# ** Window_BattleReserve#==============================================================================class Window_BattleReserve < Window_Selectable#--------------------------------------------------------------------------# * Oh#--------------------------------------------------------------------------def oh    return 105   endend#==============================================================================# ** Window_EquipRight#==============================================================================class Window_EquipRight < Window_Selectable#--------------------------------------------------------------------------# * Oh#--------------------------------------------------------------------------def oh    return 50   end    #--------------------------------------------------------------------------# * Mouse Oh#--------------------------------------------------------------------------def mouse_oh    return 140end    end#==============================================================================# ** Window_Message#==============================================================================class Window_Message < Window_Selectable#--------------------------------------------------------------------------# * Mouse Oh#--------------------------------------------------------------------------def mouse_oh    return $game_temp.choice_start * 32endend#==============================================================================# ** Window_Party#==============================================================================class Window_Party < Window_Selectable#--------------------------------------------------------------------------# * Oh#--------------------------------------------------------------------------def oh    return 52   endend#==============================================================================# ** Window_Menu#==============================================================================class Window_Menu < Window_Selectable#--------------------------------------------------------------------------# * Oh#--------------------------------------------------------------------------def oh    return 35   endend#==============================================================================# ** Window_ActorCommand#==============================================================================class Window_ActorCommand < Window_Selectable#--------------------------------------------------------------------------# * Update#--------------------------------------------------------------------------def update    if $mouse_sprite.visible            # if Mouse sleectable, active, at least 1 item and non-negative index      if self.mouse_selectable && self.active && @item_max > 0 && @index >= 0      # Get / check mouse position      mouse_x, mouse_y = *Mouse.position                if mouse_x.between?(self.x, self.x + self.width) &&         mouse_y.between?(self.y, self.y + self.height)                  # Calculates mouse position within window          mouse_x -= self.x          mouse_y -= self.y                  # Subtracts widnow padding and overhead          mouse_x -= @window_padding          mouse_y -= @window_padding - self.mouse_oh                  # Look through all items          for i in 0...@item_max            ix,iy = @positions            if mouse_x.between?(ix, ix + 32) && mouse_y.between?(iy, iy + self.oh)            if i != @index                $game_system.se_play($data_system.cursor_se)            end            @index = i            break            end          end      end      end    end      superend    #--------------------------------------------------------------------------# * Oh#--------------------------------------------------------------------------def oh    return 32    endend#==============================================================================# ** Window_NameInput#==============================================================================class Window_NameInput < Window_Base#--------------------------------------------------------------------------# * Default Settings#--------------------------------------------------------------------------Default_Mouse_Selectable = trueDefault_Window_Padding = 16#--------------------------------------------------------------------------# * Public Instance Variables#--------------------------------------------------------------------------attr_accessor :mouse_selectableattr_accessor :window_padding#--------------------------------------------------------------------------# * Alias Listings#--------------------------------------------------------------------------alias_method :shaz_mouseselectable_wndslct_init,   :initializealias_method :shaz_mouseselectable_wndslct_update, :update#--------------------------------------------------------------------------# ● Initialize the Name Input window#--------------------------------------------------------------------------def initialize    # Original Initialization    shaz_mouseselectable_wndslct_init    # Set Mouse Selectable Flag    @mouse_selectable = Default_Mouse_Selectable    @window_padding = Default_Window_Paddingend#--------------------------------------------------------------------------# * Frame Update#--------------------------------------------------------------------------def update      # if mouse selectable, visible, active, and non-negative index    if $mouse_sprite.visible && self.mouse_selectable && self.active &&      @index >= 0            # Get mouse position      mouse_x, mouse_y = *Mouse.position            # If mouse within window      if mouse_x.between? (self.x, self.x + self.width) &&      mouse_y.between? (self.y, self.y + self.height)                # Calculates mouse X and Y positions within window      mouse_x -= self.x; mouse_y -= self.y                # Subtracts window padding      mouse_x -= @window_padding; mouse_y -= @window_padding                # Subtracts mouse oh      mouse_y -= self.mouse_oh                # Gets cursor width      cursor_width = 28                # If not Submit button, pass through all items      if mouse_x.between?(428, 428+48) && mouse_y.between?(9*32, 9*32+32)          $game_system.se_play($data_system.cursor_se) if @index != 180          @index = 180      else          for i in 0..90                        # Calculate index position            x = 140 + i / 5 / 9 * 180 + i % 5 * 32            y = i / 5 % 9 * 32                        # If mouse between rect            if mouse_x.between?(x, x + cursor_width) &&               mouse_y.between?(y, y + self.oh)            # set index            prev_index = @index            @index = i            if prev_index != @index                $game_system.se_play($data_system.cursor_se)            end            break            end          end      end      end    end      # Original update    shaz_mouseselectable_wndslct_updateend    #--------------------------------------------------------------------------# * Oh#--------------------------------------------------------------------------    def oh    return 32end    #--------------------------------------------------------------------------# * Mouse Oh#--------------------------------------------------------------------------    def mouse_oh    return 0endend#==============================================================================# ** Scene_File#==============================================================================class Scene_File#--------------------------------------------------------------------------# * Alias Listings#--------------------------------------------------------------------------alias_method :sephlamchop_mousesys_scnfl_update, :update#--------------------------------------------------------------------------# * Frame Update#--------------------------------------------------------------------------def update      # agf = hide mouse    if $mouse_sprite.visible == true            # If Mouse Position isn't Nil    if Mouse.pos != nil            # Gets Mouse Position      x, y = Mouse.pos       y = y + 32            # Pass Through Savefile Windows      for i in 0...@savefile_windows.size                # Gets Window      w = @savefile_windows                # Don't allow user to select autosave slot in Load Menu      if @autosave_slot == false          i = 1 if i == 0      end                # If Within Window Range      if x.between?(w.x, w.x + w.width) &&         y.between?(w.y, w.y + w.height) && w.active                              prev_index = @file_index                     # Set File Index          @file_index = i                  # Turns Window On          w.selected = true                  # Play SE          if prev_index != @file_index            $game_system.se_play($data_system.cursor_se)          end                              # Unhighlight remaining windows          for j in 0...@savefile_windows.size            if j != i               @savefile_windows.selected = false            end          end                   # Don't select autosave slot in Load Menu          if @autosave_slot == false            @savefile_windows.selected = false if i == 1          end                  # Break Main Loop          break                  end      end    end      end      # Original Update    sephlamchop_mousesys_scnfl_updateendend#==============================================================================# ** Game_Battler#==============================================================================class Game_Battler#--------------------------------------------------------------------------# * Battler Width#--------------------------------------------------------------------------def battler_width    return RPG::Cache.battler(@battler_name, @battler_hue).widthend#--------------------------------------------------------------------------# * Battler Height#--------------------------------------------------------------------------def battler_height    return RPG::Cache.battler(@battler_name, @battler_hue).heightendend#==============================================================================# ** Arrow_Enemy#==============================================================================class Arrow_Enemy < Arrow_Base#--------------------------------------------------------------------------# * Alias Listings#--------------------------------------------------------------------------alias_method :seph_mouseselectablewindows_arrenmy_update, :update#--------------------------------------------------------------------------# * Frame Update#--------------------------------------------------------------------------def update    # Original Update    seph_mouseselectablewindows_arrenmy_update      if $mouse_sprite.visible == true      # Return if Nil Mouse Position      return if Mouse.position.nil?      # Gets Mouse Position      mx, my = *Mouse.position      # Pass Through Enemies      $game_troop.enemies.each do |enemy|      # Skip if Non-Existing Enemy      next unless enemy.exist?      # Gets Paddings      w, h = enemy.battler_width / 2, enemy.battler_height      # If Within Mouse Padding Range      if mx.between?(enemy.screen_x - w, enemy.screen_x + w) &&         my.between?(enemy.screen_y - h, enemy.screen_y + 10)          # Set Index          @index = $game_troop.enemies.index(enemy)          # Set mouse cursor to bitmap          $mouse_sprite.set_bitmap(MouseCursor::Enemy_Cursor)         return          # break      end      end          # Set Mouse to Default Cursor      $mouse_sprite.set_bitmap(MouseCursor:
efault_Cursor)    end      endend#==============================================================================# ** Arrow_Actor#==============================================================================class Arrow_Actor < Arrow_Base#--------------------------------------------------------------------------# * Alias Listings#--------------------------------------------------------------------------alias_method :seph_mouseselectablewindows_arractr_update, :update#--------------------------------------------------------------------------# * Frame Update#--------------------------------------------------------------------------def update    # Original Update    seph_mouseselectablewindows_arractr_update    # Return if Nil Mouse Position    return if Mouse.position.nil?    # Gets Mouse Position    mx, my = *Mouse.position    # Pass Through Actors    $game_party.actors.each do |actor|      # Gets Paddings      w, h = actor.battler_width / 2, actor.battler_height      # If Within Mouse Padding Range      if mx.between?(actor.screen_x - w, actor.screen_x + w) &&         my.between?(actor.screen_y - h, actor.screen_y + 10)      # Set Index      @index = $game_party.actors.index(actor)      end    endendend#==============================================================================# ** Scene_Map#==============================================================================class Scene_Map#--------------------------------------------------------------------------# * Alias Listings#--------------------------------------------------------------------------alias_method :sephlamchop_mousesys_scnmap_update, :update#--------------------------------------------------------------------------# * Frame Update#--------------------------------------------------------------------------def update    # Unless Message Showing    unless $game_temp.message_text      # Update Event Cursors      $mouse_sprite.update_event_cursors    end    # Original Update    sephlamchop_mousesys_scnmap_updateendend#==============================================================================# ** Interpreter#==============================================================================class Interpreter#--------------------------------------------------------------------------# * Alias Listings#--------------------------------------------------------------------------alias_method :shaz_mousesys_intrprtr_command_101, :command_101#--------------------------------------------------------------------------# * Show Text#--------------------------------------------------------------------------def command_101    # return mouse sprite to default cursor    $mouse_sprite.set_bitmap(MouseCursor:
efault_Cursor)    # original command_101    shaz_mousesys_intrprtr_command_101endend$mouse_sprite = Sprite_Mouse.new# game mouse is visible, system mouse is hidden$mouse_sprite.visible = true



NOTE: There is a missing line that will cause the game to crash. I have fixed it in the scripts above, but the demo does not have the fix. If you use the demo, please go to the Mouse 1 script, find the Game_Player class, and add the following line immediately after class Game_Player:

class Game_Playerattr_accessor :ignore_movementSuperSimpleMouseSystem.zip


本贴来自国际rpgmaker官方论坛作者:amaranth处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/super-simple-mouse-script.16520/
页: [1]
查看完整版本: Super Simple Mouse Script