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

Project1

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

[正则问题]对话显名脚本修改

 关闭 [复制链接]

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
614
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

跳转到指定楼层
1
发表于 2008-8-28 15:49:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
  1.   def convert_special_characters
  2.     # \ を変換(エスケープ処理のため)
  3.     @text.gsub!(/\\\\/)             { "\x7f" }
  4.     # システム定義
  5.     @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
  6.     @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
  7.     @text.gsub!(/\\N\[([0-9]+)\]/i) { $game_actors[$1.to_i].name }
  8.     @text.gsub!(/\\C\[([0-9]+)\]/i) { "\x01[#{$1}]" }
  9.     @text.gsub!(/\\G/i)             { "\x02" }
  10.     @text.gsub!(/\\\./)             { "\x03" }
  11.     @text.gsub!(/\\\|/)             { "\x04" }
  12.     @text.gsub!(/\\!/)              { "\x05" }
  13.     @text.gsub!(/\\>/)              { "\x06" }
  14.     @text.gsub!(/\\</)              { "\x07" }
  15.     @text.gsub!(/\\\^/)             { "\x08" }
  16.     # スクリプト定義
  17.     @text.gsub!(/\\WR\[(.*?)\]/i)    { "\x0b[#{$1}]" }
  18.     @text.gsub!(/\\WR\[(.*?)\]/i)    { "\x0b[#{$1}]" }
  19.     @text.gsub!(/\\WL?\[(.*?)\]/i)   { "\x0a[#{$1}]" }
  20.     # \ を元の文字に戻す
  21.     @text.gsub!(/\x7f/)             { "\\" }
  22.   end
复制代码

这是对话显名脚本的一部分,功能是显示文章里有 \w[名字]会单独弹出个window显名,我想加一个当遇到\w[1~9]的时候会自动转为\w[\n[1~9]]来显示角色名字
完整脚本:
  1. # このサイトのスクリプトの名前空間。
  2. module QuietLab
  3. end

  4. # このスクリプトの名前空間。
  5. module QuietLab::Script_37
  6.   
  7.   # このスクリプトのバージョンの日付表記。
  8.   Version = 2008_02_26
  9. end

  10. # 名前を表示するクラス。
  11. class QuietLab::Script_37::Window_Name < Window_Base
  12.   
  13.   # ウィンドウに表示する文字列。
  14.   attr_reader :text
  15.   
  16.   # オブジェクトを初期化します。
  17.   def initialize(x = 0, y = 0)
  18.     super(x, y, 160, WLH + 32)
  19.     @text = ""
  20.     refresh
  21.   end
  22.   
  23.   # 内容を再描画します。
  24.   def refresh
  25.     self.contents.clear
  26.     self.contents.draw_text(4, 0, self.width - 32 - 8, WLH, @text)
  27.     self.open if @text != ""
  28.   end
  29.   
  30.   # 表示する文字列を設定します。位置は [ 0:左, 2:右 ] です。
  31.   def set_text(pos, val)
  32.     @text = val
  33.     self.x = (pos == 2 ? 544 - self.width : 0)
  34.     refresh
  35.   end
  36. end

  37. # メッセージウィンドウのクラス。
  38. class Window_Message
  39.   
  40.   #-- alias 定義
  41.   # 判別のため、メソッド名末尾に _by_QuietLab37 を付加します。
  42.   #++
  43.   alias :initialize_by_QuietLab37         :initialize
  44.   alias :dispose_by_QuietLab37            :dispose
  45.   alias :update_by_QuietLab37             :update
  46.   alias :create_gold_window_by_QuietLab37 :create_gold_window
  47.   alias :start_message_by_QuietLab37      :start_message
  48.   alias :reset_window_by_QuietLab37       :reset_window
  49.   alias :terminate_message_by_QuietLab37  :terminate_message
  50.   alias :update_message_by_QuietLab37     :update_message
  51.   
  52.   # オブジェクトを初期化します。
  53.   def initialize
  54.     initialize_by_QuietLab37
  55.     create_name_window
  56.   end
  57.   
  58.   # 使用しているウィンドウ・スプライトを解放します。
  59.   def dispose
  60.     dispose_by_QuietLab37
  61.     dispose_name_window
  62.   end
  63.   
  64.   # ウィンドウを更新します。
  65.   def update
  66.     update_name_window
  67.     update_by_QuietLab37
  68.   end
  69.   
  70.   # ゴールドウィンドウを作成します。
  71.   def create_gold_window
  72.     create_gold_window_by_QuietLab37
  73.     @gold_window.z = self.z + 1
  74.   end
  75.   
  76.   # メッセージの表示処理を開始します。
  77.   def start_message
  78.     @name_window.close
  79.     start_message_by_QuietLab37
  80.   end
  81.   
  82.   # ウィンドウの状態をリセットします。
  83.   def reset_window
  84.     reset_window_by_QuietLab37
  85.     if @position == 0
  86.       self.y = 24
  87.       @gold_window.y = -16
  88.     end
  89.     reset_name_window
  90.   end
  91.   
  92.   # 発言者ウィンドウの位置をリセットします。
  93.   def reset_name_window
  94.     @name_window.opacity = self.opacity
  95.     @name_window.y = self.y - 40
  96.   end
  97.   
  98.   # メッセージの表示処理を終了します。
  99.   def terminate_message
  100.     terminate_message_by_QuietLab37
  101.     @name_window.close
  102.   end
  103.   
  104.   # メッセージの内容を更新します。
  105.   def update_message
  106.     loop do
  107.       case @text.slice(/./m)
  108.       when "\x0a"
  109.         @text.sub!(/\x0a\[(.*?)\]/, "")
  110.         @name_window.set_text(0, $1)
  111.       when "\x0b"
  112.         @text.sub!(/\x0b\[(.*?)\]/, "")
  113.         @name_window.set_text(2, $1)
  114.       else
  115.         break
  116.       end
  117.       break unless @show_fast or @line_show_fast
  118.     end
  119.     update_message_by_QuietLab37
  120.   end
  121.   
  122.   # 表示する内容に含まれる特殊文字を変換します。
  123.   def convert_special_characters
  124.     # \ を変換(エスケープ処理のため)
  125.     @text.gsub!(/\\\\/)             { "\x7f" }
  126.     # システム定義
  127.     @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
  128.     @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
  129.     @text.gsub!(/\\N\[([0-9]+)\]/i) { $game_actors[$1.to_i].name }
  130.     @text.gsub!(/\\C\[([0-9]+)\]/i) { "\x01[#{$1}]" }
  131.     @text.gsub!(/\\G/i)             { "\x02" }
  132.     @text.gsub!(/\\\./)             { "\x03" }
  133.     @text.gsub!(/\\\|/)             { "\x04" }
  134.     @text.gsub!(/\\!/)              { "\x05" }
  135.     @text.gsub!(/\\>/)              { "\x06" }
  136.     @text.gsub!(/\\</)              { "\x07" }
  137.     @text.gsub!(/\\\^/)             { "\x08" }
  138.     # スクリプト定義
  139.     @text.gsub!(/\\WR\[(.*?)\]/i)    { "\x0b[#{$1}]" }
  140.     @text.gsub!(/\\WL?\[(.*?)\]/i)   { "\x0a[#{$1}]" }
  141.     # \ を元の文字に戻す
  142.     @text.gsub!(/\x7f/)             { "\\" }
  143.   end
  144.   
  145.   # 発言者ウィンドウを作成します。
  146.   def create_name_window
  147.     @name_window = QuietLab::Script_37::Window_Name.new
  148.     @name_window.openness = 0
  149.     @name_window.z = self.z + 1
  150.   end
  151.   
  152.   # 発言者ウィンドウを解放します。
  153.   def dispose_name_window
  154.     @name_window.dispose
  155.   end
  156.   
  157.   # 発言者ウィンドウを更新します。
  158.   def update_name_window
  159.     @name_window.update
  160.   end
  161. end

  162. # 戦闘中に使用されるメッセージウィンドウのクラス。
  163. class Window_BattleMessage
  164.   
  165.   #-- alias 定義
  166.   # 判別のため、メソッド名末尾に _by_QuietLab37 を付加します。
  167.   #++
  168.   alias :reset_window_by_QuietLab37 :reset_window
  169.   
  170.   # ウィンドウの状態をリセットします。
  171.   def reset_window
  172.     reset_window_by_QuietLab37
  173.     reset_name_window
  174.   end
  175. end

  176. # QuietLab ScriptFormat v1.12
