改造を進めていくと、そのうちif文だけではどうしてもできないことがでてくるはず。
できることを増やすには、やはり新しい文を覚えることが必要になってきます。
今回はそんな新しい文の一つとして、『時間取得』を覚えてみましょう。
基本はこんな感じの2文です。
$times = time();
($sec,$min,$hour,$mday,$month,$year,$wday,$stime) = localtime($times);
実行するとそれぞれの変数にその時点での時刻が記録されます。
変数 |
記録される値 |
注意点 |
$sec |
秒 |
特になし |
$min |
分 |
特になし |
$hour |
時間 |
特になし |
$mday |
日 |
特になし |
$month |
月 |
実際より1少ない数値になってます。 |
$year |
年 |
今の年数から1900引いたものになってます。 |
$wday |
曜日 |
日曜日は0、月曜日が1、火曜日で2という風になってます。 |
$stime |
1月1日からの経過日数 |
特になし |
そのままだと月、年、曜日がちょっと扱いづらいですよね。
なので扱いやすいように変える処理もあわせてやるといいです。
$year += 1900;
$mon++;
@weekday = qw( 日 月 火 水 木 金 土 );$wday = $weekday[$wday];
これで年と月は本来の数値に戻り、$wdayが曜日を漢字一文字で表したものになりました。
この部分は年、月、曜日を扱わない場合は負荷制限のために削ってもいいです。
さて、この時間取得を実際に使った処理を@パーティに組み込んで見ましょう。
とりあえず簡単なところで・・・早朝に経験値にボーナスを入れるシステムを作ってみましょう。
_battle.cgi の最初の方、
# 倒したときの処理 の部分です。
# NPCがプレイヤーを倒した時。または自爆
return if $ms{$m}{color} eq $npc_color || $m eq $y;
の下あたりに
$times = time();
($sec,$min,$hour,$mday,$month,$year,$wday,$stime) = localtime($times);
$bonus = 1;$bonus = 2 if $hour == 5 or $hour == 6;
って書き込み。
そしてその下の部分
$com .= qq|<br /><span class="get">$mたちはそれぞれ $ms{$y}{get_exp} の$e2j{exp}と $ms{$y}{get_money} Gを手に入れた!</span>|;
for my $name (@partys) {
next if $ms{$name}{hp} <= 0;
if ($name eq $m) { # 倒した人
$m{exp} += $ms{$y}{get_exp};
$m{money} += $ms{$y}{get_money};
ここの部分を 以下のように書き換え。
$com .= qq|<br /><span class="get">$mたちはそれぞれ $ms{$y}{get_exp}*$bonus の$e2j{exp}と $ms{$y}{get_money} Gを手に入れた!</span>|;
for my $name (@partys) {
next if $ms{$name}{hp} <= 0;
if ($name eq $m) { # 倒した人
$m{exp} += $ms{$y}{get_exp}*$bonus;
$m{money} += $ms{$y}{get_money};
これで朝の5時から7時にかけての2時間の間、取得経験値が二倍になります。
早朝の人が少ない時間帯に誘導することで負荷軽減につながる・・・かなあ。単に@パーティのプレイ時間を増やすだけになるかも。
時間取得の基本的な扱い方でした。
お読みいただきありがとうございます。
発想を豊かに。
他に、時間取得でやれそうなこと。
- 逢う魔ヶ時にのみいけるステージとか
- 定期的に自動で封印戦が始まる
- 時間によって使えるスキルがかわる職業 →パチュリーでやってました
- 時刻によって出てくるモンスターが変わる
- 前の発動からきっかり60秒後にもう一度発動すると相手に大ダメージな技とか
最終更新:2009年08月20日 10:10