トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

get_file & list_in 軽量化

  • 青色は、改造箇所を示します。ファイル名: ルーチン名: 行番号 を示します。
  • 黒色文字は、「改造前の状態」を示します。
  • テキストボックスの中のプログラムを、該当の場所に上書きして下さい。

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

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

履歴
2007/03/04 Wikiにて公開    
2003/09/03 Version 1.02 細かなバグ修正 
2003/07/17 Version 1.01 探索周りの致命的バグ修正 
2003/07/13 Version 1.00 公開   


この改造はユーザーデータを多く扱う為、改造時の危険度は高くなっています。

●作業開始前に、ユーザーデータをコピーし、万一に備えてください。
●改造作業中、SOSは動作しないよう停止してください。
●作業開始前に、全ての改造ポイントに目を通し、どういった処理に変更しているのか理解してください。
●この改造については、原則として自力で理解できる方を対象としています。それ以外の方はこの改造はご遠慮下さい。
●この改造によって生じたいかなる障害・損害についても、当方では一切責任を取れません。改造を適用した時点で、この事をご理解・ご承諾戴いたものと致します。


この改造により、次の通り変更となります。
●ユーザーリストや販売リスト、ベストユーザーなどの表示は、最後にセーブした時の状態が反映されるようになります。

本家版改造ポイント

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


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

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


sos2.cgi # ---------- FILE PATH Line31
$bitdat = './bit.dat'; # bit.datのパス 666(606)

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


sos2.cgi 任意の場所
次のルーチンを追加します。

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

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


sos2.cgi # Sub List In # Line2229-2234
foreach $no (0 .. $#usrfile) {
open(IN,"$usrdir$usrfile[$no]") || &error("Can't open $usrfile[$no]");
$line = ; close(IN);
push(@lstlines,$line);
}


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

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


sos2.cgi # Sub Delete After # Line1833
unlink("$usrdir$id\.dat");

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


sos2.cgi # Sub Save Game # Line1781
&userout; $printmsg = 1; &main_form;



sos2.cgi # Sub Make Continue # Line548
$fg = ''; &userout;

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


sos2.cgi # Sub List In Order # Line1935
&find_del; &find_best;



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


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


sos2.cgi # Sub Normal Action # Line642
if ($Fm{'id'} eq $pid) { $mysp = $psp; $mybp = $pbp }

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

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


sos2.cgi # Sub Levy # Line1788
&get_file;

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

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


sos2.cgi # Sub Make New # Line506
&get_file; &list_in; &get_host; &find_user;



sos2.cgi # Sub Normal Action # Line633
&get_file; &list_in;



sos2.cgi # Sub List In Order # Line1929
&get_file; &list_in; &unlock;



sos2.cgi # Sub Sales In Order # Line1960
&get_file; &list_in; &unlock;

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


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


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


ufs2.cgi # ------------ FILE PATH Line32
$bupdat = './bup.dat'; # bup.datのパス 666(606)



ufs2.cgi 任意の場所
次のルーチンを追加します。

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


ufs2.cgi # Sub List In # Line970-975
foreach $no (0 .. $#usrfile) {
open(IN,"$usrdir$usrfile[$no]") || &error("Can't open $usrfile[$no]");
$line = ; close(IN);
push(@lstlines,$line);
}




ufs2.cgi # Sub Made From # Line612
&make_from;



ufs2.cgi # Sub Made Free # Line654
&make_free;



ufs2.cgi # Sub Recover Player # Line765
&admin;



ufs2.cgi # Sub Delete # Line776
&admin;



ufs2.cgi # Sub User Out # Line964
&writedat("$usrdir$id\.dat",@rcdlines);

dollEx版改造ポイント

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