*華和梨・自作関数集 [#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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS