| [VX] Dialogue en pointant la souris | |
|
|
Auteur | Message |
---|
dYeu retraité prématurément
Age : 29 Inscrit le : 09/02/2008 Messages : 5357
| Sujet: [VX] Dialogue en pointant la souris Ven 7 Mar 2008 - 16:29 | |
| Incompatible avec le script combats ABS Voici un superbe script qui permet de faire parler un personnage en pointant la souris dessus ! Pour faire marcher le script, placez-le au dessus de "Main", validez, puis, dans un COMMENTAIRE, écrivez en tout premier "[M]" puis votre message. Screen : - Code:
-
#------------------------------------------------------------------------ # MouseOver Version 1.1 # 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. # # Script modifié : Scene_Map # # Site : www.rpgcreative.net # # Remarque : Script disponible aussi sous RPG Maker XP # #------- Modification --------- # #------------------------------------------------------------------------
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 # ------------------------------------------------
#--------------------------------------------------------------------- # 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[i] 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 end $search_finish = $game_map.map_id 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 += 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]\]/, "") return true end end return false 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 = @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[i] == "\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[i]).width taille_height = self.contents.text_size(ctab[i]).height # Affichage du texte self.contents.draw_text(x, taille_height * y, 20, 20, ctab[i]) x += self.contents.text_size(ctab[i]).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 < Scene_Base def start super $game_map.refresh @spriteset = Spriteset_Map.new @message_window = Window_Message.new #-------- RAJOUT SCRIPT MOUSEOVER ---------- $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 #---------- FIN ---------------------------- end def terminate super if $scene.is_a?(Scene_Battle) @spriteset.dispose_characters end snapshot_for_background @spriteset.dispose @message_window.dispose #-------- RAJOUT SCRIPT MOUSEOVER ---------- @mouseover_window.dispose #---------- FIN ---------------------------- if $scene.is_a?(Scene_Battle) perform_battle_transition end end def update super $game_map.interpreter.update $game_map.update $game_player.update $game_system.update @spriteset.update @message_window.update #---------------------------------------------------- # RAJOUT SCRIPT MOUSEOVER # Ce code permet d'afficher la fenêtre lorsque # la souris se trouve su l'évènement #---------------------------------------------------- # 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[i] # 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) # 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 (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 # 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 #------------ FIN DU CODE ---------------------- unless $game_message.visible update_transfer_player update_encounter update_call_menu update_call_debug update_scene_change end end end
Dernière édition par fabY le Mer 2 Avr 2008 - 17:43, édité 3 fois |
|
| |
† Fondateur du forum †
Age : 31 Inscrit le : 09/02/2008 Messages : 1974
| Sujet: Re: [VX] Dialogue en pointant la souris Ven 7 Mar 2008 - 20:05 | |
| Oua! c' est cool comme truc! merci encore faby! |
|
| |
dYeu retraité prématurément
Age : 29 Inscrit le : 09/02/2008 Messages : 5357
| Sujet: Re: [VX] Dialogue en pointant la souris Ven 7 Mar 2008 - 22:50 | |
| Bah de rien Le copier coller c'est très pratique. Je vais me mettre au RGSS2. Pt-être que je vous fabriquerai des belles choses... Enfin je commence à peine. Aller, je poste tous les scripts sur le net ce soir. |
|
| |
Invité
| Sujet: Re: [VX] Dialogue en pointant la souris Dim 9 Mar 2008 - 19:28 | |
| |
|
| |
dYeu retraité prématurément
Age : 29 Inscrit le : 09/02/2008 Messages : 5357
| Sujet: Re: [VX] Dialogue en pointant la souris Dim 9 Mar 2008 - 19:38 | |
| yoshipartout > De rien, présente-toi dans la section "description", c'est obligatoire avant de poster autre part . J'ai remarqué un bug (et plutôt majeur) dans ce script. En faite, il marche mais qu'à moitié, au lieu de suivre son personnage, il reste sur place... Comment expliquer ... Le personnage est là : ___ |___ Quand il se déplace, il change il est là : _ |_____ Par contre, le dialogue, lui est resté là : ___ \___ Donc pour "parler" avec le personnage, il faut pointer avec la souris, à l'endroit où il était au début... Et ça pose de sérieux problèmes dans nombreuses choses.... En attendant une amélioration du script, il va falloir faire des personnages qui ne bougent pas |
|
| |
Invité
| Sujet: Re: [VX] Dialogue en pointant la souris Jeu 13 Mar 2008 - 16:30 | |
| |
|
| |
Invité
| Sujet: Re: [VX] Dialogue en pointant la souris Jeu 27 Mar 2008 - 3:31 | |
| Les messages qui bougent pas lui donnent tout le même une utilité. Il peut fort bien servir à être de le "Help Menu" quand tu pointes les portes, les coffres, les pièges et autres trucs. Ou encore un moyen marrant de chercher les passages secrets qu'on ne voit pas mais qui affichent "passage secret" quand on met le curseur dessus. Enfin, moi c'est comme ça que je vais m'en servir. |
|
| |
dYeu retraité prématurément
Age : 29 Inscrit le : 09/02/2008 Messages : 5357
| Sujet: Re: [VX] Dialogue en pointant la souris Jeu 27 Mar 2008 - 19:27 | |
| Pas con en effet ^^. Si tu pourrais te présenter ça serait pas mal . |
|
| |
Invité
| Sujet: Re: [VX] Dialogue en pointant la souris Ven 28 Mar 2008 - 7:11 | |
| merci à toi !! |
|
| |
Invité
| Sujet: Re: [VX] Dialogue en pointant la souris Dim 6 Avr 2008 - 16:54 | |
| Est-ce qu'il est possible de faire en sorte qu'on soit obligé de cliquer au lieu de simplement pointer la souris? |
|
| |
Templier Lv.15
Age : 33 Inscrit le : 19/07/2008 Messages : 1317
| Sujet: Re: [VX] Dialogue en pointant la souris Mar 22 Juil 2008 - 17:54 | |
| Bonjour !J'ai un petit problème assez embêtant. |
|
| |
Ex-Admin-Script
Age : 42 Inscrit le : 26/05/2008 Messages : 2360
| Sujet: Re: [VX] Dialogue en pointant la souris Mar 22 Juil 2008 - 18:38 | |
| Peux-tu en dire plus. Dans quel état as-tu obtenu cette fenêtre? Que contenait ton event? Qu'est-ce qui est écrit à la ligne 167? Utilise-tu le script ABS (qui est clairement indiqué comme incompatible)? |
|
| |
Mage Lv.11
Age : 29 Inscrit le : 09/04/2008 Messages : 629
| Sujet: Re: [VX] Dialogue en pointant la souris Mar 22 Juil 2008 - 18:49 | |
| Non i disent que ses le script LOCALISATION (avec le nom de la map en haut de l'ecrant) |
|
| |
Invité
| Sujet: Re: [VX] Dialogue en pointant la souris Mar 22 Juil 2008 - 19:00 | |
| Eh bien non, c'est bien le script ABS ;P |
|
| |
Templier Lv.15
Age : 33 Inscrit le : 19/07/2008 Messages : 1317
| Sujet: Re: [VX] Dialogue en pointant la souris Mer 23 Juil 2008 - 8:42 | |
| - MirainoHikari a écrit:
- Peux-tu en dire plus. Dans quel état as-tu obtenu cette fenêtre? Que contenait ton event? Qu'est-ce qui est écrit à la ligne 167? Utilise-tu le script ABS (qui est clairement indiqué comme incompatible)?
Yaoooo !La fenêtre je l'ai obtenue en allant dans la map ou il y'avait l'event L'event contient un personnage ou j'ai écrit: [M] Bonjour ! A la ligne 167 il y'a: return x, y Je n'utilise pas le script ABS. |
|
| |
Mage Lv.11
Age : 29 Inscrit le : 09/04/2008 Messages : 629
| Sujet: Re: [VX] Dialogue en pointant la souris Mer 23 Juil 2008 - 9:24 | |
| uTILISE TU localisation ,,, |
|
| |
Templier Lv.15
Age : 33 Inscrit le : 19/07/2008 Messages : 1317
| Sujet: Re: [VX] Dialogue en pointant la souris Mer 23 Juil 2008 - 10:40 | |
| Yao !
Celui ou ça marque "local" machin ? |
|
| |
Mage Lv.11
Age : 29 Inscrit le : 09/04/2008 Messages : 629
| Sujet: Re: [VX] Dialogue en pointant la souris Mer 23 Juil 2008 - 11:05 | |
| En haut a droite quand tu entre dans une map ya ecrit son nom |
|
| |
Templier Lv.15
Age : 33 Inscrit le : 19/07/2008 Messages : 1317
| Sujet: Re: [VX] Dialogue en pointant la souris Mer 23 Juil 2008 - 11:08 | |
| |
|
| |
Va-nu-pieds Lv.4
Age : 30 Inscrit le : 23/07/2008 Messages : 56
| Sujet: Problèmes Lun 28 Juil 2008 - 4:55 | |
| Moi quand je met la souris dessus, rien ne s'affiche :/ |
|
| |
Noble Lv.8
Age : 31 Inscrit le : 24/07/2008 Messages : 223
| Sujet: Re: [VX] Dialogue en pointant la souris Mar 5 Aoû 2008 - 14:41 | |
| Moi ca dit qu'il y a un erreur : Ligne 147, Mouse is not a Mudule. On dirais bien que ce n'est pas un module xD Ou sinon j'sais pas si cela à rapport avec le reste mais, j'ai déjà un sript au dessu de main. Donc peut-être que ca change un truc !? Screen. Voila merci. |
|
| |
Noble Lv.8
Age : 31 Inscrit le : 24/07/2008 Messages : 223
| Sujet: Re: [VX] Dialogue en pointant la souris Ven 8 Aoû 2008 - 13:46 | |
| --°"UP"°-- Bonjour, ceci n'est que pour rappeler que j'ai poster, car je ne sais même pas si quelqu'un a vue ce message et ça m'embête :/ Mon projet n'avance toujours pas à cause de ce "bug"... Merci de bien vouloir m'aider. |
|
| |
Vagabond Lv.5
Inscrit le : 17/07/2008 Messages : 89
| Sujet: Re: [VX] Dialogue en pointant la souris Ven 8 Aoû 2008 - 14:39 | |
| oui les deux sont incompatible? enleve le deplacement à la souris et c'est bon |
|
| |
Noble Lv.8
Age : 31 Inscrit le : 24/07/2008 Messages : 223
| Sujet: Re: [VX] Dialogue en pointant la souris Ven 8 Aoû 2008 - 14:41 | |
| Ah zut :/ Incopatible, dit Mirai' y'a pas un script pour les rendre compatible ? Me faudrait les 2 =S Merci à toi Adrezo |
|
| |
Maire Lv.9
Age : 29 Inscrit le : 28/10/2008 Messages : 336
| Sujet: Re: [VX] Dialogue en pointant la souris Mer 26 Nov 2008 - 10:57 | |
| Quel script hallucinant!Merci fabY ce script est une benediction regardez un peu l'effet produit! What else? |
|
| |
| Sujet: Re: [VX] Dialogue en pointant la souris | |
| |
|
| |
| [VX] Dialogue en pointant la souris | |
|