Project1

标题: 如何让个别角色战斗选项有所变动 [打印本页]

作者: 灰啊灰    时间: 2017-2-8 16:43
标题: 如何让个别角色战斗选项有所变动
如,角色1的战斗选项:攻击,特技,防御,物品
    角色2的战斗选项:特技,防御,物品,待机
    角色3的战斗选项:特技,防御,待机
另外还有各项的效果,请求帮忙,谢谢
作者: 2357691704    时间: 2017-2-19 13:14
本帖最后由 2357691704 于 2017-2-19 13:48 编辑

找到一个脚本,但貌似无效。
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_Battle (分割定义 1)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的类。
  5. #==============================================================================
  6.  
  7. $宝宝ID = [1]#多个id有逗号隔开
  8.  
  9. class Scene_Battle
  10.   #--------------------------------------------------------------------------
  11.   # ● 主处理
  12.   #--------------------------------------------------------------------------
  13.   def main
  14.     # 初始化战斗用的各种暂时数据
  15.     $game_temp.in_battle = true
  16.     $game_temp.battle_turn = 0
  17.     $game_temp.battle_event_flags.clear
  18.     $game_temp.battle_abort = false
  19.     $game_temp.battle_main_phase = false
  20.     $game_temp.battleback_name = $game_map.battleback_name
  21.     $game_temp.forcing_battler = nil
  22.     # 初始化战斗用事件解释器
  23.     $game_system.battle_interpreter.setup(nil, 0)
  24.     # 准备队伍
  25.     @troop_id = $game_temp.battle_troop_id
  26.     $game_troop.setup(@troop_id)
  27.     # 生成角色命令窗口
  28.     s1 = $data_system.words.attack
  29.     s2 = $data_system.words.skill
  30.     s3 = $data_system.words.guard
  31.     s4 = $data_system.words.item
  32.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
  33.     @actor_command_window.y = 160
  34.     @actor_command_window.back_opacity = 160
  35.     @actor_command_window.active = false
  36.     @actor_command_window.visible = false
  37. ###############################################################################
  38.     @baby_command_window = Window_Command.new(160, ["攻击", "技能", "防御"])
  39.     @baby_command_window.y = 160 + 32
  40.     @baby_command_window.back_opacity = 160
  41.     @baby_command_window.active = false
  42.     @baby_command_window.visible = false
  43. ###############################################################################
  44.     # 生成其它窗口
  45.     @party_command_window = Window_PartyCommand.new
  46.     @help_window = Window_Help.new
  47.     @help_window.back_opacity = 160
  48.     @help_window.visible = false
  49.     @status_window = Window_BattleStatus.new
  50.     @message_window = Window_Message.new
  51.     # 生成活动块
  52.     @spriteset = Spriteset_Battle.new
  53.     # 初始化等待计数
  54.     @wait_count = 0
  55.     # 执行过渡
  56.     if $data_system.battle_transition == ""
  57.       Graphics.transition(20)
  58.     else
  59.       Graphics.transition(40, "Graphics/Transitions/" +
  60.         $data_system.battle_transition)
  61.     end
  62.     # 开始自由战斗回合
  63.     start_phase1
  64.     # 主循环
  65.     loop do
  66.       # 刷新游戏画面
  67.       Graphics.update
  68.       # 刷新输入信息
  69.       Input.update
  70.       # 刷新画面
  71.       update
  72.       # 如果画面切换的话就中断循环
  73.       if $scene != self
  74.         break
  75.       end
  76.     end
  77.     # 刷新地图
  78.     $game_map.refresh
  79.     # 准备过渡
  80.     Graphics.freeze
  81.     # 释放窗口
  82.     @actor_command_window.dispose
  83.     @party_command_window.dispose
  84.     @help_window.dispose
  85.     @status_window.dispose
  86.     @message_window.dispose
  87.     if @skill_window != nil
  88.       @skill_window.dispose
  89.     end
  90.     if @item_window != nil
  91.       @item_window.dispose
  92.     end
  93.     if @result_window != nil
  94.       @result_window.dispose
  95.     end
  96.     # 释放活动块
  97.     @spriteset.dispose
  98.     # 标题画面切换中的情况
  99.     if $scene.is_a?(Scene_Title)
  100.       # 淡入淡出画面
  101.       Graphics.transition
  102.       Graphics.freeze
  103.     end
  104.     # 战斗测试或者游戏结束以外的画面切换中的情况
  105.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  106.       $scene = nil
  107.     end
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 胜负判定
  111.   #--------------------------------------------------------------------------
  112.   def judge
  113.     # 全灭判定是真、并且同伴人数为 0 的情况下
  114.     if $game_party.all_dead? or $game_party.actors.size == 0
  115.       # 允许失败的情况下
  116.       if $game_temp.battle_can_lose
  117.         # 还原为战斗开始前的 BGM
  118.         $game_system.bgm_play($game_temp.map_bgm)
  119.         # 战斗结束
  120.         battle_end(2)
  121.         # 返回 true
  122.         return true
  123.       end
  124.       # 设置游戏结束标志
  125.       $game_temp.gameover = true
  126.       # 返回 true
  127.       return true
  128.     end
  129.     # 如果存在任意 1 个敌人就返回 false
  130.     for enemy in $game_troop.enemies
  131.       if enemy.exist?
  132.         return false
  133.       end
  134.     end
  135.     # 开始结束战斗回合 (胜利)
  136.     start_phase5
  137.     # 返回 true
  138.     return true
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 战斗结束
  142.   #     result : 結果 (0:胜利 1:失败 2:逃跑)
  143.   #--------------------------------------------------------------------------
  144.   def battle_end(result)
  145.     # 清除战斗中标志
  146.     $game_temp.in_battle = false
  147.     # 清除全体同伴的行动
  148.     $game_party.clear_actions
  149.     # 解除战斗用状态
  150.     for actor in $game_party.actors
  151.       actor.remove_states_battle
  152.     end
  153.     # 清除敌人
  154.     $game_troop.enemies.clear
  155.     # 调用战斗返回
  156.     if $game_temp.battle_proc != nil
  157.       $game_temp.battle_proc.call(result)
  158.       $game_temp.battle_proc = nil
  159.     end
  160.     # 切换到地图画面
  161.     $scene = Scene_Map.new
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● 设置战斗事件
  165.   #--------------------------------------------------------------------------
  166.   def setup_battle_event
  167.     # 正在执行战斗事件的情况下
  168.     if $game_system.battle_interpreter.running?
  169.       return
  170.     end
  171.     # 搜索全部页的战斗事件
  172.     for index in 0...$data_troops[@troop_id].pages.size
  173.       # 获取事件页
  174.       page = $data_troops[@troop_id].pages[index]
  175.       # 事件条件可以参考 c
  176.       c = page.condition
  177.       # 没有指定任何条件的情况下转到下一页
  178.       unless c.turn_valid or c.enemy_valid or
  179.              c.actor_valid or c.switch_valid
  180.         next
  181.       end
  182.       # 执行完毕的情况下转到下一页
  183.       if $game_temp.battle_event_flags[index]
  184.         next
  185.       end
  186.       # 确认回合条件
  187.       if c.turn_valid
  188.         n = $game_temp.battle_turn
  189.         a = c.turn_a
  190.         b = c.turn_b
  191.         if (b == 0 and n != a) or
  192.            (b > 0 and (n < 1 or n < a or n % b != a % b))
  193.           next
  194.         end
  195.       end
  196.       # 确认敌人条件
  197.       if c.enemy_valid
  198.         enemy = $game_troop.enemies[c.enemy_index]
  199.         if enemy == nil or enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
  200.           next
  201.         end
  202.       end
  203.       # 确认角色条件
  204.       if c.actor_valid
  205.         actor = $game_actors[c.actor_id]
  206.         if actor == nil or actor.hp * 100.0 / actor.maxhp > c.actor_hp
  207.           next
  208.         end
  209.       end
  210.       # 确认开关条件
  211.       if c.switch_valid
  212.         if $game_switches[c.switch_id] == false
  213.           next
  214.         end
  215.       end
  216.       # 设置事件
  217.       $game_system.battle_interpreter.setup(page.list, 0)
  218.       # 本页的范围是 [战斗] 或 [回合] 的情况下
  219.       if page.span <= 1
  220.         # 设置执行结束标志
  221.         $game_temp.battle_event_flags[index] = true
  222.       end
  223.       return
  224.     end
  225.   end
  226.   #--------------------------------------------------------------------------
  227.   # ● 刷新画面
  228.   #--------------------------------------------------------------------------
  229.   def update
  230.     # 执行战斗事件中的情况下
  231.     if $game_system.battle_interpreter.running?
  232.       # 刷新解释器
  233.       $game_system.battle_interpreter.update
  234.       # 强制行动的战斗者不存在的情况下
  235.       if $game_temp.forcing_battler == nil
  236.         # 执行战斗事件结束的情况下
  237.         unless $game_system.battle_interpreter.running?
  238.           # 继续战斗的情况下、再执行战斗事件的设置
  239.           unless judge
  240.             setup_battle_event
  241.           end
  242.         end
  243.         # 如果不是结束战斗回合的情况下
  244.         if @phase != 5
  245.           # 刷新状态窗口
  246.           @status_window.refresh
  247.         end
  248.       end
  249.     end
  250.     # 系统 (计时器)、刷新画面
  251.     $game_system.update
  252.     $game_screen.update
  253.     # 计时器为 0 的情况下
  254.     if $game_system.timer_working and $game_system.timer == 0
  255.       # 中断战斗
  256.       $game_temp.battle_abort = true
  257.     end
  258.     # 刷新窗口
  259.     @help_window.update
  260.     @party_command_window.update
  261.     @actor_command_window.update
  262. ################################################################################
  263.     @baby_command_window.update
  264. ################################################################################
  265.     @status_window.update
  266.     @message_window.update
  267.     # 刷新活动块
  268.     @spriteset.update
  269.     # 处理过渡中的情况下
  270.     if $game_temp.transition_processing
  271.       # 清除处理过渡中标志
  272.       $game_temp.transition_processing = false
  273.       # 执行过渡
  274.       if $game_temp.transition_name == ""
  275.         Graphics.transition(20)
  276.       else
  277.         Graphics.transition(40, "Graphics/Transitions/" +
  278.           $game_temp.transition_name)
  279.       end
  280.     end
  281.     # 显示信息窗口中的情况下
  282.     if $game_temp.message_window_showing
  283.       return
  284.     end
  285.     # 显示效果中的情况下
  286.     if @spriteset.effect?
  287.       return
  288.     end
  289.     # 游戏结束的情况下
  290.     if $game_temp.gameover
  291.       # 切换到游戏结束画面
  292.       $scene = Scene_Gameover.new
  293.       return
  294.     end
  295.     # 返回标题画面的情况下
  296.     if $game_temp.to_title
  297.       # 切换到标题画面
  298.       $scene = Scene_Title.new
  299.       return
  300.     end
  301.     # 中断战斗的情况下
  302.     if $game_temp.battle_abort
  303.       # 还原为战斗前的 BGM
  304.       $game_system.bgm_play($game_temp.map_bgm)
  305.       # 战斗结束
  306.       battle_end(1)
  307.       return
  308.     end
  309.     # 等待中的情况下
  310.     if @wait_count > 0
  311.       # 减少等待计数
  312.       @wait_count -= 1
  313.       return
  314.     end
  315.     # 强制行动的角色存在、
  316.     # 并且战斗事件正在执行的情况下
  317.     if $game_temp.forcing_battler == nil and
  318.        $game_system.battle_interpreter.running?
  319.       return
  320.     end
  321.     # 回合分支
  322.     case @phase
  323.     when 1  # 自由战斗回合
  324.       update_phase1
  325.     when 2  # 同伴命令回合
  326.       update_phase2
  327.     when 3  # 角色命令回合
  328.       update_phase3
  329.     when 4  # 主回合
  330.       update_phase4
  331.     when 5  # 战斗结束回合
  332.       update_phase5
  333.     end
  334.   end
  335. end





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