赞 | 0 |
VIP | 4 |
好人卡 | 5 |
积分 | 1 |
经验 | 10743 |
最后登录 | 2024-1-28 |
在线时间 | 188 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 120
- 在线时间
- 188 小时
- 注册时间
- 2014-1-18
- 帖子
- 254
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
一个是Sion大神的多功能DLL鼠标脚本(就是这个):
https://rpg.blue/thread-347535-1-1.html
我主要就是希以下这个脚本中的鼠标界面按钮能整合进去,最好格式差不多,谢谢了(不好意思,又来伸手了)- =begin
- ==========================================================================
- 鼠标系统按钮2.5
- ===========================================================================
- 这是一个基于鼠标脚本,让之创造尽可能多的按钮,你要在地图屏幕或地图地,也是游戏中
- 为您提供完整的RMVXACE鼠标交互播放
- 安装、复制并粘贴上面主这个脚本做鼠标触发
- - 左击:动作按钮
- - 右键点击:取消按钮,关闭窗口# - 鼠标滚轮中键: DASH
- ————————————————————————————————————————
- *主要功能
- - 允许您创建按钮,并配置它们做一些事情
- - 事件可以是按钮也对应地按钮!对于一些难题等等
- - 允许您显示事件名称
- - 全鼠标交互
- - WASD移动可选
- - 寻路功能,玩家可以用鼠标
- Mouse.show_cursor内的鼠标光标(假的)
- 如果你想手动改变鼠标光标使用下面的脚本调用# Mouse.set_cursor ( :图标集, X)
- - 将x更改为任何图标索引#
- 如果你想显示一个图片,而不是图标集使用下一个脚本调用# Mouse.set_cursor
- =end
- #===========================================================================#
- # #*****************# #
- # #*** By Falcao ***# Mouse System Buttons 2.5 #
- # #*****************# This is a button based mouse script, allow #
- # create as many buttons you want to the map #
- # screen or map ground, also provide you full #
- # RMVXACE mouse interaction within the game play #
- # #
- # #
- # Falcao RGSS site: [url]http://falcaorgss.wordpress.com[/url] #
- # Falcao Forum site: [url]http://makerpalace.com[/url] #
- # #
- #===========================================================================#
-
- #----------------------------------------------------------------------------
- # * Version 2.5 change log (Date: June 9 2013)
- #
- # Fixed non-refreshing item description bug
- # Fixed Save file selection issue
- # Added ability to start events even if the player is no facing the event
- # Removed option to display arrow selector on save file
- # Added compatibility for multiples game resolutions
- # Item selection with mouse is now more occurate
- # Fixed issue with pearl skillbar (when clicking any tool perform path finding)
- # Cleaned up some code
- #
- #----------------------------------------------------------------------------
- # * Version 2.0 change log (Date: January 13 2013)
- #
- # - Added path finding, now the game player is able to move using the mouse
- # - Now you are able to change the mouse cursor icon in game
- # - Two new notetags added to change the mouse cursor by event comment tags
- # - Fixed crash when pointing a notetagged event with a valid condition
- #----------------------------------------------------------------------------
- # * Version 1.6 change log (Date: November 21 2012)
- #
- # - Added compatibility for any game screen resolution
- # - System optimized to consume less cpu than before
- # - Added extra compatibility for Pearl ABS Liquid
- # - Removed the font fix
- # - Added the imported bolean
- #----------------------------------------------------------------------------
- # * Version 1.5 change log
- #
- # - Fixed cursor sound over loading on selectable windows
- # - Fixed bug when selecting event graphic tileset that have mouse comment tag
- # - FIxed minor bug when transfering (event name now erase completely)
- # - Added option to turn on / off arrow selector on save file
- # - Important! changes on mouse comment tags!
- # ~ CLICK START change to MOUSE START
- # ~ ANIMATION change to MOUSE ANIMATION
- # ~ NAME change to MOUSE NAME
- #
- #---------------------------------------------------------------------------
- # * installation
- #
- # Copy and paste this script above main done!
- #
- # * Mouse triggers
- # - Left click: Action button
- # - Right click: Cancel button, close windows
- # - Mouse wheel middle button: DASH
- #
- #---------------------------------------------------------------------------
- # * Main features
- #
- # - Allow you create buttons and configure them to do something
- # - Events can be buttons too, map ground buttons! for some puzzles etc.
- # - Allow you display event name
- # - Full mouse interaction
- # - WASD movement optional
- # - Path finding feature, player is able to move using the mouse
- # - Mouse cursor changing in-game enabled
- #---------------------------------------------------------------------------
- # * Event buttons commands
- #
- # Write this lines on event comments tags
- #
- # MOUSE START - Event start when you click the event
- # MOUSE ANIMATION x - Show animation when mouse is over event,
- # ex: MOUSE ANIMATION 1
- # MOUSE NAME x - Display event name when mouse is over event,
- # ex: MOUSE NAME Falcao
- # MOUSE ICON x - change the mouse cursor icon when it is over the event
- # change x for the icon index to display
- # MOUSE PIC X - Change the mouse cursor when is over an event but in this
- # case it display a picture graphic name, change x for the
- # picture name
- #------------------------------------------------------------------------------
- # * Script calls
- #
- # Call this line to turn off/on the mouse cursor within the game true/false
- # Mouse.show_cursor(false)
- #
- # If you want to change the mouse cursor manually use the following script calls
- # Mouse.set_cursor(:iconset, x) - change x for any icon index
- #
- # if you want to show a picture instead iconset use the next script call
- # Mouse.set_cursor(:picture, name) - change name for picture name
- #-----------------------------------------------------------------------------
-
- module Map_Buttons
-
- # You can easily insert as many buttons you want to the map screen
- # define here below your buttons parameters
-
- Insert = {
- #-----------------------------------------------------------------------------
- # A => [B, C, D, E, F]
- #
- # A = Button number 按键序号
- #
- # B = Name 游戏中按键显示的名字
- # C = X position in screen tile 屏幕上X坐标
- # D = Y position in screen tile 屏幕上Y坐标
- # E = Icon, if you want a picture write picture 'name' otherwise icon index
- # F = What this button gonna do?, you have two options, call scene or call
- # common event, if you want scene put scene name, if you want common event
- # put common event ID
-
- #Y坐标12,显示在最靠近屏幕下方。添加新菜单的时候请将Y坐标-1。
- #F处可填场景呼叫和公共事件ID。
- # This button call the menu screen
-
-
- # ID=> ["显示名称", X, Y, 图标Index, 呼出菜单],
- 1=> ["菜单", 16, 8, 117, Scene_Menu],
- 2=> ["存档", 16, 7, 4, Scene_Save],
- #Scene_Point
- #~ # 10=> ["成就", 0, 8, 254, Scene_Medalinfo],
- }
-
- # * General configutration
-
- # Mouse cursor icon, if you want a picture write pic 'name' otherwise icon index
- CursorIcon = 386
-
- # Switch ID to turn off/on the icons on the screen
- Switch = 100
-
- # Allow movement with W A S D keys true/false
- WASD_Movement = true
-
- # When you click on event, do you want the player to ignore the self movement?
- IgnoreEventPath = true
-
- # Switch id to enable or disable the path finding feature
- PathFinderSwitch = 500
- #
- #----------------------------------------------------------------------------
- #
- # * License
- #
- # You can use this script in non comercial games, in you need it for comercial
- # games let me know. [email][email protected][/email]
- #-----------------------------------------------------------------------------
-
- def self.check_value(value)
- return 'numeric' if value.is_a? Fixnum
- return 'string'
- end
- end
-
- ($imported ||= {})[:Mouse_System_Buttons] = 2.0
-
- # This class create all screen and event buttons on game screen
- class Interactive_Buttoms
- attr_reader :cursoring
- def initialize
- create_screen_buttoms
- @ani_delay = 0
- @pearl_abs = $imported["Falcao Pearl ABS Liquid"]
- end
-
- def create_screen_buttoms
- @buttons_sprites = []
- for i in Map_Buttons::Insert.values
- @buttons_sprites.push(Sprite_Buttons.new(i[0], i[1], i[2], i[3], i[4]))
- end
- end
-
- def create_button_text
- if @button_text.nil?
- @button_text = Sprite.new
- @button_text.bitmap = Bitmap.new(100, 32)
- @button_text.z = 500
- @button_text.bitmap.font.size = 16
- end
- end
-
- def dispose_screen_buttons
- for button in @buttons_sprites
- button.dispose
- end
- @buttons_sprites = []
- end
-
- def dispose_button_text
- if not @button_text.nil?
- @button_text.dispose
- @button_text.bitmap.dispose
- @button_text = nil
- end
- end
-
- def dispose
- dispose_screen_buttons
- dispose_button_text
- end
-
- def update
- if $game_switches[Map_Buttons::Switch] and not @buttons_sprites.empty?
- dispose_screen_buttons
- elsif not $game_switches[Map_Buttons::Switch] and @buttons_sprites.empty?
- create_screen_buttoms
- end
- update_buttons
- update_event_selection
- end
-
- # path update
- def update_path
- return if $game_switches[Map_Buttons::PathFinderSwitch]
- return if $game_message.busy?
- return unless $game_player.normal_walk?
- @mxx, [url=home.php?mod=space&uid=397486]@myy[/url] = Mouse.map_grid[0], Mouse.map_grid[1]
- if Map_Buttons::IgnoreEventPath
- $game_map.events.values.each do |event|
- return if event.x == @mxx and event.y == @myy
- end
- end
- $game_player.find_path(@mxx, @myy) unless on_toolbar?
- end
-
-
- def on_toolbar?
- return false unless @pearl_abs
- 9.times.each {|x| return true if @mxx == PearlSkillBar::Tile_X + x and
- @myy == PearlSkillBar::Tile_Y}
- return false
- end
-
-
- def update_buttons
- for button in @buttons_sprites
- button.update
- if button.zooming
- @screen_b = true
- create_button_text
- if button.x > 272
- x, y = button.px * 32 - 98, button.py * 32
- draw_button_text(x, y, button.name, 2)
- elsif button.x < 272
- x, y = button.px * 32 + 31, button.py * 32
- draw_button_text(x, y, button.name, 0)
- end
- end
- end
-
- if @screen_b != nil
- unless mouse_over_button?
- dispose_button_text
- @screen_b = nil
- end
- end
- end
-
- def reset_cursor
- if Map_Buttons::check_value(@cursoring[1]) == 'numeric'
- Mouse.set_cursor(:iconset, @cursoring[1], true)
- else
- Mouse.set_cursor(:picture, @cursoring[1], true)
- end
- @cursoring = nil
- end
-
- def apply_iconchanging(sym, operand, event)
- cursor = $game_system.cursorr
- cursor = Map_Buttons::CursorIcon if cursor.nil?
- @cursoring = [event, cursor]
- Mouse.set_cursor(sym, operand, true)
- end
-
- def update_event_selection
- return if @screen_b #disable event buttom if mouse over screen buttom
- update_path if Mouse.trigger?(0)
- for event in $game_map.events.values
- next if event.page.nil?
- if event.x == Mouse.map_grid[0] and event.y == Mouse.map_grid[1]
- if event.mouse_start
- if Mouse.trigger?(0) and !$game_map.interpreter.running?
- event.start
- end
- end
-
- if event.square_size?($game_player, 2)
- if Mouse.trigger?(0) and !$game_map.interpreter.running?
- event.start
- end
- end
-
- anime = event.mouse_animation
- if anime != 0
- @ani_delay += 1
- event.animation_id = anime if @ani_delay == 1
- @ani_delay = 0 if @ani_delay > 16
- end
- name = event.mouse_name
- if name != ""
- [url=home.php?mod=space&uid=94943]@Eve[/url] = [event.x, event.y, event, name]
- create_button_text
- end
- icon = event.mouse_iconset
- picture = event.mouse_picture
- if !icon.nil? and icon != 0 and @cursoring.nil?
- apply_iconchanging(:iconset, icon, event)
- elsif !picture.nil? and picture != "" and @cursoring.nil?
- apply_iconchanging(:picture, picture, event)
- end
- end
- end
-
- if @cursoring != nil
- reset_cursor if not mouse_over_event?(@cursoring[0].x, @cursoring[0].y)
- end
-
- if @Eve != nil
- @eve[2].ch_oy.nil? ? event_oy = 32 : event_oy = @eve[2].ch_oy
- if event_oy > 32
- draw_button_text(@eve[2].screen_x - 49,
- @eve[2].screen_y - event_oy / 2 - 50, @eve[3], 1)
- else
- draw_button_text(@eve[2].screen_x - 49,
- @eve[2].screen_y - event_oy / 2 - 36, @eve[3], 1)
- end
- if not mouse_over_event?(@eve[0], @eve[1])
- dispose_button_text
- @eve = nil
- end
- end
- end
-
- def draw_button_text(x, y, text, a=0)
- return if @button_text.nil?
- @button_text.x = x
- @button_text.y = y
- return if @old_name == text
- @button_text.bitmap.clear
- @button_text.bitmap.draw_text(2, 0, @button_text.bitmap.width, 32, text, a)
- @old_name = text
- end
-
- def mouse_over_button?
- for button in @buttons_sprites
- if Mouse.object_area?(button.x, button.y - 6, button.width, button.height)
- return true
- end
- end
- @old_name = nil
- return false
- end
-
- def mouse_over_event?(event_x, event_y)
- if Mouse.map_grid[0] == event_x and Mouse.map_grid[1] == event_y
- return true
- end
- @old_name = nil
- return false
- end
- end
-
- # Set buttons sprites
- class Spriteset_Map
- alias falcao_insert_buttuns_view create_viewports
- def create_viewports
- @interact_buttoms = Interactive_Buttoms.new
- falcao_insert_buttuns_view
- end
-
- alias falcao_insert_buttuns_dis dispose
- def dispose
- @interact_buttoms.reset_cursor if @interact_buttoms.cursoring != nil
- @interact_buttoms.dispose
- falcao_insert_buttuns_dis
- end
-
- alias falcao_insert_buttuns_up update
- def update
- if $game_player.clear_mousepointers
- @interact_buttoms.dispose
- $game_player.clear_mousepointers = nil
- end
- @interact_buttoms.update
- falcao_insert_buttuns_up
- end
- end
-
- # comments definition
- class Game_Event < Game_Character
- attr_reader :mouse_start, :mouse_animation, :mouse_name, :mouse_iconset
- attr_reader :mouse_picture, :page
- alias falcaomouse_setup setup_page_settings
- def setup_page_settings
- falcaomouse_setup
- @mouse_start = check_comment("MOUSE START")
- @mouse_animation = check_value("MOUSE ANIMATION")
- @mouse_name = check_name("MOUSE NAME")
- @mouse_iconset = check_value("MOUSE ICON")#
- @mouse_picture = check_name("MOUSE PIC")#
- end
-
- def check_comment(comment)
- return false if @list.nil? or @list.size <= 0
- for item in @list
- if item.code == 108 or item.code == 408
- if item.parameters[0].include?(comment)
- return true
- end
- end
- end
- return false
- end
-
- def check_value(comment)
- return 0 if @list.nil? or @list.size <= 0
- for item in @list
- if item.code == 108 or item.code == 408
- if item.parameters[0] =~ /#{comment}[ ]?(\d+)?/
- return $1.to_i
- end
- end
- end
- return 0
- end
-
- def check_name(comment)
- return "" if @list.nil? or @list.size <= 0
- for item in @list
- next unless item.code == 108 or item.code == 408
- if item.parameters[0] =~ /#{comment} (.*)/
- return $1.to_s
- end
- end
- return ""
- end
-
- def square_size?(target, size)
- distance = (@x - target.x).abs + (@y - target.y).abs
- enable = (distance <= size-1)
- return true if enable
- return false
- end
-
- end
-
- # Create screen buttons sprites
- class Sprite_Buttons < Sprite
- attr_reader :px
- attr_reader :py
- attr_reader :name
- attr_reader :zooming
- def initialize(name, px, py, icon_index, action=nil)
- super()
- self.z = 50
- @icon_index = icon_index
- @px = px
- @py = py
- @action = action
- @object_zooming = 0
- @zooming = false
- @name = name
- set_bitmap
- update
- end
-
- def update
- super
- if Mouse.object_area?(self.x, self.y - 4, self.bitmap.width,
- self.bitmap.height)
- @zooming = true
- @object_zooming += 1
- case @object_zooming
- when 1..10 ; self.zoom_x -= 0.02 ; self.zoom_y -= 0.02
- when 11..20 ; self.zoom_x += 0.02 ; self.zoom_y += 0.02
- when 21..30 ; self.zoom_x = 1.0 ; self.zoom_y = 1.0
- @object_zooming = 0
- end
- if Mouse.trigger?(0) and @action != nil
- unless $game_map.interpreter.running?
- Sound.play_ok
- if @action == Scene_Menu and not $game_system.menu_disabled
- SceneManager.call(@action)
- Window_MenuCommand::init_command_position
- return
- end
- if Map_Buttons::check_value(@action) == 'numeric'
- $game_temp.reserve_common_event(@action)
- else
- SceneManager.call(@action)
- end
- end
- end
- elsif @object_zooming > 0
- self.zoom_x = 1.0
- self.zoom_y = 1.0
- @object_zooming = 0
- else
- @zooming = false
- end
- end
-
- def set_bitmap
- if Map_Buttons::check_value(@icon_index) == 'numeric'
- self.bitmap = Bitmap.new(24, 24)
- bitmap = Cache.system("Iconset")
- rect = Rect.new(@icon_index % 16 * 24, @icon_index / 16 * 24, 24, 24)
- self.bitmap.blt(0, 0, bitmap, rect)
- else
- self.bitmap = Cache.picture(@icon_index)
- end
- self.x = @px * 32 + 4
- self.y = @py * 32 + 4
- end
- end
-
- # Game_character new variable
- class Game_CharacterBase
- attr_accessor :ch_oy
- end
-
- # Sprite character
- class Sprite_Character < Sprite_Base
- alias falcaoadd_oxy_set_character_bitmap set_character_bitmap
- def set_character_bitmap
- falcaoadd_oxy_set_character_bitmap
- @character.ch_oy = self.oy
- end
- end
-
- class Game_System
- attr_accessor :current_cursor
- def cursorr
- return Map_Buttons::CursorIcon if @current_cursor.nil?
- return @current_cursor
- end
- end
-
- # Mouse module
- module Mouse
-
- GetKeyState = Win32API.new('user32', 'GetAsyncKeyState', 'i', 'i')
- GetCursorPos = Win32API.new('user32', 'GetCursorPos', 'p', 'i')
- GetClientRect = Win32API.new('user32', 'GetClientRect', %w(l p), 'i')
- ShowCursor = Win32API.new('user32', 'ShowCursor', 'i', 'l')
- ScreenToClient = Win32API.new('user32', 'ScreenToClient', %w(l p), 'i')
- Findwindow = Win32API.new('user32', 'FindWindowA', %w(p p), 'l')
- GetPrivatePro = Win32API.new('kernel32', 'GetPrivateProfileStringA',
- %w(p p p p l p), 'l')
-
- ShowCursor.call(0)
-
- @triggers = [[0, 1], [0, 2], [0, 4]]
- @old_pos = 0
-
- # Mouse Sprite
-
- def self.set_cursor(sym, operand, write=false)
- case sym
- when :iconset
- $mouse_cursor.bitmap = Bitmap.new(24, 24)
- bitmap = Cache.system("Iconset")
- rect = Rect.new(operand % 16 * 24, operand / 16 * 24, 24, 24)
- $mouse_cursor.bitmap.blt(0, 0, bitmap, rect)
- when :picture then $mouse_cursor.bitmap = Cache.picture(operand)
- end
- $game_system.current_cursor = operand if write
- end
-
- $mouse_cursor = Sprite.new
- icon = Map_Buttons::CursorIcon
- if Map_Buttons::check_value(icon) == 'numeric'
- set_cursor(:iconset, icon)
- else
- set_cursor(:picture, icon)
- end
- $mouse_cursor.z = 10001
- $mouse_cursor.x = $mouse_cursor.y = 1000
- $mouse_cursor.ox = 4
-
- def self.show_cursor(value)
- unless value
- @pos[0] = @pos[1] = 600
- end
- $mouse_cursor.visible = value
- end
-
- def self.map_grid
- return nil if @pos == nil
- x = ($game_map.display_x).to_i + (@pos[0] / 32)
- y = ($game_map.display_y).to_i + (@pos[1] / 32)
- return [x, y]
- end
-
- def self.standing?
- return false if @old_px != @pos[0]
- return false if @old_py != @pos[1]
- return true
- end
-
- def self.input_keys
- $game_arrows.mode_on ? type = $game_arrows.in_type : type = Input::C
- keys = {0 => type, 1 => Input::B, 2 => Input::A}
- return keys
- end
-
- def self.object_area?(x, y, width, height)
- return false if @pos.nil?
- return @pos[0].between?(x, width + x) && @pos[1].between?(y, height + y)
- end
-
- def self.position
- return @pos == nil ? [0, 0] : @pos
- end
-
- def self.global_pos
- pos = [0, 0].pack('ll')
- return GetCursorPos.call(pos) == 0 ? nil : pos.unpack('ll')
- end
-
- def self.screen_to_client(x=0, y=0)
- pos = [x, y].pack('ll')
- return ScreenToClient.call(self.hwnd, pos) == 0 ? nil : pos.unpack('ll')
- end
-
- def self.pos
- global_pos = [0, 0].pack('ll')
- gx, gy = GetCursorPos.call(global_pos) == 0 ? nil : global_pos.unpack('ll')
- local_pos = [gx, gy].pack('ll')
- x, y = ScreenToClient.call(self.hwnd,
- local_pos) == 0 ? nil : local_pos.unpack('ll')
- begin
- if (x >= 0 && y >= 0 && x <= Graphics.width && y <= Graphics.height)
- @old_px, @old_py = x, y
- return x, y
- else
- return -20, -20
- end
- rescue
- return 0, 0
- end
- end
-
- def self.update
- old_pos = @pos
- @pos = self.pos
- self.input_keys
- if !$mouse_cursor.visible && old_pos != @pos
- $mouse_cursor.visible = true
- end
- if old_pos != [-20, -20] && @pos == [-20, -20]
- ShowCursor.call(1)
- elsif old_pos == [-20, -20] && @pos != [-20, -20]
- ShowCursor.call(0)
- end
- for i in @triggers
- n = GetKeyState.call(i[1])
- if [0, 1].include?(n)
- i[0] = (i[0] > 0 ? i[0] * -1 : 0)
- else
- i[0] = (i[0] > 0 ? i[0] + 1 : 1)
- end
- end
- end
-
- # trigger definition
- def self.trigger?(id = 0)
- pos = self.pos
- if pos != [-20,-20]
- case id
- when 0
- return @triggers[id][0] == 1
- when 1
- if @triggers[1][0] == 1 && !$game_system.menu_disabled
- return @triggers[id][0] == 1
- end
- when 2
- return @triggers[id][0] == 1
- end
- end
- end
-
- # repeat definition
- def self.repeat?(id = 0)
- if @triggers[id][0] <= 0
- return false
- else
- return @triggers[id][0] % 5 == 1 && @triggers[id][0] % 5 != 2
- end
- end
-
- #press definition
- def self.press?(id = 0)
- if @triggers[id][0] <= 0
- return false
- else
- return true
- end
- end
-
- def self.screen_to_client(x=0, y=0)
- pos = [x, y].pack('ll')
- return ScreenToClient.call(self.hwnd, pos) == 0 ? nil : pos.unpack('ll')
- end
-
- def self.hwnd
- if @hwnd.nil?
- game_name = "\0" * 256
- GetPrivatePro.call('Game', 'Title', '', game_name, 255, ".\\Game.ini")
- game_name.delete!("\0")
- @hwnd = Findwindow.call('RGSS Player', game_name)
- end
- return @hwnd
- end
-
- def self.client_size
- rect = [0, 0, 0, 0].pack('l4')
- GetClientRect.call(self.hwnd, rect)
- right, bottom = rect.unpack('l4')[2..3]
- return right, bottom
- end
- end
-
- # Input module aliased
- class << Input
- unless self.method_defined?(:falcao21_mouse_update)
- alias_method :falcao21_mouse_update, :update
- alias_method :falcao21_mouse_trigger?, :trigger?
- alias_method :falcao21_mouse_repeat?, :repeat?
- alias_method :fal_mouse_input_press?, :press?
- end
-
- def update
- if $mouse_cursor.visible
- Mouse.update
- $game_arrows.update
- mx, my = *Mouse.position
- $mouse_cursor.x = mx unless mx.nil?
- $mouse_cursor.y = my unless my.nil?
- end
- falcao21_mouse_update
- end
-
- # trigger
- def trigger?(constant)
- return true if falcao21_mouse_trigger?(constant)
- unless Mouse.pos.nil?
- if Mouse.input_keys.has_value?(constant)
- mouse_trigger = Mouse.input_keys.index(constant)
- return true if Mouse.trigger?(mouse_trigger)
- end
- end
- return false
- end
-
- # press
- def press?(constant)
- return true if fal_mouse_input_press?(constant)
- unless Mouse.pos.nil?
- if Mouse.input_keys.has_value?(constant)
- mouse_trigger = Mouse.input_keys.index(constant)
- return true if Mouse.press?(mouse_trigger)
- end
- end
- return false
- end
-
- # repeat
- def repeat?(constant)
- return true if falcao21_mouse_repeat?(constant)
- unless Mouse.pos.nil?
- if Mouse.input_keys.has_value?(constant)
- mouse_trigger = Mouse.input_keys.index(constant)
- return true if Mouse.repeat?(mouse_trigger)
- end
- end
- return false
- end
- end
-
- # Here your best friend, you can call this script within the game, scene etc.
- # $game_arrows.create_arrows(x, y), create it, $game_arrows.dispose, delete it
- class Game_Arrow_Selector
- attr_accessor :mode_on
- attr_accessor :in_type
- def initialize
- @mode_on = false
- end
-
- def create_arrows(x, y)
- return unless @arrows_sprites.nil?
- buttons = {1=> 'UP', 2=> 'RIGHT', 3=> 'DOWN',
- 4=> 'LEFT', 5=> 'OK', 6=> 'Cancel'}
- @arrows_sprites = []
- for i in buttons.values
- @arrows_sprites.push(Garrows_Sprites.new(i, x, y))
- end
- end
-
- def dispose
- return if @arrows_sprites.nil?
- for arrow in @arrows_sprites
- arrow.dispose
- end
- @arrows_sprites = nil
- @mode_on = false
- end
-
- def update
- return if @arrows_sprites.nil?
- for arrow in @arrows_sprites
- arrow.update
- end
- end
- end
-
- class Garrows_Sprites < Sprite
- def initialize(name, x, y)
- super()
- self.z = 1000
- @px, @py = x, y
- @name = name
- @object_zooming = 0
- @zooming = false
- set_bitmap
- update
- end
-
- def update
- super
- if Mouse.object_area?(self.x + @fix[0], self.y + @fix[1],
- self.bitmap.width + @fix[2], self.bitmap.height + @fix[3])
- $game_arrows.mode_on = true
- $game_arrows.in_type = Input::UP if @name == 'UP'
- $game_arrows.in_type = Input::DOWN if @name == 'DOWN'
- $game_arrows.in_type = Input::LEFT if @name == 'LEFT'
- $game_arrows.in_type = Input::RIGHT if @name == 'RIGHT'
- $game_arrows.in_type = Input::B if @name == 'OK'
- $game_arrows.in_type = Input::C if @name == 'Cancel'
- @object_zooming += 1
- @zooming = true
- case @object_zooming
- when 1..10 ; self.zoom_x -= 0.01 ; self.zoom_y -= 0.01
- when 11..20 ; self.zoom_x += 0.01 ; self.zoom_y += 0.01
- when 21..30 ; self.zoom_x = 1.0 ; self.zoom_y = 1.0
- @object_zooming = 0
- end
- elsif @object_zooming > 0
- self.zoom_x = 1.0
- self.zoom_y = 1.0
- @object_zooming = 0
- elsif @zooming
- @zooming = false
- $game_arrows.mode_on = false
- end
- end
-
- def set_bitmap
- self.bitmap = Bitmap.new(24, 15) if @name != 'Cancel'
- case @name
- when 'UP'
- self.x = @px + 25 ; self.y = @py - 2
- self.angle = 182 ; @fix = [-23, -18, 0, 0]
- when 'DOWN'
- self.x = @px + 1 ; self.y = @py + 26
- @fix = [0, -4, 0, 0]
- when 'LEFT'
- self.x = @px ; self.y = @py + 1
- self.angle = - 92 ; @fix = [-14, -4, - 9, 9]
- when 'RIGHT'
- self.x = @px + 26 ; self.y = @py + 26
- self.angle = + 92 ; @fix = [0, - 26, - 9, 9]
- when 'OK'
- self.x = @px + 1 ; self.y = @py + 6
- @fix = [0, -4, 0, 0]
- self.bitmap.font.size = 20
- self.bitmap.draw_text(4, -7, self.bitmap.width, 32, @name)
- return
- when 'Cancel'
- self.x = @px - 11 ; self.y = @py + 42
- @fix = [0, -4, 0, 0]
- self.bitmap = Bitmap.new(50, 15)
- self.bitmap.font.size = 20
- self.bitmap.draw_text(2, -7, self.bitmap.width, 32, @name)
- return
- end
- draw_crappy_triangle(0, 0)
- end
-
- # This method create a crappy triangle pointing down
- def draw_crappy_triangle(px, py)
- color = Color.new(192, 224, 255, 255)
- x, y, w, = 0, 4, 24
- self.bitmap.fill_rect(px + 1, py, 22, 1, color)
- self.bitmap.fill_rect(px, py + 1, 24, 4, color)
- for i in 1..10
- x += 1; y += 1; w -= 2
- self.bitmap.fill_rect(px + x, py + y, w, 1, color)
- end
- end
- end
-
- $game_arrows = Game_Arrow_Selector.new
-
- # Arrow selector is displayed when Input number is on
- class Game_Interpreter
- alias falcao_setup_num_input setup_num_input
- def setup_num_input(params)
- falcao_setup_num_input(params)
- $game_arrows.create_arrows(256, 194) if $game_message.position == 0
- $game_arrows.create_arrows(256, 340) if $game_message.position == 1
- $game_arrows.create_arrows(256, 180) if $game_message.position == 2
- end
- end
-
- # Arrow selector is disposed when press ok
- class Window_NumberInput < Window_Base
- alias falcao_process_ok process_ok
- def process_ok
- falcao_process_ok
- $game_arrows.dispose
- end
- end
-
- # WASD Movements
- module Input
- class << self
- if !method_defined?('vxe_dir4')
- alias vxace_dir4 dir4
- end
- def dir4
- if Map_Buttons::WASD_Movement
- return 2 if (Input.press?(Input::Y))
- return 4 if (Input.press?(Input::X))
- return 6 if (Input.press?(Input::Z))
- return 8 if (Input.press?(Input::R))
- end
- return vxace_dir4
- end
- end
- end
-
- # If event start with mouse
- class Game_Player < Game_Character
- alias falcao_start_map_event start_map_event
- def start_map_event(x, y, triggers, normal)
- $game_map.events_xy(x, y).each do |event_click|
- return if event_click.check_comment("MOUSE START")
- end
- falcao_start_map_event(x, y, triggers, normal)
- end
- end
-
- # clear pointers when tranfering
- class Game_Player < Game_Character
- attr_accessor :clear_mousepointers
- alias falcaomouse_perform_transfer perform_transfer
- def perform_transfer
- @clear_mousepointers = true if $game_map.map_id != @new_map_id
- falcaomouse_perform_transfer
- end
- end
-
- # Path find
- class Game_Character < Game_CharacterBase
- attr_accessor :map, :runpath
- alias pathfind1_ini initialize
- def initialize
- pathfind1_ini
- @map = nil
- @runpath = false
- end
-
- alias pathfind1_up update
- def update
- run_path if @runpath == true
- pathfind1_up
- 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_straight(6) if @map[@x+1,@y] == step - 1 && step != 0
- move_straight(2) if @map[@x,@y+1] == step - 1 && step != 0
- move_straight(4) if @map[@x-1,@y] == step - 1 && step != 0
- move_straight(8) if @map[@x,@y-1] == step - 1 && step != 0
- when 1
- move_straight(8) if @map[@x,@y-1] == step - 1 && step != 0
- move_straight(4) if @map[@x-1,@y] == step - 1 && step != 0
- move_straight(2) if @map[@x,@y+1] == step - 1 && step != 0
- move_straight(6) if @map[@x+1,@y] == step - 1 && step != 0
- end
- end
-
- def find_path(x,y)
- sx, sy = @x, @y
- result = setup_map(sx,sy,x,y)
- @runpath = result[0]
- @map = result[1]
- @map[sx,sy] = result[2] if result[2] != nil
- end
-
- def clear_path
- @map = nil
- @runpath = false
- end
-
- def setup_map(sx,sy,ex,ey)
- map = Table.new($game_map.width, $game_map.height)
- map[ex,ey] = 1
- old_positions = []
- new_positions = []
- old_positions.push([ex, ey])
- depth = 2
- depth.upto(100){|step|
- loop do
- break if old_positions[0] == nil
- x,y = old_positions.shift
- return [true, map, step] if x == sx and y+1 == sy
- if $game_player.passable?(x, y, 2) and map[x,y + 1] == 0
- map[x,y + 1] = step
- new_positions.push([x,y + 1])
- end
- return [true, map, step] if x-1 == sx and y == sy
- if $game_player.passable?(x, y, 4) and map[x - 1,y] == 0
- map[x - 1,y] = step
- new_positions.push([x - 1,y])
- end
- return [true, map, step] if x+1 == sx and y == sy
- if $game_player.passable?(x, y, 6) and map[x + 1,y] == 0
- map[x + 1,y] = step
- new_positions.push([x + 1,y])
- end
- return [true, map, step] if x == sx and y-1 == sy
- if $game_player.passable?(x, y, 8) and map[x,y - 1] == 0
- map[x,y - 1] = step
- new_positions.push([x,y - 1])
- end
- end
- old_positions = new_positions
- new_positions = []
- }
- return [false, nil, nil]
- end
- end
-
- class Game_Player
- alias pathfind_player_update update
- def update
- clear_path if Input.dir4 != 0
- pathfind_player_update
- end
-
- alias findpath_perform_transfer perform_transfer
- def perform_transfer
- clear_path if $game_map.map_id != @new_map_id
- findpath_perform_transfer
- end
- end
- # Window selectable (Thanks wora for some lines here)
- class Window_Selectable < Window_Base
- alias mouse_selection_ini initialize
- def initialize(*args)
- mouse_selection_ini(*args)
- @scroll_wait = 0
- @cursor_wait = 0
- @sdelay = 0
- end
-
- alias mouse_selection_update update
- def update
- update_mouse_selection if self.active and self.visible
- @sdelay -= 1 if @sdelay > 0
- mouse_selection_update
- end
-
- def update_mouse_selection
- @cursor_wait -= 1 if @cursor_wait > 0
- plus_x = self.x + 16 - self.ox
- plus_y = self.y + 8 - self.oy
- unless self.viewport.nil?
- plus_x += self.viewport.rect.x - self.viewport.ox
- plus_y += self.viewport.rect.y - self.viewport.oy
- end
- (0..self.item_max - 1).each do |i|
- irect = item_rect(i)
- move_cursor(i) if Mouse.object_area?(
- irect.x + plus_x, irect.y + plus_y, irect.width, irect.height)
- update_cursor
- end
- end
-
- def move_cursor(index)
- return if @index == index
- @scroll_wait -= 1 if @scroll_wait > 0
- row1 = @index / self.col_max
- row2 = index / self.col_max
- bottom = self.top_row + (self.page_row_max - 1)
- if index != @index and @sdelay == 0
- Sound.play_cursor
- @sdelay = 5
- end
- if row1 == self.top_row and row2 < self.top_row
- return if @scroll_wait > 0
- @index = [@index - self.col_max, 0].max
- @scroll_wait = 30
- elsif row1 == bottom and row2 > bottom
- return if @scroll_wait > 0
- @index = [@index + self.col_max, self.item_max - 1].min
- @scroll_wait = 30
- else
- @index = index
- end
- select(@index)
- return if @cursor_wait > 0
- @cursor_wait += 2
- end
- end
-
-
- class Window_NameInput
- def item_max
- return 90
- end
- end
-
- class Scene_File < Scene_MenuBase
-
- alias mouse_top_index top_index=
- def top_index=(index)
- @scroll_timer = 0 if @scroll_timer.nil? ; @scroll_timer -= 1
- return if @scroll_timer > 0
- mouse_top_index(index) ; @scroll_timer = 35
- end
-
- alias mouse_sb_update update
- def update
- (0..self.item_max - 1).each do |i|
- ix = @savefile_windows[i].x
- iy = @savefile_windows[i].y + 40 - @savefile_viewport.oy
- iw = @savefile_windows[i].width
- ih = @savefile_windows[i].height
- if Mouse.object_area?(ix, iy, iw, ih)
- @savefile_windows[@index].selected = false
- @savefile_windows[i].selected = true
- @index = i
- end
- ensure_cursor_visible
- end
- mouse_sb_update
- end
- end
复制代码 |
|