sorcioni Posted March 23, 2010 Share Posted March 23, 2010 Ho trovato su un sito postato qui sul forum uno script che credo possa risolvere i miei problemi :D Lo posto sotto spoiler#------------------------------------------------------------------------# MouseOver Version 1.3# RPG Maker VX## Auteur : Samarium## Créé le 12 Février 2008### Fonction : Permet d'afficher une fenêtre contenant un texte sur# un ou des évènement(s) lors du passage de la souris# sur ce dernier## Utilisation : Très facile ! Faites un commentaire commençant par [M]# suivit du texte dans l'/les évènement(s) de votre choix.# Allez vers la ligne 45 pour changer certaines propriétés.## Site : www.rpgcreative.net## Remarque : Script disponible aussi sous RPG Maker XP##------- Modification ---------# Modifié le 27/03/08# - Correction des incompatiblités (Remerciement à Siegfried pour quelques éclairements)# - Correction d'un bug : Affichage selon le déplacement de l'évènement# - Correction d'un bug : Affichage lorsqu'il y a un changement de map## Modifié le 13/02/08# - Position de la fenêtre fixe (sur l'évènement) ou mobile (sur la souris)# - Possibilité de mettre un son# - Fonctionnalité de \N[x] et \V[x]## Modifié le 12/02/08# - Correction d'un bug : Affichage de la fenêtre pour tous les évènements# - Correction d'un bug : Commentaire sans message commençant par [M]# - Optimation de la vitesse d'éxécution du script# - Fusionnement de la modification du script Scene_Map avec ce script#------------------------------------------------------------------------ def defaut return "Window"end # ------------------ A définir ------------------- FONT_SIZE = 16 # La taille du texteFONT_FACE = "Arial" # Police du texteWINDOWSKIN = defaut # Le nom du Windoskin. Mettez "defaut" (sans les guillemets) pour afficher le Windowskins par défaut. # Mettez la couleur RGB du texte. Mettez 0 pour tous pour la couleur noire et 255 pour la couleur blancheCOLOR_RED = 255 COLOR_BLUE = 255COLOR_GREEN = 255 OPACITY = 160 # Opacité de la fenêtreSON = false # Le nom du fichier son. Mettez "false" (sans les guillemets) pour ne pas mettre de sonFIX = true # "true" pour fixer la fenêtre sur l'évènement et "false" pour la rendre mobile : fenêtre suit la souris# ------------------------------------------------ #---------------------------------------------------------------------# Game_Search_Event# # Permet, dès le départ, chercher tout les évènements ayant un # commentaire commençant par [M] et de les enregistrer dans un # tableau (ID de l'évènement et message)#---------------------------------------------------------------------class Game_Search_Event def initialize # initialisation des variables @element_event = {} @map = load_data(sprintf("Data/Map%03d.rvdata", $game_map.map_id)) @nb_event = @map.events.size @tab_event = @map.events.values # Retourne les valeurs du Hash dans un tableau main end def main for i in 0..@nb_event - 1 # Prend le contenu de la page de chaques évènements event = @tab_event pages = event.pages for page in event.pages # Prend la liste et le code de la commande d'évènement list = page.list code = cod(list) # Si le code est celui que l'on veut if code[0] event_id = event.id message = code[1] # Ajoute dans un Hash, l'ID et le message de l'évènement @element_event[event_id] = message end end $search_finish = $game_map.map_id end end def element_event_id return @element_event.keys # Array end def element_event_message(event) return @element_event[event] # String end def element_event_size return @element_event.size # Integer end def cod(list) # initialisation des variables for index in 0...list.size parameters = list[index].parameters # Si la commande est un commentaire et commence par [M] if list[index].code == 108 and commentaire(parameters[0]) message_text = parameters[0] + "\n" # Ajoute aux messages les lignes suivantes for line_count in 1..5 if list[line_count] != nil if list[index + line_count].code == 408 message_text += text_sub(list[index + line_count].parameters[0]) + "\n" end end end return true, message_text end end return false, false end def commentaire(text) # Cherche le [M] et l'efface text.gsub!(/[\[Mm]\]/) { "\001" } while ((c = text.slice!(/./m)) != nil) if c == "\001" text.sub!(/[\[Mm]\]/, "") text_sub(text) return true end end return false end # Remplace \N[x] par le nom du héros d'ID x et \V[x] par la variable x def text_sub(text) begin last_text = text.clone text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] } end until text == last_text text.gsub!(/\\[Nn]\[([0-9]+)\]/) do $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "" end return text end end #---------------------------------------------------------------------# Mouse# # Reprise du module Mouse créé par Cybersam et édité par Astro_mech# Calcule et retourne la position X et Y de la souris sur l'écran##--------------------------------------------------------------------- module Mouse gsm = Win32API.new('user32', 'GetSystemMetrics', 'i', 'i') @cursor_pos = Win32API.new('user32', 'GetCursorPos', 'p', 'i') module_function def mouse_global_pos pos = [0, 0].pack('ll') if @cursor_pos.call(pos) != 0 return pos.unpack('ll') else return nil end end def mouse_pos(catch_anywhere = false) x, y = screen_to_client(*mouse_global_pos) width, height = client_size # if catch_anywhere or (x >= 0 and y >= 0 and x < width and y < height) return x, y # else # return $m.x, $m.y # end end def del if @oldcursor == nil return else @SetClassLong.call(handel ,-12, @oldcursor) @oldcursor = nil end end end $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') def screen_to_client(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 endend def hwnd game_name = "\0" * 256 $readini.call('Game','Title','',game_name,255,".\\Game.ini") game_name.delete!("\0") return $findwindow.call('RGSS Player',game_name)end def client_size rect = [0, 0, 0, 0].pack('l4') $client_rect.call(hwnd, rect) right, bottom = rect.unpack('l4')[2..3] return right, bottomend #---------------------------------------------------------------------# Game_Pos_Screen_Event# # Calcul la position de l'évènement non par rapport à la carte# mais selon l'écran. #--------------------------------------------------------------------- class Game_Pos_Screen_Event def initialize # Initialisation @x = @y = @real_x = @real_y = 0 @map = load_data(sprintf("Data/Map%03d.rvdata", $game_map.map_id)) end def calcul_pos_event(event_id = 1) # Prend la position de l'évènement event = $game_map.events[event_id] pos_x_event = event.x pos_y_event = event.y # Calcule la position relative à l'écran @x = pos_x_event % @map.width @y = pos_y_event % @map.height @real_x = @x * 256 @real_y = @y * 256 end def screen_x return ($game_map.adjust_x(@real_x) + 8007) / 8 - 1000 + 16 end def screen_y return ($game_map.adjust_y(@real_y) + 8007) / 8 - 1000 + 32 end end #---------------------------------------------------------------------# Game_Pos_Screen_Mouse# # Retourne les positions de la souris grâce au module Mouse#--------------------------------------------------------------------- class Game_Pos_Screen_Mouse def initialize @pos_x_mouse = @pos_y_mouse = 0 end def screen_x return @pos_x_mouse = Mouse.mouse_pos[0] end def screen_y return @pos_y_mouse = Mouse.mouse_pos[1] end end #---------------------------------------------------------------------# Window_MouseOver# # Affichage de la fenêtre MouseOver. Calcule la taille de la feêtre# selon la taille du texte.#--------------------------------------------------------------------- class Window_MouseOver < Window_Base def initialize super(0, 0, 64, 64) @height = @width = 64 end def refresh(text) # initialisation x = y = lign_size = max_size = 0 self.contents = Bitmap.new(@width - 32, @height - 32) self.contents.font.name = FONT_FACE self.contents.font.size = FONT_SIZE self.windowskin = Cache.system(WINDOWSKIN) self.contents.font.color = Color.new(COLOR_RED,COLOR_BLUE, COLOR_GREEN, 255) self.opacity = OPACITY self.contents.clear ctab = text.scan(/./m) for i in 0..ctab.size - 1 if ctab == "\n" # Prend la ligne la plus grande (pour la taille de la fenêtre) if lign_size > max_size max_size = lign_size end lign_size = x = 0 y += 1 next end lign_size += self.contents.text_size(ctab).width taille_height = self.contents.text_size(ctab).height # Affichage du texte self.contents.draw_text(x, taille_height * y, 20, 20, ctab) x += self.contents.text_size(ctab).width end # Calcule de la taille de la fenêtre @height = self.height = taille_height * y + 32 @width = self.width = max_size + 32 # Affichage si la taille du contenu de la Bitmap (- 32px) est égal à la taille de la fenêtre if self.contents.width == @width - 32 and self.contents.height == @height - 32 self.visible = true else self.visible = false end end def width_window return self.width end def height_window return self.height end end #---------------------------------------------------------------------# Scene_Map# # Reprise du scritp Scene_Map avec des parties rajoutées# Affiche la fenêtre sur la carte. #--------------------------------------------------------------------- class Scene_Map # Définition des alias pour la classe Scene_Map alias new_start start alias new_update update alias new_terminate terminate alias new_fadein fadein def start $search_finish = 0 @map = load_data(sprintf("Data/Map%03d.rvdata", $game_map.map_id)) @mouseover_window = Window_MouseOver.new @mouseover_window.visible = false @event_memoire = 0 new_start end def terminate @mouseover_window.dispose new_terminate end def fadein(duration) @mouseover_window.visible = false new_fadein(duration) end def update @mouseover_window.update # Cherche les évènements commentés commençant par [M] if $search_finish != $game_map.map_id # Cette condition permet de chercher seulement une fois les évènements par map $game_search_event = Game_Search_Event.new @event_tab = $game_search_event.element_event_id end # Positions X et Y de la souris sur l'écran $game_pos_screen_mouse = Game_Pos_Screen_Mouse.new mouse_x = $game_pos_screen_mouse.screen_x mouse_y = $game_pos_screen_mouse.screen_y # Positions X et Y des évènements sur l'écran $game_pos_screen_event = Game_Pos_Screen_Event.new element_event_size = $game_search_event.element_event_size # Parcours le tableau contenant les évènements à afficher for i in 0..element_event_size - 1 event = @event_tab # Calcul la position de l'évènement relative à l'écran $game_pos_screen_event.calcul_pos_event(event) event_x = $game_pos_screen_event.screen_x event_y = $game_pos_screen_event.screen_y # Si la souris est sur l'évènement (carreau de 32*32) if mouse_x != nil and mouse_y != nil # Evite de tester une position nulle de la souris if mouse_x <= (event_x + 16) and mouse_x >= (event_x - 16) if mouse_y <= (event_y) and mouse_y >= (event_y - 32) if @event_memoire != event and SON != false $game_system.se_play(SON) end # Affiche la fenêtre avec le message de l'évènement et à ses positions text = $game_search_event.element_event_message(event) if text.size != 1 @mouseover_window.refresh(text) end # Calcul la position X et Y à afficher afin d'éviter que l'écran coupe la fenêtre width_window = @mouseover_window.width_window height_window = @mouseover_window.height_window if FIX if (width_window + event_x) > 544 @mouseover_window.x = event_x - width_window else @mouseover_window.x = event_x end if (height_window + event_y) > 416 @mouseover_window.y = event_y - height_window - 16 else @mouseover_window.y = event_y - 16 end else if (width_window + event_x) > 544 @mouseover_window.x = mouse_x - width_window else @mouseover_window.x = mouse_x end if (height_window + event_y) > 416 @mouseover_window.y = mouse_y - height_window else @mouseover_window.y = mouse_y end end # Retient en mérmoire l'ID de l'évènement @event_memoire = event # Si la souris n'est plus sur l'évènement elsif @event_memoire == event @mouseover_window.visible = false @event_memoire = 0 end elsif @event_memoire == event @mouseover_window.visible = false @event_memoire = 0 end else @mouseover_window.visible = false end end new_update endend Link to comment Share on other sites More sharing options...
0 MasterSion Posted March 23, 2010 Share Posted March 23, 2010 Non puoi provarlo e basta? Poi sei troppo vago... Quali sono i tuoi problemi? http://img256.imageshack.us/img256/7639/ihateyou.gifUn uomo senza religione è come un pesce senza bicicletta.http://img18.imageshack.us/img18/3668/decasoft1.pnghttp://rpg2s.net/gif/SCContest1Oct.gifhttp://rpg2s.net/gif/SCContest2Oct.gifhttp://rpg2s.net/gif/SCContest2Oct.gif Link to comment Share on other sites More sharing options...
0 sorcioni Posted March 23, 2010 Author Share Posted March 23, 2010 Non puoi provarlo e basta? Poi sei troppo vago... Quali sono i tuoi problemi? Il problema è che non lo capisco cioè credo che ci sia bisogno di settare qualcosa anche perché provandolo lo script nn fa nnt eppure da quello che ho capito dovrebbe permettermi di attivare eventi a distanza o roba simile Link to comment Share on other sites More sharing options...
0 fanton95 Posted March 23, 2010 Share Posted March 23, 2010 Allora lo script ti permette di mostrare un testo in una piccola finestra quando il cursore del mouse è su un determinato evento. Dovresti inserire un commento in un evento che cominci per [M] e poi il testo da mostrare. Alla linea 45 dovrebbero esserci dei comandi d configurazione epr lo script, credo grandezza del testo, della finestra, la windowskin etc... Hey io ho studiato francese in terza media quindi figurati xD però questo con un po' di intuizione è abbastanza comprensibile :P "Oh perché dobbiamo essere così, noi? – ci domandiamo talvolta allo specchio - con questa faccia, con questo corpo? – alziamo una mano, nell'incoscienza; e il gesto ci resta sospeso. Ci pare strano che l'abbiamo fatto noi. Ci vediamo vivere. […] In certi momenti di silenzio interiore, in cui l'anima nostra si spoglia di tutte le funzioni abituali, e gli occhi nostri diventano più acuti e più penetranti, noi vediamo noi stessi nella vita, e in se stessa la vita, quasi in una modalità arida, inquietante; ci sentiamo assaltare da una strana impressione, come se, in un baleno, ci si chiarisse una realtà diversa da quella che normalmente percepiamo, una realtà vivente oltre la vista umana, fuori delle forme dell'umana ragione." [L.P.] http://img43.imageshack.us/img43/4231/vgmiud3f.png http://rpg2s.net/gif/SCContest1Oct.gif http://www.rpg2s.net/img/fablecontest3rd.png http://rpg2s.net/gif/SCContest1Oct.gif RPG by forum http://img59.imageshack.us/img59/6/av2w.png Nome: Erech (In elfico "lancia solitaria", da er (ereb) = "solitario" e ech = "lancia") Età : 19 Razza: Umani Descrizione: Erech è un ragazzo alto e slanciato, dalla corporatura tonica e scattante. Ha capelli lunghi e violacei come gli occhi che però sono spesso coperti in parte da un elegante cappello nero. Veste con uno stile classico, una camicetta bianca sotto una giacca nera e un fiocco al collo ornato con un'immancabile piuma azzurra. Gli piace leggere e scrivere e ama tradurre testi in lingue antiche. Carattere: Il ragazzo ha un carattere chiuso e introverso, è di poche parole e preferisce i fatti alle parole. Non si relaziona spesso con i coetanei o se lo fa significa che si fida cecamente della persona che ha davanti; è diffidente e tende a non raccontare fatti del suo passato, belli o brutti che siano. Link to comment Share on other sites More sharing options...
0 sorcioni Posted March 23, 2010 Author Share Posted March 23, 2010 Allora lo script ti permette di mostrare un testo in una piccola finestra quando il cursore del mouse è su un determinato evento. Dovresti inserire un commento in un evento che cominci per [M] e poi il testo da mostrare. Alla linea 45 dovrebbero esserci dei comandi d configurazione epr lo script, credo grandezza del testo, della finestra, la windowskin etc... Hey io ho studiato francese in terza media quindi figurati xD però questo con un po' di intuizione è abbastanza comprensibile :P ah ok grazie mille:D Peccato però, a me serviva che faceva attivare un evento e non un testo uffaXD Link to comment Share on other sites More sharing options...
Question
sorcioni
Ho trovato su un sito postato qui sul forum uno script che credo possa risolvere i miei problemi :D
Lo posto sotto spoiler
#------------------------------------------------------------------------
# MouseOver Version 1.3
# RPG Maker VX
#
# Auteur : Samarium
#
# Créé le 12 Février 2008
#
#
# Fonction : Permet d'afficher une fenêtre contenant un texte sur
# un ou des évènement(s) lors du passage de la souris
# sur ce dernier
#
# Utilisation : Très facile ! Faites un commentaire commençant par [M]
# suivit du texte dans l'/les évènement(s) de votre choix.
# Allez vers la ligne 45 pour changer certaines propriétés.
#
# Site : www.rpgcreative.net
#
# Remarque : Script disponible aussi sous RPG Maker XP
#
#------- Modification ---------
# Modifié le 27/03/08
# - Correction des incompatiblités (Remerciement à Siegfried pour quelques éclairements)
# - Correction d'un bug : Affichage selon le déplacement de l'évènement
# - Correction d'un bug : Affichage lorsqu'il y a un changement de map
#
# Modifié le 13/02/08
# - Position de la fenêtre fixe (sur l'évènement) ou mobile (sur la souris)
# - Possibilité de mettre un son
# - Fonctionnalité de \N[x] et \V[x]
#
# Modifié le 12/02/08
# - Correction d'un bug : Affichage de la fenêtre pour tous les évènements
# - Correction d'un bug : Commentaire sans message commençant par [M]
# - Optimation de la vitesse d'éxécution du script
# - Fusionnement de la modification du script Scene_Map avec ce script
#------------------------------------------------------------------------
def defaut
return "Window"
end
# ------------------ A définir -------------------
FONT_SIZE = 16 # La taille du texte
FONT_FACE = "Arial" # Police du texte
WINDOWSKIN = defaut # Le nom du Windoskin. Mettez "defaut" (sans les guillemets) pour afficher le Windowskins par défaut.
# Mettez la couleur RGB du texte. Mettez 0 pour tous pour la couleur noire et 255 pour la couleur blanche
COLOR_RED = 255
COLOR_BLUE = 255
COLOR_GREEN = 255
OPACITY = 160 # Opacité de la fenêtre
SON = false # Le nom du fichier son. Mettez "false" (sans les guillemets) pour ne pas mettre de son
FIX = true # "true" pour fixer la fenêtre sur l'évènement et "false" pour la rendre mobile : fenêtre suit la souris
# ------------------------------------------------
#---------------------------------------------------------------------
# Game_Search_Event
#
# Permet, dès le départ, chercher tout les évènements ayant un
# commentaire commençant par [M] et de les enregistrer dans un
# tableau (ID de l'évènement et message)
#---------------------------------------------------------------------
class Game_Search_Event
def initialize
# initialisation des variables
@element_event = {}
@map = load_data(sprintf("Data/Map%03d.rvdata", $game_map.map_id))
@nb_event = @map.events.size
@tab_event = @map.events.values # Retourne les valeurs du Hash dans un tableau
main
end
def main
for i in 0..@nb_event - 1
# Prend le contenu de la page de chaques évènements
event = @tab_event
pages = event.pages
for page in event.pages
# Prend la liste et le code de la commande d'évènement
list = page.list
code = cod(list)
# Si le code est celui que l'on veut
if code[0]
event_id = event.id
message = code[1]
# Ajoute dans un Hash, l'ID et le message de l'évènement
@element_event[event_id] = message
end
end
$search_finish = $game_map.map_id
end
end
def element_event_id
return @element_event.keys # Array
end
def element_event_message(event)
return @element_event[event] # String
end
def element_event_size
return @element_event.size # Integer
end
def cod(list)
# initialisation des variables
for index in 0...list.size
parameters = list[index].parameters
# Si la commande est un commentaire et commence par [M]
if list[index].code == 108 and commentaire(parameters[0])
message_text = parameters[0] + "\n"
# Ajoute aux messages les lignes suivantes
for line_count in 1..5
if list[line_count] != nil
if list[index + line_count].code == 408
message_text += text_sub(list[index + line_count].parameters[0]) + "\n"
end
end
end
return true, message_text
end
end
return false, false
end
def commentaire(text)
# Cherche le [M] et l'efface
text.gsub!(/[\[Mm]\]/) { "\001" }
while ((c = text.slice!(/./m)) != nil)
if c == "\001"
text.sub!(/[\[Mm]\]/, "")
text_sub(text)
return true
end
end
return false
end
# Remplace \N[x] par le nom du héros d'ID x et \V[x] par la variable x
def text_sub(text)
begin
last_text = text.clone
text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
end until text == last_text
text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
$game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
end
return text
end
end
#---------------------------------------------------------------------
# Mouse
#
# Reprise du module Mouse créé par Cybersam et édité par Astro_mech
# Calcule et retourne la position X et Y de la souris sur l'écran
#
#---------------------------------------------------------------------
module Mouse
gsm = Win32API.new('user32', 'GetSystemMetrics', 'i', 'i')
@cursor_pos = Win32API.new('user32', 'GetCursorPos', 'p', 'i')
module_function
def mouse_global_pos
pos = [0, 0].pack('ll')
if @cursor_pos.call(pos) != 0
return pos.unpack('ll')
else
return nil
end
end
def mouse_pos(catch_anywhere = false)
x, y = screen_to_client(*mouse_global_pos)
width, height = client_size
# if catch_anywhere or (x >= 0 and y >= 0 and x < width and y < height)
return x, y
# else
# return $m.x, $m.y
# end
end
def del
if @oldcursor == nil
return
else
@SetClassLong.call(handel ,-12, @oldcursor)
@oldcursor = nil
end
end
end
$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')
def screen_to_client(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
def hwnd
game_name = "\0" * 256
$readini.call('Game','Title','',game_name,255,".\\Game.ini")
game_name.delete!("\0")
return $findwindow.call('RGSS Player',game_name)
end
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
#---------------------------------------------------------------------
# Game_Pos_Screen_Event
#
# Calcul la position de l'évènement non par rapport à la carte
# mais selon l'écran.
#---------------------------------------------------------------------
class Game_Pos_Screen_Event
def initialize
# Initialisation
@x = @y = @real_x = @real_y = 0
@map = load_data(sprintf("Data/Map%03d.rvdata", $game_map.map_id))
end
def calcul_pos_event(event_id = 1)
# Prend la position de l'évènement
event = $game_map.events[event_id]
pos_x_event = event.x
pos_y_event = event.y
# Calcule la position relative à l'écran
@x = pos_x_event % @map.width
@y = pos_y_event % @map.height
@real_x = @x * 256
@real_y = @y * 256
end
def screen_x
return ($game_map.adjust_x(@real_x) + 8007) / 8 - 1000 + 16
end
def screen_y
return ($game_map.adjust_y(@real_y) + 8007) / 8 - 1000 + 32
end
end
#---------------------------------------------------------------------
# Game_Pos_Screen_Mouse
#
# Retourne les positions de la souris grâce au module Mouse
#---------------------------------------------------------------------
class Game_Pos_Screen_Mouse
def initialize
@pos_x_mouse = @pos_y_mouse = 0
end
def screen_x
return @pos_x_mouse = Mouse.mouse_pos[0]
end
def screen_y
return @pos_y_mouse = Mouse.mouse_pos[1]
end
end
#---------------------------------------------------------------------
# Window_MouseOver
#
# Affichage de la fenêtre MouseOver. Calcule la taille de la feêtre
# selon la taille du texte.
#---------------------------------------------------------------------
class Window_MouseOver < Window_Base
def initialize
super(0, 0, 64, 64)
@height = @width = 64
end
def refresh(text)
# initialisation
x = y = lign_size = max_size = 0
self.contents = Bitmap.new(@width - 32, @height - 32)
self.contents.font.name = FONT_FACE
self.contents.font.size = FONT_SIZE
self.windowskin = Cache.system(WINDOWSKIN)
self.contents.font.color = Color.new(COLOR_RED,COLOR_BLUE, COLOR_GREEN, 255)
self.opacity = OPACITY
self.contents.clear
ctab = text.scan(/./m)
for i in 0..ctab.size - 1
if ctab == "\n"
# Prend la ligne la plus grande (pour la taille de la fenêtre)
if lign_size > max_size
max_size = lign_size
end
lign_size = x = 0
y += 1
next
end
lign_size += self.contents.text_size(ctab).width
taille_height = self.contents.text_size(ctab).height
# Affichage du texte
self.contents.draw_text(x, taille_height * y, 20, 20, ctab)
x += self.contents.text_size(ctab).width
end
# Calcule de la taille de la fenêtre
@height = self.height = taille_height * y + 32
@width = self.width = max_size + 32
# Affichage si la taille du contenu de la Bitmap (- 32px) est égal à la taille de la fenêtre
if self.contents.width == @width - 32 and self.contents.height == @height - 32
self.visible = true
else
self.visible = false
end
end
def width_window
return self.width
end
def height_window
return self.height
end
end
#---------------------------------------------------------------------
# Scene_Map
#
# Reprise du scritp Scene_Map avec des parties rajoutées
# Affiche la fenêtre sur la carte.
#---------------------------------------------------------------------
class Scene_Map
# Définition des alias pour la classe Scene_Map
alias new_start start
alias new_update update
alias new_terminate terminate
alias new_fadein fadein
def start
$search_finish = 0
@map = load_data(sprintf("Data/Map%03d.rvdata", $game_map.map_id))
@mouseover_window = Window_MouseOver.new
@mouseover_window.visible = false
@event_memoire = 0
new_start
end
def terminate
@mouseover_window.dispose
new_terminate
end
def fadein(duration)
@mouseover_window.visible = false
new_fadein(duration)
end
def update
@mouseover_window.update
# Cherche les évènements commentés commençant par [M]
if $search_finish != $game_map.map_id # Cette condition permet de chercher seulement une fois les évènements par map
$game_search_event = Game_Search_Event.new
@event_tab = $game_search_event.element_event_id
end
# Positions X et Y de la souris sur l'écran
$game_pos_screen_mouse = Game_Pos_Screen_Mouse.new
mouse_x = $game_pos_screen_mouse.screen_x
mouse_y = $game_pos_screen_mouse.screen_y
# Positions X et Y des évènements sur l'écran
$game_pos_screen_event = Game_Pos_Screen_Event.new
element_event_size = $game_search_event.element_event_size
# Parcours le tableau contenant les évènements à afficher
for i in 0..element_event_size - 1
event = @event_tab
# Calcul la position de l'évènement relative à l'écran
$game_pos_screen_event.calcul_pos_event(event)
event_x = $game_pos_screen_event.screen_x
event_y = $game_pos_screen_event.screen_y
# Si la souris est sur l'évènement (carreau de 32*32)
if mouse_x != nil and mouse_y != nil # Evite de tester une position nulle de la souris
if mouse_x <= (event_x + 16) and mouse_x >= (event_x - 16)
if mouse_y <= (event_y) and mouse_y >= (event_y - 32)
if @event_memoire != event and SON != false
$game_system.se_play(SON)
end
# Affiche la fenêtre avec le message de l'évènement et à ses positions
text = $game_search_event.element_event_message(event)
if text.size != 1
@mouseover_window.refresh(text)
end
# Calcul la position X et Y à afficher afin d'éviter que l'écran coupe la fenêtre
width_window = @mouseover_window.width_window
height_window = @mouseover_window.height_window
if FIX
if (width_window + event_x) > 544
@mouseover_window.x = event_x - width_window
else
@mouseover_window.x = event_x
end
if (height_window + event_y) > 416
@mouseover_window.y = event_y - height_window - 16
else
@mouseover_window.y = event_y - 16
end
else
if (width_window + event_x) > 544
@mouseover_window.x = mouse_x - width_window
else
@mouseover_window.x = mouse_x
end
if (height_window + event_y) > 416
@mouseover_window.y = mouse_y - height_window
else
@mouseover_window.y = mouse_y
end
end
# Retient en mérmoire l'ID de l'évènement
@event_memoire = event
# Si la souris n'est plus sur l'évènement
elsif @event_memoire == event
@mouseover_window.visible = false
@event_memoire = 0
end
elsif @event_memoire == event
@mouseover_window.visible = false
@event_memoire = 0
end
else
@mouseover_window.visible = false
end
end
new_update
end
end
Link to comment
Share on other sites
4 answers to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now