查看: 3460|回复: 9

[已经过期] 脚本报错

[复制链接]
梦石
0
星屑
199
在线时间
248 小时
注册时间
2012-4-29
回帖
313
发表于 2013-11-20 18:45:09 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 魔力的觉醒 于 2013-11-21 21:23 编辑

[pre lang="ruby" line="1"]#==============================================================================
# +++ MOG - Monogatari (物語)  (v1.3) +++
#==============================================================================
# By Moghunter
# http://www.atelier-rgss.com/
#==============================================================================
# Sistema avançado de menu, voltado para scripters que desejam saber sobre
# técnicas de manipulação de sprites e janelas.
#==============================================================================

#==============================================================================
# Version History.
#==============================================================================
# 1.3 - Corrigido o bug do som da Scene Skill.
# 1.2 - Compatibilidade com Third Party scripts.
#     - Scene File incorporado ao sistema Monogatari, melhorando a performance.
#==============================================================================

#==============================================================================
# NOTA - Como este é um script para apresentar técnicas de RGSS, não foram
# adicionados comentários explicativos no modulo de configuração
#==============================================================================

#==============================================================================
# ■ MAIN MENU
#==============================================================================
module MOG_MENU
   NUMBER_OF_PARTICLES = 20  
   BACKGROUND_SCROLL_SPEED = [1,0]
   COMMAND_POSITION = [32, 84]
   COMMAND_POSITION_2 = [10,100]
   COMMAND_SPACE = 4
   COMMAND_NAME_POSITION = [0,0]
   COMMAND_NAME_POSITION_2 = [220,48]
   ACTOR_SPACE = 100
   ACTOR_POSITION = [240,0]
   
   ACTOR_LAYOUT_POSITON = [0,275]
   ACTOR_HP1_POSITON = [28,315]
   ACTOR_HP2_POSITON = [50,330]
   ACTOR_MP1_POSITON = [28,346]
   ACTOR_MP2_POSITON = [50,361]   
   ACTOR_HP_METER_POSITON = [29,329]
   ACTOR_MP_METER_POSITON = [29,360]
   ACTOR_LEVEL_POSITON = [30,290]
   ACTOR_STATES_POSITION = [63,283]
   
   MEMBERS_FACE_POSITION =[150,55]
   MEMBERS_FACE_SPACE = 64
   MEMBERS_ARROW_LAYOUT_POSITION = [217,40]
   MEMBERS_ARROW_1_POSITION = [180,40]
   MEMBERS_ARROW_2_POSITION = [300,40]
   TIME_NUMBER_POS = [415,10]
   GOLD_NUMBER_POS = [170,388]
   LOCATION_POS = [330,380]
end

#==============================================================================
# ■ MOG_MENU ITEM
#==============================================================================
module MOG_MENU_ITEM
   NUMBER_OF_PARTICLES = 20  
   BACKGROUND_SCROLL_SPEED = [0,0]
   COMMAND_POSITION = [0, 69]
   BUTTON_POSITION = [210, 30]
   BUTTON_SPACE = 90
end

#==============================================================================
# ■ MOG_MENU SKILL
#==============================================================================
module MOG_MENU_SKILL
   NUMBER_OF_PARTICLES = 20  
   BACKGROUND_SCROLL_SPEED = [0,0]
end

#==============================================================================
# ■ MOG_ACTOR SKILL STATUS
#==============================================================================
module MOG_ACTOR_SKILL_STATUS
  MEMBERS_SPACE = 80  
  LAYOUT_POSITION = [155,0]
  PAR_POSITION = [0,0]
  FACE_POSITION = [-13,-3]
  HP_METER_POSITION = [158,15]
  MP_METER_POSITION = [177,35]
  STATES_POSITION = [71,36]
  STATES_SCROLLING_ANIMATION = true  
  NAME_POSITION = [105,34]
  FONT_NAME = "楷体"
  FONT_SIZE = 14
  FONT_BOLD = true  
end

#==============================================================================
# ■ MOG_MENU EQUIP
#==============================================================================
module MOG_MENU_EQUIP
   NUMBER_OF_PARTICLES = 30  
   BACKGROUND_SCROLL_SPEED = [0,0]
   FONT_NAME = "楷体"
   FONT_SIZE = 15
   FONT_BOLD = true
   FONT_ITALIC = false   
end

#==============================================================================
# ■ MOG_MENU STATUS
#==============================================================================
module MOG_MENU_STATUS
   NUMBER_OF_PARTICLES = 30  
   BACKGROUND_SCROLL_SPEED = [1,0]
end

#==============================================================================
# ■ MOG MENU PARTY
#==============================================================================
module MOG_MENU_PARTY
   NUMBER_OF_PARTICLES = 20  
   BACKGROUND_SCROLL_SPEED = [0,0]   
end

#==============================================================================
# ■ MOG MENU SAVE
#==============================================================================
module MOG_MENU_SAVE
   FILES_MAX = 9   
   NUMBER_OF_PARTICLES = 20   
   BACKGROUND_SCROLL_SPEED = [1,0]
end

#==============================================================================
# ■ MOG MENU END
#==============================================================================
module MOG_MENU_END
   NUMBER_OF_PARTICLES = 20
   BACKGROUND_SCROLL_SPEED = [0,0]
end

#==============================================================================
# ■ MOG ACTOR MENU STATUS
#==============================================================================
module MOG_ACTOR_MENU_STATUS  
  LAYOUT_POSITION = [385,115]
  FACE_POSITION = [48,-32]
  PAR_POSITION = [5,64]
  STATES_POSITION = [15,25]
  STATES_SCROLLING_ANIMATION = false
  NAME_POSITION = [10,60]
  FONT_NAME = "方正粗圆简体"
  FONT_SIZE = 16
  FONT_BOLD = true
end

#==============================================================================
# ■ MOG MEMBERS LAYOUT
#==============================================================================
module MOG_MEMBERS_LAYOUT
  MEMBERS_SPACE = 80  
  LAYOUT_POSITION = [3,160]
  PAR_POSITION = [0,0]
  FACE_POSITION = [0,-2]
  HP_METER_POSITION = [12,37]
  MP_METER_POSITION = [86,37]
  SCOPE_TEXT_POSITION = [0,170]
  ARROW_1_POSITION = [50,55]
  ARROW_2_POSITION = [50,4]
  NAME_POSITION = [42,38]
  FONT_NAME = "方正粗圆简体"
  FONT_SIZE = 18
  FONT_BOLD = true  
end

#==============================================================================
# ■ MOG MENU BASE
#==============================================================================
module MOG_MENU_BASE  
end

#==============================================================================
# ■ Game Temp
#==============================================================================
class Game_Temp
  
  attr_accessor :menu_index
  attr_accessor :actor_menu_temp
  attr_accessor :item_scope
  attr_accessor :temp_actor_equip
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------  
  alias mog_menu_index_initialize initialize
  def initialize
      @menu_index = 0
      @actor_menu_temp = -1      
      @item_scope = 0
      @temp_actor_equip = nil
      mog_menu_index_initialize
  end
  
end

#==============================================================================
# ■ Scene Map
#==============================================================================
class Scene_Map < Scene_Base
  
#--------------------------------------------------------------------------
# ● Update Call Menu
#--------------------------------------------------------------------------   
alias mog_menu_monogatari_update_call_menu update_call_menu   
def update_call_menu
     if $game_party.members.size == 0
        @call_menu = false
        return
     end
     mog_menu_monogatari_update_call_menu
end

#--------------------------------------------------------------------------
# ● Call Menu
#--------------------------------------------------------------------------   
alias mog_menu_monogatari_call_menu call_menu
def call_menu
     $game_temp.menu_index = 0     
     mog_menu_monogatari_call_menu
end
   
end

#==============================================================================
# ■ Window Command
#==============================================================================
class Window_Command < Window_Selectable
  attr_reader :list
end

#==============================================================================
# ■ Game Party
#==============================================================================
class Game_Party < Game_Unit
   attr_accessor :menu_actor_id   
end

#==============================================================================
# ■ Game Interpreter
#==============================================================================
class Game_Interpreter
  
#--------------------------------------------------------------------------
# ● gain Tp
#--------------------------------------------------------------------------      
def gain_tp(actor_id,value)
     return if $game_party.members[actor_id] == nil
     $game_party.members[actor_id].tp += value.truncate
end  

#--------------------------------------------------------------------------
# ● Lose Tp
#--------------------------------------------------------------------------      
def lose_tp(actor_id,value)
     return if $game_party.members[actor_id] == nil
     $game_party.members[actor_id].tp -= value.truncate
end   

end

#==============================================================================
# ■ Cache
#==============================================================================
module Cache
  
  #--------------------------------------------------------------------------
  # ● Menu
  #--------------------------------------------------------------------------
  def self.menu(filename)
      load_bitmap("Graphics/Menus/", filename)
  end  
  
  #--------------------------------------------------------------------------
  # ● Menu Main
  #--------------------------------------------------------------------------
  def self.menu_main(filename)
      load_bitmap("Graphics/Menus/Main/", filename)
  end

  #--------------------------------------------------------------------------
  # ● Menu Item
  #--------------------------------------------------------------------------
  def self.menu_item(filename)
      load_bitmap("Graphics/Menus/Item/", filename)
  end  
  
  #--------------------------------------------------------------------------
  # ● Menu Skill
  #--------------------------------------------------------------------------
  def self.menu_skill(filename)
      load_bitmap("Graphics/Menus/Skill/", filename)
  end   
  
  #--------------------------------------------------------------------------
  # ● Menu Equip
  #--------------------------------------------------------------------------
  def self.menu_equip(filename)
      load_bitmap("Graphics/Menus/Equip/", filename)
  end      
  
  #--------------------------------------------------------------------------
  # ● Menu Status
  #--------------------------------------------------------------------------
  def self.menu_status(filename)
      load_bitmap("Graphics/Menus/Status/", filename)
  end   
  
  #--------------------------------------------------------------------------
  # ● Menu Save
  #--------------------------------------------------------------------------
  def self.menu_save(filename)
      load_bitmap("Graphics/Menus/Save/", filename)
  end      
  
  #--------------------------------------------------------------------------
  # ● Menu Party
  #--------------------------------------------------------------------------
  def self.menu_party(filename)
      load_bitmap("Graphics/Menus/Party/", filename)
  end     
  
  #--------------------------------------------------------------------------
  # ● Menu End
  #--------------------------------------------------------------------------
  def self.menu_end(filename)
      load_bitmap("Graphics/Menus/End/", filename)
  end      
  
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  attr_accessor :pre_cache_main_menu
  attr_accessor :pre_cache_actor_menu
  attr_accessor :pre_cache_item_menu
  attr_accessor :pre_cache_skill_menu
  attr_accessor :pre_cache_equip_menu
  attr_accessor :pre_cache_status_menu
  attr_accessor :pre_cache_party_menu
  attr_accessor :pre_cache_file_menu
  attr_accessor :pre_cache_end_menu
  attr_accessor :pre_cache_icon
  attr_accessor :pre_symbol
  
  #--------------------------------------------------------------------------
  # ● Pre Cache Atelier Menu
  #--------------------------------------------------------------------------  
  def pre_cache_atelier_menu   
      @pre_cache_main_menu = []
      @pre_cache_item_menu = []
      @pre_cache_skill_menu = []
      @pre_cache_equip_menu = []
      @pre_cache_status_menu = []
      @pre_cache_party_menu = []
      @pre_cache_file_menu = []
      @pre_cache_end_menu = []
      @pre_symbol = ""
      execute_pre_cache_icon if can_pre_cache_icon?
      execute_pre_cache_actor
      execute_pre_cache_main_menu
      execute_pre_cache_item_menu
      execute_pre_cache_skill_menu
      execute_pre_cache_equip_menu
      execute_pre_cache_status_menu
      execute_pre_cache_file_menu
      execute_pre_cache_party_menu
      execute_pre_cache_end_menu
  end

  #--------------------------------------------------------------------------
  # ● Pre Cache Icon
  #--------------------------------------------------------------------------   
  def execute_pre_cache_icon
      @pre_cache_icon = Cache.system("Iconset")
  end
      
  #--------------------------------------------------------------------------
  # ● Can Pre Cache Menu?
  #--------------------------------------------------------------------------  
  def can_pre_cache_icon?
      return true if @pre_cache_icon == nil
      return true if @pre_cache_icon.disposed? rescue return false
      return false
  end
  
end

#==============================================================================
# ■ Spriteset_Map
#==============================================================================
class Spriteset_Map  
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  alias mog_atelier_menu_initialize initialize
  def initialize
      $game_temp.pre_cache_atelier_menu if $game_temp.can_pre_cache_icon?
      mog_atelier_menu_initialize
  end
  
end

#==============================================================================
# ■ Particles_Menu
#==============================================================================
class Particles_Menu < Sprite
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------            
  def initialize(viewport = nil)
      super(viewport)
      @speed_x = 0
      @speed_y = 0
      @speed_a = 0
      self.bitmap = Cache.menu("Particles")
      self.blend_type = 0
      self.z = 1
      reset_setting(true)
  end  
  
#--------------------------------------------------------------------------
# ● Reset Setting
#--------------------------------------------------------------------------               
  def reset_setting(initial = false)
      zoom = (50 + rand(100)) / 100.1
      self.zoom_x = zoom
      self.zoom_y = zoom
      self.x = rand(576) - 160
      self.y = initial == true ? rand(480) : 512
      self.opacity = 0
      @speed_y = -(1 + rand(3))
      @speed_x = (1 + rand(2))
      @speed_a = (1 + rand(2))     
  end
  
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------               
  def dispose
      super
      self.bitmap.dispose if self.bitmap != nil
  end  
  
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------               
  def update
      super
      self.x += @speed_x
      self.y += @speed_y
      self.opacity += 5
      reset_setting if can_reset_setting?
  end  
  
#--------------------------------------------------------------------------
# ● Can Reset Setting
#--------------------------------------------------------------------------                 
  def can_reset_setting?
      return true if self.y < -50
      return true if self.x > 576
      return false
  end  
   
end




#==============================================================================
# ■ Window_Actor_Status_0
#==============================================================================
class Members_Windows_Status < Window_Selectable
  attr_reader   :pending_index         
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x = 0, y = 0)
    super(x, y, window_width, window_height)
    self.windowskin = Cache.menu("")
    self.opacity = 0
    self.contents_opacity = 0
    self.visible = false
    @input_lag = 0
    @old_index = -1
    @pending_index = -1
    refresh
  end

  #--------------------------------------------------------------------------
  # ● Window Width
  #--------------------------------------------------------------------------
  def window_width
      40
  end

  #--------------------------------------------------------------------------
  # ● Window Height
  #--------------------------------------------------------------------------
  def window_height
      40
  end
  
  #--------------------------------------------------------------------------
  # ● Cursor Movable?
  #--------------------------------------------------------------------------  
  def cursor_movable?
      active && open? && !@cursor_fix && !@cursor_all && item_max > 0 && @input_lag == 0
  end  
  
  #--------------------------------------------------------------------------
  # ● Item Max
  #--------------------------------------------------------------------------
  def item_max
      $game_party.members.size
  end
  
  #--------------------------------------------------------------------------
  # ● Item Height
  #--------------------------------------------------------------------------
  def item_height
    (height - standard_padding * 2) / 4
  end

  #--------------------------------------------------------------------------
  # ● Draw Item Background
  #--------------------------------------------------------------------------
  def draw_item_background(index)
  end
  
  #--------------------------------------------------------------------------
  # ● Pending Index
  #--------------------------------------------------------------------------
  def pending_index=(index)
      last_pending_index = @pending_index
      @pending_index = index
  end
  
  #--------------------------------------------------------------------------
  # ● Process OK
  #--------------------------------------------------------------------------
  def process_ok
      $game_party.target_actor = $game_party.members[index] unless @cursor_all
      call_ok_handler
  end
  
  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
      select($game_party.target_actor.index || 0)
  end
  
  #--------------------------------------------------------------------------
  # ● Select For Item
  #--------------------------------------------------------------------------
  def select_for_item(item)
      @cursor_fix = item.for_user?
      @cursor_all = item.for_all?
      if @cursor_fix
         select($game_party.menu_actor.index)
      elsif @cursor_all
         select(0)
      else
          @Index = @Index < 0 ? 0 : @index
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------  
  def draw_item(index)
  end
  
  #--------------------------------------------------------------------------
  # ● Process Cursor Move 2
  #--------------------------------------------------------------------------
  def process_cursor_move2
      return unless cursor_movable?
      last_index = @index
      cursor_down (Input.trigger?(:RIGHT))  if Input.repeat?(:RIGHT)
      cursor_up   (Input.trigger?(:LEFT))    if Input.repeat?(:LEFT)
      Sound.play_cursor if @Index != last_index
  end   
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update
      super
      @input_lag -= 1 if @input_lag > 0
      if @old_index != @index
         @old_index = @index
         @input_lag = 5
      end   
  end
  
end

#==============================================================================
# ■ Members Menu
#==============================================================================
class Members_Menu
  include MOG_MEMBERS_LAYOUT
  
  attr_accessor :actor
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(actor,index)
      @actor = actor
      @index = index
      @index_old = -1
      @com_index = 0
      @max_index = $game_party.members.size - 1      
      @active = false
      @active_old = false
      @opac = 0
      @opac_active = [0,0]
      @par = []
      @Float = [0,0,0]
      set_old_parameter
      create_sprites
      create_sprites_support if @index == 0
  end
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------   
  def create_sprites
      @meter_image = $game_temp.pre_cache_actor_menu[6]
      @meter_cw = @meter_image.width
      @meter_ch = @meter_image.height / 2   
      @parameter_number = $game_temp.pre_cache_actor_menu[2]
      @parameter_cw = @parameter_number.width / 10
      @parameter_ch = @parameter_number.height
      @visible = false
      create_layout
      create_parameter
      create_face
      create_name
      create_hp_meter
      create_mp_meter
      @next_pos = [-@layout.width - 64,0]
      @now_index = [-@layout.width - 64,0,0]
      @before_index = [-@layout.width - 64,0,0]
      @next_index = [-@layout.width - 64,0,0]
      set_position(-@layout.width - 64,0)
      set_opacity(0)
  end
   
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------     
  def create_sprites_support
      create_scope_all
      create_arrow
  end
  
  #--------------------------------------------------------------------------
  # ● Create Scope All
  #--------------------------------------------------------------------------      
  def create_scope_all
      @scope = Sprite.new
      @scope.bitmap = $game_temp.pre_cache_actor_menu[4]
      @scope_cw = @scope.bitmap.width
      @org_pos_scope = [SCOPE_TEXT_POSITION[0],SCOPE_TEXT_POSITION[1],SCOPE_TEXT_POSITION[0] - @scope_cw]
      @scope.x = @org_pos_scope[2]
      @scope.y = @org_pos_scope[1]
      @scope.z = 15
  end
  
  #--------------------------------------------------------------------------
  # ● Update Scope
  #--------------------------------------------------------------------------         
  def update_scope
      if @active and all_targets
         if @scope.x < @org_pos_scope[0]
            @scope.x += 15
            if @scope.x >= @org_pos_scope[0]
               @scope.x = @org_pos_scope[0]
            end   
         end
      else
         if @scope.x > @org_pos_scope[2]         
            @scope.x -= 15
            if @scope.x <= @org_pos_scope[2]
               @scope.x = @org_pos_scope[2]
            end         
          end
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Create Arrow
  #--------------------------------------------------------------------------           
  def create_arrow
      @arrow_float = [0,0,0]
      @arrow_np_1 = [0,0]
      @arrow_np_2 = [0,0]
      @arrow_image = $game_temp.pre_cache_actor_menu[5]
      @arrow_image_cw = @arrow_image.width
      @arrow_image_ch = @arrow_image.height# / 2
      @arrow_1 = Sprite.new
      @arrow_1.bitmap = Bitmap.new(@arrow_image_cw,@arrow_image_ch)
      @arrow_cw = @arrow_1.bitmap.width
      @org_pos_arrow_1 = [ARROW_1_POSITION[0],ARROW_1_POSITION[1]]
      @arrow_1.x = @org_pos_arrow_1[0]
      @arrow_1.y = @org_pos_arrow_1[1]
      @arrow_1.z = 15
      @arrow_1.opacity = 0
      @arrow_2 = Sprite.new
      @arrow_2.bitmap = Bitmap.new(@arrow_image_cw,@arrow_image_ch)
      @arrow_2.ox = @arrow_2.bitmap.width / 2
      @arrow_2.oy = @arrow_2.bitmap.height / 2
      @arrow_2.angle = 180
      ar_y = (MEMBERS_SPACE * 4) + ARROW_2_POSITION[1]
      @org_pos_arrow_2 = [ARROW_2_POSITION[0] + @arrow_2.ox,ar_y]
      @arrow_2.x = @org_pos_arrow_2[0]
      @arrow_2.y = @org_pos_arrow_2[1]
      @arrow_2.z = 15  
      @arrow_2.opacity = 0
      @arrow_time_1 = 0
      @arrow_time_2 = 0
      refresh_arrow(0,@arrow_1,0)
      refresh_arrow(1,@arrow_2,0)
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh_arrow 1
  #--------------------------------------------------------------------------            
  def refresh_arrow(arrow,sprite,type)
      sprite.bitmap.clear
      h = @arrow_image_ch * type
      a_rect = Rect.new(0,h,@arrow_image_cw,@arrow_image_ch)
      sprite.bitmap.blt(0,0,@arrow_image,a_rect)
      @arrow_time_1 = 20 if arrow == 0
      @arrow_time_2 = 20 if arrow ==1
  end
  
  #--------------------------------------------------------------------------
  # ● Update Arrow
  #--------------------------------------------------------------------------            
  def update_arrow
    #  update_arrow_type
      update_arrow_visible
      update_arrow_float_animation
  end
   
  #--------------------------------------------------------------------------
  # ● Update Arrow Type
  #--------------------------------------------------------------------------               
  def update_arrow_type
      if @arrow_time_1 > 0
         @arrow_time_1 -= 1
         refresh_arrow(0,@arrow_1,0) if @arrow_time_1 == 0
      end   
      if @arrow_time_2 > 0
         @arrow_time_2 -= 1
         refresh_arrow(1,@arrow_2,0) if @arrow_time_2 == 0
      end         
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Arrow Type
  #--------------------------------------------------------------------------                 
  def refresh_arrow_type
      return
      if @index_old > @com_index
         refresh_arrow(0,@arrow_1,1)
      else  
         refresh_arrow(1,@arrow_2,1)
      end  
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Arrow Visible
  #--------------------------------------------------------------------------              
  def update_arrow_visible
      if can_arrow_visible?
        @arrow_1.opacity += 15
        @arrow_2.opacity += 15
        @arrow_np_1 = [@org_pos_arrow_1[0],@org_pos_arrow_1[1]]
        @arrow_np_2 = [@org_pos_arrow_2[0],@org_pos_arrow_2[1]]
      else  
        @arrow_1.opacity -= 10
        @arrow_2.opacity -= 10
        @arrow_np_1 = [-@arrow_cw,@org_pos[1]]
        @arrow_np_2 = [-@arrow_cw + @arrow_2.ox,@org_pos[1] + @arrow_2.oy]        
      end  
  
  end
  
#--------------------------------------------------------------------------
# ● Update Slide Arrow
#--------------------------------------------------------------------------                       
  def update_slide_arrow(type,sprite,cp,np)
      cp -= @arrow_float[1] if type == 1
      sp = 2 + ((cp - np).abs / 20)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp + @arrow_float[1] if type == 1
  end      
  
  #--------------------------------------------------------------------------
  # ● Can Arrow Visiblle?
  #--------------------------------------------------------------------------               
  def can_arrow_visible?
      return false if !@active
      return false if all_targets
      return false if $game_party.members.size < 2
      return  true
  end
  
  #--------------------------------------------------------------------------
  # ● Update Arrow Float Animation
  #--------------------------------------------------------------------------               
  def update_arrow_float_animation
      @arrow_float[2] += 1
      if @arrow_float[2] > 2
         @arrow_float[2] = 0
         @arrow_float[0] += 1
         case @arrow_float[0]
            when 1..11
              @arrow_float[1] += 1
            when 12..22
              @arrow_float[1] -= 1
            else  
              @arrow_float[0] = 0
              @arrow_float[1] = 0
         end  
      end
    update_slide_arrow(0,@arrow_1,@arrow_1.x,@arrow_np_1[0])
    update_slide_arrow(1,@arrow_1,@arrow_1.y,@arrow_np_1[1])
    update_slide_arrow(0,@arrow_2,@arrow_2.x,@arrow_np_2[0])
    update_slide_arrow(1,@arrow_2,@arrow_2.y,@arrow_np_2[1])   
  end
      
  #--------------------------------------------------------------------------
  # ● Create Scope All
  #--------------------------------------------------------------------------      
  def update_support
      update_scope
      update_arrow
  end
  
  #--------------------------------------------------------------------------
  # ● Set Old Parameter
  #--------------------------------------------------------------------------  
  def set_old_parameter
      @par.clear
      @par = [@actor.hp,@actor.mhp,@actor.mp,@actor.mmp,@actor.level]
  end   
  
  #--------------------------------------------------------------------------
  # ● Members Spate
  #--------------------------------------------------------------------------   
  def members_space
      LAYOUT_POSITION[1] + (@index * MEMBERS_SPACE)
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------  
  def dispose
      dispose_layout
      dispose_parameter
      dispose_face
      dispose_name
      dispose_hp_meter
      dispose_mp_meter
      dispose_support if @index == 0
  end

  #--------------------------------------------------------------------------
  # ● Dispose Support
  #--------------------------------------------------------------------------   
  def dispose_support
      dispose_scope
      dispose_arrow
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------   
  def dispose_layout
      @layout.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Scope
  #--------------------------------------------------------------------------         
  def dispose_scope
      @scope.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose_Arrow
  #--------------------------------------------------------------------------            
  def dispose_arrow
      @arrow_1.bitmap.dispose
      @arrow_1.dispose
      @arrow_2.bitmap.dispose
      @arrow_2.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Parameter
  #--------------------------------------------------------------------------      
  def dispose_parameter
      @parameter.bitmap.dispose
      @parameter.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Face
  #--------------------------------------------------------------------------   
  def dispose_face
      @face.dispose
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose HP Meter
  #--------------------------------------------------------------------------      
  def dispose_hp_meter
      @hp_meter.bitmap.dispose
      @hp_meter.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose MP Meter
  #--------------------------------------------------------------------------      
  def dispose_mp_meter
      @mp_meter.bitmap.dispose
      @mp_meter.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Name
  #--------------------------------------------------------------------------        
  def dispose_name
      @name.bitmap.dispose
      @name.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = Cache.menu("Actor_Layout_1")
      @org_pos = [LAYOUT_POSITION[0],LAYOUT_POSITION[1]]
      @layout.x = @org_pos[0]
      @layout.y = @org_pos[1]
      @layout.z = 10
      #@layout.opacity = 0
  end

  #--------------------------------------------------------------------------
  # ● Create Parameter
  #--------------------------------------------------------------------------
  def create_parameter
      @parameter = Sprite.new
      @parameter.bitmap = Bitmap.new(@layout.bitmap.width,@layout.bitmap.height)
      @org_pos_par = [@org_pos[0] + PAR_POSITION[0],
                      @org_pos[1] + PAR_POSITION[1]]
      @parameter.x = @org_pos_par[0]
      @parameter.y = @org_pos_par[1]
      @parameter.z = 12
#      @parameter.opacity = 0
      refresh_parameter
  end  
  
  #--------------------------------------------------------------------------
  # ● Create HP Meter
  #--------------------------------------------------------------------------  
  def create_hp_meter
      @hp_meter_old = [-1,-1]
      @hp_meter = Sprite.new
      @hp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
      @org_pos_hp = [@org_pos[0] + HP_METER_POSITION[0],
                     @org_pos[1] + HP_METER_POSITION[1]]      
      @hp_meter.x = @org_pos_hp[0]
      @hp_meter.y = @org_pos_hp[1]
      @hp_meter.z = 11
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh HP Meter
  #--------------------------------------------------------------------------   
  def refresh_hp_meter
      @hp_meter_old[0] = @actor.hp
      @hp_meter_old[1] = @actor.mhp
      @hp_meter.bitmap.clear
      width_range = @meter_cw * @actor.hp / @actor.mhp
      m_rect = Rect.new(0,0,width_range,@meter_ch)
      @hp_meter.bitmap.blt(0,0,@meter_image,m_rect)
  end
  
  #--------------------------------------------------------------------------
  # ● Create MP Meter
  #--------------------------------------------------------------------------  
  def create_mp_meter
      @mp_meter_old = [-1,-1]
      @mp_meter = Sprite.new
      @mp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
      @org_pos_mp = [@org_pos[0] + MP_METER_POSITION[0],
                     @org_pos[1] + MP_METER_POSITION[1]]      
      @mp_meter.x = @org_pos_mp[0]
      @mp_meter.y = @org_pos_mp[1]
      @mp_meter.z = 11
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh MP Meter
  #--------------------------------------------------------------------------   
  def refresh_mp_meter
      @mp_meter_old[0] = @actor.mp
      @mp_meter_old[1] = @actor.mmp
      @mp_meter.bitmap.clear
      width_range = @meter_cw * @actor.mp / @actor.mmp rescue nil
      width_range = 0 if width_range == nil
      m_rect = Rect.new(0,@meter_ch,width_range,@meter_ch)
      @mp_meter.bitmap.blt(0,0,@meter_image,m_rect)
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------   
  def refresh_parameter
      set_old_parameter   
      @parameter.bitmap.clear
      
      value = @actor.level
      x = 146
      y = 8
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
     
      value = @actor.hp
      x = 72
      y = 24
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
  
      value = @actor.mp
      x = 146
      y = 24
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Number
  #--------------------------------------------------------------------------     
  def refresh_number(sprite,image,value,number_cw,number_ch,x,y)
      number = value.abs.to_s.split(//)
      x2 = -number_cw * number.size
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch)
          sprite.bitmap.blt(x + x2 + (number_cw  *  i), y, image, nsrc_rect)        
      end      
      
  end

  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------  
  def create_face
      @face = Sprite.new
      @org_pos_face = [@org_pos[0] + FACE_POSITION[0],
                       @org_pos[1] + FACE_POSITION[1]]
      @face.x = @org_pos_face[0]
      @face.y = @org_pos_face[1]
      @face.z = 11
   #   @face.opacity = 0
      refresh_face
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Face
  #--------------------------------------------------------------------------   
  def refresh_face
      face_name = "Face_B" + @actor.id.to_s
      @face.bitmap = Cache.menu(face_name.to_s)
  end
  
  #--------------------------------------------------------------------------
  # ● Create Name
  #--------------------------------------------------------------------------   
  def create_name
      @name = Sprite.new
      @name.bitmap = Bitmap.new(140,32)
      @name.bitmap.font.name = FONT_NAME
      @name.bitmap.font.size = FONT_SIZE
      @name.bitmap.font.bold = FONT_BOLD
      @org_pos_name = [@org_pos[0] + NAME_POSITION[0],
                       @org_pos[1] + NAME_POSITION[1]]
      @name.x = @org_pos_name[0]
      @name.y = @org_pos_name[1]
      @name.z = 11
     #@name.opacity = 0
      refresh_name     
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Name
  #--------------------------------------------------------------------------      
  def refresh_name
      @name.bitmap.clear
      @name.bitmap.draw_text(0,0,140,32,@actor.name.to_s,0)
  end  
  
  #--------------------------------------------------------------------------
  # ● Set Actor
  #--------------------------------------------------------------------------        
  def set_actor(actor)
      @actor = actor
  end
  
  #--------------------------------------------------------------------------
  # ● Can Refresh HP Meter
  #--------------------------------------------------------------------------         
  def can_refresh_hp_meter?
      return true if @hp_meter_old[0] != @actor.hp
      return true if @hp_meter_old[1] != @actor.mhp
      return false
  end
     
  #--------------------------------------------------------------------------
  # ● Can Refresh MP Meter
  #--------------------------------------------------------------------------         
  def can_refresh_mp_meter?
      return true if @mp_meter_old[0] != @actor.mp
      return true if @mp_meter_old[1] != @actor.mmp
      return false
  end  
  
  #--------------------------------------------------------------------------
  # ● Can Refresh Parameter
  #--------------------------------------------------------------------------
  def can_refresh_parameter?
      return true if @par[0] != @actor.hp
      return true if @par[1] != @actor.mhp
      return true if @par[2] != @actor.mp
      return true if @par[3] != @actor.mmp
      return true if @par[4] != @actor.level
      return false
  end   
  
  #--------------------------------------------------------------------------
  # ● Refresh_Visible
  #--------------------------------------------------------------------------   
  def refresh_visible
      if can_visible?
         set_visible(true)
      else  
         set_visible(false)
      end  
  end  
  
  #--------------------------------------------------------------------------
  # ● Set Index
  #--------------------------------------------------------------------------     
  def set_index
      @now_index[0] = @com_index
      @before_index[0] = @com_index - 1
      @next_index[0] = @com_index + 1
      @before_index[0] = @max_index if @before_index[0] < 0
      @next_index[0] = 0 if @next_index[0] > @max_index   
  end
      
  #--------------------------------------------------------------------------
  # ● Can Visible?
  #--------------------------------------------------------------------------     
  def can_visible?
      return true if @index == @now_index[0]
      return true if @index == @next_index[0]
      return true if @index == @before_index[0]
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● Set Visible
  #--------------------------------------------------------------------------     
  def set_visible(value)
      @visible = value
      return
      @layout.visible = @visible
      @parameter.visible = @visible
      @hp_meter.visible = @visible
      @mp_meter.visible = @visible
      @face.visible = @visible
      @name.visible = @visible
  end
  
  #--------------------------------------------------------------------------
  # ● Update Position
  #--------------------------------------------------------------------------      
  def update_position
      update_slide(0,@layout,@layout.x,@next_pos[0] + @org_pos[0])
      update_slide(1,@layout,@layout.y,@next_pos[1] + @org_pos[1])
      update_slide(0,@parameter,@parameter.x,@next_pos[0] + @org_pos_par[0])
      update_slide(1,@parameter,@parameter.y,@next_pos[1] + @org_pos_par[1])
      update_slide(0,@hp_meter,@hp_meter.x,@next_pos[0] + @org_pos_hp[0])
      update_slide(1,@hp_meter,@hp_meter.y,@next_pos[1] + @org_pos_hp[1])  
      update_slide(0,@mp_meter,@mp_meter.x,@next_pos[0] + @org_pos_mp[0])
      update_slide(1,@mp_meter,@mp_meter.y,@next_pos[1] + @org_pos_mp[1])        
      update_slide(0,@face,@face.x,@next_pos[0] + @org_pos_face[0])
      update_slide(1,@face,@face.y,@next_pos[1] + @org_pos_face[1])        
      update_slide(0,@name,@name.x,@next_pos[0] + @org_pos_name[0])
      update_slide(1,@name,@name.y,@next_pos[1] + @org_pos_name[1])      
  end

  #--------------------------------------------------------------------------
  # ● Update Float
  #--------------------------------------------------------------------------         
  def update_float
      @float[2] += 1
      if @float[2] > 5
         @float[2] = 0
         @float[0] += 1
         case @float[0]         
              when 1..5
                  @float[1] -= 1  
              when 6..15
                  @float[1] += 1
              when 16..20
                  @float[1] -= 1
              else
                 @float = [0,0,0]
          end
       end
  end
  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,cp,np)
      cp -= @float[1] if type == 1
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp + @float[1] if type == 1
  end   
  
  #--------------------------------------------------------------------------
  # ● All Targets
  #--------------------------------------------------------------------------                        
  def all_targets
      return true if $game_temp.item_scope == 8
      return true if $game_temp.item_scope == 10
      return false
  end  
   
  #--------------------------------------------------------------------------
  # ● Update Opacity
  #--------------------------------------------------------------------------  
  def update_opacity
      if @visible
         if all_targets
            if @max_index == 0
               @next_pos = [0,0]
            else   
               if @index == @before_index[0]
                  @next_pos = [0,-MEMBERS_SPACE]
               elsif @index == @next_index[0]
                  @next_pos = [0,MEMBERS_SPACE]
               else  
                  @next_pos = [0,0]
               end      
            end            
            update_opacity_active
            update_float
         else  
             if ((@index == @before_index[0]) or (@index == @next_index[0])) and
                  @max_index != 0
                  opac_limit = 170
                  if @opac > opac_limit
                     @opac -= 10
                     @opac = opac_limit if @opac < opac_limit
                  elsif @opac < opac_limit
                     @opac += 10
                     @opac = opac_limit if @opac > opac_limit
                  end   
                  @float = [0,0,0]
             else  
                 update_opacity_active
                 update_float
             end  
         end   
      else
          @opac -= 10 if @opac > 0
          @opac = 0 if @opac < 0
          @float = [0,0,0]
      end
      set_opacity(@opac)
  end
  
  #--------------------------------------------------------------------------
  # ● Update Opacity Active
  #--------------------------------------------------------------------------   
  def update_opacity_active
      @opac_active[0] += 1
      case @opac_active[0]
         when 1..30
            @opac_active[1] +=  4
         when 31..60           
            @opac_active[1] -=  4
         else
           @opac_active[1] = 0
           @opac_active[0] = 0
      end
      @opac = 160 + @opac_active[1]
  end         
            
  #--------------------------------------------------------------------------
  # ● Set Opacity
  #--------------------------------------------------------------------------   
  def set_opacity(opac)
      @layout.opacity = opac
      @layout.opacity = opac
      @parameter.opacity = opac
      @parameter.opacity = opac
      @hp_meter.opacity = opac
      @hp_meter.opacity = opac
      @mp_meter.opacity = opac
      @mp_meter.opacity = opac
      @face.opacity = opac
      @face.opacity = opac
      @name.opacity = opac
      @name.opacity = opac
  end   
      
  #--------------------------------------------------------------------------
  # ● Refresh Index
  #--------------------------------------------------------------------------   
  def refresh_index
      refresh_arrow_type if @index == 0
      @index_old = @com_index
      set_index
      refresh_visible
      set_next_position
  end
  
  #--------------------------------------------------------------------------
  # ● Set Next Position
  #--------------------------------------------------------------------------      
  def set_next_position
      if @max_index == 0
         @next_pos = [0,0]
         return
      end  
      if @visible
      if @index == @before_index[0]
         @next_pos = [-32,-MEMBERS_SPACE]
         if @layout.opacity < 150
            set_position(@next_pos[0],-MEMBERS_SPACE * 2)
            set_opacity(0)
         end   
      elsif @index == @next_index[0]
         @next_pos = [-32,MEMBERS_SPACE]
         if @layout.opacity < 150  
            set_position(@next_pos[0],MEMBERS_SPACE * 2)
            set_opacity(0)
         end   
      else  
         @next_pos = [0,0]
      end   
      else
         @next_pos = [-64,0]
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Update Position
  #--------------------------------------------------------------------------      
  def set_position(pos_x,pos_y)
      @layout.x = @org_pos[0] + pos_x
      @layout.y = @org_pos[1] + pos_y
      @parameter.x = @org_pos_par[0] + pos_x
      @parameter.y = @org_pos_par[1] + pos_y
      @hp_meter.x = @org_pos_hp[0] + pos_x
      @hp_meter.y = @org_pos_hp[1] + pos_y
      @mp_meter.x = @org_pos_mp[0] + pos_x
      @mp_meter.y = @org_pos_mp[1] + pos_y
      @face.x = @org_pos_face[0] + pos_x
      @face.y = @org_pos_face[1] + pos_y
      @name.x = @org_pos_name[0] + pos_x
      @name.y = @org_pos_name[1] + pos_y
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Active
  #--------------------------------------------------------------------------         
  def refresh_active
      @active_old = @active
      @visible = @active
      refresh_index
      if !@active
         @visible = @active
         @next_pos = [-@layout.width - 64,0]
      else   
         set_position(-@layout.width - 64,0)
      end   
  end
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update(active,com_index)
      @active = active
      @com_index = com_index
      refresh_active if @active != @active_old
      update_opacity
      update_position
      update_support if @index == 0
      return if !@active
      refresh_index if @index_old != @com_index
      return if !@active or !@visible
      refresh_hp_meter if can_refresh_hp_meter?
      refresh_mp_meter if can_refresh_mp_meter?
      refresh_parameter if can_refresh_parameter?
  end
  
  #--------------------------------------------------------------------------
  # ● Current Actor
  #--------------------------------------------------------------------------   
  def current_actor
      return true if @com_index == @index
      return false
  end
  
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache Actor
  #--------------------------------------------------------------------------  
  def execute_pre_cache_actor
      @pre_cache_actor_menu = []
      @pre_cache_actor_menu.push(Cache.menu("Actor_Layout_1"))
      @pre_cache_actor_menu.push(Cache.menu("Actor_Layout_2"))      
      @pre_cache_actor_menu.push(Cache.menu("Actor_Number_1"))
      @pre_cache_actor_menu.push(Cache.menu("Actor_Number_2"))
      @pre_cache_actor_menu.push(Cache.menu("Actor_Scope_All"))
      @pre_cache_actor_menu.push(Cache.menu("Actor_Members_Arrow"))
      @pre_cache_actor_menu.push(Cache.menu("Actor_Meter"))
  end
   
