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

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

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

■22703 / inTopicNo.1)  支援会話の実装には・・・
  
□投稿者/ スフィルナ -(2012/09/30(Sun) 11:35:17) [ID:cREjEhbn]
    FE蒼炎や新・紋章の謎のように同時出撃で支援を深めていく方式はどうすればいいでしょうか?
    インターミッションコマンドで支援会話が出来るようにしたいのですが・・・
引用返信/返信 削除キー/
■22704 / inTopicNo.2)  Re[1]: 支援会話の実装には・・・
□投稿者/ かせうか -(2012/09/30(Sun) 14:37:03) [ID:gHafduRU]
http://fesrc.blog.fc2.com/
    2012/09/30(Sun) 14:51:00 編集(投稿者)
    2012/09/30(Sun) 14:39:51 編集(投稿者)

    こんにちは!

    ちょっと煩雑ですが、次のような手順でいかがでしょうか。

    まず大まかにやりたい事を要約すると、次のようになります。
    1.支援の値は信頼度で保存する
    2.信頼度が一定になる毎に、支援会話が発生するようにする


    次が手順のイメージです。
    下の方に実装の要約を書いているので、先に読んでもらってもわかりやすいかもしれません。

    1.支援相手[パイロット名] というGlobal変数を用意する。
      変数の中身には、リスト形式で支援相手の名前を保存する。
      例)Global 支援相手
        Set 支援相手[マカロフ] "ステラ ハール ユリシーズ"

    2.信頼度を加算するのに便利な、次のようなサブルーチンを作る。

    信頼度加算:
    Local p1 = Args(1)//パイロットその1
    Local p2 = Args(2)//パイロットその2
    Local num = Atgs(3)//増加する量

    #信頼度の百の位を保存
    Local before = (Relation(p1,p2) \ 100)

    #信頼度が100の倍数でなければ加算
    If Not (Relation(p1,p2) Mod 100) = 0 Then
    SetRelation p1 p2 (Relation(p1,p2) + num)
    SetRelation p2 p1 Relation(p1,p2)
    #百の位が繰り上がったら、信頼度がちょうど100の倍数になるように調整
    Local after = (Relation(p1,p2) \ 100)
    If before < after Then
    SetRelation p1 p2 (Relation(p1,p2) - Relation(p1,p2) Mod 100)
    SetRelation p2 p1 Relation(p1,p2)
    EndIf
    EndIf
    Return

      信頼度が100の倍数だったら加算しないようにしているのがミソです。
      理由は後述します。

    3.支援会話をする部分を作成します。
      実際の記述に関しては割愛しているので、ご不明な事があれば適宜ご連絡下さい。
    3−1.加入している全パイロットから、支援会話を行いたいパイロットを選択します。
    3−2.選択したパイロットの「支援相手[パイロット名]」変数を参照し、既に加入していて、なおかつ支援会話が可能な相手だけを選択肢に表示し、選択する。
        ここで「支援会話が可能」とは、信頼度が100,200,300,400...(100の倍数)となっている状態を指す。
    3−3.選択後、会話を表示する。
    3−4.信頼度を加算する。ここで加算する量は、例えば、次の支援会話は信頼度が40増加した時にしたいなら、60を加算する。(100 - 必要な信頼度)
        例)SetRelation ステラ マカロフ (Relation(ステラ,マカロフ) + 60)
          SetRelation マカロフ ステラ Relation(ステラ,マカロフ)


    実装を要約すると、
    1.信頼度は100の倍数ではない時に加算される
    2.信頼度が100の倍数になった時に会話可能になる
    3.会話をしたら信頼度が100の倍数ではなくなり、また加算できるようになる
    というものになります。

    味方が加入する時に、上記3−4と同じようにして、最初の支援会話に必要な信頼度をSetRelationで設定するようご注意下さい。
    例)(30増加で支援会話ができるようにしたい場合)
      SetRelation ステラ マカロフ 70
      SetRelation マカロフ ステラ 70

    同時出撃時に信頼度を加算する時などは、2で作成したサブルーチンをご利用下さい。

    支援レベルの表示の仕方等はひとまず置いておいて、動きはこれで良いんじゃないかな?というのを書いてみました。
    参考になれば幸いです
引用返信/返信 削除キー/
■22705 / inTopicNo.3)  まだ解決せず・・・
□投稿者/ スフィルナ -(2012/10/02(Tue) 23:10:04) [ID:cREjEhbn]
    2012/10/03(Wed) 18:03:16 編集(投稿者)

    えぇ、詳しい記述をありがとうございます。
    後はこれをインクルードにぶち込んで、ロードして・・・

    蒼炎の場合だとインターミッションで支援をおこなうので、

    If Relation(ステラ,マカロフ)≦100
    って感じで支援会話を書けばいいのでしょうか?


引用返信/返信 削除キー/
■22706 / inTopicNo.4)  Re[3]: まだ解決せず・・・
□投稿者/ ラー -(2012/10/05(Fri) 01:31:27) [ID:RyW6chLU]
    横から失礼します。
    FEシリーズはほとんどプレイしたことがなく、支援会話って何だっけ状態の私が考えた内容なので、まるで見当違いだったら申し訳ありません。

    私なりに考えてみた方法です。
    まず同時に出撃することで信頼度が上がる処理ですが、
    以下の内容をInclude.eve辺りにコピペして、Callで呼び出してください。

    信頼度加算:
    Global 信頼度
    Local i
    Local 味方リスト
    ForEach 味方 出撃
    Incr i
    Set 味方リスト[i] PilotID()
    Next
    ForEach 味方 出撃
    For i = 1 To Count(味方リスト)
    If PilotID() = 味方リスト[i] Then
    Skip
    EndIf
    Incr 信頼度[PilotID(), 味方リスト[i]]
    Next
    Next
    Return

    呼び出された段階で、マップ上にいる味方同士の信頼度が1上がります。
    スタートイベントなどのOrganizeやLauchコマンドの後に実行してください。
    ちなみに、信頼度という変数を操作しているだけなので、SetRelationは使っていません。必要なら書き加えてください。

    次にインターミッションから支援会話を発生させるためのファイルを追加します。
    とりあえず、Libというフォルダを作ってそこに支援会話.eveという名前で作るとします。
    そのあと、シナリオのプロローグイベントに以下の記述を加えて読み込んでください。

    IntermissionCommand 支援会話 Lib\支援会話.eve

    支援会話.eveの内容は以下のようにします。
    パイロットAとかパイロットBとかは適当にシナリオのパイロット名に書き換えてください。

    プロローグ:
    Global 支援会話回数
    Local 支援会話リスト

    If (信頼度[パイロットA, パイロットB] >= 1) And (支援会話回数[パイロットA, パイロットB] = 0) Then
    If (Status(パイロットA) = 待機) And (Status(パイロットB) = 待機) Then
    Set 支援会話リスト[1] "パイロットAとパイロットBの支援会話1"
    EndIf
    EndIf
    If (信頼度[パイロットA, パイロットB] >= 2) And (支援会話回数[パイロットA, パイロットB] = 1) Then
    If (Status(パイロットA) = 待機) And (Status(パイロットB) = 待機) Then
    Set 支援会話リスト[2] "パイロットAとパイロットBの支援会話2"
    EndIf
    EndIf
    If (信頼度[パイロットA, パイロットB] >= 3) And (支援会話回数[パイロットA, パイロットB] = 2) Then
    If (Status(パイロットA) = 待機) And (Status(パイロットB) = 待機) Then
    Set 支援会話リスト[3] "パイロットAとパイロットBの支援会話3"
    EndIf
    EndIf
    If (信頼度[パイロットA, パイロットC] >= 1) And (支援会話回数[パイロットA, パイロットC] = 0) Then
    If (Status(パイロットA) = 待機) And (Status(パイロットC) = 待機) Then
    Set 支援会話リスト[4] "パイロットAとパイロットCの支援会話1"
    EndIf
    EndIf
    If (信頼度[パイロットA, パイロットC] >= 2) And (支援会話回数[パイロットA, パイロットC] = 1) Then
    If (Status(パイロットA) = 待機) And (Status(パイロットC) = 待機) Then
    Set 支援会話リスト[5] "パイロットAとパイロットCの支援会話2"
    EndIf
    EndIf
    If (信頼度[パイロットA, パイロットC] >= 3) And (支援会話回数[パイロットA, パイロットC] = 2) Then
    If (Status(パイロットA) = 待機) And (Status(パイロットC) = 待機) Then
    Set 支援会話リスト[6] "パイロットAとパイロットCの支援会話3"
    EndIf
    EndIf

    Ask 支援会話リスト 選択してください キャンセル可

    Switch 選択
    Case 1
    Talk
    (パイロットAとパイロットBの1回目の支援会話の内容)
    End
    //会話した回数を増加させておく
    Incr 支援会話回数[パイロットA, パイロットB]
    Case 2
    Talk
    (パイロットAとパイロットBの2回目の支援会話の内容)
    End
    Incr 支援会話回数[パイロットA, パイロットB]
    Case 3
    Talk
    (パイロットAとパイロットBの3回目の支援会話の内容)
    End
    Incr 支援会話回数[パイロットA, パイロットB]
    Case 4
    Talk
    (パイロットAとパイロットCの1回目の支援会話の内容)
    End
    Incr 支援会話回数[パイロットA, パイロットC]
    Case 5
    Talk
    (パイロットAとパイロットCの2回目の支援会話の内容)
    End
    Incr 支援会話回数[パイロットA, パイロットC]
    Case 6
    Talk
    (パイロットAとパイロットCの3回目の支援会話の内容)
    End
    Incr 支援会話回数[パイロットA, パイロットC]
    EndSw

    If Count(支援会話リスト) = 0 Then
    Talk システム
    支援会話が可能なキャラクターがいません
    End
    EndIf

    //インターミッションに戻る
    Continue

    長い上にごちゃごちゃしてて分かりにくいと思いますが、
    ざっと解説しますと、上の方のIfの分岐の塊は支援会話が発生するかの判定を行っています。
    例えば、上の方にあるこの部分ですが……

    If (信頼度[パイロットA, パイロットB] >= 1) And (支援会話回数[パイロットA, パイロットB] = 0) Then
    If (Status(パイロットA) = 待機) And (Status(パイロットB) = 待機) Then
    Set 支援会話リスト[1] "パイロットAとパイロットBの支援会話1"
    EndIf
    EndIf

    これはまず、パイロットAとパイロットBの信頼度が1以上であること、
    そしてパイロットAとパイロットBの支援会話の回数がまだ0であること、
    さらにパイロットA、Bが共に待機状態であること(離脱していないこと)を判定しています。
    これらの条件を全て満たした時に、支援会話リスト[1]という変数を作成します。
    他のIf分岐も同様の仕組みになっています。
    ここで作成された変数が、真ん中辺りのAskで選択肢として表示され、
    最後にどの選択肢を選んだかでSwitchの分岐に繋がります。

    もし、さらに支援会話のパターンを追加するなら、
    同じようにIfの分岐を追加し、支援会話リスト[7]や支援会話リスト[8]という感じに
    続き番号で変数を作成し、Switch分岐でCase 7、Case 8と対応した内容を記述してください。

    ごめんなさい、かなり分かりにくいと思うので、上記と同じ内容のサンプルを用意してみました。良かったら参考にしてください。

    http://www1.axfc.net/uploader/Sc/so/383313.zip&key=SRCTEST


引用返信/返信 削除キー/
■22707 / inTopicNo.5)  Re[3]: まだ解決せず・・・
□投稿者/ かせうか -(2012/10/05(Fri) 10:30:26) [ID:MtWAG9ZO]
http://fesrc.blog.fc2.com/
    2012/10/05(Fri) 11:01:38 編集(投稿者)
    2012/10/05(Fri) 10:49:07 編集(投稿者)
    2012/10/05(Fri) 10:34:05 編集(投稿者)

    おはようございます。お返事遅れました(汗々

    >If Relation(ステラ,マカロフ)≦100
    >って感じで支援会話を書けばいいのでしょうか?
    会話の部分ですよね。
    ここは私も頭を捻っていますが、次の方法などいかがでしょうか。

    *プレイヤーが選択したパイロット名は、それぞれLocal変数 p1 p2 に入っているとします。

    1.次のように記述し、会話の入ったラベルを呼び出します。

    Call("支援会話_" & p1 & "_" & p2)

    ここちょっと自信がないです(Callの中に式は書けたかしら)。ともあれ


    2.会話を次のように、ラベルにまとめて書きます。

    支援会話_ステラ_マカロフ:
    支援会話_マカロフ_ステラ:
    Switch Relation(ステラ,マカロフ)
    Case 100
    #最初の支援会話の内容

    Case 200
    #2番目の支援会話の内容

    #以降同じように支援会話の数だけ記述
    EndSw
    Return


    以上です。

    Call("支援会話_" & p1 & "_" & p2)
    これさえ通れば、比較的簡単に会話を指定&記述できるかもしれません。

    ご不明があれば、なんでも聞いてくださいな(。・ω・)ノ"
引用返信/返信 削除キー/
■22708 / inTopicNo.6)  これでなんとか・・・
□投稿者/ スフィルナ -(2012/10/08(Mon) 01:54:49) [ID:cREjEhbn]
    2012/10/11(Thu) 02:07:49 編集(投稿者)
    2012/10/08(Mon) 02:06:02 編集(投稿者)

    ラーさん、かせうかさん感謝します。
    ラーさんのやり方だと多分隣に居ないとダメな方式・・・ですか?

    あとかせうかさん。
    Local p1 = Args(1)//パイロットその1
    Local p2 = Args(2)//パイロットその2
    Local num = Atgs(3)//増加する量
    と有りますがこのargsの部分を書き換えてそれぞれにセットすればいいのでしょうか?
    それとも、サブルーチンとグローバル変数のみで稼動しますか?

    Call("支援会話_" & p1 & "_" & p2)
    通らなかった;;
引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -