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

Project1

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

【VX】753經驗找人修改"對話框加強版"跟"詳細幫助顯示"腳本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2011-3-10
帖子
65
跳转到指定楼层
1
发表于 2011-12-14 07:19:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 s20810 于 2011-12-19 03:14 编辑

因為腳本使用上跟橫版戰鬥有稍微衝突
雖然不影響遊戲 但還是希望完美點= ="
不過本人是個腳本"全盲"...真的一點法子都想不出來
看看板上有沒有高手能幫我在這兩個腳本中添加"開關" 以及在戰鬥中無效果
感恩~

VX對話框加強版
  1. #==============================================================================
  2. # ■ [VX] 對話框加強版
  3. #    [VX] Window_message Plus
  4. #----------------------------------------------------------------------------
  5. # 此腳本可代替官方 Window_Message 全腳本
  6. #----------------------------------------------------------------------------
  7. # 使用說明:
  8. #
  9. #   ⑴ 對話框第一行輸入引號內文字"名稱:",腳本會把名稱提取出來美化顯示
  10. #      例如"張三:",顯示為"【張三】" ,美化符可在參數設定中修改
  11. #
  12. #   ⑵ 默認頭像在左邊顯示
  13. #      當您需要右邊顯示時,在第一行輸入的名稱時加"\r"(大小寫不限)
  14. #      例: "拉爾夫\r:"
  15. #          請注意此時頭像將進行左右翻轉顯示
  16. #
  17. #   ⑶ 在對話中更改字體的方法:
  18. #       \f[sX]:更改字號為X
  19. #       \f[nX]:更改字體名稱為"預設字體庫"第X號字體(預設字體庫請看參數設定)
  20. #              更改字體名稱失敗(無指定字體或字體損壞)時,啟用遊戲默認字體
  21. #       \f[cX]:更改字色為第X號顏色 (text_color中的定義)
  22. #       \f[c#FF0000]:使用16進制指定字體顏色,如本句表示紅色
  23. #       \f[aX]:更改字體附加效果為第X號效果
  24. #       附加樣式列表:
  25. #         X=0 :無附加; X=1 :陰影字; X=2 :粗體字;
  26. #         X=4 :斜體字; X=8 :描邊字; X=16:發光字
  27. #              疊加效果即數字相加,示例: 3:陰影+粗體  14:粗體+斜體+描邊
  28. #              注意!此三種效果互斥: 陰影/描邊/發光
  29. #
  30. #   ⑷ 在對話中顯示(技能 物品 武器 防具)圖標和名稱的方法:
  31. #       \s[X]: 顯示第X號技能圖標和名稱
  32. #       \i[X]: 顯示第X號物品圖標和名稱
  33. #       \w[X]: 顯示第X號武器圖標和名稱
  34. #       \a[X]: 顯示第X號防具圖標和名稱
  35. #
  36. #   ⑸ 在對話中更改文字不透明度的方法:
  37. #       \o[X]: 把文字不透明度更改為X (取值範圍在0~255)
  38. #
  39. #   ⑹ 指定時間後自動關閉對話框的方法:
  40. #       \x[X]: 對話框將在X幀後自動關閉
  41. #       \x:    省略參數時,將於AutoClose幀後自動關閉(AutoClose值在參數設定中)
  42. #
  43. #   ⑺ 調整文字顯示速度的方法:
  44. #       \p[X]: 文字在X幀後顯示
  45. #
  46. #   ⑻ 對話中更換對話框皮膚(或直接使用圖片)的方法:
  47. #       \b[X]: 更改字體名稱為"預設樣式庫"第X號樣式 (預設樣式庫請看參數設定)
  48. #              注: vx對話框可使用Window皮膚或直接使用圖片,請配合事件頁設定
  49. #
  50. #      素材格式和命名規則:
  51. #       在對應的Window皮膚或對話框圖片的文件名後+"_pause",做為自定義暫停標記
  52. #       的名稱,並和對應皮膚或圖片文件放在一起.
  53. #
  54. #   ⑼ 啟用頭像動態顯示的方法:
  55. #       \e[X]: 設定頭像動態顯示的值為X
  56. #       X=0 :關閉動態效果; X=1 :水平趨中; X=2 :漸顯
  57. #
  58. #   ⑽ 在對話中更換頭像:
  59. #       \@[X]: 設定頭像索引號為X X值範圍0-7
  60. #              可更改的僅是索引號,頭像文件名稱不可改 主要用於對話中換表情
  61. #
  62. #   ⑾ 輸入文章時設定凍結字符和注釋字符:
  63. #       #[XX]: 字符串XX被凍結,不受轉義等影響直接顯示
  64. #       #<XX>: 字符串XX被當作注釋,顯示文章時不出現
  65. #------------------------------------------------------------------------------
  66. # 素材要求:
  67. #
  68. #   ① 採用vx默認頭像素材(Graphics\Faces)的格式
  69. #      即每個素材文件由2行4列共8格頭像組成
  70. #
  71. #   ② 要求所有頭像朝向一致(默認是正面偏右)
  72. #
  73. #   ③ 自定義暫停標記的素材採用橫向多幀格式,每幀圖片大小一致
  74. #      注意: 幀數在腳本參數中設定.
  75. #      在對應的Window皮膚或對話框圖片的文件名後+"_pause",做為自定義暫停標記
  76. #      的名稱,並和對應皮膚或圖片文件放在一起.
  77. #------------------------------------------------------------------------------
  78. # 合併功能附加說明:
  79. #
  80. #   ① 對話框合併
  81. #      頭像、背景、位置等相同的上下兩段對話都會被合併成一段對話;
  82. #      如果要打斷合併,請在兩段對話之間加個非對話框的執行項,比如空注釋.
  83. #
  84. #   ② 選擇項合併
  85. #      當前選項組滿4項,且取消設定不為"分歧",且下一個執行項也是選擇組,就合併;
  86. #      取消鍵的規定: 如果有"分歧",必須設定在最後一個選項組,其它不限.
  87. #                    合併後最多只有一個取消設定,多個設定時,僅最後一個有效.
  88. #----------------------------------------------------------------------------
  89. #    更新作者: 沉影不器
  90. #    許可協議: FSL
  91. #    項目版本: 1.09.1031
  92. #    引用網址: http://rpg.blue/thread-158161-1-1.html
  93. #----------------------------------------------------------------------------
  94. #    - *1.09.1031* (2010-10-31) By 沉影不器
  95. #      *新增 指定被凍結的字符串
  96. #      *新增 允許字符串做為注釋
  97. #
  98. #    - *1.08.1030* (2010-10-30) By 沉影不器
  99. #      *新增 對話中更改頭像
  100. #      *新增 允許指定16進制顏色為字色
  101. #      *修改 取消對話中切換[是否獨立顯示選項窗體]的開關
  102. #
  103. #    - *1.07.1029* (2010-10-29) By 沉影不器
  104. #      *優化 重寫合併選擇項的功能,大幅降低衝突
  105. #
  106. #    - *1.06.1026* (2010-10-26) By 沉影不器
  107. #      *修改 頭像在右的控制符改為"\r"(大小寫不限)
  108. #      *優化 改變字體失敗時使用默認字體
  109. #      *新增 允許獨立顯示選項窗體
  110. #      *新增 合併多個事件頁選項(突破4選項上限)
  111. #
  112. #    - *1.05.1007* (2010-10-07) By 沉影不器
  113. #      *修復 冒號被腳本占用而無法顯示
  114. #      *優化 預處理部分數據
  115. #      *新增 自定義暫停標記
  116. #      *新增 全局和局部字速調整
  117. #      *新增 支持滾動顯示多行對話內容
  118. #      *新增 顯示動畫功能(數據庫動畫/心情動畫)
  119. #
  120. #    - *1.04.0207* (2009-02-07) By 沉影不器
  121. #      *新增 字體附加效果:發光字
  122. #      *新增 更換對話皮膚功能
  123. #      *新增 頭像動態顯現功能
  124. #
  125. #    - *1.03.1107* (2008-11-07) By 沉影不器
  126. #      *優化 字體附加效果的疊加方法
  127. #      *新增 字體附加效果:斜體字
  128. #
  129. #    - *1.02.1023* (2008-10-23) By 沉影不器
  130. #      *修復 自動關閉對話框時可能存在的關閉延後生效
  131. #      *新增 字體附加效果:無效果、陰影字、粗體字、描邊字
  132. #      *新增 更改字體無效時,使用遊戲默認字體
  133. #
  134. #    - *1.01.0911* (2008-09-11) By 沉影不器
  135. #      *新增 更改字體功能
  136. #      *新增 顯示(技能 物品 武器 防具)圖標和名稱
  137. #      *新增 更改文字不透明度
  138. #      *新增 自動關閉對話框
  139. #
  140. #    - *1.00.0831* (2008-08-31) By 沉影不器
  141. #      *初版
  142. #==============================================================================
  143. $fscript = {} if $fscript == nil
  144. $fscript["Window_message_Plus"] = "1.09.1031"
  145. #----------------------------------------------------------------------------
  146. # ▼ 通用配置模塊
  147. #----------------------------------------------------------------------------
  148. module FSL
  149.   module Window_message_Plus
  150.     ## 對話框的預設樣式庫(其中"Window"和"MessageBack"是vx默認樣式)
  151.     Msg_StyleLib = {0=>["Window","Sinicism"],   ## Window皮膚
  152.                     1=>["MessageBack","Black"]} ## 圖片皮膚

  153.     ## 字體參數
  154.     Font_Lib = ["微軟正黑體"]  ## 預設字體庫
  155.     Font_Space = 4                              ## 字間距
  156.     EdgeColor = 15                              ## 描邊顏色
  157.     GlowColor = 1                              ## 發光顏色
  158.    
  159.     ## 名稱條參數
  160.     Name_Symbol = "**"         ## 為名稱添加的修飾符(一對)
  161.     Name_SpaceX = 6              ## 名稱條寬度縮進值
  162.     Name_SpaceY = 6              ## 名稱與對話內容之間的附加距離
  163.     Name_FontIndex = 0           ## 名稱文字字體在預設字體庫中的序號
  164.     Name_FontSize = 20           ## 名稱文字字號
  165.     Name_FontColor = 10          ## 名稱文字顏色
  166.     Name_FontAdj = 10             ## 名稱文字附加效果
  167.     NameBar_Color = 0            ## 名稱背景條顏色
  168.     NameBar_Opacity = 64         ## 名稱背景條透明度
  169.    
  170.     ## 頭像參數
  171.     Face_Enter = 0               ## 頭像顯示模式
  172.     Face_EnterRate = 12          ## 頭像進入畫面的時間   
  173.     Face_AdjX = 6                ## 頭像橫坐標微調
  174.     Face_AdjY = -6               ## 頭像縱坐標微調
  175.     Face_Align = 2               ## 頭像垂直對齊方式
  176.                                  ## 0:頂端對齊; 1:居中對齊; 2:底端對齊

  177.     ## 對話框參數
  178.     Msg_FontName = 1             ## 對話文字字體在預設字體庫中的序號
  179.     Msg_FontSize = 20            ## 對話文字字號
  180.     Msg_FontColor = 0            ## 對話文字顏色
  181.     Msg_FontPlus = 18             ## 對話文字附加效果
  182.    
  183.     ## 全局功能參數
  184.     FastShow = true              ## 確定鍵快速顯示文字
  185.     AutoClose = 80               ## 默認自動關閉時間(以幀計時)
  186.     GlobalSpeed = 0              ## 改變全局文字延時(以幀計時)
  187.    
  188.     ## 自定義暫停標記
  189.     Pause_Custom = 3    ## 位置(0:不使用 1:底邊居中 2:右下角 3:跟隨文字)
  190.     Pause_AdjX = -2     ## X坐標微調
  191.     Pause_AdjY = -2     ## Y坐標微調
  192.     Pause_AniCyc = 6    ## 動畫週期
  193.     Pause_AniFrm = 4    ## 動畫幀數
  194.    
  195.     ## 對話和選擇項合併
  196.     MultiLinesWait = 30 ## 滾動顯示對話的等待時間(0表示禁止合併多段對話)
  197.     Choice_Strip = true ## 是否單獨顯示選項窗體
  198.                         ## 注: 選擇項合併功能僅在單獨顯示的選項窗體生效
  199.     Choice_MaxLines = 4 ## 選項窗體的最大行數(0表示禁止合併多段選擇項)
  200.                         ## 注: 本參數僅在單獨顯示選項窗體時生效
  201.   end
  202. end
  203. #==============================================================================
  204. # ■ Window_Message
  205. #==============================================================================
  206. class Window_Message < Window_Selectable
  207.   include FSL::Window_message_Plus
  208.   #--------------------------------------------------------------------------
  209.   # ● 常量
  210.   #--------------------------------------------------------------------------
  211.   MAX_LINE = 4                            # 最大行數
  212.   #--------------------------------------------------------------------------
  213.   # ◎ 初始化對象
  214.   #--------------------------------------------------------------------------
  215.   def initialize
  216.     h = [Name_FontSize,Msg_FontSize].max + Name_SpaceY +
  217.          (Msg_FontSize+Font_Space)*(MAX_LINE-1) + 34
  218.     y = Graphics.height - h
  219.     super(0, y, Graphics.width, h)
  220.     self.z = 200
  221.     self.active = false
  222.     self.index = -1
  223.     self.openness = 0
  224.     @opening = false            # 窗體正在打開的標誌
  225.     @closing = false            # 窗體正在關閉的標誌
  226.     @text = nil                 # 已經沒有可顯示的文章
  227.     @contents_x = 0             # 下一條文字描繪的 X 坐標
  228.     @contents_y = 0             # 下一條文字描繪的 Y 坐標
  229.     @line_count = 0             # 現在描繪的行數
  230.     @wait_count = 0             # 等待計數
  231.     @background = 0             # 背景類型
  232.     @position = 2               # 顯示位置
  233.     @show_fast = false          # 快速顯示標誌
  234.     @line_show_fast = false     # 以行為單位快速顯示
  235.     @pause_skip = false         # 省略等待輸入標誌
  236.     ## 凍結字符池
  237.     @frozen_char = []
  238.     ## 顯示名稱
  239.     @show_name = false
  240.     ## 自定義暫停標記
  241.     @custom_pause = false if Pause_Custom > 0
  242.     ## 多行對話框標記
  243.     @multi_lines = false
  244.     ## 字體附加效果
  245.     @font_adj = Msg_FontPlus
  246.     create_gold_window
  247.     create_number_input_window
  248.     create_back_sprite
  249.     ## 頭像左右判斷
  250.     @show_right = false
  251.     ## 頭像寬度
  252.     @face_width = 0
  253.     ## 生成自定義暫停標記
  254.     create_custom_pause
  255.     ## 生成名稱背景條
  256.     create_namebar_sprite
  257.     ## 生成頭像
  258.     create_face_sprite
  259.     ## 修改默認字體
  260.     contents.font = default_font
  261.   end
  262.   #--------------------------------------------------------------------------
  263.   # ● 釋放
  264.   #--------------------------------------------------------------------------
  265.   def dispose
  266.     super
  267.     dispose_gold_window
  268.     dispose_number_input_window
  269.     dispose_back_sprite
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ◎ 更新畫面
  273.   #--------------------------------------------------------------------------
  274.   def update
  275.     super
  276.     update_gold_window
  277.     update_number_input_window
  278.     update_back_sprite
  279.     update_show_fast
  280.     ## 更新自定義暫停標記
  281.     update_custom_pause
  282.     unless @opening or @closing             # 除窗體關閉以外
  283.       if @wait_count > 0                    # 文章內等待中
  284.         @wait_count -= 1
  285.       elsif @multi_lines
  286.         scroll_line
  287.       elsif custom_pause                    # 等待文章翻頁待機中
  288.         input_pause
  289.       elsif self.active || @choice         ## 正在輸入選擇項
  290.         input_choice
  291.       elsif @number_input_window.visible    # 正在輸入數值
  292.         input_number
  293.       elsif @text != nil                    # 還有剩餘的文章
  294.         update_message                        # 更新消息
  295.       elsif continue?                       # 繼續的情況
  296.         start_message                         # 開始消息
  297.         open                                  # 打開窗體
  298.         $game_message.visible = true
  299.       else                                  # 不繼續的情況
  300.         close                                 # 關閉窗體
  301.         $game_message.visible = @closing
  302.       end
  303.     end
  304.     ## 頭像動態顯現
  305.     if @face_sprite.visible
  306.       ## 水平趨中
  307.       result =  @face_x <=> @face_sprite.x
  308.       x_enter = [(@face_x - @face_sprite.x).abs,Face_EnterRate].min
  309.       @face_sprite.x += x_enter if result > 0
  310.       @face_sprite.x -= x_enter if result < 0
  311.       ## 漸顯
  312.       @face_sprite.opacity += Face_EnterRate if @face_sprite.opacity < 255
  313.     end
  314.     ## 自動關閉對話框
  315.     if @auto_close != nil
  316.       if @auto_close > 0
  317.         @auto_close -= 1
  318.       else
  319.         terminate_message
  320.       end
  321.     end
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ◎ 生成所持金窗體
  325.   #--------------------------------------------------------------------------
  326.   def create_gold_window
  327.     @gold_window = Window_Gold.new(384, 0)
  328.     @gold_window.openness = 0
  329.     ## 統一字體
  330.     @gold_window.contents.font = default_font
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ◎ 生成數值輸入窗體
  334.   #--------------------------------------------------------------------------
  335.   def create_number_input_window
  336.     @number_input_window = Window_NumberInput.new
  337.     @number_input_window.visible = false
  338.     ## 統一字體
  339.     @number_input_window.contents.font = default_font
  340.   end
  341.   #--------------------------------------------------------------------------
  342.   # ● 生成背景活動塊
  343.   #--------------------------------------------------------------------------
  344.   def create_back_sprite
  345.     @back_sprite = Sprite.new
  346.     @back_sprite.bitmap = Cache.system("MessageBack")
  347.     @back_sprite.visible = (@background == 1)
  348.     @back_sprite.z = 190
  349.   end
  350.   #--------------------------------------------------------------------------
  351.   # ● 釋放所持金窗體
  352.   #--------------------------------------------------------------------------
  353.   def dispose_gold_window
  354.     @gold_window.dispose
  355.   end
  356.   #--------------------------------------------------------------------------
  357.   # ● 釋放數值輸入窗體
  358.   #--------------------------------------------------------------------------
  359.   def dispose_number_input_window
  360.     @number_input_window.dispose
  361.   end
  362.   #--------------------------------------------------------------------------
  363.   # ● 釋放背景活動塊
  364.   #--------------------------------------------------------------------------
  365.   def dispose_back_sprite
  366.     @back_sprite.dispose
  367.   end
  368.   #--------------------------------------------------------------------------
  369.   # ● 更新所持金窗體
  370.   #--------------------------------------------------------------------------
  371.   def update_gold_window
  372.     @gold_window.update
  373.   end
  374.   #--------------------------------------------------------------------------
  375.   # ● 更新數值輸入窗體
  376.   #--------------------------------------------------------------------------
  377.   def update_number_input_window
  378.     @number_input_window.update
  379.   end
  380.   #--------------------------------------------------------------------------
  381.   # ● 更新背景活動塊
  382.   #--------------------------------------------------------------------------
  383.   def update_back_sprite
  384.     @back_sprite.visible = (@background == 1)
  385.     @back_sprite.y = y - 16
  386.     @back_sprite.opacity = openness
  387.     @back_sprite.update
  388.   end
  389.   #--------------------------------------------------------------------------
  390.   # ◎ 更新快速顯示標誌
  391.   #--------------------------------------------------------------------------
  392.   def update_show_fast
  393.     if custom_pause or self.openness < 255
  394.       @show_fast = false
  395.     elsif Input.trigger?(Input::C)
  396.       if FastShow ## 快速顯示文字
  397.         @show_fast = true
  398.         @wait_count = 0
  399.       end
  400.     elsif not Input.press?(Input::C)
  401.       @show_fast = false
  402.     end
  403.     if @show_fast and @wait_count > 0
  404.       @wait_count -= 1
  405.     end
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # ● 判斷下一消息繼續顯示
  409.   #--------------------------------------------------------------------------
  410.   def continue?
  411.     return true if $game_message.num_input_variable_id > 0
  412.     return false if $game_message.texts.empty?
  413.     if self.openness > 0 and not $game_temp.in_battle
  414.       return false if @background != $game_message.background
  415.       return false if @position != $game_message.position
  416.     end
  417.     return true
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # ◎ 開始顯示消息
  421.   #--------------------------------------------------------------------------
  422.   def start_message
  423.     ## 重設窗體背景與位置
  424.     reset_window
  425.     ## 還原頭像左右判斷
  426.     @show_right = false
  427.     ## 暫存消息
  428.     temp_texts = []
  429.     $game_message.texts.each do |text|
  430.       tmp = text.clone
  431.       ## 判斷對話框皮膚
  432.       if tmp.sub!(/\\B\[(\d+)\]/i) { "" }
  433.         filename = Msg_StyleLib[@background][$1.to_i]
  434.         if @background == 0
  435.           self.windowskin = Cache.system(filename)
  436.           if Pause_Custom>0 && !@pause_sprite.nil? && !@pause_sprite.disposed?
  437.             @pause_sprite.bitmap = Cache.system(filename + "_pause")
  438.           end
  439.         else
  440.           @back_sprite.bitmap = Cache.system(filename)
  441.           if Pause_Custom>0 && !@pause_sprite.nil? && !@pause_sprite.disposed?
  442.             @pause_sprite.bitmap = Cache.system(filename + "_pause")
  443.           end
  444.         end
  445.         ## 開始自定義暫停標記動畫
  446.         @pause_aniindex = -1
  447.       end
  448.       ## 判斷頭像顯現
  449.       @face_enter = $1.to_i if tmp.sub!(/\\E\[(\d+)\]/i) { "" }
  450.       temp_texts.push(tmp)
  451.     end
  452.     ## 判斷頭像方向
  453.     if !temp_texts[0].nil? and temp_texts[0].sub!(/\\R/i){ "" }
  454.       @show_right = true
  455.     end
  456.     ## 判斷名稱
  457.     if temp_texts[0] != nil and temp_texts[0] =~ /[::]/
  458.       if temp_texts[0] =~ /\\[::]/
  459.         ## 忽略名稱的處理
  460.         temp_texts[0].sub!(/\\:/)  { ":" }
  461.         temp_texts[0].sub!(/\\:/) { ":" }
  462.       else
  463.         ## 去冒號加修飾符(可選)
  464.         unless Name_Symbol.empty?
  465.           temp_texts[0].sub!(/[::]/) { "" }
  466.           temp_texts[0] = Name_Symbol[0,Name_Symbol.size/2] +
  467.           temp_texts[0] + Name_Symbol[Name_Symbol.size/2,Name_Symbol.size/2]
  468.         end
  469.         ## 設定文字顏色
  470.         temp_texts[0] = "\\C[#{Name_FontColor}]" +
  471.         temp_texts[0] + "\\C[#{Msg_FontColor}]"
  472.         ## 設定文字字體
  473.         temp_texts[0] = "\\F[N#{Name_FontIndex}]" +
  474.         temp_texts[0] + "\\F[N#{Msg_FontName}]"
  475.         ## 設定文字大小
  476.         temp_texts[0] = "\\F[S#{Name_FontSize}]" +
  477.         temp_texts[0] + "\\F[S#{Msg_FontSize}]"
  478.         ## 設定文字附加效果
  479.         temp_texts[0] = "\\F[A#{Name_FontAdj}]" +
  480.         temp_texts[0] + "\\F[A#{Msg_FontPlus}]"
  481.         ## 顯示名稱背景條
  482.         show_namebar_sprite
  483.       end
  484.     end
  485.     @text = ""
  486.     for i in 0...temp_texts.size
  487.       @text += "  " if i >= $game_message.choice_start
  488.       @text += temp_texts[i].clone + "\x00"
  489.     end
  490.     @item_max = $game_message.choice_max
  491.     convert_special_characters
  492.     new_page
  493.   end
  494.   #--------------------------------------------------------------------------
  495.   # ◎ 更換頁面處理
  496.   #--------------------------------------------------------------------------
  497.   def new_page
  498.     contents.clear
  499.     ## 初始化文字描繪起點
  500.     @contents_x = 0
  501.     ## 除名稱外文字右移1字符
  502.     @contents_x += Msg_FontSize+Font_Space unless @show_name
  503.     if $game_message.face_name.empty?
  504.       @face_sprite.bitmap.clear
  505.     else
  506.       name = $game_message.face_name
  507.       index = $game_message.face_index
  508.       ## 獲取頭像寬度
  509.       set_face_width(name)
  510.       ## 計算文字橫坐標起始
  511.       @contents_x += @face_width-16 unless @show_right
  512.       draw_msg_face(name, index)
  513.       ## 頭像進入畫面
  514.       face_in
  515.     end
  516.     @contents_y = 0
  517.     @line_count = 0
  518.     @show_fast = false
  519.     @line_show_fast = false
  520.     @pause_skip = false
  521.     contents.font.color = text_color(0)
  522.   end
  523.   #--------------------------------------------------------------------------
  524.   # ◎ 換行處理
  525.   #--------------------------------------------------------------------------
  526.   def new_line
  527.     ## 提前處理自定義暫停標記
  528.     set_custom_pause_pos
  529.     @contents_x = 0
  530.     unless $game_message.face_name.empty?
  531.       ## 頭像顯示在左時
  532.       @contents_x = @face_width-16 unless @show_right
  533.     end
  534.     ## 除名稱外文字右移1字符
  535.     @contents_x += (Msg_FontSize+Font_Space)
  536.     ## 顯示名稱之後,對話內容下移 Name_SpaceY
  537.     @contents_y += Name_SpaceY if @line_count == 0 and @show_name
  538.     ## 以字號為新間距
  539.     @contents_y += (Msg_FontSize+Font_Space)
  540.     @line_count += 1
  541.     @line_show_fast = false
  542.   end
  543.   #--------------------------------------------------------------------------
  544.   # ◎ 特殊文字變換
  545.   #--------------------------------------------------------------------------
  546.   def convert_special_characters
  547.     ## 特定字符處理
  548.     @text.gsub!(/#\[(.*?)\]/)    {@frozen_char.push($1); "\xff"}
  549.     @text.gsub!(/#\<(.*?)\>/)    {""}
  550.     ## 默認控制符
  551.     @text.gsub!(/\\V\[(\d+)\]/i) {$game_variables[$1.to_i]}
  552.     @text.gsub!(/\\V\[(\d+)\]/i) {$game_variables[$1.to_i]}
  553.     @text.gsub!(/\\N\[(\d+)\]/i) {$game_actors[$1.to_i].name}
  554.     @text.gsub!(/\\C\[(\d+)\]/i) {"\x01[#{$1}]"}
  555.     @text.gsub!(/\\G/)           {"\x02"}
  556.     @text.gsub!(/\\\./)          {"\x03"}
  557.     @text.gsub!(/\\\|/)          {"\x04"}
  558.     @text.gsub!(/\\!/)           {"\x05"}
  559.     @text.gsub!(/\\>/)           {"\x06"}
  560.     @text.gsub!(/\\</)           {"\x07"}
  561.     @text.gsub!(/\\\^/)          {"\x08"}
  562.     @text.gsub!(/\\\\/)          {"\\"}
  563.     ## 更改不透明度
  564.     @text.gsub!(/\\O\[(\d+)\]/i) {"\x09[#{$1}]"}
  565.     ## 顯示數據庫元素
  566.     @text.gsub!(/\\S\[(\d+)\]/i) {"\x0a[#{$1}]" + $data_skills[$1.to_i].name}
  567.     @text.gsub!(/\\I\[(\d+)\]/i) {"\x0b[#{$1}]" + $data_items[$1.to_i].name}
  568.     @text.gsub!(/\\W\[(\d+)\]/i) {"\x0c[#{$1}]" + $data_weapons[$1.to_i].name}
  569.     @text.gsub!(/\\A\[(\d+)\]/i) {"\x0d[#{$1}]" + $data_armors[$1.to_i].name}
  570.     ## 更改字體
  571.     @text.gsub!(/\\F\[S(\d+)\]/i){"\x0e[#{$1}]"}
  572.     @text.gsub!(/\\F\[N(\d+)\]/i){"\x0f[#{$1}]"}
  573.     @text.gsub!(/\\F\[C(\d+)\]/i){"\x01[#{$1}]"}
  574.     ## 16進制顏色
  575.     @text.gsub!(/\\F\[C\#([a-f0-9]+)\]/i) {"\x10[#{$1}]"}
  576.     ## 字體附加效果
  577.     @text.gsub!(/\\F\[A(\d+)\]/i){"\x11[#{$1}]"}
  578.     ## 自動關閉
  579.     @text.gsub!(/\\X\[(\d+)\]/i) {"\x12[#{$1}]"}
  580.     @text.gsub!(/\\X/i)          {"\x13"}
  581.     ## 字速控制
  582.     @text.gsub!(/\\P\[(\d+)\]/i) {"\x14[#{$1}]"}
  583.     ## 提取動畫對象和 ID
  584.     @text.gsub!(/\\A\[(\S+)\,(\d+)\]/i) {"\x15[#{$1},#{$2}]"}
  585.     @text.gsub!(/\\B\[(\S+)\,(\d+)\]/i) {"\x16[#{$1},#{$2}]"}
  586.     ## 切換頭像index
  587.     @text.gsub!(/\\@\[(\d+)\]/)  {"\x17[#{$1}]"}
  588.   end
  589.   #--------------------------------------------------------------------------
  590.   # ◎ 設置窗體背景與位置
  591.   #--------------------------------------------------------------------------
  592.   def reset_window
  593.     @background = $game_message.background
  594.     @position = $game_message.position
  595.     if @background == 0   # 普通窗體
  596.       self.opacity = 255
  597.     else                  # 背景變暗、透明
  598.       self.opacity = 0
  599.     end
  600.     case @position
  601.     when 0  # 上
  602.       fh = get_face_height($game_message.face_name)
  603.       self.y = fh - self.height - Face_AdjY
  604.       self.y = 0 if self.y < 0
  605.       @gold_window.y = 360
  606.     when 1  # 中
  607.       self.y = (Graphics.height-self.height)/2
  608.       @gold_window.y = 0
  609.     when 2  # 下
  610.       self.y = Graphics.height-self.height
  611.       @gold_window.y = 0
  612.     end
  613.   end
  614.   #--------------------------------------------------------------------------
  615.   # ◎ 消息結束
  616.   #--------------------------------------------------------------------------
  617.   def terminate_message
  618.     ## 選項窗體
  619.     Choice_Strip ? @choice = false : self.active = false
  620.     self.custom_pause = false
  621.     self.index = -1
  622.     @gold_window.close
  623.     @number_input_window.active = false
  624.     @number_input_window.visible = false
  625.     $game_message.main_proc.call if $game_message.main_proc != nil
  626.     $game_message.clear
  627.     ## 還原自動關閉
  628.     @auto_close = nil
  629.     ## 處理名稱背景條和頭像
  630.     @show_name = false
  631.     @namebar_sprite.visible = false
  632.     @face_sprite.visible = false
  633.     @face_sprite.bitmap.clear
  634.   end
  635.   #--------------------------------------------------------------------------
  636.   # ◎ 更新消息
  637.   #--------------------------------------------------------------------------
  638.   def update_message
  639.     loop do
  640.       c = @text.slice!(/./m)            # 獲取下一條文字
  641.       case c
  642.       when nil                          # 沒有可以顯示的文字
  643.         finish_message                  # 更新結束
  644.         break
  645.       when "\x00"                       # 換行
  646.         new_line
  647.         if @line_count >= MAX_LINE      # 行數為最大時
  648.           unless @text.empty?           # 如果還有增加則繼續
  649.             ## 等待滾動
  650.             @wait_count = MultiLinesWait
  651.             @multi_lines = true
  652.             break
  653.           end
  654.         end
  655.       when "\x01"                       # \C[n]  (更改文字色)
  656.         @text.sub!(/\[([0-9]+)\]/, "")
  657.         contents.font.color = text_color($1.to_i)
  658.         next
  659.       when "\x02"                       # \G  (顯示所持金)
  660.         @gold_window.refresh
  661.         @gold_window.open
  662.       when "\x03"                       # \.  (等待 1/4 秒)
  663.         @wait_count = 15
  664.         break
  665.       when "\x04"                       # \|  (等待 1 秒)
  666.         @wait_count = 60
  667.         break
  668.       when "\x05"                       # \!  (等待輸入)
  669.         self.custom_pause = true
  670.         break
  671.       when "\x06"                       # \>  (瞬間顯示 ON)
  672.         @line_show_fast = true
  673.       when "\x07"                       # \<  (瞬間顯示 OFF)
  674.         @line_show_fast = false
  675.       when "\x08"                       # \^  (不等待輸入)
  676.         @pause_skip = true
  677.       ## 更改不透明度的情況下
  678.       when "\x09"
  679.         @text.sub!(/\[(\d+)\]/, "")
  680.         contents.font.color.alpha = $1.to_i
  681.       ## 顯示技能情況下
  682.       when "\x0a"
  683.         @text.sub!(/\[(\d+)\]/, "")
  684.         draw_icon($data_skills[$1.to_i].icon_index, @contents_x, @contents_y)
  685.         ## 橫坐標增加圖標寬度
  686.         @contents_x += 24
  687.       ## 顯示物品情況下
  688.       when "\x0b"
  689.         @text.sub!(/\[(\d+)\]/, "")
  690.         draw_icon($data_items[$1.to_i].icon_index, @contents_x, @contents_y)
  691.         ## 橫坐標增加圖標寬度
  692.         @contents_x += 24
  693.       ## 顯示武器情況下
  694.       when "\x0c"
  695.         @text.sub!(/\[(\d+)\]/, "")
  696.         draw_icon($data_weapons[$1.to_i].icon_index, @contents_x, @contents_y)
  697.         ## 橫坐標增加圖標寬度
  698.         @contents_x += 24
  699.       ## 顯示防具情況下
  700.       when "\x0d"
  701.         @text.sub!(/\[(\d+)\]/, "")
  702.         draw_icon($data_armors[$1.to_i].icon_index, @contents_x, @contents_y)
  703.         ## 橫坐標增加圖標寬度
  704.         @contents_x += 24
  705.       ## 更改字體的情況下
  706.       when "\x0e"
  707.         @text.sub!(/\[(\d+)\]/, "")
  708.         contents.font.size = $1.to_i
  709.       when "\x0f"
  710.         @text.sub!(/\[(\d+)\]/, "")
  711.         name = Font_Lib[$1.to_i]
  712.         contents.font.name = Font.exist?(name) ? name : Font.default_name
  713.       ## 16進制顏色
  714.       when "\x10"
  715.         @text.sub!(/\[(\w+)\]/, "")
  716.         r,g,b = $1.scan(/../)
  717.         contents.font.color = Color.new(r.hex, g.hex, b.hex)
  718.       ## 字體附加效果
  719.       when "\x11"
  720.         @text.sub!(/\[(\d+)\]/, "")
  721.         ## 獲取字體附加效果
  722.         @font_adj = $1.to_i
  723.       ## 自動關閉對話框的情況下
  724.       when "\x12"
  725.         @text.sub!(/\[(\d+)\]/, "")
  726.         @auto_close = $1.to_i
  727.       when "\x13"
  728.         @auto_close = AutoClose
  729.       ## \P[n] (字速)
  730.       when "\x14"
  731.         @text.sub!(/\[(\d+)\]/, "")
  732.         ## 獲取字體顯示速度
  733.         @speed = $1.to_i
  734.       ## 顯示角色動畫
  735.       when "\x15"
  736.         @text.sub!(/\[(\S+)\,(\d+)\]/, "")
  737.         character = interpreter.get_character($1.to_i)
  738.         character.animation_id = $2.to_i unless character.nil?
  739.         next
  740.       ## 顯示心情動畫
  741.       when "\x16"
  742.         @text.sub!(/\[(\S+)\,(\d+)\]/, "")
  743.         character = interpreter.get_character($1.to_i)
  744.         character.balloon_id = $2.to_i unless character.nil?
  745.         next
  746.       ## 換頭像
  747.       when "\x17"
  748.         @text.sub!(/\[(\d+)\]/, "")
  749.         name  = $game_message.face_name
  750.         index = $game_message.face_index = $1.to_i
  751.         draw_msg_face(name, index)
  752.       ## 選擇項
  753.       when "\x18"
  754.         finish_message
  755.         break
  756.       ## 特定字符處理
  757.       when "\xff"
  758.         @text.insert(0, @frozen_char.shift)
  759.       else
  760.         ## 字速控制
  761.         @wait_count = GlobalSpeed
  762.         @wait_count = @speed if @speed != nil
  763.         h = contents.font.size + Font_Space
  764.         ## 字體附加效果
  765.         if @font_adj & 1 != 0
  766.           contents.font.shadow = true
  767.         else
  768.           contents.font.shadow = false
  769.         end
  770.         if @font_adj & 2 != 0
  771.           contents.font.bold = true
  772.         else
  773.           contents.font.bold = false
  774.         end
  775.         if @font_adj & 4 != 0
  776.           contents.font.italic = true
  777.         else
  778.           contents.font.italic = false
  779.         end
  780.         if @font_adj & 8 != 0     ## 描邊字
  781.           color = text_color(EdgeColor)
  782.           contents.draw_edge_text(@contents_x,@contents_y,h,h,c,0,color)
  783.         elsif @font_adj & 16 != 0 ## 發光字
  784.           color = text_color(GlowColor)
  785.           contents.draw_glow_text(@contents_x,@contents_y,h,h,c,0,color)
  786.         else                      ## 普通字
  787.           contents.draw_text(@contents_x, @contents_y, h, h, c)
  788.         end
  789.         c_width = contents.text_size(c).width
  790.         @contents_x += c_width
  791.       end
  792.       break unless @show_fast or @line_show_fast
  793.     end
  794.   end
  795.   #--------------------------------------------------------------------------
  796.   # ◎ 消息更新結束
  797.   #--------------------------------------------------------------------------
  798.   def finish_message
  799.     if $game_message.choice_max > 0
  800.       start_choice
  801.     elsif $game_message.num_input_variable_id > 0
  802.       start_number_input
  803.     elsif @pause_skip
  804.       terminate_message
  805.     else
  806.       self.custom_pause = true
  807.     end
  808.     @wait_count = 10
  809.     @text = nil
  810.     ## 臨時字速還原
  811.     @speed = nil
  812.   end
  813.   #--------------------------------------------------------------------------
  814.   # ◎ 開始選擇項
  815.   #--------------------------------------------------------------------------
  816.   def start_choice
  817.     if Choice_Strip
  818.       @choice = true
  819.       width = 0
  820.       commands = []
  821.       for i in $game_message.choice_start+1 ...$game_message.texts.size
  822.         commands.push $game_message.texts[i]
  823.         iw = contents.text_size($game_message.texts[i]).width
  824.         width = iw if width < iw
  825.       end
  826.       ## 計算高度
  827.       if commands.size > Choice_MaxLines
  828.         row_max = Choice_MaxLines
  829.       else
  830.         row_max = commands.size
  831.       end
  832.       @choice_window = Window_Command.new(width+42, commands, 1, row_max)
  833.       @choice_window.contents.font = default_font
  834.       @choice_window.refresh
  835.       ## 計算坐標
  836.       if @show_right
  837.         @choice_window.x = self.x
  838.       else
  839.         @choice_window.x = self.x + self.width - @choice_window.width
  840.       end
  841.       if @position == 0
  842.         @choice_window.y = self.y + self.height
  843.       else
  844.         @choice_window.y = self.y - @choice_window.height
  845.       end
  846.     else
  847.       self.active = true
  848.       self.index = 0
  849.     end
  850.   end
  851.   #--------------------------------------------------------------------------
  852.   # ◎ 開始輸入數值
  853.   #--------------------------------------------------------------------------
  854.   def start_number_input
  855.     digits_max = $game_message.num_input_digits_max
  856.     number = $game_variables[$game_message.num_input_variable_id]
  857.     @number_input_window.digits_max = digits_max
  858.     @number_input_window.number = number
  859.     if $game_message.face_name.empty?
  860.       @number_input_window.x = x
  861.     else
  862.       ## 代入頭像寬度
  863.       @number_input_window.x = @show_right ? x : x + @face_width
  864.     end
  865.     @number_input_window.y = y + @contents_y
  866.     @number_input_window.active = true
  867.     @number_input_window.visible = true
  868.     @number_input_window.update
  869.   end
  870.   #--------------------------------------------------------------------------
  871.   # ◎ 更新光標 ###可能仍須增加判斷
  872.   #--------------------------------------------------------------------------
  873.   def update_cursor
  874.     if @index >= 0
  875.       if $game_message.face_name.empty?
  876.         x = 0
  877.         y = ($game_message.choice_start+@index)*(Msg_FontSize+Font_Space)
  878.         width = contents.width
  879.       else
  880.         x = @show_right ? 0 : @face_width
  881.         y = ($game_message.choice_start+@index)*(Msg_FontSize+Font_Space) +
  882.              Name_SpaceY
  883.         width = contents.width - @face_width
  884.       end
  885.       self.cursor_rect.set(x, y, width, (Msg_FontSize+Font_Space))
  886.     else
  887.       self.cursor_rect.empty
  888.     end
  889.   end
  890.   #--------------------------------------------------------------------------
  891.   # ◎ 文章顯示輸入處理
  892.   #--------------------------------------------------------------------------
  893.   def input_pause
  894.     if Input.trigger?(Input::C) or Input.trigger?(Input::B)
  895.       ## 還原自定義暫停標記
  896.       self.custom_pause = false
  897.       if @text != nil and not @text.empty?
  898.         new_page if @line_count >= MAX_LINE
  899.       else
  900.         terminate_message
  901.       end
  902.     end
  903.   end
  904.   #--------------------------------------------------------------------------
  905.   # ◎ 選擇項輸入處理
  906.   #--------------------------------------------------------------------------
  907.   def input_choice
  908.     if Input.trigger?(Input::B)
  909.       if $game_message.choice_cancel_type > 0
  910.         Sound.play_cancel
  911.         $game_message.choice_proc.call($game_message.choice_cancel_type - 1)
  912.         terminate_message
  913.       end
  914.     elsif Input.trigger?(Input::C)
  915.       Sound.play_decision
  916.       ## 獲取相應index
  917.       index = Choice_Strip ? @choice_window.index : self.index
  918.       $game_message.choice_proc.call(index)
  919.       terminate_message
  920.     end
  921.     ## 刷新選項窗體
  922.     return unless Choice_Strip
  923.     if @choice
  924.       @choice_window.update
  925.     else
  926.       @choice_window.dispose
  927.       @choice_window = nil
  928.     end
  929.   end
  930.   #--------------------------------------------------------------------------
  931.   # ● 數值輸入處理
  932.   #--------------------------------------------------------------------------
  933.   def input_number
  934.     if Input.trigger?(Input::C)
  935.       Sound.play_decision
  936.       $game_variables[$game_message.num_input_variable_id] =
  937.         @number_input_window.number
  938.       $game_map.need_refresh = true
  939.       terminate_message
  940.     end
  941.   end
  942.   #--------------------------------------------------------------------------
  943.   # ○ 生成名稱背景條
  944.   #--------------------------------------------------------------------------
  945.   def create_namebar_sprite
  946.     @namebar_sprite = Sprite.new
  947.     @namebar_sprite.bitmap = Bitmap.new(width-Name_SpaceX, Name_FontSize+4)
  948.     ## 可視性
  949.     @namebar_sprite.visible = false
  950.     ## 準備參數
  951.     rect = Rect.new(Name_SpaceX,0,@namebar_sprite.width,@namebar_sprite.height)
  952.     color1 = text_color(NameBar_Color)
  953.     color2 = text_color(NameBar_Color)
  954.     color1.alpha = NameBar_Opacity
  955.     color2.alpha = 0
  956.     ## 描繪漸變條
  957.     @namebar_sprite.bitmap.gradient_fill_rect(rect, color1, color2)
  958.   end
  959.   #--------------------------------------------------------------------------
  960.   # ○ 顯示名稱背景條
  961.   #--------------------------------------------------------------------------
  962.   def show_namebar_sprite
  963.     @show_name = true
  964.     return if @background == 1
  965.     ## 坐標跟隨
  966.     @namebar_sprite.x = self.x
  967.     @namebar_sprite.y = self.y + 16 - 1
  968.     @namebar_sprite.z = self.z + 1
  969.     ## 可視性
  970.     @namebar_sprite.visible = true
  971.   end
  972.   #--------------------------------------------------------------------------
  973.   # ○ 生成頭像
  974.   #--------------------------------------------------------------------------
  975.   def create_face_sprite
  976.     @face_sprite = Sprite.new
  977.     @face_sprite.bitmap = Bitmap.new(1,1)
  978.     @face_sprite.z = self.z + 2
  979.     @face_sprite.visible = false
  980.     @old_name = ""                        # 判斷頭像是否改變
  981.     @old_index = 0                        # 判斷頭像是否改變
  982.     @face_enter = Face_Enter              # 頭像顯示模式
  983.   end
  984.   #--------------------------------------------------------------------------
  985.   # ○ 描繪頭像
  986.   #     face_name  : 頭像圖像文件名
  987.   #     face_index : 頭像圖像索引
  988.   #--------------------------------------------------------------------------
  989.   def draw_msg_face(face_name, face_index)
  990.     bitmap = Cache.face(face_name)
  991.     width = bitmap.width / 4
  992.     height = bitmap.height / 2
  993.     rect = Rect.new(0, 0, 0, 0)
  994.     rect.x = face_index % 4 * width
  995.     rect.y = face_index / 4 * height
  996.     rect.width = width
  997.     rect.height = height
  998.     @face_sprite.bitmap = Bitmap.new(width, height)
  999.     @face_sprite.bitmap.blt(0, 0, bitmap, rect)
  1000.     @face_sprite.mirror = @show_right
  1001.   end
  1002.   #--------------------------------------------------------------------------
  1003.   # ○ 設定頭像寬度
  1004.   #     face_name  : 頭像圖像文件名
  1005.   #--------------------------------------------------------------------------
  1006.   def set_face_width(face_name)
  1007.     bitmap = Cache.face(face_name)
  1008.     @face_width = bitmap.width / 4
  1009.   end
  1010.   #--------------------------------------------------------------------------
  1011.   # ○ 獲取頭像高度
  1012.   #     face_name  : 頭像圖像文件名
  1013.   #--------------------------------------------------------------------------
  1014.   def get_face_height(face_name)
  1015.     bitmap = Cache.face(face_name)
  1016.     return bitmap.height / 2
  1017.   end
  1018.   #--------------------------------------------------------------------------
  1019.   # ○ 頭像進入畫面
  1020.   #--------------------------------------------------------------------------
  1021.   def face_in
  1022.     fw = @face_sprite.width
  1023.     fh = @face_sprite.height
  1024.     ## 水平坐標
  1025.     if @show_right
  1026.       @face_x = self.width - fw - Face_AdjX
  1027.     else
  1028.       @face_x = self.x + Face_AdjX
  1029.     end
  1030.     @face_sprite.x = @face_x
  1031.     ## 垂直坐標
  1032.     case Face_Align
  1033.     when 0
  1034.       @face_sprite.y = self.y + Face_AdjY
  1035.     when 1
  1036.       @face_sprite.y = self.y + (self.height - fh) / 2
  1037.     when 2
  1038.       @face_sprite.y = self.y + (self.height - fh) + Face_AdjY
  1039.     end
  1040.     case @face_enter
  1041.     when 1 ## 水平趨中時
  1042.       @face_sprite.x += (@show_right ? fw : -fw)
  1043.     when 2 ## 漸顯時
  1044.       @face_sprite.opacity = 0
  1045.     end
  1046.     ## 可視性
  1047.     @face_sprite.visible = true
  1048.   end
  1049.   #--------------------------------------------------------------------------
  1050.   # ○ 生成自定義暫停標記
  1051.   #--------------------------------------------------------------------------
  1052.   def create_custom_pause
  1053.     return if Pause_Custom == 0
  1054.     @pause_sprite = Sprite.new
  1055.     @pause_sprite.visible = false
  1056.     @pause_sprite.z = self.z + 3
  1057.     @pause_sprite.bitmap = Cache.system("Window_pause")
  1058.     @pause_aniindex = -1
  1059.     @pause_anispeed = 0
  1060.   end
  1061.   #--------------------------------------------------------------------------
  1062.   # ○ 獲取暫停標記
  1063.   #--------------------------------------------------------------------------
  1064.   def custom_pause
  1065.     return @custom_pause
  1066.   end
  1067.   #--------------------------------------------------------------------------
  1068.   # ○ 更改暫停標記
  1069.   #--------------------------------------------------------------------------
  1070.   def custom_pause=(val)
  1071.     @custom_pause = val
  1072.     self.pause = val if Pause_Custom == 0
  1073.   end
  1074.   #--------------------------------------------------------------------------
  1075.   # ○ 更新暫停標記
  1076.   #--------------------------------------------------------------------------
  1077.   def update_custom_pause
  1078.     return if Pause_Custom == 0
  1079.     @pause_sprite.visible = @custom_pause
  1080.     @pause_sprite.visible = false if @pause_aniindex == -1
  1081.     return if !@custom_pause
  1082.     if @pause_anispeed > 0
  1083.       @pause_anispeed -= 1
  1084.     else
  1085.       @pause_aniindex = (@pause_aniindex + 1) % Pause_AniFrm
  1086.       pw = @pause_sprite.bitmap.width / Pause_AniFrm
  1087.       ph = @pause_sprite.bitmap.height
  1088.       @pause_sprite.src_rect.set(@pause_aniindex*pw, 0, pw, ph)
  1089.       @pause_anispeed = Pause_AniCyc
  1090.     end
  1091.   end
  1092.   #--------------------------------------------------------------------------
  1093.   # ○ 設定暫停標記坐標
  1094.   #--------------------------------------------------------------------------
  1095.   def set_custom_pause_pos
  1096.     return if Pause_Custom == 0
  1097.     pw = @pause_sprite.bitmap.width / Pause_AniFrm
  1098.     ph = @pause_sprite.bitmap.height
  1099.     case Pause_Custom
  1100.     when 1 ## 底邊居中
  1101.       @pause_sprite.x = self.x + (self.width - pw)/2
  1102.       @pause_sprite.y = self.y + self.height - ph
  1103.     when 2 ## 右下角
  1104.       @pause_sprite.x = self.x + self.width - pw
  1105.       @pause_sprite.y = self.y + self.height - ph
  1106.       @pause_sprite.x -= @face_width if @show_right
  1107.     when 3 ## 文字後
  1108.       @pause_sprite.x = self.x + @contents_x + Msg_FontSize + Font_Space
  1109.       @pause_sprite.y = self.y + @contents_y + Msg_FontSize + Font_Space
  1110.     end
  1111.     @pause_sprite.x += Pause_AdjX
  1112.     @pause_sprite.y += Pause_AdjY
  1113.   end
  1114.   #--------------------------------------------------------------------------
  1115.   # ○ 滾動換行
  1116.   #--------------------------------------------------------------------------
  1117.   def scroll_line
  1118.     w = self.width - 32
  1119.     hm = Msg_FontSize + Font_Space
  1120.     if @show_name
  1121.       l = MAX_LINE - 2
  1122.       hn = Name_FontSize + Font_Space + Name_SpaceY
  1123.       rect = Rect.new(0, hn+hm, w, hm*l)
  1124.     else
  1125.       l = MAX_LINE - 1
  1126.       hn = 0
  1127.       rect = Rect.new(0, hm, w, hm*l)
  1128.     end
  1129.     ## 複製位圖
  1130.     buff = Bitmap.new(w, hm*l)
  1131.     buff.blt(0, 0, contents, rect)
  1132.     ## 描繪位圖
  1133.     contents.clear_rect Rect.new(0, hn, w, hm*l+hm)
  1134.     contents.blt 0, hn, buff, Rect.new(0, 0, w, hm*l)
  1135.     buff.dispose
  1136.     @contents_y -= Msg_FontSize + Font_Space
  1137.     @multi_lines = false
  1138.   end
  1139.   #--------------------------------------------------------------------------
  1140.   # ○ 默認字體
  1141.   #--------------------------------------------------------------------------
  1142.   def default_font
  1143.     font = Font.new(Font.default_name, Msg_FontSize)
  1144.     font.shadow = Font.default_shadow
  1145.     font.italic = Font.default_italic
  1146.     font.color = text_color(Msg_FontColor)
  1147.     font.bold = Font.default_bold
  1148.     return font
  1149.   end
  1150.   #--------------------------------------------------------------------------
  1151.   # ○ 當前解釋器
  1152.   #--------------------------------------------------------------------------
  1153.   def interpreter
  1154.     if $game_temp.in_battle
  1155.       return $game_troop.interpreter
  1156.     else
  1157.       return $game_map.interpreter
  1158.     end
  1159.   end
  1160. end
  1161. #==============================================================================
  1162. # ■ Window_Command
  1163. #==============================================================================
  1164. class Window_Command < Window_Selectable
  1165.   #--------------------------------------------------------------------------
  1166.   # ◎ 初始化
  1167.   #     width      : 窗口寬
  1168.   #     commands   : 命令字符串列表
  1169.   #     column_max : 列數 (2 以上橫向選擇)
  1170.   #     row_max    : 行數 (0:與命令數一致)
  1171.   #     spacing    : 項目橫向的空白空間
  1172.   #--------------------------------------------------------------------------
  1173.   def initialize(width, commands, column_max = 1, row_max = 0, spacing = 32)
  1174.     line_max = (commands.size + column_max - 1) / column_max
  1175.     row_max = line_max if row_max == 0
  1176.     super(0, 0, width, [line_max,row_max].max * WLH + 32, spacing)
  1177.     @commands = commands
  1178.     @item_max = commands.size
  1179.     @column_max = column_max
  1180.     refresh
  1181.     self.index = 0
  1182.     self.height = row_max * WLH + 32
  1183.   end
  1184. end
  1185. #==============================================================================
  1186. # ■ Game_Interpreter
  1187. #==============================================================================
  1188. class Game_Interpreter
  1189.   #--------------------------------------------------------------------------
  1190.   # ◎ 設置事件
  1191.   #     list     : 執行內容
  1192.   #     event_id : 事件 ID
  1193.   #--------------------------------------------------------------------------
  1194.   alias msg_plus_setup setup
  1195.   def setup(list, event_id = 0)
  1196.     msg_plus_setup(list, event_id)
  1197.     ## 獲取執行列表
  1198.     @list = Marshal.load(Marshal.dump list)
  1199.   end
  1200.   #--------------------------------------------------------------------------
  1201.   # ◎ 顯示文章
  1202.   #--------------------------------------------------------------------------
  1203.   def command_101
  1204.     unless $game_message.busy
  1205.       $game_message.face_name = @params[0]
  1206.       $game_message.face_index = @params[1]
  1207.       $game_message.background = @params[2]
  1208.       $game_message.position = @params[3]
  1209.       @index += 1
  1210.       loop do
  1211.         case @list[@index].code
  1212.         when 101 ## 對話設定
  1213.           multi_lines? ? @index += 1 : break
  1214.         when 401 ## 對話數據
  1215.           $game_message.texts.push(@list[@index].parameters[0])
  1216.           @index += 1
  1217.         else
  1218.           break
  1219.         end
  1220.       end
  1221.       if @list[@index].code == 102          # 顯示選擇項
  1222.         setup_choices(@list[@index].parameters)
  1223.       elsif @list[@index].code == 103       # 處理數值輸入
  1224.         setup_num_input(@list[@index].parameters)
  1225.       end
  1226.       set_message_waiting                   # 消息待機狀態
  1227.     end
  1228.     return false
  1229.   end
  1230.   #--------------------------------------------------------------------------
  1231.   # ◎ 設置選擇項
  1232.   #--------------------------------------------------------------------------
  1233.   def setup_choices(params)
  1234.     if FSL::Window_message_Plus::Choice_Strip &&
  1235.        FSL::Window_message_Plus::Choice_MaxLines > 0
  1236.       ## 備重建
  1237.       @modify = []
  1238.       @delete = []
  1239.       @cancel = 0
  1240.       ## 獲取合併後的command
  1241.       command = @list[@index].clone
  1242.       command.parameters = connect_choice(@index), @cancel
  1243.       ## 消息參數
  1244.       $game_message.choice_start = $game_message.texts.size
  1245.       $game_message.choice_max = command.parameters[0].size
  1246.       $game_message.texts.push "\x18"
  1247.       command.parameters[0].each{|s| $game_message.texts.push(s)}
  1248.       ## 重建數據
  1249.       @modify.each_index do |i|
  1250.         key,value = @modify[i].is_a?(Array) ? @modify[i] : [@modify[i],i]
  1251.         @list[key].parameters[0] = value
  1252.       end
  1253.       @delete.reverse.each{|i| @list[i,1] = nil}
  1254.       @list.insert(@index, command)
  1255.       $game_message.choice_cancel_type = @cancel
  1256.       $game_message.choice_proc = Proc.new { |n| @branch[@indent] = n }
  1257.       ## 推進
  1258.       @index += 1
  1259.     else
  1260.       ## 默認情況
  1261.       if $game_message.texts.size <= 4 - params[0].size
  1262.         $game_message.choice_start = $game_message.texts.size
  1263.         $game_message.choice_max = params[0].size
  1264.         for s in params[0]
  1265.           $game_message.texts.push(s)
  1266.         end
  1267.         $game_message.choice_cancel_type = params[1]
  1268.         $game_message.choice_proc = Proc.new { |n| @branch[@indent] = n }
  1269.         @index += 1
  1270.       end
  1271.     end
  1272.   end
  1273.   #--------------------------------------------------------------------------
  1274.   # ◎ 取消的情況下
  1275.   #--------------------------------------------------------------------------
  1276.   alias msg_plus_command_403 command_403
  1277.   def command_403
  1278.     ## 合併選項時
  1279.     if !@params[0].nil? && @branch[@indent] == @params[0] - 1
  1280.       @branch.delete(@indent)
  1281.       return true
  1282.     end
  1283.     msg_plus_command_403
  1284.   end
  1285.   #--------------------------------------------------------------------------
  1286.   # ## 合併選項
  1287.   #--------------------------------------------------------------------------
  1288.   def connect_choice(index, result=[])
  1289.     params = @list[index].parameters
  1290.     indent = @list[index].indent
  1291.     ## 取消項
  1292.     @cancel = result.size + params[1] if params[1] > 0
  1293.     params[0].each{|s| result.push(s)}
  1294.     @delete.push(index) ## 102
  1295.     index = next_choice(index)
  1296.     ## 判斷合併的條件 選項:滿4項;取消:非分歧
  1297.     if index && params[0].size == 4 && params[1] < 5
  1298.       @delete.push(index-1) ## 404
  1299.       connect_choice(index, result)
  1300.     else
  1301.       return result
  1302.     end
  1303.   end
  1304.   #--------------------------------------------------------------------------
  1305.   # ## 下個選項
  1306.   #--------------------------------------------------------------------------
  1307.   def next_choice(index)
  1308.     params = @list[index].parameters
  1309.     indent = @list[index].indent
  1310.     until @list[index+1].nil?
  1311.       index += 1
  1312.       if indent == @list[index].indent
  1313.         case @list[index].code
  1314.         when 402
  1315.           @modify.push(index)
  1316.         when 403
  1317.           @modify.push([index,@cancel])
  1318.         when 404
  1319.           ## 判斷合併的條件 下一個同級執行項102
  1320.           return @list[index+1].code == 102 ? index+1 : nil
  1321.         end
  1322.       end
  1323.     end
  1324.   end
  1325.   #--------------------------------------------------------------------------
  1326.   # ○ 多行模式?
  1327.   #--------------------------------------------------------------------------
  1328.   def multi_lines?
  1329.     return false if FSL::Window_message_Plus::MultiLinesWait <= 0
  1330.     return false if $game_message.face_name != @list[@index].parameters[0]
  1331.     return false if $game_message.face_index != @list[@index].parameters[1]
  1332.     return false if $game_message.background != @list[@index].parameters[2]
  1333.     return false if $game_message.position != @list[@index].parameters[3]
  1334.     return true
  1335.   end
  1336.   #--------------------------------------------------------------------------
  1337.   # ○ 心情圖標擴展
  1338.   #     character_id: 角色 ID (-1 為角色、0 為本事件、除此之外為事件 ID)
  1339.   #     balloon_id  : 心情動畫 ID (從1開始)
  1340.   #--------------------------------------------------------------------------
  1341.   def balloon_extend(character_id, balloon_id)
  1342.     character = get_character(character_id)
  1343.     if character != nil
  1344.       character.balloon_id = balloon_id
  1345.     end
  1346.     return true
  1347.   end
  1348. end
  1349. #==============================================================================
  1350. # ■ Bitmap
  1351. #==============================================================================
  1352. class Bitmap
  1353.   #--------------------------------------------------------------------------
  1354.   # ○ 描邊字
  1355.   #--------------------------------------------------------------------------
  1356.   def draw_edge_text(x, y, width, height, str, align = 0, color = nil)
  1357.     font_backup = self.font.clone
  1358.     self.font.color.set(color.red,color.green,color.blue) if color
  1359.     self.font.shadow = false
  1360.     # 描繪邊緣
  1361.     self.draw_text(x-1, y-1, width, height, str, align)
  1362.     self.draw_text(x-1, y+1, width, height, str, align)
  1363.     self.draw_text(x+1, y-1, width, height, str, align)
  1364.     self.draw_text(x+1, y+1, width, height, str, align)
  1365.     self.draw_text(x, y-1, width, height, str, align)
  1366.     self.draw_text(x, y+1, width, height, str, align)
  1367.     self.draw_text(x-1, y, width, height, str, align)
  1368.     self.draw_text(x+1, y, width, height, str, align)
  1369.     # 描繪主文字
  1370.     self.font.color = font_backup.color
  1371.     self.draw_text(x, y, width, height, str, align)
  1372.     # 還原默認字體
  1373.     self.font = font_backup
  1374.   end
  1375.   #--------------------------------------------------------------------------
  1376.   # ○ 發光字
  1377.   #--------------------------------------------------------------------------
  1378.   def draw_glow_text(x, y, width, height, str, align = 0, color = nil)
  1379.     buff = Bitmap.new(width, height)
  1380.     buff.font = self.font.clone
  1381.     buff.font.shadow = false
  1382.     buff.font.color.set(color.red,color.green,color.blue) if color
  1383.     # 描繪邊緣
  1384.     buff.draw_text(-1, -1, width, height, str, align)
  1385.     buff.draw_text(-1, 1, width, height, str, align)
  1386.     buff.draw_text(1, -1, width, height, str, align)
  1387.     buff.draw_text(1, 1, width, height, str, align)
  1388.     buff.draw_text(0, -1, width, height, str, align)
  1389.     buff.draw_text(0, 1, width, height, str, align)
  1390.     buff.draw_text(0-1, 0, width, height, str, align)
  1391.     buff.draw_text(1, 0, width, height, str, align)
  1392.     buff.blur
  1393.     # 描繪主文字
  1394.     buff.font.color = self.font.color
  1395.     buff.draw_text(0, 0, width, height, str, align)
  1396.     self.blt(x, y, buff, Rect.new(0, 0, width, height))
  1397.     buff.dispose
  1398.   end
  1399.   #--------------------------------------------------------------------------
  1400.   # ○ 多層字
  1401.   #--------------------------------------------------------------------------
  1402.   def draw_sedimentary_text(x, y, width, height, str, align = 0, *color)
  1403.     color.unshift font.color
  1404.     sheet = (font.size.to_f / color.size).ceil
  1405.     buff = Bitmap.new(width, sheet)
  1406.     buff.font = font.clone
  1407.     max = (height - font.size)/2 > 0 ? (height - font.size)/2 : 0
  1408.     min = buff.font.size < height ? buff.font.size : height
  1409.     color.each_index do |i|
  1410.       buff.clear
  1411.       buff.font.color = color[i]
  1412.       buff.draw_text(0, -i*sheet, width, min, str, align)
  1413.       blt(x, y+i*sheet+max, buff, Rect.new(0, 0, width, sheet))
  1414.       break if i*sheet >= height
  1415.     end
  1416.   end
  1417. end
复制代码

评分

参与人数 1星屑 -20 收起 理由
仲秋启明 -20 按版规修改标题

查看全部评分

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2011-3-10
帖子
65
2
 楼主| 发表于 2011-12-14 07:23:08 | 只看该作者
詳細幫助顯示
  1. #==============================================================================
  2. # ■ Window_Help
  3. #------------------------------------------------------------------------------
  4. # 原作:xuelong
  5. # 修正:水迭澜
  6. # 移植:禾西
  7. #==============================================================================
  8. class Window_Help < Window_Base
  9. #--------------------------------------------------------------------------
  10. # ● 定義
  11. #--------------------------------------------------------------------------
  12. def set
  13. @phrase,@y= {}, 0
  14. @scope, @parameter_type = [], []
  15. =begin
  16. @name_size = 名字文字大小
  17. @size = 描述文字大小
  18. @word = 每行的描述文字數
  19. =end
  20. @name_size = 18
  21. @size = 14
  22. @word = 11
  23. # 不顯示的 屬性 與 狀態 ID
  24. @unshow_elements = []
  25. @unshow_states = []
  26. # 基本文字設定
  27. @phrase[:price] = "價格"
  28. @phrase[:elements] = "攻擊屬性&附加技能"
  29. @phrase[:states] = "附加狀態"
  30. @phrase[:guard_elements] = "半減属性"
  31. @phrase[:guard_states] = "無効化狀態"
  32. #------------------#
  33. # 物品效果語句 #
  34. #------------------#
  35. @phrase[:recover] = "回复"
  36. @phrase[:hp] = "HP"
  37. @phrase[:mp] = "MP"
  38. @phrase[:plus_states] = "狀態附加"
  39. @phrase[:minus_states] = "狀態解除"
  40. @phrase[:speed] = "速度補正"
  41. @phrase[:consumable] = "消耗品"
  42. @phrase[:base_damage] = "基本傷害"
  43. #------------------#
  44. # 特殊效果語句 #
  45. #------------------#
  46. @phrase[:special] = "特殊"
  47. @phrase[:two_handed] = "両手武器"
  48. @phrase[:fast_attack] = "回合内先制"
  49. @phrase[:dual_attack] = "連続攻撃"
  50. @phrase[:critical_bonus] = "會心頻発"
  51. @phrase[:prevent_critical] = "會心防止"
  52. @phrase[:half_mp_cost] = "消費MP半分"
  53. @phrase[:double_exp_gain] = "取得経験値2倍"
  54. @phrase[:auto_hp_recover] = "HP自動回復"
  55. @phrase[:physical_attack] = "物理攻撃"
  56. @phrase[:damage_to_mp] = "MP傷害"
  57. @phrase[:absorb_damage] = "傷害吸収"
  58. @phrase[:ignore_defense] = "防御力無視"
  59. #------------------#
  60. # 技能描述語句 #
  61. #------------------#
  62. @phrase[:recovery] = "回復力"
  63. @phrase[:mp_cost] = "消耗SP"
  64. @phrase[:hit] = "命中率"
  65. #------------------#
  66. # 效果範圍語句 #
  67. #------------------#
  68. @phrase[:scope] = "効果範囲"
  69. @scope[0] = "特殊"
  70. @scope[1] = "敵単体"
  71. @scope[2] = "敵全体"
  72. @scope[3] = "敵単体 連続"
  73. @scope[4] = "敵単体 隨機"
  74. @scope[5] = "敵二体 隨機"
  75. @scope[6] = "敵三体 隨機"
  76. @scope[7] = "味方単体"
  77. @scope[8] = "味方全体"
  78. @scope[9] = "味方戦闘不能(単)"
  79. @scope[10] = "味方戦闘不能(全)"
  80. @scope[11] = "使用者"
  81. #------------------#
  82. # 效果範圍語句 #
  83. #------------------#
  84. @parameter_type[1] = "MaxHP"
  85. @parameter_type[2] = "MaxMP"
  86. @parameter_type[3] = $data_system.terms.atk
  87. @parameter_type[4] = $data_system.terms.def
  88. @parameter_type[5] = $data_system.terms.spi
  89. @parameter_type[6] = $data_system.terms.agi
  90. end
  91. #--------------------------------------------------------------------------
  92. # ● 初始化對象
  93. #--------------------------------------------------------------------------
  94. def initialize
  95. super(0, 0, 544, WLH + 32)
  96. self.opacity = 255
  97. self.z = 150
  98. self.visible = false #true,false
  99. end
  100. #--------------------------------------------------------------------------
  101. # ● 設置文本
  102. # data : 窗口顯示的字符串/物品資料
  103. # align : 對齊方式 (0..左對齊、1..中間對齊、2..右對齊)
  104. #--------------------------------------------------------------------------
  105. def set_text(data, align=0)
  106. #------------------------------------------------------------------------
  107. # ● 當資料爲文字時候
  108. #------------------------------------------------------------------------
  109. if data != @text or align != @align
  110. if data.is_a?(String)
  111. draw_string(data,align)
  112. end
  113. end
  114. return if data.is_a?(String)
  115. #------------------------------------------------------------------------
  116. # ● 當沒有資料時候
  117. #------------------------------------------------------------------------
  118. if data.nil?
  119. self.visible=false
  120. else
  121. self.visible=true
  122. end
  123. #------------------------------------------------------------------------
  124. # ● 當資料爲物品/技能時候
  125. #------------------------------------------------------------------------
  126. if data != nil && @data != data
  127. self.width = 210
  128. self.height = 430
  129. self.x=0
  130. self.y=200
  131. set
  132. draw_data(data)
  133. else
  134. return
  135. end
  136. end
  137. #--------------------------------------------------------------------------
  138. # ● 更新帮助窗口
  139. #--------------------------------------------------------------------------
  140. def draw_string(data,align)
  141. self.width = 544 #修正寬度
  142. self.height = WLH + 32 #修正高度
  143. self.x=0 #修正 x 坐標
  144. self.y=0 #修正 y 坐標
  145. @text = data #記錄文本資料
  146. @align = align #記錄對齊方式
  147. @actor = nil #清空角色資料
  148. self.contents = Bitmap.new(width - 32, height - 32) if self.contents.nil?
  149. self.contents.clear
  150. self.contents.font.color = normal_color
  151. self.contents.font.size = 20
  152. self.contents.draw_text(4, 0, self.width - 40, 32, data, align)
  153. self.visible = true
  154. end
  155. #--------------------------------------------------------------------------
  156. # ● 更新帮助窗口
  157. #--------------------------------------------------------------------------
  158. def draw_data(data=@data)
  159. self.width = 186 #修正寬度
  160. self.height = 430 #修正高度
  161. self.x=0 #修正 x 坐標
  162. self.y=150 #修正 y 坐標
  163. @data = data #記錄 data 資料
  164. case @data
  165. when RPG::Item
  166. set_item_text(@data)
  167. when RPG::Weapon, RPG::Armor
  168. set_equipment_text(@data)
  169. when RPG::Skill
  170. set_skill_text(@data)
  171. end
  172. end
  173. #--------------------------------------------------------------------------
  174. # ● 修正窗口位置
  175. #--------------------------------------------------------------------------
  176. def set_pos(x,y,width,oy,index,column_max)
  177. cursor_width = width / column_max - 32
  178. xx = index % column_max * (cursor_width + WLH)
  179. yy = index / column_max * WLH - oy
  180. self.x=xx+x+140
  181. self.y=yy+y+35
  182. if self.x+self.width>544
  183. self.x=544-self.width
  184. end
  185. if self.y+self.height>416
  186. self.y=416-self.height
  187. end
  188. end
  189. #------------------------------------------------------------------------
  190. # ● 文字描繪
  191. #------------------------------------------------------------------------
  192. def draw_text(text, increase, move=0)
  193. @y += increase
  194. self.contents.font.color = Color.new(255, 255, 128, 255)#狀態說明顏色
  195. self.contents.font.size = @size
  196. self.contents.draw_text(0+move, @y*@size+5, text.size*6, @size, text, 0)
  197. end
  198. #-------------------------------------#
  199. # 子方法
  200. #-------------------------------------#
  201. #--------------------------------------------------------------------------
  202. # ● 裝備幫助窗口
  203. #--------------------------------------------------------------------------
  204. def set_equipment_text(equipment)
  205. #------------------------------------------------------------------------
  206. # ● 取得基本質料
  207. #------------------------------------------------------------------------
  208. #----------------------------#
  209. # 取得屬性、狀態、說明之副本 #
  210. #----------------------------#
  211. element_set = equipment.element_set.clone
  212. state_set = equipment.state_set.clone
  213. description = equipment.description.clone
  214. phrase = @phrase
  215. #----------------------------#
  216. # 過濾不顯示的屬性與狀態描述 #
  217. #----------------------------#
  218. element_set -= @unshow_elements
  219. state_set -= @unshow_states
  220. #----------------#
  221. # 初始化數據設定 #
  222. #----------------#
  223. x, h, move = 0, 0, 0
  224. #------------------#
  225. # 取得特殊效果數據 #
  226. #------------------#
  227. special = []
  228. case equipment
  229. when RPG::Weapon
  230. special << phrase[:two_handed] if equipment.two_handed
  231. special << phrase[:fast_attack] if equipment.fast_attack
  232. special << phrase[:dual_attack] if equipment.dual_attack
  233. special << phrase[:critical_bonus] if equipment.critical_bonus
  234. when RPG::Armor
  235. special << phrase[:prevent_critical]if equipment.prevent_critical
  236. special << phrase[:half_mp_cost] if equipment.half_mp_cost
  237. special << phrase[:double_exp_gain] if equipment.double_exp_gain
  238. special << phrase[:auto_hp_recover] if equipment.auto_hp_recover
  239. end
  240. #------------------------------------------------------------------------
  241. # ● 確定背景圖片的高度
  242. #------------------------------------------------------------------------
  243. h += (description.size/3/@word)
  244. h += 1 if (description.size/3%@word) > 0
  245. now_h = h
  246. h += 1 #價格
  247. h += 1 unless equipment.atk.zero? #攻擊力
  248. h += 1 unless equipment.def.zero? #防禦力
  249. h += 1 unless equipment.spi.zero? #精神力
  250. h += 1 unless equipment.agi.zero? #敏捷力
  251. h += element_set.size + 1 if element_set.size > 0 #屬性
  252. h += state_set.size + 1 if state_set.size > 0 #狀態
  253. h += special.size + 1 if special.size > 0 #特殊效果
  254. #------------------------------------------------------------------------
  255. # ● 圖片顯示保證高度
  256. #------------------------------------------------------------------------
  257. #h = 6 + now_h if (h - now_h) < 6
  258. #------------------------------------------------------------------------
  259. # ● 換算高度
  260. #------------------------------------------------------------------------
  261. self.height = h * @size + @name_size + 32
  262. #------------------------------------------------------------------------
  263. # ● 生成背景
  264. #------------------------------------------------------------------------
  265. self.contents = Bitmap.new(self.width - 32, self.height - 32)
  266. self.contents.clear
  267. #------------------------------------------------------------------------
  268. # ● 名字描繪
  269. #------------------------------------------------------------------------
  270. text = equipment.name
  271. self.contents.font.color = Color.new(255, 255, 128, 255) #裝備名子顏色(normal_color)
  272. self.contents.font.size = @name_size
  273. if text.nil?
  274. self.visible = false
  275. else
  276. self.visible = true
  277. self.contents.draw_text(0, 0, text.size*7, @name_size, text, 0)
  278. end
  279. #------------------------------------------------------------------------
  280. # ● 說明描繪
  281. #------------------------------------------------------------------------
  282. x = 0
  283. @y += 1
  284. while ((text = description.slice!(/./m)) != nil)
  285. self.contents.font.color = normal_color
  286. self.contents.font.size = @size
  287. self.contents.draw_text(x*@size, @y*@size+5, @size, @size, text, 0)
  288. x+=1
  289. if x == @word
  290. x=0
  291. @y+=1
  292. end
  293. end
  294. #------------------------------------------------------------------------
  295. # ● 圖標描繪
  296. #------------------------------------------------------------------------
  297. #bitmap = Cache.system("Iconset")
  298. #rect = Rect.new(equipment.icon_index % 16 * 24, equipment.icon_index / 16 * 24, 24, 24)
  299. #self.contents.blt(0, y*size + 20, bitmap, rect, 255)
  300. #------------------------------------------------------------------------
  301. # ● 價格描繪
  302. #------------------------------------------------------------------------
  303. unless equipment.price.zero?
  304. text = phrase[:price] + ":" + equipment.price.to_s
  305. draw_text(text, 1, move)
  306. end
  307. #------------------------------------------------------------------------
  308. # ● 攻擊力
  309. #------------------------------------------------------------------------
  310. unless equipment.atk.zero?
  311. text = $data_system.terms.atk + ":" + equipment.atk.to_s
  312. draw_text(text, 1, move)
  313. end
  314. #------------------------------------------------------------------------
  315. # ● 防禦力
  316. #------------------------------------------------------------------------
  317. unless equipment.def.zero?
  318. text = $data_system.terms.def + ":" + equipment.def.to_s
  319. draw_text(text, 1, move)
  320. end
  321. #------------------------------------------------------------------------
  322. # ● 精神力
  323. #------------------------------------------------------------------------
  324. unless equipment.spi.zero?
  325. text = $data_system.terms.spi + ":" + equipment.spi.to_s
  326. draw_text(text, 1, move)
  327. end
  328. #------------------------------------------------------------------------
  329. # ● 敏捷力
  330. #------------------------------------------------------------------------
  331. unless equipment.agi.zero?
  332. text = $data_system.terms.agi + ":" + equipment.agi.to_s
  333. draw_text(text, 1, move)
  334. end
  335. #------------------------------------------------------------------------
  336. # ● 屬性
  337. #------------------------------------------------------------------------
  338. if element_set.size > 0
  339. case equipment
  340. when RPG::Weapon
  341. text=phrase[:elements]+":"
  342. when RPG::Armor
  343. text=phrase[:guard_elements]+":"
  344. end
  345. draw_text(text, 1, move)
  346. element_set.each do |i|
  347. text = $data_system.elements[i]
  348. draw_text(text, 1, move + @size)
  349. end
  350. end
  351. #------------------------------------------------------------------------
  352. # ● 狀態
  353. #------------------------------------------------------------------------
  354. if state_set.size > 0
  355. case equipment
  356. when RPG::Weapon
  357. text=phrase[:states]+":"
  358. when RPG::Armor
  359. text=phrase[:guard_states]+":"
  360. end
  361. draw_text(text, 1, move)
  362. state_set.each do |i|
  363. text = $data_states[i].name
  364. draw_text(text, 1, move + @size)
  365. end
  366. end
  367. #------------------------------------------------------------------------
  368. # ● 特殊效果
  369. #------------------------------------------------------------------------
  370. if special.size > 0
  371. text = phrase[:special]+":"
  372. draw_text(text, 1, move)
  373. special.each {|text| draw_text(text, 1, move + @size)}
  374. end
  375. end
  376. #////////////////////////////////////////////////////////////////////////////
  377. #--------------------------------------------------------------------------
  378. # ● 物品幫助窗口
  379. #--------------------------------------------------------------------------
  380. def set_item_text(item)
  381. #----------------------------#
  382. # 取得屬性、狀態、說明之副本 #
  383. #----------------------------#
  384. description = item.description.clone
  385. element_set = item.element_set.clone
  386. plus_state_set = item.plus_state_set.clone
  387. minus_state_set = item.minus_state_set.clone
  388. # 過濾不顯示的描述
  389. element_set -= @unshow_elements
  390. plus_state_set -= @unshow_states
  391. minus_state_set -= @unshow_states
  392. # 初始化數據設定
  393. x, h, move = 0, 0, 0
  394. phrase = @phrase
  395. scope = @scope
  396. parameter_type = @parameter_type
  397. occasion = @occasion
  398. # 基本文字設定

  399. #------------------#
  400. # 取得特殊效果數據 #
  401. #------------------#
  402. special=[]
  403. special << phrase[:physical_attack] if item.physical_attack #物理攻撃
  404. special << phrase[:damage_to_mp] if item.damage_to_mp #MPにダメージ
  405. special << phrase[:absorb_damage] if item.absorb_damage #ダメージを吸収
  406. special << phrase[:ignore_defense] if item.ignore_defense #防御力無視
  407. #------------------------------------------------------------------------
  408. # ● 確定背景圖片的高度
  409. #------------------------------------------------------------------------
  410. h += (description.size/3/@word)
  411. h += 1 if (description.size/3%@word) > 0
  412. now_h = h
  413. h += 2 #効果範囲,價格
  414. h += 1 if item.consumable #消耗品
  415. h += 1 unless item.speed.zero? #速度補正値
  416. h += 1 unless item.hp_recovery_rate==0 and item.hp_recovery==0 #HP 回復
  417. h += 1 unless item.mp_recovery_rate==0 and item.mp_recovery==0 #MP 回復
  418. h += 1 unless item.parameter_type.zero? #能力値
  419. h += 1 unless item.base_damage.zero? #基本ダメージ
  420. h += element_set.size + 1 if element_set.size > 0 #屬性
  421. h += plus_state_set.size + 1 if plus_state_set.size > 0 #附加狀態
  422. h += minus_state_set.size + 1 if minus_state_set.size > 0 #解除狀態
  423. h += special.size + 1 if special.size > 0 #特殊效果
  424. #------------------------------------------------------------------------
  425. # ● 圖片顯示保證高度
  426. #------------------------------------------------------------------------
  427. #h = 6 + now_h if (h - now_h) < 6
  428. #------------------------------------------------------------------------
  429. # ● 換算高度
  430. #------------------------------------------------------------------------
  431. self.height = h * @size + @name_size + 32
  432. #------------------------------------------------------------------------
  433. # ● 生成背景
  434. #------------------------------------------------------------------------
  435. self.contents = Bitmap.new(self.width - 32, self.height - 32)
  436. self.contents.clear
  437. #------------------------------------------------------------------------
  438. # ● 名字描繪
  439. #------------------------------------------------------------------------
  440. text = item.name
  441. self.contents.font.color = normal_color#顔色腳本
  442. self.contents.font.size = @name_size
  443. if text.nil?
  444. self.visible = false
  445. else
  446. self.visible = true
  447. self.contents.draw_text(0,0, text.size*7, 20, text, 0)
  448. end
  449. #------------------------------------------------------------------------
  450. # ● 說明描繪
  451. #------------------------------------------------------------------------
  452. x = 0
  453. @y += 1
  454. while ((text = description.slice!(/./m)) != nil)
  455. self.contents.font.color = normal_color
  456. self.contents.font.size = @size
  457. self.contents.draw_text(x*@size, @y*@size+5, @size, @size, text, 0)
  458. x+=1
  459. if x == @word
  460. x = 0
  461. @y += 1
  462. end
  463. end
  464. #------------------------------------------------------------------------
  465. # ● 圖標描繪
  466. #------------------------------------------------------------------------
  467. #bitmap = Cache.system("Iconset")
  468. #rect = Rect.new(item.icon_index % 16 * 24, equipment.icon_index / 16 * 24, 24, 24)
  469. #self.contents.blt(0, y*size + 20, bitmap, rect, 255)
  470. #------------------------------------------------------------------------
  471. # ● 效果範圍
  472. #------------------------------------------------------------------------
  473. text = phrase[:scope] +":"
  474. draw_text(text, 1, move)
  475. text = scope[item.scope]
  476. draw_text(text, 1, move + @size)
  477. #------------------------------------------------------------------------
  478. # ● 價格
  479. #------------------------------------------------------------------------
  480. text = phrase[:price] +":" + item.price.to_s
  481. draw_text(text, 1, move)
  482. #------------------------------------------------------------------------
  483. # ● 消耗品
  484. #------------------------------------------------------------------------
  485. if item.consumable
  486. text = phrase[:consumable]
  487. draw_text(text, 1, move)
  488. end
  489. #------------------------------------------------------------------------
  490. # ● 速度補正値
  491. #------------------------------------------------------------------------
  492. unless item.speed.zero?
  493. text = phrase[:speed]
  494. draw_text(text, 1, move)
  495. end
  496. #------------------------------------------------------------------------
  497. # ● HP回復
  498. #------------------------------------------------------------------------
  499. unless item.hp_recovery_rate.zero? and item.hp_recovery.zero?
  500. if item.hp_recovery_rate > 0 and item.hp_recovery > 0
  501. text = " + "
  502. else
  503. text = ""
  504. end
  505. unless item.hp_recovery_rate.zero?
  506. text = item.hp_recovery_rate.to_s + "%" + text
  507. end
  508. unless item.hp_recovery.zero?
  509. text += item.hp_recovery.to_s
  510. end
  511. text = phrase[:recover] +":" + phrase[:hp] + text
  512. draw_text(text, 1, move)
  513. end
  514. #------------------------------------------------------------------------
  515. # ● SP回復
  516. #------------------------------------------------------------------------
  517. unless item.mp_recovery_rate.zero? and item.mp_recovery.zero?
  518. if item.mp_recovery_rate > 0 and item.mp_recovery > 0
  519. text = " + "
  520. else
  521. text = ""
  522. end
  523. unless item.mp_recovery_rate.zero?
  524. text = item.mp_recovery_rate.to_s + "%" + text
  525. end
  526. unless item.mp_recovery.zero?
  527. text += item.mp_recovery.to_s
  528. end
  529. text = phrase[:recover] +":" + phrase[:mp] + text
  530. draw_text(text, 1, move)
  531. end
  532. #------------------------------------------------------------------------
  533. # ● 能力值增加
  534. #------------------------------------------------------------------------
  535. unless item.parameter_type.zero?
  536. text= parameter_type[item.parameter_type]+" +"+item.parameter_points.to_s
  537. draw_text(text, 1, move)
  538. end
  539. #------------------------------------------------------------------------
  540. # ● 基本ダメージ
  541. #------------------------------------------------------------------------
  542. unless item.base_damage.zero?
  543. text = phrase[:base_damage] +":" + item.base_damage.to_s
  544. draw_text(text, 1, move)
  545. end
  546. #------------------------------------------------------------------------
  547. # ● 屬性
  548. #------------------------------------------------------------------------
  549. if element_set.size > 0
  550. text = phrase[:elements]+":"
  551. draw_text(text, 1, move)
  552. element_set.each do |i|
  553. text = $data_system.elements[i]
  554. draw_text(text, 1, move + @size)
  555. end
  556. end
  557. #------------------------------------------------------------------------
  558. # ● 添加狀態
  559. #------------------------------------------------------------------------
  560. unless plus_state_set.empty?
  561. text = phrase[:plus_states]+":"
  562. draw_text(text, 1, move)
  563. plus_state_set.each do |i|
  564. text = $data_states[i].name
  565. draw_text(text, 1, move + @size)
  566. end
  567. end
  568. #------------------------------------------------------------------------
  569. # ● 解除狀態
  570. #------------------------------------------------------------------------
  571. unless minus_state_set.empty?
  572. text = phrase[:minus_states]+":"
  573. draw_text(text, 1, move)
  574. minus_state_set.each do |i|
  575. text = $data_states[i].name
  576. draw_text(text, 1, move + @size)
  577. end
  578. end
  579. #------------------------------------------------------------------------
  580. # ● 特殊效果
  581. #------------------------------------------------------------------------
  582. if special.size > 0
  583. text = phrase[:special]+":"
  584. draw_text(text, 1, move)
  585. special.each {|text| draw_text(text, 1, move + @size)}
  586. end
  587. end
  588. #////////////////////////////////////////////////////////////////////////////
  589. #--------------------------------------------------------------------------
  590. # ● 技能帮助窗口
  591. #--------------------------------------------------------------------------
  592. def set_skill_text(skill)
  593. #----------------------------#
  594. # 取得屬性、狀態、說明之副本 #
  595. #----------------------------#
  596. description = skill.description.clone
  597. element_set = skill.element_set.clone
  598. plus_state_set = skill.plus_state_set.clone
  599. minus_state_set = skill.minus_state_set.clone
  600. # 過濾不顯示的描述
  601. element_set -= @unshow_elements
  602. plus_state_set -= @unshow_states
  603. minus_state_set -= @unshow_states
  604. # 初始化設定
  605. x ,h, move = 0, 0, 0
  606. phrase = @phrase
  607. scope = @scope
  608. #------------------#
  609. # 取得特殊效果數據 #
  610. #------------------#
  611. special = []
  612. special << phrase[:physical_attack] if skill.physical_attack #物理攻撃
  613. special << phrase[:damage_to_mp] if skill.damage_to_mp #MPにダメージ
  614. special << phrase[:absorb_damage] if skill.absorb_damage #ダメージを吸収
  615. special << phrase[:ignore_defense] if skill.ignore_defense #防御力無視
  616. #------------------------------------------------------------------------
  617. # ● 確定背景圖片的高度
  618. #------------------------------------------------------------------------
  619. h += (description.size/3/@word)
  620. h += 1 if (description.size/3%@word) > 0
  621. now_h = h
  622. h += 4 #効果範囲,消費MP,命中率
  623. h += 1 unless skill.speed.zero? #速度補正値
  624. h += 1 unless skill.base_damage.zero? #基本ダメージ

  625. h += element_set.size + 1 if element_set.size > 0 #屬性
  626. h += plus_state_set.size + 1 if plus_state_set.size > 0 #附加狀態
  627. h += minus_state_set.size + 1 if minus_state_set.size > 0 #解除狀態
  628. h += special.size + 1 if special.size > 0 #特殊效果
  629. #------------------------------------------------------------------------
  630. # ● 換算高度
  631. #------------------------------------------------------------------------
  632. self.height=h * @size + @name_size + 32
  633. self.contents = Bitmap.new(self.width - 32,self.height - 32)
  634. self.contents.clear
  635. #------------------------------------------------------------------------
  636. # ● 名字描述
  637. #------------------------------------------------------------------------
  638. text = skill.name
  639. self.contents.font.color = Color.new(255, 255, 128, 255)
  640. self.contents.font.size = @name_size
  641. if text!=nil
  642. self.visible = true
  643. self.contents.draw_text(0,0, text.size*7, @name_size, text, 0)
  644. else
  645. self.visible = false
  646. end
  647. #------------------------------------------------------------------------
  648. # ● 說明描述
  649. #------------------------------------------------------------------------
  650. x = 0
  651. @y += 1
  652. text = description
  653. while ((text = description.slice!(/./m)) != nil)
  654. self.contents.font.color = normal_color
  655. self.contents.font.size = @size
  656. self.contents.draw_text(x*@size, @y*@size+5, @size, @size, text, 0)
  657. x+=1
  658. if x==@word
  659. x = 0
  660. @y += 1
  661. end
  662. end
  663. #------------------------------------------------------------------------
  664. # ● 攻擊範圍
  665. #------------------------------------------------------------------------
  666. text = phrase[:scope] +":"
  667. draw_text(text, 1, move)
  668. text = scope[skill.scope]
  669. draw_text(text, 1, move + @size)
  670. #------------------------------------------------------------------------
  671. # ● 基本ダメージ
  672. #------------------------------------------------------------------------
  673. unless skill.base_damage .zero?
  674. text = skill.base_damage > 0 ? phrase[:base_damage] : phrase[:recovery]
  675. text += ":" + skill.base_damage.abs.to_s
  676. draw_text(text, 1, move)
  677. end
  678. #------------------------------------------------------------------------
  679. # ● 消費SP描述
  680. #------------------------------------------------------------------------
  681. text = phrase[:mp_cost] +":"+ skill.mp_cost.to_s
  682. draw_text(text, 1, move)
  683. #------------------------------------------------------------------------
  684. # ● 命中率描述
  685. #------------------------------------------------------------------------
  686. text = phrase[:hit] + ":" + skill.hit.to_s + "%"
  687. draw_text(text, 1, move)
  688. #------------------------------------------------------------------------
  689. # ● 屬性
  690. #------------------------------------------------------------------------
  691. if element_set.size > 0
  692. text = phrase[:elements]+":"
  693. draw_text(text, 1, move)
  694. element_set.each do |i|
  695. text = $data_system.elements[i]
  696. draw_text(text, 1, move + @size)
  697. end
  698. end
  699. #------------------------------------------------------------------------
  700. # ● 添加狀態
  701. #------------------------------------------------------------------------
  702. unless plus_state_set.empty?
  703. text = phrase[:plus_states]+":"
  704. draw_text(text, 1, move)
  705. plus_state_set.each do |i|
  706. text = $data_states[i].name
  707. draw_text(text, 1, move + @size)
  708. end
  709. end
  710. #------------------------------------------------------------------------
  711. # ● 解除狀態
  712. #------------------------------------------------------------------------
  713. unless minus_state_set.empty?
  714. text = phrase[:minus_states]+":"
  715. draw_text(text, 1, move)
  716. minus_state_set.each do |i|
  717. text = $data_states[i].name
  718. draw_text(text, 1, move + @size)
  719. end
  720. end
  721. #------------------------------------------------------------------------
  722. # ● 特殊效果
  723. #------------------------------------------------------------------------
  724. if special.size > 0
  725. text = phrase[:special]+":"
  726. draw_text(text, 1, move)
  727. special.each {|text| draw_text(text, 1, move + @size)}
  728. end
  729. end
  730. end
  731. #==============================================================================
  732. # ■ Window_Item
  733. #------------------------------------------------------------------------------
  734. #  アイテム画面などで、所持アイテムの一覧を表示するウィンドウです。
  735. #==============================================================================
  736. class Window_Item < Window_Selectable
  737. #--------------------------------------------------------------------------
  738. # ● ヘルプテキスト更新
  739. #--------------------------------------------------------------------------
  740. def update_help
  741. @help_window.set_text(item)
  742. #修正窗口位置
  743. @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  744. end
  745. end
  746. #==============================================================================
  747. # ■ Window_Skill
  748. #------------------------------------------------------------------------------
  749. #  スキル画面などで、使用できるスキルの一覧を表示するウィンドウです。
  750. #==============================================================================
  751. class Window_Skill < Window_Selectable
  752. #--------------------------------------------------------------------------
  753. # ● ヘルプテキスト更新
  754. #--------------------------------------------------------------------------
  755. def update_help
  756. @help_window.set_text(skill)
  757. #修正窗口位置
  758. @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  759. end
  760. end
  761. #==============================================================================
  762. # ■ Window_Equip
  763. #------------------------------------------------------------------------------
  764. #  装備画面で、アクターが現在装備しているアイテムを表示するウィンドウです。
  765. #==============================================================================
  766. class Window_Equip < Window_Selectable
  767. #--------------------------------------------------------------------------
  768. # ● ヘルプテキスト更新
  769. #--------------------------------------------------------------------------
  770. def update_help
  771. @help_window.set_text(item)
  772. #修正窗口位置
  773. @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  774. end
  775. end
  776. #==============================================================================
  777. # ■ Window_ShopBuy
  778. #------------------------------------------------------------------------------
  779. #  ショップ画面で、購入できる商品の一覧を表示するウィンドウです。
  780. #==============================================================================
  781. class Window_ShopBuy < Window_Selectable
  782. #--------------------------------------------------------------------------
  783. # ● ヘルプテキスト更新
  784. #--------------------------------------------------------------------------
  785. def update_help
  786. @help_window.set_text(item)
  787. #修正窗口位置
  788. @help_window.set_pos(self.x,self.y,self.width,self.oy,self.index,@column_max)
  789. end
  790. end
复制代码
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
448
在线时间
628 小时
注册时间
2011-9-27
帖子
3996
3
发表于 2011-12-14 09:16:27 | 只看该作者
本帖最后由 小白玩家 于 2011-12-14 09:20 编辑
  1. #==============================================================================
  2. # 半身像对话框功能版 v 1.01 by 沉影不器
  3. #------------------------------------------------------------------------------
  4. # 使用说明:
  5. #   ① 此脚本可代替默认 Window_Message 全脚本
  6. #
  7. #   ② 对话框第一行输入引号内文字"名称:",脚本会把名称提取出来美化显示
  8. #
  9. #   ③ 默认半身像在左边显示
  10. #      当您需要右边显示时,在第一行输入的名称之后加"@r"(大小写不限)
  11. #      例: "拉尔夫@r:"
  12. #          请注意此时半身像将进行左右翻转显示
  13. #
  14. #   ④ 在对话中更改字体的方法:
  15. #       \f[sX]:更改字号为X
  16. #       \f[nX]:更改字体名称为预设字体组第X号字体 (预设字体组请看参数设定)
  17. #       \f[cX]:更改字色为第X号颜色 (text_color中的定义)
  18. #
  19. #   ⑤ 在对话中显示(技能 物品 武器 防具)图标和名称的方法:
  20. #       \s[X]: 显示第X号技能图标和名称
  21. #       \i[X]: 显示第X号物品图标和名称
  22. #       \w[X]: 显示第X号武器图标和名称
  23. #       \a[X]: 显示第X号防具图标和名称
  24. #
  25. #   ⑥ 在对话中更改文字不透明度的方法:
  26. #       \o[X]: 把文字不透明度更改为X (取值范围在0~255)
  27. #
  28. #   ⑦ 指定时间后自动关闭对话框的方法:
  29. #       \x[X]: 对话框将在X帧后自动关闭
  30. #       \x:    省略参数时,将在AUTO_CLOSE帧后自动关闭 (AUTO_CLOSE在参数设定中)
  31. #
  32. #   ⑧ 由于半身像占据文字显示宽度,您在设定文章时每行字数将减少
  33. #
  34. #   ⑨ 参数设定在脚本第37~66行
  35. #
  36. # 素材要求:
  37. #   ① 按vx默认头像像素材(Graphics\Faces)的格式
  38. #      要求所有半身像朝向一致(默认是正面偏右)
  39. #==============================================================================
  40. # ■ Window_Message
  41. #==============================================================================
  42. class Window_Message < Window_Selectable
  43.   #--------------------------------------------------------------------------
  44.   # ○ 参数设定
  45.   #--------------------------------------------------------------------------
  46.   # 预设字体组
  47.   FONT_ARRAY = ["黑体", "宋体", "仿宋_GB2312"]
  48.   
  49.   # 名称条参数
  50.   NAME_FONT_NAME = 0            # 名称文字字体在预设字体组中的序号
  51.   NAME_FONT_SIZE = 20           # 名称文字字号
  52.   NAME_FONT_COLOR = 16          # 名称文字颜色
  53.   NAME_X_ADJ = 6                # 名称条宽度缩进值
  54.   NAME_Y_ADJ = 6                # 名称与对话内容之间的附加距离
  55.   NAME_BAR_COLOR = 0            # 名称背景条颜色
  56.   NAME_BAR_OPACITY = 72         # 名称背景条透明度
  57.   AUTO_ADD = true               # 是否自动添加名称修饰符
  58.   SYMBOL = "【】"               # AUTO_ADD有效时为名称添加的修饰符(一对)
  59.   # 半身像参数
  60.   FACE_X_ADJ = 6                # 半身像横坐标微调
  61.   FACE_Y_ADJ = -6               # 半身像纵坐标微调
  62.   # 对话框参数
  63.   MSG_FONT_NAME = 1             # 对话文字字体在预设字体组中的序号
  64.   MSG_FONT_SIZE = 18            # 对话文字字号
  65.   MSG_FONT_COLOR = 0            # 对话文字颜色
  66.   # 自动关闭
  67.   AUTO_CLOSE = 80               # 默认自动关闭时间(以帧计时)
  68.   
  69.   #--------------------------------------------------------------------------
  70.   # ● 常量
  71.   #--------------------------------------------------------------------------
  72.   MAX_LINE = 4                            # 最大行数
  73.   #--------------------------------------------------------------------------
  74.   # ◎ 初始化对象
  75.   #--------------------------------------------------------------------------
  76.   def initialize
  77.     height = [NAME_FONT_SIZE, MSG_FONT_SIZE].max + 2 +
  78.              ( MSG_FONT_SIZE + 2) * 3 + NAME_Y_ADJ + 32
  79.     y = Graphics.height - height
  80.     super(0, y, Graphics.width, height)
  81.     self.z = 200
  82.     self.active = false
  83.     self.index = -1
  84.     self.openness = 0
  85.     @opening = false            # 窗口正在打开的标志
  86.     @closing = false            # 窗口正在关闭的标志
  87.     @text = nil                 # 已经没有可显示的文章
  88.     @contents_x = 0             # 下一条文字描绘的 X 坐标
  89.     @contents_y = 0             # 下一条文字描绘的 Y 坐标
  90.     @line_count = 0             # 现在描绘的行数
  91.     @wait_count = 0             # 等待计数
  92.     @background = 0             # 背景类型
  93.     @position = 2               # 显示位置
  94.     @show_fast = false          # 快速显示标志
  95.     @line_show_fast = false     # 以行为单位快速显示
  96.     @pause_skip = false         # 省略等待输入标志
  97.     create_gold_window
  98.     create_number_input_window
  99.     create_back_sprite
  100.     # 半身像左右判断
  101.     @show_right = false
  102.     # 半身像宽度
  103.     @face_width = 0
  104.     # 生成名称背景条
  105.     create_namebar_sprite
  106.     # 生成半身像
  107.     create_face_sprite
  108.     # 修改默认字体
  109.     contents.font = get_font(1)
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● 释放
  113.   #--------------------------------------------------------------------------
  114.   def dispose
  115.     super
  116.     dispose_gold_window
  117.     dispose_number_input_window
  118.     dispose_back_sprite
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # ◎ 更新画面
  122.   #--------------------------------------------------------------------------
  123.   def update
  124.     super
  125.     update_gold_window
  126.     update_number_input_window
  127.     update_back_sprite
  128.     update_show_fast
  129.     unless @opening or @closing             # 除窗口关闭以外
  130.       if @wait_count > 0                    # 文章内等待中
  131.         @wait_count -= 1
  132.       elsif self.pause                      # 等待文章翻页待机中
  133.         input_pause
  134.       elsif self.active                     # 正在输入选择项
  135.         input_choice
  136.       elsif @number_input_window.visible    # 正在输入数值
  137.         input_number
  138.       elsif @text != nil                    # 还有剩余的文章
  139.         update_message                        # 更新消息
  140.       elsif continue?                       # 继续的情况
  141.         start_message                         # 开始消息
  142.         open                                  # 打开窗口
  143.         $game_message.visible = true
  144.       else                                  # 不继续的情况
  145.         close                                 # 关闭窗口
  146.         $game_message.visible = @closing
  147.       end
  148.     end
  149.     # 自动关闭对话框
  150.     if @auto_close != nil
  151.       if @auto_close > 0
  152.         @auto_close -= 1
  153.       else
  154.         @auto_close = nil
  155.         terminate_message
  156.       end
  157.     end
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ◎ 生成所持金窗口
  161.   #--------------------------------------------------------------------------
  162.   def create_gold_window
  163.     @gold_window = Window_Gold.new(384, 0)
  164.     @gold_window.openness = 0
  165.     # 统一字体
  166.     @gold_window.contents.font = get_font(1)
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ◎ 生成数值输入窗口
  170.   #--------------------------------------------------------------------------
  171.   def create_number_input_window
  172.     @number_input_window = Window_NumberInput.new
  173.     @number_input_window.visible = false
  174.     # 统一字体
  175.     @number_input_window.contents.font = get_font(1)
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 生成背景活动块
  179.   #--------------------------------------------------------------------------
  180.   def create_back_sprite
  181.     @back_sprite = Sprite.new
  182.     @back_sprite.bitmap = Cache.system("MessageBack")
  183.     @back_sprite.visible = (@background == 1)
  184.     @back_sprite.z = 190
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● 释放所持金窗口
  188.   #--------------------------------------------------------------------------
  189.   def dispose_gold_window
  190.     @gold_window.dispose
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ● 释放数值输入窗口
  194.   #--------------------------------------------------------------------------
  195.   def dispose_number_input_window
  196.     @number_input_window.dispose
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 释放背景活动块
  200.   #--------------------------------------------------------------------------
  201.   def dispose_back_sprite
  202.     @back_sprite.dispose
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● 更新所持金窗口
  206.   #--------------------------------------------------------------------------
  207.   def update_gold_window
  208.     @gold_window.update
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ● 更新数值输入窗口
  212.   #--------------------------------------------------------------------------
  213.   def update_number_input_window
  214.     @number_input_window.update
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ● 更新背景活动块
  218.   #--------------------------------------------------------------------------
  219.   def update_back_sprite
  220.     @back_sprite.visible = (@background == 1)
  221.     @back_sprite.y = y - 16
  222.     @back_sprite.opacity = openness
  223.     @back_sprite.update
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● 更新快速显示标志
  227.   #--------------------------------------------------------------------------
  228.   def update_show_fast
  229.     if self.pause or self.openness < 255
  230.       @show_fast = false
  231.     elsif Input.trigger?(Input::C) and @wait_count < 2
  232.       @show_fast = true
  233.     elsif not Input.press?(Input::C)
  234.       @show_fast = false
  235.     end
  236.     if @show_fast and @wait_count > 0
  237.       @wait_count -= 1
  238.     end
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ● 判断下一消息继续显示
  242.   #--------------------------------------------------------------------------
  243.   def continue?
  244.     return true if $game_message.num_input_variable_id > 0
  245.     return false if $game_message.texts.empty?
  246.     if self.openness > 0 and not $game_temp.in_battle
  247.       return false if @background != $game_message.background
  248.       return false if @position != $game_message.position
  249.     end
  250.     return true
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ◎ 开始显示消息
  254.   #--------------------------------------------------------------------------
  255.   def start_message
  256.     # 重设窗口背景与位置
  257.     reset_window
  258.     # 还原半身像左右判断
  259.     @show_right = false
  260.     # 暂存消息
  261.     temp_texts = []
  262.     $game_message.texts.each {|text| temp_texts.push(text.clone)}
  263.     if temp_texts[0] != nil and temp_texts[0].include?(":")
  264.       # 半身像左右判断
  265.       if temp_texts[0].split(/@/)[1] =~ /[Rr]/
  266.         @show_right = true
  267.         temp_texts[0] = temp_texts[0].split(/@/)[0]
  268.       end
  269.       # 去冒号加修饰符(可选)
  270.       if AUTO_ADD
  271.         temp_texts[0].sub!(/\:/) { "" }
  272.         temp_texts[0] = SYMBOL[0,SYMBOL.size/2] +
  273.         temp_texts[0] + SYMBOL[SYMBOL.size/2,SYMBOL.size/2]
  274.       end
  275.       # 设定文字颜色
  276.       temp_texts[0] = "\\C[#{NAME_FONT_COLOR}]" +
  277.       temp_texts[0] + "\\C[#{MSG_FONT_COLOR}]"
  278.       # 设定文字字体
  279.       temp_texts[0] = "\\F[N#{NAME_FONT_NAME}]" +
  280.       temp_texts[0] + "\\F[N#{MSG_FONT_NAME}]"
  281.       # 显示名称背景条
  282.       show_namebar_sprite
  283.     end
  284.     @text = ""
  285.     for i in 0...temp_texts.size
  286.       @text += "  " if i >= $game_message.choice_start
  287.       @text += temp_texts[i].clone + "\x00"
  288.     end
  289.     @item_max = $game_message.choice_max
  290.     convert_special_characters
  291.     ##reset_window
  292.     new_page
  293.   end
  294.   #--------------------------------------------------------------------------
  295.   # ◎ 更换页面处理
  296.   #--------------------------------------------------------------------------
  297.   def new_page
  298.     contents.clear
  299.     # 初始化文字描绘起点
  300.     @contents_x = 0
  301.     # 除名称外文字右移1字符
  302.     @contents_x += MSG_FONT_SIZE+2 unless show_name?
  303.     if $game_message.face_name.empty?
  304.       @face_sprite.bitmap.clear
  305.     else
  306.       name = $game_message.face_name
  307.       index = $game_message.face_index
  308.       # 获取半身像宽度
  309.       get_face_width(name)
  310.       # 计算文字横坐标起始
  311.       @contents_x += @face_width-16 unless @show_right
  312.       draw_msg_face(name, index)
  313.       # 设定半身像坐标
  314.       set_face_pos
  315.     end
  316.     @contents_y = 0
  317.     @line_count = 0
  318.     @show_fast = false
  319.     @line_show_fast = false
  320.     @pause_skip = false
  321.     contents.font.color = text_color(0)
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ◎ 换行处理
  325.   #--------------------------------------------------------------------------
  326.   def new_line
  327.     @contents_x = 0
  328.     unless $game_message.face_name.empty?
  329.       # 半身像显示在左时
  330.       @contents_x = @face_width-16 unless @show_right
  331.     end
  332.     # 除名称外文字右移1字符
  333.     @contents_x += (MSG_FONT_SIZE+2)
  334.     # 显示名称之后,对话内容下移 NAME_Y_ADJ
  335.     @contents_y += NAME_Y_ADJ if @line_count == 0 and show_name?
  336.     # 以字号为新间距
  337.     @contents_y += (MSG_FONT_SIZE+2)
  338.     @line_count += 1
  339.     @line_show_fast = false
  340.   end
  341.   #--------------------------------------------------------------------------
  342.   # ◎ 特殊文字变换
  343.   #--------------------------------------------------------------------------
  344.   def convert_special_characters
  345.     @text.gsub!(/\\V\[(\d+)\]/i)  { $game_variables[$1.to_i] }
  346.     @text.gsub!(/\\V\[(\d+)\]/i)  { $game_variables[$1.to_i] }
  347.     @text.gsub!(/\\N\[(\d+)\]/i)  { $game_actors[$1.to_i].name }
  348.     @text.gsub!(/\\C\[(\d+)\]/i)  { "\x01[#{$1}]" }
  349.     @text.gsub!(/\\G/)            { "\x02" }
  350.     @text.gsub!(/\\\./)           { "\x03" }
  351.     @text.gsub!(/\\\|/)           { "\x04" }
  352.     @text.gsub!(/\\!/)            { "\x05" }
  353.     @text.gsub!(/\\>/)            { "\x06" }
  354.     @text.gsub!(/\\</)            { "\x07" }
  355.     @text.gsub!(/\\\^/)           { "\x08" }
  356.     @text.gsub!(/\\\\/)           { "\\" }
  357.     # 更改不透明度
  358.     @text.gsub!(/\\O\[(\d+)\]/i)  { "\x09[#{$1}]" }
  359.     # 显示数据库元素
  360.     @text.gsub!(/\\S\[(\d+)\]/i)  { "\x10[#{$1}]" + $data_skills[$1.to_i].name }
  361.     @text.gsub!(/\\I\[(\d+)\]/i)  { "\x11[#{$1}]" + $data_items[$1.to_i].name }
  362.     @text.gsub!(/\\W\[(\d+)\]/i)  { "\x12[#{$1}]" + $data_weapons[$1.to_i].name }
  363.     @text.gsub!(/\\A\[(\d+)\]/i)  { "\x13[#{$1}]" + $data_armors[$1.to_i].name }
  364.     # 更改字体
  365.     @text.gsub!(/\\F\[S(\d+)\]/i) { "\x14[#{$1}]" }
  366.     @text.gsub!(/\\F\[N(\d+)\]/i) { "\x15[#{$1}]" }
  367.     @text.gsub!(/\\F\[C(\d+)\]/i) { "\x16[#{$1}]" }
  368.     # 自动关闭
  369.     @text.gsub!(/\\X\[(\d+)\]/i)  { "\x17[#{$1}]" }
  370.     @text.gsub!(/\\X/i)            { "\x18" }
  371.   end
  372.   #--------------------------------------------------------------------------
  373.   # ◎ 设置窗口背景与位置
  374.   #--------------------------------------------------------------------------
  375.   def reset_window
  376.     @background = $game_message.background
  377.     @position = $game_message.position
  378.     if @background == 0   # 普通窗口
  379.       self.opacity = 255
  380.     else                  # 背景变暗、透明
  381.       self.opacity = 0
  382.     end
  383.     case @position
  384.     when 0  # 上
  385.       self.y = 0
  386.       @gold_window.y = 360
  387.     when 1  # 中
  388.       # 通过计算获取
  389.       self.y = (Graphics.height-self.height)/2
  390.       @gold_window.y = 0
  391.     when 2  # 下
  392.       # 通过计算获取
  393.       self.y = Graphics.height-self.height
  394.       @gold_window.y = 0
  395.     end
  396.   end
  397.   #--------------------------------------------------------------------------
  398.   # ◎ 消息结束
  399.   #--------------------------------------------------------------------------
  400.   def terminate_message
  401.     self.active = false
  402.     self.pause = false
  403.     self.index = -1
  404.     @gold_window.close
  405.     @number_input_window.active = false
  406.     @number_input_window.visible = false
  407.     $game_message.main_proc.call if $game_message.main_proc != nil
  408.     $game_message.clear
  409.     # 处理名称背景条和半身像
  410.     @namebar_sprite.visible = false
  411.     @face_sprite.visible = false
  412.     @face_sprite.bitmap.clear
  413.   end
  414.   #--------------------------------------------------------------------------
  415.   # ◎ 更新消息
  416.   #--------------------------------------------------------------------------
  417.   def update_message
  418.     loop do
  419.       c = @text.slice!(/./m)            # 获取下一条文字
  420.       case c
  421.       when nil                          # 没有可以显示的文字
  422.         finish_message                  # 更新结束
  423.         break
  424.       when "\x00"                       # 换行
  425.         new_line
  426.         if @line_count >= MAX_LINE      # 行数为最大时
  427.           unless @text.empty?           # 如果还有增加则继续
  428.             self.pause = true           # 等待输入
  429.             break
  430.           end
  431.         end
  432.       when "\x01"                       # \C[n]  (更改文字色)
  433.         @text.sub!(/\[([0-9]+)\]/, "")
  434.         contents.font.color = text_color($1.to_i)
  435.         next
  436.       when "\x02"                       # \G  (显示所持金)
  437.         @gold_window.refresh
  438.         @gold_window.open
  439.       when "\x03"                       # \.  (等待 1/4 秒)
  440.         @wait_count = 15
  441.         break
  442.       when "\x04"                       # \|  (等待 1 秒)
  443.         @wait_count = 60
  444.         break
  445.       when "\x05"                       # \!  (等待输入)
  446.         self.pause = true
  447.         break
  448.       when "\x06"                       # \>  (瞬间显示 ON)
  449.         @line_show_fast = true
  450.       when "\x07"                       # \<  (瞬间显示 OFF)
  451.         @line_show_fast = false
  452.       when "\x08"                       # \^  (不等待输入)
  453.         @pause_skip = true
  454.       # 更改不透明度的情况下
  455.       when "\x09"
  456.         @text.sub!(/\[(\d+)\]/, "")
  457.         contents.font.color.alpha = $1.to_i
  458.       # 显示技能情况下
  459.       when "\x10"
  460.         @text.sub!(/\[(\d+)\]/, "")
  461.         draw_icon($data_skills[$1.to_i].icon_index, @contents_x, @contents_y)
  462.         # 纵坐标增加图标宽度
  463.         @contents_x += 24
  464.       # 显示物品情况下
  465.       when "\x11"
  466.         @text.sub!(/\[(\d+)\]/, "")
  467.         draw_icon($data_items[$1.to_i].icon_index, @contents_x, @contents_y)
  468.         # 纵坐标增加图标宽度
  469.         @contents_x += 24
  470.       # 显示武器情况下
  471.       when "\x12"
  472.         @text.sub!(/\[(\d+)\]/, "")
  473.         draw_icon($data_weapons[$1.to_i].icon_index, @contents_x, @contents_y)
  474.         # 纵坐标增加图标宽度
  475.         @contents_x += 24
  476.       # 显示防具情况下
  477.       when "\x13"
  478.         @text.sub!(/\[(\d+)\]/, "")
  479.         draw_icon($data_armors[$1.to_i].icon_index, @contents_x, @contents_y)
  480.         # 纵坐标增加图标宽度
  481.         @contents_x += 24
  482.       # 更改字体的情况下
  483.       when "\x14"
  484.         @text.sub!(/\[(\d+)\]/, "")
  485.         contents.font.size = $1.to_i
  486.       when "\x15"
  487.         @text.sub!(/\[(\d+)\]/, "")
  488.         contents.font.name = FONT_ARRAY[$1.to_i]
  489.       when "\x16"
  490.         @text.sub!(/\[(\d+)\]/, "")
  491.         contents.font.color = text_color($1.to_i)
  492.       # 自动关闭对话框的情况下
  493.       when "\x17"
  494.         @text.sub!(/\[(\d+)\]/, "")
  495.         @auto_close = $1.to_i
  496.       when "\x18"
  497.         @auto_close = AUTO_CLOSE
  498.       # 普通文字的情况下
  499.       else
  500.         font_height = contents.font.size + 2
  501.         contents.draw_text(@contents_x, @contents_y, 40, font_height, c)
  502.         c_width = contents.text_size(c).width
  503.         @contents_x += c_width
  504.       end
  505.       break unless @show_fast or @line_show_fast
  506.     end
  507.   end
  508.   #--------------------------------------------------------------------------
  509.   # ◎ 消息更新结束
  510.   #--------------------------------------------------------------------------
  511.   def finish_message
  512.     if $game_message.choice_max > 0
  513.       start_choice
  514.     elsif $game_message.num_input_variable_id > 0
  515.       start_number_input
  516.     elsif @pause_skip
  517.       terminate_message
  518.     else
  519.       self.pause = true
  520.     end
  521.     @wait_count = 10
  522.     @text = nil
  523.   end
  524.   #--------------------------------------------------------------------------
  525.   # ● 开始选择项
  526.   #--------------------------------------------------------------------------
  527.   def start_choice
  528.     self.active = true
  529.     self.index = 0
  530.   end
  531.   #--------------------------------------------------------------------------
  532.   # ◎ 开始输入数值
  533.   #--------------------------------------------------------------------------
  534.   def start_number_input
  535.     digits_max = $game_message.num_input_digits_max
  536.     number = $game_variables[$game_message.num_input_variable_id]
  537.     @number_input_window.digits_max = digits_max
  538.     @number_input_window.number = number
  539.     if $game_message.face_name.empty?
  540.       @number_input_window.x = x
  541.     else
  542.       # 代入半身像宽度
  543.       @number_input_window.x = x + @face_width
  544.     end
  545.     @number_input_window.y = y + @contents_y
  546.     @number_input_window.active = true
  547.     @number_input_window.visible = true
  548.     @number_input_window.update
  549.   end
  550.   #--------------------------------------------------------------------------
  551.   # ◎ 更新光标 #可能仍须增加判断
  552.   #--------------------------------------------------------------------------
  553.   def update_cursor
  554.     if @index >= 0
  555.       if $game_message.face_name.empty?
  556.         x = 0
  557.         y = ($game_message.choice_start+@index)*(MSG_FONT_SIZE+2)
  558.         width = contents.width
  559.       else
  560.         x = @show_right ? 0 : @face_width
  561.         y = ($game_message.choice_start+@index)*(MSG_FONT_SIZE+2) + NAME_Y_ADJ
  562.         width = contents.width - @face_width
  563.       end
  564.       self.cursor_rect.set(x, y, width, (MSG_FONT_SIZE+2))
  565.     else
  566.       self.cursor_rect.empty
  567.     end
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ● 文章显示输入处理
  571.   #--------------------------------------------------------------------------
  572.   def input_pause
  573.     if Input.trigger?(Input::B) or Input.trigger?(Input::C)
  574.       self.pause = false
  575.       if @text != nil and not @text.empty?
  576.         new_page if @line_count >= MAX_LINE
  577.       else
  578.         terminate_message
  579.       end
  580.     end
  581.   end
  582.   #--------------------------------------------------------------------------
  583.   # ● 选择项输入处理
  584.   #--------------------------------------------------------------------------
  585.   def input_choice
  586.     if Input.trigger?(Input::B)
  587.       if $game_message.choice_cancel_type > 0
  588.         Sound.play_cancel
  589.         $game_message.choice_proc.call($game_message.choice_cancel_type - 1)
  590.         terminate_message
  591.       end
  592.     elsif Input.trigger?(Input::C)
  593.       Sound.play_decision
  594.       $game_message.choice_proc.call(self.index)
  595.       terminate_message
  596.     end
  597.   end
  598.   #--------------------------------------------------------------------------
  599.   # ● 数值输入处理
  600.   #--------------------------------------------------------------------------
  601.   def input_number
  602.     if Input.trigger?(Input::C)
  603.       Sound.play_decision
  604.       $game_variables[$game_message.num_input_variable_id] =
  605.         @number_input_window.number
  606.       $game_map.need_refresh = true
  607.       terminate_message
  608.     end
  609.   end
  610.   #--------------------------------------------------------------------------
  611.   # ○ 生成名称背景条
  612.   #--------------------------------------------------------------------------
  613.   def create_namebar_sprite
  614.     @namebar_sprite = Sprite.new
  615.     @namebar_sprite.bitmap = Bitmap.new(Graphics.width-NAME_X_ADJ, NAME_FONT_SIZE+4)
  616.     # 可视性
  617.     @namebar_sprite.visible = false
  618.     # 准备参数
  619.     rect = Rect.new(NAME_X_ADJ, 0, @namebar_sprite.width, @namebar_sprite.height)
  620.     color1 = text_color(NAME_BAR_COLOR)
  621.     color2 = text_color(NAME_BAR_COLOR)
  622.     color1.alpha = NAME_BAR_OPACITY
  623.     color2.alpha = 0
  624.     # 描绘渐变条
  625.     @namebar_sprite.bitmap.gradient_fill_rect(rect, color1, color2)
  626.   end
  627.   #--------------------------------------------------------------------------
  628.   # ○ 生成半身像
  629.   #--------------------------------------------------------------------------
  630.   def create_face_sprite
  631.     @face_sprite = Sprite.new
  632.     @face_sprite.bitmap = Bitmap.new(1,1)
  633.     @face_sprite.z = self.z + 2
  634.     @face_sprite.visible = false
  635.     @old_name = ""                        # 判断头像是否改变
  636.     @old_index = 0                        # 判断头像是否改变
  637.   end
  638.   #--------------------------------------------------------------------------
  639.   # ○ 显示名称背景条
  640.   #--------------------------------------------------------------------------
  641.   def show_namebar_sprite
  642.     # 坐标跟随
  643.     @namebar_sprite.x = self.x
  644.     @namebar_sprite.y = self.y + 16 - 1
  645.     @namebar_sprite.z = self.z + 1
  646.     # 可视性
  647.     @namebar_sprite.visible = true
  648.   end
  649.   #--------------------------------------------------------------------------
  650.   # ○ 描绘半身像
  651.   #     face_name  : 半身像图像文件名
  652.   #     face_index : 半身像图像索引
  653.   #--------------------------------------------------------------------------
  654.   def draw_msg_face(face_name, face_index)
  655.     bitmap = Cache.face(face_name)
  656.     width = bitmap.width / 4
  657.     height = bitmap.height / 2
  658.     rect = Rect.new(0, 0, 0, 0)
  659.     rect.x = face_index % 4 * width
  660.     rect.y = face_index / 4 * height
  661.     rect.width = width
  662.     rect.height = height
  663.     @face_sprite.bitmap = Bitmap.new(width, height)
  664.     @face_sprite.bitmap.blt(0, 0, bitmap, rect)
  665.     @face_sprite.mirror = @show_right
  666.     bitmap.dispose
  667.   end
  668.   #--------------------------------------------------------------------------
  669.   # ○ 是否显示名称
  670.   #--------------------------------------------------------------------------
  671.   def show_name?
  672.     return @namebar_sprite.visible
  673.   end
  674.   #--------------------------------------------------------------------------
  675.   # ○ 返回字体
  676.   #     index       : 编号
  677.   #--------------------------------------------------------------------------
  678.   def get_font(index)
  679.     case index
  680.     when 0
  681.       return Font.new(FONT_ARRAY[NAME_FONT_NAME], NAME_FONT_SIZE)
  682.     when 1
  683.       return Font.new(FONT_ARRAY[MSG_FONT_NAME], MSG_FONT_SIZE)
  684.     end
  685.   end
  686.   #--------------------------------------------------------------------------
  687.   # ○ 获取半身像宽度
  688.   #     face_name  : 半身像图像文件名
  689.   #--------------------------------------------------------------------------
  690.   def get_face_width(face_name)
  691.     bitmap = Cache.face(face_name)
  692.     @face_width = bitmap.width / 4
  693.     bitmap.dispose
  694.   end
  695.   #--------------------------------------------------------------------------
  696.   # ○ 设定半身像位置
  697.   #--------------------------------------------------------------------------
  698.   def set_face_pos
  699.     @face_sprite.y = self.y + (self.height-@face_sprite.height) + FACE_Y_ADJ
  700.     if @show_right
  701.       @face_sprite.x = self.width - @face_sprite.width - FACE_X_ADJ
  702.     else
  703.       @face_sprite.x = self.x + FACE_X_ADJ
  704.     end
  705.     # 可视性
  706.     @face_sprite.visible = true
  707.   end
  708. end
复制代码
地址http://rpg.blue/forum.php?mod=vi ... F%E5%AF%B9%E8%AF%9D

半身像对话框功能版.rar

324.34 KB, 下载次数: 57

点评

這版也沒有開關的吧... 我需要的是能透過事件關閉開啟的"開關" 以及在戰鬥中無效果... 感恩  发表于 2011-12-14 16:24
师傅你很犀利啊。。。这个也有。。给我也来一份吧。。  发表于 2011-12-14 13:16
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2011-3-10
帖子
65
4
 楼主| 发表于 2011-12-15 01:52:57 | 只看该作者
誰能幫幫我啊~~~~~~~~~
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2011-3-10
帖子
65
5
 楼主| 发表于 2011-12-16 00:45:01 | 只看该作者
真的都沒人可以幫幫我嘛~~~

点评

{:4_132:}都沒人幫忙還要被扣分 ~~嗚  发表于 2011-12-16 00:50

评分

参与人数 1星屑 -60 收起 理由
各种压力的猫君 -60 三连帖

查看全部评分

回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
448
在线时间
628 小时
注册时间
2011-9-27
帖子
3996
6
发表于 2011-12-16 09:27:27 | 只看该作者
半身像对话脚本和那个不冲突就将就用呗

点评

我現在用的其實也不衝突了...只是希望能有個開關好設定= =  发表于 2011-12-16 16:06
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2011-3-10
帖子
65
7
 楼主| 发表于 2011-12-17 05:08:17 | 只看该作者
唉...我都絕望了
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
130 小时
注册时间
2011-3-10
帖子
65
8
 楼主| 发表于 2011-12-18 07:14:13 | 只看该作者

评分

参与人数 1星屑 -2 收起 理由
月夜神音 -2 别纯表情啊!亲!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-29 13:19

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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