People用ランキングCGI

▼特徴・機能の説明

Missing Linkで配布されている「People」というゲームに、ランキング機能をつけるCGIです。
ただし、配布しているのはランキング表示用のスクリプトですので、people.cgi本体に少し改造が必要になります。

▼サンプル・ダウンロード

* People本体はここでは配布していませんので、 「Missing Link」でダウンロード&設置してください。
* ランキング機能の追加は、上記の設置をして動作確認が終わってからお願いします。


現在のバージョンはver1.01です。
v1.01のダウンロード [サンプル]
・設置した方は「DL報告掲示板」に書き込みや、このページへのリンクを張ってもらえると嬉しいです♪(←任意ですけど^^)

▼設定

■ ランキングを記録する部分の改造(people.cgi)
people.cgiに
# Sub Dead Check #
sub dead_check {
・・・・(中略)・・・
}
という部分があると思いますので、
# Sub Dead Check #
sub dead_check {

    # -----ランキング記録用の設定項目-------------------------------
    # People本体のバージョンは?(←重要!!)
    # ver1.7以上→0   ver1.6以前→1
    $usever = 0;

    # ランキングファイル(http://〜の指定は不可。パーミッションは666にする)
    $rankfile = "./rank.dat";

    # 何歳以上まで生きたらランキングに記録する?
    #(一見さんは登録したくない時に使用。0にすると全員記録します)
    $rank_age = 25;

    # -------------------------------------------------------------


    $addflag = 0;    
    &get_all_users;
    $number = $def_oa - $def_ya + 1; # 最高年齢から最低年齢を引く
    foreach (@alllines) {
        $dead = $count = 0; undef $dice;
        ($aid,$anm,$aps,$aag,$abl,$at1)  = (split(/<>/))[0,1,2,9,14,31];
        next if &get_crypt($adps,$aps);
        srand($$ | time - $aag);
        next if $id eq $aid;
        local($age) = &get_age($aag);
        local($chr) = &get_age($at1);
        $dice = int(rand($number)) + $age;
        if    ($chr  >= $def_dd) { $dead = 1 } # 励ます期限超過
        elsif ($age  >  $def_oa) { $dead = 2 } # 最高死亡年齢以上
        elsif ($age  <  $def_ya) { next      } # 最低死亡年齢未満
        elsif ($dice >  $def_oa) { $dead = 2 } # ランダムで寿命を設定
        if ($dead) {
            $count = split(/△/,$abl);
            &add_news("$anmが死亡しました。弔問客=$count人") if $dead == 1;
            &add_news("$anmが天寿を全うしました。弔問客=$count人") if $dead == 2;

            # ランキングデータ取得
            @rank  = (split(/<>/))[0,1,2,3,4,5,9,10,14,15,16,17,35];
            $rank[6] = &get_age($rank[6]);	# 年齢取得
            $rank[8] = split(/△/,$rank[8]);	# 友人の数を取得
            $rank[9] = split(/,/,$rank[9]);	# 子供の数を取得
            $rank[13] = $rank[7] + $rank[12];	# 総財産=所持金+財産(買った物)
            $time = time;			# 記録日を取得
            if(!$rank_age || $rank_age < $rank[6]){
		$rankdata = "";
		foreach(@rank){
			$rankdata .= "$_<>";
			}
                unshift(@temp,"$rankdata$time<>\n");
                $addflag = 1;
            }
            if(!$usever){ unlink("$usrdir/$aid\.cgi"); }
            else { unlink("$usrdir/$aid\.dat"); }
        }
    }

    # ランキング記録
    if($addflag){
        open (IN,"$rankfile");
        while(<IN>){
            push(@temp,$_);
        }
        close (IN);
        open (OUT,">$rankfile");
        print OUT (@temp);
        close (OUT);
    }
    $elsline = join(',',$day,$month);
    &write_dat("$elsdat",$elsline);
}
上記のように変更します。 赤字が変更部分ですが、全体をそのままコピー&ペーストでも問題ないと思います。 mppl.cgiを利用している方は、同様に変更します。
設定項目については、1つ目の「$usever」を確認してください。 バージョン指定が違うと、死亡した住人のデータが削除されないという不具合が発生します。

■ ランキングへのリンクを表示する部分の改造
これは好みの位置があると思いますが、当サイトのPeople と同じ位置にリンクを表示するのであれば、people.cgiの「sub new_regist_button」というサブルーチンを 以下のように変更してください。
# Sub New Regist Button #
sub new_regist_button {
    print qq|<a href=$cgiurl?mode=new_regist>新規登録</a><br>\n|;
    print qq|<br><a href="show.cgi" target="_blank">ランキング</a><br><br>\n|;
}
■ ランキング閲覧用CGIの設置
ダウンロードしたファイルを解凍し、中身をpeople.cgiがあるフォルダと 同じ場所にアップロードします。そして、パーミッションを次のように設定してください。
[CGIが使えるフォルダ]
   ├ people (フォルダ) [755] … スクリプト全体を格納するフォルダ
   │   ├ people.cgi等       …オリジナルのpeopleに含まれていたファイル
   │   │
   │   ├ show.cgi     [755] … ランキングを閲覧するためのCGIファイル
   │   ├ rank.dat     [666] … ランキングを保存しているデータファイル
   │   └ style.css    [644] … デザイン設定するスタイルシート
   │
   └ (他のCGIやHTML)
特にミスがなければ、show.cgiにアクセスすることでランキングが閲覧できると思います。

▼更新履歴

■2005年
ver 1.01 (5/24)  ・ランキング表示の際、「名前」と「長寿王」で正しくソートされないバグを修正
■2004年
ver 1.00 (12/20)  ・公開開始

▼その他

・ランキング機能をつけるのは、オリジナルのPeopleを設置して動作確認をしてからにしてください。
・ランキング機能については、Missing Linkで質問をしないでください。
・質問、バグ報告、意見などがありましたら、CGI用掲示板のほうにお願いします。
【広告】 スポンサーサイトも訪れてください
 ■フュージョン : 全国一律20円通話。通話料1000円プレゼントキャンペーンも実施中 。
 ■ブルックス : 簡単・便利なドリップ式コーヒー まとめて買うとこんなにお得!

BACK