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

Project1

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

[已经解决] 新人求助,横版战斗怎么才能让敌人也显示行走图?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
170
在线时间
2 小时
注册时间
2013-7-7
帖子
1
跳转到指定楼层
1
发表于 2013-7-13 09:20:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我现在这个脚本应该有让敌人显示行走图的功能,但是只有编号为1的敌角色能显示,从2号开始就都不能了,求解决办法……
  1. #==============================================================================
  2. # ■ Sprite_Battler Ver2.6
  3. #------------------------------------------------------------------------------
  4. #  角色用于现实的战斗动作。
  5. #==============================================================================
  6. class Sprite_Battler < Sprite_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 初期化
  9.   #--------------------------------------------------------------------------
  10.   def initialize(viewport, battler = nil)
  11.     super(viewport)
  12.     [url=home.php?mod=space&uid=133701]@battler[/url] = battler
  13.     @battler_visible = false
  14.     @effect_type = 0                   # 效果的种类
  15.     @effect_duration = 0               # 效果的残留时间
  16.     @move_x = 0                        # 已变化的X坐标的累计
  17.     @move_y = 0                        # 已变化的Y坐标的累计
  18.     @move_z = 0                        # 已变化的Z坐标的累计
  19.     @distanse_x = 0                    # X坐标的移动距离
  20.     @distanse_y = 0                    # Y坐标的移动距离
  21.     @moving_x = 0                      #1单位所相当的X坐标移动距离
  22.     @moving_y = 0                      #1单位所相当的Y坐标移动距离
  23.     @move_speed_x = 0                  # X坐标的移动速度
  24.     @move_speed_y = 0                  # Y坐标的移动速度
  25.     @move_speed_plus_x = 0             # X坐标在加减速时的补充移动速度
  26.     @move_speed_plus_y = 0             # Y坐标在加减速时的补充移动速度
  27.     @move_boost_x = 0                  # X坐标加速度
  28.     @move_boost_y = 0                  # Y坐标加速度
  29.     @jump_time = 0                     # 跳跃时间
  30.     @jump_time_plus = 0                # 跳跃时间补充
  31.     @jump_up = 0                       # 跳跃上升
  32.     @jump_down = 0                     # 跳跃下降
  33.     @jump_size = 0                     # 跳跃高度
  34.     @float_time = 0                    # 漂浮时间
  35.     @float_up = 0                      # 1单位所相当于的浮遊高度
  36.     @jump_plus = 0                     # 根据跳跃补充影位置
  37.     @angle = 0                         # 旋转角度
  38.     @angling = 0                       # 1单位所相当于的旋转角度
  39.     @angle_time = 0                    # 旋转时间
  40.     @angle_reset = 0                   # 是否初始化角度
  41.     @zoom_x = 0                        # 横向放大率
  42.     @zoom_y = 0                        # 纵向放大率
  43.     @zooming_x = 0                     # 1单位所相当于的横向放大率
  44.     @zooming_y = 0                     # 1单位所相当于的纵向放大率
  45.     @zoom_time = 0                     # 放大时间
  46.     @zoom_reset = 0                    # 是否初始化放大
  47.     @target_battler = []               # 目标角色情报
  48.     @now_targets = []                  # 目标角色记忆
  49.     @pattern = 0                       # 横图片位置(更新位置)
  50.     @pattern_back = false              # 循环标志
  51.     @wait = 0                          # 到下个动作的等待时间
  52.     @unloop_wait = 0                   # 非循环系动画完毕时的等待时间
  53.     @action = []                       # 行动
  54.     @anime_kind = 0                    # 纵图片位置(动画种类位置)
  55.     @anime_speed = 0                   # 图片更新速度
  56.     @frame = 0                         # 被消费图片更新时间
  57.     @anime_loop = 0                    # 循环方式
  58.     @anime_end = false                 # 角色的动画是否完毕
  59.     @anime_freeze = false              # 是否是固定动画
  60.     @anime_freeze_kind = false         # 固定图案位置
  61.     @anime_moving = false              # 是否在飞出动画中
  62.     @base_width = N01::ANIME_PATTERN   # 图片的横分割数
  63.     @base_height = N01::ANIME_KIND     # 图片的纵分割数
  64.     @width = 0                         # 横矩形
  65.     @height = 0                        # 纵矩形
  66.     @picture_time = 0                  # 图片显示时间
  67.     @individual_targets = []           # 单独处理的保持目标
  68.     @balloon_duration = 65             # 飞出动画时间
  69.     @reverse = false                   # 动画的反向再生标志
  70.     # 角色不存在的时候将中断处理
  71.     return @battler_visible = false if @battler == nil
  72.     # 角色是主人公时、或者敌方动画为NO时
  73.     @anime_flug = true if @battler.actor?
  74.     @anime_flug = true if [email protected]? && @battler.anime_on
  75.     # 角色作成
  76.     make_battler
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● 角色作成
  80.   #--------------------------------------------------------------------------
  81.   def make_battler
  82.     # 初期配置的取得
  83.     @battler.base_position
  84.     # 色相通过角色认别
  85.     @battler_hue = @battler.battler_hue
  86.     # 角色是主人公时、或者敌方动画为NO时
  87.     if @anime_flug
  88.       # 准备武器
  89.       @weapon_R = Sprite_Weapon.new(viewport,@battler)
  90.       # 取得我方人物名、敌人角色名
  91.       @battler_name = @battler.character_name if @battler.actor?
  92.       @battler_name = @battler.battler_name unless @battler.actor?
  93.       # 敌方反转为NO的时候 画像被反转
  94.       self.mirror = true if [email protected]? && @battler.action_mirror
  95.       # 是不是利用行图片图来改变转送前的矩形尺寸的认识处
  96.       self.bitmap = Cache.character(@battler_name) if N01::WALK_ANIME
  97.       self.bitmap = Cache.character(@battler_name + "_1") unless N01::WALK_ANIME
  98.       # 获取转送前的矩形
  99.       @width = self.bitmap.width / @base_width
  100.       @height = self.bitmap.height / @base_height
  101.       # 矩形设定
  102.       @sx = @pattern * @width
  103.       @sy = @anime_kind * @height
  104.       # 角色本体的描绘
  105.       self.src_rect.set(@sx, @sy, @width, @height)
  106.     # 不作动画的角色时
  107.     else
  108.       # bitmap的获取、设定
  109.       @battler_name = @battler.battler_name
  110.       self.bitmap = Cache.battler(@battler_name, @battler_hue)
  111.       @width = bitmap.width
  112.       @height = bitmap.height
  113.     end
  114.     # 偷袭时画像反转
  115.     self.mirror = false if self.mirror && $back_attack && N01::BACK_ATTACK
  116.     self.mirror = true if $back_attack && !self.mirror && N01::BACK_ATTACK
  117.     # 位置初期化
  118.     @battler.reset_coordinate
  119.     # 决定原点
  120.     self.ox = @width / 2
  121.     self.oy = @height * 2 / 3
  122.     # 设定偷袭时的坐标
  123.     update_move
  124.     # 准备飞出动画的精灵
  125.     @move_anime = Sprite_MoveAnime.new(viewport,battler)
  126.     # 准备图片用精灵
  127.     @picture = Sprite.new
  128.     # 准备影子精灵
  129.     make_shadow if N01::SHADOW
  130.     # 作成伤害精灵
  131.     @damage = Sprite_Damage.new(viewport,battler)
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● 影作成
  135.   #--------------------------------------------------------------------------
  136.   def make_shadow
  137.     @shadow.dispose if @shadow != nil
  138.     @battler_hue = @battler.battler_hue
  139.     @shadow = Sprite.new(viewport)
  140.     @shadow.z = 200
  141.     @shadow.visible = false
  142.     # 准备角色的影子精灵
  143.     @shadow.bitmap = Cache.character(@battler.shadow)
  144.     @shadow_height = @shadow.bitmap.height
  145.     # 影位置的稍微调整
  146.     @shadow_plus_x = @battler.shadow_plus[0] - @width / 2
  147.     @shadow_plus_y = @battler.shadow_plus[1]
  148.     # 配合角色画像的大小使用影画像
  149.     @shadow.zoom_x = @width * 1.0 / @shadow.bitmap.width
  150.     # 更新
  151.     update_shadow
  152.     # fade中影子就像没有关联一样放置
  153.     @skip_shadow = true
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ● 解放
  157.   #--------------------------------------------------------------------------
  158.   def dispose
  159.     self.bitmap.dispose if self.bitmap != nil
  160.     @weapon_R.dispose if @weapon_R != nil
  161.     @move_anime.dispose if @move_anime != nil
  162.     @picture.dispose if @picture != nil
  163.     @shadow.dispose if @shadow != nil
  164.     @damage.dispose if @damage != nil
  165.     @balloon.dispose if @balloon != nil
  166.     mirage_off
  167.     super
  168.   end  
  169.   #--------------------------------------------------------------------------
  170.   # ● 伤害动作  action = [动画ID,反转标志,反方向许可]
  171.   #--------------------------------------------------------------------------
  172.   def damage_action(action)
  173.     damage = @battler.hp_damage
  174.     damage = @battler.mp_damage if @battler.mp_damage != 0
  175.     # 如果HP和MP两个同时做出伤害
  176.     if @battler.hp_damage != 0 && @battler.mp_damage != 0
  177.       @battler.double_damage = true
  178.       damage = @battler.hp_damage
  179.     end  
  180.     # 吸收攻击使HP为0的处理
  181.     if action[0] == "absorb"
  182.       absorb = true
  183.       action[0] = nil
  184.     end
  185.     # 只有在命中时动画才被执行
  186.     unless @battler.evaded or @battler.missed or action[0] == nil
  187.       @battler.animation_id = action[0]
  188.       @battler.animation_mirror = action[1]
  189.     end
  190.     # 执行伤害动画
  191.     start_action(@battler.damage_hit) if damage > 0 && action[2]
  192.     # 攻击没有命中时执行回避动画
  193.     if @battler.evaded or @battler.missed
  194.       start_action(@battler.evasion) if action[2]
  195.       Sound.play_evasion
  196.     end
  197.     @damage.damage_pop unless absorb or action[3] != nil
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● 伤害数值POP
  201.   #--------------------------------------------------------------------------
  202.   def damage_pop(damage)
  203.     @damage.damage_pop(damage)
  204.   end  
  205.   #--------------------------------------------------------------------------
  206.   # ● 战斗开始行动
  207.   #--------------------------------------------------------------------------
  208.   def first_action
  209.     # 检查能否行动、只有在不能的情况下那个状态的动作开始
  210.     action = @battler.first_action unless @battler.restriction == 4
  211.     action = $data_states[@battler.state_id].base_action if @battler.states[0] != nil && @battler.restriction == 4
  212.     start_action(action)
  213.     @skip_shadow = false
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ● 动作开始
  217.   #--------------------------------------------------------------------------
  218.   def start_action(kind)
  219.     # 初期化各种动作
  220.     reset
  221.     #记录现在取得的待机动作
  222.     stand_by
  223.     # 决定新的动作内容
  224.     @action = N01::ACTION[kind].dup
  225.     # 从行动配列的前头开始移动
  226.     active = @action.shift
  227.     # 自动完毕
  228.     @action.push("完毕")
  229.     # 确定现在的动作
  230.     @active_action = N01::ANIME[active]
  231.     # 等待设定
  232.     @wait = active.to_i if @active_action == nil
  233.     # 单独动作开始
  234.     action
  235.   end
  236.   #--------------------------------------------------------------------------
  237.   # ● 强制单独动作开始
  238.   #--------------------------------------------------------------------------
  239.   def start_one_action(kind,back)
  240.     # 初期化各种动作
  241.     reset
  242.     # 记录现在取得的待机动作
  243.     stand_by
  244.     # 设置坐标初始化动作
  245.     @action = [back]
  246.     # 自动完毕
  247.     @action.push("完毕")
  248.     # 确定现在的动作
  249.     @active_action = N01::ANIME[kind]
  250.     # 单独动作开始
  251.     action
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   # ● 到下一个动作
  255.   #--------------------------------------------------------------------------
  256.   def next_action
  257.     # 等待中时取消
  258.     return @wait -= 1 if @wait > 0
  259.     # 或者全部图片动画没有被完成时取消
  260.     return if @anime_end == false
  261.     # 最后的图片显示等待
  262.     return @unloop_wait -= 1 if @unloop_wait > 0
  263.     # 从行动配列的前头开始移动
  264.     active = @action.shift
  265.     # 确定现在的动作
  266.     @active_action = N01::ANIME[active]
  267.     # 等待设定
  268.     @wait = active.to_i if @active_action == nil
  269.     # 单独动作开始
  270.     action
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ● 待机动作
  274.   #--------------------------------------------------------------------------
  275.   def stand_by
  276.     # 到通常待机
  277.     @repeat_action = @battler.normal
  278.     # HP为1/4时显示危急表情
  279.     @repeat_action = @battler.pinch if @battler.hp <= @battler.maxhp / 4
  280.     # 防御中
  281.     @repeat_action = @battler.defence if @battler.guarding?
  282.     # 如果什么状态都没有时完毕
  283.     return if @battler.state_id == nil
  284.     for state in @battler.states.reverse
  285.       # 动作禁止的状态时跳过处理
  286.       next if state.extension.include?("禁止状态动作")
  287.       # 敌方被动作禁止状态时跳过处理
  288.       next if @battler.is_a?(Game_Enemy) && state.extension.include?("敌方除外")
  289.       # 状态的表情
  290.       @repeat_action = state.base_action
  291.     end
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ● 待机动作的插入
  295.   #--------------------------------------------------------------------------
  296.   def push_stand_by
  297.     action = @battler.normal
  298.     action = @battler.pinch if @battler.hp <= @battler.maxhp / 4
  299.     action = @battler.defence if @battler.guarding?
  300.     for state in @battler.states.reverse
  301.       # 动作禁止的状态时跳过处理
  302.       next if state.extension.include?("禁止状态动作")
  303.       # 敌方被动作禁止状态时跳过处理
  304.       next if @battler.is_a?(Game_Enemy) && state.extension.include?("敌方除外")
  305.       # 状态的表情
  306.       action = state.base_action
  307.     end
  308.     @repeat_action = action
  309.     # 插入
  310.     @action.delete("完毕")
  311.     act = N01::ACTION[action].dup
  312.     for i in 0...act.size
  313.       @action.push(act[i])
  314.     end  
  315.     @action.push("完毕")
  316.     @anime_end = true
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● 各种变化的初期化
  320.   #--------------------------------------------------------------------------
  321.   def reset
  322.     self.zoom_x = self.zoom_y = 1
  323.     self.oy = @height * 2 / 3
  324.     @angle = self.angle = 0
  325.     @anime_end = true
  326.     @non_repeat = false
  327.     @anime_freeze = false
  328.     @unloop_wait = 0
  329.   end  
  330.   #--------------------------------------------------------------------------
  331.   # ● 跳跃的初期化
  332.   #--------------------------------------------------------------------------
  333.   def jump_reset
  334.     @battler.jump = @jump_time = @jump_time_plus = @jump_up = @jump_down = 0
  335.     @jump_size = @jump_plus = @float_time = @float_up = 0
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● 受取目标情报
  339.   #--------------------------------------------------------------------------
  340.   def get_target(target)
  341.     # 单独处理中是中止(全区域中自身被卷入时目标情报是不是正常的样子)
  342.     return if @battler.individual
  343.     @target_battler = target
  344.   end
  345.   #--------------------------------------------------------------------------
  346.   # ● 动作情报在角色中收藏
  347.   #--------------------------------------------------------------------------
  348.   def send_action(action)
  349.     @battler.play = 0
  350.     @battler.play = action if @battler.active
  351.   end
  352.   #--------------------------------------------------------------------------
  353.   # ● 角色追加
  354.   #--------------------------------------------------------------------------
  355.   def battler_join
  356.     if @battler.exist? && !@battler_visible
  357.       # 从战斗不能的復活时的处理被跳过
  358.       if @battler.revival && @anime_flug
  359.         return @battler.revival = false
  360.       elsif @battler.revival && !@anime_flug
  361.         @battler.revival = false
  362.         self.visible = true
  363.         return
  364.       end  
  365.       @anime_flug = true if @battler.actor?
  366.       @anime_flug = true if [email protected]? && @battler.anime_on
  367.       make_battler
  368.       @damage = Sprite_Damage.new(viewport,battler)
  369.       @join = true
  370.       first_action
  371.     end
  372.   end
  373.   #--------------------------------------------------------------------------
  374.   # ● 图片更新 ※再定义
  375.   #--------------------------------------------------------------------------
  376.   def update
  377.     super
  378.     # 角色不存在时跳过
  379.     return self.bitmap = nil if @battler == nil
  380.     # 追加角色
  381.     battler_join
  382.     # 到下一个动作
  383.     next_action
  384.     # 动画图像更新
  385.     update_anime_pattern
  386.     # 目标更新
  387.     update_target
  388.     # 强制动作更新
  389.     update_force_action
  390.     # 坐标更新
  391.     update_move
  392.     # 影更新
  393.     update_shadow if @shadow != nil
  394.     # 武器更新
  395.     @weapon_R.update if @weapon_action
  396.     # 漂浮更新
  397.     update_float if @float_time > 0
  398.     # 旋转更新
  399.     update_angle if @angle_time > 0
  400.     # 放大缩小更新
  401.     update_zoom if @zoom_time > 0
  402.     # 残像更新
  403.     update_mirage if @mirage_flug
  404.     # 图片更新
  405.     update_picture if @picture_time > 0
  406.     # 飞出动画更新
  407.     update_move_anime if @anime_moving
  408.     # 飞出动画更新(图片动画)
  409.     update_balloon if @balloon_duration <= 64
  410.     # 伤害精灵更新
  411.     @damage.update if @damage != nil
  412.     setup_new_effect
  413.     update_effect
  414.     update_battler_bitmap
  415.   end
  416.   #--------------------------------------------------------------------------
  417.   # ● 动画图像更新
  418.   #--------------------------------------------------------------------------
  419.   def update_anime_pattern
  420.     # 更新时间在到之前跳过
  421.     return @frame -= 1 if @frame != 0
  422.     # 只有在必要的时候更新武器动画
  423.     @weapon_R.action if @weapon_action && @weapon_R != nil
  424.     # 动画到最后是检查是否是循环
  425.     if @pattern_back
  426.       # 往返循环
  427.       if @anime_loop == 0
  428.         # 反向再生
  429.         if @reverse
  430.           @pattern += 1
  431.           if @pattern == @base_width - 1
  432.             @pattern_back = false
  433.             @anime_end = true
  434.           end
  435.         # 通常再生
  436.         else  
  437.           @pattern -= 1
  438.           if @pattern == 0
  439.             @pattern_back = false
  440.             @anime_end = true
  441.           end  
  442.         end  
  443.       # 单程或者是不循环时
  444.       else
  445.         @anime_end = true
  446.         if @anime_loop == 1
  447.           @pattern = 0 if !@reverse
  448.           @pattern = @base_width - 1 if @reverse
  449.           @pattern_back = false
  450.         end  
  451.       end  
  452.     # 推进动画   
  453.     else
  454.       if @reverse
  455.         @pattern -= 1
  456.         @pattern_back = true if @pattern == 0
  457.       else  
  458.         @pattern += 1
  459.         @pattern_back = true if @pattern == @base_width - 1
  460.       end  
  461.     end
  462.     # 初期化更新时间
  463.     @frame = @anime_speed
  464.     # 动画固定时,固定横矩形
  465.     return if @anime_freeze
  466.     # 设定转送处的矩形
  467.     return unless @anime_flug
  468.     @sx = @pattern * @width
  469.     @sy = @anime_kind * @height
  470.     self.src_rect.set(@sx, @sy, @width, @height)
  471.   end
  472.   #--------------------------------------------------------------------------
  473.   # ● 目标更新 action = ["N01target_change",目标情报]
  474.   #--------------------------------------------------------------------------
  475.   def update_target
  476.     # 目标确认
  477.     return if @battler.force_target == 0
  478.     # 单独处理中中止(全区域中自身被卷入时目标情报是不是)
  479.     return if @battler.individual
  480.     @target_battler = @battler.force_target[1]
  481.     @battler.force_target = 0
  482.   end  
  483.   #--------------------------------------------------------------------------
  484.   # ● 強制动作更新 action = [识别,复原,实行动作]
  485.   #--------------------------------------------------------------------------
  486.   def update_force_action
  487.     # 确认強制动作
  488.     action = @battler.force_action
  489.     return if action == 0
  490.     @battler.force_action = 0
  491.     # 主动中不能插入
  492.     return if @battler.active
  493.     # 击倒时就那样直接连接行动
  494.     return collapse_action if action[0] == "N01collapse"
  495.     # 单独时就那样直接连接
  496.     return start_one_action(action[2],action[1]) if action[0] == "单独"
  497.     # 通用作为动作对待
  498.     start_action(action[2])
  499.     # 有无坐标复原
  500.     return if action[1] == ""
  501.     # 完毕位置替换成重复动作
  502.     @action.delete("完毕")
  503.     @action.push(action[1])
  504.     @action.push("完毕")
  505.   end   
  506.   #--------------------------------------------------------------------------
  507.   # ● 坐标更新
  508.   #--------------------------------------------------------------------------
  509.   def update_move
  510.     # 补完加减速中距离的增减
  511.     if @move_speed_plus_x > 0
  512.       # 计算移动
  513.       @move_x += @moving_x
  514.       # 实行移动
  515.       @battler.move_x = @move_x
  516.       @move_speed_plus_x -= 1
  517.     elsif @move_speed_x > 0
  518.       # 加速时
  519.       if @move_boost_x != 0
  520.         @moving_x += @move_boost_x
  521.       end  
  522.       # 计算移动
  523.       @move_x += @moving_x
  524.       # 实行移动
  525.       @battler.move_x = @move_x
  526.       @move_speed_x -= 1
  527.     end
  528.     # 补完加减速中距离的增减
  529.     if @move_speed_plus_y > 0
  530.       # 计算移动
  531.       @move_y += @moving_y
  532.       # 实行移动
  533.       @battler.move_y = @move_y
  534.       @move_speed_plus_y -= 1
  535.     elsif @move_speed_y > 0
  536.       # 加速时
  537.       if @move_boost_y != 0
  538.         @moving_y += @move_boost_y
  539.       end  
  540.       # 计算移动
  541.       @move_y += @moving_y
  542.       # 实行移动
  543.       @battler.move_y = @move_y
  544.       @move_speed_y -= 1
  545.     end
  546.     # 跳跃上升
  547.     if @jump_up != 0
  548.       # 计算移动
  549.       @jump_plus += @jump_up
  550.       # 实行移动
  551.       @battler.jump = @jump_plus
  552.       @jump_up = @jump_up / 2
  553.       @jump_time -= 1
  554.       # 如果跳跃到了顶点时
  555.       if @jump_time == 0 or @jump_up == @jump_sign
  556.         @jump_down = @jump_up * 2 * @jump_sign * @jump_sign2
  557.         @jump_time_plus += @jump_time * 2
  558.         @jump_up = 0
  559.         return
  560.       end  
  561.     end  
  562.     # 跳跃下降
  563.     if @jump_down != 0
  564.       if @jump_time_plus != 0
  565.         @jump_time_plus -= 1
  566.       elsif @jump_down != @jump_size
  567.         # 计算移动
  568.         @jump_plus += @jump_down
  569.         # 实行移动
  570.         @battler.jump = @jump_plus
  571.         @jump_down = @jump_down * 2
  572.         if @jump_down == @jump_size
  573.           if @jump_flug
  574.             @jump_flug = false
  575.           else
  576.             # 计算移动
  577.             @jump_plus += @jump_down
  578.             # 实行移动
  579.             @battler.jump = @jump_plus
  580.             @jump_down = @jump_size = 0
  581.           end
  582.         end  
  583.       end
  584.     end
  585.     # 设定精灵的坐标
  586.     self.x = @battler.position_x
  587.     self.y = @battler.position_y
  588.     self.z = @battler.position_z
  589.   end
  590.   #--------------------------------------------------------------------------
  591.   # ● 影更新
  592.   #--------------------------------------------------------------------------
  593.   def update_shadow
  594.     @shadow.opacity = self.opacity
  595.     @shadow.x = self.x + @shadow_plus_x
  596.     @shadow.y = self.y + @shadow_plus_y - @jump_plus
  597.   end
  598.   #--------------------------------------------------------------------------
  599.   # ● 漂浮更新
  600.   #--------------------------------------------------------------------------
  601.   def update_float
  602.     @float_time -= 1
  603.     @jump_plus += @float_up
  604.     @battler.jump = @jump_plus
  605.   end   
  606.   #--------------------------------------------------------------------------
  607.   # ● 旋转更新
  608.   #--------------------------------------------------------------------------
  609.   def update_angle
  610.     # 实行旋转
  611.     @angle += @angling
  612.     self.angle = @angle
  613.     @angle_time -= 1
  614.     # 旋转时间结束时项目初始化
  615.     return @angle = 0 if @angle_time == 0
  616.     # 如果有复原标志时角度返回0
  617.     self.angle = 0 if @angle_reset
  618.   end  
  619.   #--------------------------------------------------------------------------
  620.   # ● 扩大缩小更新
  621.   #--------------------------------------------------------------------------
  622.   def update_zoom
  623.     # 实行扩大缩小
  624.     @zoom_x += @zooming_x
  625.     @zoom_y += @zooming_y
  626.     self.zoom_x = @zoom_x
  627.     self.zoom_y = @zoom_y
  628.     @zoom_time -= 1
  629.     # 扩大缩小时间结束时项目初始化
  630.     return if @zoom_time != 0
  631.     @zoom_x = @zoom_y = 0
  632.     self.oy = @height * 2 / 3
  633.     # 如果有复原标志时还原
  634.     self.zoom_x = self.zoom_y = 1 if @zoom_reset
  635.   end  
  636.   #--------------------------------------------------------------------------
  637.   # ● 残像更新
  638.   #--------------------------------------------------------------------------
  639.   def update_mirage
  640.     # 残像最大能显示3个、2格图片中更新
  641.     mirage(@mirage0) if @mirage_count == 1
  642.     mirage(@mirage1) if @mirage_count == 3
  643.     mirage(@mirage2) if @mirage_count == 5
  644.     @mirage_count += 1
  645.     @mirage_count = 0 if @mirage_count == 6
  646.   end
  647.   #--------------------------------------------------------------------------
  648.   # ● 图片更新
  649.   #--------------------------------------------------------------------------
  650.   def update_picture
  651.     @picture_time -= 1
  652.     @picture.x += @moving_pic_x
  653.     @picture.y += @moving_pic_y
  654.   end  
  655.   #--------------------------------------------------------------------------
  656.   # ● 飞出动画 更新
  657.   #--------------------------------------------------------------------------
  658.   def update_move_anime
  659.     @move_anime.update
  660.     @anime_moving = false if @move_anime.finish?
  661.     @move_anime.action_reset if @move_anime.finish?
  662.   end  
  663.   #--------------------------------------------------------------------------
  664.   # ● 崩坏效果的更新 ※再定义
  665.   #--------------------------------------------------------------------------
  666.   def update_collapse
  667.     normal_collapse if @collapse_type == 2
  668.     boss_collapse1 if @collapse_type == 3
  669.   end
  670.   #--------------------------------------------------------------------------
  671.   # ● 飞出动画更新 (图片动画)
  672.   #--------------------------------------------------------------------------
  673.   def update_balloon
  674.     @balloon_duration -= 1 if @balloon_duration > 0 && !@balloon_back
  675.     @balloon_duration += 1 if @balloon_back
  676.     if @balloon_duration == 64
  677.       @balloon_back = false
  678.       @balloon.visible = false
  679.     elsif @balloon_duration == 0
  680.       @balloon.visible = false if @balloon_loop == 0
  681.       @balloon_back = true if @balloon_loop == 1
  682.     end   
  683.     @balloon.x = self.x
  684.     @balloon.y = self.y
  685.     @balloon.z = 10
  686.     @balloon.opacity = self.opacity
  687.     sx = 7 * 32 if @balloon_duration < 12
  688.     sx = (7 - (@balloon_duration - 12) / 8) * 32 unless @balloon_duration < 12
  689.     @balloon.src_rect.set(sx, @balloon_id * 32, 32, 32)
  690.   end
  691.   #--------------------------------------------------------------------------
  692.   # ● 转送处bitmap的更新 ※再定义
  693.   #--------------------------------------------------------------------------
  694.   def update_battler_bitmap
  695.     return if @battler.actor?
  696.     if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue
  697.       @battler_name = @battler.battler_name
  698.       @battler_hue = @battler.battler_hue
  699.       make_battler
  700.       self.opacity = 0 if @battler.dead? or @battler.hidden
  701.     end
  702.   end
  703.   #--------------------------------------------------------------------------
  704.   # ● 实行动作
  705.   #--------------------------------------------------------------------------
  706.   def action
  707.     return if @active_action == nil
  708.     action = @active_action[0]
  709.     # 反转时
  710.     return mirroring if action == "反转"
  711.     # 旋转时  
  712.     return angling if action == "angle"
  713.     # 扩大缩小时  
  714.     return zooming if action == "zoom"
  715.     # 残像ON时
  716.     return mirage_on if action == "残像ON"
  717.     # 残像OFF时
  718.     return mirage_off if action == "残像OFF"
  719.     # 图片表示时
  720.     return picture if action == "pic"
  721.     # 图片消去时
  722.     return @picture.visible = false && @picture_time = 0 if action == "消去图片"
  723.     # 图片文件变更时  
  724.     return graphics_change if action == "change"
  725.     # 战斗动画表示时  
  726.     return battle_anime if action == "anime"
  727.     # 飞出动画表示时 (图片动画)
  728.     return balloon_anime if action == "balloon"
  729.     # BGM/BGS/SE演奏时  
  730.     return sound if action == "sound"
  731.     # 游戏开关操作时  
  732.     return $game_switches[@active_action[1]] = @active_action[2] if action == "switch"
  733.     # 游戏变量操作时  
  734.     return variable if action == "variable"
  735.     # 二刀限定时
  736.     return two_swords if action == "二刀限定"
  737.     # 非二刀限定时
  738.     return non_two_swords if action == "非二刀限定"
  739.     # 动作条件时
  740.     return necessary if action == "nece"
  741.     # 技能连发时  
  742.     return derivating if action == "der"
  743.     # 单独处理开始时
  744.     return individual_action if action == "个别处理开始"
  745.     # 单独处理完毕时
  746.     return individual_action_end if action == "个别处理完毕"
  747.     # 待机不能移动时
  748.     return non_repeat if action == "待机不能移动"
  749.     # 变更初期位置时
  750.     return @battler.change_base_position(self.x, self.y) if action == "变更初期位置"
  751.     # 解除变更初期位置
  752.     return @battler.base_position if action == "解除变更初期位置"
  753.     # 变更目标时  
  754.     return change_target if action == "target"
  755.     # 目标的击倒许可
  756.     return send_action(action) if action == "击倒许可"
  757.     # 解除主动
  758.     return send_action(action) if action == "解除主动"
  759.     # 赋予状态时  
  760.     return state_on if action == "sta+"
  761.     # 解除状态时  
  762.     return state_off if action == "sta-"
  763.     # 变更游戏整体的行进速度时
  764.     return Graphics.frame_rate = @active_action[1] if action == "fps"
  765.     # 漂浮时  
  766.     return floating if action == "float"
  767.     # 脚本操作时   
  768.     return eval(@active_action[1]) if action == "script"
  769.     # 强制动作时  
  770.     return force_action if @active_action.size == 4
  771.     # 坐标初始化时  
  772.     return reseting if @active_action.size == 5
  773.     # 移动时
  774.     return moving if @active_action.size == 7
  775.     # 角色动画时
  776.     return battler_anime if @active_action.size == 9
  777.     # 动画飛ばし时
  778.     return moving_anime if @active_action.size == 11
  779.     # 完毕时
  780.     return anime_finish if action == "完毕"
  781.   end
  782.   #--------------------------------------------------------------------------
  783.   # ● 实行反转
  784.   #--------------------------------------------------------------------------
  785.   def mirroring  
  786.     # 如果已经反转就还原
  787.     if self.mirror
  788.       self.mirror = false
  789.       # 武器动画也反映
  790.       @weapon_R.mirroring if @anime_flug
  791.     else
  792.       self.mirror = true
  793.       # 武器动画也反映
  794.       @weapon_R.mirroring if @anime_flug
  795.     end
  796.   end  
  797.   #--------------------------------------------------------------------------
  798.   # ● 实行旋转
  799.   #--------------------------------------------------------------------------
  800.   def angling  
  801.     # 初期化跳跃
  802.     jump_reset
  803.     # 情报确认
  804.     @angle_time = @active_action[1]
  805.     start_angle = @active_action[2]
  806.     end_angle = @active_action[3]
  807.     @angle_reset = @active_action[4]
  808.     # 袭击時时逆转
  809.     start_angle *= -1 if $back_attack
  810.     end_angle *= -1 if $back_attack
  811.     # 敌方被逆转
  812.     start_angle *= -1 if @battler.is_a?(Game_Enemy)
  813.     end_angle *= -1 if @battler.is_a?(Game_Enemy)
  814.     # 时间要是0以下时立即到最后角度
  815.     if @angle_time <= 0
  816.       self.angle = end_angle
  817.       return  @angle_time = 0
  818.     end  
  819.     # 从旋转时间计算一格相当于的角度
  820.     @angling = (end_angle - start_angle) / @angle_time
  821.     # 不能整除的剩余到初期角度
  822.     @angle = (end_angle - start_angle) % @angle_time + start_angle
  823.   end
  824.   #--------------------------------------------------------------------------
  825.   # ● 实行放大缩小
  826.   #--------------------------------------------------------------------------
  827.   def zooming  
  828.     # 初期化跳跃
  829.     jump_reset
  830.     # 情报确认
  831.     @zoom_time = @active_action[1]
  832.     zoom_x = @active_action[2] - 1
  833.     zoom_y = @active_action[3] - 1
  834.     @zoom_reset = @active_action[4]
  835.     @zoom_x = @zoom_y = 1
  836.     # 时间是0以下时跳过
  837.     return @zoom_time = 0 if @zoom_time <= 0
  838.     # 从放大时间中计算一格相当于的放大率
  839.     @zooming_x = zoom_x / @zoom_time
  840.     @zooming_y = zoom_y / @zoom_time
  841.   end  
  842.   #--------------------------------------------------------------------------
  843.   # ● 残像开始
  844.   #--------------------------------------------------------------------------
  845.   def mirage_on
  846.     # 战斗不能時不表现残像
  847.     return if @battler.dead?
  848.     @mirage0 = Sprite.new(self.viewport)
  849.     @mirage1 = Sprite.new(self.viewport)
  850.     @mirage2 = Sprite.new(self.viewport)
  851.     @mirage_flug = true
  852.     @mirage_count = 0
  853.   end  
  854.   #--------------------------------------------------------------------------
  855.   # ● 残像表示
  856.   #--------------------------------------------------------------------------
  857.   def mirage(body)
  858.     body.bitmap = self.bitmap.dup
  859.     body.x = self.x
  860.     body.y = self.y
  861.     body.ox = self.ox
  862.     body.oy = self.oy
  863.     body.z = self.z
  864.     body.mirror = self.mirror
  865.     body.angle = @angle
  866.     body.opacity = 160
  867.     body.zoom_x = self.zoom_x
  868.     body.zoom_y = self.zoom_y   
  869.     body.src_rect.set(@sx, @sy, @width, @height) if @anime_flug
  870.     body.src_rect.set(0, 0, @width, @height) unless @anime_flug
  871.   end   
  872.   #--------------------------------------------------------------------------
  873.   # ● 残像完毕
  874.   #--------------------------------------------------------------------------
  875.   def mirage_off
  876.     @mirage_flug = false
  877.     @mirage0.dispose if @mirage0 != nil
  878.     @mirage1.dispose if @mirage1 != nil
  879.     @mirage2.dispose if @mirage2 != nil
  880.   end   
  881.   #--------------------------------------------------------------------------
  882.   # ● 图片表示
  883.   #--------------------------------------------------------------------------
  884.   def picture
  885.     # 确认移动开始位置
  886.     pic_x = @active_action[1]
  887.     pic_y = @active_action[2]
  888.     # 确认移动完毕位置
  889.     pic_end_x = @active_action[3]
  890.     pic_end_y = @active_action[4]
  891.     @picture_time = @active_action[5]
  892.     # 用时间除、计算一个相当于的移动速度
  893.     @moving_pic_x = (pic_end_x - pic_x)/ @picture_time
  894.     @moving_pic_y = (pic_end_y - pic_y)/ @picture_time
  895.     # 不能整除时到最初上加算
  896.     plus_x = (pic_end_x - pic_x)% @picture_time
  897.     plus_y = (pic_end_y - pic_y)% @picture_time
  898.     # 图片表示
  899.     @picture.bitmap = Cache.picture(@active_action[7])
  900.     @picture.x = pic_x + plus_x
  901.     @picture.y = pic_y + plus_y
  902.     # Z坐标调整
  903.     @picture.z = 1
  904.     @picture.z = 1000 if @active_action[6]
  905.     @picture.visible = true
  906.   end
  907.   #--------------------------------------------------------------------------
  908.   # ● 图像文件变更
  909.   #--------------------------------------------------------------------------
  910.   def graphics_change  
  911.     # 主人公限定
  912.     return if @battler.is_a?(Game_Enemy)
  913.     # 图像变更
  914.     @battler_name = @active_action[2]
  915.     # 是否使用歩行图像中改变转送处的矩形大小的辨别处
  916.     self.bitmap = Cache.character(@battler_name) if N01::WALK_ANIME
  917.     self.bitmap = Cache.character(@battler_name + "_1") unless N01::WALK_ANIME
  918.     # 获取转送处的矩形
  919.     @width = self.bitmap.width / @base_width
  920.     @height = self.bitmap.height / @base_height
  921.     # 如果想让战斗后的人物图也显示为变更后的化在这里修改
  922.     @battler.graphic_change(@active_action[2]) unless @active_action[1]
  923.   end  
  924.   #--------------------------------------------------------------------------
  925.   # ● 显示战斗动画 [判別,ID,对象,反转,等待,二刀标志]
  926.   #--------------------------------------------------------------------------
  927.   def battle_anime
  928.     # 取消敌人的二刀标志动画处理
  929.     return if @active_action[5] && [email protected]?
  930.     # 不是二刀的角色,取消二刀标志动画处理
  931.     return if @active_action[5] && @battler.weapons[1] == nil
  932.     # 如果二刀为右手(上面设置过)无武器只有左手(下面设置)持有时
  933.     if @battler.actor?
  934.       return if !@active_action[5] && @battler.weapons[0] == nil && @battler.weapons[1] != nil
  935.     end
  936.     anime_id = @active_action[1]
  937.     # 偷袭时动画画像被反转
  938.     if $back_attack
  939.       mirror = true if @active_action[3] == false
  940.       mirror = false if @active_action[3]
  941.     end
  942.     # 武器和技能动画时
  943.     if anime_id < 0
  944.       # 用行动的种类分歧动画处
  945.       if @battler.action.skill? && anime_id != -2
  946.         anime_id = @battler.action.skill.animation_id
  947.       elsif @battler.action.item? && anime_id != -2
  948.         anime_id = @battler.action.item.animation_id
  949.       else
  950.         # 没有武器时使用空手动画
  951.         anime_id = N01::NO_WEAPON
  952.         if @battler.actor?
  953.           weapon_id = @battler.weapon_id
  954.           anime_id = $data_weapons[weapon_id].animation_id if weapon_id != 0
  955.           # 二刀动画时
  956.           anime_id = @battler.atk_animation_id2 if @active_action[5]
  957.         else
  958.           weapon_id = @battler.weapon
  959.           anime_id = $data_weapons[weapon_id].animation_id if weapon_id != 0
  960.         end
  961.       end
  962.       # 等待設定
  963.       @wait = $data_animations[anime_id].frame_max * 4 if $data_animations[anime_id] != nil && @active_action[4]
  964.       waitflug = true
  965.       # 显示伤害动画时、为了先计算出伤害計算而中断处理
  966.       damage_action = [anime_id, mirror, true]
  967.       return @battler.play = ["对象动画",damage_action] if @battler.active
  968.     end
  969.     # 实行动画
  970.     if @active_action[2] == 0 && $data_animations[anime_id] != nil
  971.       @battler.animation_id = anime_id
  972.       @battler.animation_mirror = mirror
  973.     elsif $data_animations[anime_id] != nil
  974.       for target in @target_battler
  975.         target.animation_id = anime_id
  976.         target.animation_mirror = mirror
  977.       end  
  978.     end
  979.     # 等待设定
  980.     @wait = $data_animations[anime_id].frame_max * 4 if $data_animations[anime_id] != nil && @active_action[4] && !waitflug
  981.   end
  982.   #--------------------------------------------------------------------------
  983.   # ● 显示飞出动画 (图片动画)
  984.   #--------------------------------------------------------------------------
  985.   def balloon_anime
  986.     return if self.opacity == 0
  987.     if @balloon == nil
  988.       @balloon = Sprite.new
  989.       @balloon.bitmap = Cache.system("Balloon")
  990.       @balloon.ox = @width / 16
  991.       @balloon.oy = @balloon.height / 10 + @height / 3
  992.     end
  993.     @balloon_id = @active_action[1]
  994.     @balloon_loop = @active_action[2]
  995.     @balloon_duration = 64
  996.     @balloon_back = false
  997.     update_balloon
  998.     @balloon.visible = true
  999.   end  
  1000.   #--------------------------------------------------------------------------
  1001.   # ● BGM/BGS/SE演奏
  1002.   #--------------------------------------------------------------------------
  1003.   def sound   
  1004.     # 获取情报
  1005.     pitch = @active_action[2]
  1006.     vol =  @active_action[3]
  1007.     name = @active_action[4]
  1008.     # 实行
  1009.     case @active_action[1]
  1010.     when "se"
  1011.       Audio.se_play("Audio/SE/" + name, vol, pitch)
  1012.     when "bgm"
  1013.       # 没有指定名字时、不改变现在的BGM
  1014.       if @active_action[4] == ""
  1015.         now_bgm = RPG::BGM.last
  1016.         name = now_bgm.name
  1017.       end
  1018.       Audio.bgm_play("Audio/BGM/" + name, vol, pitch)
  1019.     when "bgs"
  1020.       # 没有指定名字时、不改变现在的BGS
  1021.       if @active_action[4] == ""
  1022.         now_bgs = RPG::BGS.last
  1023.         name = now_bgs.name
  1024.       end
  1025.       Audio.bgs_play("Audio/BGS/" + name, vol, pitch)
  1026.     end
  1027.   end
  1028.   #--------------------------------------------------------------------------
  1029.   # ● 游戏变量操作
  1030.   #--------------------------------------------------------------------------
  1031.   def variable
  1032.     # 检查操作
  1033.     operand = @active_action[3]
  1034.     # 变数操作的分歧
  1035.     case @active_action[2]
  1036.     when 0 # 代入
  1037.       $game_variables[@active_action[1]] = operand
  1038.     when 1 # 加算
  1039.       $game_variables[@active_action[1]] += operand
  1040.     when 2 # 減算
  1041.       $game_variables[@active_action[1]] -= operand
  1042.     when 3 # 乗算
  1043.       $game_variables[@active_action[1]] *= operand
  1044.     when 4 # 除算
  1045.       $game_variables[@active_action[1]] /= operand
  1046.     when 5 # 剰余
  1047.       $game_variables[@active_action[1]] %= operand
  1048.     end
  1049.   end  
  1050.   #--------------------------------------------------------------------------
  1051.   # ● 二刀限定
  1052.   #--------------------------------------------------------------------------
  1053.   def two_swords
  1054.     # 敌方不被处理
  1055.     return @action.shift unless @battler.actor?
  1056.     # 左手(下部显示)没有武器就会消除下面的动作
  1057.     return @action.shift if @battler.weapons[1] == nil
  1058.     # 从行动配类的前面移动
  1059.     active = @action.shift
  1060.     # 确定现在的动作
  1061.     @active_action = N01::ANIME[active]
  1062.     # 等待设定
  1063.     @wait = active.to_i if @active_action == nil
  1064.     # 单独动作开始
  1065.     action
  1066.   end
  1067.   #--------------------------------------------------------------------------
  1068.   # ● 非二刀限定
  1069.   #--------------------------------------------------------------------------
  1070.   def non_two_swords
  1071.     # 敌方不被处理
  1072.     return unless @battler.actor?
  1073.     # 左手(下部显示)没有武器就会消除下面的动作
  1074.     return @action.shift if @battler.weapons[1] != nil
  1075.     # 从行动配类的前面移动
  1076.     active = @action.shift
  1077.     # 确定现在的动作
  1078.     @active_action = N01::ANIME[active]
  1079.     # 等待设定
  1080.     @wait = active.to_i if @active_action == nil
  1081.     # 单独动作开始
  1082.     action
  1083.   end
  1084.   #--------------------------------------------------------------------------
  1085.   # ● 动作条件
  1086.   #--------------------------------------------------------------------------
  1087.   def necessary
  1088.     nece1 = @active_action[3]
  1089.     nece2 = @active_action[4]
  1090.     # 目标确认
  1091.     case @active_action[1]
  1092.     # 0自身 1目标 2敌全体 3我方全体
  1093.     when 0
  1094.       target = [$game_party.members[@battler.index]] if @battler.is_a?(Game_Actor)
  1095.       target = [$game_troop.members[@battler.index]] if @battler.is_a?(Game_Enemy)
  1096.     when 1
  1097.       target = @target_battler
  1098.     when 2
  1099.       target = $game_troop.members
  1100.     when 3
  1101.       target = $game_party.members
  1102.     end
  1103.     # 目标为空出时看作失败
  1104.     return start_action(@battler.recover_action) if target.size == 0
  1105.     # 内容确认
  1106.     case @active_action[2]
  1107.     # 指定了状态ID时
  1108.     when 0
  1109.       # 补充正号为「正在此状态」、负号为「不在此状态」的条件
  1110.       state_on = true if nece2 > 0
  1111.       # 获取条件人数
  1112.       state_member = nece2.abs
  1113.       # 0从队友数中获取
  1114.       if nece2 == 0
  1115.         state_member = $game_party.members.size if @battler.is_a?(Game_Actor)
  1116.         state_member = $game_troop.members.size if @battler.is_a?(Game_Enemy)
  1117.       end  
  1118.       # 目标的状态确认后清点人数
  1119.       for member in target
  1120.         state_member -= 1 if member.state?(nece1)
  1121.       end
  1122.       # 条件全部满足后执行动作
  1123.       if state_member == 0 && state_on
  1124.         return
  1125.       elsif state_member == nece2.abs
  1126.         return if state_on == nil
  1127.       end  
  1128.     # 指定了参数时
  1129.     when 1  
  1130.       # 补充了正号为「数值以上」、负号为「数值以下」的条件
  1131.       num_over = true if nece2 > 0
  1132.       # 参照数值
  1133.       num = 0
  1134.       # 确认目标的参数
  1135.       for member in target
  1136.         # 参照参数来分歧
  1137.         case  nece1
  1138.         when 0 # 现HP
  1139.           num += member.hp
  1140.         when 1 # 现MP
  1141.           num += member.mp
  1142.         when 2 # 攻击力
  1143.           num += member.atk
  1144.         when 3 # 防御力
  1145.           num += member.def
  1146.         when 4 # 精神力
  1147.           num += member.spi
  1148.         when 5 # 敏捷性
  1149.           num += member.agi
  1150.         end
  1151.       end
  1152.       # 平均
  1153.       num = num / target.size
  1154.       # 条件全部满足时执行动作
  1155.       if num > nece2.abs && num_over
  1156.         return
  1157.       elsif num < nece2.abs
  1158.         return if num_over == nil
  1159.       end
  1160.     # 指定了开关时
  1161.     when 2
  1162.       # 条件全部满足时执行动作
  1163.       if $game_switches[nece1]
  1164.         # 补充为true时「开关ON」、false时「开关OFF」的条件
  1165.         return if nece2
  1166.       # 开关为OFF时与ON时是相反的
  1167.       else
  1168.         return unless nece2
  1169.       end  
  1170.     # 指定了变量时
  1171.     when 3
  1172.       # 补充为正号时「数值以上」、负号时「数値以下」的条件
  1173.       if nece2 > 0
  1174.         return if $game_variables[nece1] > nece2
  1175.       else
  1176.         return unless $game_variables[nece1] > nece2.abs
  1177.       end
  1178.     # 指定了习得技能时
  1179.     when 4
  1180.       # 获取技能条件人数
  1181.       skill_member = nece2.abs
  1182.       for member in target
  1183.         skill_member -= 1 if member.skill_learn?(nece1)
  1184.         # 条件确认
  1185.         return if skill_member == 0
  1186.       end  
  1187.     end
  1188.     # 条件没有被满足时动作中断
  1189.     return @action = ["完毕"] if @non_repeat
  1190.     # 不让防御中看起来不自然,坐标不被还原
  1191.     action = @battler.recover_action
  1192.     action = @battler.defence if @battler.guarding?
  1193.     return start_action(action)
  1194.   end  
  1195.   #--------------------------------------------------------------------------
  1196.   # ● 技能连发
  1197.   #--------------------------------------------------------------------------
  1198.   def derivating
  1199.     # 如果让没学的的技能不能连发时
  1200.     return if !@active_action[2] && [email protected]_id_learn?(@active_action[3])
  1201.     # 确率分歧
  1202.     return if rand(100) > @active_action[1]
  1203.     # 连发成功
  1204.     @battler.derivation = @active_action[3]
  1205.     # 之后的动作被中断
  1206.     @action = ["完毕"]
  1207.   end
  1208.   #--------------------------------------------------------------------------
  1209.   # ● 个别处理开始
  1210.   #--------------------------------------------------------------------------
  1211.   def individual_action
  1212.     # 反复标志ON
  1213.     @battler.individual = true
  1214.     # 保持反复动作
  1215.     @individual_act = @action.dup
  1216.     # 保持目标、一个一个的发出行动目标
  1217.     send_action(["个别处理"])
  1218.     @individual_targets = @target_battler.dup
  1219.     @target_battler = [@individual_targets.shift]
  1220.   end
  1221.   #--------------------------------------------------------------------------
  1222.   # ● 个别处理完毕
  1223.   #--------------------------------------------------------------------------
  1224.   def individual_action_end
  1225.     # 目标没有残留时行动完毕
  1226.     return @battler.individual = false if @individual_targets.size == 0
  1227.     @action = @individual_act.dup
  1228.     @target_battler = [@individual_targets.shift]
  1229.   end  
  1230.   #--------------------------------------------------------------------------
  1231.   # ● 待机不能移动
  1232.   #--------------------------------------------------------------------------
  1233.   def non_repeat
  1234.     @repeat_action = []
  1235.     @non_repeat = true
  1236.     anime_finish
  1237.   end  
  1238.   #--------------------------------------------------------------------------
  1239.   # ● 目标变更 action = [判別, 变更对象, 变更处]
  1240.   #--------------------------------------------------------------------------
  1241.   def change_target
  1242.     # 还原自身变更了的目标
  1243.     return @target_battler = @now_targets.dup if @active_action[2] == 3
  1244.     # 发送目标情报
  1245.     target = [@battler] if @active_action[2] == 0
  1246.     target = @target_battler.dup if @active_action[2] != 0
  1247.     # 自身的目标发送到对方时、记录现在的目标
  1248.     if @active_action[2] == 2
  1249.       @now_targets = @target_battler.dup
  1250.       @target_battler = []
  1251.     end  
  1252.     # 发送目标指定目录时
  1253.     if @active_action[1] >= 1000
  1254.       members = $game_party.members if @battler.actor?
  1255.       members = $game_troop.members unless @battler.actor?
  1256.       index = @active_action[1] - 1000
  1257.       if index < members.size
  1258.         if members[index].exist? && @battler.index != index
  1259.           # 目标变更
  1260.           members[index].force_target = ["N01target_change", target]
  1261.           # 自身的目标发送到相手时
  1262.           @target_battler = [members[index]] if @active_action[2] == 2
  1263.           change = true
  1264.         else
  1265.           for member in members
  1266.             next if @battler.index == member.index
  1267.             next unless member.exist?
  1268.             member.force_target = ["N01target_change", target]
  1269.             @target_battler = [member] if @active_action[2] == 2
  1270.             break change = true
  1271.           end
  1272.         end
  1273.       end
  1274.     # 指定了发送目标的状态ID时
  1275.     elsif @active_action[1] > 0
  1276.       for member in $game_party.members + $game_troop.members
  1277.         if member.state?(@active_action[1])
  1278.           member.force_target = ["N01target_change", target]
  1279.           @target_battler.push(member) if @active_action[2] == 2
  1280.           change = true
  1281.         end  
  1282.       end  
  1283.     # 指定了发送目标学的的技能时
  1284.     elsif @active_action[1] < 0
  1285.       skill_id = @active_action[1].abs
  1286.       for actor in $game_party.members
  1287.         if actor.skill_learn?(skill_id)
  1288.           actor.force_target = ["N01target_change", target]
  1289.           @target_battler.push(target) if @active_action[2] == 2
  1290.           change = true
  1291.         end  
  1292.       end
  1293.     # 发送目标是目标时
  1294.     else
  1295.       for member in @target_battler
  1296.         member.force_target = ["N01target_change", target]
  1297.         @target_battler.push(member) if @active_action[2] == 2
  1298.         change = true
  1299.       end
  1300.     end
  1301.     # 条件未满足时之后的动作被中断
  1302.     return if change
  1303.     return @action = ["完毕"] if @non_repeat
  1304.     return start_action(@battler.recover_action)
  1305.   end   
  1306.   #--------------------------------------------------------------------------
  1307.   # ● 状态付与
  1308.   #--------------------------------------------------------------------------
  1309.   def state_on  
  1310.     state_id = @active_action[2]
  1311.     # 分歧对象
  1312.     case @active_action[1]
  1313.     when 0
  1314.       @battler.add_state(state_id)
  1315.     when 1
  1316.       if @target_battler != nil
  1317.         for target in @target_battler
  1318.           target.add_state(state_id)
  1319.         end
  1320.       end
  1321.     when 2
  1322.       for target in $game_troop.members
  1323.         target.add_state(state_id)
  1324.       end
  1325.     when 3
  1326.       for target in $game_party.members
  1327.         target.add_state(state_id)
  1328.       end
  1329.     when 4
  1330.       for target in $game_party.members
  1331.         if target.index != @battler.index
  1332.           target.add_state(state_id)
  1333.         end  
  1334.       end
  1335.     end
  1336.   end
  1337.   #--------------------------------------------------------------------------
  1338.   # ● 状态解除
  1339.   #--------------------------------------------------------------------------
  1340.   def state_off  
  1341.     state_id = @active_action[2]
  1342.     # 分歧对象
  1343.     case @active_action[1]
  1344.     when 0
  1345.       @battler.remove_state(state_id)
  1346.     when 1
  1347.       if @target_battler != nil
  1348.         for target in @target_battler
  1349.           target.remove_state(state_id)
  1350.         end
  1351.       end
  1352.     when 2
  1353.       for target in $game_troop.members
  1354.         target.remove_state(state_id)
  1355.       end
  1356.     when 3
  1357.       for target in $game_party.members
  1358.         target.remove_state(state_id)
  1359.       end
  1360.     when 4
  1361.       for target in $game_party.members
  1362.         if target.index != @battler.index
  1363.           target.remove_state(state_id)
  1364.         end  
  1365.       end
  1366.     end
  1367.   end  
  1368.   #--------------------------------------------------------------------------
  1369.   # ● 实行漂浮
  1370.   #--------------------------------------------------------------------------
  1371.   def floating  
  1372.     # 初期化跳跃
  1373.     jump_reset
  1374.     # 情报确认
  1375.     @jump_plus = @active_action[1]
  1376.     float_end = @active_action[2]
  1377.     @float_time = @active_action[3]
  1378.     # 计算一格相当的移动高度
  1379.     @float_up = (float_end - @jump_plus)/ @float_time
  1380.     # 漂浮结束前不执行下个动作
  1381.     @wait = @float_time
  1382.     # 反映漂浮动画的设定
  1383.     if @anime_flug
  1384.       move_anime = N01::ANIME[@active_action[4]]
  1385.       # 没有指定图片时跳过处理
  1386.       if move_anime != nil
  1387.         # 写下现在的动作
  1388.         @active_action = move_anime
  1389.         # 角色动画开始
  1390.         battler_anime
  1391.         # 漂浮完毕时即动画完毕
  1392.         @anime_end = true
  1393.       end
  1394.     end
  1395.     # 漂浮到初期高度
  1396.     @battler.jump = @jump_plus
  1397.   end      
  1398.   #--------------------------------------------------------------------------
  1399.   # ● 强制动作
  1400.   #--------------------------------------------------------------------------
  1401.   def force_action
  1402.     # 动作是单独还是通用的判别
  1403.     kind = @active_action[0]
  1404.     # 确认有无复原
  1405.     rebirth = @active_action[2]
  1406.     # 获取强制动作的内容
  1407.     play = @active_action[3]
  1408.     # 归纳上面3个情报
  1409.     action = [kind,rebirth,play]
  1410.     # 目标指定目录时
  1411.     if @active_action[1] >= 1000
  1412.       members = $game_party.members if @battler.actor?
  1413.       members = $game_troop.members unless @battler.actor?
  1414.       index = @active_action[1] - 1000
  1415.       if index < members.size
  1416.         if members[index].exist? && @battler.index != index
  1417.           # 交付角色情报
  1418.           return members[index].force_action = action
  1419.         else
  1420.           for target in members
  1421.             next if @battler.index == target.index
  1422.             next unless target.exist?
  1423.             force = true
  1424.             break target.force_action = action
  1425.           end
  1426.         end
  1427.       end
  1428.       # 条件未满足时之后的动作全部中断
  1429.       return if force
  1430.       return @action = ["完毕"] if @non_repeat
  1431.       return start_action(@battler.recover_action)
  1432.     # 指定目标时  
  1433.     elsif @active_action[1] == 0
  1434.       for target in @target_battler
  1435.         target.force_action = action if target != nil
  1436.       end
  1437.     # 指定状态ID时  
  1438.     elsif @active_action[1] > 0
  1439.       for target in $game_party.members + $game_troop.members
  1440.         target.force_action = action if target.state?(@active_action[1])
  1441.       end
  1442.     # 指定习得技能时  
  1443.     elsif @active_action[1] < 0  
  1444.       # 敌方不被处理时
  1445.       return if @battler.is_a?(Game_Enemy)
  1446.       for actor in $game_party.members
  1447.         # 自身除外
  1448.         unless actor.id == @battler.id
  1449.           # 交付角色情报
  1450.           actor.force_action = action if actor.skill_id_learn?(@active_action[1].abs)
  1451.         end
  1452.       end
  1453.     end
  1454.   end
  1455.   #--------------------------------------------------------------------------
  1456.   # ● 实行坐标初始化
  1457.   #--------------------------------------------------------------------------
  1458.   def reseting
  1459.     # 初始化跳跃
  1460.     jump_reset
  1461.     # 还原旋转
  1462.     self.angle = 0
  1463.     # 情报确认
  1464.     @distanse_x   = @move_x * -1
  1465.     @distanse_y   = @move_y * -1
  1466.     @move_speed_x = @active_action[1]
  1467.     @move_speed_y = @move_speed_x
  1468.     @move_boost_x = @active_action[2]
  1469.     @move_boost_y = @move_boost_x
  1470.     @jump         = @active_action[3]
  1471.     # 计算移动
  1472.     move_distance
  1473.     # 反映移动画面的设定
  1474.     if @anime_flug
  1475.       move_anime = N01::ANIME[@active_action[4]]
  1476.       # 没有指定图片时跳过处理
  1477.       if move_anime != nil
  1478.         # 写下现在的动作
  1479.         @active_action = move_anime
  1480.         # 角色动画开始
  1481.         battler_anime
  1482.       end
  1483.       # 移动完毕时即动画也完毕
  1484.       @anime_end = true
  1485.     end
  1486.   end
  1487.   #--------------------------------------------------------------------------
  1488.   # ● 实行移动
  1489.   #--------------------------------------------------------------------------
  1490.   def moving  
  1491.     # 初期化跳跃
  1492.     jump_reset
  1493.     # 方便调出X轴的移动
  1494.     xx = @active_action[1]
  1495.     # 袭击时X轴逆转
  1496.     xx *= -1 if $back_attack
  1497.     # 确认移动目标的目标
  1498.     case @active_action[0]
  1499.     when 0 # 自身
  1500.       @distanse_x = xx
  1501.       @distanse_y = @active_action[2]
  1502.     when 1 # 目标
  1503.       # 目标没有决定时、变换成自身
  1504.       if @target_battler == nil
  1505.         @distanse_x = xx
  1506.         @distanse_y = @active_action[2]
  1507.       else
  1508.         # 一个一个的确认目标对象
  1509.         target_x = 0
  1510.         target_y = 0
  1511.         time = 0
  1512.         for i in 0...@target_battler.size
  1513.           if @target_battler[i] != nil
  1514.             time += 1
  1515.             target_x += @target_battler[i].position_x
  1516.             target_y += @target_battler[i].position_y
  1517.           end  
  1518.         end
  1519.         # 目标空出时、变换成自身
  1520.         if time == 0
  1521.           @distanse_x = xx
  1522.           @distanse_y = @active_action[2]
  1523.         else  
  1524.           # 计算出复数目标的中心位置
  1525.           target_x = target_x / time
  1526.           target_y = target_y / time
  1527.           # 算出最终的移动距离
  1528.           @distanse_y = target_y - self.y + @active_action[2]
  1529.           # X坐标是角色和敌人的逆向计算
  1530.           if @battler.is_a?(Game_Actor)
  1531.             @distanse_x = target_x - self.x + xx
  1532.           else
  1533.             @distanse_x = self.x - target_x + xx
  1534.           end  
  1535.         end  
  1536.       end  
  1537.     when 2 # 画面
  1538.       # X坐标是角色和敌人的逆向计算
  1539.       if @battler.is_a?(Game_Actor)
  1540.         @distanse_x = xx - self.x
  1541.         @distanse_x = Graphics.width + xx - self.x if $back_attack
  1542.       else
  1543.         @distanse_x = self.x - xx
  1544.         @distanse_x = self.x - (Graphics.width + xx) if $back_attack
  1545.       end
  1546.       @distanse_y = @active_action[2] - self.y
  1547.     when 3 # 初期位置
  1548.       # X坐标是角色和敌人的逆向计算
  1549.       if @battler.is_a?(Game_Actor)
  1550.         @distanse_x = xx + @battler.base_position_x - self.x
  1551.       else
  1552.         @distanse_x = xx + self.x - @battler.base_position_x
  1553.       end
  1554.       @distanse_y = @active_action[2] + @battler.base_position_y - @battler.position_y
  1555.     end
  1556.     @move_speed_x = @active_action[3]
  1557.     @move_speed_y = @active_action[3]
  1558.     @move_boost_x = @active_action[4]
  1559.     @move_boost_y = @active_action[4]
  1560.     @jump         = @active_action[5]
  1561.     @jump_plus = 0
  1562.     # 计算移动
  1563.     move_distance
  1564.     # 反映移动动画的设定
  1565.     if @anime_flug
  1566.       move_anime = N01::ANIME[@active_action[6]]
  1567.       # 没有指定图片时跳过处理
  1568.       if move_anime != nil
  1569.         # 写下现在的动作
  1570.         @active_action = move_anime
  1571.         # 角色动画开始
  1572.         battler_anime
  1573.       end  
  1574.       # 移动完毕时即动画也完毕
  1575.       @anime_end = true
  1576.     end
  1577.   end
  1578.   #--------------------------------------------------------------------------
  1579.   # ● 计算移动
  1580.   #--------------------------------------------------------------------------
  1581.   def move_distance
  1582.     # 速度为0时、停留在那个地方
  1583.     if @move_speed_x == 0
  1584.       @moving_x = 0
  1585.       @moving_y = 0
  1586.     else  
  1587.       # 计算一格相当的移动距离
  1588.       @moving_x = @distanse_x / @move_speed_x
  1589.       @moving_y = @distanse_y / @move_speed_y
  1590.       # 剩余的距离在这时移动消化
  1591.       over_x = @distanse_x % @move_speed_x
  1592.       over_y = @distanse_y % @move_speed_y
  1593.       @move_x += over_x
  1594.       @move_y += over_y
  1595.       @battler.move_x = @move_x
  1596.       @battler.move_y = @move_y
  1597.       @distanse_x -= over_x
  1598.       @distanse_y -= over_y
  1599.     end  
  1600.     # 判定是否移动
  1601.     if @distanse_x == 0
  1602.       @move_speed_x = 0
  1603.     end
  1604.     if @distanse_y == 0
  1605.       @move_speed_y = 0
  1606.     end
  1607.     # 计算X坐标移动
  1608.     # 根据加减速修正移动格数
  1609.     boost_x = @moving_x
  1610.     move_x = 0
  1611.     # 加速时
  1612.     if @move_boost_x > 0 && @distanse_x != 0
  1613.       # 加减速的正负调整成左右移动
  1614.       if @distanse_x == 0
  1615.         @move_boost_x = 0
  1616.       elsif @distanse_x < 0
  1617.         @move_boost_x *= -1
  1618.       end
  1619.       # 事先计算距离的变化
  1620.       for i in 0...@move_speed_x
  1621.         boost_x += @move_boost_x
  1622.         move_x += boost_x
  1623.         # 记录超过距离
  1624.         over_distance = @distanse_x - move_x
  1625.         # 记录右移动时距离超越的时第几格
  1626.         if @distanse_x > 0 && over_distance < 0
  1627.           @move_speed_x = i
  1628.           break
  1629.         # 记录右移动时距离超越的时第几格
  1630.         elsif @distanse_x < 0 && over_distance > 0
  1631.           @move_speed_x = i
  1632.           break
  1633.         end
  1634.       end
  1635.       # 将超越距离还原到前一次
  1636.       before = over_distance + boost_x
  1637.       # 剩余的距离加算到等速移动的格数中
  1638.       @move_speed_plus_x = (before / @moving_x).abs
  1639.       # 即使这样剩余的距离也在这时移动消化
  1640.       @move_x += before % @moving_x
  1641.       @battler.move_x = @move_x
  1642.     # 减速时  
  1643.     elsif @move_boost_x < 0 && @distanse_x != 0
  1644.       # 加减速的正负调整成左右移动
  1645.       if @distanse_x == 0
  1646.         @move_boost_x = 0
  1647.       elsif @distanse_x < 0
  1648.         @move_boost_x *= -1
  1649.       end
  1650.       # 事先计算距离的变化
  1651.       for i in 0...@move_speed_x
  1652.         boost_x += @move_boost_x
  1653.         move_x += boost_x
  1654.         # 记录不足的距离
  1655.         lost_distance = @distanse_x - move_x
  1656.         before = lost_distance
  1657.         # 记录右移动速度到0时是第几格
  1658.         if @distanse_x > 0 && boost_x < 0
  1659.           @move_speed_x = i - 1
  1660.           # 不足的距离还原到前一次
  1661.           before = lost_distance + boost_x
  1662.           break
  1663.         # 记录左移动速度到0时是第几格
  1664.         elsif @distanse_x < 0 && boost_x > 0
  1665.           @move_speed_x= i - 1
  1666.           # 不足的距离还原到前一次
  1667.           before = lost_distance + boost_x
  1668.           break
  1669.         end
  1670.       end
  1671.       # 不足的距离加算到等速移动的格数中
  1672.       plus = before / @moving_x
  1673.       @move_speed_plus_x = plus.abs
  1674.       # 即是如此剩余的距离也在这时移动消化
  1675.       @move_x += before % @moving_x
  1676.       @battler.move_x = @move_x
  1677.     end
  1678.     # 计算Y坐标移动
  1679.     # 根据加减速修正移动格数
  1680.     boost_y = @moving_y
  1681.     move_y = 0
  1682.     # 加速时
  1683.     if @move_boost_y > 0 && @distanse_y != 0
  1684.       # 加减速的正负调整成左右移动
  1685.       if @distanse_y == 0
  1686.         @move_boost_y = 0
  1687.       elsif @distanse_y < 0
  1688.         @move_boost_y *= -1
  1689.       end
  1690.       # 事先计算距离的变化
  1691.       for i in 0...@move_speed_y
  1692.         boost_y += @move_boost_y
  1693.         move_y += boost_y
  1694.         # 记录超越的距离
  1695.         over_distance = @distanse_y - move_y
  1696.         # 记录右移动时距离超越的时第几格
  1697.         if @distanse_y > 0 && over_distance < 0
  1698.           @move_speed_y = i
  1699.           break
  1700.         # 记录左移动时距离超越的时第几格
  1701.         elsif @distanse_y < 0 && over_distance > 0
  1702.           @move_speed_y = i
  1703.           break
  1704.         end
  1705.       end
  1706.       # 超越的距离还原到前一次
  1707.       before = over_distance + boost_y
  1708.       # 剩余的距离加算到等速移动的格数中
  1709.       @move_speed_plus_y = (before / @moving_y).abs
  1710.       # 即使这样剩余的距离也在这时移动消化
  1711.       @move_y += before % @moving_y
  1712.       @battler.move_y = @move_y
  1713.     # 減速时  
  1714.     elsif @move_boost_y < 0 && @distanse_y != 0
  1715.       # 加减速的正负调整成左右移动
  1716.       if @distanse_y == 0
  1717.         @move_boost_y = 0
  1718.       elsif @distanse_y < 0
  1719.         @move_boost_y *= -1
  1720.       end
  1721.       # 事先计算距离的变化
  1722.       for i in 0...@move_speed_y
  1723.         boost_y += @move_boost_y
  1724.         move_y += boost_y
  1725.         # 记录不足的距离
  1726.         lost_distance = @distanse_y - move_y
  1727.         before = lost_distance
  1728.         # 记录右移动速度到0时是第几格
  1729.         if @distanse_y > 0 && boost_y < 0
  1730.           @move_speed_y = i
  1731.           # 不足的距离还原到前一次
  1732.           before = lost_distance + boost_y
  1733.           break
  1734.         # 记录左移动速度到0时是第几格
  1735.         elsif @distanse_y < 0 && boost_y > 0
  1736.           @move_speed_y = i
  1737.           # 不足的距离还原到前一次
  1738.           before = lost_distance + boost_y
  1739.           break
  1740.         end
  1741.       end
  1742.       # 不足的距离加算到等速移动的格数中
  1743.       plus = before / @moving_y
  1744.       @move_speed_plus_y = plus.abs
  1745.       # 即是如此剩余的距离也在这时移动消化
  1746.       @move_y += before % @moving_y
  1747.       @battler.move_y = @move_y
  1748.     end
  1749.     # 算出移动完毕的时间
  1750.     x = @move_speed_plus_x + @move_speed_x
  1751.     y = @move_speed_plus_y + @move_speed_y
  1752.     if x > y
  1753.       end_time = x
  1754.     else
  1755.       end_time = y
  1756.     end
  1757.     # 移动完毕前不进行下个动作
  1758.     @wait = end_time
  1759.     # 计算跳跃
  1760.     if @jump != 0
  1761.       # 没有移动只跳跃时
  1762.       if @wait == 0
  1763.         # 时间记入
  1764.         @wait = @active_action[3]
  1765.       end  
  1766.       # 从移动完毕时间算出跳跃时间
  1767.       @jump_time = @wait / 2
  1768.       # 不能插入时的剩余时间
  1769.       @jump_time_plus = @wait % 2
  1770.       # 判别跳跃是正还是负
  1771.       @jump_sign = 0
  1772.       @jump_sign2 = 0
  1773.       if @jump < 0
  1774.         @jump_sign = -1
  1775.         @jump_sign2 = 1
  1776.         @jump = @jump * -1
  1777.       else
  1778.         @jump_sign = 1
  1779.         @jump_sign2 = -1
  1780.       end
  1781.       # 决定跳跃初始速度
  1782.       @jump_up = 2 ** @jump * @jump_sign
  1783.       # 略微调整条约时间的尾数
  1784.       if @jump_time == 0
  1785.         @jump_up = 0
  1786.       elsif @jump_time != 1
  1787.         @jump_size = @jump_up * @jump_sign * @jump_sign2
  1788.       else
  1789.         @jump_size = @jump_up * 2 * @jump_sign * @jump_sign2
  1790.         @jump_flug = true
  1791.       end  
  1792.     end
  1793.   end
  1794.   #--------------------------------------------------------------------------
  1795.   # ● 角色动画开始
  1796.   #--------------------------------------------------------------------------
  1797.   def battler_anime
  1798.     # 反映动画设定
  1799.     @anime_kind  = @active_action[1]
  1800.     @anime_speed = @active_action[2]
  1801.     @anime_loop  = @active_action[3]
  1802.     # 如果有等待时间时加算
  1803.     @unloop_wait = @active_action[4]
  1804.     @anime_end = true
  1805.     @reverse = false
  1806.     # 只有有武器动作时进行更新
  1807.     if @weapon_R != nil && @active_action[8] != ""
  1808.       # 确认武器的设定
  1809.       weapon_kind = N01::ANIME[@active_action[8]]
  1810.       # 敌方和不使用二刀角色的取消二刀标志动画处理
  1811.       two_swords_flug = weapon_kind[11]
  1812.       return if two_swords_flug && [email protected]?
  1813.       return if two_swords_flug && @battler.weapons[1] == nil && @battler.actor?
  1814.       if @battler.actor? && @battler.weapons[0] == nil && !two_swords_flug
  1815.         @weapon_R.action_reset
  1816.       elsif @battler.actor? && @battler.weapons[1] == nil && two_swords_flug
  1817.         @weapon_R.action_reset
  1818.       elsif [email protected]? && @battler.weapon == 0
  1819.         @weapon_R.action_reset
  1820.       else
  1821.         # 初期化
  1822.         @weapon_R.action_reset
  1823.         # 动画图像是固定时的获取武器位置
  1824.         if @active_action[5] != -1
  1825.           @weapon_R.freeze(@active_action[5])
  1826.         end
  1827.         # 设定武器画像
  1828.         @weapon_R.weapon_graphics unless two_swords_flug
  1829.         @weapon_R.weapon_graphics(true) if two_swords_flug
  1830.         # 交付武器动作
  1831.         @weapon_R.weapon_action(@active_action[8],@anime_loop)
  1832.         @weapon_action = true
  1833.         # 更新最初的武器动作
  1834.         @weapon_R.action
  1835.       end
  1836.     elsif @weapon_R != nil
  1837.       @weapon_R.action_reset
  1838.     end  
  1839.     @anime_end = false
  1840.     # 动画图片是固定时
  1841.     if @active_action[5] != -1 && @active_action[5] != -2
  1842.       # 标志ON
  1843.       @anime_freeze = true
  1844.       # 看作动画是通常的完毕了
  1845.       @anime_end = true
  1846.     # 单程逆转再生时
  1847.     elsif @active_action[5] == -2
  1848.       @anime_freeze = false
  1849.       # 标志ON
  1850.       @reverse = true
  1851.       # 更新最初的动画图像
  1852.       @pattern = @base_width - 1
  1853.       # 只有在有武器动画时更新
  1854.       if @weapon_action && @weapon_R != nil
  1855.         @weapon_R.action
  1856.         @weapon_R.update
  1857.       end
  1858.     # 更新通常动画时  
  1859.     else  
  1860.       @anime_freeze = false
  1861.       # 更新最初动画图像
  1862.       @pattern = 0
  1863.       # 只有在有武器动画时更新
  1864.       if @weapon_action && @weapon_R != nil
  1865.         @weapon_R.action
  1866.         @weapon_R.update
  1867.       end
  1868.     end  
  1869.     @pattern_back = false
  1870.     @frame = @anime_speed
  1871.     # 设定Z坐标
  1872.     @battler.move_z = @active_action[6]
  1873.     # 是否有影
  1874.     if @shadow != nil
  1875.       @shadow.visible = true if @active_action[7]
  1876.       @shadow.visible = false unless @active_action[7]
  1877.       @shadow.visible = false if @skip_shadow
  1878.     end
  1879.     # 分期从编号读取文件名
  1880.     if @active_action[0] == 0
  1881.       file_name = @battler_name
  1882.     else
  1883.       file_name = @battler_name + "_" + @active_action[0].to_s
  1884.     end  
  1885.     # 无动画角色时处理完毕
  1886.     return unless @anime_flug
  1887.     self.bitmap = Cache.character(file_name)
  1888.     # 设定转送前的矩形
  1889.     @sx = @pattern * @width
  1890.     @sy = @anime_kind * @height
  1891.     @sx = @active_action[5] * @width if @anime_freeze
  1892.     self.src_rect.set(@sx, @sy, @width, @height)
  1893.   end
  1894.   #--------------------------------------------------------------------------
  1895.   # ● 动画飞出
  1896.   #--------------------------------------------------------------------------
  1897.   def moving_anime
  1898.     # 如果前个飞出动画还有残留时初期化
  1899.     @move_anime.action_reset if @anime_moving
  1900.     @anime_moving = true
  1901.     # 袭击中动画、武器画像反转
  1902.     mirror = false
  1903.     mirror = true if $back_attack
  1904.     # 动画ID
  1905.     id = @active_action[1]
  1906.     # 对象
  1907.     target = @active_action[2]
  1908.     x = y = mem = 0
  1909.     # 对象为单体时
  1910.     if target == 0
  1911.       # 没有决定目标时、变换为自身
  1912.       if @target_battler == nil
  1913.         x = self.x
  1914.         y = self.y
  1915.       else
  1916.         # 目标空出时、变换为自身
  1917.         if @target_battler[0] == nil
  1918.           x = self.x
  1919.           y = self.y
  1920.         else  
  1921.           # 决定最初进入的目标为对象
  1922.           x = @target_battler[0].position_x
  1923.           y = @target_battler[0].position_y
  1924.         end  
  1925.       end  
  1926.     # 对象在敌方中心时  
  1927.     elsif target == 1
  1928.       # 自身是主人公时计算敌方的中心
  1929.       if @battler.is_a?(Game_Actor)
  1930.         for target in $game_troop.members
  1931.           x += target.position_x
  1932.           y += target.position_y
  1933.           mem += 1
  1934.         end
  1935.         x = x / mem
  1936.         y = y / mem
  1937.       # 自身是敌方时计算主人公的中心
  1938.       else
  1939.         for target in $game_party.members
  1940.           x += target.position_x
  1941.           y += target.position_y
  1942.           mem += 1
  1943.         end
  1944.         x = x / mem
  1945.         y = y / mem
  1946.       end
  1947.     # 对象在我方中心时  
  1948.     elsif target == 2
  1949.       # 自身是主人公时计算主人公的中心
  1950.       if @battler.is_a?(Game_Actor)
  1951.         for target in $game_party.members
  1952.           x += target.position_x
  1953.           y += target.position_y
  1954.           mem += 1
  1955.         end
  1956.         x = x / mem
  1957.         y = y / mem
  1958.       # 自身是敌方时计算敌方的中心
  1959.       else
  1960.         for target in $game_troop.members
  1961.           x += target.position_x
  1962.           y += target.position_y
  1963.           mem += 1
  1964.         end
  1965.         x = x / mem
  1966.         y = y / mem
  1967.       end
  1968.     # 对象是自身时  
  1969.     else
  1970.       x = self.x
  1971.       y = self.y
  1972.     end  
  1973.     # 开始位置的略微调整
  1974.     plus_x = @active_action[6]
  1975.     plus_y = @active_action[7]
  1976.     # 敌方是X轴逆转
  1977.     plus_x *= -1 if @battler.is_a?(Game_Enemy)
  1978.     # 算出最終的移动距离
  1979.     distanse_x = x - self.x - plus_x
  1980.     distanse_y = y - self.y - plus_y
  1981.     # 飞出类型
  1982.     type = @active_action[3]
  1983.     # 速度
  1984.     speed = @active_action[4]
  1985.     # 轨道
  1986.     orbit = @active_action[5]
  1987.     # 如果自身在开始位置时
  1988.     if @active_action[8] == 0
  1989.       @move_anime.base_x = self.x + plus_x
  1990.       @move_anime.base_y = self.y + plus_y
  1991.     # 对象在开始位置时
  1992.     elsif @active_action[8] == 1
  1993.       @move_anime.base_x = x + plus_x
  1994.       @move_anime.base_y = y + plus_y
  1995.       # 把距离作为反面
  1996.       distanse_y = distanse_y * -1
  1997.       distanse_x = distanse_x * -1
  1998.     # 如果不能动
  1999.     else
  2000.       @move_anime.base_x = x
  2001.       @move_anime.base_y = y
  2002.       distanse_x = distanse_y = 0
  2003.     end
  2004.     # 无武器动作时不显示武器
  2005.     if @active_action[10] == ""
  2006.       weapon = ""  
  2007.     # 无动画的敌方不显示武器
  2008.     elsif @anime_flug != true
  2009.       weapon = ""  
  2010.     # 武器动作时
  2011.     else
  2012.       # 确认是否指定了飞出武器图片
  2013.       if @battler.is_a?(Game_Actor)
  2014.         battler = $game_party.members[@battler.index]
  2015.         weapon_id = battler.weapon_id
  2016.       else  
  2017.         battler = $game_troop.members[@battler.index]
  2018.         weapon_id = battler.weapon
  2019.       end  
  2020.       # 判别是使用技能画像还是使用武器画像
  2021.       weapon_act = N01::ANIME[@active_action[10]].dup if @active_action[10] != ""
  2022.       # 如果利用武器画像时并不是空手
  2023.       if weapon_id != 0 && weapon_act.size == 3
  2024.         weapon_file = $data_weapons[weapon_id].flying_graphic
  2025.         # 如果没有指定别的画像时获取既存的武器图片
  2026.         if weapon_file == ""
  2027.           weapon_name = $data_weapons[weapon_id].graphic
  2028.           icon_weapon = false
  2029.           # 然后没有指定时使用ICON图片
  2030.           if weapon_name == ""
  2031.             weapon_name = $data_weapons[weapon_id].icon_index
  2032.             icon_weapon = true
  2033.           end  
  2034.         # 指定时获取那个图片名  
  2035.         else
  2036.           icon_weapon = false
  2037.           weapon_name = weapon_file
  2038.         end
  2039.         # 武器动作情报を取得
  2040.         weapon = @active_action[10]
  2041.       # 指定了武器画像时不显示空手
  2042.       elsif weapon_act.size == 3
  2043.         weapon = ""
  2044.       # 使用技能画像
  2045.       elsif weapon_act != nil && @battler.action.skill != nil
  2046.         icon_weapon = false
  2047.         weapon_name = $data_skills[@battler.action.skill.id].flying_graphic
  2048.         weapon = @active_action[10]
  2049.       end
  2050.     end
  2051.     # 决定Z坐标
  2052.     @move_anime.z = 1
  2053.     @move_anime.z = 1000 if @active_action[9]
  2054.     # 已上的全部情报都已飞出动画送到精灵
  2055.     @move_anime.anime_action(id,mirror,distanse_x,distanse_y,type,speed,orbit,weapon,weapon_name,icon_weapon)
  2056.   end  
  2057.   #--------------------------------------------------------------------------
  2058.   # ● 动作完毕
  2059.   #--------------------------------------------------------------------------
  2060.   def anime_finish
  2061.     # 单独处理完毕省略时做反复
  2062.     return individual_action_end if @individual_targets.size != 0
  2063.     # 主动向角色归纳动作情报
  2064.     send_action(@active_action[0]) if @battler.active
  2065.     # 如果有残像时开放
  2066.     mirage_off if @mirage_flug
  2067.     # 重复待机动作
  2068.     start_action(@repeat_action) unless @non_repeat
  2069.   end   
  2070.   #--------------------------------------------------------------------------
  2071.   # ● 击倒动作
  2072.   #--------------------------------------------------------------------------
  2073.   def collapse_action
  2074.     @non_repeat = true
  2075.     @effect_type = COLLAPSE
  2076.     @collapse_type = @battler.collapse_type unless @battler.actor?
  2077.     @battler_visible = false unless @battler.actor?
  2078.     @effect_duration = N01::COLLAPSE_WAIT + 48 if @collapse_type == 2
  2079.     @effect_duration = 401 if @collapse_type == 3
  2080.   end  
  2081.   #--------------------------------------------------------------------------
  2082.   # ● 普通击倒
  2083.   #--------------------------------------------------------------------------
  2084.   def normal_collapse
  2085.     if @effect_duration == 47
  2086.       Sound.play_enemy_collapse
  2087.       self.blend_type = 1
  2088.       self.color.set(255, 128, 128, 128)
  2089.     end
  2090.     self.opacity = 256 - (48 - @effect_duration) * 6 if @effect_duration <= 47
  2091.   end  
  2092.   #--------------------------------------------------------------------------
  2093.   # ● BOSS击倒
  2094.   #--------------------------------------------------------------------------
  2095.   def boss_collapse1
  2096.     if @effect_duration == 320
  2097.       Audio.se_play("Audio/SE/Absorb1", 100, 80)
  2098.       self.flash(Color.new(255, 255, 255), 60)
  2099.       viewport.flash(Color.new(255, 255, 255), 20)
  2100.     end
  2101.     if @effect_duration == 280
  2102.       Audio.se_play("Audio/SE/Absorb1", 100, 80)
  2103.       self.flash(Color.new(255, 255, 255), 60)
  2104.       viewport.flash(Color.new(255, 255, 255), 20)
  2105.     end
  2106.     if @effect_duration == 220
  2107.       Audio.se_play("Audio/SE/Earth4", 100, 80)
  2108.       reset
  2109.       self.blend_type = 1
  2110.       self.color.set(255, 128, 128, 128)
  2111.       self.wave_amp = 6
  2112.     end
  2113.     if @effect_duration < 220
  2114.       self.src_rect.set(0, @effect_duration / 2 - 110, @width, @height)
  2115.       self.x += 8 if @effect_duration % 4 == 0
  2116.       self.x -= 8 if @effect_duration % 4 == 2
  2117.       self.wave_amp += 1 if @effect_duration % 10 == 0
  2118.       self.opacity = @effect_duration
  2119.       return if @effect_duration < 50
  2120.       Audio.se_play("Audio/SE/Earth4", 100, 50) if @effect_duration % 50 == 0
  2121.     end
  2122.   end
  2123. end
复制代码
  1. #==============================================================================
  2. # ■ Scene_Battle Ver2.7
  3. #------------------------------------------------------------------------------
  4. #  战斗画面的处理的类。
  5. #==============================================================================
  6. class Scene_Battle < Scene_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 完毕处理
  9.   #--------------------------------------------------------------------------
  10.   alias terminate_n01 terminate
  11.   def terminate
  12.     terminate_n01
  13.     # 返还二刀流的替换处理
  14.     for member in $game_party.members
  15.       if member.two_swords_change
  16.         member.change_equip_by_id(1, member.weapon_id)
  17.         member.change_equip_by_id(0, 0)
  18.         member.two_swords_change = false
  19.       end  
  20.     end
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 战斗开始的处理
  24.   #--------------------------------------------------------------------------
  25.   alias process_battle_start_n01 process_battle_start
  26.   def process_battle_start
  27.     process_battle_start_n01
  28.     # 如果二刀流让左(下部显示)手武器像右(上部表示)手武器那样没有持有时
  29.     # 在这里强制替换他
  30.     for member in $game_party.members
  31.       if member.weapons[0] == nil and member.weapons[1] != nil
  32.         member.change_equip_by_id(0, member.armor1_id)
  33.         member.change_equip_by_id(1, 0)
  34.         member.two_swords_change = true
  35.       end
  36.     end  
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 更新
  40.   #--------------------------------------------------------------------------
  41.   alias update_n01 update
  42.   def update
  43.     reset_stand_by_action
  44.     super
  45.     update_n01
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ● 根据事件操作的HP变动再设置角色动画
  49.   #--------------------------------------------------------------------------
  50.   def reset_stand_by_action
  51.     if $game_temp.status_window_refresh
  52.       $game_temp.status_window_refresh = false
  53.       for member in $game_party.members + $game_troop.members
  54.         @spriteset.set_stand_by_action(member.actor?, member.index)
  55.         # 确认自动复活
  56.         resurrection(member) if member.hp == 0
  57.       end  
  58.       @status_window.refresh
  59.     end
  60.   end  
  61.   #--------------------------------------------------------------------------
  62.   # ● 战败的处理
  63.   #--------------------------------------------------------------------------
  64.   alias process_defeat_n01 process_defeat
  65.   def process_defeat
  66.     for member in $game_party.members
  67.       @spriteset.set_stand_by_action(member.actor?, member.index)
  68.     end
  69.     process_defeat_n01
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 帮助窗口的显示
  73.   #--------------------------------------------------------------------------
  74.   def pop_help(obj)
  75.     return if obj.extension.include?("不显示HELP")
  76.     @help_window = Window_Help.new if @help_window == nil
  77.     @help_window.set_text(obj.name, 1)
  78.     @help_window.visible = true
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 显示情报窗口的移动
  82.   #--------------------------------------------------------------------------
  83.   def move1_info_viewport
  84.     @info_viewport.ox = 128
  85.     loop do
  86.       update_basic
  87.       @info_viewport.ox -= 8
  88.       @party_command_window.x -= 8
  89.       @actor_command_window.x += 8
  90.       break if @info_viewport.ox == 64
  91.     end  
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 显示情报窗口的移动
  95.   #--------------------------------------------------------------------------
  96.   def move2_info_viewport
  97.     @info_viewport.ox = 64
  98.     loop do
  99.       update_basic
  100.       @info_viewport.ox -= 8
  101.       @party_command_window.x += 8
  102.       @actor_command_window.x -= 8
  103.       break if @info_viewport.ox == 0
  104.     end  
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 到下个主人公的指令选择
  108.   #--------------------------------------------------------------------------
  109.   alias next_actor_n01 next_actor
  110.   def next_actor
  111.     # 只有能动的角色显示指令动作
  112.     if @active_battler != nil && @active_battler.inputable? && @active_battler.actor?
  113.       @spriteset.set_action(true, @actor_index,@active_battler.command_a)
  114.     end
  115.     # 最后的角色时、动作结束前等待
  116.     @wait_count = 32 if @actor_index == $game_party.members.size-1
  117.     next_actor_n01
  118.     # 只有能动的角色现实指令动作
  119.     if @active_battler != nil && @active_battler.inputable? && @active_battler.actor?
  120.       @spriteset.set_action(true, @actor_index,@active_battler.command_b)
  121.     end
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # ● 到前一个角色的指令选择
  125.   #--------------------------------------------------------------------------
  126.   alias prior_actor_n01 prior_actor
  127.   def prior_actor
  128.     # 只有能动的角色显示指令动作
  129.     if @active_battler != nil && @active_battler.inputable? && @active_battler.actor?
  130.       @active_battler.action.clear
  131.       @spriteset.set_action(true, @actor_index,@active_battler.command_a)
  132.     end
  133.     prior_actor_n01
  134.     # 只有能动的角色显示指令动作
  135.     if @active_battler != nil && @active_battler.inputable? && @active_battler.actor?
  136.       @active_battler.action.clear
  137.       @spriteset.set_action(true, @actor_index,@active_battler.command_b)
  138.     end
  139.   end  
  140.   #--------------------------------------------------------------------------
  141.   # ● 目标选择的开始  ※再定义
  142.   #--------------------------------------------------------------------------
  143.   def start_target_enemy_selection
  144.     start_target_selection
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● 目标选择的开始  ※再定义
  148.   #--------------------------------------------------------------------------
  149.   def start_target_actor_selection
  150.     start_target_selection(true)
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 目标选择的开始
  154.   #--------------------------------------------------------------------------
  155.   def start_target_selection(actor = false)
  156.     members = $game_party.members if actor
  157.     members = $game_troop.members unless actor
  158.     # 光标精灵的作成
  159.     @cursor = Sprite.new
  160.     @cursor.bitmap = Cache.character("cursor")
  161.     @cursor.src_rect.set(0, 0, 32, 32)
  162.     @cursor_flame = 0
  163.     @cursor.x = -200
  164.     @cursor.y = -200
  165.     @cursor.ox = @cursor.width
  166.     @cursor.oy = @cursor.height
  167.     # 作成显示目标名的帮助窗口
  168.     @help_window.visible = false if @help_window != nil
  169.     @help_window2 = Window_Help.new if @help_window2 == nil
  170.     # 消除不要的窗口
  171.     @actor_command_window.active = false
  172.     @skill_window.visible = false if @skill_window != nil
  173.     @item_window.visible = false if @item_window != nil
  174.     # 存在的目标为最底号码的对象也想最初那样
  175.     @index = 0
  176.     @max_index = members.size - 1
  177.     # 主人公为站都不能者也可以作为目标来与敌方区分
  178.     unless actor
  179.       members.size.times do
  180.         break if members[@index].exist?
  181.         @index += 1
  182.       end
  183.     end  
  184.     @help_window2.set_text(members[@index].name, 1)
  185.     select_member(actor)
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ● 目标选择
  189.   #--------------------------------------------------------------------------
  190.   def select_member(actor = false)
  191.     members = $game_party.members if actor
  192.     members = $game_troop.members unless actor
  193.     loop do
  194.       update_basic
  195.       @cursor_flame = 0 if @cursor_flame == 30
  196.       @cursor.src_rect.set(0,  0, 32, 32) if @cursor_flame == 29
  197.       @cursor.src_rect.set(0, 32, 32, 32) if @cursor_flame == 15
  198.       point = @spriteset.set_cursor(actor, @index)
  199.       @cursor.x = point[0]
  200.       @cursor.y = point[1]
  201.       @cursor_flame += 1
  202.       if Input.trigger?(Input::B)
  203.         Sound.play_cancel
  204.         end_target_selection
  205.         break
  206.       elsif Input.trigger?(Input::C)
  207.         Sound.play_decision
  208.         @active_battler.action.target_index = @index
  209.         end_target_selection
  210.         end_skill_selection
  211.         end_item_selection
  212.         next_actor
  213.         break
  214.       end
  215.       if Input.repeat?(Input::LEFT)
  216.         if actor
  217.           cursor_down(members, actor) if $back_attack
  218.           cursor_up(members, actor) unless $back_attack
  219.         else
  220.           cursor_up(members, actor) if $back_attack
  221.           cursor_down(members, actor) unless $back_attack
  222.         end  
  223.       end
  224.       if Input.repeat?(Input::RIGHT)
  225.         if actor
  226.           cursor_up(members, actor) if $back_attack
  227.           cursor_down(members, actor) unless $back_attack
  228.         else
  229.           cursor_down(members, actor) if $back_attack
  230.           cursor_up(members, actor) unless $back_attack
  231.         end
  232.       end
  233.       cursor_up(members, actor) if Input.repeat?(Input::UP)
  234.       cursor_down(members, actor) if Input.repeat?(Input::DOWN)
  235.     end
  236.   end
  237.   #--------------------------------------------------------------------------
  238.   # ● 向前移动光标
  239.   #--------------------------------------------------------------------------
  240.   def cursor_up(members, actor)
  241.     Sound.play_cursor
  242.     members.size.times do
  243.       @index += members.size - 1
  244.       @index %= members.size
  245.       break if actor
  246.       break if members[@index].exist?
  247.     end
  248.     @help_window2.set_text(members[@index].name, 1)
  249.   end
  250.   #--------------------------------------------------------------------------
  251.   # ● 向后移动光标
  252.   #--------------------------------------------------------------------------
  253.   def cursor_down(members, actor)
  254.     Sound.play_cursor
  255.     members.size.times do
  256.       @index += 1
  257.       @index %= members.size
  258.       break if actor
  259.       break if members[@index].exist? && !actor
  260.     end
  261.     @help_window2.set_text(members[@index].name, 1)
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # ● 目标选择的完毕
  265.   #--------------------------------------------------------------------------
  266.   def end_target_selection
  267.     @actor_command_window.active = true if @actor_command_window.index == 0
  268.     @skill_window.visible = true if @skill_window != nil
  269.     @item_window.visible = true if @item_window != nil
  270.     @cursor.dispose
  271.     @cursor = nil
  272.     if @help_window2 != nil  
  273.       @help_window2.dispose
  274.       @help_window2 = nil
  275.     end
  276.     @help_window.visible = true if @help_window != nil
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ● 逃走的处理  ※再定义
  280.   #--------------------------------------------------------------------------
  281.   def process_escape
  282.     @info_viewport.visible = false
  283.     @message_window.visible = true
  284.     text = sprintf(Vocab::EscapeStart, $game_party.name)
  285.     $game_message.texts.push(text)
  286.     if $game_troop.preemptive
  287.       success = true
  288.     else
  289.       success = (rand(100) < @escape_ratio)
  290.     end
  291.     Sound.play_escape
  292.     # 不能动的主人公除外逃走成功动作
  293.     if success
  294.       for actor in $game_party.members
  295.         unless actor.restriction == 4
  296.           @spriteset.set_action(true, actor.index,actor.run_success)
  297.         end
  298.       end  
  299.       wait_for_message
  300.       battle_end(1)
  301.     # 不能动主人公除外逃走失败动作
  302.     else
  303.       for actor in $game_party.members
  304.         unless actor.restriction == 4
  305.           @spriteset.set_action(true, actor.index,actor.run_ng)
  306.         end
  307.       end
  308.       @escape_ratio += 10
  309.       $game_message.texts.push('\.' + Vocab::EscapeFailure)
  310.       wait_for_message
  311.       $game_party.clear_actions
  312.       start_main
  313.     end
  314.   end  
  315.   #--------------------------------------------------------------------------
  316.   # ● 胜利的处理
  317.   #--------------------------------------------------------------------------
  318.   alias process_victory_n01 process_victory
  319.   def process_victory
  320.     @status_window.visible = true
  321.     @message_window.visible = false
  322.     # BOSS击倒为等待加长
  323.     for enemy in $game_troop.members
  324.       break boss_wait = true if enemy.collapse_type == 3
  325.     end
  326.     wait(440) if boss_wait
  327.     wait(N01::WIN_WAIT) unless boss_wait
  328.     # 不能动的主人公除外胜利动作
  329.     for actor in $game_party.members
  330.       unless actor.restriction == 4
  331.         @spriteset.set_action(true, actor.index,actor.win)
  332.       end
  333.     end
  334.     process_victory_n01
  335.   end
  336.   #--------------------------------------------------------------------------
  337.   # ● 战斗处理的实行开始  ※再定义
  338.   #--------------------------------------------------------------------------
  339.   def start_main
  340.     $game_troop.increase_turn
  341.     @info_viewport.visible = true
  342.     @info_viewport.ox = 0
  343.     @party_command_window.active = false
  344.     @actor_command_window.active = false
  345.     @status_window.index = @actor_index = -1
  346.     @active_battler = nil
  347.     @message_window.clear
  348.     $game_troop.make_actions
  349.     make_action_orders
  350.     # 情报表示窗口的移动
  351.     move1_info_viewport
  352.     # 作成显示技能名的帮助窗口
  353.     @help_window = Window_Help.new
  354.     @help_window.visible = false
  355.     process_battle_event
  356.   end
  357.   #--------------------------------------------------------------------------
  358.   # ● 战斗事件的处理  ※再定义
  359.   #--------------------------------------------------------------------------
  360.   def process_battle_event
  361.     loop do
  362.       return if judge_win_loss
  363.       return if $game_temp.next_scene != nil
  364.       $game_troop.interpreter.update
  365.       $game_troop.setup_battle_event
  366.       @message_window.update
  367.       if $game_message.visible
  368.         @message_window.visible = true
  369.         @status_window.visible = false
  370.       end
  371.       wait_for_message
  372.       @message_window.visible = false
  373.       @status_window.visible = true
  374.       process_action if $game_troop.forcing_battler != nil
  375.       return unless $game_troop.interpreter.running?
  376.       update_basic
  377.     end
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ● 作成行动顺序
  381.   #--------------------------------------------------------------------------
  382.   alias make_action_orders_n01 make_action_orders
  383.   def make_action_orders
  384.     make_action_orders_n01
  385.     # 确认敌方的行动回数
  386.     for enemy in $game_troop.members
  387.       enemy.act_time = 0
  388.       if enemy.action_time[0] != 1
  389.         action_time = 0
  390.         # 获得确认的回数
  391.         for i in 1...enemy.action_time[0]
  392.           action_time += 1 if rand(100) < enemy.action_time[1]
  393.         end
  394.         enemy.act_time = action_time
  395.         action_time.times do
  396.           enemy_order_time(enemy)
  397.           action_time -= 1
  398.           break if action_time == 0
  399.         end  
  400.         enemy.adj_speed = nil
  401.       end
  402.     end
  403.   end
  404.   #--------------------------------------------------------------------------
  405.   # ● 作成敌方的行动回数
  406.   #--------------------------------------------------------------------------
  407.   def enemy_order_time(enemy)
  408.     enemy.make_action_speed2(enemy.action_time[2])
  409.     select_time = 0
  410.     for member in @action_battlers
  411.       select_time += 1
  412.       break @action_battlers.push(enemy) if member.action.speed < enemy.adj_speed
  413.       break @action_battlers.push(enemy) if select_time == @action_battlers.size
  414.     end
  415.   end
  416.   #--------------------------------------------------------------------------
  417.   # ● 战斗行动的实行
  418.   #--------------------------------------------------------------------------
  419.   alias execute_action_n01 execute_action
  420.   def execute_action
  421.     # 技能、物品扩张时如果设定了行动前不清空
  422.     if @active_battler.action.kind != 0
  423.       obj = @active_battler.action.skill if @active_battler.action.kind == 1
  424.       obj = @active_battler.action.item if @active_battler.action.kind == 2
  425.       if obj.extension.include?("行动前不闪光")
  426.         @active_battler.white_flash = false
  427.       end  
  428.     end
  429.     # 角色主动化
  430.     @active_battler.active = true
  431.     execute_action_n01
  432.     # 有技能连发时、行动继续
  433.     if @active_battler.derivation != 0
  434.       @active_battler.action.kind = 1
  435.       @active_battler.action.skill_id = @active_battler.derivation
  436.       @action_battlers.unshift(@active_battler)
  437.     end
  438.     # 有复数行动的敌方时、决定下个行动
  439.     if !@active_battler.actor? && @active_battler.act_time != 0
  440.       @active_battler.make_action
  441.       @active_battler.act_time -= 1
  442.     end
  443.   end
  444.   #--------------------------------------------------------------------------
  445.   # ● 回合完毕  ※再定义
  446.   #--------------------------------------------------------------------------
  447.   def turn_end
  448.     for member in $game_party.members + $game_troop.members
  449.       member.clear_action_results
  450.       next unless member.exist?
  451.       member.slip_damage = false
  452.       actor = member.actor?
  453.       damage = 0
  454.       # 确认是否有0回合解除的状态
  455.       for state in member.states
  456.         member.remove_state(state.id) if state.extension.include?("0回合解除")
  457.         # 实行连续伤害 state = [ 对象, 定数, 比例, POP, 战斗不能许可]
  458.         next unless state.extension.include?("连续伤害")
  459.         for ext in state.slip_extension
  460.           if ext[0] == "hp"
  461.             base_damage = ext[1] + member.maxhp * ext[2] / 100
  462.             damage += base_damage + base_damage * (rand(5) - rand(5)) / 100
  463.             slip_pop = ext[3]
  464.             slip_dead = ext[4]
  465.             slip_damage_flug = true
  466.             member.slip_damage = true
  467.           end
  468.         end  
  469.       end
  470.       # 默认的连续伤害
  471.       if member.slip_damage? && member.exist? && !slip_damage_flug
  472.         damage += member.apply_variance(member.maxhp / 10, 10)
  473.         slip_dead = false
  474.         slip_pop = true
  475.         slip_damage_flug = true
  476.         member.slip_damage = true
  477.       end
  478.       damage = member.hp - 1 if damage >= member.hp && slip_dead = false
  479.       member.hp -= damage
  480.       @spriteset.set_damage_pop(actor, member.index, damage) if slip_pop
  481.       member.perform_collapse if member.dead? && member.slip_damage
  482.       member.clear_action_results
  483.     end
  484.     @status_window.refresh
  485.     # HP和MP的定时改变
  486.     wait(55) if slip_damage_flug
  487.     slip_damage_flug = false
  488.     for member in $game_party.members + $game_troop.members
  489.       member.clear_action_results
  490.       next unless member.exist?
  491.       actor = member.actor?
  492.       mp_damage = 0
  493.       for state in member.states
  494.         next unless state.extension.include?("连续伤害")
  495.         for ext in state.slip_extension
  496.           if ext[0] == "mp"
  497.             base_damage = ext[1] + member.maxmp * ext[2] / 100
  498.             mp_damage += base_damage + base_damage * (rand(5) - rand(5)) / 100
  499.             slip_pop = ext[2]
  500.             slip_damage_flug = true
  501.           end
  502.         end
  503.         member.mp_damage = mp_damage
  504.         member.mp -= mp_damage
  505.         @spriteset.set_damage_pop(actor, member.index, mp_damage) if slip_pop
  506.       end   
  507.       member.clear_action_results
  508.     end
  509.     @status_window.refresh
  510.     # 伤害和回復的定时改变
  511.     wait(55) if slip_damage_flug
  512.     # 是否有自动回复
  513.     for member in $game_party.members
  514.       if member.auto_hp_recover and member.exist?
  515.         plus_hp = member.maxhp / 20
  516.         member.hp += plus_hp
  517.         @spriteset.set_damage_pop(true, member.index, plus_hp * -1)
  518.         plus_hp_flug = true
  519.       end
  520.       member.clear_action_results
  521.     end
  522.     @status_window.refresh
  523.     wait(55) if plus_hp_flug
  524.     @help_window.dispose if @help_window != nil
  525.     @help_window = nil
  526.     move2_info_viewport
  527.     $game_troop.turn_ending = true
  528.     $game_troop.preemptive = false
  529.     $game_troop.surprise = false
  530.     process_battle_event
  531.     $game_troop.turn_ending = false
  532.     start_party_command_selection
  533.   end
  534.   #--------------------------------------------------------------------------
  535.   # ● 战斗行动的实行 : 攻击  ※再定义
  536.   #--------------------------------------------------------------------------
  537.   def execute_action_attack
  538.     if @active_battler.actor?
  539.       if @active_battler.weapon_id == 0
  540.         action = @active_battler.non_weapon
  541.         # 行动中不会死的队员全员为不死身化
  542.         immortaling
  543.       else  
  544.         action = $data_weapons[@active_battler.weapon_id].base_action
  545.         # 用赋予战斗不能的武器来分歧不死身设定
  546.         if $data_weapons[@active_battler.weapon_id].state_set.include?(1)
  547.           for member in $game_party.members + $game_troop.members
  548.             next if member.immortal
  549.             next if member.dead?
  550.             member.dying = true
  551.           end
  552.         else
  553.           immortaling
  554.         end
  555.       end  
  556.     else
  557.       if @active_battler.weapon == 0
  558.         action = @active_battler.base_action
  559.         immortaling
  560.       else
  561.         action = $data_weapons[@active_battler.weapon].base_action
  562.         if $data_weapons[@active_battler.weapon].state_set.include?(1)
  563.           for member in $game_party.members + $game_troop.members
  564.             next if member.immortal
  565.             next if member.dead?
  566.             member.dying = true
  567.           end
  568.         else
  569.           immortaling
  570.         end
  571.       end  
  572.     end
  573.     target_decision
  574.     @spriteset.set_action(@active_battler.actor?, @active_battler.index, action)
  575.     playing_action
  576.   end
  577.   #--------------------------------------------------------------------------
  578.   # ● 战斗行动的实行 : 防御  ※再定义
  579.   #--------------------------------------------------------------------------
  580.   def execute_action_guard
  581.     @help_window.set_text("防御", 1)
  582.     @help_window.visible = true
  583.     # 解除角色的主动化
  584.     @active_battler.active = false
  585.     wait(45)
  586.     @help_window.visible = false
  587.   end
  588.   #--------------------------------------------------------------------------
  589.   # ● 战斗行动的实行 : 逃走
  590.   #--------------------------------------------------------------------------
  591.   def execute_action_escape
  592.     @spriteset.set_action(false, @active_battler.index, @active_battler.run_success)
  593.     @help_window.set_text("逃走", 1)
  594.     @help_window.visible = true
  595.     # 解除角色的主动化
  596.     @active_battler.active = false
  597.     @active_battler.escape
  598.     Sound.play_escape
  599.     wait(45)
  600.     @help_window.visible = false
  601.   end
  602.   #--------------------------------------------------------------------------
  603.   # ● 战斗行动的实行 : 待机  ※再定义
  604.   #--------------------------------------------------------------------------
  605.   def execute_action_wait
  606.     # 解除角色的主动化
  607.     @active_battler.active = false
  608.     wait(45)
  609.   end   
  610.   #--------------------------------------------------------------------------
  611.   # ● 战斗行动的实行 : 技能  ※再定义
  612.   #--------------------------------------------------------------------------
  613.   def execute_action_skill
  614.     skill = @active_battler.action.skill
  615.     # 用赋予战斗不能的技能来分歧不死身设定
  616.     if skill.plus_state_set.include?(1)
  617.       for member in $game_party.members + $game_troop.members
  618.         next if member.immortal
  619.         next if member.dead?
  620.         member.dying = true
  621.       end
  622.     else
  623.       # 行动中不会死的队员全员为不死身化
  624.       immortaling
  625.     end
  626.     # 判别技能使用可能
  627.     return unless @active_battler.skill_can_use?(skill)
  628.     # 决定目标
  629.     target_decision(skill)
  630.     # 动作开始
  631.     @spriteset.set_action(@active_battler.actor?, @active_battler.index, skill.base_action)
  632.     # 帮助窗口中显示技能名
  633.     pop_help(skill)
  634.     # 动作中
  635.     playing_action
  636.     # 技能成本消费
  637.     @active_battler.consum_skill_cost(skill)
  638.     # 还原状态窗口
  639.     @status_window.refresh
  640.     # 取得公共事件
  641.     $game_temp.common_event_id = skill.common_event_id
  642.   end
  643.   #--------------------------------------------------------------------------
  644.   # ● 战斗行动的实行 : 物品  ※再定义
  645.   #--------------------------------------------------------------------------
  646.   def execute_action_item
  647.     item = @active_battler.action.item
  648.     # 用赋予战斗不能的物品来分歧不死身设定
  649.     if item.plus_state_set.include?(1)
  650.       for member in $game_party.members + $game_troop.members
  651.         next if member.immortal
  652.         next if member.dead?
  653.         member.dying = true
  654.       end
  655.     else
  656.       # 行动中不会死的队员全员为不死身化
  657.       immortaling
  658.     end
  659.     $game_party.consume_item(item)
  660.     target_decision(item)
  661.     @spriteset.set_action(@active_battler.actor?, @active_battler.index, item.base_action)
  662.     pop_help(item)
  663.     playing_action
  664.     $game_temp.common_event_id = item.common_event_id
  665.   end
  666.   #--------------------------------------------------------------------------
  667.   # ● 决定目标
  668.   #--------------------------------------------------------------------------
  669.   def target_decision(obj = nil)
  670.     @targets = @active_battler.action.make_targets
  671.     # 目标不存在时、动作中断
  672.     if @targets.size == 0
  673.       action = @active_battler.recover_action
  674.       @spriteset.set_action(@active_battler.actor?, @active_battler.index, action)
  675.     end
  676.     if obj != nil
  677.       # 如果默认了设定复数回合攻击时变换成单体目标
  678.       if obj.for_two? or obj.for_three? or obj.dual?
  679.         @targets = [@targets[0]]
  680.       end
  681.       # 随机目标时、选择的一体保持在随机范围
  682.       if obj.extension.include?("随机目标")
  683.         randum_targets = @targets.dup
  684.         @targets = [randum_targets[rand(randum_targets.size)]]
  685.       end
  686.     end
  687.     # 目标情报发送到角色精灵
  688.     @spriteset.set_target(@active_battler.actor?, @active_battler.index, @targets)
  689.   end   
  690.   #--------------------------------------------------------------------------
  691.   # ● 实行动作中
  692.   #--------------------------------------------------------------------------
  693.   def playing_action
  694.     loop do
  695.       update_basic
  696.       # 查看被归纳在主动角色的动作情报
  697.       action = @active_battler.play
  698.       next if action == 0
  699.       @active_battler.play = 0
  700.       if action[0] == "个别处理"
  701.         individual
  702.       elsif action == "击倒许可"
  703.         unimmortaling
  704.       elsif action == "解除主动"
  705.         break action_end
  706.       elsif action == "完毕"
  707.         break action_end
  708.       elsif action[0] == "对象动画"
  709.         damage_action(action[1])
  710.       end
  711.     end  
  712.   end
  713.   #--------------------------------------------------------------------------
  714.   # ● 个别处理
  715.   #--------------------------------------------------------------------------
  716.   def individual
  717.     # 保持目标情报
  718.     @individual_target = @targets
  719.     @stand_by_target = @targets.dup
  720.   end
  721.   #--------------------------------------------------------------------------
  722.   # ● 击倒禁止
  723.   #--------------------------------------------------------------------------
  724.   def immortaling
  725.     # 赋予全员不死身
  726.     for member in $game_party.members + $game_troop.members
  727.       # 如果不能战斗时跳过处理
  728.       next if member.dead?
  729.       # 有事件等设定不死身创立解除无效的标志
  730.       member.non_dead = true if member.immortal
  731.       member.immortal = true
  732.     end  
  733.   end  
  734.   #--------------------------------------------------------------------------
  735.   # ● 击倒许可
  736.   #--------------------------------------------------------------------------
  737.   def unimmortaling
  738.     # 个别处理中无击败许可
  739.     return if @active_battler.individual
  740.     # 解除全员的不死身化(用事件设定的不死身除外)
  741.     for member in $game_party.members + $game_troop.members
  742.       if member.dying
  743.         member.dying = false
  744.         if member.dead? or member.hp == 0
  745.           member.add_state(1)
  746.           member.perform_collapse
  747.         end
  748.       end
  749.       next if member.non_dead
  750.       next if member.dead?
  751.       member.immortal = false
  752.       member.add_state(1) if member.hp == 0
  753.       member.perform_collapse
  754.     end
  755.     # 在这个时候反映待机动作
  756.     @targets = @stand_by_target if @stand_by_target != nil
  757.     return if @targets == nil or @targets.size == 0
  758.     for target in @targets
  759.       @spriteset.set_stand_by_action(target.actor?, target.index)
  760.       # 确认自动复活
  761.       next unless target.hp == 0
  762.       resurrection(target)
  763.     end  
  764.   end
  765.   #--------------------------------------------------------------------------
  766.   # ● 自动复活
  767.   #--------------------------------------------------------------------------
  768.   def resurrection(target)
  769.     for state in target.states
  770.       for ext in state.extension
  771.         name = ext.split('')
  772.         next unless name[0] == "自"
  773.         wait(50)
  774.         name = name.join
  775.         name.slice!("自动复活/")
  776.         target.hp = target.maxhp * name.to_i / 100
  777.         target.remove_state(1)
  778.         target.remove_state(state.id)
  779.         target.animation_id = N01::RESURRECTION
  780.         target.animation_mirror = true if $back_attack
  781.         @status_window.refresh
  782.         wait($data_animations[N01::RESURRECTION].frame_max * 4)
  783.       end  
  784.     end
  785.   end
  786.   #--------------------------------------------------------------------------
  787.   # ● 魔法反射・无效
  788.   #--------------------------------------------------------------------------
  789.   def magic_reflection(target, obj)
  790.     return if obj.physical_attack
  791.     for state in target.states
  792.       for ext in state.extension
  793.         name = ext.split('')
  794.         next unless name[0] == "魔"
  795.         if name[2] == "反"
  796.           name = name.join
  797.           name.slice!("魔法反射/")
  798.           target.animation_id = name.to_i
  799.           target.animation_mirror = true if $back_attack
  800.           @reflection = true
  801.         else
  802.           name = name.join
  803.           name.slice!("魔法无效/")
  804.           target.animation_id = name.to_i
  805.           target.animation_mirror = true if $back_attack
  806.           @invalid = true
  807.         end  
  808.       end  
  809.     end
  810.   end
  811.   #--------------------------------------------------------------------------
  812.   # ● 物理反射・无效
  813.   #--------------------------------------------------------------------------
  814.   def physics_reflection(target, obj)
  815.     return if obj != nil && !obj.physical_attack
  816.     for state in target.states
  817.       for ext in state.extension
  818.         name = ext.split('')
  819.         next unless name[0] == "物"
  820.         if name[2] == "反"
  821.           name = name.join
  822.           name.slice!("物理反射/")
  823.           target.animation_id = name.to_i
  824.           target.animation_mirror = true if $back_attack
  825.           @reflection = true
  826.         else
  827.           name = name.join
  828.           name.slice!("物理无效/")
  829.           target.animation_id = name.to_i
  830.           target.animation_mirror = true if $back_attack
  831.           @invalid = true
  832.         end
  833.       end  
  834.     end
  835.   end
  836.   #--------------------------------------------------------------------------
  837.   # ● 技能成本吸收
  838.   #--------------------------------------------------------------------------
  839.   def absorb_cost(target, obj)
  840.     for state in target.states
  841.       if state.extension.include?("成本吸收")
  842.         cost = @active_battler.calc_mp_cost(obj)
  843.         # 区分为SP消费和HP消费
  844.         return target.hp += cost if obj.extension.include?("HP消耗")
  845.         return target.mp += cost
  846.       end  
  847.     end
  848.   end
  849.   #--------------------------------------------------------------------------
  850.   # ● 吸收处理
  851.   #--------------------------------------------------------------------------
  852.   def absorb_attack(obj, target, index, actor)
  853.     absorb = target.hp_damage
  854.     absorb = target.mp_damage if target.mp_damage != 0
  855.     # 目标是复数同时吸收处理
  856.     @wide_attack = true if obj.scope == 2 or obj.scope == 4 or obj.scope == 6 or obj.extension.include?("全区域")
  857.     if @wide_attack && @absorb == nil && @targets.size != 1
  858.       # 返还吸收的部分
  859.       @active_battler.hp -= @active_battler.hp_damage
  860.       @active_battler.mp -= @active_battler.mp_damage
  861.       # 之后加算吸收返还的数值
  862.       @absorb = absorb
  863.       @absorb_target_size = @targets.size - 2
  864.     elsif @absorb != nil && @absorb_target_size > 0
  865.       @active_battler.hp -= @active_battler.hp_damage
  866.       @active_battler.mp -= @active_battler.mp_damage
  867.       @absorb += absorb
  868.       @absorb_target_size -= 1
  869.     # 处理复数目标的最重吸收
  870.     elsif @absorb != nil
  871.       # 返还吸收的部分
  872.       @active_battler.hp -= @active_battler.hp_damage
  873.       @active_battler.mp -= @active_battler.mp_damage
  874.       @absorb += absorb
  875.       # 在这里反映全部吸收部分
  876.       @active_battler.hp_damage = -@absorb
  877.       @active_battler.mp_damage = -@absorb if target.mp_damage != 0
  878.       @active_battler.hp -= @active_battler.hp_damage
  879.       @active_battler.mp -= @active_battler.mp_damage
  880.       # 吸收量是0时吸收者方面的处理
  881.       absorb_action = ["absorb", nil, false] if @absorb == 0
  882.       absorb_action = [nil, nil, false] if @absorb != 0
  883.       @spriteset.set_damage_action(actor, index, absorb_action)
  884.       @active_battler.perform_collapse
  885.       @absorb = nil
  886.       @absorb_target_size = nil
  887.     # 单体吸收的处理
  888.     else
  889.       if N01::ABSORB_DAMAGE
  890.         # 返还吸收的部分
  891.         @active_battler.hp += @active_battler.hp_damage
  892.         @active_battler.mp += @active_battler.mp_damage
  893.         # 反映吸收
  894.         @active_battler.hp_damage = -absorb
  895.         @active_battler.mp_damage = -absorb if target.mp_damage != 0
  896.         @active_battler.hp -= @active_battler.hp_damage
  897.         @active_battler.mp -= @active_battler.mp_damage
  898.       end
  899.       # 吸收量是0时吸收者方面的处理
  900.       absorb_action = ["absorb", nil, false] if absorb == 0
  901.       absorb_action = [nil, nil, false] if absorb != 0
  902.       @spriteset.set_damage_action(actor, index, absorb_action)
  903.       # 逆向吸收时HP为0时
  904.       @absorb_dead = true if @active_battler.hp == 0 && !@active_battler.non_dead
  905.     end
  906.     # 吸收量是0时对象者方面的处理
  907.     return 0 if absorb == 0
  908.   end
  909.   #--------------------------------------------------------------------------
  910.   # ● 动作完毕
  911.   #--------------------------------------------------------------------------
  912.   def action_end
  913.     # 初期化
  914.     @individual_target = nil
  915.     @help_window.visible = false if @help_window != nil && @help_window.visible
  916.     @active_battler.active = false
  917.     @active_battler.clear_action_results
  918.     # 慎重起见解除不死身化
  919.     unimmortaling
  920.     # 被反射时
  921.     if @active_battler.reflex != nil
  922.       if @active_battler.action.skill?
  923.         obj = @active_battler.action.skill
  924.         @active_battler.perfect_skill_effect(@active_battler, obj)
  925.       elsif @active_battler.action.item?
  926.         obj = @active_battler.action.item
  927.         @active_battler.item_effect(@active_battler, obj)
  928.       else
  929.         @active_battler.perfect_attack_effect(@active_battler)
  930.       end
  931.       pop_damage(@active_battler, obj, @active_battler.reflex)
  932.       @active_battler.perform_collapse
  933.       @active_battler.reflex = nil
  934.       wait(N01::COLLAPSE_WAIT)
  935.     end
  936.     #因逆向吸收战斗不能时
  937.     if @absorb_dead
  938.       @active_battler.perform_collapse
  939.       @absorb_dead = false
  940.       wait(N01::COLLAPSE_WAIT)
  941.     end
  942.     # 缩短到下次行动前的等待
  943.     wait(N01::ACTION_WAIT)
  944.   end  
  945.   #--------------------------------------------------------------------------
  946.   # ● 伤害处理
  947.   #--------------------------------------------------------------------------
  948.   def damage_action(action)
  949.     # 单独处理时目标一个一个发出
  950.     @targets = [@individual_target.shift] if @active_battler.individual
  951.     # 技能时
  952.     if @active_battler.action.skill?
  953.       obj = @active_battler.action.skill
  954.       for target in @targets
  955.         return if target == nil
  956.         return if target.dead? && !obj.for_dead_friend?
  957.         # HP为0时战斗不能復活以外不MISS
  958.         target.revival = true if obj.for_dead_friend?
  959.         if target.hp == 0 && !obj.for_dead_friend?
  960.           target.perfect_skill_effect(@active_battler, obj)
  961.         # 确认必中
  962.         elsif obj.extension.include?("必中")
  963.           target.perfect_skill_effect(@active_battler, obj)
  964.         else
  965.           # 确认反射
  966.           magic_reflection(target, obj) unless obj.extension.include?("无视反射")
  967.           physics_reflection(target, obj) unless obj.extension.include?("无视反射")
  968.           # 计算伤害
  969.           target.skill_effect(@active_battler, obj) unless @reflection or @invalid
  970.         end  
  971.         pop_damage(target, obj, action) unless @reflection or @invalid
  972.         # 确认成本吸收
  973.         absorb_cost(target, obj)
  974.         # 获取反射动作
  975.         @active_battler.reflex = action if @reflection
  976.         @reflection = false
  977.         @invalid = false
  978.       end
  979.     # 物品时
  980.     elsif @active_battler.action.item?
  981.       obj = @active_battler.action.item
  982.       for target in @targets
  983.         return if target == nil
  984.         return if target.dead? && !obj.for_dead_friend?
  985.         target.revival = true if obj.for_dead_friend?
  986.         if target.hp == 0 && !obj.for_dead_friend?
  987.           target.perfect_item_effect(@active_battler, obj)
  988.         elsif obj.extension.include?("必中")
  989.           target.perfect_item_effect(@active_battler, obj)
  990.         else
  991.           magic_reflection(target, obj) unless obj.extension.include?("无视反射")
  992.           physics_reflection(target, obj) unless obj.extension.include?("无视反射")
  993.           target.item_effect(@active_battler, obj) unless @reflection or @invalid
  994.         end
  995.         pop_damage(target, obj, action) unless @reflection or @invalid
  996.         @active_battler.reflex = action if @reflection
  997.         @reflection = false
  998.         @invalid = false
  999.       end
  1000.     # 通常攻击时
  1001.     else
  1002.       for target in @targets
  1003.         return if target == nil or target.dead?
  1004.         physics_reflection(target, nil)
  1005.         target.perfect_attack_effect(@active_battler) if target.hp <= 0
  1006.         target.attack_effect(@active_battler) unless target.hp <= 0 or @reflection or @invalid
  1007.         pop_damage(target, nil, action) unless @reflection or @invalid
  1008.         # 获取反射动作
  1009.         @active_battler.reflex = action if @reflection
  1010.         @reflection = false
  1011.         @invalid = false
  1012.       end
  1013.     end
  1014.     # 还原状态窗口
  1015.     @status_window.refresh
  1016.     # 考虑连续性懂得随机目标、立刻选择下个目标
  1017.     return if obj == nil
  1018.     target_decision(obj) if obj.extension.include?("随机目标")
  1019.   end
  1020.   #--------------------------------------------------------------------------
  1021.   # ● 伤害表示  action = [动画ID,反转标志,动作许可]
  1022.   #--------------------------------------------------------------------------
  1023.   def pop_damage(target, obj, action)
  1024.     index = @active_battler.index
  1025.     actor = @active_battler.actor?
  1026.     if obj != nil
  1027.       # 技能或者物品是吸收属性时
  1028.       absorb = absorb_attack(obj, target, index, actor) if obj.absorb_damage
  1029.       action.push(true) if absorb == 0
  1030.       # 扩张设定为伤害动作禁止时
  1031.       action[2] = false if obj.extension.include?("禁止伤害动作")
  1032.     end
  1033.     # 还原对象
  1034.     @spriteset.set_damage_action(target.actor?, target.index, action)
  1035.   end
  1036. end  
  1037. #==============================================================================
  1038. # ■ Game_BattleAction
  1039. #------------------------------------------------------------------------------
  1040. #  战斗行动处理的类。
  1041. #==============================================================================
  1042. class Game_BattleAction
  1043.   #--------------------------------------------------------------------------
  1044.   # ● 判定行动是否有效  ※再定义
  1045.   #--------------------------------------------------------------------------
  1046.   def valid?
  1047.     return false if nothing?                      # 什么都不作
  1048.     return true if @forcing                       # 强制行动中
  1049.     return false unless battler.movable?          # 行动不能
  1050.     if skill?                                     # 技能
  1051.       if battler.derivation != 0
  1052.         battler.derivation = 0
  1053.         return true
  1054.       end  
  1055.       return false unless battler.skill_can_use?(skill)
  1056.     elsif item?                                   # 物品
  1057.       return false unless friends_unit.item_can_use?(item)
  1058.     end
  1059.     return true
  1060.   end
  1061.   #--------------------------------------------------------------------------
  1062.   # ● 作成目标的排列  ※再定义
  1063.   #--------------------------------------------------------------------------
  1064.   def make_targets
  1065.     if attack?
  1066.       return make_attack_targets
  1067.     elsif skill?
  1068.       targets = make_obj_targets(skill)
  1069.       targets = make_obj_targets2(skill, targets) if skill.extension != ["无"]
  1070.       return targets
  1071.     elsif item?
  1072.       targets = make_obj_targets(item)
  1073.       targets = make_obj_targets2(item, targets) if item.extension != ["无"]
  1074.       return targets
  1075.     end
  1076.   end
  1077.   #--------------------------------------------------------------------------
  1078.   # ● 作成技能或是物品的目标的扩张
  1079.   #--------------------------------------------------------------------------
  1080.   def make_obj_targets2(obj, targets)
  1081.     if obj.extension.include?("全区域")
  1082.       targets = []
  1083.       targets += opponents_unit.existing_members
  1084.       targets += friends_unit.existing_members
  1085.     end
  1086.     if obj.extension.include?("自身以外")
  1087.       targets.delete($game_party.members[battler.index]) if battler.actor?
  1088.       targets.delete($game_troop.members[battler.index]) unless battler.actor?
  1089.     end
  1090.     return targets.compact
  1091.   end
  1092. end
  1093. #==============================================================================
  1094. # ■ Sprite_Base
  1095. #------------------------------------------------------------------------------
  1096. #  追加了动画的表示处理的精灵的类。
  1097. #==============================================================================
  1098. class Sprite_Base < Sprite
  1099.   #--------------------------------------------------------------------------
  1100.   # ● 动画的更新 动画追随精灵
  1101.   #--------------------------------------------------------------------------
  1102.   alias update_animation_n01 update_animation
  1103.   def update_animation
  1104.     @animation_ox = x - ox + width / 2
  1105.     @animation_oy = y - oy + height / 2
  1106.     update_animation_n01
  1107.   end
  1108. end  
  1109. #==============================================================================
  1110. # ■ Spriteset_Battle
  1111. #------------------------------------------------------------------------------
  1112. #  整理战斗画面的精灵的类。
  1113. #==============================================================================
  1114. class Spriteset_Battle
  1115.   #--------------------------------------------------------------------------
  1116.   # ● 敌方精灵的作成
  1117.   #--------------------------------------------------------------------------
  1118.   def create_enemies
  1119.     @enemy_sprites = []
  1120.     for i in 0...$game_troop.members.size
  1121.       enemy = $game_troop.members[i]
  1122.       @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  1123.       # 战斗开始启动动作
  1124.       @enemy_sprites[i].opacity = 0 if $game_troop.members[i].hidden
  1125.       @enemy_sprites[i].first_action if $game_troop.members[i] != nil
  1126.     end
  1127.   end
  1128.   #--------------------------------------------------------------------------
  1129.   # ● 主人公精灵的作成
  1130.   #--------------------------------------------------------------------------
  1131.   def create_actors
  1132.     @actor_sprites = []
  1133.     # 准备成员最大数精灵
  1134.     member = N01::MAX_MEMBER
  1135.     for i in 0...member
  1136.       actor = $game_party.members[i]
  1137.       @actor_sprites.push(Sprite_Battler.new(@viewport1, actor))
  1138.       # 战斗开始启动动作
  1139.       @actor_sprites[i].first_action if $game_party.members[i] != nil
  1140.     end
  1141.   end
  1142.   #--------------------------------------------------------------------------
  1143.   # ● 战斗层精灵的作成
  1144.   #--------------------------------------------------------------------------
  1145.   def create_battlefloor
  1146.     @battlefloor_sprite = Sprite.new(@viewport1)
  1147.     @battlefloor_sprite.bitmap = Cache.system("BattleFloor")
  1148.     @battlefloor_sprite.x = N01::FLOOR[0]
  1149.     @battlefloor_sprite.y = N01::FLOOR[1]
  1150.     @battlefloor_sprite.z = N01::FLOOR[2]
  1151.     @battlefloor_sprite.opacity = 128
  1152.     # 偷袭时時、反转层面和背景
  1153.     back_attack
  1154.     if $back_attack
  1155.       @battlefloor_sprite.mirror = true
  1156.       @battleback_sprite.mirror = true
  1157.       $game_troop.surprise = true
  1158.     else  
  1159.       $game_troop.surprise = false
  1160.     end  
  1161.   end  
  1162.   #--------------------------------------------------------------------------
  1163.   # ● 背部攻击
  1164.   #--------------------------------------------------------------------------
  1165.   def back_attack  
  1166.     # 強制背部攻击时标志ON
  1167.     for i in 0...N01::BACK_ATTACK_SWITCH.size
  1168.       return $back_attack = true if $game_switches[N01::BACK_ATTACK_SWITCH[i]]
  1169.     end
  1170.     # 如果没发生偷袭时将中断处理
  1171.     return $back_attack = false unless $game_troop.surprise && N01::BACK_ATTACK
  1172.     # 确认根据装备等背部攻击的无效化
  1173.     for actor in $game_party.members
  1174.       return $back_attack = false if N01::NON_BACK_ATTACK_WEAPONS.include?(actor.weapon_id)
  1175.       return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR1.include?(actor.armor1_id)
  1176.       return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR2.include?(actor.armor2_id)
  1177.       return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR3.include?(actor.armor3_id)
  1178.       return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR4.include?(actor.armor4_id)
  1179.       for i in 0...N01::NON_BACK_ATTACK_SKILLS.size
  1180.         return $back_attack = false if actor.skill_id_learn?(N01::NON_BACK_ATTACK_SKILLS[i])
  1181.       end  
  1182.     end
  1183.     # 发生背部攻击
  1184.     $back_attack = true
  1185.   end
  1186.   #--------------------------------------------------------------------------
  1187.   # ● 主人公精灵的更新  ※再定义
  1188.   #--------------------------------------------------------------------------
  1189.   def update_actors
  1190.     for i in 0...$game_party.members.size
  1191.       if @actor_sprites[i].battler.id != $game_party.members[i].id
  1192.         @actor_sprites[i].battler = $game_party.members[i]
  1193.         @actor_sprites[i].make_battler
  1194.         @actor_sprites[i].first_action
  1195.       end  
  1196.     end  
  1197.     for sprite in @actor_sprites
  1198.       sprite.update
  1199.     end
  1200.   end
  1201.   #--------------------------------------------------------------------------
  1202.   # ● 伤害动作组合 
  1203.   #--------------------------------------------------------------------------  
  1204.   def set_damage_action(actor, index, action)
  1205.     @actor_sprites[index].damage_action(action) if actor
  1206.     @enemy_sprites[index].damage_action(action) unless actor
  1207.   end
  1208.   #--------------------------------------------------------------------------
  1209.   # ● 伤害POP组合 
  1210.   #--------------------------------------------------------------------------  
  1211.   def set_damage_pop(actor, index, damage)
  1212.     @actor_sprites[index].damage_pop(damage) if actor
  1213.     @enemy_sprites[index].damage_pop(damage) unless actor
  1214.   end
  1215.   #--------------------------------------------------------------------------
  1216.   # ● 目标组合
  1217.   #--------------------------------------------------------------------------  
  1218.   def set_target(actor, index, target)
  1219.     @actor_sprites[index].get_target(target) if actor
  1220.     @enemy_sprites[index].get_target(target) unless actor
  1221.   end
  1222.   #--------------------------------------------------------------------------
  1223.   # ● 动作组合
  1224.   #--------------------------------------------------------------------------  
  1225.   def set_action(actor, index, kind)
  1226.     @actor_sprites[index].start_action(kind) if actor
  1227.     @enemy_sprites[index].start_action(kind) unless actor
  1228.   end  
  1229.   #--------------------------------------------------------------------------
  1230.   # ● 待机动作组合
  1231.   #--------------------------------------------------------------------------  
  1232.   def set_stand_by_action(actor, index)
  1233.     @actor_sprites[index].push_stand_by if actor
  1234.     @enemy_sprites[index].push_stand_by unless actor
  1235.   end  
  1236.   #--------------------------------------------------------------------------
  1237.   # ● 光标移动的组合
  1238.   #--------------------------------------------------------------------------  
  1239.   def set_cursor(actor, index)
  1240.     return [@actor_sprites[index].x, @actor_sprites[index].y] if actor
  1241.     return [@enemy_sprites[index].x, @enemy_sprites[index].y] unless actor
  1242.   end
  1243. end
  1244. #==============================================================================
  1245. # ■ Sprite_MoveAnime
  1246. #------------------------------------------------------------------------------
  1247. #  动画飞出用的精灵。
  1248. #==============================================================================
  1249. class Sprite_MoveAnime < Sprite_Base
  1250.   #--------------------------------------------------------------------------
  1251.   # ● 公开变数
  1252.   #--------------------------------------------------------------------------
  1253.   attr_accessor :battler
  1254.   attr_accessor :base_x   # 自身的基本X坐标
  1255.   attr_accessor :base_y   # 自身的基本Y坐标
  1256.   #--------------------------------------------------------------------------
  1257.   # ● 客观初期化
  1258.   #--------------------------------------------------------------------------
  1259.   def initialize(viewport,battler = nil)
  1260.     super(viewport)
  1261.     @battler = battler
  1262.     self.visible = false
  1263.     @base_x = 0
  1264.     @base_y = 0
  1265.     @move_x = 0                # 移动后的X坐标
  1266.     @move_y = 0                # 移动后Y坐标
  1267.     @moving_x = 0              # 1单位相当移动的X坐标
  1268.     @moving_y = 0              # 1单位相当移动的Y坐标
  1269.     @orbit = 0                 # 圆轨道
  1270.     @orbit_plus = 0            # 加算的圆轨道
  1271.     @orbit_time = 0            # 圆轨道计算时间
  1272.     @through = false           # 是否贯通
  1273.     @finish = false            # 移动完毕的标志
  1274.     @time = 0                  # 一动时间
  1275.     @angle = 0                 # 武器的角度
  1276.     @angling = 0               # 1单位相当移动的武器的角度
  1277.   end
  1278.   #--------------------------------------------------------------------------
  1279.   # ● 获取动作
  1280.   #--------------------------------------------------------------------------  
  1281.   def anime_action(id,mirror,distanse_x,distanse_y,type,speed,orbit,weapon,icon_index,icon_weapon)
  1282.     # 算出1单位相当的移动距离
  1283.     @time = speed
  1284.     @moving_x = distanse_x / speed
  1285.     @moving_y = distanse_y / speed
  1286.     # 是否贯通
  1287.     @through = true if type == 1
  1288.     # 获取圆轨道
  1289.     @orbit_plus = orbit
  1290.     @orbit_time = @time
  1291.     # 有无武器图片
  1292.     if weapon != ""
  1293.       action = N01::ANIME[weapon].dup
  1294.       @angle = action[0]
  1295.       end_angle = action[1]
  1296.       time = action[2]
  1297.       # 调出1单位相当的旋转角度
  1298.       @angling = (end_angle - @angle)/ time
  1299.       # 取得开始角度
  1300.       self.angle = @angle
  1301.       # 显示武器图片
  1302.       self.mirror = mirror
  1303.       if icon_weapon
  1304.         self.bitmap = Cache.system("Iconset")
  1305.         self.src_rect.set(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  1306.         self.ox = 12
  1307.         self.oy = 12
  1308.       else
  1309.         self.bitmap = Cache.character(icon_index)
  1310.         self.ox = self.bitmap.width / 2
  1311.         self.oy = self.bitmap.height / 2
  1312.       end  
  1313.       self.visible = true
  1314.       # 显示在角色面前
  1315.       self.z = 1000
  1316.     end  
  1317.     # 最初不动只显示一次
  1318.     self.x = @base_x + @move_x
  1319.     self.y = @base_y + @move_y + @orbit
  1320.     if id != 0
  1321.       animation = $data_animations[id]
  1322.       start_animation(animation, mirror)
  1323.     end
  1324.   end  
  1325.   #--------------------------------------------------------------------------
  1326.   # ● 变化了的移动组合
  1327.   #--------------------------------------------------------------------------  
  1328.   def action_reset
  1329.     @moving_x = @moving_y = @move_x = @move_y = @base_x = @base_y = @orbit = 0
  1330.     @orbit_time = @angling = @angle = 0   
  1331.     @through = self.visible = @finish = false
  1332.     dispose_animation
  1333.   end   
  1334.   #--------------------------------------------------------------------------
  1335.   # ● 贯通完毕
  1336.   #--------------------------------------------------------------------------  
  1337.   def finish?
  1338.     return @finish
  1339.   end
  1340.   #--------------------------------------------------------------------------
  1341.   # ● 单位更新
  1342.   #--------------------------------------------------------------------------
  1343.   def update
  1344.     super
  1345.     # 时间消耗
  1346.     @time -= 1
  1347.     # 时间内指定的移动
  1348.     if @time >= 0
  1349.       @move_x += @moving_x
  1350.       @move_y += @moving_y
  1351.       # 计算圆轨道
  1352.       if @time < @orbit_time / 2
  1353.         @orbit_plus = @orbit_plus * 5 / 4
  1354.       elsif @time == @orbit_time / 2
  1355.         @orbit_plus *= -1
  1356.       else
  1357.         @orbit_plus = @orbit_plus * 2 / 3
  1358.       end  
  1359.       @orbit += @orbit_plus
  1360.     end   
  1361.     # 就算时间完毕如果是贯穿的话也会继续直进
  1362.     @time = 100 if @time < 0 && @through
  1363.     @finish = true if @time < 0 && !@through
  1364.     # 更新精灵的坐标
  1365.     self.x = @base_x + @move_x
  1366.     self.y = @base_y + @move_y + @orbit
  1367.     # 贯穿时、从画面消失的完毕标志ON
  1368.     if self.x < -200 or self.x > 840 or self.y < -200 or self.y > 680
  1369.       @finish = true
  1370.     end
  1371.     # 更新武器图片
  1372.     if self.visible
  1373.       @angle += @angling
  1374.       self.angle = @angle
  1375.     end  
  1376.   end
  1377. end
  1378. #==============================================================================
  1379. # ■ Sprite_Weapon
  1380. #------------------------------------------------------------------------------
  1381. #  显示武器用的精灵。
  1382. #==============================================================================
  1383. class Sprite_Weapon < Sprite_Base
  1384.   #--------------------------------------------------------------------------
  1385.   # ● 公开变数
  1386.   #--------------------------------------------------------------------------
  1387.   attr_accessor :battler
  1388.   #--------------------------------------------------------------------------
  1389.   # ● 客观初始化
  1390.   #--------------------------------------------------------------------------
  1391.   def initialize(viewport,battler = nil)
  1392.     super(viewport)
  1393.     @battler = battler
  1394.     @action = []                     # 武器的动作情报
  1395.     @move_x = 0                      # 移动后的X坐标
  1396.     @move_y = 0                      # 移动后的Y坐标
  1397.     @move_z = 0                      # 移动后的Z坐标
  1398.     @plus_x = 0                      # 略微调整X坐标
  1399.     @plus_y = 0                      # 略微调整Y坐标
  1400.     @angle = 0                       # 武器的旋转角度
  1401.     @zoom_x = 1                      # 武器的横向放大率
  1402.     @zoom_y = 1                      # 武器的纵向放大率
  1403.     @moving_x = 0                    # 1单位相当移动的X坐标
  1404.     @moving_y = 0                    # 1单位相当移动的Y坐标
  1405.     @angling = 0                     # 1单位相当的旋转角度
  1406.     @zooming_x = 1                   # 1单位相当的横向放大率
  1407.     @zooming_y = 1                   # 1单位相当的纵向放大率   
  1408.     @freeze = -1                     # 固定动画用的武器位置
  1409.     @mirroring = false               # 角色是否为反转
  1410.     @time = N01::ANIME_PATTERN + 1   # 更新回数
  1411.     # 获取武器
  1412.     weapon_graphics
  1413.   end
  1414.   #--------------------------------------------------------------------------
  1415.   # ● 解放
  1416.   #--------------------------------------------------------------------------
  1417.   def dispose
  1418.     self.bitmap.dispose if self.bitmap != nil
  1419.     super
  1420.   end
  1421.   #--------------------------------------------------------------------------
  1422.   # ● 获取武器
  1423.   #--------------------------------------------------------------------------  
  1424.   def weapon_graphics(left = false)
  1425.     if @battler.actor?
  1426.       weapon = @battler.weapons[0] unless left
  1427.       weapon = @battler.weapons[1] if left
  1428.     else
  1429.       weapon = $data_weapons[@battler.weapon]
  1430.       # 确认敌方的反转标志
  1431.       @mirroring = true if @battler.action_mirror
  1432.     end
  1433.     # 如果没有武器时处理被取消
  1434.     return if weapon == nil
  1435.     # 如果用ICON时
  1436.     if weapon.graphic == ""
  1437.       icon_index = weapon.icon_index
  1438.       self.bitmap = Cache.system("Iconset")
  1439.       self.src_rect.set(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  1440.       @weapon_width = @weapon_height = 24
  1441.     # 如果有指定ID时、获取不是ICON的图片  
  1442.     else
  1443.       self.bitmap = Cache.character(weapon.graphic)
  1444.       @weapon_width = self.bitmap.width
  1445.       @weapon_height = self.bitmap.height
  1446.     end
  1447.   end
  1448.   #--------------------------------------------------------------------------
  1449.   # ● 获取动画固定时的武器位置
  1450.   #--------------------------------------------------------------------------  
  1451.   def freeze(action)
  1452.     @freeze = action
  1453.   end
  1454.   #--------------------------------------------------------------------------
  1455.   # ● 获取武器动作 freeze
  1456.   #--------------------------------------------------------------------------  
  1457.   def weapon_action(action,loop)
  1458.     # 没有名称时不显示
  1459.     if action == ""
  1460.       self.visible = false
  1461.     # 空手时不显示
  1462.     elsif @weapon_id == 0
  1463.       self.visible = false
  1464.     # 受取武器的动作情报
  1465.     else
  1466.       @action = N01::ANIME[action]
  1467.       act0 = @action[0]
  1468.       act1 = @action[1]
  1469.       act2 = @action[2]
  1470.       act3 = @action[3]
  1471.       act4 = @action[4]
  1472.       act5 = @action[5]
  1473.       act6 = @action[6]
  1474.       act7 = @action[7]
  1475.       act8 = @action[8]
  1476.       act9 = @action[9]
  1477.       act10 = @action[10]
  1478.       # 角色为反转时、X轴的动作也逆转
  1479.       if @mirroring
  1480.         act0 *= -1
  1481.         act3 *= -1
  1482.         act4 *= -1
  1483.         act9 *= -1
  1484.       end
  1485.       # 背部攻击时逆转
  1486.       if $back_attack && N01::BACK_ATTACK
  1487.         act0 *= -1
  1488.         act3 *= -1
  1489.         act4 *= -1
  1490.         act9 *= -1
  1491.       end
  1492.       # 确认角色的动画图片数
  1493.       time = N01::ANIME_PATTERN
  1494.       # 确认Z坐标
  1495.       if act2
  1496.         self.z = @battler.position_z + 1
  1497.       else
  1498.         self.z = @battler.position_z - 1
  1499.       end
  1500.       # 在这里实行反转、如果已经反转就还原
  1501.       if act6
  1502.         if self.mirror
  1503.           self.mirror = false
  1504.         else
  1505.           self.mirror = true
  1506.         end
  1507.       end
  1508.       # 反映角色的反转
  1509.       if @mirroring
  1510.         if self.mirror
  1511.           self.mirror = false
  1512.         else
  1513.           self.mirror = true
  1514.         end
  1515.       end
  1516.       # 背后攻击时逆转
  1517.       if $back_attack && N01::BACK_ATTACK
  1518.         if self.mirror
  1519.           self.mirror = false
  1520.         else
  1521.           self.mirror = true
  1522.         end
  1523.       end  
  1524.       # 计算以动画图片数相除的变化
  1525.       @moving_x = act0 / time
  1526.       @moving_y = act1 / time
  1527.       # 代入最初的角度
  1528.       @angle = act3
  1529.       self.angle = @angle
  1530.       # 计算更新角度
  1531.       @angling = (act4 - act3)/ time
  1532.       # 角度没有被插入时、在这里加算剩余旋转的部分
  1533.       @angle += (act4 - act3) % time
  1534.       # 放大缩小
  1535.       @zooming_x = (1 - act7) / time
  1536.       @zooming_y = (1 - act8) / time
  1537.       # 如果是反转时、逆转反转前的原点
  1538.       if self.mirror
  1539.         case act5
  1540.         when 1 # 左上→到右上
  1541.           act5 = 2
  1542.         when 2 # 右上→到左上
  1543.           act5 = 1
  1544.         when 3 # 左下→到右下
  1545.           act5 = 4
  1546.         when 4 # 右下→到左下
  1547.           act5 = 3
  1548.         end  
  1549.       end   
  1550.       # 设定旋转前的原点
  1551.       case act5
  1552.       when 0 # 中心
  1553.         self.ox = @weapon_width / 2
  1554.         self.oy = @weapon_height / 2
  1555.       when 1 # 左上
  1556.         self.ox = 0
  1557.         self.oy = 0
  1558.       when 2 # 右上
  1559.         self.ox = @weapon_width
  1560.         self.oy = 0
  1561.       when 3 # 左下
  1562.         self.ox = 0
  1563.         self.oy = @weapon_height
  1564.       when 4 # 右下
  1565.         self.ox = @weapon_width
  1566.         self.oy = @weapon_height
  1567.       end  
  1568.       # 略微调整坐标
  1569.       @plus_x = act9
  1570.       @plus_y = act10
  1571.       # 往返循环时标志ON
  1572.       @loop = true if loop == 0
  1573.       # 第一次时0开始、在这时作-1回的动作
  1574.       @angle -= @angling
  1575.       @zoom_x -= @zooming_x
  1576.       @zoom_y -= @zooming_y
  1577.       # 更新精灵的坐标
  1578.       @move_x -= @moving_x
  1579.       @move_y -= @moving_y
  1580.       @move_z = 1000 if act2
  1581.       # 固定动画时、在这时消化动作
  1582.       if @freeze != -1
  1583.         for i in 0..@freeze + 1
  1584.           @angle += @angling
  1585.           @zoom_x += @zooming_x
  1586.           @zoom_y += @zooming_y
  1587.           # 更新精灵的坐标
  1588.           @move_x += @moving_x
  1589.           @move_y += @moving_y
  1590.         end
  1591.         @angling = 0
  1592.         @zooming_x = 0
  1593.         @zooming_y = 0
  1594.         @moving_x = 0
  1595.         @moving_y = 0
  1596.       end
  1597.       # 可视
  1598.       self.visible = true
  1599.     end
  1600.   end  
  1601.   #--------------------------------------------------------------------------
  1602.   # ● 变化后的动作全部组合
  1603.   #--------------------------------------------------------------------------  
  1604.   def action_reset
  1605.     @moving_x = @moving_y = @move_x = @move_y = @plus_x = @plus_y = 0
  1606.     @angling = @zooming_x = @zooming_y = @angle = self.angle = @move_z = 0
  1607.     @zoom_x = @zoom_y = self.zoom_x = self.zoom_y = 1
  1608.     self.mirror = self.visible = @loop = false
  1609.     @freeze = -1
  1610.     @action = []
  1611.     @time = N01::ANIME_PATTERN + 1
  1612.   end
  1613.   #--------------------------------------------------------------------------
  1614.   # ● 作出往返循环
  1615.   #--------------------------------------------------------------------------  
  1616.   def action_loop
  1617.     # 让动作相反
  1618.     @angling *= -1
  1619.     @zooming_x *= -1
  1620.     @zooming_y *= -1
  1621.     @moving_x *= -1
  1622.     @moving_y *= -1
  1623.   end  
  1624.   #--------------------------------------------------------------------------
  1625.   # ● 主人公是反转时、自身也反转
  1626.   #--------------------------------------------------------------------------
  1627.   def mirroring
  1628.     return @mirroring = false if @mirroring
  1629.     @mirroring = true
  1630.   end  
  1631.   #--------------------------------------------------------------------------
  1632.   # ● 只有在主人公动画被更新时武器动作的変化也更新
  1633.   #--------------------------------------------------------------------------
  1634.   def action
  1635.     return if @time <= 0
  1636.     @time -= 1
  1637.     # 旋转、更新放大缩小
  1638.     @angle += @angling
  1639.     @zoom_x += @zooming_x
  1640.     @zoom_y += @zooming_y
  1641.     # 更新精灵的坐标
  1642.     @move_x += @moving_x
  1643.     @move_y += @moving_y
  1644.     # 往返循环时动作反转
  1645.     if @loop && @time == 0
  1646.       @time = N01::ANIME_PATTERN + 1
  1647.       action_loop
  1648.     end
  1649.   end  
  1650.   #--------------------------------------------------------------------------
  1651.   # ● 单位更新
  1652.   #--------------------------------------------------------------------------
  1653.   def update
  1654.     super
  1655.     # 旋转、更新放大缩小
  1656.     self.angle = @angle
  1657.     self.zoom_x = @zoom_x
  1658.     self.zoom_y = @zoom_y
  1659.     # 更新精灵的坐标
  1660.     self.x = @battler.position_x + @move_x + @plus_x
  1661.     self.y = @battler.position_y + @move_y + @plus_y
  1662.     self.z = @battler.position_z + @move_z - 1
  1663.   end
  1664. end

  1665. #==============================================================================
  1666. # ■ Game_Battler (分割定义 1)
  1667. #------------------------------------------------------------------------------
  1668. #  处理角色的类。
  1669. #==============================================================================
  1670. class Game_Battler
  1671.   #--------------------------------------------------------------------------
  1672.   # ● 公开变数
  1673.   #--------------------------------------------------------------------------
  1674.   attr_accessor :hp_damage        # 行动結果: HP 伤害
  1675.   attr_accessor :mp_damage        # 行动結果: MP 伤害
  1676.   attr_accessor :move_x           # X方向的移动修正
  1677.   attr_accessor :move_y           # Y方向的移动修正
  1678.   attr_accessor :move_z           # Z方向的移动修正
  1679.   attr_accessor :jump             # 修正跳跃
  1680.   attr_accessor :active           # 是否主动
  1681.   attr_accessor :non_dead         # 不死身标志
  1682.   attr_accessor :dying            # 即死标志
  1683.   attr_accessor :slip_damage      # 连续伤害标志
  1684.   attr_accessor :derivation       # 技能连发ID
  1685.   attr_accessor :individual       # 技能连发ID
  1686.   attr_accessor :play             # 动作情报
  1687.   attr_accessor :force_action     # 强制动作情报
  1688.   attr_accessor :force_target     # 目标变更情报
  1689.   attr_accessor :revival          # 复活
  1690.   attr_accessor :double_damage    # HPMP两方同时伤害
  1691.   attr_accessor :reflex           # 技能反射情报
  1692.   attr_accessor :absorb           # 技能成本吸收
  1693.   attr_reader   :base_position_x  # 初期配置X坐标
  1694.   attr_reader   :base_position_y  # 初期配置Y坐标   
  1695.   attr_accessor :force_damage     # 事件的伤害
  1696.   #--------------------------------------------------------------------------
  1697.   # ● 客观初期化
  1698.   #--------------------------------------------------------------------------
  1699.   alias initialize_n01 initialize
  1700.   def initialize
  1701.     initialize_n01
  1702.     @move_x = @move_y = @move_z = @plus_y = @jump = @derivation = @play = 0
  1703.     @force_action = @force_target = @base_position_x = @base_position_y = 0
  1704.     @absorb = @act_time = @force_damage = 0
  1705.     @active = @non_dead = @individual = @slip_damage = @revival = false
  1706.     @double_damage = @dying = false
  1707.   end
  1708.   #--------------------------------------------------------------------------
  1709.   # ● 返还最新的状态ID
  1710.   #--------------------------------------------------------------------------
  1711.   def state_id
  1712.     return @states[@states.size - 1]
  1713.   end
  1714.   #--------------------------------------------------------------------------
  1715.   # ● 判定技能的使用可能  ※再定义
  1716.   #--------------------------------------------------------------------------
  1717.   def skill_can_use?(skill)
  1718.     return false unless skill.is_a?(RPG::Skill)
  1719.     return false unless movable?
  1720.     return false if silent? and skill.spi_f > 0
  1721.     if skill.extension.include?("HP消耗")
  1722.       return false if calc_mp_cost(skill) > hp
  1723.     else
  1724.       return false if calc_mp_cost(skill) > mp
  1725.     end
  1726.     if $game_temp.in_battle
  1727.       return skill.battle_ok?
  1728.     else
  1729.       return skill.menu_ok?
  1730.     end
  1731.   end
  1732.   #--------------------------------------------------------------------------
  1733.   # ● 技能的消费 MP 计算  ※再定义
  1734.   #--------------------------------------------------------------------------
  1735.   def calc_mp_cost(skill)
  1736.     if half_mp_cost && !skill.extension.include?("MP消耗减半无效")
  1737.       cost = skill.mp_cost / 2
  1738.     else
  1739.       cost = skill.mp_cost
  1740.     end
  1741.     if skill.extension.include?("%成本MAX")
  1742.       return self.maxhp * cost / 100 if skill.extension.include?("HP消耗")
  1743.       return self.maxmp * cost / 100
  1744.     elsif skill.extension.include?("%成本NOW")
  1745.       return self.hp * cost / 100 if skill.extension.include?("HP消耗")
  1746.       return self.mp * cost / 100
  1747.     end
  1748.     return cost
  1749.   end
  1750.   #--------------------------------------------------------------------------
  1751.   # ● 技能成本消费
  1752.   #--------------------------------------------------------------------------
  1753.   def consum_skill_cost(skill)
  1754.     return false unless skill_can_use?(skill)
  1755.     cost = calc_mp_cost(skill)
  1756.     return self.hp -= cost if skill.extension.include?("HP消耗")
  1757.     return self.mp -= cost
  1758.   end
  1759.   #--------------------------------------------------------------------------
  1760.   # ● 根据通常攻击计算伤害  修正二刀流
  1761.   #--------------------------------------------------------------------------
  1762.   alias make_attack_damage_value_n01 make_attack_damage_value
  1763.   def make_attack_damage_value(attacker)
  1764.     make_attack_damage_value_n01(attacker)
  1765.     # 只有在装备了两把武器时修正有效
  1766.     return unless attacker.actor?
  1767.     return if attacker.weapons[0] == nil
  1768.     return if attacker.weapons[1] == nil
  1769.     @hp_damage = @hp_damage * N01::TWO_SWORDS_STYLE[0] / 100
  1770.   end
  1771.   #--------------------------------------------------------------------------
  1772.   # ● 根据技能或者物品来计算伤害 修正二刀流
  1773.   #--------------------------------------------------------------------------
  1774.   alias make_obj_damage_value_n01 make_obj_damage_value
  1775.   def make_obj_damage_value(user, obj)
  1776.     make_obj_damage_value_n01(user, obj)
  1777.     # 只有在装备了两把武器时修正有效
  1778.     return unless user.actor?
  1779.     return if user.weapons[0] == nil
  1780.     return if user.weapons[1] == nil
  1781.     if obj.damage_to_mp  
  1782.       @mp_damage = @mp_damage * N01::TWO_SWORDS_STYLE[1] / 100 # 伤害MP
  1783.     else
  1784.       @hp_damage = @hp_damage * N01::TWO_SWORDS_STYLE[1] / 100 # 伤害HP
  1785.     end
  1786.   end
  1787.   #--------------------------------------------------------------------------
  1788.   # ● 使用通常攻击的効果  全部战斗不能,不能绝对回避的处理
  1789.   #--------------------------------------------------------------------------
  1790.   def perfect_attack_effect(attacker)
  1791.     clear_action_results
  1792.     make_attack_damage_value(attacker)            # 计算伤害
  1793.     execute_damage(attacker)                      # 反映伤害
  1794.     apply_state_changes(attacker)                 # 状态变化
  1795.   end
  1796.   #--------------------------------------------------------------------------
  1797.   # ● 使用技能的效果  全部战斗不能,不能绝对回避的处理
  1798.   #--------------------------------------------------------------------------
  1799.   def perfect_skill_effect(user, skill)
  1800.     clear_action_results
  1801.     make_obj_damage_value(user, skill)            # 伤害計算
  1802.     make_obj_absorb_effect(user, skill)           # 吸収効果計算
  1803.     execute_damage(user)                          # 伤害反映
  1804.     apply_state_changes(skill)                    # ステート変化
  1805.   end
  1806.   #--------------------------------------------------------------------------
  1807.   # ● 使用物品的効果  全部战斗不能,不能绝对回避的处理
  1808.   #--------------------------------------------------------------------------
  1809.   def perfect_item_effect(user, item)
  1810.     clear_action_results
  1811.     hp_recovery = calc_hp_recovery(user, item)    # 计算HP的回复量
  1812.     mp_recovery = calc_mp_recovery(user, item)    # 计算MP的回复量
  1813.     make_obj_damage_value(user, item)             # 计算伤害
  1814.     @hp_damage -= hp_recovery                     # 扣除HP的回复量
  1815.     @mp_damage -= mp_recovery                     # 扣除MP的回复量
  1816.     make_obj_absorb_effect(user, item)            # 计算吸收效果
  1817.     execute_damage(user)                          # 反映伤害
  1818.     item_growth_effect(user, item)                # 使用成长效果
  1819.     if item.physical_attack and @hp_damage == 0   # 物理ノー伤害判定
  1820.       return                                    
  1821.     end
  1822.     apply_state_changes(item)                     # 状态变化
  1823.   end
  1824.   #--------------------------------------------------------------------------
  1825.   # ● 伤害的反映
  1826.   #--------------------------------------------------------------------------
  1827.   alias execute_damage_n01 execute_damage
  1828.   def execute_damage(user)
  1829.     execute_damage_n01(user)
  1830.     # 吸収时这里的处理相冲
  1831.     if @absorbed               
  1832.       user.hp_damage = -@hp_damage
  1833.       user.mp_damage = -@mp_damage
  1834.     end
  1835.   end
  1836.   #--------------------------------------------------------------------------
  1837.   # ● 使用技能的効果
  1838.   #--------------------------------------------------------------------------
  1839.   alias skill_effect_n01 skill_effect
  1840.   def skill_effect(user, obj)
  1841.     # 保持变化前的HPMP
  1842.     nowhp = self.hp
  1843.     nowmp = self.mp
  1844.     # 为了计算现在HPMP的威力获取变化前的使用者的HPMP
  1845.     if obj.extension.include?("HP消耗")
  1846.       user_hp = user.hp + user.calc_mp_cost(obj)
  1847.       user_mp = user.mp
  1848.     else  
  1849.       user_hp = user.hp
  1850.       user_mp = user.mp + user.calc_mp_cost(obj)
  1851.     end  
  1852.     # 确认扩张设定
  1853.     check_extension(obj)
  1854.     # 计算伤害
  1855.     skill_effect_n01(user, obj)
  1856.     # 有伤害系的扩张时这里的处理会相冲
  1857.     if @extension
  1858.       self.hp = nowhp
  1859.       self.mp = nowmp
  1860.     end
  1861.     # 攻击未名中时中断处理
  1862.     return if self.evaded or self.missed
  1863.     # 变换伤害属性
  1864.     damage = @hp_damage unless obj.damage_to_mp
  1865.     damage = @mp_damage if obj.damage_to_mp
  1866.     # 比例伤害
  1867.     if @ratio_maxdamage != nil
  1868.       damage = self.maxhp * @ratio_maxdamage / 100 unless obj.damage_to_mp
  1869.       damage = self.maxmp * @ratio_maxdamage / 100 if obj.damage_to_mp
  1870.     end
  1871.     if @ratio_nowdamage != nil
  1872.       damage = self.hp * @ratio_nowdamage / 100 unless obj.damage_to_mp
  1873.       damage = self.mp * @ratio_nowdamage / 100 if obj.damage_to_mp
  1874.     end
  1875.     # 成本威力
  1876.     if @cost_damage
  1877.       cost = user.calc_mp_cost(obj)
  1878.       if obj.extension.include?("HP消耗")
  1879.         damage = damage * cost / user.maxhp
  1880.       else
  1881.         damage = damage * cost / user.maxmp
  1882.       end
  1883.     end
  1884.     # 现在HP威力
  1885.     damage = damage * user_hp / user.maxhp if @nowhp_damage
  1886.     # 现在MP威力
  1887.     damage = damage * user_mp / user.maxmp if @nowmp_damage
  1888.     # 放弃伤害属性的变换
  1889.     @hp_damage = damage unless obj.damage_to_mp
  1890.     @mp_damage = damage if obj.damage_to_mp
  1891.     # 反应扩张
  1892.     if @extension
  1893.       self.hp -= @hp_damage
  1894.       self.mp -= @mp_damage
  1895.     end
  1896.     # 初期化
  1897.     @extension = false
  1898.     @cost_damage = false
  1899.     @nowhp_damage = false
  1900.     @nowmp_damage = false
  1901.     @ratio_maxdamage = nil
  1902.     @ratio_nowdamage = nil
  1903.   end
  1904.   #--------------------------------------------------------------------------
  1905.   # ● 确认扩张设定
  1906.   #--------------------------------------------------------------------------
  1907.   def check_extension(skill)
  1908.     for ext in skill.extension
  1909.       # 成本威力
  1910.       if ext == "成本威力"  
  1911.         @extension = true
  1912.         next @cost_damage = true
  1913.       # 现在HP威力
  1914.       elsif ext == "现HP威力"
  1915.         @extension = true
  1916.         next @nowhp_damage = true
  1917.       # 现在MP威力
  1918.       elsif ext == "现MP威力"
  1919.         @extension = true
  1920.         next @nowmp_damage = true
  1921.       else
  1922.         # 比例伤害
  1923.         name = ext.split('')
  1924.         if name[5] == "M"
  1925.           name = name.join
  1926.           name.slice!("%伤害MAX/")
  1927.           @extension = true
  1928.           next @ratio_maxdamage = name.to_i
  1929.         elsif name[5] == "N"
  1930.           name = name.join
  1931.           name.slice!("%伤害NOW/")
  1932.           @extension = true
  1933.           next @ratio_nowdamage = name.to_i
  1934.         end  
  1935.       end
  1936.     end  
  1937.   end
  1938.   #--------------------------------------------------------------------------
  1939.   # ● 初期配置的変更
  1940.   #--------------------------------------------------------------------------
  1941.   def change_base_position(x, y)
  1942.     @base_position_x = x
  1943.     @base_position_y = y
  1944.   end
  1945.   #--------------------------------------------------------------------------
  1946.   # ● 初期化
  1947.   #--------------------------------------------------------------------------
  1948.   def reset_coordinate
  1949.     @move_x = @move_y = @move_z = @jump = @derivation = 0
  1950.     @active = @non_dead = @individual = false   
  1951.   end
  1952.   #--------------------------------------------------------------------------
  1953.   # ● 使用连续伤害的効果
  1954.   #--------------------------------------------------------------------------
  1955.   def slip_damage_effect
  1956.     if slip_damage? and @hp > 0
  1957.       @hp_damage = apply_variance(maxhp / 10, 10)
  1958.       @hp_damage = @hp - 1 if @hp_damage >= @hp
  1959.       self.hp -= @hp_damage
  1960.     end
  1961.   end
  1962.   #--------------------------------------------------------------------------
  1963.   # ● 事件的伤害POP
  1964.   #--------------------------------------------------------------------------
  1965.   def damage_num(num = nil)
  1966.     return if dead? or !$game_temp.in_battle or num == 0
  1967.     @force_damage = num
  1968.   end
  1969. end  
  1970. #==============================================================================
  1971. # ■ Game_Actor
  1972. #------------------------------------------------------------------------------
  1973. #  处理主人公的类。
  1974. #==============================================================================
  1975. class Game_Actor < Game_Battler
  1976.   #--------------------------------------------------------------------------
  1977.   # ● 公开变数
  1978.   #--------------------------------------------------------------------------
  1979.   attr_accessor :two_swords_change          # 强制替换二刀流的标志
  1980.   #--------------------------------------------------------------------------
  1981.   # ● 根据ID判定技能是否习得
  1982.   #--------------------------------------------------------------------------
  1983.   def skill_id_learn?(skill_id)
  1984.     return @skills.include?(skill_id)
  1985.   end
  1986.   #--------------------------------------------------------------------------
  1987.   # ● 判定技能的使用可能  ※再定义
  1988.   #--------------------------------------------------------------------------
  1989.   def skill_can_use?(skill)
  1990.     return super
  1991.   end
  1992.   #--------------------------------------------------------------------------
  1993.   # ● 图片的变更
  1994.   #--------------------------------------------------------------------------
  1995.   def graphic_change(character_name)
  1996.     @character_name = character_name
  1997.   end
  1998.   #--------------------------------------------------------------------------
  1999.   # ● 击倒的实行 ※再定义
  2000.   #--------------------------------------------------------------------------
  2001.   def perform_collapse
  2002.     Sound.play_actor_collapse if $game_temp.in_battle and dead?
  2003.   end
  2004.   #--------------------------------------------------------------------------
  2005.   # ● 初期配置的取得
  2006.   #--------------------------------------------------------------------------
  2007.   def base_position
  2008.     base = N01::ACTOR_POSITION[self.index]
  2009.     @base_position_x = base[0]
  2010.     @base_position_y = base[1]
  2011.     # バックアタック時はX軸を逆に
  2012.     @base_position_x = Graphics.width - base[0] if $back_attack && N01::BACK_ATTACK
  2013.   end
  2014.   #--------------------------------------------------------------------------
  2015.   # ● 战斗画面 X 坐标的取得
  2016.   #--------------------------------------------------------------------------
  2017.   def position_x
  2018.     return 0 if self.index == nil
  2019.     return @base_position_x + @move_x
  2020.   end
  2021.   #--------------------------------------------------------------------------
  2022.   # ● 战斗画面 Y 坐标的取得
  2023.   #--------------------------------------------------------------------------
  2024.   def position_y
  2025.     return 0 if self.index == nil
  2026.     return @base_position_y + @move_y + @jump
  2027.   end
  2028.   #--------------------------------------------------------------------------
  2029.   # ● 战斗画面 Z 坐标的取得
  2030.   #--------------------------------------------------------------------------
  2031.   def position_z
  2032.     return 0 if self.index == nil
  2033.     return self.index + @base_position_y + @move_y + @move_z - @jump + 200
  2034.   end  
  2035. end
  2036. #==============================================================================
  2037. # ■ Game_Enemy
  2038. #------------------------------------------------------------------------------
  2039. #  处理敌方的类。
  2040. #==============================================================================
  2041. class Game_Enemy < Game_Battler
  2042.   #--------------------------------------------------------------------------
  2043.   # ● 公开变数
  2044.   #--------------------------------------------------------------------------
  2045.   attr_accessor :adj_speed        # 复数会合行动的速度修正
  2046.   attr_accessor :act_time         # 行动数回
  2047.   #--------------------------------------------------------------------------
  2048.   # ● 动作速度的決定 复数回合行动用
  2049.   #--------------------------------------------------------------------------
  2050.   def make_action_speed2(adj)
  2051.     @adj_speed = self.action.speed if @adj_speed == nil
  2052.     @adj_speed = @adj_speed * adj / 100
  2053.   end
  2054.   #--------------------------------------------------------------------------
  2055.   # ● 击倒的实行 ※再定义
  2056.   #--------------------------------------------------------------------------
  2057.   def perform_collapse
  2058.     @force_action = ["N01collapse"] if $game_temp.in_battle and dead?
  2059.   end
  2060.   #--------------------------------------------------------------------------
  2061.   # ● 获取初期配置
  2062.   #--------------------------------------------------------------------------
  2063.   def base_position
  2064.     return if self.index == nil
  2065.     # 确认角色画像的大小修正Y坐标
  2066.     bitmap = Bitmap.new("Graphics/Battlers/" + @battler_name) if !self.anime_on
  2067.     bitmap = Bitmap.new("Graphics/Characters/" + @battler_name) if self.anime_on && N01::WALK_ANIME
  2068.     bitmap = Bitmap.new("Graphics/Characters/" + @battler_name + "_1") if self.anime_on && !N01::WALK_ANIME
  2069.     height = bitmap.height
  2070.     @base_position_x = self.screen_x + self.position_plus[0]
  2071.     @base_position_y = self.screen_y + self.position_plus[1] - height / 3
  2072.     bitmap.dispose
  2073.     # 背后攻击时X轴逆转
  2074.     if $back_attack && N01::BACK_ATTACK
  2075.       @base_position_x = Graphics.width - self.screen_x - self.position_plus[0]
  2076.     end
  2077.   end
  2078.   #--------------------------------------------------------------------------
  2079.   # ● 战斗画面 X 坐标的取得
  2080.   #--------------------------------------------------------------------------
  2081.   def position_x
  2082.     return @base_position_x - @move_x
  2083.   end
  2084.   #--------------------------------------------------------------------------
  2085.   # ● 战斗画面 Y 坐标的取得
  2086.   #--------------------------------------------------------------------------
  2087.   def position_y
  2088.     return @base_position_y + @move_y + @jump
  2089.   end
  2090.   #--------------------------------------------------------------------------
  2091.   # ● 战斗画面 Z 坐标的取得
  2092.   #--------------------------------------------------------------------------
  2093.   def position_z
  2094.     return position_y + @move_z - @jump + 200
  2095.   end
  2096. end
  2097. #==============================================================================
  2098. # ■ Sprite_Damage
  2099. #------------------------------------------------------------------------------
  2100. #  伤害表示的精灵。
  2101. #==============================================================================
  2102. class Sprite_Damage < Sprite_Base
  2103.   #--------------------------------------------------------------------------
  2104.   # ● 公开变数
  2105.   #--------------------------------------------------------------------------
  2106.   attr_accessor :battler
  2107.   #--------------------------------------------------------------------------
  2108.   # ● 客观初期化
  2109.   #--------------------------------------------------------------------------
  2110.   def initialize(viewport,battler = nil)
  2111.     super(viewport)
  2112.     @battler = battler
  2113.     @damage = 0
  2114.     @duration = 0
  2115.     @x = 0
  2116.     @y = 0
  2117.     @z_plus = 0
  2118.     @minus = false
  2119.     @num1 = Sprite.new(viewport)
  2120.     @num2 = Sprite.new(viewport)
  2121.     @num3 = Sprite.new(viewport)
  2122.     @num4 = Sprite.new(viewport)
  2123.     @num5 = Sprite.new(viewport)
  2124.     @num1.visible = false
  2125.     @num2.visible = false
  2126.     @num3.visible = false
  2127.     @num4.visible = false
  2128.     @num5.visible = false
  2129.   end
  2130.   #--------------------------------------------------------------------------
  2131.   # ● 更新
  2132.   #--------------------------------------------------------------------------
  2133.   def update
  2134.     force_damage
  2135.     move_damage(@num5, @pop_time) if @num5.visible
  2136.     move_damage(@num4, @pop_time - 2) if @num4.visible
  2137.     move_damage(@num3, @pop_time - 4) if @num3.visible
  2138.     move_damage(@num2, @pop_time - 6) if @num2.visible
  2139.     move_damage(@num1, @pop_time - 8) if @num1.visible
  2140.     move_window if @window != nil
  2141.     @duration -= 1 if @duration > 0
  2142.   end
  2143.   #--------------------------------------------------------------------------
  2144.   # ● 事件的伤害POP
  2145.   #--------------------------------------------------------------------------
  2146.   def force_damage
  2147.     if @battler.force_damage != 0
  2148.       damage_pop(@battler.force_damage)
  2149.       @battler.hp -= @battler.force_damage
  2150.       @force_damage = true
  2151.       @battler.force_damage = 0
  2152.       $game_temp.status_window_refresh = true
  2153.     end
  2154.   end
  2155.   #--------------------------------------------------------------------------
  2156.   # ● 数値的移动
  2157.   #--------------------------------------------------------------------------
  2158.   def move_damage(num, min)
  2159.     case @duration
  2160.     when min-1..min
  2161.       num.y -= 4
  2162.     when min-3..min-2
  2163.       num.y -= 3
  2164.     when min-6..min-4
  2165.       num.y -= 2
  2166.     when min-14..min-7
  2167.       num.y += 2
  2168.     when min-17..min-15
  2169.       num.y -= 2
  2170.     when min-23..min-18
  2171.       num.y += 1
  2172.     when min-27..min-24
  2173.       num.y -= 1
  2174.     when min-30..min-28
  2175.       num.y += 1
  2176.     when min-33..min-31
  2177.       num.y -= 1
  2178.     when min-36..min-34
  2179.       num.y += 1
  2180.     end
  2181.     next_damage if @battler.double_damage && @duration == min-34
  2182.     num.opacity = 256 - (12 - @duration) * 32
  2183.     num.visible = false if @duration == 0
  2184.     if @force_damage && @duration == 0
  2185.       @force_damage = false
  2186.       @battler.perform_collapse
  2187.     end
  2188.   end
  2189.   #--------------------------------------------------------------------------
  2190.   # ● 文字窗口的移动
  2191.   #--------------------------------------------------------------------------
  2192.   def move_window
  2193.     @window.x -= 6 if @window_time > 0 && @window.x > 0
  2194.     @window_time -= 1
  2195.     if @duration == 0
  2196.       @window.dispose
  2197.       @window = nil
  2198.     end
  2199.   end  
  2200.   #--------------------------------------------------------------------------
  2201.   # ● HPMP两方同时伤害
  2202.   #--------------------------------------------------------------------------
  2203.   def next_damage
  2204.     @battler.hp_damage = 0
  2205.     @battler.double_damage = false
  2206.     damage_pop
  2207.   end
  2208.   #--------------------------------------------------------------------------
  2209.   # ● 准备伤害POP
  2210.   #--------------------------------------------------------------------------
  2211.   def damage_pop(num = nil)
  2212.     reset
  2213.     damage = battler.hp_damage
  2214.     # 抽出状态的变化
  2215.     states = battler.added_states
  2216.     text = ""
  2217.     # MP伤害用文本(HPMP两方同时伤害除外)
  2218.     if [email protected]_damage && @battler.mp_damage != 0
  2219.       text = N01::POP_MP_DAM if battler.mp_damage > 0
  2220.       text = N01::POP_MP_REC if battler.mp_damage < 0
  2221.       damage = battler.mp_damage
  2222.     end
  2223.     # 连续伤害不显示MP伤害以外的文字
  2224.     if num == nil
  2225.       text = N01::POP_MISS if battler.missed && states == []
  2226.       text = N01::POP_DAMAGE0 if damage == 0 && states == [] && !battler.revival
  2227.       text = N01::POP_EVA if battler.evaded
  2228.       text = N01::POP_CRI if battler.critical
  2229.       for state in states
  2230.         # 无POP设定的状态不显示
  2231.         unless state.extension.include?("无POP")
  2232.           text += " " if text != ""
  2233.           text += state.name
  2234.         end
  2235.       end
  2236.     else
  2237.       damage = num
  2238.     end
  2239.     # 区分伤害和回复
  2240.     @minus = false
  2241.     @minus = true if damage < 0
  2242.     damage = damage.abs
  2243.     # 略微调整POP位置
  2244.     adjust = -16
  2245.     adjust = 16 if $back_attack
  2246.     adjust = 0 if damage == 0
  2247.     @x = battler.position_x + adjust
  2248.     @y = battler.position_y
  2249.     window(text) if text != ""
  2250.     @pop_time = N01::NUM_DURATION
  2251.     # 没有伤害时没有数字的POP
  2252.     return @duration = @pop_time if damage == 0
  2253.     @num_time = -1
  2254.     damage_file(@num1, damage % 10, @pop_time - 7) if damage >= 0
  2255.     damage_file(@num2, (damage % 100)/10, @pop_time - 5) if damage >= 10
  2256.     damage_file(@num3, (damage % 1000)/100, @pop_time - 3) if damage >= 100
  2257.     damage_file(@num4, (damage % 10000)/1000, @pop_time - 1) if damage >= 1000
  2258.     damage_file(@num5, (damage % 100000)/10000, @pop_time + 1) if damage >= 10000
  2259.   end  
  2260.   #--------------------------------------------------------------------------
  2261.   # ● 准备情报窗口
  2262.   #--------------------------------------------------------------------------
  2263.   def window(text)
  2264.     @window = Window_Damage.new(@x - 64, @y - 22)
  2265.     @window.pop_text(text)
  2266.     @window_time = 5
  2267.   end  
  2268.   #--------------------------------------------------------------------------
  2269.   # ● 准备数字画像
  2270.   #--------------------------------------------------------------------------
  2271.   def damage_file(num, cw, dur)
  2272.     num.visible = true
  2273.     # 判別文件
  2274.     file = N01::DAMAGE_GRAPHICS
  2275.     file = N01::RECOVER_GRAPHICS if @minus
  2276.     # 数字
  2277.     num.bitmap = Cache.system(file)
  2278.     @num_time += 1
  2279.     sx = num.bitmap.width / 10
  2280.     num.src_rect.set(cw * sx, 0, sx, num.height)
  2281.     num.x = @x - (num.width + N01::NUM_INTERBAL) * @num_time
  2282.     num.y = @y
  2283.     num.z = 2000 - @num_time
  2284.     @duration = dur
  2285.     @window.x = num.x - @window.width + 64 if @window != nil && N01::NON_DAMAGE_WINDOW
  2286.     @window.x = num.x - @window.width + 26 if @window != nil && !N01::NON_DAMAGE_WINDOW
  2287.     @window.x = 0 if @window != nil && @window.x < 0
  2288.   end
  2289.   #--------------------------------------------------------------------------
  2290.   # ● 伤害组合
  2291.   #--------------------------------------------------------------------------
  2292.   def reset
  2293.     @num5.visible = @num4.visible = @num3.visible = @num2.visible = @num1.visible = false
  2294.     @window.dispose if @window != nil
  2295.     @window = nil
  2296.   end  
  2297.   #--------------------------------------------------------------------------
  2298.   # ● 开放
  2299.   #--------------------------------------------------------------------------
  2300.   def dispose
  2301.     super
  2302.     @num1.dispose
  2303.     @num2.dispose
  2304.     @num3.dispose
  2305.     @num4.dispose
  2306.     @num5.dispose
  2307.     @window.dispose if @window != nil
  2308.   end  
  2309. end
  2310. #==============================================================================
  2311. # ■ Window_Damage
  2312. #------------------------------------------------------------------------------
  2313. #  危机等表示的窗口。
  2314. #==============================================================================
  2315. class Window_Damage < Window_Base
  2316.   #--------------------------------------------------------------------------
  2317.   # ● 客观初期化
  2318.   #--------------------------------------------------------------------------
  2319.   def initialize(x, y)
  2320.     super(x, y, 160, 46)
  2321.     self.opacity = 0 if N01::NON_DAMAGE_WINDOW
  2322.   end
  2323.   #--------------------------------------------------------------------------
  2324.   # ● 窗口内容的作成
  2325.   #--------------------------------------------------------------------------
  2326.   def create_contents
  2327.     self.contents.dispose
  2328.     self.contents = Bitmap.new(width - 32, height - 32)
  2329.   end
  2330.   #--------------------------------------------------------------------------
  2331.   # ● 状态设定
  2332.   #--------------------------------------------------------------------------
  2333.   def pop_text(text, align = 1)
  2334.     self.contents.clear
  2335.     self.width = self.contents.text_size(text).width + 36
  2336.     self.contents = Bitmap.new(width - 32, height - 32)
  2337.     self.contents.font.color = normal_color
  2338.     self.contents.font.size = 16
  2339.     self.contents.draw_text(0,-8, width - 32, 32, text, align)
  2340.   end  
  2341. end  
  2342. #==============================================================================
  2343. # ■ Window_Base
  2344. #------------------------------------------------------------------------------
  2345. #  游戏中处理所有窗口的超级类。
  2346. #==============================================================================
  2347. class Window_Base < Window  
  2348.   #--------------------------------------------------------------------------
  2349.   # ● 状态的描画  ※再定义(反映设定不显示状态ICON)
  2350.   #--------------------------------------------------------------------------
  2351.   def draw_actor_state(actor, x, y, width = 96)
  2352.     count = 0
  2353.     for state in actor.states
  2354.       break if state.extension.include?("不显示ICON")
  2355.       draw_icon(state.icon_index, x + 24 * count, y)
  2356.       count += 1
  2357.       break if (24 * count > width - 24)
  2358.     end
  2359.   end
  2360. end
  2361. #==============================================================================
  2362. # ■ Game_Temp
  2363. #------------------------------------------------------------------------------
  2364. #  不包含存储数据、处理一时数据的类。
  2365. #==============================================================================
  2366. class Game_Temp
  2367.   #--------------------------------------------------------------------------
  2368.   # ● 公开变数
  2369.   #--------------------------------------------------------------------------
  2370.   attr_accessor :status_window_refresh    # 状态窗口的还原标志
  2371.   #--------------------------------------------------------------------------
  2372.   # ● 客观初期化
  2373.   #--------------------------------------------------------------------------
  2374.   alias initialize_n01 initialize
  2375.   def initialize
  2376.     initialize_n01
  2377.     @status_window_refresh = false
  2378.   end
  2379. end  
  2380. #==============================================================================
  2381. # ■ Game_Interpreter
  2382. #------------------------------------------------------------------------------
  2383. #  实行时间指令的解释。
  2384. #==============================================================================
  2385. class Game_Interpreter
  2386.   #--------------------------------------------------------------------------
  2387.   # ● HP 的增减
  2388.   #--------------------------------------------------------------------------
  2389.   def command_311
  2390.     if $game_temp.in_battle
  2391.       value = operate_value(@params[1], @params[2], @params[3])
  2392.       iterate_actor_id(@params[0]) do |actor|
  2393.         next if actor.dead?
  2394.         if @params[4] == false and actor.hp + value <= 0
  2395.           actor.damage_num(actor.hp - 1) # 如果不允许战斗不能时变为1
  2396.         else
  2397.           actor.damage_num(-value)
  2398.         end
  2399.       end
  2400.       return true
  2401.     else
  2402.       value = operate_value(@params[1], @params[2], @params[3])
  2403.       iterate_actor_id(@params[0]) do |actor|
  2404.         next if actor.dead?
  2405.         if @params[4] == false and actor.hp + value <= 0
  2406.           actor.hp = 1    # 如果不允许战斗不能时变为1
  2407.         else
  2408.           actor.hp += value
  2409.         end
  2410.         actor.perform_collapse
  2411.       end
  2412.       if $game_party.all_dead?
  2413.         $game_temp.next_scene = "gameover"
  2414.       end
  2415.       return true
  2416.     end  
  2417.   end
  2418.   #--------------------------------------------------------------------------
  2419.   # ● 敌角色的 HP 增减
  2420.   #--------------------------------------------------------------------------
  2421.   def command_331
  2422.     value = operate_value(@params[1], @params[2], @params[3])
  2423.     iterate_enemy_index(@params[0]) do |enemy|
  2424.       if enemy.hp > 0
  2425.         if @params[4] == false and enemy.hp + value <= 0
  2426.           enemy.damage_num(enemy.hp - 1) # 如果不允许战斗不能时变为1
  2427.         else
  2428.           enemy.damage_num(-value)
  2429.         end
  2430.       end
  2431.     end
  2432.     return true
  2433.   end
  2434. end  
复制代码

点评

这个问题麻烦自己用站内搜索搜索一下吧  发表于 2013-7-13 15:49

Lv1.梦旅人

梦石
0
星屑
38
在线时间
1165 小时
注册时间
2012-3-16
帖子
5336
2
发表于 2013-7-14 15:05:21 | 只看该作者
放范例吧...这样太乱了。
我想要到的是保护同伴的力量,能与同伴一起欢笑的未来的力量,如果无法做到的话,那就无需继承,如果是这样的彭格列的话,那我亲手毁掉它!
  
                       欢迎加入我们的家族~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
30 小时
注册时间
2012-7-8
帖子
255
3
发表于 2013-7-15 22:27:20 | 只看该作者
行走图命名和格式跟主角的一样
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
435 小时
注册时间
2012-7-31
帖子
796
4
发表于 2013-7-16 13:03:19 | 只看该作者
LZ放出来的脚本不能用啊……有错吧……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
51
在线时间
121 小时
注册时间
2012-3-4
帖子
84
5
发表于 2013-7-18 08:52:01 手机端发表。 | 只看该作者
本帖最后由 289307768 于 2013-7-18 09:06 编辑

楼主准备好糖,我就来帮你解决问题:

迷途传送门
请看10楼专业解答。

评分

参与人数 1星屑 +50 收起 理由
怪蜀黍 + 50 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 10:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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