Advertisement
Holy87

Popup System - Ace

Aug 14th, 2013
617
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 17.42 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement