*華和梨・自作関数集 [#s6eb2544] #contents #br **セーブ・ロード関数 [#td2d384d] -SSPのキャッシュ機能など、重複ロードによるセーブファイル肥大化への事前対策 -exsaveは単純にセーブするだけ -exloadは読み込む対象のエントリを先に掃除してから読み込む。ダブり対策 -2009/05/17 exloadが上手く働いていなかったのを修正 -2009/12/23 短縮 =kis # $(exsave 保存したいエントリの名前を列挙したエントリ ファイル名) # $(exload ロードするエントリ名を列挙したエントリ名 ファイル名) # # SaveEntriesに書いたエントリ名を全部セーブorロードする。 # exloadはSaveEntriesに書いたエントリ名の中身を全てクリアしてからロードする。 # # 実装例 # OnClose : $(exsave SaveEntries savefile.txt)${終了トーク}\e # OnBoot : $(exload SaveEntries savefile.txt)$(inc 起動回数)${起動トーク}\e # SaveEntries : 起動回数, TalkInterval, 見切れ, 重なり, flag # # 使うタイミング # exsaveはOnClose、OnGhostChanging、OnUpdateBegin。万全を期すなら最小化時も。 # exloadはOnBoot、OnGhostChanged、OnUpdateComplete。実装するならOnGhostCalledも。 function exsave $( if $[ $(size @arg) != 3 ] $(return "false"); xargs $@arg[1] save $@arg[2]; return ""; ); function exload $( if $[ $(size @arg) != 3 ] $(return "false"); set @a $@arg[1]; set @b 0; loop $(size ${@a}) $(clear $${@a}[${@b}] ; inc @b ); load $@arg[2]; return ""; ); =end #br **里々式・トークの重複呼び出し回避 [#scf03be7] #---------------------------------------------------------------------------- # $(talk <エントリ名>) #---------------------------------------------------------------------------- # 里々で実装されている、「全てのトークが出るまで同じトークは出ない」を # 実現する関数。これを使うと、エントリ名で指定されたエントリをチェックして # 重複回避しつつエントリを呼び出します。 # チェック用の変数として${エントリ名_temp}というエントリを作成。 #---------------------------------------------------------------------------- # 実装例 # sentence : $(talk ランダムトーク) # ランダムトーク : \0あ!\e # ランダムトーク : \0い!\e #---------------------------------------------------------------------------- function talk $( if $[ $(size @arg) != 2 ] $(return "false"); if $[ ${$@arg[1]_temp} == $(NULL) ] $( clear $@arg[1]_temp; set @a 0; loop $(size $@arg[1]) $( insert $@arg[1]_temp[$(rand $[1+$(size $@arg[1]_temp)])] ${@a}; inc @a; ); ); return $$@arg[1][$(shift $@arg[1]_temp)]; ); #br **リロード関数 [#n4605398] #---------------------------------------------------------------------------- # $(reload <エントリ名>) #---------------------------------------------------------------------------- # 華和梨用の辞書リロード。 # 要するに全エントリをクリアしてから kawarirc.kis を読み込み直すだけ。 # よって descript.txt やシェルはリロードされない。 # セーブデータの再読み込みを栞イベント中で別途行っている場合、この関数の後に # 読み込ませれば大丈夫。 # # <エントリ名> はリロード完了後に呼ぶエントリ。ここで完了トークをさせられる。 # 省略可。というかあんまり使わない。 #---------------------------------------------------------------------------- # 実装例1 # sentence : $(reload)${セーブデータの読み込み}\e # # 実装例2 # sentence : $(reload リロード完了トーク) # リロード完了トーク : \0リロードしました。\e #---------------------------------------------------------------------------- function reload $( if $[ $(size @arg) > 2 ] $(return "false"); listtree @cls .; set @a 0; loop $(size @cls) $( clear $@cls[${@a}]; inc @a; ); load kawarirc.kis; return $(entry $@arg[1]); ); #br *里々ゴーストのセーブデータから値をゲット [#p15599f6] -ゴーストフォルダが複数に分けられていると機能しません **汎用値をゲット [#ac5faef0] =kis # $(satori_svget ディレクトリ名 欲しい値) # # 例 $(satori_svget "Iron_Dream" "$起動回数") # ゴースト「鉄の夢」のセーブデータから$起動回数の値を得る。 function satori_svget $( if $[ $(size @arg) != 3 ] $(return "false"); setstr @a $@arg[1]; textload @b ..\..\..\${@a}\ghost\master\satori_savedata.txt; set @i 0 ; loop $(size @b) $(split @c $@b[${@i}] " " ; inc @i); return $@c[$[ $(find @c $@arg[2]) + 1 ]]; ); =end #br **辞書フォルダをゲット [#y5aada6f] -対象ゴーストの終了時の辞書フォルダ設定を得れば交代時のトークに幅が持たせられるかも知れない =kis # $(satori_dictfget ディレクトリ名) # # 例 $(satori_dictfget "vanishing") # ゴースト「侵されざる黒」のセーブデータから$辞書フォルダの値を得る。 # 中身が初期フォルダ「.」の場合は空が返る。 function satori_dictfget $( if $[ $(size @arg) != 3 ] $(return "false"); setstr @a $@arg[1]; textload @b ..\..\..\${@a}\ghost\master\satori_savedata.txt; set @i 0 ; loop $(size @b) $(split @c $@b[${@i}] " " ; inc @i); setstr @d $@c[$[ $(find @c "$辞書フォルダ") + 1 ]]; if $[ ${@d} == "." ] $(return "") else $(return ${@d}); ); =end