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

Project1

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

[已经解决] 关于XAS和calt的layer脚本

[复制链接]

Lv5.捕梦者

梦石
18
星屑
13650
在线时间
1715 小时
注册时间
2017-1-12
帖子
1790

开拓者

跳转到指定楼层
1
发表于 2017-8-14 15:18:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 火锅深处 于 2017-8-14 16:47 编辑

是这样,我同时用了XAS和layer两个脚本(脚本内容见后面)。
机关和主角都在下面那层(灰色道路),然后受到攻击就被敌人(如中喷泉状的机关)直接打飞到上面那层(白色道路部分)去了。
请问怎样能避免被打到其他层?


P.S.下面的内容其实是折叠过的,但是内容过长所以翻页了......
fold=XAS]=begin
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■ X A S  - Xiderwong Action System (面向高级用户)
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                                                                       
X - Xiderowng
A - Action
S - System

如果你要使用XAS,那么请贴上下面这个连接并尊重Xiderowng.
http://xrxs.at-ninja.jp/

如果你要转载该汉化版本,那么注明以下来源。

(脚本翻译+文档翻译+脚本修改:白雪羊圣域

  BY白雪羊 6R ID:47731089 百度ID:47731089)

#===============================================================================
# ■ XAS HERO ACE W.S+(VER DEMO 0.5 - 2012 / 01 / 04)(汉化版本:Ver2013.7.28)                                                
#===============================================================================

这里有XAS Hero Edtion的更新与支持.
http://www.atelier-rgss.com/
#===============================================================================
# ■ Caracteristicas (主要功能)                                                           
#===============================================================================
   活跃争斗系统在地图(或)和互作用以场面。
#===============================================================================
# ■ 描述
=end

#===============================================================================
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
# XAS - 设定
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#===============================================================================
# ■ XAS SYSTEN SETTING
#===============================================================================
# 如果你不想要使用下面任何一个系统或脚本,或者这个系统和脚本与其他的脚本
#有冲突,可以关掉它。
#-------------------------------------------------------------------------------
module XAS_SYSTEM
  #开启伤害显示
  BATTLE_SYSTEM = true
  # 是否弹出伤害?
  DAMAGE_POP = true
  # 启用行走图名字系统?
  CHARACTER_POSE_NAME = true
  # 启用对角色的影响 的描绘?
  CHARACTER_SPRITE_EFFECTS = true
  # 启用冲刺系统?
  DASH_SYSTEM = false
  # 启用对角线运动么?
  PLAYER_DIAGONAL_MOVEMENT  = true
  # 事件启用对角线运动么?
  EVENT_DIAGONAL_MOVEMENT  = true
  # 状态系统是否开启呢?
  STATE_SYSTEM = true
  # 定义的地图,这将是事件的工具的仓库地图哦!
  ACTION_TEMPLATE_MAP_ID = 3
  #变量定义ID与仓库事件ID相匹配的工具,
  #这个ID是用于创建互动活动的工具哦。...比如仓库事件中火球的事件ID为3
  #然后建立一个事件,换上草的行走图,再新增加一个页面,设置公共变量【3】条件为3
  #就可以通过火球的射击到这个事件,来触发这个事件页面的开启了。
  HIT_ID = 3
end

#===============================================================================
# ■ XAS 按钮设定
#===============================================================================
module XAS_BUTTON
  #使用武器的按钮
  ACTION_1_BUTTON = Input::C
  #使用盾牌的按钮.
  ACTION_2_BUTTON = Input::X
  #使用技能的按钮
  SKILL_BUTTON = Input::Z  
  #使用道具的按钮
  ITEM_BUTTON = Input::Y
  #冲刺的按钮
  DASH_BUTTON = Input::A
  #切换领队的按钮
  CHANGE_LEADER_BUTTON = Input::R
  #是否使用武器按钮.
  ENABLE_ACTION_1_BUTTON = true
  #是否使用盾牌按钮  
  ENABLE_ACTION_2_BUTTON = true
  #是否使用技能按钮
  ENABLE_SKILL_BUTTON = true
  #是否使用道具按钮
  ENABLE_ITEM_BUTTON = true
  #是否使用冲刺按钮
  ENABLE_DASH_BUTTON = true
  #是否使用队友切换系统  
  ENABLE_CHANGE_LEADER_BUTTON = true
end

#===============================================================================
# ■ 文字设定
#===============================================================================
# 文字系统在 XAS的一般定义。
#-------------------------------------------------------------------------------
module XAS_WORD
  # Ativar as palavras.
  ENABLE_WORD = true
  # 防御成功时显示的文字。
  GUARD = "防御"
  # MP不足时显示的文字。
  NO_MP = "MP不足"
  # 没有道具时显示的文字。
  NO_ITEM = "道具不足"  
  # 升级时显示的文字。
  LEVEL_UP = "升级!"
  # 禁止使用(道具,技能或者武器)时显示的文字。
  SEAL = "禁止使用!"
  # 无敌时显示的文字。
  INVINCIBLE = "无敌"
  # 定义“经验”的名称。
  EXP = "Exp"
  # 定义目标闪避时播放的文字。
  EVADED = "闪避!"
  # 未能命中显示的文字
  MISSED = "未命中!"
  # 当反击使用时,显示的文字。
  COUNTER = "反击!"
  # 反射成功时显示的文字。
  REFLECT = "反射!"
end

#===============================================================================
# ■ XAS 伤害
#===============================================================================
# 伤害系统的XAS一般定义。
#-------------------------------------------------------------------------------
module XAS_DAMAGE_POP
  # 伤害弹出的字体
  DAMAGE_FONT_NAME = "黑体"
  # 字体的大小。
  DAMAGE_FONT_SIZE = 22
  # 启用加粗字体咩?.
  DAMAGE_FONT_BOLD = true
  #  启用斜体咩?
  DAMAGE_FONT_ITALIC = true
  # 暴击时,伤害字体放大咩?
  DAMAGE_CRITICAL_ZOOM = true
  # 伤害弹出,显示金钱和经验咩?
  DAMAGE_EXP_GOLD_POP = true  
  # 状态获得时,是否弹出状态名显示呢?
  DAMAGE_STATE_POP = true
  # 道具获得时,是否弹出道具名显示咩?
  DAMAGE_ITEM_POP = true
  # 设置默认的字体颜色
  DAMAGE_DEFAULT_FONT_COLOR = Color.new(255, 255, 255)
  # 设置弹出 经验 文字的字体颜色
  DAMAGE_EXP_FONT_COLOR = Color.new(0, 255, 100)
  # 设置弹出 金币 文字的字体颜色
  DAMAGE_GOLD_FONT_COLOR = Color.new(255, 255, 50)
  # 设置弹出 道具 文字的字体颜色
  DAMAGE_ITEM_FONT_COLOR = Color.new(155, 55, 250)
end

#===============================================================================
# ■ 声音设定
#===============================================================================
# Definição do sistema de sons do XAS.
#-------------------------------------------------------------------------------
module XAS_SOUND
  #接到掉落的道具时的音效  
  ITEM_DROP = "Key"
  #升级时的音效
  LEVEL_UP = "Chime1"
  #消耗行为的效果,比如消耗道具之类的.
  ACTION_COST = "Cursor2"
end

#===============================================================================
# ■ 动画设定
#===============================================================================
# 动画系统XAS的定义。
# 如果你不想使用动画,将值设置为0(零)。
#-------------------------------------------------------------------------------
module XAS_ANIMATION
  # 防御时动画
  GUARD_ANIMATION_ID = 127
  # 切换队长后播放的动画
  CHANGE_LEADER_ANIMATION_ID = 135
  # 角色无敌时的动画。
  INVINCIBLE_ANIMATION_ID = 36
  # 蓄力中的动画。
  CHARGE_ANIMATION1_ID = 155
  # 蓄力完成时的动画。
  CHARGE_ANIMATION2_ID = 123
  # 吟唱时显示的动画
  CAST_TIME_ANIMATION_ID = 120
  # 循环动画的播放速度。
  LOOP_ANIMATIONS_SPEED = 60
  # 反射时的动画。
  REFLECT_ANIMATION_ID = 128
end

#===============================================================================
# ■ 一般战斗设置
#===============================================================================
# 战斗系统XAS的一般定义
#-------------------------------------------------------------------------------
module XAS_BA
  #交换队长后需要等待多久才能再换。
  CHANGE_LEADER_WAIT_TIME = 10
  #启动游戏时,HUD是否见?
  #您可以启用或禁用的HUD,在事件中使用下面的代码
  # $game_system.hud_visible = true
  HUD_VISIBLE_AT_STARTUP = false
  # 在敌人传感器范围内会被激活的独立开关。
  SENSOR_SELF_SWITCH = "D"
   #设置变量定义的区域激活的默认ID(就是传感器变量的ID)
  DEFAULT_SENSOR_RANGE_VARIABLE_ID = 4
  # 角色被击破倒地后,起身所需要的时间.
  DEFAULT_KNOCK_BACK_DURATION = 60
  # 被击破倒地后,是否震动屏幕。
  KNOCKBACKING_SHAKE = false
  #基础移动速度
  BASE_MOVE_SPEED = 4.2
  # 冲刺时增加的移动速度.
  DASH_MOVE_SPEED = 0.6
  # 是否启用八方向行走。
  DIAGONAL_DURATION_ENABLE = true
  # 返回四方向的时间。
  #(就是说角色是斜着走的,停止操作后,行走图切换到正方向行走的时间。)
  DIAGONAL_DURATION = 15
  # 经验的分配方式。
  # 0 - EXP 谁杀了死敌人谁得这些EXP。
  # 1 - EXP 每个人都可以获得同样多的EXP。
  # 2 - EXP 获得的EXP需要被平均分配到每一个队员。
  EXP_TYPE = 0
  #[下面是用来定义地图掉落道具的。]
  # 定义宝物消失时间。(秒数吧....)
  TREASURE_ERASE_TIME = 5
  # 是否启用忽明忽暗的效果。
  FADE_TREASURE_SPRITE = true
  # 是否启用悬浮的效果。
  FLOAT_TREASURE_SPRITE = true
  # 修正掉落道具的位置高度。
  FIX_BALLOON_POSITION = true
  # 固定在离地图多少高度以上。(像素)
  BALLOON_HEIGHT = 32
end  

#===============================================================================
# ■ 敌人的设置
#===============================================================================

module XAS_BA_ENEMY
  #定义敌人能够抵挡的技能(TOOL事件)。
  #
  #INVUNERABLE_ACTIONS={A#=> B,B,B,B] A => B,B,B,B],...}
  #A  -  敌人的ID。
  #B  -  技能的ID。
  
  INVUNERABLE_ACTIONS = {
  6=>[39,40,41,42,43],
  7=>[24,25,26,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],
  8=>[1,2,3,4,5,6,7,11,12,13,14,15,16,17,18,19,20,21,24,25,26],
  9=>[39,40,41,42,43],
  10=>[39,40,41,42,43],
  11=>[39,40,41,42,43]
  }
  
  # 敌人能够抵挡哪个方向上的攻击。
  # GUARD_DIRECTIONS = { A=>[B],  A=>[B,B,B,B], ...}
  # A - 敌人的ID
  # B - 方向。(2,4,6,8)
  #     -> 2 = 下.   -> 4 = 左.
  #     -> 6 = 右.   -> 8 = 上.
  
  GUARD_DIRECTIONS = {
  }  
  
  # 敌人能够反击的技能
  # 按下面的格式来设置。A为敌人ID,B为技能ID。
  # COUNTER_ATTACK = { A=>[B,B,B,B],  A=>[B,B,B,B], ...}
  COUNTER_ATTACK = {
  }
  
end  








#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ 初始化操作
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#===============================================================================
# ■ 游戏_队伍
#===============================================================================
class Game_Temp
  attr_accessor :change_leader_wait_time
  attr_accessor :reset_battler_time
  attr_accessor :tool_event
  attr_accessor :animation_garbage
  
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------   
  alias xas_initialize initialize
  def initialize
      @change_leader_wait_time = 0
      @reset_battler_time = 0
      @tool_event = nil
      @animation_garbage = []
      xas_initialize
  end
  
end

#===============================================================================
# ■ 游戏_系统
#===============================================================================
class Game_System
  attr_accessor :tools_on_map
  attr_accessor :old_interpreter_running
  attr_accessor :hud_visible
  attr_accessor :enable_hud
  attr_accessor :command_enable
  attr_accessor :pre_leader_id
  attr_accessor :xas_battle
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------   
  alias x_initialize initialize
  def initialize
      @tools_on_map = []
      @old_interpreter_running = false
      @hud_visible = XAS_BA::HUD_VISIBLE_AT_STARTUP
      @enable_hud = false
      @command_enable  = true
      @pre_leader_id = 0
      @xas_battle = XAS_SYSTEM::BATTLE_SYSTEM
      x_initialize
  end  
end  

#===============================================================================
# ■ 游戏_战斗者
#===============================================================================
class Game_Battler
  attr_accessor :damage_pop
  attr_accessor :damage
  attr_accessor :damage_type
  attr_accessor :critical
  attr_accessor :invunerable_duration
  attr_accessor :shield
  attr_accessor :invunerable_actions
  attr_accessor :guard_directions
  attr_accessor :guard
  attr_accessor :invunerable
  attr_accessor :x_combo
  attr_accessor :cast_action
  attr_accessor :defeated
  attr_accessor :death_zoom_effect
  attr_accessor :counter_action
  attr_accessor :knockback_duration
  attr_accessor :hp_damage
  attr_accessor :mp_damage
  
#--------------------------------------------------------------------------
# ● 初始化
#--------------------------------------------------------------------------  
  alias x_initialize initialize
  def initialize
      @damage = 0
      @damage_pop = false
      @damage_type = 0
      @critical = false
      @invunerable_duration = 0
      @shield = false
      @invunerable_actions = []
      @guard_directions = []
      @guard = true
      @invunerable = false
      @x_combo = [0,-1,0]
      @defeated = false
      @death_zoom_effect = 0
      @cast_action = [0,0,0,0,0]
      @counter_action = [0,0,true]
      @knockback_duration = XAS_BA::DEFAULT_KNOCK_BACK_DURATION
      x_initialize
  end
  
#--------------------------------------------------------------------------
# ● 添加 无敌 行为
#--------------------------------------------------------------------------     
def add_inv(action_id = 0)
     return if action_id == nil or action_id <= 0
     return if @invunerable_actions.include?(action_id)
     @invunerable_actions.push(action_id)     
end

#--------------------------------------------------------------------------
# ● 消除 无敌 行为
#--------------------------------------------------------------------------     
def remove_inv(action_id = 0)
     return if action_id == nil or action_id <= 0
     return unless @invunerable_actions.include?(action_id)
     @invunerable_actions.delete(action_id)     
end
   
#--------------------------------------------------------------------------
# ● 防御 的方向
#--------------------------------------------------------------------------     
def add_guard_dir(direction = 0)
     return if direction == nil or direction <= 0
     return if @guard_directions.include?(direction)
     @guard_directions.push(direction)     
end

#--------------------------------------------------------------------------
# ● 消除 防御 的方向
#--------------------------------------------------------------------------     
def remove_guard_dir(direction = 0)
     return if direction == nil or direction <= 0
     return unless @guard_directions.include?(direction)
     @guard_directions.delete(direction)     
end  

end  

#===============================================================================
# ■ 游戏 Actor
#===============================================================================
class Game_Actor < Game_Battler
  
  attr_accessor :x_action1_id
  attr_accessor :x_action2_id
  attr_accessor :skill_id
  attr_accessor :x_item_id
  attr_accessor :x_charge_action
  attr_accessor :old_equipment_id
  attr_accessor :item_id
  attr_accessor :old_level
  attr_reader :actor_id

#--------------------------------------------------------------------------
# ● 计划
#--------------------------------------------------------------------------   
alias x_setup setup
def setup(actor_id)
      @x_action1_id = 0
      @x_action2_id = 0
      @skill_id = 0
      @x_item_id = 0
      @item_id = 0
      @x_charge_action = [0,0,0,0]
      @old_level = @level
      @old_equipment_id = [0,0,0,0,0]
      x_setup(actor_id)
end

#--------------------------------------------------------------------------
# ● 显示的等级
#--------------------------------------------------------------------------     
  alias x_display_level_up display_level_up
  def display_level_up(new_skills)
      return unless $game_party.in_battle
      x_display_level_up(new_skills)
  end

end

#===============================================================================
# ■ 角色
#===============================================================================
class Game_Character < Game_CharacterBase
  
  attr_accessor :tool_id
  attr_accessor :tool_effect  
  attr_accessor :target
  attr_accessor :target2
  attr_accessor :old_x
  attr_accessor :old_y
  attr_accessor :pre_x
  attr_accessor :pre_y
  attr_accessor :temp_id
  attr_accessor :angle
  attr_accessor :force_action_times
  attr_accessor :force_action
  attr_accessor :move_frequency
  attr_accessor :move_speed
  attr_accessor :direction_fix
  attr_accessor :walk_anime
  attr_accessor :step_anime
  attr_accessor :x
  attr_accessor :y
  attr_accessor :pattern
  attr_accessor :pattern_count  
  attr_accessor :jump_count
  attr_accessor :jump_peak
  attr_accessor :dash_active
  attr_accessor :direction
  attr_accessor :through
  attr_accessor :bush_depth  
  attr_accessor :blend_type
  attr_accessor :priority_type  
  attr_accessor :jump_count
  attr_accessor :zoom_x
  attr_accessor :zoom_y
  attr_accessor :stop
  attr_accessor :force_update
  attr_accessor :treasure_time
  attr_accessor :treasure_float
  attr_accessor :can_update
  attr_accessor :pre_move_speed
  attr_accessor :knock_back_duration
  attr_accessor :orig_pos_x
  attr_accessor :orig_pos_y
  attr_accessor :shoot_time
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------   
  alias x_initialize initialize
  def initialize
      x_initialize
      @tool_id = 0
      @tool_effect = ""
      @target = false
      @target2 = nil
      @old_x = @x
      @old_y = @y
      @pre_x = @x
      @pre_y = @y   
      @orig_pos_x = @x
      @orig_pos_y = @y
      @Angle = 0
      @force_action_times = 0
      @force_action = ""
      @dash_active = false
      @zoom_x = 1.00
      @zoom_y = 1.00
      @stop = false
      @force_update = false
      @treasure_time = 0
      @treasure_float = [0,0,0,0]
      @can_update = true
      @temp_id = 0
      @pre_move_speed = @move_speed
      @shoot_time = [0,0]
  end
  
  #--------------------------------------------------------------------------
  # ● 无敌
  #--------------------------------------------------------------------------      
  def invunerable(enable = false)
      return if @battler == nil or @battler.dead?
      @battler.invunerable = enable
  end  
  
  #--------------------------------------------------------------------------
  # ● 敌人呼吸
  #--------------------------------------------------------------------------        
  def fast_breath(enable = true)
     return if @battler == nil or @battler.dead?
     @battler.fast_breath_effect = enable
  end
end

#===============================================================================
# ■ 游戏_事件
#===============================================================================
class Game_Event < Game_Character
  attr_accessor :target
  attr_reader   :name
  attr_accessor :collision_attack

#--------------------------------------------------------------------------
# ● 对象
#--------------------------------------------------------------------------      
alias x_event_initialize initialize
def initialize(map_id, event)
     x_event_initialize(map_id, event)
     @collision_attack = false
     if @event.name =~ /<O(\d+)>/i or @event.name =~ /<透(\d+)>/i
        @opacity = $1.to_i  
     end   
     if @event.name =~ /<B(\d+)>/i or @event.name =~ /<合(\d+)>/i  
        @blend_type = $1.to_i
     end  
end  
   
#--------------------------------------------------------------------------
# ● 事件消除
#--------------------------------------------------------------------------        
alias x_event_erase erase
def erase
     if self.tool_id > 0
        $game_system.tools_on_map.delete(self.tool_id)
     end   
     x_event_erase
end     
  
#--------------------------------------------------------------------------
# ● 事件名字
#--------------------------------------------------------------------------
  def name
      return @event.name  
  end   
  
end

#===============================================================================
# ■ 游戏队友
#===============================================================================
class Game_Followers
  
#--------------------------------------------------------------------------
# ● 初始化
#--------------------------------------------------------------------------  
  alias x_party_initialize initialize
  def initialize(leader)
      x_party_initialize(leader)
      if $xas_party_system == nil
         @visible = false
      end  
  end  
end  

#===============================================================================
# ■ 游戏地图
#===============================================================================
class Game_Map  

#--------------------------------------------------------------------------
# ● 设置
#--------------------------------------------------------------------------  
  alias x_initial_setup setup
  def setup(map_id)
      x_initial_setup(map_id)
      xas_initial_setup(map_id)
  end
  
