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

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

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

■17134 / inTopicNo.1)  式置換が行われず不正が変数が生成される
  
□投稿者/ ロデオマンモス -(2005/08/03(Wed) 21:38:57) [ID:q94kDvM5]
    私はロデオマンモスです。

    ↓イベントデータここから

    プロローグ:
    Talk システム
    変数「$(ビンゴマン(店舗名))の店主」を生成します。
    End
    Global "$(ビンゴマン(店舗名))の店主"
    "$(ビンゴマン(店舗名))の店主" = 残酷なイシス
    If おもちゃ屋「トイザムス」神奈川店の店主 = 残酷なイシス Then
    Talk システム
    変数「$(ビンゴマン(店舗名))の店主」の生成に成功しました。
    End
    Else
    Talk システム
    変数「$(ビンゴマン(店舗名))の店主」の生成に失敗しました。
    End
    EndIf
    GameClear

    スタート:
    GameClear

    ビンゴマン:
    Switch Args(1)
    Case 店舗名
    結果 = "おもちゃ屋「トイザムス」神奈川店"
    Case 取扱商品種別
    結果 = "超可動ゾイド"
    Case 最低売却率
    結果 = 49
    Case 売却幅
    結果 = 26
    Case 分割払い最大回数
    結果 = 12
    Case 分割払い最大金額増加率
    結果 = 10
    Case 倉庫容量
    結果 = 1200
    EndSw
    Return 結果

    ↑イベントデータここまで

    上記のイベントでやりたいことは関数で算出した値を使った変数名の変数の作成です。
    上記のイベントでは「おもちゃ屋「トイザムス」神奈川店の店主」を生成しようとしています。
    なぜか式置換が行われず「"$(ビンゴマン(店舗名))の店主"」という名前の変数を生成しようとしてしまうようです。
    どうすればこの問題は解決できますか?
引用返信/返信 削除キー/
■17135 / inTopicNo.2)  Re[1]: 式置換が行われず不正が変数が生成される
□投稿者/ TomTom -(2005/08/03(Wed) 21:52:32) [ID:M67VB66U]
    TomTomです。

    式置換で直接変数名を指定することは不可能です。Eval関数を使用してください。

    もっとも、GlobalにはEval関数も使用不可能だったような記憶がありますので、
    もっとスマートに(というか基本的なやり方で)
     店舗データ[店舗名]
     店舗データ[店主名]
    というふうに連想配列を使用する方法で、全面的に考え直したほうがよいと思いますが。
引用返信/返信 削除キー/
■17136 / inTopicNo.3)  Re[2]: 式置換が行われず不正が変数が生成される
□投稿者/ ロデオマンモス -(2005/08/03(Wed) 22:18:17) [ID:q94kDvM5]
    私はロデオマンモスです。

    とりあえずお店のデータはその方法で行きます。

    しかし、私がやろうとしているのはアイテムデータの管理です。
    複数のグローバル変数(これらはすべて配列変数にする予定です)を生成して、
    その中の値でアイテムの管理を行おうと思っているのです。
    実際には変数に値を入れる処理は必要ないのですが、
    変数がちゃんと生成されているかどうかを確認するために処理をしています。

    私がやりたいのはこういうことです。

    ・X=1
    ・X=10
    ・X=100

    これが親記事の「ビンゴマン」というサブルーチンになります。

    実際の変数の作成処理は

    Global Xの位

    という形で行い、

    結果として

    1の位
    10の位
    100の位

    というグローバル変数を生成し、さらに、

    1の位[1]
    1の位[2]
    1の位[3]
    10の位[1]
    10の位[2]
    10の位[3]
    100の位[1]
    100の位[2]
    100の位[3]

    という配列変数に値を代入します。

    こういった処理は作成可能でしょうか。

引用返信/返信 削除キー/
■17137 / inTopicNo.4)  Re[3]: 式置換が行われず不正が変数が生成される
□投稿者/ TomTom -(2005/08/03(Wed) 22:59:02) [ID:M67VB66U]
    TomTomです。

    正直なところ何がしたいのかまったくわかりませんが、
    多次元配列じゃだめなんですか?

     価格[1の位, 1]
     価格[1の位, 2]
     価格[1の位, 3]
     価格[10の位, 1]
      ……

    このような形です。
引用返信/返信 削除キー/
■17138 / inTopicNo.5)  Re[4]: 式置換が行われず不正が変数が生成される
□投稿者/ ロデオマンモス -(2005/08/04(Thu) 01:10:11) [ID:q94kDvM5]
    私はロデオマンモスです。

    開発版のArrayコマンドを使えば多次元配列でもよさそうです。

    但し、現状の安定版ではそのようなことはできません。

    多次元配列のインデックスをリストとして扱うことができないからです。

    開発版が安定版になったらその方法を使用しますが、
    現状では多次元配列は使いません。

    現状でもできる方法を教えてください。
