Project1

标题: 橫版戰鬥 與召喚腳本 撤退效果 [打印本页]

作者: graygod    时间: 2013-12-8 03:08
标题: 橫版戰鬥 與召喚腳本 撤退效果
我使用 橫版戰鬥 與 Tsukihime的召喚腳本

召喚腳本其中一項功能 人物出場參與戰鬥幾回合  
回合結束後  撤離  

但 撤離動作一直無法正常運作

比如 1 與 2號人物 為不同時間召喚
但在1號 人物作出撤退動畫時 ,2號人物會一併作出 撤退  ,然後在加入的動畫
我在橫版基礎中有
設置 不同的位置
  ACTOR_POSITION   = [[415,160, 0],[435,185, 0],[455,210, 0],[475,235, 0] ,[490,255, 0]]
  #召喚獸位置
  SUMMON_POSITION   = [[375,170, 0],[395,195, 0],[415,220, 0],[435,245, 0] ,[450,265, 0]]
  #動物之位置
  ANIMAL_POSITION   = [[465,140, 0],[485,165, 0],[505,190, 0],[525,215, 0] ,[540,245, 0]]

另外我在橫版 update_bitmap_actor 方法裡

有加入
      @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)   if [email protected]_a?(Game_Summon)
  否則在撤離動作時 會發生 人物亂跑
請問 如何可以讓這功能正常  

RUBY 代码复制
  1. 橫版基礎
  2. #==============================================================================
  3. # ■ SideView动作设定 Ver100
  4. #------------------------------------------------------------------------------
  5. #  创建侧视图战斗一般的设置和行动。
  6. #   汉化by: 圣痕
  7. #==============================================================================
  8. module N03
  9. #--------------------------------------------------------------------------
  10. # ● 全体队员设置
  11. #--------------------------------------------------------------------------
  12.   # 主人公初期位置       第一人       第二人       第三人       第四人
  13.   #                    X轴 Y轴 H轴  X轴 Y轴 H轴  X轴 Y轴 H轴  X轴 Y轴 H轴
  14.   ACTOR_POSITION   = [[415,160, 0],[435,185, 0],[455,210, 0],[475,235, 0] ,[490,255, 0]]
  15.   #召喚獸位置
  16.   SUMMON_POSITION   = [[375,170, 0],[395,195, 0],[415,220, 0],[435,245, 0] ,[450,265, 0]]
  17.   #動物之位置
  18.   ANIMAL_POSITION   = [[465,140, 0],[485,165, 0],[505,190, 0],[525,215, 0] ,[540,245, 0]]
  19.   # 战斗中行动结束后,到下个角色行动开始的等待时间。
  20.   ACTION_END_WAIT = 8
  21.   # 战斗中行动结束后(等待时间・单位帧(1/60)秒)
  22.   TURN_END_WAIT = 12
  23.   # 背后攻击(偷袭时的画面反转)使用的话是true不使用的是false
  24.   BACK_ATTACK = true
  25.   # 我方角色受到伤害时、如果采用默认的效果就是true
  26.   ACTOR_DAMAGE = false
  27.   # 敌方角色受到伤害时、如果采用默认的效果就是true
  28.   ENEMY_DAMAGE = false
  29.   # 敌人角色的X坐标、旋转计算、战斗自动反转就是true
  30.   ENEMY_MIRROR = true
  31.   # 战斗不能禁止使用处理、数据库的无敌状态ID
  32.   IMMORTAL_ID = 10
  33.  
  34.   # 战斗记录(战斗进行实况显示的窗口)如果显示就是true
  35.   # 如果OFF的场合、显示技能名窗口出现在屏幕上方
  36.   BATTLE_LOG = true
  37.   # 技能名在改窗口ON时、不显示的技能ID排列放进去
  38.   NO_DISPLAY_SKILL_ID = [1,2,3,4,5,6,7]
  39.   # 如果显示伤害数字POP就是true
  40.   DAMAGE_POP = true
  41.   # 如果显示附加状态POP就是true
  42.   STATE_POP = true
  43.   # 伤害数字图片的文件名(横向等距的从零到九依次排列的图片(Graphics/System))
  44.   DAMAGE_PLUS = "damage_num+"
  45.   # 回复数字图片的文件名(Graphics/System)
  46.   DAMAGE_MINUS = "damage_num-"
  47.   # MP数字图片的文件名(Graphics/System)
  48.   DAMAGE_MP = "damage_mp"
  49.   # TP数字图片的文件名(Graphics/System)
  50.   DAMAGE_TP = "damage_tp"
  51.   # 显示伤害数字的文字间隔进行调整。
  52.   DAMAGE_ADJUST = -4
  53.  
  54.   # 战斗相机的焦点(转到焦点)调整 [X轴, Y轴]
  55.   CAMERA_POSITION = [   0, -40]
  56.  
  57. #--------------------------------------------------------------------------
  58. # ● 战斗背景设定  背景的坐标调整及扩大率设定
  59. #--------------------------------------------------------------------------
  60.   # 地背景文件名…设定地背景图像的文件名(Battlebacks1)。
  61.   #               "全Battlebacks1"在指定的Battlebacks1图像,设定的项目。
  62.   # 壁背景文件名…设定壁背景图像的文件名(Battlebacks1)。
  63.   #               "全Battlebacks2"在指定的Battlebacks2图像,设定的项目。
  64.   # 坐标调整…[X轴, Y轴]
  65.   # 扩大率……[横扩大率, 纵扩大率]
  66.   # 允许摇动……攻击动作摇动、如果允许摇动就true、不允许就false
  67.   # 开关触发…游戏数字为 ON 自动在战斗开始时。侧视图开关是对温室气体
  68.   #           如果您希望将受控制的战斗程序和背景集,请使用
  69.   #           如果为 0 则不操作
  70.  
  71.    FLOOR1_DATA = {
  72.   # 床背景文件名                 坐标调整      扩大率   允许摇动 开关触发
  73.   "Sea_ex01"              => [ [   0, 120], [ 150, 150], false,    -1],
  74.   "全Battlebacks1"        => [ [   0, 120], [ 150, 150],  true,     0],
  75.  
  76.   }
  77.    FLOOR2_DATA = {
  78.   # 壁背景文件名                 坐标调整      扩大率   允许摇动 开关触发
  79.   "Ship_ex"               => [ [   0, 120], [ 150, 150],  true,     0],
  80.   "全Battlebacks2"        => [ [   0, 120], [ 150, 150],  true,     0],
  81.  
  82.  
  83. }  
  84.  
  85. #==============================================================================
  86. # ■ 战斗角色行动
  87. #------------------------------------------------------------------------------
  88. #  角色战斗中单独行动。可以组合完整的行动
  89. #==============================================================================
  90. # 完整的行动和行动名称在这里。
  91.   ACTION = {
  92.  
  93. #--------------------------------------------------------------------------
  94. # ● 角色动画的设定
  95. #--------------------------------------------------------------------------
  96.   # 默认的一个角色芯片的图像文件中包含多个的角色已经配置好
  97.   # 使用角色芯片(Charachip)的场合、添加一个角色图像的图像被配置使其符合。
  98.   # 一个角色中的一个字符的图像的运用(文件的开头名字写入"$"才名字)没有问题的场合
  99.   #
  100.   # 指数…使用角色图像文件的附在后面的Index(指数)名称。
  101.   #       侧视图的角色的场合参考文件字符和文件名。
  102.   #       指数达到时、角色文件名+指数文件的图像、参考该文件
  103.   #       例)实行Actor1的角色指数"_1"的动画的场合时、参考该文件名"Actor1_1"
  104.   #       使用角色芯片的场合的指数的动画
  105.   #       角色放在Characters文件夹中、敌人图像放在Battlers文件夹中
  106.   # 纵元件…图像文件的单元格的垂直对齐方式。其次从顶部的 0-3。任何数量的级别元
  107.   #         件编号角色设置中的设置
  108.   # 横元件…在图像文件单元格的水平对齐方式、开始播放元件。随后由 0-3 和从左侧。
  109.   #         杆发挥此下一级别元件的从左到右。任何数量的级别元件
  110.   #         这个横元件的动画从左到右播放。元件数量不限
  111.   # 模式… 0:元件固定 1:单程 2:往返 3:单程循环 4:往返循环
  112.   # 速度…动画的更新速度。数值越低更新速度越快。
  113.   # Z轴…另外,如果您在顶部显示。通常出现在屏幕的底部。
  114.   # 等待…动画模式到最后如果也被播放的行动就true
  115.   # 影…表示阴影效果的话是true、不表示为false
  116.   # 武器…武器表示的情况填入武器动作名。不表示的情况为""。
  117.   #       可能同时追加任意数量的武器动作、将追加在阵列后面
  118.  
  119.   #目标动画名(待机系)―   判別     指数  纵件 横件 模式  速度 Z轴  等待   影  武器
  120.   "待机"            => ["motion",   "",    1,   0,   4,   12,   0, true, true, "" ],
  121.   "待机固定WT"      => ["motion",   "",    1,   1,   0,   12,   0, true, true, "" ],
  122.   "待机固定"        => ["motion",   "",    1,   1,   0,   12,   0,false, true, "" ],
  123.   "倒下"            => ["motion", "_1",    0,   0,   0,   12,   0, true,false, "" ],
  124.   "向右"            => ["motion",   "",    2,   0,   4,   12,   0, true, true, "" ],
  125.  
  126.   #目标动画名(移动系)―   判別    文件No 纵件 横件 模式  速度 Z轴  等待   影  武器
  127.   "左向移动"        => ["motion",   "",    1,   0,   4,    6,  10, true, true, "" ],
  128.   "右向移动"        => ["motion",   "",    2,   0,   4,    6,  10, true, true, "" ],
  129.  
  130.   #目标动画名(姿态系)―   判別    文件No 纵件 横件 模式  速度 Z轴  等待   影    武器
  131.   "举起武器"        => ["motion",   "",    1,   0,   1,    2, 200,false, true, "举起" ],
  132.  
  133.   #目标动画名(攻击系)―   判別    文件No 纵件 横件 模式  速度 Z轴  等待   影    武器
  134.   "武器挥动R"       => ["motion",   "",    1,   0,   1,    2, 200,false, true, "纵挥动"],
  135.   "武器挥动L"       => ["motion",   "",    1,   0,   1,    2, 200,false, true, "纵挥动L"],
  136.   "武器挥动LR"      => ["motion",   "",    1,   0,   1,    2, 200,false, true, "纵挥动","纵挥动L"],
  137.   "盾防御"          => ["motion",   "",    1,   0,   1,    2, 200,false, true, "盾"],
  138.   "武器拳抛掷"      => ["motion",   "",    1,   0,   1,    2, 200,false, true, "拳抛掷"],
  139.   "武器抛掷"        => ["motion",   "",    1,   0,   1,    2, 200,false, true, "抛掷" ],
  140.   "弓射击"          => ["motion",   "",    1,   0,   1,    2, 200,false, true, "弓"],
  141.  
  142. #--------------------------------------------------------------------------
  143. # ● 角色移动  X轴移动是敌人的自动反向计算
  144. #--------------------------------------------------------------------------
  145.   # 目标…要移动引用的目标坐标。编号引用的是当前的位置,积极的消极的初始位置;(是所以负不能设置到 7)
  146.   #       [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敵我方全] [5=第二个目标] [6=画面]
  147.   # X轴…从对象所看X坐标。绝对值就算是最低时也会比时间高
  148.   # Y轴…从对象所看Y坐标。绝对值就算是最低时也会比时间高
  149.   # H軸…从对象所看H坐标。(离地面的高度) 当H轴是nil无视xy的移动
  150.   # 速度…移动1帧的像素数。指定的时间长度将是一个负数、移动完毕后这将是一个帧的总数的百分比
  151.   # 曲线…移动时的轨道正上、负面向下曲线。
  152.   # 跳跃…跳跃抛物线轨道。[开始跳跃到顶点的轨道, 顶点到着地的轨道]
  153.   # 动画…这里的移动所使用的角色动画名。
  154.  
  155.   # 目标行动名(系统系)       判別 目标 X轴  Y轴  H轴 速度  曲线   跳跃      动画
  156.   "战斗前的我方配置"    => ["move",-7, 180,   10,   0,  0,   0, [  0,  0], "左向移动"],
  157.   "退场"                => ["move",-7, 180,   0,   0,  7,   0, [  0,  0], "右向移动"],
  158.   "逃走途中"            => ["move",-7,  80,   0,   0,  7,   0, [  0,  0], "右向移动"],
  159.   "指令输入移动"        => ["move",-7, -20,   0, nil,-10,   0, [  0,  0], "左向移动"],
  160.   "伤害后弯向后"        => ["move", 0,  20,   0, nil,-10,   0, [  0,  0], ""],
  161.   "大伤害"              => ["move", 0,  60,   0, nil,-10,   0, [  0,  0], ""],
  162.  
  163.   # 目标行动名(复位系)       判別 目标 X轴  Y轴  H轴 速度  曲线   跳跃      动画
  164.   "初期目标复位"        => ["move",-7,   0,   10,   0,-10,   0, [  0,  0], "右向移动"],
  165.   "坐标重置"            => ["move",-7,   0,   10,   0,-20,   0, [  0,  0], "右向移动"],
  166.   "坐标曲线重置"        => ["move",-7,   0,   0,   0,-20,  -2, [  0,  0], "右向移动"],
  167.   "坐标左向复位"        => ["move",-7,   0,   0,   0,-20,   0, [  0,  0], "左向移动"],
  168.  
  169.   # 目标行动名(自身系)       判別 目标 X轴  Y轴  H轴 速度  曲线   跳跃      动画
  170.   "一歩前移动"          => ["move", 0, -20,   0,   0,-10,   0, [  0,  0], "左向移动"],
  171.   "一歩后移动"          => ["move", 0,  20,   0,   0,-10,   0, [  0,  0], "左向移动"],
  172.   "一歩前跳跃"          => ["move", 0, -30,   0,   0,-10,   0, [ 20,-20], "左向移动"],
  173.   "一歩后跳跃"          => ["move", 0,  30,   0,   0,-10,   0, [ 20,-20], "左向移动"],
  174.   "胜利跳转"            => ["move", 0,  10,   0,   0,-25,   0, [ 30,-30], "待机固定"],
  175.   "胜利武器跳转"        => ["move", 0,   0,   0,   0,-15,   0, [ 20,  0], "举起武器"],
  176.   "胜利跳转着地"        => ["move",-7,   0,   0,   0,-10,   0, [  0,  0], "武器挥动R"],
  177.   "纵摇动01"            => ["move", 0,   0,   0,  20, -2,   0, [  0,  0], ""],
  178.   "纵摇动02"            => ["move", 0,   0,   0, -20, -2,   0, [  0,  0], ""],
  179.  
  180.   # 目标行动名(目标系)       判別 目标 X轴  Y轴  H轴 速度  曲线   跳跃      动画
  181.   "敌前移动"            => ["move", 1,  30,   0,   0,-20,   0, [  0,  0], "左向移动"],
  182.   "敌后移动"            => ["move", 1, -60,   0,   0,-20,   0, [  0,  0], "左向移动"],
  183.   "初期敌移动"          => ["move", 1,   0,   0,   0,-10,   0, [  0,  0], "左向移动"],
  184.   "跳前拍击"            => ["move",-1,   0,   0, 100,-20,   0, [ 40,-20], "举起武器"],
  185.   "拍击"                => ["move",-1,   0,   0,   0,-10,   0, [  0,  0], "武器挥动R"],
  186.  
  187. #--------------------------------------------------------------------------
  188. # ● 武器动作 让武器图像动起来的方法
  189. #--------------------------------------------------------------------------
  190.   # 类型…[0…使用图标]
  191.   #       [1…独自图像(图像名角色设定的武器项目中进行。参考Characters文件夹)]
  192.   #       [2…动画元件(※2003规范。同样数量的元件和角色的动画。图像名角色设定的武器项目中进行。
  193.   #           参考Characters文件夹)]
  194.   # 移动…移动图像的距离。[X轴, Y轴]
  195.   # 调整…要微调整图像初始的坐标。[X轴, Y轴]
  196.   # 始度…武器在动作前的最初角度。半圆的0~360度。复数情况为反半圆。
  197.   # 終度…动作后的角度
  198.   # 原点…武器旋转时的原点。[0…中心] [1…左上] [2…右上] [3…左下] [4…右下] [5…和角色同样(一半宽以下的图像)]
  199.   # 反转…当为true时,动作前武器的图像将会显示为反转的。
  200.   # 扩大…[X轴扩大率, Y轴扩大率] 小数点也接受  
  201.   #       [X轴放大率、武器横向放大率。1是同等、2是2倍、0.5是1/2。]
  202.   #       [Y轴放大率、武器纵向放大率。1是同等、2是2倍、0.5是1/2。]
  203.   # Z轴…如果让此动作显示时武器在人物前方写作true。
  204.   # 二刀…限定于二刀流为true、将以二刀流来显示左边武器动作的武器画像。
  205.   #       如果不是二刀流的情况会自动跳过角色动画。
  206.   # 更新…-1个角色动画更新和同步。独立配置的场合[更新时间间隔, 更新模式数, 循环的状况]
  207.   # 指数…武器图像的武器装备(盾)被设定为图像文件将参考、
  208.   #       指数放在这里、图像文件名+指数名的图像将参考
  209.   #       一个以上的武器复数的有规律的使用图像的场合
  210.   #       例) "縦振り"的指数"" => 图像文件名"IconSet"将参考
  211.   #       例) "縦振り2"的指数"_1" => 画像文件名"IconSet_1"将参考
  212.   #       使用该图标的场合将参考System文件夹、独自图像动画和元件放在Characters文件夹中
  213.   # 图像…武器、盾牌设定的图片文件和指数、直接指定的武器图像
  214.   #       这里给的图像文件名。图像放到Characters文件夹中将参考
  215.  
  216.   # 目标动作名    判別 类型  移动     调整   始度 终度 原点 反转   扩大    Z轴   二刀   更新   指数   画像
  217.   "纵挥动"    => ["wp", 0,[  6, 0],[ -4,-10], -45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  218.   "盾"        => ["wp", 0,[  0, 0],[ 12,  0],   0,   0,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  219.   "纵挥动L"   => ["wp", 0,[  6, 0],[  0, -8],-135,  45,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  220.   "拳抛掷"    => ["wp", 0,[-20, 0],[  5,  5], -45, -45,  4, false, [1,1], false, false,   -1,   "",    ""],
  221.   "抛掷"      => ["wp", 0,[-25, 0],[ 25,-10],  45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  222.   "举起"      => ["wp", 0,[  6,-4],[ -4,-10],  90, -45,  4, false, [1,1], false, false,   -1,   "",    ""],
  223.  
  224.   # 2003规范      判別 类型  移动     调整   始度 终度 原点 反转   扩大    Z轴   二刀   更新   指数   画像
  225.   "弓"        => ["wp", 2,[  0, 0],[  0,  0],   0,   0,  5, false, [1,1],  true, false,   -1,   "",    ""],
  226.  
  227.   # 使用飞行武器  判別 类型  移动     调整   始度 终度 原点 反转   扩大    Z轴   二刀     更新       指数     画像
  228.   "箭头"      => ["wp", 0,[  0, 0],[  0,  0],   0,  45,  0, false, [1,1],  true, false,[2,6,false],   "",    "arrow01"],
  229.   "旋转"      => ["wp", 0,[  0, 0],[  0,  0],   0, 360,  0, false, [1,1],  true, false,[1,8, true],   "",    ""],
  230.  
  231. #--------------------------------------------------------------------------
  232. # ● 武器・动画飞出 让战斗动画飞出去。飞行道具、远距离攻击用
  233. #--------------------------------------------------------------------------
  234.   # ID…数据库里设定的动画ID。[动画移动ID,被击中时的动画ID] 0是不显示动画。-1是显示武器的动画。
  235.   # 始…动画飞出时的开始位置。当减少时、实行一个以上目标的复数的动画
  236.   #     [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标] [6=画面]
  237.   # 后…动画发出后的结束位置。当减少时、实行一个以上目标的复数的动画
  238.   #     [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标] [6=画面]
  239.   # 始调整…移动开始坐标的微调整。[X轴, Y轴] 敌人的X轴自动反计算的
  240.   # 后调整…移动结束坐标的微调整。[X轴, Y轴] 敌人的X轴自动反计算的
  241.   # 速度…X轴移动1帧的像素数目。负增长将成为处理时间、距离速度会有所变化。
  242.   # 类型…移动后的处理。[0=消失(失误时自动改变为贯穿] [1=直线贯穿] [2=消失(失误时消失)]
  243.   # 轨道…动画飞出去时候的轨道。[从开始到顶点的轨道, 从顶点到结束的轨道]
  244.   #       填入数值的话是走抛物线。正数为向下的抛物线、负数为向上。
  245.   # Z轴…动画或者武器在角色面前显示的话是true
  246.   # 等待…动作行动直到下一个不想迁移就true [移动到动画的等待, 打击时动画的等待]
  247.   # 伤害…达到目标时、如果计算伤害就true
  248.   # 复位…如果移动目标归位时就true。如果不归位就false
  249.   # 相机…如果相机的根据变焦缩放动画就true
  250.   # 循环…当播放的动画已经完成移动时、如果最初循环往复的就true
  251.   # 反转不可…任何的场合、如果不能反转动画就true
  252.   # 武器…填入下面贴附的武器、技能动作名。如果不是用为""
  253.  
  254.   # 目标行动名         判別     ID   始 后   始调整   后调整 速度 类型  轨道    Z轴       等待       伤害   复位   相机   循环 反转不可 武器
  255.   "箭头射击WT"     => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [-3,-3], true, [ true, true],  true,  true,  true, false, false,  "箭头"],
  256.   "箭头射击"       => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [-3,-3], true, [false,false],  true,  true,  true, false, false,  "箭头"],
  257.   "水铁炮射击"     => ["m_a",[69,69], 0, 1, [ 0, 0], [ 0, 0], 10,  0, [ 0, 0], true, [ true, true],  true,  true,  true,  true, false,  ""],
  258.   "武器开始抛出"   => ["m_a",[ 0,-1], 0, 1, [ 4,-6], [ 0, 0], 10,  2, [-3,-3], true, [ true,false],  true,  true,  true, false, false,  "旋转"],
  259.   "武器抛出返回"   => ["m_a",[ 0, 0], 1, 0, [ 0, 0], [ 4,-6], 10,  0, [ 3, 3], true, [ true,false], false,  true,  true, false, false,  "旋转"],
  260.  
  261. #--------------------------------------------------------------------------
  262. # ● 战斗动画 数据库的战斗动画 显示动画在战斗
  263. #--------------------------------------------------------------------------
  264.   # ID…动画ID。-1时武器设定为动画 -2时另一端二刀流的动画
  265.   #             -3时技能也变成武器上所带的动画。
  266.   # 对象…[0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标]
  267.   # 复位…对象的坐标移动、如果在追踪动画就是true
  268.   # 等待…如果显示动画等到结束就是true
  269.   # 伤害…如果要计算伤害就是true
  270.   # 相机…如果相机的根据变焦缩放动画就true
  271.   # 反转不可…任何的场合、如果不能反转动画就true
  272.   # 反转…true时动画的图像将被反转。
  273.   # Z轴…如果想显示在前面的动画字符就true
  274.  
  275.   # 目标行动名(伤害系)       判別     ID 对象  复位   等待   伤害   相机 反转不可  反转    Z轴
  276.   "对象动画武器"      => ["anime",  -1,  1, false, false,  true,  true, false,  false,  true],
  277.   "对象动画武器WT"    => ["anime",  -1,  1, false,  true,  true,  true, false,  false,  true],
  278.   "对象动画武器LWT"   => ["anime",  -2,  1, false,  true,  true,  true, false,  false,  true],
  279.   "对象动画"          => ["anime",  -3,  1, false, false,  true,  true, false,  false,  true],
  280.   "对象动画WT"        => ["anime",  -3,  1, false,  true,  true,  true, false,  false,  true],
  281.  
  282.   # 目标行动名(自身系)       判別     ID 对象  复位   重量   伤害   相机 反转不可  反转    Z轴
  283.   "魔法吟唱中"          => ["anime", 113,  0,  true,  true, false,  true, false,  false,  true],
  284.   "特技待机中"          => ["anime", 114,  0,  true,  true, false,  true, false,  false,  true],
  285.   "魔法启动动画"        => ["anime", 115,  0, false,  true, false,  true, false,  false, false],
  286.   "特技启动动画"        => ["anime", 116,  0, false,  true, false,  true, false,  false, false],
  287.   "斩击/必杀技1"        => ["anime",  11,  1, false,  true, false,  true, false,  false, false],
  288.   "对象动画等待"        => ["anime",  -1,  1, false,  true, false,  true, false,  false, false],
  289.  
  290. #--------------------------------------------------------------------------
  291. # ● 摄影的工作  画面的缩放和滚动
  292. #--------------------------------------------------------------------------
  293.   # 对象…移动和缩放的对象
  294.   #       [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标] [6=画面]
  295.   # 调整坐标…微调整相机坐标的最后地点 [X轴(正画面→), Y轴(正画面↓)]
  296.   # 时间…摄影的工作所花费的时间
  297.   # 等待…摄影结束为止等待话就true。不要等待的话就false
  298.   # 放大…相机的放大率(%)。放大没有100。
  299.  
  300.   # 目标动作名          判別    对象   调整坐标   放大 时间  等待
  301.   "重置相机"      => ["camera",   6, [   0,   0], 100,  40, false],
  302.   "放大"          => ["camera",   6, [   0, 100], 120,  40, false],
  303.   "缩小"          => ["camera",   6, [   0,   0],  80,  40, false],
  304.  
  305. #--------------------------------------------------------------------------
  306. # ● 画面的摇动  画面摇晃。空中坐标(H坐标是0以上)的角色不要摇动
  307. #--------------------------------------------------------------------------
  308.   # 方向…摇动的方向 [横,纵] 数字越大摇晃范围将扩大。
  309.   # 速度…摇动的速度。规模较小的摇动就快。
  310.   # 時間…摇动的持续时间。振动宽度随着时间一起弱
  311.   # 等待…摇动结束为止等待话就true。不要等待的话就false
  312.  
  313.   # 目标动作名          判別       方向   速度  时间  等待
  314.   "摇动小"         => ["shake", [  0, 4],  2,    16, false],
  315.   "摇动中"         => ["shake", [  0, 6],  3,    30, false],
  316.   "摇动大"         => ["shake", [  0,12],  3,    40, false],
  317.  
  318. #--------------------------------------------------------------------------
  319. # ● 画面色调变更 角色背景的色调变更
  320. #--------------------------------------------------------------------------
  321.   # 对象…变更色调的对象
  322.   #       [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标]
  323.   #       [6=背景] [7=自身+目标] [8=自身以外] [9=自分+目标以外] [10=所有]
  324.   # 色调水平…[ R, G, B分别是红、绿、蓝。最初(色调强度), 变更时间, ※返回]
  325.   # ※返回…变更结束返回颜色的时间。不返回就0
  326.   # 等待…色调变更更结束为止等待话就true。不要等待的话就false
  327.  
  328.   # 色调变更名                    判別    对象     R,   G,   B, 最初 时间 返回  等待
  329.   "色调初始化"               => ["color",  10, [   0,   0,   0,   0,  30,   0], false],
  330.   "消减色调"                 => ["color",   0, [ 255,  50,  50, 100,  40,  40], false],
  331.   "毒色调"                   => ["color",   0, [ 170,  50, 255, 170,  30,  30], false],
  332.   "通用状态异常色调"         => ["color",   0, [ 255, 255,  50, 170,  40,  40], false],
  333.   "昏暗的背景"               => ["color",   6, [   0,   0,   0, 255,  30,   0], false],
  334.   "自身和目标以外昏暗"       => ["color",   9, [   0,   0,   0, 255,  30,   0], false],
  335.  
  336. #--------------------------------------------------------------------------
  337. # ● 过渡 实行固定画面后过渡
  338. #--------------------------------------------------------------------------
  339.   # 实行动作前"画面固定"将实行、请固定在画面上。
  340.   # 边界…边界的模糊。数值越大变得模糊。
  341.   # 时间…过渡花费的时间。在过渡期间的游戏画面是固定的
  342.   # 过渡文件名…过渡图像。图像放到Pictures文件夹中
  343.  
  344.   # 目标动作名           判別  边界  时间 过渡文件名
  345.   "圈"               => ["ts",  40,   60,  "circle"],
  346.  
  347. #--------------------------------------------------------------------------
  348. # ● 残像  角色动作留下的残影
  349. #--------------------------------------------------------------------------
  350.   # 数…残像数。0是显示残像关闭。非常大的负载增加时
  351.   # 间隔…残像显示的时间间隔。数值越小就越狭窄。单位帧(1/60秒)
  352.   # 处理…残像后的处理。true表示直到战斗结束消失,false表示一直没有消失
  353.   # 透明度…残像的透明度 255-不透明,0-透明
  354.  
  355.   # 目标动作名          判別    数  间隔  处理  透明度
  356.   "残像ON"        => ["mirage",  4,   3,  true,  160],
  357.   "残像OFF"       => ["mirage",  0,   0,  true,    0],
  358.  
  359. #--------------------------------------------------------------------------
  360. # ● 角色旋转。画像旋转。与反转不同、武器动作不能被反映
  361. #--------------------------------------------------------------------------
  362.   # 旋转着角色的动作结束后、旋转角度被复位
  363.   # 旋转中的图像传输原点成为中心。反转不同、不能反映武器动作
  364.   # 时间…旋转过程所需时间。0表示立即反映
  365.   # 始度…旋转开始时的角度。指定于0~360度之间。正数为正半圆、负数为反半圆。
  366.   # 终度…旋转完毕时的角度。指定于0~360度之间。跟上边所记相同,但敌人的设定是与其相反的。
  367.   # 类型…旋转结束后的处理。[0…旋转复位] [1…结束角度左端] [2…循环]
  368.  
  369.   # 目标动作名         判別    时间  始度  终度  类型
  370.   "右1旋转"        => ["angle",  12,    0, -360,   0],
  371.   "左1旋转"        => ["angle",  12,    0,  360,   0],
  372.  
  373. #--------------------------------------------------------------------------
  374. # ● 角色放大缩小 武器动作不能被反映
  375. #--------------------------------------------------------------------------
  376.   # 扩大缩小角色的全部动作已经完成、扩大缩小被复位。
  377.   # 反转不同、不反映武器动作
  378.   # 时间…扩大缩小过程所需时间。
  379.   # 开始大小…扩大缩小开始时的大小。小数点也接受。[X轴(横), Y轴(纵)]
  380.   # 结束大小…扩大缩小结束时的大小。小数点也接受。[X轴(横), Y轴(纵)]
  381.   # 类型…扩大缩小结束后的处理。[0…大小重设] [1…结束后大小保持] [2…循环]
  382.  
  383.   # 目标动作名         判別   时间   开始大小     结束大小  类型
  384.   "横收缩"         => ["zoom",  12,  [1.0, 1.0],  [0.5, 1.0],  0],
  385.   "纵收缩"         => ["zoom",  12,  [1.0, 1.0],  [1.0, 0.5],  0],
  386.  
  387. #--------------------------------------------------------------------------
  388. # ● 角色透明度操作 画像的透明度变更
  389. #--------------------------------------------------------------------------
  390.   # 透明度操作角色的全部动作已经完成、透明度操作被复位。
  391.   # 时间…透明度变更过程所需时间。
  392.   # 开始…开始时变更的透明度。0-透明 255-不透明
  393.   # 结束…结束时变更的透明度
  394.   # 影…表示阴影效果的话是true、不表示为false
  395.   # 武器…武器也同样透明度操作就true
  396.   # 循环…透明度变更结束后、如果自动操作逆转就true
  397.   # 等待…操作结束后迁移无需等到下一个动作表示true
  398.  
  399.   # 目标行动名            判別     时间  开始  结束    影   武器   循环   等待
  400.   "逃走透明"         => ["opacity",   30,  255,   0,  true,  true, false, false],
  401.   "透明化"           => ["opacity",   60,  255,   0,  true,  true, false, false],
  402.   "透明化WT"         => ["opacity",   60,  255,   0,  true,  true, false,  true],
  403.   "透明化解除"       => ["opacity",   60,    0, 255,  true,  true, false, false],
  404.   "透明化解除WT"     => ["opacity",   60,    0, 255,  true,  true, false,  true],
  405.  
  406. #--------------------------------------------------------------------------
  407. # ● 状态动画 显示事件使用的状态ICON
  408. #--------------------------------------------------------------------------
  409.   # 种类…状态的种类(纵位置)在0~9之间。
  410.   # 速度…更新速度。2种元件从第一帧将播放
  411.   # 大小…气球的大小
  412.  
  413.   #  气球名             判別     种类 速度  大小
  414.   "状态异常/通用"   => ["balloon",   6,  10,  0.6],
  415.   "状态异常/消减"   => ["balloon",   5,  10,  0.6],
  416.   "状态异常/睡眠"   => ["balloon",   9,  10,  0.6],
  417.  
  418. #--------------------------------------------------------------------------
  419. # ● 图片的表示  一名角色对应显示一枚图片
  420. #--------------------------------------------------------------------------
  421.   # 号码…要使用图片的号码。它是用于管理图片的号码。不管多少都显示。
  422.   #       完整动作结束后自动自动删除(Bitmap释放)
  423.   # 开始坐标…移动的开始位置。图片的左上角处的原点。[X轴, Y轴]
  424.   #           已经有图像的场合、当开始坐标是在其位置[]
  425.   # 结束坐标…移动的结束位置。开始位置显示成为相同数值
  426.   #           平面使用的场合、开始和结束将保持的移动速度[]
  427.   # 时间…移动时间。0是删除的图片
  428.   # Z轴…图片Z坐标。100以上如果它被显示在窗口的前面
  429.   # 透明度…透明度设定。[开始时的透明度, 每1帧透明度的制度]
  430.   # 平面使用…平面类(图像瓷砖状排列着图像)使用矩形的场合。[X轴,Y轴]
  431.   #           不想使用平面的场合就[]
  432.   # BA反转…偷袭时图像反转X坐标移动如果反向就true
  433.   #         平面使用时的图像不逆转就true、X坐标移动的是相反的
  434.   # 图片文件名…图片文件夹内的文件名。
  435.  
  436.   # 目标行动名          判別  号码  开始坐标     结束坐标   时间 Z轴   透明度     平面使用  BA反转  图片文件名
  437.   "切入A1"          => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor4-1"],
  438.   "切入A2"          => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor4-2"],
  439.   "切入A3"          => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-2"],
  440.   "切入A4"          => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-3"],
  441.   "切入结束"        => ["pic",  0,          [], [ 600,   8],  30, 90, [255,  0],        [],  true, ""],
  442.   "切入背景开始"    => ["pic",  1, [   0,   8], [ 100,   8],  10, 80, [  0, 10], [544,288],  true, "cutin_back"],
  443.   "切入背景结束"    => ["pic",  1,          [],          [],  10, 80, [255, -7], [544,288],  true, ""],
  444.   "白色淡入"        => ["pic",  0, [   0,   0], [   0,   0],  50,500, [  0,  6],        [], false, "white"],
  445.   "白色淡出"        => ["pic",  0, [   0,   0], [   0,   0],  50,500, [255, -6],        [], false, "white"],
  446.  
  447. #--------------------------------------------------------------------------
  448. # ● 状态操作
  449. #--------------------------------------------------------------------------
  450.   # 対象…[0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标]
  451.   # 扩张…扩张对象的设定 [0=没有扩张] [1=随机1体] [2=自身以外]
  452.   # 操作…如果赋予状态就"+",如果解除状态就"-"
  453.   # 状态ID…操作切换状态的ID一起排列放进去
  454.  
  455.   # 状态赋予名               判別  对象 扩张 操作 状态ID
  456.   "赋予战斗不能"         => ["sta",  0,   0, "+",  [1]],
  457.  
  458. #--------------------------------------------------------------------------
  459. # ● FPS(游戏整体的速度变更) 检查行动的细节
  460. #--------------------------------------------------------------------------
  461.   # 游戏速度…60是默认的数值、比这个值低的时候就会放慢。 
  462.  
  463.   # 目标行动名       判別  游戏速度
  464.   "慢播放"       => ["fps",  15],
  465.   "通常播放"     => ["fps",  60],
  466.  
  467. #--------------------------------------------------------------------------
  468. # ● 角色画像变更 角色画像引用的文件变更
  469. #--------------------------------------------------------------------------
  470.   # 维持…角色的场合。战斗后图像变更维持表示true
  471.   # 指数…角色的场合。行走图的图像,数字排列方式如下:
  472.   #          [0][1][2][3]
  473.   #          [4][5][6][7]
  474.   #
  475.   # 文件名…变更图像文件名。角色放在Characters文件夹、
  476.   #         敌人放在Battlers文件夹。
  477.   # 脸图…主角的場合、战斗后的变更角色脸图[脸图指数, 文件名]
  478.   #       如果不变更则是[]
  479.  
  480.   # 目标行动名              判別     维持    指数    文件名        脸图
  481.   "灰太狼变身"        => ["change", false,    6,    "Animal", [0, "Actor4"]],
  482.  
  483. #--------------------------------------------------------------------------
  484. # ● 技能连发  行动中断后、导出不同的技能
  485. #--------------------------------------------------------------------------
  486.   # 习得…如果连发的技能没有被习得也可以实行的话是true
  487.   # 成本条件…技能连发的成本不足而可能就true
  488.   # 技能ID…连发技能的ID
  489.  
  490.   # 目标行动名           判別   习得  成本条件 技能ID
  491.   "多段攻击连发"     => ["der", true,  false,   130],
  492.  
  493. #--------------------------------------------------------------------------
  494. # ● 声音的演奏  BGM・BGS・SE按响了
  495. #--------------------------------------------------------------------------
  496.   # 种别…効果音为"se" BGM为"bgm" BGS为"bgs"
  497.   # 速度…速度。50~150之间指定的最多 不管哪个都要默认为100。
  498.   # 音量…音量。50~150之间指定的指定 不管哪个都要默认为100。
  499.   # 文件名…播放的文件名。""时不改变任何BGM和BGS的设定。
  500.  
  501.   # 目标行动名         判別    种别  速度 音量 文件名
  502.   "Bow1"          => ["sound", "se", 100,  80, "Bow1"],
  503.  
  504. #--------------------------------------------------------------------------
  505. # ● 电影的播放  ogv电影文件播放
  506. #--------------------------------------------------------------------------
  507.   # 文件名…播放电影文件名。电影放在Movies文件夹
  508.  
  509.   # 目标行动名              判別     文件名
  510.   "死亡标记电影"       => ["movie", "sample1"],
  511.  
  512. #--------------------------------------------------------------------------
  513. # ● 游戏开关的设置(侧面图专用开关)的操作
  514. #--------------------------------------------------------------------------
  515.   # ID正值游戏开关、侧视图中专用开关的操作
  516.   # ON号码…ON开关ID整理排列放进去
  517.   # OFF号码号…OFF开关ID整理排列放进去
  518.   #
  519.   # 开关设置名           判別     ON号码   OFF号码   
  520.   "开关No1/ON"      => ["switch",  [ 1],   []],
  521.   "背景宇宙变更"    => ["switch",  [-4],   []],
  522.   "背景宇宙解除"    => ["switch",    [],   [-4]],
  523.   "魔法阵ON"        => ["switch",  [-5],   []],
  524.   "魔法阵OFF"       => ["switch",    [],   [-5]],
  525.  
  526. #--------------------------------------------------------------------------
  527. # ● 游戏变量的操作
  528. #--------------------------------------------------------------------------
  529.   # 变量No…设置哪个变量
  530.   # 操作…[0=代入] [1=加法] [2=减法] [3=乘法] [4=除法] [5=剩余]
  531.   # 设置数值…指定成为演算对象的数值。负增长、至于这个具体数字
  532.   #           绝对值的变量No这些值存储在计算的对象
  533.   #
  534.   # 变量设置名         判別     变量No  操作 设置数值
  535.   "变量No1/+1"     => ["variable",   1,     1,     1],
  536.  
  537. #--------------------------------------------------------------------------
  538. # ● 条件分岐 (游戏开关) 条件设定、满足条件以后将停止所有行动
  539. #--------------------------------------------------------------------------
  540.   # 开关No…设置哪个开关。侧视图专用开关操作
  541.   # 条件…如果ON就true、如果OFF就false
  542.   # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  543.   #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  544.   #
  545.   # 目标行动名           判別  开关No  条件  分岐
  546.   "实行开关No1=ON" =>   ["n_1",   1,   true,   0],
  547.  
  548. #--------------------------------------------------------------------------
  549. # ● 条件分岐 (游戏变量)
  550. #--------------------------------------------------------------------------
  551.   # 变量No…设置哪个变量
  552.   # 数值…条件的数字。它在减的绝对值的变量被内定为参考。
  553.   # 条件…引用变量条件的数字…[0=等于] [1=小于] [2=大于]
  554.   # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  555.   #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  556.   #
  557.   # 目标行动名               判別  变量No 数値  条件  分岐
  558.   "实行变量No1=1"        => ["n_2",   1,    1,    0,    0],
  559.  
  560. #--------------------------------------------------------------------------
  561. # ● 条件分岐 (状态)
  562. #--------------------------------------------------------------------------
  563.   # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  564.   # 状态ID…设置哪个状态
  565.   # 条件…[0=赋予状态] [1=解除状态]
  566.   # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  567.   # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  568.   #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  569.   #
  570.   # 目标行动名               判別   对象 状态ID  条件  人数  分岐
  571.   "死亡确认"             => ["n_3",   1,    1,    0,     1,   1],
  572.  
  573. #--------------------------------------------------------------------------
  574. # ● 条件分岐 (技能)
  575. #--------------------------------------------------------------------------
  576.   # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  577.   # 技能ID…设置哪个技能
  578.   # 条件…[0=可以使用] [1=不能使用]
  579.   # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  580.   # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  581.   #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  582.   #
  583.   # 目标行动名               判別  对象 技能ID 条件  人数  分岐
  584.   "强击使用可限定"       => ["n_4",  0,   80,    0,    1,   0],
  585.  
  586. #--------------------------------------------------------------------------
  587. # ● 条件分岐 (参数)
  588. #--------------------------------------------------------------------------
  589.   # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  590.   # 种別…设置参数条件
  591.   #       [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP] [7=攻击力]
  592.   #       [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=幸运]
  593.   # 数值…条件的数字。从最大值减去的百分比%(HP・MP・TP限定)
  594.   # 条件…引用变量条件的数字…[0=等于] [1=小于] [2=大于]
  595.   # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  596.   # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  597.   #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  598.   #
  599.   # 目标行动名               判別  对象  种别  数值  条件  人数 分岐
  600.   "实行HP50%以上"        => ["n_5",  0,    4,  -50,    2,    1,   0],
  601.  
  602. #--------------------------------------------------------------------------
  603. # ● 条件分岐 (装备)
  604. #--------------------------------------------------------------------------
  605.   # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  606.   # 种别…条件装备的种类 [0=武器] [1=防具]
  607.   # 装备ID…在改类型的项目ID。一次性排列在[]里。
  608.   #         在下降武器(防具)类型参考
  609.   # 条件…[0=有装备] [1=没有装备]
  610.   # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  611.   # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  612.   #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  613.   #
  614.   # 目标行动名               判別  对象  种别    ID    条件  人数 分岐
  615.   "手斧限定"             => ["n_6",  0,    0,    [1],    0,    1,   0],
  616.   "拳限定"               => ["n_6",  0,    0,   [-2],    0,    1,   0],
  617.   "拳禁止"               => ["n_6",  0,    0,   [-2],    0,    1,   1],
  618.   "弓限定"               => ["n_6",  0,    0,   [-6],    0,    1,   0],
  619.   "弓禁止"               => ["n_6",  0,    0,   [-6],    0,    1,   1],
  620.   "拳弓禁止"             => ["n_6",  0,    0,[-2,-6],    0,    1,   1],
  621.  
  622. #--------------------------------------------------------------------------
  623. # ● 条件分岐 (脚本) 
  624. #--------------------------------------------------------------------------
  625.   # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  626.   #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  627.   # 脚本…true或false返回给脚本
  628.   #
  629.   # 目标行动名               判別   分岐   脚本
  630.   "实行50%的确率"        => ["n_7",   0,  "rand(100) < 50"],
  631.   "角色限定"             => ["n_7",   0,  "@battler.actor?"],
  632.   "角色ID1限定"          => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 1"],
  633.   "角色ID2限定"          => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 2"],
  634.   "角色ID6限定"          => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 6"],
  635.   "角色ID7限定"          => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 7"],
  636.   "敌人限定"             => ["n_7",   0,  "[email protected]?"],
  637.   "敌人停止"             => ["n_7",   2,  "[email protected]?"],
  638.   "二刀流限定"           => ["n_7",   0,  "@battler.dual_wield?"],
  639.  
  640. #--------------------------------------------------------------------------
  641. # ● 第二个目标操作
  642. #--------------------------------------------------------------------------
  643.   # 第二个目标时、通常单独的目标的独立的目标信息
  644.   # 不想进行任何操作的场合、通常目标相同的对象所配置。
  645.   # 对象…[0=自身] [1=目标] [2=敌全体] [3=我方全体] [4=敌我方全体] [5=第二个目标]
  646.   # INDEX…对象队伍的指数(排列顺序)在选择。 INDEX = [指数, 判別]
  647.   #        指数…指数数値
  648.   #        判別…数值条件 [0=没有缩小] [1=对象指数] [2=该指数排除]
  649.   # ID…对象角色(敌人)ID进入选择ID的数字。0是选择不要
  650.   #     负增长的绝对值的ID会消除的条件
  651.   # 状态…对象当前增加状态ID进入选择状态ID的数字。0是选择不要
  652.   #       负增长的增加没有条件。
  653.   # 技能…对象可以使用的技能ID进入选择技能ID的数字。0是选择不要
  654.   #       负增长不可能使用的条件。
  655.   # 参数…对象的参数条件选择 参数 = [种别, 数值, 判別]
  656.   #       种别…[0=没有缩小] [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP]
  657.   #             [7=攻击力] [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=幸运]
  658.   #       数值…种别决定一个数值。从最大值减去的百分比%(HP・MP・TP限定)
  659.   #       判別…数值的条件 [0=同样] [1=小于] [2=多于]
  660.   # 装备…对象装备品的条件选择。角色限定装备 = [种类, ID]
  661.   #       种类…[0=武器] [1=防具]
  662.   #       ID…装备种别的条件项目ID一次性排列到[]里。0是选择不要
  663.   #           在下降为(防具)类型的。
  664.   # 扩张…扩张对象的设定 [0=没有扩张] [1=随机1体] [2=自身以外]
  665.   # 操作…[0=不操作] [1=通常目标和第二个目标变更] [2=第二个目标・通常目标初始化]
  666.  
  667.   # 目标行动名          判別 对象  INDEX  ID 状态 技能    参数       装备   扩张 操作
  668.   "自身以外我方全员"=> ["s_t", 3, [ 0, 0], 0,  0,   0, [ 0, 0, 0], [ 0,[0]],  2,   0],
  669.   "所有领域"        => ["s_t", 4, [ 0, 0], 0, -1,   0, [ 0, 0, 0], [ 0,[0]],  0,   1],
  670.  
  671. #--------------------------------------------------------------------------
  672. # ● 公共事件的呼叫  
  673. #--------------------------------------------------------------------------
  674.   # ID…公共事件ID
  675.   # ウエイト…运行中的事件,停止就true
  676.   #
  677.   # 公共事件设置名        判別    ID   ウエイト
  678.   "公共事件No1"      => ["common",  1,  true],
  679.  
  680. #--------------------------------------------------------------------------
  681. # ● 脚本的操作  
  682. #--------------------------------------------------------------------------
  683.   # 使动作被添加到建议的脚本中。样品p=1可以添加任何自己想要设置的脚本。
  684.   # 功能中、不能处理文字列。
  685.   #
  686.   #  脚本设置名  
  687.   "脚本测试"         => ["p = 1 "],
  688.  
  689. #--------------------------------------------------------------------------
  690. # ● 其它 没有设定项目的完整动作放进这
  691. #--------------------------------------------------------------------------
  692.   # 战斗角色消除…显示战斗动画消除(飞行动画被消除)
  693.   # 强制战斗结束…战斗强制结束
  694.   # 画面固定…让游戏画面固定。放进过渡前
  695.   # 伤害动画…技能动画播放、就在结束之前伤害POP
  696.   # 反转…武器图像动画反转。反转结束时的完全版或动作再次反转它
  697.   # 武器消除…显示武器图像消除
  698.   # 武器消除解除…消除要显示的武器图像
  699.   # 敌人战斗不能…实行战斗不能效果。主要敌人使用的战斗不能
  700.   # 战斗不能禁止…对象的HP是0的场合的禁止战斗不能。连续攻击开始时等
  701.   # 战斗不能禁止解除…禁止解除战斗不能。连续攻击的结束。工作结束时允许战斗不能。
  702.   # 待机取消…待机动作将不执行。战斗动作中演出等
  703.   # 待机消除解除…待机取消解除、进行等待动作
  704.   # 初期位置变更…原本的坐标(初期位置)目前的坐标变更
  705.   # 初期位置变更解除…初期位置变更改变其正常恢复原状。
  706.   # 强制…下次的行动强制目标(反应)
  707.   # 强制2…下次的行动强制第二个目标(反应)
  708.   # 下个行动者…战斗结束认定、之后的角色都采取行动。
  709.   # 个别开始…复数目标单独攻击处理的场合、重复行动开始的标记
  710.   # 个别结束…复数目标单独攻击处理的场合、重复行动结束的标记
  711.   # 循环开始…"循环开始"和"循环结束"的之间的动作一直重复
  712.   # 循环结束…"循环开始"和"循环结束"的之间的动作一直重复
  713.  
  714.   # 目标动作名              判別
  715.   "战斗角色消除"      => ["anime_off"],
  716.   "强制战斗结束"      => ["battle_end"],
  717.   "画面固定"          => ["graphics_freeze"],
  718.   "伤害动画"          => ["damage_anime"],
  719.   "反转"              => ["mirror"],
  720.   "武器消除"          => ["weapon_off"],
  721.   "武器消除解除"      => ["weapon_on"],
  722.   "敌人战斗不能"      => ["normal_collapse"],
  723.   "战斗不能禁止"      => ["no_collapse"],
  724.   "战斗不能禁止解除"  => ["collapse"],
  725.   "待机取消"          => ["non_motion"],
  726.   "待机取消解除"      => ["non_motion_cancel"],
  727.   "初期位置变更"      => ["change_base_position"],
  728.   "初期位置变更解除"  => ["set_base_position"],
  729.   "强制"              => ["force_action"],
  730.   "强制2"             => ["force_action2"],
  731.   "下个行动者"        => ["next_battler"],
  732.   "个别开始"          => ["individual_start"],
  733.   "个别结束"          => ["individual_end"],
  734.   "循环开始"          => ["loop_start"],
  735.   "循环结束"          => ["loop_end"],
  736.  
  737. #--------------------------------------------------------------------------
  738. # ● 等待 下一个动作而不需要等待的时间
  739. #--------------------------------------------------------------------------
  740.   # 在动作数值的场合、时间和等待
  741.   # (例) "20" …下一个动作不需要等待20帧
  742.   #
  743.   # 负增长数值将成为随机等待、这个数值的0~绝对值之间
  744.   # 随机等待时间的决定。
  745.   # (例) "-20" …随机等待0-20帧
  746.  
  747. #--------------------------------------------------------------------------
  748. # ● 快捷命令
  749. #--------------------------------------------------------------------------
  750.   # 动作名通常设定全部动作排列放到行动制作里
  751.   # 动作设定没有记载了指令、可以减少一些工作
  752.   # 经常使用让你在过去的快捷方式使用和登记动作没有增加。
  753.   #
  754.   # [战斗动画]
  755.   # (例) "anime(20)" …实行数据库20号的动画目标(有等待)
  756.   # (例) "anime(20,false)" …实行数据库20号的动画目标(无需等待)
  757.   # (例) "anime_me(20)" …实行数据库20号的动画自身(有等待)
  758.   # (例) "anime_me(20,false)" …实行数据库20号的动画自身(无需等待)
  759.   #
  760.   # [等待 延迟指数] ※独立队伍等待延迟
  761.   # (例) "delay(12)"…指数1号的等待是0帧 2号的等待是12帧  3号的等待是24帧
  762.   #
  763.   # [効果音(SE)]
  764.   # (例) "se('Bow1')" …文件名Bow1的SE按响了
  765.   # (例) "se('Bow1',50)" …文件名Bow1的SE音调50按响了
  766.   #
  767.   # [目标动作(全部动作)强制]
  768.   # (例) "target('伤害弯向后')" …目标伤害强制操作
  769.   # (例) "target2('被伤害')" …第二个目标被伤害的强制全部动作
  770.  
  771.   }  
  772. #==============================================================================
  773. # ■ 完整动作
  774. #------------------------------------------------------------------------------
  775. #  将上边的行动动作组合起来、这里是实际做出的动作。
  776. #   这里的完整动作名将是下面主人公或者敌方所指定用的。
  777. #   条件分岐的下一个完整动作、为方便使用放在这。
  778. #==============================================================================
  779.   FULLACTION = {
  780.  
  781.   # ―――待机系―――
  782.   "通常待机"        => ["待机"],
  783.   "通常待机固定"    => ["待机固定WT"],
  784.   "消减待机"        => ["状态异常/消减","消减色调","待机","待机"],
  785.   "防御待机"        => ["待机固定WT"],
  786.   "毒待机"          => ["状态异常/通用","毒色调","待机","待机","敌人限定","80"],
  787.   "睡眠待机"        => ["状态异常/睡眠","敌人限定","40","敌人停止","倒下","倒下"],
  788.   "通用状态异常待机"=> ["状态异常/通用","通用状态异常色调","待机","待机","敌人限定","80"],
  789.   "观望"            => ["待机","60"],
  790.   "战斗不能"        => ["倒下"],
  791.  
  792.   # ――系统系――
  793.   "战斗开始我方"    => ["战斗前的我方配置","delay(4)","坐标左向复位"],
  794.   "我方退场"        => ["退场"],
  795.   "逃走"            => ["对象动画","重置相机","delay(4)","退场"],
  796.   "敌人逃走"        => ["对象动画","逃走透明","退场"],
  797.   "逃走失败"        => ["重置相机","delay(4)","逃走途中","一歩后移动","坐标左向复位"],
  798.   "指令输入"        => ["战斗角色消除","指令输入移动"],
  799.   "指令输入结束"    => ["初期目标复位"],
  800.   "指令后防御"      => ["待机固定WT"],
  801.   "指令后魔法"      => ["待机固定","魔法吟唱中"],
  802.   "指令后特技"      => ["待机固定","特技待机中"],
  803.   "防御"            => ["对象动画","待机固定WT"],
  804.   "回避"            => ["角色限定","右1旋转","一歩后跳跃","10","坐标左向复位"],
  805.   "盾护罩"          => ["se('Evasion2')","盾防御","60"],
  806.   "代替开始"        => ["初期敌移动","初期位置变更"],
  807.   "代替结束"        => ["初期位置变更解除","坐标左向复位"],
  808.   "被代替开始"      => ["一歩后移动","一歩后移动","待机固定WT"],
  809.   "被身代替结束"    => ["坐标左向复位"],
  810.   "胜利姿态挥动"    => ["战斗角色消除","胜利武器跳转","胜利跳转着地","120"],
  811.   "胜利摆的姿态"    => ["战斗角色消除","右1旋转","胜利跳转","拳限定","武器拳抛掷","拳禁止",
  812.                         "武器挥动R","120"],
  813.   "闪光"            => ["anime_me(119)","20"],
  814.  
  815.   # ―反应系―
  816.   "被伤害"      => ["伤害后弯向后","坐标左向复位"],
  817.   "被大伤害"    => ["摇动中","大伤害","坐标左向复位"],
  818.   "纵摇动"      => ["纵摇动01","纵摇动02","纵摇动01","纵摇动02","纵摇动01","纵摇动02"],
  819.  
  820.   # ―捷径系(从其他全面的行动被称为零件)―
  821.   "斩杀"            => ["武器挥动R","对象动画武器","10"],
  822.   "拳"              => ["武器拳抛掷","对象动画武器","10"],
  823.   "弓"              => ["Bow1","弓射击","箭头射击","9"],
  824.   "攻击"            => ["拳限定","拳","弓限定","弓","拳弓禁止","斩杀"],
  825.   "通常攻击开始"    => ["敌前移动","战斗不能禁止","个别开始","二刀流限定","左二刀"],
  826.   "通常攻击结束"    => ["死亡确认","对象动画武器WT","个别结束","战斗不能禁止解除","下个行动者",
  827.                         "坐标曲线重置"],
  828.   "左二刀"          => ["武器挥动L","对象动画武器LWT"],
  829.   "特技启动"        => ["一歩前移动","举起武器","特技启动动画"],
  830.   "魔法启动"        => ["一歩前移动","举起武器","魔法启动动画"],
  831.   "切入"            => ["切入背景开始","切入分岐","70","切入结束","切入背景结束",
  832.                         "20"],
  833.   "切入分岐"        => ["角色ID1限定","切入A1","角色ID2限定","切入A2",
  834.                         "角色ID6限定","切入A3","角色ID7限定","切入A4"],
  835.   "死亡标记动画"    => ["白色淡入","50","死亡标记电影","白色淡出","50"],
  836.   "背景宇宙"        => ["缩小","se('Blind',70)","昏暗的背景","自身以外我方全员",
  837.                         "强制2","透明化","透明化","40","背景宇宙变更","色调初始化"],
  838.   "背景宇宙的解除"  => ["重置相机","昏暗的背景","target2('透明化解除WT')","透明化解除",
  839.                         "40","背景宇宙解除","色调初始化"],
  840.   "魔法阵显示"      => ["se('Blind',70)","画面固定","魔法阵ON","圈"],
  841.   "魔法阵消除"      => ["40","画面固定","魔法阵OFF","圈"],
  842.  
  843.   # ――通常攻击系――
  844.   "通常攻击"        => ["通常攻击开始","待机固定","通常攻击结束"],
  845.   "斩杀攻击"        => ["通常攻击开始","死亡确认","武器挥动R","通常攻击结束"],
  846.   "拳攻击"          => ["通常攻击开始","武器拳抛掷","通常攻击结束"],
  847.   "抛掷攻击"        => ["通常攻击开始","武器抛掷","通常攻击结束"],
  848.   "弓攻击"          => ["一歩前移动","战斗不能禁止","个别开始","Bow1","弓射击",
  849.                         "箭头射击WT","个别结束","战斗不能禁止解除","坐标重置"],
  850.  
  851.   # ――技能系―――
  852.   "通用技能"        => ["特技启动","武器挥动R","伤害动画","坐标重置"],
  853.   "通用魔法"        => ["魔法启动","武器挥动R","伤害动画","坐标重置"],
  854.   "水铁炮"          => ["特技启动","武器挥动R","水铁炮射击","坐标重置"],
  855.   "武器抛出"        => ["特技启动","Bow1","武器挥动R","6","待机固定","武器开始抛出",
  856.                         "武器抛出返回","坐标重置"],
  857.   "切入攻击"        => ["特技启动","切入","攻击","坐标重置"],
  858.   "电影攻击"        => ["特技启动","待机固定","死亡标记动画","通常攻击开始","武器挥动R",
  859.                         "通常攻击结束"],
  860.   "变身"            => ["特技启动","anime(110,false)","灰太狼变身","待机固定","120","坐标重置"],
  861.   "5回攻击"         => ["特技启动","战斗不能禁止","弓禁止","敌前移动","攻击","攻击","攻击",
  862.                         "攻击","攻击","战斗不能禁止解除","坐标重置"],
  863.   "技能连发"        => ["武器抛出","多段攻击连发","斩杀攻击"],
  864.   "背景变更攻击"    => ["魔法启动","武器挥动R","背景宇宙","伤害动画","背景宇宙的解除","坐标重置"],
  865.   "图像攻击"        => ["魔法启动","魔法阵显示","武器挥动R","anime(80,false)","60",
  866.                         "摇动大","对象动画","魔法阵消除","坐标重置"],
  867.   "昏暗攻击"        => ["特技启动","自身和目标以外昏暗","se('Laser',150)",
  868.                         "残像ON","敌前移动","anime(35,false)","敌后移动","对象动画",
  869.                         "武器挥动R","20","色调初始化","坐标重置","残像OFF"],
  870.   "空中攻击"        => ["特技启动","Bow1","一歩前跳跃","跳前拍击",
  871.                         "待机固定","左1旋转","10","anime(117,false)","拍击",
  872.                         "对象动画","摇动中","强制","纵摇动","20",
  873.                         "一歩后跳跃","坐标重置"],
  874.  
  875.   # ――项目系―――
  876.   "物品使用"        => ["敌前移动","待机固定","对象动画WT","坐标左向复位"],
  877.  
  878.  
  879.  
  880.   }
  881.  
  882.  
  883.  
  884. #==============================================================================
  885. # ■ 战斗程序
  886. #------------------------------------------------------------------------------
  887. #  战斗场景的演出时间管理
  888. #  控制游戏开关・侧面图专用按钮来进行
  889. #==============================================================================
  890.   BATTLE_PROGRAM = {
  891.  
  892. #--------------------------------------------------------------------------
  893. # ● 开关的控制  开关的时间操作、演出编程
  894. #--------------------------------------------------------------------------
  895.   # 开关…实行游戏开关号码的程序。号码将只打开侧视图
  896.   #       当开关OFF、正在实行的程序将被中止
  897.   #       战斗结束时侧视图专用开关将被初始化(全部OFF)
  898.   #       在事件战斗前侧视图专用开关操作的场合。请把
  899.   #       在事件脚本写上$sv_camera.switches[1] = true
  900.   #       [1]操作的开关号码、如果ON就true 如果OFF就false)
  901.   # ON号码…假设游戏开关号码为OFF时。号码将只打开侧视图
  902.   #         号码一次性排列到里面。
  903.   #         例…[1,2,-5]游戏开关1号2号侧视图专用开关5号是ON
  904.   # OFF号码…假设游戏开关号码为OFF时。号码将只打开侧视图
  905.   #          不能操作的场合的号码一次性排列到[]里
  906.   # 时间…以上的开关来实行该操作的时间。单位帧(1/60秒))
  907.   #       例100的场合、开关操作从程序开始后进行100帧
  908.   #       [参考数值] 30秒…1800 1分…3600 5分…18000 10分…36000 1時間…216000
  909.   # 随机宽度…随机宽度的时间被添加。单位帧(1/60秒)
  910.   #           例时间是300、时间是300-600帧,最终它的随机宽度为300
  911.  
  912.   # 程序名                 判別    开关  ON号码   OFF号码 时间  随机宽度
  913.   "背景堡垒"         => ["switch",  -1,   [-2],      [],  1200,     0],
  914.   "背景入海"         => ["switch",  -2,   [-3],      [],  2400,     0],
  915.  
  916. #--------------------------------------------------------------------------
  917. # ● SE/BGM/BGS的演奏  
  918. #--------------------------------------------------------------------------
  919.   # 开关…实行游戏开关号码的信号。负面仅查看开关。
  920.   # 种別…SE的操作为"se"  BGM的操作为"bgm"  BGS的操作为"bgs"
  921.   # 速度…速度。50~150之间指定的最多 不管哪个都要默认为100。
  922.   # 音量…音量。50~150之间指定的指定 不管哪个都要默认为100。
  923.   # 文件名…播放的文件名。""时不改变任何BGM和BGS的设定。
  924.  
  925.   # 程序名               判別    开关 种别   速度  音量 文件名
  926.   "海声"            => ["sound",  -1, "bgs",  100,  80, "Sea"],
  927.  
  928. #--------------------------------------------------------------------------
  929. # ● 背景的控制  画像变更自动进行滚动
  930. #--------------------------------------------------------------------------
  931.   # 开关…实行开关号码的信号
  932.   # No.…操作背景的号码。1地背景、2墙壁背景(远景)
  933.   # 滚动速度…背景的移动速度。[X轴, Y轴]
  934.   #           单位每100帧前往像素数。
  935.   #           当在高速移动的场合、1000是一个标准的单位数值
  936.   # BA反转…偷袭时背景的X坐标滚动如果反转就true 图像不反转
  937.   # 图像…背景图像变更的場合、放进文件的文件名。不变更的场合""
  938.   #       地背景Battlebacks1文件夹里、壁背景参考该Battlebacks2文件夹
  939.   #       设定想变更的背景、变更前的继承
  940.   # 联合图像…背景滚动时、背景变更自然显示的联合图像文件名
  941.   #           滚动途中进行背景变更的场合、滚动结束后进行变更。
  942.   #           性质上、不对应与斜滚动
  943.   # 打断…出现这种行为时的背景能够控制的情况下
  944.   #       如果允许打断就true(在显示图像,延续滚动的情况下的打断背景)
  945.   #       如果不允许打断就false(另一个背景控制处于正在等待处理的背景消失进行了变更时)
  946.  
  947.   # 程序名                判別   开关 No.    滚动速度   BA反转   图像        联合图像    打断
  948.   "远景右移动"      => ["scroll", -1,  1, [  40,    0],  true,  "",                 "",  true],
  949.   "海背景3变更"     => ["scroll", -2,  1, [ 120,    0],  true,  "Sea_ex03", "Sea_ex02",  true],
  950.   "海背景4变更"     => ["scroll", -3,  1, [  40,    0],  true,  "Sea_ex01", "Sea_ex04",  true],
  951.   "背景宇宙变更1"   => ["scroll", -4,  1, [   0,    0],  true,  "DarkSpace",        "", false],
  952.   "背景宇宙变更2"   => ["scroll", -4,  2, [   0,    0],  true,  "DarkSpace",        "", false],
  953.  
  954. #--------------------------------------------------------------------------
  955. # ● 期间的图片 期间的瓷砖状的一幅画操作。风或巨大魔方阵等
  956. #--------------------------------------------------------------------------
  957.   # 开关…实行开关号码的信号
  958.   # No.…操作的图像数。可以显示许多图片
  959.   # 移动速度…每100帧图片移动的速度。[X轴, Y轴] 0与滚动背景同步
  960.   # 期间…改程序进行的时间。单位帧(1/60秒)。时间0表示无限制的循环
  961.   # 透明操作…图片的透明度操作。[开始透明度, 每秒100帧添加到的透明度]
  962.   #           透明度255成为开始透明度到备份。
  963.   # Z轴…图片的Z坐标。100以上如果它被显示在窗口的前面
  964.   # 允许摇动…攻击动作摇动、如果允许摇动就true
  965.   # BA反转…偷袭时背景的X坐标滚动如果反转就true 图像不反转
  966.   # 文件名…图像的文件名。图像放到Pictures文件夹中
  967.  
  968.   # 程序名             判別  开关  No.   移动速度     期间   透明操作   Z轴   允许摇动 BA反转  文件名
  969.   "风"            => ["kpic", -1,  0, [  500,    0],    0, [ 255,   0],  90,   false,  true, "back_wind"],
  970.   "魔法阵"        => ["kpic", -5,  1, [    0,    0],    0, [ 255,   0],  90,    true,  true, "magic_square01"],
  971.  
  972. #--------------------------------------------------------------------------
  973. # ● 期间SE 期间的效果音响起了。如雷轰潮骚
  974. #--------------------------------------------------------------------------
  975.   # 开关…实行开关号码的信号 开始进行就是ON
  976.   # 期间…効果音响起的期间。单位帧(1/60秒)。在此间隔中效果音定期听到
  977.   # 随机宽度…随机宽度的期间被添加。单位帧(1/60秒)
  978.   # 速度…速度。50~150之间指定的最多 不管哪个都要默认为100。
  979.   # 音量…音量。50~150之间指定的指定 不管哪个都要默认为100。
  980.   # 开始实行…实行程序之后无需等待的期间内响起就true
  981.   # 文件名…播放效果音文件名。
  982.  
  983.   # 程序名                判別    开关 期间  随机宽度 速度 音量 开始实行 文件名
  984.   "鸥"              => ["keep_se", -1,  400,    100,  150,  60,  false,  "Crow"],
  985.   "鸥2"             => ["keep_se", -1,  300,    200,  140,  45,   true,  "Crow"],
  986.  
  987. #--------------------------------------------------------------------------
  988. # ● 期间移动 期间的画面摇动
  989. #--------------------------------------------------------------------------
  990.   # 开关…实行开关号码的信号。开始进行就是ON
  991.   # 期间…画面摇动期间。单位帧(1/60秒)
  992.   # 随机宽度…随机宽度的期间被添加。单位帧(1/60秒)
  993.   # 方向…摇动的方向 [横,纵] 数字越大摇晃范围将扩大。
  994.   # 速度…摇动的速度。规模较小的摇动就快。
  995.   # 時間…摇动的持续时间。振动宽度随着时间一起弱
  996.   # 开始实行…实行程序之后无需等待的期间内摇动就true
  997.  
  998.   # 程序名               判別    开关  期间 随机宽度  方向  速度  时间 开始实行
  999.   "船的摇动"       => ["keep_sk", -1,  130,    0,  [  0, 4], 80,  120,  true],
  1000.  
  1001. #--------------------------------------------------------------------------
  1002. # ● 期间色调变更 期间的画面的色调变更
  1003. #--------------------------------------------------------------------------
  1004.   # 开关…实行开关号码的信号。开始进行就是ON
  1005.   # 期间…色调变更期间。单位帧(1/60秒)
  1006.   # 随机宽度…随机宽度的期间被添加。单位帧(1/60秒)
  1007.   # 对象…色调变更的对象 [0=背景] [1=敌全] [2=我方全] [3=敌我方全] [4=所有]
  1008.   # 色调水平…[ R, G, B分别是红、绿、蓝。最初(色调强度), 变更时间, ※返回]
  1009.   # ※返回…变更结束返回颜色的时间。不返回就0
  1010.   # 开始实行…实行程序之后无需等待的期间内色调变更就true
  1011.  
  1012.   # 程序名                 判別   开关 期间 随机宽度  对象    R,   G,   B, 最初  时间 返回  开始实行
  1013.   "雷光"             => ["keep_c",  0,  300,  100,     4,  [ 255, 255, 255, 255,   8,   8],  true],
  1014.   "紧急情况"         => ["keep_c",  0,  150,    0,     4,  [ 255,   0,   0, 100,  40,  40],  true],
  1015.  
  1016. }
  1017. #==============================================================================
  1018. # ■ 相机设定
  1019. #------------------------------------------------------------------------------
  1020. #  除了行动和战斗场面的每个要点,进行摄影的工作
  1021. #  动作名由于相机移动、请不要变更名称
  1022. #==============================================================================
  1023.   BATTLE_CAMERA = {
  1024. #--------------------------------------------------------------------------
  1025. # ● 摄影的工作  画面进行的缩放和滚动
  1026. #--------------------------------------------------------------------------
  1027.   # 对象…移动和缩放的对象 [2=敌全] [3=我方全] [4=敌我方全] [6=画面]
  1028.   # 调整坐标…微调整相机坐标的最后地点 [X轴(正画面→), Y轴(正画面↓)]
  1029.   # 时间…摄影的工作所花费的时间
  1030.   # 放大…相机的放大率(%)。放大没有100。
  1031.  
  1032.   # 目标动作名           判別    对象  调整坐标   放大 时间
  1033.   "顺序开始前"     => ["camera",   6, [  40,   0],  95, 40],
  1034.   "顺序开始后"     => ["camera",   6, [   0,   0], 100, 40],
  1035.   "战斗结束时"     => ["camera",   6, [ 100,   0], 100, 50],
  1036.  
  1037.  
  1038. }  
  1039. end


RUBY 代码复制
  1. 橫版
  2.  
  3. #==============================================================================
  4. # ■ Sideview Ver100
  5. #------------------------------------------------------------------------------
  6. #  管理角色侧视图战斗设定。
  7. #   汉化by: 圣痕
  8. #==============================================================================
  9. class SideView
  10.   #--------------------------------------------------------------------------
  11.   # ● 定义实例变量
  12.   #--------------------------------------------------------------------------
  13.   attr_accessor   :x                    # 画面X坐标
  14.   attr_accessor   :y                    # 画面Y坐标
  15.   attr_accessor   :z                    # 画面Z坐标
  16.   attr_accessor   :h                    # 高度坐标
  17.   attr_accessor   :j                    # 跳跃坐标
  18.   attr_accessor   :c                    # 曲线坐标
  19.   attr_accessor   :ox                   # 横原点
  20.   attr_accessor   :oy                   # 纵原点
  21.   attr_accessor   :oy_adjust            # 縦原点修正
  22.   attr_accessor   :angle                # 旋转角度
  23.   attr_accessor   :zoom_x               # 横扩大率
  24.   attr_accessor   :zoom_y               # 纵扩大率
  25.   attr_accessor   :pattern_w            # 细胞横位置(矩形内)
  26.   attr_accessor   :pattern_h            # 细胞縦位置(矩形内)
  27.   attr_accessor   :sx                   # 细胞横位置(画像全体)
  28.   attr_accessor   :sy                   # 细胞縦位置(画像全体)
  29.   attr_accessor   :pattern_type         # 单元更新类型
  30.   attr_accessor   :pattern_time         # 单元更新间隔
  31.   attr_accessor   :graphic_name         # 角色画像文件名
  32.   attr_accessor   :graphic_file_index   # 角色画像文件名指数
  33.   attr_accessor   :graphic_index        # 角色画像指数
  34.   attr_accessor   :cw                   # 矩形横组件
  35.   attr_accessor   :ch                   # 矩形纵组件
  36.   attr_accessor   :shadow_visible       # 阴影表示
  37.   attr_accessor   :weapon_visible       # 武器表示
  38.  
  39.   attr_accessor   :wait                 # 下一个动作等待时间
  40.   attr_accessor   :weapon_index         # 显示图像的武器排列指数
  41.   attr_accessor   :weapon_end           # 武器动画结束标记
  42.   attr_accessor   :force_action         # 強制动作
  43.   attr_accessor   :target_battler       # 目标角色情報
  44.   attr_accessor   :second_targets       # 第二个目标角色情報
  45.   attr_accessor   :m_a_targets          # 飞行动画目标情報
  46.   attr_accessor   :individual_targets   # 个别处理目标角色情报
  47.   attr_accessor   :effect_data          # 效果数据
  48.   attr_accessor   :anime_id             # 动画ID配列
  49.   attr_accessor   :anime_move_id        # 飞行动画ID配列
  50.   attr_accessor   :mirror               # 反转标志
  51.   attr_accessor   :opacity              # 透明度
  52.   attr_accessor   :opacity_data         # 透明度操作情报
  53.   attr_accessor   :set_damage           # 战斗场景的损伤处理
  54.   attr_accessor   :m_a_data             # 飞行动画情报
  55.   attr_accessor   :m_a_starter          # 飞行动画开始目标情报
  56.   attr_accessor   :action_end           # 行动后结束
  57.   attr_accessor   :damage_anime_data    # 战斗损伤动画的数据
  58.   attr_accessor   :anime_no_mirror      # 战斗动画禁止反转
  59.   attr_accessor   :anime_horming        # 战斗动画归位标志
  60.   attr_accessor   :anime_camera_zoom    # 战斗动画扩大缩小的相机
  61.   attr_accessor   :anime_plus_z         # 战斗动画Z坐标修正
  62.   attr_accessor   :derivation_skill_id  # 技能连发ID
  63.   attr_accessor   :immortal             # 无敌标志
  64.   attr_accessor   :mirage               # 残像数据
  65.   attr_accessor   :balloon_data         # 气球数据
  66.   attr_accessor   :timing               # 从角色不同的时序数据
  67.   attr_accessor   :timing_targets       # 时间数据传递另个角色
  68.   attr_accessor   :color_set            # 色调变更数据
  69.   attr_accessor   :color                # 色调数据
  70.   attr_accessor   :change_up            # 画像变更数据
  71.   attr_accessor   :hit                  # 更加次数
  72.   attr_accessor   :add_state            # 增加状态的显示防止标记
  73.   attr_accessor   :counter_id           # 计数器时的技能ID
  74.   attr_accessor   :reflection_id        # 魔法反射式的动画ID
  75.   attr_accessor   :result_damage        # 回合结束时的HP数据变更
  76.   attr_accessor   :active               # 行动权
  77.   attr_accessor   :anime_off            # 战斗动画删除
  78.   attr_accessor   :command_action       # 行动指令标志
  79.  
  80.   attr_accessor   :base_x               # 初期位置 X坐标
  81.   attr_accessor   :base_y               # 初期位置 Y坐标
  82.   attr_accessor   :base_h               # 初期位置 高度坐标
  83.   attr_accessor   :max_pattern_w        # 单元的横分割数
  84.   attr_accessor   :max_pattern_h        # 单元的纵分割数
  85.  
  86.   attr_reader     :collapse             # 角色战斗不能
  87.   attr_reader     :picture              # 图片显示标记
  88.   #--------------------------------------------------------------------------
  89.   # ● 初始化物件
  90.   #--------------------------------------------------------------------------
  91.   def initialize(battler)
  92.     [url=home.php?mod=space&uid=133701]@battler[/url] = battler
  93.     reset
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 初始化
  97.   #--------------------------------------------------------------------------
  98.   def reset
  99.     @x = 0
  100.     @y = 0
  101.     @z = 0
  102.     @h = 0
  103.     @j = 0
  104.     @c = 0
  105.     [url=home.php?mod=space&uid=271873]@jump[/url] = []
  106.     @curve = []
  107.     @ox = 0
  108.     @oy = 0
  109.     @oy_adjust = 0
  110.     @z_plus = 0
  111.     @move_time = 0
  112.     [url=home.php?mod=space&uid=124954]@Angle[/url] = 0
  113.     @angle_time = 0
  114.     @zoom_x = 1
  115.     @zoom_y = 1
  116.     @zoom_time = 0
  117.     @pattern_w = 0
  118.     @pattern_h = 0
  119.     @sx = 0
  120.     @sy = 0
  121.     @pattern_type = 0
  122.     @pattern_time = 0
  123.     @pattern_rest_time = 0
  124.     @graphic_name = ""
  125.     @graphic_file_index = ""
  126.     @graphic_index = 0
  127.     @cw = 0
  128.     @ch = 0
  129.     @shadow_visible = false
  130.     @weapon_visible = true
  131.  
  132.     [url=home.php?mod=space&uid=36110]@Wait[/url] = 0
  133.     @weapon_index = []
  134.     @weapon_end = true
  135.     @full_action = []
  136.     @action = []
  137.     @force_action = ""
  138.     @target_battler = []
  139.     @second_targets = []
  140.     @individual_targets = []
  141.     @m_a_targets = []
  142.     @effect_data = []
  143.     @anime_id = []
  144.     @anime_move_id = []
  145.     [url=home.php?mod=space&uid=316553]@opacity[/url] = 255
  146.     @opacity_data = []
  147.     @set_damage = false
  148.     @m_a_data = []
  149.     @m_a_starter = []
  150.     @action_end = false
  151.     @damage_anime_data = []
  152.     @anime_no_mirror = false
  153.     @anime_horming = false
  154.     @anime_camera_zoom = false
  155.     @anime_plus_z = true
  156.     @derivation_skill_id = 0
  157.     @immortal = false
  158.     @mirage = []
  159.     @play_data = []
  160.     @balloon_data = []
  161.     @picture = false
  162.     @timing = []
  163.     @timing_targets = []
  164.     @color_set = []
  165.     [url=home.php?mod=space&uid=10453]@color[/url] = []
  166.     @change_up = false
  167.     @non_motion = false
  168.     @graphics_change = false
  169.     @hit = []
  170.     @add_state = []
  171.     @collapse = false
  172.     @counter_id = 0
  173.     @reflection_id = 0
  174.     @result_damage = [0,0]
  175.     @active = false
  176.     @anime_off = false
  177.     @command_action = false
  178.  
  179.     @base_x = 0
  180.     @base_y = 0
  181.     @base_z = 0
  182.     @base_h = 0
  183.     @max_pattern_w = 0
  184.     @max_pattern_h = 0
  185.     @pattern_kind = 0
  186.     @pattern_count = 0
  187.     @move_time = 0
  188.     [url=home.php?mod=space&uid=111303]@mirror[/url] = false
  189.     @battler.set_graphic(@pre_change_data[0], @pre_change_data[1], @pre_change_data[2], @pre_change_data[3]) if @pre_change_data != nil
  190.     @pre_change_data = nil
  191.   end  
  192.   #--------------------------------------------------------------------------
  193.   # ● 格局
  194.   #--------------------------------------------------------------------------
  195.   def setup(bitmap_width, bitmap_height, first_action_flag)
  196.     reset if first_action_flag
  197.     set_data
  198.     set_base_position if !@graphics_change
  199.     set_graphics(bitmap_width, bitmap_height)
  200.     set_target
  201.     setup_graphics_change if @graphics_change
  202.     first_battler_anime_set if first_action_flag
  203.   end  
  204.   #--------------------------------------------------------------------------
  205.   # ● 取得角色数据
  206.   #--------------------------------------------------------------------------
  207.   def set_data
  208.     return if @battler == nil
  209.     if @battler.actor?
  210.       @graphic_name = @battler.character_name
  211.       @graphic_index = @battler.character_index
  212.     else
  213.       @graphic_name = @battler.battler_name
  214.       @graphic_index = 0
  215.     end
  216.     @max_pattern_w = max_pattern[0]
  217.     @max_pattern_h = max_pattern[1]
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # ● 基础坐标设置 data=[X轴, Y轴, H轴]  moment_set…即时配置
  221.   #--------------------------------------------------------------------------
  222.   def set_base_position(moment_set = true)
  223.     mirroring_reset
  224.     if @battler.actor?  && !@battler.is_a?(Game_Summon)
  225.       data = N03::ACTOR_POSITION[@battler.index].dup   
  226.       @base_x = data[0] * 100 if !@mirror
  227.       @base_x = (Graphics.width - data[0]) * 100 if @mirror
  228.     else
  229.       data = [@battler.screen_x, @battler.screen_y, 0].dup
  230.       @base_x = data[0] * 100 if !$sv_camera.mirror
  231.       @base_x = (Graphics.width - data[0]) * 100 if $sv_camera.mirror
  232.     end
  233.       if @battler.is_a?(Game_Summon)    #如果是召喚獸 則設定召喚獸座標
  234.         if @battler.actor_id < 16  #如果不是動物
  235.          data = N03::SUMMON_POSITION[$fu_wan_actor.index].dup #位置為召喚者前方#SUMMON_POSITION陣列
  236.        else
  237.          p "動物"
  238.         data = N03::ANIMAL_POSITION[$fu_wan_actor.index].dup
  239.         end
  240.     @base_x = data[0] * 100 if !@mirror
  241.      @base_x = (Graphics.width - data[0]) * 100 if @mirror
  242.      end
  243.     @base_y = data[1] * 100
  244.     @base_h = data[2] * 100
  245.     @base_z = @y
  246.     return if !moment_set
  247.     @x = @base_x
  248.     @y = @base_y
  249.     @z = @base_z
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ● 取得图像数据
  253.   #--------------------------------------------------------------------------
  254.   def set_graphics(bitmap_width, bitmap_height)
  255.     sign = @graphic_name[/^[\!\$]./]
  256.     if sign && sign.include?('$')
  257.       @cw = bitmap_width / @max_pattern_w
  258.       @ch = bitmap_height / @max_pattern_h
  259.     elsif @max_pattern_w == 1 && @max_pattern_h == 1
  260.       @cw = bitmap_width
  261.       @ch = bitmap_height
  262.     else
  263.       @cw = bitmap_width / (@max_pattern_w * 4)
  264.       @ch = bitmap_height / (@max_pattern_h * 2)
  265.     end
  266.     @ox = @cw / 2
  267.     @oy = @ch
  268.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  269.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 设定目标
  273.   #--------------------------------------------------------------------------
  274.   def set_target(target = nil)
  275.     @target_battler = target
  276.     @target_battler = [@battler] if target == nil
  277.     @second_targets = @target_battler
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # ● 设置图像的变更
  281.   #--------------------------------------------------------------------------
  282.   def setup_graphics_change
  283.     @graphics_change = false
  284.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  285.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  286.   end  
  287.   #--------------------------------------------------------------------------
  288.   # ● 取得战斗开始时的待机动画图像数据
  289.   #--------------------------------------------------------------------------
  290.   def first_battler_anime_set
  291.     loop do
  292.       update
  293.       break if @action_data == nil
  294.       break if @action_data[0] == "motion"
  295.       break if @action_data[0] == "move" && @action_data[8] != ""
  296.       break if @full_action == []
  297.     end
  298.     start_action(first_action) if @battler.movable?
  299.   end
  300.   #--------------------------------------------------------------------------
  301.   # ● 开始动作
  302.   #--------------------------------------------------------------------------
  303.   def start_action(kind = nil)
  304.     return if @event_fix && $game_troop.interpreter.running?
  305.     # 等待中的场合取消
  306.     return @wait -= 1 if @wait > 0 && kind == nil
  307.     action_setup(false) if kind != nil
  308.     set_action(kind)
  309.     @action = kind if @action == nil
  310.     # 动作顺序行动结束处理转变
  311.     action_terminate if @action == nil
  312.     # 决定下一个动作
  313.     @action_data = N03::ACTION[@action]
  314.     next_action
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # ● 初始化行动参数
  318.   #--------------------------------------------------------------------------
  319.   def action_setup(reset = true)
  320.     @event_fix = false
  321.     @set_damage = false
  322.     @action_end = false
  323.     @balloon_data = []
  324.     @loop_act = []
  325.     angle_reset if reset
  326.     zoom_reset if reset
  327.     opacity_reset if reset
  328.     @curve = []
  329.     @c = 0
  330.     convert_jump
  331.   end  
  332.   #--------------------------------------------------------------------------
  333.   # ● 行动结束的处理
  334.   #--------------------------------------------------------------------------
  335.   def action_terminate
  336.     @mirage = [] if @mirage_end
  337.     mirroring_reset
  338.     @picture = false
  339.     @individual_targets = []
  340.     action_setup if @active
  341.     action_setup(false) if !@active
  342.     # 待机开始行动迁移
  343.     stand_by_action if !@non_motion
  344.     # 战斗行动激活结束权利
  345.     next_battler
  346.   end  
  347.   #--------------------------------------------------------------------------
  348.   # ● 新动作内容的決定
  349.   #--------------------------------------------------------------------------
  350.   def set_action(kind = nil)
  351.     full_act = N03::FULLACTION[kind]
  352.     @full_action = full_act.dup if full_act != nil
  353.     @action = @full_action.shift
  354.     # 参考全部动作如果全部动作统合
  355.     full_act2 = N03::FULLACTION[@action]
  356.     @full_action = full_act2.dup + @full_action if full_act2 != nil
  357.   end
  358.   #--------------------------------------------------------------------------
  359.   # ● 采取下个行动
  360.   #--------------------------------------------------------------------------
  361.   def next_action
  362.     @wait = 0
  363.     # 捷径确认
  364.     eval(@action) if @action != nil && @action_data == nil && N03::FULLACTION[@action] == nil
  365.     # 体能设定
  366.     @wait = @action.to_i if @wait == 0 && @action_data == nil
  367.     @wait = rand(@wait.abs + 1) if @wait < 0
  368.     # 开始动作
  369.     action_play
  370.   end
  371.   #--------------------------------------------------------------------------
  372.   # ● 待机开始动作迁移
  373.   #--------------------------------------------------------------------------
  374.   def stand_by_action
  375.     # 通常待机
  376.     stand_by_act = normal
  377.     # HP的1/4紧要关头行动
  378.     stand_by_act = pinch if @battler.hp <= @battler.mhp / 4
  379.     # 状态检查
  380.     stand_by_act = state(@battler.states[0].id) if @battler.states[0] != nil && state(@battler.states[0].id) != nil
  381.     # 指令检查
  382.     stand_by_act = command if @command_action && command != nil
  383.     set_action(stand_by_act)
  384.     @action = stand_by_act if @action == nil
  385.   end
  386.   #--------------------------------------------------------------------------
  387.   # ● 开始强制动作
  388.   #--------------------------------------------------------------------------
  389.   def start_force_action
  390.     return if @active
  391.     start_action(@force_action)
  392.     @force_action = ""
  393.   end  
  394.   #--------------------------------------------------------------------------
  395.   # ● 追加动作
  396.   #--------------------------------------------------------------------------
  397.   def add_action(kind)
  398.     @full_action.push(kind)
  399.   end  
  400.   #--------------------------------------------------------------------------
  401.   # ● 插入动作
  402.   #--------------------------------------------------------------------------
  403.   def unshift_action(kind)
  404.     @full_action.unshift(kind)
  405.   end  
  406.   #--------------------------------------------------------------------------
  407.   # ● 更新帧数
  408.   #--------------------------------------------------------------------------
  409.   def update
  410.     # 开始动作
  411.     start_action
  412.     # 开始强制动作
  413.     start_force_action if @force_action != ""
  414.     # 更新动画模式
  415.     update_pattern
  416.     # 更新移动
  417.     update_move
  418.     # 更新旋转
  419.     update_angle if @angle_time != 0
  420.     # 更新扩大缩小
  421.     update_zoom if @zoom_time != 0
  422.     # 更新透明度
  423.     update_opacity if @opacity_data != []
  424.   end
  425.   #--------------------------------------------------------------------------
  426.   # ● 更新动画模式
  427.   #--------------------------------------------------------------------------
  428.   def update_pattern
  429.     return @pattern_rest_time -= 1 if @pattern_rest_time != 0
  430.     return if @max_pattern_w == 1 && @max_pattern_h == 1
  431.     @pattern_rest_time = @pattern_time
  432.     # 开始播放・取得结束单元位置
  433.     if @pattern_kind > 0 # 通常播放中
  434.       @pattern_start = 0
  435.       @pattern_end = @max_pattern_w - 1
  436.     elsif @pattern_kind < 0 # 逆转播放中
  437.       @pattern_start = @max_pattern_w - 1
  438.       @pattern_end = 0
  439.     end
  440.     # 结束单程的播放
  441.     @pattern_count += 1 if @pattern_w == @pattern_end && @pattern_kind != 0
  442.     # 循环处理
  443.     case @pattern_type.abs
  444.     when  1,3 # 单程
  445.       @pattern_kind =  0 if @pattern_count != 0 && @pattern_type ==  1
  446.       @pattern_kind =  0 if @pattern_count != 0 && @pattern_type == -1
  447.       @pattern_kind =  1 if @pattern_count != 0 && @pattern_type ==  3
  448.       @pattern_kind = -1 if @pattern_count != 0 && @pattern_type == -3
  449.       @pattern_w = @pattern_start - @pattern_kind if @pattern_count != 0 && @pattern_type.abs == 3
  450.       @pattern_count = 0
  451.     when  2,4 # 往返
  452.       @pattern_kind = -1 if @pattern_count == 1 && @pattern_type ==  2
  453.       @pattern_kind =  1 if @pattern_count == 1 && @pattern_type == -2
  454.       @pattern_kind =  0 if @pattern_count == 2 && @pattern_type ==  2
  455.       @pattern_kind =  0 if @pattern_count == 2 && @pattern_type == -2
  456.       @pattern_kind = -1 if @pattern_count == 1 && @pattern_type ==  4
  457.       @pattern_kind =  1 if @pattern_count == 1 && @pattern_type == -4
  458.       @pattern_kind =  1 if @pattern_count == 2 && @pattern_type ==  4
  459.       @pattern_kind = -1 if @pattern_count == 2 && @pattern_type == -4
  460.       @pattern_count = 0 if @pattern_count == 2
  461.     end
  462.     # 更新单元
  463.     @pattern_w += 1 * @pattern_kind
  464.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  465.   end
  466.   #--------------------------------------------------------------------------
  467.   # ● 更新移动
  468.   #--------------------------------------------------------------------------
  469.   def update_move
  470.     @z = @y / 100 + @z_plus
  471.     return if @move_time == 0
  472.     target_position_set if @horming_move
  473.     @x = (@x * (@move_time - 1) + @target_x) / @move_time
  474.     @y = (@y * (@move_time - 1) + @target_y) / @move_time
  475.     @h = (@h * (@move_time - 1) + @target_h) / @move_time if @move_h != nil
  476.     @c += @curve[@move_time - 1] if @curve[@move_time - 1] != nil
  477.     @j += @jump[@move_time - 1] if @jump[@move_time - 1] != nil
  478.     @move_time -= 1
  479.     convert_jump if @move_time == 0
  480.   end
  481.   #--------------------------------------------------------------------------
  482.   # ● 更新移动目标
  483.   #--------------------------------------------------------------------------
  484.   def target_position_set
  485.     target_position = N03.get_targets_position(@move_targets, @horming_move)
  486.     @target_x = target_position[0] + @move_x
  487.     @target_y = target_position[1] + @move_y
  488.     @target_h = target_position[2] + @move_h if @move_h != nil
  489.   end  
  490.   #--------------------------------------------------------------------------
  491.   # ● 更新旋转
  492.   #--------------------------------------------------------------------------
  493.   def update_angle
  494.     @angle += @angling
  495.     @angle_time -= 1
  496.     return if @angle_time != 0
  497.     return angle_reset if @angle_data[4] == 0
  498.     angling(@angle_data) if @angle_data[4] == 2
  499.   end  
  500.   #--------------------------------------------------------------------------
  501.   # ● 更新扩大缩小
  502.   #--------------------------------------------------------------------------
  503.   def update_zoom
  504.     @zoom_x += @zooming_x
  505.     @zoom_y += @zooming_y
  506.     @zoom_time -= 1
  507.     return if @zoom_time != 0
  508.     return zoom_reset if @zoom_data[4] == 0
  509.     zooming(@zoom_data) if @zoom_data[4] == 2
  510.   end
  511.   #--------------------------------------------------------------------------
  512.   # ● 更新透明度
  513.   #--------------------------------------------------------------------------
  514.   def update_opacity
  515.     @opacity += @opacity_data[2]
  516.     @opacity_data[0] -= 1
  517.     return if @opacity_data[0] != 0
  518.     return if !@opacity_data[5]
  519.     @opacity_data[2] *= -1
  520.     @opacity_data[0] = @opacity_data[1]
  521.   end
  522.   #--------------------------------------------------------------------------
  523.   # ● 实行动作
  524.   #--------------------------------------------------------------------------
  525.   def action_play
  526.     return if @action_data == nil
  527.     action = @action_data[0]
  528.     # 战斗角色反转的场合
  529.     return mirroring                    if action == "mirror"
  530.     # 残像的场合
  531.     return mirage_set                   if action == "mirage"
  532.     # 回转的场合  
  533.     return angling                      if action == "angle"
  534.     # 扩大缩小的场合
  535.     return zooming                      if action == "zoom"
  536.     # 透明度操作的场合  
  537.     return set_opacity                  if action == "opacity"
  538.     # 战斗角色动画的場合
  539.     return battler_anime                if action == "motion"
  540.     # 移动的場合
  541.     return move                         if action == "move"
  542.     # 武器动画的場合
  543.     return weapon_anime([@action_data]) if action == "wp"
  544.     # 跳过动画的場合
  545.     return move_anime                   if action == "m_a"
  546.     # 战斗场景通讯的场合(战斗不能)
  547.     return set_play_data                if action == "collapse" or action == "no_collapse"
  548.     # 显示战斗数据库的动画的場合  
  549.     return battle_anime                 if action == "anime"
  550.     # 摄影的場合
  551.     return camera                       if action == "camera"
  552.     # 画面摇动的場合
  553.     return shake                        if action == "shake"
  554.     # 画面色调变更的場合
  555.     return color_effect                 if action == "color"
  556.     # 过渡的場合
  557.     return transition                   if action == "ts"
  558.     # 气球动画显示的場合  
  559.     return balloon_anime                if action == "balloon"
  560.     # 图片显示的場合
  561.     return picture_set                  if action == "pic"
  562.     # 状态操作的場合
  563.     return state_set                    if action == "sta"
  564.     # FPS变更的場合
  565.     return fps                          if action == "fps"
  566.     # 战斗角色图像变更的場合  
  567.     return graphics_change              if action == "change"
  568.     # 技能衍生的場合  
  569.     return derivating_skill             if action == "der"
  570.     # BGM/BGS/SE演奏的場合  
  571.     return sound                        if action == "sound"
  572.     # 电影再生的場合  
  573.     return movie                        if action == "movie"
  574.     # 游戏开关操作的場合  
  575.     return switches                     if action == "switch"
  576.     # 变量开关操作的場合  
  577.     return variable                     if action == "variable"
  578.     # 条件分岐(游戏开关)的場合
  579.     return nece_1                       if action == "n_1"
  580.     # 条件分岐(游戏变量)的場合
  581.     return nece_2                       if action == "n_2"
  582.     # 条件分岐(状态)的場合
  583.     return nece_3                       if action == "n_3"
  584.     # 条件分岐(技能)的場合
  585.     return nece_4                       if action == "n_4"
  586.     # 条件分岐(参数)的場合
  587.     return nece_5                       if action == "n_5"
  588.     # 条件分岐(装备)的場合
  589.     return nece_6                       if action == "n_6"
  590.     # 条件分岐(脚本)的場合
  591.     return nece_7                       if action == "n_7"
  592.     # 第二目标操作的場合  
  593.     return second_targets_set           if action == "s_t"
  594.     # 呼叫公共事件的場合  
  595.     return call_common_event            if action == "common"
  596.     # 战斗动画关闭的場合  
  597.     return @anime_off = true            if action == "anime_off"
  598.     # 强制战斗结束的場合  
  599.     return BattleManager.process_abort  if action == "battle_end"
  600.     # 画面固定的場合  
  601.     return Graphics.freeze              if action == "graphics_freeze"
  602.     # 损坏动画的場合  
  603.     return damage_anime                 if action == "damage_anime"
  604.     # 武器不可见的場合  
  605.     return @weapon_visible = false      if action == "weapon_off"
  606.     # 武器可见的場合  
  607.     return @weapon_visible = true       if action == "weapon_on"
  608.     # 等待取消的場合
  609.     return @non_motion = true           if action == "non_motion"
  610.     # 等待取消解除的場合
  611.     return @non_motion = false          if action == "non_motion_cancel"
  612.     # 初期位置变更的場合
  613.     return change_base_position         if action == "change_base_position"
  614.     # 初期位置变更解除的場合
  615.     return set_base_position(false)     if action == "set_base_position"
  616.     # 强制行动的場合  
  617.     return force_act                    if action == "force_action"
  618.     # 强制行动的場合 (第二目标)
  619.     return force_act2                   if action == "force_action2"
  620.     # 个人开始的場合
  621.     return individual_start             if action == "individual_start"
  622.     # 个人结束的場合
  623.     return individual_end               if action == "individual_end"
  624.     # 循环开始的場合
  625.     return loop_start                   if action == "loop_start"
  626.     # 循环结束的場合
  627.     return loop_end                     if action == "loop_end"
  628.     # 只有行动的場合
  629.     return only_action_on               if action == "only_action_on"
  630.     # 只有行动解除的場合
  631.     return only_action_off              if action == "only_action_off"
  632.     # 下个战斗角色的場合
  633.     return next_battler                 if action == "next_battler"
  634.     # 画面变更标记的場合
  635.     return set_change                   if action == "set_change"
  636.     # 脚本操作的場合   
  637.     return eval(@action_data[0])
  638.   end
  639.   #--------------------------------------------------------------------------
  640.   # ● 实行角色反转
  641.   #--------------------------------------------------------------------------
  642.   def mirroring
  643.     @mirror = !@mirror
  644.   end  
  645.   #--------------------------------------------------------------------------
  646.   # ● 初始化反转
  647.   #--------------------------------------------------------------------------
  648.   def mirroring_reset
  649.     @mirror = false
  650.     mirroring if !@battler.actor? && N03::ENEMY_MIRROR
  651.     mirroring if $sv_camera.mirror
  652.   end  
  653.   #--------------------------------------------------------------------------
  654.   # ● 实行残像
  655.   #--------------------------------------------------------------------------
  656.   def mirage_set
  657.     @mirage = @action_data.dup
  658.     @mirage_end = @mirage[3]
  659.     @mirage = [] if @mirage[1] == 0
  660.   end  
  661.   #--------------------------------------------------------------------------
  662.   # ● 实行旋转
  663.   #--------------------------------------------------------------------------
  664.   def angling(data = @action_data)
  665.     @angle_data = data.dup
  666.     @oy = @ch / 2
  667.     @oy_adjust = @ch * 50
  668.     @angle_time = data[1]
  669.     start_angle = data[2] * N03.mirror_num(@mirror)
  670.     end_angle = data[3] * N03.mirror_num(@mirror)
  671.     # 时间要是0以下时立即到最后角度
  672.     @angle_time = 1 if @angle_time <= 0
  673.     # 从旋转时间计算一格相当于的角度
  674.     @angling = (end_angle - start_angle) / @angle_time
  675.     # 不能整除的剩余到初期角度
  676.     @angle = (end_angle - start_angle) % @angle_time + start_angle
  677.   end
  678.   #--------------------------------------------------------------------------
  679.   # ● 初始化旋转
  680.   #--------------------------------------------------------------------------
  681.   def angle_reset
  682.     @oy = @ch
  683.     @angle = @angle_time = @oy_adjust = 0
  684.   end  
  685.   #--------------------------------------------------------------------------
  686.   # ● 实行扩大缩小
  687.   #--------------------------------------------------------------------------
  688.   def zooming(data = @action_data)
  689.     @zoom_data = data.dup
  690.     @zoom_time = data[1]
  691.     start_zoom_x = data[2][0]
  692.     start_zoom_y = data[2][1]
  693.     end_zoom_x = data[3][0]
  694.     end_zoom_y = data[3][1]
  695.     # 时间是0以下时跳过
  696.     @zoom_time = 1 if @zoom_time <= 0
  697.     # 从放大时间中计算一格相当于的放大率
  698.     @zooming_x = (end_zoom_x - start_zoom_x) / @zoom_time
  699.     @zooming_y = (end_zoom_y - start_zoom_y) / @zoom_time
  700.     # 开始的大小
  701.     @zoom_x = start_zoom_x
  702.     @zoom_y = start_zoom_y
  703.   end  
  704.   #--------------------------------------------------------------------------
  705.   # ● 实行扩大缩小
  706.   #--------------------------------------------------------------------------
  707.   def zoom_reset
  708.     @zoom_x = @zoom_y = 1
  709.     @zoom_time = 0
  710.   end  
  711.   #--------------------------------------------------------------------------
  712.   # ● 角色透明度操作
  713.   #--------------------------------------------------------------------------
  714.   def set_opacity
  715.     data = @action_data.dup
  716.     @opacity = data[2]
  717.     opacity_move = (data[3] - data[2])/ data[1]
  718.     @opacity_data = [data[1], data[1], opacity_move, data[4], data[5], data[6]]
  719.     @wait = data[1] if data[7]
  720.     @wait *= 2 if data[6] && data[7]
  721.   end
  722.   #--------------------------------------------------------------------------
  723.   # ● 初始化透明度操作
  724.   #--------------------------------------------------------------------------
  725.   def opacity_reset
  726.     @opacity = 255
  727.     @opacity = 0 if @battler.hidden?
  728.     @opacity_data = []
  729.   end
  730.   #--------------------------------------------------------------------------
  731.   # ● 实行角色动画
  732.   #--------------------------------------------------------------------------
  733.   def battler_anime(anime_data = nil)
  734.     anime_data = @action_data.dup if anime_data == nil
  735.     @graphic_file_index = anime_data[1] if !graphic_fix
  736.     @pattern_h = anime_data[2]
  737.     @pattern_w = anime_data[3]
  738.     @pattern_h = 0 if @max_pattern_w == 1
  739.     @pattern_w = 0 if @max_pattern_h == 1
  740.     @pattern_type = anime_data[4]
  741.     @pattern_time = anime_data[5]
  742.     @pattern_rest_time = anime_data[5]
  743.     @pattern_count = 0
  744.     @pattern_kind = 1
  745.     @pattern_kind = -1 if @pattern_type < 0
  746.     @pattern_kind = 0 if @pattern_type == 0
  747.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  748.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  749.     @z_plus = anime_data[6]
  750.     @wait = set_anime_wait if anime_data[7]
  751.     @shadow_visible = anime_data[8]
  752.     weapon_anime(anime_data)
  753.   end
  754.   #--------------------------------------------------------------------------
  755.   # ● 计算等待动画
  756.   #--------------------------------------------------------------------------
  757.   def set_anime_wait
  758.     if @pattern_type > 0
  759.       pattern_time_a = @max_pattern_w - @pattern_w.abs
  760.     elsif @pattern_type < 0
  761.       pattern_time_a = @pattern_w.abs + 1
  762.     else
  763.       return @pattern_time if @pattern_type == 0
  764.     end
  765.     case @pattern_type
  766.     when 1,-1, 3,-3
  767.       return pattern_time_a * @pattern_time
  768.     when 2,-2, 4,-4
  769.       return pattern_time_a * @pattern_time + (@max_pattern_w - 2) * @pattern_time
  770.     end
  771.   end  
  772.   #--------------------------------------------------------------------------
  773.   # ● 实行移动
  774.   #--------------------------------------------------------------------------
  775.   def move
  776.     @move_targets = N03.get_targets(@action_data[1].abs, @battler)
  777.     return if @move_targets == []
  778.     @move_targets = [@battler] if @action_data[1].abs == 7
  779.     @move_x = @action_data[2] * 100 * N03.mirror_num(@mirror)
  780.     @move_y = @action_data[3] * 100
  781.     @move_h = @action_data[4] * 100 if @action_data[4] != nil
  782.     @move_h = nil if @action_data[4] == nil
  783.     battler_anime(N03::ACTION[@action_data[8]].dup) if N03::ACTION[@action_data[8]] != nil
  784.     @horming_move = true
  785.     @horming_move = false if @action_data[1] < 0 or @action_data[1].abs == 7
  786.     target_position_set
  787.     target_position = [@target_x, @target_y, @target_z]
  788.     distanse_move = @action_data[5] > 0
  789.     @move_time = N03.distanse_calculation(@action_data[5].abs, target_position, [@x, @y, @z], distanse_move)
  790.     @wait = @move_time
  791.     curve
  792.     jump
  793.     @move_time = 1 if @move_time == 0
  794.     @horming_move = false if !@move_targets or @move_targets.include?(@battler)
  795.     update_move if @move_time == 1
  796.   end  
  797.   #--------------------------------------------------------------------------
  798.   # ● 实行曲线
  799.   #--------------------------------------------------------------------------
  800.   def curve
  801.     @c = 0
  802.     return if @action_data[6] == 0
  803.     @curve = N03.parabola([@action_data[6], -@action_data[6]], @move_time, 100, 4)
  804.   end  
  805.   #--------------------------------------------------------------------------
  806.   # ● 实行跳跃
  807.   #--------------------------------------------------------------------------
  808.   def jump
  809.     convert_jump
  810.     return if @action_data[7] == [0,0]
  811.     @jump = N03.parabola(@action_data[7].dup, @move_time, 100)
  812.   end  
  813.   #--------------------------------------------------------------------------
  814.   # ● J坐标(跳跃高度)H坐标变换
  815.   #--------------------------------------------------------------------------
  816.   def convert_jump
  817.     @h += @j
  818.     @j = 0
  819.     @jump = []
  820.   end  
  821.   #--------------------------------------------------------------------------
  822.   # ● 实行数据库战斗动画
  823.   #--------------------------------------------------------------------------
  824.   def battle_anime
  825.     data = @action_data.dup
  826.     targets = N03.get_targets(data[2], @battler)
  827.     return if targets == []
  828.     data[8] = !data[8] if @mirror
  829.     @set_damage           = data[5]
  830.     @damage_anime_data[0] = N03.get_attack_anime_id(data[1], @battler)
  831.     @damage_anime_data[1] = data[8]
  832.     @damage_anime_data[2] = data[7]
  833.     @damage_anime_data[3] = data[6]
  834.     @damage_anime_data[4] = data[9]
  835.     @wait = N03.get_anime_time(@damage_anime_data[0]) - 2 if data[4]
  836.     return if @set_damage
  837.     for target in targets do display_anime(targets, target, data) end
  838.   end
  839.   #--------------------------------------------------------------------------
  840.   # ● 开始武器动画
  841.   #--------------------------------------------------------------------------
  842.   def weapon_anime(anime_data)
  843.     @weapon_end = true
  844.     for i in 9...anime_data.size
  845.       set_effect_data(anime_data[i]) if anime_data[i] != ""
  846.     end
  847.   end
  848.   #--------------------------------------------------------------------------
  849.   # ● 开始飞行动画
  850.   #--------------------------------------------------------------------------
  851.   def move_anime
  852.     @m_a_starter = []
  853.     @m_a_targets = []
  854.     starters = N03.get_targets(@action_data[2], @battler)
  855.     targets = N03.get_targets(@action_data[3], @battler)
  856.     return if starters == [] or targets == []
  857.     single_start = true if starters != nil && @action_data[2] < 0
  858.     single_start = true if @action_data[1][0] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][0], @battler)].position == 3
  859.     starters = [starters[0]] if single_start
  860.     single_end = true if targets != nil && @action_data[3] < 0
  861.     single_end = true if @action_data[1][1] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][1], @battler)].position == 3
  862.     targets = [targets[0]] if single_end
  863.     se_flag = true
  864.     for starter in starters
  865.       for target in targets
  866.         data = @action_data.dup
  867.         data[17] = se_flag
  868.         @effect_data.push(data)
  869.         @m_a_targets.push(target)
  870.         @m_a_starter.push(starter)
  871.         se_flag = false
  872.       end
  873.     end  
  874.   end
  875.   #--------------------------------------------------------------------------
  876.   # ● 效果通讯设置
  877.   #--------------------------------------------------------------------------
  878.   def set_effect_data(data = @action)
  879.     action_data = N03::ACTION[data]
  880.     return if action_data == nil
  881.     @effect_data.push(action_data.dup)
  882.   end
  883.   #--------------------------------------------------------------------------
  884.   # ● 战斗场景通讯的数据储存
  885.   #--------------------------------------------------------------------------
  886.   def set_play_data(data = @action_data)
  887.     @play_data = data.dup
  888.   end
  889.   #--------------------------------------------------------------------------
  890.   # ● 战斗动画显示
  891.   #--------------------------------------------------------------------------
  892.   def display_anime(targets, target, data)
  893.     return if !N03.first_of_all_screen_anime(data[1], target, targets)
  894.     target.animation_id         = N03.get_attack_anime_id(data[1], @battler)
  895.     target.animation_mirror     = data[8]
  896.     target.sv.anime_horming     = data[3]
  897.     target.sv.anime_camera_zoom = data[6]
  898.     target.sv.anime_no_mirror   = data[7]
  899.     target.sv.anime_plus_z      = data[9]
  900.   end
  901.   #--------------------------------------------------------------------------
  902.   # ● 初始化战斗动画扩张数据
  903.   #--------------------------------------------------------------------------
  904.   def reset_anime_data
  905.     @anime_no_mirror = false
  906.     @anime_horming = false
  907.     @anime_camera_zoom = false
  908.     @timing_targets = []
  909.     @anime_plus_z = true
  910.   end  
  911.   #--------------------------------------------------------------------------
  912.   # ● 摄影机
  913.   #--------------------------------------------------------------------------
  914.   def camera
  915.     data = @action_data.dup
  916.     N03.camera(@battler, data)
  917.     @wait = data[4] if data[5]
  918.   end  
  919.   #--------------------------------------------------------------------------
  920.   # ● 画面的摇动
  921.   #--------------------------------------------------------------------------
  922.   def shake
  923.     data = @action_data.dup
  924.     $sv_camera.shake(data[1], data[2], data[3])
  925.     @wait = data[3] if data[4]
  926.   end
  927.   #--------------------------------------------------------------------------
  928.   # ● 画面色调变更
  929.   #--------------------------------------------------------------------------
  930.   def color_effect
  931.     case @action_data[1]
  932.     when 0,1,2,3,4,5
  933.       targets = N03.get_targets(@action_data[1], @battler)
  934.     when 6
  935.       screen = true
  936.     when 7
  937.       targets = [@battler] + @target_battler
  938.     when 8
  939.       screen = true
  940.       targets = $game_troop.members + $game_party.battle_members - [@battler]
  941.     when 9
  942.       screen = true
  943.       targets = $game_troop.members + $game_party.battle_members - [@battler] - @target_battler
  944.     when 10
  945.       screen = true
  946.       targets = $game_troop.members + $game_party.battle_members
  947.     end
  948.     return if screen == nil && targets == []
  949.     for target in targets do target.sv.color_set = @action_data[2] end if targets
  950.     @wait = @action_data[2][4] if @action_data[3]
  951.     return if !screen
  952.     $sv_camera.color_set[1] = @action_data[2]
  953.     $sv_camera.color_set[2] = @action_data[2]
  954.   end  
  955.   #--------------------------------------------------------------------------
  956.   # ● 过渡
  957.   #--------------------------------------------------------------------------
  958.   def transition
  959.     $sv_camera.perform_transition(@action_data)
  960.   end  
  961.   #--------------------------------------------------------------------------
  962.   # ● 气球动画显示
  963.   #--------------------------------------------------------------------------
  964.   def balloon_anime
  965.     @balloon_data = @action_data.dup
  966.   end  
  967.   #--------------------------------------------------------------------------
  968.   # ● 图片显示
  969.   #--------------------------------------------------------------------------
  970.   def picture_set
  971.     @picture = true
  972.     set_effect_data
  973.   end
  974.   #--------------------------------------------------------------------------
  975.   # ● 状态操作
  976.   #--------------------------------------------------------------------------
  977.   def state_set
  978.     targets = N03.get_targets(@action_data[1], @battler)
  979.     return if targets == []
  980.     case @action_data[2]
  981.     when 1 ; targets = [targets[rand(targets.size)]]
  982.     when 2 ; targets -= @battler if targets.include?(@battler)
  983.     end
  984.     for target in targets
  985.       for id in @action_data[4]
  986.         target.add_state(id) if @action_data[3] == "+"
  987.         target.remove_state(id) if @action_data[3] == "-"
  988.       end
  989.     end
  990.   end
  991.   #--------------------------------------------------------------------------
  992.   # ● FPS变更
  993.   #--------------------------------------------------------------------------
  994.   def fps
  995.     Graphics.frame_rate = @action_data[1]
  996.     start_action
  997.   end
  998.   #--------------------------------------------------------------------------
  999.   # ● 角色画像变更的場合
  1000.   #--------------------------------------------------------------------------
  1001.   def graphics_change
  1002.     @graphics_change = true
  1003.     return @battler.graphics_change(@action_data[3]) if !@battler.actor?
  1004.     @pre_change_data = [@battler.character_name, @battler.character_index, @battler.face_name, @battler.face_index] if @pre_change_data == nil && !@action_data[1]
  1005.     if @action_data[4] == []
  1006.       face_name = @battler.face_name
  1007.       face_index = @battler.face_index
  1008.     else
  1009.       face_name = @action_data[4][1]
  1010.       face_index = @action_data[4][0]
  1011.     end
  1012.     @battler.set_graphic(@action_data[3], @action_data[2], face_name, face_index)
  1013.   end
  1014.   #--------------------------------------------------------------------------
  1015.   # ● 技能连发
  1016.   #--------------------------------------------------------------------------
  1017.   def derivating_skill
  1018.     # 如果让没学的的技能不能连发时
  1019.     return if !@action_data[1] && !@battler.skill_learn?($data_skills[@action_data[3]])
  1020.     # 如果技能不能连发成本不够时
  1021.     return if !@action_data[2] && !@battler.skill_cost_payable?($data_skills[@action_data[3]])
  1022.     # 连发
  1023.     @derivation_skill_id = @action_data[3]
  1024.     # 取消之后的动作
  1025.     @full_action = []
  1026.   end
  1027.   #--------------------------------------------------------------------------
  1028.   # ● BGM/BGS/SE演奏
  1029.   #--------------------------------------------------------------------------
  1030.   def sound
  1031.     pitch = @action_data[2]
  1032.     vol   = @action_data[3]
  1033.     name  = @action_data[4]
  1034.     case @action_data[1]
  1035.     when "se"
  1036.       Audio.se_play("Audio/SE/" + name, vol, pitch)
  1037.     when "bgm"
  1038.       # 没有指定名字时、不改变现在的BGM
  1039.       name = RPG::BGM.last.name if @action_data[4] == ""
  1040.       Audio.bgm_play("Audio/BGM/" + name, vol, pitch)
  1041.     when "bgs"
  1042.       name = RPG::BGS.last.name if @action_data[4] == ""
  1043.       Audio.bgs_play("Audio/BGS/" + name, vol, pitch)
  1044.     end
  1045.   end
  1046.   #--------------------------------------------------------------------------
  1047.   # ● 电影播放
  1048.   #--------------------------------------------------------------------------
  1049.   def movie
  1050.     Graphics.play_movie('Movies/' + @action_data[1])
  1051.   end
  1052.   #--------------------------------------------------------------------------
  1053.   # ● 游戏开关的操作
  1054.   #--------------------------------------------------------------------------
  1055.   def switches
  1056.     for id in @action_data[1]
  1057.       $game_switches[id] = true if id > 0
  1058.       $sv_camera.switches[id.abs] = true  if id < 0
  1059.     end
  1060.     for id in @action_data[2]
  1061.       $game_switches[id] = false if id > 0
  1062.       $sv_camera.switches[id.abs] = false  if id < 0
  1063.     end
  1064.     $sv_camera.program_check
  1065.   end
  1066.   #--------------------------------------------------------------------------
  1067.   # ● 游戏变量操作
  1068.   #--------------------------------------------------------------------------
  1069.   def variable
  1070.     # 检查操作
  1071.     operand = @action_data[3]
  1072.     operand = $game_variables[@action_data[3].abs] if @action_data[3] < 0
  1073.     # 变数操作的分歧
  1074.     case @action_data[2]
  1075.     when 0 ; $game_variables[@action_data[1]] = operand  # 代入
  1076.     when 1 ; $game_variables[@action_data[1]] += operand # 加法
  1077.     when 2 ; $game_variables[@action_data[1]] -= operand # 减法
  1078.     when 3 ; $game_variables[@action_data[1]] *= operand # 乘法
  1079.     when 4 ; $game_variables[@action_data[1]] /= operand # 除法
  1080.     when 5 ; $game_variables[@action_data[1]] %= operand # 剩余
  1081.     end
  1082.   end  
  1083.   #--------------------------------------------------------------------------
  1084.   # ● 条件分岐 (游戏开关)
  1085.   #--------------------------------------------------------------------------
  1086.   def nece_1
  1087.     judgment = $game_switches[@action_data[1]] == @action_data[2] if @action_data[1] > 0
  1088.     judgment = $sv_camera.switches[@action_data[1].abs] == @action_data[2] if @action_data[1] < 0
  1089.     action_diverging(judgment, @action_data[3])
  1090.   end  
  1091.   #--------------------------------------------------------------------------
  1092.   # ● 条件分岐 (游戏变量)
  1093.   #--------------------------------------------------------------------------
  1094.   def nece_2
  1095.     variable = $game_variables[@action_data[1]]
  1096.     num = @action_data[2]
  1097.     num = $game_variables[@action_data[2].abs] if num < 0
  1098.     case @action_data[3]
  1099.     when 0 ; judgment = variable == num
  1100.     when 1 ; judgment = variable < num
  1101.     when 2 ; judgment = variable > num
  1102.     end  
  1103.     action_diverging(judgment, @action_data[4])
  1104.   end  
  1105.   #--------------------------------------------------------------------------
  1106.   # ● 条件分岐 (状态)
  1107.   #--------------------------------------------------------------------------
  1108.   def nece_3
  1109.     targets = N03.get_targets(@action_data[1], @battler)
  1110.     return if targets == []
  1111.     member_num = @action_data[4]
  1112.     member_num = targets.size if @action_data[4] == 0 && targets.size > 1
  1113.     hit_count = 0
  1114.     miss_count = 0
  1115.     for target in targets
  1116.       hit_count += 1 if target.state?(@action_data[2])
  1117.       miss_count += 1 if !target.state?(@action_data[2])
  1118.     end
  1119.     case @action_data[3]
  1120.     when 0 ; judgment = hit_count >= member_num
  1121.     when 1 ; judgment = miss_count >= member_num
  1122.     end
  1123.     action_diverging(judgment, @action_data[5])
  1124.   end  
  1125.   #--------------------------------------------------------------------------
  1126.   # ● 条件分岐 (技能)
  1127.   #--------------------------------------------------------------------------
  1128.   def nece_4
  1129.     targets = N03.get_targets(@action_data[1], @battler)
  1130.     return if targets == []
  1131.     member_num = @action_data[4]
  1132.     member_num = targets.size if @action_data[4] == 0 && targets.size > 1
  1133.     hit_count = 0
  1134.     miss_count = 0
  1135.     for target in targets
  1136.       hit_count += 1 if target.skill_learn?($data_skills[@action_data[2]]) && target.skill_conditions_met?($data_skills[@action_data[2]])
  1137.       miss_count += 1 if !target.skill_learn?($data_skills[@action_data[2]]) or !target.skill_conditions_met?($data_skills[@action_data[2]])
  1138.     end
  1139.     case @action_data[3]
  1140.     when 0 ; judgment = hit_count >= member_num
  1141.     when 1 ; judgment = miss_count >= member_num
  1142.     end
  1143.     action_diverging(judgment, @action_data[5])
  1144.   end  
  1145.   #--------------------------------------------------------------------------
  1146.   # ● 条件分岐 (参数)
  1147.   #--------------------------------------------------------------------------
  1148.   def nece_5
  1149.     targets = N03.get_targets(@action_data[1], @battler)
  1150.     return if targets == []
  1151.     member_num = @action_data[5]
  1152.     member_num = targets.size if @action_data[5] == 0 && targets.size > 1
  1153.     hit_count = 0
  1154.     for target in targets
  1155.       hit_count += 1 if target.comparison_parameter([@action_data[2],@action_data[3],@action_data[4]])
  1156.     end
  1157.     judgment = hit_count >= member_num
  1158.     action_diverging(judgment, @action_data[6])
  1159.   end  
  1160.   #--------------------------------------------------------------------------
  1161.   # ● 条件分岐 (装备)
  1162.   #--------------------------------------------------------------------------
  1163.   def nece_6
  1164.     targets = N03.get_targets(@action_data[1], @battler)
  1165.     return if targets == []
  1166.     member_num = @action_data[5]
  1167.     member_num = targets.size if @action_data[5] == 0 && targets.size > 1
  1168.     hit_count = 0
  1169.     miss_count = 0
  1170.     for target in targets
  1171.       hit_count += 1 if target.comparison_equip([@action_data[2],@action_data[3]])
  1172.       miss_count += 1 if !target.comparison_equip([@action_data[2],@action_data[3]])
  1173.     end
  1174.     case @action_data[4]
  1175.     when 0 ; judgment = hit_count >= member_num
  1176.     when 1 ; judgment = miss_count >= member_num
  1177.     end
  1178.     action_diverging(judgment, @action_data[6])
  1179.   end  
  1180.   #--------------------------------------------------------------------------
  1181.   # ● 条件分岐 (脚本)
  1182.   #--------------------------------------------------------------------------
  1183.   def nece_7
  1184.     judgment = eval(@action_data[2])
  1185.     action_diverging(judgment, @action_data[1])
  1186.   end  
  1187.   #--------------------------------------------------------------------------
  1188.   # ● 动作的分岐  
  1189.   #--------------------------------------------------------------------------
  1190.   def action_diverging(judgment, kind)
  1191.     result = 0
  1192.     if judgment
  1193.       result = 1 if kind == 1
  1194.       result = 2 if kind == 2
  1195.     else
  1196.       result = 1 if kind == 0
  1197.     end
  1198.     # 全部动作结束
  1199.     return @full_action = []  if result == 2
  1200.     # 清楚下一个动作
  1201.     @full_action.shift if result == 1
  1202.     set_action
  1203.     # 实行下一个动作
  1204.     @action_data = N03::ACTION[@action]
  1205.     next_action
  1206.   end
  1207.   #--------------------------------------------------------------------------
  1208.   # ● 第二个目标的操作
  1209.   #--------------------------------------------------------------------------
  1210.   def second_targets_set
  1211.     targets = N03.get_targets(@action_data[1], @battler)
  1212.     for target in targets
  1213.       targets.delete(target) if @action_data[2][1] == 1 && target.index != @action_data[2][0]
  1214.       targets.delete(target) if @action_data[2][1] == 2 && target.index == @action_data[2][0].abs
  1215.       targets.delete(target) if @action_data[3] > 0 && target.id != @action_data[3]
  1216.       targets.delete(target) if @action_data[3] < 0 && target.id == @action_data[3].abs
  1217.       targets.delete(target) if @action_data[4] > 0 && !target.state?(@action_data[4])
  1218.       targets.delete(target) if @action_data[4] < 0 && target.state?(@action_data[4].abs)
  1219.       targets.delete(target) if @action_data[5] > 0 && !target.skill_conditions_met?($data_skills[@action_data[5]])
  1220.       targets.delete(target) if @action_data[5] < 0 && target.skill_conditions_met?($data_skills[@action_data[5].abs])
  1221.       targets.delete(target) if !target.comparison_parameter(@action_data[6])
  1222.       targets.delete(target) if !@action_data[7][1].include?(0) && !target.comparison_equip(@action_data[7])
  1223.     end
  1224.     return @second_targets = [] if targets.size == 0
  1225.     case @action_data[8]
  1226.     when 1 ; targets = [targets[rand(targets.size)]]
  1227.     when 2 ; targets.delete(@battler)
  1228.     end
  1229.     return @second_targets = [] if targets.size == 0
  1230.     @second_targets = targets
  1231.     case @action_data[9]
  1232.     when 0 ; return
  1233.     when 1 ; set_play_data(["second_targets_set"])
  1234.     when 2 ; set_play_data(["targets_set"])
  1235.     end
  1236.     @wait += 1
  1237.   end
  1238.   #--------------------------------------------------------------------------
  1239.   # ● 公共事件的呼叫
  1240.   #--------------------------------------------------------------------------
  1241.   def call_common_event
  1242.     $game_temp.reserve_common_event(@action_data[1])
  1243.     $sv_camera.event = true
  1244.     @event_fix = @action_data[2]
  1245.   end
  1246.   #--------------------------------------------------------------------------
  1247.   # ● 伤害动画
  1248.   #--------------------------------------------------------------------------
  1249.   def damage_anime(delay_time = 12)
  1250.     anime(N03.get_attack_anime_id(-3, @battler), wait = true)
  1251.     action_play
  1252.     @wait -= delay_time
  1253.     @full_action.unshift("eval('@damage_anime_data = []
  1254.     @set_damage = true')")
  1255.   end
  1256.   #--------------------------------------------------------------------------
  1257.   # ● 通常战斗不能
  1258.   #--------------------------------------------------------------------------
  1259.   def normal_collapse
  1260.     @collapse = true
  1261.     return
  1262.   end
  1263.   #--------------------------------------------------------------------------
  1264.   # ● 初期位置变更
  1265.   #--------------------------------------------------------------------------
  1266.   def change_base_position
  1267.     @base_x = @x
  1268.     @base_y = @y
  1269.     @base_h = @h
  1270.   end  
  1271.   #--------------------------------------------------------------------------
  1272.   # ● 实行强制动作
  1273.   #--------------------------------------------------------------------------
  1274.   def force_act
  1275.     target(@full_action.shift)
  1276.   end
  1277.   #--------------------------------------------------------------------------
  1278.   # ● 实行强制动作 (第二个目标)
  1279.   #--------------------------------------------------------------------------
  1280.   def force_act2
  1281.     target2(@full_action.shift)
  1282.   end
  1283.   #--------------------------------------------------------------------------
  1284.   # ● 开始个别处理
  1285.   #--------------------------------------------------------------------------
  1286.   def individual_start
  1287.     @individual_targets = @target_battler.dup
  1288.     @remain_targets = @target_battler.dup
  1289.     @target_battler = [@individual_targets[0]]
  1290.     # 重复部分的动作并保持
  1291.     @individual_act = @full_action.dup
  1292.   end
  1293.   #--------------------------------------------------------------------------
  1294.   # ● 结束个别处理
  1295.   #--------------------------------------------------------------------------
  1296.   def individual_end
  1297.     @individual_targets.shift
  1298.     for target in @individual_targets
  1299.       @individual_targets.shift if target.dead?
  1300.     end
  1301.     # 目标没有残留时行动完毕
  1302.     return @target_battler = @remain_targets if @individual_targets.size == 0
  1303.     @full_action = @individual_act.dup
  1304.     @target_battler = [@individual_targets[0]]
  1305.   end
  1306.   #--------------------------------------------------------------------------
  1307.   # ● 循环開始
  1308.   #--------------------------------------------------------------------------
  1309.   def loop_start
  1310.     # 重复部分的动作并保持
  1311.     @loop_act = @full_action.dup
  1312.   end
  1313.   #--------------------------------------------------------------------------
  1314.   # ● 循环结束
  1315.   #--------------------------------------------------------------------------
  1316.   def loop_end
  1317.     # 动作重复
  1318.     @full_action = @loop_act.dup if @loop_act != []
  1319.   end
  1320.   #--------------------------------------------------------------------------
  1321.   # ● 下个动作角色
  1322.   #--------------------------------------------------------------------------
  1323.   def next_battler
  1324.     @action_end = true
  1325.     @active = false
  1326.   end
  1327.   #--------------------------------------------------------------------------
  1328.   # ● 图像变更标记
  1329.   #--------------------------------------------------------------------------
  1330.   def set_change
  1331.     @change_up = true
  1332.   end
  1333.   #--------------------------------------------------------------------------
  1334.   # ● 战斗场景通讯
  1335.   #--------------------------------------------------------------------------
  1336.   def play_data
  1337.     data = @play_data
  1338.     @play_data = []
  1339.     return data
  1340.   end
  1341.   #--------------------------------------------------------------------------
  1342.   # ● 捷径指令
  1343.   #--------------------------------------------------------------------------
  1344.   def anime(anime_id, wait = true)
  1345.     @action_data = ["anime",anime_id,1,false,wait,false,true,false]
  1346.   end
  1347.   def anime_me(anime_id, wait = true)
  1348.     @action_data = ["anime",anime_id,0,false,wait,false,true,false]
  1349.   end
  1350.   def se(file, pitch = 100)
  1351.     @action_data = ["sound",  "se", pitch, 100, file]
  1352.   end
  1353.   def target(act)
  1354.     for target in @target_battler do target.sv.force_action = act end
  1355.   end
  1356.   def target2(act)
  1357.     for target in @second_targets do target.sv.force_action = act end
  1358.   end
  1359.   def delay(time)
  1360.     @wait = @battler.index * time
  1361.   end
  1362.   #--------------------------------------------------------------------------
  1363.   # ● 取得角色ID
  1364.   #--------------------------------------------------------------------------
  1365.   def id
  1366.     return @battler.id if @battler.actor?
  1367.     return [email]-@battler.id[/email]
  1368.   end
  1369.   #--------------------------------------------------------------------------
  1370.   # ● 取得被致命一击
  1371.   #--------------------------------------------------------------------------
  1372.   def critical?
  1373.     return @battler.result.critical
  1374.   end
  1375.   #--------------------------------------------------------------------------
  1376.   # ● 取得被回复标记
  1377.   #--------------------------------------------------------------------------
  1378.   def recovery?
  1379.     recovery = false
  1380.     recovery = true if @battler.result.hp_damage < 0
  1381.     recovery = true if @battler.result.mp_damage < 0
  1382.     recovery = true if @battler.result.tp_damage < 0
  1383.     return recovery
  1384.   end
  1385.   #--------------------------------------------------------------------------
  1386.   # ● 取得被损伤技能ID
  1387.   #--------------------------------------------------------------------------
  1388.   def damage_skill_id
  1389.     return @damage_skill_id
  1390.   end
  1391.   #--------------------------------------------------------------------------
  1392.   # ● 取得被损伤物品ID
  1393.   #--------------------------------------------------------------------------
  1394.   def damage_item_id
  1395.     return @damage_item_id
  1396.   end
  1397.   #--------------------------------------------------------------------------
  1398.   # ● 取得装备武器ID
  1399.   #--------------------------------------------------------------------------
  1400.   def weapon_id
  1401.     return 0 if !@battler.weapons[0]
  1402.     return @battler.weapons[0].id
  1403.   end
  1404.   #--------------------------------------------------------------------------
  1405.   # ● 取得装备武器的类型
  1406.   #--------------------------------------------------------------------------
  1407.   def weapon_type
  1408.     return 0 if !@battler.weapons[0]
  1409.     return @battler.weapons[0].wtype_id
  1410.   end
  1411.   #--------------------------------------------------------------------------
  1412.   # ● 是否装备盾
  1413.   #--------------------------------------------------------------------------
  1414.   def shield?
  1415.     for armor in @battler.armors do return true if armor != nil && armor.etype_id == 1 end
  1416.     return false
  1417.   end
  1418.   #--------------------------------------------------------------------------
  1419.   # ● 是否有伤害
  1420.   #--------------------------------------------------------------------------
  1421.   def damage_zero?
  1422.     return @battler.result.hp_damage == 0 && @battler.result.mp_damage == 0 && @battler.result.tp_damage == 0
  1423.   end
  1424.   #--------------------------------------------------------------------------
  1425.   # ● 取得技能ID
  1426.   #--------------------------------------------------------------------------
  1427.   def skill_id
  1428.     return @counter_id if @counter_id != 0
  1429.     return 0 if @battler.current_action == nil or @battler.current_action.item == nil
  1430.     return 0 if @battler.current_action.item.is_a?(RPG::Item)
  1431.     return @battler.current_action.item.id
  1432.   end
  1433.   #--------------------------------------------------------------------------
  1434.   # ● 取得技能的种类
  1435.   #--------------------------------------------------------------------------
  1436.   def skill_type
  1437.     return 0 if skill_id == 0
  1438.     return $data_skills[skill_id].stype_id
  1439.   end
  1440.   #--------------------------------------------------------------------------
  1441.   # ● 取得技能名字
  1442.   #--------------------------------------------------------------------------
  1443.   def skill_name
  1444.     return "" if skill_id == 0
  1445.     return $data_skills[skill_id].name
  1446.   end
  1447.   #--------------------------------------------------------------------------
  1448.   # ● 取得物品ID
  1449.   #--------------------------------------------------------------------------
  1450.   def item_id
  1451.     return 0 if @battler.current_action == nil or @battler.current_action.item == nil
  1452.     return @battler.current_action.item.id
  1453.   end
  1454.   #--------------------------------------------------------------------------
  1455.   # ● 攻击动作
  1456.   #--------------------------------------------------------------------------
  1457.   def attack_action(item)
  1458.     return skill_action if item.is_a?(RPG::Skill)
  1459.     return item_action
  1460.   end
  1461.   #--------------------------------------------------------------------------
  1462.   # ● 基础动作伤害
  1463.   #--------------------------------------------------------------------------
  1464.   def damage_action_base(item)
  1465.     @damage_skill_id = 0
  1466.     @damage_item_id = 0
  1467.     @damage_skill_id = item.id if item.is_a?(RPG::Skill)
  1468.     @damage_item_id = item.id if item.is_a?(RPG::Item)
  1469.   end  
  1470.   #--------------------------------------------------------------------------
  1471.   # ● 动作伤害
  1472.   #--------------------------------------------------------------------------
  1473.   def damage_action(attacker, item)
  1474.     damage_action_base(item)
  1475.     act = damage(attacker)
  1476.     return if @active
  1477.     start_action(act) if act != nil
  1478.   end
  1479.   #--------------------------------------------------------------------------
  1480.   # ● 回避动作
  1481.   #--------------------------------------------------------------------------
  1482.   def evasion_action(attacker, item)
  1483.     damage_action_base(item)
  1484.     act = evasion(attacker)
  1485.     return if @active
  1486.     start_action(act) if act != nil
  1487.   end
  1488.   #--------------------------------------------------------------------------
  1489.   # ● 失误动作
  1490.   #--------------------------------------------------------------------------
  1491.   def miss_action(attacker, item)
  1492.     damage_action_base(item)
  1493.     act = miss(attacker)
  1494.     return if @active
  1495.     start_action(act) if act != nil
  1496.   end
  1497.   #--------------------------------------------------------------------------
  1498.   # ● Flash动作同时处理
  1499.   #--------------------------------------------------------------------------
  1500.   def flash_action
  1501.     return "闪光"
  1502.   end
  1503.  
  1504. end
  1505.  
  1506.  
  1507. #==============================================================================
  1508. # ■ module N03
  1509. #------------------------------------------------------------------------------
  1510. #  这是一个侧视战斗的模块。
  1511. #==============================================================================
  1512. module N03
  1513.   #--------------------------------------------------------------------------
  1514.   # ● 取得敌人角色队伍
  1515.   #--------------------------------------------------------------------------
  1516.   def self.get_enemy_unit(battler)
  1517.     return $game_troop if battler.actor?
  1518.     return $game_party
  1519.   end
  1520.   #--------------------------------------------------------------------------
  1521.   # ● 取得我方角色队伍
  1522.   #--------------------------------------------------------------------------
  1523.   def self.get_party_unit(battler)
  1524.     return $game_party if battler.actor?
  1525.     return $game_troop
  1526.   end
  1527.   #--------------------------------------------------------------------------
  1528.   # ● 取得战斗动画时间
  1529.   #--------------------------------------------------------------------------
  1530.   def self.get_anime_time(anime_id)
  1531.     return 0 if anime_id <= 0
  1532.     return $data_animations[anime_id].frame_max * 4
  1533.   end
  1534.   #--------------------------------------------------------------------------
  1535.   # ● 取得攻击动画
  1536.   #--------------------------------------------------------------------------
  1537.   def self.get_attack_anime_id(kind, battler)
  1538.     return $data_skills[battler.sv.counter_id].animation_id if kind == -3 && battler.sv.counter_id != 0
  1539.     case kind
  1540.     when -1 ; anime_id = battler.atk_animation_id1
  1541.     when -2 ; anime_id = battler.atk_animation_id2
  1542.     when -3
  1543.       if battler.current_action != nil
  1544.         anime_id = battler.current_action.item.animation_id if battler.current_action.item != nil
  1545.       end
  1546.     else    ; anime_id = kind
  1547.     end
  1548.     case anime_id
  1549.     when -1 ; anime_id = battler.atk_animation_id1
  1550.     when -2 ; anime_id = battler.atk_animation_id2
  1551.     end
  1552.     return anime_id if anime_id
  1553.     return 0
  1554.   end  
  1555.   #--------------------------------------------------------------------------
  1556.   # ● 战斗动画数据
  1557.   #--------------------------------------------------------------------------
  1558.   def self.set_damage_anime_data(targets, target, data)
  1559.     return if !first_of_all_screen_anime(data[0], target, targets)
  1560.     target.animation_id         = data[0]
  1561.     target.animation_mirror     = data[1]
  1562.     target.sv.anime_no_mirror   = data[2]
  1563.     target.sv.anime_camera_zoom = data[3]
  1564.     target.sv.anime_plus_z      = data[4]
  1565.   end   
  1566.   #--------------------------------------------------------------------------
  1567.   # ● 取得目标
  1568.   #--------------------------------------------------------------------------
  1569.   def self.get_targets(kind, battler)
  1570.     case kind.abs
  1571.     when 0 ; return [battler].dup
  1572.     when 1 ; return battler.sv.target_battler.dup
  1573.     when 2 ; return get_enemy_unit(battler).members.dup
  1574.     when 3 ; return get_party_unit(battler).members.dup
  1575.     when 4 ; return $game_troop.members.dup + $game_party.battle_members.dup
  1576.     when 5 ; return battler.sv.second_targets.dup
  1577.     end
  1578.   end  
  1579.   #--------------------------------------------------------------------------
  1580.   # ● 目标的坐标取得
  1581.   #--------------------------------------------------------------------------
  1582.   def self.get_targets_position(targets, horming, m_a = nil)
  1583.     return [0,0,0] if targets == nil && !$sv_camera.mirror
  1584.     return [Graphics.width,0,0] if targets == nil && $sv_camera.mirror
  1585.     x = y = h = 0
  1586.     for i in 0...targets.size
  1587.       x += targets[i].sv.base_x if !horming
  1588.       y += targets[i].sv.base_y if !horming
  1589.       h += targets[i].sv.base_h if !horming
  1590.       x += targets[i].sv.x if horming
  1591.       y += targets[i].sv.y if horming
  1592.       h += targets[i].sv.h if horming
  1593.       y -= targets[i].sv.ch * 100 if m_a == 0
  1594.       y -= targets[i].sv.ch * 50 if m_a == 1
  1595.     end
  1596.     return [x / targets.size, y / targets.size, h / targets.size]
  1597.   end
  1598.   #--------------------------------------------------------------------------
  1599.   # ● 速度转换时间
  1600.   #--------------------------------------------------------------------------
  1601.   def self.distanse_calculation(time, target_position, self_position, distanse_move)
  1602.     return time if !distanse_move
  1603.     distanse_x = self_position[0] - target_position[0]
  1604.     distanse_x = target_position[0] - self_position[0] if target_position[0] > self_position[0]
  1605.     distanse_y = self_position[1] - target_position[1]
  1606.     distanse_y = target_position[1] - self_position[1] if target_position[1] > self_position[1]
  1607.     if self_position[2] != nil && target_position[2] != nil
  1608.       distanse_h = self_position[2] - target_position[2]
  1609.       distanse_h = target_position[2] - self_position[2] if target_position[2] > self_position[2]
  1610.     else
  1611.       distanse_h = 0
  1612.     end
  1613.     distanse = [distanse_x, distanse_y, distanse_h].max
  1614.     return distanse / (time * 100) + 1
  1615.   end
  1616.   #--------------------------------------------------------------------------
  1617.   # ● 计算抛物线移动
  1618.   #--------------------------------------------------------------------------
  1619.   def self.parabola(data, time, size, type = 1)
  1620.     move_data = data
  1621.     move_data[0] *= size
  1622.     move_data[1] *= size
  1623.     move = []
  1624.     move_d = []
  1625.     for i in 0...time / 2
  1626.       move[i] = move_data[0]
  1627.       move_d[i] = move_data[1]
  1628.       move_data[0] = move_data[0] * type / (1 + type)
  1629.       move_data[1] = move_data[1] * type / (1 + type)
  1630.     end
  1631.     move = move + move_d.reverse!
  1632.     move.reverse!
  1633.     adjust = move.inject(0) {|result, item| result + item }
  1634.     move[move.size - 1] += adjust if data[0] == data[1] && adjust != 0
  1635.     move.unshift(0) if time % 2 != 0
  1636.     return move
  1637.   end
  1638.   #--------------------------------------------------------------------------
  1639.   # ● 反转数值
  1640.   #--------------------------------------------------------------------------
  1641.   def self.mirror_num(mirror)
  1642.     return 1 if !mirror
  1643.     return -1
  1644.   end  
  1645.   #--------------------------------------------------------------------------
  1646.   # ● 摄影机
  1647.   #--------------------------------------------------------------------------
  1648.   def self.camera(battler, data)
  1649.     battler = $game_party.battle_members[0] if !battler
  1650.     cx = data[2][0] * 100
  1651.     cy = data[2][1] * 100
  1652.     return $sv_camera.move(cx, cy, data[3], data[4], true) if data[1] == 6
  1653.     targets = self.get_targets(data[1], battler)
  1654.     return if targets == nil or targets == []
  1655.     position = self.get_targets_position(targets, true)
  1656.     $sv_camera.move(position[0], position[1] - position[2], data[3], data[4], false)
  1657.   end
  1658.   #--------------------------------------------------------------------------
  1659.   # ● 禁止战斗不能
  1660.   #--------------------------------------------------------------------------
  1661.   def self.immortaling
  1662.     # 赋予全体不死状态
  1663.     for member in $game_party.battle_members + $game_troop.members
  1664.       # 事件操作等无敌设定就会解除flag的无效
  1665.       member.sv.immortal = true if member.state?(N03::IMMORTAL_ID)
  1666.       member.add_state(N03::IMMORTAL_ID)
  1667.     end
  1668.     return true
  1669.   end  
  1670.   #--------------------------------------------------------------------------
  1671.   # ● 允许战斗不能
  1672.   #--------------------------------------------------------------------------
  1673.   def self.unimmortaling
  1674.     # 解除全体不死状态(如果事件等无敌设定以外)
  1675.     for member in $game_party.battle_members + $game_troop.members
  1676.       next if member.dead?
  1677.       # 不死身状态行动中被解除的场合、从状态中解除无效
  1678.       member.sv.immortal = false if !member.state?(N03::IMMORTAL_ID) && member.sv.immortal
  1679.       next member.sv.immortal = false if member.sv.immortal
  1680.       member.remove_state(N03::IMMORTAL_ID)
  1681.       next if member.hp != 0
  1682.       member.add_state(1)
  1683.      member.perform_collapse_effect
  1684.       member.sv.action_terminate
  1685.     end
  1686.     return false
  1687.   end  
  1688.   #--------------------------------------------------------------------------
  1689.   # ● 技能连发
  1690.   #--------------------------------------------------------------------------
  1691.   def self.derived_skill(battler)
  1692.     battler.force_action(battler.sv.derivation_skill_id, -2)
  1693.     BattleManager.unshift_action_battlers(battler)
  1694.   end
  1695.   #--------------------------------------------------------------------------
  1696.   # ● 创建伤害
  1697.   #--------------------------------------------------------------------------
  1698.   def self.set_damage(battler, hp_damage, mp_damage)
  1699.     battler.result.hp_damage = hp_damage
  1700.     battler.result.mp_damage = mp_damage
  1701.   end
  1702.   #--------------------------------------------------------------------------
  1703.   # ● 确认目标生死
  1704.   #--------------------------------------------------------------------------
  1705.   def self.targets_alive?(targets)
  1706.     return false if targets == []
  1707.     for target in targets do return true if !target.dead? end
  1708.     return false
  1709.   end
  1710.   #--------------------------------------------------------------------------
  1711.   # ● 定位到第二个目标
  1712.   #--------------------------------------------------------------------------
  1713.   def self.s_targets(battler)
  1714.     battler.sv.target_battler = battler.sv.second_targets
  1715.     return battler.sv.second_targets
  1716.   end  
  1717.   #--------------------------------------------------------------------------
  1718.   # ● 定位目标到第二个目标
  1719.   #--------------------------------------------------------------------------
  1720.   def self.targets_set(battler)
  1721.     battler.sv.second_targets = battler.current_action.make_targets.compact
  1722.     battler.sv.target_battler = battler.sv.second_targets
  1723.   end  
  1724.   #--------------------------------------------------------------------------
  1725.   # ● 实行战斗动画判定 (对象:实行第一个目标时的画面的动画)
  1726.   #--------------------------------------------------------------------------
  1727.   def self.first_of_all_screen_anime(anime_id, target, targets)
  1728.     anime = $data_animations[anime_id]
  1729.     return false if !anime
  1730.     return true if anime.position != 3
  1731.     return false if anime.position == 3 && target != targets[0]
  1732.     targets.delete(target)
  1733.     target.sv.timing_targets = targets
  1734.     return true
  1735.   end
  1736.   #--------------------------------------------------------------------------
  1737.   # ● 战斗不能是否附加攻击
  1738.   #--------------------------------------------------------------------------
  1739.   def self.dead_attack?(battler, item)
  1740.     for state in battler.atk_states
  1741.       return true if state == battler.death_state_id
  1742.     end
  1743.     for effect in item.effects
  1744.       return true if effect.code == 21 && effect.data_id == battler.death_state_id
  1745.     end
  1746.     return false
  1747.   end
  1748. end
  1749.  
  1750. #==============================================================================
  1751. # ■ Sprite_Weapon
  1752. #------------------------------------------------------------------------------
  1753. #  这是一个显示武器的脚本。
  1754. #==============================================================================
  1755. class Sprite_Weapon < Sprite_Base
  1756.   #--------------------------------------------------------------------------
  1757.   # ● 公开实例变量 
  1758.   #--------------------------------------------------------------------------
  1759.   attr_reader   :index                       # 武器图像排列的index
  1760.   attr_reader   :battler                     # 角色图像
  1761.   attr_reader   :move_time                   # 图像达到目标的为止的这段时间
  1762.   attr_reader   :through                     # 贯穿标记
  1763.   attr_reader   :action_end                  # 武器动作结束的标记
  1764.   attr_reader   :action_end_cancel           # 武器动作结束,取消的标记
  1765.   attr_reader   :hit_position                # 图像达到目标时的坐标
  1766.   attr_accessor :hit_anime_id                # 图像达到目标时的动画ID
  1767.   #--------------------------------------------------------------------------
  1768.   # ● 初始化物件
  1769.   #--------------------------------------------------------------------------
  1770.   def initialize(viewport, index, battler)
  1771.     super(viewport)
  1772.     @index = index
  1773.     @battler = battler
  1774.     @position_x = @position_y = 0
  1775.     @o = 0
  1776.     @real_x = @real_y = 0
  1777.     @mirror = @battler.sv.mirror
  1778.     reset
  1779.     set_action
  1780.   end
  1781.   #--------------------------------------------------------------------------
  1782.   # ● 初始化
  1783.   #--------------------------------------------------------------------------
  1784.   def reset
  1785.     @z_plus = 0
  1786.     @weapon_data = []
  1787.     @move_data = []
  1788.     @move_x = 0
  1789.     @move_y = 0
  1790.     @orbit = []
  1791.     @through = false
  1792.     @distanse_move = false
  1793.     @weapon_width = 0
  1794.     @weapon_height = 0
  1795.     @anime_time = 0
  1796.     @anime_position = 1
  1797.     @move_time = 0
  1798.     @hit_anime_id = 0
  1799.     @move_anime = true
  1800.     @action_end = false
  1801.     @action_end_cancel = false
  1802.     reset_position
  1803.   end  
  1804.   #--------------------------------------------------------------------------
  1805.   # ● 动作设置
  1806.   #--------------------------------------------------------------------------
  1807.   def set_action
  1808.     return if @battler.sv.effect_data == []
  1809.     weapon_anime if @battler.sv.effect_data[0][0] == "wp"
  1810.     move_anime if @battler.sv.effect_data[0][0] == "m_a"
  1811.     @battler.sv.effect_data.shift
  1812.   end
  1813.   #--------------------------------------------------------------------------
  1814.   # ● 实行武器动画
  1815.   #--------------------------------------------------------------------------
  1816.   def weapon_anime
  1817.     @weapon_data = @battler.sv.effect_data[0].dup
  1818.     set_graphics
  1819.     set_ox
  1820.     set_weapon_move
  1821.   end
  1822.   #--------------------------------------------------------------------------
  1823.   # ● 实行动画移动
  1824.   #--------------------------------------------------------------------------
  1825.   def move_anime
  1826.     @move_data = @battler.sv.effect_data[0].dup
  1827.     # 取得目标
  1828.     @target_battler = [@battler.sv.m_a_targets.shift]
  1829.     @target_battler = N03.get_targets(@move_data[3], @battler) if @move_data[3] < 0
  1830.     set_move
  1831.     return if @move_data[16] == ""
  1832.     weapon_data = N03::ACTION[@move_data[16]]
  1833.     return if weapon_data == nil
  1834.     @weapon_data = weapon_data.dup
  1835.     set_graphics
  1836.     set_ox
  1837.     set_weapon_move
  1838.   end
  1839.   #--------------------------------------------------------------------------
  1840.   # ● 取得武器图像
  1841.   #--------------------------------------------------------------------------  
  1842.   def set_graphics
  1843.     # 武器不依赖图像设定的情况下
  1844.     if @weapon_data[13] != ""
  1845.       self.bitmap = Cache.character(@weapon_data[13]).dup
  1846.       @weapon_width = self.bitmap.width
  1847.       @weapon_height = self.bitmap.height
  1848.       return
  1849.     end
  1850.     # 取得武器
  1851.     weapon = @battler.weapons[0]
  1852.     # 取得二刀流武器
  1853.     if @weapon_data[10]
  1854.       weapon = nil
  1855.       for armor in @battler.armors do break weapon = armor if armor.is_a?(RPG::Armor) && armor.etype_id == 1 end
  1856.       weapon = @battler.weapons[1] if !weapon
  1857.     end  
  1858.     # 如果没有武器将取消处理
  1859.     return if weapon == nil
  1860.     # 指数取得
  1861.     file_index = @weapon_data[12]
  1862.     # 如果使用图标
  1863.     if @weapon_data[1] == 0
  1864.       icon_index = weapon.icon_index
  1865.       self.bitmap = Cache.system("Iconset" + file_index).dup
  1866.       self.src_rect.set(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  1867.       @weapon_width = @weapon_height = 24
  1868.     # 独自图像指定
  1869.     else
  1870.       file_name = @battler.sv.weapon_graphic(weapon.id, weapon.wtype_id) if weapon.is_a?(RPG::Weapon)
  1871.       file_name = @battler.sv.shield_graphic(weapon.id, weapon.atype_id) if weapon.is_a?(RPG::Armor)
  1872.       self.bitmap = Cache.character(file_name + file_index).dup
  1873.       @weapon_width = self.bitmap.width
  1874.       @weapon_height = self.bitmap.height
  1875.       return if @weapon_data[1] == 1
  1876.       # 2003规范的武器动画
  1877.       @weapon_width /= @battler.sv.max_pattern[0]
  1878.     end
  1879.   end
  1880.   #--------------------------------------------------------------------------
  1881.   # ● 取得图像的原点
  1882.   #--------------------------------------------------------------------------  
  1883.   def set_ox
  1884.     # 反转时设置为相反
  1885.     if @mirror
  1886.       case @weapon_data[6]
  1887.       when 1 ; @weapon_data[6] = 2 # 左上→右上角
  1888.       when 2 ; @weapon_data[6] = 1 # 右上→左上角
  1889.       when 3 ; @weapon_data[6] = 4 # 左下→右下角
  1890.       when 4 ; @weapon_data[6] = 3 # 右下→左下角
  1891.       end
  1892.     end
  1893.     # 原点的設定
  1894.     case @weapon_data[6]
  1895.     when 0 # 中心
  1896.       self.ox = @weapon_width / 2
  1897.       self.oy = @weapon_height / 2
  1898.     when 1 # 左上
  1899.       self.ox = 0
  1900.       self.oy = 0
  1901.     when 2 # 右上
  1902.       self.ox = @weapon_width
  1903.       self.oy = 0
  1904.     when 3 # 左下
  1905.       self.ox = 0
  1906.       self.oy = @weapon_height
  1907.     when 4 # 右下
  1908.       self.ox = @weapon_width
  1909.       self.oy = @weapon_height
  1910.     when 5 # 同角色位置
  1911.       self.ox = @weapon_width / 2
  1912.       self.oy = @weapon_height
  1913.     end
  1914.   end  
  1915.   #--------------------------------------------------------------------------
  1916.   # ● 取得角色的坐标
  1917.   #--------------------------------------------------------------------------  
  1918.   def set_battler_position
  1919.     @position_x = @battler.sv.x + @weapon_data[3][0] * N03.mirror_num(@mirror) * 100
  1920.     @position_y = (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust) + @weapon_data[3][1] * 100
  1921.     reset_position
  1922.   end
  1923.   #--------------------------------------------------------------------------
  1924.   # ● 初始化坐标
  1925.   #--------------------------------------------------------------------------  
  1926.   def reset_position
  1927.     @real_x = @position_x / 100
  1928.     @real_y = @position_y / 100
  1929.     @real_zoom_x = 1
  1930.     @real_zoom_y = 1
  1931.   end
  1932.   #--------------------------------------------------------------------------
  1933.   # ● 战斗动画显示
  1934.   #--------------------------------------------------------------------------  
  1935.   def set_animation(anime_id)
  1936.     return if $data_animations[anime_id] == nil
  1937.     @anime_position = $data_animations[anime_id].position
  1938.     @horming = true
  1939.     @horming = false if @anime_position == 3
  1940.     @anime_camera_zoom = true
  1941.     @anime_no_mirror = false
  1942.     start_animation($data_animations[anime_id], @mirror)
  1943.     timings = $data_animations[anime_id].timings
  1944.   end
  1945.   #--------------------------------------------------------------------------
  1946.   # ● 实行打击时的战斗动画
  1947.   #--------------------------------------------------------------------------  
  1948.   def set_hit_animation(position_data, hit_anime_id, target)
  1949.     return if $data_animations[hit_anime_id] == nil
  1950.     @real_x = position_data[0]
  1951.     @real_y = position_data[1]
  1952.     @position_x = position_data[0] * 100
  1953.     @position_y = position_data[1] * 100
  1954.     self.z = position_data[2]
  1955.     @z_plus = 1000
  1956.     @action_end = false
  1957.     @horming = true
  1958.     set_animation(hit_anime_id)
  1959.     @anime_time = $data_animations[hit_anime_id].frame_max * 4
  1960.     @timing_targets = [target]
  1961.     @move_time = @hit_anime_id = 0
  1962.     @weapon_data = []
  1963.   end
  1964.   #--------------------------------------------------------------------------
  1965.   # ● 角色时间追加
  1966.   #--------------------------------------------------------------------------  
  1967.   def timing_battler_set(target)
  1968.     @timing_targets.push(target)
  1969.   end
  1970.   #--------------------------------------------------------------------------
  1971.   # ● 取得武器的移动
  1972.   #--------------------------------------------------------------------------  
  1973.   def set_weapon_move
  1974.     # 取得开始位置
  1975.     set_battler_position if @move_time == 0
  1976.     @z_plus = 50 if @z_plus == 0 && @weapon_data[9]
  1977.     self.z = @battler.sv.z + @z_plus
  1978.     # 反转处理
  1979.     @mirror = !@mirror if @weapon_data[7]
  1980.     self.mirror = @mirror
  1981.     # 更新模式设置
  1982.     set_pattern
  1983.     @max_pattern = 2 if @max_pattern == 1
  1984.     # 计算武器移动
  1985.     @weapon_move_data = []
  1986.     @weapon_angle_data = []
  1987.     @weapon_zoom_data = []
  1988.     num = N03.mirror_num(@mirror)
  1989.     for i in 0...@max_pattern
  1990.       move_data_x = @weapon_data[2][0] * num * 100 * i / (@max_pattern - 1)
  1991.       move_data_y = @weapon_data[2][1] * 100 * i / (@max_pattern - 1)
  1992.       move_angle = @weapon_data[4] * num + (@weapon_data[5] * num - @weapon_data[4] * num) * i / (@max_pattern - 1)
  1993.       move_zoom_x = 1 + (@weapon_data[8][0] - 1) * i / (@max_pattern - 1)
  1994.       move_zoom_y = 1 + (@weapon_data[8][1] - 1) * i / (@max_pattern - 1)
  1995.       @weapon_move_data.push([move_data_x, move_data_y])
  1996.       @weapon_angle_data.push(move_angle)
  1997.       @weapon_zoom_data.push([move_zoom_x, move_zoom_y])
  1998.     end
  1999.   end  
  2000.   #--------------------------------------------------------------------------
  2001.   # ● 更新模式
  2002.   #--------------------------------------------------------------------------
  2003.   def set_pattern
  2004.     if @weapon_data[11] == -1
  2005.       return @max_pattern = @battler.sv.max_pattern[0] if @battler.sv.pattern_type != 0
  2006.       @count = @battler.sv.pattern_time
  2007.       @max_count = @battler.sv.pattern_time
  2008.       @max_pattern = @battler.sv.max_pattern[0]
  2009.       @repeat = false
  2010.     else
  2011.       @count = @weapon_data[11][0]
  2012.       @max_count = @weapon_data[11][0]
  2013.       @max_pattern = @weapon_data[11][1]
  2014.       @repeat = @weapon_data[11][2]
  2015.     end
  2016.     @pattern = 0
  2017.   end
  2018.   #--------------------------------------------------------------------------
  2019.   # ● 实行移动
  2020.   #--------------------------------------------------------------------------
  2021.   def set_move
  2022.     # 取得战斗动画
  2023.     set_animation(@move_data[1][0]) if $data_animations[@move_data[1][0]] != nil && $data_animations[@move_data[1][0]].position != 3
  2024.     @anime_camera_zoom = @move_data[13]
  2025.     @loop = @move_data[14]
  2026.     @loop = false if @move_data[1][0] == 0
  2027.     @anime_no_mirror = @move_data[15]
  2028.     @se_flag = @move_data[17]
  2029.     # 取得开始位置
  2030.     start_position
  2031.     @z_plus = 1000 if @move_data[9]
  2032.     # 目标角色图像的动画的反映SE和时机设定
  2033.     @timing_targets = @target_battler
  2034.     # 计算坐标
  2035.     @move_x = @move_data[5][0] * 100 * N03.mirror_num(@mirror)
  2036.     @move_y = @move_data[5][1] * 100
  2037.     # 计算时间或速度
  2038.     @distanse_move = true if @move_data[6] > 0
  2039.     @move_time = @move_data[6].abs
  2040.     # 时间为0的时、如果被描写成动画显示时间
  2041.     if @move_time == 0
  2042.       @move_time = $data_animations[@move_data[1][0]].frame_max * 4 if $data_animations[@move_data[1][0]]
  2043.       @move_time = 1 if !$data_animations[@move_data[1][0]]
  2044.       @distanse_move = false
  2045.     end
  2046.     # 贯穿类型的场合
  2047.     @through = true if @move_data[7] == 1
  2048.     @auto_through_flag = false
  2049.     @auto_through_flag = true if @move_data[7] == 0
  2050.     # 计算目标坐标
  2051.     if @target_battler == nil
  2052.       @target_x = @move_x * 100
  2053.       @target_x = (Graphics.width - @move_x) * 100 if @mirror
  2054.       @target_y = @move_y * 100
  2055.     else
  2056.       move_data_set
  2057.     end
  2058.     # 计算目标达到的时间
  2059.     @move_time = distanse_calculation(@move_time, @target_x, @target_y)
  2060.     # 计算圆形轨道
  2061.     orbit
  2062.     # 角色的体能设定
  2063.     @battler.sv.wait = @move_time - 1 if @move_data[10][0]
  2064.     @move_horming = @move_data[12]
  2065.   end  
  2066.   #--------------------------------------------------------------------------
  2067.   # ● 速度转换时间
  2068.   #--------------------------------------------------------------------------
  2069.   def distanse_calculation(time, target_x, target_y)
  2070.     return time if !@distanse_move
  2071.     distanse_x = @position_x - @target_x
  2072.     distanse_x = @target_x - @position_x if @target_x > @position_x
  2073.     distanse_y = @position_y - @target_y
  2074.     distanse_y = @target_y - @position_y if @target_y > @position_y
  2075.     distanse = [distanse_x, distanse_y].max
  2076.     return distanse / (time * 100) + 1
  2077.   end
  2078.   #--------------------------------------------------------------------------
  2079.   # ● 更新移动目标
  2080.   #--------------------------------------------------------------------------
  2081.   def move_data_set
  2082.     return if @target_battler == nil
  2083.     position = N03.get_targets_position(@target_battler, true, @anime_position)
  2084.     @target_x = position[0] + @move_x
  2085.     @target_y = position[1] - position[2] + @move_y
  2086.   end
  2087.   #--------------------------------------------------------------------------
  2088.   # ● 计算开始位置
  2089.   #--------------------------------------------------------------------------
  2090.   def start_position
  2091.     starter = [@battler.sv.m_a_starter.shift]
  2092.     starter = N03.get_targets(@move_data[2], @battler) if @move_data[2] < 0
  2093.     position = [0, 0]
  2094.     position = N03.get_targets_position(starter, true, @anime_position) if starter != nil
  2095.     @position_x = position[0] + @move_data[4][0] * 100
  2096.     @position_y = position[1] + position[2] + @move_data[4][1] * 100
  2097.     @position_z = @position_y
  2098.   end  
  2099.   #--------------------------------------------------------------------------
  2100.   # ● 计算原型轨道
  2101.   #--------------------------------------------------------------------------
  2102.   def orbit
  2103.     orbit_data = @move_data[8].dup
  2104.     orbit_data[0] *= 100
  2105.     orbit_data[1] *= 100
  2106.     orbit_d = []
  2107.     for i in 0...@move_time / 2
  2108.       @orbit[i] = orbit_data[0]
  2109.       orbit_data[0] /= 2
  2110.       orbit_d[i] = orbit_data[1]
  2111.       orbit_data[1] /= 2
  2112.     end
  2113.     @orbit = @orbit + orbit_d.reverse!
  2114.     @orbit.reverse!
  2115.   end  
  2116.   #--------------------------------------------------------------------------
  2117.   # ● 更新框架
  2118.   #--------------------------------------------------------------------------
  2119.   def update
  2120.     update_hit_anime if @anime_time != 0
  2121.     update_move if @move_time != 0
  2122.     update_weapon_move if @weapon_data != []
  2123.     update_position
  2124.     update_color
  2125.     self.visible = @battler.sv.weapon_visible
  2126.     super
  2127.   end
  2128.   #--------------------------------------------------------------------------
  2129.   # ● 打击时的战斗动画
  2130.   #--------------------------------------------------------------------------
  2131.   def update_hit_anime
  2132.     @anime_time -= 1
  2133.     @action_end = true if @anime_time == 0
  2134.   end
  2135.   #--------------------------------------------------------------------------
  2136.   # ● 更新移动
  2137.   #--------------------------------------------------------------------------
  2138.   def update_move
  2139.     move_data_set if @move_horming && !@hit_position
  2140.     through_set(@move_time, @target_x, @target_y) if @move_time == 1 && !@hit_position
  2141.     @o += @orbit[@move_time - 1] if @orbit[@move_time - 1] != nil
  2142.     @position_x = (@position_x * (@move_time - 1) + @target_x) / @move_time
  2143.     @position_y = (@position_y * (@move_time - 1) + @target_y) / @move_time + @o
  2144.     reset_position
  2145.     set_animation(@move_data[1][0]) if @loop && !animation?
  2146.     @move_time -= 1
  2147.     return if @move_time != 0
  2148.     @action_end = true if !@action_end_cancel
  2149.   end
  2150.   #--------------------------------------------------------------------------
  2151.   # ● 更新武器的移动
  2152.   #--------------------------------------------------------------------------
  2153.   def update_weapon_move
  2154.     pattern = update_pattern
  2155.     set_battler_position if @move_time == 0 && !@action_end_cancel
  2156.     @real_x = @position_x / 100 + @weapon_move_data[pattern][0] / 100
  2157.     @real_y = @position_y / 100 + @weapon_move_data[pattern][1] / 100
  2158.     @real_zoom_x = @weapon_zoom_data[pattern][0]
  2159.     @real_zoom_y = @weapon_zoom_data[pattern][1]
  2160.     self.angle = @weapon_angle_data[pattern]
  2161.     self.src_rect.set(@weapon_width * pattern, 0, @weapon_width, @weapon_height) if @weapon_data[1] == 2
  2162.   end
  2163.   #--------------------------------------------------------------------------
  2164.   # ● 更新模式
  2165.   #--------------------------------------------------------------------------
  2166.   def update_pattern
  2167.     return @battler.sv.pattern_w if @count == nil
  2168.     @count -= 1
  2169.     return @pattern if @count != 0
  2170.     @count = @max_count
  2171.     @pattern += 1
  2172.     if !@repeat && @pattern == @max_pattern
  2173.       @pattern = @max_pattern - 1
  2174.     elsif @pattern == @max_pattern
  2175.       @pattern = 0
  2176.     end
  2177.     return @pattern
  2178.   end
  2179.   #--------------------------------------------------------------------------
  2180.   # ● 更新坐标
  2181.   #--------------------------------------------------------------------------
  2182.   def update_position
  2183.     self.x = (@real_x - $sv_camera.x) * $sv_camera.convert / 1000
  2184.     self.y = (@real_y - $sv_camera.y) * $sv_camera.convert / 1000
  2185.     self.x += $sv_camera.sx / 100 unless @battler.sv.h != 0 && @weapon_data != []
  2186.     self.y += $sv_camera.sy / 100 unless @battler.sv.h != 0 && @weapon_data != []
  2187.     self.z = @battler.sv.z + @z_plus - 10
  2188.     self.zoom_x = @real_zoom_x * $sv_camera.zoom
  2189.     self.zoom_y = @real_zoom_y * $sv_camera.zoom
  2190.     self.opacity = @battler.sv.opacity if @battler.sv.opacity_data[4]
  2191.   end
  2192.   #--------------------------------------------------------------------------
  2193.   # ● 贯穿的处理
  2194.   #--------------------------------------------------------------------------
  2195.   def through_set(time, target_x, target_y)
  2196.     @hit_anime_id = N03.get_attack_anime_id(@move_data[1][1], @battler)
  2197.     @battler.sv.wait = N03.get_anime_time(@hit_anime_id) if @move_data[10][1]
  2198.     moving_x = (target_x / 100 - @position_x / 100) / time
  2199.     moving_y = (target_y / 100 - @position_y / 100) / time
  2200.     goal_x = $sv_camera.max_left - 100 if moving_x < 0
  2201.     goal_x = Graphics.width + $sv_camera.max_right + 100 if moving_x > 0
  2202.     goal_y = $sv_camera.max_top - 100 if moving_y < 0
  2203.     goal_y = Graphics.height + $sv_camera.max_bottom + 100 if moving_y > 0
  2204.     if goal_x == nil &&  goal_y == nil
  2205.       time = 0
  2206.       reset_position
  2207.     else
  2208.       time = move_calculation(moving_x, moving_y, goal_x, goal_y)
  2209.     end
  2210.     target_x = @position_x + moving_x * time * 100
  2211.     target_y = @position_y + moving_y * time * 100
  2212.     @pre_data = [time, target_x, target_y]
  2213.     @battler.sv.m_a_data.push([@move_data[11], @target_battler, @index, @auto_through_flag, []])
  2214.     @action_end_cancel = true
  2215.     @hit_position = [@real_x, @real_y, self.z]
  2216.   end  
  2217.   #--------------------------------------------------------------------------
  2218.   # ● 达到时间预算
  2219.   #--------------------------------------------------------------------------
  2220.   def move_calculation(moving_x, moving_y, goal_x, goal_y)
  2221.     move_x = @position_x / 100
  2222.     move_y = @position_y / 100
  2223.     time = 0
  2224.     loop do
  2225.       move_x += moving_x
  2226.       move_y += moving_y
  2227.       time += 1
  2228.       return time if moving_x < 0 && move_x < goal_x
  2229.       return time if moving_x > 0 && move_x > goal_x
  2230.       return time if moving_y < 0 && move_y < goal_y
  2231.       return time if moving_y > 0 && move_y > goal_y
  2232.     end
  2233.   end   
  2234.   #--------------------------------------------------------------------------
  2235.   # ● 错误时从处理消失转换成贯穿处理
  2236.   #--------------------------------------------------------------------------
  2237.   def through_change
  2238.     @action_end_cancel = false
  2239.     @through = true
  2240.     @move_time = @pre_data[0]
  2241.     @target_x = @pre_data[1]
  2242.     @target_y = @pre_data[2]
  2243.     @pre_data = nil
  2244.   end  
  2245.   #--------------------------------------------------------------------------
  2246.   # ● SE 闪光灯和处理的时间
  2247.   #--------------------------------------------------------------------------
  2248.   def animation_process_timing(timing)
  2249.     return if !@timing_targets
  2250.     se_flag = true
  2251.     se_flag = @se_flag if @se_flag != nil
  2252.     for target in @timing_targets
  2253.       target.sv.timing.push([se_flag, timing.dup])
  2254.       se_flag = false if @animation.position == 3
  2255.     end  
  2256.   end
  2257.   #--------------------------------------------------------------------------
  2258.   # ● 更新色调
  2259.   #--------------------------------------------------------------------------
  2260.   def update_color
  2261.     return if @battler.sv.color == []
  2262.     self.color.set(@battler.sv.color[0], @battler.sv.color[1], @battler.sv.color[2], @battler.sv.color[3])
  2263.   end
  2264.   #--------------------------------------------------------------------------
  2265.   # ● 释放
  2266.   #--------------------------------------------------------------------------
  2267.   def dispose
  2268.     super
  2269.     self.bitmap.dispose if self.bitmap != nil
  2270.   end
  2271. end
  2272.  
  2273. #==============================================================================
  2274. # ■ Sprite_Battle_Picture
  2275. #------------------------------------------------------------------------------
  2276. #  这是一个画面的图象显示。
  2277. #==============================================================================
  2278. class Sprite_Battle_Picture < Sprite
  2279.   #--------------------------------------------------------------------------
  2280.   # ● 公开实例变量
  2281.   #--------------------------------------------------------------------------
  2282.   attr_accessor   :action_end           # 结束标记
  2283.   #--------------------------------------------------------------------------
  2284.   # ● 初始化物件
  2285.   #--------------------------------------------------------------------------
  2286.   def initialize(viewport = nil)
  2287.     super(viewport)
  2288.     @action_end = false
  2289.     self.ox = 0
  2290.   end
  2291.   #--------------------------------------------------------------------------
  2292.   # ● 集合
  2293.   #--------------------------------------------------------------------------
  2294.   def set(battler)
  2295.     @battler = battler
  2296.     @data = @battler.sv.effect_data.shift
  2297.     @time = @data[4]
  2298.     @mirror = $sv_camera.mirror
  2299.     @mirror = false if !@data[8]
  2300.     self.opacity = @data[6][0]
  2301.     @s_x = @data[2][0] if @data[2] != []
  2302.     @s_x = Graphics.width - @data[2][0]  if @data[2] != [] && @mirror
  2303.     @s_y = @data[2][1] if @data[2] != []
  2304.     @e_x = @data[3][0] if @data[3] != []
  2305.     @e_x = Graphics.width - @data[3][0] if @data[3] != [] && @mirror
  2306.     @e_y = @data[3][1] if @data[3] != []
  2307.     @s_x = self.x if @data[2] == []
  2308.     @s_y = self.y if @data[2] == []
  2309.     @e_x = self.x if @data[3] == []
  2310.     @e_y = self.y if @data[3] == []
  2311.     self.x = @s_x
  2312.     self.y = @s_y
  2313.     return @action_end = true if @time == 0
  2314.     @move_x = (@e_x * 1.0 - @s_x) / @time
  2315.     @move_y = (@e_y * 1.0 - @s_y) / @time
  2316.     self.z = @data[5]
  2317.     return set_plane(battler) if @data[7] != []
  2318.     self.bitmap = Cache.picture(@data[9]) if !bitmap or @data[9] != ""
  2319.     return @action_end = true if !bitmap
  2320.     self.mirror = @mirror
  2321.     self.ox = self.bitmap.width if @mirror
  2322.   end
  2323.   #--------------------------------------------------------------------------
  2324.   # ● 过渡平面
  2325.   #--------------------------------------------------------------------------
  2326.   def set_plane(battler)
  2327.     @viewport = Viewport.new(@data[2][0],@data[2][1],@data[7][0],@data[7][1]) if !@viewport
  2328.     viewport = @viewport
  2329.     @plane = Plane.new(viewport) if !@plane
  2330.     @plane.bitmap = Cache.picture(@data[9]) if !@plane.bitmap or @data[9] != ""
  2331.     return @action_end = true if !@plane.bitmap
  2332.     @plane.ox = @data[7][0]
  2333.     @plane.oy = @data[7][1]
  2334.     @plane.opacity = @data[6][0]
  2335.     @move_x = @remain_move[0] if @data[2] == @data[3]
  2336.     @move_y = @remain_move[1] if @data[2] == @data[3]
  2337.     @remain_move = [@move_x, @move_y]
  2338.   end
  2339.   #--------------------------------------------------------------------------
  2340.   # ● 更新帧数
  2341.   #--------------------------------------------------------------------------
  2342.   def update
  2343.     @action_end = true if !@battler.sv.picture
  2344.     return if @time == 0
  2345.     return if @action_end
  2346.     @time -= 1
  2347.     return plane_update if @plane
  2348.     super
  2349.     self.x += @move_x
  2350.     self.y += @move_y
  2351.     self.opacity += @data[6][1]
  2352.     return if @time != 1
  2353.     self.x = @e_x
  2354.     self.y = @e_y
  2355.     @time = 0
  2356.   end
  2357.   #--------------------------------------------------------------------------
  2358.   # ● 更新平面
  2359.   #--------------------------------------------------------------------------
  2360.   def plane_update
  2361.     @plane.ox += @move_x
  2362.     @plane.oy += @move_y
  2363.     @plane.opacity += @data[6][1]
  2364.     @time = @data[4] if @time == 0
  2365.   end
  2366.   #--------------------------------------------------------------------------
  2367.   # ● 释放
  2368.   #--------------------------------------------------------------------------
  2369.   def dispose
  2370.     bitmap.dispose if bitmap
  2371.     @plane.dispose if @plane
  2372.     @viewport.dispose if @viewport
  2373.     super
  2374.   end
  2375. end
  2376.  
  2377. #==============================================================================
  2378. # ■ Sprite_Back_Picture
  2379. #------------------------------------------------------------------------------
  2380. #  这是一个精灵的一段画面。
  2381. #==============================================================================
  2382. class Sprite_Back_Picture < Plane
  2383.   #--------------------------------------------------------------------------
  2384.   # ● 公开实例变量 
  2385.   #--------------------------------------------------------------------------
  2386.   attr_accessor   :action_end           # 结束标记
  2387.   #--------------------------------------------------------------------------
  2388.   # ● 初始化物件
  2389.   #--------------------------------------------------------------------------
  2390.   def initialize(viewport = nil, index)
  2391.     super(viewport)
  2392.     @index = index
  2393.     @real_x = 0
  2394.     @real_y = 0
  2395.     @real_opacity = 0
  2396.     @move_x = 0
  2397.     @move_y = 0
  2398.     @move_opacity = 0
  2399.     @time = 0
  2400.     @switche = 0
  2401.     @action_end = false
  2402.   end
  2403.   #--------------------------------------------------------------------------
  2404.   # ● 格局
  2405.   #--------------------------------------------------------------------------
  2406.   def setup(data)
  2407.     self.bitmap = Cache.picture(data[9])
  2408.     self.z = data[6]
  2409.     @switche = data[1]
  2410.     mirror = $sv_camera.mirror
  2411.     mirror = false if !data[8]
  2412.     @move_x = data[3][0]
  2413.     @move_x *= -1 if mirror
  2414.     @move_y = data[3][1]
  2415.     @time = data[4]
  2416.     @time = -1 if @time == 0
  2417.     @real_opacity = (data[5][0] + 1) * 100
  2418.     @move_opacity = data[5][1]
  2419.     @start_opacity = data[5][0]
  2420.     @shake_ok = data[7]
  2421.   end
  2422.   #--------------------------------------------------------------------------
  2423.   # ● 更新帧数
  2424.   #--------------------------------------------------------------------------
  2425.   def update
  2426.     update_picture if @time != 0
  2427.     self.ox = $sv_camera.x - @real_x
  2428.     self.oy = $sv_camera.y - @real_y
  2429.     if @shake_ok
  2430.       self.ox -= $sv_camera.sx / 100
  2431.       self.oy -= $sv_camera.sy / 100
  2432.     end
  2433.     self.ox *= $sv_camera.zoom
  2434.     self.oy *= $sv_camera.zoom
  2435.     self.zoom_x = @zoom_x * $sv_camera.zoom
  2436.     self.zoom_y = @zoom_y * $sv_camera.zoom
  2437.     self.opacity = @real_opacity / 100
  2438.     @move_opacity *= -1 if self.opacity == 255 or self.opacity <= @start_opacity
  2439.     @switche
  2440.     @action_end = true if @switche > 0 && !$game_switches[@switche]
  2441.     @action_end = true if @switche < 0 && !$sv_camera.switches[@switche.abs]
  2442.   end
  2443.   #--------------------------------------------------------------------------
  2444.   # ● 更新图片
  2445.   #--------------------------------------------------------------------------
  2446.   def update_picture
  2447.     @real_x += @move_x / 100
  2448.     @real_y += @move_y / 100
  2449.     @real_x = 0 if @real_x >= self.bitmap.width or @real_x <= -self.bitmap.width
  2450.     @real_y = 0 if @real_y >= self.bitmap.height or @real_y <= -self.bitmap.height
  2451.     @zoom_x = 1
  2452.     @zoom_y = 1
  2453.     @real_opacity += @move_opacity
  2454.     @time -= 1
  2455.     @time = -1 if @time < -100
  2456.   end
  2457. end
  2458.  
  2459. #==============================================================================
  2460. # ■ Sprite_Back_Picture
  2461. #------------------------------------------------------------------------------
  2462. #  这是一个精灵的伤害显示。
  2463. #==============================================================================
  2464. class Sprite_Damage < Sprite
  2465.   #--------------------------------------------------------------------------
  2466.   # ● 公开实例变量 
  2467.   #--------------------------------------------------------------------------
  2468.   attr_reader   :action_end                  # POP结束标记
  2469.   #--------------------------------------------------------------------------
  2470.   # ● 初始化物件
  2471.   #--------------------------------------------------------------------------
  2472.   def initialize(viewport = nil, battler)
  2473.     super(viewport)
  2474.     @battler = battler
  2475.     @time = 0
  2476.     return @action_end = true if !@battler
  2477.     @direction = -1
  2478.     @direction *= -1 if @battler.actor?
  2479.     @direction *= -1 if $sv_camera.mirror
  2480.     set_state
  2481.     set_damage
  2482.     update
  2483.   end
  2484.   #--------------------------------------------------------------------------
  2485.   # ● 显示状态
  2486.   #--------------------------------------------------------------------------
  2487.   def set_state
  2488.     return if !N03::STATE_POP
  2489.     states = @battler.result.added_state_objects
  2490.     states.delete($data_states[@battler.death_state_id]) if @battler.result.hp_damage != 0
  2491.     return if states == []
  2492.     return if @battler.sv.add_state == @battler.result.added_state_objects
  2493.     @battler.sv.add_state = states.dup
  2494.     @st = []
  2495.     @st_base = []
  2496.     for i in 0...states.size
  2497.       @st[i] = Sprite.new
  2498.       bitmap_state(@st[i], states[i])
  2499.       @st_base[i] = []
  2500.       @st_base[i][0] = @direction * (-20 + 5 * i) + @battler.sv.x / 100
  2501.       @st_base[i][1] = -40 - @state_height * i + (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.oy_adjust)/ 100
  2502.       @st[i].z = 1000 + i
  2503.       @st[i].opacity = 0
  2504.     end
  2505.     @time = @pop_time = 80
  2506.   end   
  2507.   #--------------------------------------------------------------------------
  2508.   # ● 状态图像
  2509.   #--------------------------------------------------------------------------
  2510.   def bitmap_state(state, state_object)
  2511.     name = state_object.name
  2512.     state.bitmap = Cache.system("Iconset").dup
  2513.     state.src_rect.set(state_object.icon_index % 16 * 24, state_object.icon_index / 16 * 24, 24, 24)
  2514.     @state_height = 24
  2515.   end
  2516.   #--------------------------------------------------------------------------
  2517.   # ● 显示打击伤害
  2518.   #--------------------------------------------------------------------------
  2519.   def hit_count
  2520.     for i in [email]0...@battler.sv.hit.size[/email]
  2521.       if @battler.sv.hit[i] == nil
  2522.         @hit = i
  2523.         return @battler.sv.hit[i] = @hit
  2524.       end
  2525.     end
  2526.     @hit = @battler.sv.hit.size
  2527.     @battler.sv.hit.push(@hit)
  2528.   end  
  2529.   #--------------------------------------------------------------------------
  2530.   # ● 显示伤害
  2531.   #--------------------------------------------------------------------------
  2532.   def set_damage
  2533.     return @action_end = true if !N03::DAMAGE_POP
  2534.     damage = @battler.result.hp_damage if @battler.result.hp_damage != 0
  2535.     damage = @battler.result.hp_drain  if @battler.result.hp_drain  != 0
  2536.     damage = @battler.result.mp_damage if @battler.result.mp_damage != 0
  2537.     damage = @battler.result.mp_drain  if @battler.result.mp_drain  != 0
  2538.     damage = @battler.result.tp_damage if @battler.result.tp_damage != 0
  2539.     if !damage or damage == 0
  2540.       @action_end = true if @st == nil
  2541.       return # 状态POP考虑设置@action_end不返回
  2542.     end
  2543.     hit_count
  2544.     # @hit = @battler.sv.hit
  2545.     # @battler.sv.hit += 1 if damage != 0
  2546.     file = N03::DAMAGE_PLUS if damage > 0
  2547.     file = N03::DAMAGE_MINUS if damage < 0
  2548.     add_file = N03::DAMAGE_MP if @battler.result.mp_damage != 0
  2549.     add_file = N03::DAMAGE_TP if @battler.result.tp_damage != 0
  2550.     adjust_x = N03::DAMAGE_ADJUST
  2551.     @num = []
  2552.     @num_base = []
  2553.     damage = damage.abs
  2554.     max_num = damage.to_s.size
  2555.     max_num += 1 if add_file != nil
  2556.     for i in 0...max_num
  2557.       @num[i] = Sprite.new
  2558.       if add_file != nil && i == max_num - 1
  2559.         @num[i].bitmap = Cache.system(add_file)
  2560.         cw = (damage % (10 * 10 ** i))/(10 ** i)
  2561.         sw = 0 if sw == nil
  2562.       else
  2563.         @num[i].bitmap = Cache.system(file)
  2564.         cw = (damage % (10 * 10 ** i))/(10 ** i)
  2565.         sw = @num[i].bitmap.width / 10
  2566.         @num[i].src_rect.set(cw * sw, 0, sw, @num[i].bitmap.height)
  2567.       end
  2568.       @num_base[i] = []
  2569.       @num_base[i][0] = (sw + adjust_x) * i * -1 + (@battler.sv.x / 100)
  2570.       @num_base[i][1] =  -(@num[i].bitmap.height / 3) - i * 2 - @hit * 2 + (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.oy_adjust)/ 100
  2571.       @num_base[i][0] -= @num[i].bitmap.width / 2 - adjust_x if add_file != nil && i == max_num - 1
  2572.       @num[i].z = 1000 + i + @hit * 10
  2573.     end
  2574.     @time = @pop_time = 80
  2575.   end
  2576.   #--------------------------------------------------------------------------
  2577.   # ● 更新帧数
  2578.   #--------------------------------------------------------------------------
  2579.   def update
  2580.     return if @time == 0
  2581.     for i in [email]0...@st.size[/email] do update_state_move(@st[i], i) end if @st != nil
  2582.     for i in [email]0...@num.size[/email] do update_num_move(@num[i], i) end if @num != nil
  2583.     @time -= 1
  2584.     @action_end = true if @time == 0
  2585.   end
  2586.   #--------------------------------------------------------------------------
  2587.   # ● 更新状态图像
  2588.   #--------------------------------------------------------------------------
  2589.   def update_state_move(state, index)
  2590.     min = @pop_time - index * 2
  2591.     case @time
  2592.     when min-15..min
  2593.       @st_base[index][0] += @direction
  2594.       state.opacity += 25
  2595.     when min-80..min-50
  2596.       @st_base[index][0] += @direction
  2597.       state.opacity -= 25
  2598.     end
  2599.     state.x = (@st_base[index][0] - $sv_camera.x) * $sv_camera.zoom
  2600.     state.y = (@st_base[index][1] - $sv_camera.y) * $sv_camera.zoom
  2601.   end
  2602.   #--------------------------------------------------------------------------
  2603.   # ● 更新数值
  2604.   #--------------------------------------------------------------------------
  2605.   def update_num_move(num, index)
  2606.     min = @pop_time - index * 2
  2607.     case @time
  2608.     when min-1..min
  2609.       @num_base[index][0] += @direction * @hit
  2610.       @num_base[index][1] -= 5 + @hit * 2
  2611.     when min-3..min-2
  2612.       @num_base[index][0] += @direction * @hit
  2613.       @num_base[index][1] -= 4 + @hit * 2
  2614.     when min-6..min-4
  2615.       @num_base[index][0] += @direction
  2616.       @num_base[index][1] -= 3 + @hit * 2
  2617.     when min-14..min-7
  2618.       @num_base[index][0] += @direction
  2619.       @num_base[index][1] += 2
  2620.     when min-17..min-15
  2621.       @num_base[index][1] -= 2 + @hit * 2
  2622.     when min-23..min-18
  2623.       @num_base[index][1] += 1
  2624.     when min-27..min-24
  2625.       @num_base[index][1] -= 1
  2626.     when min-30..min-28
  2627.       @num_base[index][1] += 1
  2628.     when min-33..min-31
  2629.       @num_base[index][1] -= 1
  2630.     when min-36..min-34
  2631.       @num_base[index][1] += 1
  2632.     end
  2633.     num.x = (@num_base[index][0] - $sv_camera.x) * $sv_camera.zoom
  2634.     num.y = (@num_base[index][1] - $sv_camera.y) * $sv_camera.zoom
  2635.     num.opacity = 256 - (12 - @time) * 32
  2636.     num.visible = false if @time == 0
  2637.   end
  2638.   #--------------------------------------------------------------------------
  2639.   # ● 释放
  2640.   #--------------------------------------------------------------------------
  2641.   def dispose
  2642.     @battler.sv.hit[@hit] = nil if @hit
  2643.     bitmap.dispose if bitmap
  2644.     for i in [email]0...@num.size[/email] do @num[i].dispose end if @num != nil
  2645.     for i in [email]0...@st.size[/email] do @st[i].dispose end if @st != nil
  2646.     super
  2647.   end
  2648. end
  2649.  
  2650. #==============================================================================
  2651. # ■ Window_Skill_name
  2652. #------------------------------------------------------------------------------
  2653. #  这是一个显示技能名字的窗口。
  2654. #==============================================================================
  2655. class Window_Skill_name < Window_Base
  2656.   #--------------------------------------------------------------------------
  2657.   # ● 初始化物件
  2658.   #--------------------------------------------------------------------------
  2659.   def initialize(text)
  2660.     super(0, 0, Graphics.width, line_height + standard_padding * 2)
  2661.     draw_text(4, 0, Graphics.width - 64, line_height,text, 1)
  2662.   end
  2663. end
  2664.  
  2665. #==============================================================================
  2666. # ■ Spriteset_Sideview
  2667. #------------------------------------------------------------------------------
  2668. #  处理战斗画面的精灵的类。本类在横版战斗类的內定使用。
  2669. #==============================================================================
  2670. class Spriteset_Sideview
  2671.   #--------------------------------------------------------------------------
  2672.   # ● 初始化物件
  2673.   #--------------------------------------------------------------------------
  2674.   def initialize(viewport)
  2675.     @viewport = viewport
  2676.     @weapons = []
  2677.     @pictures = []
  2678.     @back_pic = []
  2679.     @damage = []
  2680.     $sv_camera.setup
  2681.     N03.camera(nil, N03::BATTLE_CAMERA["顺序开始前"].dup)
  2682.   end
  2683.   #--------------------------------------------------------------------------
  2684.   # ● 更新帧数
  2685.   #--------------------------------------------------------------------------
  2686.   def update
  2687.     update_battler_data
  2688.     update_damage
  2689.     update_pictures
  2690.     update_back_pic
  2691.     update_weapons
  2692.   end  
  2693.   #--------------------------------------------------------------------------
  2694.   # ● 更新角色数据
  2695.   #--------------------------------------------------------------------------
  2696.   def update_battler_data
  2697.     for battler in $game_party.battle_members + $game_troop.members
  2698.       weapon_end(battler) if battler.sv.weapon_end
  2699.       next if battler.sv.effect_data == []
  2700.       for effect_data in battler.sv.effect_data do set_effects(battler, effect_data) end
  2701.     end
  2702.   end
  2703.   #--------------------------------------------------------------------------
  2704.   # ● 更新伤害图像
  2705.   #--------------------------------------------------------------------------
  2706.   def update_damage
  2707.     for i in [email]0...@damage.size[/email]
  2708.       next if @damage[i] == nil
  2709.       @damage[i].update if @damage[i] != nil
  2710.       next if !@damage[i].action_end
  2711.       @damage[i].dispose
  2712.       @damage[i] = nil
  2713.     end
  2714.   end
  2715.   #--------------------------------------------------------------------------
  2716.   # ● 更新图片动作
  2717.   #--------------------------------------------------------------------------
  2718.   def update_pictures
  2719.     for i in [email]0...@pictures.size[/email]
  2720.       next if @pictures[i] == nil
  2721.       @pictures[i].update if @pictures[i] != nil
  2722.       next if !@pictures[i].action_end
  2723.       @pictures[i].dispose
  2724.       @pictures[i] = nil
  2725.     end
  2726.   end
  2727.   #--------------------------------------------------------------------------
  2728.   # ● 更新期间图片
  2729.   #--------------------------------------------------------------------------
  2730.   def update_back_pic
  2731.     set_back_pic if $sv_camera.program_picture != []
  2732.     for i in [email]0...@back_pic.size[/email]
  2733.       next if @back_pic[i] == nil
  2734.       @back_pic[i].update if @back_pic[i] != nil
  2735.       next if !@back_pic[i].action_end
  2736.       @back_pic[i].dispose
  2737.       @back_pic[i] = nil
  2738.     end
  2739.   end
  2740.   #--------------------------------------------------------------------------
  2741.   # ● 更新武器动作
  2742.   #--------------------------------------------------------------------------
  2743.   def update_weapons
  2744.     for i in [email]0...@weapons.size[/email]
  2745.       next if @weapons[i] == nil
  2746.       @weapons[i].update if @weapons[i] != nil
  2747.       next if !@weapons[i].action_end
  2748.       @weapons[i].dispose
  2749.       @weapons[i] = nil
  2750.     end
  2751.   end
  2752.   #--------------------------------------------------------------------------
  2753.   # ● 实行伤害
  2754.   #--------------------------------------------------------------------------
  2755.   def set_damage_pop(target)
  2756.     for i in [email]0...@damage.size[/email]
  2757.       next if @damage[i] != nil
  2758.       return @damage[i] = Sprite_Damage.new(@viewport, target)
  2759.     end
  2760.     @damage.push(Sprite_Damage.new(@viewport, target))
  2761.   end
  2762.   #--------------------------------------------------------------------------
  2763.   # ● 实行期间图片
  2764.   #--------------------------------------------------------------------------
  2765.   def set_back_pic
  2766.     for data in $sv_camera.program_picture
  2767.       if @back_pic[data[2]] != nil
  2768.         @back_pic[data[2]].dispose
  2769.         @back_pic[data[2]] = nil
  2770.       end
  2771.       @back_pic[data[2]] = Sprite_Back_Picture.new(@viewport, data[2])
  2772.       @back_pic[data[2]].setup(data)
  2773.     end
  2774.     $sv_camera.program_picture = []
  2775.   end
  2776.   #--------------------------------------------------------------------------
  2777.   # ● 开始效果
  2778.   #--------------------------------------------------------------------------
  2779.   def set_effects(battler, effect_data)
  2780.     case effect_data[0]
  2781.     when "pic" ; set_pictures(battler, effect_data)
  2782.     when  "wp" ; set_weapons(battler,  true)
  2783.     when "m_a" ; set_weapons(battler, false)
  2784.     end
  2785.   end
  2786.   #--------------------------------------------------------------------------
  2787.   # ● 实行图片动作
  2788.   #--------------------------------------------------------------------------
  2789.   def set_pictures(battler, effect_data)
  2790.     @pictures[effect_data[1]] = Sprite_Battle_Picture.new if @pictures[effect_data[1]] == nil
  2791.     @pictures[effect_data[1]].set(battler)
  2792.   end
  2793.   #--------------------------------------------------------------------------
  2794.   # ● 实行武器动作
  2795.   #--------------------------------------------------------------------------
  2796.   def set_weapons(battler, weapon_flag, test = true)
  2797.     for i in [email]0...@weapons.size[/email]
  2798.       next if @weapons[i] != nil
  2799.       @weapons[i] = Sprite_Weapon.new(@viewport, i, battler)
  2800.       battler.sv.weapon_index.push(i) if weapon_flag
  2801.       return i
  2802.     end
  2803.     @weapons.push(Sprite_Weapon.new(@viewport, @weapons.size, battler))
  2804.     battler.sv.weapon_index.push(@weapons.size - 1) if weapon_flag
  2805.     return @weapons.size - 1
  2806.   end
  2807.   #--------------------------------------------------------------------------
  2808.   # ● 角色的武器动作结束
  2809.   #--------------------------------------------------------------------------
  2810.   def weapon_end(battler)
  2811.     battler.sv.weapon_end = false
  2812.     for index in battler.sv.weapon_index
  2813.       weapon_index = battler.sv.weapon_index.shift
  2814.       @weapons[weapon_index].dispose if @weapons[weapon_index] != nil
  2815.       @weapons[weapon_index] = nil
  2816.     end
  2817.     battler.sv.weapon_index.compact!
  2818.   end  
  2819.   #--------------------------------------------------------------------------
  2820.   # ● 实行打击時的战斗动画
  2821.   #--------------------------------------------------------------------------
  2822.   def set_hit_animation(battler, weapon_index, hit_targets, miss)
  2823.     weapon = @weapons[weapon_index]
  2824.     for target in hit_targets
  2825.       next @weapons[@hit_index].timing_battler_set(target) if @hit_index != nil
  2826.       @hit_index = set_weapons(battler, false, false)
  2827.       @weapons[@hit_index].set_hit_animation(weapon.hit_position, weapon.hit_anime_id, target)
  2828.     end
  2829.     @hit_index = nil
  2830.     if !weapon.through && !miss
  2831.       @weapons[weapon_index].dispose
  2832.       @weapons[weapon_index] = nil
  2833.     else
  2834.       @weapons[weapon_index].through_change
  2835.     end
  2836.   end
  2837.   #--------------------------------------------------------------------------
  2838.   # ● 初始化侧视图数据
  2839.   #--------------------------------------------------------------------------
  2840.   def reset_sideview
  2841.     $sv_camera.reset
  2842.     for member in $game_troop.members + $game_party.battle_members do member.sv.reset end
  2843.   end  
  2844.   #--------------------------------------------------------------------------
  2845.   # ● 释放
  2846.   #--------------------------------------------------------------------------
  2847.   def dispose
  2848.     dispose_effects(@weapons)
  2849.     dispose_effects(@pictures)
  2850.     dispose_effects(@back_pic)
  2851.     dispose_effects(@damage)
  2852.     reset_sideview
  2853.   end
  2854.   #--------------------------------------------------------------------------
  2855.   # ● 释放图像效果
  2856.   #--------------------------------------------------------------------------
  2857.   def dispose_effects(effects)
  2858.     for i in 0...effects.size
  2859.       effects[i].dispose if effects[i] != nil
  2860.       effects[i] = nil
  2861.     end
  2862.   end
  2863. end
  2864.  
  2865.  
  2866. #==============================================================================
  2867. # ■ Sprite_Battle_Back
  2868. #------------------------------------------------------------------------------
  2869. #  战斗背景用的精灵。
  2870. #==============================================================================
  2871. class Sprite_Battle_Back < Plane
  2872.   #--------------------------------------------------------------------------
  2873.   # ● 初始化物件
  2874.   #--------------------------------------------------------------------------
  2875.   def initialize(viewport = nil, index, battleback_name)
  2876.     super(viewport)
  2877.     @index = index
  2878.     if @index == 1
  2879.       data = N03::FLOOR1_DATA[battleback_name]
  2880.       data = N03::FLOOR1_DATA["全Battlebacks1"] if data == nil
  2881.     elsif @index == 2
  2882.       data = N03::FLOOR2_DATA[battleback_name]
  2883.       data = N03::FLOOR2_DATA["全Battlebacks2"] if data == nil
  2884.     end   
  2885.     data = data.dup
  2886.     @adjust_position = data[0]
  2887.     @zoom_x = data[1][0] / 100.0
  2888.     @zoom_y = data[1][1] / 100.0
  2889.     @shake_on = data[2]
  2890.     $game_switches[data[3]] = true if data[3] > 0
  2891.     $sv_camera.switches[data[3].abs] = true if data[3] < 0
  2892.     reset_scroll
  2893.     reset_back_data(battleback_name)
  2894.   end
  2895.   #--------------------------------------------------------------------------
  2896.   # ● 初始化背景滚动
  2897.   #--------------------------------------------------------------------------
  2898.   def reset_scroll
  2899.     @scroll_x = 0
  2900.     @scroll_y = 0
  2901.     @move_x = 0
  2902.     @move_y = 0
  2903.   end
  2904.   #--------------------------------------------------------------------------
  2905.   # ● 初始化背景数据
  2906.   #--------------------------------------------------------------------------
  2907.   def reset_back_data(battleback_name)
  2908.     @back_data = []
  2909.     @active_data = ["scroll",0, @move_x, @move_y, false, battleback_name,""]
  2910.     start_back_data(@active_data)
  2911.   end  
  2912.   #--------------------------------------------------------------------------
  2913.   # ● 背景图像的设置
  2914.   #--------------------------------------------------------------------------
  2915.   def set_graphics(new_bitmap)
  2916.     self.bitmap = new_bitmap
  2917.     @base_x = (self.bitmap.width * @zoom_x - Graphics.width) / 2 + @adjust_position[0]
  2918.     @base_y = (self.bitmap.height * @zoom_y - Graphics.height) / 2 + @adjust_position[1]
  2919.     # 限制坐标取得
  2920.     max_top =  0
  2921.     max_bottom = self.bitmap.height * @zoom_y - Graphics.height
  2922.     max_left = 0
  2923.     max_right = self.bitmap.width * @zoom_x - Graphics.width
  2924.     exist = true
  2925.     exist = false if self.bitmap.height == 32 && self.bitmap.width == 32
  2926.     $sv_camera.setting(@index, [max_top, max_bottom, max_left, max_right, @base_x, @base_y,exist])
  2927.   end
  2928.   #--------------------------------------------------------------------------
  2929.   # ● 更新帧数
  2930.   #--------------------------------------------------------------------------
  2931.   def update
  2932.     return if !bitmap
  2933.     update_back_data
  2934.     update_scroll unless @move_x == 0 && @move_y == 0
  2935.     update_color
  2936.     update_position
  2937.     update_back_adjust if @bt_back != nil
  2938.     create_back_adjust if @bt_back == nil && !@active_data[10] && @scroll_x == 0 && @scroll_y == 0
  2939.   end
  2940.   #--------------------------------------------------------------------------
  2941.   # ● 更新背景数据
  2942.   #--------------------------------------------------------------------------
  2943.   def update_back_data
  2944.     delete = true if @active_data[1] > 0 && !$game_switches[@active_data[1]]
  2945.     delete = true if @active_data[1] < 0 && !$sv_camera.switches[@active_data[1].abs]
  2946.     return if !delete
  2947.     for i in [email]0...@back_data.size[/email]
  2948.       @back_data[i] = nil if @back_data[i][1] > 0 && !$game_switches[@back_data[i][1]]
  2949.       @back_data[i] = nil if @back_data[i][1] < 0 && !$sv_camera.switches[@back_data[i][1].abs]
  2950.     end
  2951.     @back_data.compact!
  2952.     next_back_data
  2953.   end
  2954.   #--------------------------------------------------------------------------
  2955.   # ● 下一个背景资料设置
  2956.   #--------------------------------------------------------------------------
  2957.   def next_back_data
  2958.     @back_data.delete(@active_data[11]) if @active_data[11] != nil
  2959.     @back_data.push(@active_data[11]) if @active_data[11] != nil
  2960.     @active_data = nil
  2961.     data = @back_data.pop
  2962.     @back_data = [@active_data] if @back_data.size == 0
  2963.     start_back_data(data)
  2964.   end  
  2965.   #--------------------------------------------------------------------------
  2966.   # ● 实行背景数据
  2967.   #--------------------------------------------------------------------------
  2968.   def start_back_data(data)
  2969.     return if back_data_remain(data)
  2970.     bt_back_dispose
  2971.     pre_active_data = @active_data
  2972.     @active_data[8] = [@back_name, @move_x, @move_y, @scroll_x, @scroll_y] if @active_data != nil
  2973.     @back_data.push(@active_data)     if @active_data != nil
  2974.     @active_data = data.dup
  2975.     @active_data[5] = @back_name      if @active_data[5] == ""
  2976.     @active_data[9] = set_back_adjust if @active_data[9] == nil
  2977.     back_data_scroll_on               if @active_data[8] == nil && @active_data[9][0] == false
  2978.     set_remain_back_data              if @active_data[8] != nil
  2979.     create_back(@active_data[5])      if @active_data[9][0] == false
  2980.     create_back_adjust                if @active_data[10]
  2981.     @active_data[11] = pre_active_data if pre_active_data && @active_data[7] == false
  2982.   end  
  2983.   #--------------------------------------------------------------------------
  2984.   # ● 背景数据的保持
  2985.   #--------------------------------------------------------------------------
  2986.   def back_data_remain(data)
  2987.     remain = false
  2988.     remain = true if data[6] != "" && @active_data != nil && @active_data[9] != nil && @active_data[9][0] != false
  2989.     remain = true if @active_data != nil && @active_data[7] == false
  2990.     return remain if !remain
  2991.     @remain = true
  2992.     @back_data.push(data)
  2993.     return remain
  2994.   end  
  2995.   #--------------------------------------------------------------------------
  2996.   # ● 背景变更修正数据
  2997.   #--------------------------------------------------------------------------
  2998.   def set_back_adjust
  2999.     bt_adjust = []
  3000.     sign = -1
  3001.     if @active_data[6] == ""
  3002.       reset_scroll if @active_data[3][0] == 0 &&  @active_data[3][1] == 0
  3003.       bt_adjust = [false,false,0,0]
  3004.       return bt_adjust
  3005.     elsif @move_x != 0 or @active_data[3][0] != 0
  3006.       sign = 1 if @move_x < 0
  3007.       bt_adjust[0] = [self.bitmap.width * @zoom_x * sign, 0]
  3008.       bt_adjust[1] = [self.bitmap.width * @zoom_x * sign * 2, 0]
  3009.     elsif @move_y != 0 or @active_data[3][1] != 0
  3010.       sign = 1 if @move_y < 0
  3011.       bt_adjust[0] = [0, self.bitmap.height * @zoom_y * sign]
  3012.       bt_adjust[1] = [0, self.bitmap.height * @zoom_y * sign * 2]
  3013.     else
  3014.       reset_scroll if @active_data[3][0] == 0 &&  @active_data[3][1] == 0
  3015.       bt_adjust = [false,false,0,0]
  3016.       return bt_adjust
  3017.     end
  3018.     bt_adjust[2] = [bt_adjust[0][0], bt_adjust[0][1]]
  3019.     return bt_adjust
  3020.   end
  3021.   #--------------------------------------------------------------------------
  3022.   # ● 实行背景滚动数据
  3023.   #--------------------------------------------------------------------------
  3024.   def back_data_scroll_on
  3025.     mirror = $sv_camera.mirror
  3026.     mirror = false if !@active_data[4]
  3027.     @move_x = @active_data[3][0]
  3028.     @move_x *= -1 if mirror
  3029.     @move_y = @active_data[3][1]
  3030.   end
  3031.   #--------------------------------------------------------------------------
  3032.   # ● 实行保持背景数据
  3033.   #--------------------------------------------------------------------------
  3034.   def set_remain_back_data
  3035.     return back_data_scroll_on if @move_x != 0 or @move_y != 0
  3036.     create_back(@active_data[8][0])
  3037.     @move_x    = @active_data[8][1]
  3038.     @move_y    = @active_data[8][2]
  3039.     @scroll_x  = @active_data[8][3]
  3040.     @scroll_y  = @active_data[8][4]
  3041.   end  
  3042.   #--------------------------------------------------------------------------
  3043.   # ● 创建背景图像
  3044.   #--------------------------------------------------------------------------
  3045.   def create_back(back_name)
  3046.     return if back_name == @back_name or back_name == ""
  3047.     self.bitmap = Cache.battleback1(back_name) if @index == 1
  3048.     self.bitmap = Cache.battleback2(back_name) if @index == 2
  3049.     @back_name = back_name
  3050.   end  
  3051.   #--------------------------------------------------------------------------
  3052.   # ● 创建背景变更修正图像
  3053.   #--------------------------------------------------------------------------
  3054.   def create_back_adjust
  3055.     return if @active_data[9][0] == false
  3056.     @active_data[10] = true
  3057.     mirror = $sv_camera.mirror
  3058.     mirror = false if !@active_data[4]
  3059.     @bt_back = []
  3060.     @bt_back[0] = Sprite.new(viewport)
  3061.     @bt_back[0].bitmap = Cache.battleback1(@active_data[6]) if @index == 1
  3062.     @bt_back[0].bitmap = Cache.battleback2(@active_data[6]) if @index == 2
  3063.     @bt_back[0].mirror = mirror
  3064.     @bt_back[1] = Sprite.new(viewport)
  3065.     @bt_back[1].bitmap = Cache.battleback1(@active_data[5]) if @index == 1
  3066.     @bt_back[1].bitmap = Cache.battleback2(@active_data[5]) if @index == 2
  3067.     @bt_back[1].mirror = mirror
  3068.   end
  3069.   #--------------------------------------------------------------------------
  3070.   # ● 更新背景滚动
  3071.   #--------------------------------------------------------------------------
  3072.   def update_scroll
  3073.     @scroll_x += @move_x
  3074.     @scroll_y += @move_y
  3075.     @scroll_x = 0 if @scroll_x / 100 >= self.bitmap.width * @zoom_x or @scroll_x / 100 <= -self.bitmap.width * @zoom_x
  3076.     @scroll_y = 0 if @scroll_y / 100 >= self.bitmap.height * @zoom_y or @scroll_y / 100 <= -self.bitmap.height * @zoom_y
  3077.   end
  3078.   #--------------------------------------------------------------------------
  3079.   # ● 更新色调变更
  3080.   #--------------------------------------------------------------------------
  3081.   def update_color
  3082.     color_set if $sv_camera.color_set[@index] != nil
  3083.     return if @color_data == nil
  3084.     @color_data[4] -= 1
  3085.     if @color_data[4] == 0 && @color_data[5] != 0
  3086.       @color_data[4] = @color_data[5]
  3087.       @color_data[5] = 0
  3088.       @color_data[6] = [0,0,0,0]
  3089.     elsif @color_data[4] == 0
  3090.       @remain_color_data = @color_data
  3091.       return @color_data = nil
  3092.     end  
  3093.     for i in 0..3
  3094.       @color_data[i] = (@color_data[i] * (@color_data[4] - 1) + @color_data[6][i]) / @color_data[4]
  3095.     end  
  3096.     self.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3])
  3097.   end
  3098.   #--------------------------------------------------------------------------
  3099.   # ● 更新坐标
  3100.   #--------------------------------------------------------------------------
  3101.   def update_position
  3102.     self.ox = $sv_camera.x + @base_x - @scroll_x / 100
  3103.     self.oy = $sv_camera.y + @base_y - @scroll_y / 100
  3104.     self.ox -= $sv_camera.sx / 100 if @shake_on
  3105.     self.oy -= $sv_camera.sy / 100 if @shake_on
  3106.     self.zoom_x = @zoom_x * $sv_camera.zoom
  3107.     self.zoom_y = @zoom_y * $sv_camera.zoom
  3108.     self.ox *= $sv_camera.zoom
  3109.     self.oy *= $sv_camera.zoom
  3110.     self.z = @index * 10
  3111.   end
  3112.   #--------------------------------------------------------------------------
  3113.   # ● 更新背景变更修正图像
  3114.   #--------------------------------------------------------------------------
  3115.   def update_back_adjust
  3116.     @active_data[9][0][0] = 0 if @scroll_x == 0
  3117.     @active_data[9][0][1] = 0 if @scroll_y == 0
  3118.     @active_data[9][1][0] -= @active_data[9][2][0] if @scroll_x == 0
  3119.     @active_data[9][1][1] -= @active_data[9][2][1] if @scroll_y == 0
  3120.     for i in [email]0...@bt_back.size[/email]
  3121.       @bt_back[i].x = -self.ox + @active_data[9][i][0] * $sv_camera.zoom
  3122.       @bt_back[i].y = -self.oy + @active_data[9][i][1] * $sv_camera.zoom
  3123.       @bt_back[i].zoom_x = self.zoom_x
  3124.       @bt_back[i].zoom_y = self.zoom_y
  3125.       @bt_back[i].z = self.z + 1
  3126.       @bt_back[i].color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  3127.     end
  3128.     back_data_scroll_on if @active_data[9][0][0] == 0 && @active_data[9][0][1] == 0
  3129.     return unless @active_data[9][1][0] == 0 && @active_data[9][1][1] == 0
  3130.     bt_back_dispose
  3131.     create_back(@active_data[5])
  3132.     @active_data[9][0] = false
  3133.     next_back_data if @remain && @back_data.size != 1
  3134.     @remain = false
  3135.   end
  3136.   #--------------------------------------------------------------------------
  3137.   # ● 色调变更
  3138.   #--------------------------------------------------------------------------
  3139.   def color_set
  3140.     set = $sv_camera.color_set[@index]
  3141.     $sv_camera.color_set[@index] = nil
  3142.     set[4] = 1 if set[4] == 0
  3143.     @remain_color_data = [0,0,0,0] if @remain_color_data == nil
  3144.     @color_data = @remain_color_data
  3145.     @color_data[4] = set[4]
  3146.     @color_data[5] = set[5]
  3147.     @color_data[6] = set
  3148.   end
  3149.   #--------------------------------------------------------------------------
  3150.   # ● 背景变更修正的释放
  3151.   #--------------------------------------------------------------------------
  3152.   def bt_back_dispose
  3153.     for i in [email]0...@bt_back.size[/email] do @bt_back[i].dispose end if @bt_back != nil
  3154.     @bt_back = nil
  3155.   end  
  3156.   #--------------------------------------------------------------------------
  3157.   # ● 释放
  3158.   #--------------------------------------------------------------------------
  3159.   def dispose
  3160.     bitmap.dispose if bitmap
  3161.     bt_back_dispose
  3162.     super
  3163.   end
  3164. end  
  3165.  
  3166. #==============================================================================
  3167. # ■ Battle_Camera
  3168. #------------------------------------------------------------------------------
  3169. #  这是一个类来处理相机和战斗的计划。
  3170. #==============================================================================
  3171. class Battle_Camera
  3172.   #--------------------------------------------------------------------------
  3173.   # ● 公开实例的变量
  3174.   #--------------------------------------------------------------------------
  3175.   attr_reader   :sx                 # 摇动X坐标
  3176.   attr_reader   :sy                 # 摇动Y坐标
  3177.   attr_reader   :max_top            # 上限界坐标
  3178.   attr_reader   :max_bottom         # 下限界坐标
  3179.   attr_reader   :max_left           # 左限界坐标
  3180.   attr_reader   :max_right          # 右限界坐标
  3181.   attr_accessor :switches           # 侧视图专用开关
  3182.   attr_accessor :color_set          # 色调变更数据
  3183.   attr_accessor :wait               # 战斗场景的强制体能
  3184.   attr_accessor :win_wait           # 战斗胜利前的体能
  3185.   attr_accessor :mirror             # 画面反转标记
  3186.   attr_accessor :program_scroll     # 战斗程序 背景的自动滚动
  3187.   attr_accessor :program_picture    # 战斗程序 期间图片
  3188.   attr_accessor :event              # 公共事件呼叫
  3189.   #--------------------------------------------------------------------------
  3190.   # ● 初始化物件
  3191.   #--------------------------------------------------------------------------
  3192.   def initialize
  3193.     @switches = []
  3194.     @max_data = []
  3195.     @color_set = []
  3196.     @wait = 0
  3197.     @win_wait = false
  3198.     @mirror = false
  3199.     @event = false
  3200.     setup
  3201.   end
  3202.   #--------------------------------------------------------------------------
  3203.   # ● 相机X坐标
  3204.   #--------------------------------------------------------------------------
  3205.   def x
  3206.     return @x / 100
  3207.   end
  3208.   #--------------------------------------------------------------------------
  3209.   # ● 相机Y坐标
  3210.   #--------------------------------------------------------------------------
  3211.   def y
  3212.     return @y / 100
  3213.   end
  3214.   #--------------------------------------------------------------------------
  3215.   # ● 变焦率
  3216.   #--------------------------------------------------------------------------
  3217.   def zoom
  3218.     return @zoom * 0.001
  3219.   end
  3220.   #--------------------------------------------------------------------------
  3221.   # ● 变焦虑的坐标变换
  3222.   #--------------------------------------------------------------------------
  3223.   def convert
  3224.     return @zoom
  3225.   end
  3226.   #--------------------------------------------------------------------------
  3227.   # ● 相机设置
  3228.   #--------------------------------------------------------------------------
  3229.   def setup
  3230.     @x = 0
  3231.     @y = 0
  3232.     @sx = 0
  3233.     @sy = 0
  3234.     @zoom = 1000
  3235.     @time = 0
  3236.     @shake_time = 0
  3237.     program_setup
  3238.   end
  3239.   #--------------------------------------------------------------------------
  3240.   # ● 初始化相机
  3241.   #--------------------------------------------------------------------------
  3242.   def reset
  3243.     @switches = []
  3244.     @max_data = []
  3245.     @color_set = []
  3246.     @wait = 0
  3247.     @win_wait = false
  3248.     @mirror = false
  3249.     program_setup(false)
  3250.   end  
  3251.   #--------------------------------------------------------------------------
  3252.   # ● 战斗安装程序
  3253.   #--------------------------------------------------------------------------
  3254.   def program_setup(check = true)
  3255.     @played_program  = []
  3256.     @program_switch  = []
  3257.     @program_sound   = []
  3258.     @program_scroll  = []
  3259.     @program_se      = []
  3260.     @program_shake   = []
  3261.     @program_color   = []
  3262.     @program_picture = []
  3263.     @program_base = N03::BATTLE_PROGRAM.values.dup
  3264.     program_check if check
  3265.   end  
  3266.   #--------------------------------------------------------------------------
  3267.   # ● 战斗的检测程序
  3268.   #--------------------------------------------------------------------------
  3269.   def program_check
  3270.     for data in @program_base
  3271.       if program_start?(data) && !@played_program.include?(data)
  3272.         @played_program.push(data.dup)
  3273.         @program_scroll.push(data.dup)  if data[0] == "scroll"
  3274.         @program_picture.push(data.dup) if data[0] == "kpic"
  3275.         start_sound(data.dup)           if data[0] == "sound"
  3276.         start_program_switch(data.dup)  if data[0] == "switch"
  3277.         start_program_se(data.dup)      if data[0] == "keep_se"
  3278.         start_program_shake(data.dup)   if data[0] == "keep_sk"
  3279.         start_program_color(data.dup)   if data[0] == "keep_c"
  3280.       else
  3281.         @played_program.delete(data)  if !program_start?(data)
  3282.         @program_scroll.delete(data)  if data[0] == "scroll"
  3283.         @program_picture.delete(data) if data[0] == "kpic"
  3284.         @program_switch.delete(data)  if data[0] == "switch"
  3285.         @program_sound.delete(data)   if data[0] == "sound"
  3286.         @program_se.delete(data)      if data[0] == "keep_se"
  3287.         @program_shake.delete(data)   if data[0] == "keep_sk"
  3288.         @program_color.delete(data)   if data[0] == "keep_c"
  3289.       end
  3290.     end
  3291.   end
  3292.   #--------------------------------------------------------------------------
  3293.   # ● 战斗程序开始
  3294.   #--------------------------------------------------------------------------
  3295.   def program_start?(data)
  3296.     start = false
  3297.     start = true if $game_switches[data[1].abs] && data[1] > 0
  3298.     start = true if @switches[data[1].abs] && data[1] < 0
  3299.     return start
  3300.   end  
  3301.   #--------------------------------------------------------------------------
  3302.   # ● 战斗程序 开关操作开始
  3303.   #--------------------------------------------------------------------------
  3304.   def start_program_switch(data)
  3305.     data[4] = data[4] + rand(data[5] + 1)
  3306.     data[4] = 1 if data[4] <= 0
  3307.     @program_switch.push(data)
  3308.   end
  3309.   #--------------------------------------------------------------------------
  3310.   # ● 更新开关操作
  3311.   #--------------------------------------------------------------------------
  3312.   def update_program_switch
  3313.     for data in @program_switch
  3314.       data[4] -= 1
  3315.       next @program_switch.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  3316.       next @program_switch.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  3317.       next if data[4] != 0
  3318.       for id in data[2]
  3319.         $game_switches[id] = true if id > 0
  3320.         @switches[id.abs] = true  if id < 0
  3321.       end
  3322.       for id in data[3]
  3323.         $game_switches[id] = false if id > 0
  3324.         @switches[id.abs] = false  if id < 0
  3325.       end
  3326.       @program_switch.delete(data)
  3327.       program_check
  3328.     end  
  3329.   end
  3330.   #--------------------------------------------------------------------------
  3331.   # ● 战斗程序 BGM/BGS的开始
  3332.   #--------------------------------------------------------------------------
  3333.   def start_sound(data)
  3334.     @program_sound.push(data)
  3335.     name = data[5]
  3336.     case data[2]
  3337.     when "se"
  3338.       Audio.se_play("Audio/SE/" + name, data[4], data[3])
  3339.     when "bgm"
  3340.       name = RPG::BGM.last.name if data[5] == ""
  3341.       Audio.bgm_play("Audio/BGM/" + name, data[4], data[3])
  3342.     when "bgs"
  3343.       name = RPG::BGS.last.name if data[5] == ""
  3344.       Audio.bgs_play("Audio/BGS/" + name, data[4], data[3])
  3345.     end
  3346.   end
  3347.   #--------------------------------------------------------------------------
  3348.   # ● 战斗程序 期间SE的开始
  3349.   #--------------------------------------------------------------------------
  3350.   def start_program_se(data)
  3351.     data[3] = [data[2], data[3]]
  3352.     data[2] = data[3][0] + rand(data[3][1] + 1)
  3353.     @program_se.push(data)
  3354.     Audio.se_play("Audio/SE/" + data[7], data[5], data[4]) if data[6]
  3355.   end
  3356.   #--------------------------------------------------------------------------
  3357.   # ● 更新期间SE
  3358.   #--------------------------------------------------------------------------
  3359.   def update_program_se
  3360.     for data in @program_se
  3361.       data[2] -= 1
  3362.       next @program_se.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  3363.       next @program_se.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  3364.       next if data[2] != 0
  3365.       Audio.se_play("Audio/SE/" + data[7], data[5], data[4])
  3366.       data[2] = data[3][0] + rand(data[3][1] + 1)
  3367.     end  
  3368.   end
  3369.   #--------------------------------------------------------------------------
  3370.   # ● 战斗程序 开始期间摇动
  3371.   #--------------------------------------------------------------------------
  3372.   def start_program_shake(data)
  3373.     data[3] = [data[2], data[3]]
  3374.     data[2] = data[3][0] + rand(data[3][1] + 1)
  3375.     @program_shake.push(data)
  3376.     shake(data[4], data[5], data[6]) if data[7]
  3377.   end
  3378.   #--------------------------------------------------------------------------
  3379.   # ● 更新期间摇动
  3380.   #--------------------------------------------------------------------------
  3381.   def update_program_shake
  3382.     for data in @program_shake
  3383.       data[2] -= 1
  3384.       next @program_shake.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  3385.       next @program_shake.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  3386.       next if data[2] != 0
  3387.       shake(data[4], data[5], data[6])
  3388.       data[2] = data[3][0] + rand(data[3][1] + 1)
  3389.     end  
  3390.   end
  3391.   #--------------------------------------------------------------------------
  3392.   # ● 战斗程序 开始期间色调变更
  3393.   #--------------------------------------------------------------------------
  3394.   def start_program_color(data)
  3395.     data[3] = [data[2], data[3]]
  3396.     data[2] = data[3][0] + rand(data[3][1] + 1)
  3397.     data[7] = true if data[4] == 0 or data[4] == 4
  3398.     case data[4]
  3399.     when 1   ;data[4] = $game_troop.members
  3400.     when 2   ;data[4] = $game_party.battle_members
  3401.     when 3,4 ;data[4] = $game_troop.members + $game_party.battle_members
  3402.     else ;data[4] = []
  3403.     end
  3404.     @program_color.push(data)
  3405.     return if !data[6]
  3406.     for target in data[4] do target.sv.color_set = data[5] end if data[4] != []
  3407.     @color_set[1] = data[5] if data[7]
  3408.     @color_set[2] = data[5] if data[7]
  3409.   end
  3410.   #--------------------------------------------------------------------------
  3411.   # ● 更新期间色调变更
  3412.   #--------------------------------------------------------------------------
  3413.   def update_program_color
  3414.     for data in @program_color
  3415.       data[2] -= 1
  3416.       next @program_color.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  3417.       next @program_color.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  3418.       next if data[2] != 0
  3419.       for target in data[4] do target.sv.color_set = data[5] end if data[4] != []
  3420.       @color_set[1] = data[5] if data[7]
  3421.       @color_set[2] = data[5] if data[7]
  3422.       data[2] = data[3][0] + rand(data[3][1] + 1)
  3423.     end
  3424.   end
  3425.   #--------------------------------------------------------------------------
  3426.   # ● 实行过渡
  3427.   #--------------------------------------------------------------------------
  3428.   def perform_transition(data)
  3429.     Graphics.transition(data[2], "Graphics/Pictures/" + data[3], data[1])
  3430.   end  
  3431.   #--------------------------------------------------------------------------
  3432.   # ● 取得背景相机的限制值  data=[max_top, max_bottom, max_left, max_right]
  3433.   #--------------------------------------------------------------------------
  3434.   def setting(index, data)
  3435.     @max_data[index - 1] = data
  3436.     return if index != 2
  3437.     setup
  3438.     # 相机的中心坐标
  3439.     @center_x     = (Graphics.width / 2 + N03::CAMERA_POSITION[0]) * 100
  3440.     @center_y     = (Graphics.height / 2 + N03::CAMERA_POSITION[1]) * 100
  3441.     # 上下左右的移动限制距离
  3442.     @max_top    = [@max_data[0][5], @max_data[1][5]].min * -1
  3443.     @max_bottom = [@max_data[0][1], @max_data[1][1]].min + @max_top
  3444.     @max_left   = [@max_data[0][4], @max_data[1][4]].min  * -1
  3445.     @max_right  = [@max_data[0][3], @max_data[1][3]].min + @max_left
  3446.     exist_data = @max_data[0] if !@max_data[1][6]
  3447.     exist_data = @max_data[1] if !@max_data[0][6]
  3448.     @max_top    = exist_data[5] * -1        if exist_data != nil
  3449.     @max_bottom = exist_data[1] + @max_top  if exist_data != nil
  3450.     @max_left   = exist_data[4] * -1        if exist_data != nil
  3451.     @max_right  = exist_data[3] + @max_left if exist_data != nil
  3452.     @max_top = @max_bottom = @max_left = @max_right = 0 if !@max_data[1][6] && !@max_data[0][6]
  3453.     @max_width    = @max_right - @max_left + Graphics.width
  3454.     @max_height   = @max_bottom - @max_top + Graphics.height
  3455.     # 扩大缩小限制值
  3456.     max_zoom_x    = 100 * Graphics.width / @max_width
  3457.     max_zoom_y    = 100 * Graphics.height / @max_height
  3458.     @max_zoom_out = [max_zoom_x, max_zoom_y].max
  3459.   end
  3460.   #--------------------------------------------------------------------------
  3461.   # ● 相机移动
  3462.   #--------------------------------------------------------------------------
  3463.   def move(target_x, target_y, zoom, time, screen = true)
  3464.     # 调整战斗背景以上尺寸的变焦来减少
  3465.     @target_zoom = [zoom * 0.01, @max_zoom_out * 0.01].max
  3466.     target_x *= -1 if screen && @mirror
  3467.     # 变焦分钟的中心坐标修正
  3468.     if screen && @target_zoom != 1
  3469.       target_x = target_x + @center_x
  3470.       target_y = target_y + @center_y
  3471.     end
  3472.     adjust_x = @center_x * (@target_zoom - 1) / (@target_zoom ** 2 - @target_zoom)
  3473.     adjust_y = @center_y * (@target_zoom - 1) / (@target_zoom ** 2 - @target_zoom)
  3474.     adjust_x = 0 if adjust_x.nan?
  3475.     adjust_y = 0 if adjust_y.nan?
  3476.     adjust_x = @center_x if !screen && adjust_x == 0
  3477.     adjust_y = @center_y if !screen && adjust_y == 0
  3478.     @target_x = target_x - adjust_x.to_i
  3479.     @target_y = target_y - adjust_y.to_i
  3480.     @target_zoom = (@target_zoom * 1000).to_i
  3481.     @zoom = @zoom.to_i
  3482.     limit_test
  3483.     # 马上实行当时间是0的场合
  3484.     return @time = time.abs if time != 0
  3485.     @time = 1
  3486.     update
  3487.   end
  3488.   #--------------------------------------------------------------------------
  3489.   # ● 计算限制的坐标
  3490.   #--------------------------------------------------------------------------
  3491.   def limit_test
  3492.     new_width = @max_width * @target_zoom / 1000
  3493.     new_height = @max_height * @target_zoom / 1000
  3494.     new_max_right = @max_right - (@max_width - new_width)
  3495.     new_max_bottom = @max_bottom - (@max_height - new_height)
  3496.     # 画面移动目标限制的场合、限制坐标设置
  3497.     if @target_x < @max_left * 100
  3498.       @target_x = @max_left * 100
  3499.     end
  3500.     if @target_x > new_max_right * 100
  3501.       @target_x = new_max_right * 100
  3502.     end
  3503.     if @target_y < @max_top * 100
  3504.       @target_y = @max_top * 100
  3505.     end
  3506.     if @target_y > new_max_bottom * 100
  3507.       @target_y = new_max_bottom * 100
  3508.     end
  3509.   end
  3510.   #--------------------------------------------------------------------------
  3511.   # ● 画面的摇动
  3512.   #--------------------------------------------------------------------------
  3513.   def shake(power, speed, time)
  3514.     @shake_x = power[0] * 100
  3515.     @shake_y = power[1] * 100
  3516.     @power_time_base = @power_time = speed
  3517.     @shake_time = time
  3518.     update_shake
  3519.   end
  3520.   #--------------------------------------------------------------------------
  3521.   # ● 更新摇动
  3522.   #--------------------------------------------------------------------------
  3523.   def update_shake
  3524.     @sx = (@sx * (@power_time - 1) + @shake_x) / @power_time
  3525.     @sy = (@sy * (@power_time - 1) + @shake_y) / @power_time
  3526.     @power_time -= 1
  3527.     @shake_time -= 1
  3528.     return @sx = @sy = 0 if @shake_time == 0
  3529.     return if @power_time != 0
  3530.     @power_time = @power_time_base
  3531.     @shake_x = @shake_x * -4 / 5
  3532.     @shake_y = @shake_y * -4 / 5
  3533.   end
  3534.   #--------------------------------------------------------------------------
  3535.   # ● 更新帧数
  3536.   #--------------------------------------------------------------------------
  3537.   def update
  3538.     update_shake if @shake_time != 0
  3539.     update_program
  3540.     return if @time == 0
  3541.     @x = (@x * (@time - 1) + @target_x) / @time
  3542.     @y = (@y * (@time - 1) + @target_y) / @time
  3543.     @zoom = (@zoom * (@time - 1) + @target_zoom) / @time
  3544.     @time -= 1
  3545.   end
  3546.   #--------------------------------------------------------------------------
  3547.   # ● 更新程序
  3548.   #--------------------------------------------------------------------------
  3549.   def update_program
  3550.     update_program_switch if @program_switch != []
  3551.     update_program_se     if @program_se != []
  3552.     update_program_shake  if @program_shake != []
  3553.     update_program_color  if @program_color != []
  3554.   end
  3555. end
  3556.  
  3557. #==============================================================================
  3558. # ■ Scene_Battle
  3559. #------------------------------------------------------------------------------
  3560. #  它是一类用于执行该过程的战斗画面。
  3561. #==============================================================================
  3562. class Scene_Battle < Scene_Base
  3563.   #--------------------------------------------------------------------------
  3564.   # ● 更新帧数(基本)
  3565.   #--------------------------------------------------------------------------
  3566.   alias update_basic_scene_battle_n03 update_basic
  3567.   def update_basic
  3568.     update_basic_scene_battle_n03
  3569.     $sv_camera.update
  3570.     $sv_camera.wait = N03::TURN_END_WAIT + 1 if $sv_camera.win_wait
  3571.     camera_wait
  3572.   end
  3573.   #--------------------------------------------------------------------------
  3574.   # ● 相机体能
  3575.   #--------------------------------------------------------------------------
  3576.   def camera_wait
  3577.     process_event if $sv_camera.event
  3578.     $sv_camera.event = false if $sv_camera.event
  3579.     while $sv_camera.wait != 0
  3580.       Graphics.update
  3581.       Input.update
  3582.       update_all_windows
  3583.       $game_timer.update
  3584.       $game_troop.update
  3585.       $sv_camera.update
  3586.       @spriteset.update
  3587.       update_info_viewport
  3588.       update_message_open
  3589.       $sv_camera.wait -= 1 if $sv_camera.wait > 0
  3590.       $sv_camera.wait = 1 if $sv_camera.wait == 0 && @spriteset.effect?
  3591.       BattleManager.victory if $sv_camera.win_wait && $sv_camera.wait == 0
  3592.     end
  3593.   end
  3594.   #--------------------------------------------------------------------------
  3595.   # ● 相机体能集
  3596.   #--------------------------------------------------------------------------
  3597.   def set_camera_wait(time)
  3598.     $sv_camera.wait = time
  3599.     camera_wait
  3600.   end  
  3601.   #--------------------------------------------------------------------------
  3602.   # ● 实行等待直到效果结束 ★再定义
  3603.   #--------------------------------------------------------------------------
  3604.   def wait_for_effect
  3605.   end
  3606.   #--------------------------------------------------------------------------
  3607.   # ● 开始回合
  3608.   #--------------------------------------------------------------------------
  3609.   alias turn_start_scene_battle_n03 turn_start
  3610.   def turn_start
  3611.     turn_start_scene_battle_n03
  3612.     N03.camera(nil, N03::BATTLE_CAMERA["顺序开始后"].dup)
  3613.   end
  3614.   #--------------------------------------------------------------------------
  3615.   # ● 回合结束
  3616.   #--------------------------------------------------------------------------
  3617.   alias turn_end_scene_battle_n03 turn_end
  3618.   def turn_end
  3619.     p " #橫版● 回合结束"
  3620.     turn_end_scene_battle_n03
  3621.     for member in $game_troop.members + $game_party.members
  3622.       N03.set_damage(member, member.sv.result_damage[0],member.sv.result_damage[1])
  3623.       member.sv.result_damage = [0,0]
  3624.       @spriteset.set_damage_pop(member) if member.result.hp_damage != 0 or member.result.mp_damage != 0
  3625.     end
  3626.     set_camera_wait(N03::TURN_END_WAIT)
  3627.     N03.camera(nil, N03::BATTLE_CAMERA["顺序开始前"].dup) if $game_party.inputable?
  3628.     @log_window.clear
  3629.   end
  3630.   #--------------------------------------------------------------------------
  3631.   # ● 技能/使用物品 ★再定义
  3632.   #--------------------------------------------------------------------------
  3633.   def use_item
  3634.     item = @subject.current_action.item
  3635.     display_item(item)
  3636.     @subject.use_item(item)
  3637.     refresh_status
  3638.     @targets = @subject.current_action.make_targets.compact
  3639.     @targets = [@subject] if @targets.size == 0
  3640.     set_substitute(item)
  3641.     for time in item.repeats.times do play_sideview(@targets, item) end
  3642.     end_reaction(item)
  3643.     display_end_item
  3644.      @subject.stamina_loss  # atb之語法 出現錯誤砍掉
  3645.   end
  3646.  
  3647.   #--------------------------------------------------------------------------
  3648.   # ● 技能/显示物品名
  3649.   #--------------------------------------------------------------------------
  3650.   def display_item(item)
  3651.     return @log_window.display_use_item(@subject, item) if N03::BATTLE_LOG
  3652.     @log_window.off
  3653.     @skill_name_window = Window_Skill_name.new(item.name) unless N03::NO_DISPLAY_SKILL_ID.include?(item.id) && item.is_a?(RPG::Skill)
  3654.   end  
  3655.   #--------------------------------------------------------------------------
  3656.   # ● 技能/显示物品名结束
  3657.   #--------------------------------------------------------------------------
  3658.   def display_end_item
  3659.     @skill_name_window.dispose if @skill_name_window != nil
  3660.     @skill_name_window = nil
  3661.     set_camera_wait(N03::ACTION_END_WAIT) if @subject.sv.derivation_skill_id == 0
  3662.     @log_window.clear if N03::BATTLE_LOG
  3663.   end  
  3664.   #--------------------------------------------------------------------------
  3665.   # ● 反击/魔法反射/代替处理
  3666.   #--------------------------------------------------------------------------
  3667.   def end_reaction(item)
  3668.     end_substitute if @substitute != nil
  3669.     set_reflection(item) if @reflection_data != nil
  3670.     set_counter_attack if @counter_attacker != nil
  3671.   end  
  3672.   #--------------------------------------------------------------------------
  3673.   # ● 发动反击 ★再定义
  3674.   #--------------------------------------------------------------------------
  3675.   def invoke_counter_attack(target, item)
  3676.     return if @subject.sv.counter_id != 0
  3677.     @counter_attacker = [] if @counter_attacker == nil
  3678.     return apply_item_effects(apply_substitute(target, item), item) if !target.movable?
  3679.     @log_window.add_text(sprintf(Vocab::CounterAttack, target.name)) if N03::BATTLE_LOG
  3680.     target.sv.counter_id = target.sv.counter_skill_id
  3681.     @counter_attacker.push(target)
  3682.   end
  3683.   #--------------------------------------------------------------------------
  3684.   # ● 发动魔法反射 ★再定义
  3685.   #--------------------------------------------------------------------------
  3686.   def invoke_magic_reflection(target, item)
  3687.     return if @subject.sv.reflection_id != 0
  3688.     @log_window.add_text(sprintf(Vocab::MagicReflection, target.name)) if N03::BATTLE_LOG
  3689.     target.sv.reflection_id = target.sv.reflection_anime_id
  3690.   end
  3691.   #--------------------------------------------------------------------------
  3692.   # ● 代替应用 ★再定义
  3693.   #--------------------------------------------------------------------------
  3694.   def apply_substitute(target, item)
  3695.     return target if @substitute == nil
  3696.     return target if !check_substitute(target, item)
  3697.     return @substitute
  3698.   end
  3699.   #--------------------------------------------------------------------------
  3700.   # ● 代替设置
  3701.   #--------------------------------------------------------------------------
  3702.   def set_substitute(item)
  3703.     @substitute = N03.get_enemy_unit(@subject).substitute_battler
  3704.     return if @substitute == nil
  3705.     s_targets = []
  3706.     for i in [email]0...@targets.size[/email]
  3707.       next if @targets[i] == @substitute
  3708.       next if !check_substitute(@targets[i], item)
  3709.       @log_window.add_text(sprintf(Vocab::Substitute, @substitute.name, @targets[i].name))
  3710.       @targets[i].sv.start_action(@targets[i].sv.substitute_receiver_start_action)
  3711.       s_targets.push(@targets[i])
  3712.       @targets[i] = @substitute
  3713.     end
  3714.     return @substitute = nil if s_targets == []
  3715.     @substitute.sv.set_target(s_targets)
  3716.     @substitute.sv.start_action(@substitute.sv.substitute_start_action)
  3717.   end  
  3718.   #--------------------------------------------------------------------------
  3719.   # ● 结束代替
  3720.   #--------------------------------------------------------------------------
  3721.   def end_substitute
  3722.     for member in @substitute.sv.target_battler
  3723.       member.sv.start_action(member.sv.substitute_receiver_end_action)
  3724.     end  
  3725.     @substitute.sv.start_action(@substitute.sv.substitute_end_action)
  3726.     @substitute = nil
  3727.   end
  3728.   #--------------------------------------------------------------------------
  3729.   # ● 反击
  3730.   #--------------------------------------------------------------------------
  3731.   def set_counter_attack
  3732.     pre_subject = @subject
  3733.     for attacker in @counter_attacker
  3734.       @subject = attacker
  3735.       item = $data_skills[attacker.sv.counter_skill_id]
  3736.       play_sideview([pre_subject], item)
  3737.     end
  3738.     # 实行同一个计数器者を考虑到计数器ID的初始化动作后
  3739.     for attacker in @counter_attacker do attacker.sv.counter_id = 0 end
  3740.     @subject = pre_subject
  3741.     @counter_attacker = nil
  3742.   end
  3743.   #--------------------------------------------------------------------------
  3744.   # ● 魔法反射
  3745.   #--------------------------------------------------------------------------
  3746.   def set_reflection(item)
  3747.     @log_window.back_to(1)
  3748.     for data in @reflection_data
  3749.       @subject.sv.damage_action(@subject, item)
  3750.       N03.set_damage_anime_data([@subject], @subject, data)
  3751.       apply_item_effects(@subject, item)
  3752.       @spriteset.set_damage_pop(@subject)
  3753.     end
  3754.     set_camera_wait(N03.get_anime_time(@reflection_data[0][0]))
  3755.     @reflection_data = nil
  3756.   end
  3757.   #--------------------------------------------------------------------------
  3758.   # ● 实行侧视图动作
  3759.   #--------------------------------------------------------------------------
  3760.   def play_sideview(targets, item)
  3761.  
  3762.     @subject.sv.set_target(targets)
  3763.     return if @subject.sv.attack_action(item) == nil
  3764.     return if !@subject.movable?
  3765.     return if item.scope != 9 && item.scope != 10 && !N03.targets_alive?(targets)
  3766.     @subject.sv.start_action(@subject.sv.attack_action(item))
  3767.     @subject.sv.unshift_action(@subject.sv.flash_action) if @subject.flash_flg
  3768.     @subject.sv.active = true
  3769.     @subject.sv.command_action = false
  3770.     loop do
  3771.       update_basic
  3772.       data = @subject.sv.play_data
  3773.       @targets = N03.s_targets(@subject) if data[0] == "second_targets_set"
  3774.       N03.targets_set(@subject)          if data[0] == "targets_set"
  3775.       @immortal = N03.immortaling        if data[0] == "no_collapse" && !N03.dead_attack?(@subject, item)
  3776.       @immortal = N03.unimmortaling      if data[0] == "collapse"
  3777.       next set_move_anime(item)          if @subject.sv.m_a_data != []
  3778.       set_damage(item)                   if @subject.sv.set_damage
  3779.       break N03.derived_skill(@subject)  if @subject.sv.derivation_skill_id != 0
  3780.       break                              if @subject.sv.action_end or @subject.hidden?
  3781.     end
  3782.     @immortal = N03.unimmortaling        if @immortal
  3783.   end
  3784.   #--------------------------------------------------------------------------
  3785.   # ● 实行伤害
  3786.   #--------------------------------------------------------------------------
  3787.   def set_damage(item)
  3788.     targets = @targets
  3789.     targets = [@subject.sv.individual_targets[0]] if @subject.sv.individual_targets.size != 0
  3790.     for target in targets do damage_anime(targets.dup, target, item) end
  3791.     @subject.sv.set_damage = false
  3792.     @subject.sv.damage_anime_data = []
  3793.   end
  3794.   #--------------------------------------------------------------------------
  3795.   # ● 战斗动画伤害处理
  3796.   #--------------------------------------------------------------------------
  3797.   def damage_anime(targets, target, item)
  3798.     @log_window.back_to(1) if @log_window.line_number == 5
  3799.     return if item.scope != 9 && item.scope != 10 && target.dead?
  3800.     @miss = false
  3801.     invoke_item(target,item)
  3802.     if target.result.missed
  3803.       target.sv.miss_action(@subject, item)
  3804.       return @miss = true
  3805.     elsif target.result.evaded or target.sv.counter_id != 0
  3806.       target.sv.evasion_action(@subject, item)
  3807.       return @miss = true
  3808.     elsif target.sv.reflection_id != 0
  3809.       N03.set_damage_anime_data(targets, target, [target.sv.reflection_id, false, false, true])
  3810.       target.sv.reflection_id = 0
  3811.       @reflection_data = [] if @reflection_data == nil
  3812.       return @reflection_data.push([N03.get_attack_anime_id(-3, @subject), false, false, true])
  3813.     end
  3814.     target.sv.damage_action(@subject, item)
  3815.     N03.set_damage(@subject, -target.result.hp_drain, -target.result.mp_drain) if target != @subject
  3816.     @spriteset.set_damage_pop(target)
  3817.     @spriteset.set_damage_pop(@subject) if target != @subject && @subject.result.hp_damage != 0 or @subject.result.mp_damage != 0
  3818.     N03.set_damage_anime_data(targets, target, @subject.sv.damage_anime_data) if @subject.sv.damage_anime_data != []
  3819.   end
  3820.   #--------------------------------------------------------------------------
  3821.   # ● 飞行动画处理
  3822.   #--------------------------------------------------------------------------
  3823.   def set_move_anime(item)
  3824.     for data in @subject.sv.m_a_data
  3825.       @subject.sv.damage_anime_data = data[4]
  3826.       hit_targets = []
  3827.       for target in data[1]
  3828.         damage_anime(data[1], target, item) if data[0]
  3829.         hit_targets.push(target) if !@miss
  3830.       end
  3831.       @miss = false if !data[3]
  3832.       @spriteset.set_hit_animation(@subject, data[2], hit_targets, @miss)
  3833.     end
  3834.     @subject.sv.set_damage = false
  3835.     @subject.sv.m_a_data = []
  3836.   end
  3837. end
  3838.  
  3839. #==============================================================================
  3840. # ■ DataManager
  3841. #------------------------------------------------------------------------------
  3842. #  这是一个模块管理游戏和数据库对象。
  3843. #==============================================================================
  3844. module DataManager
  3845.   #--------------------------------------------------------------------------
  3846.   # ● 创建各种游戏物件 ★再定义
  3847.   #--------------------------------------------------------------------------
  3848.   def self.create_game_objects
  3849.     $game_temp          = Game_Temp.new
  3850.     $game_system        = Game_System.new
  3851.     $game_timer         = Game_Timer.new
  3852.     $game_message       = Game_Message.new
  3853.     $game_switches      = Game_Switches.new
  3854.     $game_variables     = Game_Variables.new
  3855.     $game_self_switches = Game_SelfSwitches.new
  3856.     $game_actors        = Game_Actors.new
  3857.     $game_party         = Game_Party.new
  3858.     $game_troop         = Game_Troop.new
  3859.     $game_map           = Game_Map.new
  3860.     $game_player        = Game_Player.new
  3861.     $sv_camera          = Battle_Camera.new
  3862.   end
  3863. end
  3864.  
  3865. #==============================================================================
  3866. # ■ BattleManager
  3867. #------------------------------------------------------------------------------
  3868. #  这是一个模块管理战斗进行。
  3869. #==============================================================================
  3870. module BattleManager
  3871.   #--------------------------------------------------------------------------
  3872.   # ● 遇敌时时处理 ★再定义
  3873.   #--------------------------------------------------------------------------
  3874.   def self.on_encounter
  3875.     @preemptive = (rand < rate_preemptive)
  3876.     @surprise = (rand < rate_surprise && !@preemptive)
  3877.     $sv_camera.mirror = @surprise if N03::BACK_ATTACK
  3878.   end
  3879.   #--------------------------------------------------------------------------
  3880.   # ● 胜利的处理 ★再定义
  3881.   #--------------------------------------------------------------------------
  3882.   def self.process_victory
  3883.     $sv_camera.win_wait = true
  3884.   end  
  3885.   #--------------------------------------------------------------------------
  3886.   # ● 胜利
  3887.   #--------------------------------------------------------------------------
  3888.   def self.victory
  3889.     $sv_camera.win_wait = false
  3890.     N03.camera(nil, N03::BATTLE_CAMERA["战斗结束时"].dup)
  3891.     for member in $game_party.members do member.sv.start_action(member.sv.win) if member.movable? end
  3892.     play_battle_end_me
  3893.     replay_bgm_and_bgs
  3894.     $game_message.add(sprintf(Vocab::Victory, $game_party.name))
  3895.     display_exp
  3896.     gain_gold
  3897.     gain_drop_items
  3898.     gain_exp
  3899.     SceneManager.return
  3900.     battle_end(0)
  3901.     return true
  3902.   end
  3903.   #--------------------------------------------------------------------------
  3904.   # ● 逃走的处理 ★再定义
  3905.   #--------------------------------------------------------------------------
  3906.   def self.process_escape
  3907.     $game_message.add(sprintf(Vocab::EscapeStart, $game_party.name))
  3908.     success = @preemptive ? true : (rand < @escape_ratio)
  3909.     Sound.play_escape
  3910.     if success
  3911.       process_abort
  3912.       for member in $game_party.members do member.sv.start_action(member.sv.escape) if member.movable? end
  3913.     else
  3914.       @escape_ratio += 0.1
  3915.       $game_message.add('\.' + Vocab::EscapeFailure)
  3916.       $game_party.clear_actions
  3917.       for member in $game_party.members do member.sv.start_action(member.sv.escape_ng) if member.movable? end
  3918.     end
  3919.     wait_for_message
  3920.     return success
  3921.   end
  3922.   #--------------------------------------------------------------------------
  3923.   # ● 输入下个命令 ★再定义
  3924.   #--------------------------------------------------------------------------
  3925.   def self.next_command
  3926.     begin
  3927.       if !actor || !actor.next_command
  3928.         $game_party.battle_members[@actor_index].sv.command_action = true
  3929.         @actor_index += 1
  3930.         if @actor_index >= $game_party.members.size
  3931.           for member in $game_party.battle_members.reverse
  3932.             break member.sv.start_action(member.sv.command_a) if member.inputable?
  3933.           end
  3934.           return false
  3935.         end
  3936.       end
  3937.     end until actor.inputable?
  3938.     actor.sv.start_action(actor.sv.command_b) if actor != nil && actor.inputable?
  3939.     if pre_actor
  3940.       pre_actor.sv.start_action(pre_actor.sv.command_a) if pre_actor != nil && pre_actor.inputable?
  3941.     end
  3942.     return true
  3943.   end
  3944.   #--------------------------------------------------------------------------
  3945.   # ● 输入上个命令 ★再定义
  3946.   #--------------------------------------------------------------------------
  3947.   def self.prior_command
  3948.     begin
  3949.       if !actor || !actor.prior_command
  3950.         $game_party.battle_members[@actor_index].sv.command_action = false
  3951.         @actor_index -= 1
  3952.         if @actor_index < 0
  3953.           for member in $game_party.battle_members
  3954.             break member.sv.start_action(member.sv.command_a) if member.inputable?
  3955.           end
  3956.           return false
  3957.         end
  3958.       end
  3959.     end until actor.inputable?
  3960.     actor.make_actions if actor.inputable?
  3961.     actor.sv.start_action(actor.sv.command_b) if actor.inputable?
  3962.     after_actor.sv.start_action(after_actor.sv.command_a) if after_actor != nil && after_actor.inputable?
  3963.     return true
  3964.   end
  3965.   #--------------------------------------------------------------------------
  3966.   # ● 取得上个角色输入的命令
  3967.   #--------------------------------------------------------------------------
  3968.   def self.pre_actor
  3969.     return if @actor_index == 0
  3970.     $game_party.members[@actor_index - 1]
  3971.   end
  3972.   #--------------------------------------------------------------------------
  3973.   # ● 取得输入命令后的角色
  3974.   #--------------------------------------------------------------------------
  3975.   def self.after_actor
  3976.     $game_party.members[@actor_index + 1]
  3977.   end
  3978.   #--------------------------------------------------------------------------
  3979.   # ● 战斗行动作角色前追加
  3980.   #--------------------------------------------------------------------------
  3981.   def self.unshift_action_battlers(battler)
  3982.     @action_battlers.unshift(battler)
  3983.   end
  3984. end  
  3985.  
  3986. #==============================================================================
  3987. # ■ Game_Battler
  3988. #------------------------------------------------------------------------------
  3989. #  处理战斗者的类、它是一个类追加角色的方法。
  3990. #==============================================================================
  3991. class Game_Battler < Game_BattlerBase
  3992.   #--------------------------------------------------------------------------
  3993.   # ● 公开实例变量
  3994.   #--------------------------------------------------------------------------
  3995.   attr_reader   :sv                     # 侧视图数据
  3996.   attr_accessor :flash_flg              # 闪光标志
  3997.   #--------------------------------------------------------------------------
  3998.   # ● 初始化物件
  3999.   #--------------------------------------------------------------------------
  4000.   alias initialize_game_battler_n03 initialize
  4001.   def initialize
  4002.     initialize_game_battler_n03
  4003.     @sv = SideView.new(self)
  4004.   end
  4005.   #--------------------------------------------------------------------------
  4006.   # ● 删除当前的战斗动作
  4007.   #--------------------------------------------------------------------------
  4008.   alias remove_current_action_game_battler_n03 remove_current_action
  4009.   def remove_current_action
  4010.     return @sv.derivation_skill_id = 0 if @sv.derivation_skill_id != 0
  4011.     remove_current_action_game_battler_n03
  4012.   end
  4013.   #--------------------------------------------------------------------------
  4014.   # ● 回合结束处理
  4015.   #--------------------------------------------------------------------------
  4016.   alias on_turn_end_game_battler_n03 on_turn_end
  4017.   def on_turn_end
  4018.     on_turn_end_game_battler_n03
  4019.     @sv.add_state = []
  4020.     @sv.result_damage = [@result.hp_damage, @result.mp_damage]
  4021.   end
  4022.   #--------------------------------------------------------------------------
  4023.   # ● 比较参数条件 data=[种别, 数值, 判别]
  4024.   #--------------------------------------------------------------------------
  4025.   def comparison_parameter(data)
  4026.     return true if data[0][0] == 0
  4027.     kind = data[0]
  4028.     num = data[1]
  4029.     select = data[2]
  4030.     case kind
  4031.     when  1 ; par = level
  4032.     when  2 ; par = mhp
  4033.     when  3 ; par = mmp
  4034.     when  4 ; par = hp
  4035.     when  5 ; par = mp
  4036.     when  6 ; par = tp
  4037.     when  7 ; par = atk
  4038.     when  8 ; par = self.def
  4039.     when  9 ; par = mat
  4040.     when 10 ; par = mdf
  4041.     when 11 ; par = agi
  4042.     when 12 ; par = luk
  4043.     end
  4044.     if num < 0
  4045.       case kind
  4046.       when  4 ; num = mhp * num / 100
  4047.       when  5 ; num = mmp * num / 100
  4048.       when  6 ; num = max_tp * num / 100
  4049.       end
  4050.       num = num.abs
  4051.     end  
  4052.     case select
  4053.     when  0 ; return par == num
  4054.     when  1 ; return par < num
  4055.     when  2 ; return par > num
  4056.     end
  4057.   end
  4058.   #--------------------------------------------------------------------------
  4059.   # ● 比较装备条件 data=[装备种别, 类型ID]
  4060.   #--------------------------------------------------------------------------
  4061.   def comparison_equip(data)
  4062.     kind = data[0]
  4063.     items = weapons if kind == 0
  4064.     items = armors  if kind == 1
  4065.     for item in items
  4066.       for id in data[1]
  4067.         return true if id > 0 && item.is_a?(RPG::Weapon) && item == $data_weapons[id.abs]
  4068.         return true if id > 0 && item.is_a?(RPG::Armor) && item == $data_armors[id.abs]
  4069.         return true if id < 0 && item.is_a?(RPG::Weapon) && item.wtype_id == id.abs
  4070.         return true if id < 0 && item.is_a?(RPG::Armor) && item.stype_id == id.abs
  4071.       end
  4072.     end
  4073.     return false
  4074.   end
  4075.  
  4076. end  
  4077. #==============================================================================
  4078. # ■ Game_Actor
  4079. #------------------------------------------------------------------------------
  4080. #  这是一个类来处理与主角。
  4081. #==============================================================================
  4082. class Game_Actor < Game_Battler
  4083.   #--------------------------------------------------------------------------
  4084.   # ● 公开实例变量
  4085.   #--------------------------------------------------------------------------
  4086.   attr_reader :actor_id                    # 主角ID
  4087.   #--------------------------------------------------------------------------
  4088.   # ● ID
  4089.   #--------------------------------------------------------------------------
  4090.   def id
  4091.     return @actor_id
  4092.   end
  4093.   #--------------------------------------------------------------------------
  4094.   # ● 是否使用精灵 ★再定义
  4095.   #--------------------------------------------------------------------------
  4096.   def use_sprite?
  4097.     return true
  4098.   end
  4099.   #--------------------------------------------------------------------------
  4100.   # ● 实行伤害效果 ★再定义
  4101.   #--------------------------------------------------------------------------
  4102.   def perform_damage_effect
  4103.     return if !N03::ACTOR_DAMAGE
  4104.     $game_troop.screen.start_shake(5, 5, 10)
  4105.     @sprite_effect_type = :blink
  4106.     Sound.play_actor_damage
  4107.   end
  4108.  
  4109. end
  4110.  
  4111. #==============================================================================
  4112. # ■ Game_Enemy
  4113. #------------------------------------------------------------------------------
  4114. #  它是一个类来处理敌人的角色。
  4115. #==============================================================================
  4116. class Game_Enemy < Game_Battler
  4117.   #--------------------------------------------------------------------------
  4118.   # ● 公开实例变量
  4119.   #--------------------------------------------------------------------------
  4120.   attr_reader :enemy_id                    # 敌人ID
  4121.   #--------------------------------------------------------------------------
  4122.   # ● ID
  4123.   #--------------------------------------------------------------------------
  4124.   def id
  4125.     return @enemy_id
  4126.   end
  4127.   #--------------------------------------------------------------------------
  4128.   # ● 等级
  4129.   #--------------------------------------------------------------------------
  4130.   def level
  4131.     return @sv.level
  4132.   end
  4133.   #--------------------------------------------------------------------------
  4134.   # ● 实行伤害效果 ★再定义
  4135.   #--------------------------------------------------------------------------
  4136.   def perform_damage_effect
  4137.     return if !N03::ENEMY_DAMAGE
  4138.     @sprite_effect_type = :blink
  4139.     Sound.play_enemy_damage
  4140.   end
  4141.   #--------------------------------------------------------------------------
  4142.   # ● 武器
  4143.   #--------------------------------------------------------------------------
  4144.   def weapons
  4145.     weapon1 = $data_weapons[@sv.enemy_weapon1_id]
  4146.     weapon2 = $data_weapons[@sv.enemy_weapon2_id]
  4147.     return [weapon1, weapon2]
  4148.   end
  4149.   #--------------------------------------------------------------------------
  4150.   # ● 防具
  4151.   #--------------------------------------------------------------------------
  4152.   def armors
  4153.     return [$data_armors[@sv.enemy_shield_id]]
  4154.   end
  4155.   #--------------------------------------------------------------------------
  4156.   # ● 二刀流的判定
  4157.   #--------------------------------------------------------------------------
  4158.   def dual_wield?
  4159.     return $data_weapons[@sv.enemy_weapon2_id] != nil
  4160.   end
  4161.   #--------------------------------------------------------------------------
  4162.   # ● 角色图像变更
  4163.   #--------------------------------------------------------------------------
  4164.   def graphics_change(battler_name)
  4165.     @battler_name = battler_name
  4166.   end
  4167.   #--------------------------------------------------------------------------
  4168.   # ● 取得通常攻击的动画ID
  4169.   #--------------------------------------------------------------------------
  4170.   def atk_animation_id1
  4171.     return weapons[0].animation_id if weapons[0]
  4172.     return weapons[1] ? 0 : 1
  4173.   end
  4174.   #--------------------------------------------------------------------------
  4175.   # ● 取得通常攻击的动画ID (二刀流:武器2)
  4176.   #--------------------------------------------------------------------------
  4177.   def atk_animation_id2
  4178.     return weapons[1] ? weapons[1].animation_id : 0
  4179.   end
  4180. end
  4181.  
  4182. #==============================================================================
  4183. # ■ Sprite_Base
  4184. #------------------------------------------------------------------------------
  4185. #  这是显示你添加处理精灵之类的。
  4186. #==============================================================================
  4187. class Sprite_Base < Sprite
  4188.   #--------------------------------------------------------------------------
  4189.   # ● 更新动画的坐标 (有归位)
  4190.   #--------------------------------------------------------------------------
  4191.   def update_animation_position_horming
  4192.     return if @action_end_cancel
  4193.     ani_ox_set if @horming
  4194.     camera_zoom = $sv_camera.zoom
  4195.     camera_zoom = 1 if @move_anime
  4196.     kind = 1
  4197.     kind = -1 if @ani_mirror && !@anime_no_mirror
  4198.     cell_data = @animation.frames[@animation.frame_max - (@ani_duration + @ani_rate - 1) / @ani_rate].cell_data
  4199.     for i in 0..15
  4200.       @ani_sprites[i].x = (@ani_ox + cell_data[i, 1] * kind - $sv_camera.x) * camera_zoom if @ani_sprites[i] != nil && cell_data[i, 1] != nil
  4201.       @ani_sprites[i].y = (@ani_oy + cell_data[i, 2] - $sv_camera.y) * camera_zoom if @ani_sprites[i] != nil && cell_data[i, 2] != nil
  4202.     end
  4203.   end
  4204.   #--------------------------------------------------------------------------
  4205.   # ● 动画原始的坐标设置
  4206.   #--------------------------------------------------------------------------
  4207.   def ani_ox_set
  4208.     if !SceneManager.scene_is?(Scene_Battle)
  4209.       @real_x = x
  4210.       @real_y = y
  4211.     end
  4212.     @ani_ox = @real_x - ox + width / 2
  4213.     @ani_oy = @real_y - oy + height / 2
  4214.     @ani_oy -= height / 2 if @animation.position == 0
  4215.     @ani_oy += height / 2 if @animation.position == 2
  4216.   end
  4217.   #--------------------------------------------------------------------------
  4218.   # ● 更新动画
  4219.   #--------------------------------------------------------------------------
  4220.   alias update_animation_sprite_base_n03 update_animation
  4221.   def update_animation
  4222.     update_animation_position_horming if animation? && SceneManager.scene_is?(Scene_Battle) && @animation.position != 3
  4223.     update_animation_sprite_base_n03
  4224.   end
  4225.   #--------------------------------------------------------------------------
  4226.   # ● 动画的原点设定 ★再定义
  4227.   #--------------------------------------------------------------------------
  4228.   def set_animation_origin
  4229.     return ani_ox_set if @animation.position != 3
  4230.     if viewport == nil
  4231.       @ani_ox = Graphics.width / 2
  4232.       @ani_oy = Graphics.height / 2
  4233.     else
  4234.       @ani_ox = viewport.rect.width / 2
  4235.       @ani_oy = viewport.rect.height / 2
  4236.     end
  4237.   end
  4238.   #--------------------------------------------------------------------------
  4239.   # ● 动画精灵的设定 ★再定义
  4240.   #--------------------------------------------------------------------------
  4241.   def animation_set_sprites(frame)
  4242.     camera_zoom = 1
  4243.     camera_zoom = $sv_camera.zoom if @anime_camera_zoom && @animation.position != 3 && SceneManager.scene_is?(Scene_Battle)
  4244.     camera_x = $sv_camera.x
  4245.     camera_y = $sv_camera.y
  4246.     camera_x = camera_y = 0 if @animation.position == 3 or !SceneManager.scene_is?(Scene_Battle)
  4247.     plus_z = 5
  4248.     plus_z = 1000 if @animation.position == 3
  4249.     plus_z = -17 if @plus_z != nil && @plus_z == false
  4250.     plus_z = -self.z + 10 if @plus_z != nil && @plus_z == false && @animation.position == 3
  4251.     cell_data = frame.cell_data
  4252.     @ani_sprites.each_with_index do |sprite, i|
  4253.       next unless sprite
  4254.       pattern = cell_data[i, 0]
  4255.       if !pattern || pattern < 0
  4256.         sprite.visible = false
  4257.         next
  4258.       end
  4259.       sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
  4260.       sprite.visible = true
  4261.       sprite.src_rect.set(pattern % 5 * 192,
  4262.         pattern % 100 / 5 * 192, 192, 192)
  4263.       if @ani_mirror && !@anime_no_mirror
  4264.         sprite.x = (@ani_ox - cell_data[i, 1] - camera_x) * camera_zoom
  4265.         sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
  4266.         sprite.angle = (360 - cell_data[i, 4])
  4267.         sprite.mirror = (cell_data[i, 5] == 0)
  4268.       else
  4269.         sprite.x = (@ani_ox + cell_data[i, 1] - camera_x) * camera_zoom
  4270.         sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
  4271.         sprite.angle = cell_data[i, 4]
  4272.         sprite.mirror = (cell_data[i, 5] == 1)
  4273.       end
  4274.       sprite.z = self.z + plus_z + i
  4275.       sprite.ox = 96
  4276.       sprite.oy = 96
  4277.       sprite.zoom_x = cell_data[i, 3] * camera_zoom / 100.0
  4278.       sprite.zoom_y = cell_data[i, 3] * camera_zoom/ 100.0
  4279.       sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  4280.       sprite.blend_type = cell_data[i, 7]
  4281.     end
  4282.   end
  4283.   #--------------------------------------------------------------------------
  4284.   # ● 精灵标志
  4285.   #--------------------------------------------------------------------------
  4286.   def set(battler, horming, camera_zoom, no_mirror)
  4287.     @battler = battler
  4288.     @next = true
  4289.     self.bitmap = Bitmap.new(@battler.sv.cw, @battler.sv.ch)
  4290.     self.ox = bitmap.width / 2
  4291.     self.oy = bitmap.height
  4292.     @horming = horming
  4293.     @anime_camera_zoom = camera_zoom
  4294.     @anime_no_mirror = no_mirror
  4295.     @battler.sv.reset_anime_data
  4296.   end  
  4297.   #--------------------------------------------------------------------------
  4298.   # ● 精灵坐标集
  4299.   #--------------------------------------------------------------------------
  4300.   def set_position(z, zoom_x, zoom_y, real_x, real_y)
  4301.     self.z = z
  4302.     self.zoom_x = zoom_x
  4303.     self.zoom_y = zoom_y
  4304.     @real_x = real_x
  4305.     @real_y = real_y
  4306.   end
  4307.   #--------------------------------------------------------------------------
  4308.   # ● 其他精灵的定时处理
  4309.   #--------------------------------------------------------------------------
  4310.   def other_process_timing(timing)
  4311.     se_flag = true
  4312.     se_flag = @se_flag if @se_flag != nil
  4313.     @battler.sv.timing.push([se_flag, timing.dup])
  4314.   end
  4315.   #--------------------------------------------------------------------------
  4316.   # ● 其他角色的定时处理
  4317.   #--------------------------------------------------------------------------
  4318.   def target_battler_process_timing(timing)
  4319.     for target in @timing_targets
  4320.       target.sv.timing.push([false, timing.dup])
  4321.     end  
  4322.   end
  4323.   #--------------------------------------------------------------------------
  4324.   # ● SE 闪光的定时处理
  4325.   #--------------------------------------------------------------------------
  4326.   alias animation_process_timing_sprite_base_n03 animation_process_timing
  4327.   def animation_process_timing(timing)
  4328.     target_battler_process_timing(timing) if @timing_targets && @timing_targets != []
  4329.     return other_process_timing(timing) if @next != nil
  4330.     animation_process_timing_sprite_base_n03(timing)
  4331.   end
  4332.   #--------------------------------------------------------------------------
  4333.   # ● 释放动画
  4334.   #--------------------------------------------------------------------------
  4335.   alias dispose_animation_sprite_base_n03 dispose_animation
  4336.   def dispose_animation
  4337.     dispose_animation_sprite_base_n03
  4338.   end
  4339. end
  4340.  
  4341.  
  4342. #==============================================================================
  4343. # ■ Sprite_Battler
  4344. #------------------------------------------------------------------------------
  4345. #  这是显示精灵角色的。
  4346. #==============================================================================
  4347. class Sprite_Battler < Sprite_Base
  4348.   #--------------------------------------------------------------------------
  4349.   # ● 公开实例变量
  4350.   #--------------------------------------------------------------------------
  4351.   attr_accessor   :removing             # 队伍脱离
  4352.   #--------------------------------------------------------------------------
  4353.   # ● 初始化物件
  4354.   #--------------------------------------------------------------------------
  4355.   alias initialize_sprite_battler_n03 initialize
  4356.   def initialize(viewport, battler = nil)
  4357.     initialize_sprite_battler_n03(viewport, battler)
  4358.     @real_x = @real_y = 0
  4359.     update_bitmap if @battler != nil
  4360.   end
  4361.   #--------------------------------------------------------------------------
  4362.   # ● 开始动画 ★再定义
  4363.   #--------------------------------------------------------------------------
  4364.   def start_animation(animation, mirror = false)
  4365.     return next_animation(animation, mirror) if animation?
  4366.     @animation = animation
  4367.     if @animation
  4368.       @horming = @battler.sv.anime_horming
  4369.       @anime_camera_zoom = @battler.sv.anime_camera_zoom
  4370.       @anime_no_mirror = @battler.sv.anime_no_mirror
  4371.       @timing_targets = @battler.sv.timing_targets
  4372.       @plus_z = @battler.sv.anime_plus_z
  4373.       @battler.sv.reset_anime_data
  4374.       @ani_mirror = mirror
  4375.       set_animation_rate
  4376.       @ani_duration = @animation.frame_max * @ani_rate + 1
  4377.       load_animation_bitmap
  4378.       make_animation_sprites
  4379.       set_animation_origin
  4380.     end
  4381.   end
  4382.   #--------------------------------------------------------------------------
  4383.   # ● 开始下一个动画
  4384.   #--------------------------------------------------------------------------
  4385.   def next_animation(animation, mirror)
  4386.     @next_anime = [] if @next_anime == nil
  4387.     @next_anime.push(Sprite_Base.new(viewport))
  4388.     @next_anime[@next_anime.size - 1].set(battler, @battler.sv.anime_horming, @battler.sv.anime_camera_zoom, @battler.sv.anime_no_mirror)
  4389.     @next_anime[@next_anime.size - 1].set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y)
  4390.     @next_anime[@next_anime.size - 1].start_animation(animation, mirror)
  4391.   end
  4392.   #--------------------------------------------------------------------------
  4393.   # ● 创建影图行
  4394.   #--------------------------------------------------------------------------
  4395.   def create_shadow
  4396.     reset_shadow
  4397.     return if @battler.sv.shadow == false
  4398.     @shadow = Sprite.new(viewport) if @shadow == nil
  4399.     @shadow.bitmap = Cache.character(@battler.sv.shadow)
  4400.     @shadow.ox = @shadow.bitmap.width / 2
  4401.     @shadow.oy = @shadow.bitmap.height / 2
  4402.   end
  4403.   #--------------------------------------------------------------------------
  4404.   # ● 初始化影图形
  4405.   #--------------------------------------------------------------------------
  4406.   def reset_shadow
  4407.     return if @shadow == nil
  4408.     @shadow.dispose
  4409.     @shadow = nil
  4410.   end  
  4411.   #--------------------------------------------------------------------------
  4412.   # ● 更新传输位图 ★再定义
  4413.   #--------------------------------------------------------------------------
  4414.   def update_bitmap
  4415.     update_bitmap_enemy if !@battler.actor?
  4416.     update_bitmap_actor if @battler.actor?
  4417.     update_src_rect if @battler != nil
  4418.     update_color if @battler != nil
  4419.   end
  4420.   #--------------------------------------------------------------------------
  4421.   # ● 传输位图:敌人
  4422.   #--------------------------------------------------------------------------
  4423.   def update_bitmap_enemy
  4424.     if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue
  4425.       @battler_name = @battler.battler_name
  4426.       @battler_hue = @battler.battler_hue
  4427.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  4428.       @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
  4429.       self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue)
  4430.       @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)
  4431.       create_shadow
  4432.       init_visibility
  4433.       @battler_id = @battler.id
  4434.     end
  4435.   end  
  4436.   #--------------------------------------------------------------------------
  4437.   # ● 传输位图:主角
  4438.   #--------------------------------------------------------------------------
  4439.   def update_bitmap_actor
  4440.     if @battler.character_name != @battler_name or @battler.character_index != @battler_index
  4441.       @battler_name = @battler.character_name
  4442.       @battler_index = @battler.character_index
  4443.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  4444.       @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
  4445.       self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index)
  4446.       @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)   if !@battler.is_a?(Game_Summon)
  4447.       create_shadow
  4448.       init_visibility
  4449.       @battler_id = @battler.id
  4450.     end
  4451.   end
  4452.   #--------------------------------------------------------------------------
  4453.   # ● 初始化可见状态 ★再定义
  4454.   #--------------------------------------------------------------------------
  4455.   def init_visibility
  4456.     @battler_visible = @battler.alive?
  4457.     @battler_visible = true if @battler.sv.state(1) != "敌人战斗不能"
  4458.     @battler_visible = false if @battler.hidden?
  4459.     @battler.sv.opacity = 0 unless @battler_visible
  4460.     self.opacity = 0 unless @battler_visible
  4461.     self.opacity = 255 if @battler_visible
  4462.     @battler.sv.weapon_visible = @battler_visible
  4463.   end
  4464.   #--------------------------------------------------------------------------
  4465.   # ● 更新传输矩形
  4466.   #--------------------------------------------------------------------------
  4467.   def update_src_rect
  4468.     return if @battler.sv.collapse
  4469.     if @battler_graphic_file_index != @battler.sv.graphic_file_index
  4470.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  4471.       self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index) if @battler.actor?
  4472.       self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue) if !@battler.actor?
  4473.       @battler.sv.set_graphics(self.bitmap.width, self.bitmap.height)
  4474.     end
  4475.     anime_off if @battler.sv.anime_off
  4476.     self.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
  4477.     self.opacity = @battler.sv.opacity if @battler_visible
  4478.     set_process_timing(@battler.sv.timing) if @battler && @battler.sv.timing != []
  4479.   end
  4480.   #--------------------------------------------------------------------------
  4481.   # ● 更新位置 ★再定义
  4482.   #--------------------------------------------------------------------------
  4483.   def update_position
  4484.     @real_x = @battler.sv.x / 100
  4485.     @real_y = (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust)/ 100
  4486.        if battler.is_a?(Game_Summon)  #如果是召喚成員 則x軸減40
  4487.            @real_x = @real_x -40#($fu_wan_actor.sv.x / 100) - 40 #
  4488.          # @real_y = ($fu_wan_actor.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust)/ 100
  4489.           end
  4490.     self.x = @real_x - $sv_camera.x
  4491.     self.y = @real_y - $sv_camera.y
  4492.     self.z = @battler.sv.z - @battler.sv.c / 100
  4493.     if @battler.sv.h <= 0
  4494.       self.x += $sv_camera.sx / 100
  4495.       self.y += $sv_camera.sy / 100
  4496.     end  
  4497.     self.x *= $sv_camera.zoom
  4498.     self.y *= $sv_camera.zoom
  4499.   end
  4500.   #--------------------------------------------------------------------------
  4501.   # ● 更新原点 ★再定义
  4502.   #--------------------------------------------------------------------------
  4503.   def update_origin
  4504.     return if !bitmap or @battler.sv.collapse
  4505.     self.ox = @battler.sv.ox
  4506.     self.oy = @battler.sv.oy
  4507.     self.angle = @battler.sv.angle
  4508.     self.zoom_x = @battler.sv.zoom_x * $sv_camera.zoom
  4509.     self.zoom_y = @battler.sv.zoom_y * $sv_camera.zoom
  4510.     self.mirror = @battler.sv.mirror if !@graphic_mirror_flag
  4511.     self.mirror = !@battler.sv.mirror if @graphic_mirror_flag
  4512.   end
  4513.   #--------------------------------------------------------------------------
  4514.   # ● 更新影图像
  4515.   #--------------------------------------------------------------------------
  4516.   def update_shadow
  4517.     @shadow.visible = @battler.sv.shadow_visible
  4518.     @shadow.opacity = @battler.sv.opacity if @battler.sv.opacity_data[3]
  4519.     @shadow.opacity = self.opacity if !@battler.sv.opacity_data[3]
  4520.     @shadow.x = @real_x - $sv_camera.x
  4521.     @shadow.y = (@battler.sv.y - @battler.sv.c)/ 100 - $sv_camera.y
  4522.     @shadow.z = @battler.sv.z - 10
  4523.     @shadow.zoom_x = $sv_camera.zoom
  4524.     @shadow.zoom_y = $sv_camera.zoom
  4525.     @shadow.x += $sv_camera.sx / 100
  4526.     @shadow.y += $sv_camera.sy / 100
  4527.     @shadow.x *= $sv_camera.zoom
  4528.     @shadow.y *= $sv_camera.zoom
  4529.     @shadow.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  4530.   end
  4531.   #--------------------------------------------------------------------------
  4532.   # ● 更新气球
  4533.   #--------------------------------------------------------------------------
  4534.   def update_balloon
  4535.     if @battler.sv.balloon_data == [] && @balloon
  4536.       @balloon_data = []
  4537.       @balloon.dispose
  4538.       return @balloon = nil
  4539.     elsif @battler.sv.balloon_data != [] && @battler.sv.balloon_data != @balloon_data
  4540.       @balloon_data = @battler.sv.balloon_data
  4541.       @balloon = Sprite.new(self.viewport)
  4542.       @balloon.bitmap = Cache.system("Balloon")
  4543.       @balloon.zoom_x = @balloon_data[3]
  4544.       @balloon.zoom_y = @balloon_data[3]
  4545.       @balloon.ox = 32 if @battler.sv.mirror
  4546.       @balloon.oy = 16
  4547.       @balloon_count = 0
  4548.     end
  4549.     return if !@balloon
  4550.     @balloon.opacity = self.opacity
  4551.     @balloon.x = self.x
  4552.     @balloon.y = self.y - @battler.sv.ch * $sv_camera.zoom
  4553.     @balloon.z = self.z + 20
  4554.     @balloon.src_rect.set(32 + @balloon_count / @balloon_data[2] * 32, @balloon_data[1] * 32, 32, 32) if @balloon_count % @balloon_data[2] == 0
  4555.     @balloon.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  4556.     @balloon_count += 1
  4557.     @balloon_count = 0 if @balloon_count == @balloon_data[2] * 7
  4558.   end
  4559.   #--------------------------------------------------------------------------
  4560.   # ● 更新色调变更
  4561.   #--------------------------------------------------------------------------
  4562.   def update_color
  4563.     color_set if @battler.sv.color_set != []
  4564.     return if @color_data == nil
  4565.     @color_data[4] -= 1
  4566.     if @color_data[4] == 0 && @color_data[5] != 0
  4567.       @color_data[4] = @color_data[5]
  4568.       @color_data[5] = 0
  4569.       @color_data[6] = [0,0,0,0]
  4570.     elsif @color_data[4] == 0
  4571.       @remain_color_data = @color_data
  4572.       @battler.sv.color = @color_data.dup
  4573.       return @color_data = nil
  4574.     end  
  4575.     for i in 0..3
  4576.       @color_data[i] = (@color_data[i] * (@color_data[4] - 1) + @color_data[6][i]) / @color_data[4]
  4577.     end  
  4578.     @battler.sv.color = @color_data.dup
  4579.     self.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3])
  4580.   end
  4581.   #--------------------------------------------------------------------------
  4582.   # ● 更新残像
  4583.   #--------------------------------------------------------------------------
  4584.   def update_mirage
  4585.     if @battler.sv.mirage == [] && @mirages
  4586.       @mirage_data = []
  4587.       for mirage in @mirages do mirage.dispose end
  4588.       return @mirages = nil
  4589.     elsif @battler.sv.mirage != [] && @battler.sv.mirage != @mirage_data
  4590.       @mirage_data = @battler.sv.mirage
  4591.       @mirages = []
  4592.       for i in 0...@mirage_data[1] do @mirages[i] = Sprite.new(self.viewport) end
  4593.       @mirage_count = 0
  4594.     end
  4595.     return if !@mirages
  4596.     @mirage_count += 1
  4597.     @mirage_count = 0 if @mirage_count == @mirage_data[2] * @mirages.size
  4598.     for i in [email]0...@mirages.size[/email]
  4599.       mirage_body(@mirages[i], @mirage_data[4]) if @mirage_count == 1 + i * @mirage_data[2]
  4600.     end
  4601.   end
  4602.   #--------------------------------------------------------------------------
  4603.   # ● 残像本体
  4604.   #--------------------------------------------------------------------------
  4605.   def mirage_body(body, opacity)
  4606.     body.bitmap = self.bitmap.dup
  4607.     body.x = self.x
  4608.     body.y = self.y
  4609.     body.ox = self.ox
  4610.     body.oy = self.oy
  4611.     body.z = self.z - 20
  4612.     body.mirror = self.mirror
  4613.     body.angle = self.angle
  4614.     body.opacity = opacity * self.opacity / 255
  4615.     body.zoom_x = self.zoom_x
  4616.     body.zoom_y = self.zoom_y   
  4617.     body.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
  4618.     body.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  4619.   end   
  4620.   #--------------------------------------------------------------------------
  4621.   # ● 更新下一个动画
  4622.   #--------------------------------------------------------------------------
  4623.   def update_next_anime
  4624.     return if !@next_anime
  4625.     for anime in @next_anime
  4626.       anime.update
  4627.       anime.set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y) if @horming
  4628.       anime.dispose if !anime.animation?
  4629.       @next_anime.delete(anime) if !anime.animation?
  4630.     end  
  4631.   end
  4632.   #--------------------------------------------------------------------------
  4633.   # ● 更新帧数
  4634.   #--------------------------------------------------------------------------
  4635.   alias update_sprite_battler_n03 update
  4636.   def update
  4637.     @battler.sv.update if @battler
  4638.     update_sprite_battler_n03
  4639.     update_next_anime
  4640.     update_shadow  if @battler && @shadow
  4641.     update_mirage  if @battler
  4642.     update_balloon if @battler
  4643.     update_remove if @battler && @removing && @battler.sv.change_up
  4644.   end
  4645.   #--------------------------------------------------------------------------
  4646.   # ● 战斗动画消除
  4647.   #--------------------------------------------------------------------------
  4648.   def anime_off
  4649.     @battler.sv.anime_off = false
  4650.     dispose_animation
  4651.     for anime in @next_anime do anime.dispose_animation end if @next_anime
  4652.   end
  4653.   #--------------------------------------------------------------------------
  4654.   # ● 角色替换
  4655.   #--------------------------------------------------------------------------
  4656.   def remove
  4657.     @battler.sv.start_action(@battler.sv.remove_action)
  4658.     $sv_camera.wait = 40
  4659.     @battler.sv.add_action("eval('set_change')")
  4660.     @removing = true
  4661.   end
  4662.   #--------------------------------------------------------------------------
  4663.   # ● 更新角色替换
  4664.   #--------------------------------------------------------------------------
  4665.   def update_remove
  4666.     @battler.sv.change_up = false
  4667.     @removing = false
  4668.     @battler = nil
  4669.   end  
  4670.   #--------------------------------------------------------------------------
  4671.   # ● 加入角色
  4672.   #--------------------------------------------------------------------------
  4673.   def join(join_battler)
  4674.     $sv_camera.wait = 30
  4675.     @battler = join_battler
  4676.     @battler_name = @battler.character_name
  4677.     @battler_index = @battler.character_index
  4678.     @battler_graphic_file_index = @battler.sv.graphic_file_index
  4679.     self.bitmap = Cache.character(@battler_name)
  4680.     @battler.sv.setup(self.bitmap.width, self.bitmap.height, true)
  4681.     create_shadow
  4682.     init_visibility
  4683.   end
  4684.   #--------------------------------------------------------------------------
  4685.   # ● 通常的设定返回 ★再定义
  4686.   #--------------------------------------------------------------------------
  4687.   def revert_to_normal
  4688.     self.blend_type = 0
  4689.     self.opacity = 255
  4690.   end
  4691.   #--------------------------------------------------------------------------
  4692.   # ● 更新战斗不能效果
  4693.   #--------------------------------------------------------------------------
  4694.   alias update_collapse_sprite_battler_n03 update_collapse
  4695.   def update_collapse
  4696.     return if @battler.sv.state(1) != "敌人战斗不能"
  4697.     update_collapse_sprite_battler_n03
  4698.     @battler.sv.weapon_visible = false
  4699.   end
  4700.   #--------------------------------------------------------------------------
  4701.   # ● 更新Boss战斗不能效果 ★再定义
  4702.   #--------------------------------------------------------------------------
  4703.   def update_boss_collapse
  4704.     @effect_duration = @battler.sv.ch if @effect_duration >= @battler.sv.ch
  4705.     alpha = @effect_duration * 120 / @battler.sv.ch
  4706.     self.ox = @battler.sv.cw / 2 + @effect_duration % 2 * 4 - 2
  4707.     self.blend_type = 1
  4708.     self.color.set(255, 255, 255, 255 - alpha)
  4709.     self.opacity = alpha
  4710.     self.src_rect.y -= 1
  4711.     Sound.play_boss_collapse2 if @effect_duration % 20 == 19
  4712.   end
  4713.   #--------------------------------------------------------------------------
  4714.   # ● 另个精灵的定时处理
  4715.   #--------------------------------------------------------------------------
  4716.   def set_process_timing(timing_data)
  4717.     for data in timing_data
  4718.       set_timing(data[0],data[1])
  4719.     end
  4720.     @battler.sv.timing = []
  4721.   end
  4722.   #--------------------------------------------------------------------------
  4723.   # ● 定时的处理
  4724.   #--------------------------------------------------------------------------
  4725.   def set_timing(se_flag, data)
  4726.     @ani_rate = 4
  4727.     data.se.play if se_flag
  4728.     case data.flash_scope
  4729.     when 1 ;self.flash(data.flash_color, data.flash_duration * @ani_rate)
  4730.     when 2 ;viewport.flash(data.flash_color, data.flash_duration * @ani_rate) if viewport
  4731.     when 3 ;self.flash(nil, data.flash_duration * @ani_rate)
  4732.     end
  4733.   end
  4734.   #--------------------------------------------------------------------------
  4735.   # ● 色调变更
  4736.   #--------------------------------------------------------------------------
  4737.   def color_set
  4738.     set = @battler.sv.color_set
  4739.     @battler.sv.color_set= []
  4740.     set[4] = 1 if set[4] == 0
  4741.     @remain_color_data = [0,0,0,0] if @remain_color_data == nil
  4742.     @color_data = @remain_color_data
  4743.     @color_data[4] = set[4]
  4744.     @color_data[5] = set[5]
  4745.     @color_data[6] = set
  4746.   end
  4747.   #--------------------------------------------------------------------------
  4748.   # ● 释放
  4749.   #--------------------------------------------------------------------------
  4750.   alias dispose_sprite_battler_n03 dispose
  4751.   def dispose
  4752.     dispose_sprite_battler_n03
  4753.     @shadow.dispose if @shadow != nil
  4754.     @balloon.dispose if @balloon != nil
  4755.     for mirage in @mirages do mirage.dispose end if @mirages != nil
  4756.     for anime in @next_anime do anime.dispose end if @next_anime
  4757.   end
  4758. end
  4759.  
  4760.  
  4761. #==============================================================================
  4762. # ■ Spriteset_Battle
  4763. #------------------------------------------------------------------------------
  4764. #  这是一个类结合了精灵的战斗画面。
  4765. #==============================================================================
  4766. class Spriteset_Battle
  4767.   #--------------------------------------------------------------------------
  4768.   # ● 战斗背景(地)创建精灵 ★再定义
  4769.   #--------------------------------------------------------------------------
  4770.   def create_battleback1
  4771.     @back1_sprite = Sprite_Battle_Back.new(@viewport1, 1, battleback1_name)
  4772.     @back1_sprite.set_graphics(battleback1_bitmap) if battleback1_name != nil
  4773.     @back1_sprite.z = 0
  4774.   end
  4775.   #--------------------------------------------------------------------------
  4776.   # ● 战斗背景(壁)创建精灵 ★再定义
  4777.   #--------------------------------------------------------------------------
  4778.   def create_battleback2
  4779.     @back2_sprite = Sprite_Battle_Back.new(@viewport1, 2, battleback2_name)
  4780.     @back2_sprite.set_graphics(battleback2_bitmap) if battleback2_name != nil
  4781.     @back2_sprite.z = 1
  4782.   end
  4783.   #--------------------------------------------------------------------------
  4784.   # ● 创建角色精灵 ★再定义
  4785.   #--------------------------------------------------------------------------
  4786.   def create_actors
  4787.     @actor_sprites = []
  4788.     for i in 0...$game_party.max_battle_members  # max_battle_members參戰角色的最大數
  4789.       @actor_sprites[i] = Sprite_Battler.new(@viewport1, $game_party.members[i])
  4790.     end
  4791.     @effect_sprites = Spriteset_Sideview.new(@viewport1)  #处理战斗画面的精灵的类
  4792.   end
  4793.   #--------------------------------------------------------------------------
  4794.   # ● 更新角色精灵 ★再定义
  4795.   #--------------------------------------------------------------------------
  4796.   def update_actors
  4797.     @actor_sprites.each_with_index do |sprite, i|
  4798.       sprite_join($game_party.members[i], sprite) if sprite.battler == nil && sprite.battler != $game_party.members[i]
  4799.       sprite.remove if sprite.battler != nil && !sprite.removing && sprite.battler != $game_party.members[i]
  4800.       sprite.update
  4801.     end
  4802.     @effect_sprites.update
  4803.     update_program
  4804.   end
  4805.   #--------------------------------------------------------------------------
  4806.   # ● 加入精灵成员
  4807.   #--------------------------------------------------------------------------
  4808.   def sprite_join(member, sprite)
  4809.     for sp in @actor_sprites
  4810.       sp.update_remove if member == sp.battler && !sp.battler.sv.change_up
  4811.     end
  4812.     sprite.join(member)
  4813.   end
  4814.   #--------------------------------------------------------------------------
  4815.   # ● 更新战斗程序
  4816.   #--------------------------------------------------------------------------
  4817.   def update_program
  4818.     return if $sv_camera.program_scroll == []
  4819.     for data in  $sv_camera.program_scroll
  4820.       @back1_sprite.start_back_data(data) if data[2] == 1
  4821.       @back2_sprite.start_back_data(data) if data[2] == 2
  4822.     end
  4823.     $sv_camera.program_scroll = []
  4824.   end
  4825.   #--------------------------------------------------------------------------
  4826.   # ● 实行打击时的战斗动画
  4827.   #--------------------------------------------------------------------------
  4828.   def set_hit_animation(battler, weapon_index, hit_targets, miss)
  4829.     @effect_sprites.set_hit_animation(battler, weapon_index, hit_targets, miss)
  4830.   end
  4831.   #--------------------------------------------------------------------------
  4832.   # ● 伤害POP
  4833.   #--------------------------------------------------------------------------
  4834.   def set_damage_pop(target)
  4835.     @effect_sprites.set_damage_pop(target)
  4836.   end
  4837.   #--------------------------------------------------------------------------
  4838.   # ● 释放
  4839.   #--------------------------------------------------------------------------
  4840.   alias dispose_spriteset_battle_n03 dispose
  4841.   def dispose
  4842.     dispose_spriteset_battle_n03
  4843.     @effect_sprites.dispose
  4844.   end
  4845. end
  4846.  
  4847. #==============================================================================
  4848. # ■ Window_BattleLog
  4849. #------------------------------------------------------------------------------
  4850. #  进行战斗的实况显示窗口。
  4851. #==============================================================================
  4852. class Window_BattleLog < Window_Selectable
  4853.   #--------------------------------------------------------------------------
  4854.   # ● 等待 ★再定义
  4855.   #--------------------------------------------------------------------------
  4856.   def wait
  4857.   end
  4858.   #--------------------------------------------------------------------------
  4859.   # ● 等待和清除 ★再定义
  4860.   #--------------------------------------------------------------------------
  4861.   def wait_and_clear
  4862.     $sv_camera.wait = 10
  4863.   end
  4864.   #--------------------------------------------------------------------------
  4865.   # ● 显示动作结果 ★再定义
  4866.   #--------------------------------------------------------------------------
  4867.   def display_action_results(target, item)
  4868.     if target.result.used
  4869.       last_line_number = line_number
  4870.       display_critical(target, item)
  4871.       display_damage(target, item)
  4872.       display_affected_status(target, item)
  4873.       display_failure(target, item)
  4874.     end
  4875.     off if !N03::BATTLE_LOG
  4876.  
  4877.   end
  4878.   #--------------------------------------------------------------------------
  4879.   # ● 隐藏窗口
  4880.   #--------------------------------------------------------------------------
  4881.   def off
  4882.     @back_sprite.visible = self.visible = false
  4883.   end
  4884. end
  4885. #==============================================================================
  4886. # ■ Game_Interpreter
  4887. #------------------------------------------------------------------------------
  4888. #  这是一个事件命令的解释器。
  4889. #==============================================================================
  4890. class Game_Interpreter
  4891.   #--------------------------------------------------------------------------
  4892.   # ● 开关的操作
  4893.   #--------------------------------------------------------------------------
  4894.   alias command_121_game_interpreter_n03 command_121
  4895.   def command_121
  4896.     command_121_game_interpreter_n03
  4897.     $sv_camera.program_check
  4898.   end
  4899. end


RUBY 代码复制
  1. 召喚
  2.  
  3. =begin
  4. ==============================================================================
  5.  ** Battle Summons
  6.  Author: Tsukihime
  7.  Date: Jul 10, 2012
  8. ------------------------------------------------------------------------------
  9.  ** Change log
  10.  Jul 10
  11.    -added summon_only_battle to game system as a flag
  12.  Jun 24
  13.    -fixed enemy summoning: only refresh newly summoned sprites
  14.  Jun 12
  15.    -assign specific summons to items/skills
  16.    -summon ID is now the same as the actor ID
  17.    -added remove summon functionality.
  18.  May 30
  19.    -summon limits and type limits added
  20.    -summons recover all after battle
  21.    -summon implemented as a skill
  22.    -added Command Setup compatibility
  23.    -added enemy summons
  24.    -summon equip menu added
  25.  May 20
  26.    -option to remove all actors when summon appears
  27.    -actors will return when the summon disappears
  28.  May 19
  29.    -Created summon scene/window
  30.    -added summon command
  31.    -summons are now treated as actors and level accordingly
  32.  May 18
  33.    -Initial release
  34. ------------------------------------------------------------------------------
  35.  Summon battlers to fight for you!
  36.  
  37.  In the configuration, designate skills that should be treated as
  38.  "summon skills". Then set up the skill in the database.
  39.  
  40.  Enemies can also be set up to use the summon skill.
  41.  They will need a list of enemy ID's to choose from.
  42.  Tag enemies with the enemy ID's they should summon
  43.  
  44.     <summons: 1,2,3>
  45.     
  46.  Then give them the summon skill in their action list
  47.  
  48.  To add a summon to your party, use the script call
  49.  
  50.     $game_party.add_summon(summon_id)
  51.     
  52.  To remove a summon from your party,
  53.  
  54.     $game_party.remove_summon(summon_id)
  55.     
  56.  To force summon a party to battle, use the call
  57.  
  58.     $game_summons.summon(id)
  59. ==============================================================================
  60. =end
  61. $imported = {} if $imported.nil?
  62. $imported["Tsuki_BattleSummon"] = true
  63. #==============================================================================
  64. # ** Configuration.
  65. #==============================================================================
  66. module Tsuki
  67.  
  68.   module Battle_Summon
  69.     #召喚技能編號或道具編號
  70.     Summon_Skill = [166]
  71.     Summon_Item = [111,112]
  72.     #動物技能
  73.     Animal_Skill = [218]
  74.     Animal_Item = [211,212]
  75.     #釋放技能或道具
  76.     Release_Skill = [195]
  77.     Release_Item = [111,112]
  78.      #補捉技能或道具
  79.     Catch_Skill = [196]
  80.     Catch_Item = [111,112]
  81.     # variable used to determine the number of turns summoned
  82.     Default_Summon_Turns = 3
  83.     Summon_Turn_Variable = 1
  84.  
  85.     Summon_Limit = 4      # 召喚數最大值
  86.     Summon_Type_Limit = 4 # How many different summons you can have in battle召喚種類最大值
  87.  
  88.     # 召喚成功訊息
  89.     # format [user name], [summon name]
  90.     Summon_Message = "%s 召喚了 %s !"
  91.  
  92.     # Should the summon command be shown in battle?
  93.     Enable_Summon_Command = false
  94.  
  95.     # 召喚後使用者是否消失
  96.     Summon_Only_Battle = false
  97.     #動物及保鏢的id區分 設定角色為16以後均為動物
  98.     Animal_Id = 16
  99.     # Monster Hunter add-on requires that script. It adds all captured monsters
  100.     # to your summon list rather than the party list.
  101.     Monster_Hunter_Addon = false
  102.  
  103.   #==============================================================================
  104.   # ** 是否為召喚效果
  105.   #==============================================================================
  106.     def self.summon_effect?(item)
  107.       return Summon_Skill.include?(item.id) if item.is_a?(RPG::Skill)#是否召喚技能
  108.       return Summon_Item.include?(item.id) if item.is_a?(RPG::Item)#是否為召喚道具
  109.       return false
  110.     end
  111.   #==============================================================================
  112.   # ** 是否為動物效果
  113.   #==============================================================================
  114.       def self.animal_effect?(item)
  115.       return Animal_Skill.include?(item.id) if item.is_a?(RPG::Skill)#是否動物技能
  116.       return Animal_Item.include?(item.id) if item.is_a?(RPG::Item)#是否動物道具
  117.       return false
  118.     end
  119.   #==============================================================================
  120.   # ** 是否為釋放效果
  121.   #==============================================================================
  122.       def self.release_effect?(item)
  123.       return Release_Skill.include?(item.id) if item.is_a?(RPG::Skill)#是否釋放技能
  124.       return Release_Item.include?(item.id) if item.is_a?(RPG::Item)#是否釋放道具
  125.       return false
  126.     end
  127.   #==============================================================================
  128.   # ** 是否為補捉效果
  129.   #==============================================================================
  130.       def self.catch_effect?(item)
  131.       return Catch_Skill.include?(item.id) if item.is_a?(RPG::Skill)#是否補捉技能
  132.       return Catch_Item.include?(item.id) if item.is_a?(RPG::Item)#是否補捉道具
  133.       return false
  134.     end
  135.  
  136.     Enemy_Summon_Regex = /<summons:?\s*(.*)\s*>/i
  137.     Summon_Limit_Regex = /<summon-max:?\s*(\d+)\s*>/i
  138.     Summon_ID_Regex = /<summon:?\s*(\d+)\s*>/i
  139.   end
  140. end
  141.  
  142. module RPG
  143.  
  144.   class Actor < BaseItem
  145.  
  146.     def summon_limit
  147.       return @summon_limit unless @summon_limit.nil?
  148.       res = Tsuki::Battle_Summon::Summon_Limit_Regex.match(self.note)
  149.       return @summon_limit = res ? res[1].to_i : 99
  150.     end
  151.   end
  152.  
  153.   class Enemy < BaseItem
  154.  
  155.     def enemy_summons
  156.       return @enemy_summon unless @enemy_summon.nil?
  157.       return @enemy_summon = load_notetags_enemy_summons
  158.     end
  159.  
  160.     def load_notetags_enemy_summons
  161.       summons = []
  162.       self.note.split(/[\r\n]+/).each do |line|
  163.         case line
  164.         when Tsuki::Battle_Summon::Enemy_Summon_Regex
  165.           $1.scan(/\d+/).each {|id| summons << id.to_i}
  166.         end
  167.       end
  168.       return summons
  169.     end
  170.   end
  171.  
  172.   class UsableItem < BaseItem
  173.  
  174.     def summon_id
  175.       return @summon_id unless @summon_id.nil?
  176.       res = Tsuki::Battle_Summon::Summon_ID_Regex.match(self.note)
  177.       return @summon_id = res ? res[1].to_i : 0
  178.     end
  179.   end
  180. end
  181.  
  182. module DataManager
  183.  
  184.   class << self
  185.     alias :tsuki_battle_summon_create_objects :create_game_objects
  186.     alias :tsuki_battle_summon_make_save_contents :make_save_contents
  187.     alias :tsuki_battle_summon_extract_save_contents :extract_save_contents
  188.   end
  189.  
  190.   def self.create_game_objects
  191.     tsuki_battle_summon_create_objects
  192.     $game_summons = Game_Summons.new
  193.   end
  194.  
  195.   def self.make_save_contents
  196.     contents = tsuki_battle_summon_make_save_contents
  197.     contents[:summons]        = $game_summons
  198.     contents
  199.   end
  200.  
  201.   def self.extract_save_contents(contents)
  202.     tsuki_battle_summon_extract_save_contents(contents)
  203.     $game_summons = contents[:summons]
  204.   end
  205. end
  206.  
  207. module BattleManager
  208.   class << self
  209.     alias :tsuki_battle_summon_turn_end :turn_end
  210.     alias :tsuki_battle_summon_gain_exp :gain_exp
  211.     alias :tsuki_battle_summon_battle_end :battle_end
  212.   end
  213.  
  214.   def self.turn_end
  215.     p "動物回合結束"
  216.     tsuki_battle_summon_turn_end
  217.     $game_summons.update_summons
  218.   end
  219.  
  220.   def self.gain_exp
  221.     tsuki_battle_summon_gain_exp
  222.     $game_summons.battle_members.each do |summon|
  223.       summon.gain_exp($game_troop.exp_total)
  224.     end
  225.     wait_for_message
  226.   end
  227.  
  228.   def self.battle_end(result)
  229.     tsuki_battle_summon_battle_end(result)
  230.     $game_summons.on_battle_end
  231.   end
  232. end
  233.  
  234. class Spriteset_Battle
  235.   def refresh_enemies
  236.     new_enemies = $game_troop.members.reverse.collect do |enemy|
  237.       @enemy_sprites << Sprite_Battler.new(@viewport1, enemy)  if enemy.summoned?
  238.     end
  239.   end
  240. end
  241.  
  242. class Game_System
  243.  
  244.   attr_accessor :summon_only_battle
  245.  
  246.   alias :th_battle_summon_init_system :initialize
  247.   def initialize
  248.     th_battle_summon_init_system
  249.     @summon_only_battle = Tsuki::Battle_Summon::Summon_Only_Battle
  250.   end
  251. end
  252.  
  253. class Game_Action
  254.  
  255.   attr_accessor :summon_id #id of summon to call
  256.  
  257.   alias :th_battle_summon_clear_action :clear
  258.   def clear
  259.     th_battle_summon_clear_action
  260.     @summon_id = 0
  261.   end
  262. end
  263.  
  264. class Game_ActionResult
  265.  
  266.     attr_accessor :called_summon
  267.  
  268.     alias :th_battle_summon_clear_results :clear
  269.     def clear
  270.       th_battle_summon_clear_results
  271.       clear_summon_result
  272.     end
  273.  
  274.     def clear_summon_result
  275.       @called_summon = nil
  276.     end
  277.  
  278.     def called_summon_text
  279.       if @called_summon
  280.         fmt = Tsuki::Battle_Summon::Summon_Message
  281.         sprintf(fmt, @battler.name, @called_summon.name)
  282.       else
  283.         ""
  284.       end
  285.     end
  286.   end
  287.  
  288. class Game_Battler < Game_BattlerBase
  289.    include  Tsuki::Battle_Summon
  290.   #--------------------------------------------------------------------------
  291.   # ● 是否為召喚動作
  292.   #--------------------------------------------------------------------------
  293.   def is_summon_action?(item)
  294.     return false unless item
  295.     Tsuki::Battle_Summon.summon_effect?(item)
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ● 是否為動物召喚動作
  299.   #--------------------------------------------------------------------------
  300.   def is_animal_action?(item)
  301.     return false unless item
  302.     Tsuki::Battle_Summon.animal_effect?(item)
  303.   end
  304.   #--------------------------------------------------------------------------
  305.   # ● 是否為釋放動作
  306.   #--------------------------------------------------------------------------
  307.    def is_release_action?(item)
  308.     return false unless item
  309.     Tsuki::Battle_Summon.release_effect?(item)
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● 是否為補捉動作
  313.   #--------------------------------------------------------------------------
  314.   def is_catch_action?(item)
  315.     return false unless item
  316.     Tsuki::Battle_Summon.catch_effect?(item)
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # ● 重寫  技能/物品的效果
  320.   #--------------------------------------------------------------------------
  321.   alias :th_summon_battler_item_apply :item_apply
  322.   def item_apply(user, item)
  323.     th_summon_battler_item_apply(user, item)
  324.     summon_battler(user, item) if is_summon_action?(item)
  325.     summon_battler(user, item) if is_animal_action?(item)
  326.     release_battler(user, item) if is_release_action?(item)
  327.     catch_enemy(user, item) if is_catch_action?(item)
  328.          make_miss_popups(user, item)#配合Ace_Battle_Engine腳本 移到腳本最後
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # ● 召喚戰鬥者
  332.   #--------------------------------------------------------------------------
  333.   def summon_battler(user, item)
  334.     called_summon = user.friends_unit.summon_battler(user.actions[0].summon_id)
  335.  
  336.  
  337.   #called_summon = $game_troop.summon_battler(user.actions[0].summon_id)  if Summon1_Skill
  338.     if called_summon
  339.       @result.success = true
  340.       @result.called_summon = called_summon
  341.  
  342.     end
  343.   end
  344.   #--------------------------------------------------------------------------
  345.   # ● 釋放怪物
  346.   #--------------------------------------------------------------------------
  347.    def release_battler(user, item)
  348.      enemy_id =  user.recruit_enemy
  349.    # called_summon = $game_troop.summon_battler(3)  
  350.        called_summon = $game_troop.summon_battler(enemy_id)  
  351.     if called_summon
  352.       @result.success = true
  353.       @result.called_summon = called_summon
  354.       user.recruit_enemy = 0 #清空被補怪物
  355.     end
  356.   end
  357.  
  358.   #--------------------------------------------------------------------------
  359.   # ● 補捉怪物
  360.   #--------------------------------------------------------------------------
  361. def   catch_enemy(user, item)
  362.   if $fu_wan_target.hp_rate <= 0.7
  363.   user.recruit_enemy = $fu_wan_target.enemy_id
  364.    @result.success = true
  365.   $fu_wan_target.add_state(56)
  366.   $fu_wan_target.hide
  367.   end
  368. end
  369.   #--------------------------------------------------------------------------
  370.   # ● 附加新的狀態
  371.   #--------------------------------------------------------------------------
  372.   alias summon_add_new_state add_new_state
  373.   def add_new_state(state_id)
  374. #    die if state_id ==56
  375.     summon_add_new_state(state_id)
  376.   end
  377.  
  378.  
  379. end
  380.  
  381. class Game_BattlerBase
  382.  
  383.   #--------------------------------------------------------------------------
  384.   # ● 檢查是否含有無法戰鬥狀態
  385.   #--------------------------------------------------------------------------
  386.    def death_state?
  387.     state?(death_state_id) #|| state?(56)
  388.    end
  389.  
  390. end
  391.  
  392. class Game_Enemy < Game_Battler
  393.  
  394.   attr_accessor :just_summoned
  395.   alias :th_battle_summon_init_enemy :initialize
  396.   def initialize(index, enemy_id)
  397.     th_battle_summon_init_enemy(index, enemy_id)
  398.     @just_summoned = false
  399.     init_summons
  400.   end
  401.  
  402.   def summoned?
  403.     if @just_summoned
  404.       @just_summoned = false
  405.       return true
  406.     end
  407.     return false
  408.   end
  409.  
  410.   def init_summons
  411.     @summons = enemy.enemy_summons
  412.   end
  413.  
  414.   alias :th_battle_summon_make_enemy_actions :make_actions
  415.   def make_actions
  416.     th_battle_summon_make_enemy_actions
  417.     @actions.each do |action|
  418.       make_summon_action(action) if is_summon_action?(action.item)
  419.     end
  420.   end
  421.  
  422.   # pick a random target to draw a random magic from
  423.   def make_summon_action(action)
  424.     action.summon_id = @summons.sample
  425.   end
  426. end
  427.  
  428. class Game_Summon < Game_Actor
  429.  
  430.   attr_reader :summon_id
  431.   attr_accessor :summon_turns
  432.   attr_accessor :summon_index
  433.   def initialize(actor_id)
  434.     super(actor_id)
  435.     @summon_id = actor_id
  436.     @summon_turns = 0
  437.     @summon_index = 0 # 0 if not summoned
  438.     @dupe = false
  439.   end
  440.  
  441.   def can_dupe?
  442.     @dupe
  443.   end
  444.  
  445.   def update_summon
  446.     p "  @summon_turns"
  447.     p   @summon_turns
  448.     @summon_turns -= 1
  449.     if @summon_turns <= 0
  450.       $game_summons.unsummon(@summon_id)
  451.     end
  452.   end
  453.  
  454.   def die
  455.     $game_summons.unsummon(@summon_id)
  456.     super
  457.   end
  458.  
  459.   def index
  460.     $game_summons.members.index(self)
  461.   end
  462. end
  463.  
  464. class Game_Summons < Game_Unit
  465.   include Tsuki::Battle_Summon
  466.  
  467.   def initialize
  468.     @data = [nil]
  469.     @ids = [nil]
  470.     @dispatched = []
  471.     @summon_count = 0 #how many summons are on the field
  472.     @limit = Summon_Limit
  473.     @type_limit = Summon_Type_Limit
  474.     @menu_actor_id = 0
  475.   end
  476.  
  477.   def [](summon_id)
  478.     @data[summon_id] ||= Game_Summon.new(summon_id)
  479.   end
  480.  
  481.   def members
  482.     in_battle ? battle_members : all_summons
  483.   end
  484.  
  485.   def all_summons
  486.     @data.select {|summon| !summon.nil?}
  487.   end
  488.  
  489.   # summons that are currently in battle
  490.   def battle_members
  491.     @dispatched.collect {|id| @data[id]}
  492.   end
  493.  
  494.   def summon_actor(id)
  495.     return if @ids.include?(id)
  496.     summon = Game_Summon.new(id)
  497.     @data[id] = summon
  498.     @ids << id
  499.   end
  500.  
  501.   def unsummon(id)
  502.     return unless @dispatched.include?(id)
  503.     @dispatched.delete_at(@data[id].summon_index - 1)
  504.     @data[id].summon_index = 0
  505.     @summon_count -= 1
  506.   end
  507.  
  508.   def summon(id)
  509.     return 0 unless @data[id]
  510.     @data[id].summon_turns = [Default_Summon_Turns, $game_variables[Summon_Turn_Variable]].max
  511.     @data[id].make_actions
  512.     @summon_count += 1
  513.     @data[id].summon_index = @summon_count
  514.     @dispatched << id
  515.     return id
  516.   end
  517.  
  518.   def can_summon?(summon_id)
  519.     return false if @data[summon_id].nil?
  520.     return false if @summon_count >= @limit || @dispatched.uniq.size >= @type_limit
  521.     return false if @dispatched.include?(summon_id) && !@data[summon_id].can_dupe?
  522.     return true
  523.   end
  524.  
  525.   def update_summons
  526.     members.each {|summon| summon.update_summon}
  527.   end
  528.  
  529.   def on_battle_end
  530.     alive_members.each {|summon| summon.recover_all }
  531.     @dispatched = []
  532.     @summon_count = 0
  533.   end
  534.  
  535.   def menu_actor
  536.     @data[@menu_actor_id] || members[0]
  537.   end
  538.  
  539.   def menu_actor=(summon)
  540.     return unless summon
  541.     @menu_actor_id = summon.summon_id
  542.   end
  543.  
  544.   def menu_actor_next
  545.     index = members.index(menu_actor) || -1
  546.     index = (index + 1) % members.size
  547.     self.menu_actor = members[index]
  548.   end
  549.  
  550.   def menu_actor_prev
  551.     index = members.index(menu_actor) || 1
  552.     index = (index + members.size - 1) % members.size
  553.     self.menu_actor = members[index]
  554.   end
  555. end
  556.   #==============================================================================
  557.   # *
  558.   #==============================================================================
  559.  
  560. class Game_Party < Game_Unit
  561.   include Tsuki::Battle_Summon
  562.  
  563.   alias tsuki_battle_summon_initialize_party initialize
  564.   def initialize
  565.     tsuki_battle_summon_initialize_party
  566.     @summons = []
  567.   end
  568.  
  569.   alias tsuki_battle_summon_battle_members battle_members
  570.   def battle_members
  571.     summons = $game_summons.battle_members
  572.     if $game_system.summon_only_battle
  573.       summons.empty? ? tsuki_battle_summon_battle_members : summons
  574.     else
  575.       members = tsuki_battle_summon_battle_members
  576.       members.concat(summons)
  577.     end
  578.   end
  579.  
  580.   def summons
  581.     @summons.collect {|id| $game_summons[id]}
  582.   end
  583.  
  584.   # try to call a summon, return summoned_id if successful
  585.   def summon_battler(id)
  586.     return unless $game_summons.can_summon?(id)
  587.     summoned_id = $game_summons.summon(id)
  588.     return $game_summons[summoned_id]
  589.   end
  590.  
  591.   def add_summon(summon_id)
  592.     $game_summons.summon_actor(summon_id)
  593.     @summons.push(summon_id) unless @summons.include?(summon_id)
  594.   end
  595.  
  596.   def remove_summon(summon_id)
  597.     @summons.delete(summon_id)
  598.   end
  599.  
  600.   def clear_summons
  601.     @summons = []
  602.   end
  603.  
  604.   def on_battle_end
  605.     super
  606.   #  clear_summons
  607.   end
  608.  
  609.     #--------------------------------------------------------------------------
  610.   # ● 取得參戰角色(不納入召喚獸)
  611.   #--------------------------------------------------------------------------
  612.   def battle_members1
  613.     all_members[0, max_battle_members].select {|actor| actor.exist? && !actor.is_a?(Game_Summon) }
  614.   end
  615.  
  616. end
  617.  
  618. class Game_Troop < Game_Unit
  619.  
  620.   # create a new enemy on the spot
  621.   def summon_battler(enemy_id)
  622.     return unless $data_enemies[enemy_id]
  623.     new_enemy = Game_Enemy.new(@enemies.size, enemy_id)
  624.     new_enemy.just_summoned = true
  625.     new_enemy.screen_x = rand(Graphics.width / 2) + 100
  626.     new_enemy.screen_y = rand(Graphics.height / 2) + 100
  627.      new_enemy.add_state(55)
  628.     @enemies.push(new_enemy)
  629.     SceneManager.scene.refresh_enemies
  630.     return new_enemy
  631.   end
  632. end
  633.  
  634. class Game_Interpreter
  635.  
  636.   def add_actor_summon(actor_id)
  637.     $game_party.add_summon(actor_id)
  638.   end
  639.  
  640.   def summon_battler(summon_id)
  641.     $game_party.summon_battler(summon_id)
  642.   end
  643. end
  644.  
  645. #==============================================================================
  646. # ** Menu windows and scenes
  647. #==============================================================================
  648.  
  649. class Window_SummonList < Window_Selectable
  650.     include Tsuki::Battle_Summon
  651.   #--------------------------------------------------------------------------
  652.   # * Object Initialization
  653.   #--------------------------------------------------------------------------
  654.   def initialize(x, y, width, height)
  655.     super
  656.     @actor = nil
  657.     @data = []
  658.     refresh
  659.   end
  660.   #--------------------------------------------------------------------------
  661.   # * Set Category
  662.   #--------------------------------------------------------------------------
  663.   def actor=(actor)
  664.     return if @actor == actor
  665.     @actor = actor
  666.     refresh
  667.     self.oy = 0
  668.   end
  669.   #--------------------------------------------------------------------------
  670.   # * Get Digit Count
  671.   #--------------------------------------------------------------------------
  672.   def col_max
  673.     return 2
  674.   end
  675.  
  676.   def item_height
  677.     104
  678.   end
  679.   #--------------------------------------------------------------------------
  680.   # * Get Number of Items
  681.   #--------------------------------------------------------------------------
  682.   def item_max
  683.     @data ? @data.size : 1
  684.   end
  685.   #--------------------------------------------------------------------------
  686.   # * Get Item
  687.   #--------------------------------------------------------------------------
  688.   def item
  689.     @data && index >= 0 ? @data[index] : nil
  690.   end
  691.   #--------------------------------------------------------------------------
  692.   # * Get Activation State of Selection Item
  693.   #--------------------------------------------------------------------------
  694.   def current_item_enabled?
  695.     enable?(@data[index])
  696.   end
  697.  
  698.   def enable?(summon)
  699.     summon && !$game_summons.battle_members.include?(summon)
  700.   end
  701.  
  702.   def include?(summon)
  703.     return false unless summon && summon.actor_id < Animal_Id #小於動物之id才列出
  704.     return true
  705.   end
  706.  
  707.   def select_last
  708.     select(0)
  709.   end
  710.  
  711.   def make_item_list
  712.     @data = $game_party.summons.select {|item| include?(item) }
  713.     @data.push(nil) if include?(nil)
  714.   end
  715.  
  716.   def draw_item(index)
  717.     summon = @data[index]
  718.     if summon
  719.       rect = item_rect(index)
  720.       rect.width -= 4
  721.       draw_summon_basic(summon, rect.x + 4, rect.y, enable?(summon))
  722.       draw_actor_face(summon, rect.x + rect.width - 96, rect.y)
  723.     end
  724.   end
  725.  
  726.   def draw_summon_name(summon, x, y, enabled, width = 112)
  727.     change_color(normal_color, enabled)
  728.     draw_text(x, y, width, line_height, summon.name)
  729.   end
  730.  
  731.   def draw_summon_basic(summon, x, y, enabled=true, width=172)
  732.     return unless summon
  733.     text_width = text_size(summon.name).width
  734.     draw_summon_name(summon, x, y + line_height*0, enabled)
  735.     draw_actor_level(summon, x, y + line_height*1)
  736.     draw_actor_hp(summon, x, y + line_height*2)
  737.     draw_actor_mp(summon, x, y + line_height*3)
  738.   end
  739.  
  740.   def update_help
  741.     @help_window.set_item(item)
  742.   end
  743.  
  744.   def refresh
  745.     make_item_list
  746.     create_contents
  747.     draw_all_items
  748.   end
  749. end
  750.  
  751.  
  752.  
  753. class Window_SummonCommand < Window_HorzCommand
  754.  
  755.   def window_width
  756.     Graphics.width
  757.   end
  758.  
  759.   def make_command_list
  760.     add_command("Equip", :equip)
  761.     add_command("Skill", :skill)
  762.     add_command("Status", :status)
  763.   end
  764. end
  765.  
  766. class Scene_Summons  < Scene_MenuBase
  767.  
  768.   def start
  769.     super
  770.     create_summon_command
  771.     create_summon_window
  772.   end
  773.  
  774.   def create_summon_command
  775.     @summon_command = Window_SummonCommand.new(0, 0)
  776.     @summon_command.set_handler(:cancel, method(:return_scene))
  777.     @summon_command.set_handler(:equip, method(:command_personal))
  778.     @summon_command.set_handler(:skill, method(:command_personal))
  779.     @summon_command.set_handler(:status, method(:command_personal))
  780.   end
  781.  
  782.   def create_summon_window
  783.     wy = @summon_command.height
  784.     width = Graphics.width
  785.     height = Graphics.height - wy
  786.     @summon_window = Window_SummonList.new(0, wy, width, height)
  787.   end
  788.  
  789.   def command_personal
  790.     @summon_window.select_last
  791.     @summon_window.activate
  792.     @summon_window.set_handler(:ok,     method(:on_personal_ok))
  793.     @summon_window.set_handler(:cancel, method(:on_personal_cancel))
  794.   end
  795.  
  796.   def on_personal_ok
  797.     $game_summons.menu_actor = @summon_window.item
  798.     case @summon_command.current_symbol
  799.     when :equip
  800.       SceneManager.call(Scene_SummonEquip)
  801.     when :skill
  802.       SceneManager.call(Scene_SummonSkill)
  803.     when :status
  804.       SceneManager.call(Scene_SummonStatus)
  805.     end
  806.   end
  807.  
  808.   def on_personal_cancel
  809.     @summon_window.unselect
  810.     @summon_command.activate
  811.   end
  812. end
  813.  
  814. class Scene_SummonSkill < Scene_Skill
  815.  
  816.   def start
  817.     super
  818.     @actor = $game_summons.menu_actor
  819.     on_actor_change
  820.   end
  821.  
  822.   def next_actor
  823.     @actor = $game_summons.menu_actor_next
  824.     on_actor_change
  825.   end
  826.  
  827.   def prev_actor
  828.     @actor = $game_summons.menu_actor_prev
  829.     on_actor_change
  830.   end
  831. end
  832.  
  833. class Scene_SummonEquip < Scene_Equip
  834.  
  835.   def start
  836.     super
  837.     @actor = $game_summons.menu_actor
  838.     on_actor_change
  839.   end
  840.  
  841.   def next_actor
  842.     @actor = $game_summons.menu_actor_next
  843.     on_actor_change
  844.   end
  845.  
  846.   def prev_actor
  847.     @actor = $game_summons.menu_actor_prev
  848.     on_actor_change
  849.   end
  850. end
  851.  
  852. class Scene_SummonStatus < Scene_Status
  853.  
  854.   def start
  855.     super
  856.     @actor = $game_summons.menu_actor
  857.     on_actor_change
  858.   end
  859.  
  860.   def next_actor
  861.     @actor = $game_summons.menu_actor_next
  862.     on_actor_change
  863.   end
  864.  
  865.   def prev_actor
  866.     @actor = $game_summons.menu_actor_prev
  867.     on_actor_change
  868.   end
  869. end
  870.  
  871.  
  872. #==============================================================================
  873. # ** Battle windows and scenes
  874. #==============================================================================
  875.  
  876. class Window_BattleSummon < Window_SummonList
  877.  
  878.   def initialize(help_window, info_viewport)
  879.     y = 0
  880.     super(0, y, Graphics.width, info_viewport.rect.y - y)
  881.     self.visible = false
  882.     @help_window = help_window
  883.     @info_viewport = info_viewport
  884.     select(0)
  885.   end
  886.  
  887.   def enable?(summon)
  888.     summon && $game_summons.can_summon?(summon.summon_id)
  889.   end
  890. end
  891.  
  892. class Window_BattleStatus < Window_Selectable
  893.  
  894.   def content_height
  895.     $game_party.battle_members.size * line_height - standard_padding * 2
  896.   end
  897.  
  898.   alias tsuki_battle_summon_status_refresh refresh
  899.   def refresh
  900.     create_contents
  901.     tsuki_battle_summon_status_refresh
  902.   end
  903. end
  904.  
  905.   #--------------------------------------------------------------------------
  906.   # *召喚動物視窗
  907.   #--------------------------------------------------------------------------
  908. class Window_Summon_animal_List < Window_BattleSummon
  909.   include Tsuki::Battle_Summon
  910.  
  911.   def include?(summon)
  912.     return false unless summon && summon.actor_id >=  Animal_Id  #Animal_Id 動物之id
  913.     return true
  914.   end
  915.  
  916.  
  917. end
  918. #==============================================================================
  919. # class Scene_Battle
  920. #==============================================================================
  921. class Scene_Battle < Scene_Base
  922.  
  923.   def refresh_enemies
  924.     @spriteset.refresh_enemies
  925.   end
  926. #==============================================================================
  927. # ** 改寫 建立所有視窗
  928. #==============================================================================
  929.   alias :battle_summon_create_battle_windows :create_all_windows
  930.   def create_all_windows
  931.     battle_summon_create_battle_windows
  932.     create_summon_window
  933.      create_summon_animal_window
  934.   end
  935. #==============================================================================
  936. # ** 建立召喚視窗
  937. #==============================================================================
  938.   def create_summon_window
  939.     @summon_window = Window_BattleSummon.new(@help_window, @info_viewport)
  940.     @summon_window.set_handler(:ok,     method(:on_summon_ok))
  941.     @summon_window.set_handler(:cancel, method(:on_summon_cancel))
  942.   end
  943. #==============================================================================
  944. # ** 建立召喚動物視窗
  945. #==============================================================================
  946.   def create_summon_animal_window
  947.     @animal_window = Window_Summon_animal_List.new(@help_window, @info_viewport)
  948.     @animal_window.set_handler(:ok,     method(:on_animal_ok))
  949.     @animal_window.set_handler(:cancel, method(:on_animal_cancel))
  950.   end
  951.   #--------------------------------------------------------------------------
  952.   # ●改寫 技能“確定”
  953.   #--------------------------------------------------------------------------
  954.   alias :th_battle_summon_on_skill_ok :on_skill_ok
  955.   def on_skill_ok
  956.     @skill = @skill_window.item
  957.     if Tsuki::Battle_Summon.summon_effect?(@skill)
  958.       BattleManager.actor.input.set_skill(@skill.id)
  959.       BattleManager.actor.last_skill.object = @skill
  960.       @skill_window.hide
  961.       if @skill.summon_id > 0
  962.         BattleManager.actor.input.summon_id = @skill.summon_id
  963.         next_command
  964.       else
  965.         activate_summon_window
  966.       end
  967.  
  968.     elsif  Tsuki::Battle_Summon.animal_effect?(@skill) #動物效果
  969.       BattleManager.actor.input.set_skill(@skill.id)
  970.       BattleManager.actor.last_skill.object = @skill
  971.       @skill_window.hide
  972.        if @skill.summon_id > 0
  973.         BattleManager.actor.input.summon_id = @skill.summon_id
  974.         next_command
  975.       else
  976.         activate_animal_window
  977.       end
  978.  
  979.       else
  980.       th_battle_summon_on_skill_ok
  981.     end
  982.   end
  983.  
  984.   alias :th_battle_summon_on_item_ok :on_item_ok
  985.   def on_item_ok
  986.     @item = @item_window.item
  987.     if Tsuki::Battle_Summon.summon_effect?(@item)
  988.       BattleManager.actor.input.set_item(@item.id)
  989.       $game_party.last_item.object = @item
  990.       @item_window.hide
  991.       if @item.summon_id > 0
  992.         BattleManager.actor.input.summon_id = @skill.summon_id
  993.         next_command
  994.       else
  995.         activate_summon_window
  996.       end
  997.     else
  998.       th_battle_summon_on_item_ok
  999.     end
  1000.   end
  1001.  
  1002.   def command_summon
  1003.     activate_summon_window
  1004.   end
  1005.   #--------------------------------------------------------------------------
  1006.   # ●召喚者“確定”
  1007.   #--------------------------------------------------------------------------
  1008.   def on_summon_ok
  1009.     BattleManager.actor.input.summon_id = @summon_window.item.summon_id
  1010.     @animal_window.hide
  1011.     @summon_window.hide
  1012.     next_command
  1013.   end
  1014.   #--------------------------------------------------------------------------
  1015.   # ●召喚“取消”
  1016.   #--------------------------------------------------------------------------  
  1017.   def on_summon_cancel
  1018.     @summon_window.hide
  1019.     @skill_window.show.activate if @skill
  1020.     @item_window.show.activate if @item
  1021.   end
  1022.  
  1023.   #--------------------------------------------------------------------------
  1024.   # ●動物“確定”
  1025.   #--------------------------------------------------------------------------
  1026.     def on_animal_ok
  1027.     BattleManager.actor.input.summon_id = @animal_window.item.summon_id
  1028.     @animal_window.hide
  1029.     next_command
  1030.   end
  1031.   #--------------------------------------------------------------------------
  1032.   # ●動物“取消”
  1033.   #--------------------------------------------------------------------------
  1034.   def on_animal_cancel
  1035.     @animal_window.hide
  1036.     @skill_window.show.activate if @skill
  1037.     @item_window.show.activate if @item
  1038.   end
  1039.   #--------------------------------------------------------------------------
  1040.   # ●起用召喚視窗
  1041.   #--------------------------------------------------------------------------  
  1042.   def activate_summon_window
  1043.     @summon_window.refresh
  1044.     @summon_window.show.activate
  1045.   end
  1046.   #--------------------------------------------------------------------------
  1047.   # ●起用動物視窗
  1048.   #--------------------------------------------------------------------------
  1049.   def activate_animal_window
  1050.     @animal_window.refresh
  1051.     @animal_window.show.activate
  1052.   end
  1053. end
  1054.  
  1055. class Window_BattleLog < Window_Selectable
  1056.  
  1057.   alias :th_battle_summon_display_damage :display_damage
  1058.   def display_damage(target, item)
  1059.     th_battle_summon_display_damage(target, item)
  1060.     display_summon_results(target, item)
  1061.   end
  1062.  
  1063.   def display_summon_results(target, item)
  1064.     return unless target.result.called_summon && Tsuki::Battle_Summon.summon_effect?(item)
  1065.     add_text(target.result.called_summon_text)
  1066.     wait
  1067.   end
  1068. end
  1069. #end
  1070.  
  1071. #==============================================================================
  1072. # ** Update menu scene to add option
  1073. #==============================================================================
  1074.  
  1075. class Window_MenuCommand < Window_Command
  1076.   #--------------------------------------------------------------------------
  1077.   # * Add arena command to List
  1078.   #--------------------------------------------------------------------------
  1079.   alias tsuki_summons_commands add_main_commands
  1080.   def add_main_commands
  1081.     tsuki_summons_commands
  1082.   #  add_command("Summons", :summons)  #增加地圖上選單指令
  1083.   end
  1084. end
  1085.  
  1086. class Scene_Menu < Scene_MenuBase
  1087.   #--------------------------------------------------------------------------
  1088.   # * Add arena handler
  1089.   #--------------------------------------------------------------------------
  1090.   alias tsuki_summons_command_window create_command_window
  1091.   def create_command_window
  1092.     tsuki_summons_command_window
  1093.     @command_window.set_handler(:summons, method(:command_summons))
  1094.   end
  1095.  
  1096.   def command_summons
  1097.     SceneManager.call(Scene_Summons)
  1098.   end
  1099. end
  1100.  
  1101. #==============================================================================
  1102. # ** Compatibility mods
  1103. #==============================================================================
  1104. if $imported["FP_InventoryPlus"]
  1105.  
  1106.   class Scene_Battle < Scene_Base
  1107.  
  1108.     # directly use item from inventory
  1109.     def on_item_ok      
  1110.       @item = @item_window.item
  1111.       if Tsuki::Battle_Summon.summon_effect?(@item)
  1112.         BattleManager.actor.input.set_item(@item)
  1113.         $game_party.last_item.object = @item
  1114.         @item_window.hide
  1115.         if @item.summon_id > 0
  1116.           BattleManager.actor.input.summon_id = @item.summon_id
  1117.  
  1118.  
  1119.           next_command
  1120.         else
  1121.           activate_summon_window
  1122.         end
  1123.       else
  1124.         th_battle_summon_on_item_ok
  1125.       end
  1126.     end
  1127.   end
  1128. end
  1129.  
  1130. if $imported["Tsuki_CommandSetup"]
  1131.  
  1132.   class Scene_Battle < Scene_Base
  1133.     alias :th_battle_summon_command_use_skill :command_use_skill
  1134.     def command_use_skill
  1135.       @skill = $data_skills[@actor_command_window.current_data[:ext]]
  1136.       if Tsuki::Battle_Summon.summon_effect?(@skill)
  1137.         BattleManager.actor.input.set_skill(@skill.id)
  1138.         BattleManager.actor.last_skill.object = @skill
  1139.         @skill_window.hide
  1140.         if @skill.summon_id > 0
  1141.           BattleManager.actor.input.summon_id = @skill.summon_id
  1142.           next_command
  1143.         else
  1144.           activate_summon_window
  1145.         end
  1146.       else
  1147.         th_battle_summon_command_use_skill
  1148.       end
  1149.     end      
  1150.  
  1151.     def on_summon_cancel
  1152.       @enemy_draw_window.hide
  1153.       if @skill == $data_skills[@actor_command_window.current_data[:ext]]
  1154.         @actor_command_window.activate
  1155.       else
  1156.         @summon_window.hide
  1157.         @skill_window.show.activate
  1158.       end
  1159.     end
  1160.   end
  1161. end
  1162. #==============================================================================
  1163. # ** Add-ons
  1164. #==============================================================================
  1165. if Tsuki::Battle_Summon::Monster_Hunter_Addon
  1166.   if $imported["Tsuki_MonsterHunter"]
  1167.     module Monster_Hunter
  1168.       def self.create_game_actor(actor_id)
  1169.         return if $BTEST
  1170.         $game_summons.summon_actor(actor_id)
  1171.       end
  1172.     end
  1173.   else
  1174.     msgbox("Monster Hunter must placed above this script")
  1175.   end
  1176.  
  1177. end
  1178. #==============================================================================
  1179. # ** 角色類
  1180. #==============================================================================
  1181. class Game_Actor < Game_Battler
  1182.   #--------------------------------------------------------------------------
  1183.   # ● 定義案例變量
  1184.   #--------------------------------------------------------------------------
  1185.    attr_accessor :recruit_enemy               # 抓獲的敵人
  1186.  
  1187.   #--------------------------------------------------------------------------
  1188.   # ● 設定
  1189.   #--------------------------------------------------------------------------
  1190.   alias recruit_setup setup
  1191.  
  1192.   def setup(actor_id)
  1193.     recruit_setup(actor_id)
  1194.   @recruit_enemy = 0
  1195.   end
  1196.     #--------------------------------------------------------------------------
  1197.   # ● 生成自動戰鬥用的行動候選清單
  1198.   #--------------------------------------------------------------------------
  1199.   def make_action_list
  1200.     list = []
  1201.     list.push(Game_Action.new(self).set_attack.evaluate) if  !self.is_a?(Game_Summon) #如果是召喚獸則自動戰鬥不加入普攻
  1202.     usable_skills.each do |skill|
  1203.       list.push(Game_Action.new(self).set_skill(skill.id).evaluate)
  1204.     end
  1205.     list
  1206.   end
  1207. #--------------------------------------------------------------------------
  1208.  
  1209.  
  1210.  
  1211. end





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