| 赞 | 274  | 
 
| VIP | 0 | 
 
| 好人卡 | 0 | 
 
| 积分 | 153 | 
 
| 经验 | 515 | 
 
| 最后登录 | 2025-11-3 | 
 
| 在线时间 | 2108 小时 | 
 
 
 
 
 
Lv4.逐梦者 
	- 梦石
 - 1 
 
        - 星屑
 - 14298 
 
        - 在线时间
 - 2108 小时
 
        - 注册时间
 - 2017-9-28
 
        - 帖子
 - 663
 
 
 
 | 
	
此外 
喵呜喵5大佬的:https://rpg.blue/home.php?mod=sp ... o=blog&id=13683 
 
木星汉化: 
- =begin
 
  
-  ▼ 选项拓展 ver. 3.4
 
 -  
 
 -  仅用于 RPG Maker VXAce
 
 -  
 
 -  制作 : 木星ペンギン
 
 -  URL  : http://woodpenguin.blog.fc2.com/
 
  
- ------------------------------------------------------------------------------
 
 -  概要
 
  
-     添加功能:
 
 -  □ 合并两个连续选项为一个大选项。
 
 -  □ 选项显示条件功能,不符合显示条件的选项会被隐藏。
 
 -  □ 设定选项和指针的初始位置
 
 -     当前指针的位置可以赋值于变量。
 
 -  
 
 -  □ 临时更改选项窗口的位置。
 
 -  □ 设定选项条件,不符合条件时,选项变成半透明且不可被选择。
 
 -  □ 各个选项都可以有相应的帮助信息。
 
  
- ------------------------------------------------------------------------------
 
 -  使用方法
 
 -  
 
 -   □ 当两个选项连续排列时,它们会被合并为一个选项。
 
 -   □ 合并后选项的「取消的时候」为最后一个选项的设定。
 
 -   
 
 -   □ 如果在选项中填入 if(条件) 、且不满足条件时,该选项会被隐藏。
 
 -   □条件用 eval 进行判断。(详细参考【内建功能】)
 
 -   □s 代表开关、v 代表变量。
 
 -   
 
 -   例子:
 
 -   if(s[1]&&s[2])
 
 -   
 
 -   if(v[1]==1)
 
 -   
 
 -   □如果「取消的时候」的选项因为不符合显示条件而被隐藏,则用“无效”作为代替。
 
 -   
 
 -  □ 在注释中填入以下字符串,指定某变量的值为指针的初始位置。
 
 -   
 
 -     记忆指针(n)
 
 -     
 
 -       n : 指针初始位置的变量
 
 -   
 
 -   □每当选项的指针位置改变时,选项位置的数字会被存储于变量中。
 
 -   
 
 -   □ 在注释中填入以下字符串,暂时改变选项的显示位置。
 
 -   
 
 -     选项位置(x, y[, row])
 
 -     
 
 -       x   : 选项窗口的x坐标。
 
 -       y   : 选项窗口的y坐标。
 
 -       row : 选项最大行数。
 
 -             未设定时,会显示全部的选项。
 
 -   
 
 -  □ 在注释中填入以下字符串,使选项显示在对话框的背后。
 
 -     请在[显示文字]后面使用。
 
 -   
 
 -     选项位置(对话框后)
 
 -     
 
 -  □ 在注释中填入以下字符串,则隐藏选项窗口的背景。
 
 -   
 
 -     背景OFF
 
 -     
 
 -   □ 在选项中填入 en(条件) 、当不符合条件时,选项会变半透明。
 
 -   □条件用 eval 进行判断。(详细参考【内建功能】)
 
 -   □s[n] 代表条件是开启n号开关、v[n] 代表n号变量。
 
 -   
 
 -   例子:
 
 -   en(s[1]&&s[2])
 
 -   
 
 -   en(v[1]==1)
 
 -   
 
 -  □如果「取消的时候」的选项因为不符合显示条件而变半透明,则会播放蜂鸣声。
 
 -   
 
 -  □ 各选项之下的注释中填入以下字符串,当移动到各选项中时,会显示选项的帮助文字。
 
 -   
 
 -     选项帮助
 
 -      (内容)
 
 -      
 
 -      例如:
 
 -      
 
 -      选项帮助
 
 -      可以住宿。
 
 -     
 
 -  □ 请在以下网址中查看详细介绍。
 
  
-   http://woodpenguin.web.fc2.com/rgss3/choice_ex.html
 
 -   
 
 - =end
 
 - module WdTk
 
 - module ChoiceEX
 
 - #//////////////////////////////////////////////////////////////////////////////
 
 - #
 
 - # 设定部分
 
 - #
 
 - #//////////////////////////////////////////////////////////////////////////////
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 选项最大行数
 
 -   #     如果选项数小于这个数字。
 
 -   #     则选项最大数与选项数相同。
 
 -   #--------------------------------------------------------------------------
 
 -   RowMax = 8
 
 -   
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 读取选项帮助的开头文字
 
 -   #--------------------------------------------------------------------------
 
 -   Help = "选项帮助"
 
 -   
 
 - end
 
  
- #//////////////////////////////////////////////////////////////////////////////
 
 - #
 
 - # 以下部分、没有修改的必要
 
 - #
 
 - #//////////////////////////////////////////////////////////////////////////////
 
  
-   @material ||= []
 
 -   @material << :ChoiceEX
 
 -   def self.include?(sym)
 
 -     @material.include?(sym)
 
 -   end
 
 -   
 
 - end
 
  
- #==============================================================================
 
 - # ■ Game_Message
 
 - #==============================================================================
 
 - class Game_Message
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 公開インスタンス変数
 
 -   #--------------------------------------------------------------------------
 
 -   attr_accessor :choice_x                 # 選択肢ウィンドウの表示 X 座標
 
 -   attr_accessor :choice_y                 # 選択肢ウィンドウの表示 Y 座標
 
 -   attr_accessor :choice_row_max           # 選択肢ウィンドウの表示行数
 
 -   attr_accessor :choice_help              # 選択肢のヘルプ
 
 -   attr_accessor :choice_var_id            # 選択肢のカーソル位置を入れる変数ID
 
 -   attr_accessor :choice_background        # 選択肢ウィンドウ背景の表示状態
 
 -   attr_accessor :under_choice             # 選択肢をメッセージの下に表示
 
 -   #--------------------------------------------------------------------------
 
 -   # ○ クリア
 
 -   #--------------------------------------------------------------------------
 
 -   alias _wdtk_choice_clear clear
 
 -   def clear
 
 -     _wdtk_choice_clear
 
 -     @choice_x = @choice_y = nil
 
 -     @choice_row_max = WdTk::ChoiceEX::RowMax
 
 -     @choice_help = {}
 
 -     @choice_var_id = 0
 
 -     @choice_background = 0
 
 -     @under_choice = false
 
 -   end
 
 - end
 
  
- #==============================================================================
 
 - # ■ Game_Interpreter
 
 - #==============================================================================
 
 - class Game_Interpreter
 
 -   #--------------------------------------------------------------------------
 
 -   # ☆ 選択肢のセットアップ
 
 -   #--------------------------------------------------------------------------
 
 -   def setup_choices(params)
 
 -     add_choices(params, @index)
 
 -     $game_message.choice_proc = Proc.new {|n| @branch[@indent] = n }
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 選択肢の追加
 
 -   #--------------------------------------------------------------------------
 
 -   def add_choices(params, i, d = 0)
 
 -     params[0].each_with_index {|s, n| $game_message.choices[n + d] = s }
 
 -     $game_message.choice_cancel_type = params[1] + d if params[1] > 0
 
 -     indent = @list[i].indent
 
 -     loop do
 
 -       i += 1
 
 -       if @list[i].indent == indent
 
 -         case @list[i].code
 
 -         when 402 # [**] の場合
 
 -           get_help_texts(@list[i].parameters[0] + d, i + 1)
 
 -         when 404 # 分岐終了
 
 -           break
 
 -         end
 
 -       end
 
 -     end
 
 -     i += 1
 
 -     add_choices(@list[i].parameters, i, d + 5) if @list[i].code == 102
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● ヘルプ用テキストの取得
 
 -   #--------------------------------------------------------------------------
 
 -   def get_help_texts(b, i)
 
 -     if @list[i].code == 108 && @list[i].parameters[0] == WdTk::ChoiceEX::Help
 
 -       $game_message.choice_help[b] = []
 
 -       while @list[i + 1].code == 408
 
 -         i += 1
 
 -         $game_message.choice_help[b] << @list[i].parameters[0]
 
 -       end
 
 -     end
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ? 注釈
 
 -   #--------------------------------------------------------------------------
 
 -   alias _wdtk_choice_command_108 command_108
 
 -   def command_108
 
 -     _wdtk_choice_command_108
 
 -     @comments.each do |comment|
 
 -       case comment
 
 -       when /选项位置\((\d+),\s*(\d+),?\s*(\d*)\)/
 
 -         $game_message.choice_x = $1.to_i
 
 -         $game_message.choice_y = $2.to_i
 
 -         $game_message.choice_row_max = ($3.empty? ? 99 : $3.to_i)
 
 -       when "选项位置(对话框后)"
 
 -         $game_message.under_choice = true
 
 -         $game_message.choice_background = 1
 
 -       when /记忆指针\((\d+)\)/
 
 -         $game_message.choice_var_id = $1.to_i
 
 -       when /背景(ON|OFF)/
 
 -         $game_message.choice_background = ($1 == "ON" ? 0 : 1)
 
 -       end
 
 -     end
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ☆ 分岐終了の場合
 
 -   #--------------------------------------------------------------------------
 
 -   def command_404
 
 -     if next_event_code == 102
 
 -       @branch[@indent] -= 5 if @branch.include?(@indent)
 
 -       @index += 1
 
 -       command_skip
 
 -     end
 
 -   end
 
 - end
 
  
- #==============================================================================
 
 - # ■ Window_ChoiceList
 
 - #==============================================================================
 
 - class Window_ChoiceList
 
 -   #--------------------------------------------------------------------------
 
 -   # ☆ 入力処理の開始
 
 -   #--------------------------------------------------------------------------
 
 -   def start
 
 -     return unless close?
 
 -     clear_command_list
 
 -     make_command_list
 
 -     if @list.empty?
 
 -       $game_message.choice_proc.call(-1)
 
 -       return
 
 -     end
 
 -     update_placement
 
 -     refresh
 
 -     select(0)
 
 -     if $game_message.choice_var_id > 0
 
 -       select_ext($game_variables[$game_message.choice_var_id])
 
 -     end
 
 -     open
 
 -     activate
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ☆ ウィンドウ位置の更新
 
 -   #--------------------------------------------------------------------------
 
 -   def update_placement
 
 -     self.width = [max_choice_width + 12, 96].max + padding * 2
 
 -     self.width = [width, Graphics.width].min
 
 -     n = [@list.size, $game_message.choice_row_max].min
 
 -     self.height = fitting_height(n)
 
 -     self.x = Graphics.width - width
 
 -     if @message_window.y >= Graphics.height / 2
 
 -       self.y = @message_window.y - height
 
 -     else
 
 -       self.y = @message_window.y + @message_window.height
 
 -     end
 
 -     self.x = $game_message.choice_x if $game_message.choice_x
 
 -     self.y = $game_message.choice_y if $game_message.choice_y
 
 -     self.z = $game_message.under_choice ? 210 : 100
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ☆ 選択肢の最大幅を取得
 
 -   #--------------------------------------------------------------------------
 
 -   def max_choice_width
 
 -     @list.collect {|com| text_size(com[:name]).width }.max || 0
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ☆ コマンドリストの作成
 
 -   #--------------------------------------------------------------------------
 
 -   def make_command_list
 
 -     $game_message.choices.each_with_index do |choice, i|
 
 -       next unless choice
 
 -       str = choice.dup
 
 -       next if str.slice!(/\s*if\(([^\)]+)\)/i) && !choice_eval($1)
 
 -       enable = !str.slice!(/\s*en\(([^\)]+)\)/i) || choice_eval($1)
 
 -       add_command(str, :choice, enable, i)
 
 -     end
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ○ 項目の描画
 
 -   #--------------------------------------------------------------------------
 
 -   alias _wdtk_choice_draw_item draw_item
 
 -   def draw_item(index)
 
 -     @choice_enabled = command_enabled?(index)
 
 -     _wdtk_choice_draw_item(index)
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● テキスト描画色の変更
 
 -   #--------------------------------------------------------------------------
 
 -   def change_color(color, enabled = true)
 
 -     super(color, enabled && @choice_enabled)
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ☆ 決定ハンドラの呼び出し
 
 -   #--------------------------------------------------------------------------
 
 -   def call_ok_handler
 
 -     $game_message.choice_proc.call(current_ext)
 
 -     close
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● キャンセルボタンが押されたときの処理
 
 -   #--------------------------------------------------------------------------
 
 -   def process_cancel
 
 -     return super if $game_message.choice_cancel_type % 5 == 0
 
 -     index = @list.index {|c| c[:ext] == $game_message.choice_cancel_type - 1 }
 
 -     return unless index
 
 -     return super if command_enabled?(index)
 
 -     Sound.play_buzzer
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● ウィンドウを閉じる
 
 -   #--------------------------------------------------------------------------
 
 -   def close
 
 -     @message_window.on_show_fast unless $game_message.choice_help.empty?
 
 -     super
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● ヘルプウィンドウ更新メソッドの呼び出し
 
 -   #--------------------------------------------------------------------------
 
 -   def call_update_help
 
 -     update_help if active && !$game_message.choice_help.empty?
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● ヘルプウィンドウの更新
 
 -   #--------------------------------------------------------------------------
 
 -   def update_help
 
 -     @message_window.force_clear
 
 -     if $game_message.choice_help.include?(current_ext)
 
 -       $game_message.texts.replace($game_message.choice_help[current_ext])
 
 -     else
 
 -       $game_message.texts.clear
 
 -     end
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 分岐用
 
 -   #--------------------------------------------------------------------------
 
 -   def choice_eval(formula)
 
 -     s, v = $game_switches, $game_variables
 
 -     begin
 
 -       Kernel.eval(formula)
 
 -     rescue
 
 -       msgbox "以下条件判断发生错误。\n\n", formula
 
 -       true
 
 -     end
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● フレーム更新
 
 -   #--------------------------------------------------------------------------
 
 -   def update
 
 -     last_index = @index
 
 -     super
 
 -     if last_index != @index && $game_message.choice_var_id > 0
 
 -       $game_variables[$game_message.choice_var_id] = current_ext
 
 -     end
 
 -   end
 
 - end
 
  
