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

Project1

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

[已经过期] 请问如何使用显示选项

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1345
在线时间
378 小时
注册时间
2015-6-16
帖子
571
跳转到指定楼层
1
发表于 2018-2-13 17:03:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
利用事件的话确实很方便,但是我需要显示条件
A,B,C,D四个选项 A比如需要某位角色达到几级这种条件才能显示,同理如果B,C,D三个选项没有达到条件也不能显示。
简单来说我需要某些选项增加显示的条件
P1不太上了,有问题加个Q1286124843,不管是脚本还是游戏问题都可以来找我

Lv6.析梦学徒

老鹰

梦石
40
星屑
34725
在线时间
6740 小时
注册时间
2012-5-26
帖子
3259

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

2
发表于 2018-2-13 21:42:03 | 只看该作者
似乎没有啥要说的

选择支里填写 if($game_party.members[0].level > 10)  就是这个选项需要 队伍第一位角色的等级大于10 才会显示出来(并且才可以选择)
而填写 en(v[1] > 5 && s[1]) 就是当 1号变量大于5且一号开关开启 时,才可以选择,否则是半透明不可选(如果选择会有警告音,且无效)

  1. =begin

  2. ▼ 選択肢拡張 ver. 3.2

  3. RPGツクールVXAce用スクリプト

  4. 制作 : 木星ペンギン
  5. URL  : [url]http://woodpenguin.blog.fc2.com/[/url]

  6. ------------------------------------------------------------------------------
  7. 概要

  8. □ 選択肢を連続して設定した場合、つなげて一つの選択肢にする機能の追加。
  9. □ 条件を設定することで、その項目を表示しない機能の追加。
  10. □ 選択肢のカーソル初期位置を指定する機能と
  11.     現在のカーソル位置を変数に入れる機能の追加。

  12. □ 選択肢ウィンドウの位置を一時的に変更する機能の追加。
  13. □ 条件を設定することで、その項目を半透明にして選択不可にする機能の追加。
  14. □ 選択肢毎にヘルプメッセージを表示できる機能の追加。

  15. ------------------------------------------------------------------------------
  16. 使い方

  17. □ 選択肢の表示を続けて配置すると、一つの選択肢にまとめられます。
  18.   ・「キャンセルの場合」の処理は、無効以外を設定したものが適用され、
  19.      複数ある場合は後の選択肢のものが適用されます。
  20.   
  21. □ 選択肢の文章中に if(条件) と入れ、その条件が偽になると項目が表示されなくなります。
  22.   ・条件は eval によって評価されます。(詳細は【組み込み関数】を参照)
  23.   ・s でスイッチ、v で変数を参照できます。
  24.   ・「キャンセルの場合」の項目が表示されない場合、無効と同じ処理をします。

  25. □ 注釈に以下の文字列を入れることで、指定された変数の値が
  26.     カーソルの初期位置になります。
  27.   
  28.     カーソル記憶(n)
  29.    
  30.       n : カーソル初期位置の入った変数番号
  31.   
  32.   ・選択肢のカーソルの位置が変更されるたびに、
  33.     この変数に選択肢の番号が入れられるようになります。
  34.   
  35. □ 注釈に以下の文字列を入れることで、選択肢ウィンドウの表示位置を
  36.    一時的に変更することが出来ます。
  37.   
  38.     選択肢位置(x, y[, row])
  39.    
  40.       x   : ウィンドウを表示する X 座標。
  41.       y   : ウィンドウを表示する Y 座標。
  42.       row : 選択肢を表示する最大行数。
  43.             指定しない場合は、通常の最大行数を無視して
  44.             すべての選択肢が表示されます。
  45.   
  46. □ 注釈に以下の文字列を入れることで、選択肢ウィンドウの背景が非表示になります。
  47.   
  48.     背景OFF
  49.    
  50. □ 選択肢の文章中に en(条件) と入れ、その条件が偽になると項目が半透明で表示されます。
  51.   ・条件は eval によって評価されます。(詳細は【組み込み関数】を参照)
  52.   ・s でスイッチ、v で変数を参照できます。
  53.   ・「キャンセルの場合」の項目が半透明の場合、ブザーが鳴ります。
  54.   
  55. □ 各項目の下に、注釈で以下の文字列を入れると、続きの注釈を
  56.     項目のヘルプメッセージとしてカーソルを合わせたときに標示することができます。
  57.   
  58.     選択肢ヘルプ
  59.    
  60. □ 詳細は下記のサイトを参照してください。

  61.   [url]http://woodpenguin.web.fc2.com/rgss3/choice_ex.html[/url]
  62.   
  63. =end
  64. module WdTk
  65. module ChoiceEX
  66. #//////////////////////////////////////////////////////////////////////////////
  67. #
  68. # 設定項目
  69. #
  70. #//////////////////////////////////////////////////////////////////////////////
  71.   #--------------------------------------------------------------------------
  72.   # ● 選択肢の最大行数
  73.   #     選択肢を表示するウィンドウの行数の最大数です。
  74.   #     選択肢がこの数より小さければ、選択肢の数に合わせます。
  75.   #--------------------------------------------------------------------------
  76.   RowMax = 4

  77.   #--------------------------------------------------------------------------
  78.   # ● 選択肢ヘルプを読み取る文字列
  79.   #--------------------------------------------------------------------------
  80.   Help = "選択肢ヘルプ"

  81. end

  82. #//////////////////////////////////////////////////////////////////////////////
  83. #
  84. # 以降、変更する必要なし
  85. #
  86. #//////////////////////////////////////////////////////////////////////////////

  87.   @material ||= []
  88.   @material << :ChoiceEX
  89.   def self.include?(sym)
  90.     @material.include?(sym)
  91.   end

  92. end

  93. #==============================================================================
  94. # ■ Game_Message
  95. #==============================================================================
  96. class Game_Message
  97.   #--------------------------------------------------------------------------
  98.   # ● 公開インスタンス変数
  99.   #--------------------------------------------------------------------------
  100.   attr_accessor :choice_x                 # 選択肢ウィンドウの表示 X 座標
  101.   attr_accessor :choice_y                 # 選択肢ウィンドウの表示 Y 座標
  102.   attr_accessor :choice_row_max           # 選択肢ウィンドウの表示行数
  103.   attr_accessor :choice_help              # 選択肢のヘルプ
  104.   attr_accessor :choice_var_id            # 選択肢のカーソル位置を入れる変数ID
  105.   attr_accessor :choice_background        # 選択肢ウィンドウ背景の表示状態
  106.   #--------------------------------------------------------------------------
  107.   # ○ クリア
  108.   #--------------------------------------------------------------------------
  109.   alias _wdtk_choice_clear clear
  110.   def clear
  111.     _wdtk_choice_clear
  112.     @choice_x = @choice_y = nil
  113.     @choice_row_max = WdTk::ChoiceEX::RowMax
  114.     @choice_help = {}
  115.     @choice_var_id = 0
  116.     @choice_background = 0
  117.   end
  118. end

  119. #==============================================================================
  120. # ■ Game_Interpreter
  121. #==============================================================================
  122. class Game_Interpreter
  123.   #--------------------------------------------------------------------------
  124.   # ☆ 選択肢のセットアップ
  125.   #--------------------------------------------------------------------------
  126.   def setup_choices(params)
  127.     add_choices(params, @index)
  128.     $game_message.choice_proc = Proc.new {|n| @branch[@indent] = n }
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 選択肢の追加
  132.   #--------------------------------------------------------------------------
  133.   def add_choices(params, i, d = 0)
  134.     params[0].each_with_index {|s, n| $game_message.choices[n + d] = s }
  135.     $game_message.choice_cancel_type = params[1] + d if params[1] > 0
  136.     indent = @list[i].indent
  137.     loop do
  138.       i += 1
  139.       if @list[i].indent == indent
  140.         case @list[i].code
  141.         when 402 # [**] の場合
  142.           get_help_texts(@list[i].parameters[0] + d, i + 1)
  143.         when 404 # 分岐終了
  144.           break
  145.         end
  146.       end
  147.     end
  148.     i += 1
  149.     add_choices(@list[i].parameters, i, d + 5) if @list[i].code == 102
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ● ヘルプ用テキストの取得
  153.   #--------------------------------------------------------------------------
  154.   def get_help_texts(b, i)
  155.     if @list[i].code == 108 && @list[i].parameters[0] == WdTk::ChoiceEX::Help
  156.       $game_message.choice_help[b] = []
  157.       while @list[i + 1].code == 408
  158.         i += 1
  159.         $game_message.choice_help[b] << @list[i].parameters[0]
  160.       end
  161.     end
  162.   end
  163.   #--------------------------------------------------------------------------
  164.   # ◯ 注釈
  165.   #--------------------------------------------------------------------------
  166.   alias _wdtk_choice_command_108 command_108
  167.   def command_108
  168.     _wdtk_choice_command_108
  169.     @comments.each do |comment|
  170.       case comment
  171.       when /選択肢位置\((\d+),\s*(\d+),?\s*(\d*)\)/
  172.         $game_message.choice_x = $1.to_i
  173.         $game_message.choice_y = $2.to_i
  174.         $game_message.choice_row_max = ($3.empty? ? 99 : $3.to_i)
  175.       when /カーソル記憶\((\d+)\)/
  176.         $game_message.choice_var_id = $1.to_i
  177.       when /背景(ON|OFF)/
  178.         $game_message.choice_background = ($1 == "ON" ? 0 : 1)
  179.       end
  180.     end
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ☆ 分岐終了の場合
  184.   #--------------------------------------------------------------------------
  185.   def command_404
  186.     if next_event_code == 102
  187.       @branch[@indent] -= 5 if @branch.include?(@indent)
  188.       @index += 1
  189.       command_skip
  190.     end
  191.   end
  192. end

  193. #==============================================================================
  194. # ■ Window_ChoiceList
  195. #==============================================================================
  196. class Window_ChoiceList
  197.   #--------------------------------------------------------------------------
  198.   # ☆ 入力処理の開始
  199.   #--------------------------------------------------------------------------
  200.   def start
  201.     return unless close?
  202.     clear_command_list
  203.     make_command_list
  204.     if @list.empty?
  205.       $game_message.choice_proc.call(-1)
  206.       return
  207.     end
  208.     update_placement
  209.     refresh
  210.     select(0)
  211.     if ($game_message.choice_var_id)
  212.       select_ext($game_variables[$game_message.choice_var_id])
  213.     end
  214.     open
  215.     activate
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ☆ ウィンドウ位置の更新
  219.   #--------------------------------------------------------------------------
  220.   def update_placement
  221.     self.width = [max_choice_width + 12, 96].max + padding * 2
  222.     self.width = [width, Graphics.width].min
  223.     n = [@list.size, $game_message.choice_row_max].min
  224.     self.height = fitting_height(n)
  225.     self.x = Graphics.width - width
  226.     if @message_window.y >= Graphics.height / 2
  227.       self.y = @message_window.y - height
  228.     else
  229.       self.y = @message_window.y + @message_window.height
  230.     end
  231.     self.x = $game_message.choice_x if $game_message.choice_x
  232.     self.y = $game_message.choice_y if $game_message.choice_y
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # ☆ 選択肢の最大幅を取得
  236.   #--------------------------------------------------------------------------
  237.   def max_choice_width
  238.     @list.collect {|com| text_size(com[:name]).width }.max || 0
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ☆ コマンドリストの作成
  242.   #--------------------------------------------------------------------------
  243.   def make_command_list
  244.     $game_message.choices.each_with_index do |choice, i|
  245.       next unless choice
  246.       str = choice.dup
  247.       next if str.slice!(/\s*if\(([^\)]+)\)/i) && !choice_eval($1)
  248.       enable = !str.slice!(/\s*en\(([^\)]+)\)/i) || choice_eval($1)
  249.       add_command(str, :choice, enable, i)
  250.     end
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ○ 項目の描画
  254.   #--------------------------------------------------------------------------
  255.   alias _wdtk_choice_draw_item draw_item
  256.   def draw_item(index)
  257.     @choice_enabled = command_enabled?(index)
  258.     _wdtk_choice_draw_item(index)
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # ● テキスト描画色の変更
  262.   #--------------------------------------------------------------------------
  263.   def change_color(color, enabled = true)
  264.     super(color, enabled && @choice_enabled)
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ☆ 決定ハンドラの呼び出し
  268.   #--------------------------------------------------------------------------
  269.   def call_ok_handler
  270.     $game_message.choice_proc.call(current_ext)
  271.     close
  272.   end
  273.   #--------------------------------------------------------------------------
  274.   # ● キャンセルボタンが押されたときの処理
  275.   #--------------------------------------------------------------------------
  276.   def process_cancel
  277.     return super if $game_message.choice_cancel_type % 5 == 0
  278.     index = @list.index {|c| c[:ext] == $game_message.choice_cancel_type - 1 }
  279.     return unless index
  280.     return super if command_enabled?(index)
  281.     Sound.play_buzzer
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # ● ウィンドウを閉じる
  285.   #--------------------------------------------------------------------------
  286.   def close
  287.     @message_window.on_show_fast unless $game_message.choice_help.empty?
  288.     super
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ● ヘルプウィンドウ更新メソッドの呼び出し
  292.   #--------------------------------------------------------------------------
  293.   def call_update_help
  294.     update_help if active && !$game_message.choice_help.empty?
  295.   end
  296.   #--------------------------------------------------------------------------
  297.   # ● ヘルプウィンドウの更新
  298.   #--------------------------------------------------------------------------
  299.   def update_help
  300.     @message_window.force_clear
  301.     if $game_message.choice_help.include?(current_ext)
  302.       $game_message.texts.replace($game_message.choice_help[current_ext])
  303.     else
  304.       $game_message.texts.clear
  305.     end
  306.   end
  307.   #--------------------------------------------------------------------------
  308.   # ● 分岐用
  309.   #--------------------------------------------------------------------------
  310.   def choice_eval(formula)
  311.     s, v = $game_switches, $game_variables
  312.     begin
  313.       Kernel.eval(formula)
  314.     rescue
  315.       msgbox "以下の条件判定でエラーが出ました。\n\n", formula
  316.       true
  317.     end
  318.   end
  319.   #--------------------------------------------------------------------------
  320.   # ● フレーム更新
  321.   #--------------------------------------------------------------------------
  322.   def update
  323.     last_index = @index
  324.     super
  325.     if last_index != @index && $game_message.choice_var_id > 0
  326.       $game_variables[$game_message.choice_var_id] = current_ext
  327.     end
  328.   end
  329. end

  330. #==============================================================================
  331. # ■ Window_Message
  332. #==============================================================================
  333. class Window_Message
  334.   #--------------------------------------------------------------------------
  335.   # ○ ウィンドウ背景の更新
  336.   #--------------------------------------------------------------------------
  337.   alias _wdtk_choice_update_background update_background
  338.   def update_background
  339.     _wdtk_choice_update_background
  340.     @choice_window.opacity = $game_message.choice_background == 0 ? 255 : 0
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ● 文章の標示を強制クリア
  344.   #--------------------------------------------------------------------------
  345.   def force_clear
  346.     @gold_window.close
  347.     @fiber = nil
  348.     close
  349.     if WdTk.include?(:MesEff)
  350.       @character_sprites.each do |sprite, params|
  351.         next if params.empty?
  352.         sprite.bitmap.clear
  353.         sprite.visible = false
  354.         params.clear
  355.       end
  356.     end
  357.   end
  358.   #--------------------------------------------------------------------------
  359.   # ● 文章を最後まで表示する
  360.   #--------------------------------------------------------------------------
  361.   def on_show_fast
  362.     @show_fast = true
  363.   end
  364. end
