SRC質問掲示板Mk2
(現在 過去ログ131 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■22557 / inTopicNo.1)  ユニットの現在の状態を次のシナリオに引き継ぐには?
  
□投稿者/ Shun -(2011/11/28(Mon) 18:30:08) [ID:fBGRLrAe]
     インターミッションを間に挟んで前後編とするシナリオを考えています。
    大まかな作りとしましては、以下のような感じです。

    1.インターミッションを間に挟む
       前編シナリオで『アイテム交換』と『乗り換え』のOptionの削除と、『改造不可』のOptionを設定し、
       インターミッションではデータセーブしか出来ないようにする。
       (つまりユニットをいじれないようにする)

    2.前編終了時点のユニットの状態を後編シナリオで引き継がせる
       ユニット能力なら、HPやEN、武器の弾数を、
       パイロット能力なら、SPや気力を、
       前編クリア時点での数値のまま後編に移る。

     この内2番目の、後編シナリオに入る際に
    前編終了時のユニットの各種能力値を引き継ぐ方法が分からず困っています。
    何か良い方法がありますでしょうか?

引用返信/返信 削除キー/
■22558 / inTopicNo.2)  Re[1]: ユニットの現在の状態を次のシナリオに引き継ぐには?
□投稿者/ かせうか -(2011/11/28(Mon) 19:41:33) [ID:QmeARn9b]
http://fesrc.blog.fc2.com/
    2011/11/28(Mon) 22:54:26 編集(投稿者)

    こんにちは。FESRCのかせうかです。

    武器弾数以外は、前編シナリオのエピローグで配列変数(前編HP[ユニットID])にそれぞれの値を保存し、後編シナリオのプロローグまたはスタートイベントで、前編と同じ値になるようにそれぞれ設定する事で引き継げます。

    (気力なら「IncreaseMorale 対象ユニットID (前編気力[対象ユニットID] - 100)」といった具合)

    武器弾数については、インターミッションでアイテムを交換しないという前提であれば、こちらは配列変数にリスト形式で弾数を保存して引き継げます。武器番号がインターミッションの前後で変化しないからです。

    For i = 1 To Info(対象ユニットID, 武器数)
    Set 前編弾数[対象ユニットID] (前編弾数[対象ユニットID] & Info(対象ユニットID, 武器, i, 弾数) & " ")
    Next

    といった具合。後は後編で、リスト処理関数を用いてこれを読み込み、SetBulletすればOKです。

    参考になれば幸いです。それではー
引用返信/返信 削除キー/
■22559 / inTopicNo.3)  Re[2]: ユニットの現在の状態を次のシナリオに引き継ぐには?
□投稿者/ Shun -(2011/11/30(Wed) 15:31:56) [ID:fBGRLrAe]
    ありがとうございます。
    配列変数についてなのですが、ヘルプも参照してみましたが、
    まだ詳しく分からず、うまく作動しないので
    出来れば、Eveファイルに記載する際の具体例なども教えて頂けたらと思います。

引用返信/返信 削除キー/
■22560 / inTopicNo.4)  Re[3]: ユニットの現在の状態を次のシナリオに引き継ぐには?
□投稿者/ Shun -(2011/11/30(Wed) 20:22:34) [ID:fBGRLrAe]
    No22559に返信(Shunさんの記事)
    > ありがとうございます。
    > 配列変数についてなのですが、ヘルプも参照してみましたが、
    > まだ詳しく分からず、うまく作動しないので
    > 出来れば、Eveファイルに記載する際の具体例なども教えて頂けたらと思います。
    >

    追記です。具体的に分からない点は、
    前編クリア時点での各種能力値の取得、保存の仕方です。
    この辺りの記述がよく分からないのでよろしくお願いします。
引用返信/返信 削除キー/
■22561 / inTopicNo.5)  Re[4]: ユニットの現在の状態を次のシナリオに引き継ぐには?
□投稿者/ かせうか -(2011/11/30(Wed) 23:55:23) [ID:QmeARn9b]
http://fesrc.blog.fc2.com/
    こんばんは。

    前編シナリオのエピローグで情報を取得、保存します。

    まず、それぞれの情報は次の関数で得られます。
    HP ‥ HP(ユニット名)
    EN ‥ EN(ユニット名)
    弾数‥ Info(ユニット名, 武器, 武器番号, 弾数)

    SP ‥ SP(パイロット名)
    気力‥ Morale(パイロット名)

    情報を保存するための変数を用意します。
    通常の変数はステージ切り替わり時に失われるので、Globalを用い、グローバル変数を作成します。
    Global 前編HP
    Global 前編EN
    Global 前編弾数
    Global 前編SP
    Global 前編気力

    出撃中(含む戦艦等に格納中)のユニット全部の情報を取得します。
    ForEachコマンドを使います。

    ForEach 味方
    Set 前編HP[対象パイロット] HP(対象パイロット)
    Set 前編EN[対象パイロット] EN(対象パイロット)

    #弾数
    For i = 1 To Info(対象ユニットID, 武器数)
    Set 前編弾数[対象パイロット] (前編弾数[対象パイロット] & Info(対象ユニットID, 武器, i, 弾数) & " ")
    Next

    Set 前編SP[対象パイロット] SP(対象パイロット)
    Set 前編気力[対象パイロット] Morale(対象パイロット)
    Next


    これで出撃中の味方全機の情報が保存されます。
    あとは後編シナリオのプロローグで、今度は逆にこの値から、各機のステータスを設定していきます。
    弾数についてはリスト形式になっているので、リスト処理関数が有効です。

    それぞれのコマンドや関数の動作についてはヘルプを参考にしてください。
    応用で後編シナリオ側の処理も記述できます。

    それでは、参考になれば幸いです。また!
