※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

「クエストギルド」の編集履歴(バックアップ)一覧はこちら

クエストギルド」の最新版変更点

追加された行は青色になります。

削除された行は赤色になります。

 モンスターを討伐して報酬を得たりすることができる施設です。
 では早速、./libにkoubou.cgiを作りましょう。中身は
 
 #=================================================
-# 交流広場 Created by Merino  クエスト受注変数:que_jyu 目標モンスター変数 $mons_target 討伐モンスター変数:$toubatu_mons  dateの配列変数@kue
-#システム変数に kue     戦闘変数に 
+# クエストギルド Created by Merino
+# system.cgiの変数にque_jyu toubatu_mons que_flg mokuhyou_mons mons_hantei追加。config.cgiにはmons_hantei追加
 #=================================================
 # 場所名
 $this_title = 'クエストギルド';
 
 # NPC名
 $npc_name   = '@ナムニャ';
 
 # ログに使うファイル(.cgi抜き)
 $this_file  = "$logdir/quest_guild";
 
 # 背景画像
 $bgimg   = "$bgimgdir/reborn.gif";
 
 # クエストリスト
 @quest_ban = (1);
 
 #=================================================
 # はなす言葉
 #=================================================
 @words = (
 "ようこそ。ここは$this_titleです。クエストを受けにきたのですか?",
 "どのようなクエストを受けるかは貴方の自由。依頼者が喜ぶような結果を出してくるんだよ!",
 "自分の強さに合ったクエストを受けるんだよ!じゃないとクリア出来ないかもしれないから気をつけてね!",
 "クエスト達成が難しくなったらキャンセルも受け付けるよ!",
 );
 #=================================================
 # @しらべる>NPC
 #=================================================
 sub shiraberu_npc {
 	$mes ="え、何するんですか!やめてください!";
 	$mes = "ボソッ…私の気分が良い時は報酬におまけつきなんだよね…";
 }
 
 #=================================================
 # 追加アクション
 #=================================================
 push @actions, ('クエスト');
 push @actions, ('キャンセル');
 push @actions, ('ほうこく');
 push @actions, ('ひきだす');
 
 $actions{'クエスト'} = sub{ &irai };
 $actions{'キャンセル'} = sub{ &irai_kyan };
 $actions{'ほうこく'} = sub{ &houkoku };
 $actions{'ひきだす'} = sub{ &hikidasu };
 #=================================================
 # ステータス表示
 #=================================================
 sub header_html {
 	print qq!<div class="mes">【$this_title】!;
 	print qq|$e2j{coupon}: $e2j{hp}:<b>$m{hp}</b>/<b>$m{mhp}</b> $e2j{mp}:<b>$m{mp}</b>/<b>$m{mmp}</b><BR>|;
 	
 	print qq| E:$weas[$m{wea}][1]| if $m{wea};
 	print qq| E:$arms[$m{arm}][1]| if $m{arm};
 	print qq| E:$ites[$m{ite}][1]| if $m{ite};
 	print qq| </div>|;
 }
 
 #=================================================
 # @クエスト
 #=================================================
 sub irai {
 	my $target = shift;
 
 	my $p = qq|<table class="table1"><tr><th>クエスト名</th><th>ターゲット</th><th>目標数</th><th>契約金</th><th>報酬</th><th>難易度</th><th>詳細</th></tr>|;
 
 	for my $i (@quest_ban) {
 		if ($kues[$i][1] eq $target ) {
 			if ($m{name}) {
 				if ($m{que_jyu} == 0 && $m{money} > $kues[$i][4]) {
 
 					$m{que_jyu} = $i;
 					$m{mokuhyou_mons} = 0; 
 					$m{toubatu_mons} = $kues[$m{que_jyu}][3]; 
                                         $m{money}        -= $kues[$i][4]; 
 					$npc_com = "あら、$kues[$i][1]の依頼を受けるようですね。無事に帰ってくることを祈ってますよ。";
 				}
 				else {
 					$npc_com = "残念ですけど、貴方にはこのクエストを任せられないよ。他のクエストを受けてませんか?";
 				}
 			}
 			else {
 				$mes = "貴方にはこのクエストは合ってませんね…。";
 			}
 			return;
 		}
 		$p .= qq|<tr onclick="text_set('@クエスト>$kues[$i][1] ')"><td>$kues[$i][1]</td><td align="right">$kues[$i][2]</td><td align="right">$kues[$i][3]</td><td align="right">$kues[$i][4]</td><td align="right">$kues[$i][5]</td><td align="right">$kues[$i][6]</td><td align="right">$kues[$i][7]</td></tr>|;
 	}
 	$p .= qq|</table>|;
 	$mes = qq|どの依頼を受けるのですか?<br />$p|;
 	$act_time = 0;
 }
 
 #========================================================
 #@ほうこく
 #========================================================
 sub houkoku {
 	if($m{mokuhyou_mons} >= $kues[$m{kue_jyu}][3] && $m{que_flg} == 1){
 		$npc_com = "あら、無事に帰ってきたようですね。$kues[$m{que_jyu}][5]等の報酬は預かり所に送っておくよ。";
 		&send_item($m,3,$kues[$m{que_jyu}][8]);
  if(rand(5)<1){
 		&send_item($m,3,$kues[$m{que_jyu}][9]);
 }
  if(rand(11)<1){
 		&send_item($m,3,$kues[$m{que_jyu}][10]);
 }
  if(rand(50)<1){
                 &send_item($m,3,$kues[$m{que_jyu}][11]);
 }
 		$m{que_flg} = 0;
                 $m{que_jyu} = 0;#すべて初期化
                 $m{mokuhyou_mons} = 0;
                 $m{toubatu_mons} = 0;
 	}
 	else{
 		$npc_com = "貴方はまだクエストを達成してませんよ?";
 		return;
 	}
 }
 #=================================================
 # @クエストキャンセル
 #=================================================
 sub irai_kyan {
 	if($m{que_jyu}){
 		$npc_com = "そうですか…。依頼者には断っておきます。残念ですね。それと、契約金は返しませんからね?";
 		$m{que_jyu} = 0;
 		$m{que_flg} = 0;
 		$m{toubatu_mons} = 0;
                 $m{mokuhyou_mons} = 0;
 	}
 	else {
 		$npc_com = "貴方はクエストを受けていないようだけど?";
 	}
 	return;
 }
 #=================================================
 # @ひきだす
 #=================================================
 sub hikidasu {
 	my $target = shift;
 	
 	# 送金があれば最初に受け取る
 	if (-s "$userdir/$id/money.cgi") {
 		&_get_money;
 		return;
 	}
 	
 	my $is_find = 0;
 	my $p = '';
 	my @lines = ();
 	open my $fh, "+< $userdir/$id/depot.cgi" or &error("$userdir/$id/depot.cgiファイルが開けません");
 	eval { flock $fh, 2; };
 	while (my $line = <$fh>) {
 		my($kind, $no) = split /<>/, $line;
 		if ($kind eq '1') { # 武器
 			if (!$is_find && $weas[$no][1] eq $target) { # 交換
 				$is_find = 1;
 				if ($m{wea}) {
 					$npc_com .= "$weas[$m{wea}][1]をお預かりしました。";
 					push @lines, "1<>$m{wea}<>\n";
 				}
 				$m{wea} = $no;
 				$npc_com .= "$weas[$m{wea}][1]をお返しします";
 			}
 			else {
 				$p .= qq|<span onclick="text_set('@ひきだす>$weas[$no][1] ')">$weas[$no][1]</span> / |;
 				push @lines, $line;
 			}
 		}
 		elsif ($kind eq '2') { # 防具
 			if (!$is_find && $tates[$no][1] eq $target) { # 交換
 				$is_find = 1;
 				if ($m{tate}) {
 					$npc_com .= "$tates[$m{tate}][1]をお預かりしました。";
 					push @lines, "2<>$m{tate}<>\n";
 				}
 				$m{tate} = $no;
 				$npc_com .= "$tates[$m{tate}][1]をお返しします";
 			}
 			else {
 				$p .= qq|<span onclick="text_set('@ひきだす>$tates[$no][1] ')">$tates[$no][1]</span> / |;
 				push @lines, $line;
 			}
 		}
 		elsif ($kind eq '3') { # 道具
 			if (!$is_find && $atamas[$no][1] eq $target) { # 交換
 				$is_find = 1;
 				if ($m{atama}) {
 					$npc_com .= "$atamas[$m{atama}][1]をお預かりしました。";
 					push @lines, "3<>$m{atama}<>\n";
 				}
 				$m{atama} = $no;
 				$npc_com .= "$atamas[$m{atama}][1]をお返しします";
 			}
 			else {
 				$p .= qq|<span onclick="text_set('@ひきだす>$atamas[$no][1] ')">$atamas[$no][1]</span> / |;
 				push @lines, $line;
 			}
 		}
 	}
 	if ($npc_com) {
 		seek  $fh, 0, 0;
 		truncate $fh, 0;
 		print $fh @lines;
 		close $fh;
 		
 		require "./lib/_add_collection.cgi";
 		&add_collection;
 		return;
 	}
 	close $fh;
 	
 	$mes = qq|どれをひきだす?<br />$p|;
 	$act_time = 0;
 }
 # ------------------
 # ゴールドを受けとる
 sub _get_money {
 	open my $fh, "+< $userdir/$id/money.cgi" or &error("$userdir/$id/money.cgiファイルが開けません");
 	eval { flock $fh, 2; };
 	while (my $line = <$fh>) {
 		my($money, $message) = split /<>/, $line;
 		$m{money} += $money;
 		if ($money >= 0) {
 			$mes.="$message として $money Gを受け取りました<br />";
 		}
 		else {
 			$money *= -1;
 			$mes.="$message として $money Gを支払いました<br />";
 		}
 	}
 	seek  $fh, 0, 0;
 	truncate $fh, 0;
 	close $fh;
 }
 
 です。
 
 次に./lib/_data.cgiに・・
 
 #=================================================
 #  クエスト依頼 ◎変更/追加可能。
 #=================================================
 @kues = (
 #[0]No, [1]クエ名,                [2]ターゲット,   [3]目標数,       [4]契約金, [5]報酬名,     [6]難易度, [7],詳細  [8],報酬ナンバーメイン→サブ→レア→極レア
 [0,        'なし',        'なし',              0,          'なし',             0,               0,      'なし',],
 
 [1,     'スライム大量出現',               'スライム',               100,      '1000',              '薬草',       '★',          'おいしく焼きたいので', 1, 1, 1, 1,],
 );
 
 こんな感じのを追加。
+
+さらに、./lib/_battle.cgiの	for my $name (@partys) {の中に・・
+
+	if ($ms{$y}{mons_hantei} eq $kues[$m{que_jyu}][2] && !$m{que_flg}) {
+		$m{mokuhyou_mons}++;
+		if ($m{mokuhyou_mons} >= $kues[$m{que_jyu}][3]) {
+			$npc_com .= "$mは討伐クエストを達成しました!";
+			$m{que_flg} = 1;
+		}
+	}
+
+を追加。
 
 そしてlogファイルを作れば完成。
 
 前開発していたパーティーで作ったスクリプトを引っ張ってきました。
 お疲れ様でした。