- #==============================================================================
 
 - # ■ Window_Message
 
 - #==============================================================================
 
 - class Window_Message
 
 -   #--------------------------------------------------------------------------
 
 -   # ○ ウィンドウ背景の更新
 
 -   #--------------------------------------------------------------------------
 
 -   alias _wdtk_choice_update_background update_background
 
 -   def update_background
 
 -     _wdtk_choice_update_background
 
 -     @choice_window.opacity = $game_message.choice_background == 0 ? 255 : 0
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ○ ウィンドウ位置の更新
 
 -   #--------------------------------------------------------------------------
 
 -   alias _wdtk_choice_update_placement update_placement
 
 -   def update_placement
 
 -     _wdtk_choice_update_placement
 
 -     reset_under_choice
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ○ 改行文字の処理
 
 -   #--------------------------------------------------------------------------
 
 -   alias _wdtk_choice_process_new_line process_new_line
 
 -   def process_new_line(text, pos)
 
 -     if $game_message.under_choice
 
 -       $game_message.choice_y += pos[:height]
 
 -       ch = self.contents_height + self.y - $game_message.choice_y
 
 -       $game_message.choice_row_max = ch / line_height
 
 -     end
 
 -     _wdtk_choice_process_new_line(text, pos)
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ○ 改ページ処理
 
 -   #--------------------------------------------------------------------------
 
 -   alias _wdtk_choice_new_page new_page
 
 -   def new_page(text, pos)
 
 -     _wdtk_choice_new_page(text, pos)
 
 -     reset_under_choice
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 選択肢をメッセージ下に表示する際のリセット
 
 -   #--------------------------------------------------------------------------
 
 -   def reset_under_choice
 
 -     if $game_message.under_choice
 
 -       $game_message.choice_x = self.x + 16 + new_line_x
 
 -       $game_message.choice_y = self.y
 
 -       $game_message.choice_row_max = visible_line_number
 
 -     end
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 文章の標示を強制クリア
 
 -   #--------------------------------------------------------------------------
 
 -   def force_clear
 
 -     @gold_window.close
 
 -     @fiber = nil
 
 -     close
 
 -     if WdTk.include?(:MesEff)
 
 -       @character_sprites.each do |sprite, params|
 
 -         next if params.empty?
 
 -         sprite.bitmap.clear
 
 -         sprite.visible = false
 
 -         params.clear
 
 -       end
 
 -     end
 
 -   end
 
 -   #--------------------------------------------------------------------------
 
 -   # ● 文章を最後まで表示する
 
 -   #--------------------------------------------------------------------------
 
 -   def on_show_fast
 
 -     @show_fast = true
 
 -   end
 
 - end
 
  复制代码 |   
 
 
 
 |