扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 102|回复: 0

[转载发布] 耗魔减免 发布某脚本

[复制链接]
累计送礼:
0 个
累计收礼:
0 个
  • TA的每日心情
    开心
    昨天 18:01
  • 签到天数: 114 天

    连续签到: 4 天

    [LV.6]常住居民II

    2338

    主题

    403

    回帖

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    6
    卡币
    10627
    OK点
    16
    推广点
    0
    同能卷
    0
    积分
    13396

    灌水之王

    发表于 2024-4-19 18:14:58 | 显示全部楼层 |阅读模式
    上次有个同志问这个问题
    我乱写了一段脚本 MS能用
    结果那提问的同志MS去火星打酱油了
    于是那帖MS要沉了
    可是连帖MS是要扣分的
    于是我就把这段东西贴上来
    (不算重复发吧………………)

    (总觉得模式2 MS有点问题)
    1. $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]# 17, 18, 19, 20 号状态带有减免效果# 别嫌烦! 我是脚本白痴!#==============================================================================# ■ Game_Battler 打酱油定义#------------------------------------------------------------------------------#  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的# 超级类来使用。#==============================================================================class Game_Battler  def skill_can_use?(skill_id)    jms = 1.0    if $scjm_mode = 1      $scis.each do |scn|        if state?(scn)          jms = jms * (100 - $scjm[scn]) / 100        end      end     else      $scis.each do |scn|        if state?(scn)          jms = jms - ($scjm[scn] / 100)        end      end      end    # SP 不足的情况下不能使用    if ($data_skills[skill_id].sp_cost * jms).to_i > 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  endend#==============================================================================# ■ Scene_Battle 打酱油定义#------------------------------------------------------------------------------#  处理战斗画面的类。#==============================================================================class Scene_Battle  def 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[scn]) / 100        end      end     else      $scis.each do |scn|        if @active_battler.state?(scn)          jms = jms - ($scjm[scn] / 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)    end  endend#==============================================================================# ■ Window_Skill 打酱油定义#------------------------------------------------------------------------------#  特技画面、战斗画面、显示可以使用的特技浏览的窗口。#==============================================================================class Window_Skill < Window_Selectable  def draw_item(index)    skill = @data[index]    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[scn]) / 100        end      end     else      $scis.each do |scn|        if @actor.state?(scn)          jms = jms - ($scjm[scn] / 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_Skill  def 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[scn]) / 100              end            end           else            $scis.each do |scn|              if @actor.state?(scn)                jms = jms - ($scjm[scn] / 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    end  end  def 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[scn]) / 100            end          end         else          $scis.each do |scn|            if @actor.state?(scn)              jms = jms - ($scjm[scn] / 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    end  end  end复制代码
    复制代码
                本帖来自P1论坛作者lxczzzcxl,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=157999  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2025-3-15 00:48 , Processed in 0.103027 second(s), 54 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表