end

#==============================================================================
# ■ Actor Menu Status
#==============================================================================
class Actor_Menu_Status
  
  include MOG_ACTOR_MENU_STATUS
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(actor)
      @actor = actor
      @active = false
      set_old_parameter
      create_sprites
  end

  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------  
  def create_sprites
      @parameter_number = $game_temp.pre_cache_actor_menu[3]
      @parameter_cw = @parameter_number.width / 10
      @parameter_ch = @parameter_number.height   
      create_layout
      create_face
      create_parameter
      create_name
      create_states  
  #    update(true,@actor)
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------  
  def dispose
      dispose_layout
      dispose_face
      dispose_parameter
      dispose_name
      dispose_states
  end

  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------   
  def dispose_layout
      @layout.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Face
  #--------------------------------------------------------------------------   
  def dispose_face
      @face.bitmap.dispose if @face.bitmap != nil
      @face.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Parameter
  #--------------------------------------------------------------------------      
  def dispose_parameter
      @parameter.bitmap.dispose
      @parameter.dispose
  end

  #--------------------------------------------------------------------------
  # ● Dispose Name
  #--------------------------------------------------------------------------        
  def dispose_name
      @name.bitmap.dispose
      @name.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose States
  #--------------------------------------------------------------------------            
   def dispose_states
       return if @status == nil
       @status.bitmap.dispose
       @status.dispose
       if @actor_status != nil
          @actor_status.dispose
          @actor_status = nil
       end   
   end   
  
  #--------------------------------------------------------------------------
  # ● Set Old Parameter
  #--------------------------------------------------------------------------  
  def set_old_parameter
      @par = [] if @par == nil
      @par.clear
      @par = [@actor.hp,@actor.mhp,@actor.mp,@actor.mmp,@actor.atk,@actor.def,
              @actor.mat,@actor.mdf,@actor.agi,@actor.luk,@actor.level,@actor.tp]
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_actor_menu[1]
      @org_pos = [LAYOUT_POSITION[0],LAYOUT_POSITION[1]]
      @layout.x = @org_pos[0] + 150
      @layout.y = @org_pos[1]
      @layout.z = 10
      @layout.opacity = 0
  end

  #--------------------------------------------------------------------------
  # ● Create Parameter
  #--------------------------------------------------------------------------
  def create_parameter
      @parameter = Sprite.new
      @parameter.bitmap = Bitmap.new(@layout.bitmap.width,@layout.bitmap.height)
      @org_pos_par = [@org_pos[0] + PAR_POSITION[0],
                      @org_pos[1] + PAR_POSITION[1]]
      @parameter.x = @org_pos_par[0] + 150
      @parameter.y = @org_pos_par[1]
      @parameter.z = 11
      @parameter.opacity = 0
      refresh_parameter
  end
  
  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------  
  def create_face
      @face = Sprite.new
      @face.bitmap = Bitmap.new(96,96)
      @org_pos_face = [@org_pos[0] + FACE_POSITION[0],
                       @org_pos[1] + FACE_POSITION[1]]
      @face.x = @org_pos_face[0] + 150
      @face.y = @org_pos_face[1]
      @face.z = 11
      @face.opacity = 0
      refresh_face
  end
  
  #--------------------------------------------------------------------------
  # ● Create Name
  #--------------------------------------------------------------------------   
  def create_name
      @name = Sprite.new
      @name.bitmap = Bitmap.new(140,32)
      @name.bitmap.font.name = FONT_NAME
      @name.bitmap.font.size = FONT_SIZE
      @name.bitmap.font.bold = FONT_BOLD
      @org_pos_name = [@org_pos[0] + NAME_POSITION[0],
                       @org_pos[1] + NAME_POSITION[1]]
      @name.x = @org_pos_name[0] + 150
      @name.y = @org_pos_name[1]
      @name.z = 11
      @name.opacity = 0
      refresh_name     
  end  
  
  #--------------------------------------------------------------------------
  # ● Create_States
  #--------------------------------------------------------------------------      
  def create_states
      @status_old = nil
      @status_flow = [-24,0]   
      @status = Sprite.new
      @status.bitmap = Bitmap.new(24,24)
      @org_pos_states = [@org_pos[0] + STATES_POSITION[0],
                         @org_pos[1] + STATES_POSITION[1]]      
      @status.x = @org_pos_states[0] + 150
      @status.y = @org_pos_states[1]
      @status.z = 11
  end      

  #--------------------------------------------------------------------------
  # * Refresh States
  #--------------------------------------------------------------------------        
  def refresh_states
      check_icon_image
      @status_old = @actor.states
      @status_flow = [0,0]
      @actor_status.dispose if @actor_status != nil
      @states_size = @actor.states.size > 0 ? (26 * @actor.states.size) : 24
      @actor_status = Bitmap.new(@states_size,24)
      index = 0
      for i in @actor.states
         rect = Rect.new(i.icon_index % 16 * 24, i.icon_index / 16 * 24, 24, 24)
         @actor_status.blt(26 * index , 0, @icon_image, rect)
         index += 1
      end
  end   
  
  #--------------------------------------------------------------------------
  # * Flow_Status
  #--------------------------------------------------------------------------         
  def flow_states
      return if @actor_status == nil
      @status.bitmap.clear
      return if @actor.states.size == 0
      st_src_rect = Rect.new(@status_flow[0],0, 24,24)
      @status.bitmap.blt(0,0, @actor_status, st_src_rect)
      if STATES_SCROLLING_ANIMATION
         @status_flow[0] += 1
         @status_flow[0] = -24 if @status_flow[0] >= @states_size + 2
      else   
         @status_flow[1] += 1 unless @actor.states.size <= 1
         if @status_flow[1] > 30
            @status_flow[1] = 0
            @status_flow[0] += 26
            @status_flow[0] = 0 if @status_flow[0] >= (@states_size - 0)
         end   
     end   
  end        
  
  #--------------------------------------------------------------------------
  # * Check Icon Image
  #--------------------------------------------------------------------------         
  def check_icon_image
      if @icon_image == nil or @icon_image.disposed?
         @icon_image = Cache.system("Iconset")
      end   
  end   
  
  #--------------------------------------------------------------------------
  # ● Can Refresh Parameter
  #--------------------------------------------------------------------------
  def can_refresh_parameter?
      return false if !@active
      return true if @par[0] != @actor.hp
      return true if @par[1] != @actor.mhp
      return true if @par[2] != @actor.mp
      return true if @par[3] != @actor.mmp
      return true if @par[4] != @actor.atk
      return true if @par[5] != @actor.def
      return true if @par[6] != @actor.mat
      return true if @par[7] != @actor.mdf
      return true if @par[8] != @actor.agi
      return true if @par[9] != @actor.luk
      return true if @par[10] != @actor.level
      return true if @par[11] != @actor.tp
      return false
  end  

  #--------------------------------------------------------------------------
  # ● Refresh All
  #--------------------------------------------------------------------------  
  def refresh_all(actor)      
      @actor = actor
      refresh_parameter
      refresh_face
      refresh_name
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Name
  #--------------------------------------------------------------------------      
  def refresh_name   
      @name.bitmap.clear
      @name.bitmap.draw_text(0,0,140,32,@actor.name.to_s,0)
  end
  
  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------   
  def refresh_parameter
      set_old_parameter
      @parameter.bitmap.clear      
      value = @actor.level
      x = 67
      y = 24
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.tp
      x = 140
      y = 24
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.hp
      x = 70
      y = 46
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
   
      value = @actor.mhp
      x = 140
      y = 46
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.mp
      x = 70
      y = 46 + 22 * 1
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)

      value = @actor.mmp
      x = 140
      y = 46 + 22 * 1
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
  
      value = @actor.atk
      x = 70
      y = 46 + 22 * 2
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.def
      x = 70
      y = 46 + 22 * 3
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.agi
      x = 70
      y = 46 + 22 * 4
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.mat
      x = 140
      y = 46 + 22 * 2
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.mdf
      x = 140
      y = 46 + 22 * 3
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
      value = @actor.luk
      x = 140
      y = 46 + 22 * 4
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
  end
   
  #--------------------------------------------------------------------------
  # ● Refresh Number
  #--------------------------------------------------------------------------     
  def refresh_number(sprite,image,value,number_cw,number_ch,x,y)
      number = value.truncate.abs.to_s.split(//)
      x2 = -number_cw * number.size
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch)
          sprite.bitmap.blt(x + x2 + (number_cw  *  i), y, image, nsrc_rect)        
      end      
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Face
  #--------------------------------------------------------------------------  
  def refresh_face
      #return
      @face.bitmap.clear
      face_image = Cache.face(@actor.face_name)
      arect = Rect.new(@actor.face_index  % 4 * 96, @actor.face_index / 4 * 96, 96, 96)
      @face.bitmap.blt(0,0, face_image, arect)
     # face_image.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Update Slide
  #--------------------------------------------------------------------------  
  def update_slide
      slide_speed = 10
      opac_speed = 23
      @slide_range = (@org_pos[0] + 150)
      if @active
         if @layout.x > @org_pos[0]
            @layout.x -= slide_speed
            @parameter.x -= slide_speed
            @face.x -= slide_speed
            @name.x -= slide_speed
            @status.x -= slide_speed
            @layout.opacity += opac_speed
            @parameter.opacity += opac_speed
            @face.opacity += opac_speed
            @name.opacity += opac_speed
            @status.opacity += opac_speed
            if @layout.x <= @org_pos[0]
               @layout.x = @org_pos[0]
               @parameter.x = @org_pos_par[0]
               @face.x = @org_pos_face[0]
               @name.x = @org_pos_name[0]
               @status.x = @org_pos_states[0]
               @layout.opacity = 255
               @parameter.opacity = 255
               @face.opacity = 255
               @name.opacity = 255  
               @status.opacity = 255
            end  
         end   
      else
         if @layout.x <  @slide_range
            @layout.x += slide_speed
            @parameter.x += slide_speed
            @face.x += slide_speed
            @name.x += slide_speed
            @status.x += slide_speed
            @layout.opacity -= opac_speed
            @parameter.opacity -= opac_speed
            @face.opacity -= opac_speed
            @name.opacity -= opac_speed
            @status.opacity -= opac_speed
            if @layout.x >=  @slide_range
               @layout.x =  @slide_range
               @parameter.x = @org_pos_par[0] + 150
               @face.x = @org_pos_face[0] + 150
               @name.x = @org_pos_name[0] + 150
               @status.x = @org_pos_states[0] + 150
               @layout.opacity = 0
               @parameter.opacity = 0
               @face.opacity = 0
               @name.opacity = 0   
               @status.opacity = 0   
            end  
         end   
         
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update(active,actor)
      @active = active
      update_slide
      return if !@active
      refresh_all(actor) if actor != @actor
      refresh_parameter if can_refresh_parameter?
      refresh_states if @status_old != @actor.states      
      flow_states
  end      
  
end



#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache Main Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_main_menu
      @pre_cache_main_menu = []
      @pre_cache_main_menu.push(Cache.menu_main("Background"))
      @pre_cache_main_menu.push(Cache.menu_main("Layout"))
      @pre_cache_main_menu.push(Cache.menu_main("Time_Number"))
      @pre_cache_main_menu.push(Cache.menu_main("Gold_Number"))
      @pre_cache_main_menu.push(Cache.menu_main("Members_Layout"))
      @pre_cache_main_menu.push(Cache.menu_main("Members_Arrow"))
      @pre_cache_main_menu.push(Cache.menu_main("Par_Number_1"))
      @pre_cache_main_menu.push(Cache.menu_main("Par_Number_2"))
      @pre_cache_main_menu.push(Cache.menu_main("Par_Meter"))
      @pre_cache_main_menu.push(Cache.menu_main("Par_Layout"))
  end   
   
end

class Window_MenuCommand < Window_Command
# attr_accessor :handler
end

#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu
  include MOG_MENU
  include MOG_MENU_BASE
  
  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------        
  def main
      execute_setup
      execute_loop
      execute_dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Setup
  #--------------------------------------------------------------------------        
  def execute_setup
      $game_temp.execute_pre_cache_icon if $game_temp.can_pre_cache_icon?
      @phase = 0
      @members_windows_active = false
      @members_index = 0
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Lopp
  #--------------------------------------------------------------------------        
  def execute_loop
      Graphics.transition(10)
      loop do
         Input.update
         update
         Graphics.update
         break if SceneManager.scene != self
      end
  end  
  
end

#==============================================================================
# ■ Face Members
#==============================================================================
class Face_Members_Sprite < Sprite
  include MOG_MENU
  attr_accessor :index
  attr_accessor :active
  attr_accessor :actor_id
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------                  
  def initialize(viewport = nil, index, actor_id)
      super(viewport)
      @active = false
      @index = index
      @actor_id = actor_id
      @active = false
      self.bitmap = Cache.menu("Face" + @actor_id.to_s)
      self.z = 12
      self.ox = self.bitmap.width / 2
      self.oy = self.bitmap.height / 2
      members_size = $game_party.members.size - 1
      members_size = 3 if members_size > 3
      space_base = (MEMBERS_FACE_SPACE * @index)
      space = space_base - ((ACTOR_SPACE * members_size ) / 2) +  MEMBERS_FACE_POSITION[0]
      @org_pos =  [space + self.ox , self.oy   ]
      @ny = 0
      @zoom_duration = [0,0,false]
      self.x = @org_pos[0]
      self.y = @org_pos[1]
  end  
  
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------                     
  def dispose
      super
      self.bitmap.dispose
  end  
  
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------                     
  def update_command(index, ny)
      @active = index == @index ? true : false
      @ny = ny
      update_slide(index)
      update_opacity
      update_zoom   
  end  
   
#--------------------------------------------------------------------------
# ● Update Opacity
#--------------------------------------------------------------------------                       
  def update_opacity
      if @active
         self.opacity += 12
      else  
         self.opacity -= 6 if self.opacity > 120
      end  
  end  
  
#--------------------------------------------------------------------------
# ● Update Zoom
#--------------------------------------------------------------------------                       
  def update_zoom
      if @active
         if !@zoom_duration[2]
            update_zoom_out
            @zoom_duration = [0,0,true] if self.zoom_x == 1.00  
         else  
            update_zoom_effect
         end
      else
         @zoom_duration[2] = false   
         update_zoom_in
      end  
  end   
  
#--------------------------------------------------------------------------
# ● Update Zoom Out
#--------------------------------------------------------------------------                        
  def update_zoom_out
      return if self.zoom_x == 1.00
      self.zoom_x += 0.03
      self.zoom_y += 0.03
      if self.zoom_x >= 1.00
            self.zoom_x = 1.00
            self.zoom_y = 1.00
      end   
   end   
  
#--------------------------------------------------------------------------
# ● Update Zoom In
#--------------------------------------------------------------------------                           
  def update_zoom_in
      return if self.zoom_x == 0.80
      self.zoom_x -= 0.03
      self.zoom_y -= 0.03
      if self.zoom_x <= 0.80
         self.zoom_x = 0.80
         self.zoom_y = 0.80
      end   
  end      
         
#--------------------------------------------------------------------------
# ● Update Zoom_effect
#--------------------------------------------------------------------------                        
def update_zoom_effect
     @zoom_duration[0] += 1
     return if @zoom_duration[0] < 1
     @zoom_duration[0] = 0
     @zoom_duration[1] += 1
     case @zoom_duration[1]
          when 1..30
             self.zoom_x -= 0.005
             self.zoom_y -= 0.005                 
          when 31..60
             self.zoom_x += 0.005
             self.zoom_y += 0.005           
          when 61..999  
          @zoom_duration[1] = 0
          self.zoom_x = 1.00
          self.zoom_y = 1.00
     end
end  
  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(index)
      np = @org_pos[0] - (index * MEMBERS_FACE_SPACE) + @ny
      cp = self.x
      sp = 5 + ((cp - np).abs / 5)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      self.x = cp      
  end  
  
#--------------------------------------------------------------------------
# ● Active
#--------------------------------------------------------------------------                        
  def active(value)
      @active = value
  end   
      
end

#==============================================================================
# ■ Members Arrow Sprite
#==============================================================================
class Members_Arrow_Sprite
   include MOG_MENU
   attr_accessor :active
   
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------
  def initialize
      @active = false
      create_members_layout
      create_arrows
  end
  
#--------------------------------------------------------------------------
# ● Create Members Layout
#--------------------------------------------------------------------------  
  def create_members_layout
      @layout_members = Sprite.new
      @layout_members.bitmap = $game_temp.pre_cache_main_menu[4]
      @layout_members.z = 13
      @layout_members_pos = [MEMBERS_ARROW_LAYOUT_POSITION[0], MEMBERS_ARROW_LAYOUT_POSITION[1]]
      @layout_members.x = @layout_members_pos[0]
      @layout_members.y = @layout_members_pos[1]
      @layout_members.opacity = 0
  end
  
#--------------------------------------------------------------------------
# ● Create Arrows
#--------------------------------------------------------------------------  
  def create_arrows
      @arrow_animation_duration = [0,0]
      @arrow_1 = Sprite.new
      @arrow_1.bitmap = $game_temp.pre_cache_main_menu[5]
      @arrow_1.z = 13
      @arrow1_pos = [MEMBERS_ARROW_1_POSITION[0], MEMBERS_ARROW_1_POSITION[1]]
      @arrow_1.x = @arrow1_pos[0]
      @arrow_1.y = @arrow1_pos[1]
      @arrow_1.opacity = 0
      @arrow_2 = Sprite.new
      @arrow_2.bitmap = $game_temp.pre_cache_main_menu[5]
      @arrow_2.z = 13
      @arrow_2.mirror = true
      @arrow2_pos = [MEMBERS_ARROW_2_POSITION[0], MEMBERS_ARROW_2_POSITION[1]]
      @arrow_2.x = @arrow2_pos[0]
      @arrow_2.y = @arrow2_pos[1]
      @arrow_2.opacity = 0
      @nx = 0
      @nx2 = 0
  end  
  
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------                              
  def dispose
      dispose_members_layout
      dispose_arrows
  end

#--------------------------------------------------------------------------
# ● Dispose Arrows
#--------------------------------------------------------------------------                                
def dispose_arrows
     return if @arrow_1 == nil
     @arrow_1.dispose
     @arrow_2.dispose
     @arrow_1 = nil
end  
  
#--------------------------------------------------------------------------
# ● Dispose Members Layout
#--------------------------------------------------------------------------   
  def dispose_members_layout
      return if @layout_members == nil
      @layout_members.dispose
      @layout_members = nil
  end

#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------                              
  def update
      update_arrow_animation
      update_position
      @layout_members.opacity += 15
      @arrow_1.opacity += 15
      @arrow_2.opacity += 15
  end  
  
#--------------------------------------------------------------------------
# ● Update Position
#--------------------------------------------------------------------------                                
  def update_position
      @arrow_1.x = @arrow1_pos[0] + @nx + @nx2
      @arrow_2.x = @arrow2_pos[0] + @nx - @nx2   
      @layout_members.x = @layout_members_pos[0] + @nx
  end

#--------------------------------------------------------------------------
# ● Update Arrow Animation
#--------------------------------------------------------------------------                                
  def update_arrow_animation
      @arrow_animation_duration[0] += 1
      return if @arrow_animation_duration[0] < 2
      @arrow_animation_duration[0] = 0
      @arrow_animation_duration[1] += 1
      case @arrow_animation_duration[1]
         when 1..20
           @nx2 -= 1
         when 21..40
           @nx2 += 1
         when 41..999  
           @nx2 = 0
           @arrow_animation_duration[1] = 0            
      end
  end

#--------------------------------------------------------------------------
# ● Active
#--------------------------------------------------------------------------                        
  def nx(value)
      @nx = value
  end   
  
end

#==============================================================================
# ■ Command Menu Sprite
#==============================================================================
class Command_Menu_Sprite < Sprite
  include MOG_MENU
  attr_accessor :index
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------                  
  def initialize(viewport = nil,index,command_name)
      super(viewport)
      @index = index
      @command_name = command_name
      self.bitmap = Cache.menu_main("CM_" + @command_name.to_s)
      @cw = self.bitmap.width
      @ch = self.bitmap.height      
      cw1 = self.bitmap.height / 2
      cw2 = (self.bitmap.width + COMMAND_SPACE) * index
      self.ox = self.bitmap.width / 2
      self.oy = self.bitmap.height / 2
      @org_pos = [COMMAND_POSITION[0] + cw2 + self.ox, COMMAND_POSITION[1] + self.oy]
      @slide_max = @org_pos[1] + cw1
      @zoom_duration = [0,0,false]
      @zoom_limit = [1.00, 1.20]
      self.x = -@cw
      self.y = -@ch
      self.z = 10
      @active = false
      @visible_old = true
      @np = [-@cw,-@ch]
      @sprite_name = Sprite.new
      @sprite_name.bitmap = Bitmap.new(100,32)
      @sprite_name.bitmap.font.name = "Georgia"
      @sprite_name.bitmap.draw_text(0,0,100,32,@command_name.to_s,0)
      @sprite_name.z = 11
      @np_name = [-@cw,-@ch]
      @cw_name_pos = [@cw - self.ox + 4, -self.oy + 4]
  end  
  
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------                     
  def dispose_command
      self.bitmap.dispose
      @sprite_name.bitmap.dispose
      @sprite_name.dispose
  end  
  
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------                     
  def update_command(index, visible)
      @active = index == @index ? true : false
      refresh_active(visible) if @visible_old != visible
      update_position
      if !visible
          if @active
             self.opacity += 15
          else
             self.opacity -= 15
          end   
          return
      end  
      update_zoom
      update_opacity
  end   
  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,cp,np)
      sp = 2 + ((cp - np).abs / 15)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      self.x = cp if type == 0
      self.y = cp if type == 1
      @sprite_name.x = cp if type == 2
      @sprite_name.y = cp if type == 3
  end
  
#--------------------------------------------------------------------------
# ● Update Position
#--------------------------------------------------------------------------  
  def update_position
      unless !@visible_old
      if @active
         @np[0] = @org_pos[0]
         @np[1] = @slide_max
      else
         @np[0] = @org_pos[0]
         @np[1] = @org_pos[1]
      end  
      end
      update_slide(0,self.x,@np[0])
      update_slide(1,self.y,@np[1])
      update_sprite_name_position
  end      

#--------------------------------------------------------------------------
# ● Update Sprite Name Position
#--------------------------------------------------------------------------  
def update_sprite_name_position
      if (@active and !@visible_old) or !@active
         @np_name[0] = self.x + @cw_name_pos[0] + COMMAND_NAME_POSITION[0]
         @np_name[1] = self.y + @cw_name_pos[1] + COMMAND_NAME_POSITION[1]
      else
         @np_name[0] = COMMAND_NAME_POSITION_2[0]
         @np_name[1] = COMMAND_NAME_POSITION_2[1]
      end
      update_slide(2,@sprite_name.x,@np_name[0])
      update_slide(3,@sprite_name.y,@np_name[1])      
      @sprite_name.visible = @active ? true : false
  end     
  
  
#--------------------------------------------------------------------------
# ● Refresh Active
#--------------------------------------------------------------------------                       
  def refresh_active(visible)
      if @active and !visible
         @np[0] = COMMAND_POSITION_2[0] + (@cw / 2)
         @np[1] = COMMAND_POSITION_2[1]  
         self.zoom_x = @zoom_limit[0]
         self.zoom_y = @zoom_limit[0]
      else
         @np[0] = @org_pos[0]
         @np[1] = @org_pos[1]     
      end
      @visible_old = visible
  end
  
#--------------------------------------------------------------------------
# ● Update Opacity
#--------------------------------------------------------------------------  
  def update_opacity
      if @active
         self.opacity += 15
      else
         self.opacity -= 15 if self.opacity > 160
         if self.opacity < 160
            self.opacity += 15
            self.opacity = 160 if self.opacity > 160
         end   
      end   
  end  
  
#--------------------------------------------------------------------------
# ● Update Zoom
#--------------------------------------------------------------------------                       
  def update_zoom
      if @active
         if !@zoom_duration[2]
            update_zoom_out
            @zoom_duration = [0,0,true] if self.zoom_x == @zoom_limit[1]
         else  
            update_zoom_effect
         end
      else
         @zoom_duration[2] = false   
         update_zoom_in
      end  
  end   
  
#--------------------------------------------------------------------------
# ● Update Zoom Out
#--------------------------------------------------------------------------                        
  def update_zoom_out
      return if self.zoom_x == @zoom_limit[1]
      self.zoom_x += 0.03
      self.zoom_y += 0.03
      if self.zoom_x >= @zoom_limit[1]
            self.zoom_x = @zoom_limit[1]
            self.zoom_y = @zoom_limit[1]
      end   
   end   
  
#--------------------------------------------------------------------------
# ● Update Zoom In
#--------------------------------------------------------------------------                           
  def update_zoom_in
      return if self.zoom_x == @zoom_limit[0]
      self.zoom_x -= 0.03
      self.zoom_y -= 0.03
      if self.zoom_x <= @zoom_limit[0]
         self.zoom_x = @zoom_limit[0]
         self.zoom_y = @zoom_limit[0]
      end   
  end      
         
#--------------------------------------------------------------------------
# ● Update Zoom_effect
#--------------------------------------------------------------------------                        
def update_zoom_effect
     @zoom_duration[0] += 1
     return if @zoom_duration[0] < 1
     @zoom_duration[0] = 0
     @zoom_duration[1] += 1
     case @zoom_duration[1]
          when 1..30
             self.zoom_x -= 0.005
             self.zoom_y -= 0.005                 
          when 31..60
             self.zoom_x += 0.005
             self.zoom_y += 0.005           
          when 61..999  
          @zoom_duration[1] = 0
          self.zoom_x = @zoom_limit[1]
          self.zoom_y = @zoom_limit[1]
     end
end   
  
end

#==============================================================================
# ■ Actor Menu Pictures
#==============================================================================
class Actor_Menu_Pictures < Sprite
  include MOG_MENU
  attr_accessor :index
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------                  
  def initialize(viewport = nil,index,actor_id)
      super(viewport)
      @index = index
      @actor_id = actor_id
      self.bitmap = Cache.menu("Actor" + @actor_id.to_s)
      self.z = 2
      set_position
      @slide_max = @org_pos[0] + 24
      auto_y = Graphics.height - self.bitmap.height
      self.ox = self.bitmap.width / 2
      self.x = @org_pos[0] - 15
      self.y = auto_y
      self.opacity = 0
      @op_time = 10 * @index
  end  
  
#--------------------------------------------------------------------------
# ● Set Position
#--------------------------------------------------------------------------  
  def set_position
      members_size = $game_party.members.size
      members_size = $game_party.max_battle_members if members_size > $game_party.max_battle_members
      space_members = ((Graphics.width ) / members_size)
      space_members_2 = (space_members * @index)
      space_members_3 = ((space_members / 2) * (members_size - 1))
      center = Graphics.width / 2
      space = center + space_members_2 - space_members_3
      @org_pos =  [space, ACTOR_POSITION[1]]   
  end
      
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------                     
  def dispose_picture
      self.bitmap.dispose
  end  
  
#--------------------------------------------------------------------------
# ● Update Picture
#--------------------------------------------------------------------------  
  def update_picture
      @op_time -= 1 if @op_time > 0
      return if @op_time > 0
      self.opacity += 15
      self.x += 1 if self.x < @org_pos[0]
  end
  
end

#==============================================================================
# ■ Actor Menu Parameter
#==============================================================================
class Actor_Menu_Parameter
  
  include MOG_MENU
  attr_accessor :index
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------                     
  def initialize(index, actor)
      setup(index, actor)
      create_layout_par
      create_hp_number
      create_hp2_number
      create_mp_number
      create_mp2_number
      create_hp_meter
      create_mp_meter
      create_level
      create_states
      create_name
  end
  
  #--------------------------------------------------------------------------
  # ● Setup
  #--------------------------------------------------------------------------                       
  def setup(index, actor)
      @actor = actor
      @index = index
      set_position
      @number_image_1 = $game_temp.pre_cache_main_menu[6]
      @number_image_1_cw = @number_image_1.width / 10
      @number_image_1_ch = @number_image_1.height / 3
      @number_image_2 = $game_temp.pre_cache_main_menu[7]
      @number_image_2_cw = @number_image_2.width / 10
      @number_image_2_ch = @number_image_2.height
      @par_meter_image = $game_temp.pre_cache_main_menu[8]
      @par_meter_cw = @par_meter_image.width / 3
      @par_meter_ch = @par_meter_image.height / 2
      @par_meter_flow = 0
      @par_meter_flow_max = @par_meter_image.width - @par_meter_cw
      @icon_image = $game_temp.pre_cache_icon
  end

  #--------------------------------------------------------------------------
  # ● Set Position
  #--------------------------------------------------------------------------                       
  def set_position
      members_size = $game_party.members.size
      members_size = $game_party.max_battle_members if members_size >= $game_party.max_battle_members
      space_members = ((Graphics.width ) / members_size)
      space_members_2 = (space_members * @index)
      space_members_3 = ((space_members / 2) * (members_size - 1))
      center = Graphics.width / 2
      layout_ox = $game_temp.pre_cache_main_menu[9].width / 2
      @base_x = center - layout_ox + space_members_2 - space_members_3  
  end
      
  #--------------------------------------------------------------------------
  # ● Create Layout Par
  #--------------------------------------------------------------------------                       
  def create_layout_par
      @layout_par = Sprite.new
      @layout_par.bitmap = $game_temp.pre_cache_main_menu[9]
      @layout_par.z = 10
      @layout_par.x = @base_x + ACTOR_LAYOUT_POSITON[0]      
      @layout_par.y = ACTOR_LAYOUT_POSITON[1]
  end
  
  #--------------------------------------------------------------------------
  # ● Create Name
  #--------------------------------------------------------------------------  
  def create_name
      @actor_name = Sprite.new
      @actor_name.bitmap = Bitmap.new(160,32)
      @actor_name.bitmap.font.name = "Georgia"
      @actor_name.bitmap.font.size = 18
      @actor_name.bitmap.font.bold = true
      @actor_name.bitmap.font.italic = true
      actor_name = @actor.name
      @actor_name.bitmap.font.color = Color.new(0,0,0)
      @actor_name.bitmap.draw_text(1,1,140,32,actor_name,1)
      @actor_name.bitmap.font.color = Color.new(255 ,255,255)
      @actor_name.bitmap.draw_text(0,0,140,32,actor_name,1)
      @actor_name.z = 12
      @actor_name.x = @base_x - 20
      @actor_name.y = 250
  end
  
  #--------------------------------------------------------------------------
  # ● Create HP Number
  #--------------------------------------------------------------------------  
  def create_hp_number
      @hp_number = Sprite.new
      @hp_number.bitmap = Bitmap.new(@number_image_1_cw * 4,@number_image_1_ch)
      @hp_number.z = 12
      @hp_number.x = @base_x + ACTOR_HP1_POSITON[0]
      @hp_number.y =  ACTOR_HP1_POSITON[1]
      refresh_hp
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh HP
  #--------------------------------------------------------------------------   
  def refresh_hp
      @hp_number.bitmap.clear
      number = @actor.hp.abs.to_s.split(//)
      number_cw = @number_image_1_cw
      number_ch = @number_image_1_ch
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch)
          @hp_number.bitmap.blt(number_cw  *  i, 0, @number_image_1, nsrc_rect)        
      end
  end
   
  #--------------------------------------------------------------------------
  # ● Create HP2 Number
  #--------------------------------------------------------------------------  
  def create_hp2_number
      @hp2_number = Sprite.new
      @hp2_number.bitmap = Bitmap.new(@number_image_2_cw * 4,@number_image_2_ch)
      @hp2_number.z = 12
      @hp2_number.x = @base_x + ACTOR_HP2_POSITON[0]
      @hp2_number.y =  ACTOR_HP2_POSITON[1]
      refresh_hp2
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh HP2
  #--------------------------------------------------------------------------   
  def refresh_hp2
      @hp2_number.bitmap.clear
      number = @actor.mhp.abs.to_s.split(//)
      number_cw = @number_image_2_cw
      number_ch = @number_image_2_ch
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch)
          @hp2_number.bitmap.blt(number_cw  *  i, 0, @number_image_2, nsrc_rect)        
      end
  end  
  
  #--------------------------------------------------------------------------
  # ● Create MP Number
  #--------------------------------------------------------------------------  
  def create_mp_number
      @mp_number = Sprite.new
      @mp_number.bitmap = Bitmap.new(@number_image_1_cw * 4,@number_image_1_ch)
      @mp_number.z = 12
      @mp_number.x = @base_x + ACTOR_MP1_POSITON[0]
      @mp_number.y =  ACTOR_MP1_POSITON[1]
      refresh_mp
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh MP
  #--------------------------------------------------------------------------   
  def refresh_mp
      @mp_number.bitmap.clear
      number = @actor.mp.abs.to_s.split(//)
      number_cw = @number_image_1_cw
      number_ch = @number_image_1_ch
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch)
          @mp_number.bitmap.blt(number_cw  *  i, 0, @number_image_1, nsrc_rect)        
      end
    end
   
  #--------------------------------------------------------------------------
  # ● Create MP2 Number
  #--------------------------------------------------------------------------  
  def create_mp2_number
      @mp2_number = Sprite.new
      @mp2_number.bitmap = Bitmap.new(@number_image_2_cw * 4,@number_image_2_ch)
      @mp2_number.z = 12
      @mp2_number.x = @base_x + ACTOR_MP2_POSITON[0]
      @mp2_number.y =  ACTOR_MP2_POSITON[1]
      refresh_mp2
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh MP2
  #--------------------------------------------------------------------------   
  def refresh_mp2
      @mp2_number.bitmap.clear
      number = @actor.mmp.abs.to_s.split(//)
      number_cw = @number_image_2_cw
      number_ch = @number_image_2_ch
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch)
          @mp2_number.bitmap.blt(number_cw  *  i, 0, @number_image_2, nsrc_rect)        
      end
  end      
   
  #--------------------------------------------------------------------------
  # ● Create Level
  #--------------------------------------------------------------------------      
  def create_level
      @level = Sprite.new
      @level.bitmap = Bitmap.new(@number_image_1_cw * 2, @number_image_1_ch)
      @level.z = 12
      @level.x = @base_x + ACTOR_LEVEL_POSITON[0]
      @level.y = ACTOR_LEVEL_POSITON[1]
      refresh_level
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Level
  #--------------------------------------------------------------------------        
  def refresh_level
      @level.bitmap.clear
      number = @actor.level.abs.to_s.split(//)
      number_cw = @number_image_1_cw
      number_ch = @number_image_1_ch
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, number_ch * 2, number_cw , number_ch)
          @level.bitmap.blt(number_cw  *  i, 0, @number_image_1, nsrc_rect)        
      end      
  end  
  
  #--------------------------------------------------------------------------
  # ● Create HP Meter
  #--------------------------------------------------------------------------      
  def create_hp_meter
      @hp_meter = Sprite.new
      @hp_meter.bitmap = Bitmap.new(@par_meter_cw,@par_meter_ch)
      @hp_meter.z = 11
      @hp_meter.x = @base_x + ACTOR_HP_METER_POSITON[0]
      @hp_meter.y = ACTOR_HP_METER_POSITON[1]
      update_flow_hp
  end
  
  #--------------------------------------------------------------------------
  # ● Update Flow HP
  #--------------------------------------------------------------------------        
  def update_flow_hp
      @hp_meter.bitmap.clear
      par_width = @par_meter_cw * @actor.hp / @actor.mhp
      m_scr = Rect.new(@par_meter_flow,0, par_width, @par_meter_ch)
      @hp_meter.bitmap.blt(0,0,@par_meter_image, m_scr)
  end  
  
  #--------------------------------------------------------------------------
  # ● Create MP Meter
  #--------------------------------------------------------------------------      
  def create_mp_meter
      @mp_meter = Sprite.new
      @mp_meter.bitmap = Bitmap.new(@par_meter_cw,@par_meter_ch)
      @mp_meter.z = 11
      @mp_meter.x = @base_x + ACTOR_MP_METER_POSITON[0]
      @mp_meter.y = ACTOR_MP_METER_POSITON[1]
      update_flow_mp
  end
  
  #--------------------------------------------------------------------------
  # ● Update Flow MP
  #--------------------------------------------------------------------------        
  def update_flow_mp
      @mp_meter.bitmap.clear
      par_width = @par_meter_cw * @actor.mp / @actor.mmp rescue nil
      par_width = 0 if par_width == nil
      m_scr = Rect.new(@par_meter_flow,@par_meter_ch, par_width, @par_meter_ch)
      @mp_meter.bitmap.blt(0,0,@par_meter_image, m_scr)
      @par_meter_flow += 3
      @par_meter_flow = 0 if @par_meter_flow > @par_meter_flow_max
  end   

  #--------------------------------------------------------------------------
  # ● Create_States
  #--------------------------------------------------------------------------      
  def create_states
      refresh_states
      @status = Sprite.new
      @status.bitmap = Bitmap.new(24,24)
      @status.x = @base_x +  ACTOR_STATES_POSITION[0]
      @status.y = ACTOR_STATES_POSITION[1]
      @status_flow = -24
      @states_speed = 50
      @status.z = 503
      @old_states = @actor.states
      refresh_states
      update_flow_states
  end      
   
  #--------------------------------------------------------------------------
  # ● Upate Flow_Status
  #--------------------------------------------------------------------------         
  def update_flow_states
      return if @actor.states.size == 0 and !@status.visible
      @states_speed = 0
      @status.bitmap.clear
      src_rect = Rect.new(@status_flow,0, 24,24)
      @status.bitmap.blt(0,0, @actor_status, src_rect)
      @status.visible = @actor.states.size == 0 ? false : true
      @status_flow += 1
      @status_flow = -24 if @status_flow >= @states_size - 24
  end   
  
  #--------------------------------------------------------------------------
  # ● Refresh States
  #--------------------------------------------------------------------------        
  def refresh_states
      @old_states = @actor.states
      if @actor_status != nil
         @actor_status.dispose
         @actor_status = nil
      end
      @states_size = @actor.states.size > 0 ? (48 * @actor.states.size) : 24
      @actor_status = Bitmap.new(@states_size,24)
      index = 0
      for i in  @actor.states
         rect = Rect.new(i.icon_index % 16 * 24, i.icon_index / 16 * 24, 24, 24)
         @actor_status.blt(48 * index , 0, @icon_image, rect)
         index += 1
      end
  end   
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------         
  def update
      update_flow_hp
      update_flow_mp
      update_flow_states
  end  
  
end


#==============================================================================
# ■ Actor Menu Parameter
#==============================================================================
class Actor_Menu_Parameter
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------                     
  def dispose
      dispose_actor_layout_par
      dispose_name
      dispose_hp_number
      dispose_mp_number
      dispose_hp_meter
      dispose_mp_meter
      dispose_states
      dispose_level
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Actor Layout Par
  #--------------------------------------------------------------------------                        
  def dispose_actor_layout_par
      return if @layout_par == nil
      @layout_par.dispose
      @layout_par = nil
  end   

  #--------------------------------------------------------------------------
  # ● Dispose Name
  #--------------------------------------------------------------------------  
  def dispose_name
      return if @actor_name == nil
      @actor_name.bitmap.dispose
      @actor_name.dispose
      @actor_name = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose HP Number
  #--------------------------------------------------------------------------      
  def dispose_hp_number
      return if @hp_number == nil
      @hp_number.bitmap.dispose
      @hp_number.dispose
      @hp_number = nil
      @hp2_number.bitmap.dispose
      @hp2_number.dispose
      @hp2_number = nil      
      
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose MP Number
  #--------------------------------------------------------------------------      
  def dispose_mp_number
      return if @mp_number == nil
      @mp_number.bitmap.dispose
      @mp_number.dispose
      @mp_number = nil
      @mp2_number.bitmap.dispose
      @mp2_number.dispose
      @mp2_number = nil      
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose States
  #--------------------------------------------------------------------------            
   def dispose_states
       return if @status == nil
       @status.bitmap.dispose
       @status.dispose
       if @actor_status != nil
          @actor_status.dispose
          @actor_status = nil
       end   
   end  
  
  #--------------------------------------------------------------------------
  # ● Dispose MP Meter
  #--------------------------------------------------------------------------        
  def dispose_mp_meter
      return if @mp_meter == nil
      @mp_meter.bitmap.dispose
      @mp_meter.dispose
      @mp_meter = nil
  end     
  
  #--------------------------------------------------------------------------
  # ● Dispose HP Meter
  #--------------------------------------------------------------------------        
  def dispose_hp_meter
      return if @hp_meter == nil
      @hp_meter.bitmap.dispose
      @hp_meter.dispose
      @hp_meter = nil
  end

  #--------------------------------------------------------------------------
  # ● Dispose Level
  #--------------------------------------------------------------------------        
  def dispose_level
      return if @level == nil
      @level.bitmap.dispose
      @level.dispose
      @level = nil
  end
   
end  

#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------         
  def create_sprites
      create_menu_background
      create_layout
      create_particles
      create_command
      create_actor_pictures
      create_timer_sprite
      create_gold_number
      create_location
      create_actor_parameter
      create_members
      create_members_layout
      update_members_face
  end

  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------            
  def create_menu_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_main_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end  

  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------              
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_main_menu[1]
      @layout.z = 3
  end
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end
   
  #--------------------------------------------------------------------------
  # ● Create Command
  #--------------------------------------------------------------------------   
  def create_command
      create_command_window
      @command_window.visible = false
      @command_window.x -=544      
      @command_max = @command_window.list.size
      @commnad_name = []
      index = 0
      for i in @command_window.list
         @commnad_name.push(i[:name])
         index += 1
      end   
      @command_scroll_max = @command_max > 6 ? 6 : @command_max
      @command_ny = 0
      @command_sprites = []
      index = 0
      for i in 0...@command_max
          @command_sprites.push(Command_Menu_Sprite.new(nil, index,@commnad_name[index]) )
          index += 1
      end
  end  

  #--------------------------------------------------------------------------
  # ● Create Command Window
  #--------------------------------------------------------------------------     
  def create_command_window
      @command_window = Window_MenuCommand.new
      @command_window.set_handler(:item,      method(:command_item))
      @command_window.set_handler(:skill,     method(:command_personal))
      @command_window.set_handler(:equip,     method(:command_personal))
      @command_window.set_handler(:status,    method(:command_personal))
      @command_window.set_handler(:formation, method(:command_formation))
      @command_window.set_handler(:save,      method(:command_save))
      @command_window.set_handler(:game_end,  method(:command_game_end))
      @command_window.set_handler(:cancel,    method(:return_scene))  
      @command_window.index = $game_temp.menu_index
   end   
      
  #--------------------------------------------------------------------------
  # ● Create Actor Pictures
  #--------------------------------------------------------------------------     
  def create_actor_pictures
      @actor_pictures = []
      members_size = $game_party.members.size
      members_size = $game_party.max_battle_members if members_size >= $game_party.max_battle_members
      for i in 0...members_size
         @actor_pictures.push(Actor_Menu_Pictures.new(nil,i,$game_party.members.id))
      end   
  end
  
  #--------------------------------------------------------------------------
  # ● Create Timer Number
  #--------------------------------------------------------------------------      
  def create_timer_sprite
      update_timer
      @min_old = @min
      @timer_image = $game_temp.pre_cache_main_menu[2]
      @timer_cw = @timer_image.width / 10
      @timer_ch = @timer_image.height
      @timer_sprite = Sprite.new
      @timer_sprite.bitmap = Bitmap.new(@timer_image.width ,@timer_image.height)
      @timer_sprite.z = 11
      @timer_sprite.x = TIME_NUMBER_POS[0]
      @timer_sprite.y = TIME_NUMBER_POS[1]
      refresh_timer
  end
  
  #--------------------------------------------------------------------------
  # ● Create Gold Number
  #--------------------------------------------------------------------------         
  def create_gold_number
      @gold = $game_party.gold
      @gold_image = $game_temp.pre_cache_main_menu[3]
      @gold_cw = @gold_image.width / 10
      @gold_ch = @gold_image.height
      @gold_sprite = Sprite.new
      @gold_sprite.bitmap = Bitmap.new(@gold_image.width ,@gold_image.height)
      @gold_sprite.z = 11
      @gold_sprite.x = GOLD_NUMBER_POS[0]
      @gold_sprite.y = GOLD_NUMBER_POS[1]
      refresh_gold
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Location
  #--------------------------------------------------------------------------         
  def create_location
      @location = Sprite.new
      @location.bitmap = Bitmap.new(200,40)
      @location.bitmap.font.name = "Georgia"
      @location.bitmap.font.size = 20
      @location.bitmap.font.bold = true
      @location.bitmap.font.italic = true
      @location.z = 12
      @location.x = LOCATION_POS[0]
      @location.y = LOCATION_POS[1]
      refresh_location
  end

  #--------------------------------------------------------------------------
  # ● Refresh Location
  #--------------------------------------------------------------------------            
  def refresh_location
      location_name = $game_map.display_name
      @location.bitmap.clear
      @location.bitmap.font.color = Color.new(120,120,120,120)
      @location.bitmap.draw_text(6,4,190,32, location_name.to_s,2)
      @location.bitmap.font.color = Color.new(255,255,255)
      @location.bitmap.draw_text(0,0,190,32, location_name.to_s,2)
  end
  
  #--------------------------------------------------------------------------
  # ● Create Actor Parameter
  #--------------------------------------------------------------------------              
  def create_actor_parameter
      @actor_par = []
      members_size = $game_party.members.size
      members_size = $game_party.max_battle_members if members_size >= $game_party.max_battle_members
      for i in 0...members_size
          @actor_par.push(Actor_Menu_Parameter.new(i,$game_party.members))
      end   
  end
  
  #--------------------------------------------------------------------------
  # ● Create Members
  #--------------------------------------------------------------------------               
  def create_members
      @members_viewport = Viewport.new(MEMBERS_FACE_POSITION[0],MEMBERS_FACE_POSITION[1],400,96)
      @members_viewport.z = 12
      @members_viewport.ox = -544
      @members_slide_max = (MEMBERS_FACE_POSITION[0] - 544)
      @members = []
      for i in 0...$game_party.members.size        
          @members.push(Face_Members_Sprite.new(@members_viewport,i, $game_party.members.id))
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Create Members Layout
  #--------------------------------------------------------------------------                  
  def create_members_layout
      @members_layout = Members_Arrow_Sprite.new
  end  
  
end

#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu
  
  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------        
  def execute_dispose
      Graphics.freeze
      dispose_background
      dispose_layout
      dispose_particles
      dispose_command_sprites
      dispose_actor_sprites
      dispose_actor_parameter
      dispose_timer_sprite
      dispose_gold_number
      dispose_location
      dispose_members
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Background
  #--------------------------------------------------------------------------  
  def dispose_background
      return if @background == nil
     # @background.bitmap.dispose
      @background.dispose
      @background = nil
  end
   
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------               
  def dispose_layout
      return if @layout == nil
     # @layout.bitmap.dispose
      @layout.dispose
      @layout = nil
  end  
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end
   
  #--------------------------------------------------------------------------
  # ● Dispose Command Sprites
  #--------------------------------------------------------------------------     
  def dispose_command_sprites
      return if @command_sprites == nil
      @command_sprites.each {|sprite| sprite.dispose_command }
      @command_sprites = nil
      @command_window.dispose
  end   

  #--------------------------------------------------------------------------
  # ● Dispose Actor Sprites
  #--------------------------------------------------------------------------     
  def dispose_actor_sprites
      return if @actor_pictures == nil
      @actor_pictures.each {|sprite| sprite.dispose_picture }
      @actor_pictures = nil
  end     
  
  #--------------------------------------------------------------------------
  # ● Dispose timer Sprite
  #--------------------------------------------------------------------------         
  def dispose_timer_sprite
      return if @timer_sprite == nil
      @timer_sprite.dispose
  end
   
  #--------------------------------------------------------------------------
  # ● Dispose Gold Number
  #--------------------------------------------------------------------------           
  def dispose_gold_number
      return if @gold_image == nil
      @gold_sprite.dispose
      @gold_sprite = nil
  end

  #--------------------------------------------------------------------------
  # ● Dispose Location
  #--------------------------------------------------------------------------            
  def dispose_location
      return if @location == nil
      @location.bitmap.dispose
      @location.dispose
      @location = nil
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose Actor Parameter
  #--------------------------------------------------------------------------               
  def dispose_actor_parameter
      return if @actor_par == nil
      @actor_par.each {|sprite| sprite.dispose }
      @actor_par = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Members
  #--------------------------------------------------------------------------                  
  def dispose_members
      return if @members == nil
      @members.each {|sprite| sprite.dispose }
      @members = nil
      @members_layout.dispose
      @members_viewport.dispose
  end  
   
end

#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------         
  def update_sprites   
      update_background
      update_particles
      update_command_sprites
      update_actor_parameter
      update_actor_sprites
      update_members_face
      refresh_timer if @min_old != @min
      refresh_gold if @gold != $game_party.gold      
  end
      
  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end
   
  #--------------------------------------------------------------------------
  # ● Update Command Sprites
  #--------------------------------------------------------------------------     
  def update_command_sprites
      return if @command_window == nil
      visible = @phase == 0 ? true : false
      @command_sprites.each {|sprite| sprite.update_command(@command_window.index,visible) }
  end     
  
  #--------------------------------------------------------------------------
  # ● Refresh Number
  #--------------------------------------------------------------------------  
  def refresh_timer
      @min_old = @min
      @timer_sprite.bitmap.clear
      draw_number(@timer_cw * 1,0,0) if @hour < 10              
      draw_number(@timer_cw * 2,0,@hour)
      draw_number(@timer_cw * 4,0,0) if @min < 10            
      draw_number(@timer_cw * 5,0,@min)
  end  
  
  #--------------------------------------------------------------------------
  # ● Draw Number
  #--------------------------------------------------------------------------  
  def draw_number(x,y,value)
      @number_text = value.abs.to_s.split(//)
      plus_x = -@timer_cw * @number_text.size
      for r in 0..@number_text.size - 1
         @number_abs = @number_text[r].to_i
         nsrc_rect = Rect.new(@timer_cw * @number_abs, 0, @timer_cw, @timer_ch)
         @timer_sprite.bitmap.blt(plus_x + x + (@timer_cw  *  r), y, @timer_image, nsrc_rect)        
      end     
  end     
  
  #--------------------------------------------------------------------------
  # ● update
  #--------------------------------------------------------------------------  
  def update_timer
      time = $game_system.playtime
      @hour = time / 60 / 60
      @min = time / 60 % 60
      @sec = time % 60
  end      
  
  #--------------------------------------------------------------------------
  # ● Refresh Gold
  #--------------------------------------------------------------------------           
  def refresh_gold
      @gold = $game_party.gold
      @gold_sprite.bitmap.clear
      value_text = @gold.abs.to_s.split(//)
      index = 0
      for i in 0..value_text.size - 1
          value_abs = value_text.to_i
          nsrc_rect = Rect.new(@gold_cw * value_abs, 0, @gold_cw, @gold_ch)
          @gold_sprite.bitmap.blt(@gold_cw *  i, 0, @gold_image, nsrc_rect)
          index += 1
      end
      ey = (index * @gold_cw)  
      @gold_sprite.x = GOLD_NUMBER_POS[0] -  ey
  end
  
  #--------------------------------------------------------------------------
  # ● Update Actor Parameter
  #--------------------------------------------------------------------------               
  def update_actor_parameter
      return if @actor_par == nil
      @actor_par.each {|sprite| sprite.update }
  end
   
  #--------------------------------------------------------------------------
  # ● Update Actor Sprites
  #--------------------------------------------------------------------------     
  def update_actor_sprites
      return if @actor_pictures == nil
      @actor_pictures.each {|sprite| sprite.update_picture }
  end     
  
  #--------------------------------------------------------------------------
  # ● Update Members Face
  #--------------------------------------------------------------------------                  
  def update_members_face
      return if @members == nil or @members == 0
      if @members_index > 4
         ny = (5 * 64)
         else
         ny = 64 * @members_index
      end
      @members.each {|sprite| sprite.update_command(@members_index, ny) }
      @members_layout.update
      if @members_windows_active
         if @members_viewport.ox < 0
            @members_viewport.ox += 25
         end
       else   
         if @members_viewport.ox > -544
            @members_viewport.ox -= 25
          end         
      end
      @members_layout.nx(@members_viewport.ox)
  end  
  
end

#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      update_timer
      update_sprites
      update_command
      @members_windows_active = @phase == 100 ? true : false
  end
   
end

#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu
  
  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------      
  def update_command
      case @phase
        when 0;       update_main_command
        when 100;      update_select_members            
     end   
  end
   
  #--------------------------------------------------------------------------
  # ● Update Main Command
  #--------------------------------------------------------------------------        
  def update_main_command
      if Input.trigger?(:UP) or Input.trigger?(:LEFT)
         move_command_index(-1)
      elsif Input.trigger?(:DOWN) or Input.trigger?(:RIGHT)
         move_command_index(1)
      elsif Input.trigger?(:C)
         execute_select
      elsif Input.trigger?(:B)
         return_to_map
      end  
  end
   
  #--------------------------------------------------------------------------
  # ● Update Main Command
  #--------------------------------------------------------------------------   
  def move_command_index(value)
      Sound.play_cursor
      @command_window.index += value
      @command_window.index = 0 if @command_window.index >= @command_max
      @command_window.index = (@command_max - 1) if @command_window.index < 0
  end   
  
  #--------------------------------------------------------------------------
  # ● Execute Select
  #--------------------------------------------------------------------------     
  def execute_select
      @phase = @command_window.index
      $game_temp.menu_index = @phase
      Sound.play_ok
      $game_temp.pre_symbol = @command_window.current_symbol
      @command_window.call_handler(@command_window.current_symbol)
  end
  
  #--------------------------------------------------------------------------
  # ● Update Select Members
  #--------------------------------------------------------------------------        
  def update_select_members  
      if $game_party.members.size == 0
         execute_cancel
         return
      end  
      if Input.trigger?(:LEFT)
         move_members_index(-1)
      elsif Input.trigger?(:RIGHT)
         move_members_index(1)
      elsif Input.trigger?(:C)
         execute_select_members
      elsif Input.trigger?(:B)
         execute_cancel
      end   
  end  
   
  #--------------------------------------------------------------------------
  # ● Execute Cancel
  #--------------------------------------------------------------------------         
  def execute_cancel
      Sound.play_cancel
      @phase = 0
      @members_index = 0
  end
      
  #--------------------------------------------------------------------------
  # ● Move Members Index
  #--------------------------------------------------------------------------         
  def move_members_index(value)
      Sound.play_cursor
      @members_index += value
      @members_index = 0 if @members_index >= $game_party.members.size
      @members_index = ($game_party.members.size - 1) if @members_index < 0
  end
  
  #--------------------------------------------------------------------------
  # ● Command Formation
  #--------------------------------------------------------------------------
  def command_formation
      SceneManager.call(Scene_Party)
  end  
  
  #--------------------------------------------------------------------------
  # ● Can Access Scene
  #--------------------------------------------------------------------------              
  def can_access_scene?
      if $game_party.members.size == 0
         #Sound.play_buzzer   
         execute_cancel
         return false
      end   
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Select Members
  #--------------------------------------------------------------------------     
  def execute_select_members
      @phase = @command_window.index
      $game_temp.menu_index = @phase
      Sound.play_ok
      on_personal_ok
  end  
  
  #--------------------------------------------------------------------------
  # ● ON Personal OK
  #--------------------------------------------------------------------------            
  alias mog_monogatari_on_personal_ok on_personal_ok
  def on_personal_ok
      $game_temp.actor_menu_temp =  $game_party.members[@members_index]
      $game_party.menu_actor = $game_party.members[@members_index]
      mog_monogatari_on_personal_ok
  end   

  #--------------------------------------------------------------------------
  # ● Return To Map
  #--------------------------------------------------------------------------              
  def return_to_map
      $game_temp.menu_index = 0
      Sound.play_cancel
      SceneManager.return
  end  
  
  #--------------------------------------------------------------------------
  # ● Command Personal
  #--------------------------------------------------------------------------
  def command_personal
      @phase = 100
  end
  
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache Item Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_item_menu
      @pre_cache_item_menu = []
      @pre_cache_item_menu.push(Cache.menu_item("Background"))
      @pre_cache_item_menu.push(Cache.menu_item("Layout"))
  end   
   
end

#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Item
  include MOG_MENU_ITEM
  include MOG_MENU_BASE
  
  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------        
  def main
      execute_setup
      execute_loop
      execute_dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Setup
  #--------------------------------------------------------------------------        
  def execute_setup
      @phase = 0
      @command_index = 0
      @actor = $game_party.members[0]
      @wait_time = 0
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Lopp
  #--------------------------------------------------------------------------        
  def execute_loop
      Graphics.transition(10)
      loop do
         Input.update
         update
         Graphics.update
         break if SceneManager.scene != self
      end
  end  
  
end

#==============================================================================
# ■ Window_ItemList Z
#==============================================================================
class Window_ItemList_Z < Window_Selectable
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
      super
      @category = :none
      @data = []
  end
  
  #--------------------------------------------------------------------------
  # ● Category
  #--------------------------------------------------------------------------
  def category=(category)
      return if @category == category
      @category = category
      self.oy = 0
  end

  #--------------------------------------------------------------------------
  # ● Col Max
  #--------------------------------------------------------------------------
  def col_max
      return 1
  end
  #--------------------------------------------------------------------------
  # ● Item Max
  #--------------------------------------------------------------------------
  def item_max
      @data ? @data.size : 1
  end
  #--------------------------------------------------------------------------
  # ● Item
  #--------------------------------------------------------------------------
  def item
      @data && index >= 0 ? @data[index] : nil
  end
  
  #--------------------------------------------------------------------------
  # ● Current Item Enabled?
  #--------------------------------------------------------------------------
  def current_item_enabled?
      enable?(@data[index])
  end
  
  #--------------------------------------------------------------------------
  # ● Include?
  #--------------------------------------------------------------------------
  def include?(item)
      case @category
      when :item
           item.is_a?(RPG::Item) && !item.key_item?
      when :weapon
           item.is_a?(RPG::Weapon)
      when :armor
           item.is_a?(RPG::Armor)
      when :key_item
           item.is_a?(RPG::Item) && item.key_item?
      else
           false
      end
  end

  #--------------------------------------------------------------------------
  # ● Enable?
  #--------------------------------------------------------------------------
  def enable?(item)
      $game_party.usable?(item)
  end

  #--------------------------------------------------------------------------
  # ● Make Item List
  #--------------------------------------------------------------------------
  def make_item_list
      @data = $game_party.all_items.select {|item| include?(item) }
      @data.push(nil) if include?(nil)
  end

  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
      select(@data.index($game_party.last_item.object) || 0)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
      item = @data[index]
      if item
         rect = item_rect(index)
         rect.width -= 4
         draw_item_name(item, rect.x, rect.y, enable?(item))
         draw_item_number(rect, item)
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item Number
  #--------------------------------------------------------------------------
  def draw_item_number(rect, item)
      draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2)
  end
  
  #--------------------------------------------------------------------------
  # ● Update Help
  #--------------------------------------------------------------------------
  def update_help
      @help_window.set_item(item)
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
      make_item_list
      create_contents
      draw_all_items
  end
   
end

#==============================================================================
# ■ Window_ItemList Z
#==============================================================================
class Window_ItemList_Item_1 < Window_Selectable
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
      super
      @category = :none
      @data = []
  end
  
  #--------------------------------------------------------------------------
  # ● Category
  #--------------------------------------------------------------------------
  def category=(category)
      return if @category == category
      @category = category
      self.oy = 0
  end

  #--------------------------------------------------------------------------
  # ● Col Max
  #--------------------------------------------------------------------------
  def col_max
      return 1
  end
  #--------------------------------------------------------------------------
  # ● Item Max
  #--------------------------------------------------------------------------
  def item_max
      @data ? @data.size : 1
  end
  #--------------------------------------------------------------------------
  # ● Item
  #--------------------------------------------------------------------------
  def item
      @data && index >= 0 ? @data[index] : nil
  end
  
  #--------------------------------------------------------------------------
  # ● Current Item Enabled?
  #--------------------------------------------------------------------------
  def current_item_enabled?
      enable?(@data[index])
  end
  
  #--------------------------------------------------------------------------
  # ● Include?
  #--------------------------------------------------------------------------
  def include?(item)
      case @category
      when :item   ;   item.is_a?(RPG::Item) && !item.key_item?
      else
           false
      end
  end

  #--------------------------------------------------------------------------
  # ● Enable?
  #--------------------------------------------------------------------------
  def enable?(item)
      $game_party.usable?(item)
  end

  #--------------------------------------------------------------------------
  # ● Make Item List
  #--------------------------------------------------------------------------
  def make_item_list
      @data = $game_party.all_items.select {|item| include?(item) }
      @data.push(nil) if include?(nil)
  end

  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
      select(@data.index($game_party.last_item.object) || 0)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
      item = @data[index]
      if item
         rect = item_rect(index)
         rect.width -= 4
         draw_item_number(rect, item)
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item Number
  #--------------------------------------------------------------------------
  def draw_item_number(rect, item)
      draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2)
  end  
   
  #--------------------------------------------------------------------------
  # ● Update Help
  #--------------------------------------------------------------------------
  def update_help
      @help_window.set_item(item)
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
      make_item_list
      create_contents
      draw_all_items
   end
   
end

#==============================================================================
# ■ Window_ItemList Z
#==============================================================================
class Window_ItemList_Item_2 < Window_Selectable
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
      super
      @category = :none
      @data = []
  end
  
  #--------------------------------------------------------------------------
  # ● Category
  #--------------------------------------------------------------------------
  def category=(category)
      return if @category == category
      @category = category
      self.oy = 0
  end

  #--------------------------------------------------------------------------
  # ● Col Max
  #--------------------------------------------------------------------------
  def col_max
      return 1
  end
  #--------------------------------------------------------------------------
  # ● Item Max
  #--------------------------------------------------------------------------
  def item_max
      @data ? @data.size : 1
  end
  #--------------------------------------------------------------------------
  # ● Item
  #--------------------------------------------------------------------------
  def item
      @data && index >= 0 ? @data[index] : nil
  end
  
  #--------------------------------------------------------------------------
  # ● Current Item Enabled?
  #--------------------------------------------------------------------------
  def current_item_enabled?
      enable?(@data[index])
  end
  
  #--------------------------------------------------------------------------
  # ● Include?
  #--------------------------------------------------------------------------
  def include?(item)
      case @category
      when :item   ;   item.is_a?(RPG::Item) && !item.key_item?
      else
           false
      end
  end

  #--------------------------------------------------------------------------
  # ● Enable?
  #--------------------------------------------------------------------------
  def enable?(item)
      $game_party.usable?(item)
  end

  #--------------------------------------------------------------------------
  # ● Make Item List
  #--------------------------------------------------------------------------
  def make_item_list
      @data = $game_party.all_items.select {|item| include?(item) }
      @data.push(nil) if include?(nil)
  end

  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
      select(@data.index($game_party.last_item.object) || 0)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
      item = @data[index]
      if item
         rect = item_rect(index)
         rect.width -= 4
         draw_item_name(item, rect.x, rect.y, enable?(item))
        # draw_item_number(rect, item)
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item Number
  #--------------------------------------------------------------------------
  def draw_item_number(rect, item)
      draw_text(rect, sprintf(":%2d", $game_party.item_number(item)), 2)
  end
  
  #--------------------------------------------------------------------------
  # ● Update Help
  #--------------------------------------------------------------------------
  def update_help      
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
      make_item_list
      create_contents
      draw_all_items
  end
   
end

#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------         
  def create_sprites
      create_menu_background
      create_layout
      create_particles
      create_command
      create_button
      create_help_window
      create_item_window
      create_weapon_window
      create_armor_window
      create_key_window
      create_actor_window
      set_initial_visible
  end
   
  #--------------------------------------------------------------------------
  # ● Create Actor Window
  #--------------------------------------------------------------------------
  def create_actor_window
      @actor_window = Members_Windows_Status.new
      @actor_window.set_handler(:ok,     method(:on_actor_ok))
      @actor_window.set_handler(:cancel, method(:on_actor_cancel))
      @actor_window.opacity = 0      
      @actor_window.x = -10
      @actor_window.y = 36
      @actor_window_slide_range = [@actor_window.x, -@actor_window.width]
      @actor_window.x = @actor_window_slide_range[1]
      @actor_window.visible = true
      @actor_window_index_old = @actor_window.index
      create_members_window
      create_actor_status
      update_active_window
      update_command_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Create Members Window
  #--------------------------------------------------------------------------  
  def create_members_window
      index = 0
      @members_status = []      
      for actor in $game_party.members
          @members_status.push(Members_Menu.new(actor,index))
          index += 1
      end   
  end
   
  #--------------------------------------------------------------------------
  # ● Create Actor Status
  #--------------------------------------------------------------------------  
  def create_actor_status
      @actor_status = Actor_Menu_Status.new(@actor)
  end  
   
  #--------------------------------------------------------------------------
  # ● Create Item Window
  #--------------------------------------------------------------------------
  def create_item_window
      @item_window = Window_ItemList_Item_1.new(162,92,225,270)  
      @item_window.help_window = @help_window
      @item_window.set_handler(:ok,     method(:on_item_ok))
      @item_window.set_handler(:cancel, method(:on_item_cancel))
      @item_window.category = :item
      @item_window.active = true
      @item_window.refresh
      @item_window.index = 0
      @item_window.opacity = 0      
      @item_window_2 = Window_ItemList_Item_2.new(162,92,225,270)  
      @item_window_2.help_window = @help_window
      @item_window_2.set_handler(:ok,     method(:on_item_ok))
      @item_window_2.set_handler(:cancel, method(:on_item_cancel))
      @item_window_2.category = :item
      @item_window_2.active = true
      @item_window_2.refresh
      @item_window_2.index = 0
      @item_window_2.opacity = 0      
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Weapon Window
  #--------------------------------------------------------------------------
  def create_weapon_window
      @weapon_window = Window_ItemList_Z.new(162,92,225,270)  
      @weapon_window.help_window = @help_window
      @weapon_window.set_handler(:ok,     method(:on_item_ok))
      @weapon_window.set_handler(:cancel, method(:on_item_cancel))
      @weapon_window.category = :weapon
      @weapon_window.active = true
      @weapon_window.refresh
      @weapon_window.index = 0
      @weapon_window.opacity = 0
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Armor Window
  #--------------------------------------------------------------------------
  def create_armor_window
      @armor_window = Window_ItemList_Z.new(162,92,225,270)  
      @armor_window.help_window = @help_window
      @armor_window.set_handler(:ok,     method(:on_item_ok))
      @armor_window.set_handler(:cancel, method(:on_item_cancel))
      @armor_window.category = :armor
      @armor_window.active = true
      @armor_window.refresh
      @armor_window.index = 0
      @armor_window.opacity = 0
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Key Window
  #--------------------------------------------------------------------------
  def create_key_window
      @key_window = Window_ItemList_Z.new(162,92,225,270)  
      @key_window.help_window = @help_window
      @key_window.set_handler(:ok,     method(:on_item_ok))
      @key_window.set_handler(:cancel, method(:on_item_cancel))
      @key_window.category = :key_item
      @key_window.active = true
      @key_window.refresh
      @key_window.index = 0
      @key_window.opacity = 0
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Help Window
  #--------------------------------------------------------------------------              
  def create_help_window
      @help_window = Window_Help.new
      @help_window.x = 0
      @help_window.y = Graphics.height - @help_window.height
      @help_window.opacity = 0
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------            
  def create_menu_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_item_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end  

  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------              
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_item_menu[1]
      @layout.z = 3
  end
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Create Command
  #--------------------------------------------------------------------------   
  def create_command
      @command_sprites = []
      index = 0      
      for i in 0...4
          @command_sprites.push(Layout_Window_Sprite.new(nil, index) )
          index += 1
      end
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Button
  #--------------------------------------------------------------------------   
  def create_button
      @button_sprites = []
      index = 0      
      for i in 0...4
          @button_sprites.push(Item_Button_Sprite.new(nil, index) )
          index += 1
      end
  end      
  
  #--------------------------------------------------------------------------
  # ● Set Initial Visible
  #--------------------------------------------------------------------------            
  def set_initial_visible
      @item_window.visible = false
      @item_window_2.visible = false
      @weapon_window.visible = false
      @armor_window.visible = false
      @key_window.visible = false  
  end  
  
end

#==============================================================================
# ■ Layout Window Sprite
#==============================================================================
class Layout_Window_Sprite < Sprite
  include MOG_MENU_ITEM
  attr_accessor :index
  attr_accessor :position
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------                  
  def initialize(viewport = nil,index)
      super(viewport)
      @index = index
      self.bitmap = Cache.menu_item("Item_Window" + @index.to_s)
      self.z = 10
      @org_pos = [COMMAND_POSITION[0],COMMAND_POSITION[1]]
      @slide_max = @org_pos[0] + 24
      @center = (544 - self.bitmap.width) - (544 / 2) + (self.bitmap.width / 2)
      @left = -self.bitmap.width
      @right = 544
      @position = 0
      @direction = 0
      @org_pos = [@left ,COMMAND_POSITION[1]]
      self.x = @org_pos[0]
      self.y = @org_pos[1]
      self.visible = false if @index > 0
  end  
  
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------                     
  def dispose_sprite
      self.bitmap.dispose
  end  
  
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------                     
  def update_command(index)
      slide_speed = 30
      if @index == index
         if self.x < @center
            self.x += slide_speed
            self.x = @center if self.x >= @center
         elsif self.x > @center
            self.x -= slide_speed
            self.x = @center if self.x <= @center
         end
       else   
          if @direction == -1
             self.x -= slide_speed if self.x > @left
          else
             self.x += slide_speed if self.x < @right
          end   
      end  
  end   

#--------------------------------------------------------------------------
# ● New P
#--------------------------------------------------------------------------  
  def newp(index,direction)
      now_command = index
      if direction == -1
         pre_command = index + 1
         pre_command = 0 if pre_command > 3
      else   
         pre_command = index - 1
         pre_command = 3 if pre_command < 0
        end
      if index == @index
         self.visible = true
         self.x = @right if direction == -1
         self.x = @left if direction == 1
      elsif pre_command ==  @index
         self.visible = true
      else   
         self.visible = false
      end   
      @direction = direction
  end
  
end

#==============================================================================
# ■ Item Button Sprite
#==============================================================================
class Item_Button_Sprite < Sprite
  include MOG_MENU_ITEM
  attr_accessor :index
  
#--------------------------------------------------------------------------
# ● Initialize
#--------------------------------------------------------------------------                  
  def initialize(viewport = nil,index)
      super(viewport)
      @index = index
      self.bitmap = Cache.menu_item("Button" + @index.to_s)
      self.z = 12
      self.ox = self.bitmap.width / 2
      self.oy = self.bitmap.height / 2
      @org_pos = [(BUTTON_SPACE * @index) + BUTTON_POSITION[0],BUTTON_POSITION[1]]
      @slide_max = @org_pos[1] + 24
      @next_pos = [@org_pos[0],@org_pos[1]]
      self.x = @org_pos[0]
      self.y = @org_pos[1] - 128 - (128 * @index)
      @zoom_duration = [0,0,false]
      @active = false
  end  
  
#--------------------------------------------------------------------------
# ● Dispose
#--------------------------------------------------------------------------                     
  def dispose_sprite
      self.bitmap.dispose
  end  
  
#--------------------------------------------------------------------------
# ● Update
#--------------------------------------------------------------------------                     
  def update_command(index)
      if @index == index
        # self.y += 2
        # self.y = @slide_max if self.y > @slide_max
         @next_pos[1] =@slide_max
         self.opacity += 15
         @active = true
      else
        # self.y -= 2
        # self.y = @org_pos[1] if self.y < @org_pos[1]
         @next_pos[1] = @org_pos[1]
        self.opacity -= 15 if self.opacity > 160
         @active = false
      end
      update_slide(1,self.y,@next_pos[1])
      update_zoom
  end   

  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,cp,np)
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      self.x = cp if type == 0
      self.y = cp if type == 1
  end  
  
#--------------------------------------------------------------------------
# ● Update Zoom
#--------------------------------------------------------------------------                       
  def update_zoom
      if @active
         if !@zoom_duration[2]
            update_zoom_in
            @zoom_duration = [0,0,true] if self.zoom_x == 1.00  
         else  
            update_zoom_effect
         end
      else
         @zoom_duration[2] = false   
         update_zoom_in
      end  
  end   
  
#--------------------------------------------------------------------------
# ● Update Zoom Out
#--------------------------------------------------------------------------                        
  def update_zoom_out
      return if self.zoom_x == 1.00
      self.zoom_x += 0.03
      self.zoom_y += 0.03
      if self.zoom_x >= 1.00
            self.zoom_x = 1.00
            self.zoom_y = 1.00
      end   
   end   
  
#--------------------------------------------------------------------------
# ● Update Zoom In
#--------------------------------------------------------------------------                           
  def update_zoom_in
      return if self.zoom_x == 1.00
      self.zoom_x -= 0.03
      self.zoom_y -= 0.03
      if self.zoom_x <= 1.00
         self.zoom_x = 1.00
         self.zoom_y = 1.00
      end   
  end      
         
#--------------------------------------------------------------------------
# ● Update Zoom_effect
#--------------------------------------------------------------------------                        
def update_zoom_effect
     @zoom_duration[0] += 1
     return if @zoom_duration[0] < 1
     @zoom_duration[0] = 0
     @zoom_duration[1] += 1
     case @zoom_duration[1]
          when 1..30
             self.zoom_x += 0.005
             self.zoom_y += 0.005                 
          when 31..60
             self.zoom_x -= 0.005
             self.zoom_y -= 0.005           
          when 61..999  
          @zoom_duration[1] = 0
          self.zoom_x = 1.00
          self.zoom_y = 1.00
     end
end      
  
end

#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item
  
  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------        
  def execute_dispose
      Graphics.freeze
      dispose_background
      dispose_layout
      dispose_particles
      dispose_command_sprites
      dispose_button_sprites
      dispose_windows
      dispose_members_status
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Background
  #--------------------------------------------------------------------------  
  def dispose_background
      return if @background == nil
      @background.dispose
      @background = nil
  end
   
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------               
  def dispose_layout
      return if @layout == nil
      @layout.dispose
      @layout = nil
  end  
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end
   
  #--------------------------------------------------------------------------
  # ● Dispose Command Sprites
  #--------------------------------------------------------------------------     
  def dispose_command_sprites
      return if @command_sprites == nil
      @command_sprites.each {|sprite| sprite.dispose_sprite }
      @command_sprites = nil
  end   

  #--------------------------------------------------------------------------
  # ● Dispose Button Sprites
  #--------------------------------------------------------------------------     
  def dispose_button_sprites
      return if @button_sprites == nil
      @button_sprites.each {|sprite| sprite.dispose_sprite }
      @button_sprites = nil
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose Members Status
  #--------------------------------------------------------------------------            
  def dispose_members_status
      return if @members_status == nil
      @members_status.each {|sprite| sprite.dispose }
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Winndows
  #--------------------------------------------------------------------------         
  def dispose_windows
      return if @item_window == nil
      @item_window.dispose
      @item_window_2.dispose
      @weapon_window.dispose
      @armor_window.dispose
      @key_window.dispose
      @actor_window.dispose
      @actor_status.dispose
      @help_window.dispose
  end  
  
end

#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------         
  def update_sprites   
      update_background
      update_particles
      update_command_sprites
      update_button_sprites
      update_windows
      update_members_status
  end

  #--------------------------------------------------------------------------
  # ● Update Members Status
  #--------------------------------------------------------------------------            
  def update_members_status
      @members_status.each {|sprite| sprite.update(@actor_window.active,@actor_window.index) }
  end
      
  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end

  #--------------------------------------------------------------------------
  # ● Update Command Sprites
  #--------------------------------------------------------------------------     
  def update_command_sprites
      return if @command_sprites == nil
      for i in @command_sprites
          i.update_command(@command_index)
          if i.index == 0
             @item_window.x = i.x
             @item_window.visible = i.visible
             @item_window_2.x = i.x
             @item_window_2.visible = i.visible            
           elsif i.index == 1
             @weapon_window.x = i.x
             @weapon_window.visible = i.visible            
           elsif i.index == 2
             @armor_window.x = i.x
             @armor_window.visible = i.visible
           elsif i.index == 3
             @key_window.x = i.x
             @key_window.visible = i.visible               
         end
      end      
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Button Sprites
  #--------------------------------------------------------------------------     
  def update_button_sprites
      return if @button_sprites == nil
      @button_sprites.each {|sprite| sprite.update_command(@command_index) }
  end     
  
  #--------------------------------------------------------------------------
  # ● Update Winndow
  #--------------------------------------------------------------------------      
  def update_windows
      return if @item_window == nil
      if @command_index == 0
         @item_window.update
         @item_window_2.index = @item_window.index
      elsif @command_index == 1   
         @weapon_window.update   
      elsif @command_index == 2   
         @armor_window.update
      elsif @command_index == 3   
         @key_window.update         
      end   
      @actor_window.update
      update_actor_window_slide
      update_actor_window2_slide
  end
  
  #--------------------------------------------------------------------------
  # ● Update Actor Window Slide
  #--------------------------------------------------------------------------  
  def update_actor_window_slide
      if @actor_window.active
         if @actor_window.x < @actor_window_slide_range[0]
            @actor_window.x += 15
            @actor_window.contents_opacity += 23
            if @actor_window.x >= @actor_window_slide_range[0]
               @actor_window.x = @actor_window_slide_range[0]
               @actor_window.contents_opacity = 255
            end  
         end  
      else         
         if @actor_window.x >= @actor_window_slide_range[1]
            @actor_window.x -= 15
            @actor_window.contents_opacity -= 3
            if @actor_window.x <= @actor_window_slide_range[1]
               @actor_window.x = @actor_window_slide_range[1]
               @actor_window.contents_opacity = 0
            end         
         end
      end
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Actor Window Slide
  #--------------------------------------------------------------------------  
  def update_actor_window2_slide
      @actor_status.update(@actor_window.active,@actor)
  end   
  
end

#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      update_command   
      update_sprites
  end
   
end

#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item
  
  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------      
  def update_command
      if @actor_window.active
         update_target_select         
      else
         update_main_command
         update_active_window
      end  
  end

  #--------------------------------------------------------------------------
  # ● Update Active Window
  #--------------------------------------------------------------------------        
  def update_active_window
      @item_window_2.active = false
      if @command_index == 0
         @item_window.active = true
         @weapon_window.active = false
         @armor_window.active = false
         @key_window.active = false
      elsif @command_index == 1           
         @item_window.active = false
         @weapon_window.active = true
         @armor_window.active = false
         @key_window.active = false
      elsif @command_index == 2   
         @item_window.active = false
         @weapon_window.active = false
         @armor_window.active = true
         @key_window.active = false
      elsif @command_index == 3
         @item_window.active = false
         @weapon_window.active = false
         @armor_window.active = false
         @key_window.active = true
      end         
  end
     
  #--------------------------------------------------------------------------
  # ● Update Main Command
  #--------------------------------------------------------------------------        
  def update_main_command
      @wait_time -= 1 if @wait_time > 0
      if Input.trigger?(:LEFT)
         move_command_index(-1)
      elsif Input.trigger?(:RIGHT)
         move_command_index(1)
      elsif Input.trigger?(:B)
         return_scene
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Return Scene
  #--------------------------------------------------------------------------         
  def return_scene
      Sound.play_cancel
      SceneManager.return
  end
  
  #--------------------------------------------------------------------------
  # ● Cancel_Selection
  #--------------------------------------------------------------------------         
  def cancel_selection
      Sound.play_cancel
      @phase = 0
  end
  
  #--------------------------------------------------------------------------
  # ● Update Main Command
  #--------------------------------------------------------------------------   
  def move_command_index(value)
      return if @wait_time > 0
      @wait_time = 7
      pre_index = @command_index
      @command_index += value
      @command_index = 0 if @command_index > 3
      @command_index = 3 if @command_index < 0
      for i in @command_sprites
          i.newp(@command_index,value)
      end         
      Sound.play_cursor
  end      
  
  #--------------------------------------------------------------------------
  # ● ON Category OK
  #--------------------------------------------------------------------------
  def on_category_ok
      if @command_index == 0
         @item_window.activate
         @item_window.select_last
      elsif @command_index == 1   
         @weapon_window.activate
         @weapon_window.select_last         
      elsif @command_index == 2   
         @armor_window.activate
         @armor_window.select_last
      elsif @command_index == 3   
         @key_window.activate
         @key_window.select_last
      end
      refresh_actor_status  
  end

  #--------------------------------------------------------------------------
  # ● ON Item OK
  #--------------------------------------------------------------------------
  def on_item_ok
      $game_party.last_item.object = item
      determine_item
  end
  
  #--------------------------------------------------------------------------
  # ● ON Item Cancel
  #--------------------------------------------------------------------------
  def on_item_cancel
     @item_window.unselect
  end
  
  #--------------------------------------------------------------------------
  # ● Play SE For Item
  #--------------------------------------------------------------------------
  def play_se_for_item
      Sound.play_use_item
  end  
  
  #--------------------------------------------------------------------------
  # ● Item
  #--------------------------------------------------------------------------
  def item
      if @command_index == 0
         @item_window.item
      elsif @command_index == 1   
         @weapon_window.item   
      elsif @command_index == 2   
         @armor_window.item
      elsif @command_index == 3   
         @key_window.item         
      end        
  end
  
  #--------------------------------------------------------------------------
  # ● User
  #--------------------------------------------------------------------------
  def user
      $game_party.movable_members.max_by {|member| member.pha }
  end
  
  #--------------------------------------------------------------------------
  # ● Cursor Left
  #--------------------------------------------------------------------------
  def cursor_left?
      @item_window.index % 2 == 0
  end
  
  #--------------------------------------------------------------------------
  # ● Show Sub Window
  #--------------------------------------------------------------------------
  def show_sub_window(window)
    window.show.activate
  end

  #--------------------------------------------------------------------------
  # ● Hide Sub Window
  #--------------------------------------------------------------------------
  def hide_sub_window(window)
      window.deactivate
      activate_item_window
  end

  #--------------------------------------------------------------------------
  # ● ON Actor OK
  #--------------------------------------------------------------------------
  def on_actor_ok
      if item_usable?
         use_item
         refresh_window
      else
        Sound.play_buzzer
      end
  end

  #--------------------------------------------------------------------------
  # ● Refresh Window
  #--------------------------------------------------------------------------  
  def refresh_window
      if @command_index == 0
         old_item = @item_window.item
         @item_window.refresh
#         set_actor_for_members_menu
         if @item_window.item  == nil
            @item_window.index -= 1
            @item_window.index = 0 if @item_window.index < 0
            @item_window.update
         end
         if old_item != @item_window.item
            on_actor_cancel
            cancel_selection
            @item_window_2.refresh
            @item_window.update_help
         end
      elsif @command_index == 1   
         @weapon_window.refresh
      elsif @command_index == 2   
         @armor_window.refresh
      elsif @command_index == 3   
         @key_window.refresh      
      end
  end
   
  #--------------------------------------------------------------------------
  # ● Set Actor for Members Menu
  #--------------------------------------------------------------------------   
  def set_actor_for_members_menu
      index = 0
      for actor in $game_party.members
          @members_status[index].set_actor(actor)
          index += 1
      end  
  end
         
  #--------------------------------------------------------------------------
  # ● ON Actor Cancel
  #--------------------------------------------------------------------------
  def on_actor_cancel
      hide_sub_window(@actor_window)
  end

  #--------------------------------------------------------------------------
  # ● Determine Item
  #--------------------------------------------------------------------------
  def determine_item
      if item.for_friend?
         show_sub_window(@actor_window)
         @actor_window.select_for_item(item)
         $game_temp.item_scope = @item_window.item.scope rescue nil
      else
         use_item
         activate_item_window
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Activate Item Window
  #--------------------------------------------------------------------------
  def activate_item_window
      if @command_index == 0
         @item_window.refresh
         @item_window.activate
      elsif @command_index == 1   
         @weapon_window.refresh
         @weapon_window.activate
      elsif @command_index == 2   
         @armor_window.refresh
         @armor_window.activate
      elsif @command_index == 3   
         @key_window.refresh     
         @key_window.activate
      end   
  end
  
  #--------------------------------------------------------------------------
  # ● Item Target Actors
  #--------------------------------------------------------------------------
  def item_target_actors
      if !item.for_friend?
        []
      elsif item.for_all?
        $game_party.members
      else
        [$game_party.members[@actor_window.index]]
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Item Usable?
  #--------------------------------------------------------------------------
  def item_usable?
      user.usable?(item) && item_effects_valid?
  end
  
  #--------------------------------------------------------------------------
  # ● Item Effects Valid?
  #--------------------------------------------------------------------------
  def item_effects_valid?
      item_target_actors.any? do |target|
           target.item_test(user, item)
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Use Item to Actors
  #--------------------------------------------------------------------------
  def use_item_to_actors
      item_target_actors.each do |target|
        item.repeats.times { target.item_apply(user, item) }
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Use Item
  #--------------------------------------------------------------------------
  def use_item
      play_se_for_item
      user.use_item(item)
      use_item_to_actors
      check_common_event
      check_gameover
      @actor_window.refresh
  end

  #--------------------------------------------------------------------------
  # ● Check Common Event
  #--------------------------------------------------------------------------
  def check_common_event
      SceneManager.goto(Scene_Map) if $game_temp.common_event_reserved?
  end
  
  #--------------------------------------------------------------------------
  # ● Update Target Select
  #--------------------------------------------------------------------------  
  def update_target_select
      @actor = $game_party.members[@actor_window.index]
      if Input.trigger?(:B)         
         cancel_selection
      end      
  end  
  
end


#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache Skill Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_skill_menu
      @pre_cache_skill_menu = []
      @pre_cache_skill_menu.push(Cache.menu_skill("Background"))
      @pre_cache_skill_menu.push(Cache.menu_skill("Layout"))
      @pre_cache_skill_menu.push(Cache.menu_skill("Type_Layout"))
      @pre_cache_skill_menu.push(Cache.menu_skill("List_Layout"))
      @pre_cache_skill_menu.push(Cache.menu_skill("Actor_Layout"))

  end   
   
end

#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill
  include MOG_MENU_SKILL
  include MOG_MENU_BASE
  
  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------        
  def main
      execute_setup
      execute_loop
      execute_dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Setup
  #--------------------------------------------------------------------------        
  def execute_setup
      @actor = $game_temp.actor_menu_temp
      @index_max = (@actor.added_skill_types.size - 1)
      @index_max = 0 if @index_max < 0      
      @phase = 0
      @press_time = 0
      @press_lag = 0
      @scene_active = @actor.added_skill_types.size > 0 ? true : false
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Lopp
  #--------------------------------------------------------------------------        
  def execute_loop
      Graphics.transition(10)
      loop do
         Input.update
         update
         Graphics.update
         break if SceneManager.scene != self
      end
  end
  
end

#==============================================================================
# ■ Actor Skill Status
#==============================================================================
class Actor_Skill_Status
  include MOG_ACTOR_SKILL_STATUS
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(actor)
      @actor = actor
      set_old_parameter
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------   
  def create_sprites
      @meter_image = $game_temp.pre_cache_actor_menu[6]
      @meter_cw = @meter_image.width
      @meter_ch = @meter_image.height / 2   
      @parameter_number = $game_temp.pre_cache_actor_menu[2]
      @parameter_cw = @parameter_number.width / 10
      @parameter_ch = @parameter_number.height
      @opac = 0
      create_layout
      create_parameter
      create_face
      create_name
      create_hp_meter
      create_mp_meter
      create_states
      set_position(0,-@layout.bitmap.height - 48)
  end
   
  #--------------------------------------------------------------------------
  # ● Set Old Parameter
  #--------------------------------------------------------------------------  
  def set_old_parameter
      @par = [] if @par == nil
      @par.clear
      @par = [@actor.hp,@actor.mhp,@actor.mp,@actor.mmp,@actor.level]
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------  
  def dispose
      dispose_layout
      dispose_parameter
      dispose_face
      dispose_name
      dispose_hp_meter
      dispose_mp_meter
      dispose_states
  end

  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------   
  def dispose_layout
      @layout.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Parameter
  #--------------------------------------------------------------------------      
  def dispose_parameter
      @parameter.bitmap.dispose
      @parameter.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Face
  #--------------------------------------------------------------------------   
  def dispose_face
      @face.bitmap.dispose if @face.bitmap != nil
      @face.dispose
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose HP Meter
  #--------------------------------------------------------------------------      
  def dispose_hp_meter
      @hp_meter.bitmap.dispose
      @hp_meter.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose MP Meter
  #--------------------------------------------------------------------------      
  def dispose_mp_meter
      @mp_meter.bitmap.dispose
      @mp_meter.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Name
  #--------------------------------------------------------------------------        
  def dispose_name
      @name.bitmap.dispose
      @name.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose States
  #--------------------------------------------------------------------------            
   def dispose_states
       return if @status == nil
       @status.bitmap.dispose
       @status.dispose
       if @actor_status != nil
          @actor_status.dispose
          @actor_status = nil
       end   
    end   
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_skill_menu[4]
      @org_pos = [LAYOUT_POSITION[0],LAYOUT_POSITION[1]]
      @layout.x = @org_pos[0]
      @layout.y = @org_pos[1]
      @layout.z = 10
      #@layout.opacity = 0
  end

  #--------------------------------------------------------------------------
  # ● Create Parameter
  #--------------------------------------------------------------------------
  def create_parameter
      @parameter = Sprite.new
      @parameter.bitmap = Bitmap.new(@layout.bitmap.width,@layout.bitmap.height)
      @org_pos_par = [@org_pos[0] + PAR_POSITION[0],
                      @org_pos[1] + PAR_POSITION[1]]
      @parameter.x = @org_pos_par[0]
      @parameter.y = @org_pos_par[1]
      @parameter.z = 12
#      @parameter.opacity = 0
      refresh_parameter
  end  
  
  #--------------------------------------------------------------------------
  # ● Create HP Meter
  #--------------------------------------------------------------------------  
  def create_hp_meter
      @hp_meter_old = [-1,-1]
      @hp_meter = Sprite.new
      @hp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
      @org_pos_hp = [@org_pos[0] + HP_METER_POSITION[0],
                     @org_pos[1] + HP_METER_POSITION[1]]      
      @hp_meter.x = @org_pos_hp[0]
      @hp_meter.y = @org_pos_hp[1]
      @hp_meter.z = 11
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh HP Meter
  #--------------------------------------------------------------------------   
  def refresh_hp_meter
      @hp_meter_old[0] = @actor.hp
      @hp_meter_old[1] = @actor.mhp
      @hp_meter.bitmap.clear
      width_range = @meter_cw * @actor.hp / @actor.mhp
      m_rect = Rect.new(0,0,width_range,@meter_ch)
      @hp_meter.bitmap.blt(0,0,@meter_image,m_rect)
  end
  
  #--------------------------------------------------------------------------
  # ● Create MP Meter
  #--------------------------------------------------------------------------  
  def create_mp_meter
      @mp_meter_old = [-1,-1]
      @mp_meter = Sprite.new
      @mp_meter.bitmap = Bitmap.new(@meter_cw,@meter_ch)
      @org_pos_mp = [@org_pos[0] + MP_METER_POSITION[0],
                     @org_pos[1] + MP_METER_POSITION[1]]      
      @mp_meter.x = @org_pos_mp[0]
      @mp_meter.y = @org_pos_mp[1]
      @mp_meter.z = 11
  end  
  
  #--------------------------------------------------------------------------
  # ● Create_States
  #--------------------------------------------------------------------------      
  def create_states
      @status_old = nil
      @status_flow = [-24,0]   
      @status = Sprite.new
      @status.bitmap = Bitmap.new(24,24)
      @org_pos_states = [@org_pos[0] + STATES_POSITION[0],
                         @org_pos[1] + STATES_POSITION[1]]      
      @status.x = @org_pos_states[0] + 1
      @status.y = @org_pos_states[1]
      @status.z = 11
  end      

  #--------------------------------------------------------------------------
  # * Refresh States
  #--------------------------------------------------------------------------        
  def refresh_states
      check_icon_image
      @status_old = @actor.states
      @status_flow = [0,0]
      @actor_status.dispose if @actor_status != nil
      @states_size = @actor.states.size > 0 ? (26 * @actor.states.size) : 24
      @actor_status = Bitmap.new(@states_size,24)
      index = 0
      for i in @actor.states
         rect = Rect.new(i.icon_index % 16 * 24, i.icon_index / 16 * 24, 24, 24)
         @actor_status.blt(26 * index , 0, @icon_image, rect)
         index += 1
      end
  end   
  
  #--------------------------------------------------------------------------
  # * Flow_Status
  #--------------------------------------------------------------------------         
  def flow_states
      return if @actor_status == nil
      @status.bitmap.clear
      return if @actor.states.size == 0
      st_src_rect = Rect.new(@status_flow[0],0, 24,24)
      @status.bitmap.blt(0,0, @actor_status, st_src_rect)
      if STATES_SCROLLING_ANIMATION
         @status_flow[0] += 1
         @status_flow[0] = -24 if @status_flow[0] >= @states_size + 2
      else   
         @status_flow[1] += 1 unless @actor.states.size <= 1
         if @status_flow[1] > 30
            @status_flow[1] = 0
            @status_flow[0] += 26
            @status_flow[0] = 0 if @status_flow[0] >= (@states_size - 0)
         end   
     end   
  end        
  
  #--------------------------------------------------------------------------
  # * Check Icon Image
  #--------------------------------------------------------------------------         
  def check_icon_image
      if @icon_image == nil or @icon_image.disposed?
         @icon_image = Cache.system("Iconset")
      end   
  end   
      
  
  #--------------------------------------------------------------------------
  # ● Refresh MP Meter
  #--------------------------------------------------------------------------   
  def refresh_mp_meter
      @mp_meter_old[0] = @actor.mp
      @mp_meter_old[1] = @actor.mmp
      @mp_meter.bitmap.clear
      width_range = @meter_cw * @actor.mp / @actor.mmp rescue nil
      width_range = 0 if width_range == nil
      m_rect = Rect.new(0,@meter_ch,width_range,@meter_ch)
      @mp_meter.bitmap.blt(0,0,@meter_image,m_rect)
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------   
  def refresh_parameter
      set_old_parameter   
      @parameter.bitmap.clear
      
      value = @actor.level
      x = 112
      y = 8
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
     
      value = @actor.hp
      x = 218
      y = 2
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
  
      value = @actor.mp
      x = 238
      y = 22
      refresh_number(@parameter,@parameter_number,value,@parameter_cw,@parameter_ch,x,y)
      
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Number
  #--------------------------------------------------------------------------     
  def refresh_number(sprite,image,value,number_cw,number_ch,x,y)
      number = value.abs.to_s.split(//)
      x2 = -number_cw * number.size
      for i in 0..number.size - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, 0, number_cw , number_ch)
          sprite.bitmap.blt(x + x2 + (number_cw  *  i), y, image, nsrc_rect)        
      end      
      
  end

  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------  
  def create_face
      @face = Sprite.new
      @org_pos_face = [@org_pos[0] + FACE_POSITION[0],
                       @org_pos[1] + FACE_POSITION[1]]
      @face.x = @org_pos_face[0]
      @face.y = @org_pos_face[1]
      @face.z = 11
   #   @face.opacity = 0
      refresh_face
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Face
  #--------------------------------------------------------------------------   
  def refresh_face
      face_name = "Face" + @actor.id.to_s
      @face.bitmap = Cache.menu(face_name.to_s)
  end
  
  #--------------------------------------------------------------------------
  # ● Create Name
  #--------------------------------------------------------------------------   
  def create_name
      @name = Sprite.new
      @name.bitmap = Bitmap.new(140,32)
      @name.bitmap.font.name = FONT_NAME
      @name.bitmap.font.size = FONT_SIZE
      @name.bitmap.font.bold = FONT_BOLD
      @org_pos_name = [@org_pos[0] + NAME_POSITION[0],
                       @org_pos[1] + NAME_POSITION[1]]
      @name.x = @org_pos_name[0]
      @name.y = @org_pos_name[1]
      @name.z = 11
     #@name.opacity = 0
      refresh_name     
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Name
  #--------------------------------------------------------------------------      
  def refresh_name
      @name.bitmap.clear
      @name.bitmap.draw_text(0,0,140,32,@actor.name.to_s,0)
  end  
  
  #--------------------------------------------------------------------------
  # ● Set Actor
  #--------------------------------------------------------------------------        
  def set_actor(actor)
      @actor = actor
  end
  
  #--------------------------------------------------------------------------
  # ● Can Refresh HP Meter
  #--------------------------------------------------------------------------         
  def can_refresh_hp_meter?
      return true if @hp_meter_old[0] != @actor.hp
      return true if @hp_meter_old[1] != @actor.mhp
      return false
  end
     
  #--------------------------------------------------------------------------
  # ● Can Refresh MP Meter
  #--------------------------------------------------------------------------         
  def can_refresh_mp_meter?
      return true if @mp_meter_old[0] != @actor.mp
      return true if @mp_meter_old[1] != @actor.mmp
      return false
  end  
  
  #--------------------------------------------------------------------------
  # ● Can Refresh Parameter
  #--------------------------------------------------------------------------
  def can_refresh_parameter?
      return true if @par[0] != @actor.hp
      return true if @par[1] != @actor.mhp
      return true if @par[2] != @actor.mp
      return true if @par[3] != @actor.mmp
      return false
  end
  
  #--------------------------------------------------------------------------
  # ● Update Position
  #--------------------------------------------------------------------------      
  def update_position
      update_slide(0,@layout,@layout.x,@org_pos[0])
      update_slide(1,@layout,@layout.y,@org_pos[1])
      update_slide(0,@parameter,@parameter.x,@org_pos_par[0])
      update_slide(1,@parameter,@parameter.y,@org_pos_par[1])
      update_slide(0,@hp_meter,@hp_meter.x,@org_pos_hp[0])
      update_slide(1,@hp_meter,@hp_meter.y,@org_pos_hp[1])  
      update_slide(0,@mp_meter,@mp_meter.x,@org_pos_mp[0])
      update_slide(1,@mp_meter,@mp_meter.y,@org_pos_mp[1])        
      update_slide(0,@face,@face.x,@org_pos_face[0])
      update_slide(1,@face,@face.y,@org_pos_face[1])        
      update_slide(0,@name,@name.x,@org_pos_name[0])
      update_slide(1,@name,@name.y,@org_pos_name[1])      
      update_slide(0,@status,@status.x,@org_pos_states[0])
      update_slide(1,@status,@status.y,@org_pos_states[1])         
  end

#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,cp,np)
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp if type == 1
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Opacity
  #--------------------------------------------------------------------------  
  def update_opacity
      @opac += 10
      @opac = 255 if @opac > 255
      set_opacity(@opac)
  end
  
  #--------------------------------------------------------------------------
  # ● Set Opacity
  #--------------------------------------------------------------------------   
  def set_opacity(opac)
      @layout.opacity = opac
      @layout.opacity = opac
      @parameter.opacity = opac
      @parameter.opacity = opac
      @hp_meter.opacity = opac
      @hp_meter.opacity = opac
      @mp_meter.opacity = opac
      @mp_meter.opacity = opac
      @face.opacity = opac
      @face.opacity = opac
      @name.opacity = opac
      @name.opacity = opac
      @status.opacity = opac
  end   

  #--------------------------------------------------------------------------
  # ● Update Position
  #--------------------------------------------------------------------------      
  def set_position(pos_x,pos_y)
      @layout.x = @org_pos[0] + pos_x
      @layout.y = @org_pos[1] + pos_y
      @parameter.x = @org_pos_par[0] + pos_x
      @parameter.y = @org_pos_par[1] + pos_y
      @hp_meter.x = @org_pos_hp[0] + pos_x
      @hp_meter.y = @org_pos_hp[1] + pos_y
      @mp_meter.x = @org_pos_mp[0] + pos_x
      @mp_meter.y = @org_pos_mp[1] + pos_y
      @face.x = @org_pos_face[0] + pos_x
      @face.y = @org_pos_face[1] + pos_y
      @name.x = @org_pos_name[0] + pos_x
      @name.y = @org_pos_name[1] + pos_y
      @status.x = @org_pos_states[0] + pos_x
      @status.y = @org_pos_states[1] + pos_y
  end   
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update
      refresh_hp_meter if can_refresh_hp_meter?
      refresh_mp_meter if can_refresh_mp_meter?
      refresh_parameter if can_refresh_parameter?
      refresh_states if @status_old != @actor.states
      update_opacity
      update_position
      flow_states      
  end
  
end

#==============================================================================
# ■ Window_SkillCommand
#==============================================================================
class Window_SkillCommand_2 < Window_Command
  
  attr_reader   :skill_window
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(x, y)
    @actor = nil
    @index_max = 0
  end

  #--------------------------------------------------------------------------
  # ● Window Width
  #--------------------------------------------------------------------------
  def window_width
    return 140
  end
  
  #--------------------------------------------------------------------------
  # ● Actor
  #--------------------------------------------------------------------------
  def actor=(actor)
      return if @actor == actor
      @actor = actor
      @index_max = (@actor.added_skill_types.size - 1)
      @index_max = 0 if @index_max < 0
      refresh
      select_last
  end
  
  #--------------------------------------------------------------------------
  # ● Visible Line Number
  #--------------------------------------------------------------------------
  def visible_line_number
      return 4
  end
  
  #--------------------------------------------------------------------------
  # ● Make Command List
  #--------------------------------------------------------------------------
  def make_command_list
      return unless @actor
         @actor.added_skill_types.sort.each do |stype_id|
         name = $data_system.skill_types[stype_id]
         add_command(name, :skill, true, stype_id)
      end
  end

  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update
      super
      @skill_window.stype_id = current_ext if @skill_window
     # update_index
  end

  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update_index
      return if @index_max <= 0
      if Input.trigger?(:RIGHT)
         add_index(1)
      elsif Input.trigger?(:LEFT)   
         add_index(-1)
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Add Index
  #--------------------------------------------------------------------------   
  def add_index(value)
      Sound.play_cursor
      @index += value
      @index = 0 if @index > @index_max
      @index = @index_max if @index < 0
  end
  
  #--------------------------------------------------------------------------
  # ● Skill Window
  #--------------------------------------------------------------------------
  def skill_window=(skill_window)
      @skill_window = skill_window
      update
  end  
  
  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
      skill = @actor.last_skill.object
      if skill
         select_ext(skill.stype_id)
      else
         select(0)
      end
  end
   
end

#==============================================================================
# ■ Window_SkillList
#==============================================================================
class Window_SkillList_Menu < Window_Selectable
  
  attr_accessor :windows_index

  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
      super
      @stype_id = 0
      @data = []
      @windows_index = 0
      self.opacity = 0
      @actor = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Actor
  #--------------------------------------------------------------------------
  def actor=(actor)
      return if @actor == actor
      @actor = actor
      self.oy = 0
  end

  #--------------------------------------------------------------------------
  # ● Setup
  #--------------------------------------------------------------------------  
  def setup(actor,skill_type,index)
      @actor = actor
      @stype_id = skill_type
      @windows_index = index
      refresh
  end
  
  #--------------------------------------------------------------------------
  # ● Stype ID
  #--------------------------------------------------------------------------
  def stype_id=(stype_id)
  end
  
  #--------------------------------------------------------------------------
  # ● Col Max
  #--------------------------------------------------------------------------
  def col_max
      return 1
  end

  #--------------------------------------------------------------------------
  # ● Item Max
  #--------------------------------------------------------------------------
  def item_max
      @data ? @data.size : 1
  end

  #--------------------------------------------------------------------------
  # ● Item
  #--------------------------------------------------------------------------
  def item
      @data && index >= 0 ? @data[index] : nil
  end
  
  #--------------------------------------------------------------------------
  # ● Current Item Enabled
  #--------------------------------------------------------------------------
  def current_item_enabled?
      enable?(@data[index])
  end

  #--------------------------------------------------------------------------
  # ● Include
  #--------------------------------------------------------------------------
  def include?(item)
      item && item.stype_id == @stype_id
  end

  #--------------------------------------------------------------------------
  # ● Enable
  #--------------------------------------------------------------------------
  def enable?(item)
      @actor && @actor.usable?(item)
  end

  #--------------------------------------------------------------------------
  # ● Male Item List
  #--------------------------------------------------------------------------
  def make_item_list
      @data = @actor ? @actor.skills.select {|skill| include?(skill) } : []
  end

  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
      select(@data.index(@actor.last_skill.object) || 0)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
      self.contents.font.size = 18
      self.contents.font.bold = true
      skill = @data[index]
      if skill
         rect = item_rect(index)
         rect.width -= 4
         draw_item_name(skill, rect.x, rect.y, enable?(skill),110)
         draw_skill_cost(rect, skill)
      end
  end

  #--------------------------------------------------------------------------
  # ● Draw Skill Cost
  #--------------------------------------------------------------------------
  def draw_skill_cost(rect, skill)
      if @actor.skill_tp_cost(skill) > 0
         change_color(tp_cost_color, enable?(skill))
         draw_text(rect, @actor.skill_tp_cost(skill), 2)
      elsif @actor.skill_mp_cost(skill) > 0
         change_color(mp_cost_color, enable?(skill))
         draw_text(rect, @actor.skill_mp_cost(skill), 2)
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Update Help
  #--------------------------------------------------------------------------
  def update_help
      @help_window.set_item(item)
  end

  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
      make_item_list
      create_contents
      draw_all_items
  end
  
end

#==============================================================================
# ■ Scene Skill
#==============================================================================
class Scene_Skill
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------         
  def create_sprites
      create_menu_background
      create_layout
      create_particles
      create_actor_status
      create_help_window
      create_command_window
      create_type_layout
      create_item_window
      create_list_layout
      create_actor_window
      create_type_name
      @command_window.active = true        
  end
  
  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------            
  def create_menu_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_skill_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end  

  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------              
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_skill_menu[1]
      @layout.z = 3
  end
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Create Actor Status
  #--------------------------------------------------------------------------   
  def create_actor_status
      @actor_skill_status = Actor_Skill_Status.new(@actor)
  end  

  #--------------------------------------------------------------------------
  # ● Create Help Window
  #--------------------------------------------------------------------------              
  def create_help_window
      @help_window = Window_Help.new
      @help_window.x = 0
      @help_window.y = Graphics.height - @help_window.height
      @help_window.opacity = 0
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
      @command_window = Window_SkillCommand_2.new(0, 84)
      @command_window.help_window = @help_window
      @command_window.actor = @actor
      @command_window.set_handler(:skill,    method(:command_skill))
      @command_window.set_handler(:pagedown, method(:next_actor))
      @command_window.set_handler(:pageup,   method(:prev_actor))
      @command_window.active = false
      @command_window.opacity = 0
      @command_window.index = 0
      @command_window.visible = @scene_active
      @skill_list_slide_range = [@command_window.x, -(@command_window.x + @command_window.width)]
      @command_window.x = @skill_list_slide_range[1] - 80
      @command_window.opacity = 0
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Type Layout
  #--------------------------------------------------------------------------
  def create_type_layout
      @type_layout = Sprite.new
      @type_layout.bitmap = $game_temp.pre_cache_skill_menu[2]
      @type_layout.z = @command_window.z - 1
      @type_layout.x = @command_window.x
      @type_layout.y = @command_window.y - 30
      @type_layout.opacity = 0      
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Item Window
  #--------------------------------------------------------------------------
  def create_item_window
      @skill_window = []
      index = 0
      window_max = @actor.added_skill_types.size
      window_max = 1 if window_max == 0
      for item in 0...window_max
          @skill_window.push(Window_SkillList_Menu.new(170,75,200,270))
          @skill_window[index].setup(@actor,@actor.added_skill_types[index],index)
          @skill_window[index].help_window = @help_window
          @skill_window[index].set_handler(:ok,     method(:on_item_ok))
          @skill_window[index].set_handler(:cancel, method(:on_item_cancel))
          @skill_window[index].active = false
          @skill_window[index].index = -1
          @skill_window[index].opacity = 0
          @skill_window[index].contents_opacity = 0
          @item_slide_range = [@skill_window[index].x, @skill_window[index].x + 50]
          @skill_window[index].x = @item_slide_range[1]
          index += 1
      end  
      @item_pre_index = @skill_window[@command_window.index].index
      @old_command_index = @skill_window[@command_window.index].index
  end  
  
  #--------------------------------------------------------------------------
  # ● Create List Layout
  #--------------------------------------------------------------------------  
  def create_list_layout
      @list_layout = Sprite.new
      @list_layout.bitmap = $game_temp.pre_cache_skill_menu[3]
      @list_layout.z = @skill_window[@command_window.index].z - 1
      @list_layout.x = @item_slide_range[0] - 4
      @list_layout.y = @skill_window[@command_window.index].y
      @list_layout.opacity = 0
      @list_layout_slide_range = [@list_layout.x,@list_layout.x + 50]
      @list_layout.x = @list_layout_slide_range[1]
  end
  
  #--------------------------------------------------------------------------
  # ● Create Actor Window
  #--------------------------------------------------------------------------
  def create_actor_window
      @actor_window = Members_Windows_Status.new
      @actor_window.set_handler(:ok,     method(:on_actor_ok))
      @actor_window.set_handler(:cancel, method(:on_actor_cancel))
      @actor_window.opacity = 0
      @actor_window.x = -10
      @actor_window.y = 36
      @actor_window_slide_range = [@actor_window.x, -@actor_window.width]
      @actor_window.x = @actor_window_slide_range[1]
      @actor_window.visible = true
      @actor_window_index_old = @actor_window.index
      create_members_window
      update_active
  end
  
  #--------------------------------------------------------------------------
  # ● Create Members Window
  #--------------------------------------------------------------------------  
  def create_members_window
      @actor_status = Actor_Menu_Status.new(@actor)
      index = 0
      @members_status = []      
      for actor in $game_party.members
          @members_status.push(Members_Menu.new(actor,index))
          index += 1
      end   
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Type Name
  #--------------------------------------------------------------------------  
  def create_type_name
      @type_name = Sprite.new
      @type_name.x = 260
      @type_name.y = 60
      @type_name.z = @list_layout.z + 2
      @type_name.bitmap = Bitmap.new(100,32)
      @type_name.bitmap.font.name = "Georgia"
      @type_name.bitmap.font.size = 18
      @type_name.bitmap.font.bold = true
      @type_name.opacity = 0
      refresh_type_name
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Type Name
  #--------------------------------------------------------------------------   
  def refresh_type_name
     @type_name.bitmap.clear
     return if !@scene_active
     stype_id = @actor.added_skill_types[@command_window.index]
     type_name = $data_system.skill_types[stype_id]
     @type_name.bitmap.draw_text(0,0,100,32,type_name,2)
  end
  
end

#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill
  
  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------        
  def execute_dispose
      Graphics.freeze
      dispose_background
      dispose_layout
      dispose_list_layout
      dispose_particles
      dispose_windows
      dispose_members_status
      dispose_type_name
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Background
  #--------------------------------------------------------------------------  
  def dispose_background
      return if @background == nil
      @background.dispose
      @background = nil
  end
   
  
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------               
  def dispose_layout
      return if @layout == nil
      @layout.dispose
      @layout = nil
  end  
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end   
  
#--------------------------------------------------------------------------
# ● Dispose Window
#--------------------------------------------------------------------------     
def dispose_windows
     return if @command_window == nil
     @skill_window.each {|sprite| sprite.dispose }
     @command_window.dispose
     @actor_window.dispose
     @help_window.dispose
end
   
#--------------------------------------------------------------------------
# ● Dispose List Layout
#--------------------------------------------------------------------------      
def dispose_list_layout
     return if @list_layout == nil
     @list_layout.dispose
     @type_layout.dispose
     @list_layout = nil
end
     
  #--------------------------------------------------------------------------
  # ● Dispose Members Status
  #--------------------------------------------------------------------------            
  def dispose_members_status
      return if @members_status == nil
      @actor_status.dispose
      @actor_skill_status.dispose
      @members_status.each {|sprite| sprite.dispose }
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose Type Name
  #--------------------------------------------------------------------------   
  def dispose_type_name
      @type_name.bitmap.dispose
      @type_name.dispose
  end  
  
end

#==============================================================================
# ■ Scene Skill
#==============================================================================
class Scene_Skill
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------         
  def update_sprites   
      update_background
      update_particles     
      update_actor_status
      update_slide_item
      update_members_status
      update_windows
  end

  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end
  
  #--------------------------------------------------------------------------
  # ● Update Windows
  #--------------------------------------------------------------------------   
  def update_windows
      @press_lag -= 1 if @press_lag > 0
      return if @command_window == nil
      for skw in @skill_window
          if skw.windows_index == @command_window.index
             skw.update unless @press_lag > 0
             if @phase == 0
                skw.index = 0 if skw.index < 0 or skw.index >= skw.item_max
             end   
             skw.visible = true
          else   
             skw.visible = false
          end  
      end
      #@skill_window[@command_window.index].update
      @command_window.update   
      @actor_window.update
      update_actor_window_slide
      update_skill_list_slide
  end
  
  #--------------------------------------------------------------------------
  # ● Update Skill List Slide
  #--------------------------------------------------------------------------      
  def update_skill_list_slide
      return if @phase == 999
      if @actor_window.active or !@command_window.active
         if @command_window.x > @skill_list_slide_range[1]
            @command_window.x -= 15
            @command_window.x = @skill_list_slide_range[1] if @command_window.x < @skill_list_slide_range[1]
         end  
      else
         if @command_window.x < @skill_list_slide_range[0]
            @command_window.x += 15
            @command_window.x = @skill_list_slide_range[0] if @command_window.x > @skill_list_slide_range[0]
         end         
      end  
      @type_layout.x = @command_window.x
  end
      
  #--------------------------------------------------------------------------
  # ● Update Actor Window Slide
  #--------------------------------------------------------------------------  
  def update_actor_window_slide
      if @actor_window.active
         if @actor_window.x < @actor_window_slide_range[0]
            @actor_window.x += 15
            @actor_window.contents_opacity += 23
            if @actor_window.x >= @actor_window_slide_range[0]
               @actor_window.x = @actor_window_slide_range[0]
               @actor_window.contents_opacity = 255
            end  
         end  
      else         
         if @actor_window.x >= @actor_window_slide_range[1]
            @actor_window.x -= 15
            @actor_window.contents_opacity -= 3
            if @actor_window.x <= @actor_window_slide_range[1]
               @actor_window.x = @actor_window_slide_range[1]
               @actor_window.contents_opacity = 0
            end         
         end
      end
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Actor Status
  #--------------------------------------------------------------------------               
  def update_actor_status
      refresh_actor_status(true) if @actor_window_index_old != @actor_window.index
  end  
   
  #--------------------------------------------------------------------------
  # ● Refresh Actor Status
  #--------------------------------------------------------------------------               
  def refresh_actor_status(reset = false)
#      @actor = $game_party.members[@actor_window.index]
#      @actor_window_index_old = @actor_window.index
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Slide Item
  #--------------------------------------------------------------------------  
  def update_slide_item
      if @phase == 0
         @command_window.contents_opacity += 10
      else   
         @command_window.contents_opacity -= 10 if @command_window.contents_opacity > 160
      end  
      @type_layout.opacity = @command_window.contents_opacity
      @type_name.opacity = @skill_window[@command_window.index].contents_opacity
      if @phase == 1
         @skill_window[@command_window.index].contents_opacity += 5
         @list_layout.opacity += 5
      else   
         @skill_window[@command_window.index].contents_opacity -= 10 if @skill_window[@command_window.index].contents_opacity > 165
         @list_layout.opacity -= 10 if @list_layout.opacity > 160
      end  
      if @skill_window[@command_window.index].x > @item_slide_range[0]
         @skill_window[@command_window.index].x -= 3
         @list_layout.x -= 3
         if @skill_window[@command_window.index].x <= @item_slide_range[0]
            @skill_window[@command_window.index].x = @item_slide_range[0]
            @list_layout.x = @list_layout_slide_range[0]
         end  
      end  
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Members Status
  #--------------------------------------------------------------------------            
  def update_members_status
      for members in @members_status
          members.update(@actor_window.active,@actor_window.index)
          @actor_2 = members.actor if members.current_actor
      end  
      @actor_2 = @actor if @actor_2 == nil
      @actor_skill_status.update
      @actor_status.update(@actor_window.active,@actor_2)
      #@members_status.each {|sprite| sprite.update(@actor_window.active,@actor_window.index) }
  end  
  
end

#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      unless @skill_window[@command_window.index].index < 0
          @item_pre_index = @skill_window[@command_window.index].index
      end   
      update_command
      update_sprites
  end
   
  #--------------------------------------------------------------------------
  # ● Show Sub Window
  #--------------------------------------------------------------------------
  def show_sub_window(window)
      window.show.activate
  end
  #--------------------------------------------------------------------------
  # ● Hide Sub Window
  #--------------------------------------------------------------------------
  def hide_sub_window(window)
      window.hide.deactivate
      activate_item_window     
  end
  
  #--------------------------------------------------------------------------
  # ● Determine Item
  #--------------------------------------------------------------------------
  def determine_item
      if item.for_friend?         
         @phase = 2
         show_sub_window(@actor_window)
         @actor_window.select_for_item(item)   
         $game_temp.item_scope = @skill_window[@command_window.index].item.scope rescue nil
      else
         use_item
         activate_item_window
      end
  end  
  
  #--------------------------------------------------------------------------
  # ● ON Item OK
  #--------------------------------------------------------------------------
  def on_item_ok
      return if @press_time > 1
      @actor.last_skill.object = item
      determine_item
  end
  
  #--------------------------------------------------------------------------
  # ● Item
  #--------------------------------------------------------------------------
  def item
    @skill_window[@command_window.index].item
  end  
  
  #--------------------------------------------------------------------------
  # ● Use Item
  #--------------------------------------------------------------------------
  def use_item
      super
      @skill_window[@command_window.index].refresh if can_refresh_item_window?
  end  
  
  #--------------------------------------------------------------------------
  # ● Activate Item Window
  #--------------------------------------------------------------------------
  def activate_item_window   
    @skill_window[@command_window.index].refresh if can_refresh_item_window?
    @skill_window[@command_window.index].activate
  end  
  
  #--------------------------------------------------------------------------
  # ● On Item Cancel
  #--------------------------------------------------------------------------
  def on_item_cancel
      @skill_window[@command_window.index].unselect
      @command_window.activate
  end  
  
  #--------------------------------------------------------------------------
  # ● Can Refresh Item Window
  #--------------------------------------------------------------------------  
  def can_refresh_item_window?
      return true if @actor.mp < @skill_window[@command_window.index].item.mp_cost
      return true if @actor.tp < @skill_window[@command_window.index].item.tp_cost
      return false
  end
      
end

#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Skill
  
  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------      
  def update_command
      @skill_window[@command_window.index].index = @item_pre_index        
      if @phase == 0
         update_main_command
      elsif @phase == 1
         update_item_window
      elsif @phase == 2        
         update_target_window
      end        
      update_active
  end

  #--------------------------------------------------------------------------
  # ● Command Skill
  #--------------------------------------------------------------------------
  def command_skill
      @skill_window[@command_window.index].activate
      @skill_window[@command_window.index].select_last
   # @item_window.activate
   # @item_window.select_last
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Active
  #--------------------------------------------------------------------------      
  def update_active
      if @phase == 0
         @skill_window[@command_window.index].active = false
         @command_window.active = true
         @actor_window.active = false
      elsif @phase == 1
         @skill_window[@command_window.index].active = true
         @command_window.active = false
         @actor_window.active = false
      elsif @phase == 2
         @skill_window[@command_window.index].active = false
         @command_window.active = false
         @actor_window.active = true
      end
  end
  
  #--------------------------------------------------------------------------
  # ● Update Main Command
  #--------------------------------------------------------------------------        
  def update_main_command
      reset_item_index
      if Input.trigger?(:C) and @scene_active
         Sound.play_ok
         @phase = 1
         @press_time = 2
         @press_lag = 2
         @skill_window[@command_window.index].index = 0 if @skill_window[@command_window.index].index == -1
      elsif Input.trigger?(:B)
         return_scene
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Return Scene
  #--------------------------------------------------------------------------         
  def return_scene
      Sound.play_cancel
      SceneManager.return
    end

  #--------------------------------------------------------------------------
  # ● ON Actor Charge
  #--------------------------------------------------------------------------
  def on_actor_change
      @phase = 999
      $game_temp.actor_menu_temp = @actor
      SceneManager.goto(Scene_Skill)
  end
  
  #--------------------------------------------------------------------------
  # ● Reset Item Index
  #--------------------------------------------------------------------------            
  def reset_item_index
       return if @old_command_index == @command_window.index
       return if @command_window.index == -1
       @old_command_index = @command_window.index
       refresh_type_name
       reset_item_position
  end  
  
  #--------------------------------------------------------------------------
  # ● Reset Item Position
  #--------------------------------------------------------------------------              
  def reset_item_position
      @skill_window[@command_window.index].x = @item_slide_range[1]
      @skill_window[@command_window.index].contents_opacity = 160
      @list_layout.x = @list_layout_slide_range[1]
      @list_layout.opacity = 160
  end  
  
end

#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill
  
  #--------------------------------------------------------------------------
  # ● Update Item Window
  #--------------------------------------------------------------------------               
  def update_item_window
      @press_time -= 1 if @press_time > 0
      update_item_command
      update_index_type
  end
  
  #--------------------------------------------------------------------------
  # ● Update Main Command
  #--------------------------------------------------------------------------        
  def update_item_command
      if Input.trigger?(:B)
         @phase = 0
         Sound.play_cancel
      end  
  end  
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update_index_type
      return if @index_max <= 0
      return if @command_window == nil
      if Input.trigger?(:RIGHT)
         add_index(1)
      elsif Input.trigger?(:LEFT)   
         add_index(-1)
      end  
  end
  
  #--------------------------------------------------------------------------
  # ● Add Index
  #--------------------------------------------------------------------------   
  def add_index(value)
      Sound.play_cursor      
      @command_window.index += value
      @command_window.index = 0 if @command_window.index > @index_max
      @command_window.index = @index_max if @command_window.index < 0
      reset_item_index
  end   
  
end

#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill
  
  #--------------------------------------------------------------------------
  # ● Update Item Window
  #--------------------------------------------------------------------------               
  def update_target_window
      update_target_command
  end
  
  #--------------------------------------------------------------------------
  # ● Update Main Command
  #--------------------------------------------------------------------------        
  def update_target_command
      if Input.trigger?(:B)
         @phase = 1
         @skill_window[@command_window.index].index = @item_pre_index
       end  
  end  
  
end

#==============================================================================
# ■ Window Base
#==============================================================================
class Window_Base < Window
  
  include MOG_MENU_EQUIP
  
  #--------------------------------------------------------------------------
  # ● Set Equip Font
  #--------------------------------------------------------------------------         
  def set_font_equip
      return if self.disposed?
      return if self.contents == nil
      self.contents.font.name = FONT_NAME
      self.contents.font.size = FONT_SIZE
      self.contents.font.bold = FONT_BOLD
      self.contents.font.italic = FONT_ITALIC
  end
      
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache Skill Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_equip_menu
      @pre_cache_equip_menu = []
      @pre_cache_equip_menu.push(Cache.menu_equip("Background"))
      @pre_cache_equip_menu.push(Cache.menu_equip("Layout_U"))
      @pre_cache_equip_menu.push(Cache.menu_equip("Layout_R"))
      @pre_cache_equip_menu.push(Cache.menu_equip("Layout_D"))
      @pre_cache_equip_menu.push(Cache.menu_equip("Layout_L"))
      @pre_cache_equip_menu.push(Cache.menu_equip("Par_Number"))
  end   
   
end

#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Equip
  include MOG_MENU_EQUIP
  include MOG_MENU_BASE
  
  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------        
  def main
      execute_setup
      execute_loop
      execute_dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Setup
  #--------------------------------------------------------------------------        
  def execute_setup
      @actor = $game_temp.actor_menu_temp
      @actor_old = @actor
      @phase = 0
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Lopp
  #--------------------------------------------------------------------------        
  def execute_loop
      Graphics.transition(10)
      loop do
         Input.update
         update
         Graphics.update
         break if SceneManager.scene != self
      end
  end
  
end

#==============================================================================
# ■ Window_EquipStatus
#==============================================================================
class Window_EquipStatus < Window_Base
  
  #--------------------------------------------------------------------------
  # ● Initializee
  #--------------------------------------------------------------------------
  def initialize(x, y)
      super(x, y, window_width, window_height)
      @actor = nil
      @temp_actor = nil
      self.visible = false
  end
  
  #--------------------------------------------------------------------------
  # ● Window Width
  #--------------------------------------------------------------------------
  def window_width
      return 208
  end

  #--------------------------------------------------------------------------
  # ● Window Height
  #--------------------------------------------------------------------------
  def window_height
      return 296
  end

  #--------------------------------------------------------------------------
  # ● Visible Line Number
  #--------------------------------------------------------------------------
  def visible_line_number
      return 1
  end
  #--------------------------------------------------------------------------
  # ● Actor
  #--------------------------------------------------------------------------
  def actor=(actor)
      return if @actor == actor
      @actor = actor
  end

  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
      contents.clear
  end

  #--------------------------------------------------------------------------
  # ● Set Temp Actor
  #--------------------------------------------------------------------------
  def set_temp_actor(temp_actor)
      return if @temp_actor == temp_actor
      @temp_actor = temp_actor
      $game_temp.temp_actor_equip = @temp_actor
  end

end

#==============================================================================
# ■ Window_EquipCommand
#==============================================================================
class Window_EquipCommand < Window_HorzCommand

  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y, width)
      @window_width = width
      super(x, y)
  end
  
  #--------------------------------------------------------------------------
  # ● Window Width
  #--------------------------------------------------------------------------
  def window_width
      @window_width
  end

  #--------------------------------------------------------------------------
  # ● Col Max
  #--------------------------------------------------------------------------
  def col_max
      return 3
  end

  #--------------------------------------------------------------------------
  # ● Make Command List
  #--------------------------------------------------------------------------
  def make_command_list
      add_command(Vocab::equip2,   :equip)
      add_command(Vocab::optimize, :optimize)
      add_command(Vocab::clear,    :clear)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------  
  def draw_item(index)
  end  
  
end

#==============================================================================
# ■ Window_EquipSlot
#==============================================================================
class Window_EquipSlot < Window_Selectable

  attr_reader   :status_window        
  attr_reader   :item_window

  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y, width)
      super(x, y, width, window_height)
      @actor = nil   
      refresh
  end

  #--------------------------------------------------------------------------
  # ● Window Height
  #--------------------------------------------------------------------------
  def window_height
      fitting_height(visible_line_number)
  end
  
  #--------------------------------------------------------------------------
  # ● Visible Line Number
  #--------------------------------------------------------------------------
  def visible_line_number
      return 5
  end
  
  #--------------------------------------------------------------------------
  # ● Actor
  #--------------------------------------------------------------------------
  def actor=(actor)
      return if @actor == actor
      @actor = actor
      refresh
  end
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update
      super
      @item_window.slot_id = index if @item_window
  end
  
  #--------------------------------------------------------------------------
  # ● Item Max
  #--------------------------------------------------------------------------
  def item_max
      @actor ? @actor.equip_slots.size : 0
  end

  #--------------------------------------------------------------------------
  # ● Item
  #--------------------------------------------------------------------------
  def item
      @actor ? @actor.equips[index] : nil
  end

  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
      return unless @actor
      rect = item_rect_for_text(index)
      change_color(system_color, enable?(index))
      set_font_equip
      draw_item_name(@actor.equips[index], rect.x + 92, rect.y, enable?(index))
  end
  
  #--------------------------------------------------------------------------
  # ● Slot Name
  #--------------------------------------------------------------------------
  def slot_name(index)
      @actor ? Vocab::etype(@actor.equip_slots[index]) : ""
  end

  #--------------------------------------------------------------------------
  # ● Enable
  #--------------------------------------------------------------------------
  def enable?(index)
      @actor ? @actor.equip_change_ok?(index) : false
  end
  
  #--------------------------------------------------------------------------
  # ● Current Item Enabled
  #--------------------------------------------------------------------------
  def current_item_enabled?
    enable?(index)
  end
  
  #--------------------------------------------------------------------------
  # ● Status  Window
  #--------------------------------------------------------------------------
  def status_window=(status_window)
      @status_window = status_window
      call_update_help
  end

  #--------------------------------------------------------------------------
  # ● Item Window
  #--------------------------------------------------------------------------
  def item_window=(item_window)
      @item_window = item_window
      update
  end
  
  #--------------------------------------------------------------------------
  # ● Update Help
  #--------------------------------------------------------------------------
  def update_help
      super
      @help_window.set_item(item) if @help_window
      $game_temp.temp_actor_equip = nil if @status_window
  end
  
end

#==============================================================================
# ■ Window_EquipItem
#==============================================================================
class Window_EquipItem_Menu < Window_ItemList
  
  attr_reader   :status_window   
  attr_accessor :windows_index
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
      super
      @actor = nil
      @slot_id = 0
      @windows_index = 0
      self.visible = false
      self.opacity = 0
  end
  
  #--------------------------------------------------------------------------
  # ● Col Max
  #--------------------------------------------------------------------------
  def col_max
      return 1
  end  
  
  #--------------------------------------------------------------------------
  # ● Actor
  #--------------------------------------------------------------------------
  def actor=(actor)
      return if @actor == actor
      @actor = actor
      self.oy = 0
  end

  #--------------------------------------------------------------------------
  # ● Setup
  #--------------------------------------------------------------------------  
  def setup(actor,equip_type,index)
      @actor = actor
      @slot_id = equip_type
      @windows_index = index      
      refresh
  end  
  
  #--------------------------------------------------------------------------
  # ● Slot ID
  #--------------------------------------------------------------------------
  def slot_id=(slot_id)
  end
  
  #--------------------------------------------------------------------------
  # ● Include?
  #--------------------------------------------------------------------------
  def include?(item)
      return true if item == nil
      return false unless item.is_a?(RPG::EquipItem)
      return false if @slot_id < 0
      return false if item.etype_id != @actor.equip_slots[@slot_id]
      return @actor.equippable?(item)
  end

  #--------------------------------------------------------------------------
  # ● Enable?
  #--------------------------------------------------------------------------
  def enable?(item)
      return true
  end
  
  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
  end
  
  #--------------------------------------------------------------------------
  # ● Status Window
  #--------------------------------------------------------------------------
  def status_window=(status_window)
      @status_window = status_window
      call_update_help
  end
  
  #--------------------------------------------------------------------------
  # ● Update Help
  #--------------------------------------------------------------------------
  def update_help
      super
      if @actor && @status_window
         temp_actor = Marshal.load(Marshal.dump(@actor))
         temp_actor.force_change_equip(@slot_id, item)
         $game_temp.temp_actor_equip = temp_actor
      end
  end
   
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
      item = @data[index]
      if item
          set_font_equip
          rect = item_rect(index)
          rect.width -= 4
          draw_item_name(item, rect.x, rect.y, enable?(item))
          draw_item_number(rect, item)
      end
  end      
  
  #--------------------------------------------------------------------------
  # ● Draw Item Number
  #--------------------------------------------------------------------------
  def draw_item_number(rect, item)
      draw_text(rect, sprintf(": %2d", $game_party.item_number(item)), 2)
  end  
  
end

module MOG_EQUIP_STATUS  
  LAYOUT_POSITION = [0,80]
  FACE_POSITION = [120,-45]
  PAR_POSITION = [5,32]
  NAME_POSITION = [15,-5]
  FONT_NAME = "Georgia"
  FONT_SIZE = 18
  FONT_BOLD = true
end


#==============================================================================
# ■ Actor Menu Status
#==============================================================================
class Actor_Equip_Status
  
  include MOG_EQUIP_STATUS  
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(actor)
      @actor = actor
      @actor_old = @actor
      $game_temp.temp_actor_equip = nil
      @old_temp_actor = $game_temp.temp_actor_equip
      set_old_parameter
      create_sprites
  end

  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------  
  def create_sprites
      @parameter_number = $game_temp.pre_cache_equip_menu[5]
      @parameter_cw = @parameter_number.width / 11
      @parameter_ch = @parameter_number.height / 3
      create_layout
      create_face
      create_parameter
      create_name
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------  
  def dispose
      dispose_layout
      dispose_face
      dispose_parameter
      dispose_name
  end

  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------   
  def dispose_layout
      @layout.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Face
  #--------------------------------------------------------------------------   
  def dispose_face
      @face.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Parameter
  #--------------------------------------------------------------------------      
  def dispose_parameter
      @parameter.bitmap.dispose
      @parameter.dispose
  end

  #--------------------------------------------------------------------------
  # ● Dispose Name
  #--------------------------------------------------------------------------        
  def dispose_name
      @name.bitmap.dispose
      @name.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------
  def create_layout
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_equip_menu[4]
      @org_pos = [LAYOUT_POSITION[0],LAYOUT_POSITION[1]]
      @layout.x = @org_pos[0] - 150
      @layout.y = @org_pos[1]
      @layout.z = 10
      @layout.opacity = 0
      @slide_range = (@org_pos[0] - 150)
  end

  #--------------------------------------------------------------------------
  # ● Create Parameter
  #--------------------------------------------------------------------------
  def create_parameter
      @parameter = Sprite.new
      @parameter.bitmap = Bitmap.new(@layout.bitmap.width,@layout.bitmap.height)
      @org_pos_par = [@org_pos[0] + PAR_POSITION[0],
                      @org_pos[1] + PAR_POSITION[1]]
      @parameter.x = @org_pos_par[0] - 150
      @parameter.y = @org_pos_par[1]
      @parameter.z = 11
      @parameter.opacity = 0
      refresh_parameter
  end
  
  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------  
  def create_face
      @face = Sprite.new
      @org_pos_face = [@org_pos[0] + FACE_POSITION[0],
                       @org_pos[1] + FACE_POSITION[1]]
      @face.x = @org_pos_face[0] - 150
      @face.y = @org_pos_face[1]
      @face.z = 11
      @face.opacity = 0
      refresh_face
  end
  
  #--------------------------------------------------------------------------
  # ● Create Name
  #--------------------------------------------------------------------------   
  def create_name
      @name = Sprite.new
      @name.bitmap = Bitmap.new(140,32)
      @name.bitmap.font.name = FONT_NAME
      @name.bitmap.font.size = FONT_SIZE
      @name.bitmap.font.bold = FONT_BOLD
      @org_pos_name = [@org_pos[0] + NAME_POSITION[0],
                       @org_pos[1] + NAME_POSITION[1]]
      @name.x = @org_pos_name[0] - 150
      @name.y = @org_pos_name[1]
      @name.z = 11
      @name.opacity = 0
      refresh_name     
  end  
  
  #--------------------------------------------------------------------------
  # ● Set Old Parameter
  #--------------------------------------------------------------------------  
  def set_old_parameter
      @par = [] if @par == nil
      @par.clear
      @par = [
      @actor.param(0),@actor.param(1),@actor.param(2),@actor.param(3),
      @actor.param(4),@actor.param(5),@actor.param(6),@actor.param(7),
      @old_temp_actor
      ]
  end   
  
  #--------------------------------------------------------------------------
  # ● Can Refresh Parameter
  #--------------------------------------------------------------------------
  def can_refresh_parameter?
      return true if @par[0] != @actor.param(0)
      return true if @par[1] != @actor.param(1)
      return true if @par[2] != @actor.param(2)
      return true if @par[3] != @actor.param(3)
      return true if @par[4] != @actor.param(4)
      return true if @par[5] != @actor.param(5)
      return true if @par[6] != @actor.param(6)
      return true if @par[7] != @actor.param(7)
      return true if @old_temp_actor != $game_temp.temp_actor_equip
      return false
  end  
  
  #--------------------------------------------------------------------------
  # ● Refresh Name
  #--------------------------------------------------------------------------      
  def refresh_name   
      @name.bitmap.clear
      @name.bitmap.draw_text(0,0,140,32,@actor.name.to_s,0)
  end
  
  #--------------------------------------------------------------------------
  # ● Create Face
  #--------------------------------------------------------------------------   
  def refresh_parameter
      set_old_parameter
      @parameter.bitmap.clear
      @old_temp_actor = $game_temp.temp_actor_equip
      x = 180      
      for p in 0...8
          y = 24 * p
          refresh_number(@parameter,@parameter_number,p,@parameter_cw,@parameter_ch,x,y,0)
      end      
      if $game_temp.temp_actor_equip != nil
         x = 180 - (@parameter_cw * 7)
         for p in 0...8
             y = 24 * p
             refresh_number(@parameter,@parameter_number,p,@parameter_cw,@parameter_ch,x,y,1)
         end     
     end
  end
   
  #--------------------------------------------------------------------------
  # ● Refresh Number
  #--------------------------------------------------------------------------     
  def refresh_number(sprite,image,p,number_cw,number_ch,x,y,type)
      value = @actor.param(p)
      new_value = 0
      ch = 0
      if type == 1         
         if $game_temp.temp_actor_equip != nil
            new_value = $game_temp.temp_actor_equip.param(p)
         end         
         d_value = new_value - value
         if d_value < 0
            ch = 2
         elsif d_value > 0
            ch = 1
         else
            ch = 0
         end   
         value = new_value
      end
      draw_arrow(sprite,image,number_cw,number_ch,x,y,ch)
      draw_number(sprite,image,value,number_cw,number_ch,x,y,ch)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Arrow
  #--------------------------------------------------------------------------        
  def draw_arrow(sprite,image,number_cw,number_ch,x,y,ch)
      nsrc_rect = Rect.new(number_cw * 10, number_ch * ch , number_cw , number_ch)
      sprite.bitmap.blt(x + number_cw, y, image, nsrc_rect)     
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Number
  #--------------------------------------------------------------------------      
  def draw_number(sprite,image,value,number_cw,number_ch,x,y,ch)
      number = value.truncate.abs.to_s.split(//)
      x2 = -number_cw * number.size
      for i in 0..number.size  - 1
          number_abs = number.to_i
          nsrc_rect = Rect.new(number_cw * number_abs, number_ch * ch , number_cw , number_ch)
          sprite.bitmap.blt(x + x2 + (number_cw  *  i), y, image, nsrc_rect)        
      end      
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Face
  #--------------------------------------------------------------------------  
  def refresh_face
      face_name = "Face" + @actor.id.to_s
      @face.bitmap = Cache.menu(face_name.to_s)
  end
  
  #--------------------------------------------------------------------------
  # ● Update Move
  #--------------------------------------------------------------------------  
  def update_move
      update_slide(0,@layout,@layout.x,@org_pos[0])
      update_slide(1,@layout,@layout.y,@org_pos[1])      
      update_slide(0,@parameter,@parameter.x,@org_pos_par[0])
      update_slide(1,@parameter,@parameter.y,@org_pos_par[1])
      update_slide(0,@face,@face.x,@org_pos_face[0])
      update_slide(1,@face,@face.y,@org_pos_face[1])
      update_slide(0,@name,@name.x,@org_pos_name[0])
      update_slide(1,@name,@name.y,@org_pos_name[1])
  end

#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,cp,np)
      sprite.opacity += 5
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp if type == 1
  end      
  
  #--------------------------------------------------------------------------
  # ● Refresh All
  #--------------------------------------------------------------------------  
  def refresh_all(actor)      
      @actor = actor
      refresh_parameter
      refresh_face
      refresh_name
  end   
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update(actor)
      update_move
      refresh_all(actor) if actor != @actor
      refresh_parameter if can_refresh_parameter?
  end      
  
end

#==============================================================================
# ■ Scene_Equip
#==============================================================================
class Scene_Equip
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------
  def create_sprites
      create_menu_background
      create_layout
      create_particles
      create_help_window
      create_status_window
      create_command_window
      create_slot_window
      create_item_window
      create_actor_status
      set_sprite_position
  end
  
  #--------------------------------------------------------------------------
  # ● Set Sprite Position
  #--------------------------------------------------------------------------  
  def set_sprite_position
      @status_window.opacity = 0
      @command_window.opacity = 0
      @slot_window.opacity = 0
      @help_window.opacity = 0
      @status_window.contents_opacity = 0
      @command_window.contents_opacity = 0
      @slot_window.contents_opacity = 0
      @help_window.contents_opacity = 0      
      @layout2.opacity = 0
      @layout3.opacity = 0
      @layout4.opacity = 0
      @org_pos_help = [@help_window.x,@help_window.y]
      @help_window.x = @org_pos_help[0]
      @help_window.y = @org_pos_help[1] + 150     
      @org_pos_com = [@command_window.x,@command_window.y]
      @command_window.x = @org_pos_com[0]
      @command_window.y = @org_pos_com[1] - 150
      @org_pos_slot = [@slot_window.x,@slot_window.y]
      @slot_window.x = @org_pos_slot[0] + 150
      @slot_window.y = @org_pos_slot[1]      
      @layout2.y = -150
      @layout3.x = 150
      @layout4.y = 150      
  end
  
  #--------------------------------------------------------------------------
  # ● Create Actor Status
  #--------------------------------------------------------------------------  
  def create_actor_status
      @actor_status = Actor_Equip_Status.new(@actor)
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------            
  def create_menu_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_equip_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------              
  def create_layout     
      @layout2 = Sprite.new
      @layout2.bitmap = $game_temp.pre_cache_equip_menu[1]
      @layout2.z = 3
      @layout3 = Sprite.new
      @layout3.bitmap = $game_temp.pre_cache_equip_menu[2]
      @layout3.z = 3
      @layout4 = Sprite.new
      @layout4.bitmap = $game_temp.pre_cache_equip_menu[3]
      @layout4.z = 3
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Help Window
  #--------------------------------------------------------------------------              
  def create_help_window
      @help_window = Window_Help.new
      @help_window.x = 0
      @help_window.y = Graphics.height - @help_window.height
      @help_window.set_font_equip
  end     
  
  #--------------------------------------------------------------------------
  # ● Create Status Window
  #--------------------------------------------------------------------------
  def create_status_window
      @status_window = Window_EquipStatus.new(0, @help_window.height)
      @status_window.viewport = @viewport
      @status_window.actor = @actor
      @status_window.y = 48
  end

  #--------------------------------------------------------------------------
  # ● Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
      @command_window = Window_EquipCommand.new(208, 0, 336)
      @command_window.help_window = @help_window
      @command_window.set_handler(:equip,    method(:command_equip))
      @command_window.set_handler(:optimize, method(:command_optimize))
      @command_window.set_handler(:clear,    method(:command_clear))
      @command_window.set_handler(:cancel,   method(:return_scene))
      @command_window.set_handler(:pagedown, method(:next_actor))
      @command_window.set_handler(:pageup,   method(:prev_actor))
  end
  
  #--------------------------------------------------------------------------
  # ● Create Slot Window
  #--------------------------------------------------------------------------
  def create_slot_window
      wx = @status_window.width
      wy = @command_window.y + @command_window.height + 5
      ww = Graphics.width - @status_window.width
      @slot_window = Window_EquipSlot.new(wx, wy, ww)
      @slot_window.help_window = @help_window
      @slot_window.status_window = @status_window
      @slot_window.actor = @actor
      @slot_window.set_handler(:ok,       method(:on_slot_ok))
      @slot_window.set_handler(:cancel,   method(:on_slot_cancel))
      @slot_window.set_handler(:pagedown, method(:next_actor))
      @slot_window.set_handler(:pageup,   method(:prev_actor))  
  end
  
  #--------------------------------------------------------------------------
  # ● Create Item Window
  #--------------------------------------------------------------------------
  def create_item_window
      @equip_window = []
      index = 0
      window_max = 5
      for item in 0...window_max     
          wx = @slot_window.x
          wy = @slot_window.y + @slot_window.height + 5
          ww = @slot_window.width
          wh = @slot_window.height
          @equip_window.push(Window_EquipItem_Menu.new(wx, wy, ww, wh))
          @equip_window[item].setup(@actor,item, index)
          @equip_window[item].visible = false
          @equip_window[item].help_window = @help_window
          @equip_window[item].status_window = @status_window
          @equip_window[item].actor = @actor
          @equip_window[item].set_handler(:ok,     method(:on_item_ok))
          @equip_window[item].set_handler(:cancel, method(:on_item_cancel))
          @equip_window[item].opacity = 0
          @org_pos_equip = [@equip_window[item].x,@equip_window[item].y]
          index += 1
       end     
  
   end
   
end

#==============================================================================
# ■ Scene_Equip
#==============================================================================
class Scene_Equip
  
  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------        
  def execute_dispose
      Graphics.freeze
      dispose_background
      dispose_layout
      dispose_particles
      dispose_window
      dispose_actor_status
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Background
  #--------------------------------------------------------------------------  
  def dispose_background
      return if @background == nil
      @background.dispose
      @background = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------               
  def dispose_layout
      return if @layout2 == nil
      @layout2.dispose
      @layout3.dispose
      @layout4.dispose
      @layout2 = nil
  end  
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end     
  
  #--------------------------------------------------------------------------
  # ● Dispose Window
  #--------------------------------------------------------------------------         
  def dispose_window
      @status_window.dispose
      @command_window.dispose
      @slot_window.dispose
      @equip_window.each {|sprite| sprite.dispose }
      @help_window.dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Dispose Actor Status
  #--------------------------------------------------------------------------  
  def dispose_actor_status
      return if @actor_status == nil
      @actor_status.dispose
  end   
  
end

#==============================================================================
# ■ Scene_Equip
#==============================================================================
class Scene_Equip   

  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------         
  def update_sprites
      update_actor_status
      update_background
      update_particles
      update_window
      update_move
  end
  
  #--------------------------------------------------------------------------
  # ● Update Move
  #--------------------------------------------------------------------------
  def update_move
   
      update_slide(0,@command_window,@org_pos_com[0],0)
      update_slide(1,@command_window,@org_pos_com[1],0)
      
      update_slide(0,@help_window,@org_pos_help[0],0)
      update_slide(1,@help_window,@org_pos_help[1],0)      
   
      update_slide(0,@slot_window,@org_pos_slot[0],0)
      update_slide(1,@slot_window,@org_pos_slot[1],0)        
      
      update_slide(0,@layout2,0,1)
      update_slide(1,@layout2,0,1)
      
      update_slide(0,@layout3,0,1)
      update_slide(1,@layout3,0,1)      
      
      update_slide(0,@layout4,0,1)
      update_slide(1,@layout4,0,1)      
      
  end
  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,np,op_type)
      if op_type == 0
         sprite.contents_opacity += 5
      else
         sprite.opacity += 5
      end
      cp = type == 0 ? sprite.x : sprite.y
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp if type == 1
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Actor Status
  #--------------------------------------------------------------------------            
  def update_actor_status
      return if @actor_status == nil
      @actor_status.update(@actor)
  end
   
  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end  
  
  #--------------------------------------------------------------------------
  # ● Update Window
  #--------------------------------------------------------------------------            
  def update_window
      @status_window.update
      @command_window.update
      @slot_window.update
      for equip in @equip_window
          update_slide(0,equip,@org_pos_equip[0],0)
          update_slide(1,equip,@org_pos_equip[1],0)           
          if equip.windows_index == @slot_window.index
             equip.visible = true
             equip.update  
          else
             equip.visible = false
          end
      end  
  end
  
end

#==============================================================================
# ■ Scene_Equip
#==============================================================================
class Scene_Equip
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      update_sprites
      update_command
  end
  
  #--------------------------------------------------------------------------
  # ● Command Equip
  #--------------------------------------------------------------------------
  def command_equip
      @slot_window.activate
      @slot_window.select(0)
  end

  #--------------------------------------------------------------------------
  # ● Command Optimize
  #--------------------------------------------------------------------------
  def command_optimize
      Sound.play_equip
      @actor.optimize_equipments
      @status_window.refresh
      @slot_window.refresh
      @command_window.activate
  end
  
  #--------------------------------------------------------------------------
  # ● Command Clear
  #--------------------------------------------------------------------------
  def command_clear
      Sound.play_equip
      @actor.clear_equipments
      @status_window.refresh
      @slot_window.refresh
      @command_window.activate
  end
  
  #--------------------------------------------------------------------------
  # ● On Slot OK
  #--------------------------------------------------------------------------
  def on_slot_ok
      @equip_window[@slot_window.index].activate
      @equip_window[@slot_window.index].select(0)
  end
  
  #--------------------------------------------------------------------------
  # ● On Slot Cancel
  #--------------------------------------------------------------------------
  def on_slot_cancel
      @slot_window.unselect
      @command_window.activate
  end
  
  #--------------------------------------------------------------------------
  # ● On Item OK
  #--------------------------------------------------------------------------
  def on_item_ok
      Sound.play_equip
      @actor.change_equip(@slot_window.index, @equip_window[@slot_window.index].item)
      @slot_window.activate
      @slot_window.refresh
      @equip_window[@slot_window.index].unselect
      @equip_window[@slot_window.index].refresh
  end
  
  #--------------------------------------------------------------------------
  # ● On Item Cancel
  #--------------------------------------------------------------------------
  def on_item_cancel
      @slot_window.activate
      @equip_window[@slot_window.index].unselect
  end
  
  #--------------------------------------------------------------------------
  # ● Return Scene
  #--------------------------------------------------------------------------         
  def return_scene
      Sound.play_cancel
      SceneManager.return
    end

  #--------------------------------------------------------------------------
  # ● ON Actor Charge
  #--------------------------------------------------------------------------
  def on_actor_change
      $game_temp.actor_menu_temp = @actor
      SceneManager.goto(Scene_Equip)
  end  
  
end

#==============================================================================
# ■ Scene_Equip
#==============================================================================
class Scene_Equip

  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------      
  def update_command
   
  end
  
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache Status Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_status_menu
      @pre_cache_status_menu = []
      @pre_cache_status_menu.push(Cache.menu_status("Background"))
      @pre_cache_status_menu.push(Cache.menu_status("Layout"))
  end   
   
end

#==============================================================================
# ■ Scene_Status
#==============================================================================
class Scene_Status
  include MOG_MENU_STATUS
  include MOG_MENU_BASE
  
  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------        
  def main
      execute_setup
      execute_loop
      execute_dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Setup
  #--------------------------------------------------------------------------        
  def execute_setup
      @actor = $game_temp.actor_menu_temp
      @actor_old = @actor
      @phase = 0
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Lopp
  #--------------------------------------------------------------------------        
  def execute_loop
      Graphics.transition(10)
      loop do
         Input.update
         update
         Graphics.update
         break if SceneManager.scene != self
      end
  end
  
end

#==============================================================================
# ■ Window_Status
#==============================================================================
class Window_Status < Window_Selectable
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(actor)
      super(-16, -16, Graphics.width + 32, Graphics.height + 32)
      @actor = actor
      self.z = 10
      refresh
      activate
  end
  
  #--------------------------------------------------------------------------
  # ● Actor
  #--------------------------------------------------------------------------
  def actor=(actor)
      return if @actor == actor
      @actor = actor
      refresh
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
      contents.clear
      draw_description
      self.contents.font.size = 18
      self.contents.font.bold = true
      self.contents.font.name = "Georgia"
      draw_exp_info
      draw_parameters      
      draw_equipments
      draw_actor_hp_mp_tp
      draw_actor_name

  end

  #--------------------------------------------------------------------------
  # ● Draw Actor Name
  #--------------------------------------------------------------------------  
  def draw_actor_name
      self.contents.font.name = "Verdana"
      self.contents.font.size = 16
      text = @actor.class.name
      draw_text(240,185,100,32, text.to_s,1)      
      self.contents.font.size = 20   
      self.contents.font.italic = true
      text = @actor.name
      draw_text(125,50,120,32, text.to_s,1)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Parameters
  #--------------------------------------------------------------------------
  def draw_parameters
      par = @actor.atk
      draw_text(43,112,80,32, par.to_s,2)
      par = @actor.def
      draw_text(43,146,80,32, par.to_s,2)
      par = @actor.mat
      draw_text(162 ,112,80,32, par.to_s,2)      
      par = @actor.mdf
      draw_text(162,146,80,32, par.to_s,2)      
      par = @actor.agi
      draw_text(282,112,80,32, par.to_s,2)         
      par = @actor.luk
      draw_text(282,146,80,32, par.to_s,2)
  end   
     
  #--------------------------------------------------------------------------
  # ● Draw Actor HP MP TP
  #--------------------------------------------------------------------------  
  def draw_actor_hp_mp_tp
      self.contents.font.name = "Verdana"
      self.contents.font.size = 16
      par = @actor.hp.truncate
      draw_text(5,80,80,32, par.to_s,2)      
      par = @actor.mhp.truncate
      draw_text(50,80,80,32, par.to_s,2)           
      par = @actor.mp.truncate
      draw_text(123,80,80,32, par.to_s,2)      
      par = @actor.mmp.truncate
      draw_text(168,80,80,32, par.to_s,2)        
      par = @actor.tp.truncate
      draw_text(244,80,80,32, par.to_s,2)      
      par = @actor.max_tp.truncate
      draw_text(282,80,80,32, par.to_s,2)      
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Exp Info
  #--------------------------------------------------------------------------
  def draw_exp_info
      draw_text(200,10,64,32,@actor.level.to_s,1)
      s1 = @actor.max_level? ? "----------" : @actor.exp
      s2 = @actor.max_level? ? "----------" : @actor.next_level_exp - @actor.exp
      draw_text(300,10, 80, 32,s1.to_s, 1)
      draw_text(460,10, 80, 32,s2.to_s, 1)
  end

  #--------------------------------------------------------------------------
  # ● Draw Equipments
  #--------------------------------------------------------------------------
  def draw_equipments
      self.contents.font.size = 16
      item = @actor.equips[0]
      draw_item_name(item, 20, 220,true,140)
      item = @actor.equips[1]
      draw_item_name(item, 20, 220 + 43,true,140)
      item = @actor.equips[2]
      draw_item_name(item, 20, 220 + 86,true,140)      
      item = @actor.equips[3]
      draw_item_name(item, 196, 242,true,140)      
      item = @actor.equips[4]
      draw_item_name(item, 196, 242 + 43,true,140)
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Description
  #--------------------------------------------------------------------------
  def draw_description
      draw_text_ex(20, height - 96,@actor.description)
  end

  #--------------------------------------------------------------------------
  # ● Next Actor
  #--------------------------------------------------------------------------
  def next_actor
      $game_temp.actor_menu_temp = $game_party.menu_actor_next
      on_actor_change
  end
  #--------------------------------------------------------------------------
  # ● Prev Actor
  #--------------------------------------------------------------------------
  def prev_actor
      $game_temp.actor_menu_temp = $game_party.menu_actor_prev
      on_actor_change
  end  
  
  #--------------------------------------------------------------------------
  # ● On Actor Change
  #--------------------------------------------------------------------------
  def on_actor_change
      Sound.play_cursor
      SceneManager.goto(Scene_Status)
  end  
  
end

module MOG_STATUS_PARAMETER
  PICTURE_POS = [-105,0]
  METER_POSITION = [53,101]
  STATES_POSITION = [21,46]
  STATES_SCROLLING_ANIMATION = false
  MAX_PARAMETER_VALUE = 999