复制代码

版务信息:本贴由楼主自主结贴~
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
614
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

2
 楼主| 发表于 2008-8-29 01:24:08 | 只看该作者
纯水顶……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

辉瑞中国首席研究员<

梦石
0
星屑
50
在线时间
142 小时
注册时间
2008-1-18
帖子
2129
3
发表于 2008-8-29 02:00:54 | 只看该作者
找到
def update_message
    loop do
      case @text.slice(/./m)
      when "\x0a"
        @text.sub!(/\x0a\[(.*?)\]/, "")
        @name_window.set_text(0, $1)
      when "\x0b"
        @text.sub!(/\x0b\[(.*?)\]/, "")
        @name_window.set_text(2, $1)
      else


替换为
def update_message
    loop do
      case @text.slice(/./m)
      when "\x0a"
        @text.sub!(/\x0a\[(.*?)\]/, "")
         n = $1
         if $1 =~ /\d/ then
           name =  $game_actors[n.to_i].name
          @name_window.set_text(0, name)
        else
        @name_window.set_text(0, n)
        end
      when "\x0b"
        @text.sub!(/\x0b\[(.*?)\]/, "")
        n = $1
        if $1 =~ /\d/ then
          name = $game_actors[n.to_i].name
          @name_window.set_text(2, name)
        else
        @name_window.set_text(2, n)
        end
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
来6r就是等某位仁兄的巨坑

褴褛着身行无端,囊中羞涩空心酸。
平生几无得意事,倒塔泡面宅寝室。
惟羡隔壁高帅富,雨露春风月夜声。
青丝无处觅其踪,只有硬盘苍井空。
莫云男儿空悲愁,鸿鹄岂不天际游。
坐断天下执鹿首,千百金帛万兜鍪。
夜深忽梦某年月,再见女神欲语迟。
吊丝终有逆袭日,木耳再无回粉时。
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
614
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

4
 楼主| 发表于 2008-8-29 03:42:56 | 只看该作者
thx{/qiang},不过少了个else
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
2 小时
注册时间
2008-5-2
帖子
140
5
发表于 2008-8-29 04:54:12 | 只看该作者
以下引用zh99998于2008-8-28 19:42:56的发言:

thx,不过少了个else


好象我没少写
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-30 02:24

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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