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

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

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

■21683 / inTopicNo.1)  所持数が0個の時は表示しない
  
□投稿者/ ホカロン -(2009/08/14(Fri) 02:21:48) [ID:OoV3qdwy]
    食べ物系のアイテムを持っていた時にマップコマンドで『食べる』を選択すると何を食べるのか選択肢が現れ、選ぶと効果を発揮する。

    …と、言うものを作りたいです。

    で、質問の過去ログを見てここまで出来ました↓↓

     ForEach 味方 全て
      For i = 1 To CountItem(対象ユニット)
       Incr アイテムの数[Item(対象ユニット,i)]
      Next
     Next
     For i = 1 To CountItem(未装備)
      Incr アイテムの数[Item(未装備,i)]
     Next

    Ask 何を食べる?
    チョココロネ    所持数 $(アイテムの数[チョココロネ])
    メロンパン     所持数 $(アイテムの数[メロンパン])
    コーラ       所持数 $(アイテムの数[コーラ])
    End

    Switch 選択
    〜〜ここから効果の処理

    ↑↑

    ですが、
    これだとコーラを一本も持ってないときもコーラ所持数0と表示されてしまいますので、そのアイテムを持ってない時は選択肢にも出ない。

    と、言う風にしたいのですが、どのようにしたら宜しいでしょうか?
引用返信/返信 削除キー/
■21685 / inTopicNo.2)  Re[1]: 所持数が0個の時は表示しない
□投稿者/ 山水 -(2009/08/14(Fri) 10:44:11) [ID:977nvH1R]
    Askコマンドの前に、選択肢をSetする形はどうでしょうか?
    Askコマンドの使用法の中に、選択用の配列名を指定するパターンがあります。
    詳しくはヘルプのAskコマンド、書式2を確認下さい。

    その配列の準備として、

    If アイテムの数[チョココロネ] > 0 Then
    Set 使用アイテム選択[チョココロネ 所持数 $(アイテムの数[チョココロネ])] チョココロネ使用
    EndIf
    If アイテムの数[メロンパン] > 0 Then

    ・(この間に食べる可能性のあるアイテム全ての判定を入れる)

    EndIf

    のようにして、

    Set 配列名[選択肢の名前] 選択肢選択後の判定用の値

    で個数が1以上のものを全て配列に記憶します。
    これならIfにより0のものは弾かれますね。
    その後、

    Ask 配列名 表示される文章

    で記録した質問を出せますので、

    Ask 使用アイテム選択 何を食べる?
    Switch 選択
    Case チョココロネ使用
    〜〜チョココロネ使用時の効果の処理
    Case メロンパン使用

    ・(以下同様)

    EndSw

    のようにCaseコマンドの条件をSet時に指定した判定用の値にすれば解決しないでしょうか?

    自分のシナリオの記述を参考にざっと書いたものなので、不備やミスがあるかもしれませんが、試してみていただけたら幸いです。
    それでは。
引用返信/返信 削除キー/
■21694 / inTopicNo.3)  Re[2]: 所持数が0個の時は表示しない
□投稿者/ ホカロン -(2009/08/18(Tue) 16:41:58) [ID:OoV3qdwy]
    ユニットコマンド 食べる 味方:

    If 対象パイロット = 主人公 Then
    この方 = 主人公
    EndIf

    If 対象パイロット = 味方1 Then
    この方 = 味方1
    EndIf

    If 対象パイロット = 味方2 Then
    この方 = 味方2
    EndIf

     ForEach 味方 全て
      For i = 1 To CountItem(対象ユニット)
       Incr アイテムの数[Item(対象ユニット,i)]
      Next
     Next
     For i = 1 To CountItem(未装備)
      Incr アイテムの数[Item(未装備,i)]
     Next

    If アイテムの数[チョココロネ] > 0 Then
    Set 使用アイテム選択[チョココロネ使用] チョココロネ使用・所持数$(アイテムの数[チョココロネ])
    EndIf
    If アイテムの数[メロンパン] > 0 Then
    Set 使用アイテム選択[メロンパン使用] メロンパン使用・所持数$(アイテムの数[メロンパン])
    EndIf
    If アイテムの数[焼きそばパン] > 0 Then
    Set 使用アイテム選択[焼きそばパン使用] 焼きそばパン使用・所持数$(アイテムの数[焼きそばパン])
    EndIf
    If アイテムの数[オレンジジュース] > 0 Then
    Set 使用アイテム選択[オレンジジュース使用] オレンジジュース使用・所持数$(アイテムの数[オレンジジュース])
    EndIf
    If アイテムの数[ヤクルト] > 0 Then
    Set 使用アイテム選択[ヤクルト使用] ヤクルト使用・所持数$(アイテムの数[ヤクルト])
    EndIf
    If アイテムの数[青汁] > 0 Then
    Set 使用アイテム選択[青汁使用] 青汁使用・所持数$(アイテムの数[青汁])
    EndIf
    If アイテムの数[コーラ] > 0 Then
    Set 使用アイテム選択[コーラ使用] コーラ使用・所持数$(アイテムの数[コーラ])
    EndIf

    Ask 使用アイテム選択 何を食べる?

    Switch 選択

    Case チョココロネ使用
    〜使用した効果〜
    RemoveItem チョココロネ

    Case メロンパン使用
    〜使用した効果〜
    RemoveItem メロンパン

    Case 焼きそばパン使用
    〜使用した効果〜
    RemoveItem 焼きそばパン

    Case オレンジジュース使用
    〜使用した効果〜
    RemoveItem オレンジジュース

    Case ヤクルト使用
    〜使用した効果〜
    RemoveItem ヤクルト

    Case 青汁使用
    〜使用した効果〜
    RemoveItem 青汁

    Case コーラ使用
    〜使用した効果〜
    RemoveItem コーラ

    EndSw

    Unset アイテムの数
    Unset 使用アイテム選択

    Exit


    と、、ここまで頑張りました。

    ですが、、これだと使用できるアイテムが無くてもユニットコマンド・食べるは表示されてしまいます。

    食べれるアイテムが一個も無かった場合は、ユニットコマンド・食べるを表示したくない場合はどうしたら宜しいでしょうか?

    何度も申し訳ございません。
    ご回答の程宜しくお願い申し上げます。
引用返信/返信 削除キー/
■21695 / inTopicNo.4)  Re[3]: 所持数が0個の時は表示しない
□投稿者/ 山水 -(2009/08/18(Tue) 19:41:02) [ID:i8aIm0KI]
    うーむ、0の時はユニットコマンド自体を消去する、ですか。
    では、ClearEventでユニットコマンドイベントを消去したらどうでしょうか。

    戦闘開始前(スタートイベント開始時など)にまず、食べるアイテムの個数確認時と同じ方法で各キャラのアイテム所持数を記録します。
    その後、

    If "アイテムの数[チョココロネ] + アイテムの数[メロンパン] + アイテムの数[次のアイテム、以下略]" = 0 Then
    #アイテム数を全て足し、それが0なら一つも食べれるものが無いはず
    ClearEvent "ユニットコマンド 食べる 味方"
    EndIf

    のようにして、戦闘開始してプレイヤーが行動可能になる前にユニットコマンドを無効化しておけばどうでしょうか。
    ただし、戦闘途中でも食べてしまってアイテム所持数が0になる可能性があるので、アイテム使用後にも同じ方法で確認し、総所持数が0になったらClearEventしなくてはいけません。
    また、戦闘中に食べられるアイテムが増える可能性がある場合(アイテムを追加装備したり、アイテムを所持した味方が増援により加わる場合など)は、その度にRestoreEventでユニットコマンドを復活させることになるでしょう。

    こういったことをするなら、アイテム数を判定する式をまとめてInclude.eveに書いておき、必要に応じて呼び出すのがお勧めですね。

    例によって確認をしていませんので、間違っていましたら申し訳ありません。
    ユニットコマンドもClearEventできまし…た…よね?(汗
引用返信/返信 削除キー/
■21696 / inTopicNo.5)  Re[3]: 所持数が0個の時は表示しない
□投稿者/ 十拳剣 -(2009/08/18(Tue) 20:04:53) [ID:Q868XBH3]
    条件式で
    対象のアイテムの数を合計しそれが一以上なら
    条件式の返答を一にすれば
    いいと思います


引用返信/返信 削除キー/
■21698 / inTopicNo.6)  Re[4]: 所持数が0個の時は表示しない
□投稿者/ ホカロン -(2009/08/19(Wed) 08:37:42) [ID:OoV3qdwy]
    山水様、十拳剣様、ありがとうございます!!
    無事解決いたしました〜!

    ヘルプとにらめっこして、何とかなりました。
    山水様、ClearEvent は、マップコマンドもユニットコマンドも出来るようです。
    ありがとうございます。


    ##########まず、戦闘前に各自のアイテムをチェック

     ForEach 味方 全て
      For i = 1 To CountItem(対象ユニット)
       Incr アイテムの数[Item(対象ユニット,i)]
      Next
     Next
     For i = 1 To CountItem(未装備)
      Incr アイテムの数[Item(未装備,i)]
     Next

    #############ここから

    ユニットコマンド 食べる 味方 IIf(アイテムの数[チョココロネ] + アイテムの数[メロンパン] + アイテムの数[焼きそばパン] + アイテムの数[オレンジジュース] + アイテムの数[ヤクルト] + アイテムの数[青汁] + アイテムの数[コーラ] > 0,1,0):

    If 対象パイロット = 主人公 Then
    この方 = 主人公
    EndIf

    If 対象パイロット = 味方1 Then
    この方 = 味方1
    EndIf

    If 対象パイロット = 味方2 Then
    この方 = 味方2
    EndIf

    Unset アイテムの数

     ForEach 味方 全て
      For i = 1 To CountItem(対象ユニット)
       Incr アイテムの数[Item(対象ユニット,i)]
      Next
     Next
     For i = 1 To CountItem(未装備)
      Incr アイテムの数[Item(未装備,i)]
     Next

    If アイテムの数[チョココロネ] > 0 Then
    Set 使用アイテム選択[チョココロネ使用] チョココロネ使用・所持数$(アイテムの数[チョココロネ])
    EndIf
    If アイテムの数[メロンパン] > 0 Then
    Set 使用アイテム選択[メロンパン使用] メロンパン使用・所持数$(アイテムの数[メロンパン])
    EndIf
    If アイテムの数[焼きそばパン] > 0 Then
    Set 使用アイテム選択[焼きそばパン使用] 焼きそばパン使用・所持数$(アイテムの数[焼きそばパン])
    EndIf
    If アイテムの数[オレンジジュース] > 0 Then
    Set 使用アイテム選択[オレンジジュース使用] オレンジジュース使用・所持数$(アイテムの数[オレンジジュース])
    EndIf
    If アイテムの数[ヤクルト] > 0 Then
    Set 使用アイテム選択[ヤクルト使用] ヤクルト使用・所持数$(アイテムの数[ヤクルト])
    EndIf
    If アイテムの数[青汁] > 0 Then
    Set 使用アイテム選択[青汁使用] 青汁使用・所持数$(アイテムの数[青汁])
    EndIf
    If アイテムの数[コーラ] > 0 Then
    Set 使用アイテム選択[コーラ使用] コーラ使用・所持数$(アイテムの数[コーラ])
    EndIf

    Ask 使用アイテム選択 何を食べる?

    Switch 選択

    Case チョココロネ使用
    〜使用時の効果〜
    RemoveItem チョココロネ
    Incr アイテムの数[チョココロネ] -1

    Case メロンパン使用
    〜使用時の効果〜
    RemoveItem メロンパン
    Incr アイテムの数[メロンパン] -1

    Case 焼きそばパン使用
    〜使用時の効果〜
    RemoveItem 焼きそばパン
    Incr アイテムの数[焼きそばパン] -1

    Case オレンジジュース使用
    〜使用時の効果〜
    RemoveItem オレンジジュース
    Incr アイテムの数[オレンジジュース] -1

    Case ヤクルト使用
    〜使用時の効果〜
    RemoveItem ヤクルト
    Incr アイテムの数[ヤクルト] -1

    Case 青汁使用
    〜使用時の効果〜
    RemoveItem 青汁
    Incr アイテムの数[青汁] -1

    Case コーラ使用
    〜使用時の効果〜
    RemoveItem コーラ
    Incr アイテムの数[コーラ] -1

    EndSw

    Unset 使用アイテム選択

    Exit


    で、問題なく動作済みです。
    ありがとうございました。

    一応解決済みをつけましたが、ここの部分もうちょっと短く出来るYO!
    とかありましたらご指摘宜しくお願い申し上げます。

解決済み!
引用返信/返信 削除キー/
■21699 / inTopicNo.7)  Re[5]: 所持数が0個の時は表示しない
□投稿者/ 中箱 -(2009/08/19(Wed) 10:28:22) [ID:Cvz6iMKe]
    >ここの部分もうちょっと短く出来るYO!

    とのことなので。



    >ユニットコマンド 食べる 味方 IIf(アイテムの数[チョココロネ] + アイテムの数[メロンパン] + アイテムの数[焼きそばパン] + アイテムの数[オレンジジュース] + アイテムの数[ヤクルト] + アイテムの数[青汁] + アイテムの数[コーラ] > 0,1,0):

    ユニットコマンド、マップコマンドは
    >特定の条件を満たしたときにのみマップコマンドを使えるようにするには条件式 conditionを指定します。
    >conditionの値が0でないときにのみコマンドがメニューに表示されます。
    なので、
    この場合は条件式にIIf関数を使う必要はありません

    または、「食べれるアイテム総数」のような変数を作って、あらかじめチョココロネ〜コーラの個数を全部足し合わせた値を入れておくとか。



    >If 対象パイロット = 主人公 Then
    >この方 = 主人公
    >EndIf

    >If 対象パイロット = 味方1 Then
    >この方 = 味方1
    >EndIf

    この対象パイロットに関するIfが続く部分については、
    Ifを続けて書かず、ElseIfで繋いでしまえば良いでしょう。Switchでもいいです。

    もしくは、味方なら誰でも食べるを実行できるのであれば
    ここのIf〜EndIfは全部無くして
     この方 = 対象パイロット
    だけにするとか、
    場合によっては「この方」という変数自体不要かもしれません

    (あと、Exit前に「この方」もUnsetしておきましょう)



    > ForEach 味方 全て
    >  For i = 1 To CountItem(対象ユニット)
    >   Incr アイテムの数[Item(対象ユニット,i)]
    >  Next
    > Next
    > For i = 1 To CountItem(未装備)
    >  Incr アイテムの数[Item(未装備,i)]
    > Next

    戦闘開始前とユニットコマンドイベント中の2回おなじものを書くことになっているので、
    サブルーチンとしてまとめてしまえば短くなります。



    >Set 使用アイテム選択[チョココロネ使用] チョココロネ使用・所持数$(アイテムの数[チョココロネ])
    >Set 使用アイテム選択[メロンパン使用] メロンパン使用・所持数$(アイテムの数[メロンパン])

    使用アイテム選択[]のインデックスをアイテムの数[]のインデックスに合わせておけば、
    Switch外の一箇所で、
     RemoveItem 選択
     Incr アイテムの数[選択] -1
    とすれば済むようになります。



    最後に
    システム変数は「対象ユニット」ではなくて「対象ユニットID」を使いましょう。「対象ユニット」でも大体動きはしますが、正式な変数ではありません。
    ちょっとずつ長くはなりますがまあ
引用返信/返信 削除キー/
■21701 / inTopicNo.8)  Re[5]: 所持数が0個の時は表示しない
□投稿者/ 十拳剣 -(2009/08/19(Wed) 21:03:33) [ID:Q868XBH3]
     星夜雪さんの箱庭ナイトメアに似たようなシステムがあります参考になると思います

     回復アイテムはアイテムではなく変数で作ってもいいと思います
     あと消す方法を教えといてなんですけどコマンドを使用すると『しかし回復アイテムを持ってい』とか出た方が判りやすいかと
引用返信/返信 削除キー/
■21705 / inTopicNo.9)  Re[6]: 所持数が0個の時は表示しない
□投稿者/ ホカロン -(2009/08/21(Fri) 09:33:57) [ID:OoV3qdwy]
    中箱さん、ありがとうございます。
    少し改良して、下記のように短く纏めました。

    十拳剣さん、…確かに、『しかしもっていない!』とか出た方が初心者には解り易いかも…う〜ん、、もうちょっと考えてみます。。
    ありがとうございます。
    ↓↓↓


    ##戦闘前にアイテム計算の処理
    Call アイテム計算

    ユニットコマンド 食べる 味方 食べれる総数:

    ##RecoverHP等でHP回復を擬似的に再現している為、対象パイロットでなく
    ##対象ユニットIDにしました。
    この方 = 対象ユニットID

    Call アイテム計算

    If アイテムの数[チョココロネ] > 0 Then
    Set 使用アイテム選択[チョココロネ] チョココロネ使用・所持数$(アイテムの数[チョココロネ])
    EndIf
    If アイテムの数[メロンパン] > 0 Then
    Set 使用アイテム選択[メロンパン] メロンパン使用・所持数$(アイテムの数[メロンパン])
    EndIf
    If アイテムの数[焼きそばパン] > 0 Then
    Set 使用アイテム選択[焼きそばパン] 焼きそばパン使用・所持数$(アイテムの数[焼きそばパン])
    EndIf
    If アイテムの数[オレンジジュース] > 0 Then
    Set 使用アイテム選択[オレンジジュース] オレンジジュース使用・所持数$(アイテムの数[オレンジジュース])
    EndIf
    If アイテムの数[ヤクルト] > 0 Then
    Set 使用アイテム選択[ヤクルト] ヤクルト使用・所持数$(アイテムの数[ヤクルト])
    EndIf
    If アイテムの数[青汁] > 0 Then
    Set 使用アイテム選択[青汁] 青汁使用・所持数$(アイテムの数[青汁])
    EndIf
    If アイテムの数[コーラ] > 0 Then
    Set 使用アイテム選択[コーラ] コーラ使用・所持数$(アイテムの数[コーラ])
    EndIf

    Ask 使用アイテム選択 何を食べる?

    Switch 選択

    Case チョココロネ
    〜食べたときの処理〜
    RemoveItem 選択
    Incr アイテムの数[選択] -1
    Incr 食べれる総数 -1

    Case メロンパン
    〜食べたときの処理〜
    RemoveItem 選択
    Incr アイテムの数[選択] -
    Incr 食べれる総数 -1

    Case 焼きそばパン
    〜食べたときの処理〜
    RemoveItem 選択
    Incr アイテムの数[選択] -1
    Incr 食べれる総数 -1

    Case オレンジジュース
    〜食べたときの処理〜
    RemoveItem 選択
    Incr アイテムの数[選択] -1
    Incr 食べれる総数 -1

    Case ヤクルト
    〜食べたときの処理〜
    RemoveItem 選択
    Incr アイテムの数[選択] -1
    Incr 食べれる総数 -1

    Case 青汁
    〜食べたときの処理〜
    RemoveItem 選択
    Incr アイテムの数[選択] -1
    Incr 食べれる総数 -1

    Case コーラ
    〜食べたときの処理〜
    RemoveItem 選択
    Incr アイテムの数[選択] -1
    Incr 食べれる総数 -1

    EndSw

    Unset 使用アイテム選択
    Unset この方

    Exit

    ##何度も使うのでインクルにして纏めました。

    アイテム計算:

    Unset アイテムの数
    Unset 食べれる総数

     ForEach 味方 全て
      For i = 1 To CountItem(対象ユニット)
       Incr アイテムの数[Item(対象ユニット,i)]
      Next
     Next
     For i = 1 To CountItem(未装備)
      Incr アイテムの数[Item(未装備,i)]
     Next

    (アイテムの数[チョココロネ] + アイテムの数[メロンパン] + アイテムの数[焼きそばパン] + アイテムの数[オレンジジュース] + アイテムの数[ヤクルト] + アイテムの数[青汁] + アイテムの数[コーラ]) = 食べれる総数

    Return
引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -