Holy87

Achievements - Ace

Jul 16th, 2013
706
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