
2016:04:25 21:10 修正
----
里々のちょっとしたロジックを提供するコーナー。
全て、里々wikiとukadocの情報の組み合わせで作ります。
里々のサンプルゴースト「Rポストと狛犬」を書き換えて自ゴーストを作るくらいの知識が必要です。
今回は、全項目のリストを自動生成する機能を作成します。
以下のようなフッター付きのリストを、自動生成します。

また、リスト選択時の個別のトークの末尾に、自動的にリストに戻る選択肢がつきます。

少し処理が複雑なので、解説は長くなりすぎるためしません。
saoriのように、「そういう機能を使えるようになるスクリプト」として使ってください。
使い方は続きにあります。
----
里々のちょっとしたロジックを提供するコーナー。
全て、里々wikiとukadocの情報の組み合わせで作ります。
里々のサンプルゴースト「Rポストと狛犬」を書き換えて自ゴーストを作るくらいの知識が必要です。
今回は、全項目のリストを自動生成する機能を作成します。
以下のようなフッター付きのリストを、自動生成します。

また、リスト選択時の個別のトークの末尾に、自動的にリストに戻る選択肢がつきます。

少し処理が複雑なので、解説は長くなりすぎるためしません。
saoriのように、「そういう機能を使えるようになるスクリプト」として使ってください。
使い方は続きにあります。
準備
以下のファイルを里々の辞書ファイルの中においてください。
もし、ファイルが消えている場合、この記事末尾のスクリプトを新規テキストファイルにコピーし、「dic_editlist.txt」と名前を付けて保存してください。
辞書ファイル
使い方サンプル
以下のサンプルをコピーして書き換えてください。
#------------------------------------------------------------------------------
#サンプルここから
#メニュー表示などから呼び出す
*0つつかれ
_◯リスト表示
_◯別のリスト
#------------------------------------------------------------------------------
#リスト表示設定
#「リストイベントの名称」は、必ず先頭2文字が半角「On」で始まる名前にしてください。
*◯リスト表示
$リストイベントの名称=Onマイリスト1
(リスト表示開始)
#「0」なら本体バルーン、「1」なら相方バルーン、「2」なら3人目バルーン
@Onマイリスト1の表示スコープ
0
#リスト表示時の説明。@です。*ではないです。
#\nで改行、行末にφで次の行と合わせて1単語扱いにします。
#replace_after.txtでウェイト挿入している文字はφを入れてください。
#replace_after.txtでの置換が無効化されます。
@Onマイリスト1の説明
ここにφ…φ…説明などを書きます。φ
またφ、SAORI呼び出しでS0が出るようなもの\n例えばsplitなどを使わないでください。
#@にしないでください。*であっています。
#半角カンマや半角ダブルクオーテーション、replace_after.txtでの変換対象文字は使わないでください。
#それぞれ項目を表示したとき、バルーン1行に収まるようにしてください。
#改行は加味していないため、改行されるほど長い選択肢だと表示がおかしくなります。
*Onマイリスト1の一覧項目
◯リストテスト1
◯リストテスト2
◯リストテスト3
◯リストテスト4
◯リストテスト5
◯リストテスト6
◯リストテスト7
◯リストテスト8
◯リストテスト9
◯リストテスト10
◯リストテスト11
◯リストテスト12
◯リストテスト13
◯リストテスト14
◯リストテスト15
◯リストテスト16
#1ページに何項目表示するか。1項目1行。
@Onマイリスト1の一覧表示項目数
6
#フッターの表示位置。上からどのくらいのスペースを入れるか。
#100で上から1行改行した位置に表示。750で上から7行と半分改行した位置に表示。
@Onマイリスト1のフッター表示位置
950
#リスト初期表示時のページの設定です。
#「最初」で最初のページ、「最後」で最終ページを初期表示します。
@Onマイリスト1の初期表示ページ
最後
#フッターのページ操作で、最初のページに戻る選択肢の表示
@Onマイリスト1の一番最初へ
<<
#フッターのページ操作で、前ページに戻る選択肢の表示
@Onマイリスト1の前のページへ
<
#フッターのページ操作で、次ページに進む選択肢の表示
@Onマイリスト1の次のページへ
>
#フッターのページ操作で、最後のページに進む選択肢の表示
@Onマイリスト1の一番最後へ
>>
#フッターの選択肢で、閉じる選択肢の表示名
@Onマイリスト1の閉じる名
◯閉じる
#項目選択時、リストに戻る選択肢の表示名
@Onマイリスト1のリストに戻る名
◯リストに戻る
#リストを閉じた時に呼ばれるトーク
*Onマイリスト1の閉じセリフ
:おしまい。
#選択肢をクリックした時に呼ばれるトーク
*Onマイリスト1の◯リストテスト1
:「◯リストテスト1」が選択された。
*Onマイリスト1の◯リストテスト2
:「◯リストテスト2」が選択された。
*Onマイリスト1の◯リストテスト3
:「◯リストテスト3」が選択された。
*Onマイリスト1の◯リストテスト4
:「◯リストテスト4」が選択された。
*Onマイリスト1の◯リストテスト5
:「◯リストテスト5」が選択された。
*Onマイリスト1の◯リストテスト6
:「◯リストテスト6」が選択された。
*Onマイリスト1の◯リストテスト7
:「◯リストテスト7」が選択された。
*Onマイリスト1の◯リストテスト8
:「◯リストテスト8」が選択された。
*Onマイリスト1の◯リストテスト9
:「◯リストテスト9」が選択された。
*Onマイリスト1の◯リストテスト10
:「◯リストテスト10」が選択された。
*Onマイリスト1の◯リストテスト11
:「◯リストテスト11」が選択された。
*Onマイリスト1の◯リストテスト12
:「◯リストテスト12」が選択された。
*Onマイリスト1の◯リストテスト13
:「◯リストテスト13」が選択された。
*Onマイリスト1の◯リストテスト14
:「◯リストテスト14」が選択された。
*Onマイリスト1の◯リストテスト15
:「◯リストテスト15」が選択された。
*Onマイリスト1の◯リストテスト16
:「◯リストテスト16」が選択された。
#------------------------------------------------------------------------------
#「$リストイベントの名称」の名前を変えると、別のリストと認識します。
#2つ以上のリストを生成出来ます。
*◯別のリスト
$リストイベントの名称=Onリストその2
(リスト表示開始)
@Onリストその2の表示スコープ
1
@Onリストその2の説明
リストその2
*Onリストその2の一覧項目
△1
△2
△3
△4
△5
@Onリストその2の一覧表示項目数
3
@Onリストその2のフッター表示位置
400
@Onリストその2の初期表示ページ
最初
@Onリストその2の一番最初へ
[最初]
@Onリストその2の前のページへ
[前]
@Onリストその2の次のページへ
[次]
@Onリストその2の一番最後へ
[最後]
@Onリストその2の閉じる名
[閉じる]
@Onリストその2のリストに戻る名
[リスト表示]
*Onリストその2の閉じセリフ
おわり。
*Onリストその2の△1
△1
*Onリストその2の△2
△2
*Onリストその2の△3
△3
*Onリストその2の△4
△4
*Onリストその2の△5
△5
#サンプルここまで
#------------------------------------------------------------------------------
さくらスクリプトを入れたい
推奨しませんが、以下のようにすると使えます。
(上の辞書ファイル先頭行にver記述があるもののみです。なければ古いので落としなおしてください)
選択肢やアンカーは入れないでください。
*Onさくらスクリプト入りリストの一覧項目
\f[color,red]△\f[color,default]
*Onさくらスクリプト入りリストの\f[color,red]△\f[color,default]
:赤色の三角形が押された。
リストからさらに選択肢を出したい
リスト内部のトークから選択肢を出すと、リストに戻る選択肢が出ません。
その場合、以下のように、(里々リスト個別フッター)と書いてください。
(ver201604252114から)
*Onリスト項目から選択肢リストの一覧項目
てすと
*Onリスト項目から選択肢リストのてすと
:テストです。
_てすと2
*てすと2
:項目からさらに選択肢を出しました。
(里々リスト個別フッター)
リスト化スクリプト
#------------------------------------------------------------------------------
#以下の処理は理解する必要はありません。
#リスト化機能は、この中身のスクリプトを理解せずとも問題なく使えます。
#
#例えば、satori.dllの中身のソースを知らずとも里々は使えるように、
#以下の処理を理解しなくても、リスト化機能は使えます。
#------------------------------------------------------------------------------
#処理部ここから
@リスト表示開始
(nop,
(set,自動挿入ウェイトバックアップ,(when,(変数「自動挿入ウェイトタイプ」の存在),(自動挿入ウェイトタイプ)))
(set,自動挿入ウェイトタイプ,無効)
(split(sprintf,%c,1)
(replace(sprintf,%c,1)
(erase(sprintf,%c,1)((リストイベントの名称)の一覧項目)(sprintf,%c,1)\1)(sprintf,%c,1)
\n(sprintf,%c,1)
(sprintf,%c,2)
)(sprintf,%c,1)
(sprintf,%c,2)(sprintf,%c,1)
0(sprintf,%c,1)#要素数。0で無制限分割
0#空要素の分割。0で空要素は削除される
)
(set,里々リストページ数,(calc,((Sの数) - 1) / ((リストイベントの名称)の一覧表示項目数) + 1))
(when,(里々リストページ数) < 1,(set,里々リストページ数,1))
)\![embed,OnDisplaySatoriList,(when,((リストイベントの名称)の初期表示ページ) == 最後,(里々リストページ数),1)]
@OnDisplaySatoriList
\t\*\_q\p[((リストイベントの名称)の表示スコープ)]φ
((リストイベントの名称)の説明)\nφ
(里々リスト処理一覧ページ)\_l[0,0](when,((リストイベントの名称)のフッター表示位置) > 0,\n[((リストイベントの名称)のフッター表示位置)])(里々リスト処理一覧フッター)\_q
@里々リスト処理一覧ページ
\p[((リストイベントの名称)の表示スコープ)](for,((R0) - 1) * ((リストイベントの名称)の一覧表示項目数),(R0) * ((リストイベントの名称)の一覧表示項目数) - 1,1,
\__q[OnChoiceSatoriList,"(S(C0))",(R0)](S(C0))\__q
(when,(C0) != (R0) * ((リストイベントの名称)の一覧表示項目数) - 1,\n)
)
@里々リスト処理一覧フッター
\__q[OnDisplaySatoriList,1]((リストイベントの名称)の一番最初へ)\__qφ
\__q[OnDisplaySatoriList,(when,(R0) <= 1,(里々リストページ数),(calc,(R0) - 1))]((リストイベントの名称)の前のページへ)\__qφ
(sprintf,%(length,(里々リストページ数))d,(R0)) / (sprintf,%(length,(里々リストページ数))d,(里々リストページ数)) φ
\__q[OnDisplaySatoriList,(when,(R0) >= (里々リストページ数),1,(calc,(R0) + 1))]((リストイベントの名称)の次のページへ)\__qφ
\__q[OnDisplaySatoriList,(里々リストページ数)]((リストイベントの名称)の一番最後へ)\__qφ
\__q[OnEndDisplaySatoriList]((リストイベントの名称)の閉じる名)\__q
@OnChoiceSatoriList
((リストイベントの名称)の(R0))(set,里々リストの選択ページ保存,(R1))(OnChoiceSatoriListUnitFooter)
@里々リスト個別フッター
\![embed,OnChoiceUnitFooter,1,(里々リストの選択ページ保存)]
@OnChoiceSatoriListUnitFooter
\t\*\_q\__q[OnDisplaySatoriList,(R1)]((リストイベントの名称)のリストに戻る名)\__q\__q[OnEndDisplaySatoriList]((リストイベントの名称)の閉じる名)\__q\_q
@OnEndDisplaySatoriList
((リストイベントの名称)の閉じセリフ)(里々リスト終了処理)
@里々リスト終了処理
(nop,
(set,自動挿入ウェイトタイプ,
(when,(変数「自動挿入ウェイトタイプバックアップ」の存在),(自動挿入ウェイトタイプバックアップ))
)
(set,里々リストイベントの名称,)
(set,里々リストページ数,)
(set,里々リストの選択ページ保存,)
(set,自動挿入ウェイトタイプバックアップ,)
)
#処理部ここまで
#------------------------------------------------------------------------------


