Project1

标题: 关于XAS系统的BUG [打印本页]

作者: 水木依    时间: 2013-9-6 08:32
标题: 关于XAS系统的BUG
不知道最近还有人在研究XAS的系统不,我是最近才开始研究的,然后发现了VX版和VA版有个共同的BUG,因为本人是在研究VA版本所以在此向各位大大请教,现将问题描述如下:
当地图设置循环时角色乘坐的船或飞船到达某些区域时会暂时消失不见,直到远离了那个区域才会又现身(据我研究消失区域好像在循环交接附近,也相当于不循环的情况下的地图边缘。),我用原版试过也出现此问题,不知道如何解决,本想让角色在乘船或飞船时通过暂时关闭XAS系统来解决但还是不行,XAS自带的那些关闭系统功能我全false掉了但情况依然存在,所以发帖求助,在此先感谢各位了。顺便附上BUG截图一张和XAS第一个脚本(汉化版的):
XAS系统下载原帖:http://rpg.blue/forum.php?mod=viewthread&tid=323414




RUBY 代码复制
  1. =begin
  2. ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  3. ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  4. ■■ X A S  - Xiderwong Action System (面向高级用户)
  5. ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  6. ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  7.                                                                       
  8.  X - Xiderowng
  9.  A - Action
  10.  S - System
  11.  
  12.  如果你要使用XAS,那么请贴上下面这个连接并尊重Xiderowng.
  13.  [url]http://xrxs.at-ninja.jp/[/url]
  14.  
  15.  如果你要转载该汉化版本,那么注明以下来源。
  16.  
  17.  (脚本翻译+文档翻译+脚本修改:白雪羊圣域
  18.  
  19.   BY白雪羊 6R ID:47731089 百度ID:47731089)
  20.  
  21. #===============================================================================
  22. # ■ XAS HERO ACE W.S+(VER DEMO 0.5 - 2012 / 01 / 04)(汉化版本:Ver2013.7.28)                                                
  23. #===============================================================================
  24.  
  25.  这里有XAS Hero Edtion的更新与支持.
  26.  [url]http://www.atelier-rgss.com/[/url]
  27. #===============================================================================
  28. # ■ Caracteristicas (主要功能)                                                           
  29. #===============================================================================
  30.    活跃争斗系统在地图(或)和互作用以场面。
  31. #===============================================================================
  32. # ■ 描述
  33. =end
  34.  
  35. #===============================================================================
  36. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  37. # XAS - 设定
  38. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  39. #===============================================================================
  40. # ■ XAS SYSTEN SETTING
  41. #===============================================================================
  42. # 如果你不想要使用下面任何一个系统或脚本,或者这个系统和脚本与其他的脚本
  43. #有冲突,可以关掉它。
  44. #-------------------------------------------------------------------------------
  45. module XAS_SYSTEM
  46.   #开启伤害显示
  47.   BATTLE_SYSTEM = true
  48.   # 是否弹出伤害?
  49.   DAMAGE_POP = true
  50.   # 启用行走图名字系统?
  51.   CHARACTER_POSE_NAME = true
  52.   # 启用对角色的影响 的描绘?
  53.   CHARACTER_SPRITE_EFFECTS = true
  54.   # 启用冲刺系统?
  55.   DASH_SYSTEM = true
  56.   # 启用对角线运动么?
  57.   PLAYER_DIAGONAL_MOVEMENT  = true
  58.   # 事件启用对角线运动么?
  59.   EVENT_DIAGONAL_MOVEMENT  = true
  60.   # 状态系统是否开启呢?
  61.   STATE_SYSTEM = true
  62.   # 定义的地图,这将是事件的工具的仓库地图哦!
  63.   ACTION_TEMPLATE_MAP_ID = 1
  64.   #变量定义ID与仓库事件ID相匹配的工具,
  65.   #这个ID是用于创建互动活动的工具哦。...比如仓库事件中火球的事件ID为3
  66.   #然后建立一个事件,换上草的行走图,再新增加一个页面,设置公共变量【3】条件为3
  67.   #就可以通过火球的射击到这个事件,来触发这个事件页面的开启了。
  68.   HIT_ID = 3
  69. end
  70.  
  71. #===============================================================================
  72. # ■ XAS 按钮设定
  73. #===============================================================================
  74. module XAS_BUTTON
  75.   #使用武器的按钮
  76.   ACTION_1_BUTTON = Input::C
  77.   #使用盾牌的按钮.
  78.   ACTION_2_BUTTON = Input::X
  79.   #使用技能的按钮
  80.   SKILL_BUTTON = Input::Z  
  81.   #使用道具的按钮
  82.   ITEM_BUTTON = Input::Y
  83.   #冲刺的按钮
  84.   DASH_BUTTON = Input::A
  85.   #切换领队的按钮
  86.   CHANGE_LEADER_BUTTON = Input::R
  87.   #是否使用武器按钮.
  88.   ENABLE_ACTION_1_BUTTON = true
  89.   #是否使用盾牌按钮  
  90.   ENABLE_ACTION_2_BUTTON = true
  91.   #是否使用技能按钮
  92.   ENABLE_SKILL_BUTTON = true
  93.   #是否使用道具按钮
  94.   ENABLE_ITEM_BUTTON = true
  95.   #是否使用冲刺按钮
  96.   ENABLE_DASH_BUTTON = true
  97.   #是否使用队友切换系统  
  98.   ENABLE_CHANGE_LEADER_BUTTON = true
  99. end
  100.  
  101. #===============================================================================
  102. # ■ 文字设定
  103. #===============================================================================
  104. # 文字系统在 XAS的一般定义。
  105. #-------------------------------------------------------------------------------
  106. module XAS_WORD
  107.   # Ativar as palavras.
  108.   ENABLE_WORD = true
  109.   # 防御成功时显示的文字。
  110.   GUARD = "防御"
  111.   # MP不足时显示的文字。
  112.   NO_MP = "MP不足"
  113.   # 没有道具时显示的文字。
  114.   NO_ITEM = "道具不足"  
  115.   # 升级时显示的文字。
  116.   LEVEL_UP = "升级!"
  117.   # 禁止使用(道具,技能或者武器)时显示的文字。
  118.   SEAL = "禁止使用!"
  119.   # 无敌时显示的文字。
  120.   INVINCIBLE = "无敌"
  121.   # 定义“经验”的名称。
  122.   EXP = "历练"
  123.   # 定义目标闪避时播放的文字。
  124.   EVADED = "闪避!"
  125.   # 未能命中显示的文字
  126.   MISSED = "失手!"
  127.   # 当反击使用时,显示的文字。
  128.   COUNTER = "反击!"
  129.   # 反射成功时显示的文字。
  130.   REFLECT = "反射!"
  131. end
  132.  
  133. #===============================================================================
  134. # ■ XAS 伤害
  135. #===============================================================================
  136. # 伤害系统的XAS一般定义。
  137. #-------------------------------------------------------------------------------
  138. module XAS_DAMAGE_POP
  139.   # 伤害弹出的字体
  140.   DAMAGE_FONT_NAME = "黑体"
  141.   # 字体的大小。
  142.   DAMAGE_FONT_SIZE = 18
  143.   # 启用加粗字体咩?.
  144.   DAMAGE_FONT_BOLD = true
  145.   #  启用斜体咩?
  146.   DAMAGE_FONT_ITALIC = true
  147.   # 暴击时,伤害字体放大咩?
  148.   DAMAGE_CRITICAL_ZOOM = true
  149.   # 伤害弹出,显示金钱和经验咩?
  150.   DAMAGE_EXP_GOLD_POP = true  
  151.   # 状态获得时,是否弹出状态名显示呢?
  152.   DAMAGE_STATE_POP = true
  153.   # 道具获得时,是否弹出道具名显示咩?
  154.   DAMAGE_ITEM_POP = true
  155.   # 设置默认的字体颜色
  156.   DAMAGE_DEFAULT_FONT_COLOR = Color.new(255, 255, 255)
  157.   # 设置弹出 经验 文字的字体颜色
  158.   DAMAGE_EXP_FONT_COLOR = Color.new(0, 255, 100)
  159.   # 设置弹出 金币 文字的字体颜色
  160.   DAMAGE_GOLD_FONT_COLOR = Color.new(255, 255, 50)
  161.   # 设置弹出 道具 文字的字体颜色
  162.   DAMAGE_ITEM_FONT_COLOR = Color.new(155, 55, 250)
  163. end
  164.  
  165. #===============================================================================
  166. # ■ 声音设定
  167. #===============================================================================
  168. # Definição do sistema de sons do XAS.
  169. #-------------------------------------------------------------------------------
  170. module XAS_SOUND
  171.   #接到掉落的道具时的音效  
  172.   ITEM_DROP = "Key"
  173.   #升级时的音效
  174.   LEVEL_UP = "Chime1"
  175.   #消耗行为的效果,比如消耗道具之类的.
  176.   ACTION_COST = "Cursor2"
  177. end
  178.  
  179. #===============================================================================
  180. # ■ 动画设定
  181. #===============================================================================
  182. # 动画系统XAS的定义。
  183. # 如果你不想使用动画,将值设置为0(零)。
  184. #-------------------------------------------------------------------------------
  185. module XAS_ANIMATION
  186.   # 防御时动画
  187.   GUARD_ANIMATION_ID = 127
  188.   # 切换队长后播放的动画
  189.   CHANGE_LEADER_ANIMATION_ID = 135
  190.   # 角色无敌时的动画。
  191.   INVINCIBLE_ANIMATION_ID = 36
  192.   # 蓄力中的动画。
  193.   CHARGE_ANIMATION1_ID = 155
  194.   # 蓄力完成时的动画。
  195.   CHARGE_ANIMATION2_ID = 123
  196.   # 吟唱时显示的动画
  197.   CAST_TIME_ANIMATION_ID = 120
  198.   # 循环动画的播放速度。
  199.   LOOP_ANIMATIONS_SPEED = 60
  200.   # 反射时的动画。
  201.   REFLECT_ANIMATION_ID = 128
  202. end
  203.  
  204. #===============================================================================
  205. # ■ 一般战斗设置
  206. #===============================================================================
  207. # 战斗系统XAS的一般定义
  208. #-------------------------------------------------------------------------------
  209. module XAS_BA
  210.   #交换队长后需要等待多久才能再换。
  211.   CHANGE_LEADER_WAIT_TIME = 10
  212.   #启动游戏时,HUD是否见?
  213.   #您可以启用或禁用的HUD,在事件中使用下面的代码
  214.   # $game_system.hud_visible = true
  215.   HUD_VISIBLE_AT_STARTUP = false
  216.   # 在敌人传感器范围内会被激活的独立开关。
  217.   SENSOR_SELF_SWITCH = "D"
  218.    #设置变量定义的区域激活的默认ID(就是传感器变量的ID)
  219.   DEFAULT_SENSOR_RANGE_VARIABLE_ID = 4
  220.   # 角色被击破倒地后,起身所需要的时间.
  221.   DEFAULT_KNOCK_BACK_DURATION = 60
  222.   # 被击破倒地后,是否震动屏幕。
  223.   KNOCKBACKING_SHAKE = false
  224.   #基础移动速度
  225.   BASE_MOVE_SPEED = 4.2
  226.   # 冲刺时增加的移动速度.
  227.   DASH_MOVE_SPEED = 0.8
  228.   # 是否启用八方向行走。
  229.   DIAGONAL_DURATION_ENABLE = true
  230.   # 返回四方向的时间。
  231.   #(就是说角色是斜着走的,停止操作后,行走图切换到正方向行走的时间。)
  232.   DIAGONAL_DURATION = 15
  233.   # 经验的分配方式。
  234.   # 0 - EXP 谁杀了死敌人谁得这些EXP。
  235.   # 1 - EXP 每个人都可以获得同样多的EXP。
  236.   # 2 - EXP 获得的EXP需要被平均分配到每一个队员。
  237.   EXP_TYPE = 2
  238.   #[下面是用来定义地图掉落道具的。]
  239.   # 定义宝物消失时间。(秒数吧....)
  240.   TREASURE_ERASE_TIME = 5
  241.   # 是否启用忽明忽暗的效果。
  242.   FADE_TREASURE_SPRITE = true
  243.   # 是否启用悬浮的效果。
  244.   FLOAT_TREASURE_SPRITE = true
  245.   # 修正掉落道具的位置高度。
  246.   FIX_BALLOON_POSITION = true
  247.   # 固定在离地图多少高度以上。(像素)
  248.   BALLOON_HEIGHT = 32
  249. end  
  250.  
  251. #===============================================================================
  252. # ■ 敌人的设置
  253. #===============================================================================
  254.  
  255. module XAS_BA_ENEMY
  256.   #定义敌人能够抵挡的技能(TOOL事件)。
  257.   #
  258.   #INVUNERABLE_ACTIONS={A#=> B,B,B,B] A => B,B,B,B],...}
  259.   #A  -  敌人的ID。
  260.   #B  -  技能的ID。
  261.  
  262.   INVUNERABLE_ACTIONS = {
  263.   6=>[39,40,41,42,43],
  264.   7=>[24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],
  265.   8=>[1,2,3,4,5,6,7,11,12,13,14,15,16,17,18,19,20,21,24,25,26],
  266.   9=>[39,40,41,42,43],
  267.   10=>[39,40,41,42,43],
  268.   11=>[39,40,41,42,43]
  269.   }
  270.  
  271.   # 敌人能够抵挡哪个方向上的攻击。
  272.   # GUARD_DIRECTIONS = { A=>[B],  A=>[B,B,B,B], ...}
  273.   # A - 敌人的ID
  274.   # B - 方向。(2,4,6,8)
  275.   #     -> 2 = 下.   -> 4 = 左.
  276.   #     -> 6 = 右.   -> 8 = 上.
  277.  
  278.   GUARD_DIRECTIONS = {
  279.   }  
  280.  
  281.   # 敌人能够反击的技能
  282.   # 按下面的格式来设置。A为敌人ID,B为技能ID。
  283.   # COUNTER_ATTACK = { A=>[B,B,B,B],  A=>[B,B,B,B], ...}
  284.   COUNTER_ATTACK = {
  285.   }
  286.  
  287. end  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  297. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  298. #■ 初始化操作
  299. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  300. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  301.  
  302.  
  303. #===============================================================================
  304. # ■ 游戏_队伍
  305. #===============================================================================
  306. class Game_Temp
  307.   attr_accessor :change_leader_wait_time
  308.   attr_accessor :reset_battler_time
  309.   attr_accessor :tool_event
  310.   attr_accessor :animation_garbage
  311.  
  312.   #--------------------------------------------------------------------------
  313.   # ● 初始化
  314.   #--------------------------------------------------------------------------   
  315.   alias xas_initialize initialize
  316.   def initialize
  317.       @change_leader_wait_time = 0
  318.       @reset_battler_time = 0
  319.       @tool_event = nil
  320.       @animation_garbage = []
  321.       xas_initialize
  322.   end
  323.  
  324. end
  325.  
  326. #===============================================================================
  327. # ■ 游戏_系统
  328. #===============================================================================
  329. class Game_System
  330.   attr_accessor :tools_on_map
  331.   attr_accessor :old_interpreter_running
  332.   attr_accessor :hud_visible
  333.   attr_accessor :enable_hud
  334.   attr_accessor :command_enable
  335.   attr_accessor :pre_leader_id
  336.   attr_accessor :xas_battle
  337.   #--------------------------------------------------------------------------
  338.   # ● 初始化
  339.   #--------------------------------------------------------------------------   
  340.   alias x_initialize initialize
  341.   def initialize
  342.       @tools_on_map = []
  343.       @old_interpreter_running = false
  344.       @hud_visible = XAS_BA::HUD_VISIBLE_AT_STARTUP
  345.       @enable_hud = false
  346.       @command_enable  = true
  347.       @pre_leader_id = 0
  348.       @xas_battle = XAS_SYSTEM::BATTLE_SYSTEM
  349.       x_initialize
  350.   end  
  351. end  
  352.  
  353. #===============================================================================
  354. # ■ 游戏_战斗者
  355. #===============================================================================
  356. class Game_Battler
  357.   attr_accessor :damage_pop
  358.   attr_accessor :damage
  359.   attr_accessor :damage_type
  360.   attr_accessor :critical
  361.   attr_accessor :invunerable_duration
  362.   attr_accessor :shield
  363.   attr_accessor :invunerable_actions
  364.   attr_accessor :guard_directions
  365.   attr_accessor :guard
  366.   attr_accessor :invunerable
  367.   attr_accessor :x_combo
  368.   attr_accessor :cast_action
  369.   attr_accessor :defeated
  370.   attr_accessor :death_zoom_effect
  371.   attr_accessor :counter_action
  372.   attr_accessor :knockback_duration
  373.   attr_accessor :hp_damage
  374.   attr_accessor :mp_damage
  375.  
  376. #--------------------------------------------------------------------------
  377. # ● 初始化
  378. #--------------------------------------------------------------------------  
  379.   alias x_initialize initialize
  380.   def initialize
  381.       @damage = 0
  382.       @damage_pop = false
  383.       @damage_type = 0
  384.       @critical = false
  385.       @invunerable_duration = 0
  386.       @shield = false
  387.       @invunerable_actions = []
  388.       @guard_directions = []
  389.       @guard = true
  390.       @invunerable = false
  391.       @x_combo = [0,-1,0]
  392.       @defeated = false
  393.       @death_zoom_effect = 0
  394.       @cast_action = [0,0,0,0,0]
  395.       @counter_action = [0,0,true]
  396.       @knockback_duration = XAS_BA::DEFAULT_KNOCK_BACK_DURATION
  397.       x_initialize
  398.   end
  399.  
  400. #--------------------------------------------------------------------------
  401. # ● 添加 无敌 行为
  402. #--------------------------------------------------------------------------     
  403. def add_inv(action_id = 0)
  404.      return if action_id == nil or action_id <= 0
  405.      return if @invunerable_actions.include?(action_id)
  406.      @invunerable_actions.push(action_id)     
  407. end
  408.  
  409. #--------------------------------------------------------------------------
  410. # ● 消除 无敌 行为
  411. #--------------------------------------------------------------------------     
  412. def remove_inv(action_id = 0)
  413.      return if action_id == nil or action_id <= 0
  414.      return unless @invunerable_actions.include?(action_id)
  415.      @invunerable_actions.delete(action_id)     
  416. end
  417.  
  418. #--------------------------------------------------------------------------
  419. # ● 防御 的方向
  420. #--------------------------------------------------------------------------     
  421. def add_guard_dir(direction = 0)
  422.      return if direction == nil or direction <= 0
  423.      return if @guard_directions.include?(direction)
  424.      @guard_directions.push(direction)     
  425. end
  426.  
  427. #--------------------------------------------------------------------------
  428. # ● 消除 防御 的方向
  429. #--------------------------------------------------------------------------     
  430. def remove_guard_dir(direction = 0)
  431.      return if direction == nil or direction <= 0
  432.      return unless @guard_directions.include?(direction)
  433.      @guard_directions.delete(direction)     
  434. end  
  435.  
  436. end  
  437.  
  438. #===============================================================================
  439. # ■ 游戏 Actor
  440. #===============================================================================
  441. class Game_Actor < Game_Battler
  442.  
  443.   attr_accessor :x_action1_id
  444.   attr_accessor :x_action2_id
  445.   attr_accessor :skill_id
  446.   attr_accessor :x_item_id
  447.   attr_accessor :x_charge_action
  448.   attr_accessor :old_equipment_id
  449.   attr_accessor :item_id
  450.   attr_accessor :old_level
  451.   attr_reader :actor_id
  452.  
  453. #--------------------------------------------------------------------------
  454. # ● 计划
  455. #--------------------------------------------------------------------------   
  456. alias x_setup setup
  457. def setup(actor_id)
  458.       @x_action1_id = 0
  459.       @x_action2_id = 0
  460.       @skill_id = 0
  461.       @x_item_id = 0
  462.       @item_id = 0
  463.       @x_charge_action = [0,0,0,0]
  464.       @old_level = @level
  465.       @old_equipment_id = [0,0,0,0,0]
  466.       x_setup(actor_id)
  467. end
  468.  
  469. #--------------------------------------------------------------------------
  470. # ● 显示的等级
  471. #--------------------------------------------------------------------------     
  472.   alias x_display_level_up display_level_up
  473.   def display_level_up(new_skills)
  474.       return unless $game_party.in_battle
  475.       x_display_level_up(new_skills)
  476.   end
  477.  
  478. end
  479.  
  480. #===============================================================================
  481. # ■ 角色
  482. #===============================================================================
  483. class Game_Character < Game_CharacterBase
  484.  
  485.   attr_accessor :tool_id
  486.   attr_accessor :tool_effect  
  487.   attr_accessor :target
  488.   attr_accessor :target2
  489.   attr_accessor :old_x
  490.   attr_accessor :old_y
  491.   attr_accessor :pre_x
  492.   attr_accessor :pre_y
  493.   attr_accessor :temp_id
  494.   attr_accessor :angle
  495.   attr_accessor :force_action_times
  496.   attr_accessor :force_action
  497.   attr_accessor :move_frequency
  498.   attr_accessor :move_speed
  499.   attr_accessor :direction_fix
  500.   attr_accessor :walk_anime
  501.   attr_accessor :step_anime
  502.   attr_accessor :x
  503.   attr_accessor :y
  504.   attr_accessor :pattern
  505.   attr_accessor :pattern_count  
  506.   attr_accessor :jump_count
  507.   attr_accessor :jump_peak
  508.   attr_accessor :dash_active
  509.   attr_accessor :direction
  510.   attr_accessor :through
  511.   attr_accessor :bush_depth  
  512.   attr_accessor :blend_type
  513.   attr_accessor :priority_type  
  514.   attr_accessor :jump_count
  515.   attr_accessor :zoom_x
  516.   attr_accessor :zoom_y
  517.   attr_accessor :stop
  518.   attr_accessor :force_update
  519.   attr_accessor :treasure_time
  520.   attr_accessor :treasure_float
  521.   attr_accessor :can_update
  522.   attr_accessor :pre_move_speed
  523.   attr_accessor :knock_back_duration
  524.   attr_accessor :orig_pos_x
  525.   attr_accessor :orig_pos_y
  526.   attr_accessor :shoot_time
  527.   #--------------------------------------------------------------------------
  528.   # ● 初始化
  529.   #--------------------------------------------------------------------------   
  530.   alias x_initialize initialize
  531.   def initialize
  532.       x_initialize
  533.       @tool_id = 0
  534.       @tool_effect = ""
  535.       @target = false
  536.       @target2 = nil
  537.       @old_x = @x
  538.       @old_y = @y
  539.       @pre_x = @x
  540.       @pre_y = @y   
  541.       @orig_pos_x = @x
  542.       @orig_pos_y = @y
  543.       [url=home.php?mod=space&uid=124954]@Angle[/url] = 0
  544.       @force_action_times = 0
  545.       @force_action = ""
  546.       @dash_active = false
  547.       @zoom_x = 1.00
  548.       @zoom_y = 1.00
  549.       [url=home.php?mod=space&uid=76426]@stop[/url] = false
  550.       @force_update = false
  551.       @treasure_time = 0
  552.       @treasure_float = [0,0,0,0]
  553.       @can_update = true
  554.       @temp_id = 0
  555.       @pre_move_speed = @move_speed
  556.       @shoot_time = [0,0]
  557.   end
  558.  
  559.   #--------------------------------------------------------------------------
  560.   # ● 无敌
  561.   #--------------------------------------------------------------------------      
  562.   def invunerable(enable = false)
  563.       return if [url=home.php?mod=space&uid=133701]@battler[/url] == nil or @battler.dead?
  564.       @battler.invunerable = enable
  565.   end  
  566.  
  567.   #--------------------------------------------------------------------------
  568.   # ● 敌人呼吸
  569.   #--------------------------------------------------------------------------        
  570.   def fast_breath(enable = true)
  571.      return if @battler == nil or @battler.dead?
  572.      @battler.fast_breath_effect = enable
  573.   end
  574. end
  575.  
  576. #===============================================================================
  577. # ■ 游戏_事件
  578. #===============================================================================
  579. class Game_Event < Game_Character
  580.   attr_accessor :target
  581.   attr_reader   :name
  582.   attr_accessor :collision_attack
  583.  
  584. #--------------------------------------------------------------------------
  585. # ● 对象
  586. #--------------------------------------------------------------------------      
  587. alias x_event_initialize initialize
  588. def initialize(map_id, event)
  589.      x_event_initialize(map_id, event)
  590.      @collision_attack = false
  591.      if @event.name =~ /<O(\d+)>/i or @event.name =~ /<透(\d+)>/i
  592.         [url=home.php?mod=space&uid=316553]@opacity[/url] = $1.to_i  
  593.      end   
  594.      if @event.name =~ /<B(\d+)>/i or @event.name =~ /<合(\d+)>/i  
  595.         @blend_type = $1.to_i
  596.      end  
  597. end  
  598.  
  599. #--------------------------------------------------------------------------
  600. # ● 事件消除
  601. #--------------------------------------------------------------------------        
  602. alias x_event_erase erase
  603. def erase
  604.      if self.tool_id > 0
  605.         $game_system.tools_on_map.delete(self.tool_id)
  606.      end   
  607.      x_event_erase
  608. end     
  609.  
  610. #--------------------------------------------------------------------------
  611. # ● 事件名字
  612. #--------------------------------------------------------------------------
  613.   def name
  614.       return @event.name  
  615.   end   
  616.  
  617. end
  618.  
  619. #===============================================================================
  620. # ■ 游戏队友
  621. #===============================================================================
  622. class Game_Followers
  623.  
  624. #--------------------------------------------------------------------------
  625. # ● 初始化
  626. #--------------------------------------------------------------------------  
  627.   alias x_party_initialize initialize
  628.   def initialize(leader)
  629.       x_party_initialize(leader)
  630.       if $xas_party_system == nil
  631.          @visible = false
  632.       end  
  633.   end  
  634. end  
  635.  
  636. #===============================================================================
  637. # ■ 游戏地图
  638. #===============================================================================
  639. class Game_Map  
  640.  
  641. #--------------------------------------------------------------------------
  642. # ● 设置
  643. #--------------------------------------------------------------------------  
  644.   alias x_initial_setup setup
  645.   def setup(map_id)
  646.       x_initial_setup(map_id)
  647.       xas_initial_setup(map_id)
  648.   end
  649.  
  650. #--------------------------------------------------------------------------
  651. # ● XAS 初始设置
  652. #--------------------------------------------------------------------------  
  653.   def xas_initial_setup(map_id)
  654.       for actor in $game_party.members
  655.           setup_initial_members(actor)
  656.       end  
  657.   end  
  658.  
  659. #--------------------------------------------------------------------------
  660. # ● 设置 初始成员
  661. #--------------------------------------------------------------------------   
  662.   def setup_initial_members(actor)
  663.  
  664.   end  
  665. end  
  666.  
  667.  
  668. #==============================================================================
  669. # ■ Scene_Map
  670. #==============================================================================
  671. class Scene_Map < Scene_Base
  672.  
  673.   #--------------------------------------------------------------------------
  674.   # ● 调用菜单
  675.   #--------------------------------------------------------------------------   
  676.   alias x_call_menu call_menu
  677.   def call_menu
  678.       return if $game_player.action != nil
  679.       $game_player.reset_charge_temp
  680.       x_call_menu
  681.   end
  682.  
  683. end   
  684. #===============================================================================
  685. # ■ Scene_Refresh
  686. #===============================================================================
  687. class Scene_Refresh
  688.  
  689. #--------------------------------------------------------------------------
  690. # ● 主处理
  691. #--------------------------------------------------------------------------
  692.   def main
  693.       SceneManager.call(Scene_Map)
  694.   end
  695. end
  696.  
  697. #==============================================================================
  698. # ■ Game_Player
  699. #==============================================================================
  700. class Game_Player < Game_Character
  701.  
  702. #--------------------------------------------------------------------------
  703. # ● 队友切换
  704. #--------------------------------------------------------------------------  
  705.   def leader_changed?(actor)
  706.       if $game_party.members[0] == nil
  707.          return true if actor != nil
  708.       elsif $game_party.members[0] != nil
  709.          return true if actor == nil   
  710.          return true if actor.actor_id != $game_party.members[0].actor_id        
  711.       end   
  712.       return false
  713.   end
  714.  
  715. end  
  716. $xas = true
  717.  
  718.  
  719. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  720. #■ 运动 - 斜向运动
  721. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  722.  
  723.  
  724. #===============================================================================
  725. # ■ 游戏 角色
  726. #===============================================================================
  727. class Game_CharacterBase
  728.  
  729.   #--------------------------------------------------------------------------
  730.   # ● 建立方向
  731.   #--------------------------------------------------------------------------         
  732.    alias diagonal_set_direction set_direction
  733.    def set_direction(d)
  734.        diagonal_set_direction(d)
  735.        @diagonal_direction = 0
  736.        reset_diagonal
  737.    end
  738.  
  739. end   
  740.  
  741. #===============================================================================
  742. # ■  游戏 角色
  743. #===============================================================================
  744. class Game_Character < Game_CharacterBase
  745.  
  746.   attr_accessor :diagonal
  747.   attr_accessor :diagonal_direction
  748.   attr_accessor :sprite_angle_enable
  749.   attr_accessor :diagonal_time
  750.  
  751.   #--------------------------------------------------------------------------
  752.   # ● 初始化
  753.   #--------------------------------------------------------------------------        
  754.   alias diagonal_initialize initialize
  755.   def initialize
  756.       diagonal_initialize
  757.       if XAS_SYSTEM::EVENT_DIAGONAL_MOVEMENT
  758.          @diagonal = true
  759.       else   
  760.          @diagonal = false
  761.       end  
  762.       @diagonal_direction = 0
  763.       @sprite_angle_enable = false
  764.       @diagonal_time = 0
  765.   end  
  766.  
  767.   #--------------------------------------------------------------------------
  768.   # ● 复位 对角线
  769.   #--------------------------------------------------------------------------            
  770.   def reset_diagonal
  771.       return if @direction_fix
  772.       return if @diagonal == false
  773.       @diagonal_direction = 0   
  774.       @diagonal_time = 0
  775.       @angle = 0 if @sprite_angle_enable
  776.   end  
  777.  
  778.   #--------------------------------------------------------------------------
  779.   # ● 启用对角线
  780.   #--------------------------------------------------------------------------            
  781.   def enable_diagonal(dir = 0)
  782.      return if @direction_fix
  783.      return if @diagonal == false
  784.      return if dir == 0
  785.      @diagonal_direction = dir
  786.      @diagonal_time = XAS_BA::DIAGONAL_DURATION
  787.      @angle = 315 if @sprite_angle_enable
  788.   end  
  789.  
  790.   #--------------------------------------------------------------------------
  791.   # ● ↗
  792.   #--------------------------------------------------------------------------  
  793.   def turn_upper_right
  794.       enable_diagonal(9)
  795.       @direction = 8 unless @direction_fix
  796.   end  
  797.  
  798.   #--------------------------------------------------------------------------
  799.   # ● ↖
  800.   #--------------------------------------------------------------------------  
  801.   def turn_upper_left
  802.       enable_diagonal(7)
  803.       @direction = 4 unless @direction_fix
  804.   end   
  805.  
  806.   #--------------------------------------------------------------------------
  807.   # ● ↘
  808.   #--------------------------------------------------------------------------  
  809.   def turn_lower_right
  810.       enable_diagonal(3)
  811.       @direction = 6 unless @direction_fix
  812.   end      
  813.  
  814.   #--------------------------------------------------------------------------
  815.   # ● ↙
  816.   #--------------------------------------------------------------------------  
  817.   def turn_lower_left
  818.       enable_diagonal(1)
  819.       @direction = 2 unless @direction_fix
  820.   end   
  821.  
  822.   #--------------------------------------------------------------------------
  823.   # ● 移动朝向
  824.   #--------------------------------------------------------------------------               
  825.   alias diagonal_move_forward move_forward
  826.   def move_forward
  827.       return if move_forward_diagonal?
  828.       diagonal_move_forward
  829.   end
  830.  
  831.   #--------------------------------------------------------------------------
  832.   # ● 移动朝向对角线设置?
  833.   #--------------------------------------------------------------------------                  
  834.   def move_forward_diagonal?
  835.       return false if @diagonal == false
  836.       if @diagonal_direction != 0
  837.          case @diagonal_direction
  838.               when 1 #左上
  839.                  move_diagonal(4, 2)
  840.                  @direction = 2
  841.               when 3 #右下
  842.                  move_diagonal(6, 2)
  843.                  @direction = 6
  844.               when 7 #左下
  845.                  move_diagonal(4, 8)
  846.                  @direction = 4
  847.               when 9 #右上
  848.                  move_diagonal(6, 8)
  849.                  @direction = 8
  850.           end
  851.           enable_diagonal(@diagonal_direction)      
  852.          return true
  853.       end  
  854.       return false
  855.   end
  856.  
  857.   #--------------------------------------------------------------------------
  858.   # ● 后移动
  859.   #--------------------------------------------------------------------------               
  860.   alias diagonal_move_backward move_backward
  861.   def move_backward
  862.       return if move_backward_diagonal?
  863.       diagonal_move_backward
  864.   end
  865.  
  866.   #--------------------------------------------------------------------------
  867.   # ● 后移动对角线?
  868.   #--------------------------------------------------------------------------                  
  869.   def move_backward_diagonal?
  870.       return false if @diagonal == false
  871.       if @diagonal_direction != 0
  872.          last_direction_fix = @direction_fix
  873.          @direction_fix = true      
  874.          case @diagonal_direction
  875.               when 1
  876.                  move_diagonal(6, 8)
  877.                  @direction = 6
  878.               when 3
  879.                  move_diagonal(4, 8)
  880.                  @direction = 4
  881.               when 7
  882.                  move_diagonal(6, 2)
  883.                  @direction = 6
  884.               when 9         
  885.                  move_diagonal(4, 2)
  886.                  @direction = 2
  887.          end
  888.          enable_diagonal(@diagonal_direction)      
  889.          @direction_fix = last_direction_fix
  890.          return true
  891.       end  
  892.       return false
  893.   end  
  894.  
  895.   #--------------------------------------------------------------------------
  896.   # ● 转向朝向玩家
  897.   #--------------------------------------------------------------------------
  898.   alias turn_toward_player_diagonal turn_toward_player
  899.   def turn_toward_player
  900.       if @diagonal
  901.          diagonal_turn_toward_player
  902.          return
  903.       end
  904.       turn_toward_player_diagonal
  905.   end  
  906.  
  907.   #--------------------------------------------------------------------------
  908.   # ● 对角线 转向朝向玩家
  909.   #--------------------------------------------------------------------------
  910.   def diagonal_turn_toward_player
  911.       sx = distance_x_from($game_player.x)
  912.       sy = distance_y_from($game_player.y)
  913.       sd = sx.abs - sy.abs
  914.       sdx = sd.abs - sx.abs
  915.       sdy = sd.abs - sy.abs
  916.       return if sx == 0 and sy == 0
  917.       #Turn Upper Right
  918.       if sx < 0 and sy > 0
  919.          if sx.abs > sy.abs and sdx.abs < sd.abs
  920.             set_direction(6)
  921.          elsif sx.abs < sy.abs and sdy.abs < sd.abs
  922.             set_direction(8)
  923.          else
  924.             turn_upper_right
  925.          end
  926.          enable_diagonal(9)
  927.       #Turn Upper Left
  928.       elsif sx > 0 and sy > 0
  929.          if sx.abs > sy.abs and sdx.abs < sd.abs
  930.             set_direction(4)
  931.          elsif sx.abs < sy.abs and sdy.abs < sd.abs
  932.             set_direction(8)            
  933.          else
  934.             set_direction(4)
  935.             turn_upper_left
  936.          end
  937.          enable_diagonal(7)  
  938.       #Turn Lower Left  
  939.       elsif sx > 0 and sy < 0
  940.          if sx.abs > sy.abs and sdx.abs < sd.abs
  941.             set_direction(4)
  942.          elsif sx.abs < sy.abs and sdy.abs < sd.abs
  943.             set_direction(2)         
  944.          else                    
  945.             turn_lower_left
  946.          end
  947.          enable_diagonal(1)   
  948.        #Turn Lower Right   
  949.        elsif sx < 0 and sy < 0         
  950.          if sx.abs > sy.abs and sdx.abs < sd.abs
  951.             set_direction(6)
  952.          elsif sx.abs < sy.abs and sdy.abs < sd.abs
  953.             set_direction(2)           
  954.          else        
  955.             turn_lower_right
  956.          end
  957.          enable_diagonal(3)
  958.       elsif sx < 0
  959.          set_direction(6)
  960.       elsif sx > 0
  961.          set_direction(4)
  962.       elsif sy > 0
  963.          set_direction(8)
  964.       elsif sy < 0
  965.          set_direction(2)   
  966.       end     
  967.  
  968.   end  
  969.  
  970.   #--------------------------------------------------------------------------
  971.   # ● 跟随玩家
  972.   #--------------------------------------------------------------------------
  973.   alias move_toward_player_diagonal move_toward_player
  974.   def move_toward_player
  975.       if @diagonal
  976.          diagonal_move_toward_player
  977.          return  
  978.       end
  979.       move_toward_player_diagonal
  980.   end   
  981.  
  982.   #--------------------------------------------------------------------------
  983.   # ● 对角线移动跟随玩家
  984.   #--------------------------------------------------------------------------  
  985.   def diagonal_move_toward_player
  986.       sx = distance_x_from($game_player.x)
  987.       sy = distance_y_from($game_player.y)
  988.       if sx == 0 and sy == 0
  989.          return
  990.       end
  991.       abs_sx = sx.abs
  992.       abs_sy = sy.abs
  993.       if abs_sx == abs_sy
  994.         rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
  995.       end
  996.       if abs_sx
  997.          if sx < 0 and sy > 0
  998.             move_diagonal(6, 8)
  999.             move_random unless moving?
  1000.             enable_diagonal(9)
  1001.          elsif sx > 0 and sy > 0
  1002.             move_diagonal(4, 8)
  1003.             move_random unless moving?
  1004.             enable_diagonal(7)
  1005.          elsif sx > 0 and sy < 0
  1006.             move_diagonal(4, 2)
  1007.             move_random unless moving?
  1008.             enable_diagonal(1)
  1009.          elsif sx < 0 and sy < 0
  1010.             move_diagonal(6, 2)
  1011.             move_random unless moving?
  1012.             enable_diagonal(3)
  1013.          elsif sx < 0
  1014.             move_straight(6)
  1015.          elsif sx > 0
  1016.             move_straight(4)
  1017.          elsif sy > 0
  1018.             move_straight(8)
  1019.          elsif sy < 0
  1020.             move_straight(2)
  1021.          end
  1022.          if abs_sx != 1 and abs_sy != 1
  1023.             move_random unless moving?
  1024.          end  
  1025.       end
  1026. end
  1027.  
  1028. #--------------------------------------------------------------------------
  1029. # ● 右转_45度
  1030. #--------------------------------------------------------------------------      
  1031. def turn_right_45
  1032.      if @diagonal and @diagonal_direction != 0     
  1033.         case @diagonal_direction
  1034.           when 1;  set_direction(4)
  1035.           when 3;  set_direction(2)
  1036.           when 7;  set_direction(8)
  1037.           when 9;  set_direction(6)  
  1038.         end
  1039.      else  
  1040.         case @direction
  1041.           when 2;  turn_lower_left
  1042.           when 4;  turn_upper_left
  1043.           when 6;  turn_lower_right
  1044.           when 8;  turn_upper_right
  1045.         end
  1046.      end  
  1047. end
  1048.  
  1049. #--------------------------------------------------------------------------
  1050. # ● 左转_45
  1051. #--------------------------------------------------------------------------  
  1052. def turn_left_45
  1053.      if @diagonal and @diagonal_direction != 0     
  1054.         case @diagonal_direction
  1055.           when 1;  set_direction(2)
  1056.           when 3;  set_direction(6)
  1057.           when 7;  set_direction(4)
  1058.           when 9;  set_direction(8)
  1059.         end
  1060.      else  
  1061.         case @direction
  1062.           when 2;  turn_lower_right
  1063.           when 4;  turn_lower_left
  1064.           when 6;  turn_upper_right
  1065.           when 8;  turn_upper_left
  1066.         end
  1067.      end  
  1068. end
  1069.  
  1070. #--------------------------------------------------------------------------
  1071. # ● 右转_90度
  1072. #--------------------------------------------------------------------------   
  1073. alias diagonal_turn_right_90 turn_right_90
  1074.   def turn_right_90
  1075.       if @diagonal and @diagonal_direction != 0
  1076.          turn_diagonal_right_90
  1077.          return
  1078.       end  
  1079.       diagonal_turn_right_90
  1080.   end
  1081.  
  1082. #--------------------------------------------------------------------------
  1083. # ● 斜角右转_90度
  1084. #--------------------------------------------------------------------------   
  1085.   def turn_diagonal_right_90
  1086.       case @diagonal_direction
  1087.          when 1;  turn_upper_left
  1088.          when 3;  turn_lower_left
  1089.          when 7;  turn_upper_right
  1090.          when 9;  turn_lower_right
  1091.       end
  1092.   end
  1093.  
  1094. #--------------------------------------------------------------------------
  1095. # ● 左转_90度
  1096. #--------------------------------------------------------------------------   
  1097.   alias diagonal_turn_left_90 turn_left_90
  1098.   def turn_left_90
  1099.       if @diagonal and @diagonal_direction != 0
  1100.          turn_diagonal_left_90
  1101.          return
  1102.       end
  1103.       diagonal_turn_left_90
  1104.   end  
  1105.  
  1106. #--------------------------------------------------------------------------
  1107. # ● 斜角左转_90度
  1108. #--------------------------------------------------------------------------   
  1109.   def turn_diagonal_left_90
  1110.       case @diagonal_direction
  1111.          when 1;  turn_lower_right
  1112.          when 3;  turn_upper_right
  1113.          when 7;  turn_lower_left
  1114.          when 9;  turn_upper_left
  1115.       end
  1116.   end     
  1117.  
  1118.   #--------------------------------------------------------------------------
  1119.   # ● 转_180度
  1120.   #--------------------------------------------------------------------------
  1121.   alias diagonal_turn_180 turn_180
  1122.   def turn_180  
  1123.       if @diagonal and @diagonal_direction != 0
  1124.          turn_diagonal_180
  1125.          return
  1126.       end
  1127.       diagonal_turn_180
  1128.   end
  1129.  
  1130. #--------------------------------------------------------------------------
  1131. # ● 斜角转_180度
  1132. #--------------------------------------------------------------------------   
  1133.   def turn_diagonal_180
  1134.       case @diagonal_direction
  1135.          when 1;  turn_upper_right
  1136.          when 3;  turn_upper_left
  1137.          when 7;  turn_lower_right
  1138.          when 9;  turn_lower_left
  1139.       end
  1140.   end  
  1141.  
  1142. #--------------------------------------------------------------------------
  1143. # ● 随机移动
  1144. #--------------------------------------------------------------------------   
  1145.   alias diagonal_turn_random turn_random
  1146.   def turn_random
  1147.       if @diagonal
  1148.          turn_diagonal_random
  1149.          return
  1150.       end  
  1151.       diagonal_turn_random
  1152.   end  
  1153.  
  1154. #--------------------------------------------------------------------------
  1155. # ● 斜角随机移动
  1156. #--------------------------------------------------------------------------   
  1157.   def turn_diagonal_random
  1158.       case rand(8)
  1159.           when 0;  set_direction(8)
  1160.           when 1;  set_direction(6)
  1161.           when 2;  set_direction(4)
  1162.           when 3;  set_direction(2)
  1163.           when 4;  turn_lower_left  
  1164.           when 5;  turn_lower_right
  1165.           when 6;  turn_upper_left  
  1166.           when 7;  turn_upper_right
  1167.       end
  1168.   end
  1169.  
  1170. end   
  1171.  
  1172. #===============================================================================
  1173. # ■ Game_Player
  1174. #===============================================================================
  1175. class Game_Player < Game_Character
  1176.  
  1177.   #--------------------------------------------------------------------------
  1178.   # ● Move By Input
  1179.   #--------------------------------------------------------------------------   
  1180.   alias diagonal_move_by_input move_by_input
  1181.   def move_by_input
  1182.       if XAS_SYSTEM::PLAYER_DIAGONAL_MOVEMENT
  1183.          player_diagonal_move_by_input
  1184.         # update_sprite_diagonal
  1185.          update_return_direction
  1186.          return
  1187.       end
  1188.       diagonal_move_by_input
  1189.   end   
  1190.  
  1191.   #--------------------------------------------------------------------------
  1192.   # ● Update Sprite Diagonal
  1193.   #--------------------------------------------------------------------------        
  1194.   def update_sprite_diagonal
  1195.       return if @diagonal_direction == 0
  1196.       return if self.action != nil
  1197.       return if @dash_active
  1198.       make_pose("_Diagonal", 2)
  1199.   end  
  1200.  
  1201.   #--------------------------------------------------------------------------
  1202.   # ● Update Return Direction
  1203.   #--------------------------------------------------------------------------         
  1204.   def update_return_direction
  1205.       return if XAS_BA::DIAGONAL_DURATION_ENABLE == false
  1206.       return if @diagonal_time == 0
  1207.       return if moving? or @stop
  1208.       @diagonal_time -= 1
  1209.       @diagonal_direction = 0 if @diagonal_time == 0
  1210.   end
  1211.  
  1212.   #--------------------------------------------------------------------------
  1213.   # ● Player Diagonal Move By Input
  1214.   #--------------------------------------------------------------------------      
  1215.   def player_diagonal_move_by_input   
  1216.       return unless movable?
  1217.       return if $game_map.interpreter.running?
  1218.       case Input.dir8
  1219.            when 1
  1220.                move_diagonal(4, 2)
  1221.                unless moving?
  1222.                    move_straight(4)
  1223.                    move_straight(2)                 
  1224.                end  
  1225.                @diagonal_direction = 1  
  1226.            when 2; move_straight(2)
  1227.            when 3
  1228.                 move_diagonal(6, 2)
  1229.                 unless moving?
  1230.                    move_straight(6)
  1231.                    move_straight(2)
  1232.                 end
  1233.                 @diagonal_direction = 3
  1234.            when 4;  move_straight(4)
  1235.            when 6;  move_straight(6)
  1236.            when 7
  1237.                  move_diagonal(4, 8)
  1238.                  unless moving?
  1239.                     move_straight(4)
  1240.                     move_straight(8)
  1241.                 end
  1242.                 @diagonal_direction = 7
  1243.            when 8;  move_straight(8)
  1244.            when 9  
  1245.                  move_diagonal(6, 8)
  1246.                  unless moving?
  1247.                     move_straight(6)
  1248.                     move_straight(8)
  1249.                 end
  1250.                 @diagonal_direction = 9  
  1251.       end
  1252.   end  
  1253.  
  1254. end
  1255.  
  1256.  
  1257. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  1258. #■ MOVEMENT - FORCE ACTION
  1259. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  1260.  
  1261.  
  1262. #===============================================================================
  1263. # ■ Game Character
  1264. #===============================================================================
  1265. class Game_Character < Game_CharacterBase
  1266.  
  1267.   #--------------------------------------------------------------------------
  1268.   # ● moving 2?
  1269.   #--------------------------------------------------------------------------  
  1270.   def moving2?
  1271.       @real_x != @x || @real_y != @y
  1272.   end   
  1273.  
  1274.   #--------------------------------------------------------------------------
  1275.   # ● Can Force Action?
  1276.   #--------------------------------------------------------------------------         
  1277.   def can_force_action?
  1278.       return false if @force_action_times  == 0
  1279.       return false if self.moving2?
  1280.       return false if self.jumping?
  1281.       return false if self.knockbacking?
  1282.       return false if self.stop
  1283.       return true
  1284.   end
  1285.  
  1286.   #--------------------------------------------------------------------------
  1287.   # ● Update Force Action
  1288.   #--------------------------------------------------------------------------        
  1289.   def update_force_action
  1290.       @force_action_times -= 1
  1291.       execute_force_action
  1292.       execute_force_action_tool_effect if @tool_id > 0 and @tool_effect != ""
  1293.       reset_auto_action if @force_action_times == 0
  1294.   end
  1295.  
  1296.   #--------------------------------------------------------------------------
  1297.   # ● Execute Force Action
  1298.   #--------------------------------------------------------------------------         
  1299.   def execute_force_action  
  1300.       case @force_action
  1301.         when "Forward"
  1302.             move_forward
  1303.         when "Backward"
  1304.             move_backward
  1305.         when "Toward Player"   
  1306.             move_toward_player
  1307.         when "Move Left"   
  1308.             move_straight(4)
  1309.         when "Move Right"
  1310.             move_straight(6)
  1311.         when "Move Up"   
  1312.             move_straight(8)
  1313.         when "Move Down"
  1314.             move_straight(2)
  1315.         when "All Shoot"  
  1316.               if self.action != nil
  1317.                  turn_right_45
  1318.                  self.shoot(self.action.id) unless @force_action_times == 0
  1319.               end
  1320.         when "Four Shoot"  
  1321.               if self.action != nil
  1322.                  turn_right_90
  1323.                  self.shoot(self.action.id) unless @force_action_times == 0
  1324.               end               
  1325.         when "Three Shoot"  
  1326.               if self.action != nil
  1327.                  case @force_action_times
  1328.                      when 2
  1329.                        turn_right_45
  1330.                      when 1
  1331.                        turn_left_90
  1332.                      when 0
  1333.                        turn_right_45
  1334.                  end  
  1335.                  self.shoot(self.action.id) unless @force_action_times == 0
  1336.               end      
  1337.         when "Two Shoot"  
  1338.               if self.action != nil
  1339.                  turn_180
  1340.                  self.shoot(self.action.id) unless @force_action_times == 0
  1341.               end   
  1342.         end  
  1343.   end  
  1344.  
  1345.   #--------------------------------------------------------------------------
  1346.   # ● Execute Force Action Tool Effect
  1347.   #--------------------------------------------------------------------------
  1348.   def execute_force_action_tool_effect
  1349.       action_effect_during_move     
  1350.       action_effect_after_move if @force_action_times == 0
  1351.   end  
  1352.  
  1353.   #--------------------------------------------------------------------------
  1354.   # ● Auto Action Effect During Move
  1355.   #--------------------------------------------------------------------------            
  1356.   def reset_auto_action  
  1357.       @force_action = ""
  1358.       @force_action_times = 0
  1359.       @anime_count = 0
  1360.   end
  1361.  
  1362.   #--------------------------------------------------------------------------
  1363.   # ● Action Effect During Move
  1364.   #--------------------------------------------------------------------------         
  1365.   def action_effect_during_move  
  1366.       if @tool_effect == "Boomerang" and @force_action == "Toward Player"  
  1367.          if @x == $game_player.x and @y == $game_player.y  
  1368.             self.action.duration = 15
  1369.             @force_action_times = 0
  1370.             @force_action_type = ""            
  1371.           end
  1372.       end
  1373.   end  
  1374.  
  1375.   #--------------------------------------------------------------------------
  1376.   # ● Action Effect After Move
  1377.   #--------------------------------------------------------------------------            
  1378.   def action_effect_after_move
  1379.       if @tool_effect == "Boomerang"
  1380.          @force_action_times = 30
  1381.          @force_action = "Toward Player"   
  1382.          @move_frequency = 6
  1383.          @move_speed = 5.5           
  1384.       end     
  1385.   end      
  1386.  
  1387. end  
  1388.  
  1389.  
  1390. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  1391. #■ MOVEMENT - EXTRA MOVEMENT
  1392. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  1393.  
  1394.  
  1395. #===============================================================================
  1396. # ■ Game Character
  1397. #===============================================================================
  1398. class Game_Character < Game_CharacterBase
  1399.  
  1400.   #--------------------------------------------------------------------------
  1401.   # ● Check XY
  1402.   #--------------------------------------------------------------------------      
  1403.   def check_xy
  1404.       @pre_x = @x
  1405.       @pre_y = @y
  1406.   end   
  1407.  
  1408.   #--------------------------------------------------------------------------
  1409.   # ● Turn Reverse
  1410.   #--------------------------------------------------------------------------         
  1411.   def turn_reverse(dir)
  1412.       case dir     
  1413.         when 2; set_direction(8)
  1414.         when 4; set_direction(6)
  1415.         when 6; set_direction(4)
  1416.         when 8; set_direction(2)
  1417.       end   
  1418.   end
  1419.  
  1420.   #--------------------------------------------------------------------------
  1421.   # ● Org Here
  1422.   #--------------------------------------------------------------------------        
  1423.   def org_here
  1424.       @orig_pos_x = @x
  1425.       @orig_pos_y = @y
  1426.   end  
  1427.  
  1428.   #--------------------------------------------------------------------------
  1429.   # ● return_org
  1430.   #--------------------------------------------------------------------------         
  1431.   def return_org(type = 0)
  1432.       if type == 1
  1433.          moveto(@orig_pos_x,@orig_pos_x)
  1434.       else  
  1435.          jump(0,0)
  1436.       end
  1437.       @x = @orig_pos_x
  1438.       @y = @orig_pos_y
  1439.   end  
  1440.  
  1441.   #--------------------------------------------------------------------------
  1442.   # ● Dual Switch
  1443.   #--------------------------------------------------------------------------   
  1444.   def dual_switch(switch_on, switch_off,percentage = 100)
  1445.       enable_per = rand(100)
  1446.       if enable_per <= percentage
  1447.          $game_switches[switch_on] = true   
  1448.          $game_switches[switch_off] = false
  1449.          $game_map.need_refresh = true
  1450.       end   
  1451.   end   
  1452.  
  1453.   #--------------------------------------------------------------------------
  1454.   # ● Move Forward 2
  1455.   #--------------------------------------------------------------------------  
  1456.   def move_forward2
  1457.       return if moving2?
  1458.       move_forward
  1459.   end  
  1460.  
  1461.   #--------------------------------------------------------------------------
  1462.   # ● Bounce Direction
  1463.   #--------------------------------------------------------------------------  
  1464.   def bounce_direction
  1465.       @diagonal = true
  1466.       turn_random  
  1467.   end
  1468.  
  1469.   #--------------------------------------------------------------------------
  1470.   # ● Turn_back
  1471.   #--------------------------------------------------------------------------            
  1472.   def turn_back
  1473.       if @diagonal_direction != 0
  1474.          case @diagonal_direction
  1475.               when 1
  1476.                 turn_upper_right
  1477.               when 3
  1478.                 turn_upper_left
  1479.               when 7
  1480.                 turn_lower_right
  1481.               when 9         
  1482.                 turn_lower_left
  1483.          end
  1484.       else
  1485.           case @direction
  1486.                when 2;   set_direction(8)
  1487.                when 4;   @direction = 6#move_straight(6)#set_direction(6)
  1488.                when 6;   set_direction(4)
  1489.                when 8;   set_direction(2)
  1490.           end
  1491.       end     
  1492.   end  
  1493.  
  1494.   #--------------------------------------------------------------------------
  1495.   # ● Jump_high
  1496.   #--------------------------------------------------------------------------
  1497.   def jump_high(x_plus,y_plus,high = 10)   
  1498.       @x += x_plus
  1499.       @y += y_plus
  1500.       distance = Math.sqrt(x_plus * x_plus + y_plus * y_plus).round
  1501.       @jump_peak = high + distance - @move_speed
  1502.       @jump_count = @jump_peak * 2
  1503.       @stop_count = 0
  1504.       straighten
  1505.   end
  1506.  
  1507.   #--------------------------------------------------------------------------
  1508.   # ● Passable Temp
  1509.   #--------------------------------------------------------------------------   
  1510. def passable_temp_id?(x, y)
  1511.      return false unless $game_map.valid?(x, y)   
  1512.      return true if @through or debug_through?     
  1513.      return false unless map_passable?(x, y,@direction)         
  1514.      return false if collide_with_characters_temp_id?(x, y)
  1515.      return true                                   
  1516.   end
  1517.  
  1518.   #--------------------------------------------------------------------------
  1519.   # ● Collide With Characters
  1520.   #--------------------------------------------------------------------------      
  1521.   def collide_with_characters_temp_id?(x, y)
  1522.       for event in $game_map.events_xy(x, y)         
  1523.           unless event.through or event.battler != nil   
  1524.              return true if self.is_a?(Game_Event)      
  1525.              return true if event.priority_type >= 1     
  1526.           end
  1527.       end
  1528.       return false
  1529.   end  
  1530.  
  1531.   #--------------------------------------------------------------------------
  1532.   # ● Force Move Route
  1533.   #--------------------------------------------------------------------------
  1534.   alias x_force_move_route force_move_route
  1535.   def force_move_route(move_route)
  1536.       if self.battler != nil and self.is_a?(Game_Event)
  1537.          return
  1538.       end  
  1539.       x_force_move_route(move_route)
  1540.   end  
  1541. end  
  1542.  
  1543.  
  1544. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  1545. #■ MOVEMENT - PLAYER COMMANDS
  1546. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  1547.  
  1548.  
  1549. #==============================================================================
  1550. # ■ Game_Player
  1551. #==============================================================================
  1552. class Game_Player < Game_Character
  1553.   include XAS_BUTTON
  1554.  
  1555.   #--------------------------------------------------------------------------
  1556.   # ● Update Action Command
  1557.   #--------------------------------------------------------------------------  
  1558.   def update_action_command
  1559.       update_check_battler_equipment if can_check_battler_equipment?
  1560.       update_dash_button
  1561.       update_auto_target_shoot
  1562.       update_combo_time
  1563.       update_action_1_button
  1564.       update_action_2_button
  1565.       update_skill_button
  1566.       update_item_button
  1567.       update_change_leader_button
  1568.       update_charge_button
  1569.   end  
  1570.  
  1571.   #--------------------------------------------------------------------------
  1572.   # ● Can Use Command?
  1573.   #--------------------------------------------------------------------------      
  1574.   def can_use_command?
  1575.       return false if $game_map.interpreter.running?
  1576.       return false if $game_message.visible
  1577.       return false if self.battler == nil
  1578.       return false if self.action != nil
  1579.       return false if self.knockbacking?      
  1580.       return false if @stop
  1581.       return true
  1582.   end   
  1583.  
  1584.   #--------------------------------------------------------------------------
  1585.   # ● Update Check Battler Equipment
  1586.   #--------------------------------------------------------------------------      
  1587.   def update_check_battler_equipment
  1588.  
  1589.   end  
  1590.  
  1591.   #--------------------------------------------------------------------------
  1592.   # ● Can Check Battler Equipment
  1593.   #--------------------------------------------------------------------------        
  1594.   def can_check_battler_equipment?
  1595.       if self.battler.old_equipment_id[0] != self.battler.equips[0] or
  1596.          self.battler.old_equipment_id[1] != self.battler.equips[1] or
  1597.          self.battler.old_equipment_id[2] != self.battler.equips[2] or
  1598.          self.battler.old_equipment_id[3] != self.battler.equips[3] or
  1599.          self.battler.old_equipment_id[4] != self.battler.equips[4]
  1600.          self.battler.old_equipment_id[0] = self.battler.equips[0]
  1601.          self.battler.old_equipment_id[1] = self.battler.equips[1]
  1602.          self.battler.old_equipment_id[2] = self.battler.equips[2]
  1603.          self.battler.old_equipment_id[3] = self.battler.equips[3]
  1604.          self.battler.old_equipment_id[4] = self.battler.equips[4]      
  1605.          return true
  1606.       end   
  1607.       return false
  1608.   end
  1609.  
  1610.   #--------------------------------------------------------------------------
  1611.   # ● Update Charge Button
  1612.   #--------------------------------------------------------------------------   
  1613.   def update_charge_button
  1614.       return unless can_charge_command?
  1615.       if Input.press?(ACTION_1_BUTTON) and ENABLE_ACTION_1_BUTTON
  1616.          update_charge_effect(0)
  1617.          reset_charge_temp if Input.press?(ACTION_2_BUTTON) and ENABLE_ACTION_2_BUTTON
  1618.       elsif Input.press?(ACTION_2_BUTTON)
  1619.          update_charge_effect(1)
  1620.          reset_charge_temp if Input.press?(ACTION_1_BUTTON)
  1621.       else
  1622.          if self.battler.x_charge_action[2] >= self.battler.x_charge_action[1]
  1623.             self.shoot(self.battler.x_charge_action[0])
  1624.          end
  1625.         reset_charge_temp
  1626.       end  
  1627.   end
  1628.  
  1629.   #--------------------------------------------------------------------------
  1630.   # ● Update Charge Effect
  1631.   #--------------------------------------------------------------------------        
  1632.   def update_charge_effect(type)
  1633.       if self.battler.x_charge_action[2] == 0
  1634.          return unless equipped_charge_action?(type)
  1635.       end  
  1636.       if self.battler.x_charge_action[2] < self.battler.x_charge_action[1]
  1637.          self.battler.x_charge_action[2] += 1
  1638.       end
  1639.       self.battler.x_charge_action[3] += 1
  1640.       if self.battler.x_charge_action[3] > XAS_ANIMATION::LOOP_ANIMATIONS_SPEED
  1641.          self.battler.x_charge_action[3] = 0
  1642.          if self.battler.x_charge_action[2] < self.battler.x_charge_action[1]
  1643.             self.animation_id = XAS_ANIMATION::CHARGE_ANIMATION1_ID
  1644.          else
  1645.             self.animation_id = XAS_ANIMATION::CHARGE_ANIMATION2_ID
  1646.          end  
  1647.       end
  1648.   end
  1649.  
  1650.   #--------------------------------------------------------------------------
  1651.   # ● Equipped Charge Action
  1652.   #--------------------------------------------------------------------------         
  1653.   def equipped_charge_action?(type)
  1654.       case type
  1655.          when 0
  1656.            weapon = self.battler.equips[0]
  1657.          when 1
  1658.            weapon = self.battler.equips[1]
  1659.       end
  1660.       if weapon == nil
  1661.          return false
  1662.          reset_charge_temp
  1663.       end
  1664.       if weapon.note =~ /<Charge Action = (\d+) - (\d+)>/   or
  1665.         weapon.note =~ /<蓄力技能 = (\d+) - (\d+)>/
  1666.          self.battler.x_charge_action[0] = $1.to_i rescue 0#Skill ID
  1667.          self.battler.x_charge_action[1] = $2.to_i rescue 0#Max Time
  1668.          self.battler.x_charge_action[2] = 0#Current Time
  1669.          self.battler.x_charge_action[3] = 0#Loop Anime Time
  1670.          return true
  1671.       end            
  1672.       return false   
  1673.       reset_charge_temp
  1674.   end
  1675.  
  1676.   #--------------------------------------------------------------------------
  1677.   # ● Update Combo Time
  1678.   #--------------------------------------------------------------------------        
  1679.   def update_combo_time
  1680.       return if self.battler.x_combo[2] == 0
  1681.       self.battler.x_combo[2] -= 1
  1682.       if self.battler.x_combo[2] == 0
  1683.          self.battler.x_combo[0] = 0
  1684.          self.battler.x_combo[1] = -1
  1685.       end   
  1686.   end  
  1687.  
  1688.   #--------------------------------------------------------------------------
  1689.   # ● Can Use Weapon Command?
  1690.   #--------------------------------------------------------------------------   
  1691.   def can_use_weapon_command?
  1692.       return false if $game_system.command_enable == false
  1693.       return false unless ENABLE_ACTION_1_BUTTON
  1694.       return false if self.battler.shield
  1695.       return false if self.battler.cast_action[4] > 0
  1696.       return false if self.battler.x_charge_action[2] > 0
  1697.       return true
  1698.   end
  1699.  
  1700.   #--------------------------------------------------------------------------
  1701.   # ● Can Use Shield Command?
  1702.   #--------------------------------------------------------------------------      
  1703.   def can_use_shield_command?
  1704.       return false if $game_system.command_enable == false
  1705.       return false unless ENABLE_ACTION_2_BUTTON
  1706.       return false if self.battler.equips[1] == nil
  1707.       return false if self.battler.equips[1].id == 0
  1708.       return false if self.battler.cast_action[4] > 0
  1709.       return false if self.battler.x_charge_action[2] > 0
  1710.       return true
  1711.   end
  1712.  
  1713.   #--------------------------------------------------------------------------
  1714.   # ● Can Use Skill Command?
  1715.   #--------------------------------------------------------------------------   
  1716.   def can_use_skill_command?
  1717.       return false if $game_system.command_enable == false
  1718.       return false unless ENABLE_SKILL_BUTTON
  1719.       return false if self.battler.shield
  1720.       return false if self.battler.cast_action[4] > 0
  1721.       return false if self.battler.x_charge_action[2] > 0
  1722.       return true
  1723.   end   
  1724.  
  1725.   #--------------------------------------------------------------------------
  1726.   # ● Can Use Item Command?
  1727.   #--------------------------------------------------------------------------   
  1728.   def can_use_item_command?
  1729.       return false if $game_system.command_enable == false
  1730.       return false unless ENABLE_ITEM_BUTTON
  1731.       return false if self.battler.shield   
  1732.       return false if self.battler.cast_action[4] > 0
  1733.       return false if self.battler.x_charge_action[2] > 0
  1734.       return true
  1735.   end      
  1736.  
  1737.   #--------------------------------------------------------------------------
  1738.   # ● Can Charge Command
  1739.   #--------------------------------------------------------------------------      
  1740.   def can_charge_command?
  1741.       return false if $game_system.command_enable == false
  1742.       return false if self.battler.cast_action[4] > 0
  1743.       return false if self.battler.shield      
  1744.       return true
  1745.   end   
  1746.  
  1747.   #--------------------------------------------------------------------------
  1748.   # ● Can Use Change Leader Command?
  1749.   #--------------------------------------------------------------------------      
  1750.   def can_use_change_leader_command?
  1751.       return false unless ENABLE_CHANGE_LEADER_BUTTON
  1752.       return false if self.battler.shield   
  1753.       return false if self.battler.cast_action[4] > 0
  1754.       return false if self.battler.x_charge_action[2] > 0
  1755.       return false if $game_temp.change_leader_wait_time > 0
  1756.       return true
  1757.   end
  1758.  
  1759.   #--------------------------------------------------------------------------
  1760.   # ● State_Seal Command
  1761.   #--------------------------------------------------------------------------        
  1762.   def state_seal_command?(type)
  1763.       seal = false
  1764.       case type  
  1765.          when 0
  1766.             seal = true if self.battler.state_mute
  1767.             seal = true if self.battler.state_seal_attack
  1768.          when 1
  1769.             seal = true if self.battler.state_mute
  1770.             seal = true if self.battler.state_seal_attack
  1771.          when 2
  1772.             seal = true if self.battler.state_mute
  1773.             seal = true if self.battler.state_seal_skill
  1774.          when 3  
  1775.             seal = true if self.battler.state_mute   
  1776.             seal = true if self.battler.state_seal_item
  1777.       end
  1778.       if seal
  1779.          seal_effect
  1780.          return true
  1781.       end  
  1782.       return false      
  1783.   end  
  1784.  
  1785.   #--------------------------------------------------------------------------
  1786.   # ● Check Equipped Action(修改BY W.S)
  1787.   #--------------------------------------------------------------------------   
  1788.   def check_equipped_action(command_type)
  1789.       case command_type
  1790.          when 0 # Weapon 1
  1791.             weapon = self.battler.equips[0]
  1792.             if weapon == nil
  1793.                self.battler.x_action1_id = 0
  1794.                return
  1795.              end
  1796.               if weapon.note =~ /<Action ID = (\d+)>/  
  1797.                weapon.note =~ /<Action ID = (\d+)>/
  1798.               elsif weapon.note =~ /<动作ID = (\d+)>/
  1799.                weapon.note =~ /<动作ID = (\d+)>/
  1800.               end
  1801.             action_id =  $1.to_i
  1802.             action_id = 0 if action_id == nil
  1803.             self.battler.x_action1_id = action_id
  1804.          when 1 # Weapon 2
  1805.             weapon = self.battler.equips[1]
  1806.             if weapon == nil
  1807.                self.battler.x_action2_id = 0
  1808.                return
  1809.              end   
  1810.               if weapon.note =~ /<Action ID = (\d+)>/  
  1811.                weapon.note =~ /<Action ID = (\d+)>/
  1812.               elsif weapon.note =~ /<动作ID = (\d+)>/
  1813.                weapon.note =~ /<动作ID = (\d+)>/
  1814.               end
  1815.             action_id =  $1.to_i
  1816.             action_id = 0 if action_id == nil            
  1817.             self.battler.x_action2_id = action_id
  1818.          when 2 # Skill   
  1819.  
  1820.          when 3 # Item
  1821.             item_id = $data_items[self.battler.item_id]
  1822.             if item_id == nil            
  1823.                self.battler.x_item_id =  0
  1824.                return
  1825.              end   
  1826.               if item_id.note =~ /<Action ID = (\d+)>/  
  1827.                item_id.note =~ /<Action ID = (\d+)>/
  1828.               elsif item_id.note =~ /<动作ID = (\d+)>/
  1829.                item_id.note =~ /<动作ID = (\d+)>/
  1830.               end
  1831.             action_id =  $1.to_i
  1832.             action_id = 0 if action_id == nil     
  1833.             self.battler.x_item_id = action_id
  1834.       end     
  1835.   end
  1836.  
  1837.   #--------------------------------------------------------------------------
  1838.   # ● Execute Combo
  1839.   #--------------------------------------------------------------------------        
  1840.   def execute_combo?(type)  
  1841.       if type == self.battler.x_combo[1] and self.battler.x_combo[0] != 0
  1842.          return if state_seal_command?(type)        
  1843.          self.shoot(self.battler.x_combo[0])
  1844.          self.battler.x_combo[1] = type
  1845.          return true
  1846.       end  
  1847.       self.battler.x_combo[0] = 0
  1848.       self.battler.x_combo[1] = type
  1849.       self.battler.x_combo[2] = 0
  1850.       return false
  1851.   end
  1852.  
  1853.   #--------------------------------------------------------------------------
  1854.   # ● Update Change Leader Button
  1855.   #--------------------------------------------------------------------------        
  1856.   def update_change_leader_button
  1857.       if Input.trigger?(CHANGE_LEADER_BUTTON)
  1858.          return unless can_use_change_leader_command?
  1859.          change_leader     
  1860.       end
  1861.   end
  1862.  
  1863.   #--------------------------------------------------------------------------
  1864.   # ● Update Action 1 Button
  1865.   #--------------------------------------------------------------------------      
  1866.   def update_action_1_button
  1867.       if Input.trigger?(ACTION_1_BUTTON)
  1868.          type = 0
  1869.          return unless can_use_weapon_command?
  1870.          return if execute_combo?(type)
  1871.          check_equipped_action(type)
  1872.          action_id = self.battler.x_action1_id
  1873.          return if action_id == 0
  1874.          return if state_seal_command?(type)
  1875.          self.shoot(action_id)
  1876.       end   
  1877.   end
  1878.  
  1879.   #--------------------------------------------------------------------------
  1880.   # ● Update Action 2 Button
  1881.   #--------------------------------------------------------------------------   
  1882.   def update_action_2_button
  1883.       if Input.trigger?(ACTION_2_BUTTON)
  1884.          if self.battler.equips[1].is_a?(RPG::Weapon)
  1885.             type = 1
  1886.             return unless can_use_weapon_command?
  1887.             return if execute_combo?(type)
  1888.             check_equipped_action(type)
  1889.             action_id = self.battler.x_action2_id
  1890.             return if action_id == 0
  1891.             return if state_seal_command?(type)            
  1892.             self.shoot(action_id)
  1893.             return
  1894.          end   
  1895.       end         
  1896.       update_shield_button
  1897.   end
  1898.  
  1899.   #--------------------------------------------------------------------------
  1900.   # ● Update Shield Button(修改BY W.S)
  1901.   #--------------------------------------------------------------------------        
  1902.   def update_shield_button
  1903.       if Input.press?(ACTION_2_BUTTON)
  1904.          if can_use_shield_command?
  1905.             unless self.battler.shield  
  1906.                 shield = self.battler.equips[1]
  1907.                 if shield.note =~ /<Action>/ or shield.note =~ /<动作>/
  1908.                    if shield.note =~ /<Pose = (\w+)>/ or shield.note =~ /<行走图 = (\w+)>/
  1909.                       make_pose($1.to_s, 2)
  1910.                    end
  1911.                 else   
  1912.                    self.battler.shield = false
  1913.                    return
  1914.                 end
  1915.             end
  1916.             self.x_pose_duration = 2
  1917.             self.battler.shield = true
  1918.             update_shield_diretion_button
  1919.          else
  1920.             self.battler.shield = false
  1921.          end  
  1922.       else   
  1923.          self.battler.shield = false
  1924.       end      
  1925.   end
  1926.  
  1927.   #--------------------------------------------------------------------------
  1928.   # ● update_shield_direction_button
  1929.   #--------------------------------------------------------------------------         
  1930.   def update_shield_diretion_button
  1931.       return if @direction_fix
  1932.       case Input.dir4
  1933.          when 2;  set_direction(2)   
  1934.          when 4;  set_direction(4)   
  1935.          when 6;  set_direction(6)   
  1936.          when 8;  set_direction(8)   
  1937.       end
  1938.   end
  1939.  
  1940.   #--------------------------------------------------------------------------
  1941.   # ● Update Skill Button
  1942.   #--------------------------------------------------------------------------      
  1943.   def update_skill_button
  1944.       if Input.trigger?(SKILL_BUTTON)
  1945.          type = 2
  1946.          return unless can_use_skill_command?
  1947.          return if execute_combo?(type)
  1948.          check_equipped_action(type)
  1949.          action_id = self.battler.skill_id
  1950.          return if action_id == 0
  1951.          return if state_seal_command?(type)         
  1952.          self.shoot(action_id)
  1953.       end   
  1954.   end
  1955.  
  1956.   #--------------------------------------------------------------------------
  1957.   # ● Update Item Button
  1958.   #--------------------------------------------------------------------------      
  1959.   def update_item_button
  1960.       if Input.trigger?(ITEM_BUTTON)
  1961.          type = 3         
  1962.          return unless can_use_item_command?
  1963.          return if execute_combo?(type)
  1964.          check_equipped_action(type)
  1965.          action_id = self.battler.x_item_id
  1966.          return if action_id == 0
  1967.          return if state_seal_command?(type)         
  1968.          self.shoot(action_id)
  1969.       end   
  1970.   end
  1971.  
  1972.   #--------------------------------------------------------------------------
  1973.   # ● Update Auto Target Shoot
  1974.   #--------------------------------------------------------------------------
  1975.   def update_auto_target_shoot
  1976.       return if $game_temp.xas_target_time == 0
  1977.       return if $game_temp.xas_target_shoot_id == 0
  1978.       return if $game_temp.xas_target_x == 0 and $game_temp.xas_target_y == 0   
  1979.       $game_temp.xas_target_time -= 1
  1980.       if $game_temp.xas_target_time == 0
  1981.          self.shoot($game_temp.xas_target_shoot_id)
  1982.          $game_temp.xas_target_shoot_id = 0
  1983.       end   
  1984.   end   
  1985.  
  1986. #--------------------------------------------------------------------------
  1987. # ● Dash?
  1988. #--------------------------------------------------------------------------            
  1989. alias x_dash dash?
  1990. def dash?   
  1991.      return false if XAS_SYSTEM::DASH_SYSTEM
  1992.      x_dash
  1993. end
  1994.  
  1995. #--------------------------------------------------------------------------
  1996. # ● Can Dash?
  1997. #--------------------------------------------------------------------------              
  1998. def can_dash?
  1999.      return false unless XAS_BUTTON::ENABLE_DASH_BUTTON
  2000.      return false if self.battler.shield
  2001.      return true if Input.press?(XAS_BUTTON::DASH_BUTTON)
  2002.      @dash_active = false
  2003.      return false
  2004. end
  2005.  
  2006. #--------------------------------------------------------------------------
  2007. # ● Update Dash Command
  2008. #--------------------------------------------------------------------------            
  2009. def update_dash_button
  2010.      return unless can_dash?
  2011.      @dash_active = true
  2012.      @anime_count -= 0.5 if moving?
  2013.      update_dash_sprite_name
  2014. end  
  2015.  
  2016. #--------------------------------------------------------------------------
  2017. # ● Update Dash Sprite Name
  2018. #--------------------------------------------------------------------------              
  2019. def update_dash_sprite_name
  2020.      make_pose("_Dash", 2)
  2021. end
  2022.  
  2023. end
  2024.  
  2025.  
  2026. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  2027. #■ TOOL - INITIALIZE
  2028. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  2029.  
  2030.  
  2031. #===============================================================================
  2032. # ■ Game_Map
  2033. #===============================================================================
  2034. class Game_Map
  2035.  
  2036.   attr_accessor :need_refresh_token
  2037.  
  2038.   #--------------------------------------------------------------------------
  2039.   # ● need_add_tokens
  2040.   #--------------------------------------------------------------------------  
  2041.   def need_add_tokens
  2042.       @need_add_tokens = [] if @need_add_tokens == nil
  2043.       return @need_add_tokens
  2044.   end
  2045.  
  2046.   #--------------------------------------------------------------------------
  2047.   # ● need_remove_tokens
  2048.   #--------------------------------------------------------------------------
  2049.   def need_remove_tokens
  2050.       @need_remove_tokens = [] if @need_remove_tokens == nil
  2051.       return @need_remove_tokens
  2052.   end
  2053.  
  2054.   #--------------------------------------------------------------------------
  2055.   # ● add_token
  2056.   #--------------------------------------------------------------------------
  2057.   def add_token(token_event)
  2058.       $game_temp.tool_event = [] if $game_temp.tool_event == nil
  2059.       $game_temp.tool_event.push(token_event)
  2060.       self.need_add_tokens.push(token_event)
  2061.       self.need_refresh_token = true
  2062.   end
  2063.  
  2064.   #--------------------------------------------------------------------------
  2065.   # ● remove_token
  2066.   #--------------------------------------------------------------------------
  2067.   def remove_token(token_event)
  2068.       @events.delete(token_event.id)
  2069.       self.need_remove_tokens.push(token_event)
  2070.       self.need_refresh_token = true
  2071.   end
  2072.  
  2073.   #--------------------------------------------------------------------------
  2074.   # ● clear_tokens
  2075.   #--------------------------------------------------------------------------
  2076.   def clear_tokens
  2077.       $game_system.tools_on_map.clear
  2078.       $game_system.tools_on_map = []
  2079.       for event in @events.values.dup
  2080.           remove_token(event) if event.is_a?(Token_Event)
  2081.       end
  2082.       channels = ["A", "B", "C", "D"]
  2083.       for id in 1001..(token_id_shift - 1)
  2084.           for a in channels
  2085.               key = [self.map_id, id, a]
  2086.               $game_self_switches.delete(key)
  2087.           end
  2088.       end
  2089.       clear_token_id
  2090.   end
  2091.  
  2092.   #--------------------------------------------------------------------------
  2093.   # ● Update
  2094.   #--------------------------------------------------------------------------      
  2095.   alias x_temp_tool_hash_update update
  2096.   def update(main = false)
  2097.       x_temp_tool_hash_update(main)
  2098.       update_add_tool_hash
  2099.   end
  2100.  
  2101.   #--------------------------------------------------------------------------
  2102.   # ● Update Add Toll Hash
  2103.   #--------------------------------------------------------------------------      
  2104.   def update_add_tool_hash  
  2105.       return if $game_temp.tool_event == nil
  2106.       for i in $game_temp.tool_event
  2107.           $game_map.events[i.id] = i
  2108.           execute_tool_effects_hash(i)
  2109.       end  
  2110.       $game_temp.tool_event.clear
  2111.       $game_temp.tool_event = nil
  2112.   end
  2113.  
  2114.   #--------------------------------------------------------------------------
  2115.   # ● Execute Toll Effects Hash
  2116.   #--------------------------------------------------------------------------        
  2117.   def execute_tool_effects_hash(i)
  2118.  
  2119.   end  
  2120. end
  2121.  
  2122. #===============================================================================
  2123. # ■ Game_SelfSwitches  
  2124. #===============================================================================
  2125. class Game_SelfSwitches
  2126.   def delete(key)
  2127.       @data.delete(key)
  2128.   end
  2129. end
  2130.  
  2131. #===============================================================================
  2132. # ■ Game_Map  
  2133. #===============================================================================
  2134. class Game_Map
  2135.  
  2136.   attr_accessor :token_id
  2137.  
  2138.   #--------------------------------------------------------------------------
  2139.   # ● token_id_shift
  2140.   #--------------------------------------------------------------------------  
  2141.   def token_id_shift
  2142.       @token_id  = 1000 if @token_id == nil
  2143.       @token_id += 1
  2144.       return @token_id
  2145.   end
  2146.  
  2147.   #--------------------------------------------------------------------------
  2148.   # ● clear_token_id
  2149.   #--------------------------------------------------------------------------  
  2150.   def clear_token_id
  2151.       @token_id = nil
  2152.   end
  2153. end
  2154.  
  2155. #===============================================================================
  2156. # ■ XRXS_CTS_RefreshToken
  2157. #===============================================================================
  2158. module XRXS_CTS_RefreshToken
  2159.  
  2160.   #--------------------------------------------------------------------------
  2161.   # ● refresh_token
  2162.   #--------------------------------------------------------------------------  
  2163.   def refresh_token
  2164.       for event in $game_map.need_add_tokens
  2165.           @character_sprites.push(Sprite_Character.new(@viewport1, event))
  2166.       end
  2167.       $game_map.need_add_tokens.clear
  2168.       for sprite in @character_sprites.dup
  2169.           if $game_map.need_remove_tokens.empty?
  2170.              break
  2171.           end
  2172.           if $game_map.need_remove_tokens.delete(sprite.character)
  2173.              @character_sprites.delete(sprite)
  2174.              sprite.dispose
  2175.           end
  2176.       end
  2177.       $game_map.need_refresh_token = false
  2178.   end
  2179. end
  2180.  
  2181. #===============================================================================
  2182. # ■  Spriteset_Map
  2183. #===============================================================================
  2184. class Spriteset_Map
  2185.   include XRXS_CTS_RefreshToken
  2186.  
  2187.   #--------------------------------------------------------------------------
  2188.   # ● Initialize
  2189.   #--------------------------------------------------------------------------   
  2190.   alias x_smap_initialize initialize
  2191.   def initialize
  2192.       setup_start
  2193.       x_smap_initialize
  2194.   end
  2195.  
  2196.   #--------------------------------------------------------------------------
  2197.   # ● Setup Start
  2198.   #--------------------------------------------------------------------------      
  2199.   def setup_start
  2200.       $game_player.reset_old_level(true)
  2201.   end
  2202.  
  2203. end
  2204.  
  2205. #===============================================================================
  2206. # ■ Game_Player
  2207. #===============================================================================
  2208. class Game_Player < Game_Character
  2209.  
  2210.   #--------------------------------------------------------------------------
  2211.   # ● x_reserve_transfer
  2212.   #--------------------------------------------------------------------------     
  2213.   alias x_reserve_transfer reserve_transfer
  2214.   def reserve_transfer(map_id, x, y, direction)
  2215.       $game_map.clear_tokens
  2216.       if $game_temp.tool_event != nil
  2217.          $game_temp.tool_event.clear
  2218.          $game_temp.tool_event = nil
  2219.       end   
  2220.       x_reserve_transfer(map_id, x, y, direction)
  2221.   end
  2222.  
  2223. end
  2224.  
  2225. #===============================================================================
  2226. # ■ Token_Event
  2227. #===============================================================================
  2228. class Token_Event < Game_Event
  2229.  
  2230.   #--------------------------------------------------------------------------
  2231.   # ● Token_Event
  2232.   #--------------------------------------------------------------------------
  2233.   def initialize(map_id, event)
  2234.       event.id = $game_map.token_id_shift
  2235.       super
  2236.   end
  2237.  
  2238.   #--------------------------------------------------------------------------
  2239.   # ● erase
  2240.   #--------------------------------------------------------------------------
  2241.   def erase
  2242.       super
  2243.       $game_map.remove_token(self)
  2244.   end
  2245. end
  2246.  
  2247.  
  2248. #===============================================================================
  2249. # ■  XRXS_ActionTemplate
  2250. #===============================================================================
  2251. module XRXS_ActionTemplate
  2252.   map_id = XAS_SYSTEM::ACTION_TEMPLATE_MAP_ID
  2253.   map = load_data(sprintf("Data/Map%03d.rvdata2", map_id))
  2254.   @@events = map.events
  2255. end
  2256.  
  2257. #===============================================================================
  2258. # ■  Token_Event
  2259. #===============================================================================
  2260. class Token_Event < Game_Event
  2261.   include XRXS_ActionTemplate
  2262. end
  2263.  
  2264. #===============================================================================
  2265. # ■  Game_Temp
  2266. #===============================================================================
  2267. class Game_Temp
  2268.   attr_accessor :active_token
  2269. end
  2270.  
  2271.  
  2272.  
  2273. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  2274. #■ TOOL - SHOOT COMMAND
  2275. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  2276.  
  2277.  
  2278. #===============================================================================
  2279. # ■ XAS ACTION
  2280. #===============================================================================
  2281. module XAS_ACTION
  2282.   attr_reader   :action
  2283.   attr_reader   :erased
  2284.  
  2285.   #--------------------------------------------------------------------------
  2286.   # ● shoot
  2287.   #--------------------------------------------------------------------------
  2288.   def shoot(action_id = 0)
  2289.       return if action_id == 0
  2290.       skill = $data_skills[action_id]
  2291.       return unless can_shoot?(skill)
  2292.       execute_user_effects(skill)
  2293.       execute_call_event(action_id)      
  2294.       self.action_attachment(action_id)
  2295.       execute_set_pose(action_id)
  2296.   end
  2297.  
  2298.   #--------------------------------------------------------------------------
  2299.   # ● Can Shoot
  2300.   #--------------------------------------------------------------------------   
  2301.   def can_shoot?(skill)
  2302.       if self.battler == nil and self.tool_id > 0
  2303.          @battler = self.action.user.battler
  2304.       end  
  2305.       return false if self.battler == nil
  2306.       return false if skill == nil
  2307.       return true if ignore_can_shoot?(skill)
  2308.       enough_cost = true
  2309.       return false if tools_on_map?(skill.id)      
  2310.       if self.battler.state_mute  
  2311.          seal_effect
  2312.          return false
  2313.       end   
  2314.       if self.battler.cast_action[4].between?(1,self.battler.cast_action[1] -1)
  2315.          return false
  2316.       end
  2317.       return false if check_cast_action?(skill)
  2318.       return false if check_auto_target_select?(skill)
  2319.       unless enough_skill_cost?(skill)
  2320.          Audio.se_play("Audio/SE/" + XAS_SOUND::ACTION_COST , 100, 100)
  2321.          return false
  2322.       end
  2323.       return true
  2324.   end
  2325.  
  2326.   #--------------------------------------------------------------------------
  2327.   # ● Ignore Can Shoot?     
  2328.   #--------------------------------------------------------------------------               
  2329.   def ignore_can_shoot?(skill)
  2330.       return false
  2331.   end
  2332.  
  2333.   #--------------------------------------------------------------------------
  2334.   # ● Tools on Map
  2335.   #--------------------------------------------------------------------------              
  2336.   def tools_on_map?(skill_id)
  2337.       return true if $game_system.tools_on_map.include?(skill_id)
  2338.       return false
  2339.   end  
  2340.  
  2341.   #--------------------------------------------------------------------------
  2342.   # ● Check Cast Action (修改BY W.S)
  2343.   #--------------------------------------------------------------------------            
  2344.   def check_cast_action?(skill)
  2345.       if self.battler.cast_action[0] != 0
  2346.          self.battler.cast_action[0] = 0
  2347.          self.battler.cast_action[1] = 0
  2348.          self.battler.cast_action[2] = 0
  2349.          self.battler.cast_action[3] = 0
  2350.          self.battler.cast_action[4] = 0
  2351.          return false
  2352.       end  
  2353.       if (skill.note =~ /<Cast Time = (\d+)>/ or skill.note =~ /<吟唱时间 = (\d+)>/) and
  2354.          $game_temp.xas_target_shoot_id == 0 and
  2355.          self.force_action_times == 0
  2356.          self.battler.cast_action[0] = skill.id
  2357.          self.battler.cast_action[1] = $1.to_i rescue 0
  2358.          self.battler.cast_action[2] = XAS_ANIMATION::CAST_TIME_ANIMATION_ID
  2359.          self.battler.cast_action[3] = 0
  2360.          self.battler.cast_action[4] = 0
  2361.          self.animation_id = self.battler.cast_action[2]
  2362.          return true
  2363.       end      
  2364.       return false
  2365.   end
  2366.  
  2367.   #--------------------------------------------------------------------------
  2368.   # ● Check Auto Target Select(修改BY W.S)
  2369.   #--------------------------------------------------------------------------         
  2370.   def check_auto_target_select?(skill)
  2371.       return false if self.is_a?(Game_Event)
  2372.       if skill.note =~ /<Auto Target>/ or skill.note =~ /<瞄准>/
  2373.          if $game_temp.xas_target_shoot_id == 0
  2374.             $game_temp.xas_target_shoot_id = skill.id
  2375.             $game_map.check_events_on_screen
  2376.             SceneManager.call(Scene_Target_Select)
  2377.             return true
  2378.          end         
  2379.       end  
  2380.       return false
  2381.   end
  2382.  
  2383.   #--------------------------------------------------------------------------
  2384.   # ● enough_skill_cost?
  2385.   #--------------------------------------------------------------------------         
  2386.   def enough_skill_cost?(skill)
  2387.       return false unless enough_mp_cost?(skill)         
  2388.       return false unless enough_item_cost?(skill)      
  2389.       return true
  2390.   end
  2391.  
  2392.   #--------------------------------------------------------------------------
  2393.   # ● Enough MP Cost
  2394.   #--------------------------------------------------------------------------        
  2395.   def enough_mp_cost?(skill)  
  2396.       if @force_action_times > 0
  2397.          return true if @force_action == "All Shoot"
  2398.          return true if @force_action == "Four Shoot"  
  2399.          return true if @force_action == "Three Shoot"
  2400.          return true if @force_action == "Two Shoot"
  2401.       end
  2402.       if self.battler.mp < skill.mp_cost
  2403.          self.battler.damage = XAS_WORD::NO_MP
  2404.          self.battler.damage_pop = true
  2405.          return false
  2406.       else   
  2407.          self.battler.mp -= skill.mp_cost
  2408.          return true
  2409.       end
  2410.       return true
  2411.   end  
  2412.  
  2413.   #--------------------------------------------------------------------------
  2414.   # ● Enough MP Cost
  2415.   #--------------------------------------------------------------------------      
  2416.   def enough_item_cost?(skill)
  2417.       return true if self.battler.is_a?(Game_Enemy)
  2418.       if @force_action_times > 0
  2419.          return true if @force_action == "All Shoot"
  2420.          return true if @force_action == "Four Shoot"
  2421.          return true if @force_action == "Three Shoot"
  2422.          return true if @force_action == "Two Shoot"
  2423.        end      
  2424.         if skill.note =~ /<Item Cost = (\d+)>/
  2425.           skill.note =~ /<Item Cost = (\d+)>/
  2426.           elsif skill.note =~ /<道具消耗 = (\d+)>/
  2427.           skill.note =~ /<道具消耗 = (\d+)>/
  2428.           end
  2429.       item_id = $1.to_i
  2430.       if item_id != nil and item_id != 0
  2431.          item_cost = $data_items[item_id]
  2432.          number = $game_party.item_number(item_cost)
  2433.          if number == 0 or number == nil
  2434.             self.battler.damage = XAS_WORD::NO_ITEM
  2435.             self.battler.damage_pop = true
  2436.             return false
  2437.          else
  2438.             $game_party.lose_item(item_cost, 1, false)
  2439.             return true
  2440.          end            
  2441.       end   
  2442.       return true
  2443.   end   
  2444.  
  2445.   #--------------------------------------------------------------------------
  2446.   # ● Execute User Effects
  2447.   #--------------------------------------------------------------------------  
  2448.   def execute_user_effects(skill)
  2449.       self.battler.shield = false
  2450.       #Animation
  2451.       if skill.note =~ /<Cast Ani = (\d+)>/ or skill.note =~ /<吟唱动画 = (\d+)>/
  2452.          ani_id = $1.to_i     
  2453.          if ani_id != nil
  2454.             self.animation_id = ani_id
  2455.          end   
  2456.       end
  2457.       unless @force_action_times > 0
  2458.           #All Directions
  2459.           if skill.note =~ /<All Directions>/ or skill.note =~ /<八方射击>/
  2460.              @force_action = "All Shoot"
  2461.              @force_action_times = 8        
  2462.           elsif skill.note =~ /<Four Directions>/ or skill.note =~ /<四方射击>/
  2463.              @force_action = "Four Shoot"
  2464.              @force_action_times = 4      
  2465.           elsif skill.note =~ /<Three Directions>/ or skill.note =~ /<三向射击>/
  2466.              @force_action = "Three Shoot"
  2467.              @force_action_times = 3        
  2468.           elsif skill.note =~ /<Two Directions>/ or skill.note =~ /<前后射击>/
  2469.              @force_action = "Two Shoot"
  2470.              @force_action_times = 2         
  2471.           end  
  2472.       end  
  2473.   end
  2474.  
  2475.   #--------------------------------------------------------------------------
  2476.   # ● Execute Set Pose
  2477.   #--------------------------------------------------------------------------      
  2478.   def execute_set_pose(action_id)
  2479.       @action.duration = @action.sunflag
  2480.       make_pose(@action.self_motion, @action.sunflag )
  2481.       @pattern = 0
  2482.       @pattern_count  = 0
  2483.       @step_anime = true
  2484.       @self_motion = nil      
  2485.       self.need_refresh = true if self.is_a?(Game_Player)
  2486.   end  
  2487.  
  2488.   #--------------------------------------------------------------------------
  2489.   # ● execute_call_event
  2490.   #--------------------------------------------------------------------------  
  2491.   def execute_call_event(action_id)
  2492.       bullet_token = Token_Bullet.new(self, action_id)
  2493.       $game_map.add_token(bullet_token)
  2494.       return bullet_token
  2495.   end
  2496.  
  2497.   #--------------------------------------------------------------------------
  2498.   # ● action_attachment
  2499.   #--------------------------------------------------------------------------
  2500.   def action_attachment(action_id)
  2501.       @action = Game_Action_XAS.new(self, action_id)
  2502.       @action.attachment(action_id)
  2503.   end
  2504.  
  2505. end  
  2506.  
  2507.  
  2508. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  2509. #■ TOOL - SHOOT SETTING
  2510. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  2511.  
  2512.  
  2513. #===============================================================================
  2514. # ■ Game_Action_XAS
  2515. #===============================================================================
  2516. class Game_Action_XAS
  2517.  
  2518.   attr_accessor   :user
  2519.   attr_accessor   :id                    
  2520.   attr_accessor   :attack_id            
  2521.   attr_accessor   :attack_range
  2522.   attr_accessor   :attack_range_type
  2523.   attr_accessor   :hit_events
  2524.   attr_accessor   :now_count
  2525.   attr_accessor   :pre_now_count
  2526.   attr_accessor   :duration
  2527.   attr_accessor   :blow_power
  2528.   attr_accessor   :piercing
  2529.   attr_accessor   :ignore_knockback_invincible
  2530.   attr_accessor   :target_invunerable_duration
  2531.   attr_accessor   :multi_hit
  2532.   attr_accessor   :ally_damage
  2533.   attr_accessor   :all_damage
  2534.   attr_accessor   :sunflag
  2535.   attr_accessor   :self_motion
  2536.   attr_accessor   :second_animation_id
  2537.   attr_accessor   :third_animation_id
  2538.   attr_accessor   :attack_range_type
  2539.   attr_accessor   :attack_range_plan
  2540.   attr_accessor   :blow_power
  2541.   attr_accessor   :ignore_guard
  2542.   attr_accessor   :user_invincible  
  2543.   attr_accessor   :short_range
  2544.   attr_accessor   :first_impact_time
  2545.   attr_accessor   :animation_time
  2546.   attr_accessor   :duration
  2547.   attr_accessor   :item_cost
  2548.   attr_accessor   :hit_shake
  2549.   attr_accessor   :hit_hold_target
  2550.   attr_accessor   :hit_bounce
  2551.   attr_accessor   :sticky
  2552.   attr_accessor   :reflectable
  2553.   attr_accessor   :can_reflect
  2554.   attr_accessor   :attack_id_plan
  2555.   attr_accessor   :hit_action
  2556.   attr_accessor   :fake_id
  2557.   attr_accessor   :impact
  2558.  
  2559.   #--------------------------------------------------------------------------
  2560.   # ● initialize
  2561.   #--------------------------------------------------------------------------
  2562.   def initialize(user, action_id)
  2563.       @user        = user
  2564.       @id          = action_id
  2565.       @now_count   = 0
  2566.       @duration    = nil
  2567.       @attack_id   = 0
  2568.       @attack_range = 0
  2569.       @hit_events  = []
  2570.       @blow_power  = 0
  2571.       @skill = $data_skills[action_id]
  2572.       @ignore_knockback_invincible = false
  2573.       @multi_hit = false
  2574.       @piercing = false
  2575.       @all_damage = false
  2576.       @ally_damage = false
  2577.       @ignore_guard = false
  2578.       @sunflag = 10
  2579.       @duration = 10
  2580.       @self_motion = ""
  2581.       @attack_range_type = 1
  2582.       @attack_range_plan = 1
  2583.       @blow_power = 1
  2584.       @first_impact_time  = 0
  2585.       @animation_time = []
  2586.       @target_invunerable_duration = 10
  2587.       @second_animation_id = 0
  2588.       @third_animation_id = 0
  2589.       @user_invincible = false
  2590.       @short_range = false
  2591.       @item_cost = 0
  2592.       @hit_shake = false
  2593.       @hit_hold_target = false
  2594.       @hit_bounce = false
  2595.       @sticky = false
  2596.       @reflectable = false
  2597.       @can_reflect = false
  2598.       @hit_action = 0
  2599.       @fake_id = false
  2600.       @impact = true
  2601.   end
  2602.  
  2603.   #--------------------------------------------------------------------------
  2604.   # ● attachment (修改 BY W.S)
  2605.   #--------------------------------------------------------------------------
  2606.   def attachment(action_id)
  2607.       @attack_id_plan = [action_id]
  2608.       if @skill.note =~ /<Sunflag = (\d+)>/ or /<动作时间 = (\d+)>/
  2609.          @sunflag = $1.to_i
  2610.       end
  2611.       if @skill.note =~ /<Duration = (\d+)>/ or  @skill.note =~ /<存在时间 = (\d+)>/
  2612.          @duration = $1.to_i
  2613.       end
  2614.       if @skill.note =~ /<Pose = (\S+)>/ or @skill.note =~ /<行走图 = (\S+)>/
  2615.          @self_motion = $1.to_s
  2616.       end
  2617.       if @skill.note =~ /<Area = (\w+)>/
  2618.          case $1
  2619.             when "CROSS"   
  2620.                area = 7
  2621.             when "WALL"
  2622.                area = 6        
  2623.             when "FRONTRHOMBUS"  
  2624.                area = 5
  2625.             when "FRONTSQUARE"
  2626.                area = 4
  2627.             when "LINE"
  2628.                area = 3
  2629.             when "SQUARE"
  2630.                area = 2               
  2631.             else   
  2632.                area = 1
  2633.              end   
  2634.       elsif @skill.note =~ /<区域 = (\w+)>/
  2635.          case $1
  2636.             when "十字"   
  2637.                area = 7
  2638.             when "墙"
  2639.                area = 6        
  2640.             when "半菱形"  
  2641.                area = 5
  2642.             when "半矩形"
  2643.                area = 4
  2644.             when "直线"
  2645.                area = 3
  2646.             when "矩形"
  2647.                area = 2               
  2648.             else   
  2649.                area = 1
  2650.          end     
  2651.          @attack_range_type = area
  2652.        end
  2653.       if @skill.note =~ /<Range = (\d+)>/ or  @skill.note =~ /<范围 = (\d+)>/
  2654.          @attack_range_plan = [$1.to_i]
  2655.       end
  2656.       if @skill.note =~ /<Blow Power = (\d+)>/  or @skill.note =~ /<击退格数 = (\d+)>/
  2657.          @blow_power = $1.to_i
  2658.       end   
  2659.       if @skill.note =~ /<Impact Time  = (\d+)>/ or   @skill.note =~ /<影响时间  = (\d+)>/  
  2660.          @first_impact_time = $1.to_i
  2661.  
  2662.        end   
  2663.       if @skill.note =~ /<Animation Time  = (\d+) - (\d+)>/ or @skill.note =~ /<动画时间  = (\d+) - (\d+)>/
  2664.          @animation_time[0] = $1.to_i
  2665.          @animation_time[1] = $2.to_i
  2666.       end
  2667.       if @skill.note =~ /<Target Invunerable = (\d+)>/ or @skill.note =~ /<伤害间隔 = (\d+)>/
  2668.          @target_invunerable_duration = $1.to_i
  2669.       end  
  2670.       if @skill.note =~ /<Tool Hit Ani = (\d+)>/ or @skill.note =~ /<击中动画 = (\d+)>/      
  2671.          @second_animation_id = $1.to_i
  2672.       end         
  2673.       if @skill.note =~ /<User Hit Ani = (\d+)>/ or @skill.note =~ /<使用动画 = (\d+)>/      
  2674.          @third_animation_id = $1.to_i
  2675.       end   
  2676.       if @skill.note =~ /<Item Cost = (\d+)>/  or   @skill.note =~ /<消耗道具 = (\d+)>/
  2677.          @item_cost = $1.to_i
  2678.       end         
  2679.       if @skill.note =~ /<Link Action ID = (\d+)>/  or @skill.note =~ /<连接技能ID = (\d+)>/
  2680.          if user.battler != nil
  2681.             user.battler.x_combo[0] = $1.to_i
  2682.             user.battler.x_combo[2] = @sunflag + 20
  2683.          end
  2684.       else     
  2685.          if user.battler != nil
  2686.             user.battler.x_combo[0] = 0
  2687.             user.battler.x_combo[1] = 0
  2688.             user.battler.x_combo[2] = 0
  2689.          end            
  2690.       end   
  2691.       if @skill.note =~ /<Hit Action ID = (\d+)>/ or @skill.note =~ /<攻击动作ID = (\d+)>/
  2692.          @hit_action = $1.to_i
  2693.       end
  2694.       if @skill.note =~ /<Ignore Knockback>/ or @skill.note =~ /<忽略击倒>/ or @skill.note =~ /<忽略击破>/
  2695.          @ignore_knockback_invincible = true
  2696.       end      
  2697.       if @skill.note =~ /<Multi Hit>/ or @skill.note =~ /<多次连击>/
  2698.          @multi_hit = true  
  2699.       end         
  2700.       if @skill.note =~ /<Piercing>/
  2701.          @piercing = true
  2702.       end
  2703.       if @skill.note =~ /<All Damage>/ or @skill.note =~ /<全域化>/
  2704.          @all_damage = true
  2705.       end
  2706.       if @skill.note =~ /<Ally Damage>/ or @skill.note =~ /<己方伤害>/
  2707.          @ally_damage = true
  2708.       end      
  2709.       if @skill.note =~ /<User Invincible>/ or @skill.note =~ /<使用者无敌>/
  2710.          @user_invincible = true
  2711.       end      
  2712.       if @skill.note =~ /<Ignore Guard>/ or @skill.note =~ /<忽略防御>/
  2713.          @ignore_guard = true
  2714.       end      
  2715.       if @skill.note =~ /<One Action>/ or @skill.note =~ /<等待结束>/ or @skill.note =~ /<等待完成>/
  2716.          unless $game_system.tools_on_map.include?(action_id)   
  2717.                 $game_system.tools_on_map.push(action_id)
  2718.          end
  2719.       end      
  2720.       if @skill.note =~ /<Shake>/ or @skill.note =~ /<震动>/ or @skill.note =~ /<地震>/
  2721.          @hit_shake = true
  2722.       end
  2723.       if @skill.note =~ /<User Range>/ or @skill.note =~ /<使用者属性>/
  2724.          @short_range = true
  2725.       end      
  2726.       if @skill.note =~ /<Hit Hold Target>/ or @skill.note =~ /<按键持续>/
  2727.          @hit_hold_target = true
  2728.       end        
  2729.       if @skill.note =~ /<Hit Sticky Target>/ or @skill.note =~ /<追踪>/
  2730.          @sticky = true
  2731.       end        
  2732.       if @skill.note =~ /<Hit Bounce Direction>/ or @skill.note =~ /<击中转向>/
  2733.          @hit_bounce = true
  2734.       end   
  2735.       if @skill.note =~ /<Reflectable>/ or @skill.note =~ /<允许反射>/
  2736.          @reflectable = true
  2737.       end        
  2738.       if @skill.note =~ /<Can Reflect>/ or @skill.note =~ /<允许反击>/
  2739.          @can_reflect = true
  2740.       end  
  2741.       if @skill.note =~ /<Disable Hit>/ or @skill.note =~ /<不计入连击>/
  2742.          @impact = false
  2743.       end
  2744.       @sunflag = 1 if @sunflag <= 0
  2745.   end
  2746.  
  2747.   #--------------------------------------------------------------------------
  2748.   # ● update
  2749.   #--------------------------------------------------------------------------
  2750.   def update
  2751.       @first_impact_time -= 1 if @first_impact_time > 0
  2752.       if @attack_id_plan != nil
  2753.          id = @attack_id_plan[@now_count]
  2754.          unless id.nil?
  2755.            @attack_id = id
  2756.            @hit_events.clear
  2757.            @hit_events.push(self.user) unless @all_damage or @ally_damage
  2758.          end
  2759.       end
  2760.       if @attack_range_plan != nil
  2761.          range = @attack_range_plan[@now_count]
  2762.          @attack_range = range unless range.nil?
  2763.       end
  2764.       @now_count += 1
  2765.   end  
  2766.  
  2767.   #--------------------------------------------------------------------------
  2768.   # ● done?
  2769.   #--------------------------------------------------------------------------
  2770.   def done?
  2771.       return (self.duration.to_i > 0 and self.now_count >= self.duration)
  2772.   end
  2773. end
  2774.  
  2775. #===============================================================================
  2776. # ■ Token_Bullet  
  2777. #===============================================================================
  2778. class Token_Bullet < Token_Event
  2779. include XRXS_ActionTemplate
  2780.   #--------------------------------------------------------------------------
  2781.   # ● initialize
  2782.   #--------------------------------------------------------------------------
  2783.   def initialize(user, action_id)
  2784.       event_id = action_id
  2785.       skill = $data_skills[action_id]
  2786.       if skill.note =~ /<Event ID = (\d+)>/ or skill.note =~ /<事件ID = (\d+)>/
  2787.          event_id = $1.to_i
  2788.       end  
  2789.       original_event = @@events[event_id]
  2790.       if original_event == nil
  2791.          msgbox("这里没有 对应的事件 ID " + event_id.to_s + " 在 Tool Map中!")
  2792.          SceneManager.exit
  2793.          return
  2794.       end  
  2795.       event = original_event.dup
  2796.        event.x = user.x
  2797.  
  2798.  
  2799.  
  2800.        if event_id == 20 or event_id == 11
  2801.        event.y = user.y
  2802.      else
  2803.        event.y = user.y - 1#修改箭和回旋镖高度坐标
  2804.      end
  2805.  
  2806.  
  2807.  
  2808.  
  2809.       pre_direction = event.pages[0].graphic.direction
  2810.       event.pages[0].graphic.direction = user.direction
  2811.       @character_name = event.pages[0].graphic
  2812.       super($game_map.map_id, event)
  2813.       self.action_attachment(action_id)
  2814.       self.tool_id = action_id
  2815.       self.diagonal = false
  2816.       self.diagonal_direction = 0
  2817.       self.sprite_angle_enable = false
  2818.       @action.user = user
  2819.       @remain_for_an_act = @action.duration.is_a?(Numeric)
  2820.       check_tool_effects(user,skill,pre_direction)
  2821.   end
  2822.  
  2823.   #--------------------------------------------------------------------------
  2824.   # ● update
  2825.   #--------------------------------------------------------------------------
  2826.   def update
  2827.       super
  2828.       if @action == nil and @remain_for_an_act
  2829.          erase
  2830.          $game_system.tools_on_map.delete(self.tool_id)
  2831.       end
  2832.       check_event_trigger_attack
  2833.   end
  2834. end
  2835.  
  2836. #===============================================================================
  2837. # ■ Game Player
  2838. #===============================================================================
  2839. class Game_Player < Game_Character
  2840.   attr_accessor :need_refresh
  2841. end
  2842.  
  2843. #===============================================================================
  2844. # ■ Token_Bullet  
  2845. #===============================================================================
  2846. class Token_Bullet < Token_Event
  2847.  
  2848.   #--------------------------------------------------------------------------
  2849.   # ● Check Tool Effects
  2850.   #--------------------------------------------------------------------------
  2851.   def check_tool_effects(user,skill,pre_direction)
  2852.       if @action.ally_damage or @action.all_damage   
  2853.          user.battler.invunerable_duration = 0
  2854.       end
  2855.      # Force Update Out Screen
  2856.      if user.battler.sensor_range >= 15 or
  2857.         skill.note =~ /<Update Out Screen>/ or skill.note =~ /<屏幕外刷新>/
  2858.         self.force_update = true
  2859.      end  
  2860.      #Diagonal Effect
  2861.      if skill.note =~ /<Diagonal>/ or skill.note =~ /<斜角>/ or
  2862.         skill.note =~ /<All Direction>/ or skill.note =~ /<八方射击>/ or
  2863.         skill.note =~ /<Three Direction>/ or skill.note =~ /<三向射击>/
  2864.         self.diagonal = true
  2865.         self.diagonal_direction = user.diagonal_direction
  2866.         self.sprite_angle_enable = true
  2867.         user.diagonal_time = XAS_BA::DIAGONAL_DURATION if user.diagonal_direction != 0
  2868.         user.diagonal = true if user.tool_id > 0        
  2869.      end
  2870.      #Auto Target
  2871.      if skill.note =~ /<Auto Target>/ or skill.note =~ /<瞄准>/
  2872.         if user.is_a?(Game_Event)
  2873.            self.moveto($game_player.x, $game_player.y)
  2874.         else  
  2875.            moveto($game_temp.xas_target_x, $game_temp.xas_target_y)
  2876.            $game_temp.xas_target_x = 0
  2877.            $game_temp.xas_target_y = 0
  2878.            $game_temp.xas_target_time = 0
  2879.            $game_temp.xas_target_shoot_id = 0
  2880.         end   
  2881.      end
  2882.      #Barrier
  2883.      if skill.note =~ /<Barrier>/ or skill.note =~ /<跟随>/
  2884.         self.tool_effect = "Barrier"
  2885.      end
  2886.      #Boomerang
  2887.      if skill.note =~ /<Boomerang = (\d+)>/ or skill.note =~ /<回旋镖 = (\d+)>/
  2888.         self.tool_effect = "Boomerang"
  2889.         self.action.duration = 1000
  2890.         self.diagonal = true
  2891.         self.diagonal_direction = user.diagonal_direction
  2892.         self.force_update = true
  2893.         @move_frequency = 6+2
  2894.         @move_speed = 5+2#修改回旋镖丢速度。
  2895.         @direction_fix = false
  2896.         @walk_anime = true
  2897.         @step_anime = true
  2898.         @force_action = "Forward"
  2899.         @force_action_times = $1.to_i
  2900.      end     
  2901.  
  2902.    end
  2903. end
  2904.  
  2905.  
  2906.  
  2907. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  2908. #■ TOOL - AREA
  2909. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  2910.  
  2911.  
  2912. #===============================================================================
  2913. # ■ XAS ACTION
  2914. #===============================================================================
  2915. module XAS_ACTION
  2916.  
  2917.   #--------------------------------------------------------------------------
  2918.   # ● action_update
  2919.   #--------------------------------------------------------------------------
  2920.   def action_update
  2921.       return unless @action.is_a?(Game_Action_XAS)
  2922.       if @action.animation_time != [] and
  2923.          @action.animation_time[0] == @action.now_count
  2924.          animation_id = @action.animation_time[1]
  2925.          unless self.is_a?(Game_Player) or self.tool_id == 0
  2926.              self.animation_id = animation_id
  2927.          end
  2928.       end
  2929.       @action.update
  2930.   end
  2931.  
  2932.   #--------------------------------------------------------------------------
  2933.   # ● Can Impact Target
  2934.   #--------------------------------------------------------------------------  
  2935.   def can_impact_target?
  2936.       return false if @action.nil?
  2937.       return false if @action.attack_id == 0
  2938.       return false if @action.first_impact_time > 0
  2939.       return false if @action.impact == false
  2940.       return false if self.jumping?
  2941.       return true
  2942.   end  
  2943.  
  2944.   #--------------------------------------------------------------------------
  2945.   # ● check_event_trigger_attack
  2946.   #--------------------------------------------------------------------------
  2947.   def check_event_trigger_attack()
  2948.       return unless can_impact_target?
  2949.       hit_check = false
  2950.       range = @action.attack_range
  2951.       hit = []
  2952.       targets = [$game_player] + $game_map.events.values
  2953.       for event in targets
  2954.         next if event == self or
  2955.                 @action.hit_events.include?(event) or event.erased
  2956.         body_size      = event.body_size
  2957.         event_center_x = event.x
  2958.         event_center_y = event.y - body_size
  2959.         if @action.short_range
  2960.            dx = event_center_x - $game_player.x
  2961.            dy = event_center_y - $game_player.y
  2962.         else
  2963.            dx = event_center_x - self.x
  2964.            dy = event_center_y - self.y
  2965.          end
  2966.         dx = (dx >= 0 ? [dx - body_size, 0].max : [dx + body_size, 0].min)
  2967.         dy = (dy >= 0 ? [dy - body_size, 0].max : [dy + body_size, 0].min)
  2968.         hit_check = true if in_range?(dx,dy,event,range)
  2969.         hit.push(event) if hit_check
  2970.         hit_check = false
  2971.       end
  2972.       for event in hit
  2973.           if event.action_effect(self, self.action.attack_id)
  2974.              hit_check = true
  2975.           end
  2976.           if event.action_effect_page(self, self.action.attack_id)
  2977.              hit_check = true
  2978.          end         
  2979.          @action.hit_events.push(event) unless @action.multi_hit
  2980.          end
  2981.       if hit_check
  2982.          $game_temp.active_token = self
  2983.       end
  2984.   end
  2985.  
  2986.   #--------------------------------------------------------------------------
  2987.   # ● In Range?
  2988.   #--------------------------------------------------------------------------  
  2989.   def in_range?(dx,dy,event,range)
  2990.       case @action.attack_range_type
  2991.             when 1 #RHOMBUS
  2992.               return true if (dx.abs + dy.abs <= range)
  2993.             when 2 #SQUARE
  2994.               return true if (dx.abs <= range and dy.abs <= range)
  2995.             when 3 #LINE
  2996.               case self.direction
  2997.                   when 2
  2998.                     return true if (dx == 0 and dy >= 0 and dy <= range)
  2999.                   when 8
  3000.                     return true if (dx == 0 and dy <= 0 and dy >= -range)
  3001.                   when 6
  3002.                     return true if (dy == 0 and dx >= 0 and dx <= range)
  3003.                   when 4
  3004.                     return true if (dy == 0 and dx <= 0 and dx >= -range)
  3005.               end
  3006.             when 4  #FRONT SQUARE   
  3007.               case self.direction
  3008.                  when 2
  3009.                     return true if (dx.abs <= range and dy >= 0 and dy.abs <= range)
  3010.                  when 4
  3011.                     return true if (dx.abs <= range and dx <= 0 and dy.abs <= range)  
  3012.                  when 6
  3013.                     return true if (dx.abs <= range and dx >= 0 and dy.abs <= range)
  3014.                  when 8
  3015.                     return true if (dx.abs <= range and dy <= 0 and dy.abs <= range)
  3016.               end              
  3017.             when 5  #FRONT RHOMBUS     
  3018.               case self.direction
  3019.                   when 2
  3020.                     return true if (dx.abs + dy.abs <= range and dy >= 0)
  3021.                   when 8
  3022.                     return true if (dx.abs + dy.abs <= range and dy <= 0)
  3023.                   when 6
  3024.                     return true if (dx.abs + dy.abs <= range and dx >= 0)
  3025.                   when 4
  3026.                     return true if (dx.abs + dy.abs <= range and dx <= 0)
  3027.               end         
  3028.             when 6  #WALL
  3029.               case self.direction
  3030.                  when 2
  3031.                     return true if (dx.abs <= range and dy == 0 )
  3032.                  when 4
  3033.                     return true if (dy.abs <= range and dx == 0)  
  3034.                  when 6
  3035.                     return true if (dy.abs <= range and dx == 0)
  3036.                  when 8
  3037.                     return true if (dx.abs <= range and dy == 0)
  3038.                end  
  3039.             when 7 #CROSS
  3040.                  return true if (dx.abs <= range and dy == 0)
  3041.                  return true if (dy.abs <= range and dx == 0)  
  3042.             end
  3043.      return false      
  3044.   end      
  3045.  
  3046.   #--------------------------------------------------------------------------
  3047.   # ●  action_effect Page
  3048.   #--------------------------------------------------------------------------
  3049.   def action_effect_page(attacker, attack_id)
  3050.       return false unless self.is_a?(Game_Event)
  3051.       return false if attacker.action.fake_id
  3052.       if attacker.action != nil
  3053.          check_auto_effect_page(attacker, attack_id)
  3054.          check_reflectable_skills(attacker, attack_id)
  3055.       end
  3056.       for page in @event.pages
  3057.           if page.condition.variable_valid and
  3058.              page.condition.variable_id == XAS_SYSTEM::HIT_ID and
  3059.              page.condition.variable_value == attack_id
  3060.              self.reaction_valid_attack_id = attack_id
  3061.              self.refresh
  3062.              @trigger = 0
  3063.              self.start
  3064.              return true
  3065.           end
  3066.       end
  3067.       return false
  3068.   end
  3069.  
  3070.   #--------------------------------------------------------------------------
  3071.   # ● Check Reflectable Skills
  3072.   #--------------------------------------------------------------------------   
  3073.   def check_reflectable_skills(attacker, attack_id)
  3074.       return if self.tool_id == 0
  3075.       return unless self.action.reflectable
  3076.       return unless attacker.action.can_reflect
  3077.       self.action.user = attacker.action.user
  3078.       self.action.hit_events = []  
  3079.       self.turn_back
  3080.   end  
  3081.  
  3082.   #--------------------------------------------------------------------------
  3083.   # ● Check Auto Effect Page
  3084.   #--------------------------------------------------------------------------  
  3085.   def check_auto_effect_page(attacker, attack_id)
  3086.       if self.treasure_time > 0
  3087.          if can_hit_take_treasure?(attacker, attack_id)
  3088.             execute_take_treasure(attacker, attack_id)
  3089.          elsif self.temp_id == 0 and can_hold_treasure?(attacker, attack_id)   
  3090.             execute_hold_treasure(attacker, attack_id)
  3091.          end  
  3092.       end
  3093.   end
  3094.  
  3095.   #--------------------------------------------------------------------------
  3096.   # ● Can Hit Take Treasure
  3097.   #--------------------------------------------------------------------------      
  3098.   def can_hit_take_treasure?(attacker, attack_id)
  3099.       return true if attacker.action.short_range
  3100.       return false
  3101.   end
  3102.  
  3103.   #--------------------------------------------------------------------------
  3104.   # ● Can Hold Treasure?
  3105.   #--------------------------------------------------------------------------        
  3106.   def can_hold_treasure?(attacker, attack_id)
  3107.       return true if attacker.tool_effect == "Boomerang"   
  3108.       return false
  3109.   end  
  3110.  
  3111.   #--------------------------------------------------------------------------
  3112.   # ● Execute Hold Treasure
  3113.   #--------------------------------------------------------------------------      
  3114.   def execute_hold_treasure(attacker, attack_id)
  3115.       tr_time = (100 + XAS_BA::TREASURE_ERASE_TIME * 60) - 20
  3116.       return if self.treasure_time > tr_time
  3117.       self.temp_id = attacker.id   
  3118.   end  
  3119.  
  3120.   #--------------------------------------------------------------------------
  3121.   # ● Execute Take Treasure
  3122.   #--------------------------------------------------------------------------      
  3123.   def execute_take_treasure(attacker, attack_id)
  3124.       tr_time = (100 + XAS_BA::TREASURE_ERASE_TIME * 60) - 20
  3125.       return if self.treasure_time > tr_time
  3126.       self.x = $game_player.x
  3127.       self.y = $game_player.y
  3128.   end
  3129.  
  3130.   #--------------------------------------------------------------------------
  3131.   # ● body_size
  3132.   #--------------------------------------------------------------------------
  3133.   def body_size
  3134.       return 0
  3135.   end
  3136.  
  3137.   #--------------------------------------------------------------------------
  3138.   # ● action_clear
  3139.   #--------------------------------------------------------------------------
  3140.   def action_clear
  3141.       @action = nil
  3142.       @step_anime = false
  3143.   end
  3144. end
  3145.  
  3146. #===============================================================================
  3147. # ■ Game_Character
  3148. #===============================================================================
  3149. class Game_Character < Game_CharacterBase
  3150.     include XAS_ACTION
  3151. end
  3152.  
  3153. #===============================================================================
  3154. # ■  Game_Event
  3155. #===============================================================================
  3156. class Game_Event < Game_Character
  3157.  
  3158.   #--------------------------------------------------------------------------
  3159.   # * Refresh
  3160.   #--------------------------------------------------------------------------
  3161.   alias x_conditions_met conditions_met?
  3162.   def conditions_met?(page)
  3163.       c = page.condition
  3164.       if c.variable_valid
  3165.          if c.variable_id == XAS_SYSTEM::HIT_ID and
  3166.             c.variable_value == self.reaction_valid_attack_id
  3167.             return true
  3168.          end
  3169.        end
  3170.       x_conditions_met(page)
  3171.   end
  3172.  
  3173. end  
  3174.  
  3175. #===============================================================================
  3176. # ■  XAS_Dispose
  3177. #===============================================================================
  3178. module XAS_Dispose
  3179.  
  3180.   #--------------------------------------------------------------------------
  3181.   # ● update
  3182.   #--------------------------------------------------------------------------  
  3183.   def update
  3184.       action_update
  3185.       super
  3186.       if @action.is_a?(Game_Action_XAS) and @action.done?
  3187.          self.action_clear
  3188.       end
  3189.   end
  3190. end
  3191.  
  3192. #===============================================================================
  3193. # ■  Game_Player
  3194. #===============================================================================
  3195. class Game_Player < Game_Character
  3196.   include XAS_Dispose
  3197. end
  3198.  
  3199. #===============================================================================
  3200. # ■  Game_Event
  3201. #===============================================================================
  3202. class Game_Event < Game_Character
  3203.   include XAS_Dispose
  3204. end
  3205.  
  3206. #===============================================================================
  3207. # ■ XAS_StopToAction
  3208. #===============================================================================
  3209. module XAS_StopToAction
  3210.  
  3211.   #--------------------------------------------------------------------------
  3212.   # ● acting?
  3213.   #--------------------------------------------------------------------------  
  3214.   def acting?
  3215.       return false if self.battler == nil
  3216.       return true if self.battler.shield
  3217.       return true if self.action != nil
  3218.       return false
  3219.   end
  3220.  
  3221.   #--------------------------------------------------------------------------
  3222.   # ● moving?
  3223.   #--------------------------------------------------------------------------  
  3224.   def moving?
  3225.       return (super or self.acting? or self.stop)
  3226.   end
  3227.  
  3228. end
  3229.  
  3230. #===============================================================================
  3231. # ■ Game_Player  
  3232. #===============================================================================
  3233. class Game_Player < Game_Character
  3234.   include XAS_StopToAction
  3235. end
  3236.  
  3237. #===============================================================================
  3238. # ■ Game_Event  
  3239. #===============================================================================
  3240. class Game_Event < Game_Character
  3241.   attr_accessor :reaction_valid_attack_id
  3242. end
  3243.  
  3244.  
  3245. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  3246. #■ TOOL - HIT EFFECT
  3247. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  3248.  
  3249.  
  3250. #===============================================================================
  3251. # ■ XRXS_BattlerAttachment
  3252. #==============================================================================
  3253. module XRXS_BattlerAttachment
  3254.  
  3255.   #--------------------------------------------------------------------------
  3256.   # ● Can Hit Base?
  3257.   #--------------------------------------------------------------------------   
  3258.   def can_hit_base?(bullet, action_id)
  3259.       return false unless $game_system.xas_battle
  3260.       return false if self.battler == nil
  3261.       return false if bullet == nil
  3262.       return false if action_id == nil or action_id <= 0
  3263.       return false if self.can_update == false
  3264.       return true
  3265.   end  
  3266.  
  3267.   #--------------------------------------------------------------------------
  3268.   # ● Action Effect
  3269.   #--------------------------------------------------------------------------  
  3270.   def action_effect(bullet, action_id)
  3271.       return unless can_hit_base?(bullet, action_id)
  3272.       skill = $data_skills[action_id]
  3273.       user = bullet.action.user
  3274.       attacker = (user == nil ? nil : user.battler)     
  3275.       tar_invu = bullet.action.target_invunerable_duration
  3276.       #CAN HIT?
  3277.       return unless action_can_hit_target?(bullet, user, skill,tar_invu)
  3278.       #REFLECT STATE
  3279.       return if reflect_state?(bullet, skill)
  3280.       #SHIELD
  3281.       if target_shield_enabled?(attacker, skill, bullet)
  3282.          execute_guard_effect(user, skill, bullet, tar_invu)
  3283.          return
  3284.       end
  3285.       #INVUNERABLE ACTIONS
  3286.       if target_invunerable_actions?(user, skill, bullet)
  3287.          execute_guard_effect(user, skill, bullet, tar_invu, false)
  3288.          return
  3289.       end   
  3290.       #GUARD DIRECTIONS
  3291.       if target_guard_directions?(user, skill, bullet)
  3292.          execute_guard_effect(user, skill, bullet, tar_invu)
  3293.          return        
  3294.       end  
  3295.       execute_hit_effect(attacker,skill, bullet , user, tar_invu )
  3296.       if self.is_a?(Game_Player)
  3297.          self.need_refresh = true
  3298.       end
  3299.   end
  3300.  
  3301.   #--------------------------------------------------------------------------
  3302.   # ● Reflect State?
  3303.   #--------------------------------------------------------------------------                 
  3304.   def reflect_state?(bullet, skill)
  3305.       if  bullet.action.reflectable and self.battler.state_reflect
  3306.           if skill.note =~ /<Auto Target>/ or skill.note =~ /<瞄准>/
  3307.              bullet.moveto(bullet.action.user.x,bullet.action.user.y)
  3308.           else   
  3309.              bullet.turn_back
  3310.           end  
  3311.           bullet.action.user = self
  3312.           bullet.action.hit_events = []           
  3313.           bullet.turn_back
  3314. #          bullet.jump(0,0)
  3315.           bullet.turn_back
  3316.           self.battler.damage = XAS_WORD::REFLECT
  3317.           self.battler.damage_pop = true
  3318.           self.animation_id = XAS_ANIMATION::REFLECT_ANIMATION_ID
  3319.           self.battler.invunerable_duration = 20
  3320.          return true
  3321.      end
  3322.      return false     
  3323.   end
  3324.  
  3325. #--------------------------------------------------------------------------
  3326. # ● Target Guard Directions?
  3327. #--------------------------------------------------------------------------   
  3328. def target_guard_directions?(user, skill, bullet)
  3329.      return false if self.battler.guard == false
  3330.      return false if bullet.action.ignore_guard
  3331.      if self.battler.guard_directions.include?(2) and
  3332.         ((self.direction == 2 and bullet.direction == 8) or
  3333.          (self.direction == 8 and bullet.direction == 2) or
  3334.          (self.direction == 6 and bullet.direction == 4) or
  3335.          (self.direction == 4 and bullet.direction == 6))
  3336.          return true
  3337.      elsif self.battler.guard_directions.include?(8) and
  3338.         ((self.direction == 8 and bullet.direction == 8) or
  3339.          (self.direction == 2 and bullet.direction == 2) or
  3340.          (self.direction == 6 and bullet.direction == 6) or
  3341.          (self.direction == 4 and bullet.direction == 4))
  3342.          return true
  3343.      elsif self.battler.guard_directions.include?(4) and
  3344.         ((self.direction == 2 and bullet.direction == 4) or
  3345.          (self.direction == 8 and bullet.direction == 6) or
  3346.          (self.direction == 6 and bullet.direction == 2) or
  3347.          (self.direction == 4 and bullet.direction == 8))
  3348.          return true         
  3349.      elsif self.battler.guard_directions.include?(6) and
  3350.         ((self.direction == 2 and bullet.direction == 6) or
  3351.          (self.direction == 8 and bullet.direction == 4) or
  3352.          (self.direction == 6 and bullet.direction == 8) or
  3353.          (self.direction == 4 and bullet.direction == 2))
  3354.          return true
  3355.      end      
  3356.      return false
  3357.   end
  3358.  
  3359.   #--------------------------------------------------------------------------
  3360.   # ● Target Invunerable Actions?
  3361.   #--------------------------------------------------------------------------            
  3362.   def target_invunerable_actions?(user, skill, bullet)
  3363.       return true if self.battler.invunerable_actions.include?(skill.id)
  3364.       return false
  3365.   end
  3366.  
  3367.   #--------------------------------------------------------------------------
  3368.   # ● Shoot Target Shield
  3369.   #--------------------------------------------------------------------------         
  3370.   def shoot_target_shield?(bullet,user, skill)
  3371.       return false unless self.battler.shield
  3372.       return false if bullet.action.ignore_guard
  3373.       return true if face_direction?(bullet)
  3374.       return false
  3375.   end
  3376.  
  3377.   #--------------------------------------------------------------------------
  3378.   # ● Action can hit target?
  3379.   #--------------------------------------------------------------------------        
  3380.   def action_can_hit_target?(bullet, user, skill,tar_invu)
  3381.       if user == nil
  3382.          return false
  3383.       end   
  3384.       if self.battler.invunerable
  3385.          return false
  3386.       end  
  3387.       if self.battler.dead?
  3388.          return false
  3389.       end   
  3390.       if self.battler.invunerable_duration > 0
  3391.          return false
  3392.       end   
  3393.       if @knock_back_duration != nil
  3394.          return false unless bullet.action.ignore_knockback_invincible
  3395.       end
  3396.       if bullet.action.first_impact_time > 0
  3397.          return false
  3398.       end
  3399.       if self.action != nil and self.action.user_invincible
  3400.          unless self.action.ally_damage and bullet.action.user == self.action.user
  3401.              return false
  3402.          end
  3403.       end  
  3404.       unless bullet.action.all_damage
  3405.              if bullet.action.ally_damage
  3406.                 if user.battler.is_a?(Game_Actor)
  3407.                    return false if self.battler.is_a?(Game_Enemy)
  3408.                 elsif user.battler.is_a?(Game_Enemy)
  3409.                    return false if self.battler.is_a?(Game_Actor)
  3410.                 end
  3411.              else   
  3412.                 if user.battler.is_a?(Game_Actor)
  3413.                    return false if self.battler.is_a?(Game_Actor)
  3414.                 elsif user.battler.is_a?(Game_Enemy)
  3415.                    return false if self.battler.is_a?(Game_Enemy)
  3416.                 end                 
  3417.              end              
  3418.       end
  3419.       return false if target_state_invunerable?(tar_invu)
  3420.       #return false if target_reflect_action?(bullet, user)
  3421.       return true
  3422.   end
  3423.  
  3424.   #--------------------------------------------------------------------------
  3425.   # ● Target Relfect Action
  3426.   #--------------------------------------------------------------------------         
  3427.   def target_reflect_action?(bullet, user)
  3428.       return false unless bullet.action.reflectable
  3429.       for i in $game_map.events.values
  3430.           if i.tool_id > 0 and i.action.can_reflect and
  3431.              i.tool_effect == "Barrier"# and i.action.user.battler.is_a?(self.battler)
  3432.              bullet.action.user = self
  3433.              bullet.action.hit_events = []  
  3434.              bullet.turn_back
  3435.              return true
  3436.              break
  3437.           end   
  3438.       end
  3439.       return false  
  3440.   end
  3441.  
  3442.   #--------------------------------------------------------------------------
  3443.   # ● Target State Invunerable
  3444.   #--------------------------------------------------------------------------        
  3445.   def target_state_invunerable?(tar_invu)
  3446.       if self.battler.state_invunerable
  3447.          self.battler.damage = XAS_WORD::INVINCIBLE
  3448.          self.battler.damage_pop = true
  3449.          self.animation_id = XAS_ANIMATION::INVINCIBLE_ANIMATION_ID
  3450.          self.battler.invunerable_duration = tar_invu
  3451.          return true
  3452.       end
  3453.       return false
  3454.   end
  3455.  
  3456.   #--------------------------------------------------------------------------
  3457.   # ● Execute Hit Effect
  3458.   #--------------------------------------------------------------------------      
  3459.   def execute_hit_effect(attacker,skill, bullet , user, tar_invu)
  3460.       shoot_effect_before_damage(skill, bullet, user)
  3461.       execute_battler_skill_effect(attacker ,skill, user)
  3462.       if target_missed?(attacker)
  3463.          self.battler.invunerable_duration = 30
  3464.          return
  3465.       end            
  3466.       execute_damage_pop(attacker,skill)
  3467.       shoot_effect_after_damage(skill, bullet, user) if can_damage_after_effect?
  3468.       execute_state_effect(skill, user,  bullet)   
  3469.       bullet.action.duration = 1 if remove_tool_after_hit?(skill, bullet, user)
  3470.       self.battler.invunerable_duration = tar_invu
  3471.       execute_blow_effect(skill,bullet) if can_blow_effect?
  3472.       execute_animation(skill, bullet, user)
  3473.       execute_tool_effects(skill, bullet , user)
  3474.   end
  3475.  
  3476.   #--------------------------------------------------------------------------
  3477.   # ● Execute Tool Effects
  3478.   #--------------------------------------------------------------------------              
  3479.   def execute_tool_effects(skill, bullet , user)
  3480.       execute_sticky_effect(skill, bullet, user)
  3481.       execute_bounce_effect(skill, bullet, user)
  3482.       execute_hit_action_effect(skill, bullet, user)
  3483.   end
  3484.  
  3485.   #--------------------------------------------------------------------------
  3486.   # ● Remove Tool After Hit?
  3487.   #--------------------------------------------------------------------------            
  3488.   def remove_tool_after_hit?(skill, bullet, user)
  3489.       return true if bullet.action.piercing == false
  3490.       return false
  3491.   end  
  3492.  
  3493.   #--------------------------------------------------------------------------
  3494.   # ● Execute Battler Skill Effect
  3495.   #--------------------------------------------------------------------------         
  3496.   def execute_battler_skill_effect(attacker ,skill, user)
  3497.       self.battler.item_apply(attacker, skill)
  3498.   end
  3499.  
  3500.   #--------------------------------------------------------------------------
  3501.   # ● Target Missed?
  3502.   #--------------------------------------------------------------------------        
  3503.   def target_missed?(attacker)
  3504.       if self.battler.result.missed
  3505.          self.battler.damage = XAS_WORD::MISSED
  3506.          self.battler.damage_pop = true         
  3507.          return true
  3508.       end   
  3509.       if self.battler.result.evaded
  3510.          self.battler.damage = XAS_WORD::EVADED
  3511.          self.battler.damage_pop = true            
  3512.          return true
  3513.       end  
  3514.       return false
  3515.   end  
  3516.   #--------------------------------------------------------------------------
  3517.   # ● Shoot Effect Before Damage
  3518.   #--------------------------------------------------------------------------        
  3519.   def shoot_effect_before_damage(skill, bullet, user)
  3520.   end
  3521.  
  3522.   #--------------------------------------------------------------------------
  3523.   # ● Shoot Effect After Damage
  3524.   #--------------------------------------------------------------------------         
  3525.   def shoot_effect_after_damage(skill, bullet, user)
  3526.       check_counter_attack(skill)
  3527.       self.battler.passive = false
  3528.   end
  3529.  
  3530.   #--------------------------------------------------------------------------
  3531.   # ● Shoot Effect After Damage
  3532.   #--------------------------------------------------------------------------            
  3533.   def check_counter_attack(skill)
  3534.       return if self.battler.is_a?(Game_Actor)
  3535.       return if self.battler.counter_action[2] == false
  3536.       return if self.battler.counter_action[1] > 0
  3537.       counter = XAS_BA_ENEMY::COUNTER_ATTACK[self.battler.enemy_id]
  3538.       if counter != nil
  3539.          counter_action_id = counter[rand(counter.size)]
  3540.          self.battler.counter_action[0] = counter_action_id
  3541.          self.battler.counter_action[1] = 15
  3542.       end  
  3543.   end  
  3544.  
  3545.   #--------------------------------------------------------------------------
  3546.   # ● Execute Bounce Effect
  3547.   #--------------------------------------------------------------------------            
  3548.   def execute_bounce_effect(skill, bullet, user)
  3549.       return false if bullet.action.hit_bounce == false
  3550.       bullet.bounce_direction
  3551.   end
  3552.  
  3553.   #--------------------------------------------------------------------------
  3554.   # ● Execute Stick Effect
  3555.   #--------------------------------------------------------------------------           
  3556.   def execute_sticky_effect(skill, bullet, user)
  3557.       return unless bullet.action.sticky
  3558.       return if bullet.temp_id !=  0
  3559.       bullet.pre_move_speed = bullet.move_speed
  3560.       bullet.temp_id = self.id
  3561.   end
  3562.  
  3563.   #--------------------------------------------------------------------------
  3564.   # ● Execute Hit Action Effect
  3565.   #--------------------------------------------------------------------------            
  3566.   def execute_hit_action_effect(skill, bullet, user)
  3567.       return if bullet.action.hit_action == 0
  3568.       self.battler.invunerable_duration = 1
  3569.       bullet.shoot(bullet.action.hit_action)
  3570.       bullet.action.duration = 9
  3571.       bullet.action.multi_hit = false
  3572.       bullet.character_name = ""
  3573.       bullet.x_pose_duration = 0
  3574.       bullet.x_pose_name = ""
  3575.       bullet.x_pose_original_name = ""      
  3576.   end
  3577.  
  3578.   #--------------------------------------------------------------------------
  3579.   # ● Can Damage Effect
  3580.   #--------------------------------------------------------------------------         
  3581.   def can_damage_after_effect?
  3582.       return false if self.battler.damage == nil
  3583.       return false unless self.battler.damage.is_a?(Numeric)
  3584.       return true
  3585.   end  
  3586.  
  3587.   #--------------------------------------------------------------------------
  3588.   # ● Execute State Effect
  3589.   #--------------------------------------------------------------------------        
  3590.   def execute_state_effect(skill, user,  bullet)   
  3591.       if user.battler.states.size != 0
  3592.          for i in user.battler.states
  3593.              execute_state_effect_user(skill, user, bullet,i)
  3594.          end   
  3595.       end
  3596.       if self.battler.states.size != 0
  3597.          for i in self.battler.states
  3598.              execute_state_effect_target(skill, user, bullet,i)
  3599.          end   
  3600.       end
  3601.   end
  3602.  
  3603.   #--------------------------------------------------------------------------
  3604.   # ● Execute State Effect User
  3605.   #--------------------------------------------------------------------------         
  3606.   def execute_state_effect_user(skill, user, bullet,i)
  3607.  
  3608.   end
  3609.  
  3610.   #--------------------------------------------------------------------------
  3611.   # ● Execute State Target
  3612.   #--------------------------------------------------------------------------         
  3613.   def execute_state_effect_target(skill, user, bullet,i)
  3614.       #Sleep
  3615.       if self.battler.damage.is_a?(Numeric) and self.battler.damage > 0
  3616.          if i.note =~ /<Sleep>/ or  i.note =~ /<睡眠>/
  3617.             self.battler.remove_state(i.id)
  3618.          end
  3619.       end   
  3620.   end  
  3621.  
  3622.   #--------------------------------------------------------------------------
  3623.   # ● Execute Blow Effect
  3624.   #--------------------------------------------------------------------------      
  3625.   def execute_blow_effect(skill,bullet)
  3626.       if bullet.action.hit_hold_target and self.temp_id == 0     
  3627.          self.temp_id = bullet.id
  3628.          self.pre_move_speed = self.move_speed         
  3629.          self.moveto(bullet.x, bullet.y)
  3630.       end   
  3631.       $game_map.screen.start_shake(5, 5, 60) if bullet.action.hit_shake
  3632.       p = bullet.action.blow_power.to_i  
  3633.       d = bullet.direction   
  3634.       return if self.battler.damage.to_i <= 0
  3635.       return if p < 0
  3636.       self.blow(d, p)  
  3637.   end
  3638.  
  3639.   #--------------------------------------------------------------------------
  3640.   # ● Execute Animation
  3641.   #--------------------------------------------------------------------------        
  3642.   def execute_animation(skill, bullet, user)   
  3643.       self.animation_id = skill.animation_id
  3644.       tool_animation = bullet.action.second_animation_id
  3645.       user_animation = bullet.action.third_animation_id
  3646.       bullet.animation_id = tool_animation if tool_animation != 0
  3647.       user.animation_id = user_animation if user_animation != 0
  3648.   end  
  3649.  
  3650.   #--------------------------------------------------------------------------
  3651.   # ● Knock Back Disable
  3652.   #--------------------------------------------------------------------------      
  3653.   def knock_back_disable
  3654.     return false
  3655.   end
  3656.  
  3657.   #--------------------------------------------------------------------------
  3658.   # ● Dead?
  3659.   #--------------------------------------------------------------------------         
  3660.   def dead?
  3661.     return self.battler == nil ? false : self.battler.dead?
  3662.   end
  3663.  
  3664. end
  3665.  
  3666.  
  3667. #===============================================================================
  3668. # ■ XRXS_BattlerAttachment
  3669. #==============================================================================
  3670. module XRXS_BattlerAttachment
  3671.  
  3672.   #--------------------------------------------------------------------------
  3673.   # ● Shoot Target Shield
  3674.   #--------------------------------------------------------------------------         
  3675.   def target_shield_enabled?(attacker, skill, bullet)
  3676.       return false unless self.battler.shield
  3677.       if bullet != nil
  3678.          return false if bullet.action.ignore_guard
  3679.          return true if face_direction?(bullet)         
  3680.       else   
  3681.          return false if attacker.battler.ignore_guard
  3682.          return true if face_direction?(attacker)         
  3683.       end  
  3684.       return false
  3685.   end  
  3686.  
  3687.   #--------------------------------------------------------------------------
  3688.   # ● Can Blow Effect
  3689.   #--------------------------------------------------------------------------        
  3690.   def can_blow_effect?
  3691.       return false if self.battler.no_knockback
  3692.       return false if $game_map.interpreter.running?
  3693.       return true
  3694.   end  
  3695.  
  3696. #--------------------------------------------------------------------------
  3697. # ● Execute Guard Effect
  3698. #--------------------------------------------------------------------------      
  3699. def execute_guard_effect(attacker, skill, bullet, inv, erase_bullet = true)
  3700.      self.battler.invunerable_duration = inv
  3701.      damage_pop(XAS_WORD::GUARD)
  3702.      guard_animation_id = XAS_ANIMATION::GUARD_ANIMATION_ID
  3703.      self.animation_id = guard_animation_id if guard_animation_id != 0   
  3704.      if bullet != nil
  3705.         bullet.erase if erase_bullet
  3706.      else   
  3707.         blow_reverse(attacker) unless attacker.battler.no_knockback
  3708.      end   
  3709. end
  3710.  
  3711. #--------------------------------------------------------------------------
  3712. # ● Blow Reverse
  3713. #--------------------------------------------------------------------------      
  3714. def blow_reverse(attacker)
  3715.      return if attacker.battler.no_knockback
  3716.      case attacker.direction
  3717.         when 2
  3718.            d = 8
  3719.         when 4
  3720.            d = 6
  3721.         when 6
  3722.            d = 4
  3723.         when 8  
  3724.            d = 2
  3725.      end
  3726.      attacker.jump(0,0)   
  3727.      attacker.blow(d,1)
  3728. end
  3729.  
  3730. #--------------------------------------------------------------------------
  3731. # ● Can Attack Effect
  3732. #--------------------------------------------------------------------------      
  3733. def damage_pop(text)
  3734.      return unless XAS_WORD::ENABLE_WORD
  3735.      self.battler.damage = text
  3736.      self.battler.damage_pop = true
  3737. end
  3738.  
  3739. #--------------------------------------------------------------------------
  3740. # ● Shd Direction?
  3741. #--------------------------------------------------------------------------      
  3742. def face_direction?(attacker)
  3743.      target = self.direction  
  3744.      case target
  3745.           when 2
  3746.              return true if attacker.direction == 8
  3747.           when 4
  3748.              return true if attacker.direction == 6
  3749.           when 6
  3750.              return true if attacker.direction == 4
  3751.           when 8  
  3752.              return true if attacker.direction == 2     
  3753.      end
  3754.      return false
  3755. end   
  3756.  
  3757. #--------------------------------------------------------------------------
  3758. # ● Execute Damage Pop
  3759. #--------------------------------------------------------------------------      
  3760. def execute_damage_pop(attacker,skill = nil)
  3761.      if skill != nil
  3762.         return  if  skill.note =~ /<伤害隐藏>/
  3763.         if skill.damage.to_mp?
  3764.            dam = self.battler.result.mp_damage
  3765.            self.battler.damage_type = "Mp"      
  3766.         elsif skill.damage.to_hp?
  3767.            dam = self.battler.result.hp_damage
  3768.            self.battler.damage_type = "Critical"  if self.battler.result.critical
  3769.         end   
  3770.         if dam != nil
  3771.            if skill.damage.drain? or skill.damage.drain?
  3772.               attacker.damage = -dam
  3773.               attacker.damage_type = self.battler.damage_type
  3774.               attacker.damage_pop = true
  3775.            end  
  3776.            self.battler.damage = dam
  3777.            self.battler.damage_pop = true
  3778.         end
  3779.      else
  3780.         if self.battler.result.hp_damage != nil
  3781.            self.battler.damage = self.battler.result.hp_damage
  3782.            self.battler.damage_type = "Critical" if self.battler.result.critical   
  3783.            self.battler.damage_pop = true      
  3784.         end   
  3785.      end  
  3786. end  
  3787.  
  3788. end   
  3789.  
  3790.  
  3791.  
  3792. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  3793. #■ TOOL - EQUIP
  3794. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  3795.  
  3796.  
  3797. #==============================================================================
  3798. # ■ Window Skill List
  3799. #==============================================================================
  3800. class Window_SkillList < Window_Selectable
  3801.  
  3802.   #--------------------------------------------------------------------------
  3803.   # ● Process OK
  3804.   #--------------------------------------------------------------------------                  
  3805.   alias x_skill_process_ok process_ok
  3806.   def process_ok
  3807.       return if can_equip_skill_action?
  3808.       x_skill_process_ok
  3809.   end
  3810.  
  3811.   #--------------------------------------------------------------------------
  3812.   # ● Can Equip Skill Action
  3813.   #--------------------------------------------------------------------------                     
  3814.   def can_equip_skill_action?
  3815.       return false if $game_party.in_battle
  3816.       skill = @data[index]
  3817.       if skill != nil and ( skill.note =~ /<Duration = (\d+)>/ or skill.note =~ /<存在时间 = (\d+)>/)
  3818.          @actor.skill_id = skill.id
  3819.          Sound.play_equip
  3820.          return true         
  3821.       end
  3822.       return false
  3823.   end
  3824.  
  3825. end
  3826.  
  3827. #==============================================================================
  3828. # ■ Window Item List
  3829. #==============================================================================
  3830. class Window_ItemList < Window_Selectable
  3831.  
  3832.   #--------------------------------------------------------------------------
  3833.   # ● Process OK
  3834.   #--------------------------------------------------------------------------                  
  3835.   alias x_item_process_ok process_ok
  3836.   def process_ok
  3837.       return if can_equip_item_action?
  3838.       x_item_process_ok
  3839.   end
  3840.  
  3841.   #--------------------------------------------------------------------------
  3842.   # ● Can Equip Item Action
  3843.   #--------------------------------------------------------------------------                     
  3844.   def can_equip_item_action?
  3845.       return false if $game_party.in_battle
  3846.       item = @data[index]
  3847.       if item != nil and item.is_a?(RPG::Item) and
  3848.         (item.note =~ /<Action ID = (\d+)>/ or item.note =~ /<动作ID = (\d+)>/)
  3849.          actor = $game_party.members[0]
  3850.          actor.item_id = item.id
  3851.          Sound.play_equip
  3852.          return true         
  3853.       end
  3854.       return false
  3855.   end
  3856.  
  3857. end
  3858.  
  3859.  
  3860.  
  3861. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  3862. #■ BATTLER - INITIALIZE
  3863. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  3864.  
  3865.  
  3866. #===============================================================================
  3867. # ■ Game Character
  3868. #==============================================================================
  3869. class Game_Character < Game_CharacterBase
  3870.  
  3871.   #--------------------------------------------------------------------------
  3872.   # ● Update Battler
  3873.   #--------------------------------------------------------------------------      
  3874.   def update_battler
  3875.       update_battler_pose
  3876.       update_battler_parameters
  3877.       update_battler_stop_movement
  3878.       update_battler_knockbacking
  3879.       update_battler_counter_action
  3880.       unless self.battler.hp == 0
  3881.           update_battler_cast_action   
  3882.           update_battler_move_speed if can_update_battler_move_speed?
  3883.           update_battler_states_effect
  3884.           update_battler_attacking
  3885.       else
  3886.           update_battler_defeat_process
  3887.       end
  3888.   end  
  3889.  
  3890. end
  3891.  
  3892. #===============================================================================
  3893. # ■ Game Player
  3894. #===============================================================================
  3895. class Game_Player < Game_Character
  3896.   include XRXS_BattlerAttachment
  3897.  
  3898.   #--------------------------------------------------------------------------
  3899.   # ● Battler
  3900.   #--------------------------------------------------------------------------  
  3901.   def battler
  3902.       return $game_party.members[0]
  3903.   end
  3904.  
  3905.   #--------------------------------------------------------------------------
  3906.   # ● Refresh Interpreter Effect
  3907.   #--------------------------------------------------------------------------        
  3908.   def refresh_interpreter_effect
  3909.       $game_system.old_interpreter_running = $game_map.interpreter.running?
  3910.       if $game_system.old_interpreter_running
  3911.          $game_temp.reset_battler_time = 60 * 4
  3912.       end  
  3913.       reset_battler_setting  
  3914.   end  
  3915.  
  3916.   #--------------------------------------------------------------------------
  3917.   # ● Update Battler Setting Time
  3918.   #--------------------------------------------------------------------------           
  3919.   def update_reset_battler_setting_time
  3920.       return if $game_temp.reset_battler_time == 0
  3921.       $game_temp.reset_battler_time -= 1
  3922.       reset_battler_setting_running if $game_temp.reset_battler_time == 0
  3923.   end
  3924.  
  3925.   #--------------------------------------------------------------------------
  3926.   # ● Update Battler Setting
  3927.   #--------------------------------------------------------------------------         
  3928.   def reset_battler_setting
  3929.       reset_player_parameters
  3930.       for ally in $game_party.members
  3931.          reset_members_parameters(ally)
  3932.       end
  3933.       for enemy in $game_map.events.values
  3934.           reset_enemies_parameters(enemy) if enemy.battler != nil
  3935.       end   
  3936.       $game_map.need_refresh = true  
  3937.   end  
  3938.  
  3939.   #--------------------------------------------------------------------------
  3940.   # ● Update Battler Setting Running
  3941.   #--------------------------------------------------------------------------         
  3942.   def reset_battler_setting_running
  3943.       reset_player_parameters_running
  3944.       for ally in $game_party.members
  3945.          reset_members_parameters_running(ally)
  3946.       end
  3947.       for enemy in $game_map.events.values
  3948.           reset_enemies_parameters(enemy) if enemy.battler != nil
  3949.       end   
  3950.       $game_map.need_refresh = true  
  3951.   end   
  3952.  
  3953.   #--------------------------------------------------------------------------
  3954.   # ● Reset Enemies Parameters
  3955.   #--------------------------------------------------------------------------         
  3956.   def reset_enemies_parameters(enemy)
  3957.       enemy.battler.cast_action[0] = 0
  3958.       enemy.battler.cast_action[1] = 0
  3959.       enemy.battler.cast_action[2] = 0
  3960.       enemy.battler.cast_action[3] = 0  
  3961.       enemy.battler.cast_action[4] = 0
  3962.       enemy.battler.counter_action[0] = 0
  3963.       enemy.battler.counter_action[1] = 0
  3964.       enemy.battler.counter_action[2] = true
  3965.       enemy.battler.invunerable_duration = 0
  3966.       enemy.knock_back_duration = nil
  3967.   end  
  3968.  
  3969.   #--------------------------------------------------------------------------
  3970.   # ● Reset Members Parameters
  3971.   #--------------------------------------------------------------------------         
  3972.   def reset_members_parameters(ally)
  3973.       ally.old_level = ally.level
  3974.       ally.shield = false
  3975.       ally.x_charge_action[0] = 0
  3976.       ally.x_charge_action[1] = 0
  3977.       ally.x_charge_action[2] = 0
  3978.       ally.x_charge_action[3] = 0
  3979.       ally.cast_action[0] = 0
  3980.       ally.cast_action[1] = 0
  3981.       ally.cast_action[2] = 0
  3982.       ally.cast_action[3] = 0  
  3983.       ally.cast_action[4] = 0
  3984.       ally.counter_action[0] = 0
  3985.       ally.counter_action[1] = 0
  3986.       ally.counter_action[2] = true
  3987.       ally.invunerable_duration = 0
  3988.   end
  3989.  
  3990.   #--------------------------------------------------------------------------
  3991.   # ● Reset Player Parameters
  3992.   #--------------------------------------------------------------------------         
  3993.   def reset_player_parameters
  3994.       make_pose("", 1) unless $game_player.action != nil
  3995.       $game_temp.xas_target_time = 0
  3996.       $game_temp.xas_target_shoot_id = 0
  3997.       $game_temp.xas_target_x = 0      
  3998.       @knock_back_duration = nil
  3999.       @dash_active = false
  4000.   end
  4001.  
  4002.  
  4003.   #--------------------------------------------------------------------------
  4004.   # ● Reset Members Parameters Running
  4005.   #--------------------------------------------------------------------------         
  4006.   def reset_members_parameters_running(ally)
  4007.       ally.old_level = ally.level
  4008.       ally.shield = false
  4009.       unless ally.x_charge_action[1] > 0
  4010.       ally.x_charge_action[0] = 0
  4011.       ally.x_charge_action[1] = 0
  4012.       ally.x_charge_action[2] = 0
  4013.       ally.x_charge_action[3] = 0
  4014.       end
  4015.       unless ally.cast_action[1] > 0
  4016.          ally.cast_action[0] = 0
  4017.          ally.cast_action[1] = 0
  4018.          ally.cast_action[2] = 0
  4019.          ally.cast_action[3] = 0  
  4020.          ally.cast_action[4] = 0
  4021.       end
  4022.       ally.counter_action[0] = 0
  4023.       ally.counter_action[1] = 0
  4024.       ally.counter_action[2] = true
  4025.       ally.invunerable_duration = 0
  4026.   end
  4027.  
  4028.   #--------------------------------------------------------------------------
  4029.   # ● Reset Player Parameters Running
  4030.   #--------------------------------------------------------------------------         
  4031.   def reset_player_parameters_running
  4032.       $game_temp.xas_target_time = 0
  4033.       $game_temp.xas_target_shoot_id = 0
  4034.       $game_temp.xas_target_x = 0      
  4035.       @knock_back_duration = nil
  4036.       @dash_active = false
  4037.   end
  4038.  
  4039. end
  4040.  
  4041. #===============================================================================
  4042. # ■ Game Follower
  4043. #===============================================================================
  4044. class Game_Follower < Game_Character
  4045.   include XRXS_BattlerAttachment
  4046.  
  4047.   #--------------------------------------------------------------------------
  4048.   # ● Battler
  4049.   #--------------------------------------------------------------------------   
  4050.   def battler
  4051.       return $game_party.members[@member_index]
  4052.   end
  4053. end
  4054.  
  4055. #===============================================================================
  4056. # ■ Game Follower
  4057. #===============================================================================
  4058. class Game_Followers
  4059.   include XRXS_BattlerAttachment
  4060.  
  4061.   #--------------------------------------------------------------------------
  4062.   # ● Battler
  4063.   #--------------------------------------------------------------------------   
  4064.   def battler
  4065.       return $game_party.members[@member_index]
  4066.   end
  4067. end
  4068. #===============================================================================
  4069. # ■ Game_Vehicle
  4070. #===============================================================================
  4071. class Game_Vehicle < Game_Character
  4072.   include XRXS_BattlerAttachment
  4073.   attr_reader   :collision_attack
  4074.  
  4075.   #--------------------------------------------------------------------------
  4076.   # ● Battler
  4077.   #--------------------------------------------------------------------------      
  4078.   def battler
  4079.      return @battler
  4080.   end  
  4081. end  
  4082.  
  4083. #===============================================================================
  4084. # ■ Game Event
  4085. #===============================================================================
  4086. class Game_Event < Game_Character
  4087.  
  4088.   include XRXS_BattlerAttachment
  4089.  
  4090.   #--------------------------------------------------------------------------
  4091.   # ● Battler
  4092.   #--------------------------------------------------------------------------   
  4093.   def battler
  4094.     return @battler
  4095.   end
  4096.  
  4097. #--------------------------------------------------------------------------
  4098. # ● Battler?
  4099. #--------------------------------------------------------------------------           
  4100. def battler?
  4101.      return false if self.erased
  4102.      return false if self.battler == nil
  4103.      return false if self.dead?
  4104.      return false if self.battler.no_damage_pop
  4105.      return false if self.battler.invunerable
  4106.      return true
  4107. end  
  4108.  
  4109.   #--------------------------------------------------------------------------
  4110.   # ● Refresh
  4111.   #--------------------------------------------------------------------------   
  4112.   alias xrxs64c_refresh refresh
  4113.   def refresh
  4114.       xrxs64c_refresh
  4115.       self.battler_recheck
  4116.   end
  4117.  
  4118.   #--------------------------------------------------------------------------
  4119.   # ● Battler Recheck
  4120.   #--------------------------------------------------------------------------   
  4121.   def battler_recheck
  4122.       return if @battler != nil
  4123.       return if @page == nil
  4124.       if self.name =~ /<Actor>/ or self.name =~ /<友方>/
  4125.          actor = $game_party.members[0]
  4126.          @battler = Game_Actor.new(actor.id)
  4127.          return
  4128.       else
  4129.          @enemy_id = 0
  4130.          if self.name =~ /<Enemy(\d+)>/i or self.name =~ /<敌人(\d+)>/i
  4131.             @enemy_id = $1.to_i   
  4132.          end           
  4133.          return if @enemy_id <= 0
  4134.          @battler = Game_Enemy.new(1, @enemy_id)
  4135.          self.force_update = true if self.battler.sensor_range >= 15         
  4136.       end  
  4137.   end
  4138.  
  4139.   #--------------------------------------------------------------------------
  4140.   # ● Battler Recheck
  4141.   #--------------------------------------------------------------------------      
  4142.   def enemy_id
  4143.       return @enemy_id
  4144.   end
  4145.  
  4146.   #--------------------------------------------------------------------------
  4147.   # ● body_size
  4148.   #--------------------------------------------------------------------------        
  4149.   def body_size
  4150.       if self.battler != nil
  4151.          return self.battler.body_size
  4152.       else
  4153.          return 0
  4154.       end  
  4155.   end
  4156.  
  4157. end
  4158.  
  4159.  
  4160. #===============================================================================
  4161. # ■ Game_Battler
  4162. #===============================================================================
  4163. class Game_Battler
  4164.   attr_accessor :sensor_range
  4165.   attr_accessor :body_size
  4166.   attr_accessor :breath_effect
  4167.   attr_accessor :breath_duration
  4168.   attr_accessor :fast_breath_effect
  4169.   attr_accessor :no_knockback
  4170.   attr_accessor :passive  
  4171.   attr_accessor :attack_animation_id
  4172.   attr_accessor :ignore_guard
  4173.   attr_accessor :no_damage_pop
  4174.  
  4175.   #--------------------------------------------------------------------------
  4176.   # ● Initialize
  4177.   #--------------------------------------------------------------------------      
  4178.   alias x_e_initialize initialize
  4179.   def initialize  
  4180.       x_e_initialize
  4181.       @sensor_range = 4
  4182.       @body_size = 0
  4183.       @breath_effect = false
  4184.       @breath_duration = 0
  4185.       @fast_breath_effect = false
  4186.       @no_knockback = false
  4187.       @passive = false     
  4188.       @attack_animation_id = 0
  4189.       @ignore_guard = false
  4190.       @no_damage_pop = false
  4191.   end  
  4192. end
  4193.  
  4194. #===============================================================================
  4195. # ■ Game_Enemy
  4196. #===============================================================================
  4197. class Game_Enemy < Game_Battler
  4198.  
  4199.   #--------------------------------------------------------------------------
  4200.   # ● Initialize
  4201.   #--------------------------------------------------------------------------      
  4202.   alias x_e2_initialize initialize
  4203.   def initialize(index, enemy_id)
  4204.       x_e2_initialize(index, enemy_id)
  4205.       enemy = $data_enemies[@enemy_id]
  4206.       setup_enemy_note(enemy)
  4207.   end  
  4208.  
  4209.   #--------------------------------------------------------------------------
  4210.   # ● Setup X Note Elements
  4211.   #--------------------------------------------------------------------------         
  4212.   def setup_enemy_note(enemy)
  4213.       if enemy.note =~ /<Sensor Range = (\d+)>/ or enemy.note =~ /<视野范围 = (\d+)>/ or
  4214.          enemy.note =~ /<感应器范围 = (\d+)>/ or enemy.note =~ /<效应范围 = (\d+)>/
  4215.          @sensor_range = $1.to_i
  4216.       end   
  4217.       if enemy.note =~ /<Body Size = (\d+)>/ or enemy.note =~ /<身体大小 = (\d+)>/
  4218.          @body_size = $1.to_i
  4219.       end
  4220.       if enemy.note =~ /<Attack Animation = (\d+)>/ or enemy.note =~ /<攻击动画 = (\d+)>/
  4221.          @attack_animation_id = $1.to_i
  4222.       end  
  4223.       if enemy.note =~ /<Death Zoom = (\d+)>/ or enemy.note =~ /<死亡方式 = (\d+)>/
  4224.          @death_zoom_effect = $1.to_i
  4225.       end
  4226.       if enemy.note =~ /<Knockback Duration = (\d+)>/ or enemy.note =~ /<倒地起身 = (\d+)>/
  4227.          @knockback_duration = $1.to_i
  4228.       end      
  4229.       if enemy.note =~ /<Ignore Guard>/ or enemy.note =~ /<忽略防御>/
  4230.          @ignore_shield = true
  4231.       end
  4232.       if enemy.note =~ /<Invunerable>/  or enemy.note =~ /<无敌>/
  4233.          @invunerable = true
  4234.       end
  4235.       if enemy.note =~ /<Breath Effect>/  or enemy.note =~ /<呼吸>/
  4236.          @breath_effect = true
  4237.       end
  4238.       if enemy.note =~ /<Knockback Disable>/  or   enemy.note =~ /<禁止击倒>/   
  4239.          @no_knockback = true
  4240.       end
  4241.       if enemy.note =~ /<Passive>/  or enemy.note =~ /<被动>/
  4242.          @passive = true
  4243.       end
  4244.       if enemy.note =~ /<伤害隐藏>/
  4245.          @no_damage_pop = true
  4246.       end   
  4247.       invunerable_actions_ids = XAS_BA_ENEMY::INVUNERABLE_ACTIONS[@enemy_id]
  4248.       if invunerable_actions_ids != nil
  4249.          @invunerable_actions = invunerable_actions_ids
  4250.       end   
  4251.       guard_directions_ids = XAS_BA_ENEMY::GUARD_DIRECTIONS[@enemy_id]
  4252.       if guard_directions_ids != nil
  4253.          @guard_directions = guard_directions_ids
  4254.       end         
  4255.   end
  4256.  
  4257.  
  4258. end  
  4259.  
  4260.  
  4261. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  4262. #■ BATTLER - EVENT SENSOR
  4263. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  4264.  
  4265.  
  4266. #===============================================================================
  4267. # ■ XRXS_Enemy_Sensor
  4268. #===============================================================================
  4269. module XRXS_EnemySensor
  4270.  
  4271.   #--------------------------------------------------------------------------
  4272.   # ● Update Sensor
  4273.   #--------------------------------------------------------------------------        
  4274.   def update_sensor
  4275.       if self.battler != nil and self.battler.sensor_range > 0  
  4276.          sensor_area = self.battler.sensor_range
  4277.       else  
  4278.          sensor_area = $game_variables[XAS_BA::DEFAULT_SENSOR_RANGE_VARIABLE_ID]
  4279.       end
  4280.       sensor_area = -1 if cancel_sensor?
  4281.       distance = ($game_player.x - self.x).abs + ($game_player.y - self.y).abs
  4282.       enable   = (distance <= sensor_area)
  4283.       key = [$game_map.map_id, self.id, XAS_BA::SENSOR_SELF_SWITCH]
  4284.       last_enable = $game_self_switches[key]
  4285.       last_enable = false if last_enable == nil
  4286.       if enable != last_enable
  4287.          touch_attack(false)
  4288.          @collision_attack = false
  4289.          @pattern = 0
  4290.          @pattern_count = 0               
  4291.          $game_self_switches[key] = enable
  4292.          self.refresh
  4293.       end
  4294.   end
  4295.  
  4296.   #--------------------------------------------------------------------------
  4297.   # ● Can Update Sensor
  4298.   #--------------------------------------------------------------------------            
  4299.   def can_update_sensor?
  4300.       return false if @sensor_enable == false
  4301.       return false if self.dead?
  4302.       return false if self.erased
  4303.       return false if self.stop
  4304.       return false if self.knockbacking?
  4305.       return true
  4306.   end
  4307.  
  4308.   #--------------------------------------------------------------------------
  4309.   # ● refresh_sensor
  4310.   #--------------------------------------------------------------------------         
  4311.   def refresh_sensor
  4312.       touch_attack(false)
  4313.       key = [$game_map.map_id, self.id, XAS_BA::SENSOR_SELF_SWITCH]
  4314.       $game_self_switches[key] = false
  4315.       @pattern = 0
  4316.       @pattern_count  = 0         
  4317.       self.refresh        
  4318.   end  
  4319.  
  4320.   #--------------------------------------------------------------------------
  4321.   # ● Cancel Sensor
  4322.   #--------------------------------------------------------------------------         
  4323.   def cancel_sensor?  
  4324.       return false if self.battler == nil
  4325.       return true if self.battler.passive
  4326.       return false
  4327.   end
  4328.  
  4329. end
  4330.  
  4331. #===============================================================================
  4332. # ■  Game Event
  4333. #===============================================================================
  4334. class Game_Event < Game_Character
  4335.  
  4336.   attr_accessor :sensor_enable
  4337.  
  4338.   #--------------------------------------------------------------------------
  4339.   # ● Initialize
  4340.   #--------------------------------------------------------------------------            
  4341.   alias x_sensor_initialize initialize
  4342.   def initialize(map_id, event)
  4343.       @sensor_enable = false
  4344.       x_sensor_initialize(map_id, event)
  4345.   end  
  4346.  
  4347.   #--------------------------------------------------------------------------
  4348.   # ● Conditions Met
  4349.   #--------------------------------------------------------------------------
  4350.   alias x_sensor_conditions_met conditions_met?
  4351.   def conditions_met?(page)
  4352.       c = page.condition
  4353.       if c.self_switch_ch == XAS_BA::SENSOR_SELF_SWITCH
  4354.          @sensor_enable = true
  4355.       end
  4356.       x_sensor_conditions_met(page)   
  4357.   end
  4358. end
  4359.  
  4360. #===============================================================================
  4361. # ■  Game Event
  4362. #===============================================================================
  4363. class Game_Character < Game_CharacterBase
  4364.       include XRXS_EnemySensor
  4365. end
  4366.  
  4367. #===============================================================================
  4368. # ■  Game Character
  4369. #===============================================================================
  4370. class Game_Character < Game_CharacterBase
  4371.       attr_writer   :opacity
  4372. end
  4373.  
  4374.  
  4375.  
  4376. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  4377. #■ BATTLER - ACTION
  4378. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  4379.  
  4380.  
  4381. #===============================================================================
  4382. # ■ Game Character
  4383. #==============================================================================
  4384. class Game_Character < Game_CharacterBase
  4385.  
  4386.   #--------------------------------------------------------------------------
  4387.   # ● Can Update Battler Move Speed
  4388.   #--------------------------------------------------------------------------                  
  4389.   def can_update_battler_move_speed?
  4390.       return false if @temp_id > 0
  4391.       return false if moving?   
  4392.       return true
  4393.   end  
  4394.  
  4395.   #--------------------------------------------------------------------------
  4396.   # ● Can Update Battler?
  4397.   #--------------------------------------------------------------------------               
  4398.   def can_update_battler?
  4399.       return false unless $game_system.xas_battle
  4400.       return false if self.battler == nil
  4401.       return false unless party_system?
  4402.       return true
  4403.   end  
  4404.  
  4405.   #--------------------------------------------------------------------------
  4406.   # ● Party System
  4407.   #--------------------------------------------------------------------------                  
  4408.   def party_system?
  4409.       return false if self.battler == nil
  4410.       if $xas_party_system == nil and self.battler.is_a?(Game_Actor)
  4411.          return false if self.battler.actor_id != $game_party.members[0].actor_id
  4412.       end
  4413.       return true
  4414.   end
  4415.  
  4416.   #--------------------------------------------------------------------------
  4417.   # ● Reset Battler Temp
  4418.   #--------------------------------------------------------------------------                  
  4419.   def reset_battler_temp
  4420.       reset_cast_temp   
  4421.       reset_charge_temp
  4422.   end  
  4423.  
  4424.   #--------------------------------------------------------------------------
  4425.   # ● Reset Charge Temp
  4426.   #--------------------------------------------------------------------------                    
  4427.   def reset_charge_temp  
  4428.       return if self.battler == nil
  4429.       return if self.battler.is_a?(Game_Enemy)
  4430.       self.battler.x_charge_action[0] = 0
  4431.       self.battler.x_charge_action[1] = 0
  4432.       self.battler.x_charge_action[2] = 0
  4433.       self.battler.x_charge_action[3] = 0
  4434.   end
  4435.  
  4436.   #--------------------------------------------------------------------------
  4437.   # ● Reset Battler Temp
  4438.   #--------------------------------------------------------------------------                    
  4439.   def reset_cast_temp   
  4440.       return if self.battler == nil
  4441.       self.battler.cast_action[0] = 0
  4442.       self.battler.cast_action[1] = 0
  4443.       self.battler.cast_action[2] = 0
  4444.       self.battler.cast_action[3] = 0  
  4445.       self.battler.cast_action[4] = 0
  4446.   end
  4447.  
  4448.   #--------------------------------------------------------------------------
  4449.   # ● update_battler_parameters
  4450.   #--------------------------------------------------------------------------   
  4451.   def update_battler_parameters
  4452.       @stop_count = -1 if can_stop_battler?
  4453.       self.battler.invunerable_duration -= 1 if self.battler.invunerable_duration > 0
  4454.       unless @stop
  4455.          @knock_back_duration = 30 if @temp_id > 0
  4456.       end   
  4457.   end   
  4458.  
  4459.   #--------------------------------------------------------------------------
  4460.   # ● Can Stop Battler
  4461.   #--------------------------------------------------------------------------      
  4462.   def can_stop_battler?
  4463.       return false if self.is_a?(Game_Player)
  4464.       return true if self.knockbacking?
  4465.       return true if self.dead?
  4466.       return true if self.stop
  4467.       return false
  4468.   end
  4469.  
  4470.   #--------------------------------------------------------------------------
  4471.   # ● Update Battler Counter Action
  4472.   #--------------------------------------------------------------------------                    
  4473.   def update_battler_counter_action
  4474.       return if self.battler.counter_action[1] == 0
  4475.       self.battler.counter_action[1] -= 1
  4476.       if self.battler.counter_action[1] == 0
  4477.          turn_toward_player
  4478.          self.battler.damage = XAS_WORD::COUNTER
  4479.          self.battler.damage_pop = true
  4480.          self.shoot(self.battler.counter_action[0])
  4481.          self.battler.counter_action[0] = 0
  4482.       end   
  4483.   end  
  4484.  
  4485.   #--------------------------------------------------------------------------
  4486.   # ● Update Cast Action
  4487.   #--------------------------------------------------------------------------         
  4488.   def update_battler_cast_action   
  4489.       return unless can_update_cast_action?
  4490.       self.battler.cast_action[3] += 1
  4491.       if self.battler.cast_action[3] > XAS_ANIMATION::LOOP_ANIMATIONS_SPEED
  4492.          self.battler.cast_action[3] = 0
  4493.          self.animation_id =  self.battler.cast_action[2]
  4494.       end  
  4495.       self.battler.cast_action[4] += 1
  4496.       if self.battler.cast_action[4] >= self.battler.cast_action[1]
  4497.           self.shoot(self.battler.cast_action[0])
  4498.       end
  4499.   end  
  4500.  
  4501.   #--------------------------------------------------------------------------
  4502.   # ● Can Update Cast Action
  4503.   #--------------------------------------------------------------------------            
  4504.   def can_update_cast_action?
  4505.       return false if self.battler.cast_action[1] == 0   
  4506.       return false if @stop
  4507.       return true
  4508.   end
  4509.  
  4510.   #--------------------------------------------------------------------------
  4511.   # ● Can Blow Effect
  4512.   #--------------------------------------------------------------------------              
  4513.   def can_blow?
  4514.       return false if self.stop and not self.battler.state_sleep
  4515.       return false if self.battler.no_knockback   
  4516.       return false if self.is_a?(Game_Player) and self.action != nil
  4517.       return true
  4518.   end   
  4519.  
  4520.   #--------------------------------------------------------------------------
  4521.   # ● Blow Effect
  4522.   #--------------------------------------------------------------------------        
  4523.   def blow(d, power = 1)
  4524.       return unless can_blow?
  4525.       jump(0,0)
  4526.       self.battler.invunerable_duration = 30 if self.battler.invunerable_duration <= 0
  4527.       if self.is_a?(Game_Event)
  4528.          @collision_attack = false  
  4529.       end
  4530.       @knock_back_duration = self.battler.knockback_duration
  4531.       refresh_sensor if self.is_a?(Game_Event)
  4532.       pre_direction = self.direction
  4533.       pre_direction_fix = self.direction_fix
  4534.       self.turn_reverse(d)      
  4535.       self.direction_fix = true
  4536.       power.times do
  4537.         case d
  4538.            when 2; @y += 1 if passable?(@x, @y, d)
  4539.            when 4; @x -= 1 if passable?(@x, @y, d)
  4540.            when 6; @x += 1 if passable?(@x, @y, d)
  4541.            when 8; @y -= 1 if passable?(@x, @y, d)
  4542.         end
  4543.       end
  4544.       self.direction_fix = pre_direction_fix
  4545.       self.direction = pre_direction
  4546.   end
  4547.  
  4548.   #--------------------------------------------------------------------------
  4549.   # ● Can Stop Battler Movement
  4550.   #--------------------------------------------------------------------------            
  4551.   def can_stop_battler_movement?
  4552.       return false if self.dead?   
  4553.       return true if self.battler.state_sleep
  4554.       return true if self.battler.state_stop
  4555.       return false
  4556.   end  
  4557.  
  4558.   #--------------------------------------------------------------------------
  4559.   # ● Impact
  4560.   #--------------------------------------------------------------------------              
  4561.   def impact(enable = true)
  4562.       return if self.tool_id == 0
  4563.       return if self.action == nil
  4564.       self.action.impact = enable
  4565.   end
  4566.  
  4567.   #--------------------------------------------------------------------------
  4568.   # ● Update Battler Stop Movement
  4569.   #--------------------------------------------------------------------------              
  4570.   def update_battler_stop_movement
  4571.       unless can_stop_battler_movement?
  4572.           @stop = false   
  4573.           return
  4574.       end
  4575.       @knock_back_duration = nil
  4576.       @stop = true      
  4577.       @step_anime = false   
  4578.       reset_battler_temp
  4579.       if self.battler.state_sleep
  4580.          make_pose("_Hit", 2)   
  4581.       else
  4582.          make_pose("", 2)
  4583.       end  
  4584.       if self.is_a?(Game_Event)
  4585.          @collision_attack = false
  4586.       end  
  4587.   end
  4588.  
  4589.   #--------------------------------------------------------------------------
  4590.   # ● Update Attacking
  4591.   #--------------------------------------------------------------------------              
  4592.   def update_battler_attacking
  4593.       return unless can_update_attacking?
  4594.       make_pose("_Atk", 2)
  4595.   end
  4596.  
  4597.   #--------------------------------------------------------------------------
  4598.   # ● Can Update Attacking
  4599.   #--------------------------------------------------------------------------              
  4600.   def can_update_attacking?
  4601.       return false if self.battler.is_a?(Game_Actor)
  4602.       return false if @collision_attack == false  
  4603.       return true
  4604.   end  
  4605.  
  4606.   #--------------------------------------------------------------------------
  4607.   # ● Update Battler Knobacking
  4608.   #--------------------------------------------------------------------------            
  4609.   def update_battler_knockbacking
  4610.        return unless self.knockbacking?
  4611.        @pattern = 0
  4612.        @knock_back_duration -= 1 if can_remove_knockback?
  4613.        make_pose("_Hit", 2)        
  4614.        if self.is_a?(Game_Event)
  4615.           @collision_attack = false
  4616.        end         
  4617.        if @knock_back_duration <= 0
  4618.           @knock_back_duration = nil
  4619.           make_pose("", 0)
  4620.           touch_attack(false) if self.is_a?(Game_Event)
  4621.           @character_name = @x_pose_original_name
  4622.        end
  4623.   end  
  4624.  
  4625.   #--------------------------------------------------------------------------
  4626.   # ● Can Remove Knockback
  4627.   #--------------------------------------------------------------------------              
  4628.   def can_remove_knockback?
  4629.       return true
  4630.   end
  4631.  
  4632.   #--------------------------------------------------------------------------
  4633.   # ● knockbacking?
  4634.   #--------------------------------------------------------------------------            
  4635.   def knockbacking?
  4636.       return false if self.battler == nil
  4637.       return false if @stop
  4638.       return true if @knock_back_duration != nil
  4639.       return false
  4640.   end
  4641.  
  4642.   #--------------------------------------------------------------------------
  4643.   # ● collapsing?
  4644.   #--------------------------------------------------------------------------         
  4645.   def collapsing?
  4646.       return self.collapse_duration.to_i > 0
  4647.   end
  4648.  
  4649.   #--------------------------------------------------------------------------
  4650.   # ● Seal Effect
  4651.   #--------------------------------------------------------------------------         
  4652.   def seal_effect
  4653.       Sound.play_buzzer
  4654.       if XAS_WORD::ENABLE_WORD
  4655.          self.battler.damage = XAS_WORD::SEAL
  4656.          self.battler.damage_pop = true
  4657.       end   
  4658.   end   
  4659.  
  4660. end
  4661.  
  4662. #===============================================================================
  4663. # ■ XAS_DamageStop
  4664. #===============================================================================
  4665. module XAS_DamageStop
  4666.  
  4667.   #--------------------------------------------------------------------------
  4668.   # ● Acting
  4669.   #--------------------------------------------------------------------------            
  4670.   def acting?
  4671.       return (super or self.knockbacking? or self.collapsing? or self.stop)
  4672.   end
  4673. end
  4674.  
  4675. #===============================================================================
  4676. # ■ Game_Player
  4677. #===============================================================================
  4678. class Game_Player < Game_Character
  4679.       include XAS_DamageStop
  4680. end
  4681.  
  4682. #===============================================================================
  4683. # ■ Game_Event
  4684. #===============================================================================
  4685. class Game_Event < Game_Character
  4686.       include XAS_DamageStop
  4687. end
  4688.  
  4689.  
  4690.  
  4691. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  4692. #■ BATTLER - TOUCH EFFECT
  4693. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  4694.  
  4695.  
  4696. #===============================================================================
  4697. # ■ XRXS_BattlerAttachment
  4698. #==============================================================================
  4699. module XRXS_BattlerAttachment
  4700.  
  4701.   #--------------------------------------------------------------------------
  4702.   # ● Attack Effect
  4703.   #--------------------------------------------------------------------------   
  4704.   def attack_effect(attacker)
  4705.       return false unless $game_system.xas_battle   
  4706.       return if self.battler == nil or attacker == nil
  4707.       return unless can_attack_effect?(attacker)
  4708.       if target_shield_enabled?(attacker, nil, nil)
  4709.          execute_guard_effect(attacker, nil, nil, 30)
  4710.          return
  4711.       end   
  4712.       execute_attack_effect(attacker)
  4713. end
  4714.  
  4715. #--------------------------------------------------------------------------
  4716. # ● Can Attack Effect
  4717. #--------------------------------------------------------------------------     
  4718. def can_attack_effect?(attacker)
  4719.      return false if self.can_update == false
  4720.      return false if @knock_back_duration != nil
  4721.      return false if attacker.stop
  4722.      return false if self.battler.invunerable
  4723.      return false if self.battler.invunerable_duration > 0
  4724.      return false if self.action != nil and self.action.user_invincible
  4725.      return false if seal_attack?(attacker.battler)     
  4726.      return false if target_state_invunerable?(30)
  4727.      return true
  4728. end  
  4729.  
  4730. #--------------------------------------------------------------------------
  4731. # ● Attack Target Shield
  4732. #--------------------------------------------------------------------------     
  4733. def attack_target_shield?(attacker)
  4734.      return false if attacker.battler.ignore_shield   
  4735.      return false unless self.battler.shield
  4736.      return true if face_direction?(attacker)
  4737.      return false
  4738. end  
  4739.  
  4740. #--------------------------------------------------------------------------
  4741. # ● Seal Attack?
  4742. #--------------------------------------------------------------------------               
  4743. def seal_attack?(attacker)
  4744.      if attacker.state_seal_attack or attacker.state_mute
  4745.         attacker.damage = XAS_WORD::SEAL
  4746.         attacker.damage_pop = true
  4747.         self.battler.invunerable_duration = 30
  4748.         return true
  4749.      end
  4750.      return false
  4751. end   
  4752.  
  4753. #--------------------------------------------------------------------------
  4754. # ● Execute Attack Damage
  4755. #--------------------------------------------------------------------------      
  4756. def execute_attack_damage(attacker)
  4757.      #if self.battler.agi > (rand(attacker.battler.agi) * 2)
  4758.      #   self.battler.result.missed = true
  4759.      #   return
  4760.      #end
  4761.      damage = ((attacker.battler.atk * 4) - (self.battler.def * 2)).truncate
  4762.      damage = 0 if damage < 0
  4763.      self.battler.result.hp_damage = damage
  4764.      #self.battler.result.critical   
  4765.      self.battler.hp -= damage.abs
  4766. end
  4767.  
  4768. #--------------------------------------------------------------------------
  4769. # ● Execute Attack Effect
  4770. #--------------------------------------------------------------------------      
  4771. def execute_attack_effect(attacker)
  4772.      execute_attack_effect_before_damage(attacker)
  4773.      execute_attack_damage(attacker)
  4774.      if target_missed?(attacker)
  4775.         self.battler.invunerable_duration = 30
  4776.         return
  4777.      end
  4778.      execute_damage_pop(attacker)
  4779.      execute_attack_effect_after_damage(attacker) if can_check_after_attack_effect?(attacker)   
  4780.      execute_state_effect(nil, attacker, nil)   
  4781.      self.battler.invunerable_duration = 20 + XAS_BA::DEFAULT_KNOCK_BACK_DURATION
  4782.      if attacker.battler.attack_animation_id != 0
  4783.         self.animation_id = attacker.battler.attack_animation_id
  4784.      end   
  4785.      if self.battler.damage.to_i > 0
  4786.         self.blow(attacker.direction, 1) if can_blow_effect?
  4787.      end
  4788.      if self.is_a?(Game_Player)
  4789.         self.need_refresh = true
  4790.      end
  4791. end  
  4792.  
  4793. #--------------------------------------------------------------------------
  4794. # ● Can Check After Attack Effect?  
  4795. #--------------------------------------------------------------------------        
  4796. def can_check_after_attack_effect?(attacker)   
  4797.      return false unless self.battler.damage.is_a?(Numeric)
  4798.      return true
  4799. end
  4800.  
  4801. #--------------------------------------------------------------------------
  4802. # ● Execute Attack Effect Before Damage
  4803. #--------------------------------------------------------------------------      
  4804. def execute_attack_effect_before_damage(attacker)
  4805.  
  4806. end
  4807.  
  4808. #--------------------------------------------------------------------------
  4809. # ● Execute Attack Effect After Damage
  4810. #--------------------------------------------------------------------------      
  4811. def execute_attack_effect_after_damage(attacker)
  4812.  
  4813. end
  4814.  
  4815. end
  4816.  
  4817. #===============================================================================
  4818. # ■ Game Player
  4819. #===============================================================================
  4820. class Game_Player < Game_Character  
  4821.   #--------------------------------------------------------------------------
  4822.   # ● Check Event Trigger Touch
  4823.   #--------------------------------------------------------------------------            
  4824.   alias xrxs64c_check_event_trigger_touch check_event_trigger_touch
  4825.   def check_event_trigger_touch(x, y)
  4826.       xrxs64c_check_event_trigger_touch(x, y)
  4827.       if $game_map.interpreter.running?
  4828.          return
  4829.       end
  4830.       for event in $game_map.events.values
  4831.           next unless event.collision_attack
  4832.           unless [1,2].include?(event.trigger)
  4833.              if event.battler != nil and event.x == x and event.y == y
  4834.                 $game_player.attack_effect(event)
  4835.              end
  4836.           end
  4837.       end
  4838.   end
  4839. end
  4840.  
  4841. #===============================================================================
  4842. # ■ Game Event
  4843. #===============================================================================
  4844. class Game_Event < Game_Character
  4845.  
  4846.   #--------------------------------------------------------------------------
  4847.   # ● Check Event Trigger Touch
  4848.   #--------------------------------------------------------------------------            
  4849.   alias xrxs64c_check_event_trigger_touch check_event_trigger_touch
  4850.   def check_event_trigger_touch(x, y)
  4851.     xrxs64c_check_event_trigger_touch(x, y)
  4852.     if $game_map.interpreter.running?
  4853.        return
  4854.     end
  4855.     return unless self.collision_attack
  4856.     if self.battler != nil and x == $game_player.x and y == $game_player.y
  4857.        $game_player.attack_effect(self)
  4858.     end
  4859.   end
  4860. end
  4861.  
  4862.  
  4863.  
  4864. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  4865. #■ BATTLER - MOVE SPEED
  4866. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  4867.  
  4868.  
  4869. #==============================================================================
  4870. # ■ Game_Character
  4871. #==============================================================================
  4872. class Game_Character < Game_CharacterBase
  4873.  
  4874.   include XAS_BA
  4875.   attr_accessor :base_move_speed
  4876.   attr_accessor :dash_move_speed
  4877.   attr_accessor :move_speed
  4878.  
  4879. #--------------------------------------------------------------------------
  4880. # ● Initialize
  4881. #--------------------------------------------------------------------------  
  4882.   alias x_move_speed_initialize initialize
  4883.   def initialize
  4884.       @base_move_speed = BASE_MOVE_SPEED
  4885.       @dash_move_speed = 0
  4886.       x_move_speed_initialize
  4887.   end  
  4888.  
  4889. #--------------------------------------------------------------------------
  4890. # ● update_battler_move_speed
  4891. #--------------------------------------------------------------------------
  4892.   def update_battler_move_speed
  4893.       @dash_move_speed = @dash_active ? DASH_MOVE_SPEED : 0
  4894.       sp1 = @base_move_speed
  4895.       sp2 = @dash_move_speed
  4896.       sp3 = self.battler.state_move_speed
  4897.       @move_speed = (sp1 + sp2 + sp3)
  4898.   end
  4899.  
  4900. #--------------------------------------------------------------------------
  4901. # ● Update Animation
  4902. #--------------------------------------------------------------------------      
  4903.   def update_animation
  4904.       super
  4905.       update_force_move_routine_move
  4906.   end
  4907.  
  4908. #--------------------------------------------------------------------------
  4909. # ● Update Force Move Routine Move
  4910. #--------------------------------------------------------------------------        
  4911.   def update_force_move_routine_move
  4912.       return if @force_action == ""
  4913.       return if @move_route == nil
  4914.       command = @move_route.list[@move_route_index]
  4915.       return if command == nil
  4916.       if command.code == ROUTE_PLAY_SE   
  4917.          params = command.parameters
  4918.          params[0].play
  4919.          advance_move_route_index
  4920.       end   
  4921.   end
  4922.  
  4923. #--------------------------------------------------------------------------
  4924. # ● Update Routine Move
  4925. #--------------------------------------------------------------------------      
  4926. alias x_update_routine_move update_routine_move
  4927. def update_routine_move
  4928.      return if @force_action_times > 0
  4929.      x_update_routine_move
  4930. end
  4931.  
  4932. #--------------------------------------------------------------------------
  4933. # ● Can Cancel Move Type Custom
  4934. #--------------------------------------------------------------------------   
  4935.   alias x_move_speed_process_move_command process_move_command
  4936.   def process_move_command(command)
  4937.       return if can_cancel_move_type_custom?(command)
  4938.       params = command.parameters
  4939.       x_move_speed_process_move_command(command)
  4940.       if command.code == ROUTE_CHANGE_SPEED and @battler != nil and
  4941.          self.is_a?(Game_Event)
  4942.          @base_move_speed = params[0]
  4943.       end        
  4944.   end
  4945.  
  4946. #--------------------------------------------------------------------------
  4947. # ● Can Cancel Move Type Custom
  4948. #--------------------------------------------------------------------------   
  4949.   def can_cancel_move_type_custom?(command)
  4950.       return true if command == nil
  4951.       return true if @force_action_times > 0
  4952.       return false
  4953.   end  
  4954.  
  4955. end  
  4956.  
  4957.  
  4958. #==============================================================================
  4959. # ■ Game_Event
  4960. #==============================================================================
  4961. class Game_Event < Game_Character  
  4962.  
  4963. #--------------------------------------------------------------------------
  4964. # ● Initialize
  4965. #--------------------------------------------------------------------------              
  4966. alias x_move_speed_event_initialize initialize
  4967. def initialize(map_id, event)
  4968.      x_move_speed_event_initialize(map_id, event)
  4969.      refresh_move_speed
  4970. end  
  4971.  
  4972.   #--------------------------------------------------------------------------
  4973.   # ● Refresh Move Speed
  4974.   #--------------------------------------------------------------------------
  4975.   def refresh_move_speed
  4976.       return if @page == nil
  4977.       @base_move_speed = @page.move_speed
  4978.   end
  4979.  
  4980. #--------------------------------------------------------------------------
  4981. # ● Setup Page
  4982. #--------------------------------------------------------------------------               
  4983. alias x_move_speed_setup_page setup_page
  4984. def setup_page(new_page)
  4985.      x_move_speed_setup_page(new_page)
  4986.      refresh_move_speed
  4987. end
  4988.  
  4989. end
  4990.  
  4991.  
  4992. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  4993. #■ BATTLER - STATES
  4994. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  4995.  
  4996.  
  4997. #==============================================================================
  4998. # ■ Game_Battler
  4999. #==============================================================================
  5000. class Game_Battler
  5001.  
  5002.   attr_accessor :state_move_speed
  5003.   attr_accessor :state_stop
  5004.   attr_accessor :state_loop_effect_time
  5005.   attr_accessor :state_loop_speed
  5006.   attr_accessor :state_duration
  5007.   attr_accessor :state_string
  5008.   attr_accessor :state_string_time
  5009.   attr_accessor :state_stop
  5010.   attr_accessor :state_slow
  5011.   attr_accessor :state_sleep
  5012.   attr_accessor :state_invunerable
  5013.   attr_accessor :state_fast
  5014.   attr_accessor :state_mute
  5015.   attr_accessor :state_seal_attack
  5016.   attr_accessor :state_seal_skill
  5017.   attr_accessor :state_seal_item
  5018.   attr_accessor :state_reflect
  5019.  
  5020. #--------------------------------------------------------------------------
  5021. # ● Initialize
  5022. #--------------------------------------------------------------------------  
  5023.   alias x_state_initialize initialize
  5024.   def initialize
  5025.       @state_move_speed = 0
  5026.       @state_duration = []
  5027.       @state_loop_effect_time = []
  5028.       @state_loop_speed = []
  5029.       @state_string = ""
  5030.       @state_string_time = 0
  5031.       @state_stop = false
  5032.       @state_sleep = false
  5033.       @state_invunerable = false
  5034.       @state_slow = false
  5035.       @state_fast = false
  5036.       @state_mute = false
  5037.       @state_seal_attack = false
  5038.       @state_seal_skill = false
  5039.       @state_seal_item = false
  5040.       @state_reflect = false
  5041.       x_state_initialize
  5042.   end
  5043.  
  5044. #--------------------------------------------------------------------------
  5045. # ● Add State
  5046. #--------------------------------------------------------------------------   
  5047.   alias x_add_state add_state
  5048.   def add_state(state_id)
  5049.       unless @states.include?(state_id)
  5050.           state = $data_states[state_id]
  5051.           xas_add_state(state)
  5052.       end        
  5053.       x_add_state(state_id)
  5054.   end
  5055.  
  5056. #--------------------------------------------------------------------------
  5057. # ● Xas Add State
  5058. #--------------------------------------------------------------------------      
  5059.   def xas_add_state(state)
  5060.       @state_duration[state.id] = 60 * $data_states[state.id].min_turns
  5061.       @state_loop_effect_time[state.id] = 0
  5062.       @state_loop_speed[state.id] = $data_states[state.id].max_turns
  5063.       execute_damage_state(state,0)
  5064.   end      
  5065.  
  5066. #--------------------------------------------------------------------------
  5067. # ● Remove State
  5068. #--------------------------------------------------------------------------        
  5069.   alias x_remove_state remove_state
  5070.   def remove_state(state_id)
  5071.       if state?(state_id)
  5072.          state = $data_states[state_id]
  5073.          xas_remove_state(state)
  5074.       end  
  5075.       x_remove_state(state_id)      
  5076.   end   
  5077.  
  5078. #--------------------------------------------------------------------------
  5079. # ● XAS Remove State
  5080. #--------------------------------------------------------------------------         
  5081.   def xas_remove_state(state)
  5082.       @state_duration.delete(state.id)  
  5083.       @state_loop_effect_time.delete(state.id)  
  5084.       @state_loop_speed.delete(state.id)
  5085.       execute_damage_state(state,1)
  5086.   end  
  5087.  
  5088. #--------------------------------------------------------------------------
  5089. # ● Execute_Damage_State
  5090. #--------------------------------------------------------------------------           
  5091.   def execute_damage_state(state,type)
  5092.       return unless XAS_DAMAGE_POP::DAMAGE_STATE_POP
  5093.       return unless XAS_WORD::ENABLE_WORD
  5094.       return if state == nil or state.id == 1
  5095.       case type
  5096.          when 0
  5097.              damage = "+ " + state.name.to_s
  5098.          when 1  
  5099.              damage = "- " + state.name.to_s
  5100.       end
  5101.       @state_string = damage
  5102.       @state_string_time = 30            
  5103.   end  
  5104.  
  5105. end
  5106.  
  5107. #==============================================================================
  5108. # ■ Game_Character
  5109. #==============================================================================
  5110. class Game_Character < Game_CharacterBase
  5111.  
  5112. #--------------------------------------------------------------------------
  5113. # ● Update Battler States Effect
  5114. #--------------------------------------------------------------------------   
  5115. def update_battler_states_effect
  5116.      return unless XAS_SYSTEM::STATE_SYSTEM
  5117.      update_state_string_pop
  5118.      update_pre_state_setup
  5119.      return unless can_update_states_effect?
  5120.      for i in self.battler.states
  5121.          state = $data_states[i.id]  
  5122.          if state == nil or self.battler.state_duration[state.id] == nil or
  5123.             self.battler.state_loop_effect_time[state.id] == nil or
  5124.             self.battler.state_loop_speed[state.id] == nil
  5125.             self.battler.remove_state(state.id)
  5126.             next
  5127.             return
  5128.          end  
  5129.          update_state_abs_effects(state)
  5130.          update_state_loop(state)
  5131.          update_remove_state(state)
  5132.      end  
  5133.  
  5134. end  
  5135.  
  5136. #--------------------------------------------------------------------------
  5137. # ● Update Pre State Setup
  5138. #--------------------------------------------------------------------------      
  5139. def update_pre_state_setup
  5140.      self.battler.state_stop = false
  5141.      self.battler.state_slow = false
  5142.      self.battler.state_fast = false
  5143.      self.battler.state_mute = false
  5144.      self.battler.state_sleep = false
  5145.      self.battler.state_invunerable = false
  5146.      self.battler.state_seal_attack = false
  5147.      self.battler.state_seal_skill = false
  5148.      self.battler.state_seal_item = false
  5149.      self.battler.state_reflect = false
  5150.      self.battler.state_move_speed = 0
  5151. end  
  5152.  
  5153. #--------------------------------------------------------------------------
  5154. # ● Update Pre State Setup
  5155. #--------------------------------------------------------------------------        
  5156. def update_state_abs_effects(state)
  5157.      if state.note =~ /<Stop>/ or state.note =~ /<停止>/
  5158.         self.battler.state_stop = true
  5159.      end
  5160.      if state.note =~ /<Slow>/ or state.note =~ /<减速>/
  5161.         self.battler.state_slow = true
  5162.         self.battler.state_move_speed = -1.5
  5163.      end   
  5164.      if state.note =~ /<Fast>/ or state.note =~ /<加速>/
  5165.         self.battler.state_fast = true
  5166.         self.battler.state_move_speed = 1     
  5167.      end
  5168.      if self.battler.state_fast and
  5169.         self.battler.state_slow
  5170.         self.battler.state_move_speed = 0
  5171.      end
  5172.      if state.note =~ /<Mute>/  or state.note =~ /<M沉默>/   
  5173.         self.battler.state_mute = true
  5174.      end
  5175.      if state.note =~ /<Sleep>/  or state.note =~ /<睡眠>/
  5176.         self.battler.state_sleep = true
  5177.      end
  5178.      if state.note =~ /<Invincible>/ or state.note =~ /<无敌>/   
  5179.         self.battler.state_invunerable = true
  5180.      end  
  5181.      if state.note =~ /<Seal Attack>/ or state.note =~ /<禁止攻击>/  
  5182.         self.battler.state_seal_attack = true
  5183.      end
  5184.      if state.note =~ /<Seal Skill>/   or state.note =~ /<禁止技能>/
  5185.         self.battler.state_seal_skill = true
  5186.      end      
  5187.      if state.note =~ /<Seal Item>/   or  state.note =~ /<禁止道具>/
  5188.         self.battler.state_seal_item = true
  5189.       end
  5190.      if state.note =~ /<Reflect>/ or  state.note =~ /<反射>/
  5191.         self.battler.state_reflect = true
  5192.      end         
  5193. end
  5194.  
  5195. #--------------------------------------------------------------------------
  5196. # ● Update State Loop
  5197. #--------------------------------------------------------------------------      
  5198. def update_state_loop(state)
  5199.      self.battler.state_loop_effect_time[state.id] += 1
  5200.      if self.battler.state_loop_effect_time[state.id] > self.battler.state_loop_speed[state.id]
  5201.         self.battler.state_loop_effect_time[state.id] = 0
  5202.         if state.note =~ /<Animation ID = (\d+)>/ or state.note =~ /<动画ID = (\d+)>/
  5203.            state_anime = $1.to_i
  5204.            if state_anime != nil
  5205.               self.animation_id = state_anime
  5206.            end
  5207.         end   
  5208.         execute_states_effects(state)         
  5209.      end         
  5210. end
  5211.  
  5212. #--------------------------------------------------------------------------
  5213. # ● Execute States Effect
  5214. #--------------------------------------------------------------------------      
  5215. def execute_states_effects(state)         
  5216.      if state.note =~ /<Slip Damage = (\S+)>/ or state.note =~ /<持续伤害 = (\S+)>/
  5217.         execute_state_slip_damage($1.to_i)
  5218.      end  
  5219. end
  5220.  
  5221. #--------------------------------------------------------------------------
  5222. # ● Execute States Slip Damage
  5223. #--------------------------------------------------------------------------        
  5224. def execute_state_slip_damage(damage)
  5225.      damage = 1 if damage == nil
  5226.      damage_slip = self.battler.mhp * damage / 100
  5227.      self.battler.hp -= damage_slip
  5228.      self.battler.damage = damage_slip
  5229.      self.battler.damage_pop = true
  5230. end
  5231.  
  5232. #--------------------------------------------------------------------------
  5233. # ● Update Remove State
  5234. #--------------------------------------------------------------------------      
  5235. def update_remove_state(state)
  5236.      self.battler.state_duration[state.id] -= 1
  5237.      if self.battler.state_duration[state.id] <= 0     
  5238.         self.battler.remove_state(state.id)
  5239.      end         
  5240. end
  5241.  
  5242. #--------------------------------------------------------------------------
  5243. # ● Can Update States Effect
  5244. #--------------------------------------------------------------------------      
  5245.   def can_update_states_effect?
  5246.       return false if self.dead?
  5247.       return false if self.battler.states == nil
  5248.       return false if self.battler.states.size == 0
  5249.       return false if self.battler.state_duration == []
  5250.       return true
  5251.   end
  5252.  
  5253. #--------------------------------------------------------------------------
  5254. # ● Update State String Pop
  5255. #--------------------------------------------------------------------------      
  5256.   def update_state_string_pop
  5257.       return false if self.battler.state_string_time == 0
  5258.       self.battler.state_string_time -= 1
  5259.       if self.battler.state_string_time == 0
  5260.          self.battler.damage = self.battler.state_string
  5261.          self.battler.damage_pop = true
  5262.          self.battler.state_string = ""
  5263.       end  
  5264.   end  
  5265. end  
  5266.  
  5267. #==============================================================================
  5268. # ■ Game_Party
  5269. #==============================================================================
  5270. class Game_Party < Game_Unit
  5271.  
  5272. #--------------------------------------------------------------------------
  5273. # ● On Player Walk
  5274. #--------------------------------------------------------------------------        
  5275. alias x_state_on_player_walk on_player_walk
  5276. def on_player_walk
  5277.      return if XAS_SYSTEM::STATE_SYSTEM
  5278.      x_state_on_player_walk
  5279. end
  5280.  
  5281. end
  5282.  
  5283.  
  5284.  
  5285. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  5286. #■ BATTLER - EVENT COMMANDS
  5287. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  5288.  
  5289.  
  5290. #===============================================================================
  5291. # ■ Game Event
  5292. #===============================================================================
  5293. class Game_Event < Game_Character
  5294.  
  5295.   #--------------------------------------------------------------------------
  5296.   # ● Shoot Chance
  5297.   #--------------------------------------------------------------------------            
  5298.   def shoot_chance(action_id,perc)
  5299.       return if self.battler == nil
  5300.       if perc >= rand(100)
  5301.          shoot(action_id)
  5302.       end  
  5303.   end  
  5304.  
  5305.   #--------------------------------------------------------------------------
  5306.   # ● Guard
  5307.   #--------------------------------------------------------------------------         
  5308.   def guard(enable)
  5309.       return if self.battler == nil
  5310.       self.battler.guard = enable
  5311.   end  
  5312.  
  5313.   #--------------------------------------------------------------------------
  5314.   # ● Touch Attack
  5315.   #--------------------------------------------------------------------------            
  5316.   def touch_attack(enable)
  5317.       return if self.battler == nil        
  5318.       return if seal_attack?(self.battler)
  5319.       @collision_attack = enable
  5320.       @pattern = 0
  5321.       @pattern_count  = 0      
  5322.   end
  5323.  
  5324.   #--------------------------------------------------------------------------
  5325.   # ● Counter
  5326.   #--------------------------------------------------------------------------            
  5327.   def counter(enable)
  5328.       return if self.battler == nil
  5329.       self.battler.counter_action[2] = enable
  5330.   end   
  5331.  
  5332.   #--------------------------------------------------------------------------
  5333.   # ● Rand Shoot
  5334.   #--------------------------------------------------------------------------            
  5335.   def rand_shoot(random_id = [])
  5336.       return if self.battler == nil
  5337.       return if random_id == []
  5338.       action_id = random_id[rand(random_id.size)]
  5339.       self.shoot(action_id)
  5340.   end      
  5341.  
  5342. end
  5343.  
  5344.  
  5345.  
  5346. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  5347. #■ BATTLER - DEFEAT PROCESS
  5348. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  5349.  
  5350. #===============================================================================
  5351. # ■ Scene Base
  5352. #===============================================================================
  5353. class Scene_Base  
  5354.  
  5355.   #--------------------------------------------------------------------------
  5356.   # ● Check Gameover
  5357.   #--------------------------------------------------------------------------              
  5358.   def check_gameover
  5359.       return unless $game_party.in_battle  
  5360.       SceneManager.goto(Scene_Gameover) if $game_party.all_dead?
  5361.   end
  5362. end  
  5363.  
  5364. #===============================================================================
  5365. # ■ Game Character
  5366. #===============================================================================
  5367. class Game_Character < Game_CharacterBase
  5368.   attr_accessor :collapse_duration
  5369.   attr_accessor :battler_visible
  5370.   attr_writer   :opacity
  5371.  
  5372.   #--------------------------------------------------------------------------
  5373.   # ● Initialize
  5374.   #--------------------------------------------------------------------------            
  5375.   alias x_collapse_initialize initialize
  5376.   def initialize
  5377.       @collapse_duration = 0
  5378.       x_collapse_initialize
  5379.   end  
  5380.  
  5381. end
  5382.  
  5383. #===============================================================================
  5384. # ■ XAS_BA_BATTLEEVENT_NONPREEMPT
  5385. #==============================================================================
  5386. module XAS_BA_BATTLEEVENT_NONPREEMPT
  5387.  
  5388.   #--------------------------------------------------------------------------
  5389.   # ● Update
  5390.   #--------------------------------------------------------------------------            
  5391.   def update
  5392.       return if self.battler != nil and $game_map.interpreter.running?
  5393.       super
  5394.   end
  5395. end
  5396.  
  5397. #===============================================================================
  5398. # ■ Game Event
  5399. #==============================================================================
  5400. class Game_Event < Game_Character
  5401.       include XAS_BA_BATTLEEVENT_NONPREEMPT
  5402. end
  5403.  
  5404. #===============================================================================
  5405. # ■ Game Character
  5406. #===============================================================================
  5407. class Game_Character < Game_CharacterBase
  5408.  
  5409.   #--------------------------------------------------------------------------
  5410.   # ● Update Battler Defeat Process
  5411.   #--------------------------------------------------------------------------      
  5412.    def update_battler_defeat_process
  5413.        execute_enemy_defeated_process if can_check_enemy_defeated?
  5414.        execute_actor_defeated_process if can_check_actor_defeated?
  5415.    end
  5416.  
  5417.   #--------------------------------------------------------------------------
  5418.   # ● Can Check Enemy Defeated?
  5419.   #--------------------------------------------------------------------------            
  5420.   def can_check_enemy_defeated?  
  5421.       return false if self.battler.is_a?(Game_Actor)
  5422.       return false if self.battler.defeated
  5423.       return true
  5424.   end     
  5425.  
  5426.   #--------------------------------------------------------------------------
  5427.   # ● Can Check Actor Defeated?
  5428.   #--------------------------------------------------------------------------              
  5429.   def can_check_actor_defeated?
  5430.       return false if self.battler.is_a?(Game_Enemy)
  5431.       return false if self.battler.defeated
  5432.       return false if $game_party.members[0].hp > 0
  5433.       return false if @collapse_duration > 0
  5434.       return true  
  5435.   end
  5436.  
  5437.   #--------------------------------------------------------------------------
  5438.   # ● Execute Actor Defeated Process
  5439.   #--------------------------------------------------------------------------               
  5440.   def execute_actor_defeated_process
  5441.       erase_actor_tools_on_map
  5442.       if $game_party.all_dead? and not self.battler.defeated
  5443.          self.battler.defeated = true
  5444.          self.collapse_duration = 120
  5445.          self.knock_back_duration = 161
  5446.          reset_battler_temp
  5447.       else   
  5448.          $game_temp.change_leader_wait_time = 0
  5449.          $game_player.change_leader
  5450.       end  
  5451.   end
  5452.  
  5453.   #--------------------------------------------------------------------------
  5454.   # ● Erase Tools on Map
  5455.   #--------------------------------------------------------------------------                  
  5456.   def erase_actor_tools_on_map
  5457.       for event in $game_map.events.values
  5458.           if event.tool_id > 0 and event.action.user.is_a?(Game_Player)
  5459.              event.erase
  5460.           end   
  5461.       end  
  5462.   end
  5463.  
  5464.   #--------------------------------------------------------------------------
  5465.   # ● Execute Enemy Defeaed Process
  5466.   #--------------------------------------------------------------------------         
  5467.    def execute_enemy_defeated_process
  5468.        self.battler.defeated = true
  5469.        self.through = true
  5470.        @knock_back_duration = 121
  5471.        enemy = $data_enemies[self.battler.enemy_id]
  5472.        @collapse_duration = 120
  5473.        execute_gain_exp_gold(enemy)  
  5474.        execute_active_switch(enemy)
  5475.        execute_defeated_animation(enemy)
  5476.        execute_defeated_sound_effect(enemy)
  5477.        execute_final_shoot(enemy)
  5478.    end   
  5479.  
  5480.   #--------------------------------------------------------------------------
  5481.   # ● Execute Defeated Sound Effect
  5482.   #--------------------------------------------------------------------------              
  5483.   def execute_defeated_sound_effect(enemy)
  5484.       return if self.battler.no_damage_pop
  5485.       Sound.play_enemy_collapse   
  5486.   end
  5487.  
  5488.   #--------------------------------------------------------------------------
  5489.   # ● Execute Final Shoot
  5490.   #--------------------------------------------------------------------------            
  5491.   def execute_final_shoot(enemy)
  5492.      if enemy.note  =~ /<Final Action ID = (\d+)>/  
  5493.        enemy.note  =~ /<Final Action ID = (\d+)>/   
  5494.       elsif enemy.note  =~ /<最终攻击ID = (\d+)>/
  5495.        enemy.note  =~ /<最终攻击ID = (\d+)>/
  5496.       end
  5497.       action_id = $1.to_i
  5498.       return if action_id == nil
  5499.       self.shoot(action_id)      
  5500.   end  
  5501.  
  5502.   #--------------------------------------------------------------------------
  5503.   # ● Execute Gain Exp Gold
  5504.   #--------------------------------------------------------------------------           
  5505.   def execute_gain_exp_gold(enemy)  
  5506.       exp = self.battler.exp
  5507.       case XAS_BA::EXP_TYPE
  5508.          when 0
  5509.             actor = $game_party.members[0]
  5510.             actor.gain_exp(exp)
  5511.          when 1
  5512.             for i in 0...$game_party.members.size
  5513.                actor = $game_party.members[i]           
  5514.                actor.gain_exp(exp)
  5515.             end   
  5516.          when 2  
  5517.             exp = exp / $game_party.members.size
  5518.             for i in 0...$game_party.members.size
  5519.                actor = $game_party.members[i]           
  5520.                actor.gain_exp(exp)
  5521.             end              
  5522.       end
  5523.       $game_party.gain_gold(self.battler.gold)
  5524.   end  
  5525.  
  5526.   #--------------------------------------------------------------------------
  5527.   # ● Execute_Active Switch
  5528.   #--------------------------------------------------------------------------           
  5529.   def execute_active_switch(enemy)
  5530.     if enemy.note  =~ /<Active Switch = (\d+)>/
  5531.         enemy.note  =~ /<Active Switch = (\d+)>/
  5532.       elsif  enemy.note  =~ /<激活开关 = (\d+)>/
  5533.         enemy.note  =~ /<激活开关 = (\d+)>/      
  5534.       end
  5535.     switch_id = $1.to_i  
  5536.       if switch_id != nil
  5537.          $game_switches[switch_id] = true
  5538.          $game_map.need_refresh = true     
  5539.       end
  5540.   end
  5541.  
  5542.   #--------------------------------------------------------------------------
  5543.   # ● Execute Defeated Animation
  5544.   #--------------------------------------------------------------------------            
  5545.   def execute_defeated_animation(enemy)
  5546.      if enemy.note  =~ /<Defeated Animation = (\d+)>/
  5547.          enemy.note  =~ /<Defeated Animation = (\d+)>/      
  5548.         elsif enemy.note  =~ /<死亡动画 = (\d+)>/
  5549.          enemy.note  =~ /<死亡动画 = (\d+)>/
  5550.         end
  5551.         anime_id = $1.to_i
  5552.      if anime_id != nil
  5553.          self.animation_id = anime_id
  5554.       end  
  5555.   end  
  5556.  
  5557. end   
  5558.  
  5559. #===============================================================================
  5560. # ■ Game Player
  5561. #===============================================================================
  5562. class Game_Player < Game_Character
  5563.  
  5564.   #--------------------------------------------------------------------------
  5565.   # ● Reset Old Level
  5566.   #--------------------------------------------------------------------------            
  5567.   def reset_old_level(trans = false)
  5568.      for actor in $game_party.members
  5569.          actor.old_level = actor.level
  5570.      end   
  5571.   end
  5572.  
  5573.   #--------------------------------------------------------------------------
  5574.   # ● Change Leader
  5575.   #--------------------------------------------------------------------------                  
  5576.   def change_leader
  5577.       return if $game_party.members.size <= 1
  5578.       reset_battler_temp
  5579.       current_leader_id = $game_party.members[0].id
  5580.       for i in 1..$game_party.members.size
  5581.           pre_leader = $game_party.members[0].id
  5582.           $game_party.remove_actor(pre_leader)
  5583.           $game_party.add_actor(pre_leader)  
  5584.           if $game_party.members[0].hp > 0
  5585.              execute_change_leader_effect unless current_leader_id == $game_party.members[0].id
  5586.              break
  5587.           end
  5588.       end
  5589.   end   
  5590.  
  5591.   #--------------------------------------------------------------------------
  5592.   # ● Exeute Change leader Effect
  5593.   #--------------------------------------------------------------------------                    
  5594.   def execute_change_leader_effect
  5595.       actor = $game_party.members[0]
  5596.       actor.invunerable_duration = XAS_BA::CHANGE_LEADER_WAIT_TIME
  5597.       actor.damage = nil
  5598.       actor.damage_pop = false
  5599.       actor.critical = false
  5600.       @knock_back_duration = nil
  5601.       if self.action != nil
  5602.          self.action.duration = 1
  5603.       end
  5604.       @force_action_times = 0
  5605.       @force_action_type = ""         
  5606.       reset_old_level(true)
  5607.       @x_pose_original_name = @character_name
  5608.       update_battler_pose
  5609.       $game_map.need_refresh = true
  5610.       self.animation_id = XAS_ANIMATION::CHANGE_LEADER_ANIMATION_ID
  5611.       $game_temp.change_leader_wait_time = XAS_BA::CHANGE_LEADER_WAIT_TIME  
  5612.   end
  5613.  
  5614.   #--------------------------------------------------------------------------
  5615.   # ● Check Actor Level
  5616.   #--------------------------------------------------------------------------           
  5617.   def check_actor_level
  5618.       return if $game_party.in_battle
  5619.       return if self.battler == nil
  5620.       return if self.battler.old_level == self.battler.level
  5621.       reset_old_level(false)
  5622.       if self.battler.level > 1
  5623.          Audio.se_play("Audio/SE/" + XAS_SOUND::LEVEL_UP , 100, 100)
  5624.          if XAS_WORD::ENABLE_WORD
  5625.             $game_player.battler.damage = XAS_WORD::LEVEL_UP
  5626.             $game_player.battler.damage_pop = true
  5627.          end
  5628.       end
  5629.       $game_player.need_refresh = true
  5630.   end
  5631. end   
  5632.  
  5633. #===============================================================================
  5634. # ■ Game Party
  5635. #===============================================================================
  5636. class Game_Party < Game_Unit
  5637.  
  5638. #--------------------------------------------------------------------------
  5639. # ● Setup Starting Members  
  5640. #--------------------------------------------------------------------------      
  5641.   alias x_old_level_setup_starting_members setup_starting_members  
  5642.   def setup_starting_members  
  5643.       x_old_level_setup_starting_members   
  5644.       for actor in $game_party.members
  5645.           actor.old_level = actor.level
  5646.       end
  5647.   end
  5648.  
  5649. end
  5650.  
  5651. #===============================================================================
  5652. # ■ Sprite Character
  5653. #==============================================================================
  5654. class Sprite_Character < Sprite_Base  
  5655.  
  5656.   #--------------------------------------------------------------------------
  5657.   # ● Update Collapse Effects
  5658.   #--------------------------------------------------------------------------            
  5659.   def update_collaspse_effects
  5660.       update_collapse_duration
  5661.       return unless can_collapse_effects?
  5662.       update_collpase_zoom_effects
  5663.       update_exp_gold_pop
  5664.   end
  5665.  
  5666.   #--------------------------------------------------------------------------
  5667.   # ● Can Collapse Effects
  5668.   #--------------------------------------------------------------------------              
  5669.   def can_collapse_effects?
  5670.       return false if @character.battler.is_a?(Game_Actor)
  5671.       return false unless @character.dead?
  5672.       return false if @character.erased   
  5673.       return true
  5674.   end  
  5675.  
  5676.   #--------------------------------------------------------------------------
  5677.   # ● Update Exp Gold Pop
  5678.   #--------------------------------------------------------------------------              
  5679.   def update_exp_gold_pop
  5680.       return unless XAS_DAMAGE_POP::DAMAGE_EXP_GOLD_POP
  5681.       exp_pop = @character.battler.exp
  5682.       gold_pop =@character.battler.gold
  5683.       case @character.collapse_duration
  5684.            when 110
  5685.                 enemy = $data_enemies[@character.battler.enemy_id]
  5686.                 @character.make_treasure(enemy)      
  5687.            when 80
  5688.              if exp_pop != 0
  5689.                 word = XAS_WORD::EXP
  5690.                 @character.battler.damage = word + " " + exp_pop.to_s
  5691.                 @character.battler.damage_pop = true
  5692.                 @character.battler.damage_type = "Exp"
  5693.              end  
  5694.            when 40
  5695.              if gold_pop != 0
  5696.                 word = $data_system.currency_unit
  5697.                 @character.battler.damage = word + " " + gold_pop.to_s
  5698.                 @character.battler.damage_pop = true
  5699.                 @character.battler.damage_type = "Gold"
  5700.              end               
  5701.       end      
  5702.   end
  5703.  
  5704.   #--------------------------------------------------------------------------
  5705.   # ● Update Collapse Duration
  5706.   #--------------------------------------------------------------------------              
  5707.   def update_collapse_duration
  5708.       @character.collapse_duration -= 1
  5709.       @character.opacity -= 2
  5710.       if @character.collapse_duration <= 0
  5711.          if @character.battler.is_a?(Game_Actor)
  5712.             SceneManager.goto(Scene_Gameover)
  5713.             return
  5714.          end
  5715.          self.visible = false
  5716.          @character.opacity = 0
  5717.          @character.erase
  5718.       end  
  5719.   end  
  5720.  
  5721.   #--------------------------------------------------------------------------
  5722.   # ● Update Collapse Zoom Effects
  5723.   #--------------------------------------------------------------------------               
  5724.   def update_collpase_zoom_effects
  5725.       case @character.battler.death_zoom_effect
  5726.           when 1
  5727.              @character.zoom_y += 0.05
  5728.              @character.zoom_x -= 0.01            
  5729.           when 2  
  5730.              @character.zoom_y -= 0.01
  5731.              @character.zoom_x += 0.03            
  5732.           when 3  
  5733.              @character.zoom_y += 0.03
  5734.              @character.zoom_x += 0.03              
  5735.           when 4   
  5736.              @character.zoom_y -= 0.005
  5737.              @character.zoom_x -= 0.005
  5738.           when 5   
  5739.             case @character.collapse_duration
  5740.                 when 60..120
  5741.                  @character.zoom_y -= 0.01
  5742.                  @character.zoom_x += 0.06                             
  5743.                 when 0..59  
  5744.                  @character.zoom_y += 0.2
  5745.                  @character.zoom_x -= 0.1
  5746.              end
  5747.       end
  5748.   end  
  5749.  
  5750. end
  5751.  
  5752.  
  5753.  
  5754. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  5755. #■ BATTLER - TREASURE
  5756. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  5757.  
  5758.  
  5759. #===============================================================================
  5760. # ■ XAS_BA_Item_Drop
  5761. #==============================================================================
  5762. module XAS_BA_ItemDrop
  5763.  
  5764.   #--------------------------------------------------------------------------
  5765.   # ● Defeat Process
  5766.   #--------------------------------------------------------------------------               
  5767.   def make_treasure(enemy)  
  5768.       treasure = nil      
  5769.       return unless $game_player.passable?(self.x,self.y,0)
  5770.       for di in enemy.drop_items
  5771.            next if di.kind == 0
  5772.            next if rand(di.denominator) != 0
  5773.            if di.kind == 1
  5774.               treasure = $data_items[di.data_id]
  5775.               tr_id = treasure.id
  5776.            elsif di.kind == 2
  5777.               treasure = $data_weapons[di.data_id]
  5778.               tr_id = treasure.id
  5779.            elsif di.kind == 3
  5780.               treasure = $data_armors[di.data_id]
  5781.               tr_id = treasure.id
  5782.            end
  5783.            break if treasure != nil
  5784.        end   
  5785.        if treasure != nil
  5786.           command = RPG::MoveCommand.new
  5787.           command.code = 14
  5788.           command.parameters = [0,0]
  5789.           route = RPG::MoveRoute.new
  5790.           route.repeat = false
  5791.           route.list = [command, RPG::MoveCommand.new]         
  5792.           page = RPG::Event::Page.new
  5793.           page.move_type = 3
  5794.           page.move_route = route
  5795.           page.move_frequency = 6
  5796.           page.priority_type = 1
  5797.           page.trigger = 1
  5798.           page.through = true
  5799.           event = RPG::Event.new(self.x, self.y)
  5800.           event.pages = [page]      
  5801.           event = RPG::Event.new(self.x, self.y)
  5802.           token = Token_Event.new($game_map.map_id, event)
  5803.           token.icon_name = treasure.icon_index
  5804.           token.treasure = [di.kind,tr_id]
  5805.           token.treasure_time = 120 + XAS_BA::TREASURE_ERASE_TIME * 60
  5806.           token.jump_high(0,0,20)
  5807.           token.force_update = true
  5808.           token.move_speed = 6
  5809.           $game_map.add_token(token)
  5810.        end  
  5811.   end  
  5812. end
  5813.  
  5814. #===============================================================================
  5815. # ■ Game Event
  5816. #===============================================================================
  5817. class Game_Event < Game_Character
  5818.   include XAS_BA_ItemDrop
  5819.  
  5820.   #--------------------------------------------------------------------------
  5821.   # ● Update Treasure Duration
  5822.   #--------------------------------------------------------------------------               
  5823.   def update_treasure_duration
  5824.       return if @treasure_time == 0
  5825.       @treasure_time -= 1
  5826.       self.erase if @treasure_time == 0
  5827.   end
  5828.  
  5829. end
  5830.  
  5831. #===============================================================================
  5832. # ■ Game Character
  5833. #==============================================================================
  5834. class Game_Character < Game_CharacterBase
  5835.   attr_accessor :icon_name
  5836.   attr_accessor :treasure
  5837. end
  5838.  
  5839. #===============================================================================
  5840. # ■ Game Character
  5841. #==============================================================================
  5842. class Sprite_Character < Sprite_Base
  5843.  
  5844.   #--------------------------------------------------------------------------
  5845.   # ● Update
  5846.   #--------------------------------------------------------------------------            
  5847.   alias xrxs_charactericon_update update
  5848.   def update
  5849.       xrxs_charactericon_update
  5850.       if @character.icon_name != nil
  5851.          self.bitmap = Cache.system("Iconset")
  5852.          self.src_rect.set(@character.icon_name  % 16 * 24, @character.icon_name / 16 * 24, 24, 24)
  5853.          self.ox = 12
  5854.          self.oy = 24
  5855.       end
  5856.   end
  5857. end
  5858.  
  5859. #===============================================================================
  5860. # ■ Game Player
  5861. #==============================================================================
  5862. class Game_Player < Game_Character
  5863.  
  5864.   #--------------------------------------------------------------------------
  5865.   # ● Check Event Trigger Here
  5866.   #--------------------------------------------------------------------------               
  5867.   alias treasure_check_event_trigger_here check_event_trigger_here
  5868.   def check_event_trigger_here(triggers)
  5869.       return false if $game_map.interpreter.running?
  5870.       check_treasure_here         
  5871.       treasure_check_event_trigger_here(triggers)
  5872.   end  
  5873.  
  5874.   #--------------------------------------------------------------------------
  5875.   # ● check_treasure_here   
  5876.   #--------------------------------------------------------------------------                 
  5877.   def check_treasure_here   
  5878.      for event in $game_map.events_xy(@x, @y)
  5879.          if event.treasure != nil
  5880.             name_pop = true
  5881.             case event.treasure[0]            
  5882.             when 1
  5883.                   item = $data_items[event.treasure[1]]
  5884.                   if can_execute_field_item_effect?(item)
  5885.                      name_pop = false
  5886.                   else  
  5887.                      $game_party.gain_item(item, 1)
  5888.                   end
  5889.                   $game_map.need_refresh = true
  5890.             when 2  
  5891.                   item = $data_weapons[event.treasure[1]]
  5892.                   $game_party.gain_item($data_weapons[event.treasure[1]], 1,false)
  5893.             when 3
  5894.                   item = $data_armors[event.treasure[1]]
  5895.                   $game_party.gain_item(item, 1,false)
  5896.             end
  5897.             Audio.se_play("Audio/SE/" + XAS_SOUND::ITEM_DROP , 100, 100)   
  5898.             event.erase
  5899.             if item != nil
  5900.                 if item.note =~ /<Drop Animation = (\d+)>/ or item.note =~ /<掉落动画 = (\d+)>/
  5901.                    self.animation_id = $1.to_i
  5902.                 end
  5903.                 if XAS_DAMAGE_POP::DAMAGE_ITEM_POP and name_pop
  5904.                    self.battler.damage = item.name.to_s
  5905.                    self.battler.damage_pop = true
  5906.                    self.battler.damage_type = "Item"
  5907.                 end                       
  5908.             end
  5909.           end            
  5910.      end   
  5911. end           
  5912.  
  5913.   #--------------------------------------------------------------------------
  5914.   # ● Can Execute Field Item Effect
  5915.   #--------------------------------------------------------------------------                  
  5916.   def can_execute_field_item_effect?(item)
  5917.       if item.note =~ /<Drop HP Damage = (\S+)>/ or item.note =~ /<HP伤害 = (\S+)>/
  5918.          damage = $1.to_i
  5919.          damage2 = damage * self.battler.mhp / 100
  5920.          self.battler.damage = damage2
  5921.          self.battler.damage_pop = true
  5922.          self.battler.hp -= damage2
  5923.          return true
  5924.       end  
  5925.       if item.note =~ /<Drop MP Damage = (\S+)>/ or item.note =~ /<MP伤害 = (\S+)>/
  5926.          damage = $1.to_i
  5927.          damage2 = damage * self.battler.mmp / 100
  5928.          self.battler.mp -= damage2         
  5929.          self.battler.damage_type = "Mp"   
  5930.          self.battler.damage = damage2
  5931.          self.battler.damage_pop = true
  5932.          return true
  5933.       end      
  5934.       if item.note =~ /<Drop Gold = (\d+)>/ or item.note =~ /<掉落金币 = (\d+)>/
  5935.          gold = $1.to_i
  5936.          damage = $data_system.terms.gold + " " + gold.to_s
  5937.          self.battler.damage = damage
  5938.          self.battler.damage_pop = true
  5939.          $game_party.gain_gold(gold)
  5940.          return true
  5941.       end
  5942.       return false  
  5943.   end  
  5944. end
  5945.  
  5946.  
  5947.  
  5948. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  5949. #■ SPRITE - POSE (Character Name)
  5950. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  5951.  
  5952.  
  5953. #===============================================================================
  5954. # ■ Game_Character
  5955. #===============================================================================
  5956. class Game_Character < Game_CharacterBase
  5957.  
  5958.   attr_accessor :x_pose_duration
  5959.   attr_accessor :x_pose_name
  5960.   attr_accessor :x_pose_original_name
  5961.   attr_accessor :character_name
  5962.  
  5963.   #-----------------------------------------------------------------------------
  5964.   # ● Initialize
  5965.   #-----------------------------------------------------------------------------  
  5966.   alias x_pose_initialize initialize
  5967.   def initialize
  5968.       x_pose_initialize
  5969.       @x_pose_duration = 0
  5970.       @x_pose_name = ""
  5971.       @x_pose_original_name = @character_name
  5972.   end
  5973.  
  5974.   #-----------------------------------------------------------------------------
  5975.   # ● Update
  5976.   #-----------------------------------------------------------------------------   
  5977.   def make_pose(sufix, pose_duration)
  5978.       return if @x_pose_original_name == ""
  5979.       @x_pose_name = sufix
  5980.       @x_pose_duration = pose_duration         
  5981.   end     
  5982.  
  5983.   #-----------------------------------------------------------------------------
  5984.   # ● Update Pose
  5985.   #-----------------------------------------------------------------------------   
  5986.   def update_battler_pose
  5987.       return false unless XAS_SYSTEM::CHARACTER_POSE_NAME
  5988.       if @x_pose_duration == 0
  5989.          @x_pose_original_name = @character_name
  5990.          return
  5991.       else     
  5992.          @x_pose_duration -= 1
  5993.          @character_name = @x_pose_original_name + @x_pose_name
  5994.          if @x_pose_duration == 0
  5995.             @character_name = @x_pose_original_name
  5996.             @x_pose_name = ""
  5997.          end
  5998.       end
  5999.       unless jumping?
  6000.          @jump_count = 0
  6001.          @jump_peak = 0
  6002.       end      
  6003.   end
  6004.  
  6005.   #-----------------------------------------------------------------------------
  6006.   # ● Set Graphic
  6007.   #-----------------------------------------------------------------------------      
  6008.   alias x_pose_set_graphic set_graphic
  6009.   def set_graphic(character_name, character_index)
  6010.       x_pose_set_graphic(character_name, character_index)
  6011.       @x_pose_original_name = @character_name
  6012.       @x_pose_duration = 0
  6013.       @x_pose_name = ""      
  6014.   end   
  6015.  
  6016. end
  6017.  
  6018.  
  6019. #===============================================================================
  6020. # ■ Game_Interpreter
  6021. #===============================================================================
  6022. class Game_Interpreter
  6023.  
  6024.   #-----------------------------------------------------------------------------
  6025.   # ● Command_322
  6026.   #-----------------------------------------------------------------------------   
  6027.   alias x_pose_command_322 command_322
  6028.   def command_322
  6029.       x_pose_command_322
  6030.       actor = $game_actors[@params[0]]
  6031.       if actor != nil
  6032.          $game_player.x_pose_duration = 0
  6033.          $game_player.x_pose_original_name =  @params[1]
  6034.       end
  6035.   end
  6036.  
  6037. end  
  6038.  
  6039. #===============================================================================
  6040. # ■ RPG_FileTest
  6041. #===============================================================================
  6042. module RPG_FileTest
  6043.  
  6044.   #--------------------------------------------------------------------------
  6045.   # ● RPG_FileTest.character_exist?
  6046.   #--------------------------------------------------------------------------
  6047.   def RPG_FileTest.character_exist?(filename)
  6048.       return Cache.character(filename) rescue return false
  6049.   end
  6050.  
  6051.   #--------------------------------------------------------------------------
  6052.   # ● RPG_FileTest.system_exist?
  6053.   #--------------------------------------------------------------------------
  6054.   def RPG_FileTest.system_exist?(filename)
  6055.       return Cache.system(filename) rescue return false
  6056.   end  
  6057.  
  6058. end
  6059.  
  6060. #===============================================================================
  6061. # ■ Sprite_Character
  6062. #===============================================================================
  6063. class Sprite_Character < Sprite_Base
  6064.  
  6065.   #--------------------------------------------------------------------------
  6066.   # ● X Pose Update
  6067.   #--------------------------------------------------------------------------  
  6068.   alias x_pose_update_bitmap update_bitmap
  6069.   def update_bitmap
  6070.       check_file_exist
  6071.       x_pose_update_bitmap
  6072.   end
  6073.  
  6074. #--------------------------------------------------------------------------
  6075. # ● Check File Exist
  6076. #--------------------------------------------------------------------------  
  6077. def check_file_exist
  6078.      return if @character_name == @character.character_name
  6079.      unless RPG_FileTest.character_exist?(@character.character_name)
  6080.             @character.character_name = @character.x_pose_original_name   
  6081.             @character.x_pose_duration = 0
  6082.             @character.x_pose_name = ""
  6083.      end         
  6084. end  
  6085.  
  6086. end
  6087.  
  6088.  
  6089.  
  6090.  
  6091.  
  6092. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  6093. #■ SPRITE - DAMAGE SPRITE
  6094. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  6095.  
  6096.  
  6097. #===============================================================================
  6098. # ■  XRXS_DAMAGE_OFFSET
  6099. #===============================================================================
  6100. module XRXS_DAMAGE_OFFSET
  6101.  
  6102.   #--------------------------------------------------------------------------
  6103.   # ● Update
  6104.   #--------------------------------------------------------------------------              
  6105.   def update
  6106.       super
  6107.       @damage_sprites   = [] if @damage_sprites.nil?
  6108.       for damage_sprite in @damage_sprites
  6109.           damage_sprite.x = self.x
  6110.           damage_sprite.y = self.y
  6111.       end
  6112.   end
  6113. end
  6114.  
  6115. #===============================================================================
  6116. # ■ Sprite_Character
  6117. #===============================================================================
  6118. class Sprite_Character < Sprite_Base
  6119.       include XRXS_DAMAGE_OFFSET
  6120. end
  6121.  
  6122.  
  6123. #==============================================================================
  6124. # ■ Sprite Base
  6125. #==============================================================================
  6126. class Sprite_Base < Sprite
  6127.   include XAS_DAMAGE_POP
  6128.   #--------------------------------------------------------------------------
  6129.   # ● Initialize
  6130.   #--------------------------------------------------------------------------   
  6131.   alias x_damage_pop_initialize initialize
  6132.   def initialize(viewport = nil)      
  6133.       @_damage_duration = 0
  6134.       x_damage_pop_initialize(viewport)
  6135.   end
  6136.  
  6137.   #--------------------------------------------------------------------------
  6138.   # ● Damage
  6139.   #--------------------------------------------------------------------------     
  6140.   def damage(value, type = "")
  6141.       dispose_damage
  6142.       @damage_ox = 0
  6143.       @damage_type = type
  6144.       # NUMBER PICTURE
  6145.       if value.is_a?(Numeric)
  6146.          bitmap_number_image = Cache.system("XAS_Damage_Number")
  6147.          bitmap_im_cw = bitmap_number_image.width / 10
  6148.          bitmap_im_ch = bitmap_number_image.height / 5           
  6149.          bitmap = Bitmap.new(bitmap_number_image.width,(bitmap_im_ch * 2) + 5)
  6150.          bitmap_number_text = value.to_s.split(//)
  6151.          center_x = (((2 + bitmap_number_text.size) * bitmap_im_cw) / 2)
  6152.          # Damage Color         
  6153.          if value >= 0
  6154.             if @damage_type == "Critical"
  6155.                h = bitmap_im_ch * 2  
  6156.                h2 = bitmap_im_ch * 4
  6157.                $game_map.screen.start_shake(5, 5, 60)
  6158.             elsif @damage_type == "Mp"   
  6159.                h = bitmap_im_ch * 0  
  6160.                h2 = bitmap_im_ch * 3
  6161.             else
  6162.                h = 0
  6163.             end
  6164.             f = 0
  6165.           else # Recover Color   
  6166.             h = bitmap_im_ch  
  6167.             h2 = bitmap_im_ch * 3 if @damage_type == "Mp"     
  6168.             f = 1
  6169.         end   
  6170.         for r in f..bitmap_number_text.size - 1
  6171.             bitmap_number_abs = bitmap_number_text[r].to_i
  6172.             bitmap_src_rect = Rect.new(bitmap_im_cw * bitmap_number_abs, h, bitmap_im_cw, bitmap_im_ch)
  6173.             bitmap.blt(center_x + (bitmap_im_cw  *  r), bitmap_im_ch + 5, bitmap_number_image, bitmap_src_rect)                  
  6174.         end
  6175.         ex = (bitmap_im_cw / 2) * (bitmap_number_text.size + f)
  6176.         @damage_ox = (bitmap_number_image.width - (bitmap_number_image.width / 2) - ex) - center_x
  6177.         # Add Extra String (MP / Critical)
  6178.         if h2 != nil
  6179.            string_x = (center_x - (bitmap_number_image.width / 2) + (bitmap_im_cw / 2) * bitmap_number_text.size)
  6180.            bitmap_src_rect = Rect.new(0, h2,  bitmap_number_image.width, bitmap_im_ch)
  6181.            bitmap.blt(string_x , 0, bitmap_number_image, bitmap_src_rect)   
  6182.         end        
  6183.         bitmap_number_image.dispose  
  6184.       else
  6185.           #TEXT STRING
  6186.           damage_string = value.to_s
  6187.           bitmap = Bitmap.new(160, 48)
  6188.           bitmap.font.name = DAMAGE_FONT_NAME
  6189.           bitmap.font.size = DAMAGE_FONT_SIZE
  6190.           bitmap.font.bold = DAMAGE_FONT_BOLD
  6191.           bitmap.font.italic = DAMAGE_FONT_ITALIC
  6192.           bitmap.font.color = Color.new(0,0,0)
  6193.           bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  6194.           case @damage_type
  6195.                when "Exp";   string_color = DAMAGE_EXP_FONT_COLOR
  6196.                when "Gold";  string_color = DAMAGE_GOLD_FONT_COLOR
  6197.                when "Item";  string_color = DAMAGE_ITEM_FONT_COLOR
  6198.           else
  6199.              string_color = DAMAGE_DEFAULT_FONT_COLOR
  6200.           end
  6201.           bitmap.font.color = string_color
  6202.           bitmap.draw_text(0, 12, 160, 36, damage_string, 1)              
  6203.       end
  6204.        @_damage_sprite = ::Sprite.new(self.viewport)
  6205.        @_damage_sprite.bitmap = bitmap
  6206.        @_damage_sprite.ox = 80
  6207.        @_damage_sprite.oy = 20
  6208.        @_damage_sprite.x = self.x + @damage_ox
  6209.        @_damage_sprite.y = self.y - self.oy / 2
  6210.        @_damage_sprite.z = 3000
  6211.        @_damage_duration = 60
  6212.    end
  6213.  
  6214.   #--------------------------------------------------------------------------
  6215.   # ● Dispose Damage
  6216.   #--------------------------------------------------------------------------      
  6217.   def dispose_damage
  6218.       if @_damage_sprite != nil
  6219.          @_damage_sprite.bitmap.dispose
  6220.          @_damage_sprite.dispose
  6221.          @_damage_sprite = nil
  6222.          @_damage_duration = 0
  6223.       end
  6224.   end
  6225.  
  6226.   #--------------------------------------------------------------------------
  6227.   # ● Dispose
  6228.   #--------------------------------------------------------------------------         
  6229.   alias x_damage_dispose dispose
  6230.   def dispose
  6231.       dispose_damage
  6232.       x_damage_dispose
  6233.   end
  6234.  
  6235.   #--------------------------------------------------------------------------
  6236.   # ● Update
  6237.   #--------------------------------------------------------------------------           
  6238.   alias x_damage_pop_update update
  6239.   def update
  6240.       if @_damage_duration > 0
  6241.          @_damage_duration -= 1
  6242.          if @_damage_duration == 0
  6243.             dispose_damage
  6244.          end
  6245.        end      
  6246.        x_damage_pop_update
  6247.   end   
  6248.  
  6249. end  
  6250.  
  6251. #===============================================================================
  6252. # ■ XRXS DAMAGE
  6253. #===============================================================================
  6254. module XRXS_DAMAGE
  6255.  
  6256.   #--------------------------------------------------------------------------
  6257.   # ● Damage X Init Velocity
  6258.   #--------------------------------------------------------------------------                             
  6259.   def damage_x_init_velocity
  6260.       return 0.2 * (rand(5) - 2)
  6261.   end
  6262.  
  6263.   #--------------------------------------------------------------------------
  6264.   # ● Damage Y Init Velocity
  6265.   #--------------------------------------------------------------------------                             
  6266.   def damage_y_init_velocity
  6267.       return 9
  6268.   end
  6269.  
  6270.   #--------------------------------------------------------------------------
  6271.   # ● Update
  6272.   #--------------------------------------------------------------------------                              
  6273.   def update
  6274.     super
  6275.     @damage_sprites   = [] if @damage_sprites.nil?
  6276.     @damage_durations = [] if @damage_durations.nil?
  6277.     if @_damage_sprite != nil and @_damage_sprite.visible
  6278.        if @damage_ox != nil
  6279.           dam_ox = @damage_ox
  6280.        else   
  6281.           dam_ox = 0
  6282.        end        
  6283.        if @damage_type != nil
  6284.           dam_type = @damage_type
  6285.        end  
  6286.        x = damage_x_init_velocity
  6287.        y = damage_y_init_velocity
  6288.        d = @_damage_duration
  6289.        @damage_sprites.push(Sprite_Damage.new(@_damage_sprite, x, y, d,dam_ox,dam_type))
  6290.        @_damage_sprite.visible = false
  6291.     end
  6292.     for damage_sprite in @damage_sprites
  6293.         damage_sprite.update
  6294.     end
  6295.     for i in [email]0...@damage_sprites.size[/email]
  6296.         @damage_sprites[i] = nil if @damage_sprites[i].disposed?
  6297.     end
  6298.     @damage_sprites.compact!
  6299.   end
  6300.   def dispose
  6301.     super
  6302.     if @damage_sprites != nil
  6303.        for damage_sprite in @damage_sprites
  6304.            damage_sprite.dispose
  6305.        end
  6306.      end
  6307.   end
  6308. end
  6309.  
  6310. #===============================================================================
  6311. # ■ RPG Sprite
  6312. #===============================================================================
  6313. class Sprite_Base < Sprite
  6314.       include XRXS_DAMAGE
  6315. end
  6316.  
  6317. #===============================================================================
  6318. # ■ Sprite Damage
  6319. #===============================================================================
  6320. class Sprite_Damage < Sprite
  6321.  
  6322.   #--------------------------------------------------------------------------
  6323.   # ● Initialize
  6324.   #--------------------------------------------------------------------------                        
  6325.   def initialize(sprite, init_x_speed, init_y_speed, duration,dam_ox,dam_type = nil)
  6326.       super(nil)
  6327.       self.bitmap = sprite.bitmap.dup unless sprite.bitmap.nil?
  6328.       self.opacity = sprite.opacity
  6329.       self.x = sprite.x
  6330.       self.y = sprite.y
  6331.       self.z = sprite.z
  6332.       self.ox = sprite.ox - dam_ox
  6333.       self.oy = sprite.oy
  6334.       @now_x_speed = init_x_speed
  6335.       @now_y_speed = init_y_speed
  6336.       @potential_x_energy = 0.0
  6337.       @potential_y_energy = 0.0
  6338.       @duration = duration
  6339.       @dam_type = dam_type
  6340.       @dam_type = "" if dam_type == nil
  6341.   end
  6342.  
  6343.   #--------------------------------------------------------------------------
  6344.   # ● Update   
  6345.   #--------------------------------------------------------------------------                       
  6346.   def update
  6347.     super
  6348.     if XAS_DAMAGE_POP::DAMAGE_CRITICAL_ZOOM
  6349.        if @dam_type != "Critical"
  6350.           update_normal_popup
  6351.        else  
  6352.           update_critical_effect   
  6353.        end      
  6354.     else      
  6355.        update_normal_popup
  6356.     end
  6357.     @duration -= 1
  6358.     if @duration == 0
  6359.        self.dispose
  6360.     end
  6361.   end
  6362.  
  6363.   #--------------------------------------------------------------------------
  6364.   # ● update_critical_effect
  6365.   #--------------------------------------------------------------------------                           
  6366.   def update_critical_effect  
  6367.       case @duration
  6368.          when 40..60
  6369.            self.zoom_x += 0.1
  6370.            self.zoom_y += 0.1
  6371.          else   
  6372.            if self.zoom_x > 0.1   
  6373.               self.zoom_x -= 0.1
  6374.               self.zoom_y -= 0.1
  6375.            end
  6376.        end
  6377.   end
  6378.  
  6379.   #--------------------------------------------------------------------------
  6380.   # ● update_normal_popup
  6381.   #--------------------------------------------------------------------------                        
  6382.   def update_normal_popup
  6383.       self.opacity -= 25 if @duration <= 10
  6384.       n = self.oy + @now_y_speed
  6385.       if n <= 0
  6386.          @now_y_speed *= -1
  6387.          @now_y_speed /=  2
  6388.          @now_x_speed /=  2
  6389.       end
  6390.       self.oy  = [n, 0].max   
  6391.       @potential_y_energy += 0.58
  6392.       speed = @potential_y_energy.floor
  6393.       @now_y_speed        -= speed
  6394.       @potential_y_energy -= speed
  6395.       @potential_x_energy += @now_x_speed
  6396.       speed = @potential_x_energy.floor
  6397.       self.ox             += speed
  6398.       @potential_x_energy -= speed  
  6399.     end
  6400.  
  6401. end
  6402.  
  6403.  
  6404.  
  6405. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  6406. #■ SPRITE - SPRITE EFFECTS
  6407. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  6408.  
  6409.  
  6410. #==============================================================================
  6411. # ■ Sprite Base
  6412. #==============================================================================
  6413. class Sprite_Base < Sprite  
  6414.  
  6415.   #--------------------------------------------------------------------------
  6416.   # ● Animation Set Sprite
  6417.   #--------------------------------------------------------------------------
  6418.   def animation_set_sprites(frame)
  6419.       cell_data = frame.cell_data
  6420.       @ani_sprites.each_with_index do |sprite, i|
  6421.         next unless sprite
  6422.         pattern = cell_data[i, 0]
  6423.         if !pattern || pattern < 0
  6424.             sprite.visible = false
  6425.             next
  6426.         end
  6427.         sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
  6428.         sprite.visible = true
  6429.         sprite.src_rect.set(pattern % 5 * 192,
  6430.         pattern % 100 / 5 * 192, 192, 192)
  6431.         if @ani_mirror
  6432.            cx = cell_data[i, 1]
  6433.            sprite.angle = (360 - cell_data[i, 4])
  6434.            sprite.mirror = (cell_data[i, 5] == 0)
  6435.         else
  6436.            cx = cell_data[i, 1]
  6437.            sprite.angle = cell_data[i, 4]
  6438.            sprite.mirror = (cell_data[i, 5] == 1)
  6439.         end
  6440.         cy = cell_data[i, 2]
  6441.         sprite.z = self.z + 300 + i
  6442.         sprite.ox = 96
  6443.         sprite.oy = 96
  6444.         sprite.zoom_x = cell_data[i, 3] / 100.0
  6445.         sprite.zoom_y = cell_data[i, 3] / 100.0
  6446.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  6447.         sprite.blend_type = cell_data[i, 7]
  6448.         case @animation.position
  6449.               when 0
  6450.                   sprite.x = self.x + cx
  6451.                   sprite.y = self.y + cy - (height / 2)         
  6452.               when 1
  6453.                   sprite.x = self.x + cx
  6454.                   sprite.y = self.y + cy         
  6455.               when 2
  6456.                   sprite.x = self.x + cx
  6457.                   sprite.y = self.y + cy + (height / 2)
  6458.               when 3  
  6459.                   sprite.x  = (544 / 2) + cx
  6460.                   sprite.y  = (416 / 2) + cy     
  6461.         end        
  6462.  
  6463.  
  6464.     end
  6465.   end  
  6466.  
  6467.   #--------------------------------------------------------------------------
  6468.   # ● Dispose Animation
  6469.   #--------------------------------------------------------------------------
  6470.   def dispose_animation
  6471.       $game_temp.animation_garbage = [] if $game_temp.animation_garbage == nil
  6472.       if @ani_bitmap1
  6473.          @@_reference_count[@ani_bitmap1] -= 1
  6474.         if @@_reference_count[@ani_bitmap1] == 0
  6475.             $game_temp.animation_garbage.push(@ani_bitmap1)
  6476.          end
  6477.       end
  6478.       if @ani_bitmap2
  6479.          @@_reference_count[@ani_bitmap2] -= 1
  6480.          if @@_reference_count[@ani_bitmap2] == 0
  6481.             $game_temp.animation_garbage.push(@ani_bitmap2)
  6482.         end
  6483.      end
  6484.      if @ani_sprites
  6485.         @ani_sprites.each {|sprite| sprite.dispose }
  6486.         @ani_sprites = nil
  6487.         @animation = nil
  6488.      end
  6489.      @ani_bitmap1 = nil
  6490.      @ani_bitmap2 = nil
  6491.   end   
  6492.  
  6493. end
  6494.  
  6495. #==============================================================================
  6496. # ■ Scene_Base
  6497. #==============================================================================
  6498. class Game_Map
  6499.  
  6500.   #--------------------------------------------------------------------------
  6501.   # ● Setup
  6502.   #--------------------------------------------------------------------------   
  6503.   alias animation_garbage_setup setup
  6504.   def setup(map_id)
  6505.       animation_garbage_setup(map_id)
  6506.       dispose_animation_garbage
  6507.   end
  6508.  
  6509.   #--------------------------------------------------------------------------
  6510.   # ● Dispose Animation Garbage
  6511.   #--------------------------------------------------------------------------  
  6512.   def dispose_animation_garbage
  6513.       return if $game_temp.animation_garbage == nil
  6514.       for animation in $game_temp.animation_garbage
  6515.           animation.dispose
  6516.       end  
  6517.       $game_temp.animation_garbage = nil
  6518.   end  
  6519.  
  6520. end  
  6521.  
  6522. #==============================================================================
  6523. # ■ Scene_Base
  6524. #==============================================================================
  6525. class Scene_Base
  6526.  
  6527.   #--------------------------------------------------------------------------
  6528.   # ● Scene Changing?
  6529.   #--------------------------------------------------------------------------   
  6530.   alias animation_garbage_scene_changing scene_changing?
  6531.   def scene_changing?
  6532.       $game_map.dispose_animation_garbage if SceneManager.scene != self
  6533.       animation_garbage_scene_changing
  6534.   end
  6535.  
  6536. end  
  6537.  
  6538. #===============================================================================
  6539. # ■ Sprite_Character
  6540. #===============================================================================
  6541. class Sprite_Character < Sprite_Base
  6542.   include XAS_SYSTEM
  6543.  
  6544.   #--------------------------------------------------------------------------
  6545.   # ● Setup New Effect
  6546.   #--------------------------------------------------------------------------              
  6547.   def setup_new_effect
  6548.       if @character.animation_id > 0
  6549.          animation = $data_animations[@character.animation_id]
  6550.          start_animation(animation)
  6551.          @character.animation_id = 0
  6552.       end
  6553.       if !@balloon_sprite && @character.balloon_id > 0
  6554.          @balloon_id = @character.balloon_id
  6555.          start_balloon
  6556.       end
  6557.   end  
  6558.  
  6559.   #--------------------------------------------------------------------------
  6560.   # ● Can Update X Effects
  6561.   #--------------------------------------------------------------------------                    
  6562.   def can_update_x_effects?
  6563.       return false unless CHARACTER_SPRITE_EFFECTS
  6564.       return false if @character.erased
  6565.       return false if @character.transparent == true
  6566.       return true
  6567.   end  
  6568.   #--------------------------------------------------------------------------
  6569.   # ● Can Damage Pop Base
  6570.   #--------------------------------------------------------------------------                  
  6571.   def can_damage_pop_base?
  6572.       return false unless $game_system.xas_battle
  6573.       return false if XAS_SYSTEM::DAMAGE_POP == false
  6574.       return false if @character.battler == nil
  6575.       return false if @character.battler.no_damage_pop  
  6576.       return false if @character.battler.damage_pop != true
  6577.       return true  
  6578.   end  
  6579.  
  6580.  
  6581.   #--------------------------------------------------------------------------
  6582.   # ● Execute Damage Pop
  6583.   #--------------------------------------------------------------------------              
  6584.   def execute_damage_pop  
  6585.       damage(@character.battler.damage, @character.battler.damage_type)
  6586.       @character.battler.damage = nil
  6587.       @character.battler.critical = false
  6588.       @character.battler.damage_pop = false
  6589.       @character.battler.damage_type = ""
  6590.   end
  6591.  
  6592.   #--------------------------------------------------------------------------
  6593.   # ● Update X Effects
  6594.   #--------------------------------------------------------------------------              
  6595.   def update_x_effects
  6596.       update_collaspse_effects if @character.collapse_duration > 0
  6597.       update_sprite_position
  6598.       update_angle
  6599.       update_zoom
  6600.   end
  6601.  
  6602.   #--------------------------------------------------------------------------
  6603.   # ● Update Angle
  6604.   #--------------------------------------------------------------------------         
  6605.   def update_angle
  6606.       return if @character.angle == self.angle
  6607.       self.angle = @character.angle
  6608.   end
  6609.  
  6610.   #--------------------------------------------------------------------------
  6611.   # ● Update Zoom
  6612.   #--------------------------------------------------------------------------            
  6613.   def update_zoom
  6614.       update_treasure_effect
  6615.       update_breath_effect if can_breath_effect?
  6616.       self.zoom_x = @character.zoom_x
  6617.       self.zoom_y = @character.zoom_y
  6618.   end
  6619.  
  6620.   #--------------------------------------------------------------------------
  6621.   # ● Update Treasure_effect
  6622.   #--------------------------------------------------------------------------                     
  6623.   def update_treasure_effect
  6624.       return if @character.treasure_time == 0
  6625.       update_treasure_fade_effect
  6626.       update_treasure_float_effect
  6627.   end  
  6628.  
  6629.   #--------------------------------------------------------------------------
  6630.   # ● update_treasure_fade_effect
  6631.   #--------------------------------------------------------------------------                        
  6632.   def update_treasure_fade_effect
  6633.       return unless XAS_BA::FADE_TREASURE_SPRITE
  6634.       return if @character.treasure_time > 100
  6635.       return if @character.zoom_x < 0.01      
  6636.       @character.zoom_x -= 0.01
  6637.       if @character.temp_id > 0
  6638.          @character.zoom_x = 1.00
  6639.          @character.treasure_time = 120 + XAS_BA::TREASURE_ERASE_TIME * 60
  6640.       end
  6641.   end  
  6642.  
  6643.   #--------------------------------------------------------------------------
  6644.   # ● Update Treasure Float Effect
  6645.   #--------------------------------------------------------------------------                          
  6646.   def update_treasure_float_effect
  6647.       return unless XAS_BA::FLOAT_TREASURE_SPRITE   
  6648.       return if self.character.jumping?
  6649.       self.character.treasure_float[2] += 1
  6650.       if self.character.treasure_float[2] > 1
  6651.          self.character.treasure_float[2] = 0
  6652.          self.character.treasure_float[1] += 1
  6653.          case self.character.treasure_float[1]
  6654.             when 1..15
  6655.               self.character.treasure_float[0] -= 1
  6656.             when 16..30
  6657.               self.character.treasure_float[0] += 1
  6658.             else
  6659.               self.character.treasure_float[0] = 0
  6660.               self.character.treasure_float[1] = 0
  6661.           end
  6662.       end   
  6663.       self.y +=  self.character.treasure_float[0]
  6664.   end
  6665.  
  6666.   #--------------------------------------------------------------------------
  6667.   # ● Can Breath Effect?
  6668.   #--------------------------------------------------------------------------                    
  6669.   def can_breath_effect?
  6670.       return false if @character.battler == nil
  6671.       return false if @character.battler.breath_effect == false
  6672.       return false if @character.battler.hp == 0
  6673.       return false if @character.stop and not @character.battler.state_sleep
  6674.       return true
  6675.   end  
  6676.  
  6677.   #--------------------------------------------------------------------------
  6678.   # ● Update Breath Effect
  6679.   #--------------------------------------------------------------------------                  
  6680.   def update_breath_effect
  6681.       if @character.battler.fast_breath_effect
  6682.           zoom_speed = 3
  6683.           zoom_power_x = 0.006   
  6684.           zoom_power_y = 0.006        
  6685.       else
  6686.           zoom_speed = 1
  6687.           zoom_power_x = 0   
  6688.           zoom_power_y = 0.002
  6689.       end
  6690.       @character.battler.breath_duration += zoom_speed
  6691.       case @character.battler.breath_duration
  6692.            when 1..30
  6693.                 @character.zoom_x += zoom_power_x
  6694.                 @character.zoom_y += zoom_power_y
  6695.            when 31..60
  6696.                 @character.zoom_x -= zoom_power_x
  6697.                 @character.zoom_y -= zoom_power_y
  6698.            else  
  6699.                 @character.battler.breath_duration = 0
  6700.                 @character.zoom_x = 1.00
  6701.                 @character.zoom_y = 1.00
  6702.       end   
  6703.   end  
  6704.  
  6705.   #--------------------------------------------------------------------------
  6706.   # ● Update Sprite Position
  6707.   #--------------------------------------------------------------------------                  
  6708.   alias x_set_character_bitmap set_character_bitmap
  6709.   def set_character_bitmap
  6710.       @py = nil
  6711.       x_set_character_bitmap
  6712.       if @character_name[/\((\d+)\)/]
  6713.          @py = $1.to_i
  6714.       end            
  6715.   end
  6716.  
  6717.   #--------------------------------------------------------------------------
  6718.   # ● Update Sprite Position
  6719.   #--------------------------------------------------------------------------               
  6720.   def update_sprite_position
  6721.       if @character.tool_id > 0
  6722.          if @character.tool_effect == "Barrier"
  6723.             unless @character.action == nil
  6724.                bullet_user = @character.action.user
  6725.                self.x = bullet_user.screen_x
  6726.                self.y = bullet_user.screen_y
  6727.                @character.x = bullet_user.x
  6728.                @character.y = bullet_user.y
  6729.                @character.direction = bullet_user.direction
  6730.             end
  6731.          end  
  6732.       end  
  6733.       update_hold_target      
  6734.       if @py != nil
  6735.          self.y += @py
  6736.       end
  6737.       if @character.angle == 315 and @cw != nil
  6738.          self.x -= (@cw / 3)
  6739.          self.y -= (@ch / 6)
  6740.       end  
  6741.       if XAS_BA::KNOCKBACKING_SHAKE
  6742.          if self.character.knockbacking?
  6743.             self.x = self.x + rand(5) unless self.character.dead?
  6744.          end  
  6745.       end      
  6746. end  
  6747.  
  6748. #--------------------------------------------------------------------------
  6749. # ● Update X Effects
  6750. #--------------------------------------------------------------------------                 
  6751. def update_hold_target
  6752.      return if @character.temp_id == 0
  6753.      target = $game_map.events[@character.temp_id]
  6754.      if target == nil or target.erased
  6755.         @character.temp_id = 0
  6756.         @character.move_speed = @character.pre_move_speed
  6757.         check_character_above_player(target)
  6758.      else
  6759.         self.x = target.screen_x
  6760.         self.y = target.screen_y
  6761.         self.character.x = target.x
  6762.         self.character.y = target.y
  6763.         self.character.move_speed = target.move_speed
  6764.         self.character.direction = target.direction unless self.character.direction_fix
  6765.         check_character_above_player(target)
  6766.      end   
  6767. end
  6768.  
  6769. #--------------------------------------------------------------------------
  6770. # ● Check Chacracter Above Player
  6771. #--------------------------------------------------------------------------                  
  6772. def check_character_above_player(target)
  6773.      return if @character.is_a?(Game_Player)
  6774.      return if @character.battler == nil
  6775.      if (@character.x == $game_player.x and
  6776.          @character.y == $game_player.y) or
  6777.           not @character.passable_temp_id?(@character.x,@character.y)
  6778.          @character.temp_id = 0
  6779.          @character.move_speed = @character.pre_move_speed
  6780.          case @character.direction
  6781.             when 2;  @character.y -= 1
  6782.             when 4;  @character.x += 1
  6783.             when 6;  @character.x -= 1
  6784.             when 8;  @character.y += 1  
  6785.          end
  6786.      end   
  6787.    end
  6788.  
  6789. #--------------------------------------------------------------------------
  6790. # ● Update_balloon
  6791. #--------------------------------------------------------------------------
  6792. if XAS_BA::FIX_BALLOON_POSITION
  6793. def update_balloon
  6794.      if @balloon_duration > 0
  6795.         @balloon_duration -= 1
  6796.         if @balloon_duration > 0
  6797.            @balloon_sprite.x = x
  6798.            @balloon_sprite.y = y - XAS_BA::BALLOON_HEIGHT
  6799.            @balloon_sprite.z = z + 200
  6800.            sx = balloon_frame_index * 32
  6801.            sy = (@balloon_id - 1) * 32
  6802.            @balloon_sprite.src_rect.set(sx, sy, 32, 32)
  6803.       else
  6804.            end_balloon
  6805.       end
  6806.     end
  6807.   end   
  6808.   end
  6809.  
  6810. end
  6811.  
  6812. #==============================================================================
  6813. # ■ Game_Event
  6814. #==============================================================================
  6815. class Game_Event < Game_Character
  6816.  
  6817.   #--------------------------------------------------------------------------
  6818.   # ● Near The Screen
  6819.   #--------------------------------------------------------------------------  
  6820.   alias x_near_the_screen near_the_screen?
  6821.   def near_the_screen?(dx = 12, dy = 8)
  6822.       return true if can_update_out_screen?
  6823.       x_near_the_screen(dx, dy)
  6824.   end
  6825.  
  6826. #--------------------------------------------------------------------------
  6827. # ● Can Update Out Screen
  6828. #--------------------------------------------------------------------------
  6829. def can_update_out_screen?
  6830.      return true if self.force_update
  6831.      return false
  6832. end
  6833.  
  6834. end
  6835.  
  6836. #==============================================================================
  6837. # ■ Spriteset Map
  6838. #==============================================================================
  6839. class Spriteset_Map
  6840.  
  6841.   #--------------------------------------------------------------------------
  6842.   # ● Can Refresh Hud
  6843.   #--------------------------------------------------------------------------   
  6844.   alias x_pre_leader_id_initialize initialize
  6845.   def initialize
  6846.       if $game_party.members[0] != nil
  6847.          $game_system.pre_leader_id = $game_party.members[0].actor_id
  6848.       else   
  6849.          $game_system.pre_leader_id = nil
  6850.       end  
  6851.       x_pre_leader_id_initialize
  6852.   end  
  6853.  
  6854.   #--------------------------------------------------------------------------
  6855.   # ● Can Refresh Hud
  6856.   #--------------------------------------------------------------------------   
  6857.   def can_refresh_hud?
  6858.       if $game_party.members[0] == nil
  6859.          return true if $game_system.pre_leader_id != nil
  6860.       elsif $game_party.members[0] != nil   
  6861.          return true if $game_system.pre_leader_id == nil
  6862.          return true if $game_system.pre_leader_id != $game_party.members[0].actor_id
  6863.       end  
  6864.       return false
  6865.   end  
  6866.  
  6867.   #--------------------------------------------------------------------------
  6868.   # ● update
  6869.   #--------------------------------------------------------------------------   
  6870.   def refresh_hud
  6871.       $game_system.pre_leader_id = $game_party.members[0].actor_id      
  6872.   end
  6873.  
  6874.   #--------------------------------------------------------------------------
  6875.   # ● Update Hud Visible
  6876.   #--------------------------------------------------------------------------      
  6877.   def update_hud_visible
  6878.       if hud_visible?
  6879.          $game_system.enable_hud = true
  6880.       else   
  6881.          $game_system.enable_hud = false
  6882.       end  
  6883.   end  
  6884.  
  6885.   #--------------------------------------------------------------------------
  6886.   # ● Hud Visible?
  6887.   #--------------------------------------------------------------------------        
  6888.   def hud_visible?
  6889.       return false if $game_system.hud_visible == false
  6890.       return false if $game_message.visible
  6891.       return true
  6892.   end     
  6893.  
  6894. end  
  6895.  
  6896.  
  6897.  
  6898. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  6899. #■ MISC - SCENE TARGET SELECT
  6900. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  6901.  
  6902.  
  6903. #==============================================================================
  6904. # ■ Game_Temp
  6905. #==============================================================================
  6906. class Game_Temp
  6907.       attr_accessor :xas_target_x
  6908.       attr_accessor :xas_target_y
  6909.       attr_accessor :xas_target_time
  6910.       attr_accessor :xas_target_shoot_id
  6911.  
  6912. #--------------------------------------------------------------------------
  6913. # ● Initialize
  6914. #--------------------------------------------------------------------------
  6915.   alias xas_target_initialize initialize
  6916.   def initialize
  6917.       xas_target_initialize
  6918.       @xas_target_x = 0
  6919.       @xas_target_y = 0
  6920.       @xas_target_time = 0
  6921.       @xas_target_shoot_id = 0
  6922.   end   
  6923.  
  6924. end
  6925.  
  6926. #==============================================================================
  6927. # ■ Game_Map
  6928. #==============================================================================
  6929. class Game_Map
  6930.  
  6931. attr_accessor :pre_display_x
  6932. attr_accessor :pre_display_y
  6933. attr_accessor :pre_real_display_x
  6934. attr_accessor :pre_real_display_y
  6935.  
  6936. #--------------------------------------------------------------------------
  6937. # * Object Initialization
  6938. #--------------------------------------------------------------------------
  6939. alias x_map_initialize initialize
  6940. def initialize  
  6941.      x_map_initialize
  6942.      @pre_display_x = @display_x - 1
  6943.      @pre_display_y = @display_y - 1   
  6944. end
  6945.  
  6946.   #--------------------------------------------------------------------------
  6947.   # ● Screen Scrolled?
  6948.   #--------------------------------------------------------------------------        
  6949.   def screen_scrolled?
  6950.       if @pre_display_x != @display_x or
  6951.          @pre_display_y != @display_y
  6952.          @pre_display_x = @display_x
  6953.          @pre_display_y = @display_y
  6954.          return true
  6955.       end   
  6956.       return false
  6957.   end
  6958.  
  6959. #--------------------------------------------------------------------------
  6960. # ● Event On Screen
  6961. #--------------------------------------------------------------------------
  6962. def event_on_screen?(event)
  6963.      event.target = false
  6964.      px = ($game_map.display_x).truncate
  6965.      py = ($game_map.display_y).truncate   
  6966.      distance_x = event.x - px
  6967.      distance_y = event.y - py
  6968.      if distance_x.between?(0, 16) and
  6969.         distance_y.between?(0, 12)
  6970.         event.target = true
  6971.      end  
  6972. end      
  6973.  
  6974. #--------------------------------------------------------------------------
  6975. # ● Check Event on Screen
  6976. #--------------------------------------------------------------------------
  6977. def check_events_on_screen
  6978.       for i in $game_map.events.values
  6979.             event_on_screen?(i)
  6980.       end   
  6981.   end
  6982.  
  6983. end  
  6984. #==============================================================================
  6985. # ■ Scene Target Select
  6986. #==============================================================================
  6987. class Scene_Target_Select
  6988.  
  6989.   #--------------------------------------------------------------------------
  6990.   # ● Main
  6991.   #--------------------------------------------------------------------------        
  6992.   def main     
  6993.       $game_temp.xas_target_x = 0
  6994.       $game_temp.xas_target_y = 0      
  6995.       $game_temp.xas_target_time = 0
  6996.       @new_x = $game_player.screen_x
  6997.       @new_y = $game_player.screen_y
  6998.       @index_max = -1
  6999.       @target_index = 0  
  7000.       @spriteset = Spriteset_Map.new
  7001.       @text_string = ""
  7002.       @fy = 0
  7003.       @fy_time = 0
  7004.       for event in $game_map.events.values
  7005.         if event.target and event.battler?
  7006.            @index_max += 1
  7007.         end  
  7008.       end  
  7009.       Sound.play_equip
  7010.       if @index_max == -1
  7011.          cancel_select
  7012.       else
  7013.          create_layout
  7014.          create_layout_skill
  7015.          create_cusrsor
  7016.          create_text      
  7017.          create_skill_name
  7018.          select_target(0)
  7019.       end
  7020.       Graphics.transition(0)
  7021.       loop do
  7022.            Graphics.update
  7023.            Input.update
  7024.            update
  7025.            break if SceneManager.scene != self
  7026.       end
  7027.       dispose
  7028. end  
  7029.   #--------------------------------------------------------------------------
  7030.   # ● Create Layout
  7031.   #--------------------------------------------------------------------------      
  7032.   def create_layout
  7033.       @layout_1 = Plane.new
  7034.       @layout_1.bitmap = Cache.system("XAS_Target_Layout1")
  7035.       @layout_1.z = 10100
  7036.       @layout_1.opacity = 255
  7037.   end  
  7038.  
  7039. #--------------------------------------------------------------------------
  7040. # ● Create Layout
  7041. #--------------------------------------------------------------------------      
  7042. def create_layout_skill
  7043.      @skill_layout = Sprite.new
  7044.      @skill_layout.bitmap = Cache.system("XAS_Active_Help")
  7045.      @skill_layout.z = 10101
  7046.      @skill_layout.x = -100   
  7047.      @skill_layout.y = 32
  7048.      @skill_layout.opacity = 0
  7049. end
  7050.  
  7051. #--------------------------------------------------------------------------
  7052. # ● Create Cursor
  7053. #--------------------------------------------------------------------------            
  7054. def create_cusrsor
  7055.      @cursor = Sprite.new
  7056.      @cursor.bitmap = Cache.system("XAS_Cursor")
  7057.      @cursor.z = 10105
  7058.      @cursor.x = @new_x
  7059.      @cursor.y = @new_y
  7060.      @cursor.opacity = 255
  7061.      @cursor.visible = true
  7062. end
  7063.  
  7064. #--------------------------------------------------------------------------
  7065. # ● Create Text
  7066. #--------------------------------------------------------------------------   
  7067. def create_text
  7068.      @text = Sprite.new
  7069.      @text.bitmap = Bitmap.new(200,40)
  7070.      @text.z = 10102
  7071.      @text.bitmap.font.size = 20
  7072.      @text.bitmap.font.bold = true
  7073.      @text.bitmap.font.name = "黑体"  
  7074.      @text.bitmap.draw_text(0, 0, 200, 40, @text_string.to_s,1)
  7075.      @text.opacity = 255
  7076.      @text.x = @new_x
  7077.      @text.y = @new_y   
  7078. end
  7079.  
  7080. #--------------------------------------------------------------------------
  7081. # ● Create Text
  7082. #--------------------------------------------------------------------------   
  7083. def create_skill_name
  7084.      @skill_name = Plane.new
  7085.      @skill_name.bitmap = Bitmap.new(640,480)
  7086.      @skill_name.z = 10103
  7087.      @skill_name.bitmap.font.size = 20
  7088.      @skill_name.bitmap.font.bold = true
  7089.      @skill_name.bitmap.font.name = "黑体"  
  7090.      @skill_name.oy = -40
  7091.      skill = $data_skills[$game_temp.xas_target_shoot_id]
  7092.      skill_text = skill.name.to_s + " - " + skill.description.to_s     
  7093.      @skill_name.bitmap.draw_text(0, 0, 640, 40, skill_text,1)
  7094.      @skill_name.opacity = 0
  7095. end  
  7096.  
  7097. #--------------------------------------------------------------------------
  7098. # ● Dispose
  7099. #--------------------------------------------------------------------------            
  7100. def dispose
  7101.      Graphics.freeze
  7102.      @spriteset.dispose
  7103.      if @cursor != nil
  7104.         @cursor.bitmap.dispose
  7105.         @cursor.dispose  
  7106.         @text.bitmap.dispose
  7107.         @text.dispose
  7108.         @skill_layout.bitmap.dispose
  7109.         @skill_layout.dispose
  7110.         @skill_name.bitmap.dispose
  7111.         @skill_name.dispose
  7112.         @layout_1.bitmap.dispose
  7113.         @layout_1.dispose
  7114.      end
  7115. end
  7116.  
  7117. #--------------------------------------------------------------------------
  7118. # ● Update
  7119. #--------------------------------------------------------------------------         
  7120. def update
  7121.      return if @index_max == -1
  7122.      @spriteset.update
  7123.      update_cursor_slide
  7124.      update_layout_slide
  7125.      update_targe_select
  7126. end
  7127.  
  7128. #--------------------------------------------------------------------------
  7129. # ● Update Layout Slide
  7130. #--------------------------------------------------------------------------            
  7131. def update_layout_slide
  7132.      @layout_1.ox += 3
  7133.      if @skill_layout.x < 0
  7134.         @skill_layout.x += 10
  7135.         @skill_layout.opacity += 25
  7136.         @skill_name.opacity += 25
  7137.      else
  7138.         @skill_layout.x = 0
  7139.         @skill_layout.opacity = 255
  7140.         @skill_name.opacity = 255
  7141.         @skill_name.ox -= 3
  7142.      end  
  7143. end  
  7144.  
  7145. #--------------------------------------------------------------------------
  7146. # ● Refresh Text
  7147. #--------------------------------------------------------------------------            
  7148. def refresh_text
  7149.      @text.bitmap.clear
  7150.      @text.bitmap.draw_text(0, 0, 200, 40, @text_string.to_s,1)
  7151. end
  7152.  
  7153. #--------------------------------------------------------------------------
  7154. # ● Update Cursor Slide
  7155. #--------------------------------------------------------------------------           
  7156. def update_cursor_slide
  7157.      @speed_x = [[(@cursor.x - @new_x / 60), 1].max, 60].min
  7158.      @speed_y = [[(@cursor.y - @new_y / 60), 1].max, 60].min
  7159.      if @cursor.x > @new_x
  7160.         @cursor.x -= @speed_x.abs
  7161.         @cursor.x = @new_x if @cursor.x < @new_x
  7162.      elsif @cursor.x < @new_x
  7163.         @cursor.x += @speed_x.abs
  7164.         @cursor.x = @new_x if @cursor.x > @new_x
  7165.      end         
  7166.  
  7167.      if @cursor.y > @new_y
  7168.         @cursor.y -= @speed_y.abs
  7169.         @cursor.y = @new_y if @cursor.y < @new_y
  7170.      elsif @cursor.y < @new_y
  7171.         @cursor.y += @speed_y.abs
  7172.         @cursor.y = @new_y if @cursor.y > @new_y
  7173.      end      
  7174.      @text.x = - 85 + @cursor.x
  7175.      @text.y = 20 + @cursor.y
  7176.      if @fy_time > 25
  7177.         @fy += 1
  7178.      elsif @fy_time > 0
  7179.         @fy -= 1
  7180.      else   
  7181.         @fy = 0
  7182.         @fy_time = 50
  7183.      end  
  7184.      @fy_time -= 1
  7185.      @cursor.oy = @fy
  7186.  
  7187. end
  7188.  
  7189. #--------------------------------------------------------------------------
  7190. # ● Select Target(type)
  7191. #--------------------------------------------------------------------------           
  7192. def select_target(type)
  7193.      return if  @index_max < 0
  7194.      check_index
  7195.      valor = 0
  7196.      for event in $game_map.events.values
  7197.         if event.target and event.battler?
  7198.            if valor == @target_index
  7199.               @new_x = event.screen_x - 10
  7200.               @new_y = event.screen_y
  7201.               @text_string = event.battler.name
  7202.               $game_temp.xas_target_x = event.x
  7203.               $game_temp.xas_target_y = event.y
  7204.               $game_temp.xas_target_time = 1
  7205.             end
  7206.             valor += 1  
  7207.          end  
  7208.      end   
  7209.      refresh_text  
  7210.   end
  7211.  
  7212. #--------------------------------------------------------------------------
  7213. # ● Cancel Select
  7214. #--------------------------------------------------------------------------              
  7215. def cancel_select
  7216.      Sound.play_buzzer
  7217.      $game_temp.xas_target_x = 0
  7218.      $game_temp.xas_target_y = 0      
  7219.      $game_temp.xas_target_time = 0
  7220.      $game_temp.xas_target_shoot_id = 0
  7221.      SceneManager.call(Scene_Map)
  7222. end
  7223.  
  7224.   #--------------------------------------------------------------------------
  7225.   # ● Update Target Select
  7226.   #--------------------------------------------------------------------------            
  7227.   def update_targe_select
  7228.       if Input.trigger?(Input::B)
  7229.          cancel_select
  7230.       elsif Input.trigger?(Input::DOWN) or Input.trigger?(Input::RIGHT)  
  7231.          @target_index += 1
  7232.          select_target(0)
  7233.          Sound.play_cursor
  7234.       elsif Input.trigger?(Input::UP) or Input.trigger?(Input::LEFT)
  7235.          @target_index -= 1
  7236.          select_target(1)
  7237.          Sound.play_cursor
  7238.       elsif Input.trigger?(Input::C)
  7239.          Sound.play_ok
  7240.          SceneManager.call(Scene_Map)
  7241.       end  
  7242.   end
  7243.  
  7244.   #--------------------------------------------------------------------------
  7245.   # ● Check Index
  7246.   #--------------------------------------------------------------------------               
  7247.   def check_index
  7248.       if @target_index > @index_max
  7249.          @target_index = 0
  7250.       end      
  7251.       if @target_index < 0
  7252.          @target_index = @index_max
  7253.       end   
  7254.   end        
  7255.  
  7256. end  
  7257.  
  7258.  
  7259. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  7260. #■ MISC - MAIN UPDATE
  7261. #■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  7262.  
  7263. #===============================================================================
  7264. # ■  Spriteset_Map
  7265. #===============================================================================
  7266. class Spriteset_Map
  7267.  
  7268.   #--------------------------------------------------------------------------
  7269.   # ● update
  7270.   #--------------------------------------------------------------------------  
  7271.   alias xas_main_update update
  7272.   def update
  7273.       xas_main_update
  7274.       update_xas_spriteset_map
  7275.   end
  7276.  
  7277.   #--------------------------------------------------------------------------
  7278.   # ● Update XAS Spriteset Map
  7279.   #--------------------------------------------------------------------------      
  7280.   def update_xas_spriteset_map
  7281.       refresh_token if $game_map.need_refresh_token
  7282.       refresh_hud if can_refresh_hud?
  7283.       update_hud_visible
  7284.   end   
  7285. end
  7286.  
  7287.  
  7288. #===============================================================================
  7289. # ■ Sprite_Character
  7290. #===============================================================================
  7291. class Sprite_Character < Sprite_Base
  7292.  
  7293.   #--------------------------------------------------------------------------
  7294.   # ● Update
  7295.   #--------------------------------------------------------------------------            
  7296.   alias x_update update
  7297.   def update
  7298.       x_update
  7299.       execute_damage_pop  if can_damage_pop_base?
  7300.       update_x_effects if can_update_x_effects?
  7301.   end
  7302.  
  7303. end   
  7304.  
  7305. #===============================================================================
  7306. # ■ Game Character
  7307. #===============================================================================
  7308. class Game_Character < Game_CharacterBase
  7309.  
  7310.   #--------------------------------------------------------------------------
  7311.   # ● Update
  7312.   #--------------------------------------------------------------------------   
  7313.   alias x_main_update update
  7314.   def update
  7315.       update_character_before_movement
  7316.       x_main_update
  7317.       update_character_after_movement
  7318.   end  
  7319.  
  7320.   #--------------------------------------------------------------------------
  7321.   # ● Update Character Before Movement
  7322.   #--------------------------------------------------------------------------      
  7323.   def update_character_before_movement
  7324.       check_xy
  7325.       update_force_action if can_force_action?
  7326.   end  
  7327.  
  7328.   #--------------------------------------------------------------------------
  7329.   # ● Update Character After Movement
  7330.   #--------------------------------------------------------------------------      
  7331.   def update_character_after_movement
  7332.       update_battler if can_update_battler?      
  7333.   end      
  7334.  
  7335. end  
  7336.  
  7337. #===============================================================================
  7338. # ■ Game Event
  7339. #===============================================================================
  7340. class Game_Event < Game_Character
  7341.  
  7342.   #--------------------------------------------------------------------------
  7343.   # ● Update
  7344.   #--------------------------------------------------------------------------   
  7345.   alias x_main_event_update update
  7346.   def update
  7347.       update_event_before_movement
  7348.       x_main_event_update
  7349.       update_event_after_movement
  7350.   end   
  7351.  
  7352.   #--------------------------------------------------------------------------
  7353.   # ● Update Event Before Movement
  7354.   #--------------------------------------------------------------------------      
  7355.   def update_event_before_movement
  7356.       update_sensor if can_update_sensor?
  7357.       update_treasure_duration      
  7358.   end  
  7359.  
  7360.   #--------------------------------------------------------------------------
  7361.   # ● Update Event After Movement
  7362.   #--------------------------------------------------------------------------      
  7363.   def update_event_after_movement
  7364.  
  7365.   end   
  7366.  
  7367. end  
  7368.  
  7369. #===============================================================================
  7370. # ■ Game Player
  7371. #===============================================================================
  7372. class Game_Player < Game_Character
  7373.  
  7374.   #--------------------------------------------------------------------------
  7375.   # ● Update
  7376.   #--------------------------------------------------------------------------   
  7377.   alias x_main_player_update update
  7378.   def update
  7379.       update_player_before_movement if party_system?
  7380.       x_main_player_update
  7381.       update_player_after_movement if party_system?
  7382.   end   
  7383.  
  7384.   #--------------------------------------------------------------------------
  7385.   # ● Update Player Before Movement
  7386.   #--------------------------------------------------------------------------      
  7387.   def update_player_before_movement
  7388.       check_actor_level
  7389.       update_reset_battler_setting_time
  7390.       if $game_system.old_interpreter_running != $game_map.interpreter.running?
  7391.          refresh_interpreter_effect
  7392.       end   
  7393.   end  
  7394.  
  7395.   #--------------------------------------------------------------------------
  7396.   # ● Update Player after Movement
  7397.   #--------------------------------------------------------------------------      
  7398.   def update_player_after_movement
  7399.       update_action_command if can_use_command?
  7400.       $game_temp.change_leader_wait_time -= 1 if $game_temp.change_leader_wait_time > 0
  7401.   end      
  7402.  
  7403. end

作者: 水木依    时间: 2013-9-7 22:03
好吧,没人回复(呜呜,我新人发的几次帖都少人回复,是不是我的问题太那个了……),刚才我已经解决了,问题出现在最后一个脚本(事件防卡 XAS 系统)上,只要禁用掉($game_system.anti_lag = false)就行了,在此把答案说出来,希望遇到同样问题的XAS研究朋友可以参考一下。




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