SHARE
TWEET

Achievements - Ace

Holy87 Jul 16th, 2013 (edited) 634 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #===============================================================================
  2. # SISTEMA OBIETTIVI
  3. #===============================================================================
  4. # Autore: Holy87
  5. # Versione: 1.6.1
  6. # Difficoltà utente: ★★★
  7. # RICHIEDE IL MODULO UNIVERSALE, SENZA QUELLO NON FUNZIONA
  8. #
  9. # changelog v1.6
  10. # ● supporta le opzioni di gioco: aggiunge l'opzione di attivare o disattivare i
  11. #   popup quando è installato lo script delle opzioni
  12. # ● nuove condizioni di conquista degli obiettivi, tra le quali lo sblocco
  13. #   quando vengono ottenuti un certo numero di obiettivi, quando si uccidono un
  14. #   certo numero di mostri, danni totali, danni in un colpo, cure totali ecc...
  15. # ● Possibilità di impostare le condizioni di un obiettivo via script in modo
  16. #   completamente personalizzabile
  17. # ● Ottimizzazione generale del codice, ora molto più ordinato e stabile
  18. # ● Nuovo sistema di memorizzazione degli obiettivi sbloccati (i vecchi
  19. #   obiettivi già sbloccati verranno convertiti al primo avvio)
  20. # ● Il comando Obiettivi nella schermata del titolo ora è prima di Esci
  21. # ● fix per la schermata del logo
  22. # changelog v1.5
  23. # ● gli obiettivi non si attivano più durante il test battaglia
  24. # ● il popup viene mostrato correttamente durante la battaglia
  25. # changelog v1.3
  26. # ● fix crash nel test battaglia
  27. # changelog v 1.2
  28. # ● fix di alcuni bug
  29. # changelog v 1.1
  30. # ● fix di alcuni bug
  31. # ● aggiunta compatibilità al menu titolo personalizzato
  32. # ● aggiunta la possibilità di mostrare gli obiettivi dal menu di gioco
  33. # ● aggiunta la barra di progresso degli obiettivi
  34. #-------------------------------------------------------------------------------
  35. # Questo script ti permetterà di implementare obiettivi e trofei nel gioco! Ora
  36. # anche il tuo gioco può essere professionale come quelli più famosi.
  37. # Gli obiettivi sbloccati verranno automaticamente memorizzati anche se non hai
  38. # salvato la partita, e sono indipendenti dal salvataggio. Questo significa che
  39. # puoi creare obiettivi che richiedono di giocare la stessa partita più volte,
  40. # come "Finisci il gioco con il finale migliore" e "Finisci il gioco con il
  41. # finale peggiore".
  42. # Puoi impostare gli obiettivi per essere sbloccati tramite eventi nel gioco,
  43. # oppure all'attivazione di alcune switch o variabili, oppure al raggiungimento
  44. # di un certo numero di battaglie, denaro accumulato ecc..., tutto in modo
  45. # semplice e che non richiede particolari abilità nello script!
  46. # Questo script può:
  47. # ● Mostrare la lista degli obiettivi sbloccati nella schermata principale
  48. # ● mostrare un pop-up universale al raggiungimento di un determinato obiettivo
  49. # ● i pop-up sono universali, possono essere mostrati non solo in mappa, ma
  50. #   anche dal menu, in battaglia e ovunque!
  51. # ● Se più obiettivi vengono sbloccati contemporaneamente (cosa rara, ma
  52. #   possibile), lo script provvederà a mostrare i pop-up successivi appena dopo
  53. #   la scoparsa del precedente.
  54. # ● Si possono impostare gli obiettivi "nascosti"
  55. #
  56. # Guardando gli obiettivi, è possibile vedere quanto manca al loro completamento.
  57. # Nel caso vengano visti dalla schermata del titolo, vengono presi i dati dell'
  58. # ultimo salvataggio effettuato.
  59. #-------------------------------------------------------------------------------
  60. # Istruzioni:
  61. # Copiare lo script sotto Materials, prima del Main. Icone degli obiettivi,
  62. # immagine di sfondo della schermata e immagine del pop-up vanno tutti nella
  63. # cartella Graphics\Pictures.
  64. # Creare gli obiettivi nella sezione più in basso seguendo le istruzioni.
  65. # Se vuoi sbloccare un obiettivo da evento, usa un Chiama Script con questo
  66. # comando: unlock_achievement(id), dove id è l'ID dell'obiettivo.
  67. #
  68. #-------------------------------------------------------------------------------
  69. # Compatibilità:
  70. # Compatibile con tutti gli script, compreso "Menu Titolo Personalizzato".
  71. #-------------------------------------------------------------------------------
  72. # Note:
  73. # Per evitare lag, il controllo sul tempo di gioco viene effettuato
  74. # quando si cambia schermata.
  75. #-------------------------------------------------------------------------------
  76. module H87_Achievements
  77.  
  78. #===============================================================================
  79. # ** CONFIGURAZIONE **
  80. #===============================================================================
  81.   #Inserimento dell'elenco dei trofei. Inserire come da esempio:
  82.   #1 => [A,B,C,D,E,F,G,H],
  83.   #2 => [A,B,C,D,E,F,G,H],
  84.   #3 ....
  85.   #A: File immagine che rappresenta l'icona del trofeo
  86.   #B: Nome dell'obiettivo
  87.   #C: Descrizione dell'obiettivo (vai a capo con il carattere "|")
  88.   #D: Punteggio ottenuto conquistando l'obiettivo
  89.   #E: false se è visibile, true se è nascosto e visibile solo al compimento
  90.   #F: Come si sblocca
  91.   #   0: In modo manuale
  92.   #   1: All'attivazione di un preciso switch
  93.   #   2: Al valore di una precisa variabile
  94.   #   3: Denaro
  95.   #   4: Denaro totale ottenuto
  96.   #   5: Livello raggiunto con un qualsiasi eroe
  97.   #   6: Passi totali
  98.   #   7: Salvataggi
  99.   #   8: Combattimenti vinti
  100.   #   9: Fughe
  101.   #  10: Combattimenti totali
  102.   #  11: Oro speso al negozio
  103.   #  12: Oro guadagnato dalla vendita di oggetti
  104.   #  13: Tempo di gioco totale (in ore)
  105.   #  14: Numero ottenuto di uno specifico tipo di oggetto
  106.   #  15: Quando si sbloccano un certo numero di obiettivi
  107.   #  16: Quando sono stati uccisi un certo numero di nemici
  108.   #  17: Quando è stato ucciso un certo numero di un nemico specifico
  109.   #  18: Quando è stato inflitto un certo numero di danni totali
  110.   #  19: Quando è stato inflitto certo danno in un colpo solo da qualsiasi eroe
  111.   #  20: Numero di nemici uccisi in un turno
  112.   #  21: Danni in un turno
  113.   #  22: Cure ricevute in totale
  114.   #  codice: Se scrivi un codice ruby, la condizione diventa il risultato di
  115.   #  quel codice. Ad esempio: "$game_actors[1].mhp" la condizione di sblocco
  116.   #  sarà sugli HP massimi dell'eroe 1.
  117.   #G: Solo nei casi dal 2 in poi, inserire il valore da raggiungere.
  118.   #H: Nel caso di switch o variabile, inserire l'ID della
  119.   #   switch o della variabile. Nel caso 14, inserire l'ID dell'oggetto.
  120.   #   Nel caso 17, l'ID del nemico.
  121.   #---------------------------------------------------------------------------
  122.   # * Sezione Obiettivi
  123.   #---------------------------------------------------------------------------
  124.   Trophies = {
  125.   #ID         A                     B                   C                      D   E    F   G   H
  126.     1   => ["Prima missione","Inizia l'avventura!","Accetta la prima missione",10,false, 1, nil,1],
  127.     2   => ["Boss",          "Ammazzaboss",        "Sconfiggi il boss",        50,true , 0],
  128.     3   => ["Livello",       "Livello 5!",         "Raggiungi il livello 5",   20,false, 5,  5],
  129.     4   => ["Passi2",        "Maratoneta",         "Compi 200 passi",          10,false,6,200],
  130.     5   => ["Passi",         "Combattente",        "Vinci 10 combattimenti",   20,false, 8, 10],
  131.     6   => ["Soldi",         "Soldi!",             "Guadagna 20 argenti",      20,true , 4,2000],
  132.     7   => ["Scrigni",       "Trovatore",          "Apri 5 scrigni",           10,false,2, 5, 1],
  133.     8   => ["Salvataggio",   "Prudente",           "Salva il gioco 3 volte",   10,true ,7, 3],
  134.     9   => ["100danni",      "Batosta!",           "Causa almeno 100 punti danno|in un colpo",
  135.                                                                                10,false,19,100],
  136.     10  => ["999heal",       "Paziente",           "Curati di 999 punti in totale",15,false,22,999],
  137.     11  => ["Morte",         "Due in uno!",        "Sconfiggi due nemici in un turno.",10,false,20,2],
  138.     12  => ["Attacco",       "Forza bruta",        "Raggiungi attacco 60 con Eric",10,false,"$game_actors[1].atk",60],
  139.     13  => ["Boss",          "Completo!",          "Sblocca tutti gli obiettivi",20,false,15,12],
  140.     }
  141.  
  142.   #---------------------------------------------------------------------------
  143.   # * Sezione Vocaboli
  144.   #---------------------------------------------------------------------------  
  145.   # Testo del menu nella schermata del titolo
  146.   ACHVTEXT = "Obiettivi"
  147.   # Testo del nome obiettivo se nascosto
  148.   HIDDTEXT = "Obiettivo nascosto"
  149.   # Testo descrizione dell'obiettivo se nascosto (un | va a capo)
  150.   HIDDDESC = "Continua a giocare per sbloccare quest'obiettivo."
  151.   # Testo dei punteggi ottenuti dagli obiettivi sbloccati
  152.   POINTEXT = "Punteggio:"
  153.   # Testo del totale degli obiettivi sbloccati
  154.   UNLKTEXT = "Sbloccati:"
  155.   # Testo che viene mostrato se l'obiettivo è bloccato
  156.   LOCKTEXT = "Obiettivo bloccato"
  157.   #Testo che viene mostrato se l'obiettivo è stato sbloccato
  158.   DATETEXT = "Ottenuto il"
  159.   #Testo del valore dell'obiettivo
  160.   VALRTEXT = "punti"
  161.   #Testo sul pop-up quando è stato sbloccato un obiettivo
  162.   UNLOCKNEW = "Obiettivo completato!"
  163.  
  164.   #---------------------------------------------------------------------------
  165.   # * Sezione Impostazioni
  166.   #---------------------------------------------------------------------------
  167.   #Mostrare il comando nel menu iniziale?
  168.   ShowTitle = true
  169.  
  170.   #Mostrare il comando nel menu di gioco?
  171.   ShowMenu = true
  172.  
  173.   #Imposta una switch che, se attivata, mostra il comando nel menu
  174.   MenuSw = 0  #imposta 0 se vuoi che sia visibile sempre
  175.  
  176.   #Vuoi mostrare la barra di progresso degli obiettivi?
  177.   ShowProgress = true
  178.  
  179.   #---------------------------------------------------------------------------
  180.   # * Sezione Immagini
  181.   #---------------------------------------------------------------------------
  182.   # Imposta true se le finestre della schermata degli obiettivi devono essere
  183.   # trasparenti.
  184.   Transparent = false
  185.   # Seleziona il file immagine usato come sfondo nella finestra degli obiettivi.
  186.   BACKIMAGE = "" # "" se non lo vuoi
  187.   # Seleziona il file immagine che viene usato per mostrare il popup quando
  188.   # viene completato un obiettivo.
  189.   RECTIMAGE = "Achievements_Rect"
  190.   # Solo se hai anche lo script Menu Titolo Personalizzato, imposta l'immagine
  191.   # del pulsante "Trofei" nella schermata principale
  192.   OBJIMAGE = "T_Trofei"
  193.   # Anche qui solo se hai lo script MTP, imposta l'immagine del fumetto.
  194.   BALIMAGE = "B_Trofei"
  195.   # Velocità di scorrimento delle immagini nella schermata degli obiettivi
  196.   SPEED = 2 #1: immediato 2: velocissimo 3: veloce 4: normale
  197.  
  198.   #---------------------------------------------------------------------------
  199.   # * Sezione Pop-Up
  200.   #---------------------------------------------------------------------------
  201.   # Per quanti frame deve restare il pop-up prima di scomparire?
  202.   BANNERTIME = 300
  203.   # Impostazioni per la scritta superiore del pop-up ("Obiettivo sbloccato")
  204.   UTF = "Arial"       #Font
  205.   UTG = 20            #Grandezza
  206.   UTC = [255,255,255] #Colore (Rosso,Verde,Blu)
  207.   UTB = true          #Testo in grassetto? (true=grassetto)
  208.   UTI = false         #Testo in corsivo? (true=corsivo)
  209.   UTS = false         #Ombra testo? (true=si)
  210.   #Impostazioni per la scritte inferiore (nome dell'obiettivo)
  211.   DTF = "Arial"       #Font
  212.   DTG = 15            #Grandezza
  213.   DTC = [255,255,255] #Colore (Rosso,Verde,Blu)
  214.   DTB = false         #Testo in grassetto? (true=grassetto)
  215.   DTI = false         #Testo in corsivo? (true=corsivo)
  216.   DTS = false         #Ombra testo? (true=si)
  217.  
  218.   ADJUSTX = 0         #modifica la distanza dal centro (coord x)
  219.   ADJUSTY = 0         #modifica la distanza dal centro (coord y)
  220.  
  221.   # Animazione di movimento nella comparsa del popup.
  222.   #true: dal basso verso l'alto; false: solo fade
  223.   MOVEMENTS = true
  224.  
  225.   #---------------------------------------------------------------------------
  226.   # * Sezione Audio
  227.   #---------------------------------------------------------------------------
  228.   # Scegli se al completamento di un obiettivo si esegue un SE o un ME (fanfara)
  229.   PlayME = true #true = ME, false = SE
  230.   # Inserisci il nome del file audio da riprodurre
  231.   SE = "Fanfare1"
  232.  
  233.   #---------------------------------------------------------------------------
  234.   # * Sezione Menu Opzioni
  235.   #---------------------------------------------------------------------------
  236.   # Configura questa parte se hai lo script Menu Opzioni di Holy87 per far
  237.   # comparire l'opzione di attivare o disattivare i popup quando sblocchi un
  238.   # obiettivo.
  239.   OPT_ENABLED = true            #attivare l'opzione? false altrimenti
  240.   OPT_SWITCH = 110              #switch di attivazione dell'opzione.
  241.   OPT_TEXT = "Popup obiettivi"  #testo della voce nel menu
  242.   OPT_HELP = "Mostra o nascondi i popup quando viene sbloccato un obiettivo."
  243.   OPT_ON   = "Mostra"           #testo opzione attiva
  244.   OPT_OFF  = "Nascondi"         #testo opzione disattivata
  245.  
  246.   #---------------------------------------------------------------------------
  247.   # * Sezione Altro
  248.   #---------------------------------------------------------------------------
  249.   # Extra: Seleziona i membri del gruppo che non vuoi che siano considerati
  250.   # quando si controlla il livello massimo del gruppo (ID separati da virgola)
  251.   ExludedMembers = []
  252.  
  253.  
  254.  
  255.  
  256. #===============================================================================
  257. # ** FINE CONFIGURAZIONE **
  258. # Attenzione: Non modificare ciò che c'è oltre, a meno che tu non sappia ciò che
  259. # fai! C'è gente che si è suicidata per molto meno, fidati.
  260. #===============================================================================
  261. $imported = {} if $imported == nil
  262. $imported["H87_Achievements"] = true
  263.  
  264. #===============================================================================
  265. # ** modulo H87_Achievements
  266. #===============================================================================
  267.   module_function
  268.   #---------------------------------------------------------------------------
  269.   # * Esegue il controllo sugli obiettivi
  270.   #---------------------------------------------------------------------------
  271.   def self.check(type, param = nil)
  272.     return if $BTEST
  273.     return unless $cache_switches_achievements
  274.     return unless $game_achievements
  275.     return if type == 1 && !$cache_switches_achievements.include?(param)
  276.     return if type == 2 && !$cache_variables_achievements.include?(param)
  277.     achievements = $game_achievements.select {|key, achievement|
  278.       !achievement.unlocked? and achievement.condition == type
  279.     }
  280.     achievements.each_value{|ach| ach.unlock if ach.condition_met?(param)}
  281.     check(15) if type != 15 #per il controllo obiettivo su obiettivi
  282.   end
  283.   #---------------------------------------------------------------------------
  284.   # * Comando che sblocca l'obiettivo
  285.   #   id = id obiettivo
  286.   #---------------------------------------------------------------------------
  287.   def self.unlock_achievement(id)
  288.     if id > $game_achievements.size
  289.       println "Attenzione: non esiste l'obiettivo #{id} da sbloccare"
  290.       return
  291.     end
  292.     $game_achievements[id].unlock
  293.   end
  294.   #---------------------------------------------------------------------------
  295.   # * Restituisce i punti ottenuti da tutti gli obiettivi sbloccati
  296.   #---------------------------------------------------------------------------
  297.   def self.gained_points
  298.     count = 0
  299.     for i in 1..$game_achievements.size
  300.       ach = $game_achievements[i]
  301.       count += ach.reward if ach.unlocked?
  302.     end
  303.     return count
  304.   end
  305.   #---------------------------------------------------------------------------
  306.   # * Restituisce il totale punti di tutti gli obiettivi
  307.   #---------------------------------------------------------------------------
  308.   def self.total_points
  309.     count = 0
  310.     for i in 1..$game_achievements.size
  311.       ach = $game_achievements[i]
  312.       count += ach.reward
  313.     end
  314.     return count
  315.   end
  316.   #---------------------------------------------------------------------------
  317.   # * Restituisce il numero degli obiettivi sbloccati
  318.   #---------------------------------------------------------------------------
  319.   def unlockeds
  320.     count = 0
  321.     for i in 1..$game_achievements.size
  322.       ach = $game_achievements[i]
  323.       count += 1 if ach.unlocked?
  324.     end
  325.     return count
  326.   end
  327.   #---------------------------------------------------------------------------
  328.   # * Restituisce il numero di obiettivi totali
  329.   #---------------------------------------------------------------------------
  330.   def self.total_achievements
  331.     return $game_achievements.size
  332.   end
  333.   #---------------------------------------------------------------------------
  334.   # * Restituisce l'elenco dei trofei. Alias questo metodo per altri trofei.
  335.   #---------------------------------------------------------------------------
  336.   def trophies
  337.     return Trophies
  338.   end
  339.  
  340.   def custom_achievements
  341.     update_custom_achievements if @c_ach.nil?
  342.     @c_ach
  343.   end
  344.  
  345.   def update_custom_achievements
  346.     return if $game_achievements.nil?
  347.     @c_ach = $game_achievements.select{|key, ach| !ach.unlocked? && ach.custom?}
  348.   end
  349. end #achievements
  350.  
  351. #===============================================================================
  352. # ** classe Scene_Achievements
  353. #------------------------------------------------------------------------------
  354. #  Questa è la schermata dove vengono visualizzati gli obiettivi
  355. #==============================================================================
  356. class Scene_Achievements < Scene_MenuBase
  357.   #---------------------------------------------------------------------------
  358.   # * start
  359.   #---------------------------------------------------------------------------
  360.   def start
  361.     super
  362.     initialize_status
  363.     create_background
  364.     create_status_window
  365.     create_achievement_window
  366.     create_info_window
  367.     if H87_Achievements::Transparent
  368.       @status_window.opacity = 0
  369.       @info_window.opacity = 0
  370.     end
  371.   end
  372.   #---------------------------------------------------------------------------
  373.   # * Carica lo stato
  374.   #---------------------------------------------------------------------------
  375.   def initialize_status
  376.     unless $ingame
  377.       $ingame = true if DataManager.load_game(DataManager.last_savefile_index)
  378.     end
  379.   end
  380.   #---------------------------------------------------------------------------
  381.   # * aggiornamento
  382.   #---------------------------------------------------------------------------
  383.   def update
  384.     super
  385.     exit if Input.trigger?(Input::B)
  386.     @achievement_window.update
  387.   end
  388.   #---------------------------------------------------------------------------
  389.   # * aggiunta dello sfondo
  390.   #---------------------------------------------------------------------------
  391.   def create_background
  392.     super
  393.     @plus_sprite = Sprite.new
  394.     @plus_sprite.bitmap = Cache.picture(H87_Achievements::BACKIMAGE)
  395.   end
  396.   #---------------------------------------------------------------------------
  397.   # * eliminazione dello sfondo
  398.   #---------------------------------------------------------------------------
  399.   def dispose_background
  400.     super
  401.     @plus_sprite.dispose
  402.   end
  403.   #---------------------------------------------------------------------------
  404.   # * gestione uscita dalla schermata
  405.   #---------------------------------------------------------------------------
  406.   def terminate
  407.     super
  408.     dispose_background
  409.     dispose_achievement_window
  410.     dispose_info_window
  411.     dispose_status_window
  412.   end
  413.   #---------------------------------------------------------------------------
  414.   # * creazione finestra di status
  415.   #---------------------------------------------------------------------------
  416.   def create_status_window
  417.     @status_window = Window_AchievementStatus.new#vedi la classe più in basso
  418.     @status_window.y = Graphics.height - @status_window.height
  419.   end
  420.   #---------------------------------------------------------------------------
  421.   # * creazione finestra informazioni
  422.   #---------------------------------------------------------------------------
  423.   def create_info_window
  424.     y = @achievement_window.height
  425.     w = Graphics.width
  426.     h = Graphics.height - y - @status_window.height
  427.     @info_window = Window_AchievementInfo.new(0,y,w,h)
  428.     @achievement_window.set_info(@info_window)
  429.   end
  430.   #---------------------------------------------------------------------------
  431.   # * creazione finestra degli obiettivi
  432.   #---------------------------------------------------------------------------
  433.   def create_achievement_window
  434.     @achievement_window = Window_Achievements.new #non è una vera finestra
  435.   end
  436.   #---------------------------------------------------------------------------
  437.   # * eliminazione della finestra obiettivi
  438.   #---------------------------------------------------------------------------
  439.   def dispose_achievement_window
  440.     @achievement_window.dispose
  441.   end
  442.   #---------------------------------------------------------------------------
  443.   # * eliminazione finestra status
  444.   #---------------------------------------------------------------------------
  445.   def dispose_status_window
  446.     @status_window.dispose
  447.   end
  448.   #---------------------------------------------------------------------------
  449.   # * eliminazione finestra info
  450.   #---------------------------------------------------------------------------
  451.   def dispose_info_window
  452.     @info_window.dispose
  453.   end
  454.   #---------------------------------------------------------------------------
  455.   # * uscita e ritorno alla mappa/titolo
  456.   #---------------------------------------------------------------------------
  457.   def exit
  458.     Sound.play_cancel
  459.     SceneManager.return
  460.   end
  461. end
  462.  
  463. #===============================================================================
  464. # ** classe Window_Achievements (non è una vera finestra!)
  465. #------------------------------------------------------------------------------
  466. #  Mostra le icone degli obiettivi come elenchi
  467. #==============================================================================
  468. class Window_Achievements
  469.   #---------------------------------------------------------------------------
  470.   # * inizializzazione
  471.   #---------------------------------------------------------------------------
  472.   def initialize
  473.     @index = 0
  474.     refresh
  475.   end
  476.   #---------------------------------------------------------------------------
  477.   # * refresh
  478.   #---------------------------------------------------------------------------
  479.   def refresh
  480.     @emblems = []
  481.     for i in 1..$game_achievements.size
  482.       @emblems.push(create_emblem($game_achievements[i]))
  483.     end
  484.   end
  485.   #---------------------------------------------------------------------------
  486.   # * settaggio del riferimento della finestra info da aggiornare
  487.   #---------------------------------------------------------------------------
  488.   def set_info(info_window)
  489.     @info_window = info_window
  490.     update_info
  491.   end
  492.   #---------------------------------------------------------------------------
  493.   # * creazione degli emblemi
  494.   #   achievement: obiettivo
  495.   #---------------------------------------------------------------------------
  496.   def create_emblem(achievement)
  497.     sprite = Sprite.new
  498.     sprite.bitmap = Cache.picture(achievement.icon)
  499.     if achievement.unlocked?
  500.       sprite.opacity = 255
  501.     else
  502.       sprite.opacity = 50
  503.       if achievement.hidden?
  504.         sprite.tone.set(-255,-255,-255,255)
  505.       end
  506.     end
  507.     sprite.ox = sprite.width/2
  508.     sprite.oy = sprite.height/2
  509.     sprite.y = self.height / 2
  510.     return sprite
  511.   end
  512.   #---------------------------------------------------------------------------
  513.   # * larghezza e altezza
  514.   #---------------------------------------------------------------------------
  515.   def width;        return Graphics.width;  end #restituisce la larghezza
  516.   def height;       return 150; end             #restituisce l'altezza
  517.   #---------------------------------------------------------------------------
  518.   # * eliminazione degli emblemi
  519.   #---------------------------------------------------------------------------
  520.   def dispose
  521.     for i in 0..@emblems.size-1
  522.       @emblems[i].dispose
  523.     end
  524.   end
  525.   #---------------------------------------------------------------------------
  526.   # * aggiornamento
  527.   #---------------------------------------------------------------------------
  528.   def update
  529.     left if Input.repeat?(Input::LEFT)
  530.     right if Input.repeat?(Input::RIGHT)
  531.     update_objects
  532.   end
  533.   #---------------------------------------------------------------------------
  534.   # * azione sinistra
  535.   #---------------------------------------------------------------------------
  536.   def left
  537.     return if @index <= 0
  538.     @index -= 1
  539.     Sound.play_cursor
  540.     update_info
  541.   end
  542.   #---------------------------------------------------------------------------
  543.   # * azione destra
  544.   #---------------------------------------------------------------------------
  545.   def right
  546.     return if @index >= @emblems.size-1
  547.     @index += 1
  548.     Sound.play_cursor
  549.     update_info
  550.   end
  551.   #---------------------------------------------------------------------------
  552.   # * aggiornamento degli oggetti
  553.   #---------------------------------------------------------------------------
  554.   def update_objects
  555.     for i in 0..@emblems.size-1
  556.       update_emblem(i)
  557.     end
  558.   end
  559.   #---------------------------------------------------------------------------
  560.   # * aggiornamento della singola icona
  561.   #   index = indice dell'icona
  562.   #---------------------------------------------------------------------------
  563.   def update_emblem(index)
  564.     emblem = @emblems[index]
  565.     sp = H87_Achievements::SPEED
  566.     if @index == index
  567.       if emblem.zoom_x < 1
  568.         distanza = 1 - emblem.zoom_x
  569.         emblem.zoom_x += distanza/sp
  570.         emblem.zoom_y += distanza/sp
  571.       end
  572.     else
  573.       if emblem.zoom_x > 0.5
  574.         distanza = 0.5 - emblem.zoom_x
  575.         emblem.zoom_x += distanza/sp
  576.         emblem.zoom_y += distanza/sp
  577.       end
  578.     end
  579.     if emblem.x != graphic_center(index)
  580.       distanza = graphic_center(index) - emblem.x
  581.       emblem.x += distanza / sp
  582.     end
  583.   end
  584.   #---------------------------------------------------------------------------
  585.   # * restituisce la posizione che deve avere ogni icona
  586.   #---------------------------------------------------------------------------
  587.   def graphic_center(index = @index)
  588.     center = self.width/2
  589.     if index > @index
  590.       center += (@emblems[index].width + @emblems[@index].width)/2
  591.       for i in @index+1..index-1
  592.         center += @emblems[i].width# * @emblems[i].zoom_x
  593.       end
  594.     elsif index < @index
  595.       center -= ((@emblems[index].width + @emblems[@index].width)/2)
  596.       for i in index+1..@index-1
  597.         center -= @emblems[i].width# * @emblems[i].zoom_x
  598.       end
  599.     end
  600.     return center
  601.   end
  602.   #---------------------------------------------------------------------------
  603.   # * aggiornamento della finestra info con l'indice attuale
  604.   #---------------------------------------------------------------------------
  605.   def update_info
  606.     @info_window.set($game_achievements[@index+1])
  607.   end
  608. end #window_achievement
  609.  
  610. #==============================================================================
  611. # ** classe Window_AchievementStatus
  612. #------------------------------------------------------------------------------
  613. #  Finestra che mostra il numero di obiettivi sbloccati
  614. #==============================================================================
  615. class Window_AchievementStatus < Window_Base
  616.   #---------------------------------------------------------------------------
  617.   # * inizializzazione
  618.   #---------------------------------------------------------------------------
  619.   def initialize
  620.     super(0,Graphics.height-(line_height*32),Graphics.width,line_height+32)
  621.     refresh
  622.   end
  623.   #---------------------------------------------------------------------------
  624.   # * refresh
  625.   #---------------------------------------------------------------------------
  626.   def refresh
  627.     contents.clear
  628.     points = H87_Achievements.gained_points
  629.     totalp = H87_Achievements.total_points
  630.     text = sprintf("%s %d/%d",H87_Achievements::POINTEXT,points,totalp)
  631.     draw_text(4,0,self.width-32,line_height,text)
  632.     unlock = H87_Achievements.unlockeds
  633.     totala = H87_Achievements.total_achievements
  634.     text = sprintf("%s %d/%d",H87_Achievements::UNLKTEXT,unlock,totala)
  635.     draw_text(4,0,self.width-46,line_height,text,2)
  636.   end
  637. end #window_achievementstatus
  638.  
  639. #==============================================================================
  640. # ** Window_AchievementInfo
  641. #------------------------------------------------------------------------------
  642. #  Finestra che mostra le informazioni sull'obiettivo
  643. #==============================================================================
  644. class Window_AchievementInfo < Window_Base
  645.   #---------------------------------------------------------------------------
  646.   # * inizializzazione
  647.   #---------------------------------------------------------------------------
  648.   def initialize(x,y,w,h)
  649.     super(x,y,w,h)
  650.     @achievement = nil
  651.     refresh
  652.   end
  653.   #---------------------------------------------------------------------------
  654.   # * refresh
  655.   #---------------------------------------------------------------------------
  656.   def refresh
  657.     contents.clear
  658.     return if @achievement == nil
  659.     if !@achievement.unlocked? and @achievement.hidden?
  660.       name = H87_Achievements::HIDDTEXT
  661.       desc = H87_Achievements::HIDDDESC.split("|")
  662.       reward = "???"
  663.     else
  664.       name = @achievement.name
  665.       desc = @achievement.description.split("|")
  666.       reward = @achievement.reward
  667.     end
  668.     draw_achievement_name(name)
  669.     draw_achievement_reward(reward)
  670.     line = draw_achievement_description(desc)
  671.     draw_achievement_details(line)
  672.   end
  673.   #---------------------------------------------------------------------------
  674.   # * mostra il nome dell'obiettivo se non nascosto, altrimenti ???
  675.   #---------------------------------------------------------------------------
  676.   def draw_achievement_name(name)
  677.     change_color(crisis_color)
  678.     default_size = contents.font.size
  679.     contents.font.size = default_size + 15
  680.     contents.draw_text(4,0,self.width-36,line_height*2,name,1)
  681.     contents.font.size = default_size
  682.     change_color(normal_color)
  683.   end
  684.  
  685.   def draw_achievement_reward(reward)
  686.     return if !@achievement.unlocked? && @achievement.hidden?
  687.     valuename = H87_Achievements::VALRTEXT
  688.     text = sprintf("%d %s",reward, valuename)
  689.     draw_text(4,line_height*3,self.width-36,line_height,text,1)
  690.   end
  691.   #---------------------------------------------------------------------------
  692.   # * mostra lo stato dell'obiettivo (nascosto, bloccato o sbloccato)
  693.   #---------------------------------------------------------------------------
  694.   def draw_achievement_description(desc)
  695.     for i in 0..desc.size-1
  696.       l = i+1
  697.       draw_text(4,line_height*(4+i),self.width-36,line_height,desc[i],1)
  698.     end
  699.     return l-1
  700.   end
  701.   #---------------------------------------------------------------------------
  702.   # * mostra i dettagli dell'obiettivo (data sblocco, progressi...)
  703.   #---------------------------------------------------------------------------
  704.   def draw_achievement_details(l)
  705.     if @achievement.unlocked?
  706.       self.change_color(power_up_color)
  707.       text = H87_Achievements::DATETEXT
  708.       date = sprintf("%s %s",text,@achievement.date)
  709.       draw_text(4,line_height*(5+l),self.width-36,line_height,date,1)
  710.     elsif can_draw_bar?
  711.       draw_progress_bar(4,line_height*(5+l),(self.width-36)/2,line_height)
  712.     else
  713.       contents.font.color = power_down_color
  714.       text = H87_Achievements::LOCKTEXT
  715.       draw_text(4,line_height*(5+l),self.width-36,line_height,date,1)
  716.     end
  717.   end
  718.   #---------------------------------------------------------------------------
  719.   # * restituisce true se si può disegnare la barra di progresso
  720.   #---------------------------------------------------------------------------
  721.   def can_draw_bar?
  722.     return false unless H87_Achievements::ShowProgress
  723.     return false unless $ingame
  724.     return false unless @achievement.has_bar?
  725.     return false if @achievement.hidden?
  726.     return true
  727.   end
  728.   #---------------------------------------------------------------------------
  729.   # * disegna la barra di progresso
  730.   #---------------------------------------------------------------------------
  731.   def draw_progress_bar(x,y,width,height)
  732.     max = @achievement.max_value
  733.     val = @achievement.value
  734.     val = [max,val].min
  735.     xa = width/2
  736.     contents.fill_rect(xa,y+(height*2/3),width,height/3,gauge_back_color)
  737.     per = val*width/max
  738.     contents.gradient_fill_rect(xa,y+(height*2/3),per,height/3,mp_gauge_color1,mp_gauge_color2)
  739.     draw_text(xa,y,width,height,sprintf("%d/%d",val,max),1)
  740.   end
  741.   #---------------------------------------------------------------------------
  742.   # * settaggio dell'obiettivo
  743.   #   achievement: obiettivo
  744.   #---------------------------------------------------------------------------
  745.   def set(achievement)
  746.     @achievement = achievement
  747.     refresh
  748.   end
  749. end #window_achievementinfo
  750.  
  751. #==============================================================================
  752. # ** Achievement
  753. #------------------------------------------------------------------------------
  754. #  Questa classe si occupa della creazione materiale dell'obiettivo. L'istanza
  755. #  di questa classe fa riferimento a $game_achievements.
  756. #==============================================================================
  757. class Achievement
  758.   include H87_Achievements  #inclusione del modulo
  759.   #---------------------------------------------------------------------------
  760.   # * variabili d'istanza pubblici
  761.   #---------------------------------------------------------------------------
  762.   attr_reader :id           #ID obiettivo
  763.   attr_reader :name         #nome obiettivo
  764.   attr_reader :description  #descrizione
  765.   attr_reader :icon         #icona usata
  766.   attr_reader :condition    #condizione
  767.   attr_reader :reward       #punteggio ottenuto
  768.   attr_reader :date         #data di ottenimento
  769.   attr_reader :object       #oggetto del valore
  770.   #---------------------------------------------------------------------------
  771.   # * metodi semplici
  772.   #---------------------------------------------------------------------------
  773.   def hidden?;    @hidden;       end #restituisce true se nascosto
  774.   def max_value;  @max_value;    end #restituisce il valore da sbloccare
  775.   def unlocked?;  @unlocked;     end #restituisce true se è sbloccato
  776.   def has_bar?;   store_var?;    end #restituisce true se ha una barra
  777.   def custom?;    @condition.is_a?(String); end #true se è personalizzato
  778.   #---------------------------------------------------------------------------
  779.   # * azione di sblocco dell'obiettivo
  780.   #---------------------------------------------------------------------------
  781.   def unlock
  782.     return if unlocked?
  783.     @unlocked = true
  784.     $cache_variables_achievements.delete(@object) if @contidion == 2
  785.     $cache_switches_achievements.delete(@object) if @contidion == 1
  786.     set_date
  787.     save_to_settings
  788.     SceneManager.scene.push_banner(self.id)
  789.     update_custom_achievements if custom?
  790.   end
  791.   #---------------------------------------------------------------------------
  792.   # * imposta la data di sblocco dell'obiettivo
  793.   #---------------------------------------------------------------------------
  794.   def set_date
  795.     date = Time.new
  796.     date_text = sprintf("%d/%d/%d",date.day,date.month,date.year)
  797.     @date = date_text
  798.   end
  799.   #---------------------------------------------------------------------------
  800.   # * salva i dati di sblocco nel file settings
  801.   #---------------------------------------------------------------------------
  802.   def save_to_settings
  803.     $game_settings[:achievements] = {} if $game_settings[:achievements].nil?
  804.     $game_settings[:achievements][@id] = @date
  805.     $game_settings.save
  806.   end
  807.   #---------------------------------------------------------------------------
  808.   # * inizializzazione
  809.   #   trophy_id: id dell'obiettivo
  810.   #---------------------------------------------------------------------------
  811.   def initialize(trophy_id)
  812.     achievement = trophies[trophy_id]
  813.     @id = trophy_id
  814.     @name = achievement[1]
  815.     @icon = achievement[0]
  816.     @description = achievement[2]
  817.     @reward = achievement[3]
  818.     @hidden = achievement[4]
  819.     @condition = achievement[5]
  820.     @object = 0
  821.     @max_value = 0
  822.     @max_value = achievement[6] if achievement[6]
  823.     @object = achievement[7] if achievement[7]
  824.     get_achievement_state
  825.   end
  826.   #---------------------------------------------------------------------------
  827.   # * aggiorna lo stato dell'obiettivo
  828.   #---------------------------------------------------------------------------
  829.   def get_achievement_state
  830.     $game_settings[:achievements] = {} if $game_settings[:achievements].nil?
  831.     if $game_settings[:achievements][@id] != nil
  832.       @unlocked = true
  833.       @date = $game_settings[:achievements][@id]
  834.      else
  835.       @unlocked = false
  836.       @date = ""
  837.     end
  838.   end
  839.   #---------------------------------------------------------------------------
  840.   # * restituisce true se le condizioni dell'obiettivo sono soddisfatte
  841.   #---------------------------------------------------------------------------
  842.   def condition_met?(param = nil)
  843.     return false if self.condition == 0
  844.     return switch_condition if self.condition == 1
  845.     return value(param) >= @max_value
  846.   end
  847.   #---------------------------------------------------------------------------
  848.   # * restituisce il progresso dell'obiettivo, o -1 se non è calcolabile.
  849.   #---------------------------------------------------------------------------
  850.   def value(param = nil)
  851.     case self.condition
  852.                 when 2;  return variable_condition
  853.                 when 3;  return gold_condition
  854.                 when 4;  return total_gold_condition
  855.                 when 5;  return level_max_condition
  856.                 when 6;  return total_step_condition
  857.                 when 7;  return save_count_condition
  858.                 when 8;  return total_win_condition
  859.                 when 9;  return total_escape_condition
  860.                 when 10; return total_battles_condition
  861.                 when 11; return total_gold_spent_condition
  862.                 when 12; return total_gold_sell_condition
  863.                 when 13; return gametime_condition
  864.                 when 14; return item_number_condition
  865.                 when 15; return achievements_unlocked
  866.                 when 16; return killed_enemies_condition
  867.                 when 17; return killed_enemy_condition
  868.                 when 18; return total_damage_condition
  869.                 when 19; return single_damage_condition(param)
  870.                 when 20; return turn_killed_enemies
  871.                 when 21; return turn_damage
  872.                 when 22; return total_heal
  873.     when String; return eval(self.condition)
  874.     else;    return 0
  875.     end
  876.         end
  877.   #---------------------------------------------------------------------------
  878.   # * restituisce true se l'obiettivo rappresenta un valore da accumulare.
  879.   #---------------------------------------------------------------------------
  880.   def store_var?
  881.     if custom?
  882.       return false if value == 0
  883.       return false if !value.is_a?(Integer)
  884.     end
  885.     ary = [0,1,19,20,21]
  886.     return !ary.include?(self.condition)
  887.   end
  888.         #---------------------------------------------------------------------------
  889.   # * condizione per attivazione switch
  890.   #---------------------------------------------------------------------------
  891.         def switch_condition
  892.     sw = $game_switches[@object]
  893.     if sw.nil?
  894.       println "L'obiettivo #{@id} fa riferimento ad uno switch che non esiste."
  895.       return false
  896.     else
  897.       return sw
  898.     end
  899.   end
  900.         #---------------------------------------------------------------------------
  901.   # * Condizione per valore variabile
  902.   #---------------------------------------------------------------------------
  903.         def variable_condition; $game_variables[@object]; end
  904.         #---------------------------------------------------------------------------
  905.   # * Condizione per oro posseduto
  906.   #---------------------------------------------------------------------------
  907.         def gold_condition; $game_party.gold; end
  908.         #---------------------------------------------------------------------------
  909.   # * Condizione oro totale guadagnato
  910.   #---------------------------------------------------------------------------
  911.         def total_gold_condition; $game_party.total_gold; end
  912.         #---------------------------------------------------------------------------
  913.   # * Condizione livello massimo raggiunto
  914.   #---------------------------------------------------------------------------
  915.         def level_max_condition; $game_party.total_max_level; end
  916.         #---------------------------------------------------------------------------
  917.   # * Condizione passi totali
  918.   #---------------------------------------------------------------------------
  919.         def total_step_condition; $game_party.steps; end
  920.         #---------------------------------------------------------------------------
  921.   # * Condizione salvataggi
  922.   #---------------------------------------------------------------------------
  923.         def save_count_condition; $game_system.save_count; end
  924.         #---------------------------------------------------------------------------
  925.   # * Condizione vittorie
  926.   #---------------------------------------------------------------------------
  927.         def total_win_condition; $game_party.total_victories; end
  928.         #---------------------------------------------------------------------------
  929.   # * Condizione fughe
  930.   #---------------------------------------------------------------------------
  931.         def total_escape_condition; $game_party.total_escapes; end
  932.         #---------------------------------------------------------------------------
  933.   # * Condizione battaglie totali
  934.   #---------------------------------------------------------------------------
  935.         def total_battles_condition; $game_party.total_battles; end
  936.         #---------------------------------------------------------------------------
  937.   # * Condizione oro speso
  938.   #---------------------------------------------------------------------------
  939.         def total_gold_spent_condition;$game_party.total_gold_spent; end
  940.         #---------------------------------------------------------------------------
  941.   # * Condizione oro guadagnato dalle vendite
  942.   #---------------------------------------------------------------------------
  943.         def total_gold_sell_condition;$game_party.total_sell; end
  944.         #---------------------------------------------------------------------------
  945.   # * Condizione ore di gioco
  946.   #---------------------------------------------------------------------------
  947.         def gametime_condition; total_hours; end
  948.         #---------------------------------------------------------------------------
  949.   # * Condizione oggetti ottenuti
  950.   #---------------------------------------------------------------------------
  951.         def item_number_condition;$game_party.total_items(@object);end
  952.         #---------------------------------------------------------------------------
  953.   # * Condizione tutti gli obiettivi sbloccati
  954.   #---------------------------------------------------------------------------
  955.         def achievements_unlocked; unlockeds; end
  956.         #---------------------------------------------------------------------------
  957.   # * Condizione nemici uccisi
  958.   #---------------------------------------------------------------------------
  959.         def killed_enemies_condition; $game_party.enemies_killed; end
  960.         #---------------------------------------------------------------------------
  961.   # * Condizione nemico ucciso
  962.   #---------------------------------------------------------------------------
  963.         def killed_enemy_condition;$game_party.enemy_killed(@object); end
  964.         #---------------------------------------------------------------------------
  965.   # * Condizione danno totale inflitto
  966.   #---------------------------------------------------------------------------
  967.         def total_damage_condition;$game_party.total_damage_dealed; end
  968.         #---------------------------------------------------------------------------
  969.   # * Condizione danno singolo inflitto
  970.   #---------------------------------------------------------------------------
  971.         def single_damage_condition(value);value;end
  972.         #---------------------------------------------------------------------------
  973.   # * Nemici uccisi in un turno
  974.   #---------------------------------------------------------------------------
  975.         def turn_killed_enemies;BattleManager.enemies_killed; end
  976.         #---------------------------------------------------------------------------
  977.   # * Danno causato in un turno
  978.   #---------------------------------------------------------------------------
  979.         def turn_damage;BattleManager.turn_damage; end
  980.         #---------------------------------------------------------------------------
  981.   # * Cura totale
  982.   #---------------------------------------------------------------------------
  983.         def total_heal; $game_party.total_heal; end
  984.         #---------------------------------------------------------------------------
  985.   # * Conta morti di un eroe
  986.   #---------------------------------------------------------------------------
  987.         def dead_count;$game_actors[@object].dead_count; end
  988.   #---------------------------------------------------------------------------
  989.   # * Restituisce le ore totali di gioco
  990.   #---------------------------------------------------------------------------
  991.   def total_hours
  992.     sec = Graphics.frame_count / Graphics.frame_rate
  993.     return sec / 3600
  994.   end
  995. end #achievement
  996.  
  997. #==============================================================================
  998. # ** Scene_Base
  999. #------------------------------------------------------------------------------
  1000. #  Aggiunta degli alias che gestiscono i banner
  1001. #==============================================================================
  1002. class Scene_Base
  1003.   #---------------------------------------------------------------------------
  1004.   # * alias start per aggiungere il banner universale
  1005.   #---------------------------------------------------------------------------
  1006.   alias h87ach_startb start unless $@
  1007.   def start
  1008.     h87ach_startb
  1009.     H87_Achievements.check(13) if $game_achievements != nil
  1010.   end
  1011.   #---------------------------------------------------------------------------
  1012.   # * aggiornamento
  1013.   #---------------------------------------------------------------------------
  1014.   alias h87upd_update update unless $@
  1015.   def update
  1016.     h87upd_update
  1017.     custom_achievement_check
  1018.     update_ach_animat
  1019.   end
  1020.   #---------------------------------------------------------------------------
  1021.   # * aggiunta di un nuovo banner chiamando l'oggetto
  1022.   #---------------------------------------------------------------------------
  1023.   def push_banner(achievement_id)
  1024.     return unless achievement_popup_enabled?
  1025.     $achievement_animations.push_banner($game_achievements[achievement_id])
  1026.   end
  1027.   #---------------------------------------------------------------------------
  1028.   # * aggiornamento dei banner
  1029.   #---------------------------------------------------------------------------
  1030.   def update_ach_animat
  1031.     $achievement_animations.update rescue return
  1032.   end
  1033.   #---------------------------------------------------------------------------
  1034.   # * restituisce true se i popup sono abilitati
  1035.   #---------------------------------------------------------------------------
  1036.   def achievement_popup_enabled?
  1037.     return true unless $imported["H87_Options"]
  1038.     return true unless H87_Achievements::OPT_ENABLED
  1039.     return $game_switches[H87_Achievements::OPT_SWITCH]
  1040.   end
  1041.   #---------------------------------------------------------------------------
  1042.   # * controlla le condizioni degli obiettivi personalizzati
  1043.   #---------------------------------------------------------------------------
  1044.   def custom_achievement_check
  1045.     return if $game_achievements.nil?
  1046.     achs = H87_Achievements.custom_achievements
  1047.     return if achs.empty?
  1048.     achs.each_value{|ach| H87_Achievements.unlock_achievement(ach.id) if ach.condition_met?}
  1049.   end
  1050. end #scene_base
  1051.  
  1052. #==============================================================================
  1053. # ** Scene_Title
  1054. #------------------------------------------------------------------------------
  1055. #  Aggiunta dei comandi e del caricamento degli obiettivi
  1056. #==============================================================================
  1057. class Scene_Title < Scene_Base
  1058.   #---------------------------------------------------------------------------
  1059.   # * nascondi il popup
  1060.   #---------------------------------------------------------------------------
  1061.   alias h87_ach_title_start start unless $@
  1062.   def start
  1063.     h87_ach_title_start
  1064.     $achievement_animations.hide if $achievement_animations != nil
  1065.     DataManager.init_achievements
  1066.   end
  1067.   if $imported["H87_TitleMenu"]
  1068.   #--------------------------------------------------------------------------
  1069.   # * alias del metodo crea_contenuti_personalizzati
  1070.   #--------------------------------------------------------------------------
  1071.   alias h87_ach_ccp crea_contenuti_personalizzati unless $@
  1072.   def crea_contenuti_personalizzati
  1073.     h87_ach_ccp
  1074.     add_cursor(:achievements,"go_achievements",H87_Achievements::OBJIMAGE,H87_Achievements::BALIMAGE)
  1075.   end;else
  1076.   #---------------------------------------------------------------------------
  1077.   # * aggiunta del comando
  1078.   #---------------------------------------------------------------------------
  1079.   alias achiev_command_window create_command_window unless $@
  1080.   def create_command_window
  1081.     achiev_command_window
  1082.     @command_window.set_handler(:achievements, method(:go_achievements))
  1083.   end;end
  1084.   #---------------------------------------------------------------------------
  1085.   # * metodo di passaggio alla schermata degli obiettivi
  1086.   #---------------------------------------------------------------------------
  1087.   def go_achievements
  1088.     Sound.play_ok if $imported["H87_TitleMenu"]
  1089.     $ingame = false
  1090.     SceneManager.call(Scene_Achievements)
  1091.   end
  1092. end #scene_title
  1093.  
  1094. #==============================================================================
  1095. # ** Window_TitleCommand
  1096. #------------------------------------------------------------------------------
  1097. #  Aggiunta del comando obiettivi nella schermata del titolo
  1098. #==============================================================================
  1099. unless $imported["H87_TitleMenu"] #se non c'è il menu titolo personalizzato
  1100. class Window_TitleCommand < Window_Command
  1101.   alias h87_ach_add_command add_command unless $@
  1102.   #---------------------------------------------------------------------------
  1103.   # * alias metodo add_command
  1104.   #---------------------------------------------------------------------------
  1105.   def add_command(name, symbol, enabled = true, ext = nil)
  1106.     if H87_Achievements::ShowTitle and symbol == :shutdown
  1107.       add_command(H87_Achievements::ACHVTEXT, :achievements)
  1108.     end
  1109.     h87_ach_add_command(name, symbol, enabled, ext)
  1110.   end
  1111. end;end #window_titlecommand
  1112.  
  1113. #==============================================================================
  1114. # ** DataManager
  1115. #------------------------------------------------------------------------------
  1116. #  Aggiunta del caricamento degli obiettivi
  1117. #==============================================================================
  1118. module DataManager
  1119.   #---------------------------------------------------------------------------
  1120.   # * caricamento di $game_achievements
  1121.   #---------------------------------------------------------------------------
  1122.   def self.init_achievements
  1123.     $game_achievements = load_achievements
  1124.     $achievement_animations = Achievement_Banner.new
  1125.     check_old_version_compatibility
  1126.     $cache_variables_achievements = load_variable_achievements
  1127.     $cache_switches_achievements = load_switches_achievements
  1128.   end
  1129.   #---------------------------------------------------------------------------
  1130.   # * caricamento degli obiettivi
  1131.   #---------------------------------------------------------------------------
  1132.   def self.load_achievements
  1133.     a = {}
  1134.     for i in 1..H87_Achievements.trophies.size do
  1135.       a[i] = Achievement.new(i)
  1136.     end
  1137.     return a
  1138.   end
  1139.   #---------------------------------------------------------------------------
  1140.   # * caricamento della cache delle variabili
  1141.   #   per limitare lag, viene creata una cache di variabili da tenere sotto
  1142.   #   controllo quando si controllano gli obiettivi, così da non controllarle
  1143.   #   tutte.
  1144.   #---------------------------------------------------------------------------
  1145.   def self.load_variable_achievements
  1146.     a = []
  1147.     for i in 1..$game_achievements.size do
  1148.       trophy = $game_achievements[i]
  1149.       a.push(trophy.object) if trophy.condition == 2 and !trophy.unlocked?
  1150.     end
  1151.     return a
  1152.   end
  1153.   #---------------------------------------------------------------------------
  1154.   # * caricamento della cache degli obiettivi
  1155.   #---------------------------------------------------------------------------
  1156.   def self.load_switches_achievements
  1157.     a = []
  1158.     for i in 1..$game_achievements.size do
  1159.       trophy = $game_achievements[i]
  1160.       a.push(trophy.object) if trophy.condition == 1 and !trophy.unlocked?
  1161.     end
  1162.     return a
  1163.   end
  1164.   #---------------------------------------------------------------------------
  1165.   # * Converte le informazioni degli obiettivi sbloccati sulla nuova versione.
  1166.   #---------------------------------------------------------------------------
  1167.   def self.check_old_version_compatibility
  1168.     return if $game_settings[:achievements]
  1169.     $game_settings[:achievements] = {}
  1170.     $game_settings.each_pair do |key, value|
  1171.       case key
  1172.       when /Ach(\d+)/i
  1173.         $game_settings[:achievements][$1.to_i] = value
  1174.       end
  1175.     end
  1176.     $game_settings.save
  1177.   end
  1178. end
  1179.  
  1180. #==============================================================================
  1181. # ** Game_Interpreter
  1182. #------------------------------------------------------------------------------
  1183. #  Aggiunta dei comandi evento e dei controlli a switch e variabili
  1184. #==============================================================================
  1185. class Game_Interpreter
  1186.   #---------------------------------------------------------------------------
  1187.   # * Sblocco dell'obiettivo
  1188.   #---------------------------------------------------------------------------
  1189.   def unlock_achievement(id)
  1190.     H87_Achievements.unlock_achievement(id)
  1191.   end
  1192.   #---------------------------------------------------------------------------
  1193.   # * comando di schermata degli obiettivi
  1194.   #---------------------------------------------------------------------------
  1195.   def open_achievement
  1196.     SceneManager.call(Scene_Achievements)
  1197.   end
  1198. end #game_interpreter
  1199.  
  1200. #==============================================================================
  1201. # ** Game_Variables
  1202. #------------------------------------------------------------------------------
  1203. #  aggiunta del controllo sulle variabili
  1204. #==============================================================================
  1205. class Game_Variables
  1206.   alias old_modify []= unless $@
  1207.   #---------------------------------------------------------------------------
  1208.   # * riscrittura
  1209.   #---------------------------------------------------------------------------
  1210.   def []=(variable_id, value)
  1211.     old_modify(variable_id, value)
  1212.     H87_Achievements.check(2,variable_id)
  1213.   end
  1214. end #game_variables
  1215.  
  1216. #==============================================================================
  1217. # ** Game_Switches
  1218. #------------------------------------------------------------------------------
  1219. #  aggiunta del controllo sugli Switch
  1220. #==============================================================================
  1221. class Game_Switches
  1222.   alias old_modify []= unless $@
  1223.   #---------------------------------------------------------------------------
  1224.   # * riscrittura
  1225.   #---------------------------------------------------------------------------
  1226.   def []=(switch_id, value)
  1227.     old_modify(switch_id, value)
  1228.     H87_Achievements.check(1,switch_id)
  1229.   end
  1230. end #gameswitches
  1231.  
  1232. #==============================================================================
  1233. # ** Achievements_Graphic
  1234. #------------------------------------------------------------------------------
  1235. #  Classe che gestisce la grafica del pop-up
  1236. #==============================================================================
  1237. class Achievement_Graphic
  1238.   def x;return @sprite.x;end
  1239.   def y;return @sprite.y;end
  1240.   #---------------------------------------------------------------------------
  1241.   # * inizializzazione
  1242.   #---------------------------------------------------------------------------
  1243.   def initialize(achievement)
  1244.     @achievement = achievement
  1245.     @disappeared = false
  1246.     @counter = 0
  1247.     create_main_graphics
  1248.   end
  1249.   #---------------------------------------------------------------------------
  1250.   # * creazione della grafica necessaria
  1251.   #---------------------------------------------------------------------------
  1252.   def create_main_graphics
  1253.     create_sprite
  1254.     create_achievement_image
  1255.     create_achievement_text
  1256.   end
  1257.   #---------------------------------------------------------------------------
  1258.   # * creazione dello sprite del banner
  1259.   #---------------------------------------------------------------------------
  1260.   def create_sprite
  1261.     @sprite = Sprite.new
  1262.     @sprite.bitmap = Cache.picture(H87_Achievements::RECTIMAGE)
  1263.     @sprite.opacity = 0
  1264.     @sprite.oy = @sprite.height/2
  1265.     @sprite.x = (Graphics.width-@sprite.width)/2 + H87_Achievements::ADJUSTX
  1266.     @sprite.y = Graphics.height/2 + H87_Achievements::ADJUSTY
  1267.     @sprite.y += 50 if H87_Achievements::MOVEMENTS
  1268.     @sprite.z = 500
  1269.   end
  1270.   #---------------------------------------------------------------------------
  1271.   # * creazione dello sprite dell'immagine obiettivo
  1272.   #---------------------------------------------------------------------------
  1273.   def create_achievement_image
  1274.     @emblem = Sprite.new
  1275.     @emblem.bitmap = Cache.picture(@achievement.icon)
  1276.     @emblem.ox = @emblem.width/2
  1277.     @emblem.oy = @emblem.height/2
  1278.     setup_emblem
  1279.   end
  1280.   #---------------------------------------------------------------------------
  1281.   # * impostazione posizione rispetto al banner
  1282.   #---------------------------------------------------------------------------
  1283.   def setup_emblem
  1284.     @emblem.x = @sprite.x
  1285.     @emblem.y = @sprite.y
  1286.     @emblem.z = @sprite.z+1
  1287.     @emblem.opacity = @sprite.opacity
  1288.   end
  1289.   #---------------------------------------------------------------------------
  1290.   # * scrittura del testo sulla bitmap del banner
  1291.   #---------------------------------------------------------------------------
  1292.   def create_achievement_text
  1293.     x = @emblem.width/2
  1294.     y = (@sprite.height/2) - 24
  1295.     @sprite.bitmap.font.name = H87_Achievements::UTF
  1296.     @sprite.bitmap.font.size = H87_Achievements::UTG
  1297.     c= H87_Achievements::UTC
  1298.     @sprite.bitmap.font.color = Color.new(c[0],c[1],c[2])
  1299.     @sprite.bitmap.font.bold = H87_Achievements::UTB
  1300.     @sprite.bitmap.font.italic = H87_Achievements::UTI
  1301.     @sprite.bitmap.font.shadow = H87_Achievements::UTS
  1302.     @sprite.bitmap.draw_text(x,y,@sprite.width-x,24,H87_Achievements::UNLOCKNEW)
  1303.    
  1304.     @sprite.bitmap.font.name = H87_Achievements::DTF
  1305.     @sprite.bitmap.font.size = H87_Achievements::DTG
  1306.     c= H87_Achievements::DTC
  1307.     @sprite.bitmap.font.color = Color.new(c[0],c[1],c[2])
  1308.     @sprite.bitmap.font.bold = H87_Achievements::DTB
  1309.     @sprite.bitmap.font.italic = H87_Achievements::DTI
  1310.     @sprite.bitmap.font.shadow = H87_Achievements::DTS
  1311.     @sprite.bitmap.draw_text(x,y+24,@sprite.width-x,24,@achievement.name)
  1312.   end
  1313.   #---------------------------------------------------------------------------
  1314.   # * aggiornamento
  1315.   #---------------------------------------------------------------------------
  1316.   def update
  1317.     @counter += 1
  1318.     @sprite.y -= 1 if @sprite.y > Graphics.height/2 + H87_Achievements::ADJUSTY and H87_Achievements::MOVEMENTS
  1319.     if @counter < H87_Achievements::BANNERTIME
  1320.       @sprite.opacity += 4
  1321.     else
  1322.       @sprite.opacity -= 10
  1323.     end
  1324.     setup_emblem
  1325.     @disappeared = true if @sprite.opacity <= 0
  1326.   end
  1327.   #---------------------------------------------------------------------------
  1328.   # * restituisce true se è scomparso
  1329.   #---------------------------------------------------------------------------
  1330.   def disappeared?
  1331.     return @disappeared
  1332.   end
  1333.   #---------------------------------------------------------------------------
  1334.   # * eliminazione del banner
  1335.   #---------------------------------------------------------------------------
  1336.   def dispose
  1337.     @emblem.opacity = 0
  1338.     @sprite.opacity = 0
  1339.     @emblem.dispose
  1340.     @sprite.bitmap.dispose
  1341.     @sprite.dispose
  1342.   end
  1343. end #achievement_graphic
  1344.  
  1345. #==============================================================================
  1346. # ** Achievement_Banner
  1347. #------------------------------------------------------------------------------
  1348. #  Classe che gestisce l'aggiornamento e la comparsa di tutti i pop-up
  1349. #==============================================================================
  1350. class Achievement_Banner
  1351.   #---------------------------------------------------------------------------
  1352.   # * inizializzazione
  1353.   #---------------------------------------------------------------------------
  1354.   def initialize
  1355.     @waiting_list = []  #lista d'attesa per altri obiettivi
  1356.     @banner = nil
  1357.   end
  1358.   #---------------------------------------------------------------------------
  1359.   # * aggiunta di un nuovo banner
  1360.   #   achievement: obiettivo
  1361.   #---------------------------------------------------------------------------
  1362.   def push_banner(achievement)
  1363.     if @banner != nil
  1364.       @waiting_list.push(achievement)
  1365.     else
  1366.       add_banner(achievement)
  1367.     end
  1368.   end
  1369.   #---------------------------------------------------------------------------
  1370.   # * aggiunta del banner
  1371.   #   achievement: obiettivo bersaglio
  1372.   #---------------------------------------------------------------------------
  1373.   def add_banner(achievement)
  1374.     RPG::ME.stop if H87_Achievements::PlayME
  1375.     play_sound
  1376.     @banner = Achievement_Graphic.new(achievement)
  1377.   end
  1378.   #---------------------------------------------------------------------------
  1379.   # * esecuzione del suono
  1380.   #---------------------------------------------------------------------------
  1381.   def play_sound
  1382.     if H87_Achievements::PlayME
  1383.       RPG::ME.new(H87_Achievements::SE).play
  1384.     else
  1385.       RPG::SE.new(H87_Achievements::SE).play
  1386.     end
  1387.   end
  1388.   #---------------------------------------------------------------------------
  1389.   # * aggiornamento
  1390.   #---------------------------------------------------------------------------
  1391.   def update
  1392.     if @banner != nil
  1393.       @banner.update
  1394.       next_banner if @banner.disappeared?
  1395.     end
  1396.   end
  1397.   #---------------------------------------------------------------------------
  1398.   # * passa al prossimo banner
  1399.   #---------------------------------------------------------------------------
  1400.   def next_banner
  1401.     @banner.dispose
  1402.     if @waiting_list.size > 0
  1403.       add_banner(@waiting_list[0])
  1404.       @waiting_list.delete_at(0)
  1405.     else
  1406.       @banner = nil
  1407.     end
  1408.   end
  1409.   #---------------------------------------------------------------------------
  1410.   # * nascondi tutti i banner
  1411.   #---------------------------------------------------------------------------
  1412.   def hide
  1413.     return if @banner == nil
  1414.     @waiting_list = []
  1415.     @banner.dispose
  1416.     @banner = nil
  1417.   end
  1418. end #achievement_banner
  1419.  
  1420. #==============================================================================
  1421. # ** Game_Party
  1422. #------------------------------------------------------------------------------
  1423. #  Aggiunta dei controlli per lo sblocco degli obiettivi
  1424. #==============================================================================
  1425. class Game_Party < Game_Unit
  1426.   #---------------------------------------------------------------------------
  1427.   # * alias metodo gain_gold
  1428.   #---------------------------------------------------------------------------
  1429.   alias h87_Ach_gain_gold gain_gold unless $@
  1430.   def gain_gold(n)
  1431.     h87_Ach_gain_gold(n)
  1432.     gain_total_gold(n)
  1433.   end
  1434.   #---------------------------------------------------------------------------
  1435.   # * alias metodo gain_item
  1436.   #---------------------------------------------------------------------------
  1437.   alias h87ach_gain_item gain_item unless $@
  1438.   def gain_item(item, n, include_equip = false)
  1439.     h87ach_gain_item(item, n, include_equip)
  1440.     gain_item_in_total(item,n) if n > 0 and item.is_a?(RPG::Item)
  1441.   end
  1442.   #---------------------------------------------------------------------------
  1443.   # * aggiunge l'hash degli oggetti totali
  1444.   #---------------------------------------------------------------------------
  1445.   def gain_item_in_total(item,n)
  1446.     @total_items = {} if @total_items == nil
  1447.     @total_items[item.id] = 0 if @total_items[item.id] == nil
  1448.     @total_items[item.id] += n
  1449.     H87_Achievements.check(14,item.id)
  1450.   end
  1451.   #---------------------------------------------------------------------------
  1452.   # * restituisce il totale di oggetti ottenuti
  1453.   #---------------------------------------------------------------------------
  1454.   def total_items(id)
  1455.     @total_items = {} if @total_items == nil
  1456.     return 0 if @total_items[id] == nil
  1457.     return @total_items[id]
  1458.   end
  1459.   #---------------------------------------------------------------------------
  1460.   # * restituisce l'oro totale ottenuto nel corso del gioco
  1461.   #---------------------------------------------------------------------------
  1462.   def total_gold
  1463.     @total_gold = 0 if @total_gold == nil
  1464.     return @total_gold
  1465.   end
  1466.   #---------------------------------------------------------------------------
  1467.   # * aggiunge l'oro al totale
  1468.   #---------------------------------------------------------------------------
  1469.   def gain_total_gold(n)
  1470.     @total_gold = 0 if @total_gold == nil
  1471.     @total_gold += n
  1472.     H87_Achievements.check(3)
  1473.     H87_Achievements.check(4)
  1474.   end
  1475.   #---------------------------------------------------------------------------
  1476.   # * restituisce il max livello del gruppo escludendo alcuni personaggi
  1477.   #---------------------------------------------------------------------------
  1478.   def total_max_level
  1479.     ml = 0
  1480.     for member in $game_party.members
  1481.       next if H87_Achievements::ExludedMembers.include?(member.id)
  1482.       ml = member.level if member.level > ml
  1483.     end
  1484.     return ml
  1485.   end
  1486.   #---------------------------------------------------------------------------
  1487.   # * alias metodo increase_steps per aggiungere un controllo
  1488.   #---------------------------------------------------------------------------
  1489.   alias h87ach_is increase_steps unless $@
  1490.   def increase_steps
  1491.     h87ach_is
  1492.     H87_Achievements.check(6)
  1493.   end
  1494.   #---------------------------------------------------------------------------
  1495.   # * restituisce il totale speso nei negozi
  1496.   #---------------------------------------------------------------------------
  1497.   def total_gold_spent
  1498.     @total_gold_spent = 0 if @total_gold_spent == nil
  1499.     return @total_gold_spent
  1500.   end
  1501.   #---------------------------------------------------------------------------
  1502.   # * aggiunge un valore al totale speso nei negozi
  1503.   #---------------------------------------------------------------------------
  1504.   def total_gold_spent=(n)
  1505.     @total_gold_spent = 0 if @total_gold_spent == nil
  1506.     @total_gold_spent = n
  1507.     H87_Achievements.check(11)
  1508.   end
  1509.   #---------------------------------------------------------------------------
  1510.   # * restituisce le battaglie totali che ha effettuato il giocatore
  1511.   #---------------------------------------------------------------------------
  1512.   def total_battles
  1513.     @total_battles = 0 if @total_battles == nil
  1514.     return @total_battles
  1515.   end
  1516.   #---------------------------------------------------------------------------
  1517.   # * cambia le battaglie totali
  1518.   #---------------------------------------------------------------------------
  1519.   def total_battles=(n)
  1520.     @total_battles = 0 if @total_battles == nil
  1521.     @total_battles = n
  1522.     H87_Achievements.check(10)
  1523.   end
  1524.   #---------------------------------------------------------------------------
  1525.   # * restituisce le vittorie totali del giocatore
  1526.   #---------------------------------------------------------------------------
  1527.   def total_victories
  1528.     @total_victories = 0 if @total_victories == nil
  1529.     return @total_victories
  1530.   end
  1531.   #---------------------------------------------------------------------------
  1532.   # * cambia le vittorie totali
  1533.   #---------------------------------------------------------------------------
  1534.   def total_victories=(n)
  1535.     @total_victories = 0 if @total_victories == nil
  1536.     @total_victories = n
  1537.   end
  1538.   #---------------------------------------------------------------------------
  1539.   # * restituisce le fughe totali del giocatore
  1540.   #---------------------------------------------------------------------------
  1541.   def total_escapes
  1542.     @total_escapes = 0 if @total_escapes == nil
  1543.     return @total_escapes
  1544.   end
  1545.   #---------------------------------------------------------------------------
  1546.   # * cambia le fughe totali
  1547.   #---------------------------------------------------------------------------
  1548.   def total_escapes=(n)
  1549.     @total_escapes = 0 if @total_escapes == nil
  1550.     @total_escapes = n
  1551.   end
  1552.   #---------------------------------------------------------------------------
  1553.   # * restituisce il denaro totale guadagnato vendendo oggetti
  1554.   #---------------------------------------------------------------------------
  1555.   def total_sell
  1556.     @total_sell = 0 if @total_sell == nil
  1557.     return @total_sell
  1558.   end
  1559.   #---------------------------------------------------------------------------
  1560.   # * cambia il totale oggetti
  1561.   #---------------------------------------------------------------------------
  1562.   def total_sell=(n)
  1563.     @total_sell = 0 if @total_sell == nil
  1564.     @total_sell = n
  1565.     H87_Achievements.check(12)
  1566.   end
  1567.   #---------------------------------------------------------------------------
  1568.   # * Restituisce il totale dei nemici uccisi
  1569.   #---------------------------------------------------------------------------
  1570.   def enemies_killed
  1571.     @enemies_killed = 0 unless @enemies_killed
  1572.     @enemies_killed
  1573.   end
  1574.   #---------------------------------------------------------------------------
  1575.   # * Restituisce il numero di un certo tipo di nemici uccisi
  1576.   #---------------------------------------------------------------------------
  1577.   def enemy_killed(enemy_id)
  1578.     @enemy_killed = {} unless @enemy_killed
  1579.     @enemy_killed[enemy_id] = 0 unless @enemy_killed[enemy_id]
  1580.     @enemy_killed[enemy_id]
  1581.   end
  1582.   #---------------------------------------------------------------------------
  1583.   # * Aggiunge un nemico ucciso
  1584.   #---------------------------------------------------------------------------
  1585.   def add_enemy_killed(enemy_id)
  1586.     println enemy_id
  1587.     @enemies_killed = 0 if @enemies_killed.nil?
  1588.     @enemies_killed += 1
  1589.     @enemy_killed = {} if @enemy_killed.nil?
  1590.     @enemy_killed[enemy_id] = 0 if @enemy_killed[enemy_id].nil?
  1591.     @enemy_killed[enemy_id] += 1
  1592.     H87_Achievements.check(16)
  1593.     H87_Achievements.check(17)
  1594.   end
  1595.   #---------------------------------------------------------------------------
  1596.   # * Restituisce il danno totale inflitto dal gruppo sui nemici
  1597.   #---------------------------------------------------------------------------
  1598.   def total_damage_dealed
  1599.     @total_damage_dealed = 0 unless @total_damage_dealed
  1600.     @total_damage_dealed
  1601.   end
  1602.   #---------------------------------------------------------------------------
  1603.   # * Aggiunge del danno al totale
  1604.   #---------------------------------------------------------------------------
  1605.   def add_damage_dealed(damage)
  1606.     @total_damage_dealed = 0 unless @total_damage_dealed
  1607.     @total_damage_dealed += damage
  1608.     H87_Achievements.check(18)
  1609.   end
  1610.   #---------------------------------------------------------------------------
  1611.   # * Aggiunge la cura al totale
  1612.   #---------------------------------------------------------------------------
  1613.   def add_total_heal(heal)
  1614.     @total_heal = 0 if @total_heal.nil?
  1615.     @total_heal += heal
  1616.     H87_Achievements.check(22)
  1617.   end
  1618.   #---------------------------------------------------------------------------
  1619.   # * Restituisce la cura totale
  1620.   #---------------------------------------------------------------------------
  1621.   def total_heal
  1622.     @total_heal = 0 if @total_heal.nil?
  1623.     @total_heal
  1624.   end
  1625. end #game_party
  1626.  
  1627. #==============================================================================
  1628. # ** Game_System
  1629. #------------------------------------------------------------------------------
  1630. #  Aggiunta controlli per il numero di salvataggi
  1631. #==============================================================================
  1632. class Game_System
  1633.   #---------------------------------------------------------------------------
  1634.   # * aggiunge il controllo salvataggi al conteggio
  1635.   #---------------------------------------------------------------------------
  1636.   alias h87ach_on_before_save on_before_save unless $@
  1637.   def on_before_save
  1638.     h87ach_on_before_save
  1639.     H87_Achievements.check(7)
  1640.   end
  1641. end #game_system
  1642.  
  1643. #==============================================================================
  1644. # ** Scene_Battle
  1645. #------------------------------------------------------------------------------
  1646. #  Controllo obiettivi quando si combatte
  1647. #==============================================================================
  1648. class Scene_Battle < Scene_Base
  1649.   #---------------------------------------------------------------------------
  1650.   # * alias start per aumentare le battaglie totali
  1651.   #---------------------------------------------------------------------------
  1652.   alias h87ach_start start unless $@
  1653.   def start
  1654.     h87ach_start
  1655.     $game_party.total_battles += 1
  1656.   end
  1657.   #---------------------------------------------------------------------------
  1658.   # * alias update_basic per l'aggiornamendo del popup in battaglia
  1659.   #---------------------------------------------------------------------------
  1660.   alias h87_ach_up_basic update_basic unless $@
  1661.   def update_basic
  1662.     h87_ach_up_basic
  1663.     update_ach_animat
  1664.   end
  1665. end #scene_battle
  1666.  
  1667. #==============================================================================
  1668. # ** BattleManager
  1669. #------------------------------------------------------------------------------
  1670. #  Controllo obiettivi in battaglia
  1671. #==============================================================================
  1672. module BattleManager
  1673.   class << self
  1674.     alias h87ach_process_victory process_victory
  1675.     alias h87ach_pe process_escape
  1676.     alias h87_ach_te turn_end
  1677.     alias h87_ach_setup setup
  1678.   end
  1679.   #---------------------------------------------------------------------------
  1680.   # * alias inizio battaglia
  1681.   #---------------------------------------------------------------------------
  1682.   def self.setup(troop_id, can_escape = true, can_lose = false)
  1683.     h87_ach_setup(troop_id, can_escape, can_lose)
  1684.     @enemies_killed = 0
  1685.     @turn_damage = 0
  1686.   end
  1687.   #---------------------------------------------------------------------------
  1688.   # * alias vittoria per aumentare le vittorie totali
  1689.   #---------------------------------------------------------------------------
  1690.   def self.process_victory
  1691.     h87ach_process_victory
  1692.     $game_party.total_victories += 1
  1693.     H87_Achievements.check(20)
  1694.     H87_Achievements.check(21)
  1695.   end
  1696.   #---------------------------------------------------------------------------
  1697.   # * alias fuga per aumentare le fughe totali
  1698.   #---------------------------------------------------------------------------
  1699.   def self.process_escape
  1700.     success = h87ach_pe
  1701.     $game_party.total_escapes += 1 if success
  1702.     return success
  1703.   end
  1704.   #---------------------------------------------------------------------------
  1705.   # * aggiunta nemici uccisi nel turno
  1706.   #---------------------------------------------------------------------------
  1707.   def self.add_enemy_killed
  1708.     @enemies_killed += 1
  1709.   end
  1710.   #---------------------------------------------------------------------------
  1711.   # * aggiunte il danno nel turno
  1712.   #---------------------------------------------------------------------------
  1713.   def self.add_turn_damage(damage)
  1714.     @turn_damage += damage
  1715.   end
  1716.   #---------------------------------------------------------------------------
  1717.   # * restituisce i nemici uccisi nel turno
  1718.   #---------------------------------------------------------------------------
  1719.   def self.enemies_killed
  1720.     @enemies_killed
  1721.   end
  1722.   #---------------------------------------------------------------------------
  1723.   # * restituisce il danno causato in un turno
  1724.   #---------------------------------------------------------------------------
  1725.   def self.turn_damage
  1726.     @turn_damage
  1727.   end
  1728.   #---------------------------------------------------------------------------
  1729.   # * fine del turno
  1730.   #---------------------------------------------------------------------------
  1731.   def self.turn_end
  1732.     h87_ach_te
  1733.     H87_Achievements.check(20)
  1734.     H87_Achievements.check(21)
  1735.     @enemies_killed = 0
  1736.     @turn_damage = 0
  1737.   end
  1738. end #battlemanager
  1739.  
  1740. #==============================================================================
  1741. # ** Scene_Shop
  1742. #------------------------------------------------------------------------------
  1743. #  Controllo obiettivi sull'acquisto
  1744. #==============================================================================
  1745. class Scene_Shop < Scene_MenuBase
  1746.   alias h87ach_do_buy do_buy unless $@
  1747.   alias h87ach_do_sell do_sell unless $@
  1748.   #---------------------------------------------------------------------------
  1749.   # * Alias dell'azione di acquisto
  1750.   #---------------------------------------------------------------------------
  1751.   def do_buy(number)
  1752.     h87ach_do_buy(number)
  1753.     $game_party.total_gold_spent += (number * buying_price)
  1754.   end
  1755.   #--------------------------------------------------------------------------
  1756.   # * Alias della vendita
  1757.   #--------------------------------------------------------------------------
  1758.   def do_sell(number)
  1759.     h87ach_do_sell(number)
  1760.     $game_party.total_sell += (number * selling_price)
  1761.   end
  1762. end #scene_shop
  1763.  
  1764. #==============================================================================
  1765. # ** Scene_Map
  1766. #------------------------------------------------------------------------------
  1767. #  Aggiunta dei banner degli obiettivi
  1768. #==============================================================================
  1769. class Scene_Map < Scene_Base
  1770.   alias h87_ach_start start unless $@
  1771.   #--------------------------------------------------------------------------
  1772.   # * Inizio
  1773.   #--------------------------------------------------------------------------
  1774.   def start
  1775.     h87_ach_start
  1776.     H87_Achievements.check(8)
  1777.     H87_Achievements.check(9)
  1778.   end
  1779. end #scene_map
  1780.  
  1781. #==============================================================================
  1782. # ** Game_Actor
  1783. #------------------------------------------------------------------------------
  1784. #  Controllo sul livello superiore
  1785. #==============================================================================
  1786. class Game_Actor < Game_Battler
  1787.   alias h87a_lu level_up unless $@
  1788.   #---------------------------------------------------------------------------
  1789.   # * alias del metodo level_up per controllare gli obiettivi su livello
  1790.   #---------------------------------------------------------------------------
  1791.   def level_up
  1792.     h87a_lu
  1793.     H87_Achievements.check(5)
  1794.   end
  1795.   #---------------------------------------------------------------------------
  1796.   # * conteggio morti
  1797.   #---------------------------------------------------------------------------
  1798.   def dead_count
  1799.     @dead_count = 0 if @dead_count.nil?
  1800.     @dead_count
  1801.   end
  1802.   #---------------------------------------------------------------------------
  1803.   # * aggiunge una morte al conteggio
  1804.   #---------------------------------------------------------------------------
  1805.   def dead_count=(value)
  1806.     @dead_count = 0 if @dead_count.nil?
  1807.     @dead_count += value
  1808.     H87_Achievements.check(23)
  1809.   end
  1810. end #game_actor
  1811.  
  1812. #==============================================================================
  1813. # ** Window_MenuCommand
  1814. #------------------------------------------------------------------------------
  1815. #  Aggiunta del comando Obiettivi
  1816. #==============================================================================
  1817. class Window_MenuCommand < Window_Command
  1818.   alias h87_ach_origc add_original_commands unless $@
  1819.   #--------------------------------------------------------------------------
  1820.   # * aggiunta del comando
  1821.   #--------------------------------------------------------------------------
  1822.   def add_original_commands
  1823.     h87_ach_origc
  1824.     add_command(H87_Achievements::ACHVTEXT, :achievements) if ach_enabled
  1825.   end
  1826.   #--------------------------------------------------------------------------
  1827.   # * restituisce se il comando obiettivi è abilitato
  1828.   #--------------------------------------------------------------------------
  1829.   def ach_enabled
  1830.     return false unless H87_Achievements::ShowMenu
  1831.     return false if H87_Achievements::MenuSw > 0 and !$game_switches[H87_Achievements::MenuSw]
  1832.     return true
  1833.   end
  1834. end #menucommand
  1835.  
  1836. #==============================================================================
  1837. # ** Game_Battler
  1838. #------------------------------------------------------------------------------
  1839. #  Controllo al danneggiamento dei nemici
  1840. #==============================================================================
  1841. class Game_Battler < Game_BattlerBase
  1842.   alias h87_ach_die die unless $@
  1843.   alias h87_ach_execute_damage execute_damage unless $@
  1844.   #--------------------------------------------------------------------------
  1845.   # * Alias metodo morte
  1846.   #--------------------------------------------------------------------------
  1847.   def die
  1848.     h87_ach_die
  1849.     if self.enemy?
  1850.       $game_party.add_enemy_killed(self.enemy_id)
  1851.       BattleManager.add_enemy_killed
  1852.     else
  1853.       self.dead_count += 1
  1854.     end
  1855.   end
  1856.   #--------------------------------------------------------------------------
  1857.   # * Processo danno
  1858.   #--------------------------------------------------------------------------
  1859.   def execute_damage(user)
  1860.     h87_ach_execute_damage(user)
  1861.     if user.actor?
  1862.       if @result.hp_damage > 0 && self.enemy?
  1863.         H87_Achievements.check(19, @result.hp_damage)
  1864.         $game_party.add_damage_dealed(@result.hp_damage)
  1865.       end
  1866.       if @result.hp_damage < 0 && self.actor?
  1867.         H87_Achievements.check(22, @result.hp_damage*-1)
  1868.         $game_party.add_total_heal(@result.hp_damage*-1)
  1869.       end
  1870.     end
  1871.   end
  1872. end
  1873.  
  1874. #==============================================================================
  1875. # ** Scene_Menu
  1876. #------------------------------------------------------------------------------
  1877. #  Aggiunta della schermata degli obiettivi nel menu
  1878. #==============================================================================
  1879. class Scene_Menu < Scene_MenuBase
  1880.   alias h87_ach_ccw create_command_window unless $@
  1881.   #--------------------------------------------------------------------------
  1882.   # * Create Command Window
  1883.   #--------------------------------------------------------------------------
  1884.   def create_command_window
  1885.     h87_ach_ccw
  1886.     @command_window.set_handler(:achievements, method(:go_achievements))
  1887.   end
  1888.   #---------------------------------------------------------------------------
  1889.   # * metodo di passaggio alla schermata degli obiettivi
  1890.   #---------------------------------------------------------------------------
  1891.   def go_achievements
  1892.     $ingame = true
  1893.     SceneManager.call(Scene_Achievements)
  1894.   end
  1895. end #scenemenu
  1896.  
  1897. #==============================================================================
  1898. # ** Game_Options
  1899. #------------------------------------------------------------------------------
  1900. #  Aggiunta dell'opzione se è impostato lo script
  1901. #==============================================================================
  1902. if $imported["H87_Options"] && H87_Achievements::OPT_ENABLED
  1903.   hash = { :type => :switch, :text => H87_Achievements::OPT_TEXT,
  1904.     :help => H87_Achievements::OPT_HELP, :sw => H87_Achievements::OPT_SWITCH,
  1905.     :on => H87_Achievements::OPT_ON, :off => H87_Achievements::OPT_OFF,
  1906.     :default => true
  1907.   }
  1908.   H87Options.push_game_option(hash)
  1909. 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