私設SoS2オーナー応援BBS

新規発言一覧最新記事過去一覧検索ダウンロードページHOME

スレッド

└◇1822:
Re[2]:タイムリミットボスの導入 [YOUME] 11/13 09:44

 └◇1823:Re[3]:タイムリミットボスの導入 [moon] 11/13 20:33
  └◇1824:Re[4]:タイムリミットボスの導入 [YOUME] 11/14 10:27
   └◇1825:Re[5]:タイムリミットボスの導入 [moon] 11/14 19:15
    └◇1826:Re[6]:タイムリミットボスの導入 [moon] 11/14 19:54
     └◇1827:Re[7]:タイムリミットボスの導入 [YOUME] 11/17 11:37
      └◇1828:Re[8]:タイムリミットボスの導入 [moon] 11/17 19:09
       └◇1829:Re[9]:タイムリミットボスの導入 [YOUME] 11/18 09:43
        └◇1830:Re[10]:タイムリミットボスの導入 [moon] 11/18 19:54
         └◇1831:Re[11]:タイムリミットボスの導入 [YOUME] 11/19 11:04
          └◇1832:Re[12]:タイムリミットボスの導入 [moon] 11/19 18:55<-last


1822● Re[2]:タイムリミットボスの導入[ YOUME ] 2014 11/13 09:44
お返事感謝です!

> 1. ボスデータファイルを読み込んで時間(有効期限)を確認する。
> 2. 有効期限を過ぎていたらボスのユーザーデータファイルを作り直し、ボスデータファイルを更新する。
> 3. $fgにボス戦前用の値(例えば'RB')をセットしてボスの画面を表示する。

ひとまずここまで何とかしようと考えたのですが、

        if ($idt =~ /-TRAP_BOSS-/)
        {
        open(TBOSS, "timeboss.dat");
        $data = <TBOSS>;
        close(TBOSS);
        push (@msg,"タイムリミットボス$inmが現れた!");
        $findar .= "タイムリミットボス$pinmが現れた!" if $findi_rec;return;
        }

な感じのところまで書いてみたものの…
間違ってる感しか無く…

> 1. ボスデータファイルを読み込んで時間(有効期限)を確認する。
> 2. 有効期限を過ぎていたらボスのユーザーデータファイルを作り直し、

時間(有効期限)を確認するには、どういう書き方をすれば良いのでしょうか?今まで時間制限のあるものを作ったことが無く、全く分かりませんでした…

> ボスデータファイルを更新する。
$〜のフラグが無い場合、どうやってファイル更新すべきか分かりませんでした…

> 3. $fgにボス戦前用の値(例えば'RB')をセットしてボスの画面を表示する。

恥ずかしながら$fgの使い方も分かっておらず…
$fg='RB';
みたいな感じでいいのでしょうか…?

いろいろ検索して参考になりそうなサイトを探したりもしたのですが見つけられず;

初歩的な事ばかりを聞いてばかりで申し訳ないです…

お時間のある時に教えて頂けると助かります…!
コメントを書く(引用) | スレッド一覧


1823● Re[3]:タイムリミットボスの導入[ moon ] 2014 11/13 20:33
> > 1. ボスデータファイルを読み込んで時間(有効期限)を確認する。
> > 2. 有効期限を過ぎていたらボスのユーザーデータファイルを作り直し、
>
> 時間(有効期限)を確認するには、どういう書き方をすれば良いのでしょうか?今まで時間制限のあるものを作ったことが無く、全く分かりませんでした…

データファイルの構造をどうするかにもよるのですが、例えば「有効期限<>参加者ID-1△参加者名-1,…,参加者ID-n△参加者名-n」のようにしたとします。
この場合はまず「my $expires = (split(/\Q<>\E/o, $data))[0];」として有効期限部分を取り出します。
そして、現在時刻(time)と取り出した$expiresを比較(if(time>$expires){期限切れの処理})すれば良いです。

> > ボスデータファイルを更新する。
> $〜のフラグが無い場合、どうやってファイル更新すべきか分かりませんでした…

有効期限切れで新しいボスを作成したタイミングなので、有効期限と空の参加者データが保存できれば良いです。
ですので、「&writedat(データファイルのパス, join('<>', time + ボスの存在期間, ''));」のような処理になります。(実際は、timeを変数に代入しておき上記の判定とここの両方で使用したほうが良いと思います。)

> > 3. $fgにボス戦前用の値(例えば'RB')をセットしてボスの画面を表示する。
>
> 恥ずかしながら$fgの使い方も分かっておらず…
> $fg='RB';
> みたいな感じでいいのでしょうか…?

そうです。
そして、この後にボスの画面を表示することになるのですが、それは以下のような処理を行えば良いと思います。
1. $Fm{'pd'}にボスのIDをセットする。
2. 変数を用意してフラグを立てる。
3. sub play_formでフラグが立っていたら「require 'pl/normal_action.pl';」の代わりに「require 'pl/contact_action.pl';」を行う。

なお、$fgに関してはScript of Saga II Wiki(およびR)のリファレンスマニュアルに説明が書いてありますので参考になるかと思います。
コメントを書く(引用) | スレッド一覧


1824● Re[4]:タイムリミットボスの導入[ YOUME ] 2014 11/14 10:27
ご教授ありがとうございます!
リファレンスマニュアルも読んで来ました、便利ですね。
だいぶ理解度が上がった気がします!

現段階では、以下のような感じになりました。
(認識が間違っている部分があったら教えて頂けると助かります…)
----------------------------
if ($idt =~ /-TRAP_BOSS-/)
{
    open(TBOSS, "timeboss.dat");#timeboss.datを開く
    $data = <TBOSS>;#timeboss.datを読む
    my $expires = (split(/\Q<>\E/o, $data))[0];#有効期限部分を取り出す
#有効期限<>参加者ID-1△参加者名-1,…,参加者ID-n△参加者名-n
    if(time>$expires)
        {
        &writedat(データファイルのパス,join('<>',time + 60,''));#ボスデータファイルを更新
        }#期限切れの処理

#期限が切れていなかった時の処理?

    close(TBOSS);#timeboss.datを閉じる
    push (@msg,"タイムリミットボス$inmが現れた!");
    $findar .= "タイムリミットボス$pinmが現れた!" if $findi_rec;return;
    $fg='RB';#ボス戦前用の値
    @prclines = &get_partner("$Fm{'pd'}");#$Fm{'pd'}にボスのIDをセットする。

#    2. 変数を用意してフラグを立てる。
#    3. sub play_formでフラグが立っていたら
    「require 'pl/normal_action.pl';」の代わりに「require 'pl/contact_action.pl';」を行う。
}
----------------------------

> データファイルのパス
というのは、どのようなものなのでしょうか?最初は単純にtimeboss.datかTBOSS?とか思ったのですが…

> ボスの存在期間
については、60と記入してみたのですが、
これは60分になるのでしょうか?
それとも60秒になってしますのでしょうか…?

また、
#期限が切れていなかった時の処理?
も必要なのかな?と思ったのですが、どうすれば良いのか分からず…

>     2. 変数を用意してフラグを立てる。
変数を$timebossにしようとは思っているのですが、
フラグを立てるというのが、恥ずかしながら分からず…
フラグ追加ということでは無いですよね;

>     3. sub play_formでフラグが立っていたら「require 'pl/normal_action.pl';」の代わりに「require 'pl/contact_action.pl';」を行う。

この処理も分からず…
分からない事ばかりで本当に申し訳ないです…

お手数をおかけしてしますのですが、ご教授頂けると助かります。
コメントを書く(引用) | スレッド一覧


1825● Re[5]:タイムリミットボスの導入[ moon ] 2014 11/14 19:15
>     open(TBOSS, "timeboss.dat");#timeboss.datを開く
>     $data = <TBOSS>;#timeboss.datを読む

closeのタイミングはこの直後(読み込んだ直後)が良いです。

>     $findar .= "タイムリミットボス$pinmが現れた!" if $findi_rec;return;
>     $fg='RB';#ボス戦前用の値
>     @prclines = &get_partner("$Fm{'pd'}");#$Fm{'pd'}にボスのIDをセットする。

「return;」の場所がそこだと、それ以降の処理が行われません。
$Fm{'pd'}にセットするというのは単純に「$Fm{'pd'} = 'ボスのID'」という意味でした。($Fm{'pd'}は会いに行く際の相手のIDとして使われています。)

> > データファイルのパス
> というのは、どのようなものなのでしょうか?最初は単純にtimeboss.datかTBOSS?とか思ったのですが…

ファイル名が書いてありましたね、見落としていました。
'timeboss.dat'のことです。

> > ボスの存在期間
> については、60と記入してみたのですが、
> これは60分になるのでしょうか?
> それとも60秒になってしますのでしょうか…?

そのままの値でtimeと比較しますので単位は秒です。

> また、
> #期限が切れていなかった時の処理?
> も必要なのかな?と思ったのですが、どうすれば良いのか分からず…

ボスが存在する時に何か処理をしたいのであれば必要ですが、特に何もしないなら必要ないです。

> >     2. 変数を用意してフラグを立てる。
> 変数を$timebossにしようとは思っているのですが、
> フラグを立てるというのが、恥ずかしながら分からず…
> フラグ追加ということでは無いですよね;

「$timeboss = 1;」などのようにして、変数を比較した際に論理値で「真」と判断されるようにするということを意味します。

> >     3. sub play_formでフラグが立っていたら「require 'pl/normal_action.pl';」の代わりに「require 'pl/contact_action.pl';」を行う。
>
> この処理も分からず…

sub play_formの「require 'pl/normal_action.pl';」を以下のように変更するということです。
  if($timeboss){
    # ボスに遭遇した際の処理
    require 'pl/contact_action.pl';
  }
  else{
    # 通常の処理
    require 'pl/normal_action.pl';
  }
コメントを書く(引用) | スレッド一覧


1826● Re[6]:タイムリミットボスの導入[ moon ] 2014 11/14 19:54
いまさらなのですが、一番最初に書いたように「ユーザーと同じ扱いで戦闘できるようにする」という考え方をベースに「探索で遭遇した場合だけ挑戦できる」と条件を付けて話を進めていました。
もし、上記のようなイメージではなかったり、変更する際に処理内容に違和感を感じた場合は早めに指摘してもらえると軌道修正が行いやすいです。
コメントを書く(引用) | スレッド一覧


1827● Re[7]:タイムリミットボスの導入[ YOUME ] 2014 11/17 11:37
いつもご指導ありがとうございます!

自分の中の勝手な理想としては…
探索時に、(〜を見つけた等々と同じ場所)に
-------------------
【ボス画像】タイムリミットボスが現れた!
-------------------
みたいな感じでタイムリミットボスが現れた表示だけ出した後、


プレイヤーデータの分かりやすい位置(プレイヤー画像の上あたり)に、ボスが出現している間は
-------------------
【ボス画像】
【!】タイムボス出現中【!】
>>ボスと戦う!<<
-------------------
みたいな感じに常時表示させ
ボスが倒されたり時間ぎれで逃亡したら表示は消す

(ボスが出現している間は、次のボスは現れず、
ボスが倒された場合、もしくは逃げた場合は、
再び出現可能になるイメージです。)

「>>ボスと戦う!<<」をクリックすると戦闘画面
(プレイヤーと接触したような画面でいいかも?)
に切り替わるようにできたらなと・・

ボスの体力が無くなった場合は、
そのボスと戦ったプレイヤーに報酬アイテムを自動的に配布して、
誰がボスにとどめをさしたのかを知らせる
(追加と同時に、できればマイレコードに記載したい)

ボスが逃げてしまった場合は、
そのボスと戦ったプレイヤーに、
参加賞アイテムを自動的に配布して、ボスが逃げたことを知らせる
(できればマイレコードに記載したい)

…という感じです。

うまく、伝えられてるか不安ですが、
こういう場合は、これまで考えてきた内容で進めて大丈夫でしょうか…?
コメントを書く(引用) | スレッド一覧


1828● Re[8]:タイムリミットボスの導入[ moon ] 2014 11/17 19:09
もう少し詳細を詰める必要がありそうです。

> 探索時に、(〜を見つけた等々と同じ場所)に
> -------------------
> 【ボス画像】タイムリミットボスが現れた!
> -------------------
> みたいな感じでタイムリミットボスが現れた表示だけ出した後、

すでに自分を含む誰かがボスと遭遇して出現済みになっている場合にもメッセージを出すのでしょうか、それともその場合は別の何かを行うのでしょうか?

> プレイヤーデータの分かりやすい位置(プレイヤー画像の上あたり)に、ボスが出現している間は
> -------------------
> 【ボス画像】
> 【!】タイムボス出現中【!】
> >>ボスと戦う!<<
> -------------------
> みたいな感じに常時表示させ
> ボスが倒されたり時間ぎれで逃亡したら表示は消す

この表示を出すのは探索でボスに遭遇したプレイヤーだけでしょうか、それとも一度誰かが遭遇した場合はすべてのプレイヤーに表示するのでしょうか?

> 「>>ボスと戦う!<<」をクリックすると戦闘画面
> (プレイヤーと接触したような画面でいいかも?)
> に切り替わるようにできたらなと・・

この部分もデータファイルの扱いに影響してくるので、既存の接触画面を使用するのか別の画面を使用するのか、を決めてしまったほうが良いです。
あと、戦闘処理はsub fightを使用するのでしょうか、それとも別の処理で行うのでしょうか?

> こういう場合は、これまで考えてきた内容で進めて大丈夫でしょうか…?

今まで進めてきたのは有効期限があったり、直接接触画面を表示したり、と今回の仕様と合わないことがあるので一旦中断し、仕様を整理したほうが良いと思います。
コメントを書く(引用) | スレッド一覧


1829● Re[9]:タイムリミットボスの導入[ YOUME ] 2014 11/18 09:43
> 今まで進めてきたのは有効期限があったり、直接接触画面を表示したり、と今回の仕様と合わないことがあるので一旦中断し、仕様を整理したほうが良いと思います。
了解です!
いつもお手数をおかけして申し訳ないです…
でも助かります!長くなってしまうかもしれないのですが、宜しくお願いします!


> すでに自分を含む誰かがボスと遭遇して出現済みになっている場合にもメッセージを出すのでしょうか、それともその場合は別の何かを行うのでしょうか?

すでに自分を含む誰かがボスと遭遇して出現済みになっている場合は、何もメッセージを出さなくていいかなと思っています。


> > -------------------
> > 【ボス画像】
> > 【!】タイムボス出現中【!】
> > >>ボスと戦う!<<
> > -------------------
> この表示を出すのは探索でボスに遭遇したプレイヤーだけでしょうか、それとも一度誰かが遭遇した場合はすべてのプレイヤーに表示するのでしょうか?

一度誰かが遭遇した場合は、すべてのプレイヤーに表示したいと思っています。


> > 「>>ボスと戦う!<<」をクリックすると戦闘画面
> > (プレイヤーと接触したような画面でいいかも?)
> > に切り替わるようにできたらなと・・
> この部分もデータファイルの扱いに影響してくるので、既存の接触画面を使用するのか別の画面を使用するのか、を決めてしまったほうが良いです。
> あと、戦闘処理はsub fightを使用するのでしょうか、それとも別の処理で行うのでしょうか?

できれば難易度が低い方をとか思いつつ…
どっちのほうが簡単なのか分からず;
既存の接触画面を使用する方が難易度が低ければ、それでいきたいと考えています。

戦闘処理はsub fightを使いたいです…!
コメントを書く(引用) | スレッド一覧


1830● Re[10]:タイムリミットボスの導入[ moon ] 2014 11/18 19:54
> できれば難易度が低い方をとか思いつつ…
> どっちのほうが簡単なのか分からず;
> 既存の接触画面を使用する方が難易度が低ければ、それでいきたいと考えています。

既存の画面を使用したほうが簡単だと思います。

処理の仕様の概要はわかりました。
次にデータファイルの形式を決めましょうか。
今回の仕様では参加者だけが保存されていれば良いので、以下の形式が良いのではないかと思います。
---- ここから ----
ID1<>名前1<>パスワード1<>
ID2<>名前2<>パスワード2<>



IDn<>名前n<>パスワードn<>

----ここまで ----

そして、ボスのHPなどは通常のユーザーデータファイルと同じファイルを使用するのが簡単だと思います。
この場合、ボスであることを示すものが必要になりますので決める必要があります。(例えば、スキル'-TIME BOSS-')

上記のファイル形式やスキルは例として書いただけですので適宜お好きなように決めてください。
決まりましたら探索処理を以下のように修正してみてください。
1. ボスの出現判定(「-TRAP_BOSS-」のタイミングでボスのユーザーデータファイルが存在しないかどうか)
2. 出現判定を満たしていた場合はボスのユーザーデータファイルを作成、および、必要に応じて参加者のクリア
コメントを書く(引用) | スレッド一覧


1831● Re[11]:タイムリミットボスの導入[ YOUME ] 2014 11/19 11:04
いつもご教授ありがとうございます!

> 今回の仕様では参加者だけが保存されていれば良いので、以下の形式が良いのではないかと思います。
> ---- ここから ----
> ID1<>名前1<>パスワード1<>
> ID2<>名前2<>パスワード2<>

了解しました!


> そして、ボスのHPなどは通常のユーザーデータファイルと同じファイルを使用するのが簡単だと思います。
> この場合、ボスであることを示すものが必要になりますので決める必要があります。(例えば、スキル'-TIME BOSS-')

了解です!-TIME_BOSS-でやってみようかなと思います。

そして…

> 決まりましたら探索処理を以下のように修正してみてください。

> 1. ボスの出現判定(「-TRAP_BOSS-」のタイミングでボスのユーザーデータファイルが存在しないかどうか)
> 2. 出現判定を満たしていた場合はボスのユーザーデータファイルを作成、および、必要に応じて参加者のクリア

恥ずかしながら、どうすればいいのか全く分かりませんでした…
似たような処理を探したものの、なんか違うのばかりで…
以下が現状になります;
----------------------------
if ($idt =~ /-TRAP_BOSS-/)
{

#ボスのユーザーデータファイルが存在しないかどうか

#出現判定を満たしていた場合はボスのユーザーデータファイルを作成、

$line = join('<>',$id,'$nm','$ps',"\n"); #ID1<>名前1<>パスワード1<>
&writedat("timeboss.dat",$line);

#必要に応じて参加者のクリア

    open(TBOSS, "timeboss.dat");#timeboss.datを開く
    $data = <TBOSS>;#timeboss.datを読む
    close(TBOSS);#timeboss.datを閉じる

    push (@msg,"タイムリミットボス$inmが現れた!");
    $Fm{'pd'} = 'TIB'; #$Fm{'pd'}にボスのIDをセットする

    $timeboss = 1;#変数を用意してフラグを立てる。
}
----------------------------

#ボスのユーザーデータファイルが存在しないかどうか

ifで作るのかなと思ったのはいいのですが、ボスのユーザーファイルをどう判別すればいいのか分かりませんでした…

#出現判定を満たしていた場合はボスのユーザーデータファイルを作成、

ボスのデータをどう作成すればいいのか分からず…

$line = join('<>',$id,'$nm','$ps',"\n"); #ID1<>名前1<>パスワード1<>
&writedat("timeboss.dat",$line);
↑倉庫作成時の記述を参考に書いては見たのですが、全く違う感が…本当にすみません……

#必要に応じて参加者のクリア
これも似たような記述を探したものの、よくわからず…

いつも聞いてばかりで申し訳ないです…
コメントを書く(引用) | スレッド一覧


1832● Re[12]:タイムリミットボスの導入[ moon ] 2014 11/19 18:55
> #ボスのユーザーデータファイルが存在しないかどうか
>
> ifで作るのかなと思ったのはいいのですが、ボスのユーザーファイルをどう判別すればいいのか分かりませんでした…

ここでいうボスのユーザーデータファイルは他のプレイヤーのユーザーデータファイルと同じものを指しています。
ですので、ボスに専用のIDを割り当ててファイルを作ることになります。
ということで、ファイルが存在するかどうかはmake_new.plの「while (-e "$usrdir$id\.dat")」の部分を参考にすればチェックできると思います。

> #出現判定を満たしていた場合はボスのユーザーデータファイルを作成、
>
> ボスのデータをどう作成すればいいのか分からず…

作成処理はmake_new.plの「$line = join('<>', 〜);」から「chmod(〜);」までの部分をコピーしてきて修正すれば良いです。

> #必要に応じて参加者のクリア
> これも似たような記述を探したものの、よくわからず…

これは単純に空ファイルにするということです。
「&writedat('timeboss.dat');」とでもすれば空ファイルになるはずです。
コメントを書く(引用) | スレッド一覧

CGIROOM