复制代码
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
8064
在线时间
1862 小时
注册时间
2017-10-23
帖子
355
3
发表于 2018-2-14 13:12:25 | 只看该作者
本帖最后由 xiaohuangdi 于 2018-2-14 13:24 编辑

樓上的選項擴展是必備腳本, 學會使用你會打開新世界的大門。  所有變量條件都可以選擇  還是無限選項。

顯示選項
選項1:1級任務 if($game_actors[1].level >= 1)
結束
選項1:5級任務 if($game_actors[1].level >= 5)
結束
選項1:10級任務 if($game_actors[1].level >= 10)
結束
選項1:20級任務 if($game_actors[1].level >= 20)
結束
選項1:30級任務 if($game_actors[1].level >= 30)
結束
選項1:40級任務 if($game_actors[1].level >= 40)
結束

点评

自主使用了$技能名字[X] != "X"这种操作也就是哈希表  发表于 2018-2-14 21:06
忘了,变量判定也是这样,长度不足  发表于 2018-2-14 20:52
10个技能难道用10个变量吗?  发表于 2018-2-14 20:47
先用一個變量判定是否學會技能,然後選項裏if那個變量  发表于 2018-2-14 18:44
选项不够长怎么办 光 ( 是 $game_actors[X]..skills.include?($data_skills[877]) )超过了限制  发表于 2018-2-14 16:54
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1345
在线时间
378 小时
注册时间
2015-6-16
帖子
571
4
 楼主| 发表于 2018-2-14 16:45:27 | 只看该作者
也就是说选项内容 条件对吗
内容A if什么什么
P1不太上了,有问题加个Q1286124843,不管是脚本还是游戏问题都可以来找我
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 15:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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