#--------------------------------------------------------------------------
# ● XAS 初始设置
#--------------------------------------------------------------------------  
  def xas_initial_setup(map_id)
      for actor in $game_party.members
          setup_initial_members(actor)
      end  
  end  
   
#--------------------------------------------------------------------------
# ● 设置 初始成员
#--------------------------------------------------------------------------   
  def setup_initial_members(actor)
      
  end  
end  


#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map < Scene_Base
  
  #--------------------------------------------------------------------------
  # ● 调用菜单
  #--------------------------------------------------------------------------   
  alias x_call_menu call_menu
  def call_menu
      return if $game_player.action != nil
      $game_player.reset_charge_temp
      x_call_menu
  end
   
end   
#===============================================================================
# ■ Scene_Refresh
#===============================================================================
class Scene_Refresh
  
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
  def main
      SceneManager.call(Scene_Map)
  end
end

#==============================================================================
# ■ Game_Player
#==============================================================================
class Game_Player < Game_Character

#--------------------------------------------------------------------------
# ● 队友切换
#--------------------------------------------------------------------------  
  def leader_changed?(actor)
      if $game_party.members[0] == nil
         return true if actor != nil
      elsif $game_party.members[0] != nil
         return true if actor == nil   
         return true if actor.actor_id != $game_party.members[0].actor_id        
      end   
      return false
  end
  
end  
$xas = true


#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ 运动 - 斜向运动
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#===============================================================================
# ■ 游戏 角色
#===============================================================================
class Game_CharacterBase
  
  #--------------------------------------------------------------------------
  # ● 建立方向
  #--------------------------------------------------------------------------         
   alias diagonal_set_direction set_direction
   def set_direction(d)
       diagonal_set_direction(d)
       @diagonal_direction = 0
       reset_diagonal
   end
   
end   

#===============================================================================
# ■  游戏 角色
#===============================================================================
class Game_Character < Game_CharacterBase
  
  attr_accessor :diagonal
  attr_accessor :diagonal_direction
  attr_accessor :sprite_angle_enable
  attr_accessor :diagonal_time
  
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------        
  alias diagonal_initialize initialize
  def initialize
      diagonal_initialize
      if XAS_SYSTEM::EVENT_DIAGONAL_MOVEMENT
         @diagonal = true
      else   
         @diagonal = false
      end  
      @diagonal_direction = 0
      @sprite_angle_enable = false
      @diagonal_time = 0
  end  
   
  #--------------------------------------------------------------------------
  # ● 复位 对角线
  #--------------------------------------------------------------------------            
  def reset_diagonal
      return if @direction_fix
      return if @diagonal == false
      @diagonal_direction = 0   
      @diagonal_time = 0
      @angle = 0 if @sprite_angle_enable
  end  
  
  #--------------------------------------------------------------------------
  # ● 启用对角线
  #--------------------------------------------------------------------------            
  def enable_diagonal(dir = 0)
     return if @direction_fix
     return if @diagonal == false
     return if dir == 0
     @diagonal_direction = dir
     @diagonal_time = XAS_BA::DIAGONAL_DURATION
     @angle = 315 if @sprite_angle_enable
  end  
  
  #--------------------------------------------------------------------------
  # ● ↗
  #--------------------------------------------------------------------------  
  def turn_upper_right
      enable_diagonal(9)
      @direction = 8 unless @direction_fix
  end  
  
  #--------------------------------------------------------------------------
  # ● ↖
  #--------------------------------------------------------------------------  
  def turn_upper_left
      enable_diagonal(7)
      @direction = 4 unless @direction_fix
  end   
  
  #--------------------------------------------------------------------------
  # ● ↘
  #--------------------------------------------------------------------------  
  def turn_lower_right
      enable_diagonal(3)
      @direction = 6 unless @direction_fix
  end      
  
  #--------------------------------------------------------------------------
  # ● ↙
  #--------------------------------------------------------------------------  
  def turn_lower_left
      enable_diagonal(1)
      @direction = 2 unless @direction_fix
  end   
   
  #--------------------------------------------------------------------------
  # ● 移动朝向
  #--------------------------------------------------------------------------               
  alias diagonal_move_forward move_forward
  def move_forward
      return if move_forward_diagonal?
      diagonal_move_forward
  end
  
  #--------------------------------------------------------------------------
  # ● 移动朝向对角线设置?
  #--------------------------------------------------------------------------                  
  def move_forward_diagonal?
      return false if @diagonal == false
      if @diagonal_direction != 0
         case @diagonal_direction
              when 1 #左上
                 move_diagonal(4, 2)
                 @direction = 2
              when 3 #右下
                 move_diagonal(6, 2)
                 @direction = 6
              when 7 #左下
                 move_diagonal(4, 8)
                 @direction = 4
              when 9 #右上
                 move_diagonal(6, 8)
                 @direction = 8
          end
          enable_diagonal(@diagonal_direction)      
         return true
      end  
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● 后移动
  #--------------------------------------------------------------------------               
  alias diagonal_move_backward move_backward
  def move_backward
      return if move_backward_diagonal?
      diagonal_move_backward
  end
  
  #--------------------------------------------------------------------------
  # ● 后移动对角线?
  #--------------------------------------------------------------------------                  
  def move_backward_diagonal?
      return false if @diagonal == false
      if @diagonal_direction != 0
         last_direction_fix = @direction_fix
         @direction_fix = true      
         case @diagonal_direction
              when 1
                 move_diagonal(6, 8)
                 @direction = 6
              when 3
                 move_diagonal(4, 8)
                 @direction = 4
              when 7
                 move_diagonal(6, 2)
                 @direction = 6
              when 9         
                 move_diagonal(4, 2)
                 @direction = 2
         end
         enable_diagonal(@diagonal_direction)      
         @direction_fix = last_direction_fix
         return true
      end  
      return false
  end  
  
  #--------------------------------------------------------------------------
  # ● 转向朝向玩家
  #--------------------------------------------------------------------------
  alias turn_toward_player_diagonal turn_toward_player
  def turn_toward_player
      if @diagonal
         diagonal_turn_toward_player
         return
      end
      turn_toward_player_diagonal
  end  
  
  #--------------------------------------------------------------------------
  # ● 对角线 转向朝向玩家
  #--------------------------------------------------------------------------
  def diagonal_turn_toward_player
      sx = distance_x_from($game_player.x)
      sy = distance_y_from($game_player.y)
      sd = sx.abs - sy.abs
      sdx = sd.abs - sx.abs
      sdy = sd.abs - sy.abs
      return if sx == 0 and sy == 0
      #Turn Upper Right
      if sx < 0 and sy > 0
         if sx.abs > sy.abs and sdx.abs < sd.abs
            set_direction(6)
         elsif sx.abs < sy.abs and sdy.abs < sd.abs
            set_direction(8)
         else
            turn_upper_right
         end
         enable_diagonal(9)
      #Turn Upper Left
      elsif sx > 0 and sy > 0
         if sx.abs > sy.abs and sdx.abs < sd.abs
            set_direction(4)
         elsif sx.abs < sy.abs and sdy.abs < sd.abs
            set_direction(8)            
         else
            set_direction(4)
            turn_upper_left
         end
         enable_diagonal(7)  
      #Turn Lower Left  
      elsif sx > 0 and sy < 0
         if sx.abs > sy.abs and sdx.abs < sd.abs
            set_direction(4)
         elsif sx.abs < sy.abs and sdy.abs < sd.abs
            set_direction(2)         
         else                    
            turn_lower_left
         end
         enable_diagonal(1)   
       #Turn Lower Right   
       elsif sx < 0 and sy < 0         
         if sx.abs > sy.abs and sdx.abs < sd.abs
            set_direction(6)
         elsif sx.abs < sy.abs and sdy.abs < sd.abs
            set_direction(2)           
         else        
            turn_lower_right
         end
         enable_diagonal(3)
      elsif sx < 0
         set_direction(6)
      elsif sx > 0
         set_direction(4)
      elsif sy > 0
         set_direction(8)
      elsif sy < 0
         set_direction(2)   
      end     
  
  end  

  #--------------------------------------------------------------------------
  # ● 跟随玩家
  #--------------------------------------------------------------------------
  alias move_toward_player_diagonal move_toward_player
  def move_toward_player
      if @diagonal
         diagonal_move_toward_player
         return  
      end
      move_toward_player_diagonal
  end   
   
  #--------------------------------------------------------------------------
  # ● 对角线移动跟随玩家
  #--------------------------------------------------------------------------  
  def diagonal_move_toward_player
      sx = distance_x_from($game_player.x)
      sy = distance_y_from($game_player.y)
      if sx == 0 and sy == 0
         return
      end
      abs_sx = sx.abs
      abs_sy = sy.abs
      if abs_sx == abs_sy
        rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
      end
      if abs_sx
         if sx < 0 and sy > 0
            move_diagonal(6, 8)
            move_random unless moving?
            enable_diagonal(9)
         elsif sx > 0 and sy > 0
            move_diagonal(4, 8)
            move_random unless moving?
            enable_diagonal(7)
         elsif sx > 0 and sy < 0
            move_diagonal(4, 2)
            move_random unless moving?
            enable_diagonal(1)
         elsif sx < 0 and sy < 0
            move_diagonal(6, 2)
            move_random unless moving?
            enable_diagonal(3)
         elsif sx < 0
            move_straight(6)
         elsif sx > 0
            move_straight(4)
         elsif sy > 0
            move_straight(8)
         elsif sy < 0
            move_straight(2)
         end
         if abs_sx != 1 and abs_sy != 1
            move_random unless moving?
         end  
      end
end
  
#--------------------------------------------------------------------------
# ● 右转_45度
#--------------------------------------------------------------------------      
def turn_right_45
     if @diagonal and @diagonal_direction != 0     
        case @diagonal_direction
          when 1;  set_direction(4)
          when 3;  set_direction(2)
          when 7;  set_direction(8)
          when 9;  set_direction(6)  
        end
     else  
        case @direction
          when 2;  turn_lower_left
          when 4;  turn_upper_left
          when 6;  turn_lower_right
          when 8;  turn_upper_right
        end
     end  
end

#--------------------------------------------------------------------------
# ● 左转_45
#--------------------------------------------------------------------------  
def turn_left_45
     if @diagonal and @diagonal_direction != 0     
        case @diagonal_direction
          when 1;  set_direction(2)
          when 3;  set_direction(6)
          when 7;  set_direction(4)
          when 9;  set_direction(8)
        end
     else  
        case @direction
          when 2;  turn_lower_right
          when 4;  turn_lower_left
          when 6;  turn_upper_right
          when 8;  turn_upper_left
        end
     end  
end

#--------------------------------------------------------------------------
# ● 右转_90度
#--------------------------------------------------------------------------   
alias diagonal_turn_right_90 turn_right_90
  def turn_right_90
      if @diagonal and @diagonal_direction != 0
         turn_diagonal_right_90
         return
      end  
      diagonal_turn_right_90
  end
  
#--------------------------------------------------------------------------
# ● 斜角右转_90度
#--------------------------------------------------------------------------   
  def turn_diagonal_right_90
      case @diagonal_direction
         when 1;  turn_upper_left
         when 3;  turn_lower_left
         when 7;  turn_upper_right
         when 9;  turn_lower_right
      end
  end
   
#--------------------------------------------------------------------------
# ● 左转_90度
#--------------------------------------------------------------------------   
  alias diagonal_turn_left_90 turn_left_90
  def turn_left_90
      if @diagonal and @diagonal_direction != 0
         turn_diagonal_left_90
         return
      end
      diagonal_turn_left_90
  end  
   
#--------------------------------------------------------------------------
# ● 斜角左转_90度
#--------------------------------------------------------------------------   
  def turn_diagonal_left_90
      case @diagonal_direction
         when 1;  turn_lower_right
         when 3;  turn_upper_right
         when 7;  turn_lower_left
         when 9;  turn_upper_left
      end
  end     
   
  #--------------------------------------------------------------------------
  # ● 转_180度
  #--------------------------------------------------------------------------
  alias diagonal_turn_180 turn_180
  def turn_180  
      if @diagonal and @diagonal_direction != 0
         turn_diagonal_180
         return
      end
      diagonal_turn_180
  end
  
#--------------------------------------------------------------------------
# ● 斜角转_180度
#--------------------------------------------------------------------------   
  def turn_diagonal_180
      case @diagonal_direction
         when 1;  turn_upper_right
         when 3;  turn_upper_left
         when 7;  turn_lower_right
         when 9;  turn_lower_left
      end
  end  
   
#--------------------------------------------------------------------------
# ● 随机移动
#--------------------------------------------------------------------------   
  alias diagonal_turn_random turn_random
  def turn_random
      if @diagonal
         turn_diagonal_random
         return
      end  
      diagonal_turn_random
  end  
  
#--------------------------------------------------------------------------
# ● 斜角随机移动
#--------------------------------------------------------------------------   
  def turn_diagonal_random
      case rand(8)
          when 0;  set_direction(8)
          when 1;  set_direction(6)
          when 2;  set_direction(4)
          when 3;  set_direction(2)
          when 4;  turn_lower_left  
          when 5;  turn_lower_right
          when 6;  turn_upper_left  
          when 7;  turn_upper_right
      end
  end

end   

#===============================================================================
# ■ Game_Player
#===============================================================================
class Game_Player < Game_Character
  
  #--------------------------------------------------------------------------
  # ● Move By Input
  #--------------------------------------------------------------------------   
  alias diagonal_move_by_input move_by_input
  def move_by_input
      if XAS_SYSTEM::PLAYER_DIAGONAL_MOVEMENT
         player_diagonal_move_by_input
        # update_sprite_diagonal
         update_return_direction
         return
      end
      diagonal_move_by_input
  end   
   
  #--------------------------------------------------------------------------
  # ● Update Sprite Diagonal
  #--------------------------------------------------------------------------        
  def update_sprite_diagonal
      return if @diagonal_direction == 0
      return if self.action != nil
      return if @dash_active
      make_pose("_Diagonal", 2)
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Return Direction
  #--------------------------------------------------------------------------         
  def update_return_direction
      return if XAS_BA::DIAGONAL_DURATION_ENABLE == false
      return if @diagonal_time == 0
      return if moving? or @stop
      @diagonal_time -= 1
      @diagonal_direction = 0 if @diagonal_time == 0
  end
   
  #--------------------------------------------------------------------------
  # ● Player Diagonal Move By Input
  #--------------------------------------------------------------------------      
  def player_diagonal_move_by_input   
      return unless movable?
      return if $game_map.interpreter.running?
      case Input.dir8
           when 1
               move_diagonal(4, 2)
               unless moving?
                   move_straight(4)
                   move_straight(2)                 
               end  
               @diagonal_direction = 1  
           when 2; move_straight(2)
           when 3
                move_diagonal(6, 2)
                unless moving?
                   move_straight(6)
                   move_straight(2)
                end
                @diagonal_direction = 3
           when 4;  move_straight(4)
           when 6;  move_straight(6)
           when 7
                 move_diagonal(4, 8)
                 unless moving?
                    move_straight(4)
                    move_straight(8)
                end
                @diagonal_direction = 7
           when 8;  move_straight(8)
           when 9  
                 move_diagonal(6, 8)
                 unless moving?
                    move_straight(6)
                    move_straight(8)
                end
                @diagonal_direction = 9  
      end
  end  
  
end


#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ MOVEMENT - FORCE ACTION
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#===============================================================================
# ■ Game Character
#===============================================================================
class Game_Character < Game_CharacterBase
  
  #--------------------------------------------------------------------------
  # ● moving 2?
  #--------------------------------------------------------------------------  
  def moving2?
      @real_x != @x || @real_y != @y
  end   
  
  #--------------------------------------------------------------------------
  # ● Can Force Action?
  #--------------------------------------------------------------------------         
  def can_force_action?
      return false if @force_action_times  == 0
      return false if self.moving2?
      return false if self.jumping?
      return false if self.knockbacking?
      return false if self.stop
      return true
  end
   
  #--------------------------------------------------------------------------
  # ● Update Force Action
  #--------------------------------------------------------------------------        
  def update_force_action
      @force_action_times -= 1
      execute_force_action
      execute_force_action_tool_effect if @tool_id > 0 and @tool_effect != ""
      reset_auto_action if @force_action_times == 0
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Force Action
  #--------------------------------------------------------------------------         
  def execute_force_action  
      case @force_action
        when "Forward"
            move_forward
        when "Backward"
            move_backward
        when "Toward Player"   
            move_toward_player
        when "Move Left"   
            move_straight(4)
        when "Move Right"
            move_straight(6)
        when "Move Up"   
            move_straight(8)
        when "Move Down"
            move_straight(2)
        when "All Shoot"  
              if self.action != nil
                 turn_right_45
                 self.shoot(self.action.id) unless @force_action_times == 0
              end
        when "Four Shoot"  
              if self.action != nil
                 turn_right_90
                 self.shoot(self.action.id) unless @force_action_times == 0
              end               
        when "Three Shoot"  
              if self.action != nil
                 case @force_action_times
                     when 2
                       turn_right_45
                     when 1
                       turn_left_90
                     when 0
                       turn_right_45
                 end  
                 self.shoot(self.action.id) unless @force_action_times == 0
              end      
        when "Two Shoot"  
              if self.action != nil
                 turn_180
                 self.shoot(self.action.id) unless @force_action_times == 0
              end   
        end  
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Force Action Tool Effect
  #--------------------------------------------------------------------------
  def execute_force_action_tool_effect
      action_effect_during_move     
      action_effect_after_move if @force_action_times == 0
  end  
  
  #--------------------------------------------------------------------------
  # ● Auto Action Effect During Move
  #--------------------------------------------------------------------------            
  def reset_auto_action  
      @force_action = ""
      @force_action_times = 0
      @anime_count = 0
  end
  
  #--------------------------------------------------------------------------
  # ● Action Effect During Move
  #--------------------------------------------------------------------------         
  def action_effect_during_move  
      if @tool_effect == "Boomerang" and @force_action == "Toward Player"  
         if @x == $game_player.x and @y == $game_player.y  
            self.action.duration = 15
            @force_action_times = 0
            @force_action_type = ""            
          end
      end
  end  

  #--------------------------------------------------------------------------
  # ● Action Effect After Move
  #--------------------------------------------------------------------------            
  def action_effect_after_move
      if @tool_effect == "Boomerang"
         @force_action_times = 30
         @force_action = "Toward Player"   
         @move_frequency = 6
         @move_speed = 5.5           
      end     
  end      
      
end  


#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ MOVEMENT - EXTRA MOVEMENT
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#===============================================================================
# ■ Game Character
#===============================================================================
class Game_Character < Game_CharacterBase
  
  #--------------------------------------------------------------------------
  # ● Check XY
  #--------------------------------------------------------------------------      
  def check_xy
      @pre_x = @x
      @pre_y = @y
  end   

  #--------------------------------------------------------------------------
  # ● Turn Reverse
  #--------------------------------------------------------------------------         
  def turn_reverse(dir)
      case dir     
        when 2; set_direction(8)
        when 4; set_direction(6)
        when 6; set_direction(4)
        when 8; set_direction(2)
      end   
  end
  
  #--------------------------------------------------------------------------
  # ● Org Here
  #--------------------------------------------------------------------------        
  def org_here
      @orig_pos_x = @x
      @orig_pos_y = @y
  end  
  
  #--------------------------------------------------------------------------
  # ● return_org
  #--------------------------------------------------------------------------         
  def return_org(type = 0)
      if type == 1
         moveto(@orig_pos_x,@orig_pos_x)
      else  
         jump(0,0)
      end
      @x = @orig_pos_x
      @y = @orig_pos_y
  end  
  
  #--------------------------------------------------------------------------
  # ● Dual Switch
  #--------------------------------------------------------------------------   
  def dual_switch(switch_on, switch_off,percentage = 100)
      enable_per = rand(100)
      if enable_per <= percentage
         $game_switches[switch_on] = true   
         $game_switches[switch_off] = false
         $game_map.need_refresh = true
      end   
  end   
  
  #--------------------------------------------------------------------------
  # ● Move Forward 2
  #--------------------------------------------------------------------------  
  def move_forward2
      return if moving2?
      move_forward
  end  
  
  #--------------------------------------------------------------------------
  # ● Bounce Direction
  #--------------------------------------------------------------------------  
  def bounce_direction
      @diagonal = true
      turn_random  
  end
  
  #--------------------------------------------------------------------------
  # ● Turn_back
  #--------------------------------------------------------------------------            
  def turn_back
      if @diagonal_direction != 0
         case @diagonal_direction
              when 1
                turn_upper_right
              when 3
                turn_upper_left
              when 7
                turn_lower_right
              when 9         
                turn_lower_left
         end
      else
          case @direction
               when 2;   set_direction(8)
               when 4;   @direction = 6#move_straight(6)#set_direction(6)
               when 6;   set_direction(4)
               when 8;   set_direction(2)
          end
      end     
  end  
  
  #--------------------------------------------------------------------------
  # ● Jump_high
  #--------------------------------------------------------------------------
  def jump_high(x_plus,y_plus,high = 10)   
      @x += x_plus
      @y += y_plus
      distance = Math.sqrt(x_plus * x_plus + y_plus * y_plus).round
      @jump_peak = high + distance - @move_speed
      @jump_count = @jump_peak * 2
      @stop_count = 0
      straighten
  end
  
  #--------------------------------------------------------------------------
  # ● Passable Temp
  #--------------------------------------------------------------------------   
def passable_temp_id?(x, y)
     return false unless $game_map.valid?(x, y)   
     return true if @through or debug_through?     
     return false unless map_passable?(x, y,@direction)         
     return false if collide_with_characters_temp_id?(x, y)
     return true                                   
  end
  
  #--------------------------------------------------------------------------
  # ● Collide With Characters
  #--------------------------------------------------------------------------      
  def collide_with_characters_temp_id?(x, y)
      for event in $game_map.events_xy(x, y)         
          unless event.through or event.battler != nil   
             return true if self.is_a?(Game_Event)      
             return true if event.priority_type >= 1     
          end
      end
      return false
  end  

  #--------------------------------------------------------------------------
  # ● Force Move Route
  #--------------------------------------------------------------------------
  alias x_force_move_route force_move_route
  def force_move_route(move_route)
      if self.battler != nil and self.is_a?(Game_Event)
         return
      end  
      x_force_move_route(move_route)
  end  
end  


#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ MOVEMENT - PLAYER COMMANDS
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#==============================================================================
# ■ Game_Player
#==============================================================================
class Game_Player < Game_Character
  include XAS_BUTTON
  
  #--------------------------------------------------------------------------
  # ● Update Action Command
  #--------------------------------------------------------------------------  
  def update_action_command
      update_check_battler_equipment if can_check_battler_equipment?
      update_dash_button
      update_auto_target_shoot
      update_combo_time
      update_action_1_button
      update_action_2_button
      update_skill_button
      update_item_button
      update_change_leader_button
      update_charge_button
  end  

  #--------------------------------------------------------------------------
  # ● Can Use Command?
  #--------------------------------------------------------------------------      
  def can_use_command?
      return false if $game_map.interpreter.running?
      return false if $game_message.visible
      return false if self.battler == nil
      return false if self.action != nil
      return false if self.knockbacking?      
      return false if @stop
      return true
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Check Battler Equipment
  #--------------------------------------------------------------------------      
  def update_check_battler_equipment
  
  end  
  
  #--------------------------------------------------------------------------
  # ● Can Check Battler Equipment
  #--------------------------------------------------------------------------        
  def can_check_battler_equipment?
      if self.battler.old_equipment_id[0] != self.battler.equips[0] or
         self.battler.old_equipment_id[1] != self.battler.equips[1] or
         self.battler.old_equipment_id[2] != self.battler.equips[2] or
         self.battler.old_equipment_id[3] != self.battler.equips[3] or
         self.battler.old_equipment_id[4] != self.battler.equips[4]
         self.battler.old_equipment_id[0] = self.battler.equips[0]
         self.battler.old_equipment_id[1] = self.battler.equips[1]
         self.battler.old_equipment_id[2] = self.battler.equips[2]
         self.battler.old_equipment_id[3] = self.battler.equips[3]
         self.battler.old_equipment_id[4] = self.battler.equips[4]      
         return true
      end   
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● Update Charge Button
  #--------------------------------------------------------------------------   
  def update_charge_button
      return unless can_charge_command?
      if Input.press?(ACTION_1_BUTTON) and ENABLE_ACTION_1_BUTTON
         update_charge_effect(0)
         reset_charge_temp if Input.press?(ACTION_2_BUTTON) and ENABLE_ACTION_2_BUTTON
      elsif Input.press?(ACTION_2_BUTTON)
         update_charge_effect(1)
         reset_charge_temp if Input.press?(ACTION_1_BUTTON)
      else
         if self.battler.x_charge_action[2] >= self.battler.x_charge_action[1]
            self.shoot(self.battler.x_charge_action[0])
         end
        reset_charge_temp
      end  
  end

  #--------------------------------------------------------------------------
  # ● Update Charge Effect
  #--------------------------------------------------------------------------        
  def update_charge_effect(type)
      if self.battler.x_charge_action[2] == 0
         return unless equipped_charge_action?(type)
      end  
      if self.battler.x_charge_action[2] < self.battler.x_charge_action[1]
         self.battler.x_charge_action[2] += 1
      end
      self.battler.x_charge_action[3] += 1
      if self.battler.x_charge_action[3] > XAS_ANIMATION::LOOP_ANIMATIONS_SPEED
         self.battler.x_charge_action[3] = 0
         if self.battler.x_charge_action[2] < self.battler.x_charge_action[1]
            self.animation_id = XAS_ANIMATION::CHARGE_ANIMATION1_ID
         else
            self.animation_id = XAS_ANIMATION::CHARGE_ANIMATION2_ID
         end  
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Equipped Charge Action
  #--------------------------------------------------------------------------         
  def equipped_charge_action?(type)
      case type
         when 0
           weapon = self.battler.equips[0]
         when 1
           weapon = self.battler.equips[1]
      end
      if weapon == nil
         return false
         reset_charge_temp
      end
      if weapon.note =~ /<Charge Action = (\d+) - (\d+)>/   or
        weapon.note =~ /<蓄力技能 = (\d+) - (\d+)>/
         self.battler.x_charge_action[0] = $1.to_i rescue 0#Skill ID
         self.battler.x_charge_action[1] = $2.to_i rescue 0#Max Time
         self.battler.x_charge_action[2] = 0#Current Time
         self.battler.x_charge_action[3] = 0#Loop Anime Time
         return true
      end            
      return false   
      reset_charge_temp
  end
  
  #--------------------------------------------------------------------------
  # ● Update Combo Time
  #--------------------------------------------------------------------------        
  def update_combo_time
      return if self.battler.x_combo[2] == 0
      self.battler.x_combo[2] -= 1
      if self.battler.x_combo[2] == 0
         self.battler.x_combo[0] = 0
         self.battler.x_combo[1] = -1
      end   
  end  
  
  #--------------------------------------------------------------------------
  # ● Can Use Weapon Command?
  #--------------------------------------------------------------------------   
  def can_use_weapon_command?
      return false if $game_system.command_enable == false
      return false unless ENABLE_ACTION_1_BUTTON
      return false if self.battler.shield
      return false if self.battler.cast_action[4] > 0
      return false if self.battler.x_charge_action[2] > 0
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● Can Use Shield Command?
  #--------------------------------------------------------------------------      
  def can_use_shield_command?
      return false if $game_system.command_enable == false
      return false unless ENABLE_ACTION_2_BUTTON
      return false if self.battler.equips[1] == nil
      return false if self.battler.equips[1].id == 0
      return false if self.battler.cast_action[4] > 0
      return false if self.battler.x_charge_action[2] > 0
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● Can Use Skill Command?
  #--------------------------------------------------------------------------   
  def can_use_skill_command?
      return false if $game_system.command_enable == false
      return false unless ENABLE_SKILL_BUTTON
      return false if self.battler.shield
      return false if self.battler.cast_action[4] > 0
      return false if self.battler.x_charge_action[2] > 0
      return true
  end   
  
  #--------------------------------------------------------------------------
  # ● Can Use Item Command?
  #--------------------------------------------------------------------------   
  def can_use_item_command?
      return false if $game_system.command_enable == false
      return false unless ENABLE_ITEM_BUTTON
      return false if self.battler.shield   
      return false if self.battler.cast_action[4] > 0
      return false if self.battler.x_charge_action[2] > 0
      return true
  end      
  
  #--------------------------------------------------------------------------
  # ● Can Charge Command
  #--------------------------------------------------------------------------      
  def can_charge_command?
      return false if $game_system.command_enable == false
      return false if self.battler.cast_action[4] > 0
      return false if self.battler.shield      
      return true
  end   
  
  #--------------------------------------------------------------------------
  # ● Can Use Change Leader Command?
  #--------------------------------------------------------------------------      
  def can_use_change_leader_command?
      return false unless ENABLE_CHANGE_LEADER_BUTTON
      return false if self.battler.shield   
      return false if self.battler.cast_action[4] > 0
      return false if self.battler.x_charge_action[2] > 0
      return false if $game_temp.change_leader_wait_time > 0
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● State_Seal Command
  #--------------------------------------------------------------------------        
  def state_seal_command?(type)
      seal = false
      case type  
         when 0
            seal = true if self.battler.state_mute
            seal = true if self.battler.state_seal_attack
         when 1
            seal = true if self.battler.state_mute
            seal = true if self.battler.state_seal_attack
         when 2
            seal = true if self.battler.state_mute
            seal = true if self.battler.state_seal_skill
         when 3  
            seal = true if self.battler.state_mute   
            seal = true if self.battler.state_seal_item
      end
      if seal
         seal_effect
         return true
      end  
      return false      
  end  
  
  #--------------------------------------------------------------------------
  # ● Check Equipped Action(修改BY W.S)
  #--------------------------------------------------------------------------   
  def check_equipped_action(command_type)
      case command_type
         when 0 # Weapon 1
            weapon = self.battler.equips[0]
            if weapon == nil
               self.battler.x_action1_id = 0
               return
             end
              if weapon.note =~ /<Action ID = (\d+)>/  
               weapon.note =~ /<Action ID = (\d+)>/
              elsif weapon.note =~ /<动作ID = (\d+)>/
               weapon.note =~ /<动作ID = (\d+)>/
              end
            action_id =  $1.to_i
            action_id = 0 if action_id == nil
            self.battler.x_action1_id = action_id
         when 1 # Weapon 2
            weapon = self.battler.equips[1]
            if weapon == nil
               self.battler.x_action2_id = 0
               return
             end   
              if weapon.note =~ /<Action ID = (\d+)>/  
               weapon.note =~ /<Action ID = (\d+)>/
              elsif weapon.note =~ /<动作ID = (\d+)>/
               weapon.note =~ /<动作ID = (\d+)>/
              end
            action_id =  $1.to_i
            action_id = 0 if action_id == nil            
            self.battler.x_action2_id = action_id
         when 2 # Skill   
            
         when 3 # Item
            item_id = $data_items[self.battler.item_id]
            if item_id == nil            
               self.battler.x_item_id =  0
               return
             end   
              if item_id.note =~ /<Action ID = (\d+)>/  
               item_id.note =~ /<Action ID = (\d+)>/
              elsif item_id.note =~ /<动作ID = (\d+)>/
               item_id.note =~ /<动作ID = (\d+)>/
              end
            action_id =  $1.to_i
            action_id = 0 if action_id == nil     
            self.battler.x_item_id = action_id
      end     
  end
   
  #--------------------------------------------------------------------------
  # ● Execute Combo
  #--------------------------------------------------------------------------        
  def execute_combo?(type)  
      if type == self.battler.x_combo[1] and self.battler.x_combo[0] != 0
         return if state_seal_command?(type)        
         self.shoot(self.battler.x_combo[0])
         self.battler.x_combo[1] = type
         return true
      end  
      self.battler.x_combo[0] = 0
      self.battler.x_combo[1] = type
      self.battler.x_combo[2] = 0
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● Update Change Leader Button
  #--------------------------------------------------------------------------        
  def update_change_leader_button
      if Input.trigger?(CHANGE_LEADER_BUTTON)
         return unless can_use_change_leader_command?
         change_leader     
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Update Action 1 Button
  #--------------------------------------------------------------------------      
  def update_action_1_button
      if Input.trigger?(ACTION_1_BUTTON)
         type = 0
         return unless can_use_weapon_command?
         return if execute_combo?(type)
         check_equipped_action(type)
         action_id = self.battler.x_action1_id
         return if action_id == 0
         return if state_seal_command?(type)
         self.shoot(action_id)
      end   
  end
   
  #--------------------------------------------------------------------------
  # ● Update Action 2 Button
  #--------------------------------------------------------------------------   
  def update_action_2_button
      if Input.trigger?(ACTION_2_BUTTON)
         if self.battler.equips[1].is_a?(RPG::Weapon)
            type = 1
            return unless can_use_weapon_command?
            return if execute_combo?(type)
            check_equipped_action(type)
            action_id = self.battler.x_action2_id
            return if action_id == 0
            return if state_seal_command?(type)            
            self.shoot(action_id)
            return
         end   
      end         
      update_shield_button
  end
  
  #--------------------------------------------------------------------------
  # ● Update Shield Button(修改BY W.S)
  #--------------------------------------------------------------------------        
  def update_shield_button
      if Input.press?(ACTION_2_BUTTON)
         if can_use_shield_command?
            unless self.battler.shield  
                shield = self.battler.equips[1]
                if shield.note =~ /<Action>/ or shield.note =~ /<动作>/
                   if shield.note =~ /<Pose = (\w+)>/ or shield.note =~ /<行走图 = (\w+)>/
                      make_pose($1.to_s, 2)
                   end
                else   
                   self.battler.shield = false
                   return
                end
            end
            self.x_pose_duration = 2
            self.battler.shield = true
            update_shield_diretion_button
         else
            self.battler.shield = false
         end  
      else   
         self.battler.shield = false
      end      
  end
  
  #--------------------------------------------------------------------------
  # ● update_shield_direction_button
  #--------------------------------------------------------------------------         
  def update_shield_diretion_button
      return if @direction_fix
      case Input.dir4
         when 2;  set_direction(2)   
         when 4;  set_direction(4)   
         when 6;  set_direction(6)   
         when 8;  set_direction(8)   
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Update Skill Button
  #--------------------------------------------------------------------------      
  def update_skill_button
      if Input.trigger?(SKILL_BUTTON)
         type = 2
         return unless can_use_skill_command?
         return if execute_combo?(type)
         check_equipped_action(type)
         action_id = self.battler.skill_id
         return if action_id == 0
         return if state_seal_command?(type)         
         self.shoot(action_id)
      end   
  end
  
  #--------------------------------------------------------------------------
  # ● Update Item Button
  #--------------------------------------------------------------------------      
  def update_item_button
      if Input.trigger?(ITEM_BUTTON)
         type = 3         
         return unless can_use_item_command?
         return if execute_combo?(type)
         check_equipped_action(type)
         action_id = self.battler.x_item_id
         return if action_id == 0
         return if state_seal_command?(type)         
         self.shoot(action_id)
      end   
  end
  
  #--------------------------------------------------------------------------
  # ● Update Auto Target Shoot
  #--------------------------------------------------------------------------
  def update_auto_target_shoot
      return if $game_temp.xas_target_time == 0
      return if $game_temp.xas_target_shoot_id == 0
      return if $game_temp.xas_target_x == 0 and $game_temp.xas_target_y == 0   
      $game_temp.xas_target_time -= 1
      if $game_temp.xas_target_time == 0
         self.shoot($game_temp.xas_target_shoot_id)
         $game_temp.xas_target_shoot_id = 0
      end   
  end   
  
#--------------------------------------------------------------------------
# ● Dash?
#--------------------------------------------------------------------------            
alias x_dash dash?
def dash?   
     return false if XAS_SYSTEM::DASH_SYSTEM
     x_dash
end

#--------------------------------------------------------------------------
# ● Can Dash?
#--------------------------------------------------------------------------              
def can_dash?
     return false unless XAS_BUTTON::ENABLE_DASH_BUTTON
     return false if self.battler.shield
     return true if Input.press?(XAS_BUTTON::DASH_BUTTON)
     @dash_active = false
     return false
end

#--------------------------------------------------------------------------
# ● Update Dash Command
#--------------------------------------------------------------------------            
def update_dash_button
     return unless can_dash?
     @dash_active = true
     @anime_count -= 0.5 if moving?
     update_dash_sprite_name
end  

#--------------------------------------------------------------------------
# ● Update Dash Sprite Name
#--------------------------------------------------------------------------              
def update_dash_sprite_name
     make_pose("_Dash", 2)
end

end


#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ TOOL - INITIALIZE
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#===============================================================================
# ■ Game_Map
#===============================================================================
class Game_Map
  
  attr_accessor :need_refresh_token

  #--------------------------------------------------------------------------
  # ● need_add_tokens
  #--------------------------------------------------------------------------  
  def need_add_tokens
      @need_add_tokens = [] if @need_add_tokens == nil
      return @need_add_tokens
  end
  
  #--------------------------------------------------------------------------
  # ● need_remove_tokens
  #--------------------------------------------------------------------------
  def need_remove_tokens
      @need_remove_tokens = [] if @need_remove_tokens == nil
      return @need_remove_tokens
  end
  
  #--------------------------------------------------------------------------
  # ● add_token
  #--------------------------------------------------------------------------
  def add_token(token_event)
      $game_temp.tool_event = [] if $game_temp.tool_event == nil
      $game_temp.tool_event.push(token_event)
      self.need_add_tokens.push(token_event)
      self.need_refresh_token = true
  end
  
  #--------------------------------------------------------------------------
  # ● remove_token
  #--------------------------------------------------------------------------
  def remove_token(token_event)
      @events.delete(token_event.id)
      self.need_remove_tokens.push(token_event)
      self.need_refresh_token = true
  end

  #--------------------------------------------------------------------------
  # ● clear_tokens
  #--------------------------------------------------------------------------
  def clear_tokens
      $game_system.tools_on_map.clear
      $game_system.tools_on_map = []
      for event in @events.values.dup
          remove_token(event) if event.is_a?(Token_Event)
      end
      channels = ["A", "B", "C", "D"]
      for id in 1001..(token_id_shift - 1)
          for a in channels
              key = [self.map_id, id, a]
              $game_self_switches.delete(key)
          end
      end
      clear_token_id
  end
   
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  alias x_temp_tool_hash_update update
  def update(main = false)
      x_temp_tool_hash_update(main)
      update_add_tool_hash
  end

  #--------------------------------------------------------------------------
  # ● Update Add Toll Hash
  #--------------------------------------------------------------------------      
  def update_add_tool_hash  
      return if $game_temp.tool_event == nil
      for i in $game_temp.tool_event
          $game_map.events[i.id] = i
          execute_tool_effects_hash(i)
      end  
      $game_temp.tool_event.clear
      $game_temp.tool_event = nil
  end
   
  #--------------------------------------------------------------------------
  # ● Execute Toll Effects Hash
  #--------------------------------------------------------------------------        
  def execute_tool_effects_hash(i)
      
  end  
end

#===============================================================================
# ■ Game_SelfSwitches  
#===============================================================================
class Game_SelfSwitches
  def delete(key)
      @data.delete(key)
  end
end

#===============================================================================
# ■ Game_Map  
#===============================================================================
class Game_Map
   
  attr_accessor :token_id
  
  #--------------------------------------------------------------------------
  # ● token_id_shift
  #--------------------------------------------------------------------------  
  def token_id_shift
      @token_id  = 1000 if @token_id == nil
      @token_id += 1
      return @token_id
  end

  #--------------------------------------------------------------------------
  # ● clear_token_id
  #--------------------------------------------------------------------------  
  def clear_token_id
      @token_id = nil
  end
end

#===============================================================================
# ■ XRXS_CTS_RefreshToken
#===============================================================================
module XRXS_CTS_RefreshToken
  
  #--------------------------------------------------------------------------
  # ● refresh_token
  #--------------------------------------------------------------------------  
  def refresh_token
      for event in $game_map.need_add_tokens
          @character_sprites.push(Sprite_Character.new(@viewport1, event))
      end
      $game_map.need_add_tokens.clear
      for sprite in @character_sprites.dup
          if $game_map.need_remove_tokens.empty?
             break
          end
          if $game_map.need_remove_tokens.delete(sprite.character)
             @character_sprites.delete(sprite)
             sprite.dispose
          end
      end
      $game_map.need_refresh_token = false
  end
end

#===============================================================================
# ■  Spriteset_Map
#===============================================================================
class Spriteset_Map
  include XRXS_CTS_RefreshToken
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------   
  alias x_smap_initialize initialize
  def initialize
      setup_start
      x_smap_initialize
  end
  
  #--------------------------------------------------------------------------
  # ● Setup Start
  #--------------------------------------------------------------------------      
  def setup_start
      $game_player.reset_old_level(true)
  end
  
end

#===============================================================================
# ■ Game_Player
#===============================================================================
class Game_Player < Game_Character

  #--------------------------------------------------------------------------
  # ● x_reserve_transfer
  #--------------------------------------------------------------------------     
  alias x_reserve_transfer reserve_transfer
  def reserve_transfer(map_id, x, y, direction)
      $game_map.clear_tokens
      if $game_temp.tool_event != nil
         $game_temp.tool_event.clear
         $game_temp.tool_event = nil
      end   
      x_reserve_transfer(map_id, x, y, direction)
  end
  
end

#===============================================================================
# ■ Token_Event
#===============================================================================
class Token_Event < Game_Event
  
  #--------------------------------------------------------------------------
  # ● Token_Event
  #--------------------------------------------------------------------------
  def initialize(map_id, event)
      event.id = $game_map.token_id_shift
      super
  end
  
  #--------------------------------------------------------------------------
  # ● erase
  #--------------------------------------------------------------------------
  def erase
      super
      $game_map.remove_token(self)
  end
end


#===============================================================================
# ■  XRXS_ActionTemplate
#===============================================================================
module XRXS_ActionTemplate
  map_id = XAS_SYSTEM::ACTION_TEMPLATE_MAP_ID
  map = load_data(sprintf("Data/Map%03d.rvdata2", map_id))
  @@events = map.events
end

#===============================================================================
# ■  Token_Event
#===============================================================================
class Token_Event < Game_Event
  include XRXS_ActionTemplate
end

#===============================================================================
# ■  Game_Temp
#===============================================================================
class Game_Temp
  attr_accessor :active_token
end



#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ TOOL - SHOOT COMMAND
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#===============================================================================
# ■ XAS ACTION
#===============================================================================
module XAS_ACTION
  attr_reader   :action
  attr_reader   :erased
  
  #--------------------------------------------------------------------------
  # ● shoot
  #--------------------------------------------------------------------------
  def shoot(action_id = 0)
      return if action_id == 0
      skill = $data_skills[action_id]
      return unless can_shoot?(skill)
      execute_user_effects(skill)
      execute_call_event(action_id)      
      self.action_attachment(action_id)
      execute_set_pose(action_id)
  end

  #--------------------------------------------------------------------------
  # ● Can Shoot
  #--------------------------------------------------------------------------   
  def can_shoot?(skill)
      if self.battler == nil and self.tool_id > 0
         @battler = self.action.user.battler
      end  
      return false if self.battler == nil
      return false if skill == nil
      return true if ignore_can_shoot?(skill)
      enough_cost = true
      return false if tools_on_map?(skill.id)      
      if self.battler.state_mute  
         seal_effect
         return false
      end   
      if self.battler.cast_action[4].between?(1,self.battler.cast_action[1] -1)
         return false
      end
      return false if check_cast_action?(skill)
      return false if check_auto_target_select?(skill)
      unless enough_skill_cost?(skill)
         Audio.se_play("Audio/SE/" + XAS_SOUND::ACTION_COST , 100, 100)
         return false
      end
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● Ignore Can Shoot?     
  #--------------------------------------------------------------------------               
  def ignore_can_shoot?(skill)
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● Tools on Map
  #--------------------------------------------------------------------------              
  def tools_on_map?(skill_id)
      return true if $game_system.tools_on_map.include?(skill_id)
      return false
  end  
  
  #--------------------------------------------------------------------------
  # ● Check Cast Action (修改BY W.S)
  #--------------------------------------------------------------------------            
  def check_cast_action?(skill)
      if self.battler.cast_action[0] != 0
         self.battler.cast_action[0] = 0
         self.battler.cast_action[1] = 0
         self.battler.cast_action[2] = 0
         self.battler.cast_action[3] = 0
         self.battler.cast_action[4] = 0
         return false
      end  
      if (skill.note =~ /<Cast Time = (\d+)>/ or skill.note =~ /<吟唱时间 = (\d+)>/) and
         $game_temp.xas_target_shoot_id == 0 and
         self.force_action_times == 0
         self.battler.cast_action[0] = skill.id
         self.battler.cast_action[1] = $1.to_i rescue 0
         self.battler.cast_action[2] = XAS_ANIMATION::CAST_TIME_ANIMATION_ID
         self.battler.cast_action[3] = 0
         self.battler.cast_action[4] = 0
         self.animation_id = self.battler.cast_action[2]
         return true
      end      
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● Check Auto Target Select(修改BY W.S)
  #--------------------------------------------------------------------------         
  def check_auto_target_select?(skill)
      return false if self.is_a?(Game_Event)
      if skill.note =~ /<Auto Target>/ or skill.note =~ /<瞄准>/
         if $game_temp.xas_target_shoot_id == 0
            $game_temp.xas_target_shoot_id = skill.id
            $game_map.check_events_on_screen
            SceneManager.call(Scene_Target_Select)
            return true
         end         
      end  
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● enough_skill_cost?
  #--------------------------------------------------------------------------         
  def enough_skill_cost?(skill)
      return false unless enough_mp_cost?(skill)         
      return false unless enough_item_cost?(skill)      
      return true
  end
   
  #--------------------------------------------------------------------------
  # ● Enough MP Cost
  #--------------------------------------------------------------------------        
  def enough_mp_cost?(skill)  
      if @force_action_times > 0
         return true if @force_action == "All Shoot"
         return true if @force_action == "Four Shoot"  
         return true if @force_action == "Three Shoot"
         return true if @force_action == "Two Shoot"
      end
      if self.battler.mp < skill.mp_cost
         self.battler.damage = XAS_WORD::NO_MP
         self.battler.damage_pop = true
         return false
      else   
         self.battler.mp -= skill.mp_cost
         return true
      end
      return true
  end  
  
  #--------------------------------------------------------------------------
  # ● Enough MP Cost
  #--------------------------------------------------------------------------      
  def enough_item_cost?(skill)
      return true if self.battler.is_a?(Game_Enemy)
      if @force_action_times > 0
         return true if @force_action == "All Shoot"
         return true if @force_action == "Four Shoot"
         return true if @force_action == "Three Shoot"
         return true if @force_action == "Two Shoot"
       end      
        if skill.note =~ /<Item Cost = (\d+)>/
          skill.note =~ /<Item Cost = (\d+)>/
          elsif skill.note =~ /<道具消耗 = (\d+)>/
          skill.note =~ /<道具消耗 = (\d+)>/
          end
      item_id = $1.to_i
      if item_id != nil and item_id != 0
         item_cost = $data_items[item_id]
         number = $game_party.item_number(item_cost)
         if number == 0 or number == nil
            self.battler.damage = XAS_WORD::NO_ITEM
            self.battler.damage_pop = true
            return false
         else
            $game_party.lose_item(item_cost, 1, false)
            return true
         end            
      end   
      return true
  end   
  
  #--------------------------------------------------------------------------
  # ● Execute User Effects
  #--------------------------------------------------------------------------  
  def execute_user_effects(skill)
      self.battler.shield = false
      #Animation
      if skill.note =~ /<Cast Ani = (\d+)>/ or skill.note =~ /<吟唱动画 = (\d+)>/
         ani_id = $1.to_i     
         if ani_id != nil
            self.animation_id = ani_id
         end   
      end
      unless @force_action_times > 0
          #All Directions
          if skill.note =~ /<All Directions>/ or skill.note =~ /<八方射击>/
             @force_action = "All Shoot"
             @force_action_times = 8        
          elsif skill.note =~ /<Four Directions>/ or skill.note =~ /<四方射击>/
             @force_action = "Four Shoot"
             @force_action_times = 4      
          elsif skill.note =~ /<Three Directions>/ or skill.note =~ /<三向射击>/
             @force_action = "Three Shoot"
             @force_action_times = 3        
          elsif skill.note =~ /<Two Directions>/ or skill.note =~ /<前后射击>/
             @force_action = "Two Shoot"
             @force_action_times = 2         
          end  
      end  
  end
   
  #--------------------------------------------------------------------------
  # ● Execute Set Pose
  #--------------------------------------------------------------------------      
  def execute_set_pose(action_id)
      @action.duration = @action.sunflag
      make_pose(@action.self_motion, @action.sunflag )
      @pattern = 0
      @pattern_count  = 0
      @step_anime = true
      @self_motion = nil      
      self.need_refresh = true if self.is_a?(Game_Player)
  end  
   
  #--------------------------------------------------------------------------
  # ● execute_call_event
  #--------------------------------------------------------------------------  
  def execute_call_event(action_id)
      bullet_token = Token_Bullet.new(self, action_id)
      $game_map.add_token(bullet_token)
      return bullet_token
  end
      
  #--------------------------------------------------------------------------
  # ● action_attachment
  #--------------------------------------------------------------------------
  def action_attachment(action_id)
      @action = Game_Action_XAS.new(self, action_id)
      @action.attachment(action_id)
  end
  
end  


#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ TOOL - SHOOT SETTING
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#===============================================================================
# ■ Game_Action_XAS
#===============================================================================
class Game_Action_XAS
  
  attr_accessor   :user
  attr_accessor   :id                    
  attr_accessor   :attack_id            
  attr_accessor   :attack_range
  attr_accessor   :attack_range_type
  attr_accessor   :hit_events
  attr_accessor   :now_count
  attr_accessor   :pre_now_count
  attr_accessor   :duration
  attr_accessor   :blow_power
  attr_accessor   :piercing
  attr_accessor   :ignore_knockback_invincible
  attr_accessor   :target_invunerable_duration
  attr_accessor   :multi_hit
  attr_accessor   :ally_damage
  attr_accessor   :all_damage
  attr_accessor   :sunflag
  attr_accessor   :self_motion
  attr_accessor   :second_animation_id
  attr_accessor   :third_animation_id
  attr_accessor   :attack_range_type
  attr_accessor   :attack_range_plan
  attr_accessor   :blow_power
  attr_accessor   :ignore_guard
  attr_accessor   :user_invincible  
  attr_accessor   :short_range
  attr_accessor   :first_impact_time
  attr_accessor   :animation_time
  attr_accessor   :duration
  attr_accessor   :item_cost
  attr_accessor   :hit_shake
  attr_accessor   :hit_hold_target
  attr_accessor   :hit_bounce
  attr_accessor   :sticky
  attr_accessor   :reflectable
  attr_accessor   :can_reflect
  attr_accessor   :attack_id_plan
  attr_accessor   :hit_action
  attr_accessor   :fake_id
  attr_accessor   :impact
  
  #--------------------------------------------------------------------------
  # ● initialize
  #--------------------------------------------------------------------------
  def initialize(user, action_id)
      @user        = user
      @id          = action_id
      @now_count   = 0
      @duration    = nil
      @attack_id   = 0
      @attack_range = 0
      @hit_events  = []
      @blow_power  = 0
      @skill = $data_skills[action_id]
      @ignore_knockback_invincible = false
      @multi_hit = false
      @piercing = false
      @all_damage = false
      @ally_damage = false
      @ignore_guard = false
      @sunflag = 10
      @duration = 10
      @self_motion = ""
      @attack_range_type = 1
      @attack_range_plan = 1
      @blow_power = 1
      @first_impact_time  = 0
      @animation_time = []
      @target_invunerable_duration = 10
      @second_animation_id = 0
      @third_animation_id = 0
      @user_invincible = false
      @short_range = false
      @item_cost = 0
      @hit_shake = false
      @hit_hold_target = false
      @hit_bounce = false
      @sticky = false
      @reflectable = false
      @can_reflect = false
      @hit_action = 0
      @fake_id = false
      @impact = true
  end
  
  #--------------------------------------------------------------------------
  # ● attachment (修改 BY W.S)
  #--------------------------------------------------------------------------
  def attachment(action_id)
      @attack_id_plan = [action_id]
      if @skill.note =~ /<Sunflag = (\d+)>/ or /<动作时间 = (\d+)>/
         @sunflag = $1.to_i
      end
      if @skill.note =~ /<Duration = (\d+)>/ or  @skill.note =~ /<存在时间 = (\d+)>/
         @duration = $1.to_i
      end
      if @skill.note =~ /<Pose = (\S+)>/ or @skill.note =~ /<行走图 = (\S+)>/
         @self_motion = $1.to_s
      end
      if @skill.note =~ /<Area = (\w+)>/
         case $1
            when "CROSS"   
               area = 7
            when "WALL"
               area = 6        
            when "FRONTRHOMBUS"  
               area = 5
            when "FRONTSQUARE"
               area = 4
            when "LINE"
               area = 3
            when "SQUARE"
               area = 2               
            else   
               area = 1
             end   
      elsif @skill.note =~ /<区域 = (\w+)>/
         case $1
            when "十字"   
               area = 7
            when "墙"
               area = 6        
            when "半菱形"  
               area = 5
            when "半矩形"
               area = 4
            when "直线"
               area = 3
            when "矩形"
               area = 2               
            else   
               area = 1
         end     
         @attack_range_type = area
       end
      if @skill.note =~ /<Range = (\d+)>/ or  @skill.note =~ /<范围 = (\d+)>/
         @attack_range_plan = [$1.to_i]
      end
      if @skill.note =~ /<Blow Power = (\d+)>/  or @skill.note =~ /<击退格数 = (\d+)>/
         @blow_power = $1.to_i
      end   
      if @skill.note =~ /<Impact Time = (\d+)>/ or   @skill.note =~ /<影响时间 = (\d+)>/ or @skill.note =~  /<Impact Time  = (\d+)>/  
         @first_impact_time = $1.to_i

       end   
      if @skill.note =~ /<Animation Time = (\d+) - (\d+)>/ or @skill.note =~ /<动画时间 = (\d+) - (\d+)>/
         @animation_time[0] = $1.to_i
         @animation_time[1] = $2.to_i
      end
      if @skill.note =~ /<Target Invunerable = (\d+)>/ or @skill.note =~ /<伤害间隔 = (\d+)>/
         @target_invunerable_duration = $1.to_i
      end  
      if @skill.note =~ /<Tool Hit Ani = (\d+)>/ or @skill.note =~ /<击中动画 = (\d+)>/      
         @second_animation_id = $1.to_i
      end         
      if @skill.note =~ /<User Hit Ani = (\d+)>/ or @skill.note =~ /<使用动画 = (\d+)>/      
         @third_animation_id = $1.to_i
      end   
      if @skill.note =~ /<Item Cost = (\d+)>/  or   @skill.note =~ /<消耗道具 = (\d+)>/
         @item_cost = $1.to_i
      end         
      if @skill.note =~ /<Link Action ID = (\d+)>/  or @skill.note =~ /<连接技能ID = (\d+)>/ or @skill.note =~ /<连接技能 = (\d+)>/
         if user.battler != nil
            user.battler.x_combo[0] = $1.to_i
            user.battler.x_combo[2] = @sunflag + 20
         end
      else     
         if user.battler != nil
            user.battler.x_combo[0] = 0
            user.battler.x_combo[1] = 0
            user.battler.x_combo[2] = 0
         end            
      end   
      if @skill.note =~ /<Hit Action ID = (\d+)>/ or @skill.note =~ /<攻击动作ID = (\d+)>/
         @hit_action = $1.to_i
      end
      if @skill.note =~ /<Ignore Knockback>/ or @skill.note =~ /<忽略击倒>/ or @skill.note =~ /<忽略击破>/
         @ignore_knockback_invincible = true
      end      
      if @skill.note =~ /<Multi Hit>/ or @skill.note =~ /<多次连击>/ or @skill.note =~ /<多重连击>/
         @multi_hit = true  
      end         
      if @skill.note =~ /<Piercing>/ or @skill.note =~ /<贯穿>/
         @piercing = true
      end
      if @skill.note =~ /<All Damage>/ or @skill.note =~ /<全域化>/
         @all_damage = true
      end
      if @skill.note =~ /<Ally Damage>/ or @skill.note =~ /<己方伤害>/
         @ally_damage = true
      end      
      if @skill.note =~ /<User Invincible>/ or @skill.note =~ /<使用者无敌>/
         @user_invincible = true
      end      
      if @skill.note =~ /<Ignore Guard>/ or @skill.note =~ /<忽略防御>/
         @ignore_guard = true
      end      
      if @skill.note =~ /<One Action>/ or @skill.note =~ /<等待结束>/ or @skill.note =~ /<等待完成>/
         unless $game_system.tools_on_map.include?(action_id)   
                $game_system.tools_on_map.push(action_id)
         end
      end      
      if @skill.note =~ /<Shake>/ or @skill.note =~ /<震动>/ or @skill.note =~ /<地震>/
         @hit_shake = true
      end
      if @skill.note =~ /<User Range>/ or @skill.note =~ /<使用者属性>/
         @short_range = true
      end      
      if @skill.note =~ /<Hit Hold Target>/ or @skill.note =~ /<按键持续>/
         @hit_hold_target = true
      end        
      if @skill.note =~ /<Hit Sticky Target>/ or @skill.note =~ /<追踪>/
         @sticky = true
      end        
      if @skill.note =~ /<Hit Bounce Direction>/ or @skill.note =~ /<击中转向>/
         @hit_bounce = true
      end   
      if @skill.note =~ /<Reflectable>/ or @skill.note =~ /<允许反射>/
         @reflectable = true
      end        
      if @skill.note =~ /<Can Reflect>/ or @skill.note =~ /<允许反击>/
         @can_reflect = true
      end  
      if @skill.note =~ /<Disable Hit>/ or @skill.note =~ /<不计入连击>/
         @impact = false
      end
      @sunflag = 1 if @sunflag <= 0
  end
  
  #--------------------------------------------------------------------------
  # ● update
  #--------------------------------------------------------------------------
  def update
      @first_impact_time -= 1 if @first_impact_time > 0
      if @attack_id_plan != nil
         id = @attack_id_plan[@now_count]
         unless id.nil?
           @attack_id = id
           @hit_events.clear
           @hit_events.push(self.user) unless @all_damage or @ally_damage
         end
      end
      if @attack_range_plan != nil
         range = @attack_range_plan[@now_count]
         @attack_range = range unless range.nil?
      end
      @now_count += 1
  end  
  
  #--------------------------------------------------------------------------
  # ● done?
  #--------------------------------------------------------------------------
  def done?
      return (self.duration.to_i > 0 and self.now_count >= self.duration)
  end
end

#===============================================================================
# ■ Token_Bullet  
#===============================================================================
class Token_Bullet < Token_Event
include XRXS_ActionTemplate
  #--------------------------------------------------------------------------
  # ● initialize
  #--------------------------------------------------------------------------
  def initialize(user, action_id)
      event_id = action_id
      skill = $data_skills[action_id]
      if skill.note =~ /<Event ID = (\d+)>/ or skill.note =~ /<事件ID = (\d+)>/
         event_id = $1.to_i
      end  
      original_event = @@events[event_id]
      if original_event == nil
         msgbox("这里没有 对应的事件 ID " + event_id.to_s + " 在 Tool Map中!")
         SceneManager.exit
         return
      end  
      event = original_event.dup
      event.x = user.x
      event.y = user.y
      pre_direction = event.pages[0].graphic.direction
      event.pages[0].graphic.direction = user.direction
      @character_name = event.pages[0].graphic
      super($game_map.map_id, event)
      self.action_attachment(action_id)
      self.tool_id = action_id
      self.diagonal = false
      self.diagonal_direction = 0
      self.sprite_angle_enable = false
      @action.user = user
      @remain_for_an_act = @action.duration.is_a?(Numeric)
      check_tool_effects(user,skill,pre_direction)
  end
  
  #--------------------------------------------------------------------------
  # ● update
  #--------------------------------------------------------------------------
  def update
      super
      if @action == nil and @remain_for_an_act
         erase
         $game_system.tools_on_map.delete(self.tool_id)
      end
      check_event_trigger_attack
  end
end

#===============================================================================
# ■ Game Player
#===============================================================================
class Game_Player < Game_Character
  attr_accessor :need_refresh
end

#===============================================================================
# ■ Token_Bullet  
#===============================================================================
class Token_Bullet < Token_Event
  
  #--------------------------------------------------------------------------
  # ● Check Tool Effects
  #--------------------------------------------------------------------------
  def check_tool_effects(user,skill,pre_direction)
      if @action.ally_damage or @action.all_damage   
         user.battler.invunerable_duration = 0
      end
     # Force Update Out Screen
     if user.battler.sensor_range >= 15 or
        skill.note =~ /<Update Out Screen>/ or skill.note =~ /<屏幕外刷新>/
        self.force_update = true
     end  
     #Diagonal Effect
     if skill.note =~ /<Diagonal>/ or skill.note =~ /<斜角>/ or
        skill.note =~ /<All Direction>/ or skill.note =~ /<八方射击>/ or
        skill.note =~ /<Three Direction>/ or skill.note =~ /<三向射击>/
        self.diagonal = true
        self.diagonal_direction = user.diagonal_direction
        self.sprite_angle_enable = true
        user.diagonal_time = XAS_BA::DIAGONAL_DURATION if user.diagonal_direction != 0
        user.diagonal = true if user.tool_id > 0        
     end
     #Auto Target
     if skill.note =~ /<Auto Target>/ or skill.note =~ /<瞄准>/
        if user.is_a?(Game_Event)
           self.moveto($game_player.x, $game_player.y)
        else  
           moveto($game_temp.xas_target_x, $game_temp.xas_target_y)
           $game_temp.xas_target_x = 0
           $game_temp.xas_target_y = 0      
           $game_temp.xas_target_time = 0
           $game_temp.xas_target_shoot_id = 0
        end   
     end
     #Barrier
     if skill.note =~ /<Barrier>/ or skill.note =~ /<跟随>/ or skill.note =~ /<跟随角色>/
        self.tool_effect = "Barrier"
     end
     #Boomerang
     if skill.note =~ /<Boomerang = (\d+)>/ or skill.note =~ /<回旋镖 = (\d+)>/
        self.tool_effect = "Boomerang"
        self.action.duration = 1000
        self.diagonal = true
        self.diagonal_direction = user.diagonal_direction
        self.force_update = true
        @move_frequency = 6
        @move_speed = 5
        @direction_fix = false
        @walk_anime = true
        @step_anime = true
        @force_action = "Forward"
        @force_action_times = $1.to_i
     end     
      
   end
end



#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ TOOL - AREA
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#===============================================================================
# ■ XAS ACTION
#===============================================================================
module XAS_ACTION

  #--------------------------------------------------------------------------
  # ● action_update
  #--------------------------------------------------------------------------
  def action_update
      return unless @action.is_a?(Game_Action_XAS)
      if @action.animation_time != [] and
         @action.animation_time[0] == @action.now_count
         animation_id = @action.animation_time[1]
         unless self.is_a?(Game_Player) or self.tool_id == 0
             self.animation_id = animation_id
         end
      end
      @action.update
  end
   
  #--------------------------------------------------------------------------
  # ● Can Impact Target
  #--------------------------------------------------------------------------  
  def can_impact_target?
      return false if @action.nil?
      return false if @action.attack_id == 0
      return false if @action.first_impact_time > 0
      return false if @action.impact == false
      return false if self.jumping?
      return true
  end  
  
  #--------------------------------------------------------------------------
  # ● check_event_trigger_attack
  #--------------------------------------------------------------------------
  def check_event_trigger_attack()
      return unless can_impact_target?
      hit_check = false
      range = @action.attack_range
      hit = []
      targets = [$game_player] + $game_map.events.values
      for event in targets
        next if event == self or
                @action.hit_events.include?(event) or event.erased
        body_size      = event.body_size
        event_center_x = event.x
        event_center_y = event.y - body_size
        if @action.short_range
           dx = event_center_x - $game_player.x
           dy = event_center_y - $game_player.y
        else
           dx = event_center_x - self.x
           dy = event_center_y - self.y
         end
        dx = (dx >= 0 ? [dx - body_size, 0].max : [dx + body_size, 0].min)
        dy = (dy >= 0 ? [dy - body_size, 0].max : [dy + body_size, 0].min)
        hit_check = true if in_range?(dx,dy,event,range)
        hit.push(event) if hit_check
        hit_check = false
      end
      for event in hit
          if event.action_effect(self, self.action.attack_id)
             hit_check = true
          end
          if event.action_effect_page(self, self.action.attack_id)
             hit_check = true
         end         
         @action.hit_events.push(event) unless @action.multi_hit
         end
      if hit_check
         $game_temp.active_token = self
      end
  end

  #--------------------------------------------------------------------------
  # ● In Range?
  #--------------------------------------------------------------------------  
  def in_range?(dx,dy,event,range)
      case @action.attack_range_type
            when 1 #RHOMBUS
              return true if (dx.abs + dy.abs <= range)
            when 2 #SQUARE
              return true if (dx.abs <= range and dy.abs <= range)
            when 3 #LINE
              case self.direction
                  when 2
                    return true if (dx == 0 and dy >= 0 and dy <= range)
                  when 8
                    return true if (dx == 0 and dy <= 0 and dy >= -range)
                  when 6
                    return true if (dy == 0 and dx >= 0 and dx <= range)
                  when 4
                    return true if (dy == 0 and dx <= 0 and dx >= -range)
              end
            when 4  #FRONT SQUARE   
              case self.direction
                 when 2
                    return true if (dx.abs <= range and dy >= 0 and dy.abs <= range)
                 when 4
                    return true if (dx.abs <= range and dx <= 0 and dy.abs <= range)  
                 when 6
                    return true if (dx.abs <= range and dx >= 0 and dy.abs <= range)
                 when 8
                    return true if (dx.abs <= range and dy <= 0 and dy.abs <= range)
              end              
            when 5  #FRONT RHOMBUS     
              case self.direction
                  when 2
                    return true if (dx.abs + dy.abs <= range and dy >= 0)
                  when 8
                    return true if (dx.abs + dy.abs <= range and dy <= 0)
                  when 6
                    return true if (dx.abs + dy.abs <= range and dx >= 0)
                  when 4
                    return true if (dx.abs + dy.abs <= range and dx <= 0)
              end         
            when 6  #WALL
              case self.direction
                 when 2
                    return true if (dx.abs <= range and dy == 0 )
                 when 4
                    return true if (dy.abs <= range and dx == 0)  
                 when 6
                    return true if (dy.abs <= range and dx == 0)
                 when 8
                    return true if (dx.abs <= range and dy == 0)
               end  
            when 7 #CROSS
                 return true if (dx.abs <= range and dy == 0)
                 return true if (dy.abs <= range and dx == 0)  
            end
     return false      
  end      
  
  #--------------------------------------------------------------------------
  # ●  action_effect Page
  #--------------------------------------------------------------------------
  def action_effect_page(attacker, attack_id)
      return false unless self.is_a?(Game_Event)
      return false if attacker.action.fake_id
      if attacker.action != nil
         check_auto_effect_page(attacker, attack_id)
         check_reflectable_skills(attacker, attack_id)
      end
      for page in @event.pages
          if page.condition.variable_valid and
             page.condition.variable_id == XAS_SYSTEM::HIT_ID and
             page.condition.variable_value == attack_id
             self.reaction_valid_attack_id = attack_id
             self.refresh
             @trigger = 0
             self.start
             return true
          end
      end
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● Check Reflectable Skills
  #--------------------------------------------------------------------------   
  def check_reflectable_skills(attacker, attack_id)
      return if self.tool_id == 0
      return unless self.action.reflectable
      return unless attacker.action.can_reflect
      self.action.user = attacker.action.user
      self.action.hit_events = []  
      self.turn_back
  end  
  
  #--------------------------------------------------------------------------
  # ● Check Auto Effect Page
  #--------------------------------------------------------------------------  
  def check_auto_effect_page(attacker, attack_id)
      if self.treasure_time > 0
         if can_hit_take_treasure?(attacker, attack_id)
            execute_take_treasure(attacker, attack_id)
         elsif self.temp_id == 0 and can_hold_treasure?(attacker, attack_id)   
            execute_hold_treasure(attacker, attack_id)
         end  
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Can Hit Take Treasure
  #--------------------------------------------------------------------------      
  def can_hit_take_treasure?(attacker, attack_id)
      return true if attacker.action.short_range
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● Can Hold Treasure?
  #--------------------------------------------------------------------------        
  def can_hold_treasure?(attacker, attack_id)
      return true if attacker.tool_effect == "Boomerang"   
      return false
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Hold Treasure
  #--------------------------------------------------------------------------      
  def execute_hold_treasure(attacker, attack_id)
      tr_time = (100 + XAS_BA::TREASURE_ERASE_TIME * 60) - 20
      return if self.treasure_time > tr_time
      self.temp_id = attacker.id   
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Take Treasure
  #--------------------------------------------------------------------------      
  def execute_take_treasure(attacker, attack_id)
      tr_time = (100 + XAS_BA::TREASURE_ERASE_TIME * 60) - 20
      return if self.treasure_time > tr_time
      self.x = $game_player.x
      self.y = $game_player.y
  end

  #--------------------------------------------------------------------------
  # ● body_size
  #--------------------------------------------------------------------------
  def body_size
      return 0
  end
  
  #--------------------------------------------------------------------------
  # ● action_clear
  #--------------------------------------------------------------------------
  def action_clear
      @action = nil
      @step_anime = false
  end
end

#===============================================================================
# ■ Game_Character
#===============================================================================
class Game_Character < Game_CharacterBase
    include XAS_ACTION
end

#===============================================================================
# ■  Game_Event
#===============================================================================
class Game_Event < Game_Character

  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  alias x_conditions_met conditions_met?
  def conditions_met?(page)
      c = page.condition
      if c.variable_valid
         if c.variable_id == XAS_SYSTEM::HIT_ID and
            c.variable_value == self.reaction_valid_attack_id
            return true
         end
       end
      x_conditions_met(page)
  end
  
end  

#===============================================================================
# ■  XAS_Dispose
#===============================================================================
module XAS_Dispose
  
  #--------------------------------------------------------------------------
  # ● update
  #--------------------------------------------------------------------------  
  def update
      action_update
      super
      if @action.is_a?(Game_Action_XAS) and @action.done?
         self.action_clear
      end
  end
end

#===============================================================================
# ■  Game_Player
#===============================================================================
class Game_Player < Game_Character
  include XAS_Dispose
end

#===============================================================================
# ■  Game_Event
#===============================================================================
class Game_Event < Game_Character
  include XAS_Dispose
end

#===============================================================================
# ■ XAS_StopToAction
#===============================================================================
module XAS_StopToAction
  
  #--------------------------------------------------------------------------
  # ● acting?
  #--------------------------------------------------------------------------  
  def acting?
      return false if self.battler == nil
      return true if self.battler.shield
      return true if self.action != nil
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● moving?
  #--------------------------------------------------------------------------  
  def moving?
      return (super or self.acting? or self.stop)
  end
   
end

#===============================================================================
# ■ Game_Player  
#===============================================================================
class Game_Player < Game_Character
  include XAS_StopToAction
end

#===============================================================================
# ■ Game_Event  
#===============================================================================
class Game_Event < Game_Character
  attr_accessor :reaction_valid_attack_id
end


#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ TOOL - HIT EFFECT
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#===============================================================================
# ■ XRXS_BattlerAttachment
#==============================================================================
module XRXS_BattlerAttachment

  #--------------------------------------------------------------------------
  # ● Can Hit Base?
  #--------------------------------------------------------------------------   
  def can_hit_base?(bullet, action_id)
      return false unless $game_system.xas_battle
      return false if self.battler == nil
      return false if bullet == nil
      return false if action_id == nil or action_id <= 0
      return false if self.can_update == false
      return true
  end  
  
  #--------------------------------------------------------------------------
  # ● Action Effect
  #--------------------------------------------------------------------------  
  def action_effect(bullet, action_id)
      return unless can_hit_base?(bullet, action_id)
      skill = $data_skills[action_id]
      user = bullet.action.user
      attacker = (user == nil ? nil : user.battler)     
      tar_invu = bullet.action.target_invunerable_duration
      #CAN HIT?
      return unless action_can_hit_target?(bullet, user, skill,tar_invu)
      #REFLECT STATE
      return if reflect_state?(bullet, skill)
      #SHIELD
      if target_shield_enabled?(attacker, skill, bullet)
         execute_guard_effect(user, skill, bullet, tar_invu)
         return
      end
      #INVUNERABLE ACTIONS
      if target_invunerable_actions?(user, skill, bullet)
         execute_guard_effect(user, skill, bullet, tar_invu, false)
         return
      end   
      #GUARD DIRECTIONS
      if target_guard_directions?(user, skill, bullet)
         execute_guard_effect(user, skill, bullet, tar_invu)
         return        
      end  
      execute_hit_effect(attacker,skill, bullet , user, tar_invu )
      if self.is_a?(Game_Player)
         self.need_refresh = true
      end
  end

  #--------------------------------------------------------------------------
  # ● Reflect State?
  #--------------------------------------------------------------------------                 
  def reflect_state?(bullet, skill)
      if  bullet.action.reflectable and self.battler.state_reflect
          if skill.note =~ /<Auto Target>/ or skill.note =~ /<瞄准>/
             bullet.moveto(bullet.action.user.x,bullet.action.user.y)
          else   
             bullet.turn_back
          end  
          bullet.action.user = self
          bullet.action.hit_events = []           
          bullet.turn_back
#          bullet.jump(0,0)
          bullet.turn_back
          self.battler.damage = XAS_WORD::REFLECT
          self.battler.damage_pop = true
          self.animation_id = XAS_ANIMATION::REFLECT_ANIMATION_ID
          self.battler.invunerable_duration = 20
         return true
     end
     return false     
  end
  
#--------------------------------------------------------------------------
# ● Target Guard Directions?
#--------------------------------------------------------------------------   
def target_guard_directions?(user, skill, bullet)
     return false if self.battler.guard == false
     return false if bullet.action.ignore_guard
     if self.battler.guard_directions.include?(2) and
        ((self.direction == 2 and bullet.direction == 8) or
         (self.direction == 8 and bullet.direction == 2) or
         (self.direction == 6 and bullet.direction == 4) or
         (self.direction == 4 and bullet.direction == 6))
         return true
     elsif self.battler.guard_directions.include?(8) and
        ((self.direction == 8 and bullet.direction == 8) or
         (self.direction == 2 and bullet.direction == 2) or
         (self.direction == 6 and bullet.direction == 6) or
         (self.direction == 4 and bullet.direction == 4))
         return true
     elsif self.battler.guard_directions.include?(4) and
        ((self.direction == 2 and bullet.direction == 4) or
         (self.direction == 8 and bullet.direction == 6) or
         (self.direction == 6 and bullet.direction == 2) or
         (self.direction == 4 and bullet.direction == 8))
         return true         
     elsif self.battler.guard_directions.include?(6) and
        ((self.direction == 2 and bullet.direction == 6) or
         (self.direction == 8 and bullet.direction == 4) or
         (self.direction == 6 and bullet.direction == 8) or
         (self.direction == 4 and bullet.direction == 2))
         return true
     end      
     return false
  end
      
  #--------------------------------------------------------------------------
  # ● Target Invunerable Actions?
  #--------------------------------------------------------------------------            
  def target_invunerable_actions?(user, skill, bullet)
      return true if self.battler.invunerable_actions.include?(skill.id)
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● Shoot Target Shield
  #--------------------------------------------------------------------------         
  def shoot_target_shield?(bullet,user, skill)
      return false unless self.battler.shield
      return false if bullet.action.ignore_guard
      return true if face_direction?(bullet)
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● Action can hit target?
  #--------------------------------------------------------------------------        
  def action_can_hit_target?(bullet, user, skill,tar_invu)
      if user == nil
         return false
      end   
      if self.battler.invunerable
         return false
      end  
      if self.battler.dead?
         return false
      end   
      if self.battler.invunerable_duration > 0
         return false
      end   
      if @knock_back_duration != nil
         return false unless bullet.action.ignore_knockback_invincible
      end
      if bullet.action.first_impact_time > 0
         return false
      end
      if self.action != nil and self.action.user_invincible
         unless self.action.ally_damage and bullet.action.user == self.action.user
             return false
         end
      end  
      unless bullet.action.all_damage
             if bullet.action.ally_damage
                if user.battler.is_a?(Game_Actor)
                   return false if self.battler.is_a?(Game_Enemy)
                elsif user.battler.is_a?(Game_Enemy)
                   return false if self.battler.is_a?(Game_Actor)
                end
             else   
                if user.battler.is_a?(Game_Actor)
                   return false if self.battler.is_a?(Game_Actor)
                elsif user.battler.is_a?(Game_Enemy)
                   return false if self.battler.is_a?(Game_Enemy)
                end                 
             end              
      end
      return false if target_state_invunerable?(tar_invu)
      #return false if target_reflect_action?(bullet, user)
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● Target Relfect Action
  #--------------------------------------------------------------------------         
  def target_reflect_action?(bullet, user)
      return false unless bullet.action.reflectable
      for i in $game_map.events.values
          if i.tool_id > 0 and i.action.can_reflect and
             i.tool_effect == "Barrier"# and i.action.user.battler.is_a?(self.battler)
             bullet.action.user = self
             bullet.action.hit_events = []  
             bullet.turn_back
             return true
             break
          end   
      end
      return false  
  end
  
  #--------------------------------------------------------------------------
  # ● Target State Invunerable
  #--------------------------------------------------------------------------        
  def target_state_invunerable?(tar_invu)
      if self.battler.state_invunerable
         self.battler.damage = XAS_WORD::INVINCIBLE
         self.battler.damage_pop = true
         self.animation_id = XAS_ANIMATION::INVINCIBLE_ANIMATION_ID
         self.battler.invunerable_duration = tar_invu
         return true
      end
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Hit Effect
  #--------------------------------------------------------------------------      
  def execute_hit_effect(attacker,skill, bullet , user, tar_invu)
      shoot_effect_before_damage(skill, bullet, user)
      execute_battler_skill_effect(attacker ,skill, user)
      if target_missed?(attacker)
         self.battler.invunerable_duration = 30
         return
      end            
      execute_damage_pop(attacker,skill)
      shoot_effect_after_damage(skill, bullet, user) if can_damage_after_effect?
      execute_state_effect(skill, user,  bullet)   
      bullet.action.duration = 1 if remove_tool_after_hit?(skill, bullet, user)
      self.battler.invunerable_duration = tar_invu
      execute_blow_effect(skill,bullet) if can_blow_effect?
      execute_animation(skill, bullet, user)
      execute_tool_effects(skill, bullet , user)
  end

  #--------------------------------------------------------------------------
  # ● Execute Tool Effects
  #--------------------------------------------------------------------------              
  def execute_tool_effects(skill, bullet , user)
      execute_sticky_effect(skill, bullet, user)
      execute_bounce_effect(skill, bullet, user)
      execute_hit_action_effect(skill, bullet, user)
  end
   
  #--------------------------------------------------------------------------
  # ● Remove Tool After Hit?
  #--------------------------------------------------------------------------            
  def remove_tool_after_hit?(skill, bullet, user)
      return true if bullet.action.piercing == false
      return false
  end  

  #--------------------------------------------------------------------------
  # ● Execute Battler Skill Effect
  #--------------------------------------------------------------------------         
  def execute_battler_skill_effect(attacker ,skill, user)
      self.battler.item_apply(attacker, skill)
  end
  
  #--------------------------------------------------------------------------
  # ● Target Missed?
  #--------------------------------------------------------------------------        
  def target_missed?(attacker)
      if self.battler.result.missed
         self.battler.damage = XAS_WORD::MISSED
         self.battler.damage_pop = true         
         return true
      end   
      if self.battler.result.evaded
         self.battler.damage = XAS_WORD::EVADED
         self.battler.damage_pop = true            
         return true
      end  
      return false
  end  
  #--------------------------------------------------------------------------
  # ● Shoot Effect Before Damage
  #--------------------------------------------------------------------------        
  def shoot_effect_before_damage(skill, bullet, user)
  end
  
  #--------------------------------------------------------------------------
  # ● Shoot Effect After Damage
  #--------------------------------------------------------------------------         
  def shoot_effect_after_damage(skill, bullet, user)
      check_counter_attack(skill)
      self.battler.passive = false
  end
  
  #--------------------------------------------------------------------------
  # ● Shoot Effect After Damage
  #--------------------------------------------------------------------------            
  def check_counter_attack(skill)
      return if self.battler.is_a?(Game_Actor)
      return if self.battler.counter_action[2] == false
      return if self.battler.counter_action[1] > 0
      counter = XAS_BA_ENEMY::COUNTER_ATTACK[self.battler.enemy_id]
      if counter != nil
         counter_action_id = counter[rand(counter.size)]
         self.battler.counter_action[0] = counter_action_id
         self.battler.counter_action[1] = 15
      end  
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Bounce Effect
  #--------------------------------------------------------------------------            
  def execute_bounce_effect(skill, bullet, user)
      return false if bullet.action.hit_bounce == false
      bullet.bounce_direction
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Stick Effect
  #--------------------------------------------------------------------------           
  def execute_sticky_effect(skill, bullet, user)
      return unless bullet.action.sticky
      return if bullet.temp_id !=  0
      bullet.pre_move_speed = bullet.move_speed
      bullet.temp_id = self.id
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Hit Action Effect
  #--------------------------------------------------------------------------            
  def execute_hit_action_effect(skill, bullet, user)
      return if bullet.action.hit_action == 0
      self.battler.invunerable_duration = 1
      bullet.shoot(bullet.action.hit_action)
      bullet.action.duration = 9
      bullet.action.multi_hit = false
      bullet.character_name = ""
      bullet.x_pose_duration = 0
      bullet.x_pose_name = ""
      bullet.x_pose_original_name = ""      
  end
  
  #--------------------------------------------------------------------------
  # ● Can Damage Effect
  #--------------------------------------------------------------------------         
  def can_damage_after_effect?
      return false if self.battler.damage == nil
      return false unless self.battler.damage.is_a?(Numeric)
      return true
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute State Effect
  #--------------------------------------------------------------------------        
  def execute_state_effect(skill, user,  bullet)   
      if user.battler.states.size != 0
         for i in user.battler.states
             execute_state_effect_user(skill, user, bullet,i)
         end   
      end
      if self.battler.states.size != 0
         for i in self.battler.states
             execute_state_effect_target(skill, user, bullet,i)
         end   
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Execute State Effect User
  #--------------------------------------------------------------------------         
  def execute_state_effect_user(skill, user, bullet,i)
  
  end
  
  #--------------------------------------------------------------------------
  # ● Execute State Target
  #--------------------------------------------------------------------------         
  def execute_state_effect_target(skill, user, bullet,i)
      #Sleep
      if self.battler.damage.is_a?(Numeric) and self.battler.damage > 0
         if i.note =~ /<Sleep>/ or  i.note =~ /<睡眠>/
            self.battler.remove_state(i.id)
         end
      end   
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Blow Effect
  #--------------------------------------------------------------------------      
  def execute_blow_effect(skill,bullet)
      if bullet.action.hit_hold_target and self.temp_id == 0     
         self.temp_id = bullet.id
         self.pre_move_speed = self.move_speed         
         self.moveto(bullet.x, bullet.y)
      end   
      $game_map.screen.start_shake(5, 5, 60) if bullet.action.hit_shake
      p = bullet.action.blow_power.to_i  
      d = bullet.direction   
      return if self.battler.damage.to_i <= 0
      return if p < 0
      self.blow(d, p)  
  end
   
  #--------------------------------------------------------------------------
  # ● Execute Animation
  #--------------------------------------------------------------------------        
  def execute_animation(skill, bullet, user)   
      self.animation_id = skill.animation_id
      tool_animation = bullet.action.second_animation_id
      user_animation = bullet.action.third_animation_id
      bullet.animation_id = tool_animation if tool_animation != 0
      user.animation_id = user_animation if user_animation != 0
  end  
   
  #--------------------------------------------------------------------------
  # ● Knock Back Disable
  #--------------------------------------------------------------------------      
  def knock_back_disable
    return false
  end
  
  #--------------------------------------------------------------------------
  # ● Dead?
  #--------------------------------------------------------------------------         
  def dead?
    return self.battler == nil ? false : self.battler.dead?
  end
  
end


#===============================================================================
# ■ XRXS_BattlerAttachment
#==============================================================================
module XRXS_BattlerAttachment

  #--------------------------------------------------------------------------
  # ● Shoot Target Shield
  #--------------------------------------------------------------------------         
  def target_shield_enabled?(attacker, skill, bullet)
      return false unless self.battler.shield
      if bullet != nil
         return false if bullet.action.ignore_guard
         return true if face_direction?(bullet)         
      else   
         return false if attacker.battler.ignore_guard
         return true if face_direction?(attacker)         
      end  
      return false
  end  

  #--------------------------------------------------------------------------
  # ● Can Blow Effect
  #--------------------------------------------------------------------------        
  def can_blow_effect?
      return false if self.battler.no_knockback
      return false if $game_map.interpreter.running?
      return true
  end  

#--------------------------------------------------------------------------
# ● Execute Guard Effect
#--------------------------------------------------------------------------      
def execute_guard_effect(attacker, skill, bullet, inv, erase_bullet = true)
     self.battler.invunerable_duration = inv
     damage_pop(XAS_WORD::GUARD)
     guard_animation_id = XAS_ANIMATION::GUARD_ANIMATION_ID
     self.animation_id = guard_animation_id if guard_animation_id != 0   
     if bullet != nil
        bullet.erase if erase_bullet
     else   
        blow_reverse(attacker) unless attacker.battler.no_knockback
     end   
end
   
#--------------------------------------------------------------------------
# ● Blow Reverse
#--------------------------------------------------------------------------      
def blow_reverse(attacker)
     return if attacker.battler.no_knockback
     case attacker.direction
        when 2
           d = 8
        when 4
           d = 6
        when 6
           d = 4
        when 8  
           d = 2
     end
     attacker.jump(0,0)   
     attacker.blow(d,1)
end

#--------------------------------------------------------------------------
# ● Can Attack Effect
#--------------------------------------------------------------------------      
def damage_pop(text)
     return unless XAS_WORD::ENABLE_WORD
     self.battler.damage = text
     self.battler.damage_pop = true
end

#--------------------------------------------------------------------------
# ● Shd Direction?
#--------------------------------------------------------------------------      
def face_direction?(attacker)
     target = self.direction  
     case target
          when 2
             return true if attacker.direction == 8
          when 4
             return true if attacker.direction == 6
          when 6
             return true if attacker.direction == 4
          when 8  
             return true if attacker.direction == 2     
     end
     return false
end   

#--------------------------------------------------------------------------
# ● Execute Damage Pop
#--------------------------------------------------------------------------      
def execute_damage_pop(attacker,skill = nil)
     if skill != nil
        return  if  skill.note =~ /<伤害隐藏>/
        if skill.damage.to_mp?
           dam = self.battler.result.mp_damage
           self.battler.damage_type = "Mp"      
        elsif skill.damage.to_hp?
           dam = self.battler.result.hp_damage
           self.battler.damage_type = "Critical"  if self.battler.result.critical
        end   
        if dam != nil
           if skill.damage.drain? or skill.damage.drain?
              attacker.damage = -dam
              attacker.damage_type = self.battler.damage_type
              attacker.damage_pop = true
           end  
           self.battler.damage = dam
           self.battler.damage_pop = true
        end
     else
        if self.battler.result.hp_damage != nil
           self.battler.damage = self.battler.result.hp_damage
           self.battler.damage_type = "Critical" if self.battler.result.critical   
           self.battler.damage_pop = true      
        end   
     end  
end  

end   



#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ TOOL - EQUIP
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#==============================================================================
# ■ Window Skill List
#==============================================================================
class Window_SkillList < Window_Selectable
  
  #--------------------------------------------------------------------------
  # ● Process OK
  #--------------------------------------------------------------------------                  
  alias x_skill_process_ok process_ok
  def process_ok
      return if can_equip_skill_action?
      x_skill_process_ok
  end

  #--------------------------------------------------------------------------
  # ● Can Equip Skill Action
  #--------------------------------------------------------------------------                     
  def can_equip_skill_action?
      return false if $game_party.in_battle
      skill = @data[index]
      if skill != nil and ( skill.note =~ /<Duration = (\d+)>/ or skill.note =~ /<存在时间 = (\d+)>/)
         @actor.skill_id = skill.id
         Sound.play_equip
         return true         
      end
      return false
  end
  
end

#==============================================================================
# ■ Window Item List
#==============================================================================
class Window_ItemList < Window_Selectable
  
  #--------------------------------------------------------------------------
  # ● Process OK
  #--------------------------------------------------------------------------                  
  alias x_item_process_ok process_ok
  def process_ok
      return if can_equip_item_action?
      x_item_process_ok
  end

  #--------------------------------------------------------------------------
  # ● Can Equip Item Action
  #--------------------------------------------------------------------------                     
  def can_equip_item_action?
      return false if $game_party.in_battle
      item = @data[index]
      if item != nil and item.is_a?(RPG::Item) and
        (item.note =~ /<Action ID = (\d+)>/ or item.note =~ /<动作ID = (\d+)>/)
         actor = $game_party.members[0]
         actor.item_id = item.id
         Sound.play_equip
         return true         
      end
      return false
  end
  
end



#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ BATTLER - INITIALIZE
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#===============================================================================
# ■ Game Character
#==============================================================================
class Game_Character < Game_CharacterBase
  
  #--------------------------------------------------------------------------
  # ● Update Battler
  #--------------------------------------------------------------------------      
  def update_battler
      update_battler_pose
      update_battler_parameters
      update_battler_stop_movement
      update_battler_knockbacking
      update_battler_counter_action
      unless self.battler.hp == 0
          update_battler_cast_action   
          update_battler_move_speed if can_update_battler_move_speed?
          update_battler_states_effect
          update_battler_attacking
      else
          update_battler_defeat_process
      end
  end  

end

#===============================================================================
# ■ Game Player
#===============================================================================
class Game_Player < Game_Character
  include XRXS_BattlerAttachment
  
  #--------------------------------------------------------------------------
  # ● Battler
  #--------------------------------------------------------------------------  
  def battler
      return $game_party.members[0]
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Interpreter Effect
  #--------------------------------------------------------------------------        
  def refresh_interpreter_effect
      $game_system.old_interpreter_running = $game_map.interpreter.running?
      if $game_system.old_interpreter_running
         $game_temp.reset_battler_time = 60 * 4
      end  
      reset_battler_setting  
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Battler Setting Time
  #--------------------------------------------------------------------------           
  def update_reset_battler_setting_time
      return if $game_temp.reset_battler_time == 0
      $game_temp.reset_battler_time -= 1
      reset_battler_setting_running if $game_temp.reset_battler_time == 0
  end
  
  #--------------------------------------------------------------------------
  # ● Update Battler Setting
  #--------------------------------------------------------------------------         
  def reset_battler_setting
      reset_player_parameters
      for ally in $game_party.members
         reset_members_parameters(ally)
      end
      for enemy in $game_map.events.values
          reset_enemies_parameters(enemy) if enemy.battler != nil
      end   
      $game_map.need_refresh = true  
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Battler Setting Running
  #--------------------------------------------------------------------------         
  def reset_battler_setting_running
      reset_player_parameters_running
      for ally in $game_party.members
         reset_members_parameters_running(ally)
      end
      for enemy in $game_map.events.values
          reset_enemies_parameters(enemy) if enemy.battler != nil
      end   
      $game_map.need_refresh = true  
  end   
  
  #--------------------------------------------------------------------------
  # ● Reset Enemies Parameters
  #--------------------------------------------------------------------------         
  def reset_enemies_parameters(enemy)
      enemy.battler.cast_action[0] = 0
      enemy.battler.cast_action[1] = 0
      enemy.battler.cast_action[2] = 0
      enemy.battler.cast_action[3] = 0  
      enemy.battler.cast_action[4] = 0
      enemy.battler.counter_action[0] = 0
      enemy.battler.counter_action[1] = 0
      enemy.battler.counter_action[2] = true
      enemy.battler.invunerable_duration = 0
      enemy.knock_back_duration = nil
  end  
  
  #--------------------------------------------------------------------------
  # ● Reset Members Parameters
  #--------------------------------------------------------------------------         
  def reset_members_parameters(ally)
      ally.old_level = ally.level
      ally.shield = false
      ally.x_charge_action[0] = 0
      ally.x_charge_action[1] = 0
      ally.x_charge_action[2] = 0
      ally.x_charge_action[3] = 0
      ally.cast_action[0] = 0
      ally.cast_action[1] = 0
      ally.cast_action[2] = 0
      ally.cast_action[3] = 0  
      ally.cast_action[4] = 0
      ally.counter_action[0] = 0
      ally.counter_action[1] = 0
      ally.counter_action[2] = true
      ally.invunerable_duration = 0
  end
  
  #--------------------------------------------------------------------------
  # ● Reset Player Parameters
  #--------------------------------------------------------------------------         
  def reset_player_parameters
      make_pose("", 1) unless $game_player.action != nil
      $game_temp.xas_target_time = 0
      $game_temp.xas_target_shoot_id = 0
      $game_temp.xas_target_x = 0      
      @knock_back_duration = nil
      @dash_active = false
  end
   
  
  #--------------------------------------------------------------------------
  # ● Reset Members Parameters Running
  #--------------------------------------------------------------------------         
  def reset_members_parameters_running(ally)
      ally.old_level = ally.level
      ally.shield = false
      unless ally.x_charge_action[1] > 0
      ally.x_charge_action[0] = 0
      ally.x_charge_action[1] = 0
      ally.x_charge_action[2] = 0
      ally.x_charge_action[3] = 0
      end
      unless ally.cast_action[1] > 0
         ally.cast_action[0] = 0
         ally.cast_action[1] = 0
         ally.cast_action[2] = 0
         ally.cast_action[3] = 0  
         ally.cast_action[4] = 0
      end
      ally.counter_action[0] = 0
      ally.counter_action[1] = 0
      ally.counter_action[2] = true
      ally.invunerable_duration = 0
  end
  
  #--------------------------------------------------------------------------
  # ● Reset Player Parameters Running
  #--------------------------------------------------------------------------         
  def reset_player_parameters_running
      $game_temp.xas_target_time = 0
      $game_temp.xas_target_shoot_id = 0
      $game_temp.xas_target_x = 0      
      @knock_back_duration = nil
      @dash_active = false
  end
  
end

#===============================================================================
# ■ Game Follower
#===============================================================================
class Game_Follower < Game_Character
  include XRXS_BattlerAttachment
  
  #--------------------------------------------------------------------------
  # ● Battler
  #--------------------------------------------------------------------------   
  def battler
      return $game_party.members[@member_index]
  end
end

#===============================================================================
# ■ Game Follower
#===============================================================================
class Game_Followers
  include XRXS_BattlerAttachment
  
  #--------------------------------------------------------------------------
  # ● Battler
  #--------------------------------------------------------------------------   
  def battler
      return $game_party.members[@member_index]
  end
end
#===============================================================================
# ■ Game_Vehicle
#===============================================================================
class Game_Vehicle < Game_Character
  include XRXS_BattlerAttachment
  attr_reader   :collision_attack
  
  #--------------------------------------------------------------------------
  # ● Battler
  #--------------------------------------------------------------------------      
  def battler
     return @battler
  end  
end  

#===============================================================================
# ■ Game Event
#===============================================================================
class Game_Event < Game_Character
  
  include XRXS_BattlerAttachment
  
  #--------------------------------------------------------------------------
  # ● Battler
  #--------------------------------------------------------------------------   
  def battler
    return @battler
  end
  
#--------------------------------------------------------------------------
# ● Battler?
#--------------------------------------------------------------------------           
def battler?
     return false if self.erased
     return false if self.battler == nil
     return false if self.dead?
     return false if self.battler.no_damage_pop
     return false if self.battler.invunerable
     return true
end  

  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------   
  alias xrxs64c_refresh refresh
  def refresh
      xrxs64c_refresh
      self.battler_recheck
  end
   
  #--------------------------------------------------------------------------
  # ● Battler Recheck
  #--------------------------------------------------------------------------   
  def battler_recheck
      return if @battler != nil
      return if @page == nil
      if self.name =~ /<Actor>/ or self.name =~ /<友方>/
         actor = $game_party.members[0]
         @battler = Game_Actor.new(actor.id)
         return
      else
         @enemy_id = 0
         if self.name =~ /<Enemy(\d+)>/i or self.name =~ /<敌人(\d+)>/i
            @enemy_id = $1.to_i   
         end           
         return if @enemy_id <= 0
         @battler = Game_Enemy.new(1, @enemy_id)
         self.force_update = true if self.battler.sensor_range >= 15         
      end  
  end
   
  #--------------------------------------------------------------------------
  # ● Battler Recheck
  #--------------------------------------------------------------------------      
  def enemy_id
      return @enemy_id
  end
  
  #--------------------------------------------------------------------------
  # ● body_size
  #--------------------------------------------------------------------------        
  def body_size
      if self.battler != nil
         return self.battler.body_size
      else
         return 0
      end  
  end

end


#===============================================================================
# ■ Game_Battler
#===============================================================================
class Game_Battler
  attr_accessor :sensor_range
  attr_accessor :body_size
  attr_accessor :breath_effect
  attr_accessor :breath_duration
  attr_accessor :fast_breath_effect
  attr_accessor :no_knockback
  attr_accessor :passive  
  attr_accessor :attack_animation_id
  attr_accessor :ignore_guard
  attr_accessor :no_damage_pop
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------      
  alias x_e_initialize initialize
  def initialize  
      x_e_initialize
      @sensor_range = 4
      @body_size = 0
      @breath_effect = false
      @breath_duration = 0
      @fast_breath_effect = false
      @no_knockback = false
      @passive = false     
      @attack_animation_id = 0
      @ignore_guard = false
      @no_damage_pop = false
  end  
end

#===============================================================================
# ■ Game_Enemy
#===============================================================================
class Game_Enemy < Game_Battler
   
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------      
  alias x_e2_initialize initialize
  def initialize(index, enemy_id)
      x_e2_initialize(index, enemy_id)
      enemy = $data_enemies[@enemy_id]
      setup_enemy_note(enemy)
  end  
  
  #--------------------------------------------------------------------------
  # ● Setup X Note Elements
  #--------------------------------------------------------------------------         
  def setup_enemy_note(enemy)
      if enemy.note =~ /<Sensor Range = (\d+)>/ or enemy.note =~ /<视野范围 = (\d+)>/ or
         enemy.note =~ /<感应器范围 = (\d+)>/ or enemy.note =~ /<效应范围 = (\d+)>/
         @sensor_range = $1.to_i
      end   
      if enemy.note =~ /<Body Size = (\d+)>/ or enemy.note =~ /<身体大小 = (\d+)>/
         @body_size = $1.to_i
      end
      if enemy.note =~ /<Attack Animation = (\d+)>/ or enemy.note =~ /<攻击动画 = (\d+)>/
         @attack_animation_id = $1.to_i
      end  
      if enemy.note =~ /<Death Zoom = (\d+)>/ or enemy.note =~ /<死亡方式 = (\d+)>/
         @death_zoom_effect = $1.to_i
      end
      if enemy.note =~ /<Knockback Duration = (\d+)>/ or enemy.note =~ /<倒地起身 = (\d+)>/
         @knockback_duration = $1.to_i
      end      
      if enemy.note =~ /<Ignore Guard>/ or enemy.note =~ /<忽略防御>/
         @ignore_shield = true
      end
      if enemy.note =~ /<Invunerable>/  or enemy.note =~ /<无敌>/
         @invunerable = true
      end
      if enemy.note =~ /<Breath Effect>/  or enemy.note =~ /<呼吸>/
         @breath_effect = true
      end
      if enemy.note =~ /<Knockback Disable>/  or   enemy.note =~ /<禁止击倒>/   
         @no_knockback = true
      end
      if enemy.note =~ /<Passive>/  or enemy.note =~ /<被动>/
         @passive = true
      end
      if enemy.note =~ /<伤害隐藏>/
         @no_damage_pop = true
      end   
      invunerable_actions_ids = XAS_BA_ENEMY::INVUNERABLE_ACTIONS[@enemy_id]
      if invunerable_actions_ids != nil
         @invunerable_actions = invunerable_actions_ids
      end   
      guard_directions_ids = XAS_BA_ENEMY::GUARD_DIRECTIONS[@enemy_id]
      if guard_directions_ids != nil
         @guard_directions = guard_directions_ids
      end         
  end
  
  
end  


#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ BATTLER - EVENT SENSOR
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#===============================================================================
# ■ XRXS_Enemy_Sensor
#===============================================================================
module XRXS_EnemySensor
  
  #--------------------------------------------------------------------------
  # ● Update Sensor
  #--------------------------------------------------------------------------        
  def update_sensor
      if self.battler != nil and self.battler.sensor_range > 0  
         sensor_area = self.battler.sensor_range
      else  
         sensor_area = $game_variables[XAS_BA::DEFAULT_SENSOR_RANGE_VARIABLE_ID]
      end
      sensor_area = -1 if cancel_sensor?
      distance = ($game_player.x - self.x).abs + ($game_player.y - self.y).abs
      enable   = (distance <= sensor_area)
      key = [$game_map.map_id, self.id, XAS_BA::SENSOR_SELF_SWITCH]
      last_enable = $game_self_switches[key]
      last_enable = false if last_enable == nil
      if enable != last_enable
         touch_attack(false)
         @collision_attack = false
         @pattern = 0
         @pattern_count = 0               
         $game_self_switches[key] = enable
         self.refresh
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Can Update Sensor
  #--------------------------------------------------------------------------            
  def can_update_sensor?
      return false if @sensor_enable == false
      return false if self.dead?
      return false if self.erased
      return false if self.stop
      return false if self.knockbacking?
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● refresh_sensor
  #--------------------------------------------------------------------------         
  def refresh_sensor
      touch_attack(false)
      key = [$game_map.map_id, self.id, XAS_BA::SENSOR_SELF_SWITCH]
      $game_self_switches[key] = false
      @pattern = 0
      @pattern_count  = 0         
      self.refresh        
  end  
  
  #--------------------------------------------------------------------------
  # ● Cancel Sensor
  #--------------------------------------------------------------------------         
  def cancel_sensor?  
      return false if self.battler == nil
      return true if self.battler.passive
      return false
  end
  
