じ☆ve冰风 发表于 2024-4-19 18:14:58

耗魔减免 发布某脚本

上次有个同志问这个问题
我乱写了一段脚本 MS能用
结果那提问的同志MS去火星打酱油了
于是那帖MS要沉了
可是连帖MS是要扣分的
于是我就把这段东西贴上来
(不算重复发吧………………)

(总觉得模式2 MS有点问题)$scjm_mode = 1# 模式 1 乘法计算(1*(1-X)*(1-Y))# 模式 2 加法计算(1-X-Y)# 真是够傻瓜化了……$scjm = {   17 => 20 ,18 => 100 ,19 => 200 ,20 => 200}# 17 号状态 20 %减免# 18 号状态 不耗魔# 19 20号状态 笑而不语# 在同时存在19 20号状态时 两种模式的区别就体现出来了。# ......$scis = # 17, 18, 19, 20 号状态带有减免效果# 别嫌烦! 我是脚本白痴!#==============================================================================# ■ Game_Battler 打酱油定义#------------------------------------------------------------------------------#  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的# 超级类来使用。#==============================================================================class Game_Battlerdef skill_can_use?(skill_id)    jms = 1.0    if $scjm_mode = 1      $scis.each do |scn|      if state?(scn)          jms = jms * (100 - $scjm) / 100      end      end   else      $scis.each do |scn|      if state?(scn)          jms = jms - ($scjm / 100)      end      end      end    # SP 不足的情况下不能使用    if ($data_skills.sp_cost * jms).to_i > self.sp      return false    end    # 战斗不能的情况下不能使用    if dead?      return false    end    # 沉默状态的情况下、物理特技以外的特技不能使用    if $data_skills.atk_f == 0 and self.restriction == 1      return false    end    # 获取可以使用的时机    occasion = $data_skills.occasion    # 战斗中的情况下    if $game_temp.in_battle      # [平时] 或者是 [战斗中] 可以使用      return (occasion == 0 or occasion == 1)    # 不是战斗中的情况下    else      # [平时] 或者是 [菜单中] 可以使用      return (occasion == 0 or occasion == 2)    endendend#==============================================================================# ■ Scene_Battle 打酱油定义#------------------------------------------------------------------------------#  处理战斗画面的类。#==============================================================================class Scene_Battledef make_skill_action_result    # 获取特技    @skill = $data_skills[@active_battler.current_action.skill_id]    # 如果不是强制行动    unless @active_battler.current_action.forcing      # 因为 SP 耗尽而无法使用的情况下      unless @active_battler.skill_can_use?(@skill.id)      # 清除强制行动对像的战斗者      $game_temp.forcing_battler = nil      # 移至步骤 1      @phase4_step = 1      return      end    end    jms = 1.0    if $scjm_mode = 1      $scis.each do |scn|      if @active_battler.state?(scn)          jms = jms * (100 - $scjm) / 100      end      end   else      $scis.each do |scn|      if @active_battler.state?(scn)          jms = jms - ($scjm / 100)      end      end      end   # 消耗 SP    @active_battler.sp -= (@skill.sp_cost * jms).to_i    # 刷新状态窗口    @status_window.refresh    # 在帮助窗口显示特技名    @help_window.set_text(@skill.name, 1)    # 设置动画 ID    @animation1_id = @skill.animation1_id    @animation2_id = @skill.animation2_id    # 设置公共事件 ID    @common_event_id = @skill.common_event_id    # 设置对像侧战斗者    set_target_battlers(@skill.scope)    # 应用特技效果    for target in @target_battlers      target.skill_effect(@active_battler, @skill)    endendend#==============================================================================# ■ Window_Skill 打酱油定义#------------------------------------------------------------------------------#  特技画面、战斗画面、显示可以使用的特技浏览的窗口。#==============================================================================class Window_Skill < Window_Selectabledef draw_item(index)    skill = @data    if @actor.skill_can_use?(skill.id)      self.contents.font.color = normal_color    else      self.contents.font.color = disabled_color    end    jms = 1.0    if $scjm_mode = 1      $scis.each do |scn|      if @actor.state?(scn)          jms = jms * (100 - $scjm) / 100      end      end   else      $scis.each do |scn|      if @actor.state?(scn)          jms = jms - ($scjm / 100)      end      end      end    x = 4 + index % 2 * (288 + 32)    y = index / 2 * 32    rect = Rect.new(x, y, self.width / @column_max - 32, 32)    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))    bitmap = RPG::Cache.icon(skill.icon_name)    opacity = self.contents.font.color == normal_color ? 255 : 128    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)    self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)    self.contents.draw_text(x + 232, y, 48, 32, (skill.sp_cost * jms).to_i.to_s, 2)endend#==============================================================================# ■ Scene_Skill 打酱油定义#------------------------------------------------------------------------------#  处理特技画面的类。#==============================================================================class Scene_Skilldef update_skill    # 按下 B 键的情况下    if Input.trigger?(Input::B)      # 演奏取消 SE      $game_system.se_play($data_system.cancel_se)      # 切换到菜单画面      $scene = Scene_Menu.new(1)      return    end    # 按下 C 键的情况下    if Input.trigger?(Input::C)      # 获取特技窗口现在选择的特技的数据      @skill = @skill_window.skill      # 不能使用的情况下      if @skill == nil or not @actor.skill_can_use?(@skill.id)      # 演奏冻结 SE      $game_system.se_play($data_system.buzzer_se)      return      end      # 演奏确定 SE      $game_system.se_play($data_system.decision_se)      # 效果范围是我方的情况下      if @skill.scope >= 3      # 激活目标窗口      @skill_window.active = false      @target_window.x = (@skill_window.index + 1) % 2 * 304      @target_window.visible = true      @target_window.active = true      # 设置效果范围 (单体/全体) 的对应光标位置      if @skill.scope == 4 || @skill.scope == 6          @target_window.index = -1      elsif @skill.scope == 7          @target_window.index = @actor_index - 10      else          @target_window.index = 0      end      # 效果在我方以外的情况下      else      # 公共事件 ID 有效的情况下      if @skill.common_event_id > 0          # 预约调用公共事件          $game_temp.common_event_id = @skill.common_event_id          # 演奏特技使用时的 SE          $game_system.se_play(@skill.menu_se)          # 消耗 SP          jms = 1.0          if $scjm_mode = 1            $scis.each do |scn|            if @actor.state?(scn)                jms = jms * (100 - $scjm) / 100            end            end         else            $scis.each do |scn|            if @actor.state?(scn)                jms = jms - ($scjm / 100)            end            end            end                  @actor.sp -= (@skill.sp_cost * jms).to_i          # 再生成各窗口的内容          @status_window.refresh          @skill_window.refresh          @target_window.refresh          # 切换到地图画面          $scene = Scene_Map.new          return      end      end      return    end    # 按下 R 键的情况下    if Input.trigger?(Input::R)      # 演奏光标 SE      $game_system.se_play($data_system.cursor_se)      # 移至下一位角色      @actor_index += 1      @actor_index %= $game_party.actors.size      # 切换到别的特技画面      $scene = Scene_Skill.new(@actor_index)      return    end    # 按下 L 键的情况下    if Input.trigger?(Input::L)      # 演奏光标 SE      $game_system.se_play($data_system.cursor_se)      # 移至上一位角色      @actor_index += $game_party.actors.size - 1      @actor_index %= $game_party.actors.size      # 切换到别的特技画面      $scene = Scene_Skill.new(@actor_index)      return    endenddef update_target    # 按下 B 键的情况下    if Input.trigger?(Input::B)      # 演奏取消 SE      $game_system.se_play($data_system.cancel_se)      # 删除目标窗口      @skill_window.active = true      @target_window.visible = false      @target_window.active = false      return    end    # 按下 C 键的情况下    if Input.trigger?(Input::C)      # 因为 SP 不足而无法使用的情况下      unless @actor.skill_can_use?(@skill.id)      # 演奏冻结 SE      $game_system.se_play($data_system.buzzer_se)      return      end      # 目标是全体的情况下      if @target_window.index == -1      # 对同伴全体应用特技使用效果      used = false      for i in $game_party.actors          used |= i.skill_effect(@actor, @skill)      end      end      # 目标是使用者的情况下      if @target_window.index = 0      # 对目标角色应用特技的使用效果      target = $game_party.actors[@target_window.index]      used = target.skill_effect(@actor, @skill)      end      # 使用特技的情况下      if used      # 演奏特技使用时的 SE      $game_system.se_play(@skill.menu_se)      # 消耗 SP      jms = 1.0      if $scjm_mode = 1          $scis.each do |scn|            if @actor.state?(scn)            jms = jms * (100 - $scjm) / 100            end          end         else          $scis.each do |scn|            if @actor.state?(scn)            jms = jms - ($scjm / 100)            end          end          end                        @actor.sp -= (@skill.sp_cost * jms).to_i      # 再生成各窗口内容      @status_window.refresh      @skill_window.refresh      @target_window.refresh      # 全灭的情况下      if $game_party.all_dead?          # 切换到游戏结束画面          $scene = Scene_Gameover.new          return      end      # 公共事件 ID 有效的情况下      if @skill.common_event_id > 0          # 预约调用公共事件          $game_temp.common_event_id = @skill.common_event_id          # 切换到地图画面          $scene = Scene_Map.new          return      end      end      # 无法使用特技的情况下      unless used      # 演奏冻结 SE      $game_system.se_play($data_system.buzzer_se)      end      return    endendend复制代码
            本帖来自P1论坛作者lxczzzcxl,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=157999若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 耗魔减免 发布某脚本