[A S] Jouer a la souris !
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 :
Il est mettre dans les script --> Matériels --> Vous creer un qui s'appellera --> AS - Souris
Bref, a++
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++
Re: [A S] Jouer a la souris !
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 ^^ !
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 ^^ !
- ZangtherMembre
- Nombre de messages : 913
Distinction : aucune
Date d'inscription : 06/02/2013
Re: [A S] Jouer a la souris !
Mar 11 Juin 2013 - 21:26
Ben c'est indiqué
#*** By Falcao ***# Mouse System Buttons 2.0 #
Re: [A S] Jouer a la souris !
Mar 11 Juin 2013 - 21:28
Oui mais c'est un principe ^^ !
- SpytjeAdministrateur
- Nombre de messages : 5935
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 !
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.
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.
_________________
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum