SHARE
TWEET

Popup System - Ace

Holy87 Aug 14th, 2013 (edited) 367 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $imported = {} if $imported == nil
  2. $imported["H87_Popup"] = true
  3. #===============================================================================
  4. # Sistema Popup di Holy87
  5. # Versione 1.1
  6. #===============================================================================
  7. # Questo script permette di mostrare in modo dinamico popup multipli per
  8. # l'acquisizione o lo smarrimento di oro e oggetti, quando si ottiene un lev-up.
  9. # Non solo, ma è possibile anche creare popup personalizzati per le più
  10. # svariate situazioni. Basta mettere semplicemente in un evento, un Chiama
  11. # Script con:
  12. # Popup.show("messaggio")
  13. # Oppure
  14. # Popup.show("Messaggio",x) dove x sta all'id dell'icona
  15. # oppure ancora
  16. # Popup.show("Messaggio",x,[R,G,B,S]) dove RGB sono le tonalità, S la saturazione.
  17. #-------------------------------------------------------------------------------
  18. # INSTALLAZIONE
  19. # Installare sotto Materials, prima del Main. Importare una immagine come barra
  20. # per i popup. Non ha importanza la grandezza, lo script adatterà il popup a
  21. # seconda delle dimesioni dell'immagine.
  22. # INFO compatibilità:
  23. # *Classe Scene_Map
  24. #  Alias: update, start, terminate
  25. # *Classe Game_Party
  26. #  Alias: gain_gold, gain_item
  27. # *Classe Game_Actor
  28. #  Sovrascrive: show_level_up
  29. #===============================================================================
  30. module H87_Popup
  31. #-------------------------------------------------------------------------------
  32. # CONFIGURAZIONE GENERALE
  33. # Configura lo script nelle opzioni generiche.
  34. #-------------------------------------------------------------------------------
  35.   #Velocità di comparsa del popup. Numeri piccoli aumentano la velocità.
  36.   Speed = 3
  37.   #-----------------------------------------------------------------------------
  38.   #Tempo in secondi, prima che il popup cominci a sparire.
  39.   PTime = 4
  40.   #-----------------------------------------------------------------------------
  41.   #Velocità di sparizione del popup una volta che scade il tempo
  42.   Fade = 4
  43.   #-----------------------------------------------------------------------------
  44.   #Coordinata Y del popup quando apparirà.
  45.   #Se viene impostato in basso allo schermo, popup consecutivi creeranno una
  46.   #pila che sale, altrimenti scenderà.
  47.   Altezza = 355
  48.   #-----------------------------------------------------------------------------
  49.   #Grafica dell'immagine dello sfondo del popup
  50.   Grafica = "BarraPopup"
  51.   #-----------------------------------------------------------------------------
  52.   #Distanza in pixel dal bordo sinistro dello schermo quando spunta il popup
  53.   Distanzax = 5
  54.   #Distanza in pixel dei popup consecutivi quando vengono messi in fila
  55.   Distanzay = 3
  56.   #-----------------------------------------------------------------------------
  57.   #Imposta lo switch che verrà usato per attivare e disattivare i popup
  58.   #automatici, nel caso tu voglia cambiare denaro e oggetti al giocatore senza
  59.   #che se ne accorga.
  60.   Switch = 2
  61. #-------------------------------------------------------------------------------
  62. # CONFIGURAZIONE SPECIFICA
  63. # Configurazione specifica di attivazione, suono e colore di ogni tipo di popup
  64. #-------------------------------------------------------------------------------
  65.   # *Configurazione Oggetti
  66.   #Seleziona il suono che verrà eseguito all'ottenimento dell'oggetto
  67.   SuonoOggetto = "Item1"
  68.   #Imposta la tonalità di colore del popup (Rosso, Verde, Blu e Saturazione)
  69.   ItemPreso= [-50,0,70,0]
  70.   #-----------------------------------------------------------------------------
  71.   # *Configura l'ottenimento del denaro
  72.   #Seleziona l'icona che verrà mostrata quando otterrai del denaro
  73.   Iconaoro = 361
  74.   #Seleziona il suono che verrà eseguito all'ottenimento del denaro
  75.   SuonoOro = "Shop"
  76.   #Mostrare il popup quando si ottiene denaro?
  77.   Mostra_OroU = true
  78.   #Mostrare il popup quando si perde denaro?
  79.   Mostra_OroD = true
  80.   #Seleziona la tonalità di colore del popup quando si ottiene denaro
  81.   GoldTone = [-50,70,0,10]
  82.   #Seleziona la tonalità di colore del popup quando si perde denaro
  83.   GoldPerso= [70,0,-50,50]
  84. #-------------------------------------------------------------------------------
  85. # FONT DI GIOCO
  86. # Configurazione del carattere
  87. #-------------------------------------------------------------------------------
  88.   #Nome del font:
  89.   FontName = Font.default_name #sostituire con "nomefont"
  90.   FontSize = Font.default_size #sostituire con un valore, ad es. 20
  91.   FontOutline = true #false se non lo vuoi
  92.   #-----------------------------------------------------------------------------
  93.   # *Configura il livello superiore (Funziona solo se selezioni Mostra Level Up)
  94.   # Mostrare il livello superiore con un popup, o con il metodo classico?
  95.   MostraLevel = true
  96.   # Mostrare i poteri appresi quando si sale di livello su mappa?
  97.   MostraPoteri = true
  98.   #Icona del livello superiore
  99.   IconaLevel = 125
  100.   #Tonalità che viene mostrata al livello superiore
  101.   LivSup      = [ 50, 50,100,0]
  102.   #Tonalità che viene mostrata per i nuovi poteri appresi
  103.   NuoveSkill  = [ 50, 50,50,0]
  104.   #Suono che viene eseguito al livello superiore
  105.   SuonoLevel = "Up1"
  106.   #Testo dell'abilità appresa
  107.   Learn = "appresa!"
  108.   #-----------------------------------------------------------------------------
  109.   # *Configura popup per switch e variabili (funziona solo in modalità Test)
  110.   #Seleziona l'icona di switch e variabili
  111.   Iconaswitch = 80
  112.   #Seleziona la tonalità di colore
  113.   SwitchTone = [0,0,0,255]
  114.   #-----------------------------------------------------------------------------
  115. #===============================================================================
  116. # FINE CONFIGURAZIONE
  117. # Modificare tutto ciò che c'è sotto può compromettere il corretto funzionamento
  118. # dello script. Agisci a tuo rischio e pericolo!
  119. #===============================================================================
  120. end
  121. #===============================================================================
  122. # Modulo Popup
  123. #===============================================================================
  124. module Popup
  125.   #-----------------------------------------------------------------------------
  126.   # * mostra il popup
  127.   #-----------------------------------------------------------------------------
  128.   def self.show(testo, icona=0, tone=nil)
  129.     SceneManager.scene.mostra_popup(testo, icona, tone) if SceneManager.scene_is?(Scene_Map)
  130.   end
  131.   #-----------------------------------------------------------------------------
  132.   # * esegue un suono
  133.   #-----------------------------------------------------------------------------
  134.   def self.esegui(suono)
  135.     RPG::SE.new(suono,80,100).play if SceneManager.scene_is?(Scene_Map)
  136.   end
  137.   #-----------------------------------------------------------------------------
  138.   # * mostra l'oro in monete
  139.   #-----------------------------------------------------------------------------
  140.   def self.gold_show(money,tone)
  141.     show(money,-1,tone)
  142.   end
  143. end
  144.  
  145. #===============================================================================
  146. # Classe Scene_Map
  147. #===============================================================================
  148. class Scene_Map < Scene_Base
  149.   include H87_Popup
  150.   #-----------------------------------------------------------------------------
  151.   # * Start
  152.   #-----------------------------------------------------------------------------
  153.   alias h87_pstart start
  154.   def start
  155.     h87_pstart
  156.     if $popups.nil?
  157.       $popups = []
  158.       $oblo = Viewport.new(0,0,Graphics.width,Graphics.height)
  159.     else
  160.       $oblo.visible = true
  161.       $oblo.z = 10
  162.     end
  163.     print $popups
  164.   end
  165.   #-----------------------------------------------------------------------------
  166.   # * Update
  167.   #-----------------------------------------------------------------------------
  168.   alias h87_pupdate update
  169.   def update
  170.     h87_pupdate
  171.     aggiorna_popups
  172.   end
  173.   #-----------------------------------------------------------------------------
  174.   # * Aggiunge un nuovo popup
  175.   #-----------------------------------------------------------------------------
  176.   def mostra_popup(testo, icona=0, tone=nil)
  177.     immagine = Sprite.new($oblo)
  178.     immagine.bitmap = Cache.picture(Grafica)
  179.     immagine.tone = Tone.new(tone[0],tone[1],tone[2],tone[3]) if tone != nil
  180.     finestra = Window_Map_Popup.new(immagine.width,testo, icona)
  181.     finestra.viewport = $oblo
  182.     finestra.opacity = 0
  183.     finestra.x = 0-finestra.width
  184.     finestra.y = Altezza
  185.     immagine.x = riposizionax(finestra,immagine)
  186.     immagine.y = riposizionay(finestra,immagine)
  187.     popup = [finestra,immagine,0,0]
  188.     sposta_popup_su #sposta sopra tutti i popup già presenti
  189.     $popups.push(popup)
  190.   end
  191.   #-----------------------------------------------------------------------------
  192.   # * Calcola la posizione dell'immagine
  193.   #-----------------------------------------------------------------------------
  194.   def riposizionax(finestra,immagine)
  195.     larg=(finestra.width-immagine.width)/2
  196.     return finestra.x+larg
  197.   end
  198.   #-----------------------------------------------------------------------------
  199.   # * Calcola la posizione dell'immagine
  200.   #-----------------------------------------------------------------------------
  201.   def riposizionay(finestra,immagine)
  202.     alt=(finestra.height-immagine.height)/2
  203.     return finestra.y+alt
  204.   end
  205.   #-----------------------------------------------------------------------------
  206.   # * Aggiornamento
  207.   #-----------------------------------------------------------------------------
  208.   def aggiorna_popups
  209.     muovi_popup
  210.     fade_popup
  211.   end
  212.   #-----------------------------------------------------------------------------
  213.   # * Muove i popup
  214.   #-----------------------------------------------------------------------------
  215.   def muovi_popup
  216.     for i in 0..$popups.size-1
  217.       break if $popups[i] == nil
  218.       barra = $popups[i]
  219.       finestra = barra[0]
  220.       next if finestra.disposed?
  221.       immagine = barra[1]
  222.       tempo    = barra[2]
  223.       prossimay= barra[3]
  224.       x = finestra.x
  225.       y = finestra.y
  226.       metax = Distanzax
  227.       if Altezza > Graphics.height/2
  228.         metay = Altezza - Distanzay - prossimay
  229.       else
  230.         metay = Altezza + Distanzay + prossimay
  231.       end
  232.       finestra.x += (metax-x)/Speed
  233.       finestra.y += (metay-y)/Speed
  234.       tempo += 1
  235.       immagine.x = riposizionax(finestra,immagine)
  236.       immagine.y = riposizionay(finestra,immagine)
  237.       if tempo > PTime*Graphics.frame_rate
  238.         finestra.contents_opacity -= Fade
  239.         immagine.opacity -= Fade
  240.       end
  241.       $popups[i] = [finestra,immagine,tempo, prossimay] #riassemblamento
  242.     end
  243.   end
  244.   #-----------------------------------------------------------------------------
  245.   # * Assegna la prossima coordinata Y
  246.   #-----------------------------------------------------------------------------
  247.   def sposta_popup_su
  248.     for i in 0..$popups.size-1
  249.       next if $popups[i][1].disposed?
  250.       $popups[i][3]+=$popups[i][1].height+Distanzay
  251.     end
  252.   end
  253.   #-----------------------------------------------------------------------------
  254.   # * Terminate
  255.   #-----------------------------------------------------------------------------
  256.   alias h87_pterminate terminate
  257.   def terminate
  258.     h87_pterminate
  259.     $oblo.visible = false
  260.   end
  261.   #-----------------------------------------------------------------------------
  262.   # *Elimina i popup non più presenti
  263.   #-----------------------------------------------------------------------------
  264.   def fade_popup
  265.     $popups.each do |popup|
  266.       next if popup.nil?
  267.       if popup[1].opacity == 0
  268.         elimina_elemento(popup)
  269.       end
  270.     end
  271.   end
  272. end #scene_map
  273.  
  274. #===============================================================================
  275. # Classe Window_Map_Popup
  276. #===============================================================================
  277. class Window_Map_Popup < Window_Base
  278.   def initialize(larghezza,testo, icona=0)
  279.     super(0,0,larghezza,48)
  280.     @testo = testo
  281.     @icona = icona
  282.     refresh
  283.   end
  284.   #-----------------------------------------------------------------------------
  285.   # * refresh della finestra
  286.   #-----------------------------------------------------------------------------
  287.   def refresh
  288.     self.contents.clear
  289.     if @icona < 0 and $imported["H87_Golds"]
  290.       show_gold_popup
  291.     else
  292.       show_text_popup
  293.     end
  294.   end
  295.   #-----------------------------------------------------------------------------
  296.   # * mostra il testo del popup
  297.   #-----------------------------------------------------------------------------
  298.   def show_text_popup
  299.     draw_icon(@icona,0,0)
  300.     @icona == 0 ? d = 0 : d = 24
  301.     self.contents.font.name = H87_Popup::FontName
  302.     self.contents.font.size = H87_Popup::FontSize
  303.     self.contents.font.outline = H87_Popup::FontOutline
  304.     text = convert_escape_characters(@testo)
  305.     text.gsub!(/\eC\[(\d+)\]/i,"")
  306.     self.contents.draw_text(d,0,self.width-(self.padding*2)-d,line_height,text)
  307.   end
  308.   #-----------------------------------------------------------------------------
  309.   # * mostra l'oro in monete
  310.   #-----------------------------------------------------------------------------
  311.   def show_gold_popup
  312.     draw_currency_value(@testo.to_i, "", 0, 0, self.width-(self.padding*2))
  313.   end
  314. end #Scene_Map
  315.  
  316. #===============================================================================
  317. # Classe Game_Party
  318. #===============================================================================
  319. class Game_Party < Game_Unit
  320.   alias ottieni_oro gain_gold unless $@
  321.   #-----------------------------------------------------------------------------
  322.   # * Ottieni Oro
  323.   #-----------------------------------------------------------------------------
  324.   def gain_gold(amount)
  325.     if $game_switches[H87_Popup::Switch] == false
  326.       if amount> 0 and H87_Popup::Mostra_OroU
  327.         if $imported["H87_Golds"]
  328.           Popup.gold_show(amount,H87_Popup::GoldTone)
  329.         else
  330.           Popup.show("+"+amount.to_s+Vocab.currency_unit,H87_Popup::Iconaoro,H87_Popup::GoldTone)
  331.         end
  332.         Popup.esegui(H87_Popup::SuonoOro)
  333.       end
  334.       if amount < 0 and H87_Popup::Mostra_OroD
  335.         if $imported["H87_Golds"]
  336.           Popup.gold_show(amount,H87_Popup::GoldPerso)
  337.         else
  338.           Popup.show(amount.to_s+Vocab.currency_unit,H87_Popup::Iconaoro,H87_Popup::GoldPerso)
  339.         end
  340.         Popup.esegui(H87_Popup::SuonoOro)
  341.       end
  342.     end
  343.     ottieni_oro(amount)
  344.   end
  345.   #-----------------------------------------------------------------------------
  346.   # * Ottieni Oggetto
  347.   #-----------------------------------------------------------------------------
  348.   alias prendi_oggetto gain_item
  349.   def gain_item(item, amount, include_equip = false)
  350.     case item
  351.     when RPG::Item
  352.       oggetto = $data_items[item.id]
  353.     when RPG::Armor
  354.       oggetto = $data_armors[item.id]
  355.     when RPG::Weapon
  356.       oggetto = $data_weapons[item.id]
  357.     end
  358.     if amount > 0 and $game_switches[H87_Popup::Switch] == false and item != nil
  359.       nome = oggetto.name
  360.       icona = oggetto.icon_index
  361.       testo = sprintf("%s x%d",nome,amount)
  362.       Popup.show(testo,icona,H87_Popup::ItemPreso)
  363.       Popup.esegui(H87_Popup::SuonoOggetto)
  364.     end
  365.     prendi_oggetto(item, amount, include_equip)
  366.   end
  367. end # Game_Party
  368.  
  369. #===============================================================================
  370. # Classe Game_Actor
  371. #===============================================================================
  372. class Game_Actor < Game_Battler
  373.   #-----------------------------------------------------------------------------
  374.   # * Mostra Lv. Up
  375.   #-----------------------------------------------------------------------------
  376.   def display_level_up(new_skills)
  377.     if SceneManager.scene_is?(Scene_Map) and H87_Popup::MostraLevel
  378.       testo = sprintf("%s %s%2d!",@name,Vocab::level,@level)
  379.       Popup.show(testo,H87_Popup::IconaLevel,H87_Popup::LivSup)
  380.       Popup.esegui(H87_Popup::SuonoLevel)
  381.       if H87_Popup::MostraPoteri
  382.         for skill in new_skills
  383.           testo = sprintf("%s %s",skill.name,H87_Popup::Learn)
  384.           Popup.show(testo,skill.icon_index,H87_Popup::NuoveSkill)
  385.         end
  386.       end
  387.     else
  388.       $game_message.new_page
  389.       $game_message.add(sprintf(Vocab::LevelUp, @name, Vocab::level, @level))
  390.       new_skills.each do |skill|
  391.         $game_message.add(sprintf(Vocab::ObtainSkill, skill.name))
  392.       end
  393.     end
  394.   end
  395.  
  396. end # Game_Actor
  397.  
  398. #===============================================================================
  399. # Classe Scene_Title
  400. #===============================================================================
  401. class Scene_Title < Scene_Base
  402.   #-----------------------------------------------------------------------------
  403.   # * eliminazione dei popup
  404.   #-----------------------------------------------------------------------------
  405.   alias h87_pop_start start unless $@
  406.   def start
  407.     unless $popups.nil?
  408.       $popups.each do |i|
  409.         elimina_elemento(i)
  410.       end
  411.       $oblo.dispose
  412.       $popups = nil
  413.       $oblo = nil
  414.     end
  415.     h87_pop_start
  416.   end
  417. end
  418.  
  419. #===============================================================================
  420. # Classe Scene_Base
  421. #===============================================================================
  422. class Scene_Base
  423.   #-----------------------------------------------------------------------------
  424.   # *Dispone finestre e picture
  425.   #-----------------------------------------------------------------------------
  426.   def elimina_elemento(i)
  427.     i[0].dispose unless i[0].disposed?
  428.     i[1].dispose unless i[1].disposed?
  429.     $popups.delete(i)
  430.   end
  431. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top