突発戦闘を作る

さて、タイマーを習った所で誰もが憧れるシステムの作成に手を出していきましょう。

ご存知『封印戦』。
これは特定の冒険地をクリアする事で出現する戦闘ですね。

ではこれをタイマーで起動するとしたら…?
それはつまり、突発的に発生する封印戦闘、まさに突発戦闘となるわけです。

突発戦闘で何を作りたい?
延々と湧き出る敵を葬り続けるステージ?
一定時間しか出現しない蜃気楼の塔?

色々夢は広がります。
そんなわけで、作ってみましょう。

【操作する所】quest.cgi/_king_t_1.cgi(新規ファイル)
【手順】
①_king_t_1.cgiを作成。
②quest.cgiに呼び起こす動作を指定。
③試運転

こんな簡単に作れちゃったりします。
ifと時間取得があると、本当に便利ですね!


①_king_t_1.cgiを作成する


作る場所はstageディレクトリに入れて下さい。

【封印戦の場合】
内部情報は全て封印戦の物を流用して構いません。


②quest.cgiに呼び出す動作を指定。

quest.cgiを開いたら、一番下までスクロールして下さい。

1; # 削除不可

が見えたら、その上に以下の文章を追加します。

#=========================================================
# デスゾーンの展開
# 毎日昼3時0分0秒~3時0分59秒の間に更新が起きた場合に発生
#=========================================================
$times = time();
($sec,$min,$hour,$mday,$month,$year,$wday,$stime) = localtime($times);

if ($hour == 15 && $min == 0) {
	&make_vs_king1;
$npc_com .= "***@デスゾーン@への扉が開いています***";
}
sub make_vs_king1 {
opendir my $dh, $stagedir or &error("$stagedirディレクトリが開けません");
while (my $file_name = readdir $dh) {
	next if $file_name =~ /^\./;
	next if $file_name !~ /^_king_t/;
	my($k_stage) = ($file_name =~ /^(.+)\.cgi$/);

	require "$stagedir/$file_name";
	my $quest_id = unpack 'H*', $k{p_name};
	next if -d "$questdir/$quest_id"; # 同じクエスト名があった場合は作らない(作れない)

	$k{p_join}++; # ボスが1人分占有しているため
	my $boss_name = '@'.$k{p_leader};

	# 新規パーティー作成
	mkdir "$questdir/$quest_id" or &error("$questdir/$quest_idディレクトリが作成できません");
	open my $fh, "> $questdir/$quest_id/member.cgi" or &error("$questdir/$quest_id/member.cgiファイルが作成できません");
	print $fh "$k{speed}<>_king_t_1<>1<>$boss_name<>$k{p_name}<><>$k{p_join}<>0<>0<>1<>$k{need_join}<>6<><>0<>0<><>\n";
	
	my @lines = ();
	for my $no (0 .. $#bosses) {
		my %p = ();
		
		# 初期データセット(読み込んだデータにすでに値がある場合はそっちを優先)
		$bosses[$no]{tmp}   ||= '';
		$bosses[$no]{state} ||= '';
		$bosses[$no]{hit}   ||= 95;
		$bosses[$no]{ten}   ||= 1;
		$bosses[$no]{name}  = '@'.$bosses[$no]{name};
		$bosses[$no]{color} = $npc_color;
		for my $k (qw/hp mp at df ag/) {
			$bosses[$no]{$k}       = $bosses[$no]{$k};
			$bosses[$no]{'m'.$k} ||= $bosses[$no]{$k};
		}
		
		my $line = '';
		for my $k (@battle_datas) {
			$line .= defined $bosses[$no]{$k} ? "$bosses[$no]{$k}<>" : "0<>";
		}
		push @lines, "$line\n";
	}

	print $fh @lines;
	close $fh;
	chmod $chmod, "$questdir/$quest_id/member.cgi";
	
	open my $fh2, "> $questdir/$quest_id/log.cgi" or &error("$questdir/$quest_id/log.cgiファイルが作成できません");
	close $fh2;
	chmod $chmod, "$questdir/$quest_id/log.cgi";
}
closedir $dh;
}

未改造ならこれをコピーするだけで終了です。
しかし、いくつかの戦闘を同時に発生させたい場合はステージの選択方法を封印戦から流用して下さい。
とはいえ突発的に大規模な動作をさせるとサーバー負担はかなり強くなります。
そのため、呼び出すものは通常1つにしたほうが良いでしょう。
最終更新:2009年08月21日 23:50
ツールボックス

下から選んでください:

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