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

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

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

■21710 / inTopicNo.1)  アイテムを売りたい
  
□投稿者/ ホカロン -(2009/08/25(Tue) 07:16:58) [ID:OoV3qdwy]
    お疲れ様です。
    いつもお世話になっております。

    アイテムショップについてなのですが、アイテムを買う事は出来ずに売る事のみ出切るtalkコマンドとAskコマンドによる簡易ショップを作ろうと思ってるのですが…

    上手く動いてくれません。
    どこが原因なのか、解る方ご指導よろしくお願いいたします。

    ↓↓↓

    売却専用ショップ:

    Unset アイテムの名前

    #####################アイテムの名前をここで配列に格納してるつもり…

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

    #####################イベント上、売ったら進まない重要な物をここで外す

    Unset アイテムの名前[○○イベント用]
    Unset アイテムの名前[△△イベント用]

    Ask アイテムの名前 何を売るの?

    If アイテムの名前[選択] = "" Then
    Talk 店員
    売れるアイテムが無いようですね――
    End
     Goto 戻る
    EndIf

    Switch 選択
    Case ■■ △▽ ●●

    Talk 店員
    これは―――――
    高級品ですので、値段が付けられません。;買取不能です。
    End
     Goto 戻る

    #####################効果の強い(すごく使える)アイテムも売れなくする

    Case ○□
    Talk 店員
    $(アイテムの名前[選択])は○○円です。
    End
    Ask 本当に売りますか?
     売る
     やっぱりやめる
     End
     Switch 選択
     Case 1
       サウンド 回復
    RemoveItem アイテムの名前[選択]
       Talk システム
       毎度有難うございました
       End
       Money 売却価格
        goto 戻る
    Case 2
     Goto 戻る
    EndSw
     Endsw
    Goto 売却専用ショップ
    Exit

引用返信/返信 削除キー/
■21711 / inTopicNo.2)  Re[1]: アイテムを売りたい
□投稿者/ Mr -(2009/08/25(Tue) 09:45:48) [ID:CDjibs1Z]
    まず始めに、アイテム総数を出す関数はItem()ではなくCountItem()です。

    次に、配列の使い方が違います。
    配列とは、一言で言えば「本」です。(まあクリアファイルとかでも良いんですが)
    配列名[インデックス] の形となっています。
    ここで言うインデックスとはページ数のことです。

    具体例で書けば、
    Set アイテムの名前[一つ目] ブースター
    とした場合、
    「アイテムの名前」という本の「一つ目」というページに「ブースター」と書き込む、ということになります。

    ですから、
    Set アイテムの名前[Item(対象ユニットID,i)]
    と書くのではなく、
    Set アイテムの名前[1] Item(対象ユニットID,i)
    と、[]の中にはページ数を指定してあげましょう(例なので「1」と書きましたが、カウント用の変数を使うなどして、適宜増やしましょう)

引用返信/返信 削除キー/
■21713 / inTopicNo.3)  Re[2]: アイテムを売りたい
□投稿者/ ホカロン -(2009/08/26(Wed) 09:56:51) [ID:OoV3qdwy]
http://少し困った事が…
    Mr 様のご指摘を受けまして、下記のように変えました。
    ただ一つ困った事が…

    unsetしてるにも関わらず、シナリオ上全員に装備させている売っちゃいけない非表示のアイテムまで売れてしまいます。
    unsetの方法を色々変えて頑張って見たんですが…
    解る方、ご指摘お願いいたします。

    ↓↓↓


    売却専用ショップ:

    Unset アイテムの名前

    #####################アイテムの名前をここで配列に格納してるつもり…


    Unset アイテムの名前
    これだ = 0

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

    #####################イベント上、売ったら進まない重要な物をここで外してるのに売れてしまう

    Unset アイテムの名前[○○イベント用]
    Unset アイテムの名前[△△イベント用]

    #####################方法その@

    Unset アイテムの名前[これだ] ○○イベント用

    #####################方法そのA

    Ask アイテムの名前 何を売るの?

    If アイテムの名前[選択] = "" Then
    Talk 店員
    売れるアイテムが無いようですね――
    End
     Goto 戻る
    EndIf

    Switch 選択
    Case ■■ △▽ ●●

    Talk 店員
    これは―――――
    高級品ですので、値段が付けられません。;買取不能です。
    End
     Goto 戻る

    #####################効果の強い(すごく使える)アイテムも売れなくする

    Case ○□
    Talk 店員
    $(アイテムの名前[選択])は○○円です。
    End
    Ask 本当に売りますか?
     売る
     やっぱりやめる
     End
     Switch 選択
     Case 1
       サウンド 回復
    RemoveItem アイテムの名前[選択]
       Talk システム
       毎度有難うございました
       End
       Money 売却価格
        goto 戻る
    Case 2
     Goto 戻る
    EndSw
     Endsw
    Goto 売却専用ショップ
    Exit

引用返信/返信 削除キー/
■21715 / inTopicNo.4)  Re[3]: アイテムを売りたい
□投稿者/ Mr -(2009/08/26(Wed) 19:03:35) [ID:i5S9sUuV]
    一番簡単な解決方法は「いらないものは最初から入れない」ということでしょう。
    リストに入れる処理ではForコマンドを使っているのですから、Setする前に、
    「いらないものだったらSkipコマンド」という処理を加えてやれば済むことです。

    上の解決方法とはあまり関係ないですが、Unsetについて。
    >Unset アイテムの名前[これだ] ○○イベント用
    この行を日本語で例えつつ書くと、
    破り捨てる 「アイテムの名前」と言う本 「これだ」ページ ○○イベント用
    と、最後の「○○イベント用」が意味不明になってしまいます。
    おそらくホカロンさんがやりたかったのは、
    『「○○イベント用」と書いてあるページを破り捨てる』
    だと思います。
    それをやろうと思った場合、
    『1ページずつめくって行って、「○○イベント用」と書いてあるページがあったら破り捨てる』
    という記述をしなければなりません。
    ですから、イベントコマンドは以下のように記述する必要があります。

    # 配列「アイテムの名前」を片っ端から全部覗く
    ForEach index In アイテムの名前
     # 「○○イベント用」なら削除する
     If "○○イベント用" = アイテムの名前[index] Then
      Unset アイテムの名前[index]
     EndIf
    Next

    ForEachコマンドは配列を使う上で非常に便利なコマンドですので、使い方を覚えておくと良いでしょう。

    今回は「いらないページは作らない」方向で行ったほうが良いと思います。
引用返信/返信 削除キー/
■21717 / inTopicNo.5)  Re[4]: アイテムを売りたい
□投稿者/ ホカロン -(2009/08/26(Wed) 21:59:49) [ID:OoV3qdwy]
http://少し困った事が…
    Mr様
    ご指摘ありがとうございます。

    アドバイス通り、Skipコマンドを使ったら、イベントで必要なアイテムは省かれました。
    良かったです。


    ですが、、新たに二つ問題が。
    『ユニットが装備しているアイテムしか売却リストに入らない』のと、
    『複数アイテムを持っていて全部売る場合、最後に売ったアイテムだけなぜかリストに残ったままで、無いのに無限に売れる』

    …というものです。
    何が原因か、かれこれ6時間位色々やってみましたが、
    全く解決の糸口も見えませんでしたので、再度解る方、お願い致します。


    ↓↓↓

    売却専用ショップ:

    Unset アイテムの名前
    これだ = 0

    #####################アイテムの名前をここで配列に格納してるつもり…

     ForEach 味方 全て
      For i = 1 To CountItem(対象ユニットID)
    If Item(対象ユニットID,i) = ○○イベント用 Then
    Skip
    EndIf
       Set アイテムの名前[これだ] Item(対象ユニットID,i)
    Incr これだ
      Next
      Next
     ForEach 味方 全て
     For i = 1 To CountItem(未装備)
    If Item(対象ユニットID,i) = ○○イベント用 Then
    Skip
    EndIf
      Set アイテムの名前[これだ] Item(対象ユニットID,i)
    Incr これだ
     Next
     Next

    Ask アイテムの名前 何を売るの?

    If アイテムの名前[選択] = "" Then
    Talk 店員
    売れるアイテムが無いようですね――
    End
     Goto 戻る
    EndIf

    Switch 選択

    #####################効果の強い(すごく使える)アイテムも売れなくする
    Case ■■ △▽ ●●

    Talk 店員
    これは―――――
    高級品ですので、値段が付けられません。;買取不能です。
    End
     Goto 戻る

    Case else
    Call 売却価格算出
    Talk 店員
    $(アイテムの名前[選択])は$(売却価格)円です。
    End

    Ask 本当に売りますか?
     売る
     やっぱりやめる
     End
     Switch 選択
     Case 1
    RemoveItem アイテムの名前[選択]
       Talk システム
       毎度有難うございました
       End
       Money 売却価格
     Goto 戻る
    Case 2
     Goto 戻る
    EndSw
     Endsw
    Goto 売却専用ショップ
    Exit


引用返信/返信 削除キー/
■21718 / inTopicNo.6)  Re[5]: アイテムを売りたい
□投稿者/ Mr -(2009/08/27(Thu) 02:42:01) [ID:i5S9sUuV]
    1.装備していないアイテムが取得できない
    下が、アイテム名を配列に格納している部分です。読みずらいので字下げ調整しました。

     ForEach 味方 全て
      For i = 1 To CountItem(対象ユニットID)
       If Item(対象ユニットID,i) = ○○イベント用 Then
        Skip
       EndIf
       Set アイテムの名前[これだ] Item(対象ユニットID,i)
       Incr これだ
      Next
     Next

     ForEach 味方 全て
      For i = 1 To CountItem(未装備)
       If Item(対象ユニットID,i) = ○○イベント用 Then
        Skip
       EndIf
       Set アイテムの名前[これだ] Item(対象ユニットID,i)
       Incr これだ
      Next
     Next

    途中で一行開いていますが、『上』で全ユニットの装備しているアイテムを取得し、
    『下』で誰も装備していないアイテムを取得しようとされています。(のだと思います)

    さて、まずおかしいのが、何故か下でForEachを使っていることです。
    このForEachは完全に不要です。なんとなくでイベントコマンドを配置してしまうと訳分からないことになりますので気をつけましょう。
    ただし、今回の「誰も装備していないアイテムがリストに入らない」ことの原因はその下にあります。

    >If Item(対象ユニットID,i) = ○○イベント用 Then
    >Set アイテムの名前[これだ] Item(対象ユニットID,i)

    この二行、誰も装備していないアイテムを取得するはずのに、何故か「対象ユニットID」が出てきています。
    つまり、『Item関数の使い方が間違っています』。ヘルプをもう一度読んでみてください。


    2.アイテムがなくならずいくらでも売れる
    >RemoveItem アイテムの名前[選択]
    の上のAskコマンド(売るか確認しているもの)で、「選択」が更新されてしまっているからです。
    一回目のAskコマンドの結果を記憶しておく必要があります。
引用返信/返信 削除キー/
■21719 / inTopicNo.7)  Re[6]: アイテムを売りたい
□投稿者/ ホカロン -(2009/08/28(Fri) 15:23:48) [ID:OoV3qdwy]
    2009/08/28(Fri) 15:24:18 編集(投稿者)
    2009/08/28(Fri) 15:24:12 編集(投稿者)

    Mr様、ありがとうございます!!!!!
    解決いたしました。

    Mr様のご指摘通り、ForEachはいらなかったです(汗)
    これだと、『皆が持っていないアイテムをみんなの持ち物から調べる』という
    ワケの解らない記述?になっておりました。。(汗)

    CountItem(未装備) と、 Item(未装備,i) で記述するべきでした。
    ありがとうございます。


    あと、Askを重ねると選択が更新される、というのもご指摘を受けて気付いて
    納得です。
    なるほど、選択はあくまで変数なので、更新されてしまうんですね。。orz

    それを踏まえて、直したら正常に動作しました。
    本当にありがとうございました!!!

    ↓↓↓


    売却専用ショップ:

    Unset アイテムの名前
    これだ = 0

    #####################アイテムの名前をここで配列に格納してるつもり…

     ForEach 味方 全て
      For i = 1 To CountItem(対象ユニットID)
    If Item(対象ユニットID,i) = ○○イベント用 Then
    Skip
    EndIf
       Set アイテムの名前[これだ] Item(対象ユニットID,i)
    Incr これだ
      Next
      Next

     For i = 1 To CountItem(未装備)
    If Item(未装備,i) = ○○イベント用 Then
    Skip
    EndIf
      Set アイテムの名前[これだ] Item(未装備,i)
    Incr これだ
     Next

    Ask アイテムの名前 何を売るの?

    If アイテムの名前[選択] = "" Then
    Talk 店員
    売れるアイテムが無いようですね――
    End
     Goto 戻る
    EndIf

    Switch 選択

    #####################効果の強い(すごく使える)アイテムも売れなくする
    Case ■■ △▽ ●●

    Talk 店員
    これは―――――
    高級品ですので、値段が付けられません。;買取不能です。
    End
     Goto 戻る

    Case else
    Call 売却価格算出

    Set これだよ アイテムの名前[選択]

    Talk 店員
    $(アイテムの名前[選択])は$(売却価格)円です。
    End

    Ask 本当に売りますか?
     売る
     やっぱりやめる
     End
     Switch 選択
     Case 1
    RemoveItem これだよ
       Talk システム
       毎度有難うございました
       End
       Money 売却価格
     Goto 戻る
    Case 2
     Goto 戻る
    EndSw
     Endsw
    Goto 売却専用ショップ
    Exit


解決済み!
引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -