get_file & list_in 軽量化 Ver 1.02 ★★★★★★★★

トップページやメイン画面に行く度に全てのユーザーデータを読み込む部分を、ストックファイルを作る事で軽量化しています。ユーザーデータへの必要以上のアクセスを減らし、ある程度の負荷軽減になると思われます。※参加者数が少ない場合や、NPCキャラが極端に多い場合には状況によっては逆効果となる場合もあります。 ※この 改造を取り入れる際には、併せて 【 改造者表示 】 の改造を取り入れて頂けると嬉しいです。(非強制) ※&getuser の二度読みを行いますので、併せて【 改造時データ保存 】の改造をお奨めします。

履歴
2010/08/25 WikiRにて公開
2007/03/04 Wikiにて公開    
2003/09/03 Version 1.02 細かなバグ修正 
2003/07/17 Version 1.01 探索周りの致命的バグ修正 
2003/07/13 Version 1.00 公開   
この改造はユーザーデータを多く扱う為、改造時の危険度は高くなっています。
●作業開始前に、ユーザーデータをコピーし、万一に備えてください。
<B>●改造作業中、SOSは動作しないよう停止してください。
●作業開始前に、全ての改造ポイントに目を通し、どういった処理に変更しているのか理解してください。
●この改造については、原則として自力で理解できる方を対象としています。それ以外の方はこの改造はご遠慮下さい。
●この改造によって生じたいかなる障害・損害についても、当方では一切責任を取れません。改造を適用した時点で、この事をご理解・ご承諾戴いたものと致します。
この改造により、次の通り変更となります。
●ユーザーリストや販売リスト、ベストユーザーなどの表示は、最後にセーブした時の状態が反映されるようになります。

本家版改造ポイント

◆改造ポイント01 ユーザーデータの初期ストックファイルを作成します。

fileexterior_accsess.cgi<< ダウンロードしてお使い下さい。

1)1行目 perl pass 及び 35-40行目を修正して下さい(設定は sos2.cgi に併せてください)。 36行目が、新しく作るストックファイル名となります。
2)パーミッション 755 でサーバーにアップロードし、実行して下さい。
3)正常に動作し、ストックファイルの完成を確認したら、このプログラムはサーバーから削除して下さい。

◆改造ポイント02 ストックファイル名を設定します。

sos2.cgi # ---------- FILE PATH Line31

before:

$bitdat = './bit.dat'; # bit.datのパス 666(606)

after:

$bitdat = './bit.dat';	  # bit.datのパス 666(606)
$bitdat = './bit.dat';	  # bit.datのパス 666(606)
#-ADD-
$listin = './listin.cgi';	  # listin.dat のパス 666(606)
#-END of ADD- SION0009v1.02-2-1/14

◆改造ポイント03 ストックファイルを更新するルーチンを作ります。

sos2.cgi 任意の場所

次のルーチンを追加します。

#=======《 Sub List OUT 》===============================================#
sub list_out {
	$del_fg = 1 if (@_[0] eq 'del');
	&userout if (!$del_fg);
	&list_in;
	undef @newlines;
	$now = time - 7200;
	$del_check = time - $def_dl * 86400;
	foreach (0 .. $#lstlines) {
		($pid,$pnm,$pps,$pjb,$pig,$psp,$pbp,$pbn,$pak,$pdd,$php,$pxp,$pab,$pdb,
		$pav,$pwn,$plz,$pdt,$pmn,$pbg,$pxi,$ptm,$other) = split(/<>/,$lstlines[$_],23);
		if ($pid eq $id && $pnm eq $nm && $pps eq $ps) { next; }
		elsif ($now > $ptm && $pps eq $admpas) {
			@prclines = &get_partner("$pid");
			($php,$ptm) = &hprecover($php,$pxp,$psp,$pav,$ptm,$pfg);
			&partnerout;
			$getpartnerflag = 0;
			push(@newlines,$pline); }
		elsif ($del_check < $ptm || $pps eq $admpas) { push(@newlines,$lstlines[$_]); }
		else { unlink("$usrdir$id\.dat"); }
	}
	push(@newlines,$line) if (!$del_fg);
	@newlines = sort @newlines;
	&writedat($listin,@newlines);
}

※フラグ足しを行っている場合は、このルーチンも修正を行ってください。
このルーチンの動作:
1)ユーザーのデータを更新します。
2)NPCキャラ(パスワードが管理者パスワード)のデータが2時間以上過去の物であれば更新します。
3)ユーザーデータ削除期限を越えているユーザーを削除します。この際、ユーザーデータも削除します。
4)それ以外のユーザーは、既存のデータのまま保存します。

◆改造ポイント04 List in が呼び出された時、ストックファイルを読み込む様に修正します。

sos2.cgi # Sub List In # Line2229-2234

before:

	foreach $no (0 .. $#usrfile) {
		open(IN,"$usrdir$usrfile[$no]") || &error("Can't open $usrfile[$no]");
		$line = <IN>; close(IN);
		push(@lstlines,$line);
	}

after:

#-EDIT-
#	foreach $no (0 .. $#usrfile) {
#		open(IN,"$usrdir$usrfile[$no]") || &error("Can't open $usrfile[$no]");
#		$line = <IN>;
#		close(IN);
#		push(@lstlines,$line);
#	}
	push (@editor,"get_file&list_in 軽量化 Ver1.01 <A href='http://www.salion2.halfmoon.jp/soswiki/wiki.cgi' target='_blank'>by SION & SOSWiki</A>");
	open(IN,"$listin") || &error("Can't open $listin");
	@lstlines = <IN>;
	close(IN);
#-END of EDIT- SION0009v1.02-4-2/14

※フラグ足しを行っている場合は、このルーチンも修正を行ってください。

◆改造ポイント05 キャラ削除時にストックファイル更新ルーチンを実行する様に設定します。

sos2.cgi # Sub Delete After # Line1833

before:

		unlink("$usrdir$id\.dat");

after:

		unlink("$usrdir$id\.dat");
#-ADD-
		&list_out('del');
#-END of ADD- SION0009v1.02-5-3/14

◆改造ポイント06 保存時及びゲーム再開時にストックファイル更新ルーチンを実行する様に設定します。

sos2.cgi # Sub Save Game # Line1781

before:

	&userout; $printmsg = 1; &main_form;

after:

#-EDIT-	&userout; $printmsg = 1; &main_form;
	&list_out; $printmsg = 1; &main_form;
#-END of EDIT- SION0009v1.02-6-4/14

sos2.cgi # Sub Make Continue # Line548

before:

	$fg = ''; &userout;

after:

#-EDIT-	$fg = ''; &userout;
	$fg = ''; &list_out;
#-END of EDIT- SION0009v1.02-6-5/14

◆改造ポイント07 削除期限を越えた無利用ユーザーの削除タイミングを修正します。

sos2.cgi # Sub List In Order # Line1935

before:

			&find_del; &find_best;

after:

#-EDIT-			&find_del; &find_best;
			&find_best;
#-END of EDIT- SION0009v1.02-7-6/14

sos2.cgi # Sub Find to Delete # Line1983-1986

before:

# Sub Find to Delete #
sub find_del {
	if ($now > $tm && $ps ne $admpas) { unlink("$usrdir$id\.dat"); }
}

after:

#-DEL-
# Sub Find to Delete #
#sub find_del {
#	if ($now &gt; $tm && $ps ne $admpas) { unlink("$usrdir$id\.dat"); }
#}
#-END of DEL- SION0009v1.02-7-7/14

◆改造ポイント08 &getuser の実施タイミングを変更します。Ver1.01追加

sos2.cgi # Sub Normal Action # Line642

before:

		if ($Fm{'id'} eq $pid) { $mysp = $psp; $mybp = $pbp }

after:

#-EDIT-		if ($Fm{'id'} eq $pid) { $mysp = $psp; $mybp = $pbp }
		if ($Fm{'id'} eq $pid) { @rcdlines = &getuser("$Fm{'id'}"); }
#-END of EDIT- SION0009v1.02-8-8/14

※# Sub Normal Action #内の全ての [ $my** ] という変数を [ $**] と置き換えて下さい。
無改造であれば: $mysp ⇒ $sp $mybp ⇒ $bp
代表的な改造は: $myhp ⇒ $hp $mytw ⇒ $tw 等

◆改造ポイント09 税金スキル時の動作を修正します。(get_file ルーチンを削除する準備です。)

sos2.cgi # Sub Levy # Line1788

before:

	&get_file;

after:

#-EDIT-	&get_file;
	opendir(DIR,"$usrdir") || &error("ユーザデータ読みこみエラー");
	@usrfile = sort grep /\.dat/,readdir(DIR);
	closedir(DIR);
#-END of EDIT- SION0009v1.02-9-9/14

※改造により税金以外にも &get_file を追加している場合、同様に修正するか、改造ポイント11を飛ばして下さい。

◆改造ポイント10 不要となる &get_file を削除します。

sos2.cgi # Sub Make New # Line506

before:

	&get_file; &list_in; &get_host; &find_user;

after:

#-EDIT-	&get_file; &list_in; &get_host; &find_user;
	&list_in; &get_host; &find_user;
#-END of EDIT- SION0009v1.02-10-10/14

sos2.cgi # Sub Normal Action # Line633

before:

	&get_file; &list_in;

after:

#-EDIT-	&get_file; &list_in;
	&list_in;
#-END of EDIT- SION0009v1.02-10-11/14

sos2.cgi # Sub List In Order # Line1929

before:

	&get_file; &list_in; &unlock;

after:

#-EDIT-	&get_file; &list_in; &unlock;
	&list_in; &unlock;
#-END of EDIT- SION0009v1.02-10-12/14

sos2.cgi # Sub Sales In Order # Line1960

before:

&get_file; &list_in; &unlock;

after:

#-EDIT-	&get_file; &list_in; &unlock;
	&list_in; &unlock;
#-END of EDIT- SION0009v1.02-10-13/14

◆改造ポイント11 不要となった &get_file ルーチンを削除します。(この改造は行わなくても構いません)

sos2.cgi # Sub Get User File # Line2186-2193

before:

# Sub Get User File #
sub get_file {
	return if $getfileflag;
	opendir(DIR,"$usrdir") || &error("ユーザデータ読みこみエラー");
	@usrfile = sort grep /\.dat/,readdir(DIR);
	closedir(DIR);
	$getfileflag = 1;
}

after:

#-DEL-
# Sub Get User File #
#sub get_file {
#	return if $getfileflag;
#	opendir(DIR,"$usrdir") || &error("ユーザデータ読みこみエラー");
#	@usrfile = sort grep /\.dat/,readdir(DIR);
#	closedir(DIR);
#	$getfileflag = 1;
#}
#-END of DEL- SION0009v1.02-11-14/14

◆改造ポイント12 ufs2.cgi の修正。

ufs2.cgi # ------------ FILE PATH Line32

before:

$bupdat = './bup.dat'; # bup.datのパス 666(606) 

after:

$bupdat = './bup.dat'; # bup.datのパス 666(606) 
#-ADD-
$listin = './listin.cgi';	  # listin.dat のパス 666(606)
#-END of ADD- SION0009v1.02-12-1/7

ufs2.cgi 任意の場所

次のルーチンを追加します。

#=======《 Sub List OUT 》===============================================#
sub list_out {
	$del_fg = 1 if (@_[0] eq 'del');
	&list_in;
	undef @newlines;
	$now = time - 7200;
	$del_check = time - $def_dl * 86400;
	foreach (0 .. $#lstlines) {
		($pid,$pnm,$pps,$pjb,$pig,$psp,$pbp,$pbn,$pak,$pdd,$php,$pxp,$pab,$pdb,
		$pav,$pwn,$plz,$pdt,$pmn,$pbg,$pxi,$ptm,$other) = split(/<>/,$lstlines[$_]);
		if ($pid eq $id && $pnm eq $nm && $pps eq $ps) {
			next;
		} elsif ($now > $ptm && $pps eq $admpas) {
			&get_partner($pid);
			($php,$ptm) = &hprecover($php,$pxp,$psp,$pav,$ptm,$pfg);
			&partnerout;
			$getpartnerflag = 0;
			push(@newlines,$pline);
		} elsif ($del_check < $ptm) {
			push(@newlines,$lstlines[$_]);
		} else {
			unlink("$usrdir$id\.dat");
		}
	}
	push(@newlines,$line) if (!$del_fg);
	@newlines = sort @newlines;
	&writedat($listin,@newlines);
}

※sos2.cgi に追加した同名ルーチンとは、&useroutの取り扱いで若干異なります。

ufs2.cgi # Sub List In # Line970-975

before:

foreach $no (0 .. $#usrfile) {
	open(IN,"$usrdir$usrfile[$no]") || &error("Can't open $usrfile[$no]");
	$line = <IN>; close(IN); 
	push(@lstlines,$line);
}

after:

#-EDIT-
#	foreach $no (0 .. $#usrfile) {
#		open(IN,"$usrdir$usrfile[$no]") || &error("Can't open $usrfile[$no]");
#		$line = <IN>;
#		close(IN);
#		push(@lstlines,$line);
#	}
	open(IN,"$listin") || &error("Can't open $listin");
	@lstlines = <IN>;
	close(IN);
#-END of EDIT- SION0009v1.02-12-2/7

ufs2.cgi # Sub Made From # Line612

before:

	&make_from;

after:

#-ADD-
	$nm = $Fm{'name'};
	$ps = $Fm{'ps1'};
	&list_out;
#-END of ADD- SION0009v1.02-12-3/7
	&make_from;

ufs2.cgi # Sub Made Free # Line654

before:

	&make_free;

after:

#-ADD-line
	$nm = $Fm{'name'};
	$ps = $Fm{'ps1'};
	&list_out;
#-END of ADD- SION0009v1.02-12-4/7
	&make_from;

ufs2.cgi # Sub Recover Player # Line765

before:

	&admin;

after:

#-ADD-line
	$line = $newdata;
	($id,$nm,$ps) = split('<>',$line);
	&list_out;
#-END of ADD- SION0009v1.02-12-5/7
	&admin;

ufs2.cgi # Sub Delete # Line776

before:

	&admin;

after:

#-ADD-line
	&list_out('del');
#-END of ADD- SION0009v1.02-12-6/7
	&admin;

ufs2.cgi # Sub User Out # Line964

before:

	&writedat("$usrdir$id\.dat",@rcdlines);

after:

	&writedat("$usrdir$id\.dat",@rcdlines);
#-ADD-line
	&list_out;
#-END of ADD- SION0009v1.02-12-7/7

dollEx版改造ポイント

◆改造ポイント dollEx版は未対応です。


添付ファイル: fileexterior_accsess.cgi 139件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-04-30 (火) 00:57:42 (954d)