end

#===============================================================================
# ■  Game Event
#===============================================================================
class Game_Event < Game_Character
  
  attr_accessor :sensor_enable
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------            
  alias x_sensor_initialize initialize
  def initialize(map_id, event)
      @sensor_enable = false
      x_sensor_initialize(map_id, event)
  end  
  
  #--------------------------------------------------------------------------
  # ● Conditions Met
  #--------------------------------------------------------------------------
  alias x_sensor_conditions_met conditions_met?
  def conditions_met?(page)
      c = page.condition
      if c.self_switch_ch == XAS_BA::SENSOR_SELF_SWITCH
         @sensor_enable = true
      end
      x_sensor_conditions_met(page)   
  end
end

#===============================================================================
# ■  Game Event
#===============================================================================
class Game_Character < Game_CharacterBase
      include XRXS_EnemySensor
end

#===============================================================================
# ■  Game Character
#===============================================================================
class Game_Character < Game_CharacterBase
      attr_writer   :opacity
end



#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ BATTLER - ACTION
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#===============================================================================
# ■ Game Character
#==============================================================================
class Game_Character < Game_CharacterBase
  
  #--------------------------------------------------------------------------
  # ● Can Update Battler Move Speed
  #--------------------------------------------------------------------------                  
  def can_update_battler_move_speed?
      return false if @temp_id > 0
      return false if moving?   
      return true
  end  
  
  #--------------------------------------------------------------------------
  # ● Can Update Battler?
  #--------------------------------------------------------------------------               
  def can_update_battler?
      return false unless $game_system.xas_battle
      return false if self.battler == nil
      return false unless party_system?
      return true
  end  

  #--------------------------------------------------------------------------
  # ● Party System
  #--------------------------------------------------------------------------                  
  def party_system?
      return false if self.battler == nil
      if $xas_party_system == nil and self.battler.is_a?(Game_Actor)
         return false if self.battler.actor_id != $game_party.members[0].actor_id
      end
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● Reset Battler Temp
  #--------------------------------------------------------------------------                  
  def reset_battler_temp
      reset_cast_temp   
      reset_charge_temp
  end  
  
  #--------------------------------------------------------------------------
  # ● Reset Charge Temp
  #--------------------------------------------------------------------------                    
  def reset_charge_temp  
      return if self.battler == nil
      return if self.battler.is_a?(Game_Enemy)
      self.battler.x_charge_action[0] = 0
      self.battler.x_charge_action[1] = 0
      self.battler.x_charge_action[2] = 0
      self.battler.x_charge_action[3] = 0
  end
  
  #--------------------------------------------------------------------------
  # ● Reset Battler Temp
  #--------------------------------------------------------------------------                    
  def reset_cast_temp   
      return if self.battler == nil
      self.battler.cast_action[0] = 0
      self.battler.cast_action[1] = 0
      self.battler.cast_action[2] = 0
      self.battler.cast_action[3] = 0  
      self.battler.cast_action[4] = 0
  end
   
  #--------------------------------------------------------------------------
  # ● update_battler_parameters
  #--------------------------------------------------------------------------   
  def update_battler_parameters
      @stop_count = -1 if can_stop_battler?
      self.battler.invunerable_duration -= 1 if self.battler.invunerable_duration > 0
      unless @stop
         @knock_back_duration = 30 if @temp_id > 0
      end   
  end   
  
  #--------------------------------------------------------------------------
  # ● Can Stop Battler
  #--------------------------------------------------------------------------      
  def can_stop_battler?
      return false if self.is_a?(Game_Player)
      return true if self.knockbacking?
      return true if self.dead?
      return true if self.stop
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● Update Battler Counter Action
  #--------------------------------------------------------------------------                    
  def update_battler_counter_action
      return if self.battler.counter_action[1] == 0
      self.battler.counter_action[1] -= 1
      if self.battler.counter_action[1] == 0
         turn_toward_player
         self.battler.damage = XAS_WORD::COUNTER
         self.battler.damage_pop = true
         self.shoot(self.battler.counter_action[0])
         self.battler.counter_action[0] = 0
      end   
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Cast Action
  #--------------------------------------------------------------------------         
  def update_battler_cast_action   
      return unless can_update_cast_action?
      self.battler.cast_action[3] += 1
      if self.battler.cast_action[3] > XAS_ANIMATION::LOOP_ANIMATIONS_SPEED
         self.battler.cast_action[3] = 0
         self.animation_id =  self.battler.cast_action[2]
      end  
      self.battler.cast_action[4] += 1
      if self.battler.cast_action[4] >= self.battler.cast_action[1]
          self.shoot(self.battler.cast_action[0])
      end
  end  
  
  #--------------------------------------------------------------------------
  # ● Can Update Cast Action
  #--------------------------------------------------------------------------            
  def can_update_cast_action?
      return false if self.battler.cast_action[1] == 0   
      return false if @stop
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● Can Blow Effect
  #--------------------------------------------------------------------------              
  def can_blow?
      return false if self.stop and not self.battler.state_sleep
      return false if self.battler.no_knockback   
      return false if self.is_a?(Game_Player) and self.action != nil
      return true
  end   
   
  #--------------------------------------------------------------------------
  # ● Blow Effect
  #--------------------------------------------------------------------------        
  def blow(d, power = 1)
      return unless can_blow?
      jump(0,0)
      self.battler.invunerable_duration = 30 if self.battler.invunerable_duration <= 0
      if self.is_a?(Game_Event)
         @collision_attack = false  
      end
      @knock_back_duration = self.battler.knockback_duration
      refresh_sensor if self.is_a?(Game_Event)
      pre_direction = self.direction
      pre_direction_fix = self.direction_fix
      self.turn_reverse(d)      
      self.direction_fix = true
      power.times do
        case d
           when 2; @y += 1 if passable?(@x, @y, d)
           when 4; @x -= 1 if passable?(@x, @y, d)
           when 6; @x += 1 if passable?(@x, @y, d)
           when 8; @y -= 1 if passable?(@x, @y, d)
        end
      end
      self.direction_fix = pre_direction_fix
      self.direction = pre_direction
  end
  
  #--------------------------------------------------------------------------
  # ● Can Stop Battler Movement
  #--------------------------------------------------------------------------            
  def can_stop_battler_movement?
      return false if self.dead?   
      return true if self.battler.state_sleep
      return true if self.battler.state_stop
      return false
  end  
  
  #--------------------------------------------------------------------------
  # ● Impact
  #--------------------------------------------------------------------------              
  def impact(enable = true)
      return if self.tool_id == 0
      return if self.action == nil
      self.action.impact = enable
  end
  
  #--------------------------------------------------------------------------
  # ● Update Battler Stop Movement
  #--------------------------------------------------------------------------              
  def update_battler_stop_movement
      unless can_stop_battler_movement?
          @stop = false   
          return
      end
      @knock_back_duration = nil
      @stop = true      
      @step_anime = false   
      reset_battler_temp
      if self.battler.state_sleep
         make_pose("_Hit", 2)   
      else
         make_pose("", 2)
      end  
      if self.is_a?(Game_Event)
         @collision_attack = false
      end  
  end
   
  #--------------------------------------------------------------------------
  # ● Update Attacking
  #--------------------------------------------------------------------------              
  def update_battler_attacking
      return unless can_update_attacking?
      make_pose("_Atk", 2)
  end

  #--------------------------------------------------------------------------
  # ● Can Update Attacking
  #--------------------------------------------------------------------------              
  def can_update_attacking?
      return false if self.battler.is_a?(Game_Actor)
      return false if @collision_attack == false  
      return true
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Battler Knobacking
  #--------------------------------------------------------------------------            
  def update_battler_knockbacking
       return unless self.knockbacking?
       @pattern = 0
       @knock_back_duration -= 1 if can_remove_knockback?
       make_pose("_Hit", 2)        
       if self.is_a?(Game_Event)
          @collision_attack = false
       end         
       if @knock_back_duration <= 0
          @knock_back_duration = nil
          make_pose("", 0)
          touch_attack(false) if self.is_a?(Game_Event)
          @character_name = @x_pose_original_name
       end
  end  
   
  #--------------------------------------------------------------------------
  # ● Can Remove Knockback
  #--------------------------------------------------------------------------              
  def can_remove_knockback?
      return true
  end

  #--------------------------------------------------------------------------
  # ● knockbacking?
  #--------------------------------------------------------------------------            
  def knockbacking?
      return false if self.battler == nil
      return false if @stop
      return true if @knock_back_duration != nil
      return false
  end

  #--------------------------------------------------------------------------
  # ● collapsing?
  #--------------------------------------------------------------------------         
  def collapsing?
      return self.collapse_duration.to_i > 0
  end
   
  #--------------------------------------------------------------------------
  # ● Seal Effect
  #--------------------------------------------------------------------------         
  def seal_effect
      Sound.play_buzzer
      if XAS_WORD::ENABLE_WORD
         self.battler.damage = XAS_WORD::SEAL
         self.battler.damage_pop = true
      end   
  end   
  
end

#===============================================================================
# ■ XAS_DamageStop
#===============================================================================
module XAS_DamageStop
  
  #--------------------------------------------------------------------------
  # ● Acting
  #--------------------------------------------------------------------------            
  def acting?
      return (super or self.knockbacking? or self.collapsing? or self.stop)
  end
end

#===============================================================================
# ■ Game_Player
#===============================================================================
class Game_Player < Game_Character
      include XAS_DamageStop
end

#===============================================================================
# ■ Game_Event
#===============================================================================
class Game_Event < Game_Character
      include XAS_DamageStop
end



#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ BATTLER - TOUCH EFFECT
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#===============================================================================
# ■ XRXS_BattlerAttachment
#==============================================================================
module XRXS_BattlerAttachment
  
  #--------------------------------------------------------------------------
  # ● Attack Effect
  #--------------------------------------------------------------------------   
  def attack_effect(attacker)
      return false unless $game_system.xas_battle   
      return if self.battler == nil or attacker == nil
      return unless can_attack_effect?(attacker)
      if target_shield_enabled?(attacker, nil, nil)
         execute_guard_effect(attacker, nil, nil, 30)
         return
      end   
      execute_attack_effect(attacker)
end
   
#--------------------------------------------------------------------------
# ● Can Attack Effect
#--------------------------------------------------------------------------     
def can_attack_effect?(attacker)
     return false if self.can_update == false
     return false if @knock_back_duration != nil
     return false if attacker.stop
     return false if self.battler.invunerable
     return false if self.battler.invunerable_duration > 0
     return false if self.action != nil and self.action.user_invincible
     return false if seal_attack?(attacker.battler)     
     return false if target_state_invunerable?(30)
     return true
end  
  
#--------------------------------------------------------------------------
# ● Attack Target Shield
#--------------------------------------------------------------------------     
def attack_target_shield?(attacker)
     return false if attacker.battler.ignore_shield   
     return false unless self.battler.shield
     return true if face_direction?(attacker)
     return false
end  

#--------------------------------------------------------------------------
# ● Seal Attack?
#--------------------------------------------------------------------------               
def seal_attack?(attacker)
     if attacker.state_seal_attack or attacker.state_mute
        attacker.damage = XAS_WORD::SEAL
        attacker.damage_pop = true
        self.battler.invunerable_duration = 30
        return true
     end
     return false
end   

#--------------------------------------------------------------------------
# ● Execute Attack Damage
#--------------------------------------------------------------------------      
def execute_attack_damage(attacker)
     #if self.battler.agi > (rand(attacker.battler.agi) * 2)
     #   self.battler.result.missed = true
     #   return
     #end
     damage = ((attacker.battler.atk * 4) - (self.battler.def * 2)).truncate
     damage = 0 if damage < 0
     self.battler.result.hp_damage = damage
     #self.battler.result.critical   
     self.battler.hp -= damage.abs
end

#--------------------------------------------------------------------------
# ● Execute Attack Effect
#--------------------------------------------------------------------------      
def execute_attack_effect(attacker)
     execute_attack_effect_before_damage(attacker)
     execute_attack_damage(attacker)
     if target_missed?(attacker)
        self.battler.invunerable_duration = 30
        return
     end
     execute_damage_pop(attacker)
     execute_attack_effect_after_damage(attacker) if can_check_after_attack_effect?(attacker)   
     execute_state_effect(nil, attacker, nil)   
     self.battler.invunerable_duration = 20 + XAS_BA::DEFAULT_KNOCK_BACK_DURATION
     if attacker.battler.attack_animation_id != 0
        self.animation_id = attacker.battler.attack_animation_id
     end   
     if self.battler.damage.to_i > 0
        self.blow(attacker.direction, 1) if can_blow_effect?
     end
     if self.is_a?(Game_Player)
        self.need_refresh = true
     end
end  
     
#--------------------------------------------------------------------------
# ● Can Check After Attack Effect?  
#--------------------------------------------------------------------------        
def can_check_after_attack_effect?(attacker)   
     return false unless self.battler.damage.is_a?(Numeric)
     return true
end

#--------------------------------------------------------------------------
# ● Execute Attack Effect Before Damage
#--------------------------------------------------------------------------      
def execute_attack_effect_before_damage(attacker)

end

#--------------------------------------------------------------------------
# ● Execute Attack Effect After Damage
#--------------------------------------------------------------------------      
def execute_attack_effect_after_damage(attacker)

end

end

#===============================================================================
# ■ Game Player
#===============================================================================
class Game_Player < Game_Character  
  #--------------------------------------------------------------------------
  # ● Check Event Trigger Touch
  #--------------------------------------------------------------------------            
  alias xrxs64c_check_event_trigger_touch check_event_trigger_touch
  def check_event_trigger_touch(x, y)
      xrxs64c_check_event_trigger_touch(x, y)
      if $game_map.interpreter.running?
         return
      end
      for event in $game_map.events.values
          next unless event.collision_attack
          unless [1,2].include?(event.trigger)
             if event.battler != nil and event.x == x and event.y == y
                $game_player.attack_effect(event)
             end
          end
      end
  end
end

#===============================================================================
# ■ Game Event
#===============================================================================
class Game_Event < Game_Character
  
  #--------------------------------------------------------------------------
  # ● Check Event Trigger Touch
  #--------------------------------------------------------------------------            
  alias xrxs64c_check_event_trigger_touch check_event_trigger_touch
  def check_event_trigger_touch(x, y)
    xrxs64c_check_event_trigger_touch(x, y)
    if $game_map.interpreter.running?
       return
    end
    return unless self.collision_attack
    if self.battler != nil and x == $game_player.x and y == $game_player.y
       $game_player.attack_effect(self)
    end
  end
end



#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ BATTLER - MOVE SPEED
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#==============================================================================
# ■ Game_Character
#==============================================================================
class Game_Character < Game_CharacterBase
  
  include XAS_BA
  attr_accessor :base_move_speed
  attr_accessor :dash_move_speed
  attr_accessor :move_speed
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------  
  alias x_move_speed_initialize initialize
  def initialize
      @base_move_speed = BASE_MOVE_SPEED
      @dash_move_speed = 0
      x_move_speed_initialize
  end  

#--------------------------------------------------------------------------
# ● update_battler_move_speed
#--------------------------------------------------------------------------
  def update_battler_move_speed
      @dash_move_speed = @dash_active ? DASH_MOVE_SPEED : 0
      sp1 = @base_move_speed
      sp2 = @dash_move_speed
      sp3 = self.battler.state_move_speed
      @move_speed = (sp1 + sp2 + sp3)
  end
  
#--------------------------------------------------------------------------
# ● Update Animation
#--------------------------------------------------------------------------      
  def update_animation
      super
      update_force_move_routine_move
  end
   
#--------------------------------------------------------------------------
# ● Update Force Move Routine Move
#--------------------------------------------------------------------------        
  def update_force_move_routine_move
      return if @force_action == ""
      return if @move_route == nil
      command = @move_route.list[@move_route_index]
      return if command == nil
      if command.code == ROUTE_PLAY_SE   
         params = command.parameters
         params[0].play
         advance_move_route_index
      end   
  end

#--------------------------------------------------------------------------
# ● Update Routine Move
#--------------------------------------------------------------------------      
alias x_update_routine_move update_routine_move
def update_routine_move
     return if @force_action_times > 0
     x_update_routine_move
end

#--------------------------------------------------------------------------
# ● Can Cancel Move Type Custom
#--------------------------------------------------------------------------   
  alias x_move_speed_process_move_command process_move_command
  def process_move_command(command)
      return if can_cancel_move_type_custom?(command)
      params = command.parameters
      x_move_speed_process_move_command(command)
      if command.code == ROUTE_CHANGE_SPEED and @battler != nil and
         self.is_a?(Game_Event)
         @base_move_speed = params[0]
      end        
  end
  
#--------------------------------------------------------------------------
# ● Can Cancel Move Type Custom
#--------------------------------------------------------------------------   
  def can_cancel_move_type_custom?(command)
      return true if command == nil
      return true if @force_action_times > 0
      return false
  end  
  
end  


#==============================================================================
# ■ Game_Event
#==============================================================================
class Game_Event < Game_Character  
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------              
alias x_move_speed_event_initialize initialize
def initialize(map_id, event)
     x_move_speed_event_initialize(map_id, event)
     refresh_move_speed
end  

  #--------------------------------------------------------------------------
  # ● Refresh Move Speed
  #--------------------------------------------------------------------------
  def refresh_move_speed
      return if @page == nil
      @base_move_speed = @page.move_speed
  end

#--------------------------------------------------------------------------
# ● Setup Page
#--------------------------------------------------------------------------               
alias x_move_speed_setup_page setup_page
def setup_page(new_page)
     x_move_speed_setup_page(new_page)
     refresh_move_speed
end

end


#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ BATTLER - STATES
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler

  attr_accessor :state_move_speed
  attr_accessor :state_stop
  attr_accessor :state_loop_effect_time
  attr_accessor :state_loop_speed
  attr_accessor :state_duration
  attr_accessor :state_string
  attr_accessor :state_string_time
  attr_accessor :state_stop
  attr_accessor :state_slow
  attr_accessor :state_sleep
  attr_accessor :state_invunerable
  attr_accessor :state_fast
  attr_accessor :state_mute
  attr_accessor :state_seal_attack
  attr_accessor :state_seal_skill
  attr_accessor :state_seal_item
  attr_accessor :state_reflect
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------  
  alias x_state_initialize initialize
  def initialize
      @state_move_speed = 0
      @state_duration = []
      @state_loop_effect_time = []
      @state_loop_speed = []
      @state_string = ""
      @state_string_time = 0
      @state_stop = false
      @state_sleep = false
      @state_invunerable = false
      @state_slow = false
      @state_fast = false
      @state_mute = false
      @state_seal_attack = false
      @state_seal_skill = false
      @state_seal_item = false
      @state_reflect = false
      x_state_initialize
  end
   
#--------------------------------------------------------------------------
# ● Add State
#--------------------------------------------------------------------------   
  alias x_add_state add_state
  def add_state(state_id)
      unless @states.include?(state_id)
          state = $data_states[state_id]
          xas_add_state(state)
      end        
      x_add_state(state_id)
  end
  
#--------------------------------------------------------------------------
# ● Xas Add State
#--------------------------------------------------------------------------      
  def xas_add_state(state)
      @state_duration[state.id] = 60 * $data_states[state.id].min_turns
      @state_loop_effect_time[state.id] = 0
      @state_loop_speed[state.id] = $data_states[state.id].max_turns
      execute_damage_state(state,0)
  end      

#--------------------------------------------------------------------------
# ● Remove State
#--------------------------------------------------------------------------        
  alias x_remove_state remove_state
  def remove_state(state_id)
      if state?(state_id)
         state = $data_states[state_id]
         xas_remove_state(state)
      end  
      x_remove_state(state_id)      
  end   
   
#--------------------------------------------------------------------------
# ● XAS Remove State
#--------------------------------------------------------------------------         
  def xas_remove_state(state)
      @state_duration.delete(state.id)  
      @state_loop_effect_time.delete(state.id)  
      @state_loop_speed.delete(state.id)
      execute_damage_state(state,1)
  end  

#--------------------------------------------------------------------------
# ● Execute_Damage_State
#--------------------------------------------------------------------------           
  def execute_damage_state(state,type)
      return unless XAS_DAMAGE_POP::DAMAGE_STATE_POP
      return unless XAS_WORD::ENABLE_WORD
      return if state == nil or state.id == 1
      case type
         when 0
             damage = "+ " + state.name.to_s
         when 1  
             damage = "- " + state.name.to_s
      end
      @state_string = damage
      @state_string_time = 30            
  end  
  
end

#==============================================================================
# ■ Game_Character
#==============================================================================
class Game_Character < Game_CharacterBase
  
#--------------------------------------------------------------------------
# ● Update Battler States Effect
#--------------------------------------------------------------------------   
def update_battler_states_effect
     return unless XAS_SYSTEM::STATE_SYSTEM
     update_state_string_pop
     update_pre_state_setup
     return unless can_update_states_effect?
     for i in self.battler.states
         state = $data_states[i.id]  
         if state == nil or self.battler.state_duration[state.id] == nil or
            self.battler.state_loop_effect_time[state.id] == nil or
            self.battler.state_loop_speed[state.id] == nil
            self.battler.remove_state(state.id)
            next
            return
         end  
         update_state_abs_effects(state)
         update_state_loop(state)
         update_remove_state(state)
     end  
      
end  
  
#--------------------------------------------------------------------------
# ● Update Pre State Setup
#--------------------------------------------------------------------------      
def update_pre_state_setup
     self.battler.state_stop = false
     self.battler.state_slow = false
     self.battler.state_fast = false
     self.battler.state_mute = false
     self.battler.state_sleep = false
     self.battler.state_invunerable = false
     self.battler.state_seal_attack = false
     self.battler.state_seal_skill = false
     self.battler.state_seal_item = false
     self.battler.state_reflect = false
     self.battler.state_move_speed = 0
end  

#--------------------------------------------------------------------------
# ● Update Pre State Setup
#--------------------------------------------------------------------------        
def update_state_abs_effects(state)
     if state.note =~ /<Stop>/ or state.note =~ /<停止>/
        self.battler.state_stop = true
     end
     if state.note =~ /<Slow>/ or state.note =~ /<减速>/
        self.battler.state_slow = true
        self.battler.state_move_speed = -1.5
     end   
     if state.note =~ /<Fast>/ or state.note =~ /<加速>/
        self.battler.state_fast = true
        self.battler.state_move_speed = 1     
     end
     if self.battler.state_fast and
        self.battler.state_slow
        self.battler.state_move_speed = 0
     end
     if state.note =~ /<Mute>/  or state.note =~ /<M沉默>/   
        self.battler.state_mute = true
     end
     if state.note =~ /<Sleep>/  or state.note =~ /<睡眠>/
        self.battler.state_sleep = true
     end
     if state.note =~ /<Invincible>/ or state.note =~ /<无敌>/   
        self.battler.state_invunerable = true
     end  
     if state.note =~ /<Seal Attack>/ or state.note =~ /<禁止攻击>/  
        self.battler.state_seal_attack = true
     end
     if state.note =~ /<Seal Skill>/   or state.note =~ /<禁止技能>/
        self.battler.state_seal_skill = true
     end      
     if state.note =~ /<Seal Item>/   or  state.note =~ /<禁止道具>/
        self.battler.state_seal_item = true
      end
     if state.note =~ /<Reflect>/ or  state.note =~ /<反射>/
        self.battler.state_reflect = true
     end         
end

#--------------------------------------------------------------------------
# ● Update State Loop
#--------------------------------------------------------------------------      
def update_state_loop(state)
     self.battler.state_loop_effect_time[state.id] += 1
     if self.battler.state_loop_effect_time[state.id] > self.battler.state_loop_speed[state.id]
        self.battler.state_loop_effect_time[state.id] = 0
        if state.note =~ /<Animation ID = (\d+)>/ or state.note =~ /<动画ID = (\d+)>/
           state_anime = $1.to_i
           if state_anime != nil
              self.animation_id = state_anime
           end
        end   
        execute_states_effects(state)         
     end         
end

#--------------------------------------------------------------------------
# ● Execute States Effect
#--------------------------------------------------------------------------      
def execute_states_effects(state)         
     if state.note =~ /<Slip Damage = (\S+)>/ or state.note =~ /<持续伤害 = (\S+)>/
        execute_state_slip_damage($1.to_i)
     end  
end

#--------------------------------------------------------------------------
# ● Execute States Slip Damage
#--------------------------------------------------------------------------        
def execute_state_slip_damage(damage)
     damage = 1 if damage == nil
     damage_slip = self.battler.mhp * damage / 100
     self.battler.hp -= damage_slip
     self.battler.damage = damage_slip
     self.battler.damage_pop = true
end

#--------------------------------------------------------------------------
# ● Update Remove State
#--------------------------------------------------------------------------      
def update_remove_state(state)
     self.battler.state_duration[state.id] -= 1
     if self.battler.state_duration[state.id] <= 0     
        self.battler.remove_state(state.id)
     end         
end

#--------------------------------------------------------------------------
# ● Can Update States Effect
#--------------------------------------------------------------------------      
  def can_update_states_effect?
      return false if self.dead?
      return false if self.battler.states == nil
      return false if self.battler.states.size == 0
      return false if self.battler.state_duration == []
      return true
  end

#--------------------------------------------------------------------------
# ● Update State String Pop
#--------------------------------------------------------------------------      
  def update_state_string_pop
      return false if self.battler.state_string_time == 0
      self.battler.state_string_time -= 1
      if self.battler.state_string_time == 0
         self.battler.damage = self.battler.state_string
         self.battler.damage_pop = true
         self.battler.state_string = ""
      end  
  end  
end  

#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party < Game_Unit

#--------------------------------------------------------------------------
# ● On Player Walk
#--------------------------------------------------------------------------        
alias x_state_on_player_walk on_player_walk
def on_player_walk
     return if XAS_SYSTEM::STATE_SYSTEM
     x_state_on_player_walk
end

end



#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ BATTLER - EVENT COMMANDS
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#===============================================================================
# ■ Game Event
#===============================================================================
class Game_Event < Game_Character
  
  #--------------------------------------------------------------------------
  # ● Shoot Chance
  #--------------------------------------------------------------------------            
  def shoot_chance(action_id,perc)
      return if self.battler == nil
      if perc >= rand(100)
         shoot(action_id)
      end  
  end  
  
  #--------------------------------------------------------------------------
  # ● Guard
  #--------------------------------------------------------------------------         
  def guard(enable)
      return if self.battler == nil
      self.battler.guard = enable
  end  
  
  #--------------------------------------------------------------------------
  # ● Touch Attack
  #--------------------------------------------------------------------------            
  def touch_attack(enable)
      return if self.battler == nil        
      return if seal_attack?(self.battler)
      @collision_attack = enable
      @pattern = 0
      @pattern_count  = 0      
  end
  
  #--------------------------------------------------------------------------
  # ● Counter
  #--------------------------------------------------------------------------            
  def counter(enable)
      return if self.battler == nil
      self.battler.counter_action[2] = enable
  end   

  #--------------------------------------------------------------------------
  # ● Rand Shoot
  #--------------------------------------------------------------------------            
  def rand_shoot(random_id = [])
      return if self.battler == nil
      return if random_id == []
      action_id = random_id[rand(random_id.size)]
      self.shoot(action_id)
  end      
  
end



#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ BATTLER - DEFEAT PROCESS
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

#===============================================================================
# ■ Scene Base
#===============================================================================
class Scene_Base  
  
  #--------------------------------------------------------------------------
  # ● Check Gameover
  #--------------------------------------------------------------------------              
  def check_gameover
      return unless $game_party.in_battle  
      SceneManager.goto(Scene_Gameover) if $game_party.all_dead?
  end
end  

#===============================================================================
# ■ Game Character
#===============================================================================
class Game_Character < Game_CharacterBase
  attr_accessor :collapse_duration
  attr_accessor :battler_visible
  attr_writer   :opacity
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------            
  alias x_collapse_initialize initialize
  def initialize
      @collapse_duration = 0
      x_collapse_initialize
  end  
  
end

#===============================================================================
# ■ XAS_BA_BATTLEEVENT_NONPREEMPT
#==============================================================================
module XAS_BA_BATTLEEVENT_NONPREEMPT
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------            
  def update
      return if self.battler != nil and $game_map.interpreter.running?
      super
  end
end

#===============================================================================
# ■ Game Event
#==============================================================================
class Game_Event < Game_Character
      include XAS_BA_BATTLEEVENT_NONPREEMPT
end

#===============================================================================
# ■ Game Character
#===============================================================================
class Game_Character < Game_CharacterBase

  #--------------------------------------------------------------------------
  # ● Update Battler Defeat Process
  #--------------------------------------------------------------------------      
   def update_battler_defeat_process
       execute_enemy_defeated_process if can_check_enemy_defeated?
       execute_actor_defeated_process if can_check_actor_defeated?
   end
   
  #--------------------------------------------------------------------------
  # ● Can Check Enemy Defeated?
  #--------------------------------------------------------------------------            
  def can_check_enemy_defeated?  
      return false if self.battler.is_a?(Game_Actor)
      return false if self.battler.defeated
      return true
  end     
  
  #--------------------------------------------------------------------------
  # ● Can Check Actor Defeated?
  #--------------------------------------------------------------------------              
  def can_check_actor_defeated?
      return false if self.battler.is_a?(Game_Enemy)
      return false if self.battler.defeated
      return false if $game_party.members[0].hp > 0
      return false if @collapse_duration > 0
      return true  
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Actor Defeated Process
  #--------------------------------------------------------------------------               
  def execute_actor_defeated_process
      erase_actor_tools_on_map
      if $game_party.all_dead? and not self.battler.defeated
         self.battler.defeated = true
         self.collapse_duration = 120
         self.knock_back_duration = 161
         reset_battler_temp
      else   
         $game_temp.change_leader_wait_time = 0
         $game_player.change_leader
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Erase Tools on Map
  #--------------------------------------------------------------------------                  
  def erase_actor_tools_on_map
      for event in $game_map.events.values
          if event.tool_id > 0 and event.action.user.is_a?(Game_Player)
             event.erase
          end   
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Enemy Defeaed Process
  #--------------------------------------------------------------------------         
   def execute_enemy_defeated_process
       self.battler.defeated = true
       self.through = true
       @knock_back_duration = 121
       enemy = $data_enemies[self.battler.enemy_id]
       @collapse_duration = 120
       execute_gain_exp_gold(enemy)  
       execute_active_switch(enemy)
       execute_defeated_animation(enemy)
       execute_defeated_sound_effect(enemy)
       execute_final_shoot(enemy)
   end   

  #--------------------------------------------------------------------------
  # ● Execute Defeated Sound Effect
  #--------------------------------------------------------------------------              
  def execute_defeated_sound_effect(enemy)
      return if self.battler.no_damage_pop
      Sound.play_enemy_collapse   
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Final Shoot
  #--------------------------------------------------------------------------            
  def execute_final_shoot(enemy)
     if enemy.note  =~ /<Final Action ID = (\d+)>/  
       enemy.note  =~ /<Final Action ID = (\d+)>/   
      elsif enemy.note  =~ /<最终攻击ID = (\d+)>/
       enemy.note  =~ /<最终攻击ID = (\d+)>/
      end
      action_id = $1.to_i
      return if action_id == nil
      self.shoot(action_id)      
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Gain Exp Gold
  #--------------------------------------------------------------------------           
  def execute_gain_exp_gold(enemy)  
      exp = self.battler.exp
      case XAS_BA::EXP_TYPE
         when 0
            actor = $game_party.members[0]
            actor.gain_exp(exp)
         when 1
            for i in 0...$game_party.members.size
               actor = $game_party.members           
               actor.gain_exp(exp)
            end   
         when 2  
            exp = exp / $game_party.members.size
            for i in 0...$game_party.members.size
               actor = $game_party.members           
               actor.gain_exp(exp)
            end              
      end
      $game_party.gain_gold(self.battler.gold)
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute_Active Switch
  #--------------------------------------------------------------------------           
  def execute_active_switch(enemy)
    if enemy.note  =~ /<Active Switch = (\d+)>/
        enemy.note  =~ /<Active Switch = (\d+)>/
      elsif  enemy.note  =~ /<激活开关 = (\d+)>/
        enemy.note  =~ /<激活开关 = (\d+)>/      
      end
    switch_id = $1.to_i  
      if switch_id != nil
         $game_switches[switch_id] = true
         $game_map.need_refresh = true     
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Defeated Animation
  #--------------------------------------------------------------------------            
  def execute_defeated_animation(enemy)
     if enemy.note  =~ /<Defeated Animation = (\d+)>/
         enemy.note  =~ /<Defeated Animation = (\d+)>/      
        elsif enemy.note  =~ /<死亡动画 = (\d+)>/
         enemy.note  =~ /<死亡动画 = (\d+)>/
        end
        anime_id = $1.to_i
     if anime_id != nil
         self.animation_id = anime_id
      end  
  end  
  
end   

#===============================================================================
# ■ Game Player
#===============================================================================
class Game_Player < Game_Character
  
  #--------------------------------------------------------------------------
  # ● Reset Old Level
  #--------------------------------------------------------------------------            
  def reset_old_level(trans = false)
     for actor in $game_party.members
         actor.old_level = actor.level
     end   
  end
  
  #--------------------------------------------------------------------------
  # ● Change Leader
  #--------------------------------------------------------------------------                  
  def change_leader
      return if $game_party.members.size <= 1
      reset_battler_temp
      current_leader_id = $game_party.members[0].id
      for i in 1..$game_party.members.size
          pre_leader = $game_party.members[0].id
          $game_party.remove_actor(pre_leader)
          $game_party.add_actor(pre_leader)  
          if $game_party.members[0].hp > 0
             execute_change_leader_effect unless current_leader_id == $game_party.members[0].id
             break
          end
      end
  end   
  
  #--------------------------------------------------------------------------
  # ● Exeute Change leader Effect
  #--------------------------------------------------------------------------                    
  def execute_change_leader_effect
      actor = $game_party.members[0]
      actor.invunerable_duration = XAS_BA::CHANGE_LEADER_WAIT_TIME
      actor.damage = nil
      actor.damage_pop = false
      actor.critical = false
      @knock_back_duration = nil
      if self.action != nil
         self.action.duration = 1
      end
      @force_action_times = 0
      @force_action_type = ""         
      reset_old_level(true)
      @x_pose_original_name = @character_name
      update_battler_pose
      $game_map.need_refresh = true
      self.animation_id = XAS_ANIMATION::CHANGE_LEADER_ANIMATION_ID
      $game_temp.change_leader_wait_time = XAS_BA::CHANGE_LEADER_WAIT_TIME  
  end
  
  #--------------------------------------------------------------------------
  # ● Check Actor Level
  #--------------------------------------------------------------------------           
  def check_actor_level
      return if $game_party.in_battle
      return if self.battler == nil
      return if self.battler.old_level == self.battler.level
      reset_old_level(false)
      if self.battler.level > 1
         Audio.se_play("Audio/SE/" + XAS_SOUND::LEVEL_UP , 100, 100)
         if XAS_WORD::ENABLE_WORD
            $game_player.battler.damage = XAS_WORD::LEVEL_UP
            $game_player.battler.damage_pop = true
         end
      end
      $game_player.need_refresh = true
  end
end   

#===============================================================================
# ■ Game Party
#===============================================================================
class Game_Party < Game_Unit
  
#--------------------------------------------------------------------------
# ● Setup Starting Members  
#--------------------------------------------------------------------------      
  alias x_old_level_setup_starting_members setup_starting_members  
  def setup_starting_members  
      x_old_level_setup_starting_members   
      for actor in $game_party.members
          actor.old_level = actor.level
      end
  end
  
end

#===============================================================================
# ■ Sprite Character
#==============================================================================
class Sprite_Character < Sprite_Base  
  
  #--------------------------------------------------------------------------
  # ● Update Collapse Effects
  #--------------------------------------------------------------------------            
  def update_collaspse_effects
      update_collapse_duration
      return unless can_collapse_effects?
      update_collpase_zoom_effects
      update_exp_gold_pop
  end
   
  #--------------------------------------------------------------------------
  # ● Can Collapse Effects
  #--------------------------------------------------------------------------              
  def can_collapse_effects?
      return false if @character.battler.is_a?(Game_Actor)
      return false unless @character.dead?
      return false if @character.erased   
      return true
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Exp Gold Pop
  #--------------------------------------------------------------------------              
  def update_exp_gold_pop
      return unless XAS_DAMAGE_POP::DAMAGE_EXP_GOLD_POP
      exp_pop = @character.battler.exp
      gold_pop [email protected]
      case @character.collapse_duration
           when 110
                enemy = $data_enemies[@character.battler.enemy_id]
                @character.make_treasure(enemy)      
           when 80
             if exp_pop != 0
                word = XAS_WORD::EXP
                @character.battler.damage = word + " " + exp_pop.to_s
                @character.battler.damage_pop = true
                @character.battler.damage_type = "Exp"
             end  
           when 40
             if gold_pop != 0
                word = $data_system.currency_unit
                @character.battler.damage = word + " " + gold_pop.to_s
                @character.battler.damage_pop = true
                @character.battler.damage_type = "Gold"
             end               
      end      
  end
  
  #--------------------------------------------------------------------------
  # ● Update Collapse Duration
  #--------------------------------------------------------------------------              
  def update_collapse_duration
      @character.collapse_duration -= 1
      @character.opacity -= 2
      if @character.collapse_duration <= 0
         if @character.battler.is_a?(Game_Actor)
            SceneManager.goto(Scene_Gameover)
            return
         end
         self.visible = false
         @character.opacity = 0
         @character.erase
      end  
  end  

  #--------------------------------------------------------------------------
  # ● Update Collapse Zoom Effects
  #--------------------------------------------------------------------------               
  def update_collpase_zoom_effects
      case @character.battler.death_zoom_effect
          when 1
             @character.zoom_y += 0.05
             @character.zoom_x -= 0.01            
          when 2  
             @character.zoom_y -= 0.01
             @character.zoom_x += 0.03            
          when 3  
             @character.zoom_y += 0.03
             @character.zoom_x += 0.03              
          when 4   
             @character.zoom_y -= 0.005
             @character.zoom_x -= 0.005
          when 5   
            case @character.collapse_duration
                when 60..120
                 @character.zoom_y -= 0.01
                 @character.zoom_x += 0.06                             
                when 0..59  
                 @character.zoom_y += 0.2
                 @character.zoom_x -= 0.1
             end
      end
  end  
  
end



#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
#■ BATTLER - TREASURE
#■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


#===============================================================================
# ■ XAS_BA_Item_Drop
#==============================================================================
module XAS_BA_ItemDrop
  
  #--------------------------------------------------------------------------
  # ● Defeat Process
  #--------------------------------------------------------------------------               
  def make_treasure(enemy)  
      treasure = nil      
      return unless $game_player.passable?(self.x,self.y,0)
      for di in enemy.drop_items
           next if di.kind == 0
           next if rand(di.denominator) != 0
           if di.kind == 1
              treasure = $data_items[di.data_id]
              tr_id = treasure.id
           elsif di.kind == 2
              treasure = $data_weapons[di.data_id]
              tr_id = treasure.id
           elsif di.kind == 3
              treasure = $data_armors[di.data_id]
              tr_id = treasure.id
           end
           break if treasure != nil
       end   
       if treasure != nil
          command = RPG::MoveCommand.new
          command.code = 14
          command.parameters = [0,0]
          route = RPG::MoveRoute.new
          route.repeat = false
          route.list = [command, RPG::MoveCommand.new]         
          page = RPG::Event::Page.new
          page.move_type = 3
          page.move_route = route
          page.move_frequency = 6
          page.priority_type = 1
          page.trigger = 1
          page.through = true
          event = RPG::Event.new(self.x, self.y)
          event.pages =

Lv3.寻梦者

梦石
0
星屑
2699
在线时间
1060 小时
注册时间
2015-11-1
帖子
271
2
发表于 2017-8-14 23:47:31 | 只看该作者
layer这个脚本,过去我也执着想要用这个脚本酷炫的效果,但是,我发现这个脚本和不少脚本都冲突的。记得它重写了脚本的很多地方。基本上包含地图类的脚本都会无法兼容。
后来我还是没有用这个脚本。
因为我发现用ULDS的话其实就可以实现到这个脚本的大部分效果了,虽然会比较烦。

点评

是啊,就是被layer的范例惊艳到了。结果用到自己的工程里就来回被史莱姆揍到不可通行区域,或者蝙蝠飞到水下面......总之先下个ULDS好了,谢谢推荐~  发表于 2017-8-15 00:03
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 10:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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