引用返信/返信 削除キー/
■17139 / inTopicNo.6)  Re[5]: 式置換が行われず不正が変数が生成される
□投稿者/ TomTom -(2005/08/04(Thu) 08:45:23) [ID:JVLcDIFR]
    何がしたいのか具体例が全く無いため、何を仰っているのか理解できません。

    配列のインデックスをリストとして扱うこととArrayコマンドを使用することの関連性が見えませんし、
    (Arrayはリスト形式や特定の文字で区切られた文字列を配列変数に変換するためのもので、インデックスがどうこう、といったことには無関係です)
    そもそもリストとして扱うなら、どうしても加工の必要があるのですから、その手間の問題だけでしょう。
    (それ以前に数値の位ごとに変数を分けて保存する意味も分かりませんが)

    前に言ったようにGlobalでEval関数も含めて式置換で変数名を指定することは不可能です。
    多次元配列で出来ないというなら、潔く諦めてください。

引用返信/返信 削除キー/
■17141 / inTopicNo.7)  私がやりたいこと
□投稿者/ ロデオマンモス -(2005/08/04(Thu) 20:32:26) [ID:q94kDvM5]
    私はロデオマンモスです。

    ↓サブルーチンコールここから

    ItemMaking ドラゴンシールド 生成 6 賞味期限照合用時間データ データタイプ
    ItemMaking ビッグシールド 生成 6 賞味期限照合用時間データ データタイプ
    ItemMaking ドラゴンシールド 生成 6 賞味期限照合用時間データ データタイプ
    ItemMaking ビッグシールド 生成 6 賞味期限照合用時間データ データタイプ
    ItemMaking ドラゴンシールド 生成 6 賞味期限照合用時間データ データタイプ

    ItemMaking セイントスティック 装備 渡瀬和人 賞味期限照合用時間データ データタイプ

    ↑サブルーチンコールここまで

    ↓サブルーチンここから

    ItemMaking:
    Local Eval("$(Args(1))のIDナンバー前回最終値")
    Eval("$(Args(1))のIDナンバー前回最終値") = Eval("$(Args(1))のIDナンバー")
    Switch Args(2)
    Case 装備
     Item Args(1)
     Equip Args(3) Args(1)
     Eval("$(Args(1))のIDナンバー修正値") = 1
     Eval("$(Args(1))装備状況[$(Eval("$(Args(1))のIDナンバー前回最終値") + 1)]") = Args(3)
     If Args(4) <> 時間データ無し Then
      Eval("$(Args(1))生成時期[$(Eval("$(Args(1))のIDナンバー前回最終値") + 1)]") = Args(4)
      If Call(アイテム詳細情報,Args(1),賞味期限) <> 0 Then
       Eval("$(Args(1))賞味期限[$(Eval("$(Args(1))のIDナンバー前回最終値") + 1)]") = (Args(4) + Call(アイテム詳細情報,Args(1),賞味期限))
      EndIf
     EndIf
     Eval("$(Args(1))生成システムタイプ[$(Eval("$(Args(1))のIDナンバー前回最終値") + 1)]") = Args(5)
     Eval("$(Args(1))存在状況[$(Eval("$(Args(1))のIDナンバー前回最終値") + 1)]") = 入手
    Case 生成
     Eval("$(Args(1))のIDナンバー修正値") = Args(3)
     For アイテム生成数 = 1 To Args(3)
      Item Args(1)
      Eval("$(Args(1))装備状況[$(Eval("$(Args(1))のIDナンバー前回最終値") + アイテム生成数)]") = 未装備
      If Args(4) <> 時間データ無し Then
       Eval("$(Args(1))生成時期[$(Eval("$(Args(1))のIDナンバー前回最終値") + アイテム生成数)]") = Args(4)
       If Call(アイテム詳細情報,Args(1),賞味期限) <> 0 Then
    Eval("$(Args(1))賞味期限[$(Eval("$(Args(1))のIDナンバー前回最終値") + アイテム生成数)]") = (Args(4) + Call(アイテム詳細情報,Args(1),賞味期限))
       EndIf
      EndIf
      Eval("$(Args(1))生成システムタイプ[$(Eval("$(Args(1))のIDナンバー前回最終値") + アイテム生成数)]") = Args(5)
      Eval("$(Args(1))存在状況[$(Eval("$(Args(1))のIDナンバー前回最終値") + アイテム生成数)]") = 入手
     Next
    EndSw
    Eval("$(Args(1))のIDナンバー") = Eval("$(Args(1))のIDナンバー前回最終値") + Eval("$(Args(1))のIDナンバー修正値")
    Return

    ↑サブルーチンここまで

    上記のイベント処理は例の配列型グローバル変数を実際に使用する部分です。
    このサブルーチンで実際に使用するのは、

    ・「〜のIDナンバー」
    ・「〜装備状況」
    ・「〜生成時期」
    ・「〜存在状況」
    ・「〜生成システムタイプ」
    ・「〜賞味期限」

    という配列型グローバル変数で、「〜」の部分にはサブルーチンコールで指定したアイテム名が入ります。
    アイテム名は1番目の引数で指定しています。

    実際に配列型グローバル変数を生成する際にForコマンドを使っています。
    このコマンドでアイテムデータを扱えるようにアイテムに番号を振りました。
    その処理はこちらです。この処理を実行する際にエラーが発生します。

    ↓処理ここから

    For アイテム管理番号 = 1 To 699
     If アイテム名算出(アイテム管理番号) = 該当アイテム無し Then
      Skip
     EndIf
     Talk システム
     $(アイテム名算出(アイテム管理番号))のデータを生成中
     End
     Global Eval("$(アイテム名算出(アイテム管理番号))のIDナンバー")
     Global Eval("$(アイテム名算出(アイテム管理番号))装備状況")
     Global Eval("$(アイテム名算出(アイテム管理番号))生成時期")
     Global Eval("$(アイテム名算出(アイテム管理番号))存在状況")
     Global Eval("$(アイテム名算出(アイテム管理番号))生成システムタイプ")
     Global Eval("$(アイテム名算出(アイテム管理番号))賞味期限")
    Next

    ↑処理ここまで

    実際のアイテム生成処理では他にいくつかのサブルーチンをコールしていますが、長いので省略します。
    とりあえずこれらのサブルーチンコールは正常動作しています。

    実際に一番上のサブルーチンコールが実行された場合、下記の変数が生成されるはずです。

    ・「ドラゴンシールドのIDナンバー」
    ・「ドラゴンシールド装備状況」
    ・「ドラゴンシールド生成時期」
    ・「ドラゴンシールド存在状況」
    ・「ドラゴンシールド生成システムタイプ」
    ・「ドラゴンシールド賞味期限」

    以上の配列変数のインデックスは1〜18までです。
    この処理で108個の変数が生成されます。

    ・「ビッグシールドのIDナンバー」
    ・「ビッグシールド装備状況」
    ・「ビッグシールド生成時期」
    ・「ビッグシールド存在状況」
    ・「ビッグシールド生成システムタイプ」
    ・「ビッグシールド賞味期限」

    以上の配列変数のインデックスは1〜12までです。
    この処理で72個の変数が生成されます。

    ・「セイントスティックのIDナンバー」
    ・「セイントスティック装備状況」
    ・「セイントスティック生成時期」
    ・「セイントスティック存在状況」
    ・「セイントスティック生成システムタイプ」
    ・「セイントスティック賞味期限」

    以上の配列変数のインデックスは1だけです。
    この処理で6個の変数が生成されます。

    長くてごめんなさい。

引用返信/返信 削除キー/
■17142 / inTopicNo.8)  Re[7]: 私がやりたいこと
□投稿者/ TomTom -(2005/08/04(Thu) 20:48:09) [ID:M67VB66U]
    ざっと見た感じ、多次元配列で困る理由は見当たりません。

    アイテム情報[ドラゴンシールド, 装備状況, 1]
    アイテム情報[ドラゴンシールド, 装備状況, 2]
    アイテム情報[ドラゴンシールド, 装備状況, 3]
    アイテム情報[ドラゴンシールド, 生成時期, 1]
    アイテム情報[ドラゴンシールド, 生成時期, 2]
     ……

    このような変数の設定の仕方をすれば、何も問題は無いはずです。

    何度も言うようにGlobalで指定する変数名に式置換は使えないのですから、
    多次元配列変数で処理できるように設計からやり直すか、処理そのものをあきらめてください。

    なお、これ以上何度やり取りをしようがこの返答は変わりませんので、ご了承ください。
引用返信/返信 削除キー/
■17146 / inTopicNo.9)  Re[8]: 私がやりたいこと
□投稿者/ ロデオマンモス -(2005/08/05(Fri) 00:34:20) [ID:q94kDvM5]
    私はロデオマンモスです。

    ↓処理ここから

    ItemMaking:
    Local Eval("$(Args(1))のIDナンバー前回最終値")
    If IsVarDefined(Eval("IDナンバー[$(Args(1))]")) = 1 Then
    Eval("$(Args(1))のIDナンバー前回最終値") = Eval("IDナンバー[$(Args(1))]")
    Else
    Eval("$(Args(1))のIDナンバー前回最終値") = 0
    EndIf
    Switch Args(2)
    Case 装備
    Item Args(1)
    Equip Args(3) Args(1)
    Eval("$(Args(1))のIDナンバー修正値") = 1
    Eval("アイテム情報[Args(1),IDナンバー,$(Eval("$(Args(1))のIDナンバー前回最終値") + 1)]") = Eval("$(Args(1))のIDナンバー前回最終値")
    Eval("アイテム情報[Args(1),装備状況,$(Eval("$(Args(1))のIDナンバー前回最終値") + 1)]") = Args(3)
    If Args(4) <> 時間データ無し Then
    Eval("アイテム情報[Args(1),生成時期,$(Eval("$(Args(1))のIDナンバー前回最終値") + 1)]") = Args(4)
    If Call(アイテム詳細情報,Args(1),賞味期限) <> 0 Then
    Eval("アイテム情報[Args(1),賞味期限,$(Eval("$(Args(1))のIDナンバー前回最終値") + 1)]") = (Args(4) + Call(アイテム詳細情報,Args(1),賞味期限))
    EndIf
    EndIf
    Eval("アイテム情報[Args(1),生成先データタイプ,$(Eval("$(Args(1))のIDナンバー前回最終値") + 1)]") = Args(5)
    Eval("アイテム情報[Args(1),存在状況,$(Eval("$(Args(1))のIDナンバー前回最終値") + 1)]") = 入手
    Case 生成
    Eval("$(Args(1))のIDナンバー修正値") = Args(3)
    For アイテム生成数 = 1 To Args(3)
    Item Args(1)
    Eval("アイテム情報[Args(1),IDナンバー,$(Eval("$(Args(1))のIDナンバー前回最終値") + アイテム生成数)]") = Eval("$(Args(1))のIDナンバー前回最終値")
    Eval("アイテム情報[Args(1),装備状況,$(Eval("$(Args(1))のIDナンバー前回最終値") + アイテム生成数)]") = 未装備
    If Args(4) <> 時間データ無し Then
    Eval("アイテム情報[Args(1),生成時期,$(Eval("$(Args(1))のIDナンバー前回最終値") + アイテム生成数)]") = Args(4)
    If Call(アイテム詳細情報,Args(1),賞味期限) <> 0 Then
    Eval("アイテム情報[Args(1),賞味期限,$(Eval("$(Args(1))のIDナンバー前回最終値") + アイテム生成数)]") = (Args(4) + Call(アイテム詳細情報,Args(1),賞味期限))
    EndIf
    EndIf
    Eval("アイテム情報[Args(1),生成先データタイプ,$(Eval("$(Args(1))のIDナンバー前回最終値") + アイテム生成数)]") = Args(5)
    Eval("アイテム情報[Args(1),存在状況,$(Eval("$(Args(1))のIDナンバー前回最終値") + アイテム生成数)]") = 入手
    Next
    EndSw
    Eval("IDナンバー[$(Args(1))]") = Eval("$(Args(1))のIDナンバー前回最終値") + Eval("$(Args(1))のIDナンバー修正値")
    Return

    ↑処理ここまで

    改良後の処理ですが、
    式置換が行われず「Eval("$(Args(1))のIDナンバー前回最終値")」が不正だと言われてしまいます。
    どうすればいいのでしょうか。
    多次元配列を使おうにもやはりArgs関数は必要なわけです。
    そしてIDも変数で管理してやらないといけません。
    「式置換が行われない」ということ自体がバグに思えてなりません。

引用返信/返信 削除キー/
■17147 / inTopicNo.10)  Re[9]: 私がやりたいこと
□投稿者/ TomTom -(2005/08/05(Fri) 00:49:12) [ID:M67VB66U]
    Localでも式置換は使用不可能です。
    というか、わざわざ引数の内容によって変数を変えなくても、
    単に「IDナンバー前回最終値」だけで十分だと思うのですが。

    ところで配列変数の使い方を全然理解していないように見えるのは気のせいですか?
    たとえば
     Eval("IDナンバー[$(Args(1))]")
    このような記述をしなくても
     IDナンバー[Args(1)]
    これで十分です。むしろEval関数を使用するほうが不具合・速度低下の元でしょう。
    多次元配列を使用して書き直したのなら、Eval関数は *ひとつも* 使用する必要はありません。

    また、余談ですが、
    >式置換が行われず「Eval("$(Args(1))のIDナンバー前回最終値")」が不正だと言われてしまいます。
    エラーが発生する場合は、エラーの位置も正確に伝えてください。
    報告の基本です。
引用返信/返信 削除キー/
■17150 / inTopicNo.11)  Re[10]: 私がやりたいこと
□投稿者/ ロデオマンモス -(2005/08/05(Fri) 04:02:39) [ID:q94kDvM5]
    私はロデオマンモスです。

    TomTomさんのおかげでなんとかなりました。

    TomTomさん、ありがとうございました。
解決済み!
引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -