Project1

标题: 帮忙改一下吸取敌人生命百分率的脚本 [打印本页]

作者: 梦到叶子了    时间: 2013-3-3 12:59
标题: 帮忙改一下吸取敌人生命百分率的脚本
本帖最后由 梦到叶子了 于 2013-3-3 13:10 编辑


这个脚本的功能是用来指定某些技能能够伤害敌人百分率的脚本,但是实在是太精确了,连小数点都出来了,能不能去掉小数点的数值
  1. #==============================================================================
  2. # ■ 技能固定伤害
  3. #------------------------------------------------------------------------------
  4. # 输出伤害有小波动
  5. #==============================================================================
  6. SKILL_DAMAGE_LIST = {

  7. # ID => 百分比
  8. # 增加技能请用英文逗号隔开
  9. # 比如
  10. # 1  => 0.5,
  11. # 2  => 0.25,
  12. # 36 => 0.7,
  13. # 22 => 0.4

  14. 45 => 0.05,
  15. 46 => 0.1,
  16. 47 => 0.2,
  17. 48 => 0.3,
  18. 49 => 0.3
  19. }


  20. class Game_Battler
  21.   #--------------------------------------------------------------------------
  22.   # ● 应用特技效果
  23.   #     user  : 特技的使用者 (battler)
  24.   #     skill : 特技
  25.   #--------------------------------------------------------------------------
  26.   def skill_effect(user, skill, _damage = nil)
  27.     # 清除会心一击标志
  28.     self.critical = false
  29.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  30.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  31.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  32.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  33.       # 过程结束
  34.       return false
  35.     end
  36.     # 清除有效标志
  37.     effective = false
  38.     # 公共事件 ID 是有效的情况下,设置为有效标志
  39.     effective |= skill.common_event_id > 0
  40.     # 第一命中判定
  41.     hit = skill.hit
  42.     if skill.atk_f > 0
  43.       hit *= user.hit / 100
  44.     end
  45.     hit_result = (rand(100) < hit)
  46.     # 不确定的特技的情况下设置为有效标志
  47.     effective |= hit < 100
  48.     # 命中的情况下
  49.     if hit_result == true
  50.       # 计算威力
  51.       power = skill.power + user.atk * skill.atk_f / 100
  52.       if power > 0
  53.         power -= self.pdef * skill.pdef_f / 200
  54.         power -= self.mdef * skill.mdef_f / 200
  55.         power = [power, 0].max
  56.       end
  57.       # 计算倍率
  58.       rate = 20
  59.       rate += (user.str * skill.str_f / 100)
  60.       rate += (user.dex * skill.dex_f / 100)
  61.       rate += (user.agi * skill.agi_f / 100)
  62.       rate += (user.int * skill.int_f / 100)
  63.       # 计算基本伤害
  64.       self.damage = power * rate / 20
  65.       # 属性修正
  66.       self.damage *= elements_correct(skill.element_set)
  67.       self.damage /= 100
  68.       # 伤害符号正确的情况下
  69.       if self.damage > 0
  70.         # 防御修正
  71.         if self.guarding?
  72.           self.damage /= 2
  73.         end
  74.       end
  75.       if _damage != nil
  76.         self.damage = _damage
  77.       end
  78.       # 分散
  79.       if skill.variance > 0 and self.damage.abs > 0
  80.         amp = [self.damage.abs * skill.variance / 100, 1].max
  81.         self.damage += rand(amp+1) + rand(amp+1) - amp
  82.       end
  83.       # 第二命中判定
  84.       eva = 8 * self.agi / user.dex + self.eva
  85.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  86.       hit = self.cant_evade? ? 100 : hit
  87.       hit_result = (rand(100) < hit)
  88.       # 不确定的特技的情况下设置为有效标志
  89.       effective |= hit < 100
  90.     end
  91.     # 命中的情况下
  92.     if hit_result == true
  93.       # 威力 0 以外的物理攻击的情况下
  94.       if skill.power != 0 and skill.atk_f > 0
  95.         # 状态冲击解除
  96.         remove_states_shock
  97.         # 设置有效标志
  98.         effective = true
  99.       end
  100.       # HP 的伤害减法运算
  101.       last_hp = self.hp
  102.       self.hp -= self.damage
  103.       effective |= self.hp != last_hp
  104.       # 状态变化
  105.       @state_changed = false
  106.       effective |= states_plus(skill.plus_state_set)
  107.       effective |= states_minus(skill.minus_state_set)
  108.       # 威力为 0 的场合
  109.       if skill.power == 0
  110.         # 伤害设置为空的字串
  111.         self.damage = ""
  112.         # 状态没有变化的情况下
  113.         unless @state_changed
  114.           # 伤害设置为 "Miss"
  115.           self.damage = "Miss"
  116.         end
  117.       end
  118.     # Miss 的情况下
  119.     else
  120.       # 伤害设置为 "Miss"
  121.       self.damage = "Miss"
  122.     end
  123.     # 不在战斗中的情况下
  124.     unless $game_temp.in_battle
  125.       # 伤害设置为 nil
  126.       self.damage = nil
  127.     end
  128.     # 过程结束
  129.     return effective
  130.   end
  131. end

  132. class Scene_Battle
  133.   #--------------------------------------------------------------------------
  134.   # ● 生成特技行动结果
  135.   #--------------------------------------------------------------------------
  136.   def make_skill_action_result
  137.     # 获取特技
  138.     [url=home.php?mod=space&uid=260100]@skill[/url] = $data_skills[@active_battler.current_action.skill_id]
  139.     # 如果不是强制行动
  140.     unless @active_battler.current_action.forcing
  141.       # 因为 SP 耗尽而无法使用的情况下
  142.       unless @active_battler.skill_can_use?(@skill.id)
  143.         # 清除强制行动对像的战斗者
  144.         $game_temp.forcing_battler = nil
  145.         # 移至步骤 1
  146.         @phase4_step = 1
  147.         return
  148.       end
  149.     end
  150.     # 消耗 SP
  151.     @active_battler.sp -= @skill.sp_cost
  152.     # 刷新状态窗口
  153.     @status_window.refresh
  154.     # 在帮助窗口显示特技名
  155.     @help_window.set_text(@skill.name, 1)
  156.     # 设置动画 ID
  157.     @animation1_id = @skill.animation1_id
  158.     @animation2_id = @skill.animation2_id
  159.     # 设置公共事件 ID
  160.     @common_event_id = @skill.common_event_id
  161.     # 设置对像侧战斗者
  162.     set_target_battlers(@skill.scope)
  163.     # 应用特技效果
  164.     for target in @target_battlers
  165.       _damage = nil
  166.       if SKILL_DAMAGE_LIST[@skill.id] != nil
  167.         _damage = target.hp * SKILL_DAMAGE_LIST[@skill.id]
  168.       end
  169.       target.skill_effect(@active_battler, @skill, _damage)
  170.     end
  171.   end
  172. end
复制代码

作者: zhangbanxian    时间: 2013-3-3 13:03
加个.to_i




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1