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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...