end
#==============================================================================
# ■ Status Parameter
#==============================================================================
class Status_Parameter
  
  include MOG_STATUS_PARAMETER
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(actor)
      @actor = actor
      create_picture
      create_states
      create_meter
  end
  
  #--------------------------------------------------------------------------
  # ● Create Picture
  #--------------------------------------------------------------------------   
  def create_picture
      @picture = Sprite.new
      pic_name = "Actor_S" + @actor.id.to_s
      @picture.bitmap = Cache.menu_status(pic_name.to_s)
      @picture.ox = @picture.bitmap.width / 2
      pos = [Graphics.width,Graphics.height - @picture.bitmap.height]
      @pos_org_pic = [PICTURE_POS[0] + pos[0] ,PICTURE_POS[1] + pos[1]]
      @picture.x = @pos_org_pic[0]
      @picture.y = @pos_org_pic[1] + 150
      @picture.opacity = 0
      @picture.z = 3
  end  
  
  #--------------------------------------------------------------------------
  # ● Create_States
  #--------------------------------------------------------------------------      
  def create_states
      @status_old = nil
      @status_flow = [-24,0]   
      @status = Sprite.new
      @status.bitmap = Bitmap.new(24,24)
      @org_pos_states = [STATES_POSITION[0],STATES_POSITION[1]]      
      @status.x = @org_pos_states[0] + 150
      @status.y = @org_pos_states[1]
      @status.z = 11
      @status.opacity = 0
  end      

  #--------------------------------------------------------------------------
  # * Refresh States
  #--------------------------------------------------------------------------        
  def refresh_states
      check_icon_image
      @status_old = @actor.states
      @status_flow = [0,0]
      @actor_status.dispose if @actor_status != nil
      @states_size = @actor.states.size > 0 ? (26 * @actor.states.size) : 24
      @actor_status = Bitmap.new(@states_size,24)
      index = 0
      for i in @actor.states
         rect = Rect.new(i.icon_index % 16 * 24, i.icon_index / 16 * 24, 24, 24)
         @actor_status.blt(26 * index , 0, @icon_image, rect)
         index += 1
      end
  end   
  
  #--------------------------------------------------------------------------
  # * Flow_Status
  #--------------------------------------------------------------------------         
  def flow_states
      return if @actor_status == nil
      @status.bitmap.clear
      return if @actor.states.size == 0
      st_src_rect = Rect.new(@status_flow[0],0, 24,24)
      @status.bitmap.blt(0,0, @actor_status, st_src_rect)
      if STATES_SCROLLING_ANIMATION
         @status_flow[0] += 1
         @status_flow[0] = -24 if @status_flow[0] >= @states_size + 2
      else   
         @status_flow[1] += 1 unless @actor.states.size <= 1
         if @status_flow[1] > 30
            @status_flow[1] = 0
            @status_flow[0] += 26
            @status_flow[0] = 0 if @status_flow[0] >= (@states_size - 0)
         end   
     end   
  end        
  
  #--------------------------------------------------------------------------
  # * Check Icon Image
  #--------------------------------------------------------------------------         
  def check_icon_image
      if @icon_image == nil or @icon_image.disposed?
         @icon_image = Cache.system("Iconset")
      end   
  end   
  
  #--------------------------------------------------------------------------
  # * Create Meter
  #--------------------------------------------------------------------------            
  def create_meter
      @meter_image = Cache.menu_status("Par_Meter")
      @meter_cw = @meter_image.width / 3
      @meter_ch = @meter_image.height / 4
      @meter = Sprite.new
      @meter.bitmap = Bitmap.new(380,140)
      @org_pos_meter = [METER_POSITION[0],METER_POSITION[1]]      
      @meter.x = @org_pos_meter[0] + 150
      @meter.y = @org_pos_meter[1]
      @meter.z = 11  
      @meter.opacity = 0
      @meter_flow = [0,@meter_cw * 2]      
      refresh_meter
  end  
  
  #--------------------------------------------------------------------------
  # * Refresh Meter
  #--------------------------------------------------------------------------            
  def refresh_meter
      @meter.bitmap.clear
      max_par = MAX_PARAMETER_VALUE
      value = @actor.hp
      value_max = @actor.mhp
      pos = [0,0]
      draw_meter(value,value_max,0,pos[0],pos[1])
      value = @actor.mp
      value_max = @actor.mmp
      pos = [120,0]
      draw_meter(value,value_max,1,pos[0],pos[1])
      value = @actor.tp
      value_max = @actor.max_tp
      pos = [240,0]
      draw_meter(value,value_max,2,pos[0],pos[1])         
      value = @actor.atk
      value_max = max_par
      pos = [0,34]
      draw_meter(value,value_max,3,pos[0],pos[1])      
      value = @actor.mat
      value_max = max_par
      pos = [120,34]
      draw_meter(value,value_max,3,pos[0],pos[1])         
      value = @actor.agi
      value_max = max_par
      pos = [240,34]
      draw_meter(value,value_max,3,pos[0],pos[1])      
      value = @actor.def
      value_max = max_par
      pos = [0,68]
      draw_meter(value,value_max,3,pos[0],pos[1])      
      value = @actor.mdf
      value_max = max_par
      pos = [120,68]
      draw_meter(value,value_max,3,pos[0],pos[1])         
      value = @actor.luk
      value_max = max_par
      pos = [240,68]
      draw_meter(value,value_max,3,pos[0],pos[1])      
      @meter_flow[0] += 5
      @meter_flow[0] = 0 if @meter_flow[0] > @meter_flow[1]
  end
  
  #--------------------------------------------------------------------------
  # * Draw Meter
  #--------------------------------------------------------------------------              
  def draw_meter(value,value_max,type,x,y)
      value_max = 1 if value_max <= 0
      range = @meter_cw * value.truncate / value_max.truncate
      ch = @meter_ch * type
      meter_scr = Rect.new(@meter_flow[0],ch,range,@meter_ch)
      @meter.bitmap.blt(x,y,@meter_image,meter_scr)
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------  
  def dispose
      dispose_picture
      dispose_states
      dispose_meter
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Picture
  #--------------------------------------------------------------------------   
  def dispose_picture
      @picture.bitmap.dispose
      @picture.dispose
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose States
  #--------------------------------------------------------------------------            
   def dispose_states
       return if @status == nil
       @status.bitmap.dispose
       @status.dispose
       if @actor_status != nil
          @actor_status.dispose
          @actor_status = nil
       end   
   end     
  
  #--------------------------------------------------------------------------
  # ● Dispose Meter
  #--------------------------------------------------------------------------            
   def dispose_meter
       return if @meter == nil
       @meter.bitmap.dispose
       @meter.dispose
   end     
     
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------  
  def update
      update_slide(0,@picture,@pos_org_pic[0])
      update_slide(1,@picture,@pos_org_pic[1])
      update_slide(0,@status,@org_pos_states[0])
      update_slide(1,@status,@org_pos_states[1])   
      update_slide(0,@meter,@org_pos_meter[0])
      update_slide(1,@meter,@org_pos_meter[1])         
      refresh_states if @status_old != @actor.states
      refresh_meter
      flow_states      
  end
  
  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,np)
      sprite.opacity += 5
      cp = type == 0 ? sprite.x : sprite.y
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp if type == 1
  end   
  
end

#==============================================================================
# ■ Scene_Status
#==============================================================================
class Scene_Status
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------
  def create_sprites
      create_menu_background
      create_layout
      create_particles
      create_status_window
      create_parameter
  end

  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------            
  def create_menu_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_status_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------              
  def create_layout     
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_status_menu[1]
      @layout.z = 9
      @layout.x = -150
      @layout.opacity = 0
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end   
   
  #--------------------------------------------------------------------------
  # ● Create Status Window
  #--------------------------------------------------------------------------  
  def create_status_window
      @status_window = Window_Status.new(@actor)
      @status_window.set_handler(:cancel,   method(:return_scene))
      @status_window.set_handler(:pagedown, method(:next_actor))
      @status_window.set_handler(:pageup,   method(:prev_actor))
      @org_pos_win = [@status_window.x,@status_window.y]
      @status_window.x += 150
      @status_window.opacity = 0
      @status_window.contents_opacity = 0
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Parameter
  #--------------------------------------------------------------------------   
  def create_parameter
      @parameter = Status_Parameter.new(@actor)
  end
  
end

#==============================================================================
# ■ Scene_Status
#==============================================================================
class Scene_Status
  
  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------        
  def execute_dispose
      Graphics.freeze
      dispose_background
      dispose_layout
      dispose_particles
      dispose_status_window
      dispose_parameter
   end
  
  #--------------------------------------------------------------------------
  # ● Dispose Background
  #--------------------------------------------------------------------------  
  def dispose_background
      return if @background == nil
      @background.dispose
      @background = nil
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------               
  def dispose_layout
      return if @layout == nil
      @layout.dispose
      @layout = nil
  end  
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end     
  
  #--------------------------------------------------------------------------
  # ● Dispose Status Window
  #--------------------------------------------------------------------------  
  def dispose_status_window
      return if @status_window == nil
      @status_window.dispose
  end  

  #--------------------------------------------------------------------------
  # ● Dispose Parameter
  #--------------------------------------------------------------------------   
  def dispose_parameter
      return if @parameter == nil
      @parameter.dispose
  end  
  
end

#==============================================================================
# ■ Scene Status
#==============================================================================
class Scene_Status
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------         
  def update_sprites   
      update_background
      update_particles     
      update_status_window
      update_parameter
      update_move
  end

  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------  
  def update_status_window
      return if @status_window == nil
      @status_window.update
  end
   
  #--------------------------------------------------------------------------
  # ● Update Move
  #--------------------------------------------------------------------------      
  def update_move
      update_slide(0,@status_window,@org_pos_win[0],0)
      update_slide(1,@status_window,@org_pos_win[1],0)
      update_slide(0,@layout,0,1)
      update_slide(1,@layout,0,1)     
  end  
  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,np,opa)
      if opa == 0
         sprite.contents_opacity += 5
      else   
         sprite.opacity += 5
      end  
      cp = type == 0 ? sprite.x : sprite.y
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp if type == 1
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Parameter
  #--------------------------------------------------------------------------   
  def update_parameter
      return if @parameter == nil
      @parameter.update
  end   
  
end

#==============================================================================
# ■ Scene_Status
#==============================================================================
class Scene_Status
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      update_sprites
      update_command
  end

  #--------------------------------------------------------------------------
  # ● Return Scene
  #--------------------------------------------------------------------------         
  def return_scene
      Sound.play_cancel
      SceneManager.return
  end

  #--------------------------------------------------------------------------
  # ● ON Actor Charge
  #--------------------------------------------------------------------------
  def on_actor_change
      Sound.play_cursor
      $game_temp.actor_menu_temp = @actor
      SceneManager.goto(Scene_Status)
  end  
  
end

#==============================================================================
# ■ Scene_Status
#==============================================================================
class Scene_Status

  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------      
  def update_command
      update_next_actor
  end
  
  #--------------------------------------------------------------------------
  # ● Update Next Actor
  #--------------------------------------------------------------------------        
  def update_next_actor
      if Input.trigger?(:RIGHT)
         @status_window.next_actor
       elsif Input.trigger?(:LEFT)
         @status_window.prev_actor
      end
  end
  
end



#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache Party Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_party_menu
      @pre_cache_party_menu = []
      @pre_cache_party_menu.push(Cache.menu_party("Background"))
      @pre_cache_party_menu.push(Cache.menu_party("Layout"))
  end   
   
end

#==============================================================================
# ■ Scene_Party
#==============================================================================
class Scene_Party
  include MOG_MENU_PARTY
  include MOG_MENU_BASE
  
  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------        
  def main
      execute_setup
      execute_loop
      execute_dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Setup
  #--------------------------------------------------------------------------        
  def execute_setup
      @phase = 0
      @actor = $game_party.members[0]
      @actor_old = @actor
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Lopp
  #--------------------------------------------------------------------------        
  def execute_loop
      Graphics.transition(10)
      loop do
         Input.update
         update
         Graphics.update
         break if SceneManager.scene != self
      end
  end
  
end

module MOG_ACTOR_MENU_PARTY
  FACE_POSITION = [390,96]
  NAME_POSITION = [390,73]
  FONT_NAME = "Verdana"
  FONT_SIZE = 16
  FONT_BOLD = true
end


#==============================================================================
# ■ Actor Menu Status Party
#==============================================================================
class Actor_Menu_Status_Party
  
  include MOG_ACTOR_MENU_PARTY
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize
      @active = false
      @max_members = $game_party.max_battle_members
      @max_members = $game_party.members.size if @max_members > $game_party.members.size
      create_sprites
  end

  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------  
  def create_sprites
      @face = []
      @face_org = []
      @name = []
      @name_org = []
      @actor_id = []
      space = 70
      index = 0
      for actor in $game_party.members  
         @face.push(Sprite.new)
         @face_org[index] = [FACE_POSITION[0],FACE_POSITION[1] + space * index]
         @face[index].x = @face_org[index][0] + 150 + (150 * index)
         @face[index].y = @face_org[index][1]
         @face[index].z = 10   
         @name.push(Sprite.new)
         @name[index].bitmap = Bitmap.new(200,120)
         @name[index].bitmap.font.name = FONT_NAME
         @name[index].bitmap.font.size = FONT_SIZE
         @name[index].bitmap.font.bold = FONT_BOLD
         @name_org[index] = [NAME_POSITION[0],NAME_POSITION[1] + space * index]
         @name[index].x = @name_org[index][0] + 150 + (150 * index)
         @name[index].y = @name_org[index][1]
         @name[index].z = 11
         @actor_id[index] = actor.id
         index += 1
         break if index >= @max_members
      end
      refresh
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh Position
  #--------------------------------------------------------------------------   
  def refresh_position(actor,index)
      @actor_id[index] = actor.id
      @face[index].x = @face_org[index][0] + 150 + (150 * index)
      @name[index].x = @name_org[index][0] + 150 + (150 * index)   
  end
  
  #--------------------------------------------------------------------------
  # ● Dispose
  #--------------------------------------------------------------------------      
  def dispose
      @face.each {|sprite| sprite.dispose }
      @name.each {|sprite| sprite.bitmap.dispose }
      @name.each {|sprite| sprite.dispose }
  end
   
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------      
  def refresh
      index = 0
      for actor in $game_party.members  
          face_name = "Face_B" + actor.id.to_s
          @face[index].bitmap = Cache.menu(face_name.to_s)
          @name[index].bitmap.clear
          @name[index].bitmap.draw_text(100,28,64,32,"LV " + actor.level.to_s,0)
          aname = actor.name
          @name[index].bitmap.draw_text(0,0,100,32,aname.to_s,0)
          refresh_position(actor,index) if @actor_id[index] != actor.id
          index += 1
          break if index >= @max_members
      end
  end
  
#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,np)
      sprite.opacity += 5
      cp = type == 0 ? sprite.x : sprite.y
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp if type == 1
  end      
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update(actor)
      for index in 0...@name.size
          update_slide(0,@face[index],@face_org[index][0])
          update_slide(1,@face[index],@face_org[index][1])
          update_slide(0,@name[index],@name_org[index][0])
          update_slide(1,@name[index],@name_org[index][1])
      end      
  end      
  
end

#==============================================================================
# ■ Window_MenuStatus Party
#==============================================================================
class Window_MenuStatus_Party < Window_Selectable
  attr_reader   :pending_index           
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(x, y)
      super(x, y, window_width, window_height)
      @pending_index = -1
      self.opacity = 0
      self.contents.font.bold = true
      self.contents.font.size = 18
      refresh
  end
  
  #--------------------------------------------------------------------------
  # ● Window Width
  #--------------------------------------------------------------------------
  def window_width
      Graphics.width - 160
  end

  #--------------------------------------------------------------------------
  # ● Window Height
  #--------------------------------------------------------------------------
  def window_height
      Graphics.height
  end
  
  #--------------------------------------------------------------------------
  # ● Item Max
  #--------------------------------------------------------------------------
  def item_max
      $game_party.members.size
  end

  #--------------------------------------------------------------------------
  # ● Item Height
  #--------------------------------------------------------------------------
  def item_height
    (height - standard_padding * 2) / 4
  end
  
  #--------------------------------------------------------------------------
  # ● Draw Item
  #--------------------------------------------------------------------------
  def draw_item(index)
    actor = $game_party.members[index]
    enabled = $game_party.battle_members.include?(actor)
    rect = item_rect(index)
    draw_item_background(index)
    draw_actor_face(actor, rect.x + 1, rect.y + 1, enabled)
    self.contents.font.color = Color.new(255,155,55,255)
    draw_text(rect.x + 60,rect.y + 23,64,32,"LV",2)
    draw_text(rect.x + 60,rect.y + 43,64,32,"HP",2)
    draw_text(rect.x + 60,rect.y + 63,64,32,"MP",2)
   
    draw_text(rect.x + 140,rect.y + 23,64,32,"Atk",2)
    draw_text(rect.x + 140,rect.y + 43,64,32,"Def",2)
    draw_text(rect.x + 140,rect.y + 63,64,32,"Agi",2)   
   
    draw_text(rect.x + 220,rect.y + 23,64,32,"Mag",2)
    draw_text(rect.x + 220,rect.y + 43,64,32,"Mdf",2)
    draw_text(rect.x + 220,rect.y + 63,64,32,"Luk",2)      
   
    self.contents.font.color = Color.new(255,255,255,255)
    draw_text(rect.x + 105,rect.y,105,32,actor.name,0)

    draw_text(rect.x + 105,rect.y + 23,64,32,actor.level,2)
    draw_text(rect.x + 105,rect.y + 43,64,32,actor.mhp,2)
    draw_text(rect.x + 105,rect.y + 63,64,32,actor.mmp,2)   
   
   
    draw_text(rect.x + 185,rect.y + 23,64,32,actor.atk,2)
    draw_text(rect.x + 185,rect.y + 43,64,32,actor.def,2)
    draw_text(rect.x + 185,rect.y + 63,64,32,actor.agi,2)   
   
    draw_text(rect.x + 265,rect.y + 23,64,32,actor.mat,2)
    draw_text(rect.x + 265,rect.y + 43,64,32,actor.mdf,2)
    draw_text(rect.x + 265,rect.y + 63,64,32,actor.luk,2)      
   
  end
  
  
  #--------------------------------------------------------------------------
  # ● Draw Item Background
  #--------------------------------------------------------------------------
  def draw_item_background(index)
      if index == @pending_index
        contents.fill_rect(item_rect(index), pending_color)
      end
  end

  #--------------------------------------------------------------------------
  # ● Process OK
  #--------------------------------------------------------------------------
  def process_ok
      super
      $game_party.menu_actor = $game_party.members[index]
  end

  #--------------------------------------------------------------------------
  # ● Select Last
  #--------------------------------------------------------------------------
  def select_last
      select($game_party.menu_actor.index || 0)
  end
  
  #--------------------------------------------------------------------------
  # ● Pending Index
  #--------------------------------------------------------------------------
  def pending_index=(index)
      last_pending_index = @pending_index
      @pending_index = index
      redraw_item(@pending_index)
      redraw_item(last_pending_index)
  end
end

#==============================================================================
# ■ Scene_Party
#==============================================================================
class Scene_Party
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------
  def create_sprites
      create_menu_background
      create_layout
      create_particles
      create_status_window
      create_actor_menu
  end
  
  #--------------------------------------------------------------------------
  # ● Create Status Window
  #--------------------------------------------------------------------------
  def create_status_window
      @status_window = Window_MenuStatus_Party.new(0, 0)
      command_formation
  end  

  #--------------------------------------------------------------------------
  # ● Create Actor Menu
  #--------------------------------------------------------------------------  
  def create_actor_menu
      @actor_status = Actor_Menu_Status_Party.new   
  end
  
  #--------------------------------------------------------------------------
  # ● Command Personal
  #--------------------------------------------------------------------------
  def command_personal
    @status_window.select_last
    @status_window.activate
    @status_window.set_handler(:ok,     method(:on_personal_ok))
    @status_window.set_handler(:cancel, method(:on_personal_cancel))
  end
  
  #--------------------------------------------------------------------------
  # ● Command Formation
  #--------------------------------------------------------------------------
  def command_formation
    @status_window.index = 0
    @old_index = @status_window.index
    @status_window.activate
    @status_window.set_handler(:ok,     method(:on_formation_ok))
    @status_window.set_handler(:cancel, method(:on_formation_cancel))
  end

  #--------------------------------------------------------------------------
  # ● On Personal Cancel
  #--------------------------------------------------------------------------
  def on_personal_cancel
      @status_window.unselect
  end
  
  #--------------------------------------------------------------------------
  # ● On Formation OK
  #--------------------------------------------------------------------------
  def on_formation_ok   
      if @status_window.pending_index >= 0
        $game_party.swap_order(@status_window.index,
                               @status_window.pending_index)
        @status_window.pending_index = -1
        @status_window.redraw_item(@status_window.index)
        @actor_status.refresh
      else
        @status_window.pending_index = @status_window.index        
      end
      @status_window.activate
  end
  
  #--------------------------------------------------------------------------
  # ● On Formation Cancel
  #--------------------------------------------------------------------------
  def on_formation_cancel
      if @status_window.pending_index >= 0
         @status_window.pending_index = -1
         @status_window.activate         
      else
         return_scene
      end
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------            
  def create_menu_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_party_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------              
  def create_layout     
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_party_menu[1]
      @layout.z = 3
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end   
   
end

#==============================================================================
# ■ Scene_Party
#==============================================================================
class Scene_Party
  
  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------        
  def execute_dispose
      Graphics.freeze
      dispose_background
      dispose_layout
      dispose_particles
      dispose_status_window
      dispose_actor_menu
   end

  #--------------------------------------------------------------------------
  # ● Dispose Status Window
  #--------------------------------------------------------------------------           
   def dispose_status_window
       @status_window.dispose
   end
     
  #--------------------------------------------------------------------------
  # ● Dispose Background
  #--------------------------------------------------------------------------  
  def dispose_background
      return if @background == nil
      @background.dispose
      @background = nil
  end   
  
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------               
  def dispose_layout
      return if @layout == nil
      @layout.dispose
      @layout = nil
  end  
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end     

#--------------------------------------------------------------------------
# ● Dispose Actor Menu
#--------------------------------------------------------------------------   
def dispose_actor_menu
     return if @actor_status == nil
     @actor_status.dispose
end   

end

#==============================================================================
# ■ Scene_Party
#==============================================================================
class Scene_Party
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------         
  def update_sprites   
      update_background
      update_particles
      update_status_window
  end
  
  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end
  
  #--------------------------------------------------------------------------
  # ● Update Status Window
  #--------------------------------------------------------------------------   
  def update_status_window
      return if @status_window == nil
      @status_window.update
      update_slide(0,@status_window,0)
      update_slide(1,@status_window,0)
      @actor = $game_party.members[@status_window.index]
      @actor_status.update(@actor)
  end

#--------------------------------------------------------------------------
# ● Update Slide
#--------------------------------------------------------------------------                       
  def update_slide(type,sprite,np)
      sprite.contents_opacity += 5
      cp = type == 0 ? sprite.x : sprite.y
      sp = 3 + ((cp - np).abs / 10)
      if cp > np
         cp -= sp
         cp = np if cp < np
      elsif cp < np
         cp += sp
         cp = np if cp > np
      end     
      sprite.x = cp if type == 0
      sprite.y = cp if type == 1
  end   

end

#==============================================================================
# ■ Scene_Party
#==============================================================================
class Scene_Party
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      update_sprites
      update_command
  end

  #--------------------------------------------------------------------------
  # ● Return Scene
  #--------------------------------------------------------------------------         
  def return_scene
      Sound.play_cancel
      SceneManager.return
  end

  #--------------------------------------------------------------------------
  # ● ON Actor Charge
  #--------------------------------------------------------------------------
  def on_actor_change
      $game_temp.actor_menu_temp = @actor
      SceneManager.goto(Scene_Status)
  end  
  
end

#==============================================================================
# ■ Scene_Party
#==============================================================================
class Scene_Party

  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------      
  def update_command
   
  end
  
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache File Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_file_menu
      @pre_cache_file_menu = []
      @pre_cache_file_menu.push(Cache.menu_save("Background"))
      @pre_cache_file_menu.push(Cache.menu_save("Layout"))
      @pre_cache_file_menu.push(Cache.menu_save("File_Mode"))
      @pre_cache_file_menu.push(Cache.menu_save("File_layout_1"))
      @pre_cache_file_menu.push(Cache.menu_save("File_layout_2"))
      @pre_cache_file_menu.push(Cache.menu_save("File_layout_3"))
      @pre_cache_file_menu.push(Cache.menu_save("Character_Floor"))
      @pre_cache_file_menu.push(Cache.menu_save("File_Number"))
  end   
   
end

#==============================================================================
# ■ Game Temp
#==============================================================================
class Game_Temp

  attr_accessor :scene_save
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  alias mog_scene_file_initialize initialize
  def initialize
      mog_scene_file_initialize
      @scene_save = false  
  end
  
end
   
#==============================================================================
# ■ Window_Base
#==============================================================================
class Window_Base < Window
  
  #--------------------------------------------------------------------------
  # ● draw_picture_number(x,y,value,file_name,align, space, frame_max ,frame_index)     
  #--------------------------------------------------------------------------
  # X - Posição na horizontal
  # Y - Posição na vertical
  # VALUE - Valor Numérico
  # FILE_NAME - Nome do arquivo
  # ALIGN - Centralizar 0 - Esquerda 1- Centro 2 - Direita  
  # SPACE - Espaço entre os números.
  # FRAME_MAX - Quantidade de quadros(Linhas) que a imagem vai ter.
  # FRAME_INDEX - Definição do quadro a ser utilizado.
  #--------------------------------------------------------------------------  
  def draw_picture_number_file(x,y,value, file_name,align = 0, space = 0, frame_max = 1,frame_index = 0)     
      number_image = $game_temp.pre_cache_file_menu[7]
      frame_max = 1 if frame_max < 1
      frame_index = frame_max -1 if frame_index > frame_max -1
      align = 2 if align > 2
      cw = number_image.width / 10
      ch = number_image.height / frame_max
      h = ch * frame_index
      number = value.abs.to_s.split(//)
      case align
         when 0
            plus_x = (-cw + space) * number.size
         when 1
            plus_x = (-cw + space) * number.size
            plus_x /= 2
         when 2  
            plus_x = 0
      end
      for r in 0..number.size - 1      
          number_abs = number[r].to_i
          number_rect = Rect.new(cw * number_abs, h, cw, ch)
          self.contents.blt(plus_x + x + ((cw - space) * r), y , number_image, number_rect)        
      end   
  end
   
  #--------------------------------------------------------------------------
  # ● Draw Help Layout
  #--------------------------------------------------------------------------
  def draw_face_save(name,x,y,type)
      if type == 0
         image_name = name + "_0"
      elsif type == 1
         image_name = name + "_1"         
      else  
         image_name = name + "_2"
      end
      image = Cache.face(image_name)   
      cw = image.width  
      ch = image.height
      src_rect = Rect.new(0, 0, cw, ch)   
      self.contents.blt(x , y , image, src_rect)  
      image.dispose
  end   
   
  #--------------------------------------------------------------------------
  # ● draw_parameter_layout
  #--------------------------------------------------------------------------  
  def draw_parameter_layout(x,y)
      image = $game_temp.pre_cache_file_menu[3]
      cw = image.width  
      ch = image.height
      src_rect = Rect.new(0, 0, cw, ch)   
      self.contents.blt(x , y , image, src_rect)     
  end   
  
  #--------------------------------------------------------------------------
  # ● draw_parameter_layout2
  #--------------------------------------------------------------------------  
  def draw_parameter_layout2(x,y,type)
      if type == 0
         image = $game_temp.pre_cache_file_menu[4]
      else   
         image = $game_temp.pre_cache_file_menu[5]
      end  
      cw = image.width  
      ch = image.height
      src_rect = Rect.new(0, 0, cw, ch)   
      self.contents.blt(x , y , image, src_rect)     
  end      
  
  #--------------------------------------------------------------------------
  # ● draw_character_floor
  #--------------------------------------------------------------------------  
  def draw_character_floor(x,y)
      image = $game_temp.pre_cache_file_menu[6]
      cw = image.width  
      ch = image.height
      src_rect = Rect.new(0, 0, cw, ch)   
      self.contents.blt(x , y , image, src_rect)   
  end
  
end  

#==============================================================================
# ■ DataManager
#==============================================================================
module DataManager

  #--------------------------------------------------------------------------
  # ● Make Save Header
  #--------------------------------------------------------------------------  
  def self.make_save_header
      header = {}
      header[:characters] = $game_party.characters_for_savefile
      header[:playtime_s] = $game_system.playtime_s
      header[:playtime] = $game_system.playtime
      header[:map_name] = $game_map.display_name
      header[:members] = $game_party.members
      header
  end  
   
end  

#==============================================================================
# ■ Scene Save
#==============================================================================
class Scene_Save < Scene_File

  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize
      $game_temp.scene_save = true
      super
  end  

end  

#==============================================================================
# ■ Scene Load
#==============================================================================
class Scene_Load < Scene_File

  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize
      $game_temp.scene_save = false
      super
  end  

end

#==============================================================================
# ■ Scene_File
#==============================================================================
class Scene_File
  include MOG_MENU_SAVE
  
#--------------------------------------------------------------------------
# ● Main
#--------------------------------------------------------------------------         
def main
     $game_temp.execute_pre_cache_file_menu
     create_sprites
     Graphics.transition(10)
     execute_loop
     execute_dispose
end   

#--------------------------------------------------------------------------
# ● Execute Loop
#--------------------------------------------------------------------------           
def execute_loop
     loop do
          Graphics.update
          Input.update
          update
          if SceneManager.scene != self
              break
          end
     end
end   

end

#==============================================================================
# ■ Window_SaveFile
#==============================================================================
class Window_SaveFile_A < Window_Base
  attr_reader   :filename               
  attr_reader   :file_exist               
  attr_reader   :time_stamp              
  attr_reader   :selected                 
  attr_reader   :file_index
  
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  def initialize(file_index, filename)
      super(0, 0,720, 140)
      self.opacity = 0
      @file_index = file_index
      @filename = filename
      load_gamedata
      refresh
      @selected = false
  end
  
  #--------------------------------------------------------------------------
  # ● load_gamedata
  #--------------------------------------------------------------------------
  def load_gamedata
    @time_stamp = Time.at(0)
    @file_exist = FileTest.exist?(@filename)
    if @file_exist
       header = DataManager.load_header(@file_index)
       if header == nil
          @file_exist = false
          return
       end  
       @characters = header[:characters]
       @total_sec = header[:playtime]
       @mapname = header[:map_name]
       @members = header[:members]
    end
  end
  
  #--------------------------------------------------------------------------
  # ● Refresh
  #--------------------------------------------------------------------------
  def refresh
      self.contents.clear
      self.contents.font.color = normal_color
      xp = 96
      ex = 60   
      if @file_exist
         if @total_sec == nil
            draw_parameter_layout2(0,50,0)
            draw_parameter_layout(-10 + xp,0)
            value = @file_index + 1
            draw_picture_number_file(13 + xp, 32,value, "File_Number_01",1,0,3,0)           
            self.contents.draw_text(140, 50, 450, 32, "Error! - Please, dont't use your old Save Files...", 0)
            return
        end  
        draw_parameter_layout2(0,50,0)
        draw_parameter_layout(-10 + xp,0)
        value = @file_index + 1
        draw_picture_number_file(13 + xp, 32,value, "File_Number_01",1,0,3,0)
        draw_party_characters(180 + xp, 75,ex)
        draw_playtime(495, 20, contents.width - 4, 2)
        draw_map_location( 400 + xp,64)
        draw_level(185 + xp,85,ex)
        draw_face_save(40 + xp,0)
      else  
        draw_parameter_layout2(0,50,1)
        draw_parameter_layout(-10 + xp,0)
        value = @file_index + 1
        draw_picture_number_file(13 + xp, 32,value, "File_Number_01",1,0,3,0)      
         self.contents.draw_text(260, 50, 120, 32, "No Data", 1)
      end
    end
   
  #--------------------------------------------------------------------------
  # ● draw_face
  #--------------------------------------------------------------------------
  def draw_face_save(x,y)
     draw_actor_face(@members[0], x, y)
  end
  
  #--------------------------------------------------------------------------
  # ● draw_level
  #--------------------------------------------------------------------------
  def draw_level(x,y,ex)
      self.contents.font.color = normal_color   
      for i in 0...@members.size
        break if i > 3
        level = @members.level
        draw_picture_number_file(x + (ex  * i) , y ,level, "File_Number_01",1,0,3,1)
      end        
  end
  
  #--------------------------------------------------------------------------
  # ● draw_map_location
  #--------------------------------------------------------------------------
  def draw_map_location(x,y)
      self.contents.font.bold = true
      self.contents.font.name = "Georgia"
      self.contents.font.size = 20
      self.contents.font.italic = true
      self.contents.draw_text(x, y, 125, 32, @mapname.to_s, 0)
  end
  #--------------------------------------------------------------------------
  # ● draw_party_characters
  #--------------------------------------------------------------------------
  def draw_party_characters(x, y,ex)
      for i in 0...@characters.size
        break if i > 3
        name = @characters[0]
        index = @characters[1]
        draw_character_floor(- 35 + x + i * ex,y - 20)      
        draw_character(name, index, x + i * ex, y)
      end
  end
  
  #--------------------------------------------------------------------------
  # ● draw_playtime
  #--------------------------------------------------------------------------
  def draw_playtime(x, y, width, align)
      hour = @total_sec / 60 / 60
      min = @total_sec / 60 % 60
      sec = @total_sec % 60
      time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
      draw_picture_number_file(x + 18 * 0, y ,0, "File_Number_01",0,0,3,0) if hour < 10
      draw_picture_number_file(x + 18 * 1, y ,hour, "File_Number_01",0,0,3,0)
      draw_picture_number_file(x + 18 * 3, y ,0, "File_Number_01",0,0,3,0) if min < 10
      draw_picture_number_file(x + 18 * 4, y ,min, "File_Number_01",0,0,3,0)
      draw_picture_number_file(x + 18 * 6, y ,0, "File_Number_01",0,0,3,0) if sec < 10
      draw_picture_number_file(x + 18 * 7, y ,sec , "File_Number_01",0,0,3,0)     
  end

  #--------------------------------------------------------------------------
  # ● selected
  #--------------------------------------------------------------------------
  def selected=(selected)
      @selected = selected
  end
end

#==============================================================================
# ■ Scene_File
#==============================================================================
class Scene_File
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------
  def create_sprites
      @saving = $game_temp.scene_save
      @file_max = FILES_MAX
      @file_max = 1 if FILES_MAX < 1
      create_background
      create_layout
      create_savefile_windows
      create_particles
      @index = DataManager.last_savefile_index
      @check_prev_index = true
      @savefile_windows[@index].selected = true   
  end  

  #--------------------------------------------------------------------------
  # ● Create Background
  #--------------------------------------------------------------------------            
  def create_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_file_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end   

  #--------------------------------------------------------------------------
  # ● Create_Layout
  #--------------------------------------------------------------------------  
  def create_layout
      @layout_01 = Sprite.new  
      @layout_01.bitmap = $game_temp.pre_cache_file_menu[1]
      @layout_01.z = 1      
      @layout_01.blend_type = 1      
      @save_image = $game_temp.pre_cache_file_menu[2]
      @layout_02 = Sprite.new  
      @layout_02.bitmap = Bitmap.new(@save_image.width,@save_image.height)
      cw = @save_image.width
      ch = @save_image.height / 2
      if @saving
         h = 0
      else  
         h = ch
      end  
      src_rect = Rect.new(0, h, cw, ch)
      @layout_02.bitmap.blt(0,0, @save_image, src_rect)      
      @layout_02.z = 3
      @layout_02.y = 370
   end

  #--------------------------------------------------------------------------
  # ● Create Save File Window
  #--------------------------------------------------------------------------
  def create_savefile_windows
      @pw_pos = [-160,32]
      @aw_pos = [-96,160]
      @nw_pos = [-32,288]
      @savefile_windows = []
      for i in 0...@file_max
          @savefile_windows = Window_SaveFile_A.new(i, DataManager.make_filename(i))
          @savefile_windows.z = 2
          @savefile_windows.visible = false
          @savefile_windows.x = 400
      end
      check_active_window
      @item_max = @file_max
  end
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end   
   
end

#==============================================================================
# ■ Scene_File
#==============================================================================
class Scene_File

  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------
  def execute_dispose
      return if @background == nil
      Graphics.freeze
      dispose_background
      dispose_particles
      dispose_layout
      dispose_item_windows
  end
   
#--------------------------------------------------------------------------
# ● Dispose Layout
#--------------------------------------------------------------------------  
def dispose_layout
     @layout_01.dispose
     @layout_02.bitmap.dispose
     @layout_02.dispose  
end
   
#--------------------------------------------------------------------------
# ● Dispose Background
#--------------------------------------------------------------------------
def dispose_background
     @background.dispose
     @background = nil   
end
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end   
  
  #--------------------------------------------------------------------------
  # ● Dispose of Save File Window
  #--------------------------------------------------------------------------
  def dispose_item_windows
      for window in @savefile_windows
          window.dispose
      end
  end  

end

#==============================================================================
# ■ Scene_File
#==============================================================================
class Scene_File  
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------
  def update_sprites
      check_start_index
      update_savefile_windows      
      update_background
      update_particles      
  end

  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end
   
  #--------------------------------------------------------------------------
  # ● check_start_index
  #--------------------------------------------------------------------------
  def check_start_index
      return if @check_prev_index == false
      @check_prev_index = false
      check_active_window   
  end  
   
  #--------------------------------------------------------------------------
  # ● check_active_window   
  #--------------------------------------------------------------------------
  def check_active_window   
      @index = 0 if @index == nil
      for i in 0...@file_max  
        @pw = @index - 1
        @pw = 0 if @pw > @file_max - 1
        @pw = @file_max- 1 if @pw < 0        
        @aw = @index
        @nw = @index + 1
        @nw = 0 if @nw > @file_max - 1
        @nw = @file_max - 1  if @nw < 0
        case @savefile_windows.file_index
           when @pw,@nw
                @savefile_windows.visible = true
                @savefile_windows.contents_opacity = 80
           when @aw  
                @savefile_windows.visible = true
                @savefile_windows.contents_opacity = 255
           else
                @savefile_windows.visible = false
        end
      end         
  end
   
  #--------------------------------------------------------------------------
  # ● Update Save File Window
  #--------------------------------------------------------------------------
  def update_savefile_windows
      update_slide_window
      for window in @savefile_windows
        window.update
      end
  end
  
  #--------------------------------------------------------------------------
  # ● update_slide_window
  #--------------------------------------------------------------------------  
  def update_slide_window
      slide_window_x(@pw,@pw_pos[0])
      slide_window_x(@aw,@aw_pos[0])
      slide_window_x(@nw,@nw_pos[0])
      slide_window_y(@pw,@pw_pos[1])
      slide_window_y(@aw,@aw_pos[1])
      slide_window_y(@nw,@nw_pos[1])
  end
   
  #--------------------------------------------------------------------------
  # ● slide_window_x
  #--------------------------------------------------------------------------   
  def slide_window_x(i,x_pos)
      if @savefile_windows.x < x_pos
         @savefile_windows.x += 15
         @savefile_windows.x = x_pos if @savefile_windows.x > x_pos
      end  
      if @savefile_windows.x > x_pos
         @savefile_windows.x -= 15
         @savefile_windows.x = x_pos if @savefile_windows.x < x_pos        
       end            
  end   
     
  #--------------------------------------------------------------------------
  # ● slide_window_y
  #--------------------------------------------------------------------------   
  def slide_window_y(i,y_pos)
      if @savefile_windows.y < y_pos
         @savefile_windows.y += 15
         @savefile_windows.y = y_pos if @savefile_windows.y > y_pos
      end  
      if @savefile_windows.y > y_pos
         @savefile_windows.y -= 15
         @savefile_windows.y = y_pos if @savefile_windows.y < y_pos        
       end            
  end   
     
  #--------------------------------------------------------------------------
  # ● reset_position
  #--------------------------------------------------------------------------     
  def reset_position(diretion)
      check_active_window      
      case diretion
         when 0
            @savefile_windows[@pw].y = -64
            @savefile_windows[@pw].x = 0
         when 1  
            @savefile_windows[@nw].y = 440
            @savefile_windows[@nw].x = 0
      end        
  end   
  
end  

#==============================================================================
# ■ Scene_File
#==============================================================================
class Scene_File  
  
  #--------------------------------------------------------------------------
  # ● Frame Update
  #--------------------------------------------------------------------------
  def update
      update_sprites
      update_command      
  end
  
  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------
  def update_command
      if Input.trigger?(Input::C)
         on_savefile_ok
      elsif Input.trigger?(Input::B)
         Sound.play_cancel
         return_scene
      else
        last_index = @index
        if Input.trigger?(Input::DOWN)
           execute_index(1)
           if @file_max > 2
              reset_position(1)
           else
              reset_position(0)
           end  
        end
        if Input.trigger?(Input::UP)
           execute_index(-1)
           reset_position(0)
        end
        if @index != last_index
           Sound.play_cursor
           @savefile_windows[last_index].selected = false
           @savefile_windows[@index].selected = true
        end      
      end
  end

  #--------------------------------------------------------------------------
  # ● Execute Index
  #--------------------------------------------------------------------------  
  def execute_index(value)
      @index += value
      @index = @index >= @file_max ? 0 : @index < 0 ? (@file_max - 1) : @index
  end
  
end

#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
  
  #--------------------------------------------------------------------------
  # ● Execute Pre Cache End Menu
  #--------------------------------------------------------------------------   
  def execute_pre_cache_end_menu
      @pre_cache_end_menu = []
      @pre_cache_end_menu.push(Cache.menu_end("Background"))
      @pre_cache_end_menu.push(Cache.menu_end("Layout"))
  end   
   
end

#==============================================================================
# ■ Scene_End
#==============================================================================
class Scene_End
  include MOG_MENU_END
  include MOG_MENU_BASE
  
  #--------------------------------------------------------------------------
  # ● Main
  #--------------------------------------------------------------------------        
  def main
      execute_setup
      execute_loop
      execute_dispose
  end  
  
  #--------------------------------------------------------------------------
  # ● Execute Setup
  #--------------------------------------------------------------------------        
  def execute_setup
      @phase = 0
      create_sprites
  end
  
  #--------------------------------------------------------------------------
  # ● Execute Lopp
  #--------------------------------------------------------------------------        
  def execute_loop
      Graphics.transition(10)
      loop do
         Input.update
         update
         Graphics.update
         break if SceneManager.scene != self
      end
  end
  
end

#==============================================================================
# ■ Scene_End
#==============================================================================
class Scene_End
  
  #--------------------------------------------------------------------------
  # ● Create Sprites
  #--------------------------------------------------------------------------
  def create_sprites
      create_menu_background
      create_layout
      create_particles
      create_command_window
  end

  #--------------------------------------------------------------------------
  # ● Create Menu Background
  #--------------------------------------------------------------------------            
  def create_menu_background
      @background = Plane.new
      @background.bitmap = $game_temp.pre_cache_end_menu[0]
      @background.z = 0
      @background_scroll = [BACKGROUND_SCROLL_SPEED[0],BACKGROUND_SCROLL_SPEED[1]]
  end   
  
  #--------------------------------------------------------------------------
  # ● Create Layout
  #--------------------------------------------------------------------------              
  def create_layout     
      @layout = Sprite.new
      @layout.bitmap = $game_temp.pre_cache_end_menu[1]
      @layout.z = 3
  end  
  
  #--------------------------------------------------------------------------
  # ● Create Particles
  #--------------------------------------------------------------------------  
  def create_particles
      @particles_sprite =[]
      for i in 0...NUMBER_OF_PARTICLES
          @particles_sprite.push(Particles_Menu.new(nil))
      end
  end   
   
  #--------------------------------------------------------------------------
  # ● Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
      @command_window = Window_GameEnd.new
      @command_window.set_handler(:to_title, method(:command_to_title))
      @command_window.set_handler(:shutdown, method(:command_shutdown))
      @command_window.set_handler(:cancel,   method(:return_scene))
  end  
  
end

#==============================================================================
# ■ Scene_End
#==============================================================================
class Scene_End
  
  #--------------------------------------------------------------------------
  # ● Execute Dispose
  #--------------------------------------------------------------------------        
  def execute_dispose
      Graphics.freeze
      dispose_background
      dispose_layout
      dispose_particles
      dispose_command_window
   end
  
  #--------------------------------------------------------------------------
  # ● Dispose Background
  #--------------------------------------------------------------------------  
  def dispose_background
      return if @background == nil
      @background.dispose
      @background = nil
  end
   
  
  #--------------------------------------------------------------------------
  # ● Dispose Layout
  #--------------------------------------------------------------------------               
  def dispose_layout
      return if @layout == nil
      @layout.dispose
      @layout = nil
  end  
  
#--------------------------------------------------------------------------
# ● Dispose Particles
#--------------------------------------------------------------------------   
def dispose_particles
     return if @particles_sprite == nil
     @particles_sprite.each {|sprite| sprite.dispose }
end     
  
  #--------------------------------------------------------------------------
  # ● Dispose Command Window
  #--------------------------------------------------------------------------
  def dispose_command_window
      return if @command_window == nil
      @command_window.dispose
  end     

end

#==============================================================================
# ■ Scene_End
#==============================================================================
class Scene_End
  
  #--------------------------------------------------------------------------
  # ● Update Sprites
  #--------------------------------------------------------------------------         
  def update_sprites   
      update_background
      update_particles     
      update_command_window
  end

  #--------------------------------------------------------------------------
  # ● Update Background
  #--------------------------------------------------------------------------              
  def update_background
      return if @background == nil
      @background.ox += @background_scroll[0]
      @background.oy += @background_scroll[1]
  end   
  
  #--------------------------------------------------------------------------
  # ● Update Particles
  #--------------------------------------------------------------------------  
  def update_particles
      return if @particles_sprite == nil
      @particles_sprite.each {|sprite| sprite.update }
  end

  #--------------------------------------------------------------------------
  # ● Update Command Window
  #--------------------------------------------------------------------------
  def update_command_window
      return if @command_window == nil
      @command_window.update
  end      
  
end

#==============================================================================
# ■ Scene_End
#==============================================================================
class Scene_End
  
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------      
  def update
      update_sprites
      update_command
  end

  #--------------------------------------------------------------------------
  # ● Return Scene
  #--------------------------------------------------------------------------         
  def return_scene
      Sound.play_cancel
      SceneManager.return
  end

  #--------------------------------------------------------------------------
  # ● ON Actor Charge
  #--------------------------------------------------------------------------
  def on_actor_change
      $game_temp.actor_menu_temp = @actor
      SceneManager.goto(Scene_Status)
  end  
  
end

#==============================================================================
# ■ Scene_End
#==============================================================================
class Scene_End

  #--------------------------------------------------------------------------
  # ● Update Command
  #--------------------------------------------------------------------------      
  def update_command   
  end
  
end

$mog_rgss3_monogatari = true[/pre]求大神解决 !在商店购买装备会出现报错!   
)MTND]1PMD5KPMPMV)GUQV1.jpg
你的意思就是要打架咯?
梦石
0
星屑
199
在线时间
248 小时
注册时间
2012-4-29
回帖
313
 楼主| 发表于 2013-11-20 23:05:04 | 显示全部楼层
没人么!@喵呜喵5 @tan12345  

点评

反正一个几万行的代码我是根本不会去看的  发表于 2013-11-20 23:08
你的意思就是要打架咯?
回复

使用道具 举报

梦石
0
星屑
199
在线时间
248 小时
注册时间
2012-4-29
回帖
313
 楼主| 发表于 2013-11-20 23:10:19 | 显示全部楼层
魔力的觉醒 发表于 2013-11-20 23:05
没人么!@喵呜喵5 @tan12345

完蛋了!
你的意思就是要打架咯?
回复

使用道具 举报

梦石
0
星屑
3348
在线时间
1120 小时
注册时间
2009-4-15
回帖
761
发表于 2013-11-21 09:10:51 | 显示全部楼层
你只是单独使用了这个脚本吗?
回复

使用道具 举报

梦石
0
星屑
1572
在线时间
903 小时
注册时间
2011-3-4
回帖
801
发表于 2013-11-21 12:08:17 | 显示全部楼层
一万多行的脚本,我连打字都开始卡了。
全民制作人们,大家好,我是练习时长两年半的黄油制作人绿坝,喜欢唱、跳、rap、篮球,music!欢迎加群:107335249
回复

使用道具 举报

梦石
0
星屑
199
在线时间
248 小时
注册时间
2012-4-29
回帖
313
 楼主| 发表于 2013-11-21 12:11:13 | 显示全部楼层
tan12345 发表于 2013-11-21 09:10
你只是单独使用了这个脚本吗?

不是  他和商店脚本不兼容 !这个脚本
  1. #==============================================================================
  2. # ■ VXAce-RGSS3-30 マルチカテゴリショップ [Ver.1.0.0]       by Claimh
  3. #------------------------------------------------------------------------------
  4. # カテゴリ分類を細分化できるショップです。
  5. #<機能概要>
  6. #・購入・売却リストをカテゴリ分類する
  7. #・武器タイプ・防具タイプで分類する
  8. #・アクターが装備可能な武器・防具で分類する
  9. #・ショップ画面からの装備変更
  10. #・購入した装備品をすぐに装備する
  11. #・購入・売却不可のアイテムを設定できる
  12. #・購入・売却の価格レートの変更
  13. #------------------------------------------------------------------------------
  14. # <操作>
  15. # Cボタン      : 購入/売買
  16. # ←/→ボタン  : アクター情報切り替え
  17. # ↑/↓ボタン  : 購入/売却数 ±10
  18. # L/Rボタン    : カテゴリ切り替え
  19. #------------------------------------------------------------------------------
  20. # <メモ欄設定>
  21. # ・売却不可 : <not_sell>
  22. #------------------------------------------------------------------------------
  23. #<売買不可設定>
  24. # ・購入不可アイテム追加
  25. #    $game_system.shop.buy.add_ng_item(type, id)
  26. #      type : 種別(0:アイテム, 1:武器, 2:防具)
  27. #      id   : ID
  28. # ・購入不可アイテム解除
  29. #    $game_system.shop.buy.del_ng_item(type, id)
  30. # ・売却不可アイテム追加
  31. #    $game_system.shop.sell.add_ng_item(type, id)
  32. # ・売却不可アイテム解除
  33. #    $game_system.shop.sell.del_ng_item(type, id)
  34. #------------------------------------------------------------------------------
  35. # <全体売買レート変更>
  36. #・購入レート
  37. #  $game_system.shop.buy.rate   = レート(%)
  38. #・売却レート
  39. #  $game_system.shop.sell.rate  = レート(%)
  40. #------------------------------------------------------------------------------
  41. # <個別売買レート変更>
  42. #※全体レートよりも個別レートが優先されます。(全体×個別というレート計算はしません)
  43. #・個別購入レート
  44. #  $game_system.shop.buy.item_rate(type, id, rate)
  45. #      type : 種別(0:アイテム, 1:武器, 2:防具)
  46. #      id   : ID
  47. #      rate : レート(%)
  48. #・個別売却レート
  49. #  $game_system.shop.sell.item_rate(type, id, rate)
  50. #・個別購入レート情報削除
  51. #  $game_system.shop.buy.del_item_rate(type, id)
  52. #・個別売却レート情報削除
  53. #  $game_system.shop.sell.del_item_rate(type, id)
  54. #------------------------------------------------------------------------------
  55. # <合計金額取得>
  56. #・購入合計:  $game_system.shop.buy.gold
  57. #・売却合計:  $game_system.shop.sell.gold
  58. #------------------------------------------------------------------------------
  59. # <購入不可判定について>
  60. # 以下のいずれかに当てはまる場合は購入不可
  61. #   ・お金が足りない
  62. #   ・アイテムの最大数超過($game_party.item_max?)
  63. #   ・購入不可アイテムの対象($game_system.shop.buy.add_ng_item)
  64. #------------------------------------------------------------------------------
  65. # <売却不可判定について>
  66. # 以下のいずれかに当てはまる場合は売却不可
  67. #   ・データベース上の値段が0 (※レート計算で値段が0になる場合は除く)
  68. #   ・メモ欄に <not_sell>指定がある
  69. #   ・売却不可アイテムの対象($game_system.shop.sell.add_ng_item)
  70. #------------------------------------------------------------------------------
  71. # <アクターが装備可能な武器・防具で分類>
  72. # BUY_CTにACTORを入れた時の動作
  73. #   ・カテゴリ切り替えでACTORカテゴリに変わった時にアクターステータスも切り替え
  74. #   ・アイコンはキャラクターを表示
  75. #------------------------------------------------------------------------------
  76. # <購入した装備品をすぐに装備する>
  77. # アクターステータスウィンドウに表示されているアクターが装備できる武器・防具を
  78. # 購入したときに装備するか否かの選択が表示されます。
  79. #==============================================================================

  80. module ExShop
  81.   ALL=0;ITEM=1;WEAPON=2;ARMOR=3;KEY=4;ACTOR=5
  82.   #----------------------------------------------------------------------------
  83.   # レート設定
  84.   #----------------------------------------------------------------------------
  85.   # 初期購入レート(%)
  86.   BUY_RATE  = 100.0
  87.   # 初期売却レート(%)
  88.   SELL_RATE = 60.0

  89.   # 値段指定あり時も購入レートを適応する
  90.   USE_P_RATE = true

  91.   #----------------------------------------------------------------------------
  92.   # 分類設定
  93.   #----------------------------------------------------------------------------
  94.   # 購入分類設定
  95.   #   ALL     : すべて
  96.   #   ITEM    : アイテム
  97.   #   WEAPON  : 武器
  98.   #   ARMOR   : 防具
  99.   #   ACTOR   : アクターが装備できる武器・防具
  100.   BUY_CT = [ALL, ITEM, WEAPON, ARMOR]
  101.   #BUY_CT = [ALL, ITEM, ACTOR]  # アクター装備別の例

  102.   # 売却分類設定
  103.   #   ALL     : すべて
  104.   #   ITEM    : アイテム
  105.   #   WEAPON  : 武器
  106.   #   ARMOR   : 防具
  107.   #   KEY     : 大事なもの
  108.   SELL_CT = [ALL, ITEM, WEAPON, ARMOR, KEY]


  109.   # 武器をさらに分類する
  110.   # (分類設定のWEAPONを武器タイプで分類します)
  111.   USE_W_TYPE =  false
  112.   # 防具をさらに分類する
  113.   # (分類設定のARMORを防具タイプ/防具種別で分類します)
  114.   #   0 : 分類しない
  115.   #   1 : 防具タイプで分類
  116.   #   2 : 装備タイプ(盾/頭/身体/装飾品)で分類
  117.   USE_A_TYPE = 0


  118.   # アイコン設定
  119.   #         [ALL用, ITEM用, WEAPON用, ARMOR用, KEY用]
  120.   CT_ICON = [  4608,    4609,      4610,     4611,   4612]
  121.   # 武器タイプ アイコン設定
  122.   #           [0, 武器タイプ1, 武器タイプ2, …]
  123.   CT_W_ICON = [0, 4634, 4633, 146, 147, 148, 149, 150, 151, 152, 153]
  124.   # 防具タイプ アイコン設定
  125.   #           [0, 防具タイプ1, 防具タイプ2, …]
  126.   CT_A_ICON = [0, 4632, 4631, 169, 170, 160, 161]
  127.   # 防具種別 アイコン設定
  128.   #           [0,  盾, 頭, 身体, 装飾品]
  129.   CT_E_ICON = [0, 4630, 4629,  169,    176]


  130.   #----------------------------------------------------------------------------
  131.   # 表示設定
  132.   #----------------------------------------------------------------------------
  133.   # 購入不可アイテムの値段表示(""の時は値段を表示)
  134.   V_N_BUY = "售价"

  135.   #----------------------------------------------------------------------------
  136.   # レイアウト設定
  137.   #----------------------------------------------------------------------------
  138.   # 所持金ウィンドウを左下に配置する
  139.   #   true  : 左下に配置(カテゴリ多用)
  140.   #   false : 右上に配置(カテゴリ小用)
  141.   GOLD_LD = false
  142. end



  143. module ExShop
  144.   #--------------------------------------------------------------------------
  145.   # ● 購入レート変換(購入価格計算)
  146.   #--------------------------------------------------------------------------
  147.   def self.buy_price(item, price, fix=false)
  148.     return price if fix and !USE_P_RATE
  149.     $game_system.shop.buy.price(item_type(item), item.id, price)
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ● 売却レート変換(売却価格計算)
  153.   #--------------------------------------------------------------------------
  154.   def self.sell_price(item, price)
  155.     $game_system.shop.sell.price(item_type(item), item.id, price)
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ● atype => symbol
  159.   #--------------------------------------------------------------------------
  160.   def self.actor_sym
  161.     $game_party.members.collect {|a| a.id.to_s.to_sym }
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ● CT設定 => symbol
  165.   #--------------------------------------------------------------------------
  166.   def self.ct_sym(ct)
  167.     ct.inject([]) do |r, c|
  168.       case c
  169.       when WEAPON;  r += wtype_sym
  170.       when ARMOR;   r += atype_sym
  171.       when ACTOR;   r += actor_sym
  172.       else;         r.push([:all, :item, :weapon, :armor, :key_item][c])
  173.       end
  174.     end
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # ● wtype => symbol
  178.   #--------------------------------------------------------------------------
  179.   def self.wtype_sym
  180.     return [:weapon] unless ExShop::USE_W_TYPE
  181.     $data_system.weapon_types[1, $data_system.weapon_types.size].collect {|a| a.to_sym}
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ● atype => symbol
  185.   #--------------------------------------------------------------------------
  186.   def self.atype_sym
  187.     case ExShop::USE_A_TYPE
  188.     when 1  # 防具タイプ
  189.       $data_system.armor_types[1, $data_system.armor_types.size].collect {|a| a.to_sym}
  190.     when 2  # 装備タイプ
  191.       [:shield, :helmet, :clothes, :accessory]
  192.     else
  193.       [:armor]
  194.     end
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● symbol => wtype or atype
  198.   #--------------------------------------------------------------------------
  199.   def self.sym_type(sym)
  200.     str = sym.id2name
  201.     return WEAPON if $data_system.weapon_types.include?(str)
  202.     return ARMOR  if $data_system.armor_types.include?(str)
  203.     ACTOR
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● sym => wtype
  207.   #--------------------------------------------------------------------------
  208.   def self.sym_wtype(sym)
  209.     $data_system.weapon_types.index(sym.id2name)
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ● sym => atype
  213.   #--------------------------------------------------------------------------
  214.   def self.sym_atype(sym)
  215.     $data_system.armor_types.index(sym.id2name)
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● symbol => 設定
  219.   #--------------------------------------------------------------------------
  220.   def self.sym2id(sym)
  221.     case sym
  222.     when :all;      return ALL
  223.     when :item;     return ITEM
  224.     when :weapon;   return WEAPON
  225.     when :armor;    return ARMOR
  226.     when :key_item; return KEY
  227.     when :shield, :helmet, :clothes, :accessory;  return ARMOR
  228.     else  return sym_type(sym)
  229.     end
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ● symbol => アイコン
  233.   #--------------------------------------------------------------------------
  234.   def self.sym2icon(sym)
  235.     case sym
  236.     when :all;        return CT_ICON[ALL]
  237.     when :none;       return 0
  238.     when :item;       return CT_ICON[ITEM]
  239.     when :weapon;     return CT_ICON[WEAPON]
  240.     when :armor;      return CT_ICON[ARMOR]
  241.     when :key_item;   return CT_ICON[KEY]
  242.     when :shield;     return CT_E_ICON[1]
  243.     when :helmet;     return CT_E_ICON[2]
  244.     when :clothes;    return CT_E_ICON[3]
  245.     when :accessory;  return CT_E_ICON[4]
  246.     else
  247.       case sym_type(sym)
  248.       when WEAPON;  return CT_W_ICON[sym_wtype(sym)]
  249.       when ARMOR;   return CT_A_ICON[sym_atype(sym)]
  250.       when ACTOR;   return 0
  251.       end
  252.     end
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● symbol => Actor
  256.   #--------------------------------------------------------------------------
  257.   def self.sym2actor(sym)
  258.     $game_actors[sym.id2name.to_i]
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ● アイテムをリストに含めるかどうか
  262.   #--------------------------------------------------------------------------
  263.   def self.item_include?(sym, item)
  264.     case sym
  265.     when :all
  266.       true
  267.     when :none
  268.       false
  269.     when :item
  270.       item.is_a?(RPG::Item) && !item.key_item?
  271.     when :weapon
  272.       item.is_a?(RPG::Weapon)
  273.     when :armor
  274.       item.is_a?(RPG::Armor)
  275.     when :key_item
  276.       item.is_a?(RPG::Item) && item.key_item?
  277.     when :shield
  278.       item.is_a?(RPG::Armor) && item.etype_id == 1
  279.     when :helmet
  280.       item.is_a?(RPG::Armor) && item.etype_id == 2
  281.     when :clothes
  282.       item.is_a?(RPG::Armor) && item.etype_id == 3
  283.     when :accessory
  284.       item.is_a?(RPG::Armor) && item.etype_id == 4
  285.     else
  286.       case sym_type(sym)
  287.       when WEAPON
  288.         item.is_a?(RPG::Weapon) and item.wtype_id == sym_wtype(sym)
  289.       when ARMOR
  290.         item.is_a?(RPG::Armor)  and item.atype_id == sym_atype(sym)
  291.       when ACTOR
  292.         sym2actor(sym).equippable?(item)
  293.       else
  294.         false
  295.       end
  296.     end
  297.   end
  298.   #--------------------------------------------------------------------------
  299.   # ● アイテムタイプ
  300.   #--------------------------------------------------------------------------
  301.   def self.item_type(item)
  302.     case item
  303.     when RPG::Item;   return 0
  304.     when RPG::Weapon; return 1
  305.     when RPG::Armor;  return 2
  306.     end
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # ● 購入可否判定
  310.   #--------------------------------------------------------------------------
  311.   def self.buy_enable?(item)
  312.     not $game_system.shop.buy.ng_item?(item_type(item), item.id)
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # ● 売却可否判定
  316.   #--------------------------------------------------------------------------
  317.   def self.sell_enable?(item)
  318.     not $game_system.shop.sell.ng_item?(item_type(item), item.id)
  319.   end
  320.   #--------------------------------------------------------------------------
  321.   # ● 購入不可文字
  322.   #--------------------------------------------------------------------------
  323.   def self.not_buy(item, price)
  324.     return price if V_N_BUY == ""
  325.     buy_enable?(item) ? price : V_N_BUY
  326.   end
  327. end



  328. #==============================================================================
  329. # ■ RPG::Item
  330. #==============================================================================
  331. class RPG::Item < RPG::UsableItem
  332.   #--------------------------------------------------------------------------
  333.   # ● 売却可能か?
  334.   #--------------------------------------------------------------------------
  335.   def sell?
  336.     @price > 0 and !@note.include?("<not_sell>")
  337.   end
  338. end

  339. #==============================================================================
  340. # ■ RPG::EquipItem
  341. #==============================================================================
  342. class RPG::EquipItem < RPG::BaseItem
  343.   #--------------------------------------------------------------------------
  344.   # ● 売却可能か?
  345.   #--------------------------------------------------------------------------
  346.   def sell?
  347.     @price > 0 and !@note.include?("<not_sell>")
  348.   end
  349. end


  350. #==============================================================================
  351. # ■ ExShop::ShopStatus
  352. #==============================================================================
  353. class ExShop::ShopStatus
  354.   #--------------------------------------------------------------------------
  355.   # ● 公開インスタンス変数
  356.   #--------------------------------------------------------------------------
  357.   attr_reader :buy   # 購入ステータス
  358.   attr_reader :sell  # 売却ステータス
  359.   #--------------------------------------------------------------------------
  360.   # ● オブジェクト初期化
  361.   #--------------------------------------------------------------------------
  362.   def initialize
  363.     reset
  364.   end
  365.   #--------------------------------------------------------------------------
  366.   # ● リセット
  367.   #--------------------------------------------------------------------------
  368.   def reset
  369.     @buy  = Status.new(ExShop::BUY_RATE)
  370.     @sell = Status.new(ExShop::SELL_RATE)
  371.   end
  372.   #--------------------------------------------------------------------------
  373.   # ● レートリセット
  374.   #--------------------------------------------------------------------------
  375.   def rate_reset
  376.     @buy.rate  = ExShop::BUY_RATE
  377.     @sell.rate = ExShop::SELL_RATE
  378.     @buy.i_rate_reset
  379.     @sell.i_rate_reset
  380.   end
  381.   #--------------------------------------------------------------------------
  382.   # ● 売買不可アイテム情報リセット
  383.   #--------------------------------------------------------------------------
  384.   def ng_reset
  385.     @buy.ng_reset
  386.     @sell.ng_reset
  387.   end

  388.   #============================================================================
  389.   # ■ Status  : 売買情報
  390.   #============================================================================
  391.   class Status
  392.     attr_accessor :rate        # レート
  393.     attr_accessor :gold        # 金額
  394.     #------------------------------------------------------------------------
  395.     # ● オブジェクト初期化
  396.     #------------------------------------------------------------------------
  397.     def initialize(rate)
  398.       @rate = rate
  399.       [url=home.php?mod=space&uid=236945]@gold[/url] = 0
  400.       i_rate_reset
  401.       ng_reset
  402.     end
  403.     #------------------------------------------------------------------------
  404.     # ● 個別レート設定リセット
  405.     #------------------------------------------------------------------------
  406.     def i_rate_reset
  407.       @i_rate = []
  408.     end
  409.     #------------------------------------------------------------------------
  410.     # ● 売買不可アイテムリセット
  411.     #------------------------------------------------------------------------
  412.     def ng_reset
  413.       @ng_items = []
  414.     end
  415.     #------------------------------------------------------------------------
  416.     # ● レート: 百分率 => 浮動小数点数
  417.     #------------------------------------------------------------------------
  418.     def rate_f
  419.       (@rate / 100.0)
  420.     end
  421.     #------------------------------------------------------------------------
  422.     # ● アイテム価格計算
  423.     #------------------------------------------------------------------------
  424.     def price(type, id, price)
  425.       (price * i_rate_f(type, id)).truncate
  426.     end
  427.     #------------------------------------------------------------------------
  428.     # ● 対象アイテムレート取得
  429.     #------------------------------------------------------------------------
  430.     def i_rate_f(type, id)
  431.       it = find_i_rate(type, id)
  432.       it.nil? ? rate_f : it.rate_f
  433.     end
  434.     #------------------------------------------------------------------------
  435.     # ● 対象アイテムレート取得
  436.     #------------------------------------------------------------------------
  437.     def i_rate(type, id)
  438.       it = find_i_rate(type, id)
  439.       it.nil? ? @rate : it.rate
  440.     end
  441.     #------------------------------------------------------------------------
  442.     # ● 個別レート設定アイテム?
  443.     #------------------------------------------------------------------------
  444.     def item_rate?(type, id)
  445.       find_i_rate(type, id) != nil
  446.     end
  447.     #------------------------------------------------------------------------
  448.     # ● 個別レート設定アイテム情報取得
  449.     #------------------------------------------------------------------------
  450.     def find_i_rate(type, id)
  451.       @i_rate.find {|a| a.include?(type, id)}
  452.     end
  453.     #------------------------------------------------------------------------
  454.     # ● 個別レート設定
  455.     #------------------------------------------------------------------------
  456.     def item_rate(type, id, rate)
  457.       it = find_i_rate(type, id)
  458.       if it.nil?
  459.         @i_rate.push(Item_Rate.new(type, id, rate))
  460.       else
  461.         it.rate = rate
  462.       end
  463.     end
  464.     #------------------------------------------------------------------------
  465.     # ● 個別レート設定削除
  466.     #------------------------------------------------------------------------
  467.     def del_item_rate(type, id)
  468.       @i_rate.reject! {|item| item.include?(type, id)}
  469.     end
  470.     #------------------------------------------------------------------------
  471.     # ● 売買不可アイテム?
  472.     #------------------------------------------------------------------------
  473.     def ng_item?(type, id)
  474.       @ng_items.any? {|item| item.include?(type, id)}
  475.     end
  476.     #------------------------------------------------------------------------
  477.     # ● 売買不可アイテム追加
  478.     #------------------------------------------------------------------------
  479.     def add_ng_item(type, id)
  480.       return if ng_item?(type, id)
  481.       @ng_items.push(NG_Item.new(type, id))
  482.     end
  483.     #------------------------------------------------------------------------
  484.     # ● 売買不可アイテム解除
  485.     #------------------------------------------------------------------------
  486.     def del_ng_item(type, id)
  487.       @ng_items.reject! {|item| item.include?(type, id)}
  488.     end
  489.     #==========================================================================
  490.     # ■ NG_Item   : 売買不可アイテム情報
  491.     #==========================================================================
  492.     class NG_Item
  493.       #----------------------------------------------------------------------
  494.       # ● オブジェクト初期化
  495.       #      type : 種別(0..RPG:Item, 1..RPG::Weapon, 2..RPG::Armor)
  496.       #      id   : ID
  497.       #----------------------------------------------------------------------
  498.       def initialize(type, id)
  499.         @type = type; @id = id
  500.       end
  501.       #----------------------------------------------------------------------
  502.       # ● 売買不可アイテム?
  503.       #----------------------------------------------------------------------
  504.       def include?(type, id)
  505.         @type == type and @id == id
  506.       end
  507.     end
  508.     #==========================================================================
  509.     # ■ Item_Rate   : アイテム売買レート
  510.     #==========================================================================
  511.     class Item_Rate
  512.       #----------------------------------------------------------------------
  513.       # ● 公開インスタンス変数
  514.       #----------------------------------------------------------------------
  515.       attr_accessor :rate     # レート(%)
  516.       #----------------------------------------------------------------------
  517.       # ● オブジェクト初期化
  518.       #      type : 種別(0..RPG:Item, 1..RPG::Weapon, 2..RPG::Armor)
  519.       #      id   : ID
  520.       #      rate : レート(%)
  521.       #----------------------------------------------------------------------
  522.       def initialize(type, id, rate)
  523.         @type = type; @id = id; @rate = rate
  524.       end
  525.       #----------------------------------------------------------------------
  526.       # ● レート: 百分率 => 浮動小数点数
  527.       #----------------------------------------------------------------------
  528.       def rate_f
  529.         (@rate / 100.0)
  530.       end
  531.       #----------------------------------------------------------------------
  532.       # ● 売買レート対象アイテム?
  533.       #----------------------------------------------------------------------
  534.       def include?(type, id)
  535.         @type == type and @id == id
  536.       end
  537.     end
  538.   end
  539. end


  540. #==============================================================================
  541. # ■ Game_System
  542. #==============================================================================
  543. class Game_System
  544.   #--------------------------------------------------------------------------
  545.   # ● 公開インスタンス変数
  546.   #--------------------------------------------------------------------------
  547.   attr_reader :shop         # ショップ情報
  548.   #--------------------------------------------------------------------------
  549.   # ● オブジェクト初期化
  550.   #--------------------------------------------------------------------------
  551.   alias initialize_shop_ex initialize
  552.   def initialize
  553.     initialize_shop_ex
  554.     @shop = ExShop::ShopStatus.new
  555.   end
  556. end





  557. #==============================================================================
  558. # ■ Window_ExShopCommand
  559. #------------------------------------------------------------------------------
  560. #  ショップ画面で、購入/売却/装備を選択するウィンドウです。
  561. #==============================================================================
  562. class Window_ExShopCommand < Window_Command
  563.   #--------------------------------------------------------------------------
  564.   # ● クラス変数
  565.   #--------------------------------------------------------------------------
  566.   @@last_command_symbol = :buy
  567.   #--------------------------------------------------------------------------
  568.   # ● オブジェクト初期化
  569.   #--------------------------------------------------------------------------
  570.   def initialize(window_width, purchase_only)
  571.     @window_width = window_width
  572.     @purchase_only = purchase_only
  573.     super(0, 0)
  574.     select_last
  575.   end
  576.   #--------------------------------------------------------------------------
  577.   # ● ウィンドウ幅の取得
  578.   #--------------------------------------------------------------------------
  579.   def window_width
  580.     @window_width
  581.   end
  582.   #--------------------------------------------------------------------------
  583.   # ● 表示行数の取得
  584.   #--------------------------------------------------------------------------
  585.   def visible_line_number
  586.     4
  587.   end
  588.   #--------------------------------------------------------------------------
  589.   # ● コマンドリストの作成
  590.   #--------------------------------------------------------------------------
  591.   def make_command_list
  592.     add_command(Vocab::ShopBuy,    :buy)
  593.     add_command(Vocab::ShopSell,   :sell,   !@purchase_only)
  594.     add_command(Vocab.equip,       :equip,  $game_party.members.size > 0)
  595.     add_command(Vocab::ShopCancel, :cancel)
  596.   end
  597.   #--------------------------------------------------------------------------
  598.   # ● 決定ボタンが押されたときの処理
  599.   #--------------------------------------------------------------------------
  600.   def process_ok
  601.     @@last_command_symbol = (current_symbol == :equip ? :equip : :buy)
  602.     super
  603.   end
  604.   #--------------------------------------------------------------------------
  605.   # ● 前回の選択位置を復帰
  606.   #--------------------------------------------------------------------------
  607.   def select_last
  608.     select_symbol(@@last_command_symbol)
  609.   end
  610. end


  611. #==============================================================================
  612. # ■ Window_ExShopCategory
  613. #------------------------------------------------------------------------------
  614. #  ショップ画面で、カテゴリを選択するウィンドウです。
  615. #==============================================================================
  616. class Window_ExShopCategory < Window_HorzCommand
  617.   #--------------------------------------------------------------------------
  618.   # ● 公開インスタンス変数
  619.   #--------------------------------------------------------------------------
  620.   attr_reader   :item_window
  621.   #--------------------------------------------------------------------------
  622.   # ● オブジェクト初期化
  623.   #--------------------------------------------------------------------------
  624.   def initialize(x, y, w)
  625.     @win_width = w
  626.     super(x, y)
  627.   end
  628.   #--------------------------------------------------------------------------
  629.   # ● ウィンドウ幅の取得
  630.   #--------------------------------------------------------------------------
  631.   def window_width
  632.     @win_width
  633.   end
  634.   #--------------------------------------------------------------------------
  635.   # ● 桁数の取得
  636.   #--------------------------------------------------------------------------
  637.   def col_max
  638.     ExShop::GOLD_LD ? 10 : 5
  639.   end
  640.   #--------------------------------------------------------------------------
  641.   # ● 先頭の桁の設定
  642.   #--------------------------------------------------------------------------
  643.   def top_col=(col)
  644.     col = 0 if col < 0
  645. #    col = col_max - 1 if col > col_max - 1
  646.     self.ox = col * (item_width + spacing)
  647.   end
  648.   #--------------------------------------------------------------------------
  649.   # ● シンボルリスト
  650.   #--------------------------------------------------------------------------
  651.   def symlist
  652.     [:all, :item, :weapon, :armor, :key_item]
  653.   end
  654.   #--------------------------------------------------------------------------
  655.   # ● コマンドリストの作成
  656.   #--------------------------------------------------------------------------
  657.   def make_command_list
  658.     symlist.each {|s| add_command(ExShop.sym2icon(s), s, true, ExShop.sym2id(s))}
  659.   end
  660.   #--------------------------------------------------------------------------
  661.   # ● 項目を描画する矩形の取得
  662.   #--------------------------------------------------------------------------
  663.   def item_rect(index)
  664.     r = super(index)
  665.     r.x += (r.width - 24) / 2
  666.     r.width = 24
  667.     r
  668.   end
  669.   #--------------------------------------------------------------------------
  670.   # ● 項目の描画
  671.   #--------------------------------------------------------------------------
  672.   def draw_item(index)
  673.     r = item_rect(index)
  674.     if @list[index][:ext] == ExShop::ACTOR
  675.       draw_charicon(ExShop.sym2actor(@list[index][:symbol]), r.x, r.y, command_enabled?(index))
  676.     else
  677.       draw_icon(command_name(index), r.x, r.y, command_enabled?(index))
  678.     end
  679.   end
  680.   #--------------------------------------------------------------------------
  681.   # ● 歩行グラフィックの描画
  682.   #--------------------------------------------------------------------------
  683.   def draw_charicon(actor, x, y, enabled)
  684.     return if actor.nil?
  685.     return unless actor.character_name
  686.     bitmap = Cache.character(actor.character_name)
  687.     sign = actor.character_name[/^[\!\$]./]
  688.     if sign && sign.include?('$')
  689.       cw = bitmap.width / 3
  690.       ch = bitmap.height / 4
  691.     else
  692.       cw = bitmap.width / 12
  693.       ch = bitmap.height / 8
  694.     end
  695.     n = actor.character_index
  696.     src_rect = Rect.new((n%4*3+1)*cw + (cw - 20) / 2, (n/4*4)*ch, 20, 20)
  697.     contents.blt(x+2, y+2, bitmap, src_rect)
  698.   end
  699.   #--------------------------------------------------------------------------
  700.   # ● フレーム更新
  701.   #--------------------------------------------------------------------------
  702.   def update
  703.     super
  704.     @item_window.category = current_symbol if @item_window
  705.   end
  706.   #--------------------------------------------------------------------------
  707.   # ● アイテムウィンドウの設定
  708.   #--------------------------------------------------------------------------
  709.   def item_window=(item_window)
  710.     @item_window = item_window
  711.     update
  712.   end
  713. end

  714. #==============================================================================
  715. # ■ Window_ExShopCategory
  716. #------------------------------------------------------------------------------
  717. #  ショップ画面で、購入カテゴリを選択するウィンドウです。
  718. #==============================================================================
  719. class Window_ExShopBuyCt < Window_ExShopCategory
  720.   #--------------------------------------------------------------------------
  721.   # ● シンボルリスト
  722.   #--------------------------------------------------------------------------
  723.   def symlist
  724.     ExShop.ct_sym(ExShop::BUY_CT)
  725.   end
  726. end

  727. #==============================================================================
  728. # ■ Window_ExShopCategory
  729. #------------------------------------------------------------------------------
  730. #  ショップ画面で、売却カテゴリを選択するウィンドウです。
  731. #==============================================================================
  732. class Window_ExShopSellCt < Window_ExShopCategory
  733.   #--------------------------------------------------------------------------
  734.   # ● シンボルリスト
  735.   #--------------------------------------------------------------------------
  736.   def symlist
  737.     ExShop.ct_sym(ExShop::SELL_CT)
  738.   end
  739. end


  740. #==============================================================================
  741. # ■ Sprite_ShopTAG
  742. #==============================================================================
  743. class Sprite_ShopTAG < Sprite
  744.   W = 100
  745.   H = 14
  746.   #--------------------------------------------------------------------------
  747.   # ● オブジェクト初期化
  748.   #--------------------------------------------------------------------------
  749.   def initialize(x, y, tag)
  750.     super(Viewport.new(x, y, W, H))
  751.     self.viewport.z = 200
  752.     self.bitmap = Bitmap.new(W, H)
  753.     self.bitmap.font.size = 12
  754.     self.bitmap.font.color = system_color
  755.     self.bitmap.draw_text(0, 0, W, H, tag)
  756.   end
  757.   #--------------------------------------------------------------------------
  758.   # ● 文字色取得
  759.   #     n : 文字色番号(0..31)
  760.   #--------------------------------------------------------------------------
  761.   def text_color(n)
  762.     Cache.system("Window").get_pixel(64 + (n % 8) * 8, 96 + (n / 8) * 8)
  763.   end
  764.   #--------------------------------------------------------------------------
  765.   # ● 各種文字色の取得
  766.   #--------------------------------------------------------------------------
  767.   def normal_color;      text_color(0);   end;    # 通常
  768.   def system_color;      text_color(16);  end;    # システム
  769. end

  770. #==============================================================================
  771. # ■ Window_ShopBuy
  772. #==============================================================================
  773. class Window_ShopBuy < Window_Selectable
  774.   #--------------------------------------------------------------------------
  775.   # ● オブジェクト初期化
  776.   #--------------------------------------------------------------------------
  777.   def initialize(x, y, width, height, shop_goods)
  778.     super(x, y, width, height)
  779.     @shop_goods = shop_goods
  780.     [url=home.php?mod=space&uid=26101]@Money[/url] = 0
  781.     @category = :none
  782.     refresh
  783.     select(0)
  784.     create_sprites
  785.   end
  786.   #--------------------------------------------------------------------------
  787.   # ● 解放
  788.   #--------------------------------------------------------------------------
  789.   def dispose
  790.     super
  791.     dispose_sprites
  792.   end
  793.   #--------------------------------------------------------------------------
  794.   # ● タグスプライト生成
  795.   #--------------------------------------------------------------------------
  796.   def create_sprites
  797.     @sprite_price = Sprite_ShopTAG.new(self.x+385, self.y+2, "价格")
  798.     @sprite_num   = Sprite_ShopTAG.new(self.x+430, self.y+2, "拥有数目")
  799.   end
  800.   #--------------------------------------------------------------------------
  801.   # ● タグスプライト解放
  802.   #--------------------------------------------------------------------------
  803.   def dispose_sprites
  804.     @sprite_price.dispose
  805.     @sprite_num.dispose
  806.   end
  807.   #--------------------------------------------------------------------------
  808.   # ● ウィンドウの表示/非表示
  809.   #--------------------------------------------------------------------------
  810.   def visible=(flag)
  811.     super(flag)
  812.     @sprite_price.visible = @sprite_num.visible = flag
  813.   end
  814.   #--------------------------------------------------------------------------
  815.   # ● ウィンドウ幅の取得
  816.   #--------------------------------------------------------------------------
  817.   def window_width
  818.     width
  819.   end
  820.   #--------------------------------------------------------------------------
  821.   # ● カテゴリの設定
  822.   #--------------------------------------------------------------------------
  823.   def category=(category)
  824.     return if @category == category
  825.     @category = category
  826.     refresh
  827.     self.oy = 0
  828.   end
  829.   #--------------------------------------------------------------------------
  830.   # ● アイテムリストの作成 <再定義>
  831.   #--------------------------------------------------------------------------
  832.   def make_item_list
  833.     @data = []
  834.     @price = {}
  835.     @shop_goods.each do |goods|
  836.       case goods[0]
  837.       when 0;  item = $data_items[goods[1]]
  838.       when 1;  item = $data_weapons[goods[1]]
  839.       when 2;  item = $data_armors[goods[1]]
  840.       end
  841.       if item
  842.         next unless include?(item)
  843.         @data.push(item)
  844.         i_price = goods[2] == 0 ? item.price : goods[3]
  845.         @price[item] = ExShop.buy_price(item, i_price, goods[2] != 0)
  846.       end
  847.     end
  848.   end
  849.   #--------------------------------------------------------------------------
  850.   # ● アイテムをリストに含めるかどうか
  851.   #--------------------------------------------------------------------------
  852.   def include?(item)
  853.     item && ExShop.item_include?(@category, item)
  854.   end
  855.   #--------------------------------------------------------------------------
  856.   # ● 項目の描画
  857.   #--------------------------------------------------------------------------
  858.   def draw_item(index)
  859.     item = @data[index]
  860.     rect = item_rect(index)
  861.     draw_item_name(item, rect.x, rect.y, enable?(item))
  862.     rect.width -= 64
  863.     draw_text(rect, ExShop.not_buy(item, price(item)), 2)
  864.     rect.width += 60
  865.     draw_text(rect, $game_party.item_number(item), 2)
  866.   end
  867.   #--------------------------------------------------------------------------
  868.   # ● アイテムを許可状態で表示するかどうか
  869.   #--------------------------------------------------------------------------
  870.   def enable?(item)
  871.     item && price(item) <= @money && !$game_party.item_max?(item) && ExShop.buy_enable?(item)
  872.   end
  873.   #--------------------------------------------------------------------------
  874.   # ● ヘルプテキスト更新
  875.   #--------------------------------------------------------------------------
  876.   def update_help
  877.     @help_window.set_item(item) if @help_window
  878.     if @status_window
  879.       @status_window.item = item
  880.       if ExShop.sym2id(@category) == ExShop::ACTOR
  881.         @status_window.page_index = ExShop.sym2actor(@category).index
  882.       end
  883.     end
  884.   end
  885. end


  886. #==============================================================================
  887. # ■ Window_ShopSell
  888. #==============================================================================
  889. class Window_ShopSell < Window_ItemList
  890.   #--------------------------------------------------------------------------
  891.   # ● 公開インスタンス変数
  892.   #--------------------------------------------------------------------------
  893.   attr_reader   :status_window            # ステータスウィンドウ
  894.   #--------------------------------------------------------------------------
  895.   # ● 桁数の取得
  896.   #--------------------------------------------------------------------------
  897.   def col_max
  898.     1
  899.   end
  900.   #--------------------------------------------------------------------------
  901.   # ● アイテムをリストに含めるかどうか
  902.   #--------------------------------------------------------------------------
  903.   def include?(item)
  904.     item && ExShop.item_include?(@category, item)
  905.   end
  906.   #--------------------------------------------------------------------------
  907.   # ● アイテムを許可状態で表示するかどうか
  908.   #--------------------------------------------------------------------------
  909.   def enable?(item)
  910.     item && item.sell? && ExShop.sell_enable?(item)
  911.   end
  912.   #--------------------------------------------------------------------------
  913.   # ● ステータスウィンドウの設定
  914.   #--------------------------------------------------------------------------
  915.   def status_window=(status_window)
  916.     @status_window = status_window
  917.     call_update_help
  918.   end
  919.   #--------------------------------------------------------------------------
  920.   # ● ヘルプテキスト更新
  921.   #--------------------------------------------------------------------------
  922.   def update_help
  923.     super
  924.     @status_window.item = item if @status_window
  925.   end
  926. end



  927. #==============================================================================
  928. # ■ Window_ShopNumber
  929. #==============================================================================
  930. class Window_ShopNumber < Window_Selectable
  931.   #--------------------------------------------------------------------------
  932.   # ● 公開インスタンス変数
  933.   #--------------------------------------------------------------------------
  934.   attr_reader   :number                   # 入力された個数
  935.   #--------------------------------------------------------------------------
  936.   # ● オブジェクト初期化
  937.   #--------------------------------------------------------------------------
  938.   def initialize(x, y, width, height)
  939.     super(x, y, width, height)
  940.     @item = nil
  941.     [url=home.php?mod=space&uid=25307]@Max[/url] = 1
  942.     @price = 0
  943.     [url=home.php?mod=space&uid=27178]@Number[/url] = 1
  944.     @currency_unit = Vocab::currency_unit
  945.   end
  946. end


  947. #==============================================================================
  948. # ■ Window_ShopStatus
  949. #==============================================================================
  950. class Window_ShopStatus < Window_Base
  951.   #--------------------------------------------------------------------------
  952.   # ● オブジェクト初期化
  953.   #--------------------------------------------------------------------------
  954.   def initialize(x, y, width, height, actor)
  955.     super(x, y, width, height)
  956.     @item = nil
  957.     @page_index = actor.index
  958.     self.ox = 1 if page_max > 1
  959.     refresh
  960.   end
  961.   #--------------------------------------------------------------------------
  962.   # ● ウィンドウ内容の幅を計算
  963.   #--------------------------------------------------------------------------
  964.   def contents_width
  965.     super + (page_max > 1 ? 2 : 0)
  966.   end
  967.   #--------------------------------------------------------------------------
  968.   # ● リフレッシュ
  969.   #--------------------------------------------------------------------------
  970.   def refresh
  971.     contents.clear
  972.     actor = current_actor
  973.     enabled = @item.is_a?(RPG::EquipItem) ? actor.equippable?(@item) : false
  974.     draw_actor_face(actor, self.ox + contents_width - 96, 0, enabled)
  975.     change_color(normal_color, enabled)
  976.     draw_text(self.ox, 0, 112, line_height, actor.name)
  977.     return unless @item.is_a?(RPG::EquipItem)
  978.     draw_actor_equip_info(self.ox, line_height*2, actor, enabled)
  979.   end
  980.   #--------------------------------------------------------------------------
  981.   # ● 顔グラフィックの描画
  982.   #--------------------------------------------------------------------------
  983.   def draw_actor_face(actor, x, y, enabled = true)
  984.     bitmap = Cache.face(actor.face_name)
  985.     rect = Rect.new(actor.face_index % 4 * 96,
  986.                     actor.face_index / 4 * 96 + 16, 96, line_height*2)
  987.     contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
  988.     bitmap.dispose
  989.   end
  990.   #--------------------------------------------------------------------------
  991.   # ● アイテムの設定
  992.   #--------------------------------------------------------------------------
  993.   def item=(item)
  994.     @item = item
  995.     refresh
  996.   end
  997.   #--------------------------------------------------------------------------
  998.   # ● 表示中アクター
  999.   #--------------------------------------------------------------------------
  1000.   def current_actor
  1001.     $game_party.members[@page_index]
  1002.   end
  1003.   #--------------------------------------------------------------------------
  1004.   # ● 一度に表示できるアクターの人数
  1005.   #--------------------------------------------------------------------------
  1006.   def page_size
  1007.     return 1
  1008.   end
  1009.   #--------------------------------------------------------------------------
  1010.   # ● 最大ページ数の取得
  1011.   #--------------------------------------------------------------------------
  1012.   def page_max
  1013.     $game_party.members.size
  1014.   end
  1015.   #--------------------------------------------------------------------------
  1016.   # ● アクターの装備情報を描画
  1017.   #--------------------------------------------------------------------------
  1018.   def draw_actor_equip_info(x, y, actor, enabled)
  1019.     item1 = current_equipped_item(actor, @item.etype_id)
  1020.     prms = ExShop::GOLD_LD ? [2, 3, 4, 5] : [2, 3, 4, 5, 6, 7]
  1021.     prms.each do |prm|
  1022.       draw_actor_param_change(x, y, actor, item1, prm, enabled)
  1023.       y += line_height
  1024.     end
  1025.   end
  1026.   #--------------------------------------------------------------------------
  1027.   # ● アクターの能力値変化を描画
  1028.   #--------------------------------------------------------------------------
  1029.   def draw_actor_param_change(x, y, actor, item1, prm_id, enabled)
  1030.     rect = Rect.new(x, y, contents.width - 4 - x, line_height)
  1031.     change = @item.params[prm_id] - (item1 ? item1.params[prm_id] : 0)
  1032.     change_color(system_color, enabled)
  1033.     draw_text(rect, $data_system.terms.params[prm_id])
  1034.     if enabled
  1035.       change_color(param_change_color(change), enabled)
  1036.       draw_text(rect, sprintf("%+d", change), 2)
  1037.     else
  1038.       change_color(normal_color, enabled)
  1039.       draw_text(rect, "―", 2)
  1040.     end
  1041.   end
  1042.   #--------------------------------------------------------------------------
  1043.   # ● フレーム更新
  1044.   #--------------------------------------------------------------------------
  1045.   def update
  1046.     super
  1047.     update_page
  1048.   end
  1049.   #--------------------------------------------------------------------------
  1050.   # ● ページの更新
  1051.   #--------------------------------------------------------------------------
  1052.   def update_page
  1053.     if active && visible && page_max > 1
  1054.       next_page if Input.trigger?(:RIGHT)
  1055.       prev_page if Input.trigger?(:LEFT)
  1056.     end
  1057.   end
  1058.   #--------------------------------------------------------------------------
  1059.   # ● 指定ページへ
  1060.   #--------------------------------------------------------------------------
  1061.   def page_index=(index)
  1062.     @page_index = index
  1063.     refresh
  1064.   end
  1065.   #--------------------------------------------------------------------------
  1066.   # ● 次のページへ
  1067.   #--------------------------------------------------------------------------
  1068.   def next_page
  1069.     Sound.play_cursor
  1070.     @page_index = (@page_index + 1) % page_max
  1071.     refresh
  1072.   end
  1073.   #--------------------------------------------------------------------------
  1074.   # ● 前のページへ
  1075.   #--------------------------------------------------------------------------
  1076.   def prev_page
  1077.     Sound.play_cursor
  1078.     @page_index = (@page_index - 1 + page_max) % page_max
  1079.     refresh
  1080.   end
  1081. end


  1082. #==============================================================================
  1083. # ■ Window_ShopEquip
  1084. #==============================================================================
  1085. class Window_ShopEquip < Window_HorzCommand
  1086.   #--------------------------------------------------------------------------
  1087.   # ● オブジェクト初期化
  1088.   #--------------------------------------------------------------------------
  1089.   def initialize(x, y, width, height)
  1090.     @ww = width
  1091.     @wh = height
  1092.     super(x, y)
  1093.   end
  1094.   #--------------------------------------------------------------------------
  1095.   # ● ウィンドウ幅の取得
  1096.   #--------------------------------------------------------------------------
  1097.   def window_width
  1098.     @ww
  1099.   end
  1100.   #--------------------------------------------------------------------------
  1101.   # ● ウィンドウ高さの取得
  1102.   #--------------------------------------------------------------------------
  1103.   def window_height
  1104.     @wh
  1105.   end
  1106.   #--------------------------------------------------------------------------
  1107.   # ● 桁数の取得
  1108.   #--------------------------------------------------------------------------
  1109.   def col_max
  1110.     2
  1111.   end
  1112.   #--------------------------------------------------------------------------
  1113.   # ● ウィンドウ内容の高さを計算
  1114.   #--------------------------------------------------------------------------
  1115.   def contents_height
  1116.     height - standard_padding * 3
  1117.   end
  1118.   #--------------------------------------------------------------------------
  1119.   # ● 項目を描画する矩形の取得
  1120.   #--------------------------------------------------------------------------
  1121.   def item_rect(index)
  1122.     rect = super
  1123.     rect.y = 0
  1124.     rect.width = 80
  1125.     rect.x = 180 + index * (rect.width + spacing)
  1126.     rect
  1127.   end
  1128.   #--------------------------------------------------------------------------
  1129.   # ● コマンドリストの作成
  1130.   #--------------------------------------------------------------------------
  1131.   def make_command_list
  1132.     add_command("装备",   :equip)
  1133.     add_command("否", :cancel)
  1134.   end
  1135.   #--------------------------------------------------------------------------
  1136.   # ● リフレッシュ
  1137.   #--------------------------------------------------------------------------
  1138.   def set(actor=nil, item=nil)
  1139.     [url=home.php?mod=space&uid=95897]@actor[/url] = actor
  1140.     @item  = item
  1141.     refresh
  1142.   end
  1143.   #--------------------------------------------------------------------------
  1144.   # ● リフレッシュ
  1145.   #--------------------------------------------------------------------------
  1146.   def refresh
  1147.     super
  1148.     if !@actor.nil? and !@item.nil?
  1149.       draw_text(0, 0, 150, line_height,"是否装备?")
  1150.       draw_horz_line(line_height)
  1151.       draw_actor_equip(line_height * 2)
  1152.     end
  1153.   end
  1154.   #--------------------------------------------------------------------------
  1155.   # ● 水平線の描画
  1156.   #--------------------------------------------------------------------------
  1157.   def draw_horz_line(y)
  1158.     line_y = y + line_height / 2 - 1
  1159.     contents.fill_rect(0, line_y, contents_width, 2, line_color)
  1160.   end
  1161.   #--------------------------------------------------------------------------
  1162.   # ● 水平線の色を取得
  1163.   #--------------------------------------------------------------------------
  1164.   def line_color
  1165.     color = normal_color
  1166.     color.alpha = 48
  1167.     color
  1168.   end
  1169.   #--------------------------------------------------------------------------
  1170.   # ● アクターの装備情報を描画
  1171.   #--------------------------------------------------------------------------
  1172.   def draw_actor_equip(y)
  1173.     draw_actor_name(@actor, 4, y)
  1174.     item1 = current_equipped_item
  1175.     draw_item_name(item1, 140, y)
  1176.     draw_actor_param_changes(4, y + line_height, item1)
  1177.   end
  1178.   #--------------------------------------------------------------------------
  1179.   # ● 現在の装備品を取得
  1180.   #    二刀流など、同じ種類の装備が複数ある場合は弱い方を返す。
  1181.   #--------------------------------------------------------------------------
  1182.   def current_equipped_item
  1183.     list = []
  1184.     @actor.equip_slots.each_with_index do |slot_etype_id, i|
  1185.       list.push(@actor.equips[i]) if slot_etype_id == @item.etype_id
  1186.     end
  1187.     list.min_by {|item| item ? item.params[param_id] : 0 }
  1188.   end
  1189.   #--------------------------------------------------------------------------
  1190.   # ● 選択中のアイテムに対応する能力値 ID の取得
  1191.   #    デフォルトでは武器なら攻撃力、防具なら防御力とする。
  1192.   #--------------------------------------------------------------------------
  1193.   def param_id
  1194.     @item.is_a?(RPG::Weapon) ? 2 : 3
  1195.   end
  1196.   #--------------------------------------------------------------------------
  1197.   # ● アクターの装備情報を描画
  1198.   #--------------------------------------------------------------------------
  1199.   def draw_actor_param_changes(x, y, item)
  1200.     prms = [0, 1, 2, 3, 4, 5, 6, 7]
  1201.     rect = Rect.new(x, y, (contents_width-8) / 2, line_height)
  1202.     prms.each_index do |i|
  1203.       draw_actor_param_change(rect, item, prms[i])
  1204.       rect.y += rect.height
  1205.     end
  1206.   end
  1207.   #--------------------------------------------------------------------------
  1208.   # ● アクターの能力値変化を描画
  1209.   #--------------------------------------------------------------------------
  1210.   def draw_actor_param_change(rect, item1, prm_id)
  1211.     change = @item.params[prm_id] - (item1 ? item1.params[prm_id] : 0)
  1212.     change_color(system_color)
  1213.     draw_text(rect, $data_system.terms.params[prm_id])
  1214.     change_color(normal_color)
  1215.     r = Rect.new(rect.x + 70, rect.y, 80, rect.height)
  1216.     draw_text(r, @actor.param(prm_id), 2)
  1217.     return if change == 0
  1218.     r.x += r.width + 4
  1219.     draw_text(r, "→")
  1220.     change_color(param_change_color(change))
  1221.     draw_text(r, @actor.param(prm_id) + change , 2)
  1222.   end
  1223. end




  1224. #==============================================================================
  1225. # ■ Scene_Shop
  1226. #==============================================================================
  1227. class Scene_Shop < Scene_MenuBase
  1228.   #--------------------------------------------------------------------------
  1229.   # ● 準備
  1230.   #--------------------------------------------------------------------------
  1231.   def prepare(goods, purchase_only)
  1232.     @goods = goods
  1233.     @purchase_only = purchase_only
  1234.     @actor = $game_party.members[0]
  1235.   end
  1236.   #--------------------------------------------------------------------------
  1237.   # ● 準備
  1238.   #--------------------------------------------------------------------------
  1239.   def prepare_actor(actor)
  1240.     @actor = actor
  1241.   end
  1242.   #--------------------------------------------------------------------------
  1243.   # ● 開始処理
  1244.   #--------------------------------------------------------------------------
  1245.   def start
  1246.     super
  1247.     create_help_window
  1248.     create_gold_window
  1249.     create_command_window
  1250.     create_dummy_window
  1251.     create_status_window
  1252.     create_category_window
  1253.     create_buy_window
  1254.     create_sell_window
  1255.     create_number_window
  1256.     create_equip_window
  1257.   end
  1258.   #--------------------------------------------------------------------------
  1259.   # ● ゴールドウィンドウの作成
  1260.   #--------------------------------------------------------------------------
  1261.   def create_gold_window
  1262.     @gold_window = Window_Gold.new
  1263.     @gold_window.viewport = @viewport
  1264.     if ExShop::GOLD_LD
  1265.       @gold_window.y = Graphics.height - @gold_window.height
  1266.     else
  1267.       @gold_window.x = Graphics.width - @gold_window.width
  1268.       @gold_window.y = @help_window.height
  1269.       @gold_window.z = 200
  1270.     end
  1271.   end
  1272.   #--------------------------------------------------------------------------
  1273.   # ● コマンドウィンドウの作成
  1274.   #--------------------------------------------------------------------------
  1275.   def create_command_window
  1276.     @command_window = Window_ExShopCommand.new(@gold_window.width, @purchase_only)
  1277.     @command_window.viewport = @viewport
  1278.     @command_window.y = @help_window.height
  1279.     @command_window.set_handler(:buy,    method(:command_buy))
  1280.     @command_window.set_handler(:sell,   method(:command_sell))
  1281.     @command_window.set_handler(:equip,  method(:command_equip))
  1282.     @command_window.set_handler(:cancel, method(:return_scene))
  1283.   end
  1284.   #--------------------------------------------------------------------------
  1285.   # ● ダミーウィンドウの作成
  1286.   #--------------------------------------------------------------------------
  1287.   def create_dummy_window
  1288.     wx = @command_window.width
  1289.     wy = @help_window.height
  1290.     ww = Graphics.width  - wx
  1291.     wh = Graphics.height - wy
  1292.     @dummy_window = Window_Base.new(wx, wy, ww, wh)
  1293.     @dummy_window.viewport = @viewport
  1294.   end
  1295.   #--------------------------------------------------------------------------
  1296.   # ● 個数入力ウィンドウの作成
  1297.   #--------------------------------------------------------------------------
  1298.   def create_number_window
  1299.     wx = @buy_window.x
  1300.     wy = @buy_window.y
  1301.     ww = @buy_window.width
  1302.     wh = @buy_window.height
  1303.     @number_window = Window_ShopNumber.new(wx, wy, ww, wh)
  1304.     @number_window.viewport = @viewport
  1305.     @number_window.hide
  1306.     @number_window.set_handler(:ok,     method(:on_number_ok))
  1307.     @number_window.set_handler(:cancel, method(:on_number_cancel))
  1308.   end
  1309.   #--------------------------------------------------------------------------
  1310.   # ● ステータスウィンドウの作成
  1311.   #--------------------------------------------------------------------------
  1312.   def create_status_window
  1313.     wy = @command_window.y + @command_window.height
  1314.     ww = @command_window.width
  1315.     wh = Graphics.height - wy
  1316.     wh -= @gold_window.height if ExShop::GOLD_LD
  1317.     @status_window = Window_ShopStatus.new(0, wy, ww, wh, @actor)
  1318.     @status_window.viewport = @viewport
  1319.   end
  1320.   #--------------------------------------------------------------------------
  1321.   # ● カテゴリウィンドウの作成
  1322.   #--------------------------------------------------------------------------
  1323.   def create_category_window
  1324.     wx = @command_window.width
  1325.     wy = @help_window.height
  1326.     ww = Graphics.width - wx
  1327.     ww -= @gold_window.width unless ExShop::GOLD_LD
  1328.     @buy_ct_window = Window_ExShopBuyCt.new(wx, wy, ww)
  1329.     @buy_ct_window.viewport = @viewport
  1330.     @buy_ct_window.hide.deactivate
  1331.    
  1332.     @sell_ct_window = Window_ExShopSellCt.new(wx, wy, ww)
  1333.     @sell_ct_window.viewport = @viewport
  1334.     @sell_ct_window.hide.deactivate
  1335.   end
  1336.   #--------------------------------------------------------------------------
  1337.   # ● 購入ウィンドウの作成
  1338.   #--------------------------------------------------------------------------
  1339.   def create_buy_window
  1340.     wx = @dummy_window.x
  1341.     wy = @buy_ct_window.y + @buy_ct_window.height
  1342.     ww = Graphics.width - wx
  1343.     wh = Graphics.height - wy
  1344.     @buy_window = Window_ShopBuy.new(wx, wy, ww, wh, @goods)
  1345.     @buy_window.viewport = @viewport
  1346.     @buy_window.help_window = @help_window
  1347.     @buy_window.status_window = @status_window
  1348.     @buy_window.hide
  1349.     @buy_window.set_handler(:ok,       method(:on_buy_ok))
  1350.     @buy_window.set_handler(:cancel,   method(:on_buy_cancel))
  1351.     @buy_window.set_handler(:pagedown, method(:next_buy_ct))
  1352.     @buy_window.set_handler(:pageup,   method(:prev_buy_ct))
  1353.     @buy_ct_window.item_window = @buy_window
  1354.   end
  1355.   #--------------------------------------------------------------------------
  1356.   # ● 売却ウィンドウの作成
  1357.   #--------------------------------------------------------------------------
  1358.   def create_sell_window
  1359.     wx = @command_window.width
  1360.     wy = @sell_ct_window.y + @sell_ct_window.height
  1361.     ww = Graphics.width - wx
  1362.     wh = Graphics.height - wy
  1363.     @sell_window = Window_ShopSell.new(wx, wy, ww, wh)
  1364.     @sell_window.viewport = @viewport
  1365.     @sell_window.help_window = @help_window
  1366.     @sell_window.status_window = @status_window
  1367.     @sell_window.hide
  1368.     @sell_window.set_handler(:ok,     method(:on_sell_ok))
  1369.     @sell_window.set_handler(:cancel, method(:on_sell_cancel))
  1370.     @sell_window.set_handler(:pagedown, method(:next_sell_ct))
  1371.     @sell_window.set_handler(:pageup,   method(:prev_sell_ct))
  1372.     @sell_ct_window.item_window = @sell_window
  1373.   end
  1374.   #--------------------------------------------------------------------------
  1375.   # ● 装備ウィンドウの作成
  1376.   #--------------------------------------------------------------------------
  1377.   def create_equip_window
  1378.     wx = @number_window.x
  1379.     wy = @number_window.y
  1380.     ww = @number_window.width
  1381.     wh = @number_window.height
  1382.     @equip_window = Window_ShopEquip.new(wx, wy, ww, wh)
  1383.     @equip_window.hide.deactivate
  1384.     @equip_window.set_handler(:equip,  method(:on_equip_ok))
  1385.     @equip_window.set_handler(:cancel, method(:on_equip_cancel))
  1386.   end
  1387.   #--------------------------------------------------------------------------
  1388.   # ● コマンドウィンドウのアクティブ化
  1389.   #--------------------------------------------------------------------------
  1390.   def activate_cmd_window
  1391.     @command_window.activate
  1392.     @dummy_window.show
  1393.     @buy_ct_window.hide
  1394.     @buy_window.hide
  1395.     @sell_ct_window.hide
  1396.     @sell_window.hide
  1397.     @status_window.item = nil
  1398.     @help_window.clear
  1399.   end
  1400.   #--------------------------------------------------------------------------
  1401.   # ● 購入ウィンドウのアクティブ化
  1402.   #--------------------------------------------------------------------------
  1403.   def activate_buy_window
  1404.     @buy_ct_window.show
  1405.     @buy_window.money = money
  1406.     @buy_window.refresh
  1407.     @buy_window.show.activate
  1408.     @status_window.activate
  1409.   end
  1410.   #--------------------------------------------------------------------------
  1411.   # ● 売却ウィンドウのアクティブ化
  1412.   #--------------------------------------------------------------------------
  1413.   def activate_sell_window
  1414.     @sell_ct_window.show
  1415.     @sell_window.refresh
  1416.     @sell_window.show.activate
  1417.     @status_window.activate
  1418.   end
  1419.   #--------------------------------------------------------------------------
  1420.   # ● 装備ウィンドウのアクティブ化
  1421.   #--------------------------------------------------------------------------
  1422.   def activate_equip_window
  1423.     @equip_window.set(@status_window.current_actor, @item)
  1424.     @equip_window.show.activate
  1425.     @equip_window.select(0)
  1426.     @status_window.deactivate
  1427.   end
  1428.   #--------------------------------------------------------------------------
  1429.   # ● コマンド[購入する]
  1430.   #--------------------------------------------------------------------------
  1431.   def command_buy
  1432.     @dummy_window.hide
  1433.     activate_buy_window
  1434.     @buy_window.select(0)
  1435.   end
  1436.   #--------------------------------------------------------------------------
  1437.   # ● コマンド[売却する]
  1438.   #--------------------------------------------------------------------------
  1439.   def command_sell
  1440.     @dummy_window.hide
  1441.     activate_sell_window
  1442.     @sell_window.select(0)
  1443.   end
  1444.   #--------------------------------------------------------------------------
  1445.   # ● コマンド[装備]
  1446.   #--------------------------------------------------------------------------
  1447.   def command_equip
  1448.     SceneManager.call(Scene_ShopEquip)
  1449.     SceneManager.scene.prepare(@status_window.current_actor)
  1450.   end
  1451.   #--------------------------------------------------------------------------
  1452.   # ● 購入[決定]
  1453.   #--------------------------------------------------------------------------
  1454.   def on_buy_ok
  1455.     @item = @buy_window.item
  1456.     @buy_window.hide
  1457.     @number_window.set(@item, max_buy, buying_price, currency_unit)
  1458.     @number_window.show.activate
  1459.     @status_window.deactivate
  1460.   end
  1461.   #--------------------------------------------------------------------------
  1462.   # ● 購入[キャンセル]
  1463.   #--------------------------------------------------------------------------
  1464.   def on_buy_cancel
  1465.     activate_cmd_window
  1466.   end
  1467.   #--------------------------------------------------------------------------
  1468.   # ● 次の購入カテゴリに切り替え
  1469.   #--------------------------------------------------------------------------
  1470.   def next_buy_ct
  1471.     @buy_ct_window.cursor_right(true)
  1472.     @buy_ct_window.update_cursor
  1473.     @buy_ct_window.update
  1474.     @buy_window.activate.select(0)
  1475.     @buy_window.update_help
  1476.   end
  1477.   #--------------------------------------------------------------------------
  1478.   # ● 前の購入カテゴリに切り替え
  1479.   #--------------------------------------------------------------------------
  1480.   def prev_buy_ct
  1481.     @buy_ct_window.cursor_left(true)
  1482.     @buy_ct_window.update_cursor
  1483.     @buy_ct_window.update
  1484.     @buy_window.activate.select(0)
  1485.     @buy_window.update_help
  1486.   end
  1487.   #--------------------------------------------------------------------------
  1488.   # ● 売却[決定]
  1489.   #--------------------------------------------------------------------------
  1490.   def on_sell_ok
  1491.     @item = @sell_window.item
  1492.     @sell_window.hide
  1493.     @number_window.set(@item, max_sell, selling_price, currency_unit)
  1494.     @number_window.show.activate
  1495.     @status_window.deactivate
  1496.   end
  1497.   #--------------------------------------------------------------------------
  1498.   # ● 売却[キャンセル]
  1499.   #--------------------------------------------------------------------------
  1500.   def on_sell_cancel
  1501.     activate_cmd_window
  1502.   end
  1503.   #--------------------------------------------------------------------------
  1504.   # ● 次の売却カテゴリに切り替え
  1505.   #--------------------------------------------------------------------------
  1506.   def next_sell_ct
  1507.     @sell_ct_window.cursor_right(true)
  1508.     @sell_ct_window.update_cursor
  1509.     @sell_ct_window.update
  1510.     @sell_window.activate.select(0)
  1511.     @sell_window.update_help
  1512.   end
  1513.   #--------------------------------------------------------------------------
  1514.   # ● 前の売却カテゴリに切り替え
  1515.   #--------------------------------------------------------------------------
  1516.   def prev_sell_ct
  1517.     @sell_ct_window.cursor_left(true)
  1518.     @sell_ct_window.update_cursor
  1519.     @sell_ct_window.update
  1520.     @sell_window.activate.select(0)
  1521.     @sell_window.update_help
  1522.   end
  1523.   #--------------------------------------------------------------------------
  1524.   # ● 個数入力[決定]
  1525.   #--------------------------------------------------------------------------
  1526.   def on_number_ok
  1527.     Sound.play_shop
  1528.     case @command_window.current_symbol
  1529.     when :buy
  1530.       do_buy(@number_window.number)
  1531.     when :sell
  1532.       do_sell(@number_window.number)
  1533.     end
  1534.     end_number_input(true)
  1535.     @gold_window.refresh
  1536.     @status_window.refresh
  1537.   end
  1538.   #--------------------------------------------------------------------------
  1539.   # ● 個数入力[キャンセル]
  1540.   #--------------------------------------------------------------------------
  1541.   def on_number_cancel
  1542.     Sound.play_cancel
  1543.     end_number_input(false)
  1544.   end
  1545.   #--------------------------------------------------------------------------
  1546.   # ● 購入の実行
  1547.   #--------------------------------------------------------------------------
  1548.   def do_buy(number)
  1549.     $game_party.lose_gold(number * buying_price)
  1550.     $game_party.gain_item(@item, number)
  1551.     $game_system.shop.buy.gold += number * buying_price
  1552.   end
  1553.   #--------------------------------------------------------------------------
  1554.   # ● 売却の実行
  1555.   #--------------------------------------------------------------------------
  1556.   def do_sell(number)
  1557.     $game_party.gain_gold(number * selling_price)
  1558.     $game_party.lose_item(@item, number)
  1559.     $game_system.shop.sell.gold += number * selling_price
  1560.   end
  1561.   #--------------------------------------------------------------------------
  1562.   # ● 個数入力の終了
  1563.   #--------------------------------------------------------------------------
  1564.   def end_number_input(buy=true)
  1565.     @number_window.hide
  1566.     case @command_window.current_symbol
  1567.     when :buy
  1568.       if buy && @status_window.current_actor.equippable?(@item)
  1569.         activate_equip_window
  1570.       else
  1571.         activate_buy_window
  1572.       end
  1573.     when :sell
  1574.       activate_sell_window
  1575.     end
  1576.   end
  1577.   #--------------------------------------------------------------------------
  1578.   # ● 装備[決定]
  1579.   #--------------------------------------------------------------------------
  1580.   def on_equip_ok
  1581.     Sound.play_equip
  1582.     @equip_window.hide
  1583.     actor = @status_window.current_actor
  1584.     actor.change_equip(actor.empty_slot(@item.etype_id), @item)
  1585.     activate_buy_window
  1586.   end
  1587.   #--------------------------------------------------------------------------
  1588.   # ● 装備[キャンセル]
  1589.   #--------------------------------------------------------------------------
  1590.   def on_equip_cancel
  1591.     @equip_window.hide
  1592.     activate_buy_window
  1593.   end
  1594.   #--------------------------------------------------------------------------
  1595.   # ● 最大購入可能個数の取得
  1596.   #--------------------------------------------------------------------------
  1597.   def max_buy
  1598.     max = $game_party.max_item_number(@item) - $game_party.item_number(@item)
  1599.     buying_price == 0 ? max : [max, money / buying_price].min
  1600.   end
  1601.   #--------------------------------------------------------------------------
  1602.   # ● 売値の取得
  1603.   #--------------------------------------------------------------------------
  1604.   def selling_price
  1605.     ExShop::sell_price(@item, @item.price)
  1606.   end
  1607. end



  1608. #==============================================================================
  1609. # ■ Scene_ShopEquip
  1610. #------------------------------------------------------------------------------
  1611. # ショップ画面から呼び出す装備画面。メニューのものとは処理を分離。
  1612. # ($game_party.menu_actorは変化させない)
  1613. #==============================================================================
  1614. class Scene_ShopEquip < Scene_Equip
  1615.   #--------------------------------------------------------------------------
  1616.   # ● 準備
  1617.   #--------------------------------------------------------------------------
  1618.   def prepare(actor)
  1619.     @start_actor = actor
  1620.   end
  1621.   #--------------------------------------------------------------------------
  1622.   # ● 開始処理
  1623.   #--------------------------------------------------------------------------
  1624.   def start
  1625.     tmp_actor = $game_party.menu_actor
  1626.     $game_party.menu_actor = @start_actor
  1627.     super
  1628.     $game_party.menu_actor = tmp_actor
  1629.   end
  1630.   #--------------------------------------------------------------------------
  1631.   # ● 次のアクターに切り替え
  1632.   #--------------------------------------------------------------------------
  1633.   def next_actor
  1634.     tmp_actor = $game_party.menu_actor
  1635.     @actor = $game_party.menu_actor_next
  1636.     $game_party.menu_actor = tmp_actor
  1637.     on_actor_change
  1638.   end
  1639.   #--------------------------------------------------------------------------
  1640.   # ● 前のアクターに切り替え
  1641.   #--------------------------------------------------------------------------
  1642.   def prev_actor
  1643.     tmp_actor = $game_party.menu_actor
  1644.     @actor = $game_party.menu_actor_prev
  1645.     $game_party.menu_actor = tmp_actor
  1646.     on_actor_change
  1647.   end
  1648.   #--------------------------------------------------------------------------
  1649.   # ● 呼び出し元のシーンへ戻る
  1650.   #--------------------------------------------------------------------------
  1651.   def return_scene
  1652.     super
  1653.     SceneManager.scene.prepare_actor(@actor)
  1654.   end
  1655. end

复制代码
如果麻烦的话  帮我把这个商店中查看装备这个功能去掉吧!如截图!!!麻烦你了。。
RKS7I)7${SP6%{PB{@%3I46.jpg
你的意思就是要打架咯?
回复

使用道具 举报

梦石
0
星屑
199
在线时间
248 小时
注册时间
2012-4-29
回帖
313
 楼主| 发表于 2013-11-21 12:14:31 | 显示全部楼层
绿坝 发表于 2013-11-21 12:08
一万多行的脚本,我连打字都开始卡了。

的确好卡   不好解决的话  我会速度关贴的!
你的意思就是要打架咯?
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2013-11-21 12:51:56 | 显示全部楼层
貼脚本上来也没用,論壇會加止url的東西
根本測試不了
回复

使用道具 举报

梦石
0
星屑
3348
在线时间
1120 小时
注册时间
2009-4-15
回帖
761
发表于 2013-11-21 13:41:51 | 显示全部楼层
给你个治标不治本的方法:第一个脚本,报错那一行(6793行),改成这样试试:
@actor ? @actor.equip_slots.size.to_i : 0
不行我也没办法了。
回复

使用道具 举报

梦石
0
星屑
199
在线时间
248 小时
注册时间
2012-4-29
回帖
313
 楼主| 发表于 2013-11-21 21:21:10 | 显示全部楼层
tan12345 发表于 2013-11-21 13:41
给你个治标不治本的方法:第一个脚本,报错那一行(6793行),改成这样试试:
@actor ? @actor.equip_slots ...

好吧 谢谢  不过还是报错   话说好卡   这贴!   我关贴先!
你的意思就是要打架咯?
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部