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

Project1

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

[已经解决] 如何同时出现两个对话框?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1019 小时
注册时间
2012-4-25
帖子
799
跳转到指定楼层
1
发表于 2012-10-28 10:07:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
比如制造两个人异口同声的时候,没有头像的简单,就用文字说明,但如果平常有头像突然间没有头像,就会很别扭。

最好是上下同时出现。

Lv1.梦旅人

梦石
0
星屑
50
在线时间
56 小时
注册时间
2012-6-23
帖子
156
2
发表于 2012-10-28 11:39:09 | 只看该作者
你i把两个头像PS一下放在一起,然后出现一个对话框:
【人物1&人物2】
『消息内容』
效果还是不错的。头像PS挤在一起就可以了,不会的话发上来我帮你PS

点评

同时出现对话框的话你可以试试看并行事件……我没有试过。  发表于 2012-10-28 15:57
多谢建议,这个我自己也做得到。不过可以的话我还是不想这样,因为每一次都要PS一次,感觉有些麻烦。  发表于 2012-10-28 12:41
http://SRKF.tk 暗影の森,只属于自己的一片森林。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22963
在线时间
8639 小时
注册时间
2011-12-31
帖子
3367
3
发表于 2012-10-29 19:43:21 | 只看该作者
A1的劇本可做到
ネームウィンドウ

http://a1tktk.web.fc2.com/scripts_page/name_window.html

点评

抱歉,打不开呢。  发表于 2012-10-29 21:17
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22963
在线时间
8639 小时
注册时间
2011-12-31
帖子
3367
4
发表于 2012-10-29 23:02:06 | 只看该作者
スクリプト本体

  1. #===========================================================================
  2. # ◆ A1 Scripts ◆
  3. #    ネームウィンドウ(RGSS2/RGSS3共用)
  4. #
  5. # バージョン   : 2.40 (2012/01/19)
  6. # 作者         : A1
  7. # URL     : http://a1tktk.web.fc2.com/
  8. #---------------------------------------------------------------------------
  9. # 機能:
  10. # ・ネームウィンドウを表示します
  11. #---------------------------------------------------------------------------
  12. # 更新履歴   :2011/12/15 Ver1.00 リリース
  13. #            :2011/12/29 Ver1.10 アクター名表示対応
  14. #            :2011/12/30 Ver2.00 左右顔グラフィック対応
  15. #            :2011/12/30 Ver2.00 表示位置「上」対応
  16. #            :2011/12/30 Ver2.10 RGSS2対応
  17. #            :2011/12/30 Ver2.11 名前が切り替わる度にウィンドウを閉じる不具合を修正
  18. #            :2012/01/02 Ver2.20 同じ顔グラフィックの別名表示機能追加
  19. #            :2012/01/02 Ver2.20 表示名の直接指定機能追加
  20. #            :2012/01/02 Ver2.30 A1共通スクリプトVer3.30対応
  21. #            :2012/01/19 Ver2.40 バトルネームウィンドウ対応
  22. #---------------------------------------------------------------------------
  23. # 設置場所      
  24. #  A1共通スクリプトより下
  25. #  (左右顔グラフィックスクリプトより下)
  26. #
  27. # 必要スクリプト
  28. #    A1共通スクリプトVer3.30以上
  29. #---------------------------------------------------------------------------
  30. # 使い方
  31. # 設定項目を設定します
  32. # 
  33. #   設定項目の「表示する名前」を Actor[ID] とすると
  34. #   IDで指定したアクターの名前を表示します
  35. # 
  36. # イベントコマンド「注釈」に記述
  37. #
  38. #  ネームウィンドウ on|off
  39. #      表示の on/off を切り替えます
  40. #
  41. #    NWインデックス index
  42. #      同じ顔グラフィックに複数の名前を配列で登録している場合
  43. #      次に表示するネームウィンドウを指定した index の名前を使用します
  44. #      省略時には 0番目 の名前を使用します
  45. #
  46. #    NW名前指定 Name
  47. #      次に表示するネームウィンドウに Name を使用します
  48. #      顔グラフィックなしでも表示されます
  49. #==============================================================================
  50. $imported ||= {}
  51. $imported["A1_Name_Window"] = true
  52. if $imported["A1_Common_Script"]
  53. old_common_script("ネームウィンドウ", "3.30") if common_version < 3.30
  54. #==============================================================================
  55. # ■ 設定項目
  56. #==============================================================================
  57. module A1_System::NameWindow

  58.   #--------------------------------------------------------------------------
  59.   # ネームウィンドウを使用するクラス
  60.   #--------------------------------------------------------------------------
  61.   USE_NAME_WINDOW_CLASS = [Window_Message]
  62.   
  63.   #--------------------------------------------------------------------------
  64.   # ネームウィンドウのフォント
  65.   #--------------------------------------------------------------------------
  66.   NAME_FONT = "UmePlus Gothic"
  67.   
  68.   #--------------------------------------------------------------------------
  69.   # 長い名前の時に左(右)に寄せる
  70.   #--------------------------------------------------------------------------
  71.   FIX_LONG_NAME = false
  72.   
  73.   #--------------------------------------------------------------------------
  74.   # 顔グラフィックと名前の対応
  75.   #
  76.   #  "[ファイル名]_[Index]" => "表示する名前" ※Index毎に設定
  77.   #  "[ファイル名]"         => "表示する名前" ※該当ファイル全てに適用
  78.   #                            "Actor[ID]"    ※該当するIDのアクター名を表示
  79.   #--------------------------------------------------------------------------
  80.   NAME_LIST = {
  81.     "Actor4_0"    => "エリック",
  82.     "Actor4_4"    => "アーネスト",
  83.     "Actor4_5"    => "ティファ",
  84.   }
  85. end
  86. #==============================================================================
  87. # ■ Cache
  88. #------------------------------------------------------------------------------
  89. #  各種グラフィックを読み込み、Bitmap オブジェクトを作成、保持するモジュール
  90. # です。読み込みの高速化とメモリ節約のため、作成した Bitmap オブジェクトを内部
  91. # のハッシュに保存し、同じビットマップが再度要求されたときに既存のオブジェクト
  92. # を返すようになっています。
  93. #==============================================================================

  94. module Cache
  95.   #--------------------------------------------------------------------------
  96.   # ○ ネームウィンドウ用ビットマップの取得
  97.   #--------------------------------------------------------------------------
  98.   def self.name_bitmap(name)
  99.     return load_name_bitmap(name)
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ○ 名前bitmapの作成
  103.   #--------------------------------------------------------------------------
  104.   def self.load_name_bitmap(name)
  105.     @cache ||= {}
  106.     key = [name, "name_window"]
  107.     return @cache[key] if include?(key)
  108.    
  109.     # 計算用ダミービットマップ
  110.     bitmap = Cache.system("")
  111.     bitmap.font.name = A1_System::NameWindow::NAME_FONT
  112.     bitmap.font.size = 16
  113.     tw = bitmap.text_size(name).width + 8
  114.    
  115.     # ビットマップ作成
  116.     bitmap = Bitmap.new(tw, bitmap.font.size + 4)
  117.     bitmap.font.name = A1_System::NameWindow::NAME_FONT
  118.     bitmap.font.size = 16
  119.     bitmap.font.color = Color.new(255,255,255)
  120.     bitmap.draw_text(0, 0, bitmap.width, bitmap.height, name, 1)
  121.    
  122.     @cache[key] = bitmap
  123.     return @cache[key]
  124.   end
  125. end
  126. #==============================================================================
  127. # ■ Window_FaceName
  128. #==============================================================================

  129. class Window_FaceName < Window_Base
  130.   #--------------------------------------------------------------------------
  131.   # ○ オブジェクト初期化
  132.   #--------------------------------------------------------------------------
  133.   def initialize(name, z)
  134.     info = create_name_sprite(name)
  135.     super(0, 0, info[0], info[1])
  136.     self.visible = true
  137.     self.openness = 0
  138.     self.z = z
  139.     skin = Cache.system("Window").clone
  140.     skin.clear_rect(80, 16, 32, 32)
  141.     self.windowskin = skin
  142.     @name_sprite.z = self.z + 10
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ○ ネームウィンドウのセットアップ
  146.   #--------------------------------------------------------------------------
  147.   def setup_name_window(name)
  148.     info = create_name_sprite(name)
  149.     self.width  = info[0]
  150.     self.height = info[1]
  151.     create_contents
  152.     @name_sprite.z = self.z + 10
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ○ フレーム更新
  156.   #--------------------------------------------------------------------------
  157.   def update
  158.     super
  159.     @name_sprite.visible = self.visible && self.open?
  160.     return unless self.open?
  161.     @name_sprite.update
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ○ 解放
  165.   #--------------------------------------------------------------------------
  166.   def dispose
  167.     @name_sprite.bitmap.dispose
  168.     @name_sprite.dispose
  169.     super
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ○ ウィンドウを開く
  173.   #--------------------------------------------------------------------------
  174.   def open
  175.     super
  176.     @name_sprite.x = self.x + self.width / 2
  177.     @name_sprite.y = self.y + self.height / 2
  178.   end
  179.   #--------------------------------------------------------------------------
  180.   # ○ スプライトの作成
  181.   #--------------------------------------------------------------------------
  182.   def create_name_sprite(name)
  183.     # ビットマップの取得
  184.     bitmap = Cache.name_bitmap(name)
  185.    
  186.     # スプライト設定
  187.     @name_sprite         = Sprite.new
  188.     @name_sprite.bitmap  = bitmap
  189.     @name_sprite.ox      = bitmap.width / 2
  190.     @name_sprite.oy      = bitmap.height / 2
  191.     @name_sprite.visible = false
  192.    
  193.     return [bitmap.width + 8, bitmap.height + 8]
  194.   end
  195. end
  196. #==============================================================================
  197. # ■ Window_Base
  198. #------------------------------------------------------------------------------
  199. #  ゲーム中のすべてのウィンドウのスーパークラスです。
  200. #==============================================================================

  201. class Window_Base < Window
  202.   #--------------------------------------------------------------------------
  203.   # ☆ オブジェクト初期化
  204.   #--------------------------------------------------------------------------
  205.   alias a1_name_window_window_base_initialize initialize
  206.   def initialize(x, y, width, height)
  207.     a1_name_window_window_base_initialize(x, y, width, height)
  208.     create_name_window
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ☆ フレーム更新
  212.   #--------------------------------------------------------------------------
  213.   alias a1_name_window_window_base_update update
  214.   def update
  215.     a1_name_window_window_base_update
  216.     update_name_window
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ☆ 顔グラフィックの描画
  220.   #--------------------------------------------------------------------------
  221.   alias a1_name_window_window_base_draw_face draw_face
  222.   def draw_face(face_name, face_index, x, y, size = 96)
  223.     a1_name_window_window_base_draw_face(face_name, face_index, x, y, size)
  224.     show_name_window(face_name, face_index, x, size)
  225.   end
  226.   #--------------------------------------------------------------------------
  227.   # ☆ ウィンドウを閉じる
  228.   #--------------------------------------------------------------------------
  229.   alias a1_name_window_window_base_close close
  230.   def close
  231.     a1_name_window_window_base_close
  232.   end
  233.   #--------------------------------------------------------------------------
  234.   # ☆ 解放
  235.   #--------------------------------------------------------------------------
  236.   alias a1_name_window_window_base_dispose dispose
  237.   def dispose
  238.     a1_name_window_window_base_dispose
  239.     dispose_name_window
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ○ ネームウィンドウの解放
  243.   #--------------------------------------------------------------------------
  244.   def dispose_name_window
  245.     @name_windows.values.each {|window| window.dispose }
  246.   end
  247.   #--------------------------------------------------------------------------
  248.   # ○ ネームウィンドウの更新
  249.   #--------------------------------------------------------------------------
  250.   def update_name_window
  251.     @name_windows.values.each {|window| window.update }
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   # ○ ネームウィンドウを使用?
  255.   #--------------------------------------------------------------------------
  256.   def use_name_window?
  257.     A1_System::NameWindow::USE_NAME_WINDOW_CLASS.each {|clas| return true if self.is_a?(clas) }
  258.     return false
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ○ ネームウィンドウの作成
  262.   #--------------------------------------------------------------------------
  263.   def create_name_window
  264.     @name_windows = {}
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ○ 表示する名前の取得
  268.   #--------------------------------------------------------------------------
  269.   def show_name(face_name, face_index)
  270.     return nil unless $game_system.use_name_window
  271.     name = $game_temp.direct_show_name
  272.     if name.empty?
  273.       return nil if face_name == nil || face_name.empty?
  274.       name = A1_System::NameWindow::NAME_LIST[sprintf("%s_%d", face_name, face_index)]
  275.       name = A1_System::NameWindow::NAME_LIST[face_name] if name == nil
  276.       name = name[$game_temp.name_index] if name.is_a?(Array)
  277.       name = $game_actors[$1.to_i].name if name =~ /Actor\[(\d+)\]/
  278.     end
  279.     $game_temp.name_index       = 0
  280.     $game_temp.direct_show_name = ""
  281.     return name
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # ○ ネームウィンドウの表示
  285.   #--------------------------------------------------------------------------
  286.   def show_name_window(face_name, face_index, x, size = 96)
  287.     return unless use_name_window?
  288.     name = show_name(face_name, face_index)
  289.     return if name == nil or name.empty?
  290.     @name_windows[name] ||= Window_FaceName.new(name, self.z + 10)
  291.     if x <= Graphics.width / 2
  292.       @name_windows[name].x = x + size + 20
  293.       @name_windows[name].x = 0 if @name_windows[name].x + @name_windows[name].width > Graphics.width / 2 and A1_System::NameWindow::FIX_LONG_NAME
  294.     else
  295.       @name_windows[name].x = Graphics.width - size - @name_windows[name].width
  296.       @name_windows[name].x = Graphics.width - @name_windows[name].width if @name_windows[name].x < Graphics.width / 2 and A1_System::NameWindow::FIX_LONG_NAME
  297.     end
  298.     @name_windows[name].y = self.y      - 16 if self.y  > 0
  299.     @name_windows[name].y = self.height - 16 if self.y == 0
  300.     @name_windows[name].openness = 255 if self.open?
  301.     @name_windows[name].open
  302.     @name_windows[name].visible = true
  303.   end
  304.   #--------------------------------------------------------------------------
  305.   # ○ ネームウィンドウを閉じる
  306.   #--------------------------------------------------------------------------
  307.   def name_window_close
  308.     @name_windows.values.each {|window| window.close }
  309.   end
  310.   #--------------------------------------------------------------------------
  311.   # ○ ネームウィンドウを非表示
  312.   #--------------------------------------------------------------------------
  313.   def name_window_visible_false
  314.     @name_windows.values.each {|window| window.visible = false }
  315.   end
  316. end
  317. #==============================================================================
  318. # ■ Window_Message
  319. #------------------------------------------------------------------------------
  320. #  文章表示に使うメッセージウィンドウです。
  321. #==============================================================================

  322. class Window_Message
  323.   #--------------------------------------------------------------------------
  324.   # ○ ウィンドウを閉じる
  325.   #--------------------------------------------------------------------------
  326.   def close
  327.     name_window_close
  328.     super
  329.   end
  330. end
  331. #==============================================================================
  332. # ◆ RGSS3用処理
  333. #==============================================================================
  334. if rgss_version == 3
  335. #==============================================================================
  336. # ■ Window_Message
  337. #------------------------------------------------------------------------------
  338. #  文章表示に使うメッセージウィンドウです。
  339. #==============================================================================

  340. class Window_Message < Window_Base
  341.   #--------------------------------------------------------------------------
  342.   # ☆ 改ページ処理
  343.   #--------------------------------------------------------------------------
  344.   alias a1_name_window_window_message_new_page new_page
  345.   def new_page(text, pos)
  346.     name_window_visible_false
  347.     a1_name_window_window_message_new_page(text, pos)
  348.   end
  349. end
  350. #==============================================================================
  351. # ◆ RGSS2用処理
  352. #==============================================================================
  353. elsif rgss_version == 2
  354. #==============================================================================
  355. # ■ Window_Message
  356. #------------------------------------------------------------------------------
  357. #  文章表示に使うメッセージウィンドウです。
  358. #==============================================================================

  359. class Window_Message < Window_Selectable
  360.   #--------------------------------------------------------------------------
  361.   # ☆ 改ページ処理
  362.   #--------------------------------------------------------------------------
  363.   alias a1_name_window_window_message_new_page new_page
  364.   def new_page
  365.     name_window_visible_false
  366.     a1_name_window_window_message_new_page
  367.   end
  368. end
  369. #==============================================================================
  370. # ◆ RGSS用処理
  371. #==============================================================================
  372. elsif rgss_version == 1
  373. end
  374. #==============================================================================
  375. # ■ Game_System
  376. #------------------------------------------------------------------------------
  377. #  システム周りのデータを扱うクラスです。乗り物や BGM などの管理も行います。
  378. # このクラスのインスタンスは $game_system で参照されます。
  379. #==============================================================================

  380. class Game_System
  381.   #--------------------------------------------------------------------------
  382.   # ○ 公開インスタンス変数
  383.   #--------------------------------------------------------------------------
  384.   attr_accessor :use_name_window                # ネームウィンドウ表示フラグ
  385.   #--------------------------------------------------------------------------
  386.   # ☆ オブジェクト初期化
  387.   #--------------------------------------------------------------------------
  388.   alias a1_name_window_game_system_initialize initialize
  389.   def initialize
  390.     a1_name_window_game_system_initialize
  391.     @use_name_window = false
  392.   end
  393. end
  394. #==============================================================================
  395. # ■ Game_Temp
  396. #------------------------------------------------------------------------------
  397. #  セーブデータに含まれない、一時的なデータを扱うクラスです。このクラスのイン
  398. # スタンスは $game_temp で参照されます。
  399. #==============================================================================

  400. class Game_Temp
  401.   #--------------------------------------------------------------------------
  402.   # ○ 公開インスタンス変数
  403.   #--------------------------------------------------------------------------
  404.   attr_accessor :name_index
  405.   attr_accessor :direct_show_name
  406.   #--------------------------------------------------------------------------
  407.   # ☆ オブジェクト初期化
  408.   #--------------------------------------------------------------------------
  409.   alias a1_name_window_gt_initialize initialize
  410.   def initialize
  411.     a1_name_window_gt_initialize
  412.     @name_index       = 0
  413.     @direct_show_name = ""
  414.   end
  415. end
  416. #==============================================================================
  417. # ■ A1_System::CommonModule
  418. #==============================================================================

  419. class A1_System::CommonModule
  420.   #--------------------------------------------------------------------------
  421.   # ☆ 注釈コマンド定義
  422.   #--------------------------------------------------------------------------
  423.   alias a1_name_window_define_command define_command
  424.   def define_command
  425.     a1_name_window_define_command
  426.     @cmd_108["ネームウィンドウ"] = :name_window
  427.     @cmd_108["NWインデックス"]   = :nw_index
  428.     @cmd_108["NW名前指定"]       = :nw_set_name
  429.   end
  430. end
  431. #==============================================================================
  432. # ■ Game_Interpreter
  433. #------------------------------------------------------------------------------
  434. #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
  435. # Game_Troop クラス、Game_Event クラスの内部で使用されます。
  436. #==============================================================================

  437. class Game_Interpreter
  438.   #--------------------------------------------------------------------------
  439.   # ○ ネームウィンドウ
  440.   #--------------------------------------------------------------------------
  441.   def name_window(params)
  442.     $game_system.use_name_window = params[0] == "on" ? true : false
  443.   end
  444.   #--------------------------------------------------------------------------
  445.   # ○ NWインデックス
  446.   #--------------------------------------------------------------------------
  447.   def nw_index(params)
  448.     $game_temp.name_index = params[0].to_i
  449.   end
  450.   #--------------------------------------------------------------------------
  451.   # ○ NW名前指定
  452.   #--------------------------------------------------------------------------
  453.   def nw_set_name(params)
  454.     $game_temp.direct_show_name = params[0]
  455.   end
  456. end
  457. end
复制代码
必要スクリプト:A1共通スクリプト

  1. # ===========================================================================
  2. # ◆ A1 Scripts ◆
  3. #    A1共通処理(RGSS2/RGSS3共用)
  4. #
  5. # バージョン   : 4.50 (2012/01/26)
  6. # 作者         : A1
  7. # URL     : http://a1tktk.web.fc2.com/
  8. # ---------------------------------------------------------------------------
  9. # 更新履歴   :2011/11/11 Ver1.00 新規作成
  10. #        :2011/12/22 Ver2.00 RGSS3用と同様の処理に変更
  11. #        :2011/12/30 Ver2.10 RGSS3用メソッドを追加
  12. #        :2011/12/30 Ver3.00 RGSS3用共通処理と統合
  13. #        :2011/12/31 Ver3.10 マップチップサーチの仕様を変更
  14. #        :2011/12/31 Ver3.10 拡張通行判定を追加
  15. #        :2012/01/01 Ver3.11 クラス名の取得処理を追加
  16. #              :2012/01/02 Ver3.20 配列を考慮したsplit処理を追加
  17. #              :2012/01/02 Ver3.20 配列の全ての要素を整数にする処理を追加
  18. #              :2012/01/02 Ver3.30 注釈の処理の仕様を変更
  19. #              :2012/01/02 Ver3.40 「前のイベントコマンドの取得」を追加
  20. #              :2012/01/03 Ver3.50 「フレーム更新」を追加
  21. #              :2012/01/04 Ver3.60 「指定のウィンドウが開いている間ウェイト」追加
  22. #              :2012/01/04 Ver3.70 RGSS2用処理見直し
  23. #              :2012/01/05 Ver3.80 注釈文字列にエスケープコマンド対応
  24. #              :2012/01/05 Ver3.80 多次元配列を考慮したsplit処理を追加
  25. #              :2012/01/05 Ver3.80 注釈にスクリプト処理機能を追加
  26. #              :2012/01/10 Ver3.90 文字縁取り描画を追加
  27. #              :2012/01/11 Ver4.00 テキストビットマップのキャッシュを追加
  28. #              :2012/01/13 Ver4.01 「タイルセットの変更」ができなくなる不具合を修正
  29. #              :2012/01/14 Ver4.10 split処理を強化
  30. #              :2012/01/14 Ver4.20 空白を含む注釈コマンドに対応
  31. #              :2012/01/14 Ver4.21 split処理の不具合を修正
  32. #              :2012/01/21 Ver4.30 メモの内容を取得する関数を追加
  33. #              :2012/01/24 Ver4.40 メモの内容を取得する関数を追加
  34. #              :2012/01/24 Ver4.50 メモの内容を取得する関数を追加
  35. # ---------------------------------------------------------------------------
  36. # 設置場所      
  37. #  なるべく上の方
  38. #
  39. # 必要スクリプト
  40. #    なし
  41. #==============================================================================
  42. $imported = {} if $imported == nil
  43. $imported["A1_Common_Script"] = 4.50
  44. #==============================================================================
  45. # ■ Kernel
  46. #==============================================================================
  47. module Kernel
  48.   #--------------------------------------------------------------------------
  49.   # ○ RGSSのバージョン取得
  50.   #--------------------------------------------------------------------------
  51.   def rgss_version
  52.     return 3 if defined? Graphics.play_movie
  53.     return 2 if defined? Graphics.resize_screen
  54.     return 1
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   # ○ コモンスクリプトのバージョン取得
  58.   #--------------------------------------------------------------------------
  59.   def common_version
  60.     $imported["A1_Common_Script"]
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ○ コモンスクリプトのバージョンが古い
  64.   #--------------------------------------------------------------------------
  65.   def old_common_script(script_name, version)
  66.     msgbox("#{script_name}にはA1共通スクリプトVer#{version}以上が必要です")
  67.   end
  68. end
  69. #==============================================================================
  70. # ■ A1_System
  71. #==============================================================================
  72. module A1_System
  73. end
  74. #==============================================================================
  75. # ■ A1_System::CommonModule
  76. #==============================================================================

  77. class A1_System::CommonModule
  78.   #--------------------------------------------------------------------------
  79.   # ○ 定数
  80.   #--------------------------------------------------------------------------
  81.   TWOBYTE_LIST = {
  82.                   " " => " ",
  83.                   "=" => "=",
  84.                   ":" => ":"
  85.                   }
  86.   #--------------------------------------------------------------------------
  87.   # ○ オブジェクト初期化
  88.   #--------------------------------------------------------------------------
  89.   def initialize
  90.     define_command
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ○ 変換対象の全角文字を半角に置換
  94.   #--------------------------------------------------------------------------
  95.   def replace_twobyte(str)
  96.     for key in TWOBYTE_LIST.keys
  97.       str.gsub!(key) {TWOBYTE_LIST[key]}
  98.     end
  99.     return str
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ○ マイナスが含まれている文字列を数値にする
  103.   #--------------------------------------------------------------------------
  104.   def minus_to_i(s)
  105.     if s[0,0] == "-"
  106.       s.gsub!("-","")
  107.       return s.to_i * -1
  108.     else
  109.       return s.to_i
  110.     end
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ○ ミリ秒単位の現在時間
  114.   #--------------------------------------------------------------------------
  115.   def now_usec
  116.     now = Time.now
  117.     hour = now.hour * 60 * 60
  118.     min  = now.min * 60
  119.     sec  = now.sec
  120.     msec = (now.usec / 1000.0).round
  121.     return (hour + min + sec) * 1000 + msec
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # ○ イベントリストの作成
  125.   #--------------------------------------------------------------------------
  126.   def create_event_list(code, indent, parameters)
  127.     list = RPG::EventCommand.new
  128.     list.code       = code
  129.     list.indent     = indent
  130.     list.parameters = parameters
  131.     return list
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ○ メソッド呼び出し
  135.   #--------------------------------------------------------------------------
  136.   def send_method(method_name)
  137.     return send(method_name) if respond_to?(method_name)
  138.   end
  139.   #--------------------------------------------------------------------------
  140.   # ○ オブジェクトの型を判断してStringならエンコード
  141.   #--------------------------------------------------------------------------
  142.   def encoding_string(obj)
  143.     obj.force_encoding("UTF-8") if obj.is_a?(String)
  144.     return obj
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ○ メモの内容から必要な情報を取得
  148.   #--------------------------------------------------------------------------
  149.   def note_data(note, key)
  150.     result = []
  151.     note.each_line {|line|
  152.       next unless line =~ /<#{key}[ ]?(.*)>/
  153.       return true if $1.empty?
  154.       data = $a1_common.replace_twobyte($1).split(" ")
  155.       for st in data
  156.         result.push(st)
  157.       end
  158.     }
  159.     return false if result.empty?
  160.     return result
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ○ メモの内容からハッシュを作成
  164.   #--------------------------------------------------------------------------
  165.   def note_data_hash(note, key, data_default = nil, default = {}, ret = {})
  166.     list = note_data_split(note, key)
  167.     return default if list.empty?
  168.     list.each {|data| ret[data[0]] = data[1] ? data[1] : data_default }
  169.     return ret
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ○ メモの内容からカンマ区切りの多元配列を取得
  173.   #--------------------------------------------------------------------------
  174.   def note_data_split(note, key, default = [], ret = [])
  175.     data = note_data(note, key)
  176.     return default unless data.is_a?(Array)
  177.     data.each {|str| ret.push(convert_integer_from_array(split_array(str)))}
  178.     return ret
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ○ 配列の内容から数値があれば変換
  182.   #--------------------------------------------------------------------------
  183.   def convert_integer_from_array(data, ret = [])
  184.     data.each {|str| ret.push(convert_integer(str))}
  185.     return ret
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ○ 数値があれば変換
  189.   #--------------------------------------------------------------------------
  190.   def convert_integer(str)
  191.     return $1.to_i if str =~ /(^[-]?[0-9]+$)/
  192.     str.is_a?(Array) ? convert_integer_from_array(str) : str
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # ○ メモの内容から単項目の数値を取得
  196.   #--------------------------------------------------------------------------
  197.   def note_data_one_value(note, key, default)
  198.     data = note_data(note, key)
  199.     return data[0].to_i if data.is_a?(Array)
  200.     return default
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ○ メモの内容から単項目を取得
  204.   #--------------------------------------------------------------------------
  205.   def note_data_one(note, key, default)
  206.     data = note_data(note, key)
  207.     return data[0] if data.is_a?(Array)
  208.     return default
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ○ メモの内容からカンマ区切りの文字列を取得
  212.   #--------------------------------------------------------------------------
  213.   def note_data_array_str(note, key, default)
  214.     data = note_data(note, key)
  215.     return data[0].split(",") if data.is_a?(Array)
  216.     return default
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ○ メモの内容からカンマ区切りの数値を取得
  220.   #--------------------------------------------------------------------------
  221.   def note_data_array_value(note, key, default)
  222.     data = note_data(note, key)
  223.     return default unless data.is_a?(Array)
  224.     return convert_integer_from_array(split_array(data[0]))
  225.   end
  226.   #--------------------------------------------------------------------------
  227.   # ○ カンマ区切りの文字列メモを変換
  228.   #--------------------------------------------------------------------------
  229.   def note_data_array(note, key, type, default = nil, through = true)
  230.     ret = []
  231.     default.each {|dat| ret.push(dat)} if default != nil
  232.    
  233.     data = note_data(note, key)
  234.     return ret unless data.is_a?(Array)
  235.    
  236.     data = data[0].split(",")
  237.     for d in data
  238.       next if ret.include?(d) if through
  239.       ret.push(d.to_i) if type.is_a?(Integer)
  240.       ret.push(d)      if type.is_a?(String)
  241.     end
  242.     return ret
  243.   end
  244.   #--------------------------------------------------------------------------
  245.   # ○ ディレクトリの作成
  246.   #--------------------------------------------------------------------------
  247.   def make_directory(dir_name)
  248.     Dir::mkdir(dir_name) unless FileTest.exist?(dir_name)
  249.   end
  250.   #--------------------------------------------------------------------------
  251.   # ○ コマンドリスト
  252.   #--------------------------------------------------------------------------
  253.   def make_command(command, src = "", dect = "")
  254.     src.gsub!("/","\\")
  255.     dect.gsub!("/","\\")
  256.     cmd = "#{command} \"#{src}\" \"#{dect}\""
  257.     return cmd
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # ○ 素材の拡張子を取得
  261.   #--------------------------------------------------------------------------
  262.   def material_ext(directory, file, direct = false)
  263.     exts = []
  264.     exts = [".png",".bmp",".jpg"]               if directory =~ /(.*)Graphics\/(.*)/
  265.     exts = [".mid",".ogg",".wav",".mp3",".wma"] if directory =~ /(.*)Audio(.*)/
  266.    
  267.     find_file = sprintf("%s%s", directory, file) unless direct
  268.     find_file = file if direct
  269.    
  270.     for ext in exts
  271.       return ext if File.exist?(sprintf("%s%s", find_file, ext))
  272.     end
  273.     return nil
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ○ 素材が存在するかチェック
  277.   #--------------------------------------------------------------------------
  278.   def material_exist?(directory, file, direct = false)
  279.     return false if material_ext(directory, file, direct) == nil
  280.     return true
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ○ ファイルコピー
  284.   #--------------------------------------------------------------------------
  285.   def copy_file(src, dest)
  286.     srcFile = File.open( src, "rb" )
  287.     dstFile = File.open( dest, "wb" )
  288.     dstFile.write( srcFile.read )
  289.     srcFile.close
  290.     dstFile.close
  291.   end
  292.   #--------------------------------------------------------------------------
  293.   # ○ ファイルの存在を確認してファイルコピー
  294.   #--------------------------------------------------------------------------
  295.   def material_copy(src, dest, directory)
  296.     ext = material_ext(directory, src, true)
  297.     copy_file( src + ext, dest + ext ) if ext != nil
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ○ 配列からAudioを作成
  301.   #--------------------------------------------------------------------------
  302.   def set_audio(sound, kind)
  303.     case kind
  304.     when "BGM"; audio = RPG::BGM.new
  305.     when "BGS"; audio = RPG::BGS.new
  306.     when "ME";  audio = RPG::ME.new
  307.     when "SE";  audio = RPG::SE.new
  308.     end
  309.     audio.name   = sound[0]
  310.     audio.volume = sound[1]
  311.     audio.pitch  = sound[2]
  312.     return audio
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # ○ 既に準拠識別子を持っているかチェック
  316.   #--------------------------------------------------------------------------
  317.   def chk_rtp(file_name, default)
  318.     return "" if file_name =~ /^VX_.*/
  319.     return "" if file_name =~ /^XP_.*/
  320.     return "" if file_name =~ /^2000_.*/
  321.     return "" if file_name =~ /^2003_.*/
  322.     return default
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ○ 先頭の $ を切り出す
  326.   #--------------------------------------------------------------------------
  327.   def one_character(file_name)
  328.     return file_name unless file_name[0] == "$"
  329.     tmp = file_name.clone
  330.     tmp[0] = ""
  331.     return tmp
  332.   end
  333.   #--------------------------------------------------------------------------
  334.   # ○ 配列を入れ替える
  335.   #--------------------------------------------------------------------------
  336.   def change_array(array, index1, index2)
  337.     tmp = array[index1]
  338.     array[index1] = array[index2]
  339.     array[index2] = tmp
  340.     return array
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ○ 移動ルートの作成
  344.   #--------------------------------------------------------------------------
  345.   def create_move_route(repeat, skippable, wait, list)
  346.     move_route = RPG::MoveRoute.new
  347.     move_route.repeat    = repeat
  348.     move_route.skippable = skippable
  349.     move_route.wait      = wait
  350.     move_route.list      = list
  351.     return move_route
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # ○ 移動ルートコマンドの作成
  355.   #--------------------------------------------------------------------------
  356.   def create_move_command(code, parameters)
  357.     list = RPG::MoveCommand.new
  358.     list.code       = code
  359.     list.parameters = parameters
  360.     return list
  361.   end
  362.   #--------------------------------------------------------------------------
  363.   # ○ インタプリタ起動用リストの作成
  364.   #--------------------------------------------------------------------------
  365.   def create_list(code, indent, parameters)
  366.     list            = RPG::EventCommand.new
  367.     list.code       = code
  368.     list.indent     = indent
  369.     list.parameters = parameters
  370.     return list
  371.   end
  372.   #--------------------------------------------------------------------------
  373.   # ○ クラス名の取得
  374.   #--------------------------------------------------------------------------
  375.   def class_name(class_instance)
  376.     return class_instance.to_s.split(":")[0].gsub("#<","")
  377.   end
  378.   #--------------------------------------------------------------------------
  379.   # ○ 配列を考慮したsplit
  380.   #--------------------------------------------------------------------------
  381.   def split_array(str)
  382.     str = convert_escape_characters(str)
  383.    
  384.     ret       = []
  385.     tmp_array = str.split(",")
  386.    
  387.     return strip_array_str(tmp_array) unless str.include?("[")
  388.     tmp_str   = ""
  389.     tmp_array.each {|s|
  390.       if char_in_str(s, "[", "]") && tmp_str.empty?
  391.         ret.push(s) unless s =~ /^\[/
  392.         ret.push([s[1...s.size-1]]) if s =~ /^\[/
  393.       else
  394.         tmp_str = "#{tmp_str}#{s},"
  395.         if char_in_str(tmp_str, "[", "]")
  396.           unless tmp_str =~ /^\[/
  397.             ret.push(tmp_str[0...tmp_str.size-1])
  398.             tmp_str = ""
  399.           else
  400.             tmp_str = tmp_str[1...tmp_str.size-2]
  401.             tmp_str = split_array(tmp_str) if tmp_str.include?("[")
  402.             tmp_str = tmp_str.split(",") if tmp_str.include?(",")
  403.             ret.push(tmp_str)   if tmp_str.is_a?(Array)
  404.             ret.push([tmp_str]) if !tmp_str.is_a?(Array)
  405.             tmp_str = ""
  406.           end
  407.         end
  408.       end
  409.     }
  410.     return strip_array_str(ret)
  411.   end
  412.   #--------------------------------------------------------------------------
  413.   # ○ 配列の中の文字列の先頭と末尾の空白を除去
  414.   #--------------------------------------------------------------------------
  415.   def strip_array_str(array, ret = [])
  416.     array.each {|str| ret.push(strip_array_str(str)) if str.is_a?(Array); next if str.is_a?(Array); ret.push(str.strip) }
  417.     return ret
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # ○ 文字列の中に文字が何文字含まれているか調べて同数ならtrueを返す
  421.   #--------------------------------------------------------------------------
  422.   def char_in_str(str, c1, c2)
  423.     num1 = 0
  424.     num2 = 0
  425.     (0...str.size).each {|i| num1 += 1 if str[i] == c1; num2 += 1 if str[i] == c2 }
  426.     return num1 == num2
  427.   end
  428.   #--------------------------------------------------------------------------
  429.   # ○ 制御文字の変換
  430.   #--------------------------------------------------------------------------
  431.   def convert_escape_characters(text)
  432.     result = text.to_s.clone
  433.     result.gsub!(/\\/)                           { "\e" }
  434.     result.gsub!(/\e\e/)                         { "\\" }
  435.     result.gsub!(/\eV\[(\d+)\]/i)                { $game_variables[$1.to_i] }
  436.     result.gsub!(/\eV\[(\d+)\]/i)                { $game_variables[$1.to_i] }
  437.     result.gsub!(/\eN\[(\d+)\]/i)                { actor_name($1.to_i) }
  438.     result.gsub!(/\eP\[(\d+)\]/i)                { party_member_name($1.to_i) }
  439.     result.gsub!(/\eG/i)                         { Vocab::currency_unit }
  440.     loop { result = result.sub(/<s>(.+?)<\/s>/i) { eval($1) }; break unless $1 }
  441.     result
  442.   end
  443.   #--------------------------------------------------------------------------
  444.   # ○ アクター n 番の名前を取得
  445.   #--------------------------------------------------------------------------
  446.   def actor_name(n)
  447.     actor = n >= 1 ? $game_actors[n] : nil
  448.     actor ? actor.name : ""
  449.   end
  450.   #--------------------------------------------------------------------------
  451.   # ○ パーティメンバー n 番の名前を取得
  452.   #--------------------------------------------------------------------------
  453.   def party_member_name(n)
  454.     actor = n >= 1 ? $game_party.members[n - 1] : nil
  455.     actor ? actor.name : ""
  456.   end
  457.   #--------------------------------------------------------------------------
  458.   # ○ 配列を全て整数にする
  459.   #--------------------------------------------------------------------------
  460.   def params_to_i(params)
  461.     ret = []
  462.     params.each {|param| ret.push(param.to_i)}
  463.     return ret
  464.   end
  465.   #--------------------------------------------------------------------------
  466.   # ○ 注釈コマンド定義
  467.   #--------------------------------------------------------------------------
  468.   def define_command
  469.     @cmd_108 = {}
  470.   end
  471.   #--------------------------------------------------------------------------
  472.   # ○ 注釈コマンド定義取得
  473.   #--------------------------------------------------------------------------
  474.   def cmd_108
  475.     @cmd_108
  476.   end
  477.   #--------------------------------------------------------------------------
  478.   # ○ フレーム更新
  479.   #--------------------------------------------------------------------------
  480.   def update
  481.   end
  482.   #--------------------------------------------------------------------------
  483.   # ○ 文字の幅と高さを取得
  484.   #--------------------------------------------------------------------------
  485.   def text_size(font, size, text)
  486.     bitmap = Cache.system("")
  487.     bitmap.font.name = font
  488.     bitmap.font.size = size
  489.     tw = bitmap.text_size(text).width
  490.     th = bitmap.text_size(text).height
  491.     bitmap.dispose
  492.     return [tw, th]
  493.   end
  494.   #--------------------------------------------------------------------------
  495.   # ○ 文字の幅を取得
  496.   #--------------------------------------------------------------------------
  497.   def text_width(font, text)
  498.     texts = text.split("\n")
  499.     @max_width = 0
  500.     texts.each {|text|
  501.       width = text_size(font.name, font.size, text)[0]
  502.       @max_width = @max_width < width ? width : @max_width
  503.     }
  504.     return @max_width
  505.   end
  506. end
  507. #==============================================================================
  508. # ◆ RGSS3用処理
  509. #==============================================================================
  510. if rgss_version == 3
  511. #==============================================================================
  512. # ■ RPG::Tileset
  513. #==============================================================================

  514. class RPG::Tileset
  515.   #--------------------------------------------------------------------------
  516.   # ○ 拡張通行判定
  517.   #--------------------------------------------------------------------------
  518.   def ex_flags
  519.     @ex_flags ||= Table.new(8192)
  520.     return @ex_flags
  521.   end
  522.   #--------------------------------------------------------------------------
  523.   # ○ 拡張通行判定初期化
  524.   #--------------------------------------------------------------------------
  525.   def init_ex_flags
  526.     @ex_flags = Table.new(8192)
  527.   end
  528. end
  529. #==============================================================================
  530. # ■ Game_Interpreter
  531. #------------------------------------------------------------------------------
  532. #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
  533. # Game_Troop クラス、Game_Event クラスの内部で使用されます。
  534. #==============================================================================

  535. class Game_Interpreter
  536.   #--------------------------------------------------------------------------
  537.   # ☆ オブジェクト初期化
  538.   #     depth : ネストの深さ
  539.   #--------------------------------------------------------------------------
  540.   alias a1_common_gi_rgss3_initialize initialize
  541.   def initialize(depth = 0, sub_interpreter = false)
  542.     @sub_interpreter = sub_interpreter
  543.     a1_common_gi_rgss3_initialize(depth)
  544.   end
  545.   #--------------------------------------------------------------------------
  546.   # ☆ メッセージ表示がビジー状態の間ウェイト
  547.   #--------------------------------------------------------------------------
  548.   alias a1_common_gi_wait_for_message wait_for_message
  549.   def wait_for_message
  550.     return if @sub_interpreter
  551.     a1_common_gi_wait_for_message
  552.   end
  553. end
  554. #==============================================================================
  555. # ■ Window_Message
  556. #------------------------------------------------------------------------------
  557. #  文章表示に使うメッセージウィンドウです。
  558. #==============================================================================

  559. class Window_Message < Window_Base
  560.   #--------------------------------------------------------------------------
  561.   # ☆ 通常文字の処理
  562.   #--------------------------------------------------------------------------
  563.   alias a1_common_wm_process_normal_character process_normal_character
  564.   def process_normal_character(c, pos)
  565.     wait_for_one_character_before
  566.     a1_common_wm_process_normal_character(c, pos)
  567.   end
  568.   #--------------------------------------------------------------------------
  569.   # ○ 一文字出力前のウェイト
  570.   #--------------------------------------------------------------------------
  571.   def wait_for_one_character_before
  572.   end
  573. end
  574. #==============================================================================
  575. # ■ RPG::Map
  576. #==============================================================================

  577. class RPG::Map
  578.   #--------------------------------------------------------------------------
  579.   # ○ マップチップを調べるか判定する
  580.   #--------------------------------------------------------------------------
  581.   def search_map_chip?
  582.     return true if $a1_common.note_data(self.note, "マップチップサーチ")
  583.     return false
  584.   end
  585. end
  586. #==============================================================================
  587. # ■ Game_Map
  588. #------------------------------------------------------------------------------
  589. #  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
  590. # このクラスのインスタンスは $game_map で参照されます。
  591. #==============================================================================

  592. class Game_Map
  593.   #--------------------------------------------------------------------------
  594.   # ☆ セットアップ
  595.   #--------------------------------------------------------------------------
  596.   alias a1_common_gm_setup setup
  597.   def setup(map_id)
  598.     a1_common_gm_setup(map_id)
  599.     setup_tileset
  600.     map_chip_search if search_map_chip?
  601.   end
  602.   #--------------------------------------------------------------------------
  603.   # ★ タイルセットの取得
  604.   #--------------------------------------------------------------------------
  605.   def tileset
  606.     setup_tileset unless @tileset && @now_tileset_id == @tileset_id
  607.     return @tileset
  608.   end
  609.   #--------------------------------------------------------------------------
  610.   # ○ タイルセットのセットアップ
  611.   #--------------------------------------------------------------------------
  612.   def setup_tileset
  613.     @tileset        = $data_tilesets[@tileset_id].clone
  614.     @tileset.flags  = $data_tilesets[@tileset_id].flags.clone
  615.     @now_tileset_id = @tileset_id
  616.   end
  617.   #--------------------------------------------------------------------------
  618.   # ○ マップチップを調べるか判定する
  619.   #--------------------------------------------------------------------------
  620.   def search_map_chip?
  621.     return @map.search_map_chip?
  622.   end
  623.   #--------------------------------------------------------------------------
  624.   # ○ 指定座標の全レイヤーのフラグ判定(イベント含む)
  625.   #--------------------------------------------------------------------------
  626.   def all_tiles_flag?(x, y, bit)
  627.     all_tiles(x, y).any? {|tile_id| tileset.flags[tile_id] & bit != 0 }
  628.   end
  629.   #--------------------------------------------------------------------------
  630.   # ○ 指定座標の全レイヤーの拡張フラグ判定(イベント含む)
  631.   #--------------------------------------------------------------------------
  632.   def all_tiles_flag_ex?(x, y, bit)
  633.     all_tiles(x, y).any? {|tile_id| tileset.ex_flags[tile_id] & bit != 0 }
  634.   end
  635.   #--------------------------------------------------------------------------
  636.   # ○ 指定座標の全レイヤーの拡張フラグ判定
  637.   #--------------------------------------------------------------------------
  638.   def layered_tiles_flag_ex?(x, y, bit)
  639.     layered_tiles(x, y).any? {|tile_id| tileset.ex_flags[tile_id] & bit != 0 }
  640.   end
  641.   #--------------------------------------------------------------------------
  642.   # ○ 地形タグの取得(イベント含む)
  643.   #--------------------------------------------------------------------------
  644.   def terrain_tag_all_tailes(x, y)
  645.     return 0 unless valid?(x, y)
  646.     all_tiles(x, y).each do |tile_id|
  647.       tag = tileset.flags[tile_id] >> 12
  648.       return tag if tag > 0
  649.     end
  650.     return 0
  651.   end
  652. end
  653. #==============================================================================
  654. # ■ DataManager
  655. #------------------------------------------------------------------------------
  656. #  データベースとゲームオブジェクトを管理するモジュールです。ゲームで使用する
  657. # ほぼ全てのグローバル変数はこのモジュールで初期化されます。
  658. #==============================================================================

  659. module DataManager
  660.   #--------------------------------------------------------------------------
  661.   # ○ エイリアス用特異メソッド
  662.   #--------------------------------------------------------------------------
  663.   class << self
  664.     alias :a1_common_create_game_objects :create_game_objects
  665.   end
  666.   #--------------------------------------------------------------------------
  667.   # ☆ 各種ゲームオブジェクトの作成
  668.   #--------------------------------------------------------------------------
  669.   def self.create_game_objects
  670.     $a1_common ||= A1_System::CommonModule.new
  671.     a1_common_create_game_objects
  672.   end
  673. end
  674. #==============================================================================
  675. # ■ Scene_Base
  676. #------------------------------------------------------------------------------
  677. #  ゲーム中の全てのシーンのスーパークラスです。
  678. #==============================================================================

  679. class Scene_Base
  680.   #--------------------------------------------------------------------------
  681.   # ☆ フレーム更新(基本)
  682.   #--------------------------------------------------------------------------
  683.   alias a1_common_sb_update_basic update_basic
  684.   def update_basic
  685.     a1_common_sb_update_basic
  686.     $a1_common.update
  687.   end
  688.   #--------------------------------------------------------------------------
  689.   # ○ 指定のウィンドウが開いている間ウェイト
  690.   #--------------------------------------------------------------------------
  691.   def wait_for_window_open(window)
  692.     update_basic until window.openness == 0
  693.   end
  694. end
  695. #==============================================================================
  696. # ■ Window_Base
  697. #------------------------------------------------------------------------------
  698. #  ゲーム中の全てのウィンドウのスーパークラスです。
  699. #==============================================================================

  700. class Window_Base < Window
  701.   #--------------------------------------------------------------------------
  702.   # ★ 制御文字の事前変換
  703.   #    実際の描画を始める前に、原則として文字列に変わるものだけを置き換える。
  704.   #    文字「\」はエスケープ文字(\e)に変換。
  705.   #--------------------------------------------------------------------------
  706.   def convert_escape_characters(text)
  707.     return $a1_common.convert_escape_characters(text)
  708.   end
  709. end
  710. #==============================================================================
  711. # ◆ RGSS2用処理
  712. #==============================================================================
  713. elsif rgss_version == 2
  714. #==============================================================================
  715. # ■ Window
  716. #==============================================================================

  717. class Window
  718.   #--------------------------------------------------------------------------
  719.   # ○ ウィンドウが開いている?
  720.   #--------------------------------------------------------------------------
  721.   def open?
  722.     return self.openness == 255
  723.   end
  724.   #--------------------------------------------------------------------------
  725.   # ○ ウィンドウが閉じている?
  726.   #--------------------------------------------------------------------------
  727.   def close?
  728.     return self.openness == 0
  729.   end
  730. end
  731. #==============================================================================
  732. # ■ Cache
  733. #------------------------------------------------------------------------------
  734. #  各種グラフィックを読み込み、Bitmap オブジェクトを作成、保持するモジュール
  735. # です。読み込みの高速化とメモリ節約のため、作成した Bitmap オブジェクトを内部
  736. # のハッシュに保存し、同じビットマップが再度要求されたときに既存のオブジェクト
  737. # を返すようになっています。
  738. #==============================================================================

  739. module Cache
  740.   #--------------------------------------------------------------------------
  741.   # ○ キャッシュ存在チェック
  742.   #--------------------------------------------------------------------------
  743.   def self.include?(key)
  744.     @cache[key] && !@cache[key].disposed?
  745.   end
  746. end
  747. #==============================================================================
  748. # ■ Game_Interpreter
  749. #------------------------------------------------------------------------------
  750. #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
  751. # Game_Troop クラス、Game_Event クラスの内部で使用されます。
  752. #==============================================================================

  753. class Game_Interpreter
  754.   #--------------------------------------------------------------------------
  755.   # ○ 注釈
  756.   #--------------------------------------------------------------------------
  757.   def command_108
  758.     @comments = [@params[0]]
  759.     while next_event_code == 408
  760.       @index += 1
  761.       @comments.push(@list[@index].parameters[0])
  762.     end
  763.   end
  764.   #--------------------------------------------------------------------------
  765.   # ★ イベントコマンドの実行
  766.   #--------------------------------------------------------------------------
  767.   def execute_command
  768.     return rgss3_execute_command unless @index >= @list.size-1
  769.     command_end
  770.     return true
  771.   end
  772.   #--------------------------------------------------------------------------
  773.   # ○ RGSS3風「イベントコマンドの実行」
  774.   #--------------------------------------------------------------------------
  775.   def rgss3_execute_command
  776.     command = @list[@index]
  777.     @params = command.parameters
  778.     @indent = command.indent
  779.     method_name = "command_#{command.code}"
  780.     send(method_name) if respond_to?(method_name)
  781.   end
  782.   #--------------------------------------------------------------------------
  783.   # ○ 次のイベントコマンドのコードを取得
  784.   #--------------------------------------------------------------------------
  785.   def next_event_code
  786.     @list[@index + 1].code
  787.   end
  788. end
  789. #==============================================================================
  790. # ■ Game_Map
  791. #------------------------------------------------------------------------------
  792. #  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
  793. # このクラスのインスタンスは $game_map で参照されます。
  794. #==============================================================================

  795. class Game_Map
  796.   #--------------------------------------------------------------------------
  797.   # ○ マップチップを調べるか判定する
  798.   #--------------------------------------------------------------------------
  799.   def search_map_chip?
  800.     return $data_map_infos[@map_id].name =~ /\[サーチ\]/
  801.   end
  802.   #--------------------------------------------------------------------------
  803.   # ○ 指定座標に存在するタイル扱いイベント(すり抜け以外)の配列取得
  804.   #--------------------------------------------------------------------------
  805.   def tile_events_xy(x, y)
  806.     @tile_events.select {|event| event.pos_nt?(x, y) }
  807.   end
  808.   #--------------------------------------------------------------------------
  809.   # ○ タイル扱いイベントの配列をリフレッシュ
  810.   #--------------------------------------------------------------------------
  811.   def refresh_tile_events
  812.     @tile_events = @events.values.select {|event| event.tile? }
  813.   end
  814. end
  815. #==============================================================================
  816. # ■ Game_Character
  817. #------------------------------------------------------------------------------
  818. #  キャラクターを扱うクラスです。このクラスは Game_Player クラスと Game_Event
  819. # クラスのスーパークラスとして使用されます。
  820. #==============================================================================

  821. class Game_Character
  822.   #--------------------------------------------------------------------------
  823.   # ○ タイル判定
  824.   #--------------------------------------------------------------------------
  825.   def tile?
  826.     @tile_id > 0 && @priority_type == 0
  827.   end
  828. end
  829. #==============================================================================
  830. # ■ Scene_Title
  831. #------------------------------------------------------------------------------
  832. #  タイトル画面の処理を行うクラスです。
  833. #==============================================================================

  834. class Scene_Title < Scene_Base
  835.   #--------------------------------------------------------------------------
  836.   # ☆ データベースのロード
  837.   #--------------------------------------------------------------------------
  838.   alias a1_common_st_load_database load_database
  839.   def load_database
  840.     a1_common_st_load_database
  841.     $data_map_infos = load_data("Data/MapInfos.rvdata")
  842.   end
  843.   #--------------------------------------------------------------------------
  844.   # ☆ 各種ゲームオブジェクトの作成
  845.   #--------------------------------------------------------------------------
  846.   alias a1_common_st_create_game_objects create_game_objects
  847.   def create_game_objects
  848.     $a1_common ||= A1_System::CommonModule.new
  849.     a1_common_st_create_game_objects
  850.   end
  851. end
  852. #==============================================================================
  853. # ◆ RGSS用処理
  854. #==============================================================================
  855. elsif rgss_version == 1
  856. end
  857. #==============================================================================
  858. # ■ Cache
  859. #------------------------------------------------------------------------------
  860. #  各種グラフィックを読み込み、Bitmap オブジェクトを作成、保持するモジュール
  861. # です。読み込みの高速化とメモリ節約のため、作成した Bitmap オブジェクトを内部
  862. # のハッシュに保存し、同じビットマップが再度要求されたときに既存のオブジェクト
  863. # を返すようになっています。
  864. #==============================================================================

  865. module Cache
  866.   #--------------------------------------------------------------------------
  867.   # ○ 拡大縮小したビットマップのロード
  868.   #--------------------------------------------------------------------------
  869.   def self.load_resize_bitmap(load_path, key, resize = nil)
  870.     @cache ||= {}
  871.     key = load_path if key == nil
  872.     return @cache[key] if include?(key)
  873.    
  874.     @cache[key] = Bitmap.new(load_path)
  875.     return @cache[key] if resize == nil
  876.     return @cache[key] if @cache[key].width == resize[0] and @cache[key].height == resize[1]
  877.    
  878.     info = calc_size(resize, key)
  879.     return resize_bitmap(@cache[key], info[0], info[1], key)
  880.   end
  881.   #--------------------------------------------------------------------------
  882.   # ○ 拡大縮小した色相変化済みビットマップを作成/取得
  883.   #--------------------------------------------------------------------------
  884.   def self.load_resize_hue_changed_bitmap(load_path, path, hue, resize)
  885.     key = [path, hue]
  886.     return @cache[key] if include?(key)
  887.    
  888.     @cache[key] = load_resize_bitmap(load_path, path, resize).clone
  889.     @cache[key].hue_change(hue)
  890.     return @cache[key]
  891.   end
  892.   #--------------------------------------------------------------------------
  893.   # ○ リサイズするサイズを取得
  894.   #--------------------------------------------------------------------------
  895.   def self.calc_size(resize, key)
  896.     width  = resize[0]
  897.     width  = @cache[key].width * width.abs if width < 0
  898.     height = resize[1]
  899.     height = @cache[key].height * height.abs if height < 0
  900.     height = Integer(@cache[key].height * (width.to_f / @cache[key].width.to_f)) if height == 0
  901.     return [width, height]
  902.   end
  903.   #--------------------------------------------------------------------------
  904.   # ○ ビットマップの拡大縮小
  905.   #--------------------------------------------------------------------------
  906.   def self.resize_bitmap(bitmap, width, height, key)
  907.     resize = Bitmap.new(width, height)
  908.     resize.stretch_blt(resize.rect, bitmap, bitmap.rect)
  909.     @cache[key] = resize
  910.     return resize
  911.   end
  912.   #--------------------------------------------------------------------------
  913.   # ○ テキストビットマップの取得
  914.   #--------------------------------------------------------------------------
  915.   def self.text_picture(text, font)
  916.     load_text_bitmap(text, font)
  917.   end
  918.   #--------------------------------------------------------------------------
  919.   # ○ フォントのキーを作成
  920.   #--------------------------------------------------------------------------
  921.   def self.make_font_key(text, font)
  922.     [text, font.name, font.size, font.bold, font.italic, font.outline, font.shadow, font.color.to_s, font.out_color.to_s]
  923.   end
  924.   #--------------------------------------------------------------------------
  925.   # ○ テキストビットマップの作成
  926.   #--------------------------------------------------------------------------
  927.   def self.load_text_bitmap(text, font)
  928.     @cache ||= {}
  929.     key = make_font_key(text, font)
  930.     return @cache[key] if include?(key)
  931.    
  932.     # 計算用ダミービットマップ
  933.     bitmap = Cache.system("")
  934.     bitmap.font = font
  935.     tw = bitmap.text_size(text).width + 8
  936.    
  937.     # ビットマップ作成
  938.     bitmap = Bitmap.new(tw, bitmap.font.size + 4)
  939.     bitmap.font = font
  940.     bitmap.draw_text(0, 0, bitmap.width, bitmap.height, text, 1)
  941.    
  942.     @cache[key] = bitmap
  943.     return @cache[key]
  944.   end
  945. end
  946. #==============================================================================
  947. # ■ Game_Interpreter
  948. #------------------------------------------------------------------------------
  949. #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
  950. # Game_Troop クラス、Game_Event クラスの内部で使用されます。
  951. #==============================================================================

  952. class Game_Interpreter
  953.   #--------------------------------------------------------------------------
  954.   # ○ 注釈
  955.   #--------------------------------------------------------------------------
  956.   alias a1_common_command_108 command_108
  957.   def command_108
  958.     a1_common_command_108
  959.     proc_comment(@comments)
  960.   end
  961.   #--------------------------------------------------------------------------
  962.   # ○ 注釈の処理
  963.   #--------------------------------------------------------------------------
  964.   def proc_comment(comments)
  965.     param = ""
  966.     comments.each {|comment| param += comment }
  967.     params = param.sub(/^(\S+)/, "")
  968.     command = $1
  969.     comment_parameters = $a1_common.split_array(params) if params
  970.     proc_comment_command(command, comment_parameters)
  971.   end
  972.   #--------------------------------------------------------------------------
  973.   # ○ 注釈の実行
  974.   #--------------------------------------------------------------------------
  975.   def proc_comment_command(command, params)
  976.     cmd_108 = $a1_common.cmd_108[command]
  977.     method(cmd_108).call(params) if cmd_108 != nil
  978.   end
  979.   #--------------------------------------------------------------------------
  980.   # ○ 前のイベントコマンドを取得
  981.   #--------------------------------------------------------------------------
  982.   def prev_event
  983.     @list[@index - 1]
  984.   end
  985. end
  986. #==============================================================================
  987. # ■ Game_Map
  988. #------------------------------------------------------------------------------
  989. #  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
  990. # このクラスのインスタンスは $game_map で参照されます。
  991. #==============================================================================

  992. class Game_Map
  993.   #--------------------------------------------------------------------------
  994.   # ○ 全マップチップを調べる
  995.   #--------------------------------------------------------------------------
  996.   def map_chip_search
  997.     tileset.init_ex_flags
  998.     ([email protected]).each {|x| map_chip_search_y(x) }
  999.   end
  1000.   #--------------------------------------------------------------------------
  1001.   # ○ x座標にあるy座標のマップチップを調べる
  1002.   #--------------------------------------------------------------------------
  1003.   def map_chip_search_y(x)
  1004.     ([email protected]).each {|y| map_pos_proc(x, y); map_chip_search_z(x, y) }
  1005.   end
  1006.   #--------------------------------------------------------------------------
  1007.   # ○ x,y座標にあるz座標のマップチップを調べる
  1008.   #--------------------------------------------------------------------------
  1009.   def map_chip_search_z(x, y)
  1010.     ([email protected]).each {|z| map_chip_proc(x, y, z) }
  1011.     tile_events_xy(x, y).collect {|ev| tile_event_proc(ev.tile_id) }
  1012.   end
  1013.   #--------------------------------------------------------------------------
  1014.   # ○ 座標に対して処理を行う
  1015.   #--------------------------------------------------------------------------
  1016.   def map_pos_proc(x, y)
  1017.   end
  1018.   #--------------------------------------------------------------------------
  1019.   # ○ マップチップに対して処理を行う
  1020.   #--------------------------------------------------------------------------
  1021.   def map_chip_proc(x, y, z)
  1022.   end
  1023.   #--------------------------------------------------------------------------
  1024.   # ○ タイルのイベントに対して処理を行う
  1025.   #--------------------------------------------------------------------------
  1026.   def tile_event_proc(tile_id)
  1027.   end
  1028. end
  1029. #==============================================================================
  1030. # ■ Window_Base
  1031. #------------------------------------------------------------------------------
  1032. #  ゲーム中の全てのウィンドウのスーパークラスです。
  1033. #==============================================================================

  1034. class Window_Base < Window
  1035.   #--------------------------------------------------------------------------
  1036.   # ○ 入力を受け付けるか?
  1037.   #--------------------------------------------------------------------------
  1038.   def can_input?
  1039.     @can_input
  1040.   end
  1041.   #--------------------------------------------------------------------------
  1042.   # ○ 入力受け付け設定
  1043.   #--------------------------------------------------------------------------
  1044.   def can_input=(flag)
  1045.     @can_input = flag
  1046.   end
  1047. end
  1048. #==============================================================================
  1049. # ■ Bitmap
  1050. #==============================================================================

  1051. class Bitmap
  1052.   #--------------------------------------------------------------------------
  1053.   # ○ 文字縁取り描画
  1054.   #--------------------------------------------------------------------------
  1055.   def draw_text_f(x, y, width, height, str, align = 0, color = Color.new(64,32,128))
  1056.     shadow = self.font.shadow
  1057.     b_color = self.font.color.dup
  1058.     font.shadow = false
  1059.     font.color = color
  1060.     draw_text(x + 1, y, width, height, str, align)
  1061.     draw_text(x - 1, y, width, height, str, align)
  1062.     draw_text(x, y + 1, width, height, str, align)
  1063.     draw_text(x, y - 1, width, height, str, align)
  1064.     font.color = b_color
  1065.     draw_text(x, y, width, height, str, align)
  1066.     font.shadow = shadow
  1067.   end
  1068.   #--------------------------------------------------------------------------
  1069.   # ○ 文字縁取り描画の矩形を取得
  1070.   #--------------------------------------------------------------------------
  1071.   def draw_text_f_rect(r, str, align = 0, color = Color.new(64,32,128))
  1072.     draw_text_f(r.x, r.y, r.width, r.height, str, align = 0, color)
  1073.   end
  1074. end

复制代码

点评

多谢。  发表于 2012-10-29 23:52

评分

参与人数 1梦石 +2 收起 理由
Mic_洛洛 + 2 认可答案,好人卡+1

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
100
在线时间
82 小时
注册时间
2014-9-22
帖子
21
5
发表于 2015-8-1 17:58:41 | 只看该作者
请问这个双对话框怎么使用,原谅我看不懂日语。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-18 02:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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