Tada
Voici la possibilité de gérer la souris en event, son apparence, récupérer ses coordonnées dans des variables, les clics dans des interupteurs etc etc
Vous pouvez aussi récupérer les coordonnées de la souris sur la map (très utile pour un point and click)
Lisez attentivement les instructions en début de script pour gérer votre souris
Créer un nouveau script et appeler le par exemple Event Souris
N'oubliez pas le script interpreter 2
https://lodm.forumactif.com/Groupe-pour-Scripts-f4/Outils-pour-Event-Maker-f7/A-mettre-pour-ajouter-de-nouvelles-fonctions-t35.htm[code]#==============================================================================
# OUTILS
# Souris
#--------------------
# Stephane, Roys
# Mai 2007
#--------------------
# Explication
# Permet de gerer la souris en event
#--------------------
# Mode d'Emploi
# Faire inserer commentaire : Souris fonction
# Remplacer fonction, par une des options ci dessous
# Créer la souris:
# Inserer commentaire : Souris On
# Effacer la souris:
# Inserer commentaire : Souris Off
# Changer l'icone de la souris:
# Inserer commentaire : Souris Sprite nom
# - Remplacer nom, par le nom de l'icone dans le repertoire icon
# Pour récupérer les coordonnées de la souris:
# Inserer commentaire : Souris varx n
# - Remplacer n par le numero de la variable ou vous voulez stocké la coordonnées x de la souris
# Pour récupérer les coordonnées de la souris:
# Inserer commentaire : Souris vary n
# - Remplacer n par le numero de la variable ou vous voulez stocké la coordonnées y de la souris
# Pour recupérér les coordonnées de la map (par case) dans des variables
# Inserer commentaire:Souris Mapx n
# - Remplacer n par la variable qui contiendra les coordonnes x de la souris sur la map
# Inserer commentaire:Souris Mapy n
# - Remplacer n par la variable qui contiendra les coordonnes y de la souris sur la map
# Récupérer si clic gauche:
# Inserer commentaire : Souris clicg n
# - Remplacer n par le numero de l'interupteur qui stock le bouton gauche
# Récupérer si clic droit:
# Inserer commentaire : Souris clicd n
# - Remplacer n par le numero de l'interupteur qui stock le bouton droit
# Deplacer la souris (uniquement si la souris est gelé):
# Inserer commentaire : Souris x xx y yy
# - Remplacer xx par les coordonnées x ou v[n] pour le contenu de la variable n
# - Remplacer ... par les coordonnées you v[n] pour le contenu de la variable n
# Geler la souris :
# Inserer commentaire : Souris gele
# La souris ne bouge plus
# Dégeler la souris :
# Inserer commentaire : Souris degele
# La souris bouge à nouveau
# Changer l'opacité:
# Inserer commentaire : Souris Opacite valeur
# icone de la souris de départ dans le repertoire icon
MOUSE_SPRITE = "001-Weapon01"
#==============================================================================
# Interpreter
#==============================================================================
class Interpreter
alias outil_souris_command108 command_108
def command_108
# Commande non valide
if @parameters[0].split.size>1
# Commande valide
if (@parameters[0].upcase)[/SOURIS/]=="SOURIS"
#----------------------
# Recupère les commandes
ligne=@parameters[0]
com=ligne.split
for i in 1..com.size-1
case com[i].upcase
#----------------------
# Créer la souris
when "ON"
$souris.sprite.visible=true
when "OFF"
$souris.sprite.visible=false
when "SPRITE"
#----------------------
# change Apparence
$souris.souris_icone=com[i+1]
$souris.refresh
when "OPACITE"
$souris.sprite.opacity=com[i+1].to_i
#----------------------
# Coordonnées
when "VARX"
$game_variables[com[i+1].to_i]=$souris.x
when "VARY"
$game_variables[com[i+1].to_i]=$souris.y
when "MAPX"
$game_variables[com[i+1].to_i]=($souris.x+$game_map.display_x/4)/32
when "MAPY"
$game_variables[com[i+1].to_i]=($souris.y+$game_map.display_y/4)/32
when "X"
com[i+1].gsub!(/\[Vv][([0-9]+)]/) { $game_variables[$1.to_i] }
$souris.x=com[i+1].to_i
when "Y"
com[i+1].gsub!(/\[Vv][([0-9]+)]/) { $game_variables[$1.to_i] }
$souris.y=com[i+1].to_i
when "GELE"
$souris.gele=true
when "DEGELE"
$souris.gele=false
# clic
when "CLICG"
$game_switches[com[i+1].to_i]=$souris.gauche
when "CLICD"
$game_switches[com[i+1].to_i]=$souris.droit
end
end
end
end
outil_souris_command108
end
end
#======================================
# SCENE TITLE
#======================================
class Scene_Title
alias outils_souris_scene_title_main main
#--------------------------------------------------------------------------
# MAIN
#--------------------------------------------------------------------------
def main
$souris=Mouse.new
$clavier=Keyboard.new
outils_souris_scene_title_main
end
end
#======================================
# SCENE MAP
#======================================
class Scene_Map
alias outils_souris_scene_map_update update
def update
outils_souris_scene_map_update
$clavier.update
$souris.update
end
end
#======================================
# Keyboard
#======================================
class Keyboard
GetKeyState = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
GetKeyboardState = Win32API.new("user32","GetKeyState",['i'],'i')
GetSetKeyState = Win32API.new("user32","SetKeyboardState",['i'],'i')
#--------------------------------------------------------------------------
# 'Fonctions API
#--------------------------------------------------------------------------
# TEST pour duree de pression
def keyb(rkey)
if GetKeyState.call(rkey) != 0
return 1
end
return 0
end
#--------------------------------------------------------------------------
# TEST pour une pression
def keyboard(rkey)
GetKeyState.call(rkey) & 0x01 == 1 #
end
#--------------------------------------------------------------------------
def key(rkey, key = 0)
GetKeyboardState.call(rkey) & 0x01 == key #
end
#--------------------------------------------------------------------------
# INITIALIZE
#--------------------------------------------------------------------------
def initialize
@Rcompteur=0
@Rclick=false
@delai=0
@double=0
@debut_double=0
@compte_maintenu=0
@compteur=0
end
#--------------------------------------------------------------------------
# UPDATE
# Recupere les touches du jeu et les coord de la souris
#--------------------------------------------------------------------------
def update
# Touches
souris=GetKeyState.call(0x01)
$souris.gauche_maintenu=(souris!=0)
$souris.gauche= (souris & 0x01 == 1)
$souris.droit=keyboard(0x02)
$souris.milieu=keyboard(0x04)
# Touche du jeu
@delai=[@delai-1,0].max
# Test pour double fleche
if (Input.dir4==0 and @double!=0) or (Graphics.frame_count==@compteur and @debut_double!=0)
@double=0
@debut_double=0
end
if Input.trigger?(Input.dir4) and @double==0
if @debut_double == Input.dir4
@double=Input.dir4
@debut_double=0
else
@debut_double=Input.dir4
@compteur=Graphics.frame_count+16
end
end
end
end
#----------------------------------------------------
# SOURIS
# Gere la souris a l'ecran
#----------------------------------------------------
class Mouse
attr_accessor :sprite
attr_accessor
attr_accessor :y
attr_accessor :gauche
attr_accessor :droit
attr_accessor :milieu
attr_accessor :gauche_maintenu
attr_accessor :souris_icone
attr_accessor :gele
def initialize
# Sprite Souris
@sprite=Sprite.new
@souris_icone=MOUSE_SPRITE
refresh
@gele=false
@sprite.visible=false
@sprite.z=5000
@gauche=false
@droit=false
@milieu=false
@gauche_maintenu=false
@x=0
@y=0
# Recupere le Curseur
@cursor_pos = Win32API.new('user32', 'GetCursorPos', 'p', 'i')
# Recupere la taille de la fenetre
@width, @height = 640,480
# Fonction de l'API
@scr2cli = Win32API.new('user32', 'ScreenToClient', %w(l p), 'i')
@client_rect = Win32API.new('user32', 'GetClientRect', %w(l p), 'i')
@readini = Win32API.new('kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l')
@findwindow = Win32API.new('user32', 'FindWindowA', %w(p p), 'l')
# Recupere la fenetre de jeu
@hwnd=hwnd
# Rend la souris invisible
@cursor = Win32API.new("user32", "ShowCursor", "i", "i" )
@cursor.call(0)
end
#--------------------------------------------------------------------------
# POSITION SOURIS HORS JEU
#--------------------------------------------------------------------------
def souris_hors_jeu
pos = [0, 0].pack('ll')
if @cursor_pos.call(pos) != 0
return pos.unpack('ll')
else
return nil
end
end
#--------------------------------------------------------------------------
# SOURIS EN JEU
# Recupere et test la posision de la souris
#--------------------------------------------------------------------------
def souris_en_jeu(catch_anywhere = false)
@x, @y = transition(*souris_hors_jeu)
width, height = @width,@height
if @x ==nil or @y== nil
return 0,0
end
if catch_anywhere or (@x >= 0 and @y >= 0)
@x = @x==nil ? 0 : @x
@y = @y==nil ? 0 : @y
return @x, @y
else
return 0,0
end
end
#--------------------------------------------------------------------------
# TRANSIITON
# Recupere la posision de la souris
#--------------------------------------------------------------------------
def transition(x, y)
return nil unless x and y
pos = [x, y].pack('ll')
if @scr2cli.call(@hwnd, pos) != 0
return pos.unpack('ll')
else
return nil
end
end
#--------------------------------------------------------------------------
# HWND
# Trouve la fenetre de jeu
#--------------------------------------------------------------------------
def hwnd
game_name = "" * 256
@readini.call('Game','Title','',game_name,255,".\Game.ini")
game_name.delete!("")
return @findwindow.call('RGSS Player',game_name)
end
#--------------------------------------------------------------------------
# CLIENT SIZE
# Determine la taille de la fenetre
#--------------------------------------------------------------------------
def client_size
rect = [0, 0, 0, 0].pack('l4')
@client_rect.call(@hwnd, rect)
right, bottom = rect.unpack('l4')[2..3]
return right, bottom
end
#--------------------------------------------------------------------------
# SUR MAP
# bouleen pur savoir si la souris est sur la MAP
#--------------------------------------------------------------------------
def sur_map
return (@x<640 and @y<480)
end
#--------------------------------------------------------------------------
# REFRESH
# Rafraichit l apparence de la souris
#--------------------------------------------------------------------------
def refresh
@sprite.bitmap.dispose if @sprite.bitmap != nil
@sprite.bitmap=RPG::Cache.icon(@souris_icone)
end
#--------------------------------------------------------------------------
# UPDATE
# Affichage de la souris
#--------------------------------------------------------------------------
def update
souris_en_jeu if not @gele
@sprite.x=@x
@sprite.y=@y
end
#--------------------------------------------------------------------------
# TEST
# Renvoi True si la souris est sur les positions x y
#--------------------------------------------------------------------------
def position(x,y)
# Remplace les variables par leur contenu
# Execute le test de position
a=@x+$game_map.display_x/4
b=@y+$game_map.display_y/4
x*=32
y*=32
return (a-16