| 
 
| 赞 | 0 |  
| VIP | 0 |  
| 好人卡 | 0 |  
| 积分 | 0 |  
| 经验 | 0 |  
| 最后登录 | 2013-12-15 |  
| 在线时间 | 8 小时 |  
 Lv1.梦旅人 
	梦石0 星屑0 在线时间8 小时注册时间2010-12-11帖子1 | 
| 这个就行! 脚本如下:
 
 #==============================================================================
 # 本脚本小心使用!
 #==============================================================================
 #=================以下两个用来调整战斗时的手感问题,可以自己试试。
 $敌人选框扩大 = 20
 $角色选框扩大 = 30
 
 #==============================================================================
 # API调用
 #==============================================================================
 $ShowCursor = Win32API.new("user32", "ShowCursor", 'i', 'l')
 $GetCursorPos = Win32API.new("user32", "GetCursorPos", 'p', 'i')
 $ScreenToClient = Win32API.new("user32", "ScreenToClient", 'ip', 'i')
 $GetActiveWindow = Win32API.new("user32", "GetActiveWindow", nil, 'l')
 $Window_HWND = $GetActiveWindow.call
 $GetKeyState = Win32API.new("user32", "GetKeyState", 'i', 'i')
 #$FindWindow = Win32API.new("user32", "FindWindow", 'pp', 'i')
 #$HookStart = Win32API.new("mouse_hook.dll", "HookStart", 'i', nil)
 #$HookEnd = Win32API.new("mouse_hook.dll", "HookEnd", nil, nil)
 #$GetMouseStatus = Win32API.new("mouse_hook.dll", "GetMouseStatus", 'i', 'i')
 #$Window_HWND = $FindWindow.call(nil, 'mousetry')
 module Mouse
 LEFT = 0x01
 RIGHT = 0x02
 def self.init(sprite = nil)
 # $HookStart.call($Window_HWND)
 $ShowCursor.call(0)
 
 @show_cursor = false
 
 @mouse_sprite = Sprite.new
 @mouse_sprite.z = 99999
 @mouse_sprite.bitmap = Bitmap.new('Graphics/Icons/001-Weapon01.png')
 #@mouse_sprite.bitmap.fill_rect(Rect.new(0, 0, 32, 32), Color.new(0, 0, 0))
 @left_press = false
 @right_press = false
 @left_trigger = false
 @right_trigger = false
 @left_repeat = false
 @right_repeat = false
 @click_lock = false
 
 update
 end
 def self.exit
 @mouse_sprite.bitmap.dispose
 @mouse_sprite.dispose
 @show_cursor = true
 # $HookEnd.call
 $ShowCursor.call(1)
 end
 def self.mouse_debug
 return @mouse_debug.bitmap
 end
 def self.update
 left_down = $GetKeyState.call(0x01)
 right_down = $GetKeyState.call(0x02)
 
 @click_lock = false
 mouse_x, mouse_y = self.get_mouse_pos
 if @mouse_sprite != nil
 @mouse_sprite.x = mouse_x
 @mouse_sprite.y = mouse_y
 end
 if left_down[7] == 1
 @left_repeat = (not @left_repeat)
 @left_trigger = (not @left_press)
 @left_press = true
 else
 @left_press = false
 @left_trigger = false
 @left_repeat = false
 end
 if right_down[7] == 1
 @right_repeat = (not @right_repeat)
 @right_trigger = (not @right_press)
 @right_press = true
 else
 @right_press = false
 @right_trigger = false
 @right_repeat = false
 end
 end
 def self.get_mouse_pos
 point_var = [0, 0].pack('ll')
 if $GetCursorPos.call(point_var) != 0
 if $ScreenToClient.call($Window_HWND, point_var) != 0
 x, y = point_var.unpack('ll')
 if (x < 0) or (x > 10000) then x = 0 end
 if (y < 0) or (y > 10000) then y = 0 end
 if x > 640 then x = 640 end
 if y > 480 then y = 480 end
 return x, y
 else
 return 0, 0
 end
 else
 return 0, 0
 end
 end
 def self.press?(mouse_code)
 if mouse_code == LEFT
 if @click_lock
 return false
 else
 return @left_press
 end
 elsif mouse_code == RIGHT
 return @right_press
 else
 return false
 end
 end
 def self.trigger?(mouse_code)
 if mouse_code == LEFT
 if @click_lock
 return false
 else
 return @left_trigger
 end
 elsif mouse_code == RIGHT
 return @right_trigger
 else
 return false
 end
 end
 def self.repeat?(mouse_code)
 if mouse_code == LEFT
 if @click_lock
 return false
 else
 return @left_repeat
 end
 elsif mouse_code == RIGHT
 return @right_repeat
 else
 return false
 end
 end
 def self.click_lock?
 return @click_lock
 end
 def self.click_lock
 @click_lock = true
 end
 def self.click_unlock
 @click_lock = false
 end
 end
 module Input
 if @self_update == nil
 @self_update = method('update')
 @self_press = method('press?')
 @self_trigger = method('trigger?')
 @self_repeat = method('repeat?')
 end
 def self.update
 @self_update.call
 Mouse.update
 end
 def self.press?(key_code)
 if @self_press.call(key_code)
 return true
 end
 if key_code == C
 return Mouse.press?(Mouse::LEFT)
 elsif key_code == B
 return Mouse.press?(Mouse::RIGHT)
 else
 return @self_press.call(key_code)
 end
 end
 def self.trigger?(key_code)
 if @self_trigger.call(key_code)
 return true
 end
 if key_code == C
 return Mouse.trigger?(Mouse::LEFT)
 elsif key_code == B
 return Mouse.trigger?(Mouse::RIGHT)
 else
 return @self_trigger.call(key_code)
 end
 end
 def self.repeat?(key_code)
 if @self_repeat.call(key_code)
 return true
 end
 if key_code == C
 return Mouse.repeat?(Mouse::LEFT)
 elsif key_code == B
 return Mouse.repeat?(Mouse::RIGHT)
 else
 return @self_repeat.call(key_code)
 end
 end
 end
 class Window_Selectable
 if @self_alias == nil
 alias self_update update
 @self_alias = true
 end
 def update
 #self.cursor_rect.empty
 self_update
 if self.active and @item_max > 0
 index_var = @index
 tp_index = @index
 mouse_x, mouse_y = Mouse.get_mouse_pos
 mouse_not_in_rect = true
 for i in 0...@item_max
 @index = i
 update_cursor_rect
 top_x = self.cursor_rect.x + self.x + 16
 top_y = self.cursor_rect.y + self.y + 16
 bottom_x = top_x + self.cursor_rect.width
 bottom_y = top_y + self.cursor_rect.height
 if (mouse_x > top_x) and (mouse_y > top_y) and
 (mouse_x < bottom_x) and (mouse_y < bottom_y)
 mouse_not_in_rect = false
 if tp_index != @index
 tp_index = @index
 $game_system.se_play($data_system.cursor_se)
 end
 break
 end
 end
 if mouse_not_in_rect
 @index = index_var
 update_cursor_rect
 Mouse.click_lock
 else
 Mouse.click_unlock
 end
 end
 end
 end
 class Window_NameInput
 if @self_alias == nil
 alias self_update update
 @self_alias = true
 end
 def update
 #self.cursor_rect.empty
 self_update
 if self.active
 index_var = @index
 mouse_x, mouse_y = Mouse.get_mouse_pos
 mouse_not_in_rect = true
 for i in (0...CHARACTER_TABLE.size).to_a.push(180)
 @index = i
 update_cursor_rect
 top_x = self.cursor_rect.x + self.x + 16
 top_y = self.cursor_rect.y + self.y + 16
 bottom_x = top_x + self.cursor_rect.width
 bottom_y = top_y + self.cursor_rect.height
 #
 if (mouse_x > top_x) and (mouse_y > top_y) and
 (mouse_x < bottom_x) and (mouse_y < bottom_y)
 mouse_not_in_rect = false
 break
 end
 end
 if mouse_not_in_rect
 @index = index_var
 update_cursor_rect
 Mouse.click_lock
 else
 Mouse.click_unlock
 end
 end
 end
 end
 class Window_InputNumber
 if @self_alias == nil
 alias self_update update
 @self_alias = true
 end
 def update
 #self.cursor_rect.empty
 self_update
 mouse_x, mouse_y = Mouse.get_mouse_pos
 if self.active and @digits_max > 0
 index_var = @index
 mouse_not_in_rect = true
 for i in 0...@digits_max
 @index = i
 update_cursor_rect
 top_x = self.cursor_rect.x + self.x + 16
 bottom_x = top_x + self.cursor_rect.width
 #
 if (mouse_x > top_x) and (mouse_x < bottom_x)
 mouse_not_in_rect = false
 break
 end
 end
 if mouse_not_in_rect
 @index = index_var
 update_cursor_rect
 Mouse.click_lock
 else
 Mouse.click_unlock
 end
 end
 if @last_mouse_y == nil
 @last_mouse_y = mouse_y
 end
 check_pos = (@last_mouse_y - mouse_y).abs
 if check_pos > 10
 $game_system.se_play($data_system.cursor_se)
 place = 10 ** (@digits_max - 1 - @index)
 n = @number / place % 10
 @number -= n * place
 n = (n + 1) % 10 if mouse_y < @last_mouse_y
 n = (n + 9) % 10 if mouse_y > @last_mouse_y
 @number += n * place
 refresh
 @last_mouse_y = mouse_y
 end
 end
 end
 class Scene_File
 if @self_alias == nil
 alias self_update update
 @self_alias = true
 end
 def update
 mouse_x, mouse_y = Mouse.get_mouse_pos
 Mouse.click_lock
 idx = 0
 for i in @savefile_windows
 top_x = i.x + 16
 top_y = i.y + 16
 bottom_x = top_x + i.width
 bottom_y = top_y + i.height
 if (mouse_x > top_x) and (mouse_y > top_y) and
 (mouse_x < bottom_x) and (mouse_y < bottom_y)
 i.selected = true
 if @file_index != idx
 @file_index = idx
 $game_system.se_play($data_system.cursor_se)
 end
 Mouse.click_unlock
 else
 i.selected = false
 end
 idx += 1
 end
 self_update
 end
 end
 class Arrow_Enemy
 if @self_alias == nil
 alias self_update update
 @self_alias = true
 end
 def update
 mouse_x, mouse_y = Mouse.get_mouse_pos
 idx = 0
 for i in $game_troop.enemies do
 if i.exist?
 top_x = i.screen_x - self.ox
 top_y = i.screen_y - self.oy
 bottom_x = top_x + self.src_rect.width
 bottom_y = top_y + self.src_rect.height
 if (mouse_x > top_x - $敌人选框扩大) and (mouse_y > top_y - $敌人选框扩大) and
 (mouse_x < bottom_x + $敌人选框扩大) and (mouse_y < bottom_y + $敌人选框扩大)
 if @index != idx
 $game_system.se_play($data_system.cursor_se)
 @index = idx
 end
 end
 end
 idx += 1
 end
 self_update
 end
 end
 class Arrow_Actor
 if @self_alias == nil
 alias self_update update
 @self_alias = true
 end
 def update
 mouse_x, mouse_y = Mouse.get_mouse_pos
 idx = 0
 for i in $game_party.actors do
 if i.exist?
 top_x = i.screen_x - self.ox
 top_y = i.screen_y - self.oy
 bottom_x = top_x + self.src_rect.width
 bottom_y = top_y + self.src_rect.height
 if (mouse_x > top_x - $角色选框扩大) and (mouse_y > top_y - $角色选框扩大) and
 (mouse_x < bottom_x + $角色选框扩大) and (mouse_y < bottom_y + $角色选框扩大)
 if @index != idx
 $game_system.se_play($data_system.cursor_se)
 @index = idx
 end
 end
 end
 idx += 1
 end
 self_update
 end
 end
 class Game_Player
 if @self_alias == nil
 alias self_update update
 @self_alias = true
 end
 def update
 mouse_x, mouse_y = Mouse.get_mouse_pos
 if @last_move_x == nil
 @last_move_x = false
 end
 if Mouse.press?(Mouse::LEFT)
 last_moving = moving?
 last_direction = @direction
 unless moving? or $game_system.map_interpreter.running? or
 @move_route_forcing or $game_temp.message_window_showing
 last_x = @x
 if @last_move_x
 @last_move_x = false
 elsif mouse_x > screen_x + 16
 move_right
 elsif mouse_x < screen_x - 16
 move_left
 end
 last_y = @y
 if last_x != @x
 @last_move_x = true
 elsif mouse_y > screen_y
 move_down
 elsif mouse_y < screen_y - 32
 move_up
 end
 if last_y != @y
 @last_move_x = false
 elsif not @last_move_x
 case last_direction
 when 2
 turn_down
 when 4
 turn_left
 when 6
 turn_right
 when 8
 turn_up
 end
 end
 end
 end
 self_update
 end
 end
 Mouse.init
 END { Mouse.exit }
 | 
 |