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

Project1

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

[已经解决] 有關魔劍工舖的任務系統腳本出錯問題

[复制链接]

Lv2.观梦者

梦石
0
星屑
399
在线时间
36 小时
注册时间
2017-11-9
帖子
19
跳转到指定楼层
1
发表于 2018-1-16 20:04:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
在魔劍工舖找到的任務系統腳本不知為何總出現了 "188行 出現SyntaxError" 字句,求各大神幫幫忙看看是甚麼問題。

謝謝!!!!

(ps任務系統腳本其實有很多,理論上我也不必執著於用這個,
但因為這腳本無論是排版還是功能都是最符合我心目中想達到的效果,所以特別希望救到這腳本!)

RUBY 代码复制
  1. module Sword
  2. #=======================================
  3. #★ 魔劍工舖 - 任務系統 2.04
  4. # http://blog.yam.com/a870053jjkj/
  5. #=======================================
  6.   Sword48_Assignment, Sword48_Name, Sword48_Color, Sword48_Statu = [], [], [], []
  7. #=======================================
  8. =begin
  9. ● 所需腳本
  10. 控制碼轉換:http://blog.yam.com/a870053jjkj/article/28082241(非必要)
  11. ========================================
  12. ● 控制碼
  13. 支援使用「控制碼轉換」中的控制碼,但必須裝「控制碼轉換」才可以使用
  14. ----------------------------------------------------------------
  15. ○ 一般控制碼
  16.  C[數值] : 變更文字的顏色,顏色請在Window_Base類的text_color方法中設置
  17.  C[紅,綠,藍] : 變更文字的顏色,依據三原色指定顏色
  18.  AC : 依照任務狀態決定變更的顏色(顏色為任務狀態的顏色)
  19.  A : 依照任務狀態,顯示你設定的任務狀態內容,可參考使用者自定設置的部分
  20. ----------------------------------------------------------------
  21. ○ 任務控制碼(自動產生任務,符合任務條件後會自動變更任務狀態)
  22.  AV[變數編號,所需數值] : 開通變數任務,顯示指定編號的數值
  23.  AE[敵人編號,擊殺數] : 開通擊殺任務,顯示該編號的敵人目前的擊殺數量
  24.  AG[所需金錢] : 開通金錢任務,顯示目前的金錢(同 G)
  25.  AI[種類,道具編號,數量] : 開通物品任務,顯示該編號種類目前的物品數量
  26.              種類:0為物品,1為武器,2為防具
  27.  AT[秒數] : 開通限時任務,顯示倒數計時器(時間到會轉到任務失敗)
  28.  ATS[秒數] : 開通限時任務,顯示倒數計時器(時間到會轉到任務成功)
  29. ========================================
  30. ● 函數
  31. 呼叫全部任務:$scene = Sword_Assignment.new
  32. 呼叫分類任務:$scene = Sword_Assignment.new(分類編號)
  33. 添加任務項目:$game_party.add_assignment(任務編號, 分類編號, '名稱', '內容')
  34. 獲取狀態狀態:$game_party.sword_assignment(任務編號)
  35. 修改狀態狀態:$game_party.sword_assignment(任務編號, 任務狀態)
  36. 重置指定任務:$game_party.again_assignment(任務編號)
  37. ----------------------------------------------------------------
  38. ○ 任務狀態
  39. 0和5以上為隱藏、1為任務未完成、2為回報任務、3為任務失敗、4為任務完成
  40. =end
  41. #=======================================
  42. #● 功能設定
  43. Sword48_Help = ['任務', 1]  # 設定上方說明窗口文字 [窗口文字, 位置]
  44. # 窗口文字:空的的(需保留 ' 符號)則不顯示說明窗口,位置:0左;1中;2右
  45. Sword48_Width = 180     # 設定左邊任務選項的寬度
  46. Sword48_Center = [true, true] # 任務選項的部分文字是否置中 [種類文字, 選項文字]
  47. Sword48_Statu[1] = '任務未完成' # 設定控制碼「A」顯示任務未完成的內容
  48. Sword48_Statu[2] = '可回報任務' # 設定控制碼「A」顯示回報任務的內容
  49. Sword48_Statu[3] = '任務已失敗' # 設定控制碼「A」顯示任務失敗的內容
  50. Sword48_Statu[4] = '任務已完成' # 設定控制碼「A」顯示任務完成的內容
  51. Sword48_Color[1] = Color.new(255, 255, 255) # 設定任務未完成的顯示顏色
  52. Sword48_Color[2] = Color.new(255, 150, 100) # 設定回報任務的顯示顏色
  53. Sword48_Color[3] = Color.new(0, 0, 0) # 設定任務失敗的顯示顏色
  54. Sword48_Color[4] = Color.new(255, 255, 0) # 設定任務完成的顯示顏色
  55. Sword48_Time = 2 # 計時器顯示格式,0為總秒數,1為分:秒,2為時:分:秒
  56. Sword48_Menu = 0 # 0為回到地圖,1以上為回到選單畫面並指標在第幾個
  57. Sword48_Permutation = 1 # 任務的排列順序,0依照編號;1新的在後;2新的在前
  58. Sword48_InsistPerm = false # 是否只要有變更狀態,一律重新排列順序
  59. Sword48_Acquiesce = true # 是否打開任務畫面時,選項自動起始在最新的任務上
  60. Sword48_NotVisible = true # 啟動分類文字時,該分類無任務時是否不要顯示分類
  61. #--------------------------------------------------------------
  62. #○ 任務種類名稱表(Sword48_Name[種類編號] = '種類名稱')
  63. # 如果不希望在任務列表中顯示種類名稱的話,請移除1號設置即可
  64. Sword48_Name[1] = '--主線任務--'
  65. Sword48_Name[2] = '--試驗任務--'
  66. #--------------------------------------------------------------
  67. #○ 任務資料表(Sword48_Assignment[任務編號] = ['任務名稱', 種類編號,'內容')
  68. # 設定任務的名稱與內容,任務內容可以使用控制碼來表示
  69. # 可以自行新增多個Sword48_Assignment[任務編號],第1行通常不顯示
  70. Sword48_Assignment[1] = ['四重試驗', 1,' av[1,4]
  71. 四重試驗(ACAC[0])
  72.  
  73. 你莫名其妙的掉到了這個神祕的空間,遇到
  74. 了一位莫名其妙的傢伙,指派了4個任務要
  75. 我去完成,C[2]利用那4顆水晶的力量完成試煉
  76.  
  77.  
  78.  
  79.  
  80. c[6]無關的話:C[2]
  81. 這窗口可以顯示12行文字
  82. 一行能顯示19個字,但還是視使用者而定']#設置結束
  83. #--------------------------------------------------------------
  84. Sword48_Assignment[2] = ['炎的試煉', 2,'
  85. 炎的試驗(ACAC[0])
  86.  
  87. 幽靈擊殺數量:AE[1,5] / 5
  88. 魚人擊殺數量:AE[3,3] / 3
  89.  
  90. 這是獵殺怪物的任務範例,必須兩種都要殺
  91. 到特定的數目才算是完成任務條件,當擊殺
  92. 完畢後,此任務會自動變成可回報任務的狀
  93. 態,當然也可配合其他任務控制碼進行組合
  94.  
  95. c[6]無關的話:C[2]
  96. 如果想要無內容換行,記得加1個空白鍵喔']#設置結束
  97. #--------------------------------------------------------------
  98. Sword48_Assignment[3] = ['金的試驗', 2,'
  99. 金的試驗(ACAC[0])
  100.  
  101. 金錢數:ag[1000] / 1000
  102. 鐵劍數:ai[1,2,10] / 10
  103. 銅盾數:ai[2,1,15] / 15
  104. 完全恢復劑:ai[0,3,30] / 30
  105.  
  106. 這是金錢與需要指定東西的範例,收集以上
  107. 所有的物品即可完成任務,1個都不能少,
  108. 也不能只完成其中一項,必須全部達成喔
  109.  
  110. C[7]水桶裡沒有東西的,不要亂點喔^^']#設置結束
  111. #--------------------------------------------------------------
  112. Sword48_Assignment[4] = ['海的試煉', 2,'
  113. 海的試驗(ACAC[0])
  114.  
  115. 剩餘時間:at[30] (c[5]會動耶!!c[0])
  116.  
  117. 這個是計時任務的範例,計時器有動態效果
  118. ,當計時器的時間到00:00:00之時,就會
  119. 判定這個任務失敗了!!
  120.  
  121. 如果任務已經完成而但還有剩餘時間之時,
  122. 則計時器的剩餘時間將會停止運作不動!!']#設置結束
  123. #--------------------------------------------------------------
  124. Sword48_Assignment[5] = ['天的試驗', 2,'
  125. 天的試驗(ACAC[0])
  126.  
  127. 拉動拉桿數:av[2,50] / 50
  128.  
  129. 這個是變數與連續任務的範例,雖然任務名
  130. 稱相同,也不會重複出現相同的任務,這是
  131. 善用隱藏功能的連續任務!!
  132. 你目前正在進行此任務的第c[2]1c[0]個任務']#設置結束
  133. #--------------------------------------------------------------
  134. Sword48_Assignment[6] = ['天的試驗', 2,'
  135. 天的試驗(ACAC[0])
  136.  
  137. 傳話給右邊那位白頭髮的!!
  138. 你目前正在進行此任務的第c[2]2c[0]個任務']#設置結束
  139. #--------------------------------------------------------------
  140. Sword48_Assignment[7] = ['天的試驗', 2,'
  141. 天的試驗(ACAC[0])
  142.  
  143. 幫忙回話...c[7](好像捲入了別人的戰爭了)c[0]
  144. 你目前正在進行此任務的第c[2]3c[0]個任務']#設置結束
  145. #=======================================
  146.   $Sword ? $Sword[48] = true : $Sword = {48=>true} # 腳本使用標誌
  147.   ($Sword_VX = false ; RPG::Weather rescue $Sword_VX = true) if $Sword_VX == nil
  148.   Sword48_Center[0] = Sword48_Center[0] ? 1 : 0
  149.   Sword48_Center[1] = Sword48_Center[1] ? 1 : 0
  150. end
  151. #=======================================
  152. #■ 處理敵人的類
  153. class Game_Enemy
  154.   (def id ; @enemy_id ; end) if $Sword_VX
  155. end
  156. #=======================================
  157. #■ 處理同伴的類別
  158. class Game_Party
  159.   include Sword # 連接自動設置
  160.   attr_reader    :assig_perm # 任務排列表(選項順序用)
  161.   attr_reader    :assig_sort # 任務種類表(只顯示特定種類或分類用)
  162.   attr_reader    :new_assig # 最新任務表(起始選項用)
  163.   attr_accessor :sword_assig # 任務資料表
  164.   #-------------------------------------------------------------
  165.   #● 初始化物件
  166.   alias sword48_initialize initialize
  167.   def initialize
  168.     sword48_initialize ; @new_assig = {true=>nil} # 最新任務
  169.     @sword_assig, @assig_sort, @assig_perm = [], {}, [] # 任務資料,分類表,排列表
  170.     Sword48_Assignment.each_index{|i| next unless item = Sword48_Assignment[i]
  171.     add_assignment(i, item[1], item[0], item[2])} # 生成腳本中的任務
  172.   end
  173.   #-------------------------------------------------------------
  174.   #● 產生任務資料(任務編號, 分類編號, 任務名稱, 任務內容)
  175.   def add_assignment(id, sort_id, name, text)
  176.     # [任務狀態, 任務條件, 任務名稱, 任務內容], 任務內容拷貝
  177.     # 任務條件:[任務數, {變數}, {擊殺}, {金錢}, {道具}, {計時}]
  178.     @sword_assig[id], text = [0, [0, {}, {}, {}, {}, {}], name, text], text.dup
  179.     @assig_sort[id], no_end = sort_id, 0
  180.     text.gsub!(/\[Vv][(d+)]/){$game_variables[$1.to_i]} while /\[Vv][(d+)]/ === text
  181.     text.gsub!(/\[Aa][Vv][(d+)[, ]+(d+)]/){"00[#{$1},#{$2}]"} # AV
  182.     text.gsub!(/\[Aa][Ee][(d+)[, ]+(d+)]/){"01[#{$1},#{$2}]"} # AE
  183.     text.gsub!(/\[Aa][Gg][(d+)]/){"02[#{$1}]"} # AG
  184.     text.gsub!(/\[Aa][Ii][(d+)[, ]+(d+)[, ]+(d+)]/){"03[#{$1},#{$2},#{$3}]"}#AI
  185.     text.gsub!(/\[Aa][Tt][(d+)]/){"04[#{$1}]"} # AT
  186.     text.gsub!(/\[Aa][Tt][Ss][(d+)]/){"05[#{$1}]"} # AT
  187.     while ((c = text.slice!(/./m)) != nil) ; case c
  188.     when "00" ; text =~ /[(d+),(d+)/ ; ii = 1 # 產生變數任務
  189.       # [變數編號, 所需數值]
  190.       loop{@sword_assig[id][1][1][ii] ? ii += 1 : (@sword_assig[id][1][0] += 1
  191.       @sword_assig[id][1][1][ii] = [$1.to_i, $2.to_i] ; break)}
  192.     when "01" ; text =~ /[(d+),(d+)/ ; ii = 1 # 產生擊殺任務
  193.       # [敵人編號, 所需擊殺數, 目前擊殺數]
  194.       loop{@sword_assig[id][1][2][ii] ? ii += 1 : (@sword_assig[id][1][0] += 1
  195.       @sword_assig[id][1][2][ii] = [$1.to_i, $2.to_i, 0] ; break)}
  196.     when "02" ; text =~ /[(d+)/ ; ii = 1 # 產生金錢任務
  197.       # [所需金錢]
  198.       loop{@sword_assig[id][1][3][ii] ? ii += 1 : (@sword_assig[id][1][0] += 1
  199.       @sword_assig[id][1][3][ii] = [$1.to_i] ; break)}
  200.     when "03" ; text =~ /[(d+),(d+),(d+)/ ; ii = 1 # 產生道具任務
  201.       # [道具種類, 道具編號, 所需數量]
  202.       loop{@sword_assig[id][1][4][ii] ? ii += 1 : (@sword_assig[id][1][0] += 1
  203.       @sword_assig[id][1][4][ii] = [$1.to_i, $2.to_i, $3.to_i] ; break)}
  204.     when "04", "05" ; text =~ /[(d+)/ ; ii = 1 # 產生計時任務
  205.       # [開始時間, 結束時間, 計時時間, 回報標誌, 完成剩餘秒數]
  206.       loop{@sword_assig[id][1][5][ii] ? ii += 1 : (@sword_assig[id][1][0] += 1
  207.       @sword_assig[id][1][5][ii] = [0, 0, $1.to_i, c == "05" ? true : false, $1.to_i] ; break)}
  208.       no_end += 1 if c == "04"
  209.     end ; end
  210.     @sword_assig[id][1][0] -= no_end if @sword_assig[id][1][0] > no_end      
  211.   end
  212.   #-------------------------------------------------------------
  213.   #● 變更與獲取任務狀態(編號, 任務狀態, 不更新時間標誌)
  214.   def sword_assignment(number, statu = nil, reset = false)
  215.     if statu
  216.       assig = @sword_assig[number][1]
  217.       assig[2].each{|key, value| assig[2][key][2] = 0 if statu == 1} # 擊殺數歸0
  218.       assig[5].each{|key, value|
  219.       assig[5][key][4] = assig[5][key][1] - Graphics.frame_count / Graphics.frame_rate if statu == 4
  220.       next unless (1..2) === statu # 限時時間重新產生
  221.       assig[5][key][0] = Graphics.frame_count / Graphics.frame_rate
  222.       assig[5][key][1] = assig[5][key][0] + assig[5][key][2]} unless reset
  223.       @sword_assig[number][0] = statu # 變更任務狀態
  224.       (1..4) === statu ? (@assig_perm -= [number] if Sword48_InsistPerm # 更新順序
  225.       (Sword48_Permutation == 1 ? @assig_perm += [number] : @assig_perm.insert(
  226.       0, number)) unless @assig_perm.include?(number)) : @assig_perm -= [number]
  227.       if Sword48_Acquiesce # 記錄最新修改或添加的任務
  228.         @new_assig[@assig_sort[number]] = number ; @new_assig[true] = number
  229.       end
  230.     else ; update_assignment ; return @sword_assig[number][0] # 獲取任務狀態
  231.     end
  232.   end
  233.   #-------------------------------------------------------------
  234.   #● 更新任務控制碼的任務狀態
  235.   def update_assignment
  236.     @comm_up = []
  237.     @sword_assig.each_index do |i| next unless @sword_assig[i]
  238.       assig, fulfill = @sword_assig[i][1], 0
  239.       next unless (1..4) === @sword_assig[i][0] # 跳過未接任務及隱藏任務
  240.       assig[1].each{|key, value| fulfill += 1 if $game_variables[value[0]] >= value[1]} # 變數
  241.       assig[2].each{|key, value| fulfill += 1 if value[2] >= value[1]} # 擊殺
  242.       assig[3].each{|key, value| fulfill += 1 if $game_party.gold >= value[0]} # 金錢
  243.       assig[4].each do |key, value| case value[0] # 道具
  244.       when 0 ; number = $Sword_VX ? $game_party.item_number( # 物品
  245.         $data_items[value[1]]) : $game_party.item_number(value[1])
  246.       when 1 ; number = $Sword_VX ? $game_party.item_number( # 武器
  247.         $data_weapons[value[1]]) : $game_party.weapon_number(value[1])
  248.       when 2 ; number = $Sword_VX ? $game_party.item_number( # 防具
  249.         $data_armors[value[1]]) : $game_party.armor_number(value[1])
  250.       end ; fulfill += 1 if number >= value[2] ; end
  251.       assig[5].each{|key, value| assig[5][key][3] ? fulfill += 1 : (sword_assignment(i, 3)) if
  252.       Graphics.frame_count / Graphics.frame_rate >= assig[5][key][1]} # 限時
  253.       if assig[0] == 0
  254.       elsif @sword_assig[i][0] == 1 ; sword_assignment(i, 2, true) if fulfill >= assig[0]
  255.       elsif @sword_assig[i][0] == 2 ; sword_assignment(i, 1, true) unless fulfill >= assig[0]
  256.       end
  257.     end
  258.     @comm_up
  259.   end
  260.   #-------------------------------------------------------------
  261.   #● 重新產生自定設置的任務(任務編號)
  262.   def again_assignment(v)
  263.     a = Sword48_Assignment[v] ; add_assignment(v, a[1], a[0], a[2])
  264.   end
  265. end
  266. #=======================================
  267. #■ 任務選項窗口
  268. class WSword_AssiCommand < Window_Base
  269.   include Sword # 連接自定設置
  270.   Size = Sword48_Help[0].empty? ? ($Sword_VX ? 12 : 14) : ($Sword_VX ? 10 : 12)
  271.   XPVX = $Sword_VX ? [WLH + 32, 416, 384 - WLH] : [64, 480, 416]
  272.   attr_reader    :index # 選項位置
  273.   #-------------------------------------------------------------
  274.   #● 初始化物件(選項表, 分類表, 編號表)
  275.   def initialize(comm, assig_sort = nil)
  276.     super(0, (Sword48_Help[0].empty? ? 0 : XPVX[0]),
  277.     Sword48_Width, (Sword48_Help[0].empty? ? XPVX[1] : XPVX[2]))
  278.     @sorts = [] ; assig_sort.each{|a, b| Sword48_NotVisible ?
  279.     (@sorts += [a] unless b.empty?) : @sorts += [a]} if assig_sort
  280.     self.contents = Bitmap.new(width - 32, (comm.size +
  281.     (Sword48_Name[1] ? @sorts.size : 0)) * 32)
  282.     # 選項位置, 選項顏色, 選項文字, 跳過選項表(分類用), 分類表
  283.     @index, @color, @comm, @assig_sort, @sort_index = 0, [], comm, assig_sort, {}
  284.     @i, @sort_true = 0, true
  285.   end
  286.   #-------------------------------------------------------------
  287.   #● 更新內容
  288.   def refresh
  289.     self.contents.clear
  290.     # 選項行數, 分類編號
  291.     br, sort_v, i, sort_size, sort_v2 = 0, @assig_sort.keys.sort[0], 0, @assig_sort.size, 0
  292.     return unless sort_v # 無分類資料就中斷
  293.     if @assig_sort and Sword48_Name[1] # 分類文字的場合
  294.       loop do ; if @sort_true # 描繪分類文字
  295.         self.contents.font.color = system_color
  296.         raise("有設定分類編號為#{sort_v}的任務,但卻未設定該分類的Sword48_Name"
  297.         )  unless Sword48_Name[sort_v] # 無分類的場合
  298.         self.contents.draw_text(4, br * 32, Sword48_Width - 40, 32,
  299.         Sword48_Name[sort_v], Sword48_Center[0])
  300.         br += 1 ; @sort_true = false
  301.       else # 描繪分類中的選項文字
  302.         @assig_sort[sort_v].each{|id| assig = $game_party.sword_assig[id]
  303.         @index = i if $game_party.new_assig[true] == id # 起始游標設定
  304.         self.contents.font.color = Sword48_Color[assig[0]]
  305.         self.contents.draw_text(4, br * 32, Sword48_Width - 40, 32,
  306.         assig[2], Sword48_Center[1]) ; @sort_index[i] = [id, br] ; i += 1 ; br += 1}
  307.         sort_v2 += 1 ; sort_v = @assig_sort.keys.sort[sort_v2] # 獲取下個存在分類
  308.         @sort_true = true ; break unless sort_v#sort_size# < sort_v
  309.       end ; end
  310.     else  # 描繪選項文字(無設定分類用)
  311.       @comm.each_index{|i| self.contents.font.color = @color[i] ? @color[i] : normal_color
  312.       self.contents.draw_text(4, i * 32,
  313.       Sword48_Width - 40, 32, @comm[i], Sword48_Center[1])}
  314.     end
  315.     @off = @sort_index[@index] # 無選項判定
  316.     self.contents.clear unless @off if Sword48_Name[1] and Sword48_NotVisible # 無就清空
  317.     (self.index = -2 ; return) unless @off if Sword48_Name[1] unless Sword48_NotVisible
  318.     rect_y = Sword48_Name[1] ? (@off ? @sort_index[@index][1] : 0) : @index
  319.     (self.oy = [(rect_y - Size) * 32 + 32, 0].max ; @thend = true) unless @thend
  320.     self.cursor_rect.set(0, (rect_y - top_row) * 32, Sword48_Width - 32, 32)
  321.   end
  322.   #-------------------------------------------------------------
  323.   #● 更新畫面
  324.   def update
  325.     super ; return unless @off if Sword48_Name[1]
  326.     if Input.repeat?(Input::UP)
  327.       @index == 0 ? @index = @comm.size - 1 : @index -= 1
  328.       rect_y = Sword48_Name[1] ? @sort_index[@index][1] : @index
  329.       self.oy = (rect_y - Size + 1) * 32 if @index == @comm.size - 1 # 移至最後
  330.       $Sword_VX ? Sound.play_cursor : $game_system.se_play($data_system.cursor_se)
  331.       self.cursor_rect.set(0, comm_oy(rect_y, 8) * 32, Sword48_Width - 32, 32)
  332.     elsif Input.repeat?(Input::DOWN)
  333.       @index == @comm.size - 1 ? @index = 0 : @index += 1
  334.       self.oy = 0 if @index == 0 # 選項移至第1個
  335.       $Sword_VX ? Sound.play_cursor : $game_system.se_play($data_system.cursor_se)
  336.       rect_y = Sword48_Name[1] ? @sort_index[@index][1] : @index
  337.       self.cursor_rect.set(0, comm_oy(rect_y, 2) * 32, Sword48_Width - 32, 32)
  338.     end
  339.   end
  340.   #-------------------------------------------------------------
  341.   #● 獲取開頭行
  342.   def top_row ; self.oy / 32 ; end
  343.   #-------------------------------------------------------------
  344.   #● 選項位置更新=(索引)
  345.   def index=(index)
  346.     @index = index ; self.cursor_rect.set(0, @index * 32, Sword48_Width - 32, 32)
  347.   end
  348.   #-------------------------------------------------------------
  349.   #● 變更選項顏色(編號, 顏色)
  350.   def color(id, color) ; @color[id] = color ; end
  351.   #-------------------------------------------------------------
  352.   #● 獲取游標目前指著的編務編號(任務用)
  353.   def assig_id ; @sort_index[@index] ? @sort_index[@index][0] : nil ; end
  354.   #-------------------------------------------------------------
  355.   #● 選項顯示內容位置調整(滾動效果用)
  356.   def comm_oy(v, n)
  357.     if n == 2 ; Size <= v - top_row ? (self.oy = (a = v - Size + 1) * 32 ; v - a) : v - top_row
  358.     else ; self.oy += (v - top_row) * 32 if v - top_row <= -1
  359.       self.oy = [self.oy, 0].max # 防止過度滾動
  360.       self.oy = 0 if top_row == 1 and v == 1 ; v - top_row
  361.     end
  362.   end
  363. end
  364. #=======================================
  365. #■ 任務內容顯示窗口
  366. class WSword_Assignment < Window_Base
  367.   include Sword # 連接自定設置
  368.   #-------------------------------------------------------------
  369.   #● 初始化物件(任務編號)
  370.   def initialize(number)
  371.     if $Sword_VX ; super(Sword48_Width, (Sword48_Help[0].empty? ? 0 : WLH + 32),
  372.       544 - Sword48_Width, (Sword48_Help[0].empty? ? 416 : 416 - (WLH + 32)))
  373.     else ; super(Sword48_Width, (Sword48_Help[0].empty? ? 0 : 64),
  374.       640 - Sword48_Width, (Sword48_Help[0].empty? ? 480 : 416))
  375.     end
  376.     self.contents = Bitmap.new(width - 32, height - 32)
  377.     refresh(number)
  378.   end
  379.   #-------------------------------------------------------------
  380.   #● 更新內容(任務編號)
  381.   def refresh(number = 0)
  382.     return unless number # 無任務的場合
  383.     self.contents.clear ; self.contents.font.color = normal_color ; color = nil
  384.     return if number == 0
  385.     text, @number = $game_party.sword_assig[number][3].dup, number
  386.     @frequency = [0, 0] # [擊殺, 計時]
  387.     assig = $game_party.sword_assig[number][1]
  388.     text = text.critical_word if $Sword[46] # 轉換關鍵字(控制碼轉換用)
  389.     text = text.code_explain if $Sword[46] # 轉換控制碼(控制碼轉換用)
  390.     text.gsub!(/\[Cc][(d+)]/){"00[#{$1}]"} # C
  391.     text.gsub!(/\[Cc][(d+)[, ]+(d+)[, ]+(d+)]/){"01[#{$1},#{$2},#{$3}]"} # C
  392.     text.gsub!(/\[Aa][Cc]/){color = Sword48_Color[$game_party.sword_assig[number][0]]
  393.     "01[#{color.red.to_i},#{color.green.to_i},#{color.blue.to_i}]"} # AC
  394.     text.gsub!(/\[Aa][Vv][(d+)[, ]+(d+)]/){[$game_variables[$1.to_i], $2.to_i].min} # AV
  395.     text.gsub!(/\[Aa][Ee][d+[, ]+(d+)]/){@frequency[0] += 1
  396.     assig[2][@frequency[0]][0] == nil ? 0 : [assig[2][@frequency[0]][2], $1.to_i].min} # AE
  397.     text.gsub!(/\[Aa][Tt][Ss]?[([d]+)]/) do @frequency[1] += 1
  398.       a = [assig[5][@frequency[1]][1] - Graphics.frame_count / Graphics.frame_rate, 0].max
  399.       a = [assig[5][@frequency[1]][4], 0].max if $game_party.sword_assig[number][0] == 4
  400.       case Sword48_Time
  401.       when 0 ; a # 秒
  402.       when 1 ; sprintf("%02d:%02d", a / 60 % 60, a % 60) # 分、秒
  403.       when 2 ; sprintf("%02d:%02d:%02d", a / 60 / 60, a / 60 % 60, a % 60) # 時、分、秒
  404.       end
  405.     end
  406.     text.gsub!(/\[Aa][Gg][(d+)]/){[$game_party.gold, $1.to_i].min} # AG
  407.     text.gsub!(/\[Aa][Ii][(d+)[, ]+(d+)[, ]+(d+)]/) do
  408.       if $game_party.sword_assig[number][0] == 4 ; $3.to_i
  409.       else ; case $1.to_i # AI
  410.       when 0 # 物品
  411.         $Sword_VX ? [$game_party.item_number($data_items[$2.to_i]), $3.to_i].min :
  412.         [$game_party.item_number($2.to_i), $3.to_i].min
  413.       when 1 # 武器
  414.         $Sword_VX ? [$game_party.item_number($data_weapons[$2.to_i]), $3.to_i].min :
  415.         [$game_party.weapon_number($2.to_i), $3.to_i].min
  416.       when 2 # 防具
  417.         $Sword_VX ? [$game_party.item_number($data_armors[$2.to_i]), $3.to_i].min :
  418.         [$game_party.armor_number($2.to_i), $3.to_i].min
  419.       end ; end
  420.     end
  421.     text.gsub!(/\[Aa]/){Sword48_Statu[$game_party.sword_assig[number][0]]} # AC
  422.     x, y = 0, -32 # 起始文字X座標, Y座標
  423.     while ((c = text.slice!(/./m)) != nil) ; case c
  424.       when "n" ; x = 0 ; y += 32 # 換行
  425.       when "00" ; text.sub!(/[(d+)]/, '') # 指定代碼顏色
  426.         self.contents.font.color = text_color($1.to_i)
  427.       when "01" ; text.sub!(/[(d+),(d+),(d+)]/, '') # 指定三原色
  428.         self.contents.font.color = Color.new($1.to_i, $2.to_i, $3.to_i)
  429.       else ; self.contents.draw_text(x, y, 32, 32, c)
  430.         x += self.contents.text_size(c).width
  431.       end
  432.     end
  433.   end
  434. end
  435. #=======================================
  436. #■ 處理戰鬥畫面的類別
  437. class Scene_Battle
  438.   include Sword # 連接自定設置
  439.   #-------------------------------------------------------------
  440.   #● 戰鬥結束(結果)
  441.   alias sword1_battle_end battle_end
  442.   def battle_end(result)
  443.     members = $Sword_VX ? $game_troop.members : $game_troop.enemies
  444.     $game_party.sword_assig.each_index do |i| assig = $game_party.sword_assig[i]
  445.       next unless assig ; next if assig[0] != 1 ; assig = $game_party.sword_assig[i][1][2]
  446.       assig.each do |key, value| members.each do |enemy|
  447.         $game_party.sword_assig[i][1][2][key][2] += 1 if value[0] == enemy.id
  448.       end ; end
  449.     end
  450.     sword1_battle_end(result)
  451.   end
  452. end
  453. #=======================================
  454. #■ 任務系統畫面
  455. class Sword_Assignment
  456.   include Sword # 連接自定設置
  457.   #-------------------------------------------------------------
  458.   #● 初始化物件
  459.   def initialize(id = nil, sort = nil)
  460.     $game_party.update_assignment # 更新任務狀況
  461.     @menu_index = Sword48_Permutation == 0 ? id :
  462.     ($game_party.assig_perm.index(id) if $game_party.assig_perm.index(id)) # 起始選項
  463.     (@menu_index = sort ? $game_party.new_assig[sort] : $game_party.new_assig[true]
  464.     @new_index = true) unless id if Sword48_Acquiesce # 指定最新的任務
  465.     @menu_index = 0 unless @menu_index
  466.     @sort = sort # 指定顯示的任務種類
  467.   end
  468.   #-------------------------------------------------------------
  469.   #● 主處理
  470.   def main
  471.     @count = Graphics.frame_count / Graphics.frame_rate # 紀錄當前時間
  472.     # 獲取要顯示的任務選項
  473.     hmain, @hmain, assig_sort = [], [], Hash.new{|a, b| a[b] = []} # 選項字, 選項號, 分類
  474.     # 產生選項資料
  475.     (Sword48_Permutation == 0 ?
  476.     1...$game_party.sword_assig.size : $game_party.assig_perm).each do |i|
  477.     unless i == nil or $game_party.sword_assig[i][0] == 0 or
  478.     $game_party.sword_assig[i][0] > 4
  479.       next if $game_party.assig_sort[i] != @sort if @sort # 種類判定,種類不符就跳過
  480.       assig_sort[$game_party.assig_sort[i]] += [i]
  481.       hmain.push($game_party.sword_assig[i][2]) ; @hmain.push(i)
  482.     end ; end
  483.     menu_index = @menu_index
  484.     hmain = [' '] if hmain.empty? ; @hmain = [] if @hmain.empty? # 無任務時
  485.     (menu_index = @hmain.index(@menu_index) ? @hmain.index(@menu_index) : 0) if
  486.     Sword48_Permutation == 0 or @new_index # 任務選項位置計算
  487.     Sword48_Name.each_index{|index| next unless Sword48_Name[index]
  488.     assig_sort[index] = assig_sort[index]} unless Sword48_NotVisible # 生成默認值
  489.     @command_window = WSword_AssiCommand.new(hmain, assig_sort) # 選項窗口
  490.     @command_window.index = menu_index
  491.     # 變更選項顏色
  492.     ii = -1 ; @hmain.each do |i| ; ii += 1 ; case $game_party.sword_assig[i][0]
  493.     when 1 ; @command_window.color(ii, Sword48_Color[1]) # 任務未完成
  494.     when 2 ; @command_window.color(ii, Sword48_Color[2]) # 回報任務
  495.     when 3 ; @command_window.color(ii, Sword48_Color[3]) # 任務失敗
  496.     when 4 ; @command_window.color(ii, Sword48_Color[4]) # 任務完成
  497.     end ; end
  498.     @command_window.refresh # 產生選項內容
  499.     # 產生其他窗口
  500.     @assignmen_wswordt = WSword_Assignment.new(@hmain[0])
  501.     update_cgty
  502.     (@help_window = Window_Help.new
  503.     @help_window.set_text(Sword48_Help[0], Sword48_Help[1])) unless
  504.     Sword48_Help[0].empty? # 如果有設定說明窗口文字,就產生說明窗口
  505.     Graphics.transition
  506.     loop{Graphics.update ; Input.update ; update ; break if $scene != self}
  507.     Graphics.freeze
  508.     # 釋放窗口
  509.     @command_window.dispose ; @assignmen_wswordt.dispose
  510.     @help_window.dispose if @help_window
  511.   end
  512.   #-------------------------------------------------------------
  513.   #● 更新畫面
  514.   def update
  515.     # 更新窗口
  516.     @command_window.update ; @assignmen_wswordt.update
  517.     # 更新計時器與顯示內容(每秒更新1次)
  518.     unless @count == Graphics.frame_count / Graphics.frame_rate
  519.       comm_up = $game_party.update_assignment
  520.       unless comm_up.empty? # 更新任務
  521.         ii = -1
  522.         @hmain.each do |i| ; ii += 1 ; case $game_party.sword_assig[i][0]
  523.         when 1 ; @command_window.color(ii, Sword48_Color[1]) # 任務未完成
  524.         when 2 ; @command_window.color(ii, Sword48_Color[2]) # 回報任務
  525.         when 3 ; @command_window.color(ii, Sword48_Color[3]) # 任務失敗
  526.         when 4 ; @command_window.color(ii, Sword48_Color[4]) # 任務完成
  527.         end ; end
  528.         @command_window.refresh
  529.       end
  530.       update_cgty
  531.       @count = Graphics.frame_count / Graphics.frame_rate # 更新計算時間
  532.     end
  533.     # 按下確定鍵或取消鍵時回到指定畫面
  534.     if Input.trigger?(Input::B) or Input.trigger?(Input::C)
  535.       $Sword_VX ? Sound.play_cancel : $game_system.se_play($data_system.cancel_se)
  536.       if Sword48_Menu == 0 ; $scene = Scene_Map.new # 回到地圖畫面的場合
  537.       else ; $scene = Scene_Menu.new(Sword48_Menu - 1) # 回到選單畫面的場合
  538.       end
  539.     elsif Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN) ; update_cgty # 更新內容
  540.     end
  541.   end
  542.   #-------------------------------------------------------------
  543.   #● 用於更新窗口內容的方法
  544.   def update_cgty
  545.     @assignmen_wswordt.refresh(Sword48_Name[1] ? @command_window.assig_id :
  546.     @hmain[@command_window.index])
  547.   end
  548. end

Lv3.寻梦者

梦石
0
星屑
2709
在线时间
166 小时
注册时间
2018-1-19
帖子
89
2
发表于 2018-1-29 22:53:32 | 只看该作者
应该是/\[(d+),(d+)/ 吧,下面几个都是这样吧

点评

意思是在/[(d+)之类的前面加个\ 变成/\[(d+)这种就可以了  发表于 2018-1-29 22:54
求勾搭QwQ(bu)会使用脚本和事件QwQ虽然脚本还只是初级程度,还在学习ingQwQ
平常很闲,特别想回答问题和解决问题。再求勾搭呜呜呜QWQ
QQ:841155947
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
399
在线时间
36 小时
注册时间
2017-11-9
帖子
19
3
 楼主| 发表于 2018-2-15 12:52:11 | 只看该作者
mori13 发表于 2018-1-29 22:53
应该是/\[(d+),(d+)/ 吧,下面几个都是这样吧

很感謝大大的幫忙。
這樣是可以解決error問題,但開出來顯示不了任務的資料頁面。
請看圖。

TTTTT.PNG (89.9 KB, 下载次数: 9)

TTTTT.PNG
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2709
在线时间
166 小时
注册时间
2018-1-19
帖子
89
4
发表于 2018-2-16 11:19:13 | 只看该作者
cht94512 发表于 2018-2-15 12:52
很感謝大大的幫忙。
這樣是可以解決error問題,但開出來顯示不了任務的資料頁面。
請看圖。 ...

好的。那么乃试试把/\[(d+),(d+)/改成/\[(\d+)\,(\d+)/ ,也就是不只是在 [ 前加 \ ,在“d”,“,”前都加
“\”。因为偶并不会添加任务...不太会测试呢
求勾搭QwQ(bu)会使用脚本和事件QwQ虽然脚本还只是初级程度,还在学习ingQwQ
平常很闲,特别想回答问题和解决问题。再求勾搭呜呜呜QWQ
QQ:841155947
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
399
在线时间
36 小时
注册时间
2017-11-9
帖子
19
5
 楼主| 发表于 2018-2-19 19:22:08 | 只看该作者
mori13 发表于 2018-2-16 11:19
好的。那么乃试试把/\[(d+),(d+)/改成/\[(\d+)\,(\d+)/ ,也就是不只是在 [ 前加 \ ,在“d”,“,”前 ...

還是不行呀
其實這個腳本本身已經設置了一些任務,測試時只需在事件的腳本打
"$game_party.sword_assignment(1, 1)
$game_party.sword_assignment(2, 2)
$game_party.sword_assignment(3, 3)
$game_party.sword_assignment(4, 4)
$scene = Sword_Assignment.new"
就可以看到全部任務了。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2709
在线时间
166 小时
注册时间
2018-1-19
帖子
89
6
发表于 2018-2-19 20:42:25 | 只看该作者
本帖最后由 mori13 于 2018-2-19 21:05 编辑
cht94512 发表于 2018-2-19 19:22
還是不行呀
其實這個腳本本身已經設置了一些任務,測試時只需在事件的腳本打
"$game_party.swor ...


偶测试了下。之前error改的那个位置一直都没被用到。按偶说的改了之后其实已经是正常了。但是稍微上面那点
while ((c = text.slice!(/./m)) != nil)
我打出这个c来看...根本没有出现00,01啊之类的场合呢
即便给c赋个值,让他们运行,文字也依旧没有出现
不知道是不是没有上面说的控制码转换脚本的问题

----------------------------
找到了bug,在422行的y坐标,居然是负的!_(:з」∠)_负的显示出来乃怎么可能看得见,也许是之前有设定但是失效了
改成0就能看见了,但是依旧有问题,怀疑还是和控制码转换脚本有关,以及和部分斜杠缺少有关
_(:з」∠)_比如换行的“\n”都变成"n"了,恐怕不止这里哦


魔剑工铺的那个网站打不开QWQ没法找到原来的脚本呢
其实感觉说白了还是转载出来导致各种格式的问题,以及各种斜杠缺失

以下附上偶改了能正常显示了的代码,但是控制码转换好像都是失效的,不知道该怎么修复呢_(Xз」∠)_

代码框

评分

参与人数 2星屑 +100 +2 收起 理由
RyanBern + 100 + 1 认可答案
cht94512 + 1 认可答案

查看全部评分

求勾搭QwQ(bu)会使用脚本和事件QwQ虽然脚本还只是初级程度,还在学习ingQwQ
平常很闲,特别想回答问题和解决问题。再求勾搭呜呜呜QWQ
QQ:841155947
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
399
在线时间
36 小时
注册时间
2017-11-9
帖子
19
7
 楼主| 发表于 2018-2-20 00:14:46 | 只看该作者
本帖最后由 cht94512 于 2018-2-20 00:26 编辑


感謝大大呀!我試了一下是顯示得到,太好了。

原網址在
https://a870053jjkj.tian.yam.com/posts/24625069
目前還是可以上的,大大可以參考一下。

控制碼這個可能是在另一個腳本補足了,但同樣地把這個放進去又有error
這次是第98行有syntax error,相信是 " "在中間重覆了的問題,不知如何搞……

RUBY 代码复制
  1. module Sword
  2. #=======================================
  3. #★ 魔劍工舖 - 控制碼轉換(3)
  4. # http://blog.yam.com/a870053jjkj/article/28082241
  5. #=======================================
  6. =begin
  7. ● 所需腳本
  8. 魔劍工舖整合腳本:http://blog.yam.com/a870053jjkj/article/25751998(非必要)
  9. ========================================
  10. ● 設置腳本
  11. 轉換控制碼:字符串.code_explain(清空描繪標誌&)
  12. 轉換關鍵字:字符串.critical_word
  13. 檢查關鍵字:字符串.critical_word?
  14. 產生位圖:字符串.bitmap_explain(寬度, 高度, 間隔距離, 字體){塊}
  15. 位圖資料變量:$Sword46
  16. 記憶控制碼:$game_system.swordM_save[編號] = '文字內容'
  17. 引用對象資料:$game_system.swordM_data = 對象
  18. ========================================
  19. ● 控制碼
  20. ○ 內容控制碼(code_explain中有效)
  21.  V[變數編號] : 顯示指定變數編號的數值,可當成其他控制碼的參數用
  22.  TXT[檔案名稱] : 顯示指定的txt的所有內容
  23.  TXT[檔案名稱][索引] : 顯示指定的txt指定索引的內容
  24.  L[編號] : 此控制碼視同指定編號的[設定記憶]的設置內容
  25.  SW[開關編號] : 顯示指定開關編號目前的狀態文字,依設置S46_Switche而定
  26.  SW[開關編號][內容] : 當指定的開關為ON時,就顯示內容,為OFF則啥都不顯示
  27.  N[角色編號] : 顯示指定角色編號的角色名稱
  28.  CI[角色編號] : 顯示指定角色編號的職業名稱
  29.  CN[職業編號] : 顯示指定職業編號的職業名稱
  30.  SN[技能編號] : 顯示指定技能編號的技能名稱
  31.  IN[物品編號] : 顯示指定物品編號的物品名稱
  32.  WN[武器編號] : 顯示指定武器編號的武器名稱
  33.  AN[防具編號] : 顯示指定防具編號的防具名稱
  34.  EN[敵人編號] : 顯示指定敵人編號的敵人名稱
  35.  TN[狀態編號] : 顯示指定狀態編號的狀態名稱
  36.  MN[屬性編號] : 顯示指定屬性編號的屬性名稱
  37.  TY[能力位置] : 顯示S0_Ability設定指定位置-1的能力值名稱
  38.  GV : 顯示目前玩家持有的金錢
  39.  EQ[角色編號,部位] : 顯示角色編號裝備的名稱,部位-0武、1盾、2頭、3身、4飾
  40.  MA[地圖編號] : 顯示指定地圖編號的地圖名稱,設置0表示目前的地圖
  41.  NN[角色編號] : 顯示指定角色編號的戰鬥圖檔案名稱(VX:頭像檔案名稱)
  42.  NS[技能編號] : 顯示指定技能編號的圖標檔案名稱(VX:該圖標索引號)
  43.  NI[物品編號] : 顯示指定物品編號的圖標檔案名稱(VX:該圖標索引號)
  44.  NW[武器編號] : 顯示指定武器編號的圖標檔案名稱(VX:該圖標索引號)
  45.  NA[防具編號] : 顯示指定防具編號的圖標檔案名稱(VX:該圖標索引號)
  46.  NT[狀態編號] : 顯示指定狀態編號的圖標索引號(VX專用)
  47. <<<<< 需要有使用$game_system.swordM_data存入對象資料才可使用以下控制碼 >>>>>
  48.  DA[函數名稱] : 顯示指定對象中的函數返回值,能用的函數名稱請參考F1幫助文檔
  49.  EF : 顯示該對象中的屬性名稱,會自動使用公共設定來附加C控制碼
  50.  SS : 顯示該對象中的狀態名稱,會自動使用公共設定來附加C控制碼
  51. ----------------------------------------------------------------
  52. ○ 描繪控制碼(bitmap_explain中有效)
  53.  C[色碼] : 變更文字顏色,使用方式和對話框的C控制碼相同
  54.  C[紅,綠,藍] : 變更文字顏色,指定三原色來組合顏色(單一顏色可設定0~255的數值)
  55.  C[紅,綠,藍,透] : 變更文字顏色,指定三原色來組合顏色+不透明度,其他同上
  56.  C[#紅綠藍] : 變更文字顏色,指定三原色來組合顏色(方式同網頁16進位顏色設定)
  57.  C[#紅綠藍透] : 變更文字顏色,指定三原色來組合顏色+不透明度,其他同上
  58.  C : 還原顏色,回到未使用C控制碼(不含自己)的狀況
  59. ------以上任一個C控制碼如果連續2個放置一起時,則視同為漸層顏色------
  60.  F : 回到文字原始的字型狀態,簡單來說就是用過的控制碼都將在此失效
  61.  FN[字體名稱] : 變更指定的字體,如果指定的字體不存在則不會變更字體
  62.  FN : 還原成原本的字體
  63.  FS[大小] : 變更文字的大小,有可能會影響該行的高度
  64.  FS : 還原成原本的文字大小
  65.  FH[位置] : 在文字哪個位置旁附加陰影,位置對應鍵盤數字九宮格,0為不顯示
  66.  FH : 取消附加陰影,效果同FH[0]
  67.  B : 將文字變更為粗體,在使用一次會恢復原狀
  68.  I : 將文字變更為斜體,在使用一次會恢復原狀
  69.  U : 將文字附加底線,在使用一次會恢復原狀
  70.  S : 將文字附加刪除線,在使用一次會恢復原狀
  71.  BS[路徑] : 顯示指定路徑的圖片,起始路徑為遊戲所在資料夾,不需副檔名
  72.  BS[路徑,色相] : 和上面的效果相同,只是可以設定該圖片的色相而已
  73.  CO[寬度,高度] : 描繪一個指定大小的方形
  74.  X[像素] : 描繪的位置往右指定像素的距離,正數為向右移;負數為向左移
  75.  Y[像素] : 描繪的位置往下指定像素的距離,正數為向下移;負數為向上移
  76. =end
  77. #=======================================
  78. #● 功能設定
  79. S46_Switche = ['開', '關'] # 設定控制碼「SW」顯示的內容 ([ON,OFF)
  80. S46_NilText = 24 # 當該行無任何內容時,視同該行的最大高度為多少
  81. #--------------------------------------------------------------
  82. #○ 關鍵字添加修改設置
  83. # 找到指定內容,就在內容前後附加內容,與就是在 {} 之間放置
  84. # 設置法1:  '追蹤內容'=>['前附加內容', '後附加內容'],
  85. # 設置法2:  '追蹤內容'=>['新的內容'],
  86. S46_Chase = {
  87.   '你好'=>['c[6]', 'c[0]'],
  88.   '阻止他'=>['fs[32]', 'fs[22]'],
  89.   '英文'=>['English']
  90. } # 設置結束
  91. #=======================================
  92.   BEGIN{$Sword ? $Sword[46] = 3 : $Sword = {46=>3}} # 腳本使用標誌
  93.   ($Sword_VX = defined?(RPG::Weather) ? false : true) if $Sword_VX.nil?
  94. end
  95. #=======================================
  96. #■ 字符串
  97. class String
  98.   Rege = '([dA-Za-z一-龥-+*/_$!?`~!@#$%^&*()_=\|'."<>?/;:{}]+)' # 可匹配內容
  99.   #-------------------------------------------------------------
  100.   #● 控制碼內容轉換(清除描繪控制碼標誌)
  101.   def code_explain(no_depict = false)
  102.     text, @def_depth = self.dup, true
  103.     text = code_explain_update(text) while @def_depth
  104.     (return no_depict ? text.code_explain_updateX : text) unless $scene # 遊戲尚未正式開始就中斷
  105.     data = $game_system.swordM_data
  106.     text.gsub!(/\[Dd][Aa][#{String::Rege}]/){eval("data.#{$1}")} if data # 函數返回值
  107.     text.gsub!(/\[Ss][Ww][(d+)][#{Rege}]/){$game_switches[$1.to_i] ? $2 : ''} # 開關自訂
  108.     text.gsub!(/\[Ss][Ww][(d+)]/){$game_switches[$1.to_i] ?
  109.     Sword::S46_Switche[0] : Sword::S46_Switche[1]} # 開關設定內容
  110.     text.gsub!(/\[Nn][(d+)]/){$game_actors[$1.to_i] != nil ?
  111.     $game_actors[$1.to_i].name : ''} # 角色名稱
  112.     text.gsub!(/\[Cc][Ii][(d+)]/){$game_actors[$1.to_i] != nil ?
  113.     $data_classes[$game_actors[$1.to_i].class_id].name : ''} # 角色的職業名稱
  114.     text.gsub!(/\[Cc][Nn][(d+)]/){$data_classes[$1.to_i] != nil ?
  115.     $data_classes[$1.to_i].name : ''} # 職業名稱
  116.     text.gsub!(/\[Ss][Nn][(d+)]/){$data_skills[$1.to_i] != nil ?
  117.     $data_skills[$1.to_i].name : ''} # 技能名稱
  118.     text.gsub!(/\[Ii][Nn][(d+)]/){$data_items[$1.to_i] != nil ?
  119.     $data_items[$1.to_i].name : ''} # 物品名稱
  120.     text.gsub!(/\[Ww][Nn][(d+)]/){$data_weapons[$1.to_i] != nil ?
  121.     $data_weapons[$1.to_i].name : ''} # 武器名稱
  122.     text.gsub!(/\[Aa][Nn][(d+)]/){$data_armors[$1.to_i] != nil ?
  123.     $data_armors[$1.to_i].name : ''} # 防具名稱
  124.     text.gsub!(/\[Ee][Nn][(d+)]/){$data_enemies[$1.to_i] != nil ?
  125.     $data_enemies[$1.to_i].name : ''} # 敵人名稱
  126.     text.gsub!(/\[Tt][Nn][(d+)]/){$data_states[$1.to_i] != nil ?
  127.     $data_states[$1.to_i].name : ''} # 狀態名稱
  128.     text.gsub!(/\[Mm][Nn][(d+)]/){$data_system.elements[$1.to_i] != nil ?
  129.     $data_system.elements[$1.to_i] : ''} # 屬性名稱
  130.     text.gsub!(/\[Nn][Nn][(d+)]/){$game_actors[$1.to_i] != nil ?
  131.     $game_actors[$1.to_i].character_name : ''} # 角色圖片名稱
  132.     text.gsub!(/\[Nn][Ss][(d+)]/){$data_skills[$1.to_i] != nil ?
  133.     ($Sword_VX ? $data_skills[$1.to_i].icon_index :
  134.     $data_skills[$1.to_i].icon_name) : ''} # 技能圖片名稱
  135.     text.gsub!(/\[Nn][Ii][(d+)]/){$data_items[$1.to_i] != nil ?
  136.     ($Sword_VX ? $data_items[$1.to_i].icon_index :
  137.     $data_items[$1.to_i].icon_name) : ''} # 物品圖片名稱
  138.     text.gsub!(/\[Nn][Ww][(d+)]/){$data_weapons[$1.to_i] != nil ?
  139.     ($Sword_VX ? $data_weapons[$1.to_i].icon_index :
  140.     $data_weapons[$1.to_i].icon_name) : ''} # 武器圖片名稱
  141.     text.gsub!(/\[Nn][Aa][(d+)]/){$data_armors[$1.to_i] != nil ?
  142.     ($Sword_VX ? $data_armors[$1.to_i].icon_index :
  143.     $data_armors[$1.to_i].icon_name) : ''} # 防具圖片名稱
  144.     text.gsub!(/\[Tt][Yy][(d+)]/){Sword::S0_Ability[$1.to_i]} #
  145.     text.gsub!(/\[Nn][Tt][(d+)]/){$data_states[$1.to_i] != nil ?
  146.     $data_states[$1.to_i].icon_index : ''} if $Sword_VX # 狀態圖片索引號
  147.     text.gsub!(/\[Ee][Qq][(d+),(d+)]/) do case $2.to_i # 角色目前裝備編號
  148.     when 0 ; $game_actors[$1.to_i].weapon_id != 0 ?  
  149.       $data_weapons[$game_actors[$1.to_i].weapon_id].name : '' # 武器
  150.     when 1 ; $game_actors[$1.to_i].armor1_id != 0 ?
  151.       $data_armors[$game_actors[$1.to_i].armor1_id].name : '' # 盾
  152.     when 2 ; $game_actors[$1.to_i].armor2_id != 0 ?
  153.       $data_armors[$game_actors[$1.to_i].armor2_id].name : '' # 頭部防具
  154.     when 3 ; $game_actors[$1.to_i].armor3_id != 0 ?
  155.       $data_armors[$game_actors[$1.to_i].armor3_id].name : '' # 身體防具
  156.     when 4 ; $game_actors[$1.to_i].armor4_id != 0 ?
  157.       $data_armors[$game_actors[$1.to_i].armor4_id].name : '' # 裝飾品
  158.     end ; end
  159.     text.gsub!(/\[Mm][Aa][(d+)]/){a = $1.to_i == 0 ? $game_map.map_id : $1.to_i
  160.     xv = $Sword_VX ? 'v' : 'x' ; load_data("Data/MapInfos.r#{xv}data")[a].name} # 地圖名
  161.     text.gsub!(/\[Gg][Vv]/){$game_party.gold} # 目前金錢
  162.     text.gsub!(/\[Ss][Cc][(d+)]/){Sword::S0_Scope[$1.to_i]} # 攻擊目標用語
  163.     text.gsub!(/\[Ee][Ff]/) do # 屬性控制碼
  164.       set, v = '', 0
  165.       if XPVX.data_element_set(data).empty?
  166.         color = Sword::S0_SetX[0]
  167.         set = "x01#{color.red.to_i},#{color.green.to_i},#{
  168.         color.blue.to_i},#{color.alpha.to_i}]" + Sword::S0_SetX[1]
  169.       else
  170.         XPVX.data_element_set(data).each do |i|
  171.           break if v >= Sword::S0_Set[0]
  172.           next if Sword::S0_SetX[2].include?(i)
  173.           v += 1
  174.           color = Sword::S0_Set[i] ? Sword::S0_Set[i] : nil
  175.           set += color ? " x01#{color.red.to_i},#{color.green.to_i},#{
  176.           color.blue.to_i},#{color.alpha.to_i}]" +
  177.           $data_system.elements[i] + "x001]" : ' ' + $data_system.elements[i]
  178.         end
  179.         set[0] = '' unless set.empty?
  180.       end
  181.       set
  182.     end
  183.     text.gsub!(/\[Ss][Ss]/) do # 狀態控制碼
  184.       set, v, state_set, color = '', 0, XPVX.data_state_set(data), Sword::S0_Plus
  185.       state_set.each do |states|
  186.         states.each do |i|
  187.           break if v >= Sword::S0_StatuMax
  188.           next if Sword::S0_StatuX[2].include?(i)
  189.           set += " x01#{color.red.to_i},#{color.green.to_i},#{
  190.           color.blue.to_i},#{color.alpha.to_i}]" + $data_states[i].name + "x001]"
  191.         end
  192.         color = Sword::S0_Minus
  193.       end
  194.       set[0] = '' unless set.empty?
  195.       if set.empty?
  196.         color = Sword::S0_StatuX[0]
  197.         set = "x01#{color.red.to_i},#{color.green.to_i},#{
  198.         color.blue.to_i},#{color.alpha.to_i}]" + Sword::S0_StatuX[1]
  199.       end
  200.       set
  201.     end
  202.     no_depict ? text.code_explain_updateX : text
  203.   end
  204.   def code_explain_updateX
  205.     az = '([dA-Za-z][dA-Za-z])'
  206.     [/\[Aa][Ll][(d+)]/, /\[Bb][Ss][#{Rege} ?, ?(d+)]/, /\[Bb][Ss][#{Rege}]/,
  207.     /\[Cc][Oo][(d+) ?, ?(d+)]/, /\[Cc][(d+)]/,
  208.     /\[Cc][(d+) ?, ?(d+) ?, ?(d+)(?: ?, ?(d+)|)]/,
  209.     /\[Cc][##{az}#{az}#{az}(?:#{az}|)]/,
  210.     /\[Cc]/, /\[Bb]/, /\[Ii]/, /\[Uu]/, /\[Ss]/, /\[Ff][Nn][#{Rege}]/,
  211.     /\[Ff][Nn]/, /\[Ff][Ss][(d+)]/, /\[Ff][Ss]/, /\[Ff][Hh][(d+)]/,
  212.     /\[Ff][Hh]/, /\[Ff]/, /\[Xx][(-?d+)]/, /\[Yy][(-?d+)]/].each{
  213.     |sxp| self.gsub!(sxp){''}} # 清除描繪控制碼
  214.     self
  215.   end
  216.   #-------------------------------------------------------------
  217.   #● 處理重複性質的控制碼(字符串)
  218.   def code_explain_update(text)
  219.     @def_depth = false # 將執行此方法用的標誌關閉
  220.     text.gsub!(/\[Tt][Xx][Tt][([0-龥]+)][([0-龥]+)]/) do @def_depth = true
  221.       tex, a, i = '', $2, true ; b = open("#{$1}.txt").read.split(/nn/); b.each do |sin|
  222.       if (/[#{a}]n/ =~ sin) == (i ? 3 : 0) ; tex = sin.sub(/[#{a}]n/, '') ; break
  223.       else ; tex = '' ; i = nil ; end ; end ; tex ; end
  224.     text.gsub!(/\[Tt][Xx][Tt][([0-龥]+)]/){@def_depth = true ; open("#{$1}.txt").read}
  225.     return text unless $scene # 遊戲尚未正式開始就中斷
  226.     text.gsub!(/\[Vv][(d+)]/){@def_depth = true ; $game_variables[$1.to_i]}
  227.     text.gsub!(/\[Ll][(d+)]/){@def_depth = true # 記憶控制碼
  228.     $game_system.swordM_save[$1.to_i] != nil ? $game_system.swordM_save[$1.to_i] : ''}
  229.   text ; end
  230.   #-------------------------------------------------------------
  231.   #● 關鍵字轉換
  232.   def critical_word
  233.     text = self.dup
  234.     Sword::S46_Chase.each{|key, value| value.size == 1 ? text.gsub!(/#{key}/){value[0]} :
  235.     text.gsub!(/#{key}/){value[0] + key + value[1]}}
  236.   text ; end
  237.   #-------------------------------------------------------------
  238.   #● 描繪位圖(寬度, 高度, 間隔距離, 字體)
  239.   def bitmap_explain(width, height, distance = 0, font = nil)
  240.     bitmap = Bitmap.new(width, height)
  241.     # 轉換內容控制碼的內容, X座標, Y座標, 行數, 單行資料, 最大資料
  242.     text, x, y, br, row, max = self.dup, 0, 0, 0, [[0, 0, []]], [0, 0]
  243.     # 字體表, 底線, 刪除線, 顏色紀錄, 陰影位置, 圖片表, VX預設陰影紀錄用
  244.     font_n, font_u, font_s, gradually, shadow, picture, vshadow = [], false, false, nil, 0, [], nil
  245.     font ? bitmap.font = font : font = bitmap.font.dup  # 未設定字體時,產生預設字體
  246.     text.gsub!(/\[Aa][Ll][(d+)]/){"x08#{$1}]"}
  247.     text.gsub!(/\[Bb][Ss][#{Rege} ?, ?(d+)]/){
  248.     picture << [$1, $2.to_i] ; "x05#{picture.size - 1}]"}
  249.     text.gsub!(/\[Bb][Ss][#{Rege}]/){picture << [$1, 0] ; "x05#{picture.size - 1}]"}
  250.     text.gsub!(/\[Cc][Oo][(d+) ?, ?(d+)]/){"x06#{$1},#{$2}]"}
  251.     text.gsub!(/\[Cc][(d+)]/){color = Window_Base.new(-33, -33, 33, 33).text_color($1.to_i)
  252.     "x01#{color.red.to_i},#{color.green.to_i},#{color.blue.to_i},#{color.alpha.to_i}]"}
  253.     text.gsub!(/\[Cc][(d+) ?, ?(d+) ?, ?(d+)(?: ?, ?(d+)|)]/){alpha = $4 ? $4.to_i : 255
  254.     "x01#{$1},#{$2},#{$3},#{alpha}]"}
  255.     az = '([dA-Za-z][dA-Za-z])'
  256.     text.gsub!(/\[Cc][##{az}#{az}#{az}(?:#{az}|)]/){alpha = $4 ? $4.to_i(16) : 255
  257.     "x01#{$1.to_i(16)},#{$2.to_i(16)},#{$3.to_i(16)},#{alpha}]"}
  258.     text.gsub!(/\[Cc]/){"x001]"}
  259.     text.gsub!(/\[Bb]/){"x002]"}
  260.     text.gsub!(/\[Ii]/){"x003]"}
  261.     text.gsub!(/\[Uu]/){"x004]"}
  262.     text.gsub!(/\[Ss]/){"x005]"}
  263.     text.gsub!(/\[Ff][Nn][#{Rege}]/){font_n << $1 ; "x02#{font_n.size - 1}]"}
  264.     text.gsub!(/\[Ff][Nn]/){"x006]"}
  265.     text.gsub!(/\[Ff][Ss][(d+)]/){"x03#{$1}]"}
  266.     text.gsub!(/\[Ff][Ss]/){"x007]"}
  267.     text.gsub!(/\[Ff][Hh][(d+)]/){"x04#{$1}]"}
  268.     text.gsub!(/\[Ff][Hh]/){"x040]"}
  269.     text.gsub!(/\[Ff]/){"x000]"}
  270.     text.gsub!(/\[Xx][(-?d+)]/){"x07X#{$1}]"}
  271.     text.gsub!(/\[Yy][(-?d+)]/){"x07Y#{$1}]"}
  272.     while ((c = text.slice!(/./m)) != nil) ; case c
  273.     when "n" ; max[0] = x if x > max[0] # 換行
  274.       row[br][1] += Sword::S46_NilText if row[br][1] == 0 # 該行無內容可能就附加隱藏高度
  275.       row[br][1] += distance # 增加間隔距離
  276.       row[br][0] = x ; x = 0 ; y += row[br][1] ; br += 1 ; row[br] = [0, 0, []] # 換行
  277.     when "x00" ; text.sub!(/(d+)]/, '')
  278.       case $1
  279.       when '0' ; bitmap.font.color, gradually, bitmap.font.bold, bitmap.font.italic, font_u, font_s,
  280.         bitmap.font.name, bitmap.font.size, shadow =
  281.         font.color, nil, font.bold, font.italic, false, false, font.name, font.size, 0
  282.         (bitmap.font.shadow = vshadow ; vshadow = nil) if $Sword_VX and vshadow != nil
  283.       when '1' ; bitmap.font.color, gradually = font.color, nil # 還原顏色
  284.         (bitmap.font.shadow = vshadow ; vshadow = nil) if $Sword_VX and vshadow != nil
  285.       when '2' ; bitmap.font.bold = ! bitmap.font.bold # 粗細體互換
  286.       when '3' ; bitmap.font.italic = ! bitmap.font.italic # 斜直體互換
  287.       when '4' ; font_u = ! font_u # 底線附加或解除
  288.       when '5' ; font_s = ! font_s # 刪除線附加或解除
  289.       when '6' ; bitmap.font.name = font.name # 還原字體
  290.       when '7' ; bitmap.font.size = font.size # 還原大小
  291.       end
  292.     when "x01" ; text.sub!(/(d+),(d+),(d+),(d+)]/, '') # 變更文字顏色
  293.       gradually = nil if gradually.is_a?(Color) # 取消漸層色
  294.       gradually ? gradually = Color.new($1.to_i, $2.to_i, $3.to_i, $4.to_i) :
  295.       bitmap.font.color = Color.new($1.to_i, $2.to_i, $3.to_i, $4.to_i)
  296.       gradually = true if (/x01/ =~ text) == 0 unless gradually # 設定漸層判斷標誌
  297.     when "x02" ; text.sub!(/(d+)]/, '') # 變更字體
  298.       bitmap.font.name = font_n[$1.to_i] if Font.exist?(font_n[$1.to_i])
  299.     when "x03" ; text.sub!(/(d+)]/, '') ; bitmap.font.size = $1.to_i # 變更大小
  300.     when "x04" ; text.sub!(/(d+)]/, '') ; shadow = $1.to_i # 變更陰影位置
  301.     when "x05" ; text.sub!(/(d+)]/, '') ; # 描繪圖片
  302.       cache = Bitmap.new(picture[$1.to_i][0])
  303.       cache.hue_change(picture[$1.to_i][1]) # 色相處理
  304.       rect = Rect.new(0, 0, cache.width, cache.height)
  305.       bitmap.blt(x, y, cache, rect)
  306.       row[br][2] << [1, picture[$1.to_i], Rect.new(x, y, rect.width, rect.height)]
  307.       x += rect.width
  308.       row[br][1] = rect.height if rect.height > row[br][1]
  309.       max[1] = rect.height if rect.height > max[1]
  310.     when "x06" ; text.sub!(/(d+),(d+)]/, '') ; # 描繪矩形
  311.       bitmap.fill_rect(x, y, $1.to_i, $2.to_i, bitmap.font.color)
  312.       row[br][2] << [2, nil, Rect.new(x, y, $1.to_i, $2.to_i)]
  313.       x += $1.to_i
  314.       row[br][1] = $2.to_i if $2.to_i > row[br][1] ; max[1] = $2.to_i if $2.to_i > max[1]
  315.     when "x07" ; text.sub!(/([XY])(-?d+)]/, '') ; $1 == 'X' ? x += $2.to_i : y += $2.to_i # 移動
  316.     when "x08" ; text.sub!(/(d+)]/, '') ; align = $1.to_i
  317.     else ; cx, cy = bitmap.text_size(c).width, bitmap.text_size(c).height
  318.       (x = 0 ; y += cy) if x + cx >= width # 自動換行
  319.       if shadow > 0 # 陰影文字的場合
  320.         color_dup = bitmap.font.color.dup
  321.         bitmap.font.color = Color.new(0, 0, 0)
  322.         bitmap.draw_text(x - 1, y + 1, cx, cy, c) if [1, 5].include?(shadow)
  323.         bitmap.draw_text(x, y + 1, cx, cy, c) if [2, 5].include?(shadow)
  324.         bitmap.draw_text(x + 1, y + 1, cx, cy, c) if [3, 5].include?(shadow)
  325.         bitmap.draw_text(x - 1, y, cx, cy, c) if [4, 5].include?(shadow)
  326.         bitmap.draw_text(x + 1, y, cx, cy, c) if [6, 5].include?(shadow)
  327.         bitmap.draw_text(x - 1, y - 1, cx, cy, c) if [7, 5].include?(shadow)
  328.         bitmap.draw_text(x, y - 1, cx, cy, c) if [8, 5].include?(shadow)
  329.         bitmap.draw_text(x + 1, y - 1, cx, cy, c) if [9, 5].include?(shadow)
  330.         bitmap.font.color = color_dup
  331.       end
  332.       if gradually # 描繪漸層文字的場合
  333.         (vshadow = bitmap.font.shadow ; bitmap.font.shadow = false) if
  334.         $Sword_VX and vshadow == nil # 取消陰影
  335.         grad = [(gradually.red - bitmap.font.color.red) / cy,
  336.         (gradually.green - bitmap.font.color.green) / cy,
  337.         (gradually.blue - bitmap.font.color.blue) / cy,
  338.         (gradually.alpha - bitmap.font.color.alpha) / cy]
  339.         col = [bitmap.font.color.red, bitmap.font.color.green,
  340.         bitmap.font.color.blue, bitmap.font.color.alpha]
  341.         colr = col.dup
  342.         cy.times{|i| bitmap.font.color =
  343.         Color.new(col[0] += grad[0], col[1] += grad[1], col[2] += grad[2], col[3] += grad[3]).dup
  344.         bitmap.draw_text(x, y, cx, cy - i, c)}
  345.         bitmap.font.color = Color.new(colr[0], colr[1], colr[2], colr[3])
  346.       else ; bitmap.draw_text(x, y, cx, cy, c) # 描繪文字
  347.       end
  348.       bitmap.fill_rect(x, y + cy - 1, cx, 1, bitmap.font.color) if font_u # 描繪底線
  349.       bitmap.fill_rect(x, y + cy / 2, cx, 1, bitmap.font.color) if font_s # 描繪刪除線
  350.       row[br][2] << [0, c, Rect.new(x, y, cx, cy)]
  351.       x += cx
  352.       row[br][1] = cy if cy > row[br][1] ; max[1] = cy if cy > max[1]
  353.     end ; yield bitmap ; end
  354.     $Sword46 = [[max[0], max[1] + y + cy], row]
  355.     GC.start
  356.     bitmap
  357.   end
  358. end
  359. #=======================================
  360. #■ 系統
  361. class Game_System
  362.   attr_accessor(:swordM_save) # 記憶控制碼
  363.   attr_accessor(:swordM_data) # 讀取的數據資料
  364.   #-------------------------------------------------------------
  365.   #● 初始化狀態
  366.   alias sword46_initialize initialize
  367.   def initialize ; sword46_initialize
  368.     @swordM_save, @swordM_data = [], nil
  369.   end
  370. end
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2709
在线时间
166 小时
注册时间
2018-1-19
帖子
89
8
发表于 2018-2-24 01:39:40 | 只看该作者

抱歉没注意看到已经更新了。毕竟编辑并不会提醒_(:з」∠)_
98行那个啊,原本是
  1. Rege = '([dA-Za-z一-龥-+*/_$!?`~!@#$%^&*()_=\|'."<>?/;:{}]+)'
复制代码

中间有个逗号没有加斜杠
所以应该是
  1. Rege = '([dA-Za-z一-龥-+*/_$!?`~!@#$%^&*()_=\|\'."<>?/;:{}]+)'
复制代码

就不会出错了
求勾搭QwQ(bu)会使用脚本和事件QwQ虽然脚本还只是初级程度,还在学习ingQwQ
平常很闲,特别想回答问题和解决问题。再求勾搭呜呜呜QWQ
QQ:841155947
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
399
在线时间
36 小时
注册时间
2017-11-9
帖子
19
9
 楼主| 发表于 2018-2-24 22:44:30 | 只看该作者
mori13 发表于 2018-2-24 01:39
抱歉没注意看到已经更新了。毕竟编辑并不会提醒_(:з」∠)_
98行那个啊,原本是
中间有个逗号没有加斜杠

是沒有出錯了,不過控制碼依然有問題
這個腳本真難搞呀…Orz

点评

我是用一個新的工程來做測試的,還是同樣有問題,應該不是腳本衝突,除非它是跟內置的腳本有衝突……  发表于 2018-2-28 00:21
控制码有问题,会不会是与别的脚本冲突了,比如其他的对话框脚本?  发表于 2018-2-27 19:27
明白呀,辛苦大大啦 ><  发表于 2018-2-25 21:06
Orz毕竟偶不是原作者呢  发表于 2018-2-25 01:05
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 20:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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