#============================================ # * SHB Skills v 1.1 - 6 Skills # por shadowball # 12 - 15.04.2008 #============================================ module SHB_Skills Radar = 81 Hurto = 82 Reflect = 85 Regen = 17 Reflexivo = 19 Barrier_Anim = 64 end #=============================== # * Game_System - Mod #=============================== class Game_System attr_accessor :use_radar_skill attr_accessor :use_steal_skill alias shb_gs_ini initialize def initialize shb_gs_ini @use_radar_skill = false @use_steal_skill = false end end #=============================== # * Game_Battler - Mod #=============================== class Game_Battler include SHB_Skills def skill_effect(user, skill) # Mod de shadowball self.critical = false effective = false effective |= skill.common_event_id > 0 hit = skill.hit if skill.atk_f > 0 hit *= user.hit / 100 end hit_result = (rand(100) < hit) effective |= hit < 100 effective = false effective |= skill.common_event_id > 0 hit = skill.hit hit *= user.hit / 100 if skill.atk_f > 0 hit_result = (rand(100) < hit) effective |= hit < 100 if hit_result == true success_rate = rand(100) + 10 if skill.id == Radar # Habilidad 'Radar' (ver PV y PM) $game_variables[1] = success_rate if success_rate > 40 $game_system.use_radar_skill = true self.damage = 'HP '+self.hp.to_s+' SP '+self.sp.to_s success_rate = 0 elsif success_rate <= 40 self.damage = 'Lectura Fallida' end return end if skill.id == Hurto # Habilidad Hurto (quitarle objetos a monstruos) $game_variables[1] = success_rate if success_rate > 40 self.damage = 'Nada' if $stolen_items >= 2 $game_system.use_steal_skill = true success_rate = 0 elsif success_rate <= 40 self.damage = "Te Evadieron" end return end if skill.id == Reflect or skill.id == Reflect+1 if user.states.include?(Reflect) or user.states.include?(Reflect+1) self.damage = 'Reflejando' end end end if hit_result == true power = skill.power + user.atk * skill.atk_f / 100 if power > 0 power -= self.pdef * skill.pdef_f / 200 power -= self.mdef * skill.mdef_f / 200 power = [power, 0].max end rate = 20 rate += (user.str * skill.str_f / 100) rate += (user.dex * skill.dex_f / 100) rate += (user.agi * skill.agi_f / 100) rate += (user.int * skill.int_f / 100) self.damage = power * rate / 20 self.damage *= elements_correct(skill.element_set) self.damage /= 100 if self.damage > 0 if self.guarding? self.damage /= 2 end end if skill.variance > 0 and self.damage.abs > 0 amp = [self.damage.abs * skill.variance / 100, 1].max self.damage += rand(amp+1) + rand(amp+1) - amp end eva = 8 * self.agi / user.dex + self.eva hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100 hit = self.cant_evade? ? 100 : hit hit_result = (rand(100) < hit) effective |= hit < 100 end if hit_result == true if skill.power != 0 and skill.atk_f > 0 remove_states_shock effective = true end last_hp = self.hp self.hp -= self.damage effective |= self.hp != last_hp @state_changed = false effective |= states_plus(skill.plus_state_set) effective |= states_minus(skill.minus_state_set) if skill.power == 0 self.damage = "" unless @state_changed self.damage = "Miss" end end else self.damage = "Miss" end unless $game_temp.in_battle self.damage = nil end return effective end # Mod de shadowball def slip_damage_effect if self.states.include?(Regen) self.damage = self.maxhp / -4 # Este valor debe ser negativo por ahora elsif self.states.include?(Regen+1) self.damage = self.maxsp / -4 # Este valor debe ser negativo por ahora else self.damage = self.maxhp / 10 # Set damage end if self.damage.abs > 0 # Dispersion amp = [self.damage.abs * 15 / 100, 1].max self.damage += rand(amp+1) + rand(amp+1) - amp end if self.states.include?(Regen) # HP Regen : Sume PV al battler objetivo self.hp -= self.damage # 2 valores negativos son igual a 1 positivo elsif self.states.include?(Regen+1) # SP Regen : Sume PM al battler objetivo self.sp -= self.damage # 2 valores negativos son igual a 1 positivo else # Daño (lo que viene por defecto) self.hp -= self.damage # Reste HP al battler objetivo end return true end end #=============================== # * Scene_Battle - Mod #=============================== class Scene_Battle include SHB_Skills def initialize $stolen_items = 0 # Add-on de shadowball @ataques = 0 end def make_basic_action_result if @active_battler.current_action.basic == 0 @animation1_id = @active_battler.animation1_id @animation2_id = @active_battler.animation2_id if @active_battler.is_a?(Game_Enemy) if @active_battler.restriction == 3 target = $game_troop.random_target_enemy elsif @active_battler.restriction == 2 target = $game_party.random_target_actor else index = @active_battler.current_action.target_index target = $game_party.smooth_target_actor(index) end end if @active_battler.is_a?(Game_Actor) if @active_battler.restriction == 3 target = $game_party.random_target_actor elsif @active_battler.restriction == 2 target = $game_troop.random_target_enemy else index = @active_battler.current_action.target_index target = $game_troop.smooth_target_enemy(index) end end @target_battlers = [target] for @target in @target_battlers reflect_active? # Mod end return end if @active_battler.current_action.basic == 1 @help_window.set_text($data_system.words.guard, 1) return end if @active_battler.is_a?(Game_Enemy) and @active_battler.current_action.basic == 2 @help_window.set_text("Escape", 1) @active_battler.escape return end if @active_battler.current_action.basic == 3 $game_temp.forcing_battler = nil @phase4_step = 1 return end $game_troop.enemies.refresh end def reflect_active? if @target.states.include?(Reflexivo) @target = @active_battler end @target.attack_effect(@active_battler) end def make_skill_action_result @id = @active_battler.current_action.skill_id @skill = $data_skills[@id] unless @active_battler.current_action.forcing unless @active_battler.skill_can_use?(@skill.id) $game_temp.forcing_battler = nil @phase4_step = 1 return end end @active_battler.sp -= @skill.sp_cost @status_window.refresh @help_window.set_text(@skill.name, 1) @animation1_id = @skill.animation1_id @animation2_id = @skill.animation2_id @common_event_id = @skill.common_event_id set_target_battlers(@skill.scope) for @target in @target_battlers other_skills # Mod end end # Add-on de shadowball def other_skills if @target.states.include?(Reflexivo+1) @target = @active_battler end @target.skill_effect(@active_battler, @skill) # Habilidad - Radar if @skill.id == Radar # cambia el número si lo cambiaste de posición en BD if $game_system.use_radar_skill == true if @active_battler.level < 5 text = @target.name+' HP '+@target.hp.to_s+' / SP '+@target.sp.to_s @help_window.set_text(text, 1) else text1 = @target.name+' HP '+@target.hp.to_s+' / '+@target.maxhp.to_s text2 = ' SP '+@target.sp.to_s+' / '+@target.maxsp.to_s @help_window.set_text(text1+text2, 1) end else text = @target.name+' HP ????? / SP ????' @help_window.set_text(text, 1) end $game_system.use_radar_skill = false return end # Habilidad - Hurto if @skill.id == Hurto if $game_system.use_steal_skill == true if @target.item_id > 0 && $stolen_items < 2 item = $data_items[@target.item_id].name @target.damage = '1 '+item $stolen_items += 1 $game_party.gain_item(@target.item_id, 1) text = 'Hurtaste un(a) '+item+' a '+@target.name else text = @target.name+' no posee ningún objeto de valor...' end @help_window.set_text(text, 1) end $game_system.use_steal_skill = false return end end def update_phase4_step4 for target in @target_battlers a = @active_battler # Si usa (Spell) Reflect, muestra Barrera y Rebote if (target.states.include?(Reflexivo) && a.current_action.kind == 0) || (target.states.include?(Reflexivo+1) && a.current_action.kind == 1) target.animation_id = Barrier_Anim target.animation_hit = (target.damage != "Miss") @active_battler.animation_id = @animation2_id @active_battler.animation_hit = (target.damage != "Miss") if @wait_count == 0 else # Si no lo usa, muestra lo típico target.animation_id = @animation2_id target.animation_hit = (target.damage != "Miss") end @spriteset.update # aún no refresca... end # Darle 8 frames extra a los sprites de daño o fallo @wait_count = 16 @phase4_step = 5 end def update_phase4_step5 @help_window.visible = false @status_window.refresh for target in @target_battlers if target.damage != nil target.damage_pop = true end end @phase4_step = 6 end end