Some Popup
Versione 2.8
Descrizione
Con questo script potrete specificare del testo in un evento che verrà mostrato quando il giocatore si avvicina. Sono disponibili diversi effetti di comparsa ed è possibile utilizzare picture anziché testo. Il testo può essere mostrato, oltre che sul giocatore, anche agganciato all'evento, per scomparire quando questo si allontana. È possibile riprodurre un suono SE, ME, BGM e BGS, sia generico che personalizzato per evento.
Autore
mikb89
Allegati
Demo multilingua v. 2.8 (800.43 KB)
http://www.mediafire...mmg50jxofjq9jtl
Istruzioni per l'uso
Inserite lo script sotto Materials. Le istruzioni sono fra i commenti.
Script
# Some Popup v 2.8 # XP version # by mikb89 # Dettagli: # Mostra del testo in popup quando vicino a un evento. # Il testo può essere piazzato al centro dello schermo, sul giocatore o # sull'evento. # Scrivi [pop] in un commento per assegnare il popup e scrivi nel commento # successivo il testo che verrà mostrato. # NOTA: [pop] è di default, ma puoi cambiarlo dalle configurazioni. # Il testo può essere anche ingrigito, per indicare qualcosa non disponibile. # Per far questo, scrivi [npop] invece di [pop]. # Puoi anche mostrare una Picture anziché testo. Per far ciò, il primo # commento deve essere [ppop] e il secondo conterrà il nome della Picture. # È possibile riprodurre suoni/musica per ogni evento. Scrivi in un terzo # commento queste linee: # SE (o ME o BGM o BGS) # Nome del file audio # Volume (1-100) # Pitch (50-150) # Puoi omettere le ultime due e saranno impostate di default: # Volume 80 per BGS e SE, 100 per BGM e ME # Pitch 100 # ATTENZIONE: i commenti devono essere i primi due (o tre) comandi dell'evento. # # Puoi anche chiamare uno script con: # $game_player.remove_town_sprite # scritto per togliere il popup. Ad esempio se metti il popup su un evento # con cui parlerai. # Configurazioni: module SPOP ID = "pop" # Metti "loc" per compatibilità con vecchie versioni. # Cosa scrivere per identificare l'evento con del popup. # Se il valore è ad esempio "pop" dovrai scrivere: # - [pop] per il tipico popup; # - [npop] per il popup ingrigito; # - [ppop] per il popup con Picture. AUTO_REMOVE_AT_TRANSFER = true # Testa per capire cosa intendo. # true - stesso effetto delle città in Chrono Trigger. # false - il popup rimarrà al trasporto. Se ne andrà al primo movimento. GRAYED_COLOR = Color.new(255,245,255,175) # Valore del colore grigio. Rosso, verde, blu, alpha. Da 0 a 255. WALK_8_DIR = true # Non devi aggiungere lo script per le 8 direzioni. Metti true qui. POPUP_TRANSITION = 9 # Effetti di s/comparsa del popup. # 0: nessun effetto # 1: dissolvenza # 2: movimento su/giù # 3: movimento & dissolvenza # 4: movimento ridotto # 5: movimento ridotto & dissolvenza # 6: zoom in/out # 7: zoom & dissolvenza # 8: zoom & movimento # 9: zoom, movimento, dissolvenza # 10: zoom & movimento ridotto # 11: zoom, movimento ridotto, dissolvenza POPUP_SOUND = ["SE", "046-Book01", 80, 100] # Cosa riprodurre al popup. # 4 parametri: # 1. Tipo di suono ("SE", "ME", "BGS", "BGM"); # 2. Nome del file; # 3. Volume (0-100); # 4. Pitch (50-150 (o 15-453 se vuoi i MASSIMI valori)). # Per disattivare metti "" al 2. O metti 0 al 3. Esempi: # POPUP_SOUND = ["SE", "", 80, 100] # POPUP_SOUND = ["SE", "046-Book01", 0, 100] # Non saranno riprodotti. # Eventuali BGM o BGS in riproduzione dissolveranno insieme alla grafica # e poi ripartiranno. Non valido se usi SE/ME. # Esempi con ME, BGM, BGS: # POPUP_SOUND = ["ME", "010-Item01", 100, 100] # POPUP_SOUND = ["BGM", "023-Town01", 100, 100] # POPUP_SOUND = ["BGS", "016-Drips01", 100, 100] POPUP_BINDING = 2 # Dove deve essere agganciato il popup. # 0: centro dello schermo # 1: sul giocatore # 2: sugli eventi end # Altro: # Vedrai 'town' (città) ovunque nello script. Questo perché il SECONDO nome # dato allo script era: "Popup town name". # Il PRIMO nome originale era "Location system", da qui il [loc] da mettere # nel commento. Comunque non ho mai pubblicato la versione con questo nome # quindi non troverai niente riguardo a questa. #Codename: spop ($imported ||= {})[:mikb89_spop] = true # Licenza: # - Puoi chiedermi di includere il supporto per altri script, a patto che usino # il $imported[script] = true; # - Puoi modificare e anche ripostare i miei script, dopo una mia risposta. Per # ripostarli, comunque, devi aver fatto pesanti modifiche o porting, non puoi # fare un post con lo script così com'è; # - Puoi usare i miei script per fare quel che vuoi, da giochi gratis a liberi # a commerciali. Apprezzerei comunque essere messo al corrente di quello che # stai creando; # - Devi creditarmi, se usi questo script o parte di esso. class Game_Player < Game_Character #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- #class Game_Player#def initialize() def initialize super @town_sprite = nil @town_text = "" reset_audio @town_ex_audio = [nil, ""] @sync_event = nil end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- #class Game_Player#def update() <- rewritten def update # Remember whether or not moving in local variables last_moving = moving? # If moving, event running, move route forcing, and message window # display are all not occurring unless moving? or $game_system.map_interpreter.running? or @move_route_forcing or $game_temp.message_window_showing # Move player in the direction the directional button is being pressed move_by_input # Edited from the original end # Remember coordinates in local variables last_real_x = @real_x last_real_y = @real_y super # Some Popup addition START update_town_sprite # Some Popup addition END # If character moves down and is positioned lower than the center # of the screen if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y # Scroll map down $game_map.scroll_down(@real_y - last_real_y) end # If character moves left and is positioned more let on-screen than # center if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X # Scroll map left $game_map.scroll_left(last_real_x - @real_x) end # If character moves right and is positioned more right on-screen than # center if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X # Scroll map right $game_map.scroll_right(@real_x - last_real_x) end # If character moves up and is positioned higher than the center # of the screen if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y # Scroll map up $game_map.scroll_up(last_real_y - @real_y) end # If not moving unless moving? # If player was moving last time if last_moving # Event determinant is via touch of same position event result = check_event_trigger_here([1,2]) # If event which started does not exist if result == false # Disregard if debug mode is ON and ctrl key was pressed unless $DEBUG and Input.press?(Input::CTRL) # Encounter countdown if @encounter_count > 0 @encounter_count -= 1 end end end end # If C button was pressed if Input.trigger?(Input::C) # Same position and front event determinant check_event_trigger_here([0]) check_event_trigger_there([0,1,2]) end end end #-------------------------------------------------------------------------- # * Part of the update #-------------------------------------------------------------------------- #class Game_Player#def update_town_sprite() def update_town_sprite if @town_sprite != nil case SPOP::POPUP_BINDING when 1 @town_sprite.x = screen_x if @town_sprite.y != screen_y && screen_y != @sync_y @town_sprite.y = screen_y - (@town_sprite.y - @sync_y).abs @sync_y = screen_y end when 2 if @sync_event != nil @town_sprite.x = @sync_event.screen_x if @town_sprite.y != @sync_event.screen_y && @sync_event.screen_y != @sync_y @town_sprite.y = @sync_event.screen_y - (@town_sprite.y - @sync_y).abs @sync_y = @sync_event.screen_y end sx = @sync_event.x - @x sy = @sync_event.y - @y remove_town_sprite if Math.hypot(sx, sy) > 2 end end rem = false @town_sprite.update if [1,3,5,7,9,11].include?(SPOP::POPUP_TRANSITION) @town_sprite.opacity -= 15 if @town_sprite.z == 5 && @town_sprite.opacity > 0 @town_sprite.opacity += 15 if @town_sprite.z == 10 && @town_sprite.opacity < 255 rem = true if @town_sprite.opacity <= 0 end if [2,3,4,5,8,9,10,11].include?(SPOP::POPUP_TRANSITION) mov = [4,5,10,11].include?(SPOP::POPUP_TRANSITION) ? 32 : 64 val = mov/16 t = @town_sprite.y @town_sprite.y += val if @town_sprite.z == 5 && @toadd > -mov @town_sprite.y -= val if @town_sprite.z == 10 && @toadd > 0 @toadd -= val if t != @town_sprite.y rem = true if @toadd <= -mov end if [6,7,8,9,10,11].include?(SPOP::POPUP_TRANSITION) if @town_sprite.z == 5 && @town_sprite.zoom_x > 0 @town_sprite.zoom_x -= 0.25 @town_sprite.zoom_y -= 0.25 end if @town_sprite.z == 10 && @town_sprite.zoom_x < 1 @town_sprite.zoom_x += 0.25 @town_sprite.zoom_y += 0.25 end rem = true if @town_sprite.zoom_x <= 0 end if @town_ex_audio[0] != nil if @audiowait > 0 @audiowait -= 1 elsif @audiowait == 0 if @town_audio[0] != nil $game_system.method("#{@town_audio[1]}_play").call(@town_audio[0]) if @town_ex_audio[1] != @town_audio[1] $game_system.method("#{@town_ex_audio[1]}_play").call(@town_ex_audio[0]) @town_ex_audio = [nil, ""] end reset_audio if @town_audio[0].name != SPOP::POPUP_SOUND[1] end @audiowait = -1 end end remove_town_sprite(true) if rem end end #-------------------------------------------------------------------------- # * Popup removal at straighten (scene change) #-------------------------------------------------------------------------- if method_defined?(:straighten) alias_method(:straighten_b4_spop, :straighten) unless method_defined?(:straighten_b4_spop) end #class Game_Player#def straighten() <- aliased/added def straighten remove_town_sprite(true) if respond_to?(:straighten_b4_spop) straighten_b4_spop else super end end #-------------------------------------------------------------------------- # * Player has moved? #-------------------------------------------------------------------------- alias_method(:increase_steps_b4_spop, :increase_steps) unless method_defined?(:increase_steps_b4_spop) #class Game_Player#def increase_steps() <- aliased def increase_steps increase_steps_b4_spop @move_failed = false end #-------------------------------------------------------------------------- # * Processing of Movement via input from the Directional Buttons #-------------------------------------------------------------------------- #class Game_Player#def move_by_input() def move_by_input x, y = self.x, self.y @move_failed = true case SPOP::WALK_8_DIR ? Input.dir8 : Input.dir4 when 1 move_lower_left if @move_failed check_town(x-1, y+1) else check_town(x-2, y+2) end when 2 move_down if @move_failed check_town(x, y+1) else check_town(x, y+2) end when 3 move_lower_right if @move_failed check_town(x+1, y+1) else check_town(x+2, y+2) end when 4 move_left if @move_failed check_town(x-1, y) else check_town(x-2, y) end when 6 move_right if @move_failed check_town(x+1, y) else check_town(x+2, y) end when 7 move_upper_left if @move_failed check_town(x-1, y-1) else check_town(x-2, y-2) end when 8 move_up if @move_failed check_town(x, y-1) else check_town(x, y-2) end when 9 move_upper_right if @move_failed check_town(x+1, y-1) else check_town(x+2, y-2) end end end #-------------------------------------------------------------------------- # * Operations for sprite removal and audio stopping #-------------------------------------------------------------------------- #class Game_Player#def remove_town_sprite(instant, audio) def remove_town_sprite(instant=false, audio=true) if @town_sprite != nil if instant || SPOP::POPUP_TRANSITION == 0 if audio $game_system.method("#{@town_audio[1]}_stop").call if @town_audio[1] != "" $game_system.method("#{@town_ex_audio[1]}_play").call(@town_ex_audio[0]) if @town_ex_audio[1] != "" end @town_ex_audio = [nil, ""] @town_sprite.dispose @town_sprite = nil @sync_event = nil else @town_sprite.z = 5 unless ["se", "me", ""].include?(@town_audio[1]) $game_system.method("#{@town_audio[1]}_fade").call(4) end end end end #-------------------------------------------------------------------------- # * Set the audio as the one specified in SPOP or passed #-------------------------------------------------------------------------- #class Game_Player#def reset_audio(spn) def reset_audio(spn = SPOP::POPUP_SOUND) @town_audio = [(spn[1] == "" || spn[2] <= 0) ? nil : RPG::AudioFile.new(spn[1], spn[2], spn[3]), spn[0].downcase] end #-------------------------------------------------------------------------- # * Check if there is a town event in front of the player #-------------------------------------------------------------------------- #class Game_Player#def check_town(x, y) def check_town(x, y) return false if $game_system.map_interpreter.running? result = false for event in $game_map.events_xy(x, y) unless [1,2].include?(event.trigger) and event.priority_type == 1 if event.list != nil if event.list[0].code == 108 and ["[#{SPOP::ID}]", "[n#{SPOP::ID}]", "[p#{SPOP::ID}]"].include?(event.list[0].parameters[0]) result = true next if @town_sprite != nil && @town_sprite.z == 10 && @town_text == event.list[1].parameters[0] remove_town_sprite(true) @town_sprite = Sprite.new @town_sprite.z = 10 if [6,7,8,9,10,11].include?(SPOP::POPUP_TRANSITION) @town_sprite.zoom_x = @town_sprite.zoom_y = 0.0 end @town_sprite.opacity = 15 if [1,3,5,7,9,11].include?(SPOP::POPUP_TRANSITION) if event.list[0].parameters[0] != "[p#{SPOP::ID}]" @town_sprite.bitmap ||= Bitmap.new(1,1) siz = @town_sprite.bitmap.text_size(event.list[1].parameters[0]) h = siz.height s = siz.width @town_sprite.bitmap.dispose @town_sprite.bitmap = Bitmap.new(s, 24) if event.list[0].parameters[0] == "[n#{SPOP::ID}]" ex = @town_sprite.bitmap.font.color @town_sprite.bitmap.font.color = SPOP::GRAYED_COLOR end @town_sprite.bitmap.draw_text(0,2,s,22,event.list[1].parameters[0],1) @town_sprite.bitmap.font.color = ex if event.list[0].parameters[0] == "[n#{SPOP::ID}]" else @town_sprite.bitmap = Cache.picture(event.list[1].parameters[0]) s = @town_sprite.bitmap.width h = @town_sprite.bitmap.height end @town_text = event.list[1].parameters[0] @town_sprite.ox = s/2 @town_sprite.oy = h/2 case SPOP::POPUP_BINDING when 1 @town_sprite.x = screen_x#*32+16 @town_sprite.y = @sync_y = screen_y#*32+16 when 2 @town_sprite.x = event.screen_x#*32+16 @town_sprite.y = @sync_y = event.screen_y#*32+16 @sync_event = event else @town_sprite.x = 544/2# - s/2 @town_sprite.y = 416/2# - h/2 end @town_sprite.y -= 64 if [0,1,6,7].include?(SPOP::POPUP_TRANSITION) @town_sprite.y -= 32 if [4,5,10,11].include?(SPOP::POPUP_TRANSITION) @toadd = [2,3,4,5,8,9,10,11].include?(SPOP::POPUP_TRANSITION) ? 64 : 0 @toadd -= 32 if [4,5,10,11].include?(SPOP::POPUP_TRANSITION) if @town_audio[0] != nil || event.list[2].code == 108 if ["BGM", "ME", "BGS", "SE"].include?(event.list[2].parameters[0]) && event.list[3].code == 408 arr = [] arr.push(event.list[2].parameters[0]) arr.push(event.list[3].parameters[0]) if event.list[4].code == 408 arr.push(event.list[4].parameters[0].to_i) arr.push(event.list[5].parameters[0].to_i) if event.list[5].code == 408 else arr.push(["BGS", "SE"].include?(event.list[2].parameters[0]) ? 80 : 100) end arr.push(100) if arr.size < 4 reset_audio(arr) end if ["bgm", "bgs"].include?(@town_audio[1]) @town_ex_audio = [$game_system.method("playing_#{@town_audio[1]}").call, @town_audio[1]] else @town_ex_audio[0] = nil end if @town_ex_audio[0] != nil $game_system.method("#{@town_ex_audio[1]}_fade").call(4) @audiowait = 4 else $game_system.method("#{@town_audio[1]}_play").call(@town_audio[0]) reset_audio if arr != nil end end end end end end remove_town_sprite unless result return result end end if SPOP::AUTO_REMOVE_AT_TRANSFER class Scene_Map #-------------------------------------------------------------------------- # * Removing of town sprite when changing map #-------------------------------------------------------------------------- alias_method(:transfer_player_b4_spop, :transfer_player) unless method_defined?(:transfer_player_b4_spop) #class Scene_Map#def transfer_player() <- aliased def transfer_player $game_player.remove_town_sprite(true, false) transfer_player_b4_spop end end end class Game_Map #-------------------------------------------------------------------------- # * Get event list in x, y #-------------------------------------------------------------------------- #class Game_Map#def events_xy(x, y) unless method_defined?(:events_xy) def events_xy(x, y) result = [] for event in $game_map.events.values result.push(event) if event.x == x and event.y == y end return result end end end
Visibile anche su Pastebin.
Bugs e Conflitti Noti
Sovrascrive lo script per la camminata in 8 direzioni. O viene sovrascritto, a seconda. Per ovviare, questo script è stato incorporato ed è attivabile/disattivabile tramite opzione.
Altri Dettagli
Ringrazio Unamuno per aver chiesto la versione VX altrimenti non l'avrei postata né convertita e Guardian of Irael per avermi suggerito molti miglioramenti.
Modificato da Apo, 14 March 2013 - 22:11 PM.
applicato tag code