[Solved][Question/Help] Mouse script in MRMX

Started by Aegisrox, November 04, 2013, 12:03:39 pm

Previous topic - Next topic

Aegisrox

November 04, 2013, 12:03:39 pm Last Edit: November 06, 2013, 11:46:09 am by Aegisrox
Hi! I'am Aegis from MRMX, all of you know me xD

But i am writing because i have a problem with a custom script and i need the help to the community :D

The thing is that i am attemp to implement the Mouse Drop menu of nattman on MRMX, but i have some problems...

The thing is that the i implemented the code and it works pretty well, but works only just the player loggin in and just the player warp to another map...

As soon the player give one step in any direction, the drop menu doesn't appear again :(

I tried a lot of things but it makes me crazy xD

The strange thing is that the scripts works well in a blank RMX-OS project, the problem is the compatibility with pokemon essentials, that makes lost the player control when the players gives 1 step :(

In any case, this are the 3 scripts that i modified to works but essentials, feel free to take a look and tell me if you have any ideas to works well:

Mouse controller
#=begin
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Mouse Controller by Blizzard
# Version: 2.0b
# Type: Custom Input System
# Date: 9.10.2009
# Date v2.0b: 22.7.2010
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#  
#  This work is protected by the following license:
# #----------------------------------------------------------------------------
# #  
# #  Creative Commons - Attribution-NonCommercial-ShareAlike 3.0 Unported
# #  ( http://creativecommons.org/licenses/by-nc-sa/3.0/ )
# #  
# #  You are free:
# #  
# #  to Share - to copy, distribute and transmit the work
# #  to Remix - to adapt the work
# #  
# #  Under the following conditions:
# #  
# #  Attribution. You must attribute the work in the manner specified by the
# #  author or licensor (but not in any way that suggests that they endorse you
# #  or your use of the work).
# #  
# #  Noncommercial. You may not use this work for commercial purposes.
# #  
# #  Share alike. If you alter, transform, or build upon this work, you may
# #  distribute the resulting work only under the same or similar license to
# #  this one.
# #  
# #  - For any reuse or distribution, you must make clear to others the license
# #    terms of this work. The best way to do this is with a link to this web
# #    page.
# #  
# #  - Any of the above conditions can be waived if you get permission from the
# #    copyright holder.
# #  
# #  - Nothing in this license impairs or restricts the author's moral rights.
# #  
# #----------------------------------------------------------------------------
#
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#
# Compatibility:
#
#   90% compatible with SDK v1.x. 80% compatible with SDK v2.x. May cause
#   incompatibility issues with other custom input Systems. Works with "Custom
#   Game Controls" from Tons of Add-ons and Blizz-ABS's custom controls.
#   This script is not meant to be used as a standalone but rather in
#   combination with special menus that are properly adapted to support a mouse
#   controller system.
#  
#  
# Features:
#
#   - fully automated mouse control in game
#   - can be enhanced with "Custom Game Controls" from Tons of Add-ons
#   - can be enhanced with "Blizz-ABS Controls"
#   - can be enhanced with "RMX-OS"
#
# new in 2.0b:
#
#   - added option to hide Windows' cursor
#   - added possibility to hide and show the ingame cursor during the game
#   - added possibility to change the cursor icon
#   - added several new options
#   - optimized
#
#
# Instructions:
#
# - Explanation:
#
#   This script can work as a stand-alone for window option selections. To be
#   able to use the mouse buttons, you need a custom Input module. The
#   supported systems are "Custom Game Controls" from Tons of Add-ons,
#   Blizz-ABS Custom Controls and RMX-OS Custom Controls. This script will
#   automatically detect and apply the custom input modules' configuration
#   which is optional.
#  
# - Configuration:
#
#   MOUSE_ICON          - the default filename of the icon located in the
#                         Graphics/Pictures folder
#   APPLY_BORDERS       - defines whether the ingame cursor can go beyond the
#                         game window borders
#   WINDOW_WIDTH        - defines the window width, required only when using
#                         APPLY_BORDER
#   WINDOW_HEIGHT       - defines the window height, required only when using
#                         APPLY_BORDER
#   HIDE_WINDOWS_CURSOR - hides the Windows Cursor on the window by default
#   AUTO_CONFIGURE      - when using "Custom Game Controls" from Tons of
#                         Add-ons, Blizz-ABS or RMX-OS, this option will
#                         automatically add the left mouse button as
#                         confirmation button
#  
# - Script Calls:
#  
#   You can use a few script calls to manipulate the cursor. Keep in mind that
#   these changes are not being saved with the save file.
#  
#   To hide the ingame Mouse Cursor, use following call.
#  
#     $mouse.hide
#  
#   To show the ingame Mouse Cursor, use following call.
#  
#     $mouse.show
#  
#   To change the cursor image, use following call. Make sure your image is
#  
#     $mouse.set_cursor('IMAGE_NAME')
#  
#  
# Additional Information:
#  
#   Even though there is an API call to determine the size of the window, API
#   calls are CPU expensive so the values for the window size need to be
#   configured manually in this script.
#  
#
# If you find any bugs, please report them here:
# http://forum.chaos-project.com
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=

$mouse_controller = 2.0

#===============================================================================
# Mouse
#===============================================================================

class Mouse
 
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# START Configuration
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 MOUSE_ICON = 'Pokeball2'
 AUTO_CONFIGURE = true
 APPLY_BORDERS = true
 WINDOW_WIDTH = 640
 WINDOW_HEIGHT = 480
 HIDE_WINDOWS_CURSOR = false
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# END Configuration
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
 if HIDE_WINDOWS_CURSOR
   Win32API.new('user32', 'ShowCursor', 'i', 'i').call(0)
 end
 
 SCREEN_TO_CLIENT = Win32API.new('user32', 'ScreenToClient', %w(l p), 'i')
 READ_INI = Win32API.new('kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l')
 FIND_WINDOW = Win32API.new('user32', 'FindWindowA', %w(p p), 'l')
 CURSOR_POSITION = Win32API.new('user32', 'GetCursorPos', 'p', 'i')
 
 def initialize
   @cursor = Sprite.new
   @cursor.z = 1000000
   self.set_cursor(MOUSE_ICON)
   update
 end
 
 def update
   @cursor.x, @cursor.y = self.position
 end
 
 def x
   return @cursor.x
 end
 
 def y
   return @cursor.y
 end
 
 def position
   x, y = self.get_client_position
   if APPLY_BORDERS
     if x < 0
       x = 0
     elsif x >= WINDOW_WIDTH
       x = WINDOW_WIDTH - 1
     end
     if y < 0
       y = 0
     elsif y >= WINDOW_HEIGHT
       y = WINDOW_HEIGHT - 1
     end
   end
   return x, y
 end
 
 def get_client_position
   pos = [0, 0].pack('ll')
   CURSOR_POSITION.call(pos)
   SCREEN_TO_CLIENT.call(WINDOW, pos)
   return pos.unpack('ll')
 end
 
 def set_cursor(image)
   @cursor.bitmap = RPG::Cache.picture(image)
 end
 
 def show
   @cursor.visible = true
 end
 
 def hide
   @cursor.visible = false
 end
 
 def self.find_window
   game_name = "\0" * 256
   READ_INI.call('Game', 'Title', '', game_name, 255, '.\\Game.ini')
   game_name.delete!("\0")
   return FIND_WINDOW.call('RGSS Player', game_name)
 end
 
 WINDOW = self.find_window
 
end

$mouse = Mouse.new

#==============================================================================
# module Input
#==============================================================================

module Input
 
 class << Input
   alias update_mousecontroller_later update
 end
 
 def self.update
   $mouse.update
   update_mousecontroller_later
 end
 
 if Mouse::AUTO_CONFIGURE
   if $BlizzABS
     C.push(Input::Key['Mouse Left']) if !C.include?(Input::Key['Mouse Left'])
     if !Attack.include?(Input::Key['Mouse Right'])
       Attack.push(Input::Key['Mouse Right'])
     end
   elsif $tons_version != nil && $tons_version >= 6.4 &&
       TONS_OF_ADDONS::CUSTOM_CONTROLS || defined?(RMXOS)
     C.push(Input::Key['Mouse Left']) if !C.include?(Input::Key['Mouse Left'])
   end
 end
 
end

#===============================================================================
# Rect
#===============================================================================

class Rect
 
 def covers?(x, y)
   return !(x < self.x || x >= self.x + self.width ||
       y < self.y || y >= self.y + self.height)
 end
 
end

#===============================================================================
# Sprite
#===============================================================================

class Sprite
 
 def mouse_in_area?
   return false if self.bitmap == nil
   return ($mouse.x >= self.x && $mouse.x < self.x + self.src_rect.width &&
       $mouse.y >= self.y && $mouse.y < self.y + self.src_rect.height)
 end
 
end

#===============================================================================
# Window_Base
#===============================================================================

class Window_Base
 
 def mouse_in_area?
   return ($mouse.x >= self.x && $mouse.x < self.x + self.width &&
       $mouse.y >= self.y && $mouse.y < self.y + self.height)
 end
 
 def mouse_in_inner_area?
   return ($mouse.x >= self.x + 16 && $mouse.x < self.x + self.width - 16 &&
       $mouse.y >= self.y + 16 && $mouse.y < self.y + self.height - 16)
 end
 
end

#===============================================================================
# Window_Selectable
#===============================================================================

class Window_Selectable
 
 alias contents_is_mousecontroller_later contents=
 def contents=(bitmap)
   contents_is_mousecontroller_later(bitmap)
   begin
     update_selections
     update_mouse if self.active
   rescue
   end
 end
 
 alias index_is_mousecontroller_later index=
 def index=(value)
   index_is_mousecontroller_later(value)
   update_selections
 end
 
 alias active_is_mousecontroller_later active=
 def active=(value)
   active_is_mousecontroller_later(value)
   update_cursor_rect
 end
 
 def update_selections
   @selections = []
   index, ox, oy = self.index, self.ox, self.oy
   (0...@item_max).each {|i|
       @index = i
       update_cursor_rect
       rect = self.cursor_rect.clone
       rect.x += self.ox
       rect.y += self.oy
       @selections.push(rect)}
   @index, self.ox, self.oy = index, ox, oy
   self.cursor_rect.empty
 end
 
 alias update_mousecontroller_later update
 def update
   update_mouse if self.active
   update_mousecontroller_later
 end
 
 # Aegis fix
 def mouse_in_area?
   return ($mouse.x >= self.x && $mouse.x < self.x + self.width &&
       $mouse.y >= self.y && $mouse.y < self.y + self.height)
 end
 
 def mouse_in_inner_area?
   return ($mouse.x >= self.x + 16 && $mouse.x < self.x + self.width - 16 &&
       $mouse.y >= self.y + 16 && $mouse.y < self.y + self.height - 16)
 end
 # Aegis fix
 
 def update_mouse
   if self.mouse_in_inner_area?
     update_mouse_selection
     return
   end
   self.index = -1
   if self.contents != nil && @selections.size > 0 && self.mouse_in_area?
     update_mouse_scrolling
   end
 end
 
 def update_mouse_selection
   update_selections if @selections.size != @item_max
   @selections.each_index {|i|
       if @selections[i].covers?($mouse.x - self.x - 16 + self.ox,
           $mouse.y - self.y - 16 + self.oy)
         self.index = i if self.index != i
         return
       end}
   self.index = -1
 end
 
 def update_mouse_scrolling
   if Input.repeat?(Input::C)
     if $mouse.x < self.x + 16
       if self.ox > 0
         $game_system.se_play($data_system.cursor_se)
         self.ox -= @selections[0].width
         self.ox = 0 if self.ox < 0
       end
     elsif $mouse.x >= self.x + self.width - 16
       max_ox = self.contents.width - self.width + 32
       if self.ox <= max_ox
         $game_system.se_play($data_system.cursor_se)
         self.ox += @selections[0].width
         self.ox = max_ox if self.ox >= max_ox
       end
     elsif $mouse.y < self.y + 16
       if self.oy > 0
         $game_system.se_play($data_system.cursor_se)
         self.oy -= @selections[0].height
         self.oy = 0 if self.oy < 0
       end
     elsif $mouse.y >= self.y + self.height - 16
       max_oy = self.contents.height - self.height + 32
       if self.oy <= max_oy
         $game_system.se_play($data_system.cursor_se)
         self.oy += @selections[0].height
         self.oy = max_oy if self.oy >= max_oy
       end
     end
   end
 end
 
end
#=end


Mouse enchacement
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Mouse Controller Enhancement Script by Nathmatt
# Version: 1.74
# Type: Add On
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#  
#  This work is protected by the following license:
# #----------------------------------------------------------------------------
# #  
# #  Creative Commons - Attribution-NonCommercial-ShareAlike 3.0 Unported
# #  ( http://creativecommons.org/licenses/by-nc-sa/3.0/ )
# #  
# #  You are free:
# #  
# #  to Share - to copy, distribute and transmit the work
# #  to Remix - to adapt the work
# #  
# #  Under the following conditions:
# #  
# #  Attribution. You must attribute the work in the manner specified by the
# #  author or licensor (but not in any way that suggests that they endorse you
# #  or your use of the work).
# #  
# #  Noncommercial. You may not use this work for commercial purposes.
# #  
# #  Share alike. If you alter, transform, or build upon this work, you may
# #  distribute the resulting work only under the same or similar license to
# #  this one.
# #  
# #  - For any reuse or distribution, you must make clear to others the license
# #    terms of this work. The best way to do this is with a link to this web
# #    page.
# #  
# #  - Any of the above conditions can be waived if you get permission from the
# #    copyright holder.
# #  
# #  - Nothing in this license impairs or restricts the author's moral rights.
# #  
# #----------------------------------------------------------------------------
#
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Instructions:
#
#  To use the event effects in this script you will need to name the following.
#
#  definitions
#  d    = 2 down, 4 left 6, right, or 8 up
#  right click to access an events command list
#
#  \ignore               Use on events you want to be walkable
#
#  \msg[message]         This will add the message above the highlighted event
#
#  \directionfix[d]      If an event has a graphic and needs a specific direction
#                        they must be named this d as the open direction
#
#  \direction[d]         If an event has no graphic or isn't direction specific
#                        they must be named this d as the open direction
#
#  \commands             This will create a command list for each page with the
#                        name of the first avalible comment
#
#  \curser[graphic]      This will change the graphic of the curser while
#                        over that event
#
#  \auto                 This will start the event as soon as you click it
#
#  \door[id]             This will run the pages of an event as the following
#                        id is the item id needed to unlock the door
#                        first   page when door is locked
#                        second page when unlocking the door
#                        third   page any time after being unlocked
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Script Calls:
#
#  $MCES.disabled = true/false           whether or not this script is disabled
#
#  $MCES.movement_disabled = true/false  whether or not movement is disabled
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
module MCES
 
 Version = 1.74
 #============================================================================
 # MCES::Config
 #----------------------------------------------------------------------------
 #  The configuration for $MCES
 #============================================================================
 module Config
   No_Walk_Tag   = 7         # The terrain tag for unreachable locations
   Text_Size     = 20        # The size of the event name text
   Text_Color    = [0,0,160] # The color of the event name text
   Click_Graphic = false     # The sprite placed for move target
   Range         = 30        # The range for allows click movement    
 end

 #============================================================================
 # MCES::Cache
 #----------------------------------------------------------------------------
 # Stores data for use throughout $MCES
 #============================================================================
 module Cache
   PathDirs = [[0, 1, 2], [-1, 0, 4], [1, 0, 6], [0, -1, 8]]
   TDirs = [[0, true], [1, true], [2, true], [3, true], [4, true], [5, true],
       [6, true], [7, true], [8, true], [9, true]]
   DirOffsets = [[0, 0], [-1, 1], [0, 1], [1, 1], [-1, 0], [0, 0], [1, 0],
                 [-1, -1], [0, -1], [1, -1]]
   Direction = 0
   Commands = 1
   Curser = 2
   Auto = 3
   Door = 4
   Msg = 5
   Ignore = 6
 end

 #============================================================================
 # MCES::Processor
 #----------------------------------------------------------------------------
 #  This class performs the $MCES's processing.
 #============================================================================
 class Processor
   
   attr_accessor :item,:curser_lock,:disabled,:movement_disabled,:location
   attr_reader   :event_start
   
   def initialize
     @disabled,@movement_disabled,@location = false,false,[]
     @lwait,@rwait,curser_lock,@carry_sprite = 0,0,false,Sprite.new
     @carry_sprite.z = 999999;@carry_sprite.bitmap = Bitmap.new(24, 24)
     @mouse_set = true
   end
   
   def update
     if @lwait > 0;@lwait-= 1;end
     if @rwait > 0;@rwait-= 1;end
     @item = $data_items[@item] if @item.is_a?(Numeric)
     return if @disabled
     if !$scene.is_a?(Scene_Map);@lwait = 5;return;end
     if Input.trigger?(Input::Key['Mouse Left']) &&
         !$game_temp.message_window_showing && @lwait == 0
       @lwait = 5
       check_left
     elsif Input.trigger?(Input::Key['Mouse Right']) && @rwait == 0
       @rwait = 5
       check_right
     end
     check_player
     check_carry
     check_mouse
     if @command_window != nil && !@command_window.disposed?
       @command_window.update
     end
   end
   
   def check_left
     x,y = mouse_tile
     return if check_event || !$game_map.passable?(x,y,0) || @movement_disabled ||
       check_terrain_tag(x,y) || check_range(x,y,MCES::Config::Range)
     return if @command_window != nil && !@command_window.disposed?
     $game_player.set(x,y)
   end
   
   def check_event
     $game_map.events.each_value{|event|
     next if event.erased
     if event.mouse_in_area?
       if event.type.include?(MCES::Cache::Ignore)
         return false
       end
       if event.type.include?(MCES::Cache::Auto)
         event.start_event
         return true
       elsif event.type.include?(MCES::Cache::Door)
         event.check_door
         return true
       else
         $game_player.set(event) if !@movement_disabled
         return true
       end
     end}
     return false
   end
     
   
   def check_right
     $game_map.events.each_value{|event|
     next if event.erased
     if event.mouse_in_area?
       if event.type.include?(MCES::Cache::Commands)
         return if @command_window != nil && !@command_window.disposed?
         @command_window = Event_Command.new(event)
         return
       end
     end}
   end
   
   def mouse_tile
     x,y = $mouse.x,$mouse.y
     return (x+$game_map.display_x/4)/32,(y+$game_map.display_y/4)/32
   end
     
     
   def check_terrain_tag(x,y)
     return ($game_map.terrain_tag(x,y) == Config::No_Walk_Tag)
   end
   
   def check_target(x,y=0)
     if x.is_a?(Game_Character)
       c = x
       d = (x.direction_fixed != nil ? x.direction_fixed : x.direction)
       x,y = c.x,c.y
       x += (d == 4 ? -1 : 1) if d != (2 || 8)
       y += (d == 8 ? -1 : 1) if d != (4 || 6)
     end
     return x,y
   end
   
   def check_player
     return if @request == nil
     count = 4
     characters = [$game_player]
     while characters.size > 0 && count > 0
       char = characters.shift
       result = find_path
       result != nil ? char.force_movement = result : characters.push(char)
       count -= 1
     end
   end
   
   def check_carry
     @carry_sprite.x,@carry_sprite.y = $mouse.x,$mouse.y
     if @item != nil
       if @carry_curser != @item.icon_name
         @carry_curser = @item.icon_name
         @carry_sprite.bitmap.blt(0, 0, RPG::Cache.icon(@carry_curser),
           Rect.new(0, 0, 24, 24))
       end
     else
       @carry_curser = nil
       @carry_sprite.bitmap.clear
     end
   end
   
   def check_mouse
     $game_map.events.each_value{|event|
     if event.mouse_in_area?
       next if event.erased
       if event.type.include?(MCES::Cache::Curser)
         $mouse.set_cursor(event.curser)
         @mouse_set = false
         return
       end
     end}
     if !@mouse_set
       return if @curser_lock
       @mouse_set = true
       $mouse.set_cursor(Mouse::MOUSE_ICON)
     end
   end
   
   def request_path(x, y = nil)
     x,y = check_target(x,y)
     if x != nil && y != nil && @request == nil
       @request = PathRequesting.new(x, y)
     end
   end
   
   def distance(x,y,tx,ty)
     return Math.hypot((x - tx),(y - ty))
   end
   
   def check_range(x,y,range)
     pl = $game_player
     return (range <= distance(pl.x,pl.y,x,y))
   end
 
   def find_path
     request = @request
     if request.open.size == 0;@request = nil;return []end
     found = false
     key = request.open.keys.min {|a, b|
         Math.hypot(a[0] - request.tx, a[1] - request.ty) <=>
         Math.hypot(b[0] - request.tx, b[1] - request.ty)}
     request.closed[key[0], key[1]] = request.open[key]
     request.open.delete(key)
     Cache::PathDirs.each {|dir|
     kx, ky = key[0] + dir[0], key[1] + dir[1]
     if kx == request.tx && ky == request.ty
       request.closed[kx, ky] = dir[2]
       found = true
       break
     elsif request.closed[kx, ky] == 0 &&
       $game_player.passable?(key[0], key[1], dir[2])
       request.open[[kx, ky]] = dir[2]
     end}
     return nil unless found
     @request = nil
     return request.backtrack
   end
   
 end

 #============================================================================
 # MCES::Msg_Sprite
 #----------------------------------------------------------------------------
 #  The msg sprite.
 #============================================================================
 class Msg_Sprite < Sprite
 
   def initialize(event)
     super()
     @event = event
     self.z,self.opacity = 1000,0
     self.set
     @h = MCES::Config::Text_Size
     @w = event.msg.size*@h
     c = MCES::Config::Text_Color
     self.bitmap = Bitmap.new(@w,@h)
     self.bitmap.font.size = @h
     self.bitmap.font.color = Color.new(c[0],c[1],c[2])
     self.bitmap.draw_text(0,0,@w,@h,event.msg,1)
   end
 
   def set
     return if !$scene.is_a?(Scene_Map) || @event.erased
     b = @event.get_sprite.inner_bitmap
     xs = @event.get_sprite.x-(@event.get_sprite.cw/2)
     ys = @event.get_sprite.y-@event.get_sprite.ch
     self.x,self.y = xs + (b.width/2)-(@w/2),ys-@h
   end
 
   def update
     self.set
     return self.opacity = 0 if @event.erased
     if @event.mouse_in_area?
       if self.opacity < 255
         self.opacity += 25
       end
     elsif self.opacity > 0
       self.opacity -= 25
     end
   end
 end

 #============================================================================
 # MCES::Set_Sprite
 #----------------------------------------------------------------------------
 #  The set sprite.
 #============================================================================
 class Set_Sprite < Sprite
 
   def initialize(v)
     super
     self.bitmap = RPG::Cache.picture(MCES::Config::Click_Graphic)
     @x,@y,self.opacity,self.z = 0,0,0,1
   end
   
   def set(x,y)
     return if MCES::Config::Click_Graphic == false
     @e,x,y = x,x.x,x.y if x.is_a?(Game_Character)
     @x,@y,self.opacity = x,y,255
   end
 
   def update_screen
     return if self.opacity == 0
     x = ((@x * 128) - $game_map.display_x + 3) / 4
     y = ((@y * 128) - $game_map.display_y + 3) / 4
     self.x,self.y = x,y
   end
 
   def update
     return if MCES::Config::Click_Graphic == false
     update_screen
   end
   
 end

 #============================================================================
 # MCES::Event_Command
 #----------------------------------------------------------------------------
 #  The event command window.
 #============================================================================  
 class Event_Command < Window_Command
 
   def initialize(event)
     @size = 0
     @event = event
     @main_commands = event.commands
     @array = []
     @main_commands.each{|command|
     @array.push(command) if command != nil
     @size = (command.size * 32) if (command.size * 32) > @size}
     super(@size,@array)
     self.x,self.y = $mouse.position
   end
 
   def indexes
     return @main_commands.index(@array[self.index])
   end
   
   def update
     super
     if Input.trigger?(Input::Key['Mouse Left'])
       if self.index >= 0
         @event.start_command(indexes)
         self.dispose
       else
         self.dispose
       end
     end
   end
   
 end

 #============================================================================
 # MCES::Pathrequest
 #----------------------------------------------------------------------------
 #  This class preforms the movement requests.
 #============================================================================
 class PathRequesting
   
   attr_reader :open,:closed,:sx,:sy,:tx,:ty,:jd
   
   def initialize(tx, ty, jd = 0)
     pix = ($BlizzABS != nil ? BlizzABS::Config::PIXEL_MOVEMENT_RATE : 1)
     ox,oy = $game_player.location
     @sx, @sy, @tx, @ty, @jd = ox, oy, tx, ty, jd
     @x_off, @y_off = ox - @sx, oy - @sy
     @open = {[@sx, @sy] => -1}
     @closed = Table.new($game_map.width, $game_map.height)
   end
   
   def backtrack
     cx, cy, x, y, result = @tx, @ty, 0, 0, []
     loop do
       cx, cy = cx - x, cy - y
       break if cx == @sx && cy == @sy
       result.unshift(Cache::TDirs[@closed[cx, cy]])
       x, y = Cache::DirOffsets[@closed[cx, cy]]
     end
     return result
   end
   
 end
 
end

raise('This script requires Mouse Controller by Blizzard to work') if $mouse == nil
$MCES = MCES::Processor.new

#============================================================================
# Game_Character
#----------------------------------------------------------------------------
#  Adds a mouse_in_area? method to any instance of this class.
#============================================================================
class Game_Character_fix
 
 attr_reader   :type
 attr_accessor :icon_name,:direction_fixed
 
 alias mces_character_initialize initialize
 def initialize
   @type = []
   mces_character_initialize
 end
 
 def mouse_in_area?
   return false if get_sprite == nil || get_sprite.is_a?(Array)
   return false if get_sprite.inner_bitmap == nil
   return false if get_sprite.cw == nil || get_sprite.ch == nil
   return true if [$mouse.x/32,$mouse.y/32] == [self.x,self.y]
   b = get_sprite.inner_bitmap
   xs = get_sprite.x-(get_sprite.cw/2)
   ys = get_sprite.y-get_sprite.ch
   return ($mouse.x >= xs && $mouse.x < xs + b.width &&
       $mouse.y >= ys && $mouse.y < ys + b.height &&
       b.get_pixel($mouse.x-xs, $mouse.y-ys) != Color.new(255,255,255,0))
 end
   
 
 def get_sprite
   return if !$scene.is_a?(Scene_Map)
   $scene.spriteset.character_sprites.each{|s|return s if s.character == self}
 end
 
end

#============================================================================
# Game_Event
#----------------------------------------------------------------------------
#  This class sets the events proccesing for MCES.
#============================================================================
class Game_Event_fix < Game_Character_fix
 
 attr_accessor :event_start
 attr_reader   :key,:curser,:msg,:commands,:erased
 
 alias mces_initialize initialize
 def initialize(id,event)
   mces_initialize(id,event)
   @child_interpeter = Interpreter.new
   @event_start = false
   @type,@commands, = [],[]
   check_name
 end
 
 #alias mces_update update
 def mces_update
   mces_update
   @child_interpeter.update
   @msg_sprite.update if @msg_sprite != nil
 end
 
 #alias mces_start start
 def mces_start
   return if @trigger == 0 && (!@event_start || @commands.size > 0)
   mces_start
   @event_start = false
 end
 
 def start_event
   @event_start = true
   start
 end
 
 def check_door
   if @key == $MCES.item
     @child_interpeter.setup(@event.pages[1].list,@id)
     $game_party.gain_item($MCES.item.id, -1)
     $MCES.item = nil
     @key_unlock = true
   elsif @key_unlock
     @child_interpeter.setup(@event.pages[2].list,@id)
   else
     @child_interpeter.setup(@event.pages[0].list,@id)
   end
   return
 end
 
 def start_command(i)
   @child_interpeter.setup(@event.pages[i].list,@id)
 end
 
 def check_name
   if @event.name.clone.gsub!(/\\[Ii]gnore/) {''}
     @type.push(MCES::Cache::Ignore)
   end
   if @event.name.clone.gsub!(/\\[Aa]uto/) {''}
     @type.push(MCES::Cache::Auto)
   end
   if @event.name.clone.gsub!(/\\[Cc]ommands/) {''}
     @type.push(MCES::Cache::Commands)
     @interpreter = Interpreter.new
     @event.pages.each{|page|page.list.each{|list|
     @last_list = list if @last_list == nil
     if list.code == 108
       if @last_list.code == 111
         if @interpreter.command_111([@last_list,list])
           @commands[@event.pages.index(page)] = list.parameters[0]
         end
       else
         @commands[@event.pages.index(page)] = list.parameters[0]
       end
     end
     @last_list = list}}
     @interpreter = nil
   end
   if @event.name.clone.gsub!(/\\[Dd]irectionfix\[(\d+)\]/) {"#[$1]"}
     @type.push(MCES::Cache::Direction)
     @direction_fixed = $1.to_i
   end
   if @event.name.clone.gsub!(/\\[Dd]irection\[(\d+)\]/) {"#[$1]"}
     @type.push(MCES::Cache::Direction)
     @direction = $1.to_i
   end
   if @event.name.clone.gsub!(/\\[Ll]ocked\[(\d+)\]/) {"#[$1]"}
     @type.push(MCES::Cache::Door)
     @key = $data_items[$1.to_i]
   end  
   if @event.name.clone.gsub!(/\\[Cc]urser\[(.+?)\]/) {"#[$1]"}
     @type.push(MCES::Cache::Curser)
     @curser = $1
   end
   if @event.name.clone.gsub!(/\\[Mm]sg\[(.+?)\]/) {"#[$1]"}
     @type.push(MCES::Cache::Msg)
     @msg = $1
     @msg_sprite = MCES::Msg_Sprite.new(self)
   end
 end
   
end

#============================================================================
# Game_Player
#----------------------------------------------------------------------------
#  Adds force movement.
#============================================================================
class Game_Player_fix
 
 attr_accessor :force_movement
 
 #alias mces_update update
 def mces_update
   mces_update
   if @target_x == nil
     @force_movement = []
     $MCES.location = []
   else
     if @force_movement == []
       $MCES.request_path(@target_x, @target_y)
     end
     update_forcemovement if !moving?
     if location == $MCES.check_target(@target_x,@target_y)
       if @target_x.is_a?(Game_Event)
         @target_x.start_event
         face_target
       end
       if $scene.spriteset.set_sprite != nil
         $scene.spriteset.set_sprite.opacity = 0
       end
       @target_x = @target_y = nil
       @force_movement = []
       $MCES.location = []
     end
   end
 end
 
 def face_target
   sx = @x - @target_x.x
   sy = @y - @target_x.y
   return if sx == 0 and sy == 0
   sx > 0 ? turn_left : turn_right if sx.abs > sy.abs
   sy > 0 ? turn_up : turn_down if sx.abs < sy.abs
 end
 
 def update_forcemovement
   return if @force_movement.size == 0
   move = @force_movement.shift
   case move[0]
   when 1 then move_lower_left
   when 2 then move_down(move[1])
   when 3 then move_lower_right
   when 4 then move_left(move[1])
   when 6 then move_right(move[1])
   when 7 then move_upper_left
   when 8 then move_up(move[1])
   when 9 then move_upper_right
   end
 end
 
 def location
   return self.x,self.y
 end
 
 def click_jump(x,y)
   new_x,new_y = x-self.y,x-self.y
   jump(new_x,new_y)
 end
 
 def set(x,y=nil)
   @force_movement = []
   @target_x, @target_y = x,y
   $scene.spriteset.set_sprite.set(x,y) if MCES::Config::Click_Graphic != false
 end
 
end

#============================================================================
# Interpreter
#----------------------------------------------------------------------------
#  Allows external use of the condition command.
#============================================================================
class Interpreter
 
 alias mces_command_111 command_111
 def command_111(list = nil)
   if list != nil
     @index = 0
     @list = list
     @list.push(RPG::EventCommand.new(412, list[0].indent, []))
     @parameters = list[0].parameters
   end
   mces_command_111
   if list != nil
     return @branch[0] == nil
   end
 end
 
end
=begin
#============================================================================
# Input
#----------------------------------------------------------------------------
#  Adds the alias methods and updates the processor.
#============================================================================
module Input
 
 class << Input
   alias mces_trigger? trigger?
   alias mces_update update
 end
 
 def self.update
   $MCES.update
   mces_update
 end
 
end
if ($tons_version || $BlizzABS  || $network) == nil
#============================================================================
# Input
#----------------------------------------------------------------------------
#  Adds the mouse trigger commands if not using Blizzards input methods.
#============================================================================  
module Input
 
 Key = {'Mouse Left' => 1, 'Mouse Right' => 2}
 C = Key['Mouse Left']
 #======================================
 # |->  Keyboard Input Module
 #======================================
 #   By: Near Fantastica
 #   Date: 06.07.05
 #   Version: 3  
 #
 #   Cut down by Zeriab
 #   Date: 16.08.06
 #======================================

 def self.trigger?(key)
   return false if key == nil

   if !Win32API.new("user32","GetKeyState",['i'],'i').call(key).between?(0, 1)
     return true
   else
     return mces_trigger?(key)
   end
 end

end

end
=end
#============================================================================
# Sprite_Character
#----------------------------------------------------------------------------
#  Creats a inner bitmap for use with the mouse_in_area? method.
#============================================================================
class Sprite_Character_fix
 attr_reader :ch,:cw,:inner_bitmap
 
 alias mces_initialize initialize
 def initialize(viewport,character = nil)
   mces_initialize(viewport,character)
 end
 
 #alias mces_update update
 def mces_update
   mces_update
   if $BlizzABS != nil
     return if @sprite == nil
     return if @sprite.cw == nil || @sprite.ch == nil
     @cw,@ch = @sprite.cw, @sprite.ch
   end
   if @character.icon_name != nil || @character.tile_id >= 384
     @inner_bitmap = self.bitmap.clone
     return
   end
   @inner_bitmap = Bitmap.new(@cw,@ch) if @inner_bitmap == nil
   if @pattern != @character.pattern
     @pattern = @character.pattern
     bitmap = ($BlizzABS != nil ? @sprite.bitmap : self.bitmap)
     src_rect = ($BlizzABS != nil ? @sprite.src_rect : self.src_rect)
     @inner_bitmap.clear
     @inner_bitmap.blt(0, 0, bitmap, src_rect)
   end
 end

end
#============================================================================
# Spriteset_Map
#----------------------------------------------------------------------------
#  Creats the set_sprite
#============================================================================
class Spriteset_Map_fix
 attr_reader :character_sprites,:set_sprite
 
 alias mces_initialize initialize
 def initialize
   mces_initialize
   if MCES::Config::Click_Graphic != false
     @set_sprite = MCES::Set_Sprite.new(@viewport1)
   end
 end
 
 #alias mces_update update
 def mces_update
   mces_update
   @set_sprite.update if @set_sprite != nil
 end
 
end
#============================================================================
#  Adds eternal reading of methods.
#============================================================================
class Sprite_Character_ABSEAL_ed;    attr_reader :ch,:cw end if $BlizzABS != nil
class Scene_Map;        attr_reader :spriteset           end
if $BlizzABS != nil
class BlizzABS::Processor
 
 def pixel
   return 1
 end
 
end
end


Mouse drop down menu
#=begin
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Character Drop Down Menu by Nathmatt
# Version: 1.15
# Type: Misc System
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#  
#  This work is protected by the following license:
# #----------------------------------------------------------------------------
# #  
# #  Creative Commons - Attribution-NonCommercial-ShareAlike 3.0 Unported
# #  ( http://creativecommons.org/licenses/by-nc-sa/3.0/ )
# #  
# #  You are free:
# #  
# #  to Share - to copy, distribute and transmit the work
# #  to Remix - to adapt the work
# #  
# #  Under the following conditions:
# #  
# #  Attribution. You must attribute the work in the manner specified by the
# #  author or licensor (but not in any way that suggests that they endorse you
# #  or your use of the work).
# #  
# #  Noncommercial. You may not use this work for commercial purposes.
# #  
# #  Share alike. If you alter, transform, or build upon this work, you may
# #  distribute the resulting work only under the same or similar license to
# #  this one.
# #  
# #  - For any reuse or distribution, you must make clear to others the license
# #    terms of this work. The best way to do this is with a link to this web
# #    page.
# #  
# #  - Any of the above conditions can be waived if you get permission from the
# #    copyright holder.
# #  
# #  - Nothing in this license impairs or restricts the author's moral rights.
# #  
# #----------------------------------------------------------------------------
#
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
class Character_Drop_Down_Menu
 
 def initialize
   username = ''
   @mini_list_array = ['Add Buddy','Trade']
   @mini_list_array.insert(1,'Add Party') if $blizzabs_rmxos != nil
   if $network.guildleader == $network.username
     @mini_list_array.insert(0,'Guild Invite')
   end
   @mini_list_array.push('Kick','Ban') if $network.usergroup > 0
   @confirm_window = Window_Confirm.new
   @mini_list = Window_Mini_List.new(@mini_list_array)
   @mini_list.visible = false
   @wait = 0
 end

 def update
   @wait -= 1 if @wait > 0
   if Input.trigger?(Input::Key['Mouse Right'])
     return if @wait != 0
     @mx,@my = $mouse.pos
     @sx,@sy = $mouse.position
     @player_username = $network.check_player(@mx,@my)
     @players_info = $network.get_player(@mx,@my)
     if @player_username != nil
       @mini_list.visible = true
       @mini_list.active = true
       @mini_list.x = @sx
       @mini_list.y = @sy
       $MCES.disabled = true
     end
     @wait = 5
   end
   
   if @mini_list.active
     @mini_list.update
     if Input.trigger?(Input::Key['Mouse Left'])
       return if @wait != 0
       if @mini_list.index >= 0
         @confirm_window.set_commands(@mini_list.item,@player_username)
       end
       @mini_list.visible = false
       @mini_list.active = false
       @wait = 5
     end
   end
   
   if @confirm_window.active
     @confirm_window.update
     if Input.trigger?(Input::Key['Mouse Left'])
       return if @wait != 0
       case @confirm_window.index
       when 0
         case @mini_list.item
         when 'Add Buddy'
           $network.command_buddy_add(@player_username)
         when 'Trade'    
           $network.command_trade_request(@player_username)
         when 'Guild Invite'
           $network.command_guild_invite(@player_username)
         when 'Kick'
           $network.command_kick_player(@player_username)
         when 'Ban'
           $network.command_ban_player(@player_username)
         when 'Add Party'
           $network.command_party_invite(@player_username)
         end
         @confirm_window.visible = false
         @confirm_window.active = false
       else
         @confirm_window.visible = false
         @confirm_window.active = false
       end
       $MCES.disabled = false
       #$MCES.wait = 5
       @wait = 5
     end
   end
   
 end
   
end
#==============================================================================
# Scene_Map
#==============================================================================
class Scene_Map
 
 alias character_drop_down_menu_main main
 def main
   @mini_menu = Character_Drop_Down_Menu.new
   character_drop_down_menu_main
 end
 
 alias character_drop_down_menu_update update
 def update
   @mini_menu.update
   character_drop_down_menu_update
 end
 
end
#==============================================================================
# Mouse
#==============================================================================
class Mouse
 
 attr_accessor :cursor
 
 def pos
   x, y = self.position
   x = ( x + $game_map.display_x / 4) / 32
   y = ( y + $game_map.display_y / 4) / 32
   return x, y
 end
   
end
#==============================================================================
# Window_list
#==============================================================================
class Window_Mini_List < Window_Selectable
 
 #--------------------------------------------------------------------------
 # * Object Initialization
 #     actor : actor
 #--------------------------------------------------------------------------
 def initialize(list)
   super(476, 175, 104, 300)
   @list = list
   @column_max = 1
   refresh
   self.index = 0
   self.opacity = 0
   self.active = false
   self.z = 10000
 end
 #--------------------------------------------------------------------------
 # * Get Item
 #--------------------------------------------------------------------------
 def item
   return @data[self.index] if self.index >= 0
 end
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh
   if self.contents != nil
     self.contents.dispose
     self.contents = nil
   end
   @data = []
   @list.each {|i| @data.push(i)}
   # If item count is not 0, make a bit map and draw all items
   @item_max = @data.size
   if @item_max > 0
     self.contents = Bitmap.new(width - 32, row_max * 32)
     self.contents.fill_rect(0,0,width,height,Color.new(0, 0, 0, 160))
     @data.each_index {|i| draw_item(i)}
   end
 end
 #--------------------------------------------------------------------------
 # * Draw Item
 #     index : item number
 #--------------------------------------------------------------------------
 def draw_item(index)
   x = index % 1 * (288 + 32)
   y = index / 1 * 32
   self.contents.font.size = 16
   self.contents.draw_text(x, y, width - 32, 32, @data[index].to_s, 1)
 end
end
#==============================================================================
# Window_Confirm
#==============================================================================
class Window_Confirm < Window_Selectable
 
 #--------------------------------------------------------------------------
 # * Object Initialization
 #     actor : actor
 #--------------------------------------------------------------------------
 def initialize
   super(100, 100, 300, 150)
   @data = ['Yes','No']
   @column_max = 2
   @command = nil
   @user = nil
   refresh
   self.index = 0
   self.opacity = 0
   self.active = false
   self.visible = false
   self.z = 10000
 end
 #--------------------------------------------------------------------------
 # * Get Item
 #--------------------------------------------------------------------------
 def item
   return @data[self.index] if self.index >= 0
 end
 #--------------------------------------------------------------------------
 # * reset
 #--------------------------------------------------------------------------
 def set_commands(command,user)
   @command = command
   @user = user
   self.visible = true
   self.active  = true
   refresh
 end
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh
   if self.contents != nil
     self.contents.dispose
     self.contents = nil
   end
   # If item count is not 0, make a bit map and draw all items
   @item_max = @data.size
   if @item_max > 0
     self.contents = Bitmap.new(width - 32, 20 + row_max * 32)
     self.contents.font.size = 16
     self.contents.fill_rect(0,0,width,height,Color.new(0, 0, 0, 160))
     self.contents.draw_text(0,0,width,20,
     'Are you sure you want to '+ @command.to_s + ' ' + @user.to_s)
     @data.each_index {|i| draw_item(i)}
   end
 end
 #--------------------------------------------------------------------------
 # * Draw Item
 #     index : item number
 #--------------------------------------------------------------------------
 def draw_item(index)
   x = index * (width - 32) / 2
   self.contents.draw_text(x, 20, (width - 32) / 2, 32, @data[index].to_s, 1)
 end
 #--------------------------------------------------------------------------
 # * Cursor Rectangle Update
 #--------------------------------------------------------------------------
 def update_cursor_rect
   if @index < 0
     self.cursor_rect.empty
   else
     self.cursor_rect.set(self.index * (width - 32) / 2, 25,
    (width - 32) / 2 , 20)
   end
 end
end
#============================================================================
# RMXOS::Network
#============================================================================
class RMXOS::Network
 def check_player(x,y)
   @players.any? {|key, value|
   return value.username if value.x == x && value.y == y}
   return nil
 end
 def get_player(x,y)
   if $blizzabs_rmxos != nil
     @players.any? {|key, value|
     return value.battler if value.x == x && value.y == y}
   end
   return nil
 end
end
# Load the network
$network = RMXOS::Network.new
#=end


PS: I also added the scripts of a blank project: *Window_base * Window_selectable *Window_Command, but the problem persist :(

-------------------------------------------------------------------------------------------------------------------------------------------------------

Thanks to Wizered and Blizzard this problem is solved, it was a error in the coordinates, thanks to they for this :D
Crushing girls in the vanishing point......