设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1140|回复: 1
打印 上一主题 下一主题

[已经过期] MOG_Damage_Popup在更換职业时弹错, 求修复

[复制链接]

Lv5.捕梦者

梦石
0
星屑
26264
在线时间
5355 小时
注册时间
2016-3-8
帖子
1655
跳转到指定楼层
1
发表于 2020-9-12 23:36:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
一直都没发现会弹错, 直到剛测试一个能在更換装备后更換职业的脚本时才发现
打开官方Demo加个事件的更換职业指令也报错 , 所以不是与其他脚本沖突
求修复


RUBY 代码复制
  1. #==============================================================================
  2. # +++ MOG - DAMAGEPOPUP  (v4.5) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # [url]https://atelierrgss.wordpress.com/[/url]
  6. #==============================================================================
  7. # Apresenta danos dos alvos em imagens.
  8. #==============================================================================
  9. # Serão necessários as imagems
  10. #
  11. # Critical
  12. # Evaded
  13. # Exp
  14. # Gold
  15. # Level Up
  16. # Missed
  17. # MP
  18. # Number
  19. # TP
  20. #
  21. # As imagens devem ficar na pasta /GRAPHICS/DAMAGE/
  22. #==============================================================================
  23.  
  24. #==============================================================================
  25. # DAMAGE POPUP FOR CHARACTERS (Events)
  26. #==============================================================================
  27. # Caso desejar ativar manualmente os danos nos characters, basta usar os códigos
  28. # abaixo.
  29. #
  30. # damage_popup(TARGET_ID,VALUE,"TYPE")
  31. #
  32. # TARGET_ID
  33. #      1...999 - Define a ID  do evento no mapa
  34. #      0 - Define a ID sendo do jogador.(Player)
  35. #      -1...-3 - Define  a ID dos aliados (Followers).
  36. #
  37. # VALUE
  38. #       Define o valor em dano (Pode ser valores negativos) ou um texto.
  39. #       No caso das codições defina a ID da condição. (Valore negativos
  40. #       é apresentado a condição sendo removida.)
  41. #
  42. # TYPE (Opcional)
  43. #      So use está opção para ativar srtings especiais.
  44. #
  45. #      "Exp" - Valor da string se torna em EXP.
  46. #      "Gold" - Valor da string se torna em GOLD.
  47. #      "States" - É apresentado o ícone e o nome da condição da condição.
  48. #
  49. #==============================================================================
  50. #
  51. # damage_popup(1,999)
  52. # damage_popup(4,"Save Point.")
  53. # damage_popup(0,"I'm hungry!!!")            <- (Player)
  54. # damage_popup(-1,"Booo!")                   <- (Follower ID1)
  55. # damage_popup(0,2000,"Exp")                 <- Popup 2000 Exp
  56. # damage_popup(0,5000,"Gold")                <- Popup 5000 Gold
  57. #
  58. #==============================================================================
  59. # Use o código abaixo se desejar fazer o dano aparecer em todos os personagens.
  60. #
  61. # damage_popup_party(TARGET_ID,STRING,"TYPE")
  62. #
  63. #==============================================================================
  64. # ATIVAR OU DESATIVAR OS DANOS NO MAPA.
  65. #==============================================================================
  66. # É possível usar o código abaixo para ativar ou desativar a dano no mapa
  67. # no meio do jogo, útil se você não quiser que alguma string de item ou
  68. # dano apareça no meio de algum evento ou cena.
  69. #
  70. # damage_popup_map(true)        -> or (false)
  71. #  
  72. #==============================================================================
  73. # ● Histórico (Version History)
  74. #==============================================================================
  75. # v 4.5 - Correção de ativar o dano quando o alvo é morto e o dano é zero.
  76. #==============================================================================
  77.  
  78. $imported = {} if $imported.nil?
  79. $imported[:mog_damage_popup] = true
  80.  
  81. module MOG_DAMAGEPOPUP
  82.   #Ativar as strings de dano no mapa. (Default / Inicial)
  83.   DAMAGE_POPUP_MAP = false
  84.   #Apresentar o item ao ganhar. (Apenas no mapa).
  85.   ITEM_POPUP_MAP = true
  86.   #Apresentar a exp e ouro do inimigo.
  87.   EXP_GOLD_POPUP_BATTLE = true
  88.   EXP_GOLD_POPUP_MAP = true
  89.   #Ativar a string de Level UP
  90.   LEVEL_POPUP_BATTLE = true
  91.   LEVEL_POPUP_MAP = true
  92.   #Ativar as strings nas condições.
  93.   STATES_POPUP_BATTLE = true
  94.   STATES_POPUP_MAP = true
  95.   #Definição da fonte (Nome de itens/ condições / etc...).
  96.   FONT_SIZE = 28
  97.   FONT_BOLD = true
  98.   FONT_ITALIC = false
  99.   FONT_COLOR = Color.new(255,255,255)
  100.   FONT_COLOR_ITEM = Color.new(255,255,255)
  101.   FONT_COLOR_STATUS_PLUS = Color.new(155,155,255)
  102.   FONT_COLOR_STATUS_MINUS = Color.new(255,150,150)
  103.   #Definição do espaço entre os danos.
  104.   Y_SPACE = 28
  105.   #Definição da posição Z do srpite.
  106.   DAMAGE_Z = 151
  107. end
  108.  
  109. #==============================================================================
  110. # ■ Game_System
  111. #==============================================================================
  112. class Game_System
  113.   attr_accessor :damage_popup_map
  114.  
  115.   #--------------------------------------------------------------------------
  116.   # ● Initialize
  117.   #--------------------------------------------------------------------------         
  118.   alias mog_damage_popup_initialize initialize
  119.   def initialize
  120.       @damage_popup_map = MOG_DAMAGEPOPUP::DAMAGE_POPUP_MAP
  121.       mog_damage_popup_initialize
  122.   end
  123.  
  124.   #--------------------------------------------------------------------------
  125.   # ● Damage Popup Clear
  126.   #--------------------------------------------------------------------------         
  127.   def damage_popup_clear
  128.       $game_party.character_members.each {|t|
  129.       t.actor.damage.clear; t.actor.skip_dmg_popup = false ;
  130.       t.damage.clear; t.skip_dmg_popup = false} rescue nil
  131.       $game_map.events.values.each {|t| t.damage.clear ;
  132.       t.skip_dmg_popup = false} rescue nil
  133.   end
  134.  
  135. end  
  136.  
  137. #==============================================================================
  138. # ■ Game Temp
  139. #==============================================================================
  140. class Game_Temp
  141.  
  142.   attr_accessor :battle_end
  143.  
  144.   #--------------------------------------------------------------------------
  145.   # ● Initialize
  146.   #--------------------------------------------------------------------------   
  147.   alias mog_damage_temp_opup_initialize initialize
  148.   def initialize
  149.       @battle_end = false
  150.       mog_damage_temp_opup_initialize
  151.   end
  152.  
  153.   #--------------------------------------------------------------------------
  154.   # ● Sprite Visible
  155.   #--------------------------------------------------------------------------   
  156.   def sprite_visible
  157.       return false if $game_message.visible
  158.       return false if $game_temp.battle_end
  159.       return true
  160.   end
  161.  
  162. end
  163. #==============================================================================
  164. # ■ Game CharacterBase
  165. #==============================================================================
  166. class Game_CharacterBase
  167.  
  168.   attr_accessor :damage ,:battler ,:skip_dmg_popup
  169.  
  170.   #--------------------------------------------------------------------------
  171.   # ● Ini Public Members
  172.   #--------------------------------------------------------------------------         
  173.   alias mog_damage_popup_init_public_members init_public_members
  174.   def init_public_members
  175.       @damage = [] ; @skip_dmg_popup = false
  176.       mog_damage_popup_init_public_members
  177.   end
  178.  
  179.   #--------------------------------------------------------------------------
  180.   # ● Damage Popup
  181.   #--------------------------------------------------------------------------         
  182.   def damage_popup(value,type = "String")      
  183.       @damage.push([value,type])
  184.   end  
  185.  
  186. end
  187.  
  188. #==============================================================================
  189. # ■ Scene Map
  190. #==============================================================================
  191. class Scene_Map < Scene_Base  
  192.   #--------------------------------------------------------------------------
  193.   # ● Start
  194.   #--------------------------------------------------------------------------
  195.   alias mog_damage_popup_start start
  196.   def start
  197.       $game_system.damage_popup_clear ; $game_temp.battle_end = false
  198.       mog_damage_popup_start
  199.   end  
  200. end
  201.  
  202. #==============================================================================
  203. # ■ Game Player
  204. #==============================================================================
  205. class Game_Player < Game_Character   
  206.   #--------------------------------------------------------------------------
  207.   # ● Battler
  208.   #--------------------------------------------------------------------------
  209.   def battler
  210.       actor
  211.   end   
  212. end
  213.  
  214. #==============================================================================
  215. # ■ Game Follower
  216. #==============================================================================
  217. class Game_Follower < Game_Character  
  218.   #--------------------------------------------------------------------------
  219.   # ● Battler
  220.   #--------------------------------------------------------------------------
  221.   def battler
  222.       actor
  223.   end   
  224. end
  225.  
  226. #==============================================================================
  227. # ■ Game_BattlerBase
  228. #==============================================================================
  229. class Game_BattlerBase  
  230.   #--------------------------------------------------------------------------
  231.   # ● Change HP
  232.   #--------------------------------------------------------------------------         
  233.   alias mog_damage_popup_change_hp change_hp
  234.   def change_hp(value, enable_death)
  235.       mog_damage_popup_change_hp(value, enable_death)
  236.       self.damage.push([-value,"Hp"])
  237.   end   
  238. end
  239.  
  240. #==============================================================================
  241. # ■ Game_Battler
  242. #==============================================================================
  243. class Game_Battler < Game_BattlerBase  
  244.   include MOG_DAMAGEPOPUP
  245.   attr_accessor :damage , :skip_dmg_popup
  246.  
  247.   #--------------------------------------------------------------------------
  248.   # ● Initialize
  249.   #--------------------------------------------------------------------------         
  250.   alias mog_damage_sprite_initialize initialize
  251.   def initialize      
  252.       @damage = [] ; @skip_dmg_popup = false
  253.       mog_damage_sprite_initialize
  254.   end  
  255.  
  256.   #--------------------------------------------------------------------------
  257.   # ● Item Apply
  258.   #--------------------------------------------------------------------------  
  259.    alias mog_damage_pop_item_apply item_apply
  260.    def item_apply(user, item)
  261.        mog_damage_pop_item_apply(user, item)
  262.        execute_damage_popup(user,item)
  263.   end
  264.  
  265.   #--------------------------------------------------------------------------
  266.   # ● Execute Damage Popup
  267.   #--------------------------------------------------------------------------
  268.   def execute_damage_popup(user,item)
  269.       if !@result.missed and !@result.evaded and @result.hit?
  270.         self.damage.push([@result.hp_damage,"HP",@result.critical]) if item.damage.to_hp? or @result.hp_damage != 0
  271.         user.damage.push([-@result.hp_drain,"HP",@result.critical]) if item.damage.type == 5
  272.         self.damage.push([@result.mp_damage,"MP",@result.critical]) if item.damage.to_mp? or @result.mp_damage != 0
  273.         user.damage.push([-@result.mp_drain,"MP",@result.critical]) if item.damage.type == 6
  274.         self.damage.push([@result.tp_damage,"TP",@result.critical]) if @result.tp_damage != 0
  275.      elsif !self.dead?
  276.         if @result.missed ; self.damage.push(["Missed","Missed"])
  277.         elsif @result.evaded ; self.damage.push(["Evaded","Evaded"])
  278.         end        
  279.       end
  280.   end
  281.  
  282.   #--------------------------------------------------------------------------
  283.   # ● Regenerate HP
  284.   #--------------------------------------------------------------------------
  285.   alias mog_damage_pop_regenerate_hp regenerate_hp
  286.   def regenerate_hp
  287.       mog_damage_pop_regenerate_hp
  288.       self.damage.push(["Regenerate",""]) if @result.hp_damage < 0  
  289.       self.damage.push([@result.hp_damage,"HP"]) if @result.hp_damage != 0
  290.   end
  291.  
  292.   #--------------------------------------------------------------------------
  293.   # ● Regenerate MP
  294.   #--------------------------------------------------------------------------
  295.   alias mog_damage_pop_regenerate_mp regenerate_mp
  296.   def regenerate_mp
  297.       mog_damage_pop_regenerate_mp
  298.       self.damage.push([@result.mp_damage,"MP"]) if @result.mp_damage != 0
  299.   end
  300.  
  301.   #--------------------------------------------------------------------------
  302.   # ● Regenerate TP
  303.   #--------------------------------------------------------------------------
  304.   alias mog_damage_pop_regenerate_tp regenerate_tp
  305.   def regenerate_tp
  306.       mog_damage_pop_regenerate_tp
  307.       tp_damage = 100 * trg
  308.       self.damage.push([tp_damage,"TP"]) if tp_damage != 0
  309.   end
  310.  
  311.   #--------------------------------------------------------------------------
  312.   # ● Added New State
  313.   #--------------------------------------------------------------------------  
  314.   alias mog_damage_pop_add_new_state add_new_state
  315.   def add_new_state(state_id)
  316.       mog_damage_pop_add_new_state(state_id)
  317.       execute_popup_add_new_state(state_id)
  318.   end
  319.  
  320.   #--------------------------------------------------------------------------
  321.   # ● Execute Popup Add New State
  322.   #--------------------------------------------------------------------------  
  323. def execute_popup_add_new_state(state_id)
  324.       st = $data_states[state_id]
  325.       if self.hp > 0
  326.          unless (SceneManager.scene_is?(Scene_Battle) and !STATES_POPUP_BATTLE) or
  327.                 (SceneManager.scene_is?(Scene_Map) and !STATES_POPUP_MAP)
  328.                 self.damage.push([st.name.to_s,"States Plus",false,st.icon_index])
  329.          end
  330.       end
  331.   end
  332.  
  333.   #--------------------------------------------------------------------------
  334.   # ● Remove State
  335.   #--------------------------------------------------------------------------  
  336.   alias mog_damage_pop_remove_state remove_state
  337.   def remove_state(state_id)
  338.       execute_popup_remove_state(state_id)  
  339.       mog_damage_pop_remove_state(state_id)
  340.   end      
  341.  
  342.   #--------------------------------------------------------------------------
  343.   # ● Execute Popup Remove State
  344.   #--------------------------------------------------------------------------  
  345.   def execute_popup_remove_state(state_id)  
  346.       if state?(state_id) and self.hp > 0
  347.          st = $data_states[state_id]
  348.          unless (SceneManager.scene_is?(Scene_Battle) and !STATES_POPUP_BATTLE) or
  349.                 (SceneManager.scene_is?(Scene_Map) and !STATES_POPUP_MAP)
  350.                 self.damage.push([st.name.to_s,"States Minus",false,st.icon_index]) unless BattleManager.escape?
  351.          end
  352.       end
  353.   end     
  354.  
  355. end
  356.  
  357. #==============================================================================
  358. # ■ BattleManager
  359. #==============================================================================
  360. module BattleManager
  361.   #--------------------------------------------------------------------------
  362.   # ● Escape?
  363.   #--------------------------------------------------------------------------
  364.   def self.escape?
  365.       @phase == nil
  366.   end  
  367. end
  368.  
  369. #==============================================================================
  370. # ■ Game_Temp
  371. #==============================================================================
  372. class Game_Temp
  373.   attr_accessor :dmg_battle_mode
  374.  
  375.   #--------------------------------------------------------------------------
  376.   # ● Initialize
  377.   #--------------------------------------------------------------------------         
  378.   alias mog_damage_popup_initialize initialize
  379.   def initialize
  380.       @dmg_battle_mode = false
  381.       mog_damage_popup_initialize
  382.   end
  383.  
  384. end
  385.  
  386. #==============================================================================
  387. # ■ Scene Battle
  388. #==============================================================================
  389. class Scene_Battle < Scene_Base
  390.  
  391.   #--------------------------------------------------------------------------
  392.   # ● Start
  393.   #--------------------------------------------------------------------------         
  394.   alias mog_damage_popup_start start
  395.   def start
  396.       $game_temp.dmg_battle_mode = true
  397.       mog_damage_popup_start
  398.   end
  399.  
  400.   #--------------------------------------------------------------------------
  401.   # ● Terminate
  402.   #--------------------------------------------------------------------------         
  403.   alias mog_damage_popup_terminate terminate
  404.   def terminate
  405.       mog_damage_popup_terminate
  406.       $game_temp.dmg_battle_mode = false
  407.   end
  408.  
  409. end
  410.  
  411. #==============================================================================
  412. # ■ Game Party
  413. #==============================================================================
  414. class Game_Party < Game_Unit
  415.  
  416.   #--------------------------------------------------------------------------
  417.   # ● Character Members
  418.   #--------------------------------------------------------------------------         
  419.   def character_members
  420.       char_m = [] ; char_m.push($game_player)
  421.       $game_player.followers.each do |f| char_m.push(f) end
  422.       return char_m
  423.   end
  424.  
  425.   #--------------------------------------------------------------------------
  426.   # ● Gain Gold
  427.   #--------------------------------------------------------------------------         
  428.   alias mog_damage_popup_gain_gold gain_gold
  429.   def gain_gold(amount)
  430.       mog_damage_popup_gain_gold(amount)
  431.       $game_party.members[0].damage.push([amount,"Gold"]) if can_damage_popup_gold?
  432.   end  
  433.  
  434.   #--------------------------------------------------------------------------
  435.   # ● Can Damage Popup Gold
  436.   #--------------------------------------------------------------------------         
  437.   def can_damage_popup_gold?
  438.       return false if !SceneManager.scene_is?(Scene_Map)
  439.       return false if $game_temp.dmg_battle_mode
  440.       return false if !MOG_DAMAGEPOPUP::EXP_GOLD_POPUP_MAP
  441.       return false if !$game_system.damage_popup_map
  442.       return false if !$game_party.members[0]
  443.       return true
  444.   end
  445.  
  446. #--------------------------------------------------------------------------
  447. # ● Gain Item
  448. #--------------------------------------------------------------------------
  449. alias mog_damage_popup_gain_item gain_item
  450. def gain_item(item, amount, include_equip = false)
  451.      mog_damage_popup_gain_item(item, amount, include_equip)
  452.      execute_item_popup(item) if can_damage_popup_item?(item)
  453. end
  454.  
  455. #--------------------------------------------------------------------------
  456. # ● Can Damage Poupup Item
  457. #--------------------------------------------------------------------------
  458. def can_damage_popup_item?(item)
  459.      return false if item == nil
  460.      return false if !MOG_DAMAGEPOPUP::ITEM_POPUP_MAP
  461.      return false if !$game_system.damage_popup_map
  462.      return false if SceneManager.scene_is?(Scene_Battle)
  463.      return false if !$game_party.members[0]
  464.      return false if $game_temp.dmg_battle_mode
  465.      return true     
  466. end
  467.  
  468. #--------------------------------------------------------------------------
  469. # ● Execute Item Popup
  470. #--------------------------------------------------------------------------
  471. def execute_item_popup(item)
  472.      it = $data_items[item.id] if item.is_a?(RPG::Item)
  473.      it = $data_weapons[item.id] if item.is_a?(RPG::Weapon)
  474.      it = $data_armors[item.id] if item.is_a?(RPG::Armor)   
  475.      $game_party.members[0].damage.push([it.name.to_s,"Item",false,it.icon_index])
  476. end
  477.  
  478. end
  479.  
  480. #==============================================================================
  481. # ■ Game Interpreter
  482. #==============================================================================
  483. class Game_Interpreter
  484.  
  485. #--------------------------------------------------------------------------
  486. # ● Damage Popup Map
  487. #--------------------------------------------------------------------------
  488.   def damage_popup_map(value)
  489.       $game_system.damage_popup_map = value
  490.   end   
  491.  
  492.   #--------------------------------------------------------------------------
  493.   # ● Damage Popup
  494.   #--------------------------------------------------------------------------
  495.   def damage_popup(target_id, value,type = "")
  496.       return if !$game_system.damage_popup_map
  497.       target = set_target_dmg(target_id) rescue nil
  498.       target.damage.push([value,type]) if target
  499.   end
  500.  
  501.   #--------------------------------------------------------------------------
  502.   # ● Set Target Dmg
  503.   #--------------------------------------------------------------------------
  504.   def set_target_dmg(target)
  505.       return $game_player.battler if target == 0
  506.       return $game_player.followers[(target + 1).abs].battler if target < 0
  507.       $game_map.events.values.each do |event|
  508.       return event.battler if event.id == target and event.battler
  509.       return event if event.id == target
  510.       end
  511.   end
  512.  
  513.   #--------------------------------------------------------------------------
  514.   # * Change MP
  515.   #--------------------------------------------------------------------------
  516.   alias mog_damage_popup_command_312 command_312
  517.   def command_312
  518.       value = operate_value(@params[2], @params[3], @params[4])
  519.       iterate_actor_var(@params[0], @params[1]) do |actor|
  520.       actor.damage.push([-value,"MP"])
  521.       end   
  522.       mog_damage_popup_command_312
  523.   end  
  524.  
  525. end
  526.  
  527. #==============================================================================
  528. # ■ Game Actor
  529. #==============================================================================
  530. class Game_Actor < Game_Battler
  531.   include MOG_DAMAGEPOPUP
  532.   #--------------------------------------------------------------------------
  533.   # ● Level UP
  534.   #--------------------------------------------------------------------------         
  535.    alias mog_damage_pop_level_up level_up
  536.    def level_up
  537.        mog_damage_pop_level_up      
  538.        execute_level_popup
  539.    end
  540.  
  541.   #--------------------------------------------------------------------------
  542.   # ● Execute Level Popup
  543.   #--------------------------------------------------------------------------         
  544.    def execute_level_popup
  545.        if (SceneManager.scene_is?(Scene_Battle) and LEVEL_POPUP_BATTLE) or
  546.           (SceneManager.scene_is?(Scene_Map) and LEVEL_POPUP_MAP)
  547.           @damage.push(["Level UP","Level_UP"]) unless @skip_dmg_popup
  548.           @skip_dmg_popup = true
  549.        end     
  550.    end
  551.  
  552.   #--------------------------------------------------------------------------
  553.   # ● Change Exp
  554.   #--------------------------------------------------------------------------         
  555.   alias mog_damage_popup_change_exp change_exp
  556.   def change_exp(exp, show)
  557.       n_exp = self.exp
  558.       mog_damage_popup_change_exp(exp, show)
  559.       c_exp = n_exp - self.exp
  560.       @damage.push([c_exp.abs,"Exp"]) if can_popup_exp?(exp)
  561.   end   
  562.  
  563.   #--------------------------------------------------------------------------
  564.   # ● Can Popup EXP
  565.   #--------------------------------------------------------------------------         
  566.   def can_popup_exp?(exp)
  567.       return false if !EXP_GOLD_POPUP_MAP
  568.       return false if exp <= 0
  569.       return false if self.skip_dmg_popup
  570.       return false if self.max_level?
  571.       return true
  572.   end
  573.  
  574. end
  575.  
  576. #==============================================================================
  577. # ■ Scene_Battle
  578. #==============================================================================
  579. class Scene_Battle < Scene_Base
  580.  
  581.   #--------------------------------------------------------------------------
  582.   # ● Invoke Counter Attack
  583.   #--------------------------------------------------------------------------        
  584.   alias mog_damage_popup_invoke_counter_attack invoke_counter_attack
  585.   def invoke_counter_attack(target, item)
  586.       mog_damage_popup_invoke_counter_attack(target, item)
  587.       target.damage.push(["Counter","Counter"])
  588.   end  
  589.  
  590.   #--------------------------------------------------------------------------
  591.   # ● Invoke Counter Attack
  592.   #--------------------------------------------------------------------------        
  593.   alias mog_damage_popup_invoke_magic_reflection invoke_magic_reflection
  594.   def invoke_magic_reflection(target, item)
  595.       mog_damage_popup_invoke_magic_reflection(target, item)
  596.       target.damage.push(["Reflection","Reflection"])
  597.   end  
  598.  
  599. end
  600.  
  601. #==============================================================================
  602. # ■ Cache
  603. #==============================================================================
  604. module Cache
  605.  
  606.   #--------------------------------------------------------------------------
  607.   # * Damage
  608.   #--------------------------------------------------------------------------
  609.   def self.damage(filename)
  610.       load_bitmap("Graphics/Damage/", filename)
  611.   end
  612.  
  613. end
  614.  
  615. #==============================================================================
  616. # ■ Game Temp
  617. #==============================================================================
  618. class Game_Temp
  619.  
  620.   attr_accessor :pre_cache_damage
  621.  
  622.   #--------------------------------------------------------------------------
  623.   # ● Initialize
  624.   #--------------------------------------------------------------------------  
  625.   alias mog_damage_pop_initialize initialize
  626.   def initialize
  627.       mog_damage_pop_initialize
  628.       pre_cache_damage_temp
  629.   end
  630.  
  631.   #--------------------------------------------------------------------------
  632.   # ● Pre Cache Damage Temp
  633.   #--------------------------------------------------------------------------   
  634.   def pre_cache_damage_temp
  635.       return if @pre_cache_damage != nil
  636.       @pre_cache_damage = []
  637.       @pre_cache_damage.push(Cache.damage("HP_Number"))
  638.       @pre_cache_damage.push(Cache.damage("MP"))
  639.       @pre_cache_damage.push(Cache.damage("TP"))
  640.       @pre_cache_damage.push(Cache.damage("Missed"))
  641.       @pre_cache_damage.push(Cache.damage("Evaded"))
  642.       @pre_cache_damage.push(Cache.damage("Critical"))
  643.       @pre_cache_damage.push(Cache.damage("Exp"))
  644.       @pre_cache_damage.push(Cache.damage("Gold"))
  645.       @pre_cache_damage.push(Cache.damage("Level UP"))
  646.       @pre_cache_damage.push(Cache.damage("Counter"))
  647.       @pre_cache_damage.push(Cache.damage("Reflection"))
  648.       @pre_cache_damage.push(Cache.damage("MP_Number"))
  649.       @pre_cache_damage.push(Cache.damage("TP_Number"))
  650.       @pre_cache_damage.push(Cache.damage("EG_Number"))
  651.       @pre_cache_damage.push(Cache.system("Iconset"))
  652.   end
  653.  
  654. end
  655.  
  656. #==============================================================================
  657. # ■ Sprite Base
  658. #==============================================================================
  659. class Sprite_Base < Sprite
  660.  
  661.   #--------------------------------------------------------------------------
  662.   # ● Initialize
  663.   #--------------------------------------------------------------------------  
  664.   alias mog_damage_popup_sprite_initialize initialize
  665.   def initialize(viewport = nil)
  666.       mog_damage_popup_sprite_initialize(viewport)
  667.       damage_popup_setup
  668.   end
  669.  
  670.   #--------------------------------------------------------------------------
  671.   # ● Damage Popup Setup
  672.   #--------------------------------------------------------------------------  
  673.   def damage_popup_setup      
  674.       $game_temp.pre_cache_damage_temp ; @damage_sprites = []
  675.       $game_system.damage_popup_clear
  676.   end
  677.  
  678.   #--------------------------------------------------------------------------
  679.   # ● Dispose
  680.   #--------------------------------------------------------------------------  
  681.   alias mog_damage_popup_sprite_dispose dispose
  682.   def dispose      
  683.       mog_damage_popup_sprite_dispose
  684.       dispose_damage_sprites
  685.   end
  686.  
  687.   #--------------------------------------------------------------------------
  688.   # ● Dispose Damage Sprites
  689.   #--------------------------------------------------------------------------   
  690.   def dispose_damage_sprites
  691.       return if @damage_sprites == nil
  692.       @damage_sprites.each {|sprite| sprite.dispose_damage }
  693.   end  
  694.  
  695.   #--------------------------------------------------------------------------
  696.   # ● Update
  697.   #--------------------------------------------------------------------------  
  698.   alias mog_damage_popup_sprite_update update
  699.   def update
  700.       mog_damage_popup_sprite_update
  701.       update_damage_popup
  702.   end  
  703.  
  704.   #--------------------------------------------------------------------------
  705.   # ● Update Damage Popup
  706.   #--------------------------------------------------------------------------   
  707.   def update_damage_popup
  708.       return if @damage_sprites == nil
  709.       create_damage_sprite if can_create_damage?
  710.       update_damage_sprite if !@damage_sprites.empty?
  711.   end  
  712.  
  713.   #--------------------------------------------------------------------------
  714.   # ● Can Create Damage?
  715.   #--------------------------------------------------------------------------     
  716.   def can_create_damage?      
  717.       return false if $game_message.visible
  718.       if @battler
  719.          return false if @battler.damage == nil
  720.          return false if @battler.damage.empty?
  721.          if $game_temp.battle_end and @battler.is_a?(Game_Actor)
  722.             return false if $game_message.visible
  723.             return false if $imported[:mog_battler_result] and $game_temp.result
  724.          end
  725.       elsif @character
  726.          return false if !$game_system.damage_popup_map
  727.          if @character.battler
  728.             return false if @character.battler.damage == nil
  729.             return false if @character.battler.damage.empty?
  730.          else
  731.             return false if @character.damage == nil
  732.             return false if @character.damage.empty?            
  733.          end  
  734.       end
  735.       return false if @battler == nil and @character == nil      
  736.       return true
  737.   end
  738.  
  739.   #--------------------------------------------------------------------------
  740.   # ● Create Damage Sprite
  741.   #--------------------------------------------------------------------------     
  742.   def create_damage_sprite
  743.       target = @battler ? @battler : @character
  744.       screen_x_available = target.screen_x rescue nil
  745.       return if screen_x_available == nil
  746.       sx = target.screen_x != nil ? target.screen_x : self.x
  747.       sy = target.screen_y != nil ? target.screen_y : self.y
  748.       @damage_sprites = [] if @damage_sprites == nil  
  749.       target = @character.battler if @character and @character.battler
  750.       target.damage.each_with_index do |i, index|
  751.       @damage_sprites.push(Damage_Sprite.new(nil,sx,sy,i,index,@damage_sprites.size,self)) end
  752.       if SceneManager.scene_is?(Scene_Battle)
  753.       @damage_sprites.each_with_index do |i, index| i.set_duration(index) end
  754.       end
  755.       target.damage.clear ; target.skip_dmg_popup = false
  756.   end  
  757.  
  758.   #--------------------------------------------------------------------------
  759.   # ● Update Damage Sprite
  760.   #--------------------------------------------------------------------------     
  761.   def update_damage_sprite
  762.       clear = true
  763.       @damage_sprites.each_with_index do |sprite, i|
  764.           sprite.update_damage(@damage_sprites.size,i,@battler)
  765.           sprite.dispose_damage if sprite.duration <= 0
  766.           clear = false if sprite.duration > 0
  767.       end   
  768.       @damage_sprites.clear if clear
  769.   end  
  770.  
  771. end
  772.  
  773. #==============================================================================
  774. # ■ Damage Sprite
  775. #==============================================================================
  776. class Damage_Sprite < Sprite
  777.    include MOG_DAMAGEPOPUP
  778.    attr_accessor :duration
  779.  
  780.   #--------------------------------------------------------------------------
  781.   # ● Initialize
  782.   #--------------------------------------------------------------------------      
  783.   def initialize(viewport = nil , x,y, value ,index,index_max,target)
  784.       super(viewport)
  785.       dispose_damage ; setup_base(value,x,y,index,index_max,target) ; create_sprites
  786.   end   
  787.  
  788.   #--------------------------------------------------------------------------
  789.   # ● Setup Base
  790.   #--------------------------------------------------------------------------      
  791.   def setup_base(value,x,y,index,index_max,target)
  792.       @target = target ; y2 = 0
  793.       if @target.bitmap != nil ; y2 = SceneManager.scene_is?(Scene_Battle) ? @target.bitmap.height / 2 : 0 ; end
  794.       @animation_type = 0 ; @index = index ; @index_max = index_max + 1
  795.       @image = $game_temp.pre_cache_damage ; self.z = index + DAMAGE_Z
  796.       @cw = @image[0].width / 10 ; @ch = @image[0].height / 2 ; @cw2 = 0
  797.       @x = x ; @y = y - y2 ; @value = value[0] ; @type = value[1] ; @ch2 = 0
  798.       @critical = (value[2] and @value.to_i >= 0) ? true : false; self.opacity = 0
  799.       @state_index = value[3] ; @oxy = [0,0,0,0] ; @org_xy = [0,0] ; @spxy = [0,0]
  800.       @duration = 92 ; @org_oxy = [0,0,0,0]
  801.       self.visible = false ;set_initial_position(index,nil)
  802.   end
  803.  
  804.   #--------------------------------------------------------------------------
  805.   # ● Set Duration
  806.   #--------------------------------------------------------------------------      
  807.   def set_duration(index,pre_index = nil)
  808.       return if @duration != 0
  809.       @duration = 82 + (2 * index) if @animation_type == 0
  810.   end
  811.  
  812.   #--------------------------------------------------------------------------
  813.   # ● Set Initial Position
  814.   #--------------------------------------------------------------------------      
  815.   def set_initial_position(index,old_duration)
  816.       @org_xy = [@x,@y]
  817.       self.zoom_y = self.zoom_x
  818.   end
  819.  
  820.   #--------------------------------------------------------------------------
  821.   # ● Dispose Damage
  822.   #--------------------------------------------------------------------------      
  823.   def dispose_damage
  824.       (self.bitmap.dispose ; self.bitmap = nil) if self.bitmap
  825.       (@sup_sprite.bitmap.dispose ; @sup_sprite.dispose) if @sup_sprite  
  826.       @duration = -1
  827.   end
  828.  
  829.   #--------------------------------------------------------------------------
  830.   # ● Create Sprites
  831.   #--------------------------------------------------------------------------      
  832.   def create_sprites
  833.       if @value.is_a?(Numeric)
  834.          create_number         
  835.       elsif ["Missed","Evaded","Level UP","Counter","Reflection"].include?(@value.to_s)
  836.          create_miss
  837.       else
  838.          create_string
  839.       end      
  840.       set_damage_position
  841.   end
  842.  
  843.   #--------------------------------------------------------------------------
  844.   # ● Set Damage Position
  845.   #--------------------------------------------------------------------------      
  846.   def set_damage_position
  847.       return if self.bitmap == nil
  848.       self.ox = (self.bitmap.width - @cw2) / 2
  849.       self.oy = self.bitmap.height / 2 ; self.x = @x ; self.y = @y
  850.       @org_oxy[0] = self.ox
  851.       @org_oxy[1] = self.oy
  852.       set_animation_type
  853.       if @sup_sprite
  854.          @sup_sprite.ox = self.bitmap.width / 2 ;
  855.          @sup_sprite.oy = self.bitmap.height / 2
  856.          @org_oxy[2] = @sup_sprite.ox
  857.          @org_oxy[3] = @sup_sprite.oy
  858.          if @critical
  859.             @sup_sprite.x = @x - (@sup_sprite.bitmap.width / 2) + ((@cw / 2) * @number_value.size)
  860.             @sup_sprite.y = self.y
  861.          end   
  862.          update_sup_position(@index_max - @index)
  863.       end
  864.   end   
  865.  
  866.   #--------------------------------------------------------------------------
  867.   # ● Set Damage Position
  868.   #--------------------------------------------------------------------------      
  869.   def set_animation_type
  870.       s = rand(2) ; s2 = (rand(10) * 0.1).round(2)
  871.       @oxy[2] = s == 1 ? s2 : -s2
  872.   end
  873.  
  874.   #--------------------------------------------------------------------------
  875.   # ● Create Number
  876.   #--------------------------------------------------------------------------      
  877.   def create_number
  878.       case @type
  879.       when "MP"
  880.       number_image = @image[11] ;h = @value >= 0 ? 0 : @ch ; create_sup_sprite
  881.       when "TP"
  882.       number_image = @image[12] ;h = @value >= 0 ? 0 : @ch ; create_sup_sprite
  883.       when "Exp"
  884.       number_image = @image[13] ;h = 0 ; create_sup_sprite
  885.       when "Gold"
  886.       number_image = @image[13] ;h = @ch ; create_sup_sprite            
  887.       else
  888.       number_image = @image[0] ; h = @value >= 0 ? 0 : @ch
  889.       end
  890.       @number_value = @value.abs.truncate.to_s.split(//)
  891.       self.bitmap = Bitmap.new(@cw * @number_value.size, @ch)
  892.       for r in 0...@number_value.size        
  893.           number_value_abs = @number_value[r].to_i
  894.           src_rect = Rect.new(@cw * number_value_abs, h, @cw, @ch)
  895.           self.bitmap.blt(@cw *  r, 0, number_image, src_rect)
  896.       end   
  897.       create_sup_sprite if @critical
  898.   end
  899.  
  900.   #--------------------------------------------------------------------------
  901.   # ● Create Sup Sprite
  902.   #--------------------------------------------------------------------------      
  903.   def create_sup_sprite
  904.       return if @sup_sprite != nil
  905.       @sup_sprite = Sprite.new ; @sup_sprite.visible = false ; fy = 0 ; sp = [0,0]
  906.       if @type == "MP" ; @sup_sprite.bitmap = @image[1].dup
  907.       elsif @type == "TP" ; @sup_sprite.bitmap = @image[2].dup
  908.       elsif @critical
  909.          @sup_sprite.bitmap = @image[5].dup
  910.          @cw2 = 0 ; @ch2 = @sup_sprite.bitmap.height  
  911.          return
  912.       elsif @type == "Exp"
  913.          @sup_sprite.bitmap = @image[6].dup ; fy = @ch ; sp[1] = 1.0
  914.       elsif @type == "Gold"
  915.          @sup_sprite.bitmap = @image[7].dup ; fy = (@ch * 2) ; sp[1] = 0.5
  916.      end  
  917.      fy = 0 if !SceneManager.scene_is?(Scene_Battle)
  918.      @y += fy ; @org_xy[1] += 0
  919.      @cw2 = @sup_sprite.bitmap.width + @cw
  920.      @spxy = [sp[0],sp[1]]
  921.   end
  922.  
  923.   #--------------------------------------------------------------------------
  924.   # ● Update Sup Position
  925.   #--------------------------------------------------------------------------      
  926.   def update_sup_position(dif_y)
  927.       @sup_sprite.x = self.x - @cw unless @critical
  928.       @sup_sprite.y = @critical ? self.y - @ch2 : self.y
  929.       @sup_sprite.opacity = self.opacity ; @sup_sprite.angle = self.angle
  930.       @sup_sprite.zoom_x = self.zoom_x ; @sup_sprite.zoom_y = self.zoom_y
  931.       @sup_sprite.z = self.z ; @sup_sprite.viewport = self.viewport
  932.       @sup_sprite.visible = self.visible
  933.   end  
  934.  
  935.   #--------------------------------------------------------------------------
  936.   # ● Create Miss
  937.   #--------------------------------------------------------------------------      
  938.   def create_miss
  939.       self.bitmap = @image[3].dup if @value == "Missed"
  940.       self.bitmap = @image[4].dup if @value == "Evaded"
  941.       self.bitmap = @image[8].dup if @value == "Level UP"
  942.       self.bitmap = @image[9].dup if @value == "Counter"
  943.       self.bitmap = @image[10].dup if @value == "Reflection"
  944.   end
  945.  
  946.   #--------------------------------------------------------------------------
  947.   # ● Create Spring
  948.   #--------------------------------------------------------------------------               
  949.   def create_string
  950.       string_size = @value.to_s.split(//) ; fsize = FONT_SIZE > 10 ? FONT_SIZE : 10
  951.       @stg_size = string_size.size > 0 ? ((1 + string_size.size ) * ((fsize / 2) - 2)) : 32      
  952.       self.bitmap = Bitmap.new(@stg_size,32)
  953.       self.bitmap.font.color = FONT_COLOR
  954.       self.bitmap.font.size = fsize ; self.bitmap.font.bold = FONT_BOLD
  955.       self.bitmap.font.italic = FONT_ITALIC
  956.       if @type == "Item"
  957.          self.bitmap.font.color = FONT_COLOR_ITEM
  958.       elsif @type == "States Plus"
  959.          self.bitmap.font.color = FONT_COLOR_STATUS_PLUS
  960.       elsif @type == "States Minus"
  961.          self.bitmap.font.color = FONT_COLOR_STATUS_MINUS
  962.       end      
  963.       self.bitmap.draw_text(0, 0, self.bitmap.width, self.bitmap.height, @value.to_s,0)
  964.       draw_states if @state_index != nil
  965.   end
  966.  
  967.   #--------------------------------------------------------------------------
  968.   # ● Draw States
  969.   #--------------------------------------------------------------------------               
  970.   def draw_states
  971.       @sup_sprite = Sprite.new ; @sup_sprite.bitmap = Bitmap.new(24,24)
  972.       rect = Rect.new(@state_index % 16 * 24, @state_index / 16 * 24, 24, 24)
  973.       @image[14] = Cache.system("Iconset") if @image[14]== nil or @image[14].disposed?
  974.       @sup_sprite.bitmap.blt(0, 0, @image[14].dup, rect)
  975.       (@org_xy[1] += (@ch + 5) ; @y += (@ch + 5)) unless !SceneManager.is_a?(Scene_Battle)
  976.       @cw2 = @sup_sprite.bitmap.width + @cw / 2 ; @sup_sprite.visible = false
  977.   end  
  978.  
  979.   #--------------------------------------------------------------------------
  980.   # ● Update Damage
  981.   #--------------------------------------------------------------------------               
  982.   def update_damage(index_max,index,battler)
  983.       @index_max = index_max ; @index = index
  984.       return if self.bitmap == nil or self.bitmap.disposed?
  985.       @duration -= 1
  986.       self.visible = @duration > 90 ? false : true
  987.       return if !self.visible
  988.       dif_y = (@index_max - @index)
  989.       update_animation(dif_y)
  990.       update_sprite_position(dif_y,battler)
  991.       update_sup_position(dif_y) if @sup_sprite
  992.       dispose_damage if @duration <= 0
  993.   end
  994.  
  995.   #--------------------------------------------------------------------------
  996.   # ● Update Sprite Position
  997.   #--------------------------------------------------------------------------               
  998.   def update_sprite_position(dif_y,battler)
  999.       execute_move(0,self,@org_xy[0] + @oxy[0])
  1000.       execute_move(1,self,@org_xy[1] + @oxy[1] - (dif_y * Y_SPACE))
  1001.       self.zoom_y = self.zoom_x
  1002.       update_battle_camera if oxy_camera?(battler)
  1003.   end   
  1004.  
  1005.   #--------------------------------------------------------------------------
  1006.   # ● Update Battle Camera
  1007.   #--------------------------------------------------------------------------               
  1008.   def update_battle_camera
  1009.       self.ox = $game_temp.viewport_oxy[0] + @org_oxy[0]
  1010.       self.oy = $game_temp.viewport_oxy[1] + @org_oxy[1]
  1011.       @sup_sprite.ox = $game_temp.viewport_oxy[0] + @org_oxy[2] if @sup_sprite != nil
  1012.       @sup_sprite.oy = $game_temp.viewport_oxy[1] + @org_oxy[3] if @sup_sprite != nil
  1013.   end  
  1014.  
  1015.   #--------------------------------------------------------------------------
  1016.   # ● OXY_CAMERA
  1017.   #--------------------------------------------------------------------------               
  1018.   def oxy_camera?(battler)
  1019.       return false if $imported[:mog_battle_camera] == nil
  1020.       if battler.is_a?(Game_Actor)
  1021.          return false if $imported[:mog_battle_hud_ex] and SceneManager.face_battler?
  1022.       end
  1023.       return true
  1024.   end
  1025.  
  1026.   #--------------------------------------------------------------------------
  1027.   # ● Execute Move
  1028.   #--------------------------------------------------------------------------      
  1029.   def execute_move(type,sprite,np)
  1030.       cp = type == 0 ? sprite.x : sprite.y
  1031.       sp = 1 + ((cp - np).abs / 10)
  1032.       sp = 1 if @duration < 60
  1033.       if cp > np ;    cp -= sp ; cp = np if cp < np
  1034.       elsif cp < np ; cp += sp ; cp = np if cp > np
  1035.       end     
  1036.       sprite.x = cp if type == 0 ; sprite.y = cp if type == 1
  1037.   end   
  1038.  
  1039.   #--------------------------------------------------------------------------
  1040.   # ● Update Animation
  1041.   #--------------------------------------------------------------------------               
  1042.   def update_animation(dif_y)
  1043.      @oxy[1] -= 1
  1044.      case @duration
  1045.      when 60..90 ; self.opacity += 15
  1046.      when 30..60 ; self.opacity = 255
  1047.      when 0..30  ; self.opacity -= 9
  1048.      end
  1049.   end
  1050.  
  1051. end
  1052.  
  1053. #==============================================================================
  1054. # ■ Sprite Battler
  1055. #==============================================================================
  1056. class Sprite_Battler < Sprite_Base
  1057.  
  1058.   #--------------------------------------------------------------------------
  1059.   # ● Update Collapse
  1060.   #--------------------------------------------------------------------------  
  1061.   alias mog_damage_pop_update_collapse update_collapse
  1062.   def update_collapse
  1063.       mog_damage_pop_update_collapse
  1064.       execute_exp_pop
  1065.   end
  1066.  
  1067.   #--------------------------------------------------------------------------
  1068.   # ● Update Instant Collapse
  1069.   #--------------------------------------------------------------------------  
  1070.   alias mog_damage_pop_update_instant_collapse update_instant_collapse
  1071.   def update_instant_collapse
  1072.       mog_damage_pop_update_instant_collapse
  1073.       execute_exp_pop
  1074.   end   
  1075.  
  1076.   #--------------------------------------------------------------------------
  1077.   # ● Update Boss Collapse
  1078.   #--------------------------------------------------------------------------  
  1079.   alias mog_damage_pop_update_boss_collapse update_boss_collapse
  1080.   def update_boss_collapse
  1081.       mog_damage_pop_update_boss_collapse
  1082.       execute_exp_pop
  1083.   end
  1084.  
  1085.   #--------------------------------------------------------------------------
  1086.   # ● Execute Exp Pop
  1087.   #--------------------------------------------------------------------------  
  1088.   def execute_exp_pop
  1089.       return if !MOG_DAMAGEPOPUP::EXP_GOLD_POPUP_BATTLE or @dam_exp != nil
  1090.       return if @battler == nil or @battler.is_a?(Game_Actor)
  1091.       @dam_exp = true
  1092.       if $imported[:mog_active_bonus_gauge] != nil
  1093.          real_exp = $game_troop.bonus_exp? ? @battler.exp * 2 : @battler.exp
  1094.          real_gold = $game_troop.bonus_gold? ? @battler.gold * 2 : @battler.gold
  1095.       else
  1096.          real_exp = @battler.exp ;  real_gold = @battler.gold
  1097.       end
  1098.       @battler.damage.push([real_exp,"Exp"]) if @battler.exp > 0
  1099.       @battler.damage.push([real_gold,"Gold"]) if @battler.gold > 0
  1100.   end   
  1101.  
  1102. end
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 11:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表