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

Project1

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

[已经解决] 請問如何新增文字控制指令(gsub)?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
461 小时
注册时间
2008-11-19
帖子
607
跳转到指定楼层
1
发表于 2012-6-11 02:39:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sai90306 于 2012-6-11 03:01 编辑

請問如何給這個腳本加上新的"文字指令"?
也就是透過增加新的gsub方法來實現
例如增加字體大小和文字加外框兩個指令
  1. module Sword
  2. #=======================================
  3. #★魔劍工舖 - 地圖任意顯示文字窗口
  4. #轉貼腳本請著名出處:[url]http://blog.yam.com/a870053jjkj/article/24354553[/url]
  5. #如果採用在遊戲中,看你高興是否顯示腳本出處,但嚴禁說是自己寫的腳本!!
  6. #=======================================
  7. #● 使用者自定設置
  8. SWORD_TEXT_DISP = 1 # 切換畫面時是否釋放所有窗口,0表示不使用
  9. #=======================================
  10. #● 文字指令
  11. # \V[數值] : 顯示指定編號的變數(可用來代替 [數值] 使用!!)
  12.   
  13. # \C[數值] : 變更文字的顏色,顏色請在Window_Base類的text_color方法中設置
  14.   
  15. # \N[數值] : 顯示指定編號的角色名稱

  16. # \S[數值] : 顯示指定編號的技能名稱

  17. # \I[數值] : 顯示指定編號的物品名稱

  18. # \W[數值] : 顯示指定編號的武器名稱

  19. # \A[數值] : 顯示指定編號的防具名稱

  20. # \E[數值] : 顯示指定編號的敵人名稱

  21. # \\ : 顯示「\」符號
  22. #=======================================
  23. #● 呼叫方法
  24. # sword_text(編號, X座標, 座標, 寬度, 高度, 不透明度, '
  25. # 文字內容
  26. # ')
  27. #--------------------------------------------------------------
  28. # [X座標] 輸入 「true」 : 窗口的X座標為呼叫此腳本的事件的中央顯示

  29. # [Y座標] 輸入 「true」 : 窗口的Y座標為呼叫此腳本的事件的上方顯示

  30. # [寬度] 輸入 「true」 : 窗口的寬度依照文字內容最長的內容自動調整

  31. # [高度] 輸入 「true」 : 窗口的高度依照文字內容的行數來自動調整
  32. #=======================================
  33. #● 關閉窗口
  34. # sword_text_dispose(編號) : 關閉指定編號的窗口

  35. # sword_text_dispose(true) : 關閉目前顯示編號最大的窗口

  36. # sword_text_dispose(false) : 關閉目前顯示編號最小的窗口

  37. # sword_text_dispose(nil) : 關閉目前顯示的所有窗口

  38. #詳細設置說明請參考:[url]http://blog.yam.com/a870053jjkj/article/24354553[/url]
  39. #=======================================
  40.   $sword_text_window = []
  41. end

  42. class WSword_Text < Window_Base
  43.   def initialize(z, x, y, ox, oy, text)
  44.     contents = Bitmap.new(33 - 32 , 33 - 32)
  45.     # 將字串分解成數組並計算最長文字寬度與行數
  46.     text = text.scan(/\S*/)
  47.     cx = []
  48.     br = 0
  49.     for i in 0...text.size
  50.       text[i] == "" ? text[i] = nil : 0
  51.       text[i] == nil ? br += 32 : cx[i] = contents.text_size(text[i]).width + 32
  52.     end
  53.     br -= 32
  54.     cx.compact!
  55.     for i in 1...cx.size
  56.       cx[0] >= cx[i] ? 0 : cx[0] = cx[i]
  57.     end
  58.     # 刪除不必要的部份,只留字串
  59.     text.shift and text.pop and text.pop
  60.     text.compact!
  61.     # 當指定位置或大小為true時自動調整
  62.     @x = x
  63.     x.is_a?(Array) ? x = x[0] - (cx[0] / 2 - 16) : 0
  64.     y.is_a?(Array) ? y = y[0] - br / 2 - br / 2 - 16 : 0
  65.     ox == true ? @ox = true : 0
  66.     @ox == true ? ox = cx[0] : 0
  67.     oy == true ? oy = br : 0
  68.     super(x, y, ox, oy)
  69.     self.contents = Bitmap.new(width - 32, height - 32)
  70.     self.z = z
  71.     @text = text
  72.     refresh
  73.   end
  74.   def refresh
  75.     self.contents.clear
  76.     # 防止相同字符串被更動,加上標記
  77.     a = @text[0] + "\\br"
  78.     if @ox == true
  79.       text_width(@text)
  80.     end
  81.     a.gsub!(/\\br/) { "" } # 刪除標記
  82.     @text[0] = a
  83.     y = 0 # 文字的Y座標
  84.     # 循環每行的內容
  85.     for i in @text
  86.       text = [] # 儲存一行內容和指令之用
  87.       b = 0 # 數組欄位
  88.       a = "" # 暫存字串中的1個字
  89.       i.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  90.       i.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\000[#{$1}]" }
  91.       i.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  92.         $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  93.       end
  94.       i.gsub!(/\\[Ss]\[([0-9]+)\]/) do
  95.         $data_skills[$1.to_i] != nil ? $data_skills[$1.to_i].name : ""
  96.       end
  97.       i.gsub!(/\\[Ii]\[([0-9]+)\]/) do
  98.         $data_items[$1.to_i] != nil ? $data_items[$1.to_i].name : ""
  99.       end
  100.       i.gsub!(/\\[Ww]\[([0-9]+)\]/) do
  101.         $data_weapons[$1.to_i] != nil ? $data_weapons[$1.to_i].name : ""
  102.       end
  103.       i.gsub!(/\\[Aa]\[([0-9]+)\]/) do
  104.         $data_armors[$1.to_i] != nil ? $data_armors[$1.to_i].name : ""
  105.       end
  106.       i.gsub!(/\\[Ee]\[([0-9]+)\]/) do
  107.         $data_enemies[$1.to_i] != nil ? $data_enemies[$1.to_i].name : ""
  108.       end
  109.       while ((c = i.slice!(/./m)) != nil)
  110.         if c == "\000" # \C 顏色
  111.           text[b] = a
  112.           b += 1
  113.           i.sub!(/\[([0-9]+)\]/, "")
  114.           text[b] = ["c", $1.to_i]
  115.           b += 1
  116.           a = ""
  117.           next
  118.         end
  119.         a += c
  120.       end
  121.       text[b] = a
  122.       # 產生窗口內容
  123.       x = 0
  124.       self.contents.font.color = normal_color
  125.       # 循環該行內容(判斷指令)
  126.       for i in text
  127.         if i.is_a?(String) # 顯示文字
  128.           self.contents.draw_text(x, y, 640, 32, i)
  129.           x += contents.text_size(i).width
  130.         else
  131.           case i[0]
  132.           when "c" # 更換顏色
  133.             self.contents.font.color = text_color(i[1])
  134.           end
  135.         end
  136.       end
  137.       y += 32
  138.     end
  139.   end
  140.   # 自動調整寬度的方法
  141.   def text_width(text)
  142.     text = [] # 用來記錄每行文字的寬度
  143.     b = 0 # 數組欄位
  144.     for i in @text
  145.       i.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  146.       i.gsub!(/\\[Cc]\[([0-9]+)\]/) { "" }
  147.       i.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  148.         $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  149.       end
  150.       i.gsub!(/\\[Ss]\[([0-9]+)\]/) do
  151.         $data_skills[$1.to_i] != nil ? $data_skills[$1.to_i].name : ""
  152.       end
  153.       i.gsub!(/\\[Ii]\[([0-9]+)\]/) do
  154.         $data_items[$1.to_i] != nil ? $data_items[$1.to_i].name : ""
  155.       end
  156.       i.gsub!(/\\[Ww]\[([0-9]+)\]/) do
  157.         $data_weapons[$1.to_i] != nil ? $data_weapons[$1.to_i].name : ""
  158.       end
  159.       i.gsub!(/\\[Aa]\[([0-9]+)\]/) do
  160.         $data_armors[$1.to_i] != nil ? $data_armors[$1.to_i].name : ""
  161.       end
  162.       i.gsub!(/\\[Ee]\[([0-9]+)\]/) do
  163.         $data_enemies[$1.to_i] != nil ? $data_enemies[$1.to_i].name : ""
  164.       end
  165.       text[b] = contents.text_size(i).width
  166.       b += 1
  167.     end
  168.     # 獲取數組中數值最高的數值
  169.     for i in 1...text.size
  170.       text[0] >= text[i] ? 0 : text[0] = text[i]
  171.     end
  172.     self.width = text[0] + 32
  173.     # 窗口X座標修正
  174.     if @x.is_a?(Array)
  175.       x = @x[0] - (self.width / 2 - 16)
  176.       self.x = x
  177.     end
  178.     self.contents = Bitmap.new(width - 32, height - 32)
  179.   end
  180. end

  181. #☆ 事件中呼叫的處理
  182. class Interpreter
  183.   # 產生窗口的方法
  184.   def sword_text(i, x, y, width, height, opacity, text)
  185.     # 防止非法編號
  186.     if i <= 0
  187.       return
  188.     end
  189.     x == true ? x = [$game_map.events[@event_id].x * 32] : 0
  190.     y == true ? y = [$game_map.events[@event_id].y * 32] : 0
  191.     unless $sword_text_window[i] == nil
  192.       $sword_text_window[i].dispose
  193.     end
  194.     $sword_text_window[i] = WSword_Text.new(i, x, y, width, height, text)
  195.     $sword_text_window[i].opacity = opacity
  196.   end
  197.   # 釋放窗口的方法
  198.   def sword_text_dispose(dispose)
  199.     case dispose
  200.     when Integer # 整數(釋放指定編號的窗口)
  201.       unless $sword_text_window[dispose] == nil
  202.         $sword_text_window[dispose].dispose
  203.         $sword_text_window[dispose] = nil
  204.       end
  205.     when TrueClass # true(釋放最前面的窗口)
  206.       i = 1
  207.       loop do
  208.         a = $sword_text_window.size - i
  209.         unless $sword_text_window[a] == nil
  210.           $sword_text_window[a].dispose
  211.           $sword_text_window[a] = nil
  212.           return
  213.         end
  214.         if a <= 0
  215.           return
  216.         end
  217.         i += 1
  218.       end
  219.     when FalseClass # false(釋放最後面的窗口)
  220.       for i in 1...$sword_text_window.size
  221.         unless $sword_text_window[i] == nil
  222.           $sword_text_window[i].dispose
  223.           $sword_text_window[i] = nil
  224.           return
  225.         end
  226.       end
  227.     when NilClass # nil(釋放所有顯示的窗口)
  228.       for i in 1...$sword_text_window.size
  229.         unless $sword_text_window[i] == nil
  230.           $sword_text_window[i].dispose
  231.           $sword_text_window[i] = nil
  232.         end
  233.       end
  234.     end
  235.   end
  236. end

  237. #☆ 切換畫面時釋放窗口
  238. class Scene_Map
  239.   include Sword
  240.   alias sword_main4 main
  241.   def main
  242.     sword_main4
  243.     SWORD_TEXT_DISP == 0 ? 0 : Interpreter.new.sword_text_dispose(nil)
  244.   end
  245. end
复制代码
另附上可能有相關的參考腳本
  1. module Sword
  2. #=======================================
  3. #★ 魔劍工舖 - 多功能對話框
  4. # 轉貼腳本請著名出處:[url]http://blog.yam.com/a870053jjkj/[/url]
  5. # 如果採用在遊戲中,看你高興是否顯示腳本出處,但嚴禁說是自己寫的腳本!!
  6. #=======================================
  7. #● 使用者自定設置
  8. #○ 基本設置
  9. SWORD_MESS_POSI = [16, 0, 0] # 設定對話框的 [上, 中, 下]的Y座標,0為自動調整
  10. SWORD_MESS_PAUS = 10   # 設定暫停標誌的每格動畫的時間
  11. SWORD_MESS_SWIT = ['開', '關'] # 設定控制碼「\S」顯示的內容 ([ON,OFF)
  12. SWORD_MESS_SEVP = [80, 100] # 設定控制碼「\SE」預設的 [音量, 音調]
  13. SWORD_MESS_NACO = [192, 224, 255] # 設定用頭像+名稱控制碼的名稱文字顏色
  14. SWORD_MESS_HEAD = [120, 140] # 設定頭像 [寬度, 高度],0表示依圖片自動調整
  15. SWORD_MESS_NAME = '' # 設定對話框預設的字體,找不到該字體就用預設字體
  16. SWORD_MESS_SIZE = 22 # 設定對話框預設的文字大小,0表示使用預設大小
  17. SWORD_MESS_BOIT = [0, 0] # 設定對話框預設是否 [粗體, 斜體],0否、1是
  18. SWORD_MESS_COLO = [255, 255, 255] # 設定對話框預設的文字顏色 [紅, 綠, 藍]
  19. #--------------------------------------------------------------
  20. #○ 追蹤字詞添加設置
  21. # 找到指定內容,就在內容前後附加內容,'追蹤內容'=>['前附加內容', '後附加內容'],
  22. SWORD_MESS_TRAY = {
  23.   '你好'=>['\c[6]', '\c[0]'],
  24.   '阻止他'=>['\fs[32]', '\fs[22]'],
  25. } # 設置結束
  26. #=======================================
  27. #● 控制碼
  28. #○ 內容控制碼
  29. # \V[變數編號] : 顯示指定變數編號的數值,可當成其他控制碼的參數用(深度為5)
  30. # \S[開關編號] : 顯示指定開關編號目前的狀態文字,依設置SWORD_MESS_SWIT
  31. # \N[角色編號] : 顯示指定角色編號的角色名稱
  32. # \CN[職業編號] : 顯示指定職業編號的職業名稱
  33. # \SN[技能編號] : 顯示指定技能編號的技能名稱
  34. # \IN[物品編號] : 顯示指定物品編號的物品名稱
  35. # \WN[武器編號] : 顯示指定武器編號的武器名稱
  36. # \AN[防具編號] : 顯示指定防具編號的防具名稱
  37. # \EN[敵人編號] : 顯示指定敵人編號的敵人名稱
  38. # \GV : 顯示目前玩家持有的金錢
  39. # \EQ[角色編號,部位] : 顯示角色編號裝備的名稱,部位-0武、1盾、2頭、3身、4飾
  40. # \\ : 顯示「\」,通常被此控制碼顯示的左斜線通常不會被當成是控制碼而使用
  41. # \MA[地圖編號] : 顯示指定地圖編號的地圖名稱,設置0表示目前的地圖
  42. # \NN[角色編號] : 顯示指定角色編號的戰鬥圖檔案名稱(可配合頭像控制碼使用)
  43. # \NS[技能編號] : 顯示指定技能編號的圖標檔案名稱(可配合 \I 控制碼使用)
  44. # \NI[物品編號] : 顯示指定物品編號的圖標檔案名稱(可配合 \I 控制碼使用)
  45. # \NW[武器編號] : 顯示指定武器編號的圖標檔案名稱(可配合 \I 控制碼使用)
  46. # \NA[防具編號] : 顯示指定防具編號的圖標檔案名稱(可配合 \I 控制碼使用)
  47. # \I[檔案名稱] : 顯示Icons資料夾中指定檔案名稱的圖片
  48. # \HR : 顯示分隔線,會從此控制碼作為起點顯示到該行結束為止,會前進一行
  49. #--------------------------------------------------------------
  50. #○ 文字控制碼
  51. # \C[顏色代碼] : 變更預設的顏色,可在「Window_Base」腳本的text_color方法設置
  52. # \CR[紅,綠,藍] : 變更自定的顏色
  53. # \CU[紅,綠,藍] : 文字上下顏色漸層效果,會受變更顏色而取消此控制碼
  54. # \FN[字體名稱] : 變更指定的字體,如果該玩家電腦無該字體,則什麼都不做
  55. # \FS[大小] : 變更文字的大小,離下行的距離會受到影響,預設大小為22
  56. # \FB : 將文字變更為粗體表示,在使用一次會恢復原裝
  57. # \FI : 將文字往右斜倒表示,在使用一次會恢復原狀
  58. # \F_ : 將文字下面附加一條底線,在使用一次會恢復原狀
  59. # \F- : 將文字中央附加一條刪除線,在使用一次會恢復原狀
  60. # \FH : 將文字右下方附加上陰影,在使用一次會恢復原狀
  61. # \F : 回到無使用文字控制碼時的預設狀態
  62. #--------------------------------------------------------------
  63. #○ 頭像控制碼
  64. # \LS[檔案名稱] : 對話框左邊顯示指定檔案名稱的圖片,顯示內容寬度會減少
  65. # \LSU[角色名稱,檔案名稱] : 效果同 \LS 控制碼,只不過圖片上方加上角色名稱
  66. # \LSD[角色名稱,檔案名稱] : 效果同 \LS 控制碼,只不過圖片下方加上角色名稱
  67. #--------------------------------------------------------------
  68. #○ 聲音控制碼
  69. # \SE[檔案名稱] : 演奏指定檔案名稱的ME,音量和音調依SWORD_MESS_SEVP
  70. # \SE[檔案名稱,音量,音調] : 和上面的 \SE 控制碼一樣,但這可指定音量和音調
  71. # \SEX : 停止目前演奏的SE,可能會影響其他的SE,請找適當實機來使用
  72. #--------------------------------------------------------------
  73. #○ 功能控制碼
  74. # \G : 在右上方顯示金錢窗口
  75. # \M[幀數] : 變更每個字顯示的延遲時間,0表示1次全顯示,變更後會保存!!
  76. # \.[幀數] : 內容顯示到此控制碼會停止顯示,指定幀數到後才繼續顯示後面的內容
  77. # \! : 內容顯示到此控制碼會停止顯示,當按下確定鍵後才繼續顯示後面的內容
  78. # \> : 內容顯示到此控制碼後,則之後的內容會瞬間顯示完畢(暫時無效 \M 控制碼)
  79. # \^[幀數] : 內容顯示到此控制碼後開始計時,時間到時顯示下個事件指令
  80. # \L[編號] : 此控制碼視同指定編號的[設定記憶]的設置內容( \V 控制碼深度為2)
  81. # \XN : 增加1次無視換行標誌來防止換行(突破事件限制),但超過對話框則不適用
  82. # \SS[開關編號] : 該控制碼後面的內容隱藏,如果指定的開關為ON才會顯示
  83. # \SX : 使用 \SS 控制碼將後面的內容隱藏時,當執行到此控制碼就停止隱藏
  84. # \BR : 同Enter換行(突破事件換行限制用),此換行也會被 \XN 控制碼無效的可能
  85. # \P : 判斷下個事件是否為 [顯示文章],如果是就當做是同一個 [顯示文章] 事件
  86. # \SH[幀數] : 讓對話框震動指定的時間,後面內容會無法顯示(尚未找到解決方式)
  87. #=======================================
  88. #● 設置方法
  89. # 變更對話大小:$game_system.swordM_WidthHeight = [寬度, 高度]
  90. # 打字效果延遲:$game_system.swordM_rate = 延遲幀數
  91. # 存記憶控制碼:$game_system.swordM_save[編號] = '文字內容'
  92. # 變更按鍵顯示:$game_system.swordM_key
  93. #--------------------------------------------------------------
  94.   $Sword ? $Sword[1] = true : $Sword = {1=>true} # 腳本使用標誌
  95.   SWORD_MESS_INHE = 0 # 未完成物,請勿更動
  96. end
  97. # 詳細設置說明請參考:[url]http://blog.yam.com/a870053jjkj/article/[/url]
  98. #=======================================
  99. #■ 處理系統附屬資料的類別
  100. class Game_System
  101.   alias sword5_initialize initialize
  102.   attr_accessor :swordM_rate  # 對話框打字延遲速度
  103.   attr_accessor :swordM_save # 記憶控制碼的儲存庫
  104.   attr_accessor :swordM_WidthHeight # 對話框大小
  105.   #● 初始化狀態
  106.   def initialize
  107.     sword5_initialize
  108.     @swordM_rate = 5
  109.     @swordM_save = []
  110.     @swordM_key = true
  111.     @swordM_WidthHeight = [500, 160]
  112.   end
  113.   #-------------------------------------------------------------
  114.   #● 更換按鍵輸入全部顯示的方法
  115.   def swordM_key(a = false)
  116.     @swordM_key = (not @swordM_key) unless a
  117.     return @swordM_key if a
  118.   end
  119. end
  120. #=======================================
  121. #■ 暫停標誌窗口
  122. class WSword_MessagePause < Window_Base
  123.   include Sword
  124.   #● 初始化狀態
  125.   def initialize
  126.     super($game_system.swordM_WidthHeight[0] / 2 - 4,
  127.     33 + $game_system.swordM_WidthHeight[1] - 32, 48, 48)
  128.     self.contents = Bitmap.new(width - 32, height - 32)
  129.     self.visible = false
  130.     self.opacity = 0
  131.     self.z = 6010
  132.   end
  133.   #-------------------------------------------------------------
  134.   #● 更新內容
  135.   def refresh
  136.     @pause[1] -= 1
  137.     return unless @pause[1] == 0
  138.     self.contents.clear
  139.     cache = RPG::Cache.windowskin($data_system.windowskin_name)
  140.     case @pause[0]
  141.     when 1 # 左上
  142.       rx = 0 and ry = 0 and @pause = [2, SWORD_MESS_PAUS+1]
  143.     when 2 # 右上
  144.       rx = 1 and ry = 0 and @pause = [3, SWORD_MESS_PAUS+1]
  145.     when 3 # 左下
  146.       rx = 0 and ry = 1 and @pause = [4, SWORD_MESS_PAUS+1]
  147.     when 4 # 右下
  148.       rx = 1 and ry = 1 and @pause = [1, SWORD_MESS_PAUS+1]
  149.     end
  150.     self.contents.blt(0, 0, cache, Rect.new(160 + 16 * rx, 64 + 16 * ry, 16, 16))
  151.   end
  152.   #-------------------------------------------------------------
  153.   #● 顯示標誌(初始化暫停標記用)
  154.   def visible=(visible)
  155.     super(visible)
  156.     @pause = [4, 1]
  157.     case $game_system.message_position
  158.     when 0  # 上
  159.       self.y = SWORD_MESS_POSI[0] == 0 ? 16 : SWORD_MESS_POSI[0]
  160.     when 1  # 中
  161.       self.y = SWORD_MESS_POSI[1] == 0 ?
  162.       320 - $game_system.swordM_WidthHeight[1] : SWORD_MESS_POSI[1]
  163.     when 2  # 下
  164.       self.y = SWORD_MESS_POSI[2] == 0 ?
  165.       464 - $game_system.swordM_WidthHeight[1] : SWORD_MESS_POSI[2]
  166.     end
  167.     # 戰鬥時的場合
  168.     if $game_temp.in_battle
  169.       self.y = SWORD_MESS_POSI[0] == 0 ? 16 : SWORD_MESS_POSI[0]
  170.     end
  171.     self.y += $game_system.swordM_WidthHeight[1] - 32
  172.     self.x = (640 - $game_system.swordM_WidthHeight[0]) / 2 +
  173.     ($game_system.swordM_WidthHeight[0] / 2) - 24
  174.   end
  175. end
  176. #=======================================
  177. #■ 對話框戰鬥圖(頭像)窗口
  178. class WSword_MessageCharacter < Window_Base
  179.   include Sword
  180.   #● 初始化物件
  181.   def initialize(x, y)
  182.     super(x - 48, y - 48, 640, 480)
  183.     self.contents = Bitmap.new(width - 32, height - 32)
  184.     self.z = 6005
  185.     self.visible = false
  186.     self.opacity = 0
  187.     @name = ['', 0]  # 記錄 [角色名稱, 頭像類型]
  188.   end
  189.   #-------------------------------------------------------------
  190.   #● 更新內容
  191.   def refresh(type = 0, battler = '', name = '')
  192.     #○ 描繪圖片
  193.     battler = RPG::Cache.battler(battler, 0)
  194.     a = SWORD_MESS_HEAD[0] == 0 ? battler.width : SWORD_MESS_HEAD[0]
  195.     b = SWORD_MESS_HEAD[1] == 0 ? battler.height : SWORD_MESS_HEAD[1]
  196.     record = [type, battler.width, battler.height, 0]
  197.     record[1] = SWORD_MESS_HEAD[0] if SWORD_MESS_HEAD[0] > 0
  198.     record[2] = SWORD_MESS_HEAD[1] if SWORD_MESS_HEAD[1] > 0
  199.     return record if @name[0] == name if type == @name[1]
  200.     @name = [name, type]
  201.     self.contents.clear
  202.     y = 0 # 圖片Y座標修正用
  203.     #○ 描繪角色名稱
  204.     color = SWORD_MESS_NACO
  205.     self.contents.font.color = Color.new(color[0], color[1], color[2])
  206.     case type
  207.     when 2  ; y = 32 ; self.contents.draw_text(0, 0, SWORD_MESS_HEAD[0], 32, name, 1)
  208.     when 3
  209.       self.contents.draw_text(0, record[2], SWORD_MESS_HEAD[0], 32, name, 1)
  210.     end
  211.     self.contents.blt(0, y, battler, Rect.new(0, 0, a, b))
  212.     return record
  213.   end
  214. end
  215. #=======================================
  216. #■ 顯示對話的訊息視窗
  217. class Window_Message < Window_Selectable
  218.   include Sword
  219.   attr_accessor :afresh # 重新產生窗口標誌
  220.   #● 初始化物件
  221.   def initialize
  222.     super((640 - $game_system.swordM_WidthHeight[0]) / 2,
  223.     304, $game_system.swordM_WidthHeight[0], $game_system.swordM_WidthHeight[1])
  224.     self.contents = Bitmap.new(width - 32, height - 32)
  225.     self.visible = false
  226.     self.z = 6000
  227.     @fade_out = false
  228.     @font = Font.exist?(SWORD_MESS_NAME) ? SWORD_MESS_NAME : Font.default_name
  229.     @wait_count = -1 # 自動關閉對話框時間
  230.     @delay_input = 0 # 按鍵全部顯示後的延遲時間
  231.     @messagepause_wsword = WSword_MessagePause.new # 產生暫停標誌窗口
  232.     @messagecharacter_wsword = WSword_MessageCharacter.new(self.x, self.y) # 頭像窗口
  233.     self.opacity = 160
  234.     self.index = -1 # 選擇項位置
  235.   end
  236.   #-------------------------------------------------------------
  237.   #● 設定視窗位置與不透明度
  238.   def reset_window
  239.     # 更改對話框的情況
  240.     unless $game_system.swordM_WidthHeight == [self.width, self.height]
  241.       self.x = (640 - $game_system.swordM_WidthHeight[0]) / 2
  242.       self.width = $game_system.swordM_WidthHeight[0]
  243.       self.height = $game_system.swordM_WidthHeight[1]
  244.       self.contents = Bitmap.new(width - 32, height - 32)
  245.     end
  246.     if $game_temp.in_battle
  247.       self.y = SWORD_MESS_POSI[0] == 0 ? 16 : SWORD_MESS_POSI[0]
  248.     else
  249.       case $game_system.message_position
  250.       when 0  # 上
  251.         self.y = SWORD_MESS_POSI[0] == 0 ? 16 : SWORD_MESS_POSI[0]
  252.       when 1  # 中
  253.         self.y = SWORD_MESS_POSI[1] == 0 ?
  254.         320 - $game_system.swordM_WidthHeight[1] : SWORD_MESS_POSI[1]
  255.       when 2  # 下
  256.         self.y = SWORD_MESS_POSI[2] == 0 ?
  257.         464 - $game_system.swordM_WidthHeight[1] : SWORD_MESS_POSI[2]
  258.       end
  259.     end
  260.     if $game_system.message_frame == 0
  261.       self.opacity = 160
  262.     else
  263.       self.opacity = 0
  264.     end
  265.     self.back_opacity = 160
  266.   end
  267.   #-------------------------------------------------------------
  268.   #● 更新內容
  269.   def refresh
  270.     self.contents.clear
  271.     # 字體變更為預設值
  272.     unless $game_switches[SWORD_MESS_INHE]
  273.       self.contents.font.name = @font
  274.       self.contents.font.size = SWORD_MESS_SIZE == 0 ?
  275.       Font.default_size : SWORD_MESS_SIZE
  276.       self.contents.font.bold = SWORD_MESS_BOIT[0] == 0 ?
  277.       Font.default_bold : SWORD_MESS_BOIT[0]
  278.       self.contents.font.italic = SWORD_MESS_BOIT[1] == 0 ?
  279.       Font.default_italic : SWORD_MESS_BOIT[1]
  280.       color = SWORD_MESS_COLO
  281.       self.contents.font.color = Color.new(color[0], color[1], color[2])
  282.       @record[0] = nil if @record
  283.     end
  284.     @cursor_width = [0, $game_system.swordM_WidthHeight[0] - 32]
  285.     # 定義控制碼用的記錄空間
  286.     # [瞬間顯示,瞬間顯示2,忽略換行,頭像記錄,開關隱藏,圖示,文字大小,該行大小]
  287.     x = 0 and y = 0 and record = [false, false, 0, [0, 0, 0, 0], {}, nil, 0, []]
  288.     # [漸層,底線,刪除線,陰影,底色]
  289.     @record = [nil, false, false, false, nil]
  290.     message_text = $game_temp.message_text
  291.     #○ 追蹤字詞處理
  292.     for i in SWORD_MESS_TRAY
  293.       message_text.gsub!(/#{i[0]}/) { i[1][0] + i[0] + i[1][1] }
  294.     end
  295.     #○ 轉換控制碼
  296.     message_text.gsub!(/\\[Vv]\[(\d+)\]/) { $game_variables[$1.to_i] } while
  297.     /\\[Vv]\[\d+\]/ === message_text
  298.     message_text.gsub!(/\\[Ss]\[([\d]+)\]/) do
  299.       $game_switches[$1.to_i] ? SWORD_MESS_SWIT[0] : SWORD_MESS_SWIT[1]
  300.     end
  301.     message_text.gsub!(/\\[Nn]\[([\d]+)\]/) do
  302.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ''
  303.     end
  304.     message_text.gsub!(/\\[Cc][Nn]\[([\d]+)\]/) do
  305.       $game_classes[$1.to_i] != nil ? $game_classes[$1.to_i].name : ''
  306.     end
  307.     message_text.gsub!(/\\[Ss][Nn]\[([\d]+)\]/) do
  308.       $game_skills[$1.to_i] != nil ? $game_skills[$1.to_i].name : ''
  309.     end
  310.     message_text.gsub!(/\\[Ii][Nn]\[([\d]+)\]/) do
  311.       $game_items[$1.to_i] != nil ? $game_items[$1.to_i].name : ''
  312.     end
  313.     message_text.gsub!(/\\[Ww][Nn]\[([\d]+)\]/) do
  314.       $game_weapons[$1.to_i] != nil ? $game_weapons[$1.to_i].name : ''
  315.     end
  316.     message_text.gsub!(/\\[Aa][Nn]\[([\d]+)\]/) do
  317.       $game_armors[$1.to_i] != nil ? $game_armors[$1.to_i].name : ''
  318.     end
  319.     message_text.gsub!(/\\[Ee][Nn]\[([\d]+)\]/) do
  320.       $game_enemies[$1.to_i] != nil ? $game_enemies[$1.to_i].name : ''
  321.     end
  322.     message_text.gsub!(/\\[Nn][Nn]\[([\d]+)\]/) do
  323.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].character_name : ''
  324.     end
  325.     message_text.gsub!(/\\[Nn][Ss]\[([\d]+)\]/) do
  326.       $data_skills[$1.to_i] != nil ? $data_skills[$1.to_i].icon_name : ''
  327.     end
  328.     message_text.gsub!(/\\[Nn][Ii]\[([\d]+)\]/) do
  329.       $data_items[$1.to_i] != nil ? $data_items[$1.to_i].icon_name : ''
  330.     end
  331.     message_text.gsub!(/\\[Nn][Ww]\[([\d]+)\]/) do
  332.       $data_weapons[$1.to_i] != nil ? $data_weapons[$1.to_i].icon_name : ''
  333.     end
  334.     message_text.gsub!(/\\[Nn][Aa]\[([\d]+)\]/) do
  335.       $data_armors[$1.to_i] != nil ? $data_armors[$1.to_i].icon_name : ''
  336.     end
  337.     message_text.gsub!(/\\[Ee][Qq]\[([\d]+)\,([\d]+)\]/) do
  338.       case $2.to_i
  339.       when 0 # 武器
  340.         $game_actors[$1.to_i].weapon_id != 0 ?
  341.         $data_weapons[$game_actors[$1.to_i].weapon_id].name : ''
  342.       when 1 # 盾
  343.         $game_actors[$1.to_i].armor1_id != 0 ?
  344.         $data_armors[$game_actors[$1.to_i].armor1_id].name : ''
  345.       when 2 # 頭部防具
  346.         $game_actors[$1.to_i].armor2_id != 0 ?
  347.         $data_armors[$game_actors[$1.to_i].armor2_id].name : ''
  348.       when 3 # 身體防具
  349.         $game_actors[$1.to_i].armor3_id != 0 ?
  350.         $data_armors[$game_actors[$1.to_i].armor3_id].name : ''
  351.       when 4 # 裝飾品
  352.         $game_actors[$1.to_i].armor4_id != 0 ?
  353.         $data_armors[$game_actors[$1.to_i].armor4_id].name : ''
  354.       end
  355.     end
  356.     message_text.gsub!(/\\[Mm][Aa]\[([\d]+)\]/) do
  357.       load_data("Data/MapInfos.rxdata")[$1.to_i].name
  358.     end
  359.     # 頭像
  360.     message_text.gsub!(/\\[Ll][Ss]\[([\w_\-]+)\]/) do
  361.       next if record[3][0] > 0
  362.       record[3] = @messagecharacter_wsword.refresh(1, $1)
  363.       @messagecharacter_wsword.visible = true
  364.       @cursor_width[0] = record[3][1] ; @cursor_width[1] -= record[3][2]
  365.       ''
  366.     end
  367.     # 頭像,並上面加上名稱
  368.     message_text.gsub!(/\\[Ll][Ss][Uu]\[([\w_\-]+)\,([\w_\-]+)\]/) do
  369.       next if record[3][0] > 0
  370.       record[3] = @messagecharacter_wsword.refresh(2, $1, $2)
  371.       @messagecharacter_wsword.visible = true
  372.       @cursor_width[0] = record[3][1] ; @cursor_width[1] -= record[3][2]
  373.       ''
  374.     end
  375.     # 頭像,並下面加上名稱
  376.     message_text.gsub!(/\\[Ll][Ss][Dd]\[([\w_\-]+)\,([\w_\-]+)\]/) do
  377.       next if record[3][0] > 0
  378.       record[3] = @messagecharacter_wsword.refresh(3, $1, $2)
  379.       @messagecharacter_wsword.visible = true
  380.       @cursor_width[0] = record[3][1] ; @cursor_width[1] -= record[3][2]
  381.       ''
  382.     end
  383.     @messagecharacter_wsword.visible = false if record[3][0] == 0
  384.     message_text.gsub!(/\\[Gg][Vv]/) { $game_party.gold }
  385.     message_text.gsub!(/\\[Pp]/) { '' }
  386.     message_text.gsub!(/\\[Bb][Rr]/) { "\n" }
  387.     message_text.gsub!(/\\[Cc]\[([\d]+)\]/) { "\001[#{$1}]" }
  388.     message_text.gsub!(/\\[Gg]/) { "\002" }
  389.     message_text.gsub!(/\\\.\[([\d]+)\]/) { "\003[#{$1}]" }
  390.     message_text.gsub!(/\\\!/) { "\004" }
  391.     message_text.gsub!(/\\>/) { "\005" }
  392.     message_text.gsub!(/\\[Mm]\[([\d]+)\]/) { "\006[#{$1}]" }
  393.     message_text.gsub!(/\\[Cc][Rr]\[([\d]+)\,([\d]+)\,([\d]+)\]/) { "\007[#{$1},#{$2},#{$3}]" }
  394.     message_text.gsub!(/\\\^\[([\d]+)\]/) { "\010[#{$1}]" }
  395.     message_text.gsub!(/\\[Xx][Nn]/) { "\011" }
  396.     message_text.gsub!(/\\[Ss][Ee]\[([\w_\-]+)\]/) { "\016[#{$1}]" }
  397.     message_text.gsub!(/\\[Ss][Ee]\[([\w_\-]+)\,(\d+)\,(\d+)\]/) { "\017[#{$1},#{$2},#{$3}]" }
  398.     message_text.gsub!(/\\[Ss][Ee][Xx]/) { "\037" }
  399.     message_text.gsub!(/\\[Ss][Ss]\[(\d+)\]/) { "\020[#{$1}]" }
  400.     message_text.gsub!(/\\[Ss][Xx]/) { "\021" }
  401.     message_text.gsub!(/\\[Ii]\[([\w_\-]+)\]/) { "\022[#{$1}]" }
  402.     message_text.gsub!(/\\[Ff][Nn]\[([\w_\-]+)\]/) { "\023[#{$1}]" }
  403.     message_text.gsub!(/\\[Ff][Ss]\[(\d+)\]/) { "\024[#{$1}]" }
  404.     message_text.gsub!(/\\[Ff][Bb]/) { "\025" }
  405.     message_text.gsub!(/\\[Ff][Ii]/) { "\026" }
  406.     message_text.gsub!(/\\[Ff]_/) { "\032" }
  407.     message_text.gsub!(/\\[Ff]\-/) { "\033" }
  408.     message_text.gsub!(/\\[Ff][Hh]/) { "\034" }
  409.     message_text.gsub!(/\\[Ff]/) { "\027" }
  410.     message_text.gsub!(/\\[Cc][Uu]\[(\d+)\,(\d+)\,(\d+)\]/) { "\030[#{$1},#{$2},#{$3}]" }
  411.     message_text.gsub!(/\\[Hh][Rr]/) { "\031" }
  412.     message_text.gsub!(/\\[Cc][Bb]\[(\d+)\,(\d+)\,(\d+)\]/) { "\035[#{$1},#{$2},#{$3}]" }
  413.     message_text.gsub!(/\\[Ss][Hh]\[(\d+)\]/) { "\042[#{$1}]" }
  414.     #message_text.gsub!(/ /) { "\034" }
  415.     #○ 執行控制碼功能
  416.     while ((c = message_text.slice!(/./m)) != nil)
  417.       record[6] = self.contents.font.size + 10
  418.       case c
  419.       when "\n" # 換行
  420.         if record[2] > 0 # 有無效換行標誌的場合
  421.           record[2] -= 1
  422.           next
  423.         end
  424.         x = 0 and y += record[6]
  425.         next
  426.       when "\001" # 換色
  427.         message_text.sub!(/\[(\d+)\]/, '')
  428.         self.contents.font.color = text_color($1.to_i)
  429.         @record[0] = nil
  430.         next
  431.       when "\002" # 顯示金錢窗口
  432.         if @gold_window == nil
  433.           @gold_window = Window_Gold.new
  434.           @gold_window.x = 560 - @gold_window.width
  435.           if $game_temp.in_battle
  436.             @gold_window.y = 192
  437.           else
  438.             @gold_window.y = self.y >= 128 ? 32 : 384
  439.           end
  440.           @gold_window.opacity = self.opacity
  441.           @gold_window.back_opacity = self.back_opacity
  442.         end
  443.         next
  444.       when "\003" # 等待
  445.         message_text.sub!(/\[(\d+)\]/, '')
  446.         for i in 1..$1.to_i
  447.           Graphics.update
  448.         end
  449.       when "\004" # 等待按鍵
  450.         loop do
  451.           Graphics.update
  452.           Input.update
  453.           if Input.trigger?(Input::C)
  454.             break
  455.           end
  456.         end
  457.         Graphics.update
  458.         Input.update
  459.       when "\005" # 瞬間顯示內容
  460.         record[0] = true
  461.       when "\006" # 變更打字效果
  462.         message_text.sub!(/\[(\d+)\]/, '')
  463.         $game_system.swordM_rate = $1.to_i
  464.       when "\007" # 變更自定顏色
  465.         message_text.sub!(/\[(\d+),(\d+),(\d+)\]/, '')
  466.         self.contents.font.color = Color.new($1.to_i, $2.to_i, $3.to_i)
  467.         @record[0] = nil
  468.         next
  469.       when "\010" # 自動確定
  470.         message_text.sub!(/\[(\d+)\]/, '')
  471.         @wait_count = $1.to_i
  472.       when "\011" # 無視換行
  473.         record[2] += 1
  474.         next
  475.       when "\016" # 演奏SE(預設)
  476.         message_text.sub!(/\[([\w_\-]+)\]/, '')
  477.         next unless (FileTest.exist?('Audio/SE/' + $1) or (not record[0]))
  478.         Audio.me_play('Audio/SE/' + $1, SWORD_MESS_SEVP[0], SWORD_MESS_SEVP[1])
  479.         next
  480.       when "\017" # 演奏SE(自定)
  481.         message_text.sub!(/\[([\w_\-]+)\,(\d+)\,(\d+)\]/, '')
  482.         next unless (FileTest.exist?('Audio/SE/' + $1) or (not record[0]))
  483.         Audio.me_play('Audio/SE/' + $1, $2.to_i, $3.to_i)
  484.         next
  485.       when "\037" # 停止SE
  486.         Audio.me_stop
  487.         next
  488.       when "\020" # 開啟開關隱藏
  489.         message_text.sub!(/\[(\d+)\]/, '')
  490.         i = 0 # 執行次數
  491.         loop do
  492.           i += 1
  493.           if record[4][i] == nil # 檢查是否是空值
  494.             $game_switches[$1.to_i] ? record[4][i] = false : record[4][i] = true
  495.             break
  496.           end
  497.         end
  498.       when "\021" # 中斷開關隱藏
  499.         record[4].delete(record[4].keys.sort[record[4].size - 1])
  500.         next
  501.       when "\022" # 顯示圖示
  502.         a = $game_system.swordM_WidthHeight[0] - Font.default_size - 32 - record[3][1]
  503.         message_text.sub!(/\[([\w_\-]+)\]/, '')
  504.         record[5] = Bitmap.new('Graphics/Icons/' + $1) rescue next
  505.       when "\023" # 變更字體
  506.         message_text.sub!(/\[([\w_\-]+)\]/, '')
  507.         self.contents.font.name = [$1] if Font.exist?($1)
  508.         next
  509.       when "\024" # 變更文字大小
  510.         message_text.sub!(/\[(\d+)\]/, '')
  511.         self.contents.font.size = $1.to_i
  512.         record[6] = $1.to_i + 10
  513.         next
  514.       when "\025" # 變更為粗體
  515.         self.contents.font.bold = (not self.contents.font.bold)
  516.         next
  517.       when "\026" # 變更為斜體
  518.         self.contents.font.italic = (not self.contents.font.italic)
  519.         next
  520.       when "\027" # 變回預設
  521.         self.contents.font.name = Font.exist?(SWORD_MESS_NAME) ?
  522.         SWORD_MESS_NAME : Font.default_name
  523.         self.contents.font.size = SWORD_MESS_SIZE == 0 ?
  524.         Font.default_size : SWORD_MESS_SIZE
  525.         self.contents.font.bold = SWORD_MESS_BOIT[0] == 0 ?
  526.         Font.default_bold : SWORD_MESS_BOIT[0]
  527.         self.contents.font.italic = SWORD_MESS_BOIT[1] == 0 ?
  528.         Font.default_italic : SWORD_MESS_BOIT[1]
  529.         color = SWORD_MESS_COLO
  530.         self.contents.font.color = Color.new(color[0], color[1], color[2])
  531.         @record = [nil, false, false, false, nil]
  532.         next
  533.       when "\030" # 文字顏色上下漸變
  534.         message_text.sub!(/\[(\d+)\,(\d+)\,(\d+)\]/, '')
  535.         @record[0] = [self.contents.font.color.red, self.contents.font.color.green,
  536.         self.contents.font.color.blue, $1.to_i, $2.to_i, $3.to_i]
  537.       when "\031" # 分隔線
  538.         a= $game_system.swordM_WidthHeight[0] - Font.default_size - 32 - record[3][1]
  539.         if @record[0] # 漸層處理
  540.           self.contents.fill_rect(x + 16 + record[3][1], y + self.contents.font.size / 2 - 1, a - x, 1,
  541.           self.contents.font.color)
  542.           self.contents.fill_rect(x + 16 + record[3][1], y + self.contents.font.size / 2, a - x, 1,
  543.           Color.new(@record[0][3], @record[0][4], @record[0][5]))
  544.         else # 一般處理
  545.           self.contents.fill_rect(x+16+record[3][1], y+(self.contents.font.size + 10)/2 - 1,a - x, 2,
  546.           self.contents.font.color)
  547.         end
  548.         y += self.contents.font.size + 10 and x = 0
  549.         next
  550.       when "\032" # 底線
  551.         @record[1] = (not @record[1])
  552.         next
  553.       when "\033" # 刪除線
  554.         @record[2] = (not @record[2])
  555.         next
  556.       when "\034" # 陰影
  557.         @record[3] = (not @record[3])
  558.         next
  559.       when "\035" # 底色
  560.         message_text.sub!(/\[(\d+)\,(\d+)\,(\d+)\]/, '')
  561.         @record[4] = [$1.to_i, $2.to_i, $3.to_i]
  562.         next
  563.       when "\036" # 顯示「\」
  564.         c = "\\"
  565.       when "\042" # 震動
  566.         message_text.sub!(/\[(\d+)\]/, '')
  567.         x = self.x ; y = self.y # 記憶位置
  568.         for i in 1..$1.to_i / 2
  569.           a = [rand(21) - 10, rand(21) - 10]
  570.           self.x += a[0] ; @messagecharacter_wsword.x += a[0]
  571.           self.y += a[1] ; @messagecharacter_wsword.y += a[1]
  572.           Graphics.update
  573.           self.x -= a[0] ; @messagecharacter_wsword.x -= a[0]
  574.           self.y -= a[1] ; @messagecharacter_wsword.y -= a[1]
  575.           Graphics.update
  576.         end
  577.         self.x = x ; self.y = y # 還原位置
  578.         next
  579.       end
  580.       next if record[4].values.include?(true) # 如果是在開關隱藏有效的內容就隱藏
  581.       #○ 打字效果
  582.       if $game_system.swordM_rate != 0 and record[0] == false
  583.         for i in 1..$game_system.swordM_rate
  584.           Input.update
  585.           if Input.press?(Input::C) and $game_system.swordM_key(true) and record[1]
  586.             record[0] = true
  587.           elsif record[1] == false
  588.             record[1] = true
  589.             record[1] = false if Input.press?(Input::C)
  590.           end
  591.           Graphics.update
  592.         end
  593.       end
  594.       #○ 描繪圖示或是內容
  595.       self.contents.fill_rect(x + 3 + record[3][1], y + self.contents.font.size ,
  596.       self.contents.font.size, 1, self.contents.font.color) if @record[1] # 底線
  597.       self.contents.fill_rect(x + 3 + record[3][1], y + (self.contents.font.size ) / 2,
  598.       self.contents.font.size, 1, self.contents.font.color) if @record[2] # 刪除線
  599.       # 底色處理
  600.       if @record[4]
  601.         self.contents.fill_rect(4 + x + record[3][1], y + 5, self.contents.font.size,
  602.         self.contents.font.size, Color.new(@record[4][0], @record[4][1], @record[4][2]))
  603.       end
  604.       if record[5] # 存在圖示時
  605.         self.contents.blt(4 + x + record[3][1], y, record[5], Rect.new(0, 0, 640, 480))
  606.         x += record[5].width
  607.         record[5] = nil
  608.       else # 不存在圖示時
  609.         if @record[0] # 文字上下漸層顏色
  610.           color = []
  611.           text_size = self.contents.font.size / 2
  612.           for i in 1..text_size
  613.             @record[0][0] == @record[0][3] ? color[0] = @record[0][0] :
  614.             color[0] = (@record[0][0] - @record[0][3]) / text_size * i
  615.             @record[0][1] == @record[0][4] ? color[1] = @record[0][1] :
  616.             color[1] = (@record[0][1] - @record[0][4]) / text_size * i
  617.             @record[0][2] == @record[0][5] ? color[2] = @record[0][2] :
  618.             color[2] = (@record[0][2] - @record[0][5]) / text_size * i
  619.             self.contents.font.color = Color.new(color[0], color[1], color[2])
  620.             #self.contents.draw_text(4 + x + record[3][1], y + 4, 40, self.contents.font.size - 2 * i, c)
  621.             self.contents.draw_text(4 + x + record[3][1], y, 40, self.contents.font.size - 2 * i, c)
  622.           end
  623.         else # 一般文字顏色
  624.           if @record[3] # 加上陰影
  625.             a = [self.contents.font.color.red, self.contents.font.color.green,
  626.             self.contents.font.color.blue]
  627.             self.contents.font.color = Color.new(0, 0, 0)
  628.             self.contents.draw_text(4 + x + record[3][1] + 1, y + 1, 40, self.contents.font.size, c)
  629.             self.contents.font.color = Color.new(a[0], a[1], a[2])
  630.           end
  631.           self.contents.draw_text(4 + x + record[3][1], y, 40, self.contents.font.size, c)
  632.         end
  633.         x += self.contents.text_size(c).width
  634.       end
  635.       # 強制換行換行判定
  636.       a= $game_system.swordM_WidthHeight[0] - Font.default_size - 32 - record[3][1]
  637.       y += record[6] if x >= a
  638.       x = 0 if x >= a
  639.     end
  640.     Graphics.update
  641.     @messagepause_wsword.visible = true if $game_temp.choice_max == 0
  642.     #○ 選擇項的情況
  643.     if $game_temp.choice_max > 0
  644.       @item_max = $game_temp.choice_max
  645.       self.active = true
  646.       self.index = 0
  647.     end
  648.     #○ 輸入數值的情況
  649.     if $game_temp.num_input_variable_id > 0
  650.       @messagepause_wsword.visible = false
  651.       digits_max = $game_temp.num_input_digits_max
  652.       number = $game_variables[$game_temp.num_input_variable_id]
  653.       @input_number_window = Window_InputNumber.new(digits_max)
  654.       @input_number_window.number = number
  655.       @input_number_window.x = self.x + 8 + record[3][1]
  656.       @input_number_window.y = self.y + $game_temp.num_input_start * 32
  657.     end
  658.     $game_temp.message_text = nil
  659.   end
  660.   #-------------------------------------------------------------
  661.   #● 更新
  662.   def update
  663.     super
  664.     #○ 當設置文章時就顯示對話框
  665.     if $game_temp.message_text != nil
  666.       self.visible = true
  667.       self.opacity += 28 while self.opacity < 160
  668.       reset_window
  669.       refresh
  670.       @delay_input = 5 # 設置顯示完畢後的延遲時間
  671.       Graphics.frame_reset
  672.       @contents_showing = true
  673.     end
  674.     @contents_showing = nil if @contents_showing == false
  675.     #○ 輸入數值的情況下
  676.     if @input_number_window != nil
  677.       @input_number_window.update
  678.       if Input.trigger?(Input::C) # 送出輸入的數值
  679.         $game_system.se_play($data_system.decision_se)
  680.         $game_variables[$game_temp.num_input_variable_id] = @input_number_window.number
  681.         $game_map.need_refresh = true
  682.         # 釋放輸入數值窗口
  683.         @input_number_window.dispose
  684.         @input_number_window = nil
  685.         terminate_message
  686.       end
  687.       return
  688.     end
  689.     #○ 當對話框開啟的場合
  690.     if @contents_showing
  691.       @wait_count -= 1 if @wait_count > 0 # 自動確定
  692.       @delay_input -= 1 if @delay_input > 0 # 全部顯示後的延遲
  693.       @messagepause_wsword.refresh # 更新暫停標誌
  694.       if Input.trigger?(Input::B) or @wait_count == 0 and $game_temp.choice_max != 0
  695.         if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
  696.           $game_system.se_play($data_system.cancel_se)
  697.           $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
  698.           terminate_message
  699.         end
  700.       elsif Input.trigger?(Input::C) and @delay_input == 0 or @wait_count == 0
  701.         @wait_count = -1
  702.         @contents_showing = false
  703.         @messagepause_wsword.visible = false
  704.         if $game_temp.choice_max > 0
  705.           $game_system.se_play($data_system.decision_se)
  706.           $game_temp.choice_proc.call(self.index)
  707.         end
  708.         terminate_message
  709.       end
  710.     end
  711.     #○ 當無內容時關閉對話框
  712.     if @contents_showing == nil and self.visible
  713.       @messagecharacter_wsword.visible = false
  714.       self.opacity -= 48
  715.       if self.opacity == 0
  716.         self.visible = false
  717.       end
  718.       return
  719.     end
  720.   end
  721.   #-------------------------------------------------------------
  722.   #● 更新游標
  723.   def update_cursor_rect
  724.     if @index >= 0
  725.       n = $game_temp.choice_start + @index
  726.       self.cursor_rect.set(@cursor_width[0], n * 32, @cursor_width[1], 32)
  727.     else
  728.       self.cursor_rect.empty
  729.     end
  730.   end
  731. end
  732. #=======================================
  733. #■ 執行事件命令的解釋器
  734. class Interpreter
  735.   #● 顯示文章
  736.   def command_101
  737.     if $game_temp.message_text != nil
  738.       return false
  739.     end
  740.     # 設定訊息結束後待機和返回呼叫標誌
  741.     @message_waiting = true
  742.     $game_temp.message_proc = Proc.new { @message_waiting = false }
  743.     # 設定為 1 行
  744.     $game_temp.message_text = @list[@index].parameters[0] + "\n"
  745.     line_count = 1
  746.     # 循環
  747.     loop do
  748.       $game_temp.message_text.gsub!(/\\\\/) { "\036" }
  749.       # 插入記憶控制碼
  750.       $game_temp.message_text.gsub!(/\\[Ll]\[([\d]+)\]/) do
  751.         $game_system.swordM_save[$1.to_i] != nil ? $game_system.swordM_save[$1.to_i] : ''
  752.       end
  753.       $game_temp.message_text.gsub!(/\\\\/) { "\036" }
  754.       # 判斷下一個事件
  755.       if @list[@index+1].code == 401
  756.         $game_temp.message_text += @list[@index+1].parameters[0] + "\n"
  757.         line_count += 1
  758.       else
  759.         if @list[@index+1].code == 102 # 下個事件為 [顯示選擇項] 的場合
  760.           @index += 1
  761.           $game_temp.choice_start = line_count
  762.           setup_choices(@list[@index].parameters)
  763.         elsif @list[@index+1].code == 103 # 下個事件為 [數值輸入處理] 的場合
  764.           @index += 1
  765.           $game_temp.num_input_start = line_count
  766.           $game_temp.num_input_variable_id = @list[@index].parameters[0]
  767.           $game_temp.num_input_digits_max = @list[@index].parameters[1]
  768.         elsif @list[@index+1].code == 101 # 下個事件為 [顯示文章] 的場合
  769.           if /\\[Pp]/ === $game_temp.message_text # 有「\P」控制碼的場合
  770.             $game_temp.message_text.gsub!(/\\[Pp]/) { '' }
  771.             @index += 1
  772.             $game_temp.message_text += @list[@index].parameters[0] + "\n"
  773.             next
  774.           end
  775.         end
  776.         return true
  777.       end
  778.       @index += 1
  779.     end
  780.   end
  781. end
复制代码
麻煩大大們幫忙想想辦法了 自己弄了半天還是不知所以@@

评分

参与人数 1星屑 +60 收起 理由
hys111111 + 60

查看全部评分

Lv2.观梦者

梦石
0
星屑
690
在线时间
791 小时
注册时间
2011-10-20
帖子
2394

开拓者

2
发表于 2012-6-11 17:40:27 | 只看该作者
偶也修改过,你最好拿原版来改,不然看不懂。。。就是gusb!替换/XX东西为00X然后来弄,去学会儿正则表达式就知道咯
欢迎点此进入我的egames.wink.ws,有RMQQ堂等

[url=http://rpg.blue/thread-317273-1-1.html]短篇八-赶选

http://yun.baidu.com/share/link?shareid=2158225779&uk=169642147&third=0


历险ARPG赢回你的疆域新的战斗模式?…………点击这里:[宋乱贼狂 for QQ堂]
http://rpg.blue/group-368-1.html
programing ....?
[url=http://rpg.blue/thrd-234658-1-1.html]
回复

使用道具 举报

Lv3.寻梦者

双子人

梦石
0
星屑
3190
在线时间
3618 小时
注册时间
2009-4-4
帖子
4154

开拓者

3
发表于 2012-6-11 17:47:23 | 只看该作者
  1. message_text.gsub!(/\\[Ss]\[([\d]+)\]/) do

  2. 299.      $game_switches[$1.to_i] ? SWORD_MESS_SWIT[0] : SWORD_MESS_SWIT[1]

  3. 300.    end
复制代码
看的头晕了……
应该是参照这样子改。
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-2 03:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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