#============================================================================== # ■ Game_Battler (分割定义 3) #------------------------------------------------------------------------------ # 处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的 # 超级类来使用。 #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 可以使用特技的判定 # skill_id : 特技 ID #-------------------------------------------------------------------------- def skill_can_use?(skill_id) # SP 不足的情况下不能使用 if $data_skills[skill_id].sp_cost > self.sp return false end # 战斗不能的情况下不能使用 if dead? return false end # 沉默状态的情况下、物理特技以外的特技不能使用 if $data_skills[skill_id].atk_f == 0 and self.restriction == 1 return false end # 获取可以使用的时机 occasion = $data_skills[skill_id].occasion # 战斗中的情况下 if $game_temp.in_battle # [平时] 或者是 [战斗中] 可以使用 return (occasion == 0 or occasion == 1) # 不是战斗中的情况下 else # [平时] 或者是 [菜单中] 可以使用 return (occasion == 0 or occasion == 2) end end #-------------------------------------------------------------------------- # ● 应用通常攻击效果 # attacker : 攻击者 (battler) #-------------------------------------------------------------------------- def attack_effect(attacker) # 清除会心一击标志 self.critical = false # 第一命中判定 hit_result = (rand(100) < attacker.hit) # 命中的情况下 if hit_result == true # 计算基本伤害 atk = [attacker.atk - self.pdef / 2, 0].max self.damage = atk * (20 + attacker.str) / 20 # 属性修正 self.damage *= elements_correct(attacker.element_set) self.damage /= 100 ################角色1行动一次显示恢复数值################### if attacker.is_a?(Game_Actor) && attacker.id == 1 attacker.hp+=1 and attacker.damage=-1 and attacker.damage_pop=true end ##############角色1行动一次不显示恢复数值###################### if attacker.is_a?(Game_Actor) && attacker.id == 1 attacker.hp+=1 end ##################################################### ##############角色17号状态下恢复数值############## if attacker.state?(17) attacker.hp+=1 and attacker.damage=-1 and attacker.damage_pop=true end ################################################# # 伤害符号正确的情况下 if self.damage > 0 # 会心一击修正 if rand(100) < 4 * attacker.dex / self.agi self.damage *= 2 self.critical = true end # 防御修正 if self.guarding? self.damage /= 2 end end # 分散 if self.damage.abs > 0 amp = [self.damage.abs * 15 / 100, 1].max self.damage += rand(amp+1) + rand(amp+1) - amp end # 第二命中判定 eva = 8 * self.agi / attacker.dex + self.eva hit = self.damage < 0 ? 100 : 100 - eva hit = self.cant_evade? ? 100 : hit hit_result = (rand(100) < hit) end # 命中的情况下 if hit_result == true # 状态冲击解除 remove_states_shock # HP 的伤害计算 self.hp -= self.damage # 状态变化 @state_changed = false states_plus(attacker.plus_state_set) states_minus(attacker.minus_state_set) # Miss 的情况下 else # 伤害设置为 "Miss" self.damage = "Miss" # 清除会心一击标志 self.critical = false end # 过程结束 return true end #-------------------------------------------------------------------------- # ● 应用特技效果 # user : 特技的使用者 (battler) # skill : 特技 #-------------------------------------------------------------------------- def skill_effect(user, skill) # 清除会心一击标志 self.critical = false # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、 # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下 if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1) # 过程结束 return false end # 清除有效标志 effective = false # 公共事件 ID 是有效的情况下,设置为有效标志 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 # 命中的情况下 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 ################角色1行动一次显示恢复数值################### if user.is_a?(Game_Actor) && user.id == 1 user.hp+=1 and user.damage=-1 and user.damage_pop=true end ##############角色1行动一次不显示恢复数值###################### if user.is_a?(Game_Actor) && user.id == 1 user.hp+=1 end ##############角色17号状态下行动一次恢复数值############## if user.state?(17) user.hp+=1 and user.damage=-1 and user.damage_pop=true 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)
270.38 KB, 下载次数: 273
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |