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

Project1

 找回密码
 注册会员
搜索
查看: 2363|回复: 2
打印 上一主题 下一主题

[已经过期] 战斗后调用公共事件问题

[复制链接]

Lv2.观梦者

梦石
0
星屑
374
在线时间
61 小时
注册时间
2009-9-4
帖子
32
跳转到指定楼层
1
 楼主| 发表于 2013-2-9 21:00:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
我在游戏中使用了某前辈发的七属性变身公共事件,
然后又使用了另一位前辈发的新战斗界面与菜单界面后出现的问题。。。

原本在战斗结束后应该会调用公共事件以达到修改战斗图与装备技能还原的效果,
使用了新战斗界面脚本后,我照着说明在脚本里插进了调用公共事件的指令后并没有效果,请大家看看是怎么回事。



超完美七属性(龙战士)变身系统--事件版教学
原帖地址:http://www.66rpg.com/articles/4731

RMXP 游戏界面以及战斗界面系统
原帖地址:http://www.66rpg.com/articles/4954



原帖里是这样说的:
现在把脚本(Scene_Battle 2里)动一点点的手脚。
(1)在$game_system.se_play($data_system.escape_se)前 (逃跑時的播放SE前)
(2)在@status_window.refresh后 (结束战斗回合)
添加以下命令句:
$game_temp.common_event_id = 32  #调用刚刚设置初始化设置所属的公共事件ID(這里是32)
@wait_count = 1
(若是采用RTAB系统的人只要找到相对位置即可)



我的修改是这样的:
  1. #==============================================================================
  2. # ■ Game_Actor
  3. #------------------------------------------------------------------------------
  4. #  处理角色的类。本类在 Game_Actors 类 ($game_actors)
  5. # 的内部使用、Game_Party 类请参考 ($game_party) 。
  6. #==============================================================================

  7. class Game_Actor < Game_Battler
  8. #--------------------------------------------------------------------------
  9. # ● 取得战斗画面的 X 坐标
  10. #--------------------------------------------------------------------------
  11. def screen_x
  12. case self.index
  13. when 0
  14.    return 500
  15. when 1
  16.    return 450
  17. when 2
  18.    return 500
  19. when 3
  20.    return 450
  21. else
  22.    return 600

  23.   end
  24. end
  25. #--------------------------------------------------------------------------
  26. # ● 取得战斗画面的 Y 坐标
  27. #--------------------------------------------------------------------------
  28. def screen_y
  29. case self.index
  30. when 0
  31.    return 360
  32. when 1
  33.    return 300
  34. when 2
  35.    return 240
  36. when 3
  37.    return 180
  38. else
  39.    return 1000
  40.   end
  41. end
  42. #--------------------------------------------------------------------------
  43. # ● 取得战斗画面的 Z 坐标
  44. #--------------------------------------------------------------------------
  45. def screen_z
  46. case self.index
  47. when 0
  48.    return 10
  49. when 1
  50.    return 9
  51. when 2
  52.    return 8
  53. when 3
  54.    return 7
  55. else
  56.    return 0
  57.    end
  58. end
  59. end




  60. #==============================================================================
  61. # ■ Window_BattleStatus
  62. #------------------------------------------------------------------------------
  63. #  显示战斗画面同伴状态的窗口。
  64. #==============================================================================

  65. class Window_BattleStatus < Window_Base
  66.   #--------------------------------------------------------------------------
  67.   # ● 初始化对像
  68.   #--------------------------------------------------------------------------
  69.   def initialize
  70.     super(0, 320, 640, 160)
  71.     self.opacity = 0
  72.     self.contents = Bitmap.new(width - 32, height - 32)
  73.     @level_up_flags = [false, false, false, false]
  74.     refresh
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 释放
  78.   #--------------------------------------------------------------------------
  79.   def dispose
  80.     super
  81.   end
  82.   #--------------------------------------------------------------------------
  83.   # ● 设置升级标志
  84.   #     actor_index : 角色索引
  85.   #--------------------------------------------------------------------------
  86.   def level_up(actor_index)
  87.     @level_up_flags[actor_index] = true
  88.   end
  89.   
  90.   def draw_actor_face(actor,x,y)
  91. bitmap = RPG::Cache.battler(actor.name + "_C" , actor.battler_hue)
  92. self.contents.blt(x,y,bitmap,Rect.new(0,0,bitmap.width,bitmap.height ))
  93. end
  94.   #--------------------------------------------------------------------------
  95.   # ● 刷新
  96.   #--------------------------------------------------------------------------
  97.   def refresh
  98.     self.contents.clear
  99.     @item_max = $game_party.actors.size
  100.     for i in 0...$game_party.actors.size
  101.       actor = $game_party.actors[i]
  102.       actor_x = i * 160 + 4
  103.       self.contents.font.size = 20
  104.       draw_actor_face(actor,actor_x,0)
  105.       draw_actor_name(actor, actor_x, 0)
  106.       draw_actor_hp(actor, actor_x, 64, 120)
  107.       draw_actor_sp(actor, actor_x, 80, 120)
  108.       if @level_up_flags[i]
  109.         self.contents.font.color = normal_color
  110.         self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
  111.       else
  112.         self.contents.font.size = 16
  113.         draw_actor_state(actor, actor_x, 96)
  114.       end
  115.     end
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● 刷新画面
  119.   #--------------------------------------------------------------------------
  120.   def update
  121.     super
  122.     # 主界面的不透明度下降
  123.     if $game_temp.battle_main_phase
  124.       self.contents_opacity -= 4 if self.contents_opacity > 191
  125.     else
  126.       self.contents_opacity += 4 if self.contents_opacity < 255
  127.     end
  128.   end
  129. end

  130. #==============================================================================
  131. # ■ Window_BattleResult
  132. #------------------------------------------------------------------------------
  133. #  战斗结束时、显示获得的 EXP 及金钱的窗口。
  134. #==============================================================================

  135. class Window_BattleResult < Window_Base
  136.   #--------------------------------------------------------------------------
  137.   # ● 初始化对像
  138.   #     exp       : EXP
  139.   #     gold      : 金钱
  140.   #     treasures : 宝物
  141.   #--------------------------------------------------------------------------
  142.   def initialize(exp, gold, treasures)
  143.     [url=home.php?mod=space&uid=13302]@exp[/url] = exp
  144.     [url=home.php?mod=space&uid=236945]@gold[/url] = gold
  145.     @treasures = treasures
  146.     super(160, 0, 320, @treasures.size * 32 + 64)
  147.        self.z = 999
  148.     self.contents = Bitmap.new(width - 32, height - 32)
  149.     self.y = 160 - height / 2
  150.     self.back_opacity = 160
  151.     self.visible = false
  152.     refresh
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ● 刷新
  156.   #--------------------------------------------------------------------------
  157.   def refresh
  158.     self.contents.clear
  159.     x = 4
  160.     self.contents.font.color = normal_color
  161.     cx = contents.text_size(@exp.to_s).width
  162.     self.contents.draw_text(x, 0, cx, 32, @exp.to_s)
  163.     x += cx + 4
  164.     self.contents.font.color = system_color
  165.     cx = contents.text_size("EXP").width
  166.     self.contents.draw_text(x, 0, 64, 32, "EXP")
  167.     x += cx + 16
  168.     self.contents.font.color = normal_color
  169.     cx = contents.text_size(@gold.to_s).width
  170.     self.contents.draw_text(x, 0, cx, 32, @gold.to_s)
  171.     x += cx + 4
  172.     self.contents.font.color = system_color
  173.     self.contents.draw_text(x, 0, 128, 32, $data_system.words.gold)
  174.     y = 32
  175.     for item in @treasures
  176.       draw_item_name(item, 4, y)
  177.       y += 32
  178.     end
  179.   end
  180. end

  181. #==============================================================================
  182. # ■ Spriteset_Battle
  183. #------------------------------------------------------------------------------
  184. #  处理战斗画面的活动块的类。本类在 Scene_Battle 类
  185. # 的内部使用。
  186. #==============================================================================

  187. class Spriteset_Battle
  188.   #--------------------------------------------------------------------------
  189.   # ● 定义实例变量
  190.   #--------------------------------------------------------------------------
  191.   attr_reader   :viewport1                # 敌人方的显示端口
  192.   attr_reader   :viewport2                # 角色方的显示端口
  193.   #--------------------------------------------------------------------------
  194.   # ● 初始化变量
  195.   #--------------------------------------------------------------------------
  196.   def initialize
  197.     # 生成显示端口
  198.     @viewport1 = Viewport.new(0, 0, 640, 480)
  199.     @viewport2 = Viewport.new(0, 0, 640, 480)
  200.     @viewport3 = Viewport.new(0, 0, 640, 480)
  201.     @viewport4 = Viewport.new(0, 0, 640, 480)
  202.     @viewport2.z = 101
  203.     @viewport3.z = 200
  204.     @viewport4.z = 5000
  205.     # 生成战斗背景活动块
  206.     @battleback_sprite = Sprite.new(@viewport1)
  207.     # 生成敌人活动块
  208.     @enemy_sprites = []
  209.     for enemy in $game_troop.enemies.reverse
  210.       @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  211.     end
  212.     # 生成敌人活动块
  213.     @actor_sprites = []
  214.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  215.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  216.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  217.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  218.     # 生成天候
  219.     @weather = RPG::Weather.new(@viewport1)
  220.     # 生成图片活动块
  221.     @picture_sprites = []
  222.     for i in 51..100
  223.       @picture_sprites.push(Sprite_Picture.new(@viewport3,
  224.         $game_screen.pictures[i]))
  225.     end
  226.     # 生成计时器块
  227.     @timer_sprite = Sprite_Timer.new
  228.     # 刷新画面
  229.     update
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ● 释放
  233.   #--------------------------------------------------------------------------
  234.   def dispose
  235.     # 如果战斗背景位图存在的情况下就释放
  236.     if @battleback_sprite.bitmap != nil
  237.       @battleback_sprite.bitmap.dispose
  238.     end
  239.     # 释放战斗背景活动块
  240.     @battleback_sprite.dispose
  241.     # 释放敌人活动块、角色活动块
  242.     for sprite in @enemy_sprites + @actor_sprites
  243.       sprite.dispose
  244.     end
  245.     # 释放天候
  246.     @weather.dispose
  247.     # 释放图片活动块
  248.     for sprite in @picture_sprites
  249.       sprite.dispose
  250.     end
  251.     # 释放计时器活动块
  252.     @timer_sprite.dispose
  253.     # 释放显示端口
  254.     @viewport1.dispose
  255.     @viewport2.dispose
  256.     @viewport3.dispose
  257.     @viewport4.dispose
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # ● 显示效果中判定
  261.   #--------------------------------------------------------------------------
  262.   def effect?
  263.     # 如果是在显示效果中的话就返回 true
  264.     for sprite in @enemy_sprites + @actor_sprites
  265.       return true if sprite.effect?
  266.     end
  267.     return false
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ● 刷新画面
  271.   #--------------------------------------------------------------------------
  272.   def update
  273.     # 刷新角色的活动块 (对应角色的替换)
  274.     @actor_sprites[0].battler = $game_party.actors[0]
  275.     @actor_sprites[1].battler = $game_party.actors[1]
  276.     @actor_sprites[2].battler = $game_party.actors[2]
  277.     @actor_sprites[3].battler = $game_party.actors[3]
  278.     # 战斗背景的文件名与现在情况有差异的情况下
  279.     if @battleback_name != $game_temp.battleback_name
  280.       @battleback_name = $game_temp.battleback_name
  281.       if @battleback_sprite.bitmap != nil
  282.         @battleback_sprite.bitmap.dispose
  283.       end
  284.       @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
  285.       @battleback_sprite.src_rect.set(0, 0, 640, 480)
  286.     end
  287.     # 刷新战斗者的活动块
  288.     for sprite in @enemy_sprites + @actor_sprites
  289.       sprite.update
  290.     end
  291.     # 刷新天气图形
  292.     @weather.type = $game_screen.weather_type
  293.     @weather.max = $game_screen.weather_max
  294.     @weather.update
  295.     # 刷新图片活动块
  296.     for sprite in @picture_sprites
  297.       sprite.update
  298.     end
  299.     # 刷新计时器活动块
  300.     @timer_sprite.update
  301.     # 设置画面的色调与震动位置
  302.     @viewport1.tone = $game_screen.tone
  303.     @viewport1.ox = $game_screen.shake
  304.     # 设置画面的闪烁色
  305.     @viewport4.color = $game_screen.flash_color
  306.     # 刷新显示端口
  307.     @viewport1.update
  308.     @viewport2.update
  309.     @viewport4.update
  310.   end
  311. end




  312. #==============================================================================
  313. # ■ Scene_Battle (分割定义 1)
  314. #------------------------------------------------------------------------------
  315. #  处理战斗画面的类。
  316. #==============================================================================

  317. class Scene_Battle
  318.   #--------------------------------------------------------------------------
  319.   # ● 主处理
  320.   #--------------------------------------------------------------------------
  321.   def main
  322.     # 初始化战斗用的各种暂时数据
  323.     $game_temp.in_battle = true
  324.     $game_temp.battle_turn = 0
  325.     $game_temp.battle_event_flags.clear
  326.     $game_temp.battle_abort = false
  327.     $game_temp.battle_main_phase = false
  328.     $game_temp.battleback_name = $game_map.battleback_name
  329.     $game_temp.forcing_battler = nil
  330.     # 初始化战斗用事件解释器
  331.     $game_system.battle_interpreter.setup(nil, 0)
  332.     # 准备队伍
  333.     @troop_id = $game_temp.battle_troop_id
  334.     $game_troop.setup(@troop_id)
  335.     # 生成角色命令窗口
  336.     s1 = $data_system.words.attack
  337.     s2 = $data_system.words.skill
  338.     s3 = $data_system.words.guard
  339.     s4 = $data_system.words.item
  340.    s5 = "逃跑"
  341. @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4, s5])
  342.      # 不能逃跑的情况下
  343.     if $game_temp.battle_can_escape == false
  344.       @actor_command_window.disable_item(4)
  345.     end
  346.     @actor_command_window.y = 160
  347.     @actor_command_window.back_opacity = 160
  348.     @actor_command_window.active = false
  349.     @actor_command_window.visible = false
  350.     # 生成其它窗口
  351.     @party_command_window = Window_PartyCommand.new
  352.     @help_window = Window_Help.new
  353.     @help_window.back_opacity = 160
  354.     @help_window.visible = false
  355.     @status_window = Window_BattleStatus.new
  356.     @message_window = Window_Message.new
  357.     # 生成活动块
  358.     @spriteset = Spriteset_Battle.new
  359.     # 初始化等待计数
  360.     @wait_count = 0
  361.     # 执行过渡
  362.     if $data_system.battle_transition == ""
  363.       Graphics.transition(20)
  364.     else
  365.       Graphics.transition(40, "Graphics/Transitions/" +
  366.         $data_system.battle_transition)
  367.     end
  368.     # 开始自由战斗回合
  369.     start_phase1
  370.     # 主循环
  371.     loop do
  372.       # 刷新游戏画面
  373.       Graphics.update
  374.       # 刷新输入信息
  375.       Input.update
  376.       # 刷新画面
  377.       update
  378.       # 如果画面切换的话就中断循环
  379.       if $scene != self
  380.         break
  381.       end
  382.     end
  383.     # 刷新地图
  384.     $game_map.refresh
  385.     # 准备过渡
  386.     Graphics.freeze
  387.     # 释放窗口
  388.     @actor_command_window.dispose
  389.     @party_command_window.dispose
  390.     @help_window.dispose
  391.     @status_window.dispose
  392.     @message_window.dispose
  393.     if @skill_window != nil
  394.       @skill_window.dispose
  395.     end
  396.     if @item_window != nil
  397.       @item_window.dispose
  398.     end
  399.     if @result_window != nil
  400.       @result_window.dispose
  401.     end
  402.     # 释放活动块
  403.     @spriteset.dispose
  404.     # 标题画面切换中的情况
  405.     if $scene.is_a?(Scene_Title)
  406.       # 淡入淡出画面
  407.       Graphics.transition
  408.       Graphics.freeze
  409.     end
  410.     # 战斗测试或者游戏结束以外的画面切换中的情况
  411.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  412.       $scene = nil
  413.     end
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # ● 胜负判定
  417.   #--------------------------------------------------------------------------
  418.   def judge
  419.     # 全灭判定是真、并且同伴人数为 0 的情况下
  420.     if $game_party.all_dead? or $game_party.actors.size == 0
  421.       # 允许失败的情况下
  422.       if $game_temp.battle_can_lose
  423.         # 还原为战斗开始前的 BGM
  424.         $game_system.bgm_play($game_temp.map_bgm)
  425.         # 战斗结束
  426.         battle_end(2)
  427.         # 返回 true
  428.         return true
  429.       end
  430.       # 设置游戏结束标志
  431.       $game_temp.gameover = true
  432.       # 返回 true
  433.       return true
  434.     end
  435.     # 如果存在任意 1 个敌人就返回 false
  436.     for enemy in $game_troop.enemies
  437.       if enemy.exist?
  438.         return false
  439.       end
  440.     end
  441.     # 开始结束战斗回合 (胜利)
  442.     start_phase5
  443.     # 返回 true
  444.     return true
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ● 战斗结束
  448.   #     result : 結果 (0:胜利 1:失败 2:逃跑)
  449.   #--------------------------------------------------------------------------
  450.   def battle_end(result)
  451.     # 清除战斗中标志
  452.     $game_temp.in_battle = false
  453.     # 清除全体同伴的行动
  454.     $game_party.clear_actions
  455.     # 解除战斗用状态
  456.     for actor in $game_party.actors
  457.       actor.remove_states_battle
  458.     end
  459.     # 清除敌人
  460.     $game_troop.enemies.clear
  461.     # 调用战斗返回调用
  462.     if $game_temp.battle_proc != nil
  463.       $game_temp.battle_proc.call(result)
  464.       $game_temp.battle_proc = nil
  465.     end
  466.     # 切换到地图画面
  467.     $scene = Scene_Map.new
  468.   end
  469.   #--------------------------------------------------------------------------
  470.   # ● 设置战斗事件
  471.   #--------------------------------------------------------------------------
  472.   def setup_battle_event
  473.     # 正在执行战斗事件的情况下
  474.     if $game_system.battle_interpreter.running?
  475.       return
  476.     end
  477.     # 搜索全部页的战斗事件
  478.     for index in 0...$data_troops[@troop_id].pages.size
  479.       # 获取事件页
  480.       page = $data_troops[@troop_id].pages[index]
  481.       # 事件条件可以参考 c
  482.       c = page.condition
  483.       # 没有指定任何条件的情况下转到下一页
  484.       unless c.turn_valid or c.enemy_valid or
  485.              c.actor_valid or c.switch_valid
  486.         next
  487.       end
  488.       # 执行完毕的情况下转到下一页
  489.       if $game_temp.battle_event_flags[index]
  490.         next
  491.       end
  492.       # 确认回合条件
  493.       if c.turn_valid
  494.         n = $game_temp.battle_turn
  495.         a = c.turn_a
  496.         b = c.turn_b
  497.         if (b == 0 and n != a) or
  498.            (b > 0 and (n < 1 or n < a or n % b != a % b))
  499.           next
  500.         end
  501.       end
  502.       # 确认敌人条件
  503.       if c.enemy_valid
  504.         enemy = $game_troop.enemies[c.enemy_index]
  505.         if enemy == nil or enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
  506.           next
  507.         end
  508.       end
  509.       # 确认角色条件
  510.       if c.actor_valid
  511.         actor = $game_actors[c.actor_id]
  512.         if actor == nil or actor.hp * 100.0 / actor.maxhp > c.actor_hp
  513.           next
  514.         end
  515.       end
  516.       # 确认开关条件
  517.       if c.switch_valid
  518.         if $game_switches[c.switch_id] == false
  519.           next
  520.         end
  521.       end
  522.       # 设置事件
  523.       $game_system.battle_interpreter.setup(page.list, 0)
  524.       # 本页的范围是 [战斗] 或 [回合] 的情况下
  525.       if page.span <= 1
  526.         # 设置执行结束标志
  527.         $game_temp.battle_event_flags[index] = true
  528.       end
  529.       return
  530.     end
  531.   end
  532.   #--------------------------------------------------------------------------
  533.   # ● 刷新画面
  534.   #--------------------------------------------------------------------------
  535.   def update
  536.     # 执行战斗事件中的情况下
  537.     if $game_system.battle_interpreter.running?
  538.       # 刷新解释器
  539.       $game_system.battle_interpreter.update
  540.       # 强制行动的战斗者不存在的情况下
  541.       if $game_temp.forcing_battler == nil
  542.         # 执行战斗事件结束的情况下
  543.         unless $game_system.battle_interpreter.running?
  544.           # 继续战斗的情况下、再执行战斗事件的设置
  545.           unless judge
  546.             setup_battle_event
  547.           end
  548.         end
  549.         # 如果不是结束战斗回合的情况下
  550.         if @phase != 5
  551.           # 刷新状态窗口
  552.           @status_window.refresh
  553.         end
  554.       end
  555.     end
  556.     # 系统 (计时器)、刷新画面
  557.     $game_system.update
  558.     $game_screen.update
  559.     # 计时器为 0 的情况下
  560.     if $game_system.timer_working and $game_system.timer == 0
  561.       # 中断战斗
  562.       $game_temp.battle_abort = true
  563.     end
  564.     # 刷新窗口
  565.     @help_window.update
  566.     @party_command_window.update
  567.     @actor_command_window.update
  568.     @status_window.update
  569.     @message_window.update
  570.     # 刷新活动块
  571.     @spriteset.update
  572.     # 处理过渡中的情况下
  573.     if $game_temp.transition_processing
  574.       # 清除处理过渡中标志
  575.       $game_temp.transition_processing = false
  576.       # 执行过渡
  577.       if $game_temp.transition_name == ""
  578.         Graphics.transition(20)
  579.       else
  580.         Graphics.transition(40, "Graphics/Transitions/" +
  581.           $game_temp.transition_name)
  582.       end
  583.     end
  584.     # 显示信息窗口中的情况下
  585.     if $game_temp.message_window_showing
  586.       return
  587.     end
  588.     # 显示效果中的情况下
  589.     if @spriteset.effect?
  590.       return
  591.     end
  592.     # 游戏结束的情况下
  593.     if $game_temp.gameover
  594.       # 切换到游戏结束画面
  595.       $scene = Scene_Gameover.new
  596.       return
  597.     end
  598.     # 返回标题画面的情况下
  599.     if $game_temp.to_title
  600.       # 切换到标题画面
  601.       $scene = Scene_Title.new
  602.       return
  603.     end
  604.     # 中断战斗的情况下
  605.     if $game_temp.battle_abort
  606.       # 还原为战斗前的 BGM
  607.       $game_system.bgm_play($game_temp.map_bgm)
  608.       # 战斗结束
  609.       battle_end(1)
  610.       return
  611.     end
  612.     # 等待中的情况下
  613.     if @wait_count > 0
  614.       # 减少等待计数
  615.       @wait_count -= 1
  616.       return
  617.     end
  618.     # 强制行动的角色存在、
  619.     # 并且战斗事件正在执行的情况下
  620.     if $game_temp.forcing_battler == nil and
  621.        $game_system.battle_interpreter.running?
  622.       return
  623.     end
  624.     # 回合分支
  625.     case @phase
  626.     when 1  # 自由战斗回合
  627.       update_phase1
  628.     when 2  # 同伴命令回合
  629.       update_phase2
  630.     when 3  # 角色命令回合
  631.       update_phase3
  632.     when 4  # 主回合
  633.       update_phase4
  634.     when 5  # 战斗结束回合
  635.       update_phase5
  636.     end
  637.   end
  638. end


  639. #==============================================================================
  640. # ■ Scene_Battle (分割定义 2)
  641. #------------------------------------------------------------------------------
  642. #  处理战斗画面的类。
  643. #==============================================================================

  644. class Scene_Battle
  645.   #--------------------------------------------------------------------------
  646.   # ● 开始自由战斗回合
  647.   #--------------------------------------------------------------------------
  648.   def start_phase1
  649.     # 转移到回合 1
  650.     @phase = 1
  651.     # 清除全体同伴的行动
  652.     $game_party.clear_actions
  653.     # 设置战斗事件
  654.     setup_battle_event
  655.   end
  656.   #--------------------------------------------------------------------------
  657.   # ● 刷新画面 (自由战斗回合)
  658.   #--------------------------------------------------------------------------
  659.   def update_phase1
  660.     # 胜败判定
  661.     if judge
  662.       # 胜利或者失败的情况下 : 过程结束
  663.       return
  664.     end
  665.     # 开始同伴命令回合
  666.     start_phase2
  667.   end
  668.   #--------------------------------------------------------------------------
  669.   # ● 开始同伴命令回合
  670.   #--------------------------------------------------------------------------
  671.   def start_phase2
  672.     # 转移到回合 2
  673.     @phase = 2
  674.     # 设置角色为非选择状态
  675.     @actor_index = -1
  676.     @active_battler = nil
  677.     # 有效化同伴指令窗口
  678.     #@party_command_window.active = true
  679.     #@party_command_window.visible = true
  680.     # 无效化角色指令窗口
  681.     @actor_command_window.active = false
  682.     @actor_command_window.visible = false
  683.     # 清除主回合标志
  684.     $game_temp.battle_main_phase = false
  685.     # 清除全体同伴的行动
  686.     $game_party.clear_actions
  687.     # 不能输入命令的情况下
  688.     unless $game_party.inputable?
  689.       # 开始主回合
  690.       start_phase4
  691.     end
  692.   end
  693.   #--------------------------------------------------------------------------
  694.   # ● 刷新画面 (同伴命令回合)
  695.   #--------------------------------------------------------------------------
  696.   def update_phase2
  697.     # 演奏确定 SE
  698.       $game_system.se_play($data_system.decision_se)
  699.       # 开始角色的命令回合
  700.       start_phase3
  701.     # 按下 C 键的情况下
  702.     if Input.trigger?(Input::C)
  703.       # 同伴指令窗口光标位置分支
  704.       case @party_command_window.index
  705.       when 0  # 战斗
  706.         # 演奏确定 SE
  707.         $game_system.se_play($data_system.decision_se)
  708.         # 开始角色的命令回合
  709.         start_phase3
  710.       when 1  # 逃跑
  711.         # 不能逃跑的情况下
  712.         if $game_temp.battle_can_escape == false
  713.           # 演奏冻结 SE
  714.           $game_system.se_play($data_system.buzzer_se)
  715.           return
  716.         end
  717.         # 演奏确定 SE
  718.         $game_system.se_play($data_system.decision_se)
  719.         # 逃走处理
  720.         update_phase2_escape
  721.       end
  722.       return
  723.     end
  724.   end
  725.   #--------------------------------------------------------------------------
  726.   # ● 画面更新 (同伴指令回合 : 逃跑)
  727.   #--------------------------------------------------------------------------
  728.   def update_phase2_escape
  729.     # 计算敌人速度的平均值
  730.     enemies_agi = 0
  731.     enemies_number = 0
  732.     for enemy in $game_troop.enemies
  733.       if enemy.exist?
  734.         enemies_agi += enemy.agi
  735.         enemies_number += 1
  736.       end
  737.     end
  738.     if enemies_number > 0
  739.       enemies_agi /= enemies_number
  740.     end
  741.     # 计算角色速度的平均值
  742.     actors_agi = 0
  743.     actors_number = 0
  744.     for actor in $game_party.actors
  745.       if actor.exist?
  746.         actors_agi += actor.agi
  747.         actors_number += 1
  748.       end
  749.     end
  750.     if actors_number > 0
  751.       actors_agi /= actors_number
  752.     end
  753.     # 逃跑成功判定
  754.     success = rand(100) < 50 * actors_agi / enemies_agi
  755.     # 成功逃跑的情况下
  756.     if success
  757. #######################################################★
  758.         $game_temp.common_event_id = 32
  759.         @wait_count = 1
  760. #######################################################★
  761.       # 演奏逃跑 SE
  762.       $game_system.se_play($data_system.escape_se)
  763.       # 还原为战斗开始前的 BGM
  764.       $game_system.bgm_play($game_temp.map_bgm)
  765.       # 战斗结束
  766.       battle_end(1)
  767.     # 逃跑失败的情况下
  768.     else
  769.       # 清除全体同伴的行动
  770.       $game_party.clear_actions
  771.       # 开始主回合
  772.       start_phase4
  773.     end
  774.   end
  775.   #--------------------------------------------------------------------------
  776.   # ● 开始结束战斗回合
  777.   #--------------------------------------------------------------------------
  778.   def start_phase5
  779.     # 转移到回合 5
  780.     @phase = 5
  781.     # 演奏战斗结束 ME
  782.     $game_system.me_play($game_system.battle_end_me)
  783.     # 还原为战斗开始前的 BGM
  784.     $game_system.bgm_play($game_temp.map_bgm)
  785.     # 初始化 EXP、金钱、宝物
  786.     exp = 0
  787.     gold = 0
  788.     treasures = []
  789.     # 循环
  790.     for enemy in $game_troop.enemies
  791.       # 敌人不是隐藏状态的情况下
  792.       unless enemy.hidden
  793.         # 获得 EXP、增加金钱
  794.         exp += enemy.exp
  795.         gold += enemy.gold
  796.         # 出现宝物判定
  797.         if rand(100) < enemy.treasure_prob
  798.           if enemy.item_id > 0
  799.             treasures.push($data_items[enemy.item_id])
  800.           end
  801.           if enemy.weapon_id > 0
  802.             treasures.push($data_weapons[enemy.weapon_id])
  803.           end
  804.           if enemy.armor_id > 0
  805.             treasures.push($data_armors[enemy.armor_id])
  806.           end
  807.         end
  808.       end
  809.     end
  810.     # 限制宝物数为 6 个
  811.     treasures = treasures[0..5]
  812.     # 获得 EXP
  813.     for i in 0...$game_party.actors.size
  814.       actor = $game_party.actors[i]
  815.       if actor.cant_get_exp? == false
  816.         last_level = actor.level
  817.         actor.exp += exp
  818.         if actor.level > last_level
  819.           @status_window.level_up(i)
  820.         end
  821.       end
  822.     end
  823.     # 获得金钱
  824.     $game_party.gain_gold(gold)
  825.     # 获得宝物
  826.     for item in treasures
  827.       case item
  828.       when RPG::Item
  829.         $game_party.gain_item(item.id, 1)
  830.       when RPG::Weapon
  831.         $game_party.gain_weapon(item.id, 1)
  832.       when RPG::Armor
  833.         $game_party.gain_armor(item.id, 1)
  834.       end
  835.     end
  836.     # 生成战斗结果窗口
  837.     @result_window = Window_BattleResult.new(exp, gold, treasures)
  838.     # 设置等待计数
  839.     @phase5_wait_count = 100
  840.   end
  841.   #--------------------------------------------------------------------------
  842.   # ● 画面更新 (结束战斗回合)
  843.   #--------------------------------------------------------------------------
  844.   def update_phase5
  845.     # 等待计数大于 0 的情况下
  846.     if @phase5_wait_count > 0
  847.       # 减少等待计数
  848.       @phase5_wait_count -= 1
  849.       # 等待计数为 0 的情况下
  850.       if @phase5_wait_count == 0
  851.         # 显示结果窗口
  852.         @result_window.visible = true
  853.         # 清除主回合标志
  854.         $game_temp.battle_main_phase = false
  855.         # 刷新状态窗口
  856.         @status_window.refresh
  857. #######################################################★
  858.         $game_temp.common_event_id = 32
  859.         @wait_count = 1
  860. #######################################################★
  861.       end
  862.       return
  863.     end
  864.     # 按下 C 键的情况下
  865.     if Input.trigger?(Input::C)
  866.       # 战斗结束
  867.       battle_end(0)
  868.     end
  869.   end
  870. end


  871. #==============================================================================
  872. # ■ Scene_Battle (分割定义 3)
  873. #------------------------------------------------------------------------------
  874. #  处理战斗画面的类。
  875. #==============================================================================

  876. class Scene_Battle
  877.   #--------------------------------------------------------------------------
  878.   # ● 开始角色命令回合
  879.   #--------------------------------------------------------------------------
  880.   def start_phase3
  881.     # 转移到回合 3
  882.     @phase = 3
  883.     # 设置觉得为非选择状态
  884.     @actor_index = -1
  885.     @active_battler = nil
  886.     # 输入下一个角色的命令
  887.     phase3_next_actor
  888.   end
  889.   #--------------------------------------------------------------------------
  890.   # ● 转到输入下一个角色的命令
  891.   #--------------------------------------------------------------------------
  892.   def phase3_next_actor
  893.     # 循环
  894.     begin
  895.       # 角色的明灭效果 OFF
  896.       if @active_battler != nil
  897.         @active_battler.blink = false
  898.       end
  899.       # 最后的角色的情况
  900.       if @actor_index == $game_party.actors.size-1
  901.         # 开始主回合
  902.         start_phase4
  903.         return
  904.       end
  905.       # 推进角色索引
  906.       @actor_index += 1
  907.       @active_battler = $game_party.actors[@actor_index]
  908.       @active_battler.blink = true
  909.     # 如果角色是在无法接受指令的状态就再试
  910.     end until @active_battler.inputable?
  911.     # 设置角色的命令窗口
  912.     phase3_setup_command_window
  913.   end
  914.   #--------------------------------------------------------------------------
  915.   # ● 转向前一个角色的命令输入
  916.   #--------------------------------------------------------------------------
  917.   def phase3_prior_actor
  918.     # 循环
  919.     begin
  920.       # 角色的明灭效果 OFF
  921.       if @active_battler != nil
  922.         @active_battler.blink = false
  923.       end
  924.       # 最初的角色的情况下
  925.       if @actor_index == 0
  926.         # 开始同伴指令回合
  927.         start_phase2
  928.         return
  929.       end
  930.       # 返回角色索引
  931.       @actor_index -= 1
  932.       @active_battler = $game_party.actors[@actor_index]
  933.       @active_battler.blink = true
  934.     # 如果角色是在无法接受指令的状态就再试
  935.     end until @active_battler.inputable?
  936.     # 设置角色的命令窗口
  937.     phase3_setup_command_window
  938.   end
  939.   #--------------------------------------------------------------------------
  940.   # ● 设置角色指令窗口
  941.   #--------------------------------------------------------------------------
  942.   def phase3_setup_command_window
  943.     # 同伴指令窗口无效化
  944.     @party_command_window.active = false
  945.     @party_command_window.visible = false
  946.     # 角色指令窗口无效化
  947.     @actor_command_window.active = true
  948.     @actor_command_window.visible = true
  949.     # 设置角色指令窗口的位置
  950.     @actor_command_window.x = @actor_index * 160
  951.     # 设置索引为 0
  952.     @actor_command_window.index = 0
  953.   end
  954.   #--------------------------------------------------------------------------
  955.   # ● 刷新画面 (角色命令回合)
  956.   #--------------------------------------------------------------------------
  957.   def update_phase3
  958.     # 敌人光标有效的情况下
  959.     if @enemy_arrow != nil
  960.       update_phase3_enemy_select
  961.     # 角色光标有效的情况下
  962.     elsif @actor_arrow != nil
  963.       update_phase3_actor_select
  964.     # 特技窗口有效的情况下
  965.     elsif @skill_window != nil
  966.       update_phase3_skill_select
  967.     # 物品窗口有效的情况下
  968.     elsif @item_window != nil
  969.       update_phase3_item_select
  970.     # 角色指令窗口有效的情况下
  971.     elsif @actor_command_window.active
  972.       update_phase3_basic_command
  973.     end
  974.   end
  975.   #--------------------------------------------------------------------------
  976.   # ● 刷新画面 (角色命令回合 : 基本命令)
  977.   #--------------------------------------------------------------------------
  978.   def update_phase3_basic_command
  979.     # 按下 B 键的情况下
  980.     if Input.trigger?(Input::B)
  981.       # 演奏取消 SE
  982.       $game_system.se_play($data_system.cancel_se)
  983.       # 转向前一个角色的指令输入
  984.       phase3_prior_actor
  985.       return
  986.     end
  987.     # 按下 C 键的情况下
  988.     if Input.trigger?(Input::C)
  989.       # 角色指令窗口光标位置分之
  990.       case @actor_command_window.index
  991.       when 0  # 攻击
  992.         # 演奏确定 SE
  993.         $game_system.se_play($data_system.decision_se)
  994.         # 设置行动
  995.         @active_battler.current_action.kind = 0
  996.         @active_battler.current_action.basic = 0
  997.         # 开始选择敌人
  998.         start_enemy_select
  999.       when 1  # 特技
  1000.         # 演奏确定 SE
  1001.         $game_system.se_play($data_system.decision_se)
  1002.         # 设置行动
  1003.         @active_battler.current_action.kind = 1
  1004.         # 开始选择特技
  1005.         start_skill_select
  1006.       when 2  # 防御
  1007.         # 演奏确定 SE
  1008.         $game_system.se_play($data_system.decision_se)
  1009.         # 设置行动
  1010.         @active_battler.current_action.kind = 0
  1011.         @active_battler.current_action.basic = 1
  1012.         # 转向下一位角色的指令输入
  1013.         phase3_next_actor
  1014.       when 3  # 物品
  1015.         # 演奏确定 SE
  1016.         $game_system.se_play($data_system.decision_se)
  1017.         # 设置行动
  1018.         @active_battler.current_action.kind = 2
  1019.         # 开始选择物品
  1020.         start_item_select
  1021.         when 4
  1022.   escaping
  1023.       end
  1024.       return
  1025.     end
  1026.   end
  1027.   #--------------------------------------------------------------------------
  1028.   # ● 刷新画面 (角色命令回合 : 选择特技)
  1029.   #--------------------------------------------------------------------------
  1030.   def update_phase3_skill_select
  1031.     # 设置特技窗口为可视状态
  1032.     @skill_window.visible = true
  1033.     # 刷新特技窗口
  1034.     @skill_window.update
  1035.     # 按下 B 键的情况下
  1036.     if Input.trigger?(Input::B)
  1037.       # 演奏取消 SE
  1038.       $game_system.se_play($data_system.cancel_se)
  1039.       # 结束特技选择
  1040.       end_skill_select
  1041.       return
  1042.     end
  1043.     # 按下 C 键的情况下
  1044.     if Input.trigger?(Input::C)
  1045.       # 获取特技选择窗口现在选择的特技的数据
  1046.       @skill = @skill_window.skill
  1047.       # 无法使用的情况下
  1048.       if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
  1049.         # 演奏冻结 SE
  1050.         $game_system.se_play($data_system.buzzer_se)
  1051.         return
  1052.       end
  1053.       # 演奏确定 SE
  1054.       $game_system.se_play($data_system.decision_se)
  1055.       # 设置行动
  1056.       @active_battler.current_action.skill_id = @skill.id
  1057.       # 设置特技窗口为不可见状态
  1058.       @skill_window.visible = false
  1059.       # 效果范围是敌单体的情况下
  1060.       if @skill.scope == 1
  1061.         # 开始选择敌人
  1062.         start_enemy_select
  1063.       # 效果范围是我方单体的情况下
  1064.       elsif @skill.scope == 3 or @skill.scope == 5
  1065.         # 开始选择角色
  1066.         start_actor_select
  1067.       # 效果范围不是单体的情况下
  1068.       else
  1069.         # 选择特技结束
  1070.         end_skill_select
  1071.         # 转到下一位角色的指令输入
  1072.         phase3_next_actor
  1073.       end
  1074.       return
  1075.     end
  1076.   end
  1077.   #--------------------------------------------------------------------------
  1078.   # ● 刷新画面 (角色命令回合 : 选择物品)
  1079.   #--------------------------------------------------------------------------
  1080.   def update_phase3_item_select
  1081.     # 设置物品窗口为可视状态
  1082.     @item_window.visible = true
  1083.     # 刷新物品窗口
  1084.     @item_window.update
  1085.     # 按下 B 键的情况下
  1086.     if Input.trigger?(Input::B)
  1087.       # 演奏取消 SE
  1088.       $game_system.se_play($data_system.cancel_se)
  1089.       # 选择物品结束
  1090.       end_item_select
  1091.       return
  1092.     end
  1093.     # 按下 C 键的情况下
  1094.     if Input.trigger?(Input::C)
  1095.       # 获取物品窗口现在选择的物品资料
  1096.       @item = @item_window.item
  1097.       # 无法使用的情况下
  1098.       unless $game_party.item_can_use?(@item.id)
  1099.         # 演奏冻结 SE
  1100.         $game_system.se_play($data_system.buzzer_se)
  1101.         return
  1102.       end
  1103.       # 演奏确定 SE
  1104.       $game_system.se_play($data_system.decision_se)
  1105.       # 设置行动
  1106.       @active_battler.current_action.item_id = @item.id
  1107.       # 设置物品窗口为不可见状态
  1108.       @item_window.visible = false
  1109.       # 效果范围是敌单体的情况下
  1110.       if @item.scope == 1
  1111.         # 开始选择敌人
  1112.         start_enemy_select
  1113.       # 效果范围是我方单体的情况下
  1114.       elsif @item.scope == 3 or @item.scope == 5
  1115.         # 开始选择角色
  1116.         start_actor_select
  1117.       # 效果范围不是单体的情况下
  1118.       else
  1119.         # 物品选择结束
  1120.         end_item_select
  1121.         # 转到下一位角色的指令输入
  1122.         phase3_next_actor
  1123.       end
  1124.       return
  1125.     end
  1126.   end
  1127.   #--------------------------------------------------------------------------
  1128.   # ● 刷新画面画面 (角色命令回合 : 选择敌人)
  1129.   #--------------------------------------------------------------------------
  1130.   def update_phase3_enemy_select
  1131.     # 刷新敌人箭头
  1132.     @enemy_arrow.update
  1133.     # 按下 B 键的情况下
  1134.     if Input.trigger?(Input::B)
  1135.       # 演奏取消 SE
  1136.       $game_system.se_play($data_system.cancel_se)
  1137.       # 选择敌人结束
  1138.       end_enemy_select
  1139.       return
  1140.     end
  1141.     # 按下 C 键的情况下
  1142.     if Input.trigger?(Input::C)
  1143.       # 演奏确定 SE
  1144.       $game_system.se_play($data_system.decision_se)
  1145.       # 设置行动
  1146.       @active_battler.current_action.target_index = @enemy_arrow.index
  1147.       # 选择敌人结束
  1148.       end_enemy_select
  1149.       # 显示特技窗口中的情况下
  1150.       if @skill_window != nil
  1151.         # 结束特技选择
  1152.         end_skill_select
  1153.       end
  1154.       # 显示物品窗口的情况下
  1155.       if @item_window != nil
  1156.         # 结束物品选择
  1157.         end_item_select
  1158.       end
  1159.       # 转到下一位角色的指令输入
  1160.       phase3_next_actor
  1161.     end
  1162.   end
  1163.   #--------------------------------------------------------------------------
  1164.   # ● 画面更新 (角色指令回合 : 选择角色)
  1165.   #--------------------------------------------------------------------------
  1166.   def update_phase3_actor_select
  1167.     # 刷新角色箭头
  1168.     @actor_arrow.update
  1169.     # 按下 B 键的情况下
  1170.     if Input.trigger?(Input::B)
  1171.       # 演奏取消 SE
  1172.       $game_system.se_play($data_system.cancel_se)
  1173.       # 选择角色结束
  1174.       end_actor_select
  1175.       return
  1176.     end
  1177.     # 按下 C 键的情况下
  1178.     if Input.trigger?(Input::C)
  1179.       # 演奏确定 SE
  1180.       $game_system.se_play($data_system.decision_se)
  1181.       # 设置行动
  1182.       @active_battler.current_action.target_index = @actor_arrow.index
  1183.       # 选择角色结束
  1184.       end_actor_select
  1185.       # 显示特技窗口中的情况下
  1186.       if @skill_window != nil
  1187.         # 结束特技选择
  1188.         end_skill_select
  1189.       end
  1190.       # 显示物品窗口的情况下
  1191.       if @item_window != nil
  1192.         # 结束物品选择
  1193.         end_item_select
  1194.       end
  1195.       # 转到下一位角色的指令输入
  1196.       phase3_next_actor
  1197.     end
  1198.   end
  1199.   #--------------------------------------------------------------------------
  1200.   # ● 开始选择敌人
  1201.   #--------------------------------------------------------------------------
  1202.   def start_enemy_select
  1203.     # 生成敌人箭头
  1204.     @enemy_arrow = Arrow_Enemy.new(@spriteset.viewport1)
  1205.     # 关联帮助窗口
  1206.     @enemy_arrow.help_window = @help_window
  1207.     # 无效化角色指令窗口
  1208.     @actor_command_window.active = false
  1209.     @actor_command_window.visible = false
  1210.   end
  1211.   #--------------------------------------------------------------------------
  1212.   # ● 结束选择敌人
  1213.   #--------------------------------------------------------------------------
  1214.   def end_enemy_select
  1215.     # 释放敌人箭头
  1216.     @enemy_arrow.dispose
  1217.     @enemy_arrow = nil
  1218.     # 指令为 [战斗] 的情况下
  1219.     if @actor_command_window.index == 0
  1220.       # 有效化角色指令窗口
  1221.       @actor_command_window.active = true
  1222.       @actor_command_window.visible = true
  1223.       # 隐藏帮助窗口
  1224.       @help_window.visible = false
  1225.     end
  1226.   end
  1227.   #--------------------------------------------------------------------------
  1228.   # ● 开始选择角色
  1229.   #--------------------------------------------------------------------------
  1230.   def start_actor_select
  1231.     # 生成角色箭头
  1232.     @actor_arrow = Arrow_Actor.new(@spriteset.viewport2)
  1233.     @actor_arrow.index = @actor_index
  1234.     # 关联帮助窗口
  1235.     @actor_arrow.help_window = @help_window
  1236.     # 无效化角色指令窗口
  1237.     @actor_command_window.active = false
  1238.     @actor_command_window.visible = false
  1239.   end
  1240.   #--------------------------------------------------------------------------
  1241.   # ● 结束选择角色
  1242.   #--------------------------------------------------------------------------
  1243.   def end_actor_select
  1244.     # 释放角色箭头
  1245.     @actor_arrow.dispose
  1246.     @actor_arrow = nil
  1247.   end
  1248.   #--------------------------------------------------------------------------
  1249.   # ● 开始选择特技
  1250.   #--------------------------------------------------------------------------
  1251.   def start_skill_select
  1252.     # 生成特技窗口
  1253.     @skill_window = Window_Skill.new(@active_battler)
  1254.     # 关联帮助窗口
  1255.     @skill_window.help_window = @help_window
  1256.     # 无效化角色指令窗口
  1257.     @actor_command_window.active = false
  1258.     @actor_command_window.visible = false
  1259.   end
  1260.   #--------------------------------------------------------------------------
  1261.   # ● 选择特技结束
  1262.   #--------------------------------------------------------------------------
  1263.   def end_skill_select
  1264.     # 释放特技窗口
  1265.     @skill_window.dispose
  1266.     @skill_window = nil
  1267.     # 隐藏帮助窗口
  1268.     @help_window.visible = false
  1269.     # 有效化角色指令窗口
  1270.     @actor_command_window.active = true
  1271.     @actor_command_window.visible = true
  1272.   end
  1273.   #--------------------------------------------------------------------------
  1274.   # ● 开始选择物品
  1275.   #--------------------------------------------------------------------------
  1276.   def start_item_select
  1277.     # 生成物品窗口
  1278.     @item_window = Window_Item.new
  1279.     # 关联帮助窗口
  1280.     @item_window.help_window = @help_window
  1281.     # 无效化角色指令窗口
  1282.     @actor_command_window.active = false
  1283.     @actor_command_window.visible = false
  1284.   end
  1285.   #--------------------------------------------------------------------------
  1286.   # ● 结束选择物品
  1287.   #--------------------------------------------------------------------------
  1288.   def end_item_select
  1289.     # 释放物品窗口
  1290.     @item_window.dispose
  1291.     @item_window = nil
  1292.     # 隐藏帮助窗口
  1293.     @help_window.visible = false
  1294.     # 有效化角色指令窗口
  1295.     @actor_command_window.active = true
  1296.     @actor_command_window.visible = true
  1297.   end
  1298.   def escaping
  1299.        # 不能逃跑的情况下
  1300.         if $game_temp.battle_can_escape == false
  1301.           # 演奏冻结 SE
  1302.           $game_system.se_play($data_system.buzzer_se)
  1303.           return
  1304.         end
  1305.         # 演奏确定 SE
  1306.         $game_system.se_play($data_system.decision_se)
  1307.         # 逃走处理
  1308.         @actor_command_window.active = false
  1309.         @actor_command_window.visible = false
  1310.         update_phase2_escape
  1311.       end

  1312. end


  1313. module Momo_IconCommand
  1314.   # 图标名称设定
  1315.    ATTACK_ICON_NAME = "攻击" # 攻撃
  1316.   SKILL_ICON_NAME = "技能"   # 特技
  1317.   GUARD_ICON_NAME = "防御"  # 防御
  1318.   ITEM_ICON_NAME = "物品"     # 物品
  1319.   ESCAPE_ICON_NAME = "逃跑"  # 逃跑
  1320.   # X坐标修正
  1321.   X_PLUS = 30#-120
  1322.   # Y坐标修正
  1323.   Y_PLUS = -60#10
  1324.   # 选择时图标的动作
  1325.   # 0:静止 1:放大
  1326.   SELECT_TYPE = 0
  1327.   # 闪烁时光芒的颜色
  1328.   FLASH_COLOR = Color.new(255, 255, 255, 128)
  1329.   # 闪烁时间
  1330.   FLASH_DURATION = 10
  1331.   # 闪烁间隔
  1332.   FLASH_INTERVAL = 20
  1333.   # 是否写出文字的名称
  1334.   COM_NAME_DROW = true
  1335.   # 文字名称是否移动
  1336.   COM_NAME_MOVE = true
  1337.   # 文字内容
  1338.   ATTACK_NAME = "攻击"    # 攻击
  1339.   SKILL_NAME = "特技"   # 特技
  1340.   GUARD_NAME = "防御"     # 防御
  1341.   ITEM_NAME = "物品"  # 物品
  1342.   ESCAPE_NAME = "逃跑"  # 逃跑
  1343.   # 文字颜色
  1344.   COM_NAME_COLOR = Color.new(255, 255, 255, 255)
  1345.   # 文字坐标修正
  1346.   COM_NAME_X_PLUS = 0
  1347.   COM_NAME_Y_PLUS = 0
  1348. end

  1349. class Window_CommandIcon < Window_Selectable
  1350.   attr_accessor :last_index
  1351.   #--------------------------------------------------------------------------
  1352.   # ● オブジェクト初期化
  1353.   #--------------------------------------------------------------------------
  1354.   def initialize(x, y, commands)
  1355.     super(x, y, 32, 32)
  1356.     # ウィンドウスキンに空文字列を指定してウィンドウを描画しないようにする
  1357.     self.windowskin = RPG::Cache.windowskin("")
  1358.     @item_max = commands.size
  1359.     @commands = commands
  1360.     @column_max = commands.size
  1361.     @index = 0
  1362.     @last_index = nil
  1363.     @name_sprite = nil
  1364.     @sprite = []
  1365.     refresh
  1366.   end
  1367.   def dispose
  1368.     super
  1369.     for sprite in @sprite
  1370.       sprite.dispose unless sprite.nil?
  1371.     end
  1372.     @name_sprite.dispose unless @name_sprite.nil?
  1373.   end
  1374.   #--------------------------------------------------------------------------
  1375.   # ● リフレッシュ
  1376.   #--------------------------------------------------------------------------
  1377.   def refresh
  1378.     @name_sprite.dispose unless @name_sprite.nil?
  1379.     for sprite in @sprite
  1380.       sprite.dispose unless sprite.nil?
  1381.     end
  1382.     @name_sprite = nil
  1383.     draw_com_name if Momo_IconCommand::COM_NAME_DROW
  1384.     @sprite = []
  1385.     for i in 0...@item_max
  1386.       draw_item(i)
  1387.     end
  1388.   end
  1389.   #--------------------------------------------------------------------------
  1390.   # ● 項目の描画
  1391.   #--------------------------------------------------------------------------
  1392.   def draw_item(index)
  1393.     @sprite[index] = Sprite_Icon.new(nil, @commands[index])
  1394.     @sprite[index].z = self.z + 100##########################
  1395.   end
  1396.   def draw_com_name
  1397.     @name_sprite = Sprite_Comm_Name.new(nil, get_com_name)
  1398.    
  1399.   end
  1400.   
  1401.   # 更新
  1402.   def update
  1403.     super
  1404.     icon_update
  1405.     com_name_update if Momo_IconCommand::COM_NAME_DROW
  1406.     if move_index?
  1407.       @last_index = self.index
  1408.     end
  1409.   end
  1410.   # アイコンの更新
  1411.   def icon_update
  1412.     for i in [email protected]
  1413.       @sprite[i].active = (self.index == i)
  1414.       @sprite[i].x = self.x  + i * 24
  1415.       @sprite[i].y = self.y  + 0
  1416.       @sprite[i].z = (self.index == i) ? self.z + 2 : self.z + 1
  1417.       @sprite[i].visible = self.visible
  1418.       @sprite[i].update
  1419.     end
  1420.   end
  1421.   # コマンドネームの更新
  1422.   def com_name_update
  1423.     if move_index?
  1424.       @name_sprite.name = get_com_name
  1425.     end
  1426.     @name_sprite.x = self.x - 12 + Momo_IconCommand::COM_NAME_X_PLUS
  1427.     @name_sprite.y = self.y - 40 + Momo_IconCommand::COM_NAME_Y_PLUS
  1428.     @name_sprite.z = self.z + 1
  1429.     @name_sprite.active = self.active
  1430.     @name_sprite.visible = self.visible
  1431.     @name_sprite.update
  1432.   end
  1433.   def get_com_name
  1434.     make_name_set if @name_set.nil?
  1435.     name = @name_set[self.index]
  1436.     name = "" if name.nil?
  1437.     return name
  1438.   end
  1439.   def make_name_set
  1440.     @name_set = []
  1441.     @name_set[0] = Momo_IconCommand::ATTACK_NAME
  1442.     @name_set[1] = Momo_IconCommand::SKILL_NAME
  1443.     @name_set[2] = Momo_IconCommand::GUARD_NAME
  1444.     @name_set[3] = Momo_IconCommand::ITEM_NAME
  1445.     @name_set[4] = Momo_IconCommand::ESCAPE_NAME
  1446.   end
  1447.   def move_index?
  1448.     return self.index != @last_index
  1449.   end
  1450.   def need_reset
  1451.     @name_sprite.need_reset = true if Momo_IconCommand::COM_NAME_DROW
  1452.   end
  1453. end

  1454. # アイコン用スプライト
  1455. class Sprite_Icon < Sprite
  1456.   attr_accessor :active
  1457.   attr_accessor :icon_name
  1458.   #--------------------------------------------------------------------------
  1459.   # ● オブジェクト初期化
  1460.   #--------------------------------------------------------------------------
  1461.   def initialize(viewport, icon_name)
  1462.     super(viewport)
  1463.     @icon_name = icon_name
  1464.     @last_icon = @icon_name
  1465.     @count = 0
  1466.     self.bitmap = RPG::Cache.icon(@icon_name)
  1467.     self.ox = self.bitmap.width / 2
  1468.     self.oy = self.bitmap.height / 2
  1469.     @active = false
  1470.   end
  1471.   #--------------------------------------------------------------------------
  1472.   # ● 解放
  1473.   #--------------------------------------------------------------------------
  1474.   def dispose
  1475.     if self.bitmap != nil
  1476.       self.bitmap.dispose
  1477.     end
  1478.     super
  1479.   end
  1480.   #--------------------------------------------------------------------------
  1481.   # ● フレーム更新
  1482.   #--------------------------------------------------------------------------
  1483.   def update
  1484.     super
  1485.     if @icon_name != @last_icon
  1486.       @last_icon = @icon_name
  1487.       self.bitmap = RPG::Cache.icon(@icon_name)
  1488.     end
  1489.     if @active
  1490.       @count += 1
  1491.       case Momo_IconCommand::SELECT_TYPE
  1492.       when 0
  1493.         icon_flash
  1494.       when 1
  1495.         icon_zoom
  1496.       end
  1497.       @count = 0 if @count == 20
  1498.     else
  1499.       icon_reset
  1500.     end
  1501.   end
  1502.   def icon_flash
  1503.     if @count % Momo_IconCommand::FLASH_INTERVAL == 0 or @count == 1
  1504.       self.flash(Momo_IconCommand::FLASH_COLOR, Momo_IconCommand::FLASH_DURATION)
  1505.     end
  1506.   end
  1507.   def icon_zoom
  1508.     case @count
  1509.     when 1..10
  1510.       zoom = 1.0 + @count / 10.0
  1511.     when 11..20
  1512.       zoom = 2.0 - (@count - 10) / 10.0
  1513.     end
  1514.     self.zoom_x = zoom
  1515.     self.zoom_y = zoom
  1516.   end
  1517.   def icon_reset
  1518.     @count = 0
  1519.     self.zoom_x = 1.0
  1520.     self.zoom_y = 1.0
  1521.   end
  1522. end

  1523. # コマンドネーム用スプライト
  1524. class Sprite_Comm_Name < Sprite
  1525.   attr_accessor :active
  1526.   attr_accessor :name
  1527.   attr_accessor :need_reset
  1528.   #--------------------------------------------------------------------------
  1529.   # ● オブジェクト初期化
  1530.   #--------------------------------------------------------------------------
  1531.   def initialize(viewport, name)
  1532.     super(viewport)
  1533.     @name = name
  1534.     @last_name = nil
  1535.     @count = 0
  1536.     @x_plus = 0
  1537.     @opa_plus = 0
  1538.     @need_reset = false
  1539.     @active = false
  1540.     self.bitmap = Bitmap.new(160, 32)
  1541.   end
  1542.   #--------------------------------------------------------------------------
  1543.   # ● 解放
  1544.   #--------------------------------------------------------------------------
  1545.   def dispose
  1546.     if self.bitmap != nil
  1547.       self.bitmap.dispose
  1548.     end
  1549.     super
  1550.   end
  1551.   #--------------------------------------------------------------------------
  1552.   # ● フレーム更新
  1553.   #--------------------------------------------------------------------------
  1554.   def update
  1555.     super
  1556.     if @active
  1557.       if need_reset?
  1558.         @need_reset = false
  1559.         @last_name = @name
  1560.         text_reset
  1561.       end
  1562.       move_text if Momo_IconCommand::COM_NAME_MOVE
  1563.     end
  1564.   end
  1565.   def move_text
  1566.     @count += 1
  1567.     @x_plus = [@count * 8, 80].min
  1568.     self.x = self.x - 80 + @x_plus
  1569.     self.opacity = @count * 25
  1570.   end
  1571.   def text_reset
  1572.     @count = 0
  1573.     @x_plus = 0
  1574.     self.bitmap.clear
  1575.     self.bitmap.font.color = Momo_IconCommand::COM_NAME_COLOR
  1576.       if @name == Momo_IconCommand::ESCAPE_NAME and $game_temp.battle_can_escape == false
  1577.        self.bitmap.font.color = Color.new(192, 192, 192, 255)
  1578.      else
  1579.        self.bitmap.font.color = Momo_IconCommand::COM_NAME_COLOR
  1580.     end


  1581.     self.bitmap.draw_text(0, 0, 160, 32, @name)
  1582.   end
  1583.   def need_reset?
  1584.     return (@name != @last_name or @need_reset)
  1585.   end
  1586. end
  1587. class Scene_Battle
  1588.   #--------------------------------------------------------------------------
  1589.   # ● プレバトルフェーズ開始
  1590.   #--------------------------------------------------------------------------
  1591.   alias scene_battle_icon_command_start_phase1 start_phase1
  1592.   def start_phase1
  1593.     com1 = Momo_IconCommand::ATTACK_ICON_NAME
  1594.     com2 = Momo_IconCommand::SKILL_ICON_NAME
  1595.     com3 = Momo_IconCommand::GUARD_ICON_NAME
  1596.     com4 = Momo_IconCommand::ITEM_ICON_NAME
  1597.     com5 = Momo_IconCommand::ESCAPE_ICON_NAME
  1598.     @actor_command_window = Window_CommandIcon.new(0, 0, [com1, com2, com3, com4, com5])
  1599.     @actor_command_window.y = 160
  1600.     @actor_command_window.back_opacity = 160
  1601.     @actor_command_window.active = false
  1602.     @actor_command_window.visible = false
  1603.     @actor_command_window.update
  1604.     scene_battle_icon_command_start_phase1
  1605.   end
  1606.   #--------------------------------------------------------------------------
  1607.   # ● アクターコマンドウィンドウのセットアップ
  1608.   #--------------------------------------------------------------------------
  1609.   alias scene_battle_icon_command_phase3_setup_command_window phase3_setup_command_window
  1610.   def phase3_setup_command_window
  1611.     scene_battle_icon_command_phase3_setup_command_window
  1612.     # アクターコマンドウィンドウの位置を設定
  1613.     @actor_command_window.x = command_window_actor_x(@actor_index)
  1614.     @actor_command_window.y = command_window_actor_y(@actor_index)
  1615.     @actor_command_window.need_reset
  1616.   end
  1617.   def command_window_actor_x(index)
  1618.     #$game_party.actors[index].screen_x + Momo_IconCommand::X_PLUS
  1619.     index * 160 + Momo_IconCommand::X_PLUS
  1620.   end
  1621.   def command_window_actor_y(index)
  1622.     #$game_party.actors[index].screen_y + Momo_IconCommand::Y_PLUS
  1623.     390 + Momo_IconCommand::Y_PLUS
  1624.   end
  1625. end

  1626. #==============================================================================
  1627. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  1628. #==============================================================================

  1629. $data_system_level_up_se = "" #升级时的音效设置
  1630. $data_system_level_up_me = "Audio/ME/007-Fanfare01" # 升级时播放的ME
  1631. $data_system_skilllearn_se = "Audio/SE/106-Heal02" # 学会特技时播放的声效。

  1632. #=============================================================
  1633. # ■ Window_LevelUpWindow
  1634. #-------------------------------------------------------------------
  1635. #  バトル終了時、レベルアップした場合にステータスを表示するウィンドウです。
  1636. #=============================================================
  1637. class Window_LevelUpWindow < Window_Base
  1638.   #---------------------------------------------------------
  1639.   # ● オブジェクト初期化
  1640.   #------------------------------------------------------
  1641.   def initialize(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
  1642.     super(0, 128, 160, 192)
  1643.     self.z = 999
  1644.     self.contents = Bitmap.new(width - 32, height - 32)
  1645.     self.visible = false
  1646.     self.back_opacity = 160
  1647.     refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
  1648.   end
  1649.   #-----------------------------------------------------------
  1650.   # ● リフレッシュ
  1651.   #---------------------------------------------------------
  1652.   def refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
  1653.     self.contents.clear
  1654.     self.contents.font.color = system_color
  1655.     self.contents.font.size = 14
  1656.     self.contents.draw_text( 0, 0, 160, 24, "等级上升")
  1657.     self.contents.font.size = 18
  1658.     self.contents.draw_text( 0, 28, 160, 24, $data_system.words.hp)
  1659.     self.contents.draw_text( 0, 50, 160, 24, $data_system.words.sp)
  1660.     self.contents.font.size = 14
  1661.     self.contents.draw_text( 0, 72, 80, 24, $data_system.words.str)
  1662.     self.contents.draw_text( 0, 94, 80, 24, $data_system.words.dex)
  1663.     self.contents.draw_text( 0, 116, 80, 24, $data_system.words.agi)
  1664.     self.contents.draw_text( 0, 138, 80, 24, $data_system.words.int)
  1665.     self.contents.draw_text(92, 0, 128, 24, "→")
  1666.     self.contents.draw_text(76, 28, 128, 24, "=")
  1667.     self.contents.draw_text(76, 50, 128, 24, "=")
  1668.     self.contents.draw_text(76, 72, 128, 24, "=")
  1669.     self.contents.draw_text(76, 94, 128, 24, "=")
  1670.     self.contents.draw_text(76, 116, 128, 24, "=")
  1671.     self.contents.draw_text(76, 138, 128, 24, "=")
  1672.     self.contents.font.color = normal_color
  1673.     self.contents.draw_text( 0, 0, 88, 24, last_lv.to_s, 2)
  1674.     self.contents.draw_text( 0, 28, 72, 24, "+" + up_hp.to_s, 2)
  1675.     self.contents.draw_text( 0, 50, 72, 24, "+" + up_sp.to_s, 2)
  1676.     self.contents.draw_text( 0, 72, 72, 24, "+" + up_str.to_s, 2)
  1677.     self.contents.draw_text( 0, 94, 72, 24, "+" + up_dex.to_s, 2)
  1678.     self.contents.draw_text( 0, 116, 72, 24, "+" + up_agi.to_s, 2)
  1679.     self.contents.draw_text( 0, 138, 72, 24, "+" + up_int.to_s, 2)
  1680.     self.contents.font.size = 20
  1681.     self.contents.draw_text( 0, 0, 128, 24, actor.level.to_s, 2)
  1682.     self.contents.draw_text( 0, 26, 128, 24, actor.maxhp.to_s, 2)
  1683.     self.contents.draw_text( 0, 48, 128, 24, actor.maxsp.to_s, 2)
  1684.     self.contents.draw_text( 0, 70, 128, 24, actor.str.to_s, 2)
  1685.     self.contents.draw_text( 0, 92, 128, 24, actor.dex.to_s, 2)
  1686.     self.contents.draw_text( 0, 114, 128, 24, actor.agi.to_s, 2)
  1687.     self.contents.draw_text( 0, 136, 128, 24, actor.int.to_s, 2)
  1688.   end
  1689. end
  1690. #===========================================================
  1691. # ■ Window_SkillLearning
  1692. #------------------------------------------------------------------------------
  1693. #  レベルアップ時などにスキルを習得した場合にそれを表示するウィンドウです。
  1694. #=============================================================
  1695. class Window_SkillLearning < Window_Base
  1696.   #-------------------------------------------------------------
  1697.   # ● 公開インスタンス変数
  1698.   #-----------------------------------------------------------
  1699.   attr_reader :learned # スキルを習得したかどうか
  1700.   #----------------------------------------------------------
  1701.   # ● オブジェクト初期化
  1702.   #----------------------------------------------------------
  1703.   def initialize(class_id, last_lv, now_lv)
  1704.     super(160, 64, 320, 64)
  1705.     self.z = 999
  1706.     self.contents = Bitmap.new(width - 32, height - 28) # わざと▽を表示
  1707.     self.visible = false
  1708.     self.back_opacity = 160
  1709.     @learned = false
  1710.     refresh(class_id, last_lv, now_lv)
  1711.   end
  1712.   #------------------------------------------------------------
  1713.   # ● リフレッシュ
  1714.   #-------------------------------------------------------
  1715.   def refresh(class_id, last_lv, now_lv)
  1716.     for i in 0...$data_classes[class_id].learnings.size
  1717.       learn_lv = $data_classes[class_id].learnings[i].level
  1718.       # 今回のレベルアップ範囲で習得するスキルの場合
  1719.       if learn_lv > last_lv and learn_lv <= now_lv
  1720.         @learned = true
  1721.         # SEの再生
  1722.         if $data_system_skilllearn_se != ""
  1723.           Audio.se_play($data_system_skilllearn_se)
  1724.         end
  1725.         # 各描写
  1726.         skill_name = $data_skills[$data_classes[class_id].learnings[i].skill_id].name
  1727.         self.contents.clear
  1728.         self.contents.font.color = text_color(0)
  1729.         self.contents.draw_text(0,0,448,32, "学会特技:"+skill_name)
  1730.         self.contents.font.color = text_color(6)
  1731.         self.contents.draw_text(0,0,448,32, "          "+skill_name)
  1732.         self.contents.font.color = text_color(0)
  1733.         self.visible = true
  1734.         # メインループ
  1735.         loop do
  1736.           # ゲーム画面を更新
  1737.           Graphics.update
  1738.           # 入力情報を更新
  1739.           Input.update
  1740.           # フレーム更新
  1741.           update
  1742.           # 画面が切り替わったらループを中断
  1743.           if @learned == false
  1744.             break
  1745.           end
  1746.         end
  1747.       # メインループここまで
  1748.       end
  1749.     end
  1750.   end
  1751.   #-----------------------------------------------------------
  1752.   # ● フレーム更新
  1753.   #------------------------------------------------------------
  1754.   def update
  1755.     # C ボタンが押された場合
  1756.     if Input.trigger?(Input::C)
  1757.       @learned = false
  1758.       self.visible = false
  1759.     end
  1760.   end
  1761. end
  1762. #==================================================================
  1763. # ■ Window_BattleStatus
  1764. #==================================================================
  1765. class Window_BattleStatus < Window_Base
  1766.   #---------------------------------------------------------
  1767.   # ● 追加?公開インスタンス変数
  1768.   #-------------------------------------------------------
  1769.   attr_accessor :level_up_flags # LEVEL UP!表示
  1770. end
  1771. #===============================================================
  1772. # ■ Game_Battler
  1773. #===============================================================
  1774. class Game_Battler
  1775.   #--------------------------------------------------------------
  1776.   # ● 追加?公開インスタンス変数
  1777.   #----------------------------------------------------------
  1778.   attr_accessor :exp_gain_ban # EXP取得一時禁止
  1779.   #------------------------------------------------------
  1780.   # ● オブジェクト初期化
  1781.   #-----------------------------------------------------
  1782.   alias xrxs_bp10_initialize initialize
  1783.   def initialize
  1784.     @exp_gain_ban = false
  1785.     xrxs_bp10_initialize
  1786.   end
  1787.   #-------------------------------------------------------
  1788.   # ● ステート [EXP を獲得できない] 判定
  1789.   #-----------------------------------------------------
  1790.   alias xrxs_bp10_cant_get_exp? cant_get_exp?
  1791.   def cant_get_exp?
  1792.     if @exp_gain_ban == true
  1793.       return true
  1794.     else
  1795.       return xrxs_bp10_cant_get_exp?
  1796.     end
  1797.   end
  1798. end
  1799. #==============================================================
  1800. # ■ Scene_Battle
  1801. #==============================================================
  1802. class Scene_Battle
  1803.   #--------------------------------------------------
  1804.   # ● アフターバトルフェーズ開始
  1805.   #--------------------------------------------------
  1806.   alias xrxs_bp10_start_phase5 start_phase5
  1807.   def start_phase5
  1808.     # EXP 獲得禁止
  1809.     for i in 0...$game_party.actors.size
  1810.       $game_party.actors[i].exp_gain_ban = true
  1811.     end
  1812.     xrxs_bp10_start_phase5
  1813.     # EXP 獲得禁止の解除
  1814.     for i in 0...$game_party.actors.size
  1815.       $game_party.actors[i].exp_gain_ban = false
  1816.     end
  1817.     # EXPを初期化
  1818.     @exp_gained = 0
  1819.     for enemy in $game_troop.enemies
  1820.       # 獲得 EXPを追加 # エネミーが隠れ状態でない場合
  1821.       @exp_gained += enemy.exp if not enemy.hidden
  1822.     end
  1823.     # 設定
  1824.     @phase5_step = 1
  1825.     @exp_gain_actor = -1
  1826.     # リザルトウィンドウを表示
  1827.     @result_window.visible = true
  1828.   end
  1829.   #----------------------------------------------------------
  1830.   # ● フレーム更新 (アフターバトルフェーズ)
  1831.   #--------------------------------------------------------
  1832.   #alias xrxs_bp10_update_phase5 update_phase5
  1833.   def update_phase5
  1834.     case @phase5_step
  1835.     when 1
  1836.       update_phase5_step1
  1837.     else
  1838.     # ウェイトカウントが 0 より大きい場合
  1839.       if @phase5_wait_count > 0
  1840.         # ウェイトカウントを減らす
  1841.         @phase5_wait_count -= 1
  1842.         # ウェイトカウントが 0 になった場合
  1843.         if @phase5_wait_count == 0
  1844.           # リザルトウィンドウを表示
  1845.           #@result_window.visible = true
  1846.           # メインフェーズフラグをクリア
  1847.           $game_temp.battle_main_phase = false
  1848.           # ステータスウィンドウをリフレッシュ
  1849.           @status_window.refresh
  1850.         end
  1851.       return
  1852.       end
  1853.       # C ボタンが押された場合
  1854.       if Input.trigger?(Input::C)
  1855.         # バトル終了
  1856.         battle_end(0)
  1857.       end
  1858.     # レベルアップしている場合は強制バトル終了
  1859.     battle_end(0) if @levelup_window != nil and @phase5_wait_count <= 0
  1860.     end
  1861.   end
  1862.   #-----------------------------------------------------------
  1863.   # ● フレーム更新 (アフターバトルフェーズ 1 : レベルアップ)
  1864.   #-----------------------------------------------------------
  1865.   def update_phase5_step1
  1866.     # C ボタンが押された場合
  1867.     if Input.trigger?(Input::C)
  1868.       # ウィンドウを閉じて次のアクターへ
  1869.       @levelup_window.visible = false if @levelup_window != nil
  1870.       @status_window.level_up_flags[@exp_gain_actor] = false
  1871.       phase5_next_levelup
  1872.     end
  1873.   end
  1874.   #---------------------------------------------------------
  1875.   # ● 次のアクターのレベルアップ表示へ
  1876.   #---------------------------------------------------------
  1877.   def phase5_next_levelup
  1878.     begin
  1879.       # 次のアクターへ
  1880.       @exp_gain_actor += 1
  1881.       # 最後のアクターの場合
  1882.       if @exp_gain_actor >= $game_party.actors.size
  1883.         # アフターバトルフェーズ開始
  1884.         @phase5_step = 0
  1885.         return
  1886.       end
  1887.       actor = $game_party.actors[@exp_gain_actor]
  1888.       if actor.cant_get_exp? == false
  1889.         # 現在の能力値を保持
  1890.         last_level = actor.level
  1891.         last_maxhp = actor.maxhp
  1892.         last_maxsp = actor.maxsp
  1893.         last_str = actor.str
  1894.         last_dex = actor.dex
  1895.         last_agi = actor.agi
  1896.         last_int = actor.int
  1897.         # 経験値取得の決定的瞬間(謎
  1898.         actor.exp += @exp_gained
  1899.         # 判定
  1900.         if actor.level > last_level
  1901.           # レベルアップした場合
  1902.           @status_window.level_up(@exp_gain_actor)
  1903.           # リザルトウィンドウを消す
  1904.           @result_window.visible = false
  1905.           # SEの再生
  1906.           if $data_system_level_up_se != ""
  1907.             Audio.se_play($data_system_level_up_se)
  1908.           end
  1909.           # MEの再生
  1910.           if $data_system_level_up_me != ""
  1911.             Audio.me_stop
  1912.             Audio.me_play($data_system_level_up_me)
  1913.           end
  1914.           # LEVEL-UPウィンドウの設定
  1915.           @levelup_window = Window_LevelUpWindow.new(actor, last_level,
  1916.           actor.maxhp - last_maxhp, actor.maxsp - last_maxsp, actor.str - last_str,
  1917.           actor.dex - last_dex, actor.agi - last_agi, actor.int - last_int)
  1918.           @levelup_window.x = 160 * @exp_gain_actor
  1919.           @levelup_window.visible = true
  1920.           # ステータスウィンドウをリフレッシュ
  1921.           @status_window.refresh
  1922.           # スキル習得ウィンドウの設定
  1923.           @skilllearning_window = Window_SkillLearning.new(actor.class_id, last_level, actor.level)
  1924.           # ウェイトカウントを設定
  1925.           @phase5_wait_count = 40
  1926.           @phase5_step = 1
  1927.           return
  1928.         end
  1929.       end
  1930.     end until false
  1931.   end
  1932. end


  1933. #=============================================================
  1934. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  1935. #============================================================= #==============================================================================
  1936. # ■ Game_Actor
  1937. #------------------------------------------------------------------------------
  1938. #  处理角色的类。本类在 Game_Actors 类 ($game_actors)
  1939. # 的内部使用、Game_Party 类请参考 ($game_party) 。
  1940. #==============================================================================

  1941. class Game_Actor < Game_Battler
  1942. #--------------------------------------------------------------------------
  1943. # ● 取得战斗画面的 X 坐标
  1944. #--------------------------------------------------------------------------
  1945. def screen_x
  1946. case self.index
  1947. when 0
  1948.    return 500
  1949. when 1
  1950.    return 450
  1951. when 2
  1952.    return 500
  1953. when 3
  1954.    return 450
  1955. else
  1956.    return 600

  1957.   end
  1958. end
  1959. #--------------------------------------------------------------------------
  1960. # ● 取得战斗画面的 Y 坐标
  1961. #--------------------------------------------------------------------------
  1962. def screen_y
  1963. case self.index
  1964. when 0
  1965.    return 360
  1966. when 1
  1967.    return 300
  1968. when 2
  1969.    return 240
  1970. when 3
  1971.    return 180
  1972. else
  1973.    return 1000
  1974.   end
  1975. end
  1976. #--------------------------------------------------------------------------
  1977. # ● 取得战斗画面的 Z 坐标
  1978. #--------------------------------------------------------------------------
  1979. def screen_z
  1980. case self.index
  1981. when 0
  1982.    return 10
  1983. when 1
  1984.    return 9
  1985. when 2
  1986.    return 8
  1987. when 3
  1988.    return 7
  1989. else
  1990.    return 0
  1991.    end
  1992. end
  1993. end




  1994. #==============================================================================
  1995. # ■ Window_BattleStatus
  1996. #------------------------------------------------------------------------------
  1997. #  显示战斗画面同伴状态的窗口。
  1998. #==============================================================================

  1999. class Window_BattleStatus < Window_Base
  2000.   #--------------------------------------------------------------------------
  2001.   # ● 初始化对像
  2002.   #--------------------------------------------------------------------------
  2003.   def initialize
  2004.     super(0, 320, 640, 160)
  2005.     self.opacity = 0
  2006.     self.contents = Bitmap.new(width - 32, height - 32)
  2007.     @level_up_flags = [false, false, false, false]
  2008.     refresh
  2009.   end
  2010.   #--------------------------------------------------------------------------
  2011.   # ● 释放
  2012.   #--------------------------------------------------------------------------
  2013.   def dispose
  2014.     super
  2015.   end
  2016.   #--------------------------------------------------------------------------
  2017.   # ● 设置升级标志
  2018.   #     actor_index : 角色索引
  2019.   #--------------------------------------------------------------------------
  2020.   def level_up(actor_index)
  2021.     @level_up_flags[actor_index] = true
  2022.   end
  2023.   
  2024.   def draw_actor_face(actor,x,y)
  2025. bitmap = RPG::Cache.battler(actor.name + "_C" , actor.battler_hue)
  2026. self.contents.blt(x,y,bitmap,Rect.new(0,0,bitmap.width,bitmap.height ))
  2027. end
  2028.   #--------------------------------------------------------------------------
  2029.   # ● 刷新
  2030.   #--------------------------------------------------------------------------
  2031.   def refresh
  2032.     self.contents.clear
  2033.     @item_max = $game_party.actors.size
  2034.     for i in 0...$game_party.actors.size
  2035.       actor = $game_party.actors[i]
  2036.       actor_x = i * 160 + 4
  2037.       self.contents.font.size = 20
  2038.       draw_actor_face(actor,actor_x,0)
  2039.       draw_actor_name(actor, actor_x, 0)
  2040.       draw_actor_hp(actor, actor_x, 64, 120)
  2041.       draw_actor_sp(actor, actor_x, 80, 120)
  2042.       if @level_up_flags[i]
  2043.         self.contents.font.color = normal_color
  2044.         self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
  2045.       else
  2046.         self.contents.font.size = 16
  2047.         draw_actor_state(actor, actor_x, 96)
  2048.       end
  2049.     end
  2050.   end
  2051.   #--------------------------------------------------------------------------
  2052.   # ● 刷新画面
  2053.   #--------------------------------------------------------------------------
  2054.   def update
  2055.     super
  2056.     # 主界面的不透明度下降
  2057.     if $game_temp.battle_main_phase
  2058.       self.contents_opacity -= 4 if self.contents_opacity > 191
  2059.     else
  2060.       self.contents_opacity += 4 if self.contents_opacity < 255
  2061.     end
  2062.   end
  2063. end

  2064. #==============================================================================
  2065. # ■ Window_BattleResult
  2066. #------------------------------------------------------------------------------
  2067. #  战斗结束时、显示获得的 EXP 及金钱的窗口。
  2068. #==============================================================================

  2069. class Window_BattleResult < Window_Base
  2070.   #--------------------------------------------------------------------------
  2071.   # ● 初始化对像
  2072.   #     exp       : EXP
  2073.   #     gold      : 金钱
  2074.   #     treasures : 宝物
  2075.   #--------------------------------------------------------------------------
  2076.   def initialize(exp, gold, treasures)
  2077.     @exp = exp
  2078.     @gold = gold
  2079.     @treasures = treasures
  2080.     super(160, 0, 320, @treasures.size * 32 + 64)
  2081.        self.z = 999
  2082.     self.contents = Bitmap.new(width - 32, height - 32)
  2083.     self.y = 160 - height / 2
  2084.     self.back_opacity = 160
  2085.     self.visible = false
  2086.     refresh
  2087.   end
  2088.   #--------------------------------------------------------------------------
  2089.   # ● 刷新
  2090.   #--------------------------------------------------------------------------
  2091.   def refresh
  2092.     self.contents.clear
  2093.     x = 4
  2094.     self.contents.font.color = normal_color
  2095.     cx = contents.text_size(@exp.to_s).width
  2096.     self.contents.draw_text(x, 0, cx, 32, @exp.to_s)
  2097.     x += cx + 4
  2098.     self.contents.font.color = system_color
  2099.     cx = contents.text_size("EXP").width
  2100.     self.contents.draw_text(x, 0, 64, 32, "EXP")
  2101.     x += cx + 16
  2102.     self.contents.font.color = normal_color
  2103.     cx = contents.text_size(@gold.to_s).width
  2104.     self.contents.draw_text(x, 0, cx, 32, @gold.to_s)
  2105.     x += cx + 4
  2106.     self.contents.font.color = system_color
  2107.     self.contents.draw_text(x, 0, 128, 32, $data_system.words.gold)
  2108.     y = 32
  2109.     for item in @treasures
  2110.       draw_item_name(item, 4, y)
  2111.       y += 32
  2112.     end
  2113.   end
  2114. end

  2115. #==============================================================================
  2116. # ■ Spriteset_Battle
  2117. #------------------------------------------------------------------------------
  2118. #  处理战斗画面的活动块的类。本类在 Scene_Battle 类
  2119. # 的内部使用。
  2120. #==============================================================================

  2121. class Spriteset_Battle
  2122.   #--------------------------------------------------------------------------
  2123.   # ● 定义实例变量
  2124.   #--------------------------------------------------------------------------
  2125.   attr_reader   :viewport1                # 敌人方的显示端口
  2126.   attr_reader   :viewport2                # 角色方的显示端口
  2127.   #--------------------------------------------------------------------------
  2128.   # ● 初始化变量
  2129.   #--------------------------------------------------------------------------
  2130.   def initialize
  2131.     # 生成显示端口
  2132.     @viewport1 = Viewport.new(0, 0, 640, 480)
  2133.     @viewport2 = Viewport.new(0, 0, 640, 480)
  2134.     @viewport3 = Viewport.new(0, 0, 640, 480)
  2135.     @viewport4 = Viewport.new(0, 0, 640, 480)
  2136.     @viewport2.z = 101
  2137.     @viewport3.z = 200
  2138.     @viewport4.z = 5000
  2139.     # 生成战斗背景活动块
  2140.     @battleback_sprite = Sprite.new(@viewport1)
  2141.     # 生成敌人活动块
  2142.     @enemy_sprites = []
  2143.     for enemy in $game_troop.enemies.reverse
  2144.       @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  2145.     end
  2146.     # 生成敌人活动块
  2147.     @actor_sprites = []
  2148.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  2149.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  2150.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  2151.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  2152.     # 生成天候
  2153.     @weather = RPG::Weather.new(@viewport1)
  2154.     # 生成图片活动块
  2155.     @picture_sprites = []
  2156.     for i in 51..100
  2157.       @picture_sprites.push(Sprite_Picture.new(@viewport3,
  2158.         $game_screen.pictures[i]))
  2159.     end
  2160.     # 生成计时器块
  2161.     @timer_sprite = Sprite_Timer.new
  2162.     # 刷新画面
  2163.     update
  2164.   end
  2165.   #--------------------------------------------------------------------------
  2166.   # ● 释放
  2167.   #--------------------------------------------------------------------------
  2168.   def dispose
  2169.     # 如果战斗背景位图存在的情况下就释放
  2170.     if @battleback_sprite.bitmap != nil
  2171.       @battleback_sprite.bitmap.dispose
  2172.     end
  2173.     # 释放战斗背景活动块
  2174.     @battleback_sprite.dispose
  2175.     # 释放敌人活动块、角色活动块
  2176.     for sprite in @enemy_sprites + @actor_sprites
  2177.       sprite.dispose
  2178.     end
  2179.     # 释放天候
  2180.     @weather.dispose
  2181.     # 释放图片活动块
  2182.     for sprite in @picture_sprites
  2183.       sprite.dispose
  2184.     end
  2185.     # 释放计时器活动块
  2186.     @timer_sprite.dispose
  2187.     # 释放显示端口
  2188.     @viewport1.dispose
  2189.     @viewport2.dispose
  2190.     @viewport3.dispose
  2191.     @viewport4.dispose
  2192.   end
  2193.   #--------------------------------------------------------------------------
  2194.   # ● 显示效果中判定
  2195.   #--------------------------------------------------------------------------
  2196.   def effect?
  2197.     # 如果是在显示效果中的话就返回 true
  2198.     for sprite in @enemy_sprites + @actor_sprites
  2199.       return true if sprite.effect?
  2200.     end
  2201.     return false
  2202.   end
  2203.   #--------------------------------------------------------------------------
  2204.   # ● 刷新画面
  2205.   #--------------------------------------------------------------------------
  2206.   def update
  2207.     # 刷新角色的活动块 (对应角色的替换)
  2208.     @actor_sprites[0].battler = $game_party.actors[0]
  2209.     @actor_sprites[1].battler = $game_party.actors[1]
  2210.     @actor_sprites[2].battler = $game_party.actors[2]
  2211.     @actor_sprites[3].battler = $game_party.actors[3]
  2212.     # 战斗背景的文件名与现在情况有差异的情况下
  2213.     if @battleback_name != $game_temp.battleback_name
  2214.       @battleback_name = $game_temp.battleback_name
  2215.       if @battleback_sprite.bitmap != nil
  2216.         @battleback_sprite.bitmap.dispose
  2217.       end
  2218.       @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
  2219.       @battleback_sprite.src_rect.set(0, 0, 640, 480)
  2220.     end
  2221.     # 刷新战斗者的活动块
  2222.     for sprite in @enemy_sprites + @actor_sprites
  2223.       sprite.update
  2224.     end
  2225.     # 刷新天气图形
  2226.     @weather.type = $game_screen.weather_type
  2227.     @weather.max = $game_screen.weather_max
  2228.     @weather.update
  2229.     # 刷新图片活动块
  2230.     for sprite in @picture_sprites
  2231.       sprite.update
  2232.     end
  2233.     # 刷新计时器活动块
  2234.     @timer_sprite.update
  2235.     # 设置画面的色调与震动位置
  2236.     @viewport1.tone = $game_screen.tone
  2237.     @viewport1.ox = $game_screen.shake
  2238.     # 设置画面的闪烁色
  2239.     @viewport4.color = $game_screen.flash_color
  2240.     # 刷新显示端口
  2241.     @viewport1.update
  2242.     @viewport2.update
  2243.     @viewport4.update
  2244.   end
  2245. end




  2246. #==============================================================================
  2247. # ■ Scene_Battle (分割定义 1)
  2248. #------------------------------------------------------------------------------
  2249. #  处理战斗画面的类。
  2250. #==============================================================================

  2251. class Scene_Battle
  2252.   #--------------------------------------------------------------------------
  2253.   # ● 主处理
  2254.   #--------------------------------------------------------------------------
  2255.   def main
  2256.     # 初始化战斗用的各种暂时数据
  2257.     $game_temp.in_battle = true
  2258.     $game_temp.battle_turn = 0
  2259.     $game_temp.battle_event_flags.clear
  2260.     $game_temp.battle_abort = false
  2261.     $game_temp.battle_main_phase = false
  2262.     $game_temp.battleback_name = $game_map.battleback_name
  2263.     $game_temp.forcing_battler = nil
  2264.     # 初始化战斗用事件解释器
  2265.     $game_system.battle_interpreter.setup(nil, 0)
  2266.     # 准备队伍
  2267.     @troop_id = $game_temp.battle_troop_id
  2268.     $game_troop.setup(@troop_id)
  2269.     # 生成角色命令窗口
  2270.     s1 = $data_system.words.attack
  2271.     s2 = $data_system.words.skill
  2272.     s3 = $data_system.words.guard
  2273.     s4 = $data_system.words.item
  2274.    s5 = "逃跑"
  2275. @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4, s5])
  2276.      # 不能逃跑的情况下
  2277.     if $game_temp.battle_can_escape == false
  2278.       @actor_command_window.disable_item(4)
  2279.     end
  2280.     @actor_command_window.y = 160
  2281.     @actor_command_window.back_opacity = 160
  2282.     @actor_command_window.active = false
  2283.     @actor_command_window.visible = false
  2284.     # 生成其它窗口
  2285.     @party_command_window = Window_PartyCommand.new
  2286.     @help_window = Window_Help.new
  2287.     @help_window.back_opacity = 160
  2288.     @help_window.visible = false
  2289.     @status_window = Window_BattleStatus.new
  2290.     @message_window = Window_Message.new
  2291.     # 生成活动块
  2292.     @spriteset = Spriteset_Battle.new
  2293.     # 初始化等待计数
  2294.     @wait_count = 0
  2295.     # 执行过渡
  2296.     if $data_system.battle_transition == ""
  2297.       Graphics.transition(20)
  2298.     else
  2299.       Graphics.transition(40, "Graphics/Transitions/" +
  2300.         $data_system.battle_transition)
  2301.     end
  2302.     # 开始自由战斗回合
  2303.     start_phase1
  2304.     # 主循环
  2305.     loop do
  2306.       # 刷新游戏画面
  2307.       Graphics.update
  2308.       # 刷新输入信息
  2309.       Input.update
  2310.       # 刷新画面
  2311.       update
  2312.       # 如果画面切换的话就中断循环
  2313.       if $scene != self
  2314.         break
  2315.       end
  2316.     end
  2317.     # 刷新地图
  2318.     $game_map.refresh
  2319.     # 准备过渡
  2320.     Graphics.freeze
  2321.     # 释放窗口
  2322.     @actor_command_window.dispose
  2323.     @party_command_window.dispose
  2324.     @help_window.dispose
  2325.     @status_window.dispose
  2326.     @message_window.dispose
  2327.     if @skill_window != nil
  2328.       @skill_window.dispose
  2329.     end
  2330.     if @item_window != nil
  2331.       @item_window.dispose
  2332.     end
  2333.     if @result_window != nil
  2334.       @result_window.dispose
  2335.     end
  2336.     # 释放活动块
  2337.     @spriteset.dispose
  2338.     # 标题画面切换中的情况
  2339.     if $scene.is_a?(Scene_Title)
  2340.       # 淡入淡出画面
  2341.       Graphics.transition
  2342.       Graphics.freeze
  2343.     end
  2344.     # 战斗测试或者游戏结束以外的画面切换中的情况
  2345.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  2346.       $scene = nil
  2347.     end
  2348.   end
  2349.   #--------------------------------------------------------------------------
  2350.   # ● 胜负判定
  2351.   #--------------------------------------------------------------------------
  2352.   def judge
  2353.     # 全灭判定是真、并且同伴人数为 0 的情况下
  2354.     if $game_party.all_dead? or $game_party.actors.size == 0
  2355.       # 允许失败的情况下
  2356.       if $game_temp.battle_can_lose
  2357.         # 还原为战斗开始前的 BGM
  2358.         $game_system.bgm_play($game_temp.map_bgm)
  2359.         # 战斗结束
  2360.         battle_end(2)
  2361.         # 返回 true
  2362.         return true
  2363.       end
  2364.       # 设置游戏结束标志
  2365.       $game_temp.gameover = true
  2366.       # 返回 true
  2367.       return true
  2368.     end
  2369.     # 如果存在任意 1 个敌人就返回 false
  2370.     for enemy in $game_troop.enemies
  2371.       if enemy.exist?
  2372.         return false
  2373.       end
  2374.     end
  2375.     # 开始结束战斗回合 (胜利)
  2376.     start_phase5
  2377.     # 返回 true
  2378.     return true
  2379.   end
  2380.   #--------------------------------------------------------------------------
  2381.   # ● 战斗结束
  2382.   #     result : 結果 (0:胜利 1:失败 2:逃跑)
  2383.   #--------------------------------------------------------------------------
  2384.   def battle_end(result)
  2385.     # 清除战斗中标志
  2386.     $game_temp.in_battle = false
  2387.     # 清除全体同伴的行动
  2388.     $game_party.clear_actions
  2389.     # 解除战斗用状态
  2390.     for actor in $game_party.actors
  2391.       actor.remove_states_battle
  2392.     end
  2393.     # 清除敌人
  2394.     $game_troop.enemies.clear
  2395.     # 调用战斗返回调用
  2396.     if $game_temp.battle_proc != nil
  2397.       $game_temp.battle_proc.call(result)
  2398.       $game_temp.battle_proc = nil
  2399.     end
  2400.     # 切换到地图画面
  2401.     $scene = Scene_Map.new
  2402.   end
  2403.   #--------------------------------------------------------------------------
  2404.   # ● 设置战斗事件
  2405.   #--------------------------------------------------------------------------
  2406.   def setup_battle_event
  2407.     # 正在执行战斗事件的情况下
  2408.     if $game_system.battle_interpreter.running?
  2409.       return
  2410.     end
  2411.     # 搜索全部页的战斗事件
  2412.     for index in 0...$data_troops[@troop_id].pages.size
  2413.       # 获取事件页
  2414.       page = $data_troops[@troop_id].pages[index]
  2415.       # 事件条件可以参考 c
  2416.       c = page.condition
  2417.       # 没有指定任何条件的情况下转到下一页
  2418.       unless c.turn_valid or c.enemy_valid or
  2419.              c.actor_valid or c.switch_valid
  2420.         next
  2421.       end
  2422.       # 执行完毕的情况下转到下一页
  2423.       if $game_temp.battle_event_flags[index]
  2424.         next
  2425.       end
  2426.       # 确认回合条件
  2427.       if c.turn_valid
  2428.         n = $game_temp.battle_turn
  2429.         a = c.turn_a
  2430.         b = c.turn_b
  2431.         if (b == 0 and n != a) or
  2432.            (b > 0 and (n < 1 or n < a or n % b != a % b))
  2433.           next
  2434.         end
  2435.       end
  2436.       # 确认敌人条件
  2437.       if c.enemy_valid
  2438.         enemy = $game_troop.enemies[c.enemy_index]
  2439.         if enemy == nil or enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
  2440.           next
  2441.         end
  2442.       end
  2443.       # 确认角色条件
  2444.       if c.actor_valid
  2445.         actor = $game_actors[c.actor_id]
  2446.         if actor == nil or actor.hp * 100.0 / actor.maxhp > c.actor_hp
  2447.           next
  2448.         end
  2449.       end
  2450.       # 确认开关条件
  2451.       if c.switch_valid
  2452.         if $game_switches[c.switch_id] == false
  2453.           next
  2454.         end
  2455.       end
  2456.       # 设置事件
  2457.       $game_system.battle_interpreter.setup(page.list, 0)
  2458.       # 本页的范围是 [战斗] 或 [回合] 的情况下
  2459.       if page.span <= 1
  2460.         # 设置执行结束标志
  2461.         $game_temp.battle_event_flags[index] = true
  2462.       end
  2463.       return
  2464.     end
  2465.   end
  2466.   #--------------------------------------------------------------------------
  2467.   # ● 刷新画面
  2468.   #--------------------------------------------------------------------------
  2469.   def update
  2470.     # 执行战斗事件中的情况下
  2471.     if $game_system.battle_interpreter.running?
  2472.       # 刷新解释器
  2473.       $game_system.battle_interpreter.update
  2474.       # 强制行动的战斗者不存在的情况下
  2475.       if $game_temp.forcing_battler == nil
  2476.         # 执行战斗事件结束的情况下
  2477.         unless $game_system.battle_interpreter.running?
  2478.           # 继续战斗的情况下、再执行战斗事件的设置
  2479.           unless judge
  2480.             setup_battle_event
  2481.           end
  2482.         end
  2483.         # 如果不是结束战斗回合的情况下
  2484.         if @phase != 5
  2485.           # 刷新状态窗口
  2486.           @status_window.refresh
  2487.         end
  2488.       end
  2489.     end
  2490.     # 系统 (计时器)、刷新画面
  2491.     $game_system.update
  2492.     $game_screen.update
  2493.     # 计时器为 0 的情况下
  2494.     if $game_system.timer_working and $game_system.timer == 0
  2495.       # 中断战斗
  2496.       $game_temp.battle_abort = true
  2497.     end
  2498.     # 刷新窗口
  2499.     @help_window.update
  2500.     @party_command_window.update
  2501.     @actor_command_window.update
  2502.     @status_window.update
  2503.     @message_window.update
  2504.     # 刷新活动块
  2505.     @spriteset.update
  2506.     # 处理过渡中的情况下
  2507.     if $game_temp.transition_processing
  2508.       # 清除处理过渡中标志
  2509.       $game_temp.transition_processing = false
  2510.       # 执行过渡
  2511.       if $game_temp.transition_name == ""
  2512.         Graphics.transition(20)
  2513.       else
  2514.         Graphics.transition(40, "Graphics/Transitions/" +
  2515.           $game_temp.transition_name)
  2516.       end
  2517.     end
  2518.     # 显示信息窗口中的情况下
  2519.     if $game_temp.message_window_showing
  2520.       return
  2521.     end
  2522.     # 显示效果中的情况下
  2523.     if @spriteset.effect?
  2524.       return
  2525.     end
  2526.     # 游戏结束的情况下
  2527.     if $game_temp.gameover
  2528.       # 切换到游戏结束画面
  2529.       $scene = Scene_Gameover.new
  2530.       return
  2531.     end
  2532.     # 返回标题画面的情况下
  2533.     if $game_temp.to_title
  2534.       # 切换到标题画面
  2535.       $scene = Scene_Title.new
  2536.       return
  2537.     end
  2538.     # 中断战斗的情况下
  2539.     if $game_temp.battle_abort
  2540.       # 还原为战斗前的 BGM
  2541.       $game_system.bgm_play($game_temp.map_bgm)
  2542.       # 战斗结束
  2543.       battle_end(1)
  2544.       return
  2545.     end
  2546.     # 等待中的情况下
  2547.     if @wait_count > 0
  2548.       # 减少等待计数
  2549.       @wait_count -= 1
  2550.       return
  2551.     end
  2552.     # 强制行动的角色存在、
  2553.     # 并且战斗事件正在执行的情况下
  2554.     if $game_temp.forcing_battler == nil and
  2555.        $game_system.battle_interpreter.running?
  2556.       return
  2557.     end
  2558.     # 回合分支
  2559.     case @phase
  2560.     when 1  # 自由战斗回合
  2561.       update_phase1
  2562.     when 2  # 同伴命令回合
  2563.       update_phase2
  2564.     when 3  # 角色命令回合
  2565.       update_phase3
  2566.     when 4  # 主回合
  2567.       update_phase4
  2568.     when 5  # 战斗结束回合
  2569.       update_phase5
  2570.     end
  2571.   end
  2572. end


  2573. #==============================================================================
  2574. # ■ Scene_Battle (分割定义 2)
  2575. #------------------------------------------------------------------------------
  2576. #  处理战斗画面的类。
  2577. #==============================================================================

  2578. class Scene_Battle
  2579.   #--------------------------------------------------------------------------
  2580.   # ● 开始自由战斗回合
  2581.   #--------------------------------------------------------------------------
  2582.   def start_phase1
  2583.     # 转移到回合 1
  2584.     @phase = 1
  2585.     # 清除全体同伴的行动
  2586.     $game_party.clear_actions
  2587.     # 设置战斗事件
  2588.     setup_battle_event
  2589.   end
  2590.   #--------------------------------------------------------------------------
  2591.   # ● 刷新画面 (自由战斗回合)
  2592.   #--------------------------------------------------------------------------
  2593.   def update_phase1
  2594.     # 胜败判定
  2595.     if judge
  2596.       # 胜利或者失败的情况下 : 过程结束
  2597.       return
  2598.     end
  2599.     # 开始同伴命令回合
  2600.     start_phase2
  2601.   end
  2602.   #--------------------------------------------------------------------------
  2603.   # ● 开始同伴命令回合
  2604.   #--------------------------------------------------------------------------
  2605.   def start_phase2
  2606.     # 转移到回合 2
  2607.     @phase = 2
  2608.     # 设置角色为非选择状态
  2609.     @actor_index = -1
  2610.     @active_battler = nil
  2611.     # 有效化同伴指令窗口
  2612.     #@party_command_window.active = true
  2613.     #@party_command_window.visible = true
  2614.     # 无效化角色指令窗口
  2615.     @actor_command_window.active = false
  2616.     @actor_command_window.visible = false
  2617.     # 清除主回合标志
  2618.     $game_temp.battle_main_phase = false
  2619.     # 清除全体同伴的行动
  2620.     $game_party.clear_actions
  2621.     # 不能输入命令的情况下
  2622.     unless $game_party.inputable?
  2623.       # 开始主回合
  2624.       start_phase4
  2625.     end
  2626.   end
  2627.   #--------------------------------------------------------------------------
  2628.   # ● 刷新画面 (同伴命令回合)
  2629.   #--------------------------------------------------------------------------
  2630.   def update_phase2
  2631.     # 演奏确定 SE
  2632.       $game_system.se_play($data_system.decision_se)
  2633.       # 开始角色的命令回合
  2634.       start_phase3
  2635.     # 按下 C 键的情况下
  2636.     if Input.trigger?(Input::C)
  2637.       # 同伴指令窗口光标位置分支
  2638.       case @party_command_window.index
  2639.       when 0  # 战斗
  2640.         # 演奏确定 SE
  2641.         $game_system.se_play($data_system.decision_se)
  2642.         # 开始角色的命令回合
  2643.         start_phase3
  2644.       when 1  # 逃跑
  2645.         # 不能逃跑的情况下
  2646.         if $game_temp.battle_can_escape == false
  2647.           # 演奏冻结 SE
  2648.           $game_system.se_play($data_system.buzzer_se)
  2649.           return
  2650.         end
  2651.         # 演奏确定 SE
  2652.         $game_system.se_play($data_system.decision_se)
  2653.         # 逃走处理
  2654.         update_phase2_escape
  2655.       end
  2656.       return
  2657.     end
  2658.   end
  2659.   #--------------------------------------------------------------------------
  2660.   # ● 画面更新 (同伴指令回合 : 逃跑)
  2661.   #--------------------------------------------------------------------------
  2662.   def update_phase2_escape
  2663.     # 计算敌人速度的平均值
  2664.     enemies_agi = 0
  2665.     enemies_number = 0
  2666.     for enemy in $game_troop.enemies
  2667.       if enemy.exist?
  2668.         enemies_agi += enemy.agi
  2669.         enemies_number += 1
  2670.       end
  2671.     end
  2672.     if enemies_number > 0
  2673.       enemies_agi /= enemies_number
  2674.     end
  2675.     # 计算角色速度的平均值
  2676.     actors_agi = 0
  2677.     actors_number = 0
  2678.     for actor in $game_party.actors
  2679.       if actor.exist?
  2680.         actors_agi += actor.agi
  2681.         actors_number += 1
  2682.       end
  2683.     end
  2684.     if actors_number > 0
  2685.       actors_agi /= actors_number
  2686.     end
  2687.     # 逃跑成功判定
  2688.     success = rand(100) < 50 * actors_agi / enemies_agi
  2689.     # 成功逃跑的情况下
  2690.     if success
  2691. #######################################################★
  2692.         $game_temp.common_event_id = 32
  2693.         @wait_count = 1
  2694. #######################################################★
  2695.       # 演奏逃跑 SE
  2696.       $game_system.se_play($data_system.escape_se)
  2697.       # 还原为战斗开始前的 BGM
  2698.       $game_system.bgm_play($game_temp.map_bgm)
  2699.       # 战斗结束
  2700.       battle_end(1)
  2701.     # 逃跑失败的情况下
  2702.     else
  2703.       # 清除全体同伴的行动
  2704.       $game_party.clear_actions
  2705.       # 开始主回合
  2706.       start_phase4
  2707.     end
  2708.   end
  2709.   #--------------------------------------------------------------------------
  2710.   # ● 开始结束战斗回合
  2711.   #--------------------------------------------------------------------------
  2712.   def start_phase5
  2713.     # 转移到回合 5
  2714.     @phase = 5
  2715.     # 演奏战斗结束 ME
  2716.     $game_system.me_play($game_system.battle_end_me)
  2717.     # 还原为战斗开始前的 BGM
  2718.     $game_system.bgm_play($game_temp.map_bgm)
  2719.     # 初始化 EXP、金钱、宝物
  2720.     exp = 0
  2721.     gold = 0
  2722.     treasures = []
  2723.     # 循环
  2724.     for enemy in $game_troop.enemies
  2725.       # 敌人不是隐藏状态的情况下
  2726.       unless enemy.hidden
  2727.         # 获得 EXP、增加金钱
  2728.         exp += enemy.exp
  2729.         gold += enemy.gold
  2730.         # 出现宝物判定
  2731.         if rand(100) < enemy.treasure_prob
  2732.           if enemy.item_id > 0
  2733.             treasures.push($data_items[enemy.item_id])
  2734.           end
  2735.           if enemy.weapon_id > 0
  2736.             treasures.push($data_weapons[enemy.weapon_id])
  2737.           end
  2738.           if enemy.armor_id > 0
  2739.             treasures.push($data_armors[enemy.armor_id])
  2740.           end
  2741.         end
  2742.       end
  2743.     end
  2744.     # 限制宝物数为 6 个
  2745.     treasures = treasures[0..5]
  2746.     # 获得 EXP
  2747.     for i in 0...$game_party.actors.size
  2748.       actor = $game_party.actors[i]
  2749.       if actor.cant_get_exp? == false
  2750.         last_level = actor.level
  2751.         actor.exp += exp
  2752.         if actor.level > last_level
  2753.           @status_window.level_up(i)
  2754.         end
  2755.       end
  2756.     end
  2757.     # 获得金钱
  2758.     $game_party.gain_gold(gold)
  2759.     # 获得宝物
  2760.     for item in treasures
  2761.       case item
  2762.       when RPG::Item
  2763.         $game_party.gain_item(item.id, 1)
  2764.       when RPG::Weapon
  2765.         $game_party.gain_weapon(item.id, 1)
  2766.       when RPG::Armor
  2767.         $game_party.gain_armor(item.id, 1)
  2768.       end
  2769.     end
  2770.     # 生成战斗结果窗口
  2771.     @result_window = Window_BattleResult.new(exp, gold, treasures)
  2772.     # 设置等待计数
  2773.     @phase5_wait_count = 100
  2774.   end
  2775.   #--------------------------------------------------------------------------
  2776.   # ● 画面更新 (结束战斗回合)
  2777.   #--------------------------------------------------------------------------
  2778.   def update_phase5
  2779.     # 等待计数大于 0 的情况下
  2780.     if @phase5_wait_count > 0
  2781.       # 减少等待计数
  2782.       @phase5_wait_count -= 1
  2783.       # 等待计数为 0 的情况下
  2784.       if @phase5_wait_count == 0
  2785.         # 显示结果窗口
  2786.         @result_window.visible = true
  2787.         # 清除主回合标志
  2788.         $game_temp.battle_main_phase = false
  2789.         # 刷新状态窗口
  2790.         @status_window.refresh
  2791. #######################################################★
  2792.         $game_temp.common_event_id = 32
  2793.         @wait_count = 1
  2794. #######################################################★
  2795.       end
  2796.       return
  2797.     end
  2798.     # 按下 C 键的情况下
  2799.     if Input.trigger?(Input::C)
  2800.       # 战斗结束
  2801.       battle_end(0)
  2802.     end
  2803.   end
  2804. end


  2805. #==============================================================================
  2806. # ■ Scene_Battle (分割定义 3)
  2807. #------------------------------------------------------------------------------
  2808. #  处理战斗画面的类。
  2809. #==============================================================================

  2810. class Scene_Battle
  2811.   #--------------------------------------------------------------------------
  2812.   # ● 开始角色命令回合
  2813.   #--------------------------------------------------------------------------
  2814.   def start_phase3
  2815.     # 转移到回合 3
  2816.     @phase = 3
  2817.     # 设置觉得为非选择状态
  2818.     @actor_index = -1
  2819.     @active_battler = nil
  2820.     # 输入下一个角色的命令
  2821.     phase3_next_actor
  2822.   end
  2823.   #--------------------------------------------------------------------------
  2824.   # ● 转到输入下一个角色的命令
  2825.   #--------------------------------------------------------------------------
  2826.   def phase3_next_actor
  2827.     # 循环
  2828.     begin
  2829.       # 角色的明灭效果 OFF
  2830.       if @active_battler != nil
  2831.         @active_battler.blink = false
  2832.       end
  2833.       # 最后的角色的情况
  2834.       if @actor_index == $game_party.actors.size-1
  2835.         # 开始主回合
  2836.         start_phase4
  2837.         return
  2838.       end
  2839.       # 推进角色索引
  2840.       @actor_index += 1
  2841.       @active_battler = $game_party.actors[@actor_index]
  2842.       @active_battler.blink = true
  2843.     # 如果角色是在无法接受指令的状态就再试
  2844.     end until @active_battler.inputable?
  2845.     # 设置角色的命令窗口
  2846.     phase3_setup_command_window
  2847.   end
  2848.   #--------------------------------------------------------------------------
  2849.   # ● 转向前一个角色的命令输入
  2850.   #--------------------------------------------------------------------------
  2851.   def phase3_prior_actor
  2852.     # 循环
  2853.     begin
  2854.       # 角色的明灭效果 OFF
  2855.       if @active_battler != nil
  2856.         @active_battler.blink = false
  2857.       end
  2858.       # 最初的角色的情况下
  2859.       if @actor_index == 0
  2860.         # 开始同伴指令回合
  2861.         start_phase2
  2862.         return
  2863.       end
  2864.       # 返回角色索引
  2865.       @actor_index -= 1
  2866.       @active_battler = $game_party.actors[@actor_index]
  2867.       @active_battler.blink = true
  2868.     # 如果角色是在无法接受指令的状态就再试
  2869.     end until @active_battler.inputable?
  2870.     # 设置角色的命令窗口
  2871.     phase3_setup_command_window
  2872.   end
  2873.   #--------------------------------------------------------------------------
  2874.   # ● 设置角色指令窗口
  2875.   #--------------------------------------------------------------------------
  2876.   def phase3_setup_command_window
  2877.     # 同伴指令窗口无效化
  2878.     @party_command_window.active = false
  2879.     @party_command_window.visible = false
  2880.     # 角色指令窗口无效化
  2881.     @actor_command_window.active = true
  2882.     @actor_command_window.visible = true
  2883.     # 设置角色指令窗口的位置
  2884.     @actor_command_window.x = @actor_index * 160
  2885.     # 设置索引为 0
  2886.     @actor_command_window.index = 0
  2887.   end
  2888.   #--------------------------------------------------------------------------
  2889.   # ● 刷新画面 (角色命令回合)
  2890.   #--------------------------------------------------------------------------
  2891.   def update_phase3
  2892.     # 敌人光标有效的情况下
  2893.     if @enemy_arrow != nil
  2894.       update_phase3_enemy_select
  2895.     # 角色光标有效的情况下
  2896.     elsif @actor_arrow != nil
  2897.       update_phase3_actor_select
  2898.     # 特技窗口有效的情况下
  2899.     elsif @skill_window != nil
  2900.       update_phase3_skill_select
  2901.     # 物品窗口有效的情况下
  2902.     elsif @item_window != nil
  2903.       update_phase3_item_select
  2904.     # 角色指令窗口有效的情况下
  2905.     elsif @actor_command_window.active
  2906.       update_phase3_basic_command
  2907.     end
  2908.   end
  2909.   #--------------------------------------------------------------------------
  2910.   # ● 刷新画面 (角色命令回合 : 基本命令)
  2911.   #--------------------------------------------------------------------------
  2912.   def update_phase3_basic_command
  2913.     # 按下 B 键的情况下
  2914.     if Input.trigger?(Input::B)
  2915.       # 演奏取消 SE
  2916.       $game_system.se_play($data_system.cancel_se)
  2917.       # 转向前一个角色的指令输入
  2918.       phase3_prior_actor
  2919.       return
  2920.     end
  2921.     # 按下 C 键的情况下
  2922.     if Input.trigger?(Input::C)
  2923.       # 角色指令窗口光标位置分之
  2924.       case @actor_command_window.index
  2925.       when 0  # 攻击
  2926.         # 演奏确定 SE
  2927.         $game_system.se_play($data_system.decision_se)
  2928.         # 设置行动
  2929.         @active_battler.current_action.kind = 0
  2930.         @active_battler.current_action.basic = 0
  2931.         # 开始选择敌人
  2932.         start_enemy_select
  2933.       when 1  # 特技
  2934.         # 演奏确定 SE
  2935.         $game_system.se_play($data_system.decision_se)
  2936.         # 设置行动
  2937.         @active_battler.current_action.kind = 1
  2938.         # 开始选择特技
  2939.         start_skill_select
  2940.       when 2  # 防御
  2941.         # 演奏确定 SE
  2942.         $game_system.se_play($data_system.decision_se)
  2943.         # 设置行动
  2944.         @active_battler.current_action.kind = 0
  2945.         @active_battler.current_action.basic = 1
  2946.         # 转向下一位角色的指令输入
  2947.         phase3_next_actor
  2948.       when 3  # 物品
  2949.         # 演奏确定 SE
  2950.         $game_system.se_play($data_system.decision_se)
  2951.         # 设置行动
  2952.         @active_battler.current_action.kind = 2
  2953.         # 开始选择物品
  2954.         start_item_select
  2955.         when 4
  2956.   escaping
  2957.       end
  2958.       return
  2959.     end
  2960.   end
  2961.   #--------------------------------------------------------------------------
  2962.   # ● 刷新画面 (角色命令回合 : 选择特技)
  2963.   #--------------------------------------------------------------------------
  2964.   def update_phase3_skill_select
  2965.     # 设置特技窗口为可视状态
  2966.     @skill_window.visible = true
  2967.     # 刷新特技窗口
  2968.     @skill_window.update
  2969.     # 按下 B 键的情况下
  2970.     if Input.trigger?(Input::B)
  2971.       # 演奏取消 SE
  2972.       $game_system.se_play($data_system.cancel_se)
  2973.       # 结束特技选择
  2974.       end_skill_select
  2975.       return
  2976.     end
  2977.     # 按下 C 键的情况下
  2978.     if Input.trigger?(Input::C)
  2979.       # 获取特技选择窗口现在选择的特技的数据
  2980.       @skill = @skill_window.skill
  2981.       # 无法使用的情况下
  2982.       if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
  2983.         # 演奏冻结 SE
  2984.         $game_system.se_play($data_system.buzzer_se)
  2985.         return
  2986.       end
  2987.       # 演奏确定 SE
  2988.       $game_system.se_play($data_system.decision_se)
  2989.       # 设置行动
  2990.       @active_battler.current_action.skill_id = @skill.id
  2991.       # 设置特技窗口为不可见状态
  2992.       @skill_window.visible = false
  2993.       # 效果范围是敌单体的情况下
  2994.       if @skill.scope == 1
  2995.         # 开始选择敌人
  2996.         start_enemy_select
  2997.       # 效果范围是我方单体的情况下
  2998.       elsif @skill.scope == 3 or @skill.scope == 5
  2999.         # 开始选择角色
  3000.         start_actor_select
  3001.       # 效果范围不是单体的情况下
  3002.       else
  3003.         # 选择特技结束
  3004.         end_skill_select
  3005.         # 转到下一位角色的指令输入
  3006.         phase3_next_actor
  3007.       end
  3008.       return
  3009.     end
  3010.   end
  3011.   #--------------------------------------------------------------------------
  3012.   # ● 刷新画面 (角色命令回合 : 选择物品)
  3013.   #--------------------------------------------------------------------------
  3014.   def update_phase3_item_select
  3015.     # 设置物品窗口为可视状态
  3016.     @item_window.visible = true
  3017.     # 刷新物品窗口
  3018.     @item_window.update
  3019.     # 按下 B 键的情况下
  3020.     if Input.trigger?(Input::B)
  3021.       # 演奏取消 SE
  3022.       $game_system.se_play($data_system.cancel_se)
  3023.       # 选择物品结束
  3024.       end_item_select
  3025.       return
  3026.     end
  3027.     # 按下 C 键的情况下
  3028.     if Input.trigger?(Input::C)
  3029.       # 获取物品窗口现在选择的物品资料
  3030.       @item = @item_window.item
  3031.       # 无法使用的情况下
  3032.       unless $game_party.item_can_use?(@item.id)
  3033.         # 演奏冻结 SE
  3034.         $game_system.se_play($data_system.buzzer_se)
  3035.         return
  3036.       end
  3037.       # 演奏确定 SE
  3038.       $game_system.se_play($data_system.decision_se)
  3039.       # 设置行动
  3040.       @active_battler.current_action.item_id = @item.id
  3041.       # 设置物品窗口为不可见状态
  3042.       @item_window.visible = false
  3043.       # 效果范围是敌单体的情况下
  3044.       if @item.scope == 1
  3045.         # 开始选择敌人
  3046.         start_enemy_select
  3047.       # 效果范围是我方单体的情况下
  3048.       elsif @item.scope == 3 or @item.scope == 5
  3049.         # 开始选择角色
  3050.         start_actor_select
  3051.       # 效果范围不是单体的情况下
  3052.       else
  3053.         # 物品选择结束
  3054.         end_item_select
  3055.         # 转到下一位角色的指令输入
  3056.         phase3_next_actor
  3057.       end
  3058.       return
  3059.     end
  3060.   end
  3061.   #--------------------------------------------------------------------------
  3062.   # ● 刷新画面画面 (角色命令回合 : 选择敌人)
  3063.   #--------------------------------------------------------------------------
  3064.   def update_phase3_enemy_select
  3065.     # 刷新敌人箭头
  3066.     @enemy_arrow.update
  3067.     # 按下 B 键的情况下
  3068.     if Input.trigger?(Input::B)
  3069.       # 演奏取消 SE
  3070.       $game_system.se_play($data_system.cancel_se)
  3071.       # 选择敌人结束
  3072.       end_enemy_select
  3073.       return
  3074.     end
  3075.     # 按下 C 键的情况下
  3076.     if Input.trigger?(Input::C)
  3077.       # 演奏确定 SE
  3078.       $game_system.se_play($data_system.decision_se)
  3079.       # 设置行动
  3080.       @active_battler.current_action.target_index = @enemy_arrow.index
  3081.       # 选择敌人结束
  3082.       end_enemy_select
  3083.       # 显示特技窗口中的情况下
  3084.       if @skill_window != nil
  3085.         # 结束特技选择
  3086.         end_skill_select
  3087.       end
  3088.       # 显示物品窗口的情况下
  3089.       if @item_window != nil
  3090.         # 结束物品选择
  3091.         end_item_select
  3092.       end
  3093.       # 转到下一位角色的指令输入
  3094.       phase3_next_actor
  3095.     end
  3096.   end
  3097.   #--------------------------------------------------------------------------
  3098.   # ● 画面更新 (角色指令回合 : 选择角色)
  3099.   #--------------------------------------------------------------------------
  3100.   def update_phase3_actor_select
  3101.     # 刷新角色箭头
  3102.     @actor_arrow.update
  3103.     # 按下 B 键的情况下
  3104.     if Input.trigger?(Input::B)
  3105.       # 演奏取消 SE
  3106.       $game_system.se_play($data_system.cancel_se)
  3107.       # 选择角色结束
  3108.       end_actor_select
  3109.       return
  3110.     end
  3111.     # 按下 C 键的情况下
  3112.     if Input.trigger?(Input::C)
  3113.       # 演奏确定 SE
  3114.       $game_system.se_play($data_system.decision_se)
  3115.       # 设置行动
  3116.       @active_battler.current_action.target_index = @actor_arrow.index
  3117.       # 选择角色结束
  3118.       end_actor_select
  3119.       # 显示特技窗口中的情况下
  3120.       if @skill_window != nil
  3121.         # 结束特技选择
  3122.         end_skill_select
  3123.       end
  3124.       # 显示物品窗口的情况下
  3125.       if @item_window != nil
  3126.         # 结束物品选择
  3127.         end_item_select
  3128.       end
  3129.       # 转到下一位角色的指令输入
  3130.       phase3_next_actor
  3131.     end
  3132.   end
  3133.   #--------------------------------------------------------------------------
  3134.   # ● 开始选择敌人
  3135.   #--------------------------------------------------------------------------
  3136.   def start_enemy_select
  3137.     # 生成敌人箭头
  3138.     @enemy_arrow = Arrow_Enemy.new(@spriteset.viewport1)
  3139.     # 关联帮助窗口
  3140.     @enemy_arrow.help_window = @help_window
  3141.     # 无效化角色指令窗口
  3142.     @actor_command_window.active = false
  3143.     @actor_command_window.visible = false
  3144.   end
  3145.   #--------------------------------------------------------------------------
  3146.   # ● 结束选择敌人
  3147.   #--------------------------------------------------------------------------
  3148.   def end_enemy_select
  3149.     # 释放敌人箭头
  3150.     @enemy_arrow.dispose
  3151.     @enemy_arrow = nil
  3152.     # 指令为 [战斗] 的情况下
  3153.     if @actor_command_window.index == 0
  3154.       # 有效化角色指令窗口
  3155.       @actor_command_window.active = true
  3156.       @actor_command_window.visible = true
  3157.       # 隐藏帮助窗口
  3158.       @help_window.visible = false
  3159.     end
  3160.   end
  3161.   #--------------------------------------------------------------------------
  3162.   # ● 开始选择角色
  3163.   #--------------------------------------------------------------------------
  3164.   def start_actor_select
  3165.     # 生成角色箭头
  3166.     @actor_arrow = Arrow_Actor.new(@spriteset.viewport2)
  3167.     @actor_arrow.index = @actor_index
  3168.     # 关联帮助窗口
  3169.     @actor_arrow.help_window = @help_window
  3170.     # 无效化角色指令窗口
  3171.     @actor_command_window.active = false
  3172.     @actor_command_window.visible = false
  3173.   end
  3174.   #--------------------------------------------------------------------------
  3175.   # ● 结束选择角色
  3176.   #--------------------------------------------------------------------------
  3177.   def end_actor_select
  3178.     # 释放角色箭头
  3179.     @actor_arrow.dispose
  3180.     @actor_arrow = nil
  3181.   end
  3182.   #--------------------------------------------------------------------------
  3183.   # ● 开始选择特技
  3184.   #--------------------------------------------------------------------------
  3185.   def start_skill_select
  3186.     # 生成特技窗口
  3187.     @skill_window = Window_Skill.new(@active_battler)
  3188.     # 关联帮助窗口
  3189.     @skill_window.help_window = @help_window
  3190.     # 无效化角色指令窗口
  3191.     @actor_command_window.active = false
  3192.     @actor_command_window.visible = false
  3193.   end
  3194.   #--------------------------------------------------------------------------
  3195.   # ● 选择特技结束
  3196.   #--------------------------------------------------------------------------
  3197.   def end_skill_select
  3198.     # 释放特技窗口
  3199.     @skill_window.dispose
  3200.     @skill_window = nil
  3201.     # 隐藏帮助窗口
  3202.     @help_window.visible = false
  3203.     # 有效化角色指令窗口
  3204.     @actor_command_window.active = true
  3205.     @actor_command_window.visible = true
  3206.   end
  3207.   #--------------------------------------------------------------------------
  3208.   # ● 开始选择物品
  3209.   #--------------------------------------------------------------------------
  3210.   def start_item_select
  3211.     # 生成物品窗口
  3212.     @item_window = Window_Item.new
  3213.     # 关联帮助窗口
  3214.     @item_window.help_window = @help_window
  3215.     # 无效化角色指令窗口
  3216.     @actor_command_window.active = false
  3217.     @actor_command_window.visible = false
  3218.   end
  3219.   #--------------------------------------------------------------------------
  3220.   # ● 结束选择物品
  3221.   #--------------------------------------------------------------------------
  3222.   def end_item_select
  3223.     # 释放物品窗口
  3224.     @item_window.dispose
  3225.     @item_window = nil
  3226.     # 隐藏帮助窗口
  3227.     @help_window.visible = false
  3228.     # 有效化角色指令窗口
  3229.     @actor_command_window.active = true
  3230.     @actor_command_window.visible = true
  3231.   end
  3232.   def escaping
  3233.        # 不能逃跑的情况下
  3234.         if $game_temp.battle_can_escape == false
  3235.           # 演奏冻结 SE
  3236.           $game_system.se_play($data_system.buzzer_se)
  3237.           return
  3238.         end
  3239.         # 演奏确定 SE
  3240.         $game_system.se_play($data_system.decision_se)
  3241.         # 逃走处理
  3242.         @actor_command_window.active = false
  3243.         @actor_command_window.visible = false
  3244.         update_phase2_escape
  3245.       end

  3246. end


  3247. module Momo_IconCommand
  3248.   # 图标名称设定
  3249.    ATTACK_ICON_NAME = "攻击" # 攻撃
  3250.   SKILL_ICON_NAME = "技能"   # 特技
  3251.   GUARD_ICON_NAME = "防御"  # 防御
  3252.   ITEM_ICON_NAME = "物品"     # 物品
  3253.   ESCAPE_ICON_NAME = "逃跑"  # 逃跑
  3254.   # X坐标修正
  3255.   X_PLUS = 30#-120
  3256.   # Y坐标修正
  3257.   Y_PLUS = -60#10
  3258.   # 选择时图标的动作
  3259.   # 0:静止 1:放大
  3260.   SELECT_TYPE = 0
  3261.   # 闪烁时光芒的颜色
  3262.   FLASH_COLOR = Color.new(255, 255, 255, 128)
  3263.   # 闪烁时间
  3264.   FLASH_DURATION = 10
  3265.   # 闪烁间隔
  3266.   FLASH_INTERVAL = 20
  3267.   # 是否写出文字的名称
  3268.   COM_NAME_DROW = true
  3269.   # 文字名称是否移动
  3270.   COM_NAME_MOVE = true
  3271.   # 文字内容
  3272.   ATTACK_NAME = "攻击"    # 攻击
  3273.   SKILL_NAME = "特技"   # 特技
  3274.   GUARD_NAME = "防御"     # 防御
  3275.   ITEM_NAME = "物品"  # 物品
  3276.   ESCAPE_NAME = "逃跑"  # 逃跑
  3277.   # 文字颜色
  3278.   COM_NAME_COLOR = Color.new(255, 255, 255, 255)
  3279.   # 文字坐标修正
  3280.   COM_NAME_X_PLUS = 0
  3281.   COM_NAME_Y_PLUS = 0
  3282. end

  3283. class Window_CommandIcon < Window_Selectable
  3284.   attr_accessor :last_index
  3285.   #--------------------------------------------------------------------------
  3286.   # ● オブジェクト初期化
  3287.   #--------------------------------------------------------------------------
  3288.   def initialize(x, y, commands)
  3289.     super(x, y, 32, 32)
  3290.     # ウィンドウスキンに空文字列を指定してウィンドウを描画しないようにする
  3291.     self.windowskin = RPG::Cache.windowskin("")
  3292.     @item_max = commands.size
  3293.     @commands = commands
  3294.     @column_max = commands.size
  3295.     @index = 0
  3296.     @last_index = nil
  3297.     @name_sprite = nil
  3298.     @sprite = []
  3299.     refresh
  3300.   end
  3301.   def dispose
  3302.     super
  3303.     for sprite in @sprite
  3304.       sprite.dispose unless sprite.nil?
  3305.     end
  3306.     @name_sprite.dispose unless @name_sprite.nil?
  3307.   end
  3308.   #--------------------------------------------------------------------------
  3309.   # ● リフレッシュ
  3310.   #--------------------------------------------------------------------------
  3311.   def refresh
  3312.     @name_sprite.dispose unless @name_sprite.nil?
  3313.     for sprite in @sprite
  3314.       sprite.dispose unless sprite.nil?
  3315.     end
  3316.     @name_sprite = nil
  3317.     draw_com_name if Momo_IconCommand::COM_NAME_DROW
  3318.     @sprite = []
  3319.     for i in 0...@item_max
  3320.       draw_item(i)
  3321.     end
  3322.   end
  3323.   #--------------------------------------------------------------------------
  3324.   # ● 項目の描画
  3325.   #--------------------------------------------------------------------------
  3326.   def draw_item(index)
  3327.     @sprite[index] = Sprite_Icon.new(nil, @commands[index])
  3328.     @sprite[index].z = self.z + 100##########################
  3329.   end
  3330.   def draw_com_name
  3331.     @name_sprite = Sprite_Comm_Name.new(nil, get_com_name)
  3332.    
  3333.   end
  3334.   
  3335.   # 更新
  3336.   def update
  3337.     super
  3338.     icon_update
  3339.     com_name_update if Momo_IconCommand::COM_NAME_DROW
  3340.     if move_index?
  3341.       @last_index = self.index
  3342.     end
  3343.   end
  3344.   # アイコンの更新
  3345.   def icon_update
  3346.     for i in [email protected]
  3347.       @sprite[i].active = (self.index == i)
  3348.       @sprite[i].x = self.x  + i * 24
  3349.       @sprite[i].y = self.y  + 0
  3350.       @sprite[i].z = (self.index == i) ? self.z + 2 : self.z + 1
  3351.       @sprite[i].visible = self.visible
  3352.       @sprite[i].update
  3353.     end
  3354.   end
  3355.   # コマンドネームの更新
  3356.   def com_name_update
  3357.     if move_index?
  3358.       @name_sprite.name = get_com_name
  3359.     end
  3360.     @name_sprite.x = self.x - 12 + Momo_IconCommand::COM_NAME_X_PLUS
  3361.     @name_sprite.y = self.y - 40 + Momo_IconCommand::COM_NAME_Y_PLUS
  3362.     @name_sprite.z = self.z + 1
  3363.     @name_sprite.active = self.active
  3364.     @name_sprite.visible = self.visible
  3365.     @name_sprite.update
  3366.   end
  3367.   def get_com_name
  3368.     make_name_set if @name_set.nil?
  3369.     name = @name_set[self.index]
  3370.     name = "" if name.nil?
  3371.     return name
  3372.   end
  3373.   def make_name_set
  3374.     @name_set = []
  3375.     @name_set[0] = Momo_IconCommand::ATTACK_NAME
  3376.     @name_set[1] = Momo_IconCommand::SKILL_NAME
  3377.     @name_set[2] = Momo_IconCommand::GUARD_NAME
  3378.     @name_set[3] = Momo_IconCommand::ITEM_NAME
  3379.     @name_set[4] = Momo_IconCommand::ESCAPE_NAME
  3380.   end
  3381.   def move_index?
  3382.     return self.index != @last_index
  3383.   end
  3384.   def need_reset
  3385.     @name_sprite.need_reset = true if Momo_IconCommand::COM_NAME_DROW
  3386.   end
  3387. end

  3388. # アイコン用スプライト
  3389. class Sprite_Icon < Sprite
  3390.   attr_accessor :active
  3391.   attr_accessor :icon_name
  3392.   #--------------------------------------------------------------------------
  3393.   # ● オブジェクト初期化
  3394.   #--------------------------------------------------------------------------
  3395.   def initialize(viewport, icon_name)
  3396.     super(viewport)
  3397.     @icon_name = icon_name
  3398.     @last_icon = @icon_name
  3399.     @count = 0
  3400.     self.bitmap = RPG::Cache.icon(@icon_name)
  3401.     self.ox = self.bitmap.width / 2
  3402.     self.oy = self.bitmap.height / 2
  3403.     @active = false
  3404.   end
  3405.   #--------------------------------------------------------------------------
  3406.   # ● 解放
  3407.   #--------------------------------------------------------------------------
  3408.   def dispose
  3409.     if self.bitmap != nil
  3410.       self.bitmap.dispose
  3411.     end
  3412.     super
  3413.   end
  3414.   #--------------------------------------------------------------------------
  3415.   # ● フレーム更新
  3416.   #--------------------------------------------------------------------------
  3417.   def update
  3418.     super
  3419.     if @icon_name != @last_icon
  3420.       @last_icon = @icon_name
  3421.       self.bitmap = RPG::Cache.icon(@icon_name)
  3422.     end
  3423.     if @active
  3424.       @count += 1
  3425.       case Momo_IconCommand::SELECT_TYPE
  3426.       when 0
  3427.         icon_flash
  3428.       when 1
  3429.         icon_zoom
  3430.       end
  3431.       @count = 0 if @count == 20
  3432.     else
  3433.       icon_reset
  3434.     end
  3435.   end
  3436.   def icon_flash
  3437.     if @count % Momo_IconCommand::FLASH_INTERVAL == 0 or @count == 1
  3438.       self.flash(Momo_IconCommand::FLASH_COLOR, Momo_IconCommand::FLASH_DURATION)
  3439.     end
  3440.   end
  3441.   def icon_zoom
  3442.     case @count
  3443.     when 1..10
  3444.       zoom = 1.0 + @count / 10.0
  3445.     when 11..20
  3446.       zoom = 2.0 - (@count - 10) / 10.0
  3447.     end
  3448.     self.zoom_x = zoom
  3449.     self.zoom_y = zoom
  3450.   end
  3451.   def icon_reset
  3452.     @count = 0
  3453.     self.zoom_x = 1.0
  3454.     self.zoom_y = 1.0
  3455.   end
  3456. end

  3457. # コマンドネーム用スプライト
  3458. class Sprite_Comm_Name < Sprite
  3459.   attr_accessor :active
  3460.   attr_accessor :name
  3461.   attr_accessor :need_reset
  3462.   #--------------------------------------------------------------------------
  3463.   # ● オブジェクト初期化
  3464.   #--------------------------------------------------------------------------
  3465.   def initialize(viewport, name)
  3466.     super(viewport)
  3467.     @name = name
  3468.     @last_name = nil
  3469.     @count = 0
  3470.     @x_plus = 0
  3471.     @opa_plus = 0
  3472.     @need_reset = false
  3473.     @active = false
  3474.     self.bitmap = Bitmap.new(160, 32)
  3475.   end
  3476.   #--------------------------------------------------------------------------
  3477.   # ● 解放
  3478.   #--------------------------------------------------------------------------
  3479.   def dispose
  3480.     if self.bitmap != nil
  3481.       self.bitmap.dispose
  3482.     end
  3483.     super
  3484.   end
  3485.   #--------------------------------------------------------------------------
  3486.   # ● フレーム更新
  3487.   #--------------------------------------------------------------------------
  3488.   def update
  3489.     super
  3490.     if @active
  3491.       if need_reset?
  3492.         @need_reset = false
  3493.         @last_name = @name
  3494.         text_reset
  3495.       end
  3496.       move_text if Momo_IconCommand::COM_NAME_MOVE
  3497.     end
  3498.   end
  3499.   def move_text
  3500.     @count += 1
  3501.     @x_plus = [@count * 8, 80].min
  3502.     self.x = self.x - 80 + @x_plus
  3503.     self.opacity = @count * 25
  3504.   end
  3505.   def text_reset
  3506.     @count = 0
  3507.     @x_plus = 0
  3508.     self.bitmap.clear
  3509.     self.bitmap.font.color = Momo_IconCommand::COM_NAME_COLOR
  3510.       if @name == Momo_IconCommand::ESCAPE_NAME and $game_temp.battle_can_escape == false
  3511.        self.bitmap.font.color = Color.new(192, 192, 192, 255)
  3512.      else
  3513.        self.bitmap.font.color = Momo_IconCommand::COM_NAME_COLOR
  3514.     end


  3515.     self.bitmap.draw_text(0, 0, 160, 32, @name)
  3516.   end
  3517.   def need_reset?
  3518.     return (@name != @last_name or @need_reset)
  3519.   end
  3520. end
  3521. class Scene_Battle
  3522.   #--------------------------------------------------------------------------
  3523.   # ● プレバトルフェーズ開始
  3524.   #--------------------------------------------------------------------------
  3525.   alias scene_battle_icon_command_start_phase1 start_phase1
  3526.   def start_phase1
  3527.     com1 = Momo_IconCommand::ATTACK_ICON_NAME
  3528.     com2 = Momo_IconCommand::SKILL_ICON_NAME
  3529.     com3 = Momo_IconCommand::GUARD_ICON_NAME
  3530.     com4 = Momo_IconCommand::ITEM_ICON_NAME
  3531.     com5 = Momo_IconCommand::ESCAPE_ICON_NAME
  3532.     @actor_command_window = Window_CommandIcon.new(0, 0, [com1, com2, com3, com4, com5])
  3533.     @actor_command_window.y = 160
  3534.     @actor_command_window.back_opacity = 160
  3535.     @actor_command_window.active = false
  3536.     @actor_command_window.visible = false
  3537.     @actor_command_window.update
  3538.     scene_battle_icon_command_start_phase1
  3539.   end
  3540.   #--------------------------------------------------------------------------
  3541.   # ● アクターコマンドウィンドウのセットアップ
  3542.   #--------------------------------------------------------------------------
  3543.   alias scene_battle_icon_command_phase3_setup_command_window phase3_setup_command_window
  3544.   def phase3_setup_command_window
  3545.     scene_battle_icon_command_phase3_setup_command_window
  3546.     # アクターコマンドウィンドウの位置を設定
  3547.     @actor_command_window.x = command_window_actor_x(@actor_index)
  3548.     @actor_command_window.y = command_window_actor_y(@actor_index)
  3549.     @actor_command_window.need_reset
  3550.   end
  3551.   def command_window_actor_x(index)
  3552.     #$game_party.actors[index].screen_x + Momo_IconCommand::X_PLUS
  3553.     index * 160 + Momo_IconCommand::X_PLUS
  3554.   end
  3555.   def command_window_actor_y(index)
  3556.     #$game_party.actors[index].screen_y + Momo_IconCommand::Y_PLUS
  3557.     390 + Momo_IconCommand::Y_PLUS
  3558.   end
  3559. end

  3560. #==============================================================================
  3561. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3562. #==============================================================================

  3563. $data_system_level_up_se = "" #升级时的音效设置
  3564. $data_system_level_up_me = "Audio/ME/007-Fanfare01" # 升级时播放的ME
  3565. $data_system_skilllearn_se = "Audio/SE/106-Heal02" # 学会特技时播放的声效。

  3566. #=============================================================
  3567. # ■ Window_LevelUpWindow
  3568. #-------------------------------------------------------------------
  3569. #  バトル終了時、レベルアップした場合にステータスを表示するウィンドウです。
  3570. #=============================================================
  3571. class Window_LevelUpWindow < Window_Base
  3572.   #---------------------------------------------------------
  3573.   # ● オブジェクト初期化
  3574.   #------------------------------------------------------
  3575.   def initialize(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
  3576.     super(0, 128, 160, 192)
  3577.     self.z = 999
  3578.     self.contents = Bitmap.new(width - 32, height - 32)
  3579.     self.visible = false
  3580.     self.back_opacity = 160
  3581.     refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
  3582.   end
  3583.   #-----------------------------------------------------------
  3584.   # ● リフレッシュ
  3585.   #---------------------------------------------------------
  3586.   def refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
  3587.     self.contents.clear
  3588.     self.contents.font.color = system_color
  3589.     self.contents.font.size = 14
  3590.     self.contents.draw_text( 0, 0, 160, 24, "等级上升")
  3591.     self.contents.font.size = 18
  3592.     self.contents.draw_text( 0, 28, 160, 24, $data_system.words.hp)
  3593.     self.contents.draw_text( 0, 50, 160, 24, $data_system.words.sp)
  3594.     self.contents.font.size = 14
  3595.     self.contents.draw_text( 0, 72, 80, 24, $data_system.words.str)
  3596.     self.contents.draw_text( 0, 94, 80, 24, $data_system.words.dex)
  3597.     self.contents.draw_text( 0, 116, 80, 24, $data_system.words.agi)
  3598.     self.contents.draw_text( 0, 138, 80, 24, $data_system.words.int)
  3599.     self.contents.draw_text(92, 0, 128, 24, "→")
  3600.     self.contents.draw_text(76, 28, 128, 24, "=")
  3601.     self.contents.draw_text(76, 50, 128, 24, "=")
  3602.     self.contents.draw_text(76, 72, 128, 24, "=")
  3603.     self.contents.draw_text(76, 94, 128, 24, "=")
  3604.     self.contents.draw_text(76, 116, 128, 24, "=")
  3605.     self.contents.draw_text(76, 138, 128, 24, "=")
  3606.     self.contents.font.color = normal_color
  3607.     self.contents.draw_text( 0, 0, 88, 24, last_lv.to_s, 2)
  3608.     self.contents.draw_text( 0, 28, 72, 24, "+" + up_hp.to_s, 2)
  3609.     self.contents.draw_text( 0, 50, 72, 24, "+" + up_sp.to_s, 2)
  3610.     self.contents.draw_text( 0, 72, 72, 24, "+" + up_str.to_s, 2)
  3611.     self.contents.draw_text( 0, 94, 72, 24, "+" + up_dex.to_s, 2)
  3612.     self.contents.draw_text( 0, 116, 72, 24, "+" + up_agi.to_s, 2)
  3613.     self.contents.draw_text( 0, 138, 72, 24, "+" + up_int.to_s, 2)
  3614.     self.contents.font.size = 20
  3615.     self.contents.draw_text( 0, 0, 128, 24, actor.level.to_s, 2)
  3616.     self.contents.draw_text( 0, 26, 128, 24, actor.maxhp.to_s, 2)
  3617.     self.contents.draw_text( 0, 48, 128, 24, actor.maxsp.to_s, 2)
  3618.     self.contents.draw_text( 0, 70, 128, 24, actor.str.to_s, 2)
  3619.     self.contents.draw_text( 0, 92, 128, 24, actor.dex.to_s, 2)
  3620.     self.contents.draw_text( 0, 114, 128, 24, actor.agi.to_s, 2)
  3621.     self.contents.draw_text( 0, 136, 128, 24, actor.int.to_s, 2)
  3622.   end
  3623. end
  3624. #===========================================================
  3625. # ■ Window_SkillLearning
  3626. #------------------------------------------------------------------------------
  3627. #  レベルアップ時などにスキルを習得した場合にそれを表示するウィンドウです。
  3628. #=============================================================
  3629. class Window_SkillLearning < Window_Base
  3630.   #-------------------------------------------------------------
  3631.   # ● 公開インスタンス変数
  3632.   #-----------------------------------------------------------
  3633.   attr_reader :learned # スキルを習得したかどうか
  3634.   #----------------------------------------------------------
  3635.   # ● オブジェクト初期化
  3636.   #----------------------------------------------------------
  3637.   def initialize(class_id, last_lv, now_lv)
  3638.     super(160, 64, 320, 64)
  3639.     self.z = 999
  3640.     self.contents = Bitmap.new(width - 32, height - 28) # わざと▽を表示
  3641.     self.visible = false
  3642.     self.back_opacity = 160
  3643.     @learned = false
  3644.     refresh(class_id, last_lv, now_lv)
  3645.   end
  3646.   #------------------------------------------------------------
  3647.   # ● リフレッシュ
  3648.   #-------------------------------------------------------
  3649.   def refresh(class_id, last_lv, now_lv)
  3650.     for i in 0...$data_classes[class_id].learnings.size
  3651.       learn_lv = $data_classes[class_id].learnings[i].level
  3652.       # 今回のレベルアップ範囲で習得するスキルの場合
  3653.       if learn_lv > last_lv and learn_lv <= now_lv
  3654.         @learned = true
  3655.         # SEの再生
  3656.         if $data_system_skilllearn_se != ""
  3657.           Audio.se_play($data_system_skilllearn_se)
  3658.         end
  3659.         # 各描写
  3660.         skill_name = $data_skills[$data_classes[class_id].learnings[i].skill_id].name
  3661.         self.contents.clear
  3662.         self.contents.font.color = text_color(0)
  3663.         self.contents.draw_text(0,0,448,32, "学会特技:"+skill_name)
  3664.         self.contents.font.color = text_color(6)
  3665.         self.contents.draw_text(0,0,448,32, "          "+skill_name)
  3666.         self.contents.font.color = text_color(0)
  3667.         self.visible = true
  3668.         # メインループ
  3669.         loop do
  3670.           # ゲーム画面を更新
  3671.           Graphics.update
  3672.           # 入力情報を更新
  3673.           Input.update
  3674.           # フレーム更新
  3675.           update
  3676.           # 画面が切り替わったらループを中断
  3677.           if @learned == false
  3678.             break
  3679.           end
  3680.         end
  3681.       # メインループここまで
  3682.       end
  3683.     end
  3684.   end
  3685.   #-----------------------------------------------------------
  3686.   # ● フレーム更新
  3687.   #------------------------------------------------------------
  3688.   def update
  3689.     # C ボタンが押された場合
  3690.     if Input.trigger?(Input::C)
  3691.       @learned = false
  3692.       self.visible = false
  3693.     end
  3694.   end
  3695. end
  3696. #==================================================================
  3697. # ■ Window_BattleStatus
  3698. #==================================================================
  3699. class Window_BattleStatus < Window_Base
  3700.   #---------------------------------------------------------
  3701.   # ● 追加?公開インスタンス変数
  3702.   #-------------------------------------------------------
  3703.   attr_accessor :level_up_flags # LEVEL UP!表示
  3704. end
  3705. #===============================================================
  3706. # ■ Game_Battler
  3707. #===============================================================
  3708. class Game_Battler
  3709.   #--------------------------------------------------------------
  3710.   # ● 追加?公開インスタンス変数
  3711.   #----------------------------------------------------------
  3712.   attr_accessor :exp_gain_ban # EXP取得一時禁止
  3713.   #------------------------------------------------------
  3714.   # ● オブジェクト初期化
  3715.   #-----------------------------------------------------
  3716.   alias xrxs_bp10_initialize initialize
  3717.   def initialize
  3718.     @exp_gain_ban = false
  3719.     xrxs_bp10_initialize
  3720.   end
  3721.   #-------------------------------------------------------
  3722.   # ● ステート [EXP を獲得できない] 判定
  3723.   #-----------------------------------------------------
  3724.   alias xrxs_bp10_cant_get_exp? cant_get_exp?
  3725.   def cant_get_exp?
  3726.     if @exp_gain_ban == true
  3727.       return true
  3728.     else
  3729.       return xrxs_bp10_cant_get_exp?
  3730.     end
  3731.   end
  3732. end
  3733. #==============================================================
  3734. # ■ Scene_Battle
  3735. #==============================================================
  3736. class Scene_Battle
  3737.   #--------------------------------------------------
  3738.   # ● アフターバトルフェーズ開始
  3739.   #--------------------------------------------------
  3740.   alias xrxs_bp10_start_phase5 start_phase5
  3741.   def start_phase5
  3742.     # EXP 獲得禁止
  3743.     for i in 0...$game_party.actors.size
  3744.       $game_party.actors[i].exp_gain_ban = true
  3745.     end
  3746.     xrxs_bp10_start_phase5
  3747.     # EXP 獲得禁止の解除
  3748.     for i in 0...$game_party.actors.size
  3749.       $game_party.actors[i].exp_gain_ban = false
  3750.     end
  3751.     # EXPを初期化
  3752.     @exp_gained = 0
  3753.     for enemy in $game_troop.enemies
  3754.       # 獲得 EXPを追加 # エネミーが隠れ状態でない場合
  3755.       @exp_gained += enemy.exp if not enemy.hidden
  3756.     end
  3757.     # 設定
  3758.     @phase5_step = 1
  3759.     @exp_gain_actor = -1
  3760.     # リザルトウィンドウを表示
  3761.     @result_window.visible = true
  3762.   end
  3763.   #----------------------------------------------------------
  3764.   # ● フレーム更新 (アフターバトルフェーズ)
  3765.   #--------------------------------------------------------
  3766.   #alias xrxs_bp10_update_phase5 update_phase5
  3767.   def update_phase5
  3768.     case @phase5_step
  3769.     when 1
  3770.       update_phase5_step1
  3771.     else
  3772.     # ウェイトカウントが 0 より大きい場合
  3773.       if @phase5_wait_count > 0
  3774.         # ウェイトカウントを減らす
  3775.         @phase5_wait_count -= 1
  3776.         # ウェイトカウントが 0 になった場合
  3777.         if @phase5_wait_count == 0
  3778.           # リザルトウィンドウを表示
  3779.           #@result_window.visible = true
  3780.           # メインフェーズフラグをクリア
  3781.           $game_temp.battle_main_phase = false
  3782.           # ステータスウィンドウをリフレッシュ
  3783.           @status_window.refresh
  3784.         end
  3785.       return
  3786.       end
  3787.       # C ボタンが押された場合
  3788.       if Input.trigger?(Input::C)
  3789.         # バトル終了
  3790.         battle_end(0)
  3791.       end
  3792.     # レベルアップしている場合は強制バトル終了
  3793.     battle_end(0) if @levelup_window != nil and @phase5_wait_count <= 0
  3794.     end
  3795.   end
  3796.   #-----------------------------------------------------------
  3797.   # ● フレーム更新 (アフターバトルフェーズ 1 : レベルアップ)
  3798.   #-----------------------------------------------------------
  3799.   def update_phase5_step1
  3800.     # C ボタンが押された場合
  3801.     if Input.trigger?(Input::C)
  3802.       # ウィンドウを閉じて次のアクターへ
  3803.       @levelup_window.visible = false if @levelup_window != nil
  3804.       @status_window.level_up_flags[@exp_gain_actor] = false
  3805.       phase5_next_levelup
  3806.     end
  3807.   end
  3808.   #---------------------------------------------------------
  3809.   # ● 次のアクターのレベルアップ表示へ
  3810.   #---------------------------------------------------------
  3811.   def phase5_next_levelup
  3812.     begin
  3813.       # 次のアクターへ
  3814.       @exp_gain_actor += 1
  3815.       # 最後のアクターの場合
  3816.       if @exp_gain_actor >= $game_party.actors.size
  3817.         # アフターバトルフェーズ開始
  3818.         @phase5_step = 0
  3819.         return
  3820.       end
  3821.       actor = $game_party.actors[@exp_gain_actor]
  3822.       if actor.cant_get_exp? == false
  3823.         # 現在の能力値を保持
  3824.         last_level = actor.level
  3825.         last_maxhp = actor.maxhp
  3826.         last_maxsp = actor.maxsp
  3827.         last_str = actor.str
  3828.         last_dex = actor.dex
  3829.         last_agi = actor.agi
  3830.         last_int = actor.int
  3831.         # 経験値取得の決定的瞬間(謎
  3832.         actor.exp += @exp_gained
  3833.         # 判定
  3834.         if actor.level > last_level
  3835.           # レベルアップした場合
  3836.           @status_window.level_up(@exp_gain_actor)
  3837.           # リザルトウィンドウを消す
  3838.           @result_window.visible = false
  3839.           # SEの再生
  3840.           if $data_system_level_up_se != ""
  3841.             Audio.se_play($data_system_level_up_se)
  3842.           end
  3843.           # MEの再生
  3844.           if $data_system_level_up_me != ""
  3845.             Audio.me_stop
  3846.             Audio.me_play($data_system_level_up_me)
  3847.           end
  3848.           # LEVEL-UPウィンドウの設定
  3849.           @levelup_window = Window_LevelUpWindow.new(actor, last_level,
  3850.           actor.maxhp - last_maxhp, actor.maxsp - last_maxsp, actor.str - last_str,
  3851.           actor.dex - last_dex, actor.agi - last_agi, actor.int - last_int)
  3852.           @levelup_window.x = 160 * @exp_gain_actor
  3853.           @levelup_window.visible = true
  3854.           # ステータスウィンドウをリフレッシュ
  3855.           @status_window.refresh
  3856.           # スキル習得ウィンドウの設定
  3857.           @skilllearning_window = Window_SkillLearning.new(actor.class_id, last_level, actor.level)
  3858.           # ウェイトカウントを設定
  3859.           @phase5_wait_count = 40
  3860.           @phase5_step = 1
  3861.           return
  3862.         end
  3863.       end
  3864.     end until false
  3865.   end
  3866. end


  3867. #=============================================================
  3868. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3869. #=============================================================
复制代码
谢谢大家了。。。

Lv2.观梦者

梦石
0
星屑
374
在线时间
61 小时
注册时间
2009-9-4
帖子
32
2
 楼主| 发表于 2013-2-9 21:04:29 | 只看该作者
我修改的地方在 776-779 和 876-879 其他都没动。。。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
568 小时
注册时间
2012-9-7
帖子
611
3
发表于 2013-2-10 10:27:27 | 只看该作者
common_event = $data_common_events[1]
$game_system.battle_interpreter.setup(common_event.list, 0)
战斗中调用公共事件应该是这么写的,LZ写的是地图上调用公共事件的句子

点评

不是的,没用新界面的时候,我原先那样修改是有作用的,是不是这脚本里还有哪里要修改?  发表于 2013-2-10 18:29

评分

参与人数 1星屑 +10 收起 理由
hcm + 10 感谢回答

查看全部评分

FTM正式版已经发布,点击图片开启传送门
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-12-29 20:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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