Partagez
Aller en bas
avatar
az3rtY
Membre

Nombre de messages : 436
Age : 17
Localisation : Sûrement, devant mon pc ^^
Distinction : aucune
Date d'inscription : 16/04/2013
http://kwang.webobo.biz

[A S] Jouer a la souris !

le Mar 11 Juin 2013 - 18:08
Yo !

Ici, az3rtY En live de Script RPG Maker VX Ace, aujourd'hui, je vous présente un petit script, c'est le Script Souris :
 
Code:
#===========================================================================#
#  #*****************#                                                      #
#  #*** By Falcao ***#         Mouse System Buttons 2.0                     #
#  #*****************#         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:  http://falcaorgss.wordpress.com                        #
# Falcao Forum site: http://makerpalace.com                                 #
#                                                                           #
#===========================================================================#

# * Version 2.0 change log (Date: January 13 2013)

# - Added path finding, now the game player is able to move using the mouse
# - Added compatibility with Victor Animated Battle version 1.x and above
# - 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
#  D = Y position in screen tile
#  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
 
 # This button call the menu screen
 1=> ["Menu", 16, 11, 117, Scene_Menu],  
 
 # This button call a common event ID 1
 2=>  ["Bestiary",  16, 12, 121, 1],
 
 

 }

# * 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
 
# Display arrow selector on save file? true / false
 DisplaySelector = false
 
# 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. falmc99@gmail.com
#-----------------------------------------------------------------------------

 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
 end
 
 def create_screen_buttoms
   if $imported["Falcao Pearl ABS Liquid"]
     if PearlKernel::clean_back?
       @buttons_sprites = []
       return
     end
   end
   @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 = 50
     @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_ButtonsSwitch] and not @buttons_sprites.empty?
     dispose_screen_buttons
   elsif not $game_switches[Map_ButtonsSwitch] and @buttons_sprites.empty?
     create_screen_buttoms
   end
   update_buttons
   update_event_selection
 end
 
 # path update
 def update_path
   return if $game_switches[Map_ButtonsPathFinderSwitch]
   return if $game_message.busy?
   return unless $game_player.normal_walk?
   mx, my = Mouse.map_grid[0], Mouse.map_grid[1]
   if Map_Buttons::IgnoreEventPath
     $game_map.events.values.each do |event|
       return if event.x == mx and event.y == my
     end
   end
   $game_player.find_path(mx, my)
 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
       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 != ""
         @eve = [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
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")
     @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::C     if @name == 'OK'
     $game_arrows.in_type = Input::B     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

# Arrow selector is displayed within save and load scene
class Scene_File < Scene_MenuBase
 alias falcao47_start start
 alias falcao47_terminate terminate
 
 def start
   falcao47_start
   $game_arrows.create_arrows(210, 166) if Map_Buttons::DisplaySelector
 end
 
 def terminate
   falcao47_terminate
   $game_arrows.dispose if Map_Buttons::DisplaySelector
 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
   (0..self.item_max - 1).each do |i|
     irect = item_rect(i)
     irx = self.x + 16 + irect.x - self.ox
     iry = self.y + 16 + irect.y - self.oy
     move_cursor(i) if Mouse.object_area?(irx, iry, 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
   return if @cursor_wait > 0
   @cursor_wait += 2
 end
end

# Name imput selectable
class Window_NameInput
 alias mouse_name_select update unless $@
 def update(*args, &block)
   mouse_name_select(*args, &block)
   if self.active and self.visible
     (0..self.table[@page].size - 1).each do |i|
     irect = item_rect(i)
     irx = self.x + 16 + irect.x - self.ox
     iry = self.y + 16 + irect.y - self.oy
     @index = i if Mouse.object_area?(irx, iry, irect.width, irect.height)
     end
   end
 end
end

# Window party command
class Window_PartyCommand < Window_Command
 def update_mouse_selection
   (0..self.item_max - 1).each do |i|
   irect = item_rect(i)
   irx = self.viewport.ox + 16 + irect.x - self.ox
   iry = 288 + 16 + irect.y - self.oy
   self.index = i if Mouse.object_area?(irx, iry, irect.width, irect.height)
   end
 end
end

# Window actor command
class Window_ActorCommand < Window_Command
 def update_mouse_selection
   (0..self.item_max - 1).each do |i|
   irect = item_rect(i)
   add = 288
   add = 156 if !$imported[:ve_animated_battle].nil? &&  
   $imported[:ve_animated_battle] > 1
   irx = self.viewport.ox + add + 16 + irect.x
   iry = 288 + 16 + irect.y
   self.index = i if Mouse.object_area?(irx, iry, irect.width, irect.height)
   end
 end
end

Il est mettre dans les script --> Matériels --> Vous creer un qui s'appellera --> AS - Souris

Bref, a++

avatar
Kayss
Membre

Nombre de messages : 68
Age : 28
Distinction : aucune
Date d'inscription : 03/02/2013
http://www.reparation-iphone-lille.fr/

Re: [A S] Jouer a la souris !

le Mar 11 Juin 2013 - 20:40
Script réalisé par Falcao.

Penses à mettre le nom de la personne qui a fait le script dans ta présentation, ça nous intéresse et c'est une marque de respect envers la personne qui a bossé sur le script. Histoire de montrer que tu ne t'accapares pas le travail d'un autre ^^ !
avatar
Zangther
Membre

Nombre de messages : 899
Distinction : aucune
Date d'inscription : 06/02/2013

Re: [A S] Jouer a la souris !

le Mar 11 Juin 2013 - 21:26
Ben c'est indiqué
#*** By Falcao ***# Mouse System Buttons 2.0 #

Wink
avatar
Kayss
Membre

Nombre de messages : 68
Age : 28
Distinction : aucune
Date d'inscription : 03/02/2013
http://www.reparation-iphone-lille.fr/

Re: [A S] Jouer a la souris !

le Mar 11 Juin 2013 - 21:28
Oui mais c'est un principe ^^ !
avatar
Spytje
Administrateur

Nombre de messages : 5899
Localisation : La terre
Distinction : Spiraliste [Korn']
Forestia : Projet du mois juillet 2014
Papy Pulkigrat [Yama']
Date d'inscription : 16/03/2008

Re: [A S] Jouer a la souris !

le Mar 11 Juin 2013 - 21:44
Il manque aussi une petite description sur les différentes fonctions possibles avec ce script, et elles sont nombreuses.

Tous le monde ne sait traduire l'anglais et certaines personnes ne savent pas utiliser les instructions présente au début de celui-ci.
Contenu sponsorisé

Re: [A S] Jouer a la souris !

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum