Best Answer Zoro the Gallade , 14 September 2022 - 15:53 PM
def fade_popup $popups.shift if $popups.size > 5 $popups.each do |popup| next if popup.nil? if popup[1].opacity == 0 elimina_elemento(popup) end end end
Una pezza che dovrebbe funzionare in linea teorica, sostituisci il metodo fade_popup con questo e vedi se va
Vai al post intero- Si prega di effettuare il log in prima di rispondere
#1 Inviato 12 September 2022 - 16:52 PM
Salve a tutti, sto utilizzando questo script di Holy87 che mostra dei popup quando si ottiene un oggetto
$imported = {} if $imported == nil $imported["H87_Popup"] = true #=============================================================================== # Sistema Popup di Holy87 # Versione 1.1 #=============================================================================== # Questo script permette di mostrare in modo dinamico popup multipli per # l'acquisizione o lo smarrimento di oro e oggetti, quando si ottiene un lev-up. # Non solo, ma è possibile anche creare popup personalizzati per le più # svariate situazioni. Basta mettere semplicemente in un evento, un Chiama # Script con: # Popup.show("messaggio") # Oppure # Popup.show("Messaggio",x) dove x sta all'id dell'icona # oppure ancora # Popup.show("Messaggio",x,[R,G,B,S]) dove RGB sono le tonalità, S la saturazione. #------------------------------------------------------------------------------- # INSTALLAZIONE # Installare sotto Materials, prima del Main. Importare una immagine come barra # per i popup. Non ha importanza la grandezza, lo script adatterà il popup a # seconda delle dimesioni dell'immagine. # INFO compatibilità: # *Classe Scene_Map # Alias: update, start, terminate # *Classe Game_Party # Alias: gain_gold, gain_item # *Classe Game_Actor # Sovrascrive: show_level_up #=============================================================================== module H87_Popup #------------------------------------------------------------------------------- # CONFIGURAZIONE GENERALE # Configura lo script nelle opzioni generiche. #------------------------------------------------------------------------------- #Velocità di comparsa del popup. Numeri piccoli aumentano la velocità. Speed = 3 #----------------------------------------------------------------------------- #Tempo in secondi, prima che il popup cominci a sparire. PTime = 4 #----------------------------------------------------------------------------- #Velocità di sparizione del popup una volta che scade il tempo Fade = 4 #----------------------------------------------------------------------------- #Coordinata Y del popup quando apparirà. #Se viene impostato in basso allo schermo, popup consecutivi creeranno una #pila che sale, altrimenti scenderà. Altezza = 355 #----------------------------------------------------------------------------- #Grafica dell'immagine dello sfondo del popup Grafica = "BarraPopup" #----------------------------------------------------------------------------- #Distanza in pixel dal bordo sinistro dello schermo quando spunta il popup Distanzax = 5 #Distanza in pixel dei popup consecutivi quando vengono messi in fila Distanzay = 3 #----------------------------------------------------------------------------- #Imposta lo switch che verrà usato per attivare e disattivare i popup #automatici, nel caso tu voglia cambiare denaro e oggetti al giocatore senza #che se ne accorga. Switch = 2 #------------------------------------------------------------------------------- # CONFIGURAZIONE SPECIFICA # Configurazione specifica di attivazione, suono e colore di ogni tipo di popup #------------------------------------------------------------------------------- # *Configurazione Oggetti #Seleziona il suono che verrà eseguito all'ottenimento dell'oggetto SuonoOggetto = "Item1" #Imposta la tonalità di colore del popup (Rosso, Verde, Blu e Saturazione) ItemPreso= [-50,0,70,0] #----------------------------------------------------------------------------- # *Configura l'ottenimento del denaro #Seleziona l'icona che verrà mostrata quando otterrai del denaro Iconaoro = 361 #Seleziona il suono che verrà eseguito all'ottenimento del denaro SuonoOro = "Shop" #Mostrare il popup quando si ottiene denaro? Mostra_OroU = true #Mostrare il popup quando si perde denaro? Mostra_OroD = true #Seleziona la tonalità di colore del popup quando si ottiene denaro GoldTone = [-50,70,0,10] #Seleziona la tonalità di colore del popup quando si perde denaro GoldPerso= [70,0,-50,50] #------------------------------------------------------------------------------- # FONT DI GIOCO # Configurazione del carattere #------------------------------------------------------------------------------- #Nome del font: FontName = Font.default_name #sostituire con "nomefont" FontSize = Font.default_size #sostituire con un valore, ad es. 20 FontOutline = true #false se non lo vuoi #----------------------------------------------------------------------------- # *Configura il livello superiore (Funziona solo se selezioni Mostra Level Up) # Mostrare il livello superiore con un popup, o con il metodo classico? MostraLevel = true # Mostrare i poteri appresi quando si sale di livello su mappa? MostraPoteri = true #Icona del livello superiore IconaLevel = 125 #Tonalità che viene mostrata al livello superiore LivSup = [ 50, 50,100,0] #Tonalità che viene mostrata per i nuovi poteri appresi NuoveSkill = [ 50, 50,50,0] #Suono che viene eseguito al livello superiore SuonoLevel = "Up1" #Testo dell'abilità appresa Learn = "appresa!" #----------------------------------------------------------------------------- # *Configura popup per switch e variabili (funziona solo in modalità Test) #Seleziona l'icona di switch e variabili Iconaswitch = 80 #Seleziona la tonalità di colore SwitchTone = [0,0,0,255] #----------------------------------------------------------------------------- #=============================================================================== # FINE CONFIGURAZIONE # Modificare tutto ciò che c'è sotto può compromettere il corretto funzionamento # dello script. Agisci a tuo rischio e pericolo! #=============================================================================== end #=============================================================================== # Modulo Popup #=============================================================================== module Popup #----------------------------------------------------------------------------- # * mostra il popup #----------------------------------------------------------------------------- def self.show(testo, icona=0, tone=nil) SceneManager.scene.mostra_popup(testo, icona, tone) if SceneManager.scene_is?(Scene_Map) end #----------------------------------------------------------------------------- # * esegue un suono #----------------------------------------------------------------------------- def self.esegui(suono) RPG::SE.new(suono,80,100).play if SceneManager.scene_is?(Scene_Map) end #----------------------------------------------------------------------------- # * mostra l'oro in monete #----------------------------------------------------------------------------- def self.gold_show(money,tone) show(money,-1,tone) end end #=============================================================================== # Classe Scene_Map #=============================================================================== class Scene_Map < Scene_Base include H87_Popup #----------------------------------------------------------------------------- # * Start #----------------------------------------------------------------------------- alias h87_pstart start def start h87_pstart if $popups.nil? $popups = [] $oblo = Viewport.new(0,0,Graphics.width,Graphics.height) else $oblo.visible = true $oblo.z = 10 end print $popups end #----------------------------------------------------------------------------- # * Update #----------------------------------------------------------------------------- alias h87_pupdate update def update h87_pupdate aggiorna_popups end #----------------------------------------------------------------------------- # * Aggiunge un nuovo popup #----------------------------------------------------------------------------- def mostra_popup(testo, icona=0, tone=nil) immagine = Sprite.new($oblo) immagine.bitmap = Cache.picture(Grafica) immagine.tone = Tone.new(tone[0],tone[1],tone[2],tone[3]) if tone != nil finestra = Window_Map_Popup.new(immagine.width,testo, icona) finestra.viewport = $oblo finestra.opacity = 0 finestra.x = 0-finestra.width finestra.y = Altezza immagine.x = riposizionax(finestra,immagine) immagine.y = riposizionay(finestra,immagine) popup = [finestra,immagine,0,0] sposta_popup_su #sposta sopra tutti i popup già presenti $popups.push(popup) end #----------------------------------------------------------------------------- # * Calcola la posizione dell'immagine #----------------------------------------------------------------------------- def riposizionax(finestra,immagine) larg=(finestra.width-immagine.width)/2 return finestra.x+larg end #----------------------------------------------------------------------------- # * Calcola la posizione dell'immagine #----------------------------------------------------------------------------- def riposizionay(finestra,immagine) alt=(finestra.height-immagine.height)/2 return finestra.y+alt end #----------------------------------------------------------------------------- # * Aggiornamento #----------------------------------------------------------------------------- def aggiorna_popups muovi_popup fade_popup end #----------------------------------------------------------------------------- # * Muove i popup #----------------------------------------------------------------------------- def muovi_popup for i in 0..$popups.size-1 break if $popups[i] == nil barra = $popups[i] finestra = barra[0] next if finestra.disposed? immagine = barra[1] tempo = barra[2] prossimay= barra[3] x = finestra.x y = finestra.y metax = Distanzax if Altezza > Graphics.height/2 metay = Altezza - Distanzay - prossimay else metay = Altezza + Distanzay + prossimay end finestra.x += (metax-x)/Speed finestra.y += (metay-y)/Speed tempo += 1 immagine.x = riposizionax(finestra,immagine) immagine.y = riposizionay(finestra,immagine) if tempo > PTime*Graphics.frame_rate finestra.contents_opacity -= Fade immagine.opacity -= Fade end $popups[i] = [finestra,immagine,tempo, prossimay] #riassemblamento end end #----------------------------------------------------------------------------- # * Assegna la prossima coordinata Y #----------------------------------------------------------------------------- def sposta_popup_su for i in 0..$popups.size-1 next if $popups[i][1].disposed? $popups[i][3]+=$popups[i][1].height+Distanzay end end #----------------------------------------------------------------------------- # * Terminate #----------------------------------------------------------------------------- alias h87_pterminate terminate def terminate h87_pterminate $oblo.visible = false end #----------------------------------------------------------------------------- # *Elimina i popup non più presenti #----------------------------------------------------------------------------- def fade_popup $popups.each do |popup| next if popup.nil? if popup[1].opacity == 0 elimina_elemento(popup) end end end end #scene_map #=============================================================================== # Classe Window_Map_Popup #=============================================================================== class Window_Map_Popup < Window_Base def initialize(larghezza,testo, icona=0) super(0,0,larghezza,48) @testo = testo @icona = icona refresh end #----------------------------------------------------------------------------- # * refresh della finestra #----------------------------------------------------------------------------- def refresh self.contents.clear if @icona < 0 and $imported["H87_Golds"] show_gold_popup else show_text_popup end end #----------------------------------------------------------------------------- # * mostra il testo del popup #----------------------------------------------------------------------------- def show_text_popup draw_icon(@icona,0,0) @icona == 0 ? d = 0 : d = 24 self.contents.font.name = H87_Popup::FontName self.contents.font.size = H87_Popup::FontSize self.contents.font.outline = H87_Popup::FontOutline text = convert_escape_characters(@testo) text.gsub!(/\eC\[(\d+)\]/i,"") self.contents.draw_text(d,0,self.width-(self.padding*2)-d,line_height,text) end #----------------------------------------------------------------------------- # * mostra l'oro in monete #----------------------------------------------------------------------------- def show_gold_popup draw_currency_value(@testo.to_i, "", 0, 0, self.width-(self.padding*2)) end end #Scene_Map #=============================================================================== # Classe Game_Party #=============================================================================== class Game_Party < Game_Unit alias ottieni_oro gain_gold unless $@ #----------------------------------------------------------------------------- # * Ottieni Oro #----------------------------------------------------------------------------- def gain_gold(amount) if $game_switches[H87_Popup::Switch] == false if amount> 0 and H87_Popup::Mostra_OroU if $imported["H87_Golds"] Popup.gold_show(amount,H87_Popup::GoldTone) else Popup.show("+"+amount.to_s+Vocab.currency_unit,H87_Popup::Iconaoro,H87_Popup::GoldTone) end Popup.esegui(H87_Popup::SuonoOro) end if amount < 0 and H87_Popup::Mostra_OroD if $imported["H87_Golds"] Popup.gold_show(amount,H87_Popup::GoldPerso) else Popup.show(amount.to_s+Vocab.currency_unit,H87_Popup::Iconaoro,H87_Popup::GoldPerso) end Popup.esegui(H87_Popup::SuonoOro) end end ottieni_oro(amount) end #----------------------------------------------------------------------------- # * Ottieni Oggetto #----------------------------------------------------------------------------- alias prendi_oggetto gain_item def gain_item(item, amount, include_equip = false) case item when RPG::Item oggetto = $data_items[item.id] when RPG::Armor oggetto = $data_armors[item.id] when RPG::Weapon oggetto = $data_weapons[item.id] end if amount > 0 and $game_switches[H87_Popup::Switch] == false and item != nil nome = oggetto.name icona = oggetto.icon_index testo = sprintf("%s x%d",nome,amount) Popup.show(testo,icona,H87_Popup::ItemPreso) Popup.esegui(H87_Popup::SuonoOggetto) end prendi_oggetto(item, amount, include_equip) end end # Game_Party #=============================================================================== # Classe Game_Actor #=============================================================================== class Game_Actor < Game_Battler #----------------------------------------------------------------------------- # * Mostra Lv. Up #----------------------------------------------------------------------------- def display_level_up(new_skills) if SceneManager.scene_is?(Scene_Map) and H87_Popup::MostraLevel testo = sprintf("%s %s%2d!",@name,Vocab::level,@level) Popup.show(testo,H87_Popup::IconaLevel,H87_Popup::LivSup) Popup.esegui(H87_Popup::SuonoLevel) if H87_Popup::MostraPoteri for skill in new_skills testo = sprintf("%s %s",skill.name,H87_Popup::Learn) Popup.show(testo,skill.icon_index,H87_Popup::NuoveSkill) end end else $game_message.new_page $game_message.add(sprintf(Vocab::LevelUp, @name, Vocab::level, @level)) new_skills.each do |skill| $game_message.add(sprintf(Vocab::ObtainSkill, skill.name)) end end end end # Game_Actor #=============================================================================== # Classe Scene_Title #=============================================================================== class Scene_Title < Scene_Base #----------------------------------------------------------------------------- # * eliminazione dei popup #----------------------------------------------------------------------------- alias h87_pop_start start unless $@ def start unless $popups.nil? $popups.each do |i| elimina_elemento(i) end $oblo.dispose $popups = nil $oblo = nil end h87_pop_start end end #=============================================================================== # Classe Scene_Base #=============================================================================== class Scene_Base #----------------------------------------------------------------------------- # *Dispone finestre e picture #----------------------------------------------------------------------------- def elimina_elemento(i) i[0].dispose unless i[0].disposed? i[1].dispose unless i[1].disposed? $popups.delete(i) end end
vorrei fare in modo che vengano mostrati solo 5 popup alla volta, in modo tale che poi i popup degli oggetti ottenuti meno recentemente scompaiano.
Spero di essermi spiegato bene ^^" grazie in anticipo :D
#2 Inviato 14 September 2022 - 15:53 PM
Best Answerdef fade_popup $popups.shift if $popups.size > 5 $popups.each do |popup| next if popup.nil? if popup[1].opacity == 0 elimina_elemento(popup) end end end
Una pezza che dovrebbe funzionare in linea teorica, sostituisci il metodo fade_popup con questo e vedi se va
Mensola dei trofei:
Creazioni varie: