Jump to content
Rpg²S Forum
  • 0

Modifica script popup


nickk.c
 Share

Question

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

Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0
  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

Mensola dei trofei:

 

http://www.rpg2s.net/forum/uploads/monthly_08_2014/post-6-0-59989200-1408714052.gifhttp://i.imgur.com/7GriqYm.png

 

 

Creazioni varie:

 

 

hnR4pt.png

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...