引用返信/返信 削除キー/
■22563 / inTopicNo.6)  Re[5]: ユニットの現在の状態を次のシナリオに引き継ぐには?
□投稿者/ Shun -(2011/12/01(Thu) 03:33:20) [ID:fBGRLrAe]

    後編シナリオにおいて以下のように修正し、
    HP、EN、気力、SPは前編の状態を引き継ぐことができました。

    ForEach 味方 出撃
    HP(対象パイロット) = HP(対象パイロット) - (HP(対象パイロット) - 前編HP[対象パイロット])
    EN(対象パイロット) = EN(対象パイロット) - (EN(対象パイロット) - 前編EN[対象パイロット])
    SP(対象パイロット) = SP(対象パイロット) - (SP(対象パイロット) - 前編SP[対象パイロット])
    IncreaseMorale (前編気力[対象パイロット] - 100)

    Next

    しかし、武器の弾数がまだうまく引き継げていないようです。
    その際に失敗したパターンを紹介します。

    For i = 1 To Info(対象ユニットID, 武器, 番号)
    SetBullet 対象パイロット i 前編弾数[対象パイロット]
    Next

    上記の記述では、"i" を武器の番号にして、
    SetBulletコマンドで武器番号を取得しようとしたのですが、
    これだと前編の状態を引き継ぎませんでした。

    どこに不具合の原因があるかご指摘をお願いします。


引用返信/返信 削除キー/
■22564 / inTopicNo.7)  Re[6]: ユニットの現在の状態を次のシナリオに引き継ぐには?
□投稿者/ かせうか -(2011/12/01(Thu) 09:05:15) [ID:QmeARn9b]
http://fesrc.blog.fc2.com/
    おはようございます。

    For i = 1 To Info(対象ユニットID, 武器, 番号)
    SetBullet 対象パイロット i 前編弾数[対象パイロット]
    Next

    Forコマンドは i が [Toの右側の値] になるまで繰り返す、というコマンドなので、ここでは i が Info(対象ユニットID, 武器, 番号) になるまで繰り返すという処理になります。

    しかし、ここでヘルプのInfo関数の項を見てみると、「武器, 番号」が返すのは、その番号の武器の名称となっている(*)ので、i は文字列とは比べられないため、Forコマンドはすぐに終了し、次に進みます。

    (*「そのユニットの○番目の武器の名前を知りたい!」という時に使います)

    武器一つ一つに弾数を設定するために、Toの右側には Info(対象ユニットID, 武器数) を指定します。

    For i = 1 To Info(対象ユニットID, 武器数)
    SetBullet 対象パイロット i 前編弾数[対象パイロット]
    Next



    さらに、前編で保存した 前編弾数[対象パイロット] の中身は、リスト形式になっています。
    SRCにおけるリスト形式とは、例えば次のような文字列の事です。
    "40 38 74 92 10 2 7 20 35"

    半角スペースで区切って、複数のデータを一緒くたにしています。
    一つの変数の中に、複数のデータを保存できるので便利です。

    ちなみに、今回の場合、前編では

    #弾数
    For i = 1 To Info(対象ユニットID, 武器数)
    Set 前編弾数[対象パイロット] (前編弾数[対象パイロット] & Info(対象ユニットID, 武器, i, 弾数) & " ")
    Next

    このように、「現在の 前編弾数[対象パイロット] に 武器番号iの弾数 と " " を付け足す」ようにして、武器全部分の弾数を保存しています。

    なので、変数 前編弾数[対象パイロット] の中身は
    "武器1の弾数 武器2の弾数 武器3の弾数 ..."
    といった感じです。



    リストについては大丈夫でしょうか。

    SRCには「リストの○番目の要素(値)を得る」関数が用意されているので

    For i = 1 To Info(対象ユニットID, 武器数)
    #空欄〜〜〜〜を埋めて!
    SetBullet 対象パイロット i 〜〜〜〜
    Next

    ヘルプを片手に、空欄を埋めて頂ければ、残弾数が設定できます。



    ‥といった具合です。硬い文章を書くとめまいがします( =ω=)
    参考になれば幸いでっす。でわ!
引用返信/返信 削除キー/
■22565 / inTopicNo.8)  Re[7]: ユニットの現在の状態を次のシナリオに引き継ぐには?
□投稿者/ Shun -(2011/12/02(Fri) 00:31:59) [ID:fBGRLrAe]
    > リストについては大丈夫でしょうか。
    >
    > SRCには「リストの○番目の要素(値)を得る」関数が用意されているので
    >
    > For i = 1 To Info(対象ユニットID, 武器数)
    > #空欄〜〜〜〜を埋めて!
    > SetBullet 対象パイロット i 〜〜〜〜
    > Next
    >
    上記を参考に次のように修正しましたが、まだ正しく機能しないようです。

    For i = 1 To Info(対象ユニットID, 武器数)
    SetBullet 対象パイロット i LIndex("前編弾数[対象パイロット]" i)
    Next

    リスト処理関数の項目をヘルプで調べてみたところ、
    『「リストの○番目の要素(値)を得る」関数』に当てはまるのが
    『リスト中の指定した位置の要素を返します』と記してあるLIndexではないかと解釈し、それを用いてみましたが、
    上記の表記だと前編弾数[対象パイロット]内の数値を武器番号に該当する"i"で読み込むはずなのですが、
    弾数は全て0になってしまい、引き継ぎが行われませんでした。

    ちなみに、次のようにシステムメッセージを入れて変数や関数を取得しているかどうかを確認してみました。

    For i = 1 To Info(対象ユニットID, 武器数)
    SetBullet 対象パイロット i LIndex("前編弾数[対象パイロット]" i)
    Talk システム
    $(対象パイロット)の$(i)番目の武器の弾数を$(LIndex("前編弾数[対象パイロット]" i))にした。
    End
    Next

    例えば、"i"が"1"なら
    『$(対象パイロット)の1番目の武器の弾数をにした。』
    という風に"対象パイロット"と武器番号に該当する"i"は取得し、残弾数は取得できませんでした。
    このことから、上記の記述だと、
    SetBullet 対象パイロット i LIndex("前編弾数[対象パイロット]" i)が
    SetBullet 対象パイロット i LIndex("武器1の弾数 武器2の弾数 武器3の弾数 ..." i)と同じと仮定して、
    SetBulletの"i"が一番目の武器なら、LIndex内の"i"が武器1の弾数に当てはまり、
    その弾数になるのではないかと理論づけられると思います。

    長々と書いてしまいましたが、
    『前編弾数[対象パイロット]』をリスト処理関数でどう記すかが分からず、
    その方法が分かれば理論通りに作動すると思います。
    もしかしたら使用した関数がそもそも間違ってるかもしれませんが、
    いずれにせよ、どこか問題点があればご指摘をお願いします。

引用返信/返信 削除キー/
■22566 / inTopicNo.9)  Re[8]: ユニットの現在の状態を次のシナリオに引き継ぐには?
□投稿者/ 中箱 -(2011/12/02(Fri) 01:24:44) [ID:XAPi9INn]
    横から失礼



    >SetBullet 対象パイロット i LIndex("前編弾数[対象パイロット]" i)

    ""で囲まれた内部は基本的に文字列として扱われます。変数名や配列要素名を書いても式置換は行われません。(ヘルプの「式」項に説明があります)

    変数や配列要素の値を利用したい場合には、""で囲まないか、""で囲んだ上でさらに$()で囲む必要があります。
    例えば、
     Set あいえうお 12345
     Set 愛上夫 "あいえうお"
     Talk
     $(愛上夫)
     End
    を実行した場合、表示されるのは「12345」ではなく、「あいえうお」となります。

    (Set 愛上夫 "$(あいえうお)" や Set 愛上夫 あいえうお であれば「12345」が表示されます)


    あと、LIndex関数のリストと位置の区切りを表す「,」がありませんね。
引用返信/返信 削除キー/
■22568 / inTopicNo.10)  Re[9]: ユニットの現在の状態を次のシナリオに引き継ぐには?
□投稿者/ Shun -(2011/12/02(Fri) 21:08:49) [ID:fBGRLrAe]

    なるほど、""で囲まず、そのまま入れれば良かったのですね。
    それを踏まえ、弾数に関しては最終的に次のように修正しました。

    For i = 1 To Info(対象ユニットID, 武器数)
    SetBullet 対象パイロット i LIndex(前編弾数[対象パイロット],i)
    Next

    これで武器の弾数も前編から引き継ぐようになり、
    ようやくすべてのパラメーターを引き継がせることができました。
    かせうかさんに中箱さん、どうもありがとうございました。
解決済み!
引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -