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

Project1

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

[已经解决] 关于隐藏单一角色数值

[复制链接]

Lv2.观梦者

梦石
0
星屑
282
在线时间
61 小时
注册时间
2014-2-9
帖子
14
跳转到指定楼层
1
发表于 2021-8-12 20:17:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
100星屑
我想把某一位角色的等级跟HPMP隐藏起来,
但同时其他角色还是有显示的。
请问这要怎么做呢?

Lv3.寻梦者

梦石
0
星屑
1122
在线时间
26 小时
注册时间
2021-2-19
帖子
30
2
发表于 2021-8-12 20:17:59 | 只看该作者
t0004980 发表于 2021-8-13 02:00
我有放在下面了,不然我直接工程给你看?
谢谢,不好意思麻烦了。
链接: https://pan.baidu.com/s/1ID09Z ...
  1. YAMI_NEED2HIDE = [1,2] #角色id
  2. YAMI_REPLACE_TEXT = "未知"
  3. class CAO::CM::Canvas
  4. alias yami_draw_actor_level draw_actor_level
  5. alias yami_draw_actor_level_g draw_actor_level_g
  6. alias yami_draw_actor_hp draw_actor_hp
  7. alias yami_draw_actor_mp draw_actor_mp
  8.   def draw_actor_level(actor, x, y, width = 64)
  9.     if YAMI_NEED2HIDE.include?(actor.actor.id)
  10.       draw_text(x, y, text_size(YAMI_REPLACE_TEXT).width * 2, line_height, YAMI_REPLACE_TEXT)
  11.       return
  12.     end
  13.     yami_draw_actor_level(actor, x, y,width)
  14.   end
  15.   def draw_actor_level_g(actor, x, y, width = 64)
  16.     if YAMI_NEED2HIDE.include?(actor.actor.id)
  17.       draw_text(x, y, text_size(YAMI_REPLACE_TEXT).width * 2, line_height, YAMI_REPLACE_TEXT)
  18.       return
  19.     end
  20.     yami_draw_actor_level_g(actor, x, y,width)
  21.   end  
  22.   def draw_actor_hp(actor, x, y, width = 124)
  23.     if YAMI_NEED2HIDE.include?(actor.actor.id)
  24.       draw_text(x, y, text_size(YAMI_REPLACE_TEXT).width * 2, line_height, YAMI_REPLACE_TEXT)
  25.       return
  26.     end
  27.     yami_draw_actor_hp(actor, x, y, width)
  28.   end
  29.   def draw_actor_mp(actor, x, y, width = 124)
  30.     if YAMI_NEED2HIDE.include?(actor.actor.id)
  31.       draw_text(x, y, text_size(YAMI_REPLACE_TEXT).width * 2, line_height, YAMI_REPLACE_TEXT)
  32.       return
  33.     end   
  34.     yami_draw_actor_mp(actor, x, y, width)
  35.   end
  36. end
复制代码

评分

参与人数 1+1 收起 理由
t0004980 + 1 完全解决我的问题。

查看全部评分

回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1122
在线时间
26 小时
注册时间
2021-2-19
帖子
30
3
发表于 2021-8-12 21:15:42 | 只看该作者
  1. YAMI_NEED2HIDE = [1,2] #角色id
  2. YAMI_REPLACE_TEXT = "未知"
  3. class Window_Base
  4. alias yami_draw_actor_level draw_actor_level
  5. alias yami_draw_actor_hp draw_actor_hp
  6. alias yami_draw_actor_mp draw_actor_mp
  7.   def draw_actor_level(actor, x, y)
  8.     if YAMI_NEED2HIDE.include?(actor.actor.id)
  9.       draw_text(x, y, text_size(YAMI_REPLACE_TEXT).width * 2, line_height, YAMI_REPLACE_TEXT)
  10.       return
  11.     end
  12.     yami_draw_actor_level(actor, x, y)
  13.   end
  14.   def draw_actor_hp(actor, x, y, width = 124)
  15.     if YAMI_NEED2HIDE.include?(actor.actor.id)
  16.       draw_text(x, y, text_size(YAMI_REPLACE_TEXT).width * 2, line_height, YAMI_REPLACE_TEXT)
  17.       return
  18.     end
  19.     yami_draw_actor_hp(actor, x, y, width)
  20.   end
  21.   def draw_actor_mp(actor, x, y, width = 124)
  22.     if YAMI_NEED2HIDE.include?(actor.actor.id)
  23.       draw_text(x, y, text_size(YAMI_REPLACE_TEXT).width * 2, line_height, YAMI_REPLACE_TEXT)
  24.       return
  25.     end   
  26.     yami_draw_actor_mp(actor, x, y, width)
  27.   end
  28. end
复制代码
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
282
在线时间
61 小时
注册时间
2014-2-9
帖子
14
4
 楼主| 发表于 2021-8-12 22:32:20 | 只看该作者
本帖最后由 t0004980 于 2021-8-12 22:34 编辑


我还想请问一下,因为我有使用别的菜单脚本
所以会出现菜单主画面没变,但是状态却显示改变了。


  1. #******************************************************************************
  2. #
  3. #    * ステータスウィンドウ
  4. #
  5. #  --------------------------------------------------------------------------
  6. #    バージョン : 1.1.0
  7. #    対      応 : RPGツクールVX Ace : RGSS3
  8. #    制  作  者 : CACAO
  9. #    配  布  元 : http://cacaosoft.web.fc2.com/
  10. #  --------------------------------------------------------------------------
  11. #   == 概    要 ==
  12. #
  13. #    : デフォルトっぽいステータスです。
  14. #
  15. #  --------------------------------------------------------------------------
  16. #   == 注意事項 ==
  17. #
  18. #    ※ このスクリプトの動作には、Custom Menu Base が必要です。
  19. #    ※ 横1列のみの場合は左右に、それ以外は上下のみスクロールします。
  20. #
  21. #
  22. #******************************************************************************


  23. #==============================================================================
  24. # ◆ 設定項目
  25. #==============================================================================
  26. module CAO::CM::Status
  27.   #--------------------------------------------------------------------------
  28.   # ◇ ウィンドウの位置・サイズ
  29.   #--------------------------------------------------------------------------
  30.   WINDOW_X = 0    # x座標
  31.   WINDOW_Y = 108  # y座標
  32.   WINDOW_W = 544  # 横幅
  33.   WINDOW_H = 236  # 縦幅
  34.   #--------------------------------------------------------------------------
  35.   # ◇ 1アクターのサイズ
  36.   #--------------------------------------------------------------------------
  37.   ITEM_W = 130
  38.   ITEM_H = 212
  39.   #--------------------------------------------------------------------------
  40.   # ◇ 項目を横に並べる数
  41.   #--------------------------------------------------------------------------
  42.   COLUMN_MAX = 4
  43.   #--------------------------------------------------------------------------
  44.   # ◇ 表示項目の設定
  45.   #--------------------------------------------------------------------------
  46.   ITEM_PARAMS = []
  47.   ITEM_PARAMS << [:face, 15,  28]
  48.   ITEM_PARAMS << [:fill, 15,  28, 96, 96, 128, '!actor.battle_member?']
  49.   ITEM_PARAMS << [:name,  3,   0]
  50.   ITEM_PARAMS << [:state, 3, 0, 160, 1]
  51.   ITEM_PARAMS << [:lv_g,  3, 128, 124]
  52.   ITEM_PARAMS << [:hp,    3, 148]
  53.   ITEM_PARAMS << [:mp,    3, 170]
  54.   ITEM_PARAMS << [:tp,    3, 190]
  55.   #--------------------------------------------------------------------------
  56.   # ◇ 戦闘メンバーのみ表示
  57.   #--------------------------------------------------------------------------
  58.   ::CAO::CM::BATTLER_ONLY = false
  59.   #--------------------------------------------------------------------------
  60.   # ◇ ウィンドウの可視状態
  61.   #--------------------------------------------------------------------------
  62.   VISIBLE_BACKWINDOW = true
  63. end


  64. #/////////////////////////////////////////////////////////////////////////////#
  65. #                                                                             #
  66. #                下記のスクリプトを変更する必要はありません。                 #
  67. #                                                                             #
  68. #/////////////////////////////////////////////////////////////////////////////#


  69. class Window_MenuStatus
  70.   include CAO::CM::Status
  71.   #--------------------------------------------------------------------------
  72.   # ○ オブジェクト初期化
  73.   #--------------------------------------------------------------------------
  74.   def initialize(x, y)
  75.     super(WINDOW_X, WINDOW_Y, window_width, window_height)
  76.     self.opacity = VISIBLE_BACKWINDOW ? 255 : 0
  77.     @canvas = CAO::CM::Canvas.new(self)
  78.     @pending_index = -1
  79.     refresh
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ○ 横に項目が並ぶときの空白の幅を取得
  83.   #--------------------------------------------------------------------------
  84.   def spacing
  85.     return 0
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ○ ウィンドウ幅の取得
  89.   #--------------------------------------------------------------------------
  90.   def window_width
  91.     WINDOW_W
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ○ ウィンドウ高さの取得
  95.   #--------------------------------------------------------------------------
  96.   def window_height
  97.     WINDOW_H
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ○ ウィンドウ内容の幅を計算
  101.   #--------------------------------------------------------------------------
  102.   def contents_width
  103.     (item_width + spacing) * col_max - spacing
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● 項目数の取得
  107.   #--------------------------------------------------------------------------
  108.   def item_max
  109.     $game_party.members.size
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● 桁数の取得
  113.   #--------------------------------------------------------------------------
  114.   def col_max
  115.     return COLUMN_MAX
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ○ 項目の幅を取得
  119.   #--------------------------------------------------------------------------
  120.   def item_width
  121.     ITEM_W
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # ○ 項目の高さを取得
  125.   #--------------------------------------------------------------------------
  126.   def item_height
  127.     ITEM_H
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ● 項目の描画
  131.   #--------------------------------------------------------------------------
  132.   def draw_item(index)
  133.     draw_item_background(index)
  134.     actor = $game_party.members[index]
  135.     rect = item_rect(index)
  136.     @canvas.draw_actor_items(actor, rect.x, rect.y, ITEM_PARAMS)
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● カーソルを下に移動
  140.   #--------------------------------------------------------------------------
  141.   def cursor_down(wrap = false)
  142.     if index < item_max - col_max || (wrap && col_max == 1)
  143.       select((index + col_max) % item_max)
  144.     elsif col_max != 1 && index < (item_max.to_f/col_max).ceil*col_max-col_max
  145.       select(item_max - 1)
  146.     end
  147.   end
  148. end

  149. class Scene_Menu
  150.   #--------------------------------------------------------------------------
  151.   # ● ステータスウィンドウの作成
  152.   #--------------------------------------------------------------------------
  153.   def create_status_window
  154.     @status_window = Window_MenuStatus.new(0, 0)
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● ステータスウィンドウの更新
  158.   #--------------------------------------------------------------------------
  159.   def update_status_window
  160.     @status_window.unselect unless @status_window.active
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ○ コマンド実行後の処理
  164.   #--------------------------------------------------------------------------
  165.   alias _cao_cm_status_post_terminate post_terminate
  166.   def post_terminate
  167.     _cao_cm_status_post_terminate
  168.     if current_console.current_data.refresh_items.include?(:status)
  169.       @status_window.refresh
  170.     end
  171.   end
  172. end

  173. class Game_Party < Game_Unit
  174.   #--------------------------------------------------------------------------
  175.   # ● 公開インスタンス変数
  176.   #--------------------------------------------------------------------------
  177.   attr_accessor :in_menu                  # メニュー中フラグ
  178.   #--------------------------------------------------------------------------
  179.   # ●
  180.   #--------------------------------------------------------------------------
  181.   def in_menu
  182.     return true if SceneManager.scene_is?(Scene_Menu)
  183.     return SceneManager.instance_variable_get(:@stack).any? do |obj|
  184.       obj.is_a?(Scene_Menu)
  185.     end
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ○ メンバーの取得
  189.   #--------------------------------------------------------------------------
  190.   def members
  191.     return battle_members if in_battle
  192.     return battle_members if CAO::CM::BATTLER_ONLY && in_menu
  193.     return all_members
  194.   end
  195. end

  196. class Scene_ItemBase < Scene_MenuBase
  197.   #--------------------------------------------------------------------------
  198.   # ○ サブウィンドウの表示
  199.   #--------------------------------------------------------------------------
  200.   def show_sub_window(window)
  201.     window.x = (Graphics.width - window.width) / 2
  202.     window.y = (Graphics.height - window.height) / 2
  203.     window.z = @viewport.z# + 1
  204.     @last_viewport_color = @viewport.color.dup
  205.     @viewport.color.set(16, 16, 16, 128)
  206.     window.show.activate
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ○ サブウィンドウの非表示
  210.   #--------------------------------------------------------------------------
  211.   def hide_sub_window(window)
  212.     @viewport.color.set(@last_viewport_color) if @last_viewport_color
  213.     window.hide.deactivate
  214.     activate_item_window
  215.   end
  216. end
复制代码
  1. #******************************************************************************
  2. #
  3. #    * Custom Menu Base
  4. #
  5. #  --------------------------------------------------------------------------
  6. #    バージョン : 1.1.0
  7. #    対      応 : RPGツクールVX Ace : RGSS3
  8. #    制  作  者 : CACAO
  9. #    配  布  元 : [url=http://cacaosoft.web.fc2.com/]http://cacaosoft.web.fc2.com/[/url]
  10. #  --------------------------------------------------------------------------
  11. #   == 概    要 ==
  12. #
  13. #    : カスタムメニューのベーススクリプトです。
  14. #
  15. #  --------------------------------------------------------------------------
  16. #   == 注意事項 ==
  17. #
  18. #    ※ このスクリプトは、なるべく下のほうのに導入してください。
  19. #    ※ カスタムメニュー関連のスクリプトより上に導入してください。
  20. #
  21. #
  22. #******************************************************************************


  23. #==============================================================================
  24. # ◆ ユーザー設定
  25. #==============================================================================
  26. module CAO
  27. module CM
  28.   #--------------------------------------------------------------------------
  29.   # ◇ メニュー項目の設定
  30.   #--------------------------------------------------------------------------
  31.   COMMAND_ITEMS = {}
  32.   COMMAND_ITEMS[:item] = {
  33.     :name     => "物品",
  34.     :command  => Scene_Item,
  35.     :help     => '使用物品。'
  36.   }
  37.   COMMAND_ITEMS[:skill] = {
  38.     :name     => "技能",
  39.     :personal => Scene_Skill,
  40.     :help     => '使用技能。'
  41.   }
  42.   COMMAND_ITEMS[:equip] = {
  43.     :name     => "装备",
  44.     :personal => Scene_Equip,
  45.     :help     => '变更装备。'
  46.   }
  47.   COMMAND_ITEMS[:status] = {
  48.     :name     => "状态",
  49.     :personal => Scene_Status,
  50.     :help     => '确认人物状态。'
  51.   }
  52.   COMMAND_ITEMS[:formation] = {
  53.     :name     => "编队",
  54.     :command  => :command_formation,
  55.     :enable   => :formation_enabled,
  56.     :help     => '角色更换。'
  57.   }
  58.   COMMAND_ITEMS[:game_end] = {
  59.     :name     => "终了",
  60.     :command  => Scene_End,
  61.     :help     => '结束游戏。'
  62.   }  
  63.   COMMAND_ITEMS[:save] = {
  64.     :name     => "存檔",
  65.     :command  => Scene_Save,
  66.     :enable   => "!$game_system.save_disabled",
  67.     :help     => '储存进度。'
  68.   }
  69.   COMMAND_ITEMS[:load] = {
  70.     :name     => "读取",
  71.     :command  => Scene_Load,
  72.     :enable   => "DataManager.save_file_exists?",
  73.     :help     => '读取进度。'
  74.   }
  75.   #--------------------------------------------------------------------------
  76.   # ◇ 表示項目の設定
  77.   #--------------------------------------------------------------------------
  78.   COMMANDS = {}
  79.   COMMANDS[:main] =   # 必須
  80.     [:item, :skill, :equip, :status, :formation,:save,:load,:sample,:file, :game_end]   
  81.   COMMANDS[:sub_file] = [:save, :load]
  82.   COMMANDS[:sub_sample] = [:common, :levelup, :switch, :variable]

  83.   #--------------------------------------------------------------------------
  84.   # ◇ コマンドウィンドウの文字サイズ
  85.   #--------------------------------------------------------------------------
  86.   COMMAND_SIZE = 0
  87.   #--------------------------------------------------------------------------
  88.   # ◇ コマンドウィンドウの一行の縦幅
  89.   #--------------------------------------------------------------------------
  90.   #     0 で文字サイズを基準に自動調整
  91.   #--------------------------------------------------------------------------
  92.   COMMAND_HEIGHT = 0
  93.   #--------------------------------------------------------------------------
  94.   # ◇ 残りHPで顔グラを変化させる
  95.   #--------------------------------------------------------------------------
  96.   EXPRESSIVE_RATE = [0]
  97.   #--------------------------------------------------------------------------
  98.   # ◇ 立ち絵のファイル名
  99.   #--------------------------------------------------------------------------
  100.   PORTRAIT_NAME = "MActor%d"

  101.   #--------------------------------------------------------------------------
  102.   # ◇ コモンイベントの自動実行
  103.   #--------------------------------------------------------------------------
  104.   START_COMMON_ID     = 0     # 開始前処理
  105.   TERMINATE_COMMON_ID = 0     # 終了前処理
  106.   
  107.   #--------------------------------------------------------------------------
  108.   # ◇ 背景画像
  109.   #--------------------------------------------------------------------------
  110.   # 前景画像(最前面に表示されます。)
  111.   FILE_FOREGROUND = nil
  112.   # 背景画像(デフォルトのマップ画像と入れ替えます。)
  113.   FILE_BACKGROUND = nil
  114.   # アニメ画像 ["ファイル名", vx, vy, 最背面?]
  115.   BACKIMAGE = nil
  116.   
  117.   #--------------------------------------------------------------------------
  118.   # ◇ システム文字の有無
  119.   #--------------------------------------------------------------------------
  120.   VISIBLE_SYSTEM = true
  121.   #--------------------------------------------------------------------------
  122.   # ◇ 用語設定
  123.   #--------------------------------------------------------------------------
  124.   VOCABS = {}
  125.   VOCABS[:gold]  = "所持金钱"
  126.   VOCABS[:exp]   = "経験値"
  127.   VOCABS[:exp_a] = "LvUP"
  128.   
  129. end # module CM
  130. end # module CAO
  131. #/////////////////////////////////////////////////////////////////////////////#
  132. #                                                                             #
  133. #                下記のスクリプトを変更する必要はありません。                 #
  134. #                                                                             #
  135. #/////////////////////////////////////////////////////////////////////////////#


  136. class CustomizeError < Exception; end

  137. class Game_MenuItem
  138.   #--------------------------------------------------------------------------
  139.   # ●
  140.   #--------------------------------------------------------------------------
  141.   attr_reader :symbol                     #
  142.   attr_reader :sub                        #
  143.   attr_reader :enable                     #
  144.   attr_reader :refresh_items              #
  145.   #--------------------------------------------------------------------------
  146.   # ●
  147.   #--------------------------------------------------------------------------
  148.   def initialize(symbol, params = {})
  149.     @symbol = symbol                          # 項目の識別子
  150.     @name   = params[:name]   || ""           # 項目名
  151.     @help   = params[:help]   || ""           # ヘルプ
  152.     @icon   = params[:icon]                   # アイコン番号
  153.     @enable = params[:enable] || true         # 選択の可否
  154.     @hide   = params[:hide]   || false        # 非表示の有無
  155.    
  156.     @scene    = params[:scene]                # 項目処理 シーン遷移
  157.     @command  = params[:command]              # 項目処理 コマンド実行
  158.     @personal = params[:personal]             # 項目処理 アクター選択
  159.     @sub      = params[:sub]                  # 項目処理 サブコマンド
  160.     case [@scene, @command, @personal, @sub].count {|o| o }
  161.     when 0; raise CustomizeError, "項目処理が設定されていません。"
  162.     when 1  # Do Nothing
  163.     else;   raise CustomizeError, "複数の項目処理が設定されています。"
  164.     end
  165.    
  166.     @refresh_items = params[:refresh] || []     # 項目処理後に再描画
  167.     @auto_close = params[:auto_close] || false  # アクター選択時コマンドを閉じる
  168.     @continue = params[:continue] || false      # アクター選択継続
  169.     @sw_sub = params[:sw_sub] || false          # サブ表示時にメインを非表示
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ●
  173.   #--------------------------------------------------------------------------
  174.   def _convert_value(obj)
  175.     if obj.is_a?(Array)
  176.       case obj[0]
  177.       when String
  178.         result = eval(obj[0], ::TOPLEVEL_BINDING)
  179.         return result if obj.size == 1
  180.         return obj[result ? 1 : 2] if result == !!result
  181.         return obj[result + 1]
  182.       when Integer
  183.         if obj.size == 3
  184.           return obj[$game_switches[obj[0]] ? 1 : 2]
  185.         else
  186.           return obj[$game_variables[obj[0]]]
  187.         end
  188.       else
  189.         raise "must not happen"
  190.       end
  191.     else
  192.       return obj
  193.     end
  194.   end
  195.   private :_convert_value
  196.   #--------------------------------------------------------------------------
  197.   # ●
  198.   #--------------------------------------------------------------------------
  199.   def name
  200.     return _convert_value(@name)
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ●
  204.   #--------------------------------------------------------------------------
  205.   def help
  206.     return _convert_value(@help)
  207.   end
  208.   alias description help
  209.   #--------------------------------------------------------------------------
  210.   # ●
  211.   #--------------------------------------------------------------------------
  212.   def icon_index
  213.     return _convert_value(@icon)
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ●
  217.   #--------------------------------------------------------------------------
  218.   def handler
  219.     return :command_ok       if @scene
  220.     return @command          if @command  && @command.is_a?(Symbol)
  221.     return :command_ok       if @command
  222.     return @personal         if @personal && @personal.is_a?(Symbol)
  223.     return :command_personal if @personal
  224.     return :command_sub      if @sub
  225.     raise "must not happen"
  226.   end
  227.   #--------------------------------------------------------------------------
  228.   # ●
  229.   #--------------------------------------------------------------------------
  230.   def exec
  231.     #
  232.     # ここでエラーが発生した場合、項目の設定が間違っている可能性があります。
  233.     # 項目処理の設定を確認してください。
  234.     #
  235.     # エラーメッセージを確認の上、設定を修正してください。
  236.     # つづり間違いや文法が間違っている可能性があります。
  237.     #
  238.     if @scene
  239.       case @scene
  240.       when Class
  241.         return SceneManager.call(@scene.untaint)
  242.       when Symbol
  243.         return SceneManager.call(Kernel.const_get(@scene).untaint)
  244.       when String
  245.         return SceneManager.call(eval(@scene, ::TOPLEVEL_BINDING).untaint)
  246.       end
  247.     else
  248.       command = @command || @personal
  249.       case command
  250.       when Class
  251.         return SceneManager.call(command.untaint)
  252.       when String
  253.         return SceneManager.scene.instance_eval(command)
  254.       end
  255.     end
  256.     raise "must not happen"
  257.   end
  258.   #--------------------------------------------------------------------------
  259.   # ●
  260.   #--------------------------------------------------------------------------
  261.   def hide?
  262.     #
  263.     # ここでエラーが発生した場合、項目の設定が間違っている可能性があります。
  264.     # オプションの :hide の設定を確認してください。
  265.     #
  266.     case @hide
  267.     when true, false
  268.       return @hide
  269.     when String
  270.       return eval(@hide, ::TOPLEVEL_BINDING)
  271.     else
  272.       raise "must not happen"
  273.     end
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ●
  277.   #--------------------------------------------------------------------------
  278.   def personal?
  279.     return @personal && true
  280.   end
  281.   #--------------------------------------------------------------------------
  282.   # ●
  283.   #--------------------------------------------------------------------------
  284.   def refresh?
  285.     return !@refresh_items.empty?
  286.   end
  287.   #--------------------------------------------------------------------------
  288.   # ●
  289.   #--------------------------------------------------------------------------
  290.   def switch?
  291.     return @sw_sub
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # ●
  295.   #--------------------------------------------------------------------------
  296.   def auto_close?
  297.     return @auto_close
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ●
  301.   #--------------------------------------------------------------------------
  302.   def continue?
  303.     return @continue
  304.   end
  305. end

  306. class Scene_Menu::Game_Interpreter < Game_Interpreter
  307.   #--------------------------------------------------------------------------
  308.   # ●
  309.   #--------------------------------------------------------------------------
  310.   undef command_101         # 文章の表示
  311.   undef command_102         # 選択肢の表示
  312.   undef command_103         # 数値入力の処理
  313.   undef command_104         # アイテム選択の処理
  314.   undef command_105         # スクロール文章の表示
  315.   undef command_201         # 場所移動
  316.   undef command_204         # マップのスクロール
  317.   undef command_205         # 移動ルートの設定
  318.   undef command_217         # 隊列メンバーの集合
  319.   undef command_261         # ムービーの再生
  320.   undef command_301         # バトルの処理
  321.   undef command_351         # メニュー画面を開く
  322. end

  323. class Scene_Menu
  324.   #--------------------------------------------------------------------------
  325.   # ○ 開始後処理
  326.   #--------------------------------------------------------------------------
  327.   def post_start
  328.     super
  329.     if CAO::CM::START_COMMON_ID > 0
  330.       start_common_event(CAO::CM::START_COMMON_ID)
  331.     end
  332.   end
  333.   #--------------------------------------------------------------------------
  334.   # ○ 開始処理
  335.   #--------------------------------------------------------------------------
  336.   def start
  337.     super
  338.     @caller = []
  339.     create_command_window
  340.     create_status_window
  341.     create_option_window
  342.   end
  343.   #--------------------------------------------------------------------------
  344.   # ○ フレーム更新
  345.   #--------------------------------------------------------------------------
  346.   def update
  347.     super
  348.     update_backimage
  349.     update_command_window
  350.     update_status_window
  351.     update_option_window
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # ○ 終了前処理
  355.   #--------------------------------------------------------------------------
  356.   def pre_terminate
  357.     super
  358.     if CAO::CM::TERMINATE_COMMON_ID > 0
  359.       start_common_event(CAO::CM::TERMINATE_COMMON_ID)
  360.     end
  361.   end
  362.   #--------------------------------------------------------------------------
  363.   # ○ 終了処理
  364.   #--------------------------------------------------------------------------
  365.   def terminate
  366.     super
  367.     dispose_command_window
  368.     dispose_status_window
  369.     dispose_option_window
  370.   end
  371.   #--------------------------------------------------------------------------
  372.   # ○ 背景の作成
  373.   #--------------------------------------------------------------------------
  374.   def create_background
  375.     if CAO::CM::FILE_BACKGROUND
  376.       @background_sprite = Sprite.new
  377.       @background_sprite.bitmap = Cache.system(CAO::CM::FILE_BACKGROUND)
  378.     else
  379.       super
  380.     end
  381.     if CAO::CM::BACKIMAGE
  382.       @backimage_sprite = Plane.new
  383.       @backimage_sprite.bitmap = Cache.system(CAO::CM::BACKIMAGE[0])
  384.       @backimage_sprite.z = -1 if CAO::CM::BACKIMAGE[3]
  385.     end
  386.     if CAO::CM::FILE_FOREGROUND
  387.       @foreground_sprite = Sprite.new
  388.       @foreground_sprite.z = 1000
  389.       @foreground_sprite.bitmap = Cache.system(CAO::CM::FILE_FOREGROUND)
  390.     end
  391.   end
  392.   #--------------------------------------------------------------------------
  393.   # ○ 背景の解放
  394.   #--------------------------------------------------------------------------
  395.   def dispose_background
  396.     super
  397.     @backimage_sprite.dispose if @backimage_sprite
  398.     @foreground_sprite.dispose if @foreground_sprite
  399.   end
  400.   #--------------------------------------------------------------------------
  401.   # ●
  402.   #--------------------------------------------------------------------------
  403.   def update_backimage
  404.     return unless @backimage_sprite
  405.     return unless CAO::CM::BACKIMAGE[1] && CAO::CM::BACKIMAGE[2]
  406.     @backimage_sprite.ox = (@backimage_sprite.ox - CAO::CM::BACKIMAGE[1]) % 999
  407.     @backimage_sprite.oy = (@backimage_sprite.oy - CAO::CM::BACKIMAGE[2]) % 999
  408.   end
  409.   #--------------------------------------------------------------------------
  410.   # ● コマンドウィンドウの作成
  411.   #--------------------------------------------------------------------------
  412.   def create_command_window
  413.     # Do Nothing
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # ● ステータスウィンドウの作成
  417.   #--------------------------------------------------------------------------
  418.   def create_status_window
  419.     # Do Nothing
  420.   end
  421.   #--------------------------------------------------------------------------
  422.   # ● オプションウィンドウの作成
  423.   #--------------------------------------------------------------------------
  424.   def create_option_window
  425.     # Do Nothing
  426.   end
  427.   #--------------------------------------------------------------------------
  428.   # ● コマンドウィンドウの更新
  429.   #--------------------------------------------------------------------------
  430.   def update_command_window
  431.     # Do Nothing
  432.   end
  433.   #--------------------------------------------------------------------------
  434.   # ● ステータスウィンドウの更新
  435.   #--------------------------------------------------------------------------
  436.   def update_status_window
  437.     # Do Nothing
  438.   end
  439.   #--------------------------------------------------------------------------
  440.   # ● オプションウィンドウの更新
  441.   #--------------------------------------------------------------------------
  442.   def update_option_window
  443.     # Do Nothing
  444.   end
  445.   #--------------------------------------------------------------------------
  446.   # ● コマンドウィンドウの解放
  447.   #--------------------------------------------------------------------------
  448.   def dispose_command_window
  449.     # Do Nothing
  450.   end
  451.   #--------------------------------------------------------------------------
  452.   # ● ステータスウィンドウの解放
  453.   #--------------------------------------------------------------------------
  454.   def dispose_status_window
  455.     # Do Nothing
  456.   end
  457.   #--------------------------------------------------------------------------
  458.   # ● オプションウィンドウの解放
  459.   #--------------------------------------------------------------------------
  460.   def dispose_option_window
  461.     # Do Nothing
  462.   end
  463.   #--------------------------------------------------------------------------
  464.   # ● コモンイベント予約判定
  465.   #    イベントの呼び出しが予約されているならマップ画面へ遷移する。
  466.   #--------------------------------------------------------------------------
  467.   def check_common_event
  468.     SceneManager.goto(Scene_Map) if $game_temp.common_event_reserved?
  469.   end
  470.   #--------------------------------------------------------------------------
  471.   # ● コモンベントの実行
  472.   #--------------------------------------------------------------------------
  473.   def start_common_event(common_event_id)
  474.     if @status_window && @status_window.index >= 0
  475.       $game_party.menu_actor = $game_party.members[@status_window.index]
  476.     end
  477.     interpreter = Scene_Menu::Game_Interpreter.new
  478.     interpreter.setup($data_common_events[common_event_id].list)
  479.     interpreter.update while interpreter.running?
  480.   end
  481.   #--------------------------------------------------------------------------
  482.   # ● 現在アクティブなコマンドウィンドウ
  483.   #--------------------------------------------------------------------------
  484.   def current_console
  485.     @caller.last || @command_window
  486.   end
  487.   #--------------------------------------------------------------------------
  488.   # ● 以前操作していたコマンドウィンドウ
  489.   #--------------------------------------------------------------------------
  490.   def previous_console
  491.     @caller[-2] || @command_window
  492.   end
  493.   #--------------------------------------------------------------------------
  494.   # ●
  495.   #--------------------------------------------------------------------------
  496.   def change_console(console)
  497.     @caller << console
  498.   end
  499.   #--------------------------------------------------------------------------
  500.   # ●
  501.   #--------------------------------------------------------------------------
  502.   def return_console
  503.     current_console.deactivate.close
  504.     previous_console.activate.open
  505.     @caller.pop
  506.   end
  507.   #--------------------------------------------------------------------------
  508.   # ● コマンド実行後の処理
  509.   #--------------------------------------------------------------------------
  510.   def post_terminate
  511.     item = current_console.current_data
  512.     current_console.activate if !current_console.locked?
  513.   end
  514.   #--------------------------------------------------------------------------
  515.   # ● コマンド [決定]
  516.   #--------------------------------------------------------------------------
  517.   def command_ok
  518.     current_console.current_exec
  519.     post_terminate
  520.     check_common_event
  521.   end
  522.   #--------------------------------------------------------------------------
  523.   # ●
  524.   #--------------------------------------------------------------------------
  525.   def command_sub
  526.     if current_console == @subcommand_window
  527.       raise CustomizeError, "サブコマンドからは呼び出せません。"
  528.     end
  529.     @command_window.close if @command_window.current_data.switch?
  530.     symbol = @command_window.current_data.sub
  531.     @subcommand_window.init_command(symbol)
  532.     @subcommand_window.clear_handler
  533.     @subcommand_window.set_handler(:cancel, method(:return_console))
  534.     @subcommand_window.set_handlers(self)
  535.     change_console(@subcommand_window)
  536.     open_sub_command
  537.   end
  538.   #--------------------------------------------------------------------------
  539.   # ○ コマンド[スキル][装備][ステータス]
  540.   #--------------------------------------------------------------------------
  541.   def command_personal
  542.     @status_window.select_last
  543.     @status_window.activate
  544.     @status_window.set_handler(:ok,     method(:on_personal_ok))
  545.     @status_window.set_handler(:cancel, method(:on_personal_cancel))
  546.     current_console.close if current_console.current_data.auto_close?
  547.   end
  548.   #--------------------------------------------------------------------------
  549.   # ○ 個人コマンド [決定]
  550.   #--------------------------------------------------------------------------
  551.   def on_personal_ok
  552.     command_ok
  553.     if current_console.current_data.continue?
  554.       current_console.deactivate
  555.       @status_window.activate
  556.     end
  557.   end
  558.   #--------------------------------------------------------------------------
  559.   # ○ 個人コマンド[終了]
  560.   #--------------------------------------------------------------------------
  561.   def on_personal_cancel
  562.     @status_window.unselect
  563.     current_console.activate.open
  564.   end
  565.   #--------------------------------------------------------------------------
  566.   # ○ 並び替え[キャンセル]
  567.   #--------------------------------------------------------------------------
  568.   def on_formation_cancel
  569.     if @status_window.pending_index >= 0
  570.       @status_window.pending_index = -1
  571.       @status_window.activate
  572.     else
  573.       @status_window.unselect
  574.       current_console.activate.open
  575.     end
  576.   end
  577.   #--------------------------------------------------------------------------
  578.   # ● サブコマンドウィンドウを開く
  579.   #--------------------------------------------------------------------------
  580.   def open_sub_command
  581.     return if scene_changing?
  582.     @subcommand_window.activate.open
  583.   end
  584.   #--------------------------------------------------------------------------
  585.   # ● サブコマンドウィンドウを閉じる
  586.   #--------------------------------------------------------------------------
  587.   def close_sub_command
  588.     @subcommand_window.deactivate.close
  589.   end
  590. end

  591. module CustomMenuCommand
  592.   #--------------------------------------------------------------------------
  593.   # ● オブジェクト初期化
  594.   #--------------------------------------------------------------------------
  595.   def initialize(ident)
  596.     @ident = ident
  597.     super()
  598.     unlock
  599.   end
  600.   #--------------------------------------------------------------------------
  601.   # ●
  602.   #--------------------------------------------------------------------------
  603.   def init_command(ident)
  604.     @ident = ident
  605.   end
  606.   #--------------------------------------------------------------------------
  607.   # ● 項目数の取得
  608.   #--------------------------------------------------------------------------
  609.   def item_max
  610.     @list.size
  611.   end
  612.   #--------------------------------------------------------------------------
  613.   # ● コマンドリストのクリア
  614.   #--------------------------------------------------------------------------
  615.   def clear_command_list
  616.     @list = []
  617.   end
  618.   #--------------------------------------------------------------------------
  619.   # ● コマンドリストの作成
  620.   #--------------------------------------------------------------------------
  621.   def make_command_list
  622.     return unless @ident
  623.     unless CAO::CM::COMMANDS[@ident]
  624.       raise CustomizeError,
  625.         "識別子 :#{@ident} のメニューコマンドの設定がありません。(COMMANDS)"
  626.     end
  627.     CAO::CM::COMMANDS[@ident].each do |symbol|
  628.       unless CAO::CM::COMMAND_ITEMS[symbol]
  629.         puts "識別子 :#{symbol} の項目の設定がありません。(COMMAND_ITEMS)"
  630.         next
  631.       end
  632.       item = Game_MenuItem.new(symbol, CAO::CM::COMMAND_ITEMS[symbol])
  633.       @list << item unless item.hide?
  634.     end
  635.   end
  636.   #--------------------------------------------------------------------------
  637.   # ●
  638.   #--------------------------------------------------------------------------
  639.   def lock
  640.     @locked = true
  641.     self
  642.   end
  643.   #--------------------------------------------------------------------------
  644.   # ●
  645.   #--------------------------------------------------------------------------
  646.   def unlock
  647.     @locked = false
  648.     self
  649.   end
  650.   #--------------------------------------------------------------------------
  651.   # ●
  652.   #--------------------------------------------------------------------------
  653.   def locked?
  654.     @locked
  655.   end
  656.   #--------------------------------------------------------------------------
  657.   # ● コマンドの有効状態を取得
  658.   #--------------------------------------------------------------------------
  659.   def command_enabled?(index)
  660.     param = @list[index].enable
  661.     return false if @list[index].personal? && !$game_party.exists
  662.     return true if param == true
  663.     return false if param == false
  664.     return eval(param.to_s) if param.is_a?(Symbol) || param.is_a?(String)
  665.     raise "must not happen"
  666.   end
  667.   #--------------------------------------------------------------------------
  668.   # ● コマンド名の取得
  669.   #--------------------------------------------------------------------------
  670.   def command_name(index)
  671.     @list[index].name
  672.   end
  673.   #--------------------------------------------------------------------------
  674.   # ● コマンドアイコン番号の取得
  675.   #--------------------------------------------------------------------------
  676.   def command_icon_index(index)
  677.     return @list[index].icon_index
  678.   end
  679.   #--------------------------------------------------------------------------
  680.   # ● 選択項目のコマンドデータを取得
  681.   #--------------------------------------------------------------------------
  682.   def current_data
  683.     index >= 0 ? @list[index] : nil
  684.   end
  685.   #--------------------------------------------------------------------------
  686.   # ● 選択項目の有効状態を取得
  687.   #--------------------------------------------------------------------------
  688.   def current_item_enabled?
  689.     index >= 0 ? command_enabled?(index) : false
  690.   end
  691.   #--------------------------------------------------------------------------
  692.   # ● 選択項目のシンボルを取得
  693.   #--------------------------------------------------------------------------
  694.   def current_symbol
  695.     current_data ? current_data.symbol : nil
  696.   end
  697.   #--------------------------------------------------------------------------
  698.   # ● 選択項目のインデックスを取得
  699.   #--------------------------------------------------------------------------
  700.   def current_index
  701.     @list.index {|item| item.symbol == current_symbol }
  702.   end
  703.   #--------------------------------------------------------------------------
  704.   # ● 選択項目の実行
  705.   #--------------------------------------------------------------------------
  706.   def current_exec
  707.     current_data.exec
  708.   end
  709.   #--------------------------------------------------------------------------
  710.   # ● 指定されたシンボルを持つコマンドにカーソルを移動
  711.   #--------------------------------------------------------------------------
  712.   def select_symbol(symbol)
  713.     @list.each_index {|i| select(i) if @list[i].symbol == symbol }
  714.   end
  715.   #--------------------------------------------------------------------------
  716.   # ● ハンドラのクリア
  717.   #--------------------------------------------------------------------------
  718.   def clear_handler
  719.     @handler = {}
  720.   end
  721.   #--------------------------------------------------------------------------
  722.   # ● 動作に対応するハンドラの設定
  723.   #--------------------------------------------------------------------------
  724.   def set_handlers(obj)
  725.     #
  726.     # ここでエラーが発生した場合、項目の設定が間違っている可能性があります。
  727.     # 項目処理の設定を確認してください。
  728.     #
  729.     # NameError : undefined method `○○' for class `Scene_Menu'
  730.     #   つづりが間違っていないか確認してください。
  731.     #
  732.     # NameError : undefined method `command_sub' for class `Scene_Menu'
  733.     #  『サブコマンド』スクリプトが未導入の可能性があります。
  734.     #
  735.     @list.each {|cmd| @handler[cmd.symbol] = obj.method(cmd.handler) }
  736.   end
  737. end

  738. class Window_CustomMenuCommand < Window_MenuCommand
  739.   include CustomMenuCommand
  740.   #--------------------------------------------------------------------------
  741.   # ● ウィンドウ内容の幅を計算
  742.   #--------------------------------------------------------------------------
  743.   def contents_width
  744.     (item_width + spacing) * col_max - spacing
  745.   end
  746.   #--------------------------------------------------------------------------
  747.   # ● 行の高さを取得
  748.   #--------------------------------------------------------------------------
  749.   def line_height
  750.     if CAO::CM::COMMAND_HEIGHT == 0
  751.       return default_font_size
  752.     else
  753.       return CAO::CM::COMMAND_HEIGHT
  754.     end
  755.   end
  756.   #--------------------------------------------------------------------------
  757.   # ● 横に項目が並ぶときの空白の幅を取得
  758.   #--------------------------------------------------------------------------
  759.   def spacing
  760.     return 8
  761.   end
  762.   #--------------------------------------------------------------------------
  763.   # ● 初期フォントサイズ
  764.   #--------------------------------------------------------------------------
  765.   def default_font_size
  766.     return Font.default_size if CAO::CM::COMMAND_SIZE == 0
  767.     return CAO::CM::COMMAND_SIZE
  768.   end
  769.   #--------------------------------------------------------------------------
  770.   # ● フォントサイズのリセット
  771.   #--------------------------------------------------------------------------
  772.   def reset_font_size
  773.     contents.font.size = default_font_size
  774.   end
  775.   #--------------------------------------------------------------------------
  776.   # ● カーソルを下に移動
  777.   #--------------------------------------------------------------------------
  778.   def cursor_down(wrap = false)
  779.     if index < item_max - col_max || (wrap && col_max == 1)
  780.       select((index + col_max) % item_max)
  781.     elsif col_max != 1 && index < (item_max.to_f/col_max).ceil*col_max-col_max
  782.       select(item_max - 1)
  783.     end
  784.   end
  785.   #--------------------------------------------------------------------------
  786.   # ● 項目の描画
  787.   #--------------------------------------------------------------------------
  788.   def draw_item(index)
  789.     rect = item_rect(index)
  790.     enabled = command_enabled?(index)
  791.     if command_icon_index(index)
  792.       draw_icon(command_icon_index(index), rect.x, rect.y, enabled)
  793.       rect.x += 26
  794.       rect.width -= 28
  795.     else
  796.       rect.x += 4
  797.       rect.width -= 8
  798.     end
  799.     change_color(normal_color, enabled)
  800.     draw_text(rect, command_name(index), alignment)
  801.   end
  802.   #--------------------------------------------------------------------------
  803.   # ● リフレッシュ
  804.   #--------------------------------------------------------------------------
  805.   def refresh
  806.     self.contents.clear
  807.     reset_font_size
  808.     draw_all_items
  809.   end
  810. end

  811. class Sprite_CustomMenuCursor < Sprite
  812.   #--------------------------------------------------------------------------
  813.   # ●
  814.   #--------------------------------------------------------------------------
  815.   def initialize(data, viewport = nil)
  816.     super(viewport)
  817.     @filename     = data[0]
  818.     @distance_x   = data[1] || 1
  819.     @distance_y   = data[2] || 1
  820.     @view_behind  = data[3] || data[3] == nil
  821.     @flash_amount = data[4] || 0
  822.    
  823.     self.bitmap = Cache.system(@filename)
  824.     self.z = @view_behind ? -1 : 1
  825.     self.ox = self.bitmap.width / 2
  826.     self.oy = self.bitmap.height / 2
  827.     self.opacity = 0
  828.   end
  829.   #--------------------------------------------------------------------------
  830.   # ●
  831.   #--------------------------------------------------------------------------
  832.   def update
  833.     super
  834.     update_flash
  835.   end
  836.   #--------------------------------------------------------------------------
  837.   # ●
  838.   #--------------------------------------------------------------------------
  839.   def update_flash
  840.     return if @flash_amount == 0
  841.     last_opacity = self.opacity
  842.     self.opacity += @flash_amount
  843.     @flash_amount *= -1 if self.opacity == last_opacity
  844.   end
  845. end

  846. class Spriteset_CustomMenuCommand
  847.   #--------------------------------------------------------------------------
  848.   # ● 定数
  849.   #--------------------------------------------------------------------------
  850.   OPEN_SPEED = 16
  851.   #--------------------------------------------------------------------------
  852.   # ● クラスインスタンス変数
  853.   #--------------------------------------------------------------------------
  854.   class << self
  855.     attr_accessor :last_command_symbol    # カーソル位置 保存用
  856.   end
  857.   #--------------------------------------------------------------------------
  858.   # ● 公開インスタンス変数
  859.   #--------------------------------------------------------------------------
  860.   attr_reader   :index
  861.   attr_reader   :openness
  862.   attr_reader   :help_window              # ヘルプウィンドウ
  863.   attr_accessor :x
  864.   attr_accessor :y
  865.   attr_accessor :viewport
  866.   attr_accessor :visible
  867.   attr_accessor :active
  868.   #--------------------------------------------------------------------------
  869.   # ● オブジェクト初期化
  870.   #--------------------------------------------------------------------------
  871.   def initialize
  872.     @handler = {}
  873.     @index = -1
  874.     @x = 0
  875.     @y = 0
  876.    
  877.     @visible = true
  878.     @active = false
  879.    
  880.     @openness = 255     # 変更は self.openness で行なう
  881.     @opening = false
  882.     @closing = false
  883.   end

  884.   #--------------------------------------------------------------------------
  885.   # ● 項目数の取得 (要再定義)
  886.   #--------------------------------------------------------------------------
  887.   def item_max
  888.     return 0
  889.   end
  890.   #--------------------------------------------------------------------------
  891.   # ● コマンド名の取得 (要再定義)
  892.   #--------------------------------------------------------------------------
  893.   def command_name(index)
  894.     return ""
  895.   end
  896.   #--------------------------------------------------------------------------
  897.   # ●  (要再定義)
  898.   #--------------------------------------------------------------------------
  899.   def command_filename
  900.     return ""
  901.   end
  902.   #--------------------------------------------------------------------------
  903.   # ● コマンド総数の取得 (要再定義)
  904.   #--------------------------------------------------------------------------
  905.   def command_max
  906.     return 0
  907.   end
  908.   #--------------------------------------------------------------------------
  909.   # ● カーソルデータの取得
  910.   #--------------------------------------------------------------------------
  911.   def cursor_data
  912.     return nil
  913.   end
  914.   #--------------------------------------------------------------------------
  915.   # ●
  916.   #--------------------------------------------------------------------------
  917.   def dispose
  918.     dispose_command_sprites
  919.     dispose_cursor_sprite
  920.   end
  921.   #--------------------------------------------------------------------------
  922.   # ● スプライトの表示
  923.   #--------------------------------------------------------------------------
  924.   def show
  925.     self.visible = true
  926.     self
  927.   end
  928.   #--------------------------------------------------------------------------
  929.   # ● スプライトの非表示
  930.   #--------------------------------------------------------------------------
  931.   def hide
  932.     self.visible = false
  933.     self
  934.   end
  935.   #--------------------------------------------------------------------------
  936.   # ● スプライトのアクティブ化
  937.   #--------------------------------------------------------------------------
  938.   def activate
  939.     self.active = true
  940.     self
  941.   end
  942.   #--------------------------------------------------------------------------
  943.   # ● スプライトの非アクティブ化
  944.   #--------------------------------------------------------------------------
  945.   def deactivate
  946.     self.active = false
  947.     self
  948.   end
  949.   #--------------------------------------------------------------------------
  950.   # ●
  951.   #--------------------------------------------------------------------------
  952.   def openness=(value)
  953.     @openness = value
  954.     update_openness
  955.   end
  956.   #--------------------------------------------------------------------------
  957.   # ● ウィンドウを開く
  958.   #--------------------------------------------------------------------------
  959.   def open
  960.     @opening = true unless open?
  961.     @closing = false
  962.     self
  963.   end
  964.   #--------------------------------------------------------------------------
  965.   # ● ウィンドウを閉じる
  966.   #--------------------------------------------------------------------------
  967.   def close
  968.     @closing = true unless close?
  969.     @opening = false
  970.     self
  971.   end
  972.   #--------------------------------------------------------------------------
  973.   # ●
  974.   #--------------------------------------------------------------------------
  975.   def open?
  976.     @openness = 255 if @openness > 255
  977.     return @openness == 255
  978.   end
  979.   #--------------------------------------------------------------------------
  980.   # ●
  981.   #--------------------------------------------------------------------------
  982.   def close?
  983.     @openness = 0 if @openness < 0
  984.     return @openness == 0
  985.   end
  986.   #--------------------------------------------------------------------------
  987.   # ● 開く処理の更新
  988.   #--------------------------------------------------------------------------
  989.   def update_open
  990.     @openness += OPEN_SPEED
  991.     @opening = false if open?
  992.   end
  993.   #--------------------------------------------------------------------------
  994.   # ● 閉じる処理の更新
  995.   #--------------------------------------------------------------------------
  996.   def update_close
  997.     @openness -= OPEN_SPEED
  998.     @closing = false if close?
  999.   end
  1000.   #--------------------------------------------------------------------------
  1001.   # ●
  1002.   #--------------------------------------------------------------------------
  1003.   def visible=(value)
  1004.     @visible = value
  1005.     @cursor_sprite.visible = value if @cursor_sprite
  1006.   end
  1007.   #--------------------------------------------------------------------------
  1008.   # ● カーソル位置の設定
  1009.   #--------------------------------------------------------------------------
  1010.   def index=(index)
  1011.     @index = index
  1012.     refresh
  1013.     call_update_help
  1014.   end
  1015.   #--------------------------------------------------------------------------
  1016.   # ● 項目の選択
  1017.   #--------------------------------------------------------------------------
  1018.   def select(index)
  1019.     self.index = index if index && @index != index
  1020.   end
  1021.   #--------------------------------------------------------------------------
  1022.   # ● 項目の選択解除
  1023.   #--------------------------------------------------------------------------
  1024.   def unselect
  1025.     self.index = -1
  1026.   end
  1027.   #--------------------------------------------------------------------------
  1028.   # ● 前回の選択位置を復帰
  1029.   #--------------------------------------------------------------------------
  1030.   def select_last
  1031.     select_symbol(self.class.last_command_symbol)
  1032.   end
  1033.   #--------------------------------------------------------------------------
  1034.   # ● 項目の選択位置を記憶
  1035.   #--------------------------------------------------------------------------
  1036.   def save_command_position
  1037.     self.class.last_command_symbol = current_symbol
  1038.   end
  1039.   #--------------------------------------------------------------------------
  1040.   # ● 前回の選択位置を削除
  1041.   #--------------------------------------------------------------------------
  1042.   def init_command_position
  1043.     self.class.last_command_symbol = nil
  1044.   end
  1045.   #--------------------------------------------------------------------------
  1046.   # ● 動作に対応するハンドラの設定
  1047.   #     method : ハンドラとして設定するメソッド (Method オブジェクト)
  1048.   #--------------------------------------------------------------------------
  1049.   def set_handler(symbol, method)
  1050.     @handler[symbol] = method
  1051.   end
  1052.   #--------------------------------------------------------------------------
  1053.   # ● ハンドラの存在確認
  1054.   #--------------------------------------------------------------------------
  1055.   def handle?(symbol)
  1056.     @handler.include?(symbol)
  1057.   end
  1058.   #--------------------------------------------------------------------------
  1059.   # ● ハンドラの呼び出し
  1060.   #--------------------------------------------------------------------------
  1061.   def call_handler(symbol)
  1062.     @handler[symbol].call if handle?(symbol)
  1063.   end
  1064.   #--------------------------------------------------------------------------
  1065.   # ● フレーム更新
  1066.   #--------------------------------------------------------------------------
  1067.   def update
  1068.     update_cursor_sprite
  1069.     update_command_sprites
  1070.     update_openness
  1071.     process_cursor_move
  1072.     process_handling
  1073.   end
  1074.   #--------------------------------------------------------------------------
  1075.   # ● 開閉更新
  1076.   #--------------------------------------------------------------------------
  1077.   def update_openness
  1078.     return unless @command_sprites
  1079.     update_open  if @opening
  1080.     update_close if @closing
  1081.     @command_sprites.each {|sp| sp.opacity = @openness }
  1082.   end
  1083.   #--------------------------------------------------------------------------
  1084.   # ● カーソルの移動処理
  1085.   #--------------------------------------------------------------------------
  1086.   def process_cursor_move
  1087.     return unless cursor_movable?
  1088.     last_index = @index
  1089.     cursor_down (Input.trigger?(:DOWN))  if Input.repeat?(:DOWN)
  1090.     cursor_up   (Input.trigger?(:UP))    if Input.repeat?(:UP)
  1091.     cursor_right(Input.trigger?(:RIGHT)) if Input.repeat?(:RIGHT)
  1092.     cursor_left (Input.trigger?(:LEFT))  if Input.repeat?(:LEFT)
  1093.     cursor_pagedown   if !handle?(:pagedown) && Input.trigger?(:R)
  1094.     cursor_pageup     if !handle?(:pageup)   && Input.trigger?(:L)
  1095.     Sound.play_cursor if @index != last_index
  1096.   end
  1097.   #--------------------------------------------------------------------------
  1098.   # ● 決定やキャンセルなどのハンドリング処理
  1099.   #--------------------------------------------------------------------------
  1100.   def process_handling
  1101.     return unless active
  1102.     return process_ok     if Input.trigger?(:C)
  1103.     return process_cancel if Input.trigger?(:B)
  1104.   end
  1105.   #--------------------------------------------------------------------------
  1106.   # ● カーソルの移動可能判定
  1107.   #--------------------------------------------------------------------------
  1108.   def cursor_movable?
  1109.     active && item_max > 0
  1110.   end
  1111.   #--------------------------------------------------------------------------
  1112.   # ● カーソルを下に移動
  1113.   #--------------------------------------------------------------------------
  1114.   def cursor_down(wrap = false)
  1115.     if @index + cursor_dy >= 0 && @index + cursor_dy < item_max || wrap
  1116.       select((@index + cursor_dy) % item_max)
  1117.     end
  1118.   end
  1119.   #--------------------------------------------------------------------------
  1120.   # ● カーソルを上に移動
  1121.   #--------------------------------------------------------------------------
  1122.   def cursor_up(wrap = false)
  1123.     if @index - cursor_dy >= 0 && @index - cursor_dy < item_max || wrap
  1124.       select((@index - cursor_dy) % item_max)
  1125.     end
  1126.   end
  1127.   #--------------------------------------------------------------------------
  1128.   # ● カーソルを右に移動
  1129.   #--------------------------------------------------------------------------
  1130.   def cursor_right(wrap = false)
  1131.     if @index + cursor_dx >= 0 && @index + cursor_dx < item_max || wrap
  1132.       select((@index + cursor_dx) % item_max)
  1133.     end
  1134.   end
  1135.   #--------------------------------------------------------------------------
  1136.   # ● カーソルを左に移動
  1137.   #--------------------------------------------------------------------------
  1138.   def cursor_left(wrap = false)
  1139.     if @index - cursor_dx >= 0 && @index - cursor_dx < item_max || wrap
  1140.       select((@index - cursor_dx) % item_max)
  1141.     end
  1142.   end
  1143.   #--------------------------------------------------------------------------
  1144.   # ● カーソルを 1 ページ後ろに移動
  1145.   #--------------------------------------------------------------------------
  1146.   def cursor_pagedown
  1147.     # Do Nothing
  1148.   end
  1149.   #--------------------------------------------------------------------------
  1150.   # ● カーソルを 1 ページ前に移動
  1151.   #--------------------------------------------------------------------------
  1152.   def cursor_pageup
  1153.     # Do Nothing
  1154.   end
  1155.   #--------------------------------------------------------------------------
  1156.   # ● 決定ボタンが押されたときの処理
  1157.   #--------------------------------------------------------------------------
  1158.   def process_ok
  1159.     save_command_position
  1160.     if current_item_enabled?
  1161.       Sound.play_ok
  1162.       Input.update
  1163.       deactivate
  1164.       if handle?(current_symbol)
  1165.         call_handler(current_symbol)
  1166.       elsif handle?(:ok)
  1167.         call_handler(:ok)
  1168.       else
  1169.         activate
  1170.       end
  1171.     else
  1172.       Sound.play_buzzer
  1173.     end
  1174.   end
  1175.   #--------------------------------------------------------------------------
  1176.   # ● キャンセルボタンが押されたときの処理
  1177.   #--------------------------------------------------------------------------
  1178.   def process_cancel
  1179.     Sound.play_cancel
  1180.     Input.update
  1181.     deactivate
  1182.     call_handler(:cancel)
  1183.   end
  1184.   #--------------------------------------------------------------------------
  1185.   # ● ヘルプウィンドウの設定
  1186.   #--------------------------------------------------------------------------
  1187.   def help_window=(help_window)
  1188.     @help_window = help_window
  1189.     call_update_help
  1190.   end
  1191.   #--------------------------------------------------------------------------
  1192.   # ● ヘルプウィンドウ更新メソッドの呼び出し
  1193.   #--------------------------------------------------------------------------
  1194.   def call_update_help
  1195.     update_help if active && @help_window
  1196.   end
  1197.   #--------------------------------------------------------------------------
  1198.   # ● ヘルプウィンドウの更新
  1199.   #--------------------------------------------------------------------------
  1200.   def update_help
  1201.     @help_window.clear
  1202.   end
  1203.   #--------------------------------------------------------------------------
  1204.   # ● 主要コマンドの有効状態を取得
  1205.   #--------------------------------------------------------------------------
  1206.   def main_commands_enabled
  1207.     $game_party.exists
  1208.   end
  1209.   #--------------------------------------------------------------------------
  1210.   # ● 並び替えの有効状態を取得
  1211.   #--------------------------------------------------------------------------
  1212.   def formation_enabled
  1213.     $game_party.members.size >= 2 && !$game_system.formation_disabled
  1214.   end
  1215.   #--------------------------------------------------------------------------
  1216.   # ● セーブの有効状態を取得
  1217.   #--------------------------------------------------------------------------
  1218.   def save_enabled
  1219.     !$game_system.save_disabled
  1220.   end
  1221.   #--------------------------------------------------------------------------
  1222.   # ●
  1223.   #--------------------------------------------------------------------------
  1224.   def create_cursor_sprite
  1225.     unless cursor_data
  1226.       raise CustomizeError, "カーソルの情報が設定されていません。"
  1227.     end
  1228.     return unless cursor_data[0]
  1229.     return if cursor_data[0].empty?
  1230.     @cursor_sprite = Sprite_CustomMenuCursor.new(cursor_data, viewport)
  1231.     update_cursor_sprite
  1232.   end
  1233.   #--------------------------------------------------------------------------
  1234.   # ●
  1235.   #--------------------------------------------------------------------------
  1236.   def update_cursor_sprite
  1237.     return unless @cursor_sprite
  1238.     if !open? || !@visible
  1239.       @cursor_sprite.visible = false
  1240.     end
  1241.     if @active
  1242.       if @index < 0
  1243.         @cursor_sprite.visible = false
  1244.       else
  1245.         @cursor_sprite.visible = true
  1246.         @cursor_sprite.x = @command_sprites[@index].x
  1247.         @cursor_sprite.y = @command_sprites[@index].y
  1248.         @cursor_sprite.update
  1249.       end
  1250.     end
  1251.   end
  1252.   #--------------------------------------------------------------------------
  1253.   # ●
  1254.   #--------------------------------------------------------------------------
  1255.   def dispose_cursor_sprite
  1256.     return unless @cursor_sprite
  1257.     @cursor_sprite.dispose
  1258.   end
  1259.   #--------------------------------------------------------------------------
  1260.   # ● カーソル画像の取得
  1261.   #--------------------------------------------------------------------------
  1262.   def cursor_bitmap
  1263.     return nil unless cursor_data
  1264.     return nil if cursor_data[0].empty?
  1265.     return Cache.system(cursor_data[0])
  1266.   end
  1267.   #--------------------------------------------------------------------------
  1268.   # ● カーソルの移動量
  1269.   #--------------------------------------------------------------------------
  1270.   def cursor_dx
  1271.     return cursor_data[1]
  1272.   end
  1273.   #--------------------------------------------------------------------------
  1274.   # ● カーソルの移動量
  1275.   #--------------------------------------------------------------------------
  1276.   def cursor_dy
  1277.     return cursor_data[2]
  1278.   end
  1279.   #--------------------------------------------------------------------------
  1280.   # ●
  1281.   #--------------------------------------------------------------------------
  1282.   def item_rect(index)
  1283.     rect = Rect.new(0, 0, 0, 0)
  1284.     rect.x = @command_sprites[index].x
  1285.     rect.y = @command_sprites[index].y
  1286.     rect.width = @command_sprites[index].bitmap.width
  1287.     rect.height = @command_sprites[index].bitmap.height
  1288.     return rect
  1289.   end
  1290.   #--------------------------------------------------------------------------
  1291.   # ●
  1292.   #--------------------------------------------------------------------------
  1293.   def create_command_sprites
  1294.     @command_sprites = Array.new(item_max) do |i|
  1295.       sp = Sprite.new(viewport)
  1296.       sp.bitmap = Bitmap.new(image_width(i), image_height(i))
  1297.       sp.ox = sp.bitmap.width / 2
  1298.       sp.oy = sp.bitmap.height / 2
  1299.       yield(sp, i) if defined? yield
  1300.       sp
  1301.     end
  1302.   end
  1303.   #--------------------------------------------------------------------------
  1304.   # ● フレーム更新
  1305.   #--------------------------------------------------------------------------
  1306.   def update_command_sprites
  1307.     return unless @command_sprites
  1308.     @command_sprites.each {|sp| sp.update }
  1309.   end
  1310.   #--------------------------------------------------------------------------
  1311.   # ●
  1312.   #--------------------------------------------------------------------------
  1313.   def dispose_command_sprites
  1314.     return unless @command_sprites
  1315.     @command_sprites.each do |sp|
  1316.       sp.bitmap.dispose
  1317.       sp.dispose
  1318.     end
  1319.   end
  1320.   #--------------------------------------------------------------------------
  1321.   # ●
  1322.   #--------------------------------------------------------------------------
  1323.   def image_index(index)
  1324.     result = 0
  1325.     result += 1 if @index == index
  1326.     result += 2 unless command_enabled?(index)
  1327.     return result
  1328.   end
  1329.   #--------------------------------------------------------------------------
  1330.   # ● src_rect
  1331.   #--------------------------------------------------------------------------
  1332.   def image_rect(index)
  1333.     rect = @command_sprites[index].bitmap.rect
  1334.     if multi_image?
  1335.       rect.x = @command_sprites[index].bitmap.width * image_index(index)
  1336.       rect.y = @command_sprites[index].bitmap.height * index
  1337.     else
  1338.       rect.x = 0
  1339.       rect.y = @command_sprites[index].bitmap.height * image_index(index)
  1340.     end
  1341.     return rect
  1342.   end
  1343.   #--------------------------------------------------------------------------
  1344.   # ●
  1345.   #--------------------------------------------------------------------------
  1346.   def refresh_command(index)
  1347.     bitmap = @command_sprites[index].bitmap
  1348.     bitmap.clear
  1349.     bitmap.blt(0, 0, command_image(index), image_rect(index))
  1350.   end
  1351.   #--------------------------------------------------------------------------
  1352.   # ●
  1353.   #--------------------------------------------------------------------------
  1354.   def refresh_commands
  1355.     @command_sprites.each_with_index do |sp, i|
  1356.       refresh_command(i)
  1357.       yield(sp, i) if defined? yield
  1358.     end
  1359.   end
  1360.   #--------------------------------------------------------------------------
  1361.   # ●
  1362.   #--------------------------------------------------------------------------
  1363.   def command_image(index)
  1364.     if multi_image?
  1365.       Cache.system(command_filename)
  1366.     else
  1367.       Cache.system(command_name(index))
  1368.     end
  1369.   end
  1370.   #--------------------------------------------------------------------------
  1371.   # ●
  1372.   #--------------------------------------------------------------------------
  1373.   def multi_image?
  1374.     return !command_filename.empty?
  1375.   end
  1376.   #--------------------------------------------------------------------------
  1377.   # ●
  1378.   #--------------------------------------------------------------------------
  1379.   def image_width(index)
  1380.     return command_image(index).width / 4 if multi_image?
  1381.     return command_image(index).width
  1382.   end
  1383.   #--------------------------------------------------------------------------
  1384.   # ●
  1385.   #--------------------------------------------------------------------------
  1386.   def image_height(index)
  1387.     return command_image(index).height / command_max if multi_image?
  1388.     return command_image(index).height / 4
  1389.   end
  1390. end

  1391. class Game_Actor
  1392.   #--------------------------------------------------------------------------
  1393.   # ● 公開インスタンス変数
  1394.   #--------------------------------------------------------------------------
  1395.   attr_accessor :portrait_name            # 立ち絵 ファイル名
  1396.   #--------------------------------------------------------------------------
  1397.   # ● 立ち絵のファイル名を取得
  1398.   #--------------------------------------------------------------------------
  1399.   def portrait_name
  1400.     filename = @portrait_name ? @portrait_name : CAO::CM::PORTRAIT_NAME
  1401.     return sprintf(filename, self.id, self.expression_index)
  1402.   end
  1403.   #--------------------------------------------------------------------------
  1404.   # ● 表情のインデックス
  1405.   #--------------------------------------------------------------------------
  1406.   def expression_index
  1407.     rate = (self.hp_rate * 100).ceil
  1408.     index = CAO::CM::EXPRESSIVE_RATE.index {|r| r < rate }
  1409.     return index || CAO::CM::EXPRESSIVE_RATE.size
  1410.   end
  1411.   #--------------------------------------------------------------------------
  1412.   # ● 経験値の割合を取得
  1413.   #--------------------------------------------------------------------------
  1414.   def cm_exp_rate
  1415.     return 1.0 if max_level?
  1416.     return self.cm_accumulated_exp / self.cm_requisite_exp.to_f
  1417.   end
  1418.   #--------------------------------------------------------------------------
  1419.   # ● レベルアップに必要な経験値を取得
  1420.   #--------------------------------------------------------------------------
  1421.   def cm_requisite_exp
  1422.     return 0 if max_level?
  1423.     return self.next_level_exp - self.current_level_exp
  1424.   end
  1425.   #--------------------------------------------------------------------------
  1426.   # ● 獲得した経験値を取得 (現レベル)
  1427.   #--------------------------------------------------------------------------
  1428.   def cm_accumulated_exp
  1429.     return self.exp - self.current_level_exp
  1430.   end
  1431.   #--------------------------------------------------------------------------
  1432.   # ● レベルアップに必要な残りの経験値を取得
  1433.   #--------------------------------------------------------------------------
  1434.   def cm_remaining_exp
  1435.     return 0 if max_level?
  1436.     return self.next_level_exp - self.exp
  1437.   end
  1438. end

  1439. class CAO::CM::Canvas
  1440.   include CAO::CM
  1441.   #--------------------------------------------------------------------------
  1442.   # ● 公開インスタンス変数
  1443.   #--------------------------------------------------------------------------
  1444.   attr_reader :window
  1445.   attr_reader :bitmap
  1446.   #--------------------------------------------------------------------------
  1447.   # ● オブジェクト初期化
  1448.   #--------------------------------------------------------------------------
  1449.   def initialize(obj)
  1450.     case obj
  1451.     when Window
  1452.       @window = obj
  1453.       @bitmap = obj.contents
  1454.     when Bitmap
  1455.       @window = nil
  1456.       @bitmap = obj
  1457.     else
  1458.       raise TypeError,
  1459.         "wrong argument type #{obj.class} (expected Bitmap or Window)"
  1460.     end
  1461.   end
  1462.   #--------------------------------------------------------------------------
  1463.   # ●
  1464.   #--------------------------------------------------------------------------
  1465.   def contents
  1466.     return @window ? @window.contents : @bitmap
  1467.   end
  1468.   #--------------------------------------------------------------------------
  1469.   # ●
  1470.   #--------------------------------------------------------------------------
  1471.   def draw_actor_items(actor, x, y, list)
  1472.     #
  1473.     # メニューステータスの設定が間違っている可能性があります。
  1474.     # 表示項目の設定を確認してください。
  1475.     #
  1476.     # TypeError
  1477.     #   引数の型(数値や文字列など)が間違っています。
  1478.     #   設定がずれているかもしれません。
  1479.     #   設定は必ず [シンボル, 数値, 数値, ... ] の形で始まります。
  1480.     #   識別子とx座標とy座標の設定は省略できません。
  1481.     #
  1482.     # ArgumentError : wrong number of arguments
  1483.     #   引数の数が間違っています。
  1484.     #   オプション部分の設定に間違いがないか確認してください。
  1485.     #   
  1486.     list.each do |params|
  1487.       symbol = params[0]
  1488.       argv = params[1, params.size]
  1489.       xx, yy = argv[0], argv[1]
  1490.       unless METHODS_NAME[symbol]
  1491.         puts "識別子 :#{symbol} の処理は定義されていません。"
  1492.         next
  1493.       end
  1494.       unless xx && yy
  1495.         raise CustomizeError, "描画する座標が設定されていません。"
  1496.       end
  1497.       begin
  1498.         opt = (argv.size <= 2) ? [] : argv[2, argv.size - 2]
  1499.         eval("#{METHODS_NAME[symbol]}(actor, x + xx, y + yy, *opt)")
  1500.       rescue
  1501.         msg = "{ Actor(#{actor.respond_to?(:id)&&actor.id})  "
  1502.         msg << "Symbol(:#{symbol})  Method(#{METHODS_NAME[symbol]}) }\n"
  1503.         msg << $!.message
  1504.         raise $!, msg, $!.backtrace
  1505.       end
  1506.     end
  1507.   end
  1508.   #--------------------------------------------------------------------------
  1509.   # ●
  1510.   #--------------------------------------------------------------------------
  1511.   METHODS_NAME = {}
  1512.   METHODS_NAME[:w_chara] = '@window.draw_actor_graphics'
  1513.   METHODS_NAME[:w_face]  = '@window.draw_actor_face'
  1514.   METHODS_NAME[:w_name]  = '@window.draw_actor_name'
  1515.   METHODS_NAME[:w_class] = '@window.draw_actor_class'
  1516.   METHODS_NAME[:w_nick]  = '@window.draw_actor_nickname'
  1517.   METHODS_NAME[:w_level] = '@window.draw_actor_level'
  1518.   METHODS_NAME[:w_state] = '@window.draw_actor_icons'
  1519.   METHODS_NAME[:w_hp]    = '@window.draw_actor_hp'
  1520.   METHODS_NAME[:w_mp]    = '@window.draw_actor_mp'
  1521.   METHODS_NAME[:w_tp]    = '@window.draw_actor_tp'
  1522.   
  1523.   if CAO::CM::EXPRESSIVE_RATE.empty?
  1524.     METHODS_NAME[:face] = :draw_actor_face
  1525.   else
  1526.     METHODS_NAME[:face] = :draw_actor_expression
  1527.   end
  1528.   METHODS_NAME[:chara] = :draw_actor_graphic
  1529.   METHODS_NAME[:name]  = :draw_actor_name
  1530.   METHODS_NAME[:class] = :draw_actor_class
  1531.   METHODS_NAME[:nick]  = :draw_actor_nickname
  1532.   METHODS_NAME[:level] = :draw_actor_level
  1533.   METHODS_NAME[:lv_g]  = :draw_actor_level_g
  1534.   METHODS_NAME[:state] = :draw_actor_icons
  1535.   METHODS_NAME[:hp]    = :draw_actor_hp
  1536.   METHODS_NAME[:mp]    = :draw_actor_mp
  1537.   METHODS_NAME[:tp]    = :draw_actor_tp
  1538.   METHODS_NAME[:exp]   = :draw_actor_exp
  1539.   METHODS_NAME[:param] = :draw_actor_param
  1540.   METHODS_NAME[:icon]  = :draw_actor_icon
  1541.   METHODS_NAME[:bust]  = :draw_actor_portrait
  1542.   METHODS_NAME[:fill]  = :draw_actor_rect
  1543.   METHODS_NAME[:pict]  = :draw_actor_picture
  1544.   METHODS_NAME[:text]  = :draw_actor_text
  1545.   METHODS_NAME[:num]   = :draw_actor_number
  1546.   #--------------------------------------------------------------------------
  1547.   # ● 定数
  1548.   #--------------------------------------------------------------------------
  1549.   COLOR_AIB_1 = Color.new(0, 0, 0)          # アクターアイコンの縁の色
  1550.   COLOR_AIB_2 = Color.new(255, 255, 255)    # アクターアイコンの背景色
  1551.   #--------------------------------------------------------------------------
  1552.   # ● 行の高さを取得
  1553.   #--------------------------------------------------------------------------
  1554.   def line_height
  1555.     return 24
  1556.   end
  1557.   #--------------------------------------------------------------------------
  1558.   # ● 半透明描画用のアルファ値を取得
  1559.   #--------------------------------------------------------------------------
  1560.   def translucent_alpha
  1561.     return 160
  1562.   end
  1563.   #--------------------------------------------------------------------------
  1564.   # ●
  1565.   #--------------------------------------------------------------------------
  1566.   def str2color(value)
  1567.     case value
  1568.     when Color
  1569.       return value
  1570.     when Array
  1571.       return Color.new(*value)
  1572.     when Integer
  1573.       num = value
  1574.     when Symbol, String
  1575.       text = value.to_s.sub(/^(0x|x)/, "")
  1576.       case text.size
  1577.       when 1; text = text * 6 << 'FF'
  1578.       when 2; text = text[0] * 6 << text[1] * 2
  1579.       when 3; text = text[0] * 2 << text[1] * 2 << text[2] * 2 << 'FF'
  1580.       when 4; text = text[0] * 2 << text[1] * 2 << text[2] * 2 << text[3] * 2
  1581.       when 6; text = text[0, 6] << 'FF'
  1582.       end
  1583.       num = eval("0x#{text}")
  1584.     end
  1585.     return Color.new(num >> 24, num >> 16 & 255, num >> 8 & 255, num & 255)
  1586.   end
  1587.   #--------------------------------------------------------------------------
  1588.   # ● 文字色取得
  1589.   #     n : 文字色番号(0..31)
  1590.   #--------------------------------------------------------------------------
  1591.   def text_color(n, enabled = true)
  1592.     color = Cache.system("Window").get_pixel(64+(n%8)*8, 96+(n/8)*8)
  1593.     color.alpha = translucent_alpha unless enabled
  1594.     return color
  1595.   end
  1596.   #--------------------------------------------------------------------------
  1597.   # ● 各種文字色の取得
  1598.   #--------------------------------------------------------------------------
  1599.   def normal_color;      text_color(0);   end;    # 通常
  1600.   def system_color;      text_color(16);  end;    # システム
  1601.   def crisis_color;      text_color(17);  end;    # ピンチ
  1602.   def knockout_color;    text_color(18);  end;    # 戦闘不能
  1603.   def gauge_back_color;  text_color(19);  end;    # ゲージ背景
  1604.   def hp_gauge_color1;   text_color(20);  end;    # HP ゲージ 1
  1605.   def hp_gauge_color2;   text_color(21);  end;    # HP ゲージ 2
  1606.   def mp_gauge_color1;   text_color(22);  end;    # MP ゲージ 1
  1607.   def mp_gauge_color2;   text_color(23);  end;    # MP ゲージ 2
  1608.   def mp_cost_color;     text_color(23);  end;    # 消費 MP
  1609.   def power_up_color;    text_color(24);  end;    # 装備 パワーアップ
  1610.   def power_down_color;  text_color(25);  end;    # 装備 パワーダウン
  1611.   def tp_gauge_color1;   text_color(28);  end;    # TP ゲージ 1
  1612.   def tp_gauge_color2;   text_color(29);  end;    # TP ゲージ 2
  1613.   def tp_cost_color;     text_color(29);  end;    # 消費 TP
  1614.   def exp_gauge_color1;  text_color(30);  end;    # EXP ゲージ 1
  1615.   def exp_gauge_color2;  text_color(31);  end;    # EXP ゲージ 2
  1616.   #--------------------------------------------------------------------------
  1617.   # ● 保留項目の背景色を取得
  1618.   #--------------------------------------------------------------------------
  1619.   def pending_color
  1620.     Cache.system("Window").get_pixel(80, 80)
  1621.   end
  1622.   #--------------------------------------------------------------------------
  1623.   # ● テキスト描画色の変更
  1624.   #--------------------------------------------------------------------------
  1625.   def change_color(color, enabled = true)
  1626.     if block_given?
  1627.       last_color = self.contents.font.color.dup
  1628.       change_color(color, enabled)
  1629.       yield
  1630.       self.contents.font.color = last_color
  1631.     else
  1632.       self.contents.font.color.set(color)
  1633.       self.contents.font.color.alpha = translucent_alpha unless enabled
  1634.     end
  1635.   end
  1636.   #--------------------------------------------------------------------------
  1637.   # ● テキストサイズの変更
  1638.   #--------------------------------------------------------------------------
  1639.   def change_size(size)
  1640.     if block_given?
  1641.       last_size = self.contents.font.size
  1642.       change_size(size)
  1643.       yield
  1644.       self.contents.font.size = last_size
  1645.     else
  1646.       self.contents.font.size = size
  1647.     end
  1648.   end
  1649.   #--------------------------------------------------------------------------
  1650.   # ● テキストの描画
  1651.   #--------------------------------------------------------------------------
  1652.   def draw_text(*args)
  1653.     contents.draw_text(*args)
  1654.   end
  1655.   #--------------------------------------------------------------------------
  1656.   # ● テキストサイズの取得
  1657.   #--------------------------------------------------------------------------
  1658.   def text_size(str)
  1659.     contents.text_size(str)
  1660.   end
  1661.   #--------------------------------------------------------------------------
  1662.   # ● 制御文字つきテキストの描画
  1663.   #--------------------------------------------------------------------------
  1664.   def draw_text_ex(x, y, text)
  1665.     reset_font_settings
  1666.     text = convert_escape_characters(text)
  1667.     pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(text)}
  1668.     process_character(text.slice!(0, 1), text, pos) until text.empty?
  1669.   end
  1670.   #--------------------------------------------------------------------------
  1671.   # ● フォント設定のリセット
  1672.   #--------------------------------------------------------------------------
  1673.   def reset_font_settings
  1674.     change_color(normal_color)
  1675.     contents.font.size = Font.default_size
  1676.     contents.font.bold = Font.default_bold
  1677.     contents.font.italic = Font.default_italic
  1678.   end
  1679.   #--------------------------------------------------------------------------
  1680.   # ● 制御文字の事前変換
  1681.   #    実際の描画を始める前に、原則として文字列に変わるものだけを置き換える。
  1682.   #    文字「\」はエスケープ文字(\e)に変換。
  1683.   #--------------------------------------------------------------------------
  1684.   def convert_escape_characters(text)
  1685.     result = text.to_s.clone
  1686.     result.gsub!(/\r\n/)          { "\n" }
  1687.     result.gsub!(/\\/)            { "\e" }
  1688.     result.gsub!(/\e\e/)          { "\\" }
  1689.     result.gsub!(/\e({+)/i)       { "\e{" * $1.count("{") }
  1690.     result.gsub!(/\e(}+)/i)       { "\e}" * $1.count("}") }
  1691.     result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
  1692.     result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
  1693.     result.gsub!(/\eS\[(\d+),(.*?),(.*?)\]/i) { $game_switches[$1.to_i]?$2:$3 }
  1694.     result.gsub!(/\eN\[(\d+)\]/i) { actor_name($1.to_i) }
  1695.     result.gsub!(/\eP\[(\d+)\]/i) { party_member_name($1.to_i) }
  1696.     result.gsub!(/\eG/i)          { Vocab::currency_unit }
  1697.     result.gsub!(/\e\$/)          { $game_party.gold }
  1698.     result.gsub!(/\eW/)           { $game_party.steps }
  1699.     result.gsub!(/\eT\[(.+?)\]/i) { play_time($1) }
  1700.     result.gsub!(/\eT/i)          { play_time }
  1701.     result.gsub!(/\en/)           { "\n" }
  1702.     result.gsub!(/<%(.*?)%>/)     { eval($1) }
  1703.     result
  1704.   end
  1705.   #--------------------------------------------------------------------------
  1706.   # ● アクター n 番の名前を取得
  1707.   #--------------------------------------------------------------------------
  1708.   def actor_name(n)
  1709.     actor = n >= 1 ? $game_actors[n] : nil
  1710.     actor ? actor.name : ""
  1711.   end
  1712.   #--------------------------------------------------------------------------
  1713.   # ● パーティメンバー n 番の名前を取得
  1714.   #--------------------------------------------------------------------------
  1715.   def party_member_name(n)
  1716.     actor = n >= 1 ? $game_party.members[n - 1] : nil
  1717.     actor ? actor.name : ""
  1718.   end
  1719.   #--------------------------------------------------------------------------
  1720.   # ● を取得
  1721.   #--------------------------------------------------------------------------
  1722.   def play_time(format = '%3d:%02d:%02d')
  1723.     total = Graphics.frame_count / Graphics.frame_rate
  1724.     return sprintf(format,
  1725.       (total / 3600), (total / 60 % 60), (total % 60), (total / 60), total)
  1726.   end
  1727.   #--------------------------------------------------------------------------
  1728.   # ● 文字の処理
  1729.   #     c    : 文字
  1730.   #     text : 描画処理中の文字列バッファ(必要なら破壊的に変更)
  1731.   #     pos  : 描画位置 {:x, :y, :new_x, :height}
  1732.   #--------------------------------------------------------------------------
  1733.   def process_character(c, text, pos)
  1734.     case c
  1735.     when "\n"   # 改行
  1736.       process_new_line(text, pos)
  1737.     when "\e"   # 制御文字
  1738.       process_escape_character(obtain_escape_code(text), text, pos)
  1739.     else        # 普通の文字
  1740.       process_normal_character(c, pos)
  1741.     end
  1742.   end
  1743.   #--------------------------------------------------------------------------
  1744.   # ● 通常文字の処理
  1745.   #--------------------------------------------------------------------------
  1746.   def process_normal_character(c, pos)
  1747.     text_width = text_size(c).width
  1748.     draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], c)
  1749.     pos[:x] += text_width
  1750.   end
  1751.   #--------------------------------------------------------------------------
  1752.   # ● 改行文字の処理
  1753.   #--------------------------------------------------------------------------
  1754.   def process_new_line(text, pos)
  1755.     pos[:x] = pos[:new_x]
  1756.     pos[:y] += pos[:height]
  1757.     pos[:height] = calc_line_height(text)
  1758.   end
  1759.   #--------------------------------------------------------------------------
  1760.   # ● 制御文字の本体を破壊的に取得
  1761.   #--------------------------------------------------------------------------
  1762.   def obtain_escape_code(text)
  1763.     text.slice!(/^[\$\.\|\^!><\{\}\\]|^[A-Z]+/i)
  1764.   end
  1765.   #--------------------------------------------------------------------------
  1766.   # ● 制御文字の引数を破壊的に取得
  1767.   #--------------------------------------------------------------------------
  1768.   def obtain_escape_param(text)
  1769.     text.slice!(/^\[-?\d+\]/)[/-?\d+/].to_i rescue 0
  1770.   end
  1771.   #--------------------------------------------------------------------------
  1772.   # ●
  1773.   #--------------------------------------------------------------------------
  1774.   def obtain_escape_value(text, value)
  1775.     text.slice!(/^\[([+-]?)(\d+)\]/i)
  1776.     return value + $2.to_i if $1 == '+'
  1777.     return value - $2.to_i if $1 == '-'
  1778.     return $2.to_i
  1779.   end
  1780.   #--------------------------------------------------------------------------
  1781.   # ●
  1782.   #--------------------------------------------------------------------------
  1783.   def obtain_escape_picparam(text)
  1784.     return [] unless text.slice!(/^\[(.+?)\]/)
  1785.     params = $1.split(',')
  1786.     params.each {|s| s.strip! }
  1787.     return params
  1788.   end
  1789.   #--------------------------------------------------------------------------
  1790.   # ● 制御文字の処理
  1791.   #     code : 制御文字の本体部分(「\C[1]」なら「C」)
  1792.   #--------------------------------------------------------------------------
  1793.   def process_escape_character(code, text, pos)
  1794.     case code.upcase
  1795.     when 'C'
  1796.       change_color(text_color(obtain_escape_param(text)))
  1797.     when 'I'
  1798. #~       process_draw_icon(obtain_escape_param(text), pos)
  1799.       if text[/^\[\d+\]/]
  1800.         process_draw_icon(obtain_escape_param(text), pos)
  1801.       else
  1802.         process_draw_picture(obtain_escape_picparam(text))
  1803.       end
  1804.     when '{'
  1805.       make_font_bigger
  1806.     when '}'
  1807.       make_font_smaller
  1808.     when 'X'
  1809.       pos[:x] = obtain_escape_value(text, pos[:x])
  1810.     when 'Y'
  1811.       pos[:y] = obtain_escape_value(text, pos[:y])
  1812.     when 'L'
  1813.       process_draw_line(text, pos)
  1814.     end
  1815.   end
  1816.   #--------------------------------------------------------------------------
  1817.   # ● 制御文字によるライン描画の処理
  1818.   #--------------------------------------------------------------------------
  1819.   def process_draw_line(text, pos)
  1820.     if text.slice!(/^\[(\d+)\s*,\s*(\d+)(?:\s*,\s*([AFHTMBXS]+))?\]/i)
  1821.       x, y, w, h, params = pos[:x], pos[:y], $1.to_i, $2.to_i, ($3 || "")
  1822.       # 描画幅を文字サイズから (A:自動,F:全角,H:半角)
  1823.       case params
  1824.       when /A/i; w = text_size(text[0, w]).width
  1825.       when /F/i; w = text_size(" " * w).width
  1826.       when /H/i; w = text_size(" " * w).width
  1827.       end
  1828.       # 線の描画位置 (t:上,m:中,b:下, デフォルトは下)
  1829.       unless params[/T/i]
  1830.         if params[/M/i]
  1831.           y += (pos[:height] + h) / 2
  1832.         else
  1833.           y += pos[:height] - h
  1834.         end
  1835.       end
  1836.       # 影の描画
  1837.       if params[/S/i]
  1838.         w -= 1
  1839.         color = gauge_back_color
  1840.         color.alpha = translucent_alpha
  1841.         self.contents.fill_rect(x + 1, y + 1, w, h, color)
  1842.       end
  1843.       # 線の描画
  1844.       self.contents.fill_rect(x, y, w, h, self.contents.font.color)
  1845.       # x座標を進める
  1846.       x += w if params[/X/i]
  1847.     elsif text.slice!(/^\[([0-9, ]+?)(0x[0-9A-F]+)?\]/i)
  1848.       color = $2
  1849.       param = $1.sub(/, *$/, '').split(',').map {|s| s.to_i }
  1850.       if param.is_a?(Array) && param.size == 4
  1851.         if color
  1852.           draw_fill_rect(*param, str2color(color))
  1853.         else
  1854.           self.contents.fill_rect(*param, self.contents.font.color)
  1855.         end
  1856.       end
  1857.     end
  1858.   end
  1859.   #--------------------------------------------------------------------------
  1860.   # ● 制御文字によるアイコン描画の処理
  1861.   #--------------------------------------------------------------------------
  1862.   def process_draw_icon(icon_index, pos)
  1863.     draw_icon(icon_index, pos[:x], pos[:y] + (pos[:height] - 24) / 2)
  1864.     pos[:x] += 24
  1865.   end
  1866.   #--------------------------------------------------------------------------
  1867.   # ● 制御文字によるピクチャ描画の処理
  1868.   #--------------------------------------------------------------------------
  1869.   def process_draw_picture(params)
  1870.     return if params.empty?
  1871.     bitmap  = Cache.picture(params[0] || "")
  1872.     x       = (params[1] ||   0).to_i
  1873.     y       = (params[2] ||   0).to_i
  1874.     opacity = (params[3] || 255).to_i
  1875.     hue     = (params[4] ||   0).to_i
  1876.     if hue != 0
  1877.       bitmap = bitmap.dup
  1878.       bitmap.hue_change(hue)
  1879.     end
  1880.     contents.blt(x, y, bitmap, bitmap.rect, opacity)
  1881.   end
  1882.   #--------------------------------------------------------------------------
  1883.   # ● フォントを大きくする
  1884.   #--------------------------------------------------------------------------
  1885.   def make_font_bigger
  1886.     contents.font.size += 4 if contents.font.size <= 92
  1887.   end
  1888.   #--------------------------------------------------------------------------
  1889.   # ● フォントを小さくする
  1890.   #--------------------------------------------------------------------------
  1891.   def make_font_smaller
  1892.     contents.font.size -= 4 if contents.font.size >= 10
  1893.   end
  1894.   #--------------------------------------------------------------------------
  1895.   # ● 行の高さを計算
  1896.   #     restore_font_size : 計算後にフォントサイズを元に戻す
  1897.   #--------------------------------------------------------------------------
  1898.   def calc_line_height(text, restore_font_size = true)
  1899.     result = [line_height, contents.font.size].max
  1900.     last_font_size = contents.font.size
  1901.     text.slice(/^.*$/).scan(/\e[\{\}]/).each do |esc|
  1902.       make_font_bigger  if esc == "\e{"
  1903.       make_font_smaller if esc == "\e}"
  1904.       result = [result, contents.font.size].max
  1905.     end
  1906.     contents.font.size = last_font_size if restore_font_size
  1907.     result
  1908.   end
  1909.   #--------------------------------------------------------------------------
  1910.   # ●
  1911.   #--------------------------------------------------------------------------
  1912.   def draw_fill_rect(x, y, width, height, color)
  1913.     bitmap = Bitmap.new(width, height)
  1914.     bitmap.fill_rect(bitmap.rect, color)
  1915.     self.contents.blt(x, y, bitmap, bitmap.rect)
  1916.     bitmap.dispose
  1917.   end
  1918.   #--------------------------------------------------------------------------
  1919.   # ● ゲージの描画
  1920.   #     rate   : 割合(1.0 で満タン)
  1921.   #     color1 : グラデーション 左端
  1922.   #     color2 : グラデーション 右端
  1923.   #--------------------------------------------------------------------------
  1924.   def draw_gauge(x, y, width, rate, color1, color2)
  1925.     fill_w = (width * rate).to_i
  1926.     gauge_y = y + line_height - 8
  1927.     contents.fill_rect(x, gauge_y, width, 6, gauge_back_color)
  1928.     contents.gradient_fill_rect(x, gauge_y, fill_w, 6, color1, color2)
  1929.   end
  1930.   #--------------------------------------------------------------------------
  1931.   # ● アイコンの描画
  1932.   #--------------------------------------------------------------------------
  1933.   def draw_icon(icon_index, x, y, enabled = true)
  1934.     bitmap = Cache.system("Iconset")
  1935.     rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  1936.     contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
  1937.   end
  1938.   #--------------------------------------------------------------------------
  1939.   # ● 顔グラフィックの描画
  1940.   #--------------------------------------------------------------------------
  1941.   def draw_face(face_name, face_index, x, y, size = 96, enabled = true)
  1942.     bitmap = Cache.face(face_name)
  1943.     dest_rect = Rect.new(x, y, 96, 96)
  1944.     src_rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96)
  1945.     opacity = enabled ? 255 : translucent_alpha
  1946.    
  1947.     case size
  1948.     when Integer
  1949.       src_rect.x += (96 - size) / 2
  1950.       src_rect.y += (96 - size) / 2
  1951.       src_rect.width = size
  1952.       src_rect.height = size
  1953.       contents.blt(x, y, bitmap, src_rect, opacity)
  1954.     when Array
  1955.       case size.size
  1956.       when 1
  1957.         dest_rect.width, dest_rect.height = size[0], size[0]
  1958.       when 2
  1959.         dest_rect.width, dest_rect.height = size[0], size[1]
  1960.       when 4
  1961.         dest_rect.width, dest_rect.height = size[2], size[3]
  1962.         src_rect.width, src_rect.height = size[2], size[3]
  1963.         src_rect.x, src_rect.y = src_rect.x + size[0], src_rect.y + size[1]
  1964.       else
  1965.         raise "wrong number of elements (#{size.size} of 2)"
  1966.       end
  1967.       contents.stretch_blt(dest_rect, bitmap, src_rect, opacity)
  1968.     else
  1969.       raise TypeError,
  1970.         "wrong argument type #{size.class} (expected Integer or Array)"
  1971.     end
  1972.   end
  1973.   #--------------------------------------------------------------------------
  1974.   # ● 歩行グラフィックの描画
  1975.   #--------------------------------------------------------------------------
  1976.   def draw_character(character_name, character_index, x, y)
  1977.     return unless character_name
  1978.     bitmap = Cache.character(character_name)
  1979.     sign = character_name[/^[\!\$]./]
  1980.     if sign && sign.include?('
  1981. 请问这要怎么解决?感谢。
  1982. )
  1983.       cw = bitmap.width / 3
  1984.       ch = bitmap.height / 4
  1985.     else
  1986.       cw = bitmap.width / 12
  1987.       ch = bitmap.height / 8
  1988.     end
  1989.     n = character_index
  1990.     src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
  1991.     contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
  1992.   end
  1993.   #--------------------------------------------------------------------------
  1994.   # ● HP の文字色を取得
  1995.   #--------------------------------------------------------------------------
  1996.   def hp_color(actor)
  1997.     return knockout_color if actor.hp == 0
  1998.     return crisis_color if actor.hp < actor.mhp / 4
  1999.     return normal_color
  2000.   end
  2001.   #--------------------------------------------------------------------------
  2002.   # ● MP の文字色を取得
  2003.   #--------------------------------------------------------------------------
  2004.   def mp_color(actor)
  2005.     return crisis_color if actor.mp < actor.mmp / 4
  2006.     return normal_color
  2007.   end
  2008.   #--------------------------------------------------------------------------
  2009.   # ● TP の文字色を取得
  2010.   #--------------------------------------------------------------------------
  2011.   def tp_color(actor)
  2012.     return normal_color
  2013.   end
  2014.   #--------------------------------------------------------------------------
  2015.   # ● アクターの歩行グラフィック描画
  2016.   #--------------------------------------------------------------------------
  2017.   def draw_actor_graphic(actor, x, y)
  2018.     draw_character(actor.character_name, actor.character_index, x, y)
  2019.   end
  2020.   #--------------------------------------------------------------------------
  2021.   # ● アクターの顔グラフィック描画
  2022.   #--------------------------------------------------------------------------
  2023.   def draw_actor_face(actor, x, y, size = 96)
  2024.     draw_face(actor.face_name, actor.face_index, x, y, size)
  2025.   end
  2026.   #--------------------------------------------------------------------------
  2027.   # ● アクターの表情グラフィック描画
  2028.   #--------------------------------------------------------------------------
  2029.   def draw_actor_expression(actor, x, y, size = 96)
  2030.     draw_face(actor.face_name, actor.expression_index, x, y, size)
  2031.   end
  2032.   #--------------------------------------------------------------------------
  2033.   # ● 歩行アイコンの描画
  2034.   #     enabled : 有効フラグ。false のとき半透明で描画
  2035.   #--------------------------------------------------------------------------
  2036.   def draw_actor_icon(actor, x, y, enabled = true)
  2037.     return unless actor
  2038.     self.contents.fill_rect(x, y, 24, 24, COLOR_AIB_1)
  2039.     self.contents.fill_rect(x + 1, y + 1, 22, 22, COLOR_AIB_2)
  2040.     return unless actor.character_name
  2041.     return if actor.character_name.empty?
  2042.     bitmap = Cache.character(actor.character_name)
  2043.     sign = actor.character_name[/^[\!\$]./]
  2044.     if sign != nil and sign.include?('
  2045. 请问这要怎么解决?感谢。
  2046. )
  2047.       cw = bitmap.width / 3
  2048.       ch = bitmap.height / 4
  2049.     else
  2050.       cw = bitmap.width / 12
  2051.       ch = bitmap.height / 8
  2052.     end
  2053.     n = actor.character_index
  2054.     src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, 20, 20)
  2055.     src_rect.x += (cw - src_rect.width) / 2
  2056.     src_rect.y += (ch - src_rect.height) / 4
  2057.     opacity = (enabled ? 255 : translucent_alpha)
  2058.     self.contents.blt(x + 2, y + 2, bitmap, src_rect, opacity)
  2059.   end
  2060.   #--------------------------------------------------------------------------
  2061.   # ● 立ち絵の描画
  2062.   #--------------------------------------------------------------------------
  2063.   def draw_actor_portrait(actor, x, y, enabled = true)
  2064.     return unless actor
  2065.     bitmap = Cache.picture(actor.portrait_name)
  2066.     opacity = (enabled ? 255 : translucent_alpha)
  2067.     self.contents.blt(x, y, bitmap, bitmap.rect, opacity)
  2068.   end
  2069.   #--------------------------------------------------------------------------
  2070.   # ● の描画
  2071.   #     [:pict, x, y, "file", "script"]
  2072.   #     [:pict, x, y, ["file","file"], "script"]
  2073.   #--------------------------------------------------------------------------
  2074.   def draw_actor_picture(actor, x, y, file, script = nil)
  2075.     return unless actor
  2076.     battler, alternate = file
  2077.     if script
  2078.       filename = (eval(script) ? battler : alternate)
  2079.     else
  2080.       filename = (actor.battle_member? ? battler : alternate) || battler
  2081.     end
  2082.     if filename && !filename.empty?
  2083.       bitmap = Cache.picture(filename % actor.id)
  2084.       self.contents.blt(x, y, bitmap, bitmap.rect)
  2085.     end
  2086.   end
  2087.   #--------------------------------------------------------------------------
  2088.   # ● の描画
  2089.   #--------------------------------------------------------------------------
  2090.   def draw_actor_text(actor, x, y, text, script = nil)
  2091.     return if script && !eval(script)
  2092.     draw_text_ex(x, y, text.gsub(/\\{(\w+?)}/) { actor.__send__($1) })
  2093.   end
  2094.   #--------------------------------------------------------------------------
  2095.   # ● の描画
  2096.   #--------------------------------------------------------------------------
  2097.   def draw_actor_number(actor, x, y, num, file)
  2098.     bitmap = Cache.picture(file)
  2099.     r_num = Rect.new(0, 0, bitmap.width / 13, bitmap.height)
  2100.     param = String(num.is_a?(String) ? eval(num) : num)
  2101.     param.split(//).each_with_index do |c,i|
  2102.       case c
  2103.       when ' ';   next
  2104.       when '+';   index = 10
  2105.       when '-';   index = 11
  2106.       when /\d/;  index = Integer(c)
  2107.       else;       index = 12
  2108.       end
  2109.       r_num.x = r_num.width * index
  2110.       self.contents.blt(x + r_num.width * i, y, bitmap, r_num)
  2111.     end
  2112.   end
  2113.   #--------------------------------------------------------------------------
  2114.   # ● 名前の描画
  2115.   #--------------------------------------------------------------------------
  2116.   def draw_actor_name(actor, x, y, width = 124)
  2117.     change_color(hp_color(actor))
  2118.     draw_text(x, y, width, line_height, actor.name)
  2119.   end
  2120.   #--------------------------------------------------------------------------
  2121.   # ● 職業の描画
  2122.   #--------------------------------------------------------------------------
  2123.   def draw_actor_class(actor, x, y, width = 124)
  2124.     change_color(normal_color)
  2125.     draw_text(x, y, width, line_height, actor.class.name)
  2126.   end
  2127.   #--------------------------------------------------------------------------
  2128.   # ● 二つ名の描画
  2129.   #--------------------------------------------------------------------------
  2130.   def draw_actor_nickname(actor, x, y, width = 124)
  2131.     change_color(normal_color)
  2132.     draw_text(x, y, width, line_height, actor.nickname)
  2133.   end
  2134.   #--------------------------------------------------------------------------
  2135.   # ● レベルの描画
  2136.   #--------------------------------------------------------------------------
  2137.   def draw_actor_level(actor, x, y, width = 64)
  2138.     if VISIBLE_SYSTEM
  2139.       change_color(system_color)
  2140.       draw_text(x, y, 32, line_height, Vocab::level_a)
  2141.     end
  2142.     change_color(normal_color)
  2143.     draw_text(x + width - 32, y, 32, line_height, actor.level, 2)
  2144.   end
  2145.   #--------------------------------------------------------------------------
  2146.   # ● レベルの描画 (経験値ゲージ付)
  2147.   #--------------------------------------------------------------------------
  2148.   def draw_actor_level_g(actor, x, y, width = 64)
  2149.     draw_gauge(x,y,width,actor.cm_exp_rate,exp_gauge_color1,exp_gauge_color2)
  2150.     if VISIBLE_SYSTEM
  2151.       change_color(system_color)
  2152.       draw_text(x, y, 32, line_height, Vocab::level_a)
  2153.     end
  2154.     change_color(tp_color(actor))
  2155.     draw_text(x + width - 32, y, 32, line_height, actor.level, 2)
  2156.   end
  2157.   #--------------------------------------------------------------------------
  2158.   # ● ステートおよび強化/弱体のアイコンを描画
  2159.   #--------------------------------------------------------------------------
  2160.   def draw_actor_icons(actor, x, y, width = 96, align = 0)
  2161.     icons = (actor.state_icons + actor.buff_icons)[0, width / 24]
  2162.     case align
  2163.     when 0; left = 0
  2164.     when 1; left = (width - icons.size * 24) / 2
  2165.     when 2; left = (width - icons.size * 24)
  2166.     end
  2167.     icons.each_with_index {|n, i| draw_icon(n, x + left + 24 * i, y) }
  2168.   end
  2169.   #--------------------------------------------------------------------------
  2170.   # ● 現在値/最大値を分数形式で描画
  2171.   #--------------------------------------------------------------------------
  2172.   def draw_current_and_max_values(x, y, width, current, max, color1, color2)
  2173.     change_color(color1)
  2174.     xr = x + width
  2175.     if width < 96
  2176.       draw_text(xr - 40, y, 42, line_height, current, 2)
  2177.     else
  2178.       draw_text(xr - 92, y, 42, line_height, current, 2)
  2179.       change_color(color2)
  2180.       draw_text(xr - 52, y, 12, line_height, "/", 2)
  2181.       draw_text(xr - 42, y, 42, line_height, max, 2)
  2182.     end
  2183.   end
  2184.   #--------------------------------------------------------------------------
  2185.   # ● HP の描画
  2186.   #--------------------------------------------------------------------------
  2187.   def draw_actor_hp(actor, x, y, width = 124)
  2188.     draw_gauge(x, y, width, actor.hp_rate, hp_gauge_color1, hp_gauge_color2)
  2189.     if VISIBLE_SYSTEM
  2190.       change_color(system_color)
  2191.       draw_text(x, y, 30, line_height, Vocab::hp_a)
  2192.     end
  2193.     draw_current_and_max_values(x, y, width, actor.hp, actor.mhp,
  2194.       hp_color(actor), normal_color)
  2195.   end
  2196.   #--------------------------------------------------------------------------
  2197.   # ● MP の描画
  2198.   #--------------------------------------------------------------------------
  2199.   def draw_actor_mp(actor, x, y, width = 124)
  2200.     draw_gauge(x, y, width, actor.mp_rate, mp_gauge_color1, mp_gauge_color2)
  2201.     if VISIBLE_SYSTEM
  2202.       change_color(system_color)
  2203.       draw_text(x, y, 30, line_height, Vocab::mp_a)
  2204.     end
  2205.     draw_current_and_max_values(x, y, width, actor.mp, actor.mmp,
  2206.       mp_color(actor), normal_color)
  2207.   end
  2208.   #--------------------------------------------------------------------------
  2209.   # ● TP の描画
  2210.   #--------------------------------------------------------------------------
  2211.   def draw_actor_tp(actor, x, y, width = 124)
  2212.     draw_gauge(x, y, width, actor.tp_rate, tp_gauge_color1, tp_gauge_color2)
  2213.     if VISIBLE_SYSTEM
  2214.       change_color(system_color)
  2215.       draw_text(x, y, 30, line_height, Vocab::tp_a)
  2216.     end
  2217.     change_color(tp_color(actor))
  2218.     draw_text(x + width - 42, y, 42, line_height, actor.tp.to_i, 2)
  2219.   end
  2220.   #--------------------------------------------------------------------------
  2221.   # ● 経験値の描画
  2222.   #--------------------------------------------------------------------------
  2223.   def draw_actor_exp(actor, x, y, width = 124)
  2224.     draw_gauge(x, y, width, actor.cm_exp_rate,
  2225.       exp_gauge_color1, exp_gauge_color2)
  2226.     if VISIBLE_SYSTEM
  2227.       change_color(system_color)
  2228.       draw_text(x, y, width, line_height, VOCABS[:exp_a])
  2229.     end
  2230.     change_color(normal_color)
  2231.     draw_text(x, y, width, line_height, actor.cm_remaining_exp, 2)
  2232.   end
  2233.   #--------------------------------------------------------------------------
  2234.   # ● 経験値情報の描画
  2235.   #--------------------------------------------------------------------------
  2236.   def draw_actor_exp_info(actor, x, y, width = 124)
  2237.     s1 = actor.max_level? ? "-------" : actor.exp
  2238.     s2 = actor.max_level? ? "-------" : actor.cm_remaining_exp
  2239.     s_next = sprintf(Vocab::ExpNext, Vocab::level)
  2240.     change_color(system_color)
  2241.     draw_text(x, y + line_height * 0, 180, line_height, Vocab::ExpTotal)
  2242.     draw_text(x, y + line_height * 2, 180, line_height, s_next)
  2243.     change_color(normal_color)
  2244.     draw_text(x, y + line_height * 1, 180, line_height, s1, 2)
  2245.     draw_text(x, y + line_height * 3, 180, line_height, s2, 2)
  2246.   end
  2247.   #--------------------------------------------------------------------------
  2248.   # ● 能力値の描画
  2249.   #--------------------------------------------------------------------------
  2250.   def draw_actor_param(actor, x, y, param_id, width = 124)
  2251.     if param_id < 0 || param_id > 7
  2252.       raise ArgumentError, "能力値の ID は 0 から 7 までの数値です。"
  2253.     end
  2254.     if VISIBLE_SYSTEM
  2255.       change_color(system_color)
  2256.       draw_text(x, y, width, line_height, Vocab::param(param_id))
  2257.     end
  2258.     change_color(normal_color)
  2259.     draw_text(x, y, width, line_height, actor.param(param_id), 2)
  2260.   end
  2261.   #--------------------------------------------------------------------------
  2262.   # ● 矩形の描画
  2263.   #--------------------------------------------------------------------------
  2264.   def draw_actor_rect(actor, x, y, w, h, color, script = nil)
  2265.     return if script && !eval(script)
  2266.     draw_fill_rect(x, y, w, h, str2color(color))
  2267.   end
  2268.   #--------------------------------------------------------------------------
  2269.   # ● アイテム名の描画
  2270.   #--------------------------------------------------------------------------
  2271.   def draw_item_name(item, x, y, width = 172, enabled = true)
  2272.     return unless item
  2273.     draw_icon(item.icon_index, x, y, enabled)
  2274.     change_color(normal_color, enabled)
  2275.     draw_text(x + 24, y, width, line_height, item.name)
  2276.   end
  2277.   #--------------------------------------------------------------------------
  2278.   # ● 通貨単位つき数値(所持金など)の描画
  2279.   #--------------------------------------------------------------------------
  2280.   def draw_currency_value(value, name, unit, x, y, width)
  2281.     cx = text_size(unit).width
  2282.     change_color(normal_color)
  2283.     draw_text(x, y, width - cx - 2, line_height, value, 2)
  2284.     if VISIBLE_SYSTEM
  2285.       change_color(system_color)
  2286.       draw_text(x, y, width, line_height, name)
  2287.       draw_text(x, y, width, line_height, unit, 2)
  2288.     end
  2289.   end
  2290.   #--------------------------------------------------------------------------
  2291.   # ● 通貨単位つき数値(所持金など)の描画
  2292.   #--------------------------------------------------------------------------
  2293.   def draw_gold(x, y, width)
  2294.     draw_currency_value(
  2295.       $game_party.gold, VOCABS[:gold], Vocab::currency_unit, x, y, width)
  2296.   end
  2297. end
复制代码

请问这要怎么解决?感谢。
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1122
在线时间
26 小时
注册时间
2021-2-19
帖子
30
5
发表于 2021-8-12 22:51:31 | 只看该作者
t0004980 发表于 2021-8-12 22:32
我还想请问一下,因为我有使用别的菜单脚本
所以会出现菜单主画面没变,但是状态却显示改变了。

我的脚本有放他下面吗,而且你这脚本少了几段好像
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
282
在线时间
61 小时
注册时间
2014-2-9
帖子
14
6
 楼主| 发表于 2021-8-13 02:00:31 | 只看该作者
yaminolancelot 发表于 2021-8-12 22:51
我的脚本有放他下面吗,而且你这脚本少了几段好像

我有放在下面了,不然我直接工程给你看?
谢谢,不好意思麻烦了。
链接: https://pan.baidu.com/s/1ID09Z5eCy3iDVVs30mPaMw 提取码: ceyn
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
282
在线时间
61 小时
注册时间
2014-2-9
帖子
14
7
 楼主| 发表于 2021-8-13 10:00:23 | 只看该作者
本帖最后由 t0004980 于 2021-8-13 10:15 编辑


不好意思我又来了,如果我想把状态跟装备的能力值也隐藏起来的话,同时别的角色也不会遭到影响出错。要怎么做呢?
(我照着您的脚本试着重新编辑,但是切换到别的角色的时后会出错。)
  1. def draw_actor_param(actor, x, y, param_id)
  2.     if YAMI_NEED2HIDE.include?(actor.actor.id)
  3.       draw_text(x, y, text_size(YAMI_REPLACE_TEXT).width * 2, line_height, YAMI_REPLACE_TEXT)
  4.       return
  5.     end   
  6.     yami_draw_actor_param(actor, x, y, width)
  7.   end
复制代码


麻烦了谢谢。
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1122
在线时间
26 小时
注册时间
2021-2-19
帖子
30
8
发表于 2021-8-13 19:49:25 | 只看该作者
t0004980 发表于 2021-8-13 10:00
不好意思我又来了,如果我想把状态跟装备的能力值也隐藏起来的话,同时别的角色也不会遭到影响出错。要怎 ...

你参数得对上啊
  1.   def draw_actor_param(*args)
  2.     if YAMI_NEED2HIDE.include?(args[0].actor.id)
  3.       draw_text(args[1], args[2], text_size(YAMI_REPLACE_TEXT).width * 2, line_height, YAMI_REPLACE_TEXT)
  4.       return
  5.     end   
  6.     yami_draw_actor_param(*args)
  7.   end
复制代码
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 23:27

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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