查看: 2595|回复: 2

[已经解决] VA 的選擇框 要如何在事件中使用腳本修改位置?!

[复制链接]
梦石
0
星屑
5256
在线时间
760 小时
注册时间
2009-1-21
回帖
236
发表于 2015-8-3 12:15:59 | 显示全部楼层 |阅读模式

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

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

×
RT
(我要問的是 VA的  順便 提及VX而已)

我目前有使用我自己改造的 吹出對話框
但是 使用選擇的時候 選擇框會跑到旁邊去

VA的選擇框
是預設 在 最右邊的  對吧

那要如何修改  位置  到 中間 OR 自己想要的位置呢?!
可以改成 像是 VX 那樣 直接預設在對話框內選擇嗎?



而我看 VX 好像 有 腳本可以呼叫
在要選擇之前
他會先呼叫
  1. $game_message.xywh.set(144, 80, 352, 110)
复制代码
讓他 移動到中間顯示

選擇完之後 會再呼叫
  1. $game_message.xywh.set(0, 0, 32, 32)
复制代码
讓他恢復 成原本的預設的選擇框

下面是 VX的 預覽圖
%%%.png

上面是 使用腳本修改後
下面則是原本預設的樣子
他可以藉由
  1. $game_message.xywh.set
复制代码
去隨意調整位置


而這個是他使用的腳本
但是 是VX的
搜尋了一下 找不到 RGSS3的版本

STR22Edit_MWEXT++/カスタマイズセクション v2.0#==============================================================================
# ★RGSS2
# STR22Edit_MWEXT++/カスタマイズセクション v2.0 09/06/05
#
# ・メッセージウィンドウEXT++の設定プラグインです(ver2.0以降専用)。
#
#------------------------------------------------------------------------------
#
# 更新履歴
# ◇1.0→2.0
# STR22Core v2.0の仕様に合わせました。
# ★主な変更点
# ・問題が多かったバトルメッセージモード指定を廃止(v2.0では自動認識します!)
# ・スリムウィンドウ機能を廃止(STR25 v1.0で代用できます)
# ・その他、\MOVE、\FA \FAL \FLC、\VOを廃止
#
#==============================================================================
# ■ Window_Message
#==============================================================================
class Window_Message < Window_Selectable
  #-------------------------------------------------------------------------#
  # ★ 基本設定                                                             #
  #-------------------------------------------------------------------------#
  # 通常サイズ(X(0), Y(0), 幅, 高さ) (デフォ値:Rect.new(0, 0, 544, 128) )
  WINDOW_RECT  = Rect.new(0, 0, 640, 128)
  # フェードタイプ
  FADE_TYPE    = 1        # 0 = 縦に開閉(デフォルト) 1 = 透明度変化
  # ふきだしファイル名
  POPUP_FILE   = "Window_Popup" # 使用しない場合は""
#~   POPUP_FILE   = "" # 使用しない場合は""
  # ふきだしタイプ参照先変数
  POPUP_TYPE_V = 12       # ◆指定した変数の値でポップアップのパターンが
                          #  決定されます。
  POPUP_MIRROR = true     # ふきだしをキャラ位置に応じて左右反転
  POPUP_LR     = 0        # ふきだしグラフィックの向き
                          # 0 = 左 1 = 右
  # ネームウィンドウ
  N_WINDOW_FN  = "UmePlus Gothic" # フォント (デフォ値:"UmePlus Gothic")
  N_WINDOW_FS  = 16       # フォントサイズ (デフォ値:16)
  N_WINDOW_ED  = true     # 縁取り (デフォ値:true)
  N_WINDOW_CO  = Color.new(255,255,255) # 通常カラー
  N_WINDOW_CE  = Color.new( 64, 32,128) # 縁取りカラー
  N_WINDOW_WH  = [10, 8]  # 幅,高さ修正[幅, 高さ] (デフォ値:[10, 8])
#~   N_WINDOW_XY  = [0,-14]  # XY座標修正[X, Y]      (デフォ値:[0,-14])
  N_WINDOW_XY  = [4,4]  # XY座標修正[X, Y]      (デフォ値:[0,-14])
  N_WINDOW_OPC = 100      # 不透明度(通常ウィンドウに対しての%)
  N_WINDOW_IX  = true     # 顔グラフィックを左側に表示した時、
                          # ネームウィンドウの位置を文章に合わせる
  N_WINDOW_1V  = true     # "背景を暗くする"の時、ネームウィンドウを
                          # 透明にする
  # ポーズサイン位置
  P_WINDOW     = 1        # ポーズサイン位置 0 = 中央下 1 = 右下 2 = 文末
  P_WINDOW_XY  = [-20,-12]# XY座標修正[X, Y]
  # 顔グラフィック
  FACE_SIZE    = [96, 96] # サイズ[幅, 高さ]
#~   FACE_SIZE    = [144, 160] # サイズ[幅, 高さ]
#~   FACE_XY      = [-5, -28]   # XY座標修正[X, Y]
  FACE_XY      = [0, 0]   # XY座標修正[X, Y]
  FACE_Y       = 1        # 縦位置 0 = 上 1 = 中央 2 = 下
  FACE_SPACE   = 8        # 顔グラと文章間のスペース
  # メッセージバック
  MESBACK_VA   = 13       # ◆指定した変数の値でメッセージバックが
                          #  決定されます。
  # メッセージバックリスト定義(指定した変数の値に対応するファイル名)
  #   対応する値 => "ファイル名",
  MESBACK_LIST = {0 => "MessageBack", # デフォルト
                  1 => "Window_ext",
                  2 => "",
                  }
  #-------------------------------------------------------------------------#
  # ★ フォント                                                             #
  #-------------------------------------------------------------------------#
  # 基本
  DEFAULT_SIZE = 16       # デフォルトの文字サイズ (デフォ値:20)
  WLH          = 18       # 行間 (デフォ値:24)
  ALIGN        = 0        # 文字揃え 0 = 左 1 = 中央 2 = 右 (デフォ値:0)
  # フォントリスト定義(\F[n]で指定するフォントです)
  FONTLIST = {0 => "UmePlus Gothic",  # ■デフォルトのフォント
              1 => "MS Pゴシック", # XPデフォルト
              2 => "MS P明朝",     # 渋い
              3 => "Arial",           # XPタイマーフォント
              4 => "Arial Black",     # XPダメージポップフォント
              }
  # 縁取りカラーリスト定義(\CE[n]で指定するカラーです)
  EDGE_COLOR = {0 => Color.new( 64, 32,128),   # 青
                1 => Color.new(128, 32, 32),   # 赤
                2 => Color.new( 96, 96, 32),   # 黄
                3 => Color.new( 32, 32, 32),   # 黒
                4 => Color.new(64,32,128,128), # うっすらブルー
                }
  #-------------------------------------------------------------------------#
  # ★ タイピングSE                                                         #
  #-------------------------------------------------------------------------#
  # タイピングSEリスト定義 MESSE_VNUMで指定した変数の値のSEを再生します。
  #  対応する値 => SE 情報
  MESSAGE_SE = {0 => RPG::SE.new("Open1", 60, 150), # カチャチャ
                1 => RPG::SE.new("", 80, 150),      # 無音
                }
  # 基本設定
  MESSE      = false   # タイピングSEを有効にするかどうか(ture/false)
  MESSE_WAIT = 2       # タイピングSEの通常再生間隔 0 で最速
  MESSE_VNUM = 10      # ◆再生するSE番号の参照元変数(ID)
                       #  指定した変数の値で再生するSEが決定されます
  MESSE_VWAI = 11      # ◆タイピングSEの再生間隔の強制指定に参照する変数(ID)
                       #  指定した変数の値が 1 以上の時、再生間隔を
                       #  その値に強制指定します
  #-------------------------------------------------------------------------#
  # ★ スキップ                                                             #
  #-------------------------------------------------------------------------#
  # 基本
  FAST_B = Input::B    # メッセージニ倍速ボタン
  F_AUTO = false       # メッセージニ倍速を標準スピードに
  SKIP_B = Input::A    # メッセージスキップボタン
  F_WAIT = 0           # 文章終了時のウェイト VXデフォルトの値は 10
  # 完全スキップ無効化スイッチID
  PSID = 9             # ◆ここで指定したスイッチがONの時、Cボタン押下を含めた
                       #  全てのメッセージスキップ機能が無効になります
  # スキップ無効化スイッチID
  SSID = 10            # ◆ここで指定したスイッチがONの時、
                       #  メッセージスキップ機能が無効になります
  # ニ倍速無効化スイッチID
  FSID = 11            # ◆ここで指定したスイッチがONの時、
                       #  メッセージニ倍速流し機能が無効になります
  #-------------------------------------------------------------------------#
  # ★ 拡張設定                                                             #
  #-------------------------------------------------------------------------#
  # マクロ定義 \M[n]で置き換えるテキストです。
  # 制御文字の "\" は "\\" と入力する必要があります。
  MACRO = { 0 => "",
            1 => "\\p[-1]\\ce[1]\\e◆\\n[1]\\c[0]",#主人公
            2 => "\\p[0]\\ce[0]\\e◆\\n[2]\\c[0]",#傭兵ユーミル
            3 => "\\p[0]\\ce[1]\\e◆\\n[3]\\c[0]",#傭兵サマンサ         
            4 => "\\p[0]\\ce[0]\\e◆\\n[4]\\c[0]",#傭兵アモス
            5 => "\\p[0]\\ce[1]\\e◆", #女性名初め
            6 => "\\p[0]\\ce[0]\\e◆", #男性名初め
            7 => "\\c[0]\\e", #名前終わり
            8 => "\\sh[6,20,45]", #シェイク大
            9 => "\\sh[1,29,16]", #シェイク小
            10 => "カーラガナ",
            11 => "ポカホ村",
            12 => "カラッパ遺跡",
            13 => "ハリー",
            14 => "ベーコン",
            15 => "ルゥ",
            16 => "アリサ",
            17 => "ラグザ",
            18 => "アベル",
            19 => "\\ce[1]\\e◆", #女性名初めPOPなし
            20 => "\\ce[0]\\e◆"#男性名初めPOPなし
            }
  # オートネームウィンドウ定義 "Actor[n]"と書くことでn番のアクターの名前に設定可
  # "ファイル名 + _ + フェイスインデックス" => "なまえ",
  # フェイスインデックスの  0123
  # 割り当て図 →      4567
  A_N_WINDOW = {
#~   A_N_WINDOW = {"Actor1_0" => "ラルフ",
#~                 "Actor1_3" => "ウルリカ",
#~                 "Actor2_2" => "ベネット",
#~                 "Actor2_5" => "イルヴァ",
#~                 "Actor1_4" => "Actor[5]",
#~                 "Evil_4"   => "Actor[6]",
#~                 "Actor3_1" => "Actor[7]",
#~                 "Actor3_2" => "Actor[8]",
                }
  #-------------------------------------------------------------------------#
  # ★ システムパラメータ ※変更注意                               #
  #-------------------------------------------------------------------------#
  STR22000 =  5          # 斜体文字幅補正
  STR22001 =  8          # 太字文字幅補正
  STR22002 =  4          # イタリックによるウィンドウ幅補正
  STR22007 =  4          # 打ち消し線/下線の透明度補正
  STR22008 =  4          # ルビのサイズ補正 値が大きいほどサイズが小さくなる
  STR22009 = 24          # アイコンのサイズ(24)
  STR22010 =  8          # ポーズサインのアニメーションスピード
  STR22011 = 48          # メッセージの透明フェードイン/アウトのスピード(48)
  STR22101 = true        # メッセージ開始時にフレームリセットを行うか
  STR22900 = [640,480]   # ゲーム解像度
end
#==============================================================================
# ★ STR22_メッセージウィンドウEXT++ マニュアル
#  一通り目を通しておくことをお勧めします。
#  あと、ここに書いてない機能や仕様があったりして・・・(汗)
#==============================================================================
#
# ◇素材規格
#
# □ふきだし(/Graphics/Systemフォルダ)
#  ウィンドウのフレーム部分にかぶせて、
#  ふきだしのように見せるためのグラフィック。
#
#   幅 = 32 + 32
#  高さ = 64 * 任意のふきだしパターン数
#
#  1パターンの64*64内にふきだし上下のグラフィックを収めます。
#  左32*64に下向きのふきだし、右32*64に上向きのふきだしを、
#  ウィンドウの枠部分と重ねて、違和感がないように配置します。
#
#  サンプルのふきだしグラフィックを見ていただくのが
#  一番分かりやすいと思われます。
#
#  ※ふきだしパターンは上から01234...と順番に割り当てられます。
#   この割り当ては変数でパターン指定する際の対応する値となります。
#
#------------------------------------------------------------------------------
#
# ★追加制御文字 アルファベットは小文字で入力しても可
#
# \* \xxxxx :解説
#
# \  = [カッコ内]には、\N、\V等の制御文字が使用できます。
#  * = テキストが改行されると情報が初期化されます。
#
# ◇エクステンド--------------------------------------------------------◇
#
# \ \M[n]  □テキスト置き換え(マクロ)。
#       設定箇所で定義したリストの n 番のテキストに置き換えます。
#       使い方次第で、様々な文章打ち込みの作業を
#       大幅に簡略化することが可能です。
# \ \P[n]  □キャラクターにポップアップ。
#       n 番のイベントにポップアップ+自動リサイズします。
#       0 で実行元のイベント、-1 でプレイヤーにポップアップします。
#       また、同時にふきだし設定(\PP[n])を行います。
# \  \PP[n] □ふきだしを n 番のイベントに位置指定します。
#       0 で実行元のイベント、-1 でプレイヤー、-2 で非表示に。
#       通常メッセージでふきだしを表示させる場合や
#       逆に、ポップアップのふきだしを非表示にする時に使います。
# \  \NA[t] □ネームウィンドウ表示。t に任意の文字列。
#       例:\NA[ラルフ] ラルフを表示
#         \NA[\N[1]] 1番のアクターの名前を表示
#       また、\NA[] と、何も書かずに制御文字を入れると
#       ネームウィンドウは非表示になります。
#       この機能は、オートネームウィンドウ(後述)による表示を
#       無効にしたい場合に使用します。
#  \NEXT  □文章/選択肢の連続表示。
#       行数拡張(後述)で指定した、最大行数を超えない範囲で
#       メッセージをまとめて表示します。
#       行数拡張の項目も合わせてご覧ください。
# \  \SH[p,s,d]
#      □メッセージウィンドウのシェイク。
#       p に強さ、s にスピード、d に時間(1/60sec)を指定します。
#       シェイクの仕様はイベントコマンドで行える
#       "画面のシェイク"と同じです。
#       例:\sh[6,20,60]うおおお! → 1秒速シェイク
#
# ◇キャラ操作----------------------------------------------------------◇
#
# \ \A[n,m] □キャラクターにアニメーション。
#       n 番のイベントに m 番のアニメーションを再生します。
#       n を 0 にすると実行元のイベント、-1 でプレイヤーに再生します。
# \ \U[n,m] □キャラクターにフキダシアイコン。
#       n 番のイベントに m に対応したフキダシアイコンを表示します。
#       n を 0 にすると実行元のイベント、-1 でプレイヤーに表示します。
#       m = 0:びっくり 1:はてな 2:音符 3:ハート 4:怒り
#         5:汗 6:くしゃくしゃ 7:沈黙 8:電球 9:Zzz
#
# ◇ウェイトコントロール------------------------------------------------◇
#
#  \STOP  □マップ更新ストップ。
#       文章表示中、マップの更新(イベント移動など)が停止します。
# \ \S[n]  □文章スピード。値が大きいほどスピードが遅くなります。
#       n には 0 以上の整数を指定してください。
# \ \W[n]  □詳細ウェイト。n フレームのウェイトを掛けます。(1/60sec)
#
# ◇フェイス------------------------------------------------------------◇
#
#  \FR   □顔グラフィックの位置を右側に設定します。
#  \FM   □顔グラフィックを左右反転表示させます。
# \ \FC[n,m]□顔グラフィック変更。
#       n に"ファイル名"、m にフェイスインデックスを指定します。
#       顔グラフィックが指定されて無い場合は無効になります。
#       例:\fc[Actor2,2] → ベネットさん
#  \FCM  □リアルタイムに顔グラフィックを左右反転させます。
#       ギャグっぽい演出に使えそうですね。
#
# ◇置き換え/描画強化---------------------------------------------------◇
#
# \ \MAP  □現在のマップ名に置き換えます。
#       マップ名の # 以降の文字列は無視されます。
#       例:テストマップ#その1 → テストマップ
#       ※ # を2つ以上含んだマップ名の場合、うまく描画されません
# \ \IC[n] □アイコン。n番のインデックスのアイコンを描画します。
# \ \IN[n,m]□アイテム名。n の種類の m 番のアイテムの名前を描画します。
#       種類(n):0 = アイテム 1 = 武器 2 = 防具 3 = スキル
# \ \IT[n,m]□アイコン+アイテム名。nの種類のm番のアイテムを描画します
#       種類(n):0 = アイテム 1 = 武器 2 = 防具 3 = スキル
# \ \SPIX[n]□スペース。nピクセルの空白を挿入します。
#
# ◇フォント------------------------------------------------------------◇
#
# \ \R[t,r] □ルビ振り。t に通常の文字、r にルビ文字を指定します。
#       例:\r[野口英世,1000YEN]
# \* \AL[n] □文字揃え。その行の文字揃えを設定します。
#       n:0 = 左 1 = 中央 2 = 右
#       ○設定箇所でデフォルトの文字そろえを設定できます。
# \* \F[n]  □フォント。設定箇所で定義したリストの
#       n 番のフォントに設定します。
# \* \FS[n] □フォントサイズ。n のサイズに設定します。
#       n に D を入れると、デフォルトのフォントサイズに設定します。
#       \fs[d] この様に、d は小文字でも可。
#       ※小さすぎる値もしくは大きすぎる値を指定するとエラーがでます。
#        ご注意ください。
#  * \B   □太字モードON/OFF
#  * \I   □斜体モードON/OFF
#  * \E   □縁取りモードON/OFF(エッジ)
# \ \CE[n] □縁取りカラー設定。設定箇所で定義したリストの
#       n 番のカラーに設定します。
# * \UND  □アンダーライン(_)ON/OFF
# * \STR  □打ち消し線ON/OFF
#
# ◇スイッチ/変数操作---------------------------------------------------◇
#
# \ \SW[i,f]□スイッチ操作。i に操作するスイッチID、
#       fにON,OFF,RV(ON/OFF/反転)のいずれかを指定します。
#       例:\sw[\v[128],rv] → 変数128番の値のスイッチを反転
# \ \VA[i,n]□変数代入。i に操作する変数ID、n に代入する値を指定します。
#       例:\va[256,-512] → 変数256番に-512を代入
#       ※あくまで補助的な制御文字なので、
#        代入以外の操作は行えません。また、少数の代入も非サポートです。
#
#------------------------------------------------------------------------------
#
# ★その他の機能
#
#
# □行数拡張
# イベントコマンド等のスクリプトで、以下のスクリプトを実行すると
# メッセージの最大行数を拡張することができます。
#
# $game_message.maxlineex = line
#
# line に最大行数を指定します。初期値は 4、推奨値は 4 の倍数です。
# 5 以上に指定した時、\NEXTの制御文字を含めた文章コマンドを並べることで、
# 五行以上のメッセージを流すことが可能です。
# 長い説明(プレイングマニュアル等)に便利。
# ・選択肢も同様に拡張できます。キャンセル時の挙動は、
#  一番最後に組み込まれた選択肢コマンドの設定が適用されます。
#
# □ウィンドウ位置/サイズ強制指定
# イベントコマンド等のスクリプトで、以下のスクリプトを実行すると
# ウィンドウ位置とサイズを強制指定することが出来ます。
#
# $game_message.xywh.set(240, 176, 64, 64)
#
# 括弧には(X座標, Y座標, 幅, 高さ)の順に数値を指定します。
# 初期値は(0, 0, 32, 32)です。幅と高さのどちらかが33未満の場合、
# 位置/サイズ強制指定は無効になります。
#
# □オートネームウィンドウ
# 設定箇所で定義した顔グラフィックが指定された場合、
# 自動でネームウィンドウを表示します。
# この機能によるネームウィンドウ表示をさせたくない時は、
# \NA[]とメッセージに記入してください。
#
# □メッセージ二倍速流し/高速メッセージスキップ
# 設定箇所で指定したボタンが押されている間、
# メッセージを高速でスキップします。
# 設定箇所で指定したスイッチをONにする事で
# 機能を無効にすることが可能です。
#
# □タイピングSE
# メッセージ描画時に効果音を鳴らせるようになります。
# 設定箇所で複数設定する事ができ、変数を使って鳴らす音を
# 変更する事が可能です。
#
# □ポーズサイン位置変更
# ポーズサインの位置をある程度変更出来るようになります。
# (デフォルトのポーズサイン位置は下中央)
# 
# □顔グラフィックサイズ変更
# 顔グラフィック一枚あたりのサイズを変更する事が出来ます。
# 
# □フェードタイプ変更
# 通常の縦開閉タイプに加え、透明度を変化させるタイプの
# フェードイン/アウトに設定する事ができます。
#
# □おまけ機能
# ・ウィンドウを自動で画面範囲内に収める機能の有効/無効を切り替えられます。
#  イベントコマンド等のスクリプトで、以下のどちらかのスクリプトを実行
#  $game_message.unlock = true  # 収めない
#  $game_message.unlock = false # 収める(初期値)
#
# ・\P[0]によるウィンドウポップの自動位置指定の有効/無効を切り替えられます。
#  イベントコマンド等のスクリプトで、以下のどちらかのスクリプトを実行
#  $game_message.pos_autoset = true  # 有効(初期値)
#  $game_message.pos_autoset = false # 無効
#==============================================================================


============================================

算是個很久之前的問題
但是 扔然沒有找到解決方法
所以又再問了一次_(:з」∠)_

主要還是詢問有沒有辦法 把 選擇框改道 吹出的對話 裡面去
或者是 有沒有向這個VX腳本的使用方法
事件中呼叫腳本 ,調整對話的位置、大小之類的

還請幫個忙囉
謝謝ヾ(゚∇ ゚)ノ
梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2015-8-3 16:16:27 | 显示全部楼层
Pop Message+クラシック選択肢
Image001.png
Image003.png
Image002.png

评分

参与人数 1星屑 +10 收起 理由
御之嵐 + 10 超過兩個它就會跑出對話框了,但是還是感謝.

查看全部评分

回复

使用道具 举报

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

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

发表于 2015-8-3 16:46:04 | 显示全部楼层
本帖最后由 百里_飞柳 于 2015-8-3 16:47 编辑

一个选项扩充功能脚本
在事件页中选项的前面一行添加注释:
選択肢位置(x, y[, row])
x,y表示显示的位置,选择框的左上为原点,row表示显示的行数,默认为4,可以省略。
还有选项出现条件:
if表示当后面的条件满足时出现该选项,en表示当条件满足时才可以选择,否则显示半透明禁止选择。
[pre lang="ruby"]=begin

▼ 選択肢拡張 ver. 2.3

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

制作 : 木星ペンギン
URL  : http://woodpenguin.blog.fc2.com/

------------------------------------------------------------------------------
概要

□ 選択肢を連続して設定した場合、つなげて一つの選択肢にする機能の追加。
□ 条件を設定することで、その項目を表示しない機能の追加。
□ 選択肢内容が前回と同じだった場合、
    カーソルの初期位置を前回選んだ項目にする機能の追加。
□ 選択肢ウィンドウの位置を一時的に変更する機能の追加。
□ 条件を設定することで、その項目を半透明にして選択不可にする機能の追加。
□ 選択肢毎にヘルプメッセージを表示できる機能の追加。

------------------------------------------------------------------------------
使い方

□ 選択肢の表示を続けて配置すると、一つの選択肢にまとめられます。
  ・「キャンセルの場合」の処理は、無効以外を設定したものが適用され、
     複数ある場合は後に設定された選択肢のものが適用されます。
  
□ 選択肢の文章中に if(条件) と入れ、その条件が偽になると項目が表示されなくなります。
  ・s でスイッチ、v で変数を参照できます。
  ・「キャンセルの場合」の項目が表示されない場合、無効と同じ処理をします。

□ 注釈に以下の文字列を入れることで、選択肢ウィンドウの表示位置を
   一時的に変更することが出来ます。
  
    選択肢位置(x, y[, row])
   
      x   : ウィンドウを表示する X 座標。
      y   : ウィンドウを表示する Y 座標。
      row : 選択肢を表示する最大行数。
            指定しない場合は、通常の最大行数を無視して
            すべての選択肢が表示されます。
  
□ 選択肢の文章中に en(条件) と入れ、その条件が偽になると項目が半透明で表示されます。
  
□ 各項目の下に、注釈で以下の文字列を入れると、続きの文章を
    項目のヘルプメッセージとしてカーソルを合わせたときに標示することができます。
  
    選択肢ヘルプ
   
□ 詳細は下記のサイトを参照してください。

  http://woodpenguin.web.fc2.com/rgss3/choice_ex.html
  
=end
module WdTk
module ChoiceEX
#//////////////////////////////////////////////////////////////////////////////
#
# 設定項目
#
#//////////////////////////////////////////////////////////////////////////////
  #--------------------------------------------------------------------------
  # ● 選択肢の最大行数
  #     選択肢を表示するウィンドウの行数の最大数です。
  #     選択肢がこの数より小さければ、選択肢の数に合わせます。
  #--------------------------------------------------------------------------
  RowMax = 4

  #--------------------------------------------------------------------------
  # ● 選択肢の位置記憶
  #     前回表示した選択肢と全く同じ内容の選択肢を表示する場合、
  #     カーソルの初期位置を前回選んだ項目にする機能です。
  #     false で無効化できます。
  #--------------------------------------------------------------------------
  Store = true

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

end

#//////////////////////////////////////////////////////////////////////////////
#
# 以降、変更する必要なし
#
#//////////////////////////////////////////////////////////////////////////////

  @material ||= []
  @material << :ChoiceEX
  def self.include?(sym)
    @material.include?(sym)
  end

end

#==============================================================================
# ■ Game_Message
#------------------------------------------------------------------------------
#  文章や選択肢などを表示するメッセージウィンドウの状態を扱うクラスです。この
# クラスのインスタンスは $game_message で参照されます。
#==============================================================================

class Game_Message
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :choice_x                 # 選択肢ウィンドウの表示 X 座標
  attr_accessor :choice_y                 # 選択肢ウィンドウの表示 Y 座標
  attr_accessor :choice_row_max           # 選択肢ウィンドウの表示行数
  attr_accessor :choice_enables           # 選択肢の有効状態
  attr_accessor :choice_help              # 選択肢のヘルプ
  #--------------------------------------------------------------------------
  # ○ クリア
  #--------------------------------------------------------------------------
  alias _wdtk_choice_clear clear
  def clear
    _wdtk_choice_clear
    @choice_x = @choice_y = nil
    @choice_row_max = WdTk::ChoiceEX::RowMax
    @choice_enables = []
    @choice_help = {}
  end
end

#==============================================================================
# ■ Game_Interpreter
#==============================================================================
class Game_Interpreter
  #--------------------------------------------------------------------------
  # ☆ 選択肢のセットアップ
  #--------------------------------------------------------------------------
  def setup_choices(params)
    result = []
    add_choices(params, @index, result)
    $game_message.choice_enables = $game_message.choices.collect do |c|
      !c.slice!(/\s*en\(([^\)]+)\)/i) || choice_eval($1)
    end
    unless $game_message.choices.empty?
      m = result.index($game_message.choice_cancel_type - 1)
      $game_message.choice_enables << (!m || $game_message.choice_enables[m])
      result << $game_message.choice_cancel_type - 1
      $game_message.choice_proc = Proc.new {|n| @branch[@indent] = result[n] }
    else
      @branch[@indent] = -1
    end
  end
  #--------------------------------------------------------------------------
  # ● 選択肢の追加
  #--------------------------------------------------------------------------
  def add_choices(params, i, result, d = 0)
    params[0].each_with_index do |s, n|
      choice = s.dup
      next if choice.slice!(/\s*if\(([^\)]+)\)/i) && !choice_eval($1)
      $game_message.choices << choice
      result << n + d
    end
    if params[1] == 5 || (params[1] > 0 && result.include?(params[1] + d - 1))
      $game_message.choice_cancel_type = params[1] + d
    end
    indent = @list.indent
    loop do
      i += 1
      if @list.indent == indent
        case @list.code
        when 402 # [**] の場合
          m = result.index(@list.parameters[0] + d)
          get_help_texts(m, i + 1) if m
        when 404 # 分岐終了
          break
        end
      end
    end
    i += 1
    add_choices(@list.parameters, i, result, d + 5) if @list.code == 102
  end
  #--------------------------------------------------------------------------
  # ● 分岐用
  #--------------------------------------------------------------------------
  def choice_eval(formula)
    s, v = $game_switches, $game_variables
    begin
      Kernel.eval(formula)
    rescue
      msgbox "以下の条件判定でエラーが出ました。\n\n", formula
      true
    end
  end
  #--------------------------------------------------------------------------
  # ● ヘルプ用テキストの取得
  #--------------------------------------------------------------------------
  def get_help_texts(b, i)
    if @list.code == 108 && @list.parameters[0] == WdTk::ChoiceEX::Help
      $game_message.choice_help = []
      loop do
        i += 1
        break if @list.code != 408
        $game_message.choice_help << @list.parameters[0]
      end
    end
  end
  #--------------------------------------------------------------------------
  # ◯ 注釈
  #--------------------------------------------------------------------------
  alias _wdtk_choice_command_108 command_108
  def command_108
    _wdtk_choice_command_108
    @comments.each do |comment|
      if comment =~ /選択肢位置\((\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)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 分岐終了の場合
  #--------------------------------------------------------------------------
  def command_404
    if next_event_code == 102
      @branch[@indent] -= 5 if @branch.include?(@indent)
      @index += 1
      command_skip
#~     else
#~       @branch.delete(@indent)
    end
  end
end

#==============================================================================
# ■ Window_ChoiceList
#==============================================================================
class Window_ChoiceList
  #--------------------------------------------------------------------------
  # ☆ 入力処理の開始
  #--------------------------------------------------------------------------
  def start
    return unless close?
    last_choices = @list.collect {|c| c[:name] }
    update_placement
    refresh
    unless WdTk::ChoiceEX::Store && last_choices == $game_message.choices
      select(0)
    end
    open
    activate
  end
  #--------------------------------------------------------------------------
  # ○ ウィンドウ位置の更新
  #--------------------------------------------------------------------------
  alias _wdtk_choice_update_placement update_placement
  def update_placement
    _wdtk_choice_update_placement
    self.height = [height, fitting_height($game_message.choice_row_max)].min
    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
  end
  #--------------------------------------------------------------------------
  # ☆ コマンドリストの作成
  #--------------------------------------------------------------------------
  def make_command_list
    $game_message.choices.each_with_index do |choice, i|
      add_command(choice, :choice, $game_message.choice_enables)
    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 process_cancel
    if $game_message.choice_enables[item_max]
      super
    else
      Sound.play_buzzer
    end
  end
  #--------------------------------------------------------------------------
  # ☆ キャンセルハンドラの呼び出し
  #--------------------------------------------------------------------------
  def call_cancel_handler
    $game_message.choice_proc.call(item_max)
    close
  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?(index)
      $game_message.texts.replace($game_message.choice_help[index])
    else
      $game_message.texts.clear
    end
  end
end

#==============================================================================
# ■ Window_Message
#==============================================================================
class Window_Message
  #--------------------------------------------------------------------------
  # ● 文章の標示を強制クリア
  #--------------------------------------------------------------------------
  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
[/pre]

评分

参与人数 2星屑 +180 收起 理由
VIPArcher + 150 认可答案
御之嵐 + 30 謝謝 ヾ(゚∇ ゚)ノ

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部