设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
Project1 查看内容

随机全体化的武器装备(教学)

2005-10-18 00:00| 发布者: 柳柳| 查看: 5424| 评论: 0|原作者: 66RPG

摘要:    作者  柳柳(大陆)  版本与更新  2005年8月更新  相关网址    范例工程 不提供  教程内容 刚刚有人在QQ上问到怎么制作能够打击敌人全体的武
 

 作者

 柳柳(大陆)

 版本与更新

 2005年8月更新

 相关网址

 

 范例工程

不提供



 教程内容

刚刚有人在QQ上问到怎么制作能够打击敌人全体的武器,我本想说“战斗特殊效果”可以,但想想,那个脚本一用,战斗冲突到无法再使用任何战斗相关脚本,故决定简单说说这个功能怎么实现,你可以做出属于你的兵器。

战斗中,判断我方普通攻击目标的是在Scene_Battle 4里面的198行开始,如下。我来添加一些注释大家就好理解了。

      # 行动方的战斗者是角色的情况下
      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

具体“怎么怎么样的情况”到底是什么,你可以查,如果懂了更好,但是对解决这个问题没有任何影响和帮助(嗯……这话的口气有点像新东方专门应试的老师……)。把else到对应的end之间的内容稍加修改,如下:

        else         
          if @active_battler.weapon_id == 1 or @active_battler.weapon_id == 2   #当角色装备1号或者2号武器
            if rand(100)<50       #50%几率。这里rand(100)会给出一个0-99的随机数,<50就是50%概率
              for enemy in $game_troop.enemies        #以下几行表示把所有敌人都放到目标中去。这是从别的地方考过来的
                if enemy.exist?
                  @target_battlers.push(enemy)
                end
              end
            else             #50%以外情况,还是正常那套。   
              index = @active_battler.current_action.target_index
              target = $game_troop.smooth_target_enemy(index)
            end
          else
            index = @active_battler.current_action.target_index
            target = $game_troop.smooth_target_enemy(index)
          end 
        end

至于具体正常那套是什么,不用管。考过来就是了。

但这样还有一些小问题,就是这个函数本来用的是target这么个临时变量,现在直接操作了@target_battlers,所以把下面一行:

      # 设置对像方的战斗者序列
      @target_battlers = [target]

修改一下:

      if @target_battlers == []
        # 设置对像方的战斗者序列
        @target_battlers = [target]

      end     

这样就可以了。这个修改是说,如果没有打出全体攻击,按照以前的方法走。

以下是完成后的脚本。也可以插入到main前面直接用。用1号和2号兵器打人的时候,50%几率打击敌人全体。所有修改内容上面都讲了,其他都是照搬。看看,脚本也没什么神秘的吗,这么轻易就一大篇脚本。

注意的一点,你最好在你的脚本中搜索“def make_basic_action_result”这个内容,改搜索出来的比较靠下的一个脚本上面的,这样才能保证有效。

脚本全部内容:

 

# ————————————————————————————————————
# 本脚本来自www.66rpg.com,转载请保留此信息
# ————————————————————————————————————
class Scene_Battle
  #--------------------------------------------------------------------------
  # ● 生成基本行动结果
  #--------------------------------------------------------------------------
  def make_basic_action_result
    # 攻击的情况下
    if @active_battler.current_action.basic == 0
      # 设置攻击 ID
      @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         
          if @active_battler.weapon_id == 1 or @active_battler.weapon_id == 2
            if rand(100)<50
              for enemy in $game_troop.enemies
                if enemy.exist?
                  @target_battlers.push(enemy)
                end
              end
            else
              index = @active_battler.current_action.target_index
              target = $game_troop.smooth_target_enemy(index)
            end
          else
            index = @active_battler.current_action.target_index
            target = $game_troop.smooth_target_enemy(index)
          end
        end
      end     
      if @target_battlers == []
        # 设置对像方的战斗者序列
        @target_battlers = [target]
      end     
      # 应用通常攻击效果
      for target in @target_battlers
        target.attack_effect(@active_battler)
      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("逃跑", 1)
      # 逃跑
      @active_battler.escape
      return
    end
    # 什么也不做的情况下
    if @active_battler.current_action.basic == 3
      # 清除强制行动对像的战斗者
      $game_temp.forcing_battler = nil
      # 移至步骤 1
      @phase4_step = 1
      return
    end
  end
end

附带截图一张:


 

教程的通用说明

本站发布的教程,大多经过一些测试,应该都能够实现相应功能。但不保证所有的教程都是最优化的制作方法。

相关问题,点击发布贴进行讨论。谢谢您的鼓励与支持。


鲜花
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-21 19:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部