時間取得を使ってみる

改造を進めていくと、そのうち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
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。