華和梨・自作関数集 †

 

セーブ・ロード関数 †

  • 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
 

里々式・トークの重複呼び出し回避 †

#----------------------------------------------------------------------------
# $(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)];
);
 

リロード関数 &dagger;

#----------------------------------------------------------------------------
# $(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]);
);
 

里々ゴーストのセーブデータから値をゲット &dagger;

  • ゴーストフォルダが複数に分けられていると機能しません

汎用値をゲット &dagger;

=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
 

辞書フォルダをゲット &dagger;

  • 対象ゴーストの終了時の辞書フォルダ設定を得れば交代時のトークに幅が持たせられるかも知れない
=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
Last-modified: 2010-12-14 (火) 09:28:22 (3084d)