クエストギルド

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

クエストギルド」(2013/02/09 (土) 15:22:51) の最新版変更点

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

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

モンスターを討伐して報酬を得たりすることができる施設です。 では早速、./libにkoubou.cgiを作りましょう。中身は #================================================= # 交流広場 Created by Merino  クエスト受注変数:que_jyu 目標モンスター変数 $mons_target 討伐モンスター変数:$toubatu_mons dateの配列変数@kue #システム変数に kue 戦闘変数に #================================================= # 場所名 $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,], ); こんな感じのを追加。 そしてlogファイルを作れば完成。 前開発していたパーティーで作ったスクリプトを引っ張ってきました。 お疲れ様でした。
モンスターを討伐して報酬を得たりすることができる施設です。 では早速、./libにkoubou.cgiを作りましょう。中身は #================================================= # クエストギルド 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ファイルを作れば完成。 前開発していたパーティーで作ったスクリプトを引っ張ってきました。 お疲れ様でした。

表示オプション

横に並べて表示:
変化行の前後のみ表示: