#============================================================================== # +++ MOG - DAMAGEPOPUP (v2.3) +++ #============================================================================== # By Moghunter # [url]http://www.atelier-rgss.com/[/url] #============================================================================== # Apresenta danos dos alvos em imagens. #============================================================================== # Será necessário ter a imagem Damage_Number.png na pasta /GRAPHICS/SYSTEM/ #============================================================================== #============================================================================== # DAMAGE POPUP ON CHARACTERS (Events) #============================================================================== # Basta usar o código abaixo para apresentar o dano nos eventos. # # damage_popup(STRING) # # STRING = valor do dano (Texto). # # Para ativar o dano no jogador use o código abaixo # # $game_player.damage_popup(STRING) # #============================================================================== #============================================================================== # ● Histórico (Version History) #============================================================================== # v 2.3 - Corrigido o erro de posição nos danos de MP. # v 2.2 - Compatibilidade com o script Active Bonus Gauge. # v 2.0 - Apresentar o texto de recuperar nos efeitos de regenerar. # v 1.9 - Corrigido o erro de apresentar as condições sendo removidas quando a # batalha termina. # - Corrigido a centralização da string em danos do tipo texto. # - Corrigido o "erro" de apresentar a condição de Death. # v 1.8 - Corrigido o erro de apresentar os textos das condições (Status) quando # o battler estiver morto. # v 1.7 - Melhor codificação e compatibilidade. # v 1.6 - Corrigido o erro da opacidade do dano em EXP e GOLD. # v 1.5 - Possibilidade de ativar o dano nos eventos no mapa. # v 1.4 - Corrigido o erro do efeito drain. # v 1.3 - Corrigido o erro de crash randômico. (relativo a dispose de imagem.) # v 1.2 - Corrigido o limite do tamanho da string em palavras longas. # v 1.1 - Opção de definir a prioridade do dano. # v 1.0 - Primeiro lançamento. #============================================================================== module MOG_DAMAGEPOP #Definição do espaço entre a palavra MP/TP e o numero de dano. MP_TP_STRING_SPACE = 32 #Correção da posição do dano. DAMAGE_POSITION_CORRECTION = [0 ,0] #Apresentar a exp e ouro do inimigo. EXP_POPUP = false #Definição da prioridade do dano na tela. DAMAGE_Z = 60 end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler < Game_BattlerBase attr_accessor :damage #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_damage_sprite_initialize initialize def initialize @damage = [] mog_damage_sprite_initialize end #-------------------------------------------------------------------------- # ● Item Apply #-------------------------------------------------------------------------- alias mog_damage_pop_item_apply item_apply def item_apply(user, item) mog_damage_pop_item_apply(user, item) if @result.missed self.damage.push(["Missed","Missed"]) if self.hp > 0 elsif @result.evaded self.damage.push(["Evaded","Evaded"]) if self.hp > 0 end end #-------------------------------------------------------------------------- # ● Regenerate HP #-------------------------------------------------------------------------- alias mog_damage_pop_regenerate_hp regenerate_hp def regenerate_hp mog_damage_pop_regenerate_hp self.damage.push(["Regenerate",""]) if @result.hp_damage < 0 self.damage.push([@result.hp_damage,"HP"]) if @result.hp_damage != 0 end #-------------------------------------------------------------------------- # ● Regenerate MP #-------------------------------------------------------------------------- alias mog_damage_pop_regenerate_mp regenerate_mp def regenerate_mp mog_damage_pop_regenerate_mp # self.damage.push(["Regenerate",""]) if @result.mp_damage < 0 self.damage.push([@result.mp_damage,"MP"]) if @result.mp_damage != 0 end #-------------------------------------------------------------------------- # ● Regenerate TP #-------------------------------------------------------------------------- alias mog_damage_pop_regenerate_tp regenerate_tp def regenerate_tp mog_damage_pop_regenerate_tp tp_damage = 100 * trg self.damage.push([tp_damage,"TP"]) if tp_damage != 0 end #-------------------------------------------------------------------------- # ● Added New State #-------------------------------------------------------------------------- alias mog_damage_pop_add_new_state add_new_state def add_new_state(state_id) mog_damage_pop_add_new_state(state_id) # unless guard_feature?(state_id) st = $data_states[state_id] self.damage.push([st.name.to_s,"States Plus",false,st.icon_index]) if self.hp > 0 # end end #-------------------------------------------------------------------------- # ● Guard Feature? #-------------------------------------------------------------------------- def guard_feature?(state_id) st = $data_states[state_id] for i in st.features return true if i.code == 62 and i.data_id == 1 end return false end #-------------------------------------------------------------------------- # ● Remove State #-------------------------------------------------------------------------- alias mog_damage_pop_remove_state remove_state def remove_state(state_id) if state?(state_id) unless BattleManager.escape? st = $data_states[state_id] self.damage.push([st.name.to_s,"States Minus",false,st.icon_index]) if self.hp > 0 end end mog_damage_pop_remove_state(state_id) end #-------------------------------------------------------------------------- # ● Update State Turns #-------------------------------------------------------------------------- alias mog_damage_popup_update_state_turns update_state_turns def update_state_turns mog_damage_popup_update_state_turns states.each do |state| for features in state.features if features.data_id == 7 or features.data_id == 8 or features.data_id == 9 # self.damage.push([state.name.to_s + " Effect","States Effect"]) if self.hp > 0 end end end end #-------------------------------------------------------------------------- # ● Execute Damage #-------------------------------------------------------------------------- alias mog_damage_pop_execute_damage execute_damage def execute_damage(user) mog_damage_pop_execute_damage(user) user.damage.push([[email]-@result.hp_drain[/email],"HP",@result.critical]) if @result.hp_drain != 0 user.damage.push([[email]-@result.mp_drain[/email],"MP",@result.critical]) if @result.mp_drain != 0 end end #============================================================================== # ■ BattleManager #============================================================================== module BattleManager #-------------------------------------------------------------------------- # ● Escape? #-------------------------------------------------------------------------- def self.escape? @phase == nil end end #============================================================================== # ■ Game_ActionResult #============================================================================== class Game_ActionResult #-------------------------------------------------------------------------- # ● HP Damage Text #-------------------------------------------------------------------------- alias mog_damage_pop_hp_damage_text hp_damage_text def hp_damage_text if @hp_drain > 0 @battler.damage.push([@hp_drain,"HP",@critical]) elsif @hp_damage >= 0 @battler.damage.push([@hp_damage,"HP",@critical]) elsif @hp_damage < 0 @battler.damage.push([@hp_damage,"HP",@critical]) end mog_damage_pop_hp_damage_text end #-------------------------------------------------------------------------- # ● MP Damage Text #-------------------------------------------------------------------------- alias mog_damage_pop_mp_damage_text mp_damage_text def mp_damage_text if @mp_drain > 0 @battler.damage.push([@mp_drain,"MP",@critical]) elsif @mp_damage > 0 @battler.damage.push([@mp_damage,"MP",@critical]) elsif @mp_damage < 0 @battler.damage.push([@mp_damage,"MP",@critical]) end mog_damage_pop_mp_damage_text end #-------------------------------------------------------------------------- # ● TP Damage Text #-------------------------------------------------------------------------- alias mog_damage_pop_tp_damage_text tp_damage_text def tp_damage_text if @tp_damage > 0 @battler.damage.push([@tp_damage,"TP",@critical]) elsif @tp_damage < 0 @battler.damage.push([@tp_damage,"TP",@critical]) end mog_damage_pop_tp_damage_text end end #============================================================================== # ■ Game Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● Level UP #-------------------------------------------------------------------------- alias mog_damage_pop_level_up level_up def level_up mog_damage_pop_level_up @damage.push(["Level UP","Level_UP"])# unless @damage[0].include?("Level UP")#unless $mog_battle_result != nil end end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● Invoke Counter Attack #-------------------------------------------------------------------------- alias mog_damage_popup_invoke_counter_attack invoke_counter_attack def invoke_counter_attack(target, item) mog_damage_popup_invoke_counter_attack(target, item) target.damage.push(["Counter","Counter"]) end #-------------------------------------------------------------------------- # ● Invoke Counter Attack #-------------------------------------------------------------------------- alias mog_damage_popup_invoke_magic_reflection invoke_magic_reflection def invoke_magic_reflection(target, item) mog_damage_popup_invoke_magic_reflection(target, item) target.damage.push(["Reflection","Reflection"]) end end #============================================================================== # ■ Damage Sprite #============================================================================== class Damage_Sprite < Sprite include MOG_DAMAGEPOP attr_accessor :duration #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- def initialize(viewport = nil,x = 0,y = 0,value = 0,index) super(viewport) dispose @image = Cache.system("Damage_Number") @x = x @y = y @value = value[0] @type = value[1] @critical = (value[2] and @value.to_i >= 0) ? true : false @state_index = value[3] @duration = 80 + (10 * index) @cw = @image.width / 10 @ch = @image.height / 7 @center_x = 0 @mp_space = (@type == "MP" or @type == "TP") ? MP_TP_STRING_SPACE : 0 if @value.is_a?(Numeric) create_damage_number elsif @value == "Missed" or @value == "Evaded" create_damage_miss else create_damage_string end self.x = @x - (@center_x * (@cw / 2)) + DAMAGE_POSITION_CORRECTION[0] self.y = @y + DAMAGE_POSITION_CORRECTION[1] self.opacity = 1 zx = self.viewport != nil ? self.viewport.z : 0 self.z = DAMAGE_Z + zx self.visible = false damage_dir = rand(2) @speed_x = straight_pop? ? 0 : damage_dir == 1 ? -rand(2) : rand(2) @speed_y = 0 end #-------------------------------------------------------------------------- # ● Straight Pop #-------------------------------------------------------------------------- def straight_pop? case @type when "Gold"; return true when "Exp"; return true when "Level_UP"; return true end return false end #-------------------------------------------------------------------------- # ● Create Damage Number #-------------------------------------------------------------------------- def create_damage_miss dam = @value == "Missed" ? 5 : 6 self.bitmap = Bitmap.new(@cw * 5, @ch) src_rect = Rect.new(0, dam * @ch, @cw * 10, @ch) self.bitmap.blt(0, 0, @image, src_rect) @center_x += 5 end #-------------------------------------------------------------------------- # ● Create Damage Number #-------------------------------------------------------------------------- def create_damage_number dam = @critical ? @ch * 2 : @value >= 0 ? 0 : @ch f = @value >= 0 ? 0 : 1 ve = @value >= 0 ? 10 : 0 number_value = @value.to_s.split(//) self.bitmap = Bitmap.new(@mp_space + (@cw * number_value.size + 16),@ch * 4) for r in f...number_value.size number_value_abs = number_value[r].to_i src_rect = Rect.new(@cw * number_value_abs, dam, @cw, @ch) self.bitmap.blt(@mp_space + ve + (@cw * r), 0, @image, src_rect) @center_x += 1 end if @type == "MP" or @type == "TP" ty = @type == "MP" ? 3 : 4 src_rect = Rect.new(0, @ch * ty, @cw * 10, @ch) self.bitmap.blt(0, 0, @image, src_rect) @center_x += 2 end @center_x += 1 if @value < 0 end #-------------------------------------------------------------------------- # ● Create Damage String #-------------------------------------------------------------------------- def create_damage_string string_size = @value.to_s.split(//) @stg_size = string_size.size > 0 ? ((1 + string_size.size) * 24) : 32 self.bitmap = Bitmap.new(@stg_size,32) self.bitmap.font.size = 28 self.bitmap.font.bold = true @center_x = 2 + (string_size.size / 2) if @state_index != nil draw_states else execute_font_color damage_string = @value.to_s self.bitmap.draw_text(0, 0, @stg_size, 32, damage_string,0) end end #-------------------------------------------------------------------------- # ● Execute Font Color #-------------------------------------------------------------------------- def execute_font_color case @type when "Gold" @duration = 160 self.bitmap.font.color = Color.new(255,255,100) when "Exp" @duration = 120 self.bitmap.font.color = Color.new(0,255,100) when "Level_UP" self.bitmap.font.color = Color.new(50,155,255) else self.bitmap.font.color = Color.new(255,255,255) end end #-------------------------------------------------------------------------- # ● Draw States #-------------------------------------------------------------------------- def draw_states icon_image = Cache.system("Iconset") if @type == "States Plus" self.bitmap.font.color = Color.new(200,150,50) damage_string = "+ " + @value.to_s elsif @type == "States Minus" self.bitmap.font.color = Color.new(100,100,100) damage_string = "- " + @value.to_s end rect = Rect.new(@state_index % 16 * 24, @state_index / 16 * 24, 24, 24) self.bitmap.blt(0, 0, icon_image, rect) self.bitmap.draw_text(26, 0, @stg_size - 24, 32, damage_string,0) @center_x += 5 icon_image.dispose icon_image = nil end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- def dispose return if @image == nil @image.dispose @image = nil self.bitmap.dispose self.bitmap = nil @duration = -1 end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- def update return if self.bitmap == nil @duration -= 1 if @duration > 0 self.visible = @duration > 80 ? false : true case @duration when 65..80 self.opacity += 5 self.x += @speed_x self.y -= 5 critical_effect(0.05) when 50..65 self.opacity = 255 self.y -= 3 self.x += @speed_x critical_effect(0.05) when 35..50 self.opacity = 255 self.y += 3 critical_effect(-0.05) when 0..35 self.opacity -= 7 self.y -= 1 critical_effect(-0.05) end dispose if self.opacity <= 0 end #-------------------------------------------------------------------------- # ● Critical Effect #-------------------------------------------------------------------------- def critical_effect(value) return if !@critical self.zoom_x += value self.zoom_y = self.zoom_x end end #============================================================================== # ■ Sprite Battle #============================================================================== class Sprite_Battler < Sprite_Base #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_damagepop_initialize initialize def initialize(viewport, battler = nil) mog_damagepop_initialize(viewport, battler) create_damage_sprite end #-------------------------------------------------------------------------- # ● Create Damage Sprite #-------------------------------------------------------------------------- def create_damage_sprite dispose_damage_sprite @damage_sprites = [] end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- alias mog_damge_sprite_dispose dispose def dispose mog_damge_sprite_dispose dispose_damage_sprite end #-------------------------------------------------------------------------- # ● Dispose Damage Sprite #-------------------------------------------------------------------------- def dispose_damage_sprite return if @damage_sprites == nil @damage_sprites.each {|sprite| sprite.dispose } @damage_sprites.clear @battler.damage.clear if [url=home.php?mod=space&uid=133701]@battler[/url] != nil end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- alias mog_damage_sprite_update update def update mog_damage_sprite_update update_damage_sprite end #-------------------------------------------------------------------------- # ● Create Damage #-------------------------------------------------------------------------- def create_damage return if !@battler.use_sprite? index = 0 sx = @battler.screen_x != nil ? @battler.screen_x : self.x sy = @battler.screen_y != nil ? @battler.screen_y : self.y @damage_sprites = [] if @damage_sprites == nil for i in @battler.damage @damage_sprites.push(Damage_Sprite.new(nil,sx,sy,i,index)) index += 1 end @battler.damage.clear end #-------------------------------------------------------------------------- # ● Update Damage Sprite #-------------------------------------------------------------------------- def update_damage_sprite return if @damage_sprites == nil or @battler == nil if @initial_damage == nil @initial_damage = true @battler.damage.clear return end create_damage if !@battler.damage.empty? if !@damage_sprites.empty? clear = 0 for sprite in @damage_sprites sprite.update if sprite.duration == 0 sprite.dispose end clear += 1 if sprite.duration > 0 end clear_damage if clear == 0 end end #-------------------------------------------------------------------------- # ● Update Damage Sprite #-------------------------------------------------------------------------- def clear_damage @damage_sprites.each {|sprite| sprite.dispose } @damage_sprites.clear end #-------------------------------------------------------------------------- # ● Update Collapse #-------------------------------------------------------------------------- alias mog_damage_pop_update_collapse update_collapse def update_collapse mog_damage_pop_update_collapse execute_exp_pop end #-------------------------------------------------------------------------- # ● Update Instant Collapse #-------------------------------------------------------------------------- alias mog_damage_pop_update_instant_collapse update_instant_collapse def update_instant_collapse mog_damage_pop_update_instant_collapse execute_exp_pop end #-------------------------------------------------------------------------- # ● Update Boss Collapse #-------------------------------------------------------------------------- alias mog_damage_pop_update_boss_collapse update_boss_collapse def update_boss_collapse mog_damage_pop_update_boss_collapse execute_exp_pop end #-------------------------------------------------------------------------- # ● Execute Exp Pop #-------------------------------------------------------------------------- def execute_exp_pop return if @dam_exp != nil return if !MOG_DAMAGEPOP::EXP_POPUP return if @battler.is_a?(Game_Actor) @dam_exp = true if $mog_rgss3_active_bonus_gauge != nil if bonus_exp? real_exp = @battler.exp * 2 else real_exp = @battler.exp end if bonus_gold? real_gold = @battler.gold * 2 else real_gold = @battler.gold end else real_exp = @battler.exp real_gold = @battler.gold end @battler.damage.push(["EXP " + real_exp.to_s,"Exp"]) if @battler.exp > 0 @battler.damage.push([Vocab::currency_unit + " " + real_gold.to_s,"Gold"]) if @battler.gold > 0 end if $mog_rgss3_active_bonus_gauge != nil #-------------------------------------------------------------------------- # ● Bonus Gold #-------------------------------------------------------------------------- def bonus_gold? $game_system.bonus_gauge[3] and $game_system.bonus_gauge[2] == 3 end #-------------------------------------------------------------------------- # ● Bonus Exp #-------------------------------------------------------------------------- def bonus_exp? $game_system.bonus_gauge[3] and $game_system.bonus_gauge[2] == 2 end end end #============================================================================== # ■ Game Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● Damage Popup #-------------------------------------------------------------------------- def damage_popup(value,type = nil, critical = false) type = (type == nil and value.is_a?(Numeric)) ? "HP" : type $game_map.events[@event_id].damage.push([value,type,critical]) if same_map? && @event_id > 0 end end #============================================================================== # ■ Game Character #============================================================================== class Game_CharacterBase attr_accessor :damage #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_damage_popup_initialize initialize def initialize @damage = [] mog_damage_popup_initialize end #-------------------------------------------------------------------------- # ● damage Popup #-------------------------------------------------------------------------- def damage_popup(value,type = nil, critical = false) type = (type == nil and value.is_a?(Numeric)) ? "HP" : type @damage.push([value,type,critical]) end end #============================================================================== # ■ Sprite Character #============================================================================== class Sprite_Character < Sprite_Base #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_damage_popup_initialize initialize def initialize(viewport, character = nil) mog_damage_popup_initialize(viewport, character) create_damage_sprite end #-------------------------------------------------------------------------- # ● Create Damage Sprite #-------------------------------------------------------------------------- def create_damage_sprite dispose_damage_sprite @damage_sprites = [] end #-------------------------------------------------------------------------- # ● Dispose #-------------------------------------------------------------------------- alias mog_damage_popup_dispose dispose def dispose mog_damage_popup_dispose dispose_damage_sprite end #-------------------------------------------------------------------------- # ● Dispose Damage Sprite #-------------------------------------------------------------------------- def dispose_damage_sprite return if @damage_sprites == nil @damage_sprites.each {|sprite| sprite.dispose } @damage_sprites.clear @character.damage.clear $game_temp.dispose_damage_sprite = false end #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- alias mog_damage_popup_update update def update mog_damage_popup_update update_damage_sprite end #-------------------------------------------------------------------------- # ● Create Damage #-------------------------------------------------------------------------- def create_damage index = 0 sx = self.x sy = self.y + @ch @damage_sprites = [] if @damage_sprites == nil for i in @character.damage @damage_sprites.push(Damage_Sprite.new(nil,sx,sy,i,index)) index += 1 end @character.damage.clear end #-------------------------------------------------------------------------- # ● Update Damage Sprite #-------------------------------------------------------------------------- def update_damage_sprite return if @damage_sprites == nil if @initial_damage == nil @initial_damage = true @character.damage.clear return end create_damage if !@character.damage.empty? if !@damage_sprites.empty? clear = 0 for sprite in @damage_sprites sprite.update if sprite.duration == 0 sprite.dispose end clear += 1 if sprite.duration > 0 end clear_damage if clear == 0 end end #-------------------------------------------------------------------------- # ● Update Damage Sprite #-------------------------------------------------------------------------- def clear_damage @damage_sprites.each {|sprite| sprite.dispose } @damage_sprites.clear @character.damage.clear end end #============================================================================= # ■ Game_Temp #============================================================================= class Game_Temp attr_accessor :dispose_damage_sprite #-------------------------------------------------------------------------- # ● Initialize #-------------------------------------------------------------------------- alias mog_dispose_damage_initialize initialize def initialize @dispose_damage_sprite = true mog_dispose_damage_initialize end end #============================================================================= # ■ Scene Manager #============================================================================= class << SceneManager #-------------------------------------------------------------------------- # ● Call #-------------------------------------------------------------------------- alias mog_damage_pop_call call def call(scene_class) $game_temp.dispose_damage_sprite = true mog_damage_pop_call(scene_class) end end #============================================================================= # ■ Scene Map #============================================================================= class Scene_Map < Scene_Base #-------------------------------------------------------------------------- # ● Update Scene #-------------------------------------------------------------------------- alias mog_dispose_damage_sprites_update update_scene def update_scene @spriteset.dispose_damage_sprites mog_dispose_damage_sprites_update end end #============================================================================= # ■ Spriteset Map #============================================================================= class Spriteset_Map #-------------------------------------------------------------------------- # ● Dispose Damage Sprites #-------------------------------------------------------------------------- def dispose_damage_sprites return if !$game_temp.dispose_damage_sprite return if @character_sprites == nil @character_sprites.each {|sprite| sprite.dispose_damage_sprite } $game_temp.dispose_damage_sprite = false end end #============================================================================= # ■ Scene Battle #============================================================================= class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● Update #-------------------------------------------------------------------------- alias mog_damage_popup_dispose_sprite_update update def update @spriteset.dispose_damage_sprites mog_damage_popup_dispose_sprite_update end end #============================================================================= # ■ Spriteset Battle #============================================================================= class Spriteset_Battle #-------------------------------------------------------------------------- # ● Dispose Damage Sprites #-------------------------------------------------------------------------- def dispose_damage_sprites return if !$game_temp.dispose_damage_sprite battler_sprites.each {|sprite| sprite.dispose_damage_sprite } $game_temp.dispose_damage_sprite = false end end $mog_rgss3_damage_pop = true
搜狗截图13年06月26日2058_1.png (2.5 KB, 下载次